CHANGELOG RoundCube Webmail
---------------------------
+- Added option to disable autocompletion from selected LDAP address books (#1484922)
+- TLS support in LDAP connections: 'use_tls' property (#1485104)
+- Fixed removing messages from search set after deleting them (#1485106)
+- imap.inc: Fixed iil_C_FetchStructureString() to handle many
+ literal strings in response (#1484969)
+- Support for subfolders in default/protected folders (#1484665)
+- Disallowed delimiter in folder name (#1484803)
+- Support " and \ in folder names
+- Escape \ in login (#1484614)
+- Better HTML sanitization with the DOM-based washtml script (#1484701)
+- Fixed sorting of folders with non-ascii characters
+- Fixed Mysql DDL for default identities creation (#1485070)
+- In Preferences added possibility to configure 'read_when_deleted',
+ 'mdn_requests', 'flag_for_deletion' options
+- Made IMAP auth type configurable (#1483825)
+- Fixed empty values with FROM_UNIXTIME() in rcube_mdb2 (#1485055)
+- Fixed attachment list on IE 6/7 (#1484807)
+- Fixed JavaScript in compose.html that shows cc/bcc fields if populated
+- Make password input fields of type password in installer (#1484886)
+- Don't attempt to delete cache entries if enable_caching is FALSE (#1485051)
+- Optimized messages sorting on servers without sort capability (#1485049)
+- Corrected message headers decoding when charset isn't specified and improved
+ support for native languages (#1485050, #1485048)
+- Expanded LDAP configuration options to support LDAP server writes.
+- Installer: encode special characters in DB username/password (#1485042)
+- Fixed management of folders with national characters in names (#1485036, #1485001)
+- Fixed identities saving when using MDB2 pgsql driver (#1485032)
+- Fixed BCC header reset (#1484997)
+- Improved messages list performance - patch from Justin Heesemann
+- Append skin_path to images location only when it starts with '/' sign (#1484859)
+- Fix IMAP response in message body when message has no body (#1484964)
+- Fixed non-RFC dates formatting (#1484901)
+- Fixed typo in set_charset() (#1484991)
+- Decode entities when inserting HTML signature to plain text message (#1484990)
+- HTML editing is now working with PHP5 updates and TinyMCE v3.0.6
+- Fixed signature loading on Windows (#1484545)
+- Added language support to HTML editing (#1484862)
+- Fixed remove signature when replying (#1333167)
+- Fixed problem with line with a space at the end (#1484916)
+- Fixed <!DOCTYPE> tag filtering (#1484391)
+- Fixed <?xml> tag filtering (#1484403)
+- Added sections (fieldset+label) in Settings interface
+- Mark as read in one action with message preview (#1484972)
+- Deleted redundant quota reads (#1484972)
+- Added options for empty trash and expunge inbox on logout (#1483863)
+- Removed lines wrapping when displaying message
+- Fixed month localization
+- Changed codebase to PHP5 with autoloader
+
+RELEASE 0.1.1
+
- Clear selection when selecting single item (#1484942)
- Remove hard-coded image size in skin templates (#1484893)
- Database schema improvements (dropped unnecessary indexes)
* The Apache or Lighttpd Webserver
* .htaccess support allowing overrides for DirectoryIndex
-* PHP Version 4.3.1 or greater including
+* PHP Version 5.2 or greater including
- PCRE (perl compatible regular expression)
- Libiconv
- Multibyte String (mbstring)
RoundCube Webmail (http://roundcube.net)
-
+=================
Introduction:
-------------
already have a corresponding entry in the user's table (username and hostname)
will be allowed.
+Read more at http://trac.roundcube.net/wiki/Howto_Config
+and http://trac.roundcube.net/wiki/Dev_Docs
+
Contact:
--------
`user_id` int(10) unsigned NOT NULL default '0',
`del` tinyint(1) NOT NULL default '0',
`standard` tinyint(1) NOT NULL default '0',
- `name` varchar(128) NOT NULL default '',
+ `name` varchar(128) NOT NULL,
`organization` varchar(128) NOT NULL default '',
- `email` varchar(128) NOT NULL default '',
+ `email` varchar(128) NOT NULL,
`reply-to` varchar(128) NOT NULL default '',
`bcc` varchar(128) NOT NULL default '',
- `signature` text NOT NULL,
+ `signature` text NOT NULL default '',
`html_signature` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`identity_id`),
KEY `user_id` (`user_id`)
`last_login` datetime NOT NULL default '0000-00-00 00:00:00',
`language` varchar(5) NOT NULL default 'en',
`preferences` text,
- PRIMARY KEY (`user_id`)
+ PRIMARY KEY (`user_id`),
+ INDEX `username_index` (`username`),
+ INDEX `alias_index` (`alias`)
);
-- --------------------------------------------------------
ALTER TABLE `messages`
DROP INDEX `idx`,
- DROP INDEX `uid`
+ DROP INDEX `uid`;
ALTER TABLE `cache`
DROP INDEX `cache_key`,
ALTER TABLE `users`
ADD INDEX `username_index` (`username`),
ADD INDEX `alias_index` (`alias`);
+
+-- Updates from version 0.1.1
+
+ALTER TABLE `identities`
+ MODIFY `signature` text NOT NULL DEFAULT '',
+ MODIFY `bcc` varchar(128) NOT NULL DEFAULT '',
+ MODIFY `reply-to` varchar(128) NOT NULL DEFAULT '',
+ MODIFY `organization` varchar(128) NOT NULL DEFAULT '',
+ MODIFY `name` varchar(128) NOT NULL,
+ MODIFY `email` varchar(128) NOT NULL;
`del` tinyint(1) NOT NULL DEFAULT '0',
`standard` tinyint(1) NOT NULL DEFAULT '0',
`name` varchar(128) NOT NULL,
- `organization` varchar(128) NOT NULL,
+ `organization` varchar(128) NOT NULL DEFAULT '',
`email` varchar(128) NOT NULL,
- `reply-to` varchar(128) NOT NULL,
- `bcc` varchar(128) NOT NULL,
- `signature` text NOT NULL,
+ `reply-to` varchar(128) NOT NULL DEFAULT '',
+ `bcc` varchar(128) NOT NULL DEFAULT '',
+ `signature` text NOT NULL DEFAULT '',
`html_signature` tinyint(1) NOT NULL DEFAULT '0',
`user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY(`identity_id`),
preferences text DEFAULT ''::text NOT NULL
);
+CREATE INDEX users_username_id_idx ON users (username);
+CREATE INDEX users_alias_id_idx ON users (alias);
+
--
-- Table "session"
-- Name: session; Type: TABLE; Schema: public; Owner: postgres
CREATE INDEX contacts_user_id_idx ON contacts (user_id);
CREATE INDEX identities_user_id_idx ON identities (user_id);
+CREATE INDEX users_username_id_idx ON users (username);
+CREATE INDEX users_alias_id_idx ON users (alias);
+
-- added ON DELETE/UPDATE actions
ALTER TABLE messages DROP CONSTRAINT messages_user_id_fkey;
ALTER TABLE messages ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE;
preferences text NOT NULL default ''
);
+CREATE INDEX ix_users_username ON users(username);
+CREATE INDEX ix_users_alias ON users(alias);
+
-- --------------------------------------------------------
--
);
CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid);
+
+CREATE INDEX ix_users_username ON users(username);
+CREATE INDEX ix_users_alias ON users(alias);
UPDATE instructions
===================
-Follow these instructions if upgrading from a previous version
+First you should remove all subfolders from /program/localization/
+because most language codes have changed in 0.2-alpha. This way you
+can make sure that no old localization files remain on your disk.
+
+Then follow these instructions if upgrading from a previous version
of RoundCube Webmail.
+from version 0.1.1
+----------------------------------------
+* replace index.php
+* replace all files in folder /bin/
+* replace all files in folder /program/
+* replace all files in folder /skins/default/
+* run all commands in SQL/[yourdbtype].update.sql
+ below the line "-- Updates from version 0.1.1"
+* check the config/main.inc.php.dist for new configuration
+ options and add them to your config
+
+
from version 0.1-stable
----------------------------------------
* replace index.php
* replace all files in folder /program/
* replace all files in folder /skins/default/
* run all commands in SQL/[yourdbtype].update.sql
+* check the config/main.inc.php.dist for new configuration options
+ and add them to your config
from version 0.1-rc2
* replace all files in folder /bin/
* replace all files in folder /program/
* replace all files in folder /skins/default/
-* run all commands in SQL/[yourdbtype].update.sql
* If you have LDAP servers configured you should re-configure
the config entries using the template given in /config/main.inc.php.dist
* replace all files in folder /bin/
* replace all files in folder /program/
* replace all files in folder /skins/default/
-* re-initalize the database with [yourdbtype].initial.sql
+* run all commands in SQL/[yourdbtype].update.sql or
+ re-initalize the database with [yourdbtype].initial.sql
* add these lines to /config/main.inc.php
$rcmail_config['draft_autosave'] = 300;
$rcmail_config['date_today'] = 'H:i';
* replace all files in folder /bin/
* replace all files in folder /program/
* replace all files in folder /skins/default/
-* re-initalize the database with [yourdbtype].initial.sql
+* run all commands in SQL/[yourdbtype].update.sql or
+ re-initalize the database with [yourdbtype].initial.sql
* add this line to /config/db.inc.php
$rcmail_config['db_persistent'] = false;
* add these lines to /config/main.inc.php
<?php
-require_once('../program/lib/html2text.inc');
+define('INSTALL_PATH', realpath('./../') . '/');
+require INSTALL_PATH.'program/include/iniset.php';
-$htmlText = $HTTP_RAW_POST_DATA;
-$converter = new html2text($htmlText);
+$converter = new html2text($HTTP_RAW_POST_DATA);
header('Content-Type: text/plain; charset=UTF-8');
-$plaintext = $converter->get_text();
-
-$phpver = explode('.', phpversion());
-$vernum = $phpver[0] . $phpver[1] . $phpver[2];
-
-# html_entity_decode doesn't handle UTF character sets in PHP 4.x
-
-if (($vernum >= 500) && function_exists('html_entity_decode'))
- print html_entity_decode($plaintext, ENT_COMPAT, 'UTF-8');
-else
- print $plaintext;
+print html_entity_decode($converter->get_text(), ENT_COMPAT, 'UTF-8');
?>
*/
-$INSTALL_PATH = realpath("./../") . "/";
-ini_set('include_path', $INSTALL_PATH.PATH_SEPARATOR.$INSTALL_PATH.'program'.PATH_SEPARATOR.ini_get('include_path'));
-
-require 'include/main.inc';
+define('INSTALL_PATH', realpath('./../') . '/');
+require INSTALL_PATH.'program/include/iniset.php';
$source = "";
if ($url = preg_replace('/[^a-z0-9.-_\?\$&=%]/i', '', $_GET['u']))
--- /dev/null
+#!/usr/bin/php -qC
+<?php
+
+define('INSTALL_PATH', preg_replace('/bin\/$/', '', getcwd()) . '/');
+ini_set('memory_limit', -1);
+
+require_once INSTALL_PATH.'program/include/iniset.php';
+
+/**
+ * Parse commandline arguments into a hash array
+ */
+function get_opt($aliases=array())
+{
+ $args = array();
+ for ($i=1; $i<count($_SERVER['argv']); $i++)
+ {
+ $arg = $_SERVER['argv'][$i];
+ if (substr($arg, 0, 2) == '--')
+ {
+ $sp = strpos($arg, '=');
+ $key = substr($arg, 2, $sp - 2);
+ $value = substr($arg, $sp+1);
+ }
+ else if ($arg{0} == '-')
+ {
+ $key = substr($arg, 1);
+ $value = $_SERVER['argv'][++$i];
+ }
+ else
+ continue;
+
+ $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value);
+
+ if ($alias = $aliases[$key])
+ $args[$alias] = $args[$key];
+ }
+
+ return $args;
+}
+
+function print_usage()
+{
+ print "Usage: msgexport -h imap-host -u user-name -m mailbox name\n";
+ print "--host IMAP host\n";
+ print "--user IMAP user name\n";
+ print "--mbox Mailbox/folder name\n";
+ print "--file Mailbox/folder name\n";
+}
+
+function vputs($str)
+{
+ $out = $GLOBALS['args']['file'] ? STDOUT : STDERR;
+ fwrite($out, $str);
+}
+
+function progress_update($pos, $max)
+{
+ $percent = round(100 * $pos / $max);
+ vputs(sprintf("%3d%% [%-51s] %d/%d\033[K\r", $percent, @str_repeat('=', $percent / 2) . '>', $pos, $max));
+}
+
+
+// get arguments
+$args = get_opt(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file')) + array('host' => 'localhost', 'mbox' => 'INBOX');
+
+if ($_SERVER['argv'][1] == 'help')
+{
+ print_usage();
+ exit;
+}
+else if (!$args['host'])
+{
+ vputs("Missing required parameters.\n");
+ print_usage();
+ exit;
+}
+
+// prompt for username if not set
+if (empty($args['user']))
+{
+ vputs("IMAP user: ");
+ $args['user'] = trim(fgets(STDIN));
+}
+
+// prompt for password
+vputs("Password: ");
+$args['pass'] = trim(fgets(STDIN));
+
+
+// parse $host URL
+$a_host = parse_url($args['host']);
+if ($a_host['host'])
+{
+ $host = $a_host['host'];
+ $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
+ $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
+}
+else
+{
+ $host = $args['host'];
+ $imap_port = 143;
+}
+
+// instantiate IMAP class
+$IMAP = new rcube_imap(null);
+
+// try to connect to IMAP server
+if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
+{
+ vputs("IMAP login successful.\n");
+
+ $IMAP->set_mailbox($args['mbox']);
+
+ vputs("Getting message list of {$args['mbox']}...");
+ vputs($IMAP->messagecount()." messages\n");
+
+ if ($args['file'])
+ {
+ if (!($out = fopen($args['file'], 'w')))
+ {
+ vputs("Cannot write to output file\n");
+ exit;
+ }
+ }
+ else
+ $out = STDOUT;
+
+ for ($count = $IMAP->messagecount(), $i=1; $i <= $count; $i++)
+ {
+ $headers = $IMAP->get_headers($i, null, false);
+ $from = current($IMAP->decode_address_list($headers->from, 1, false));
+
+ fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid));
+ fwrite($out, iil_C_FetchPartHeader($IMAP->conn, $IMAP->mailbox, $i, null));
+ fwrite($out, iil_C_HandlePartBody($IMAP->conn, $IMAP->mailbox, $i, null, 1));
+ fwrite($out, "\n\n\n");
+
+ progress_update($i, $count);
+ }
+ vputs("\ncomplete.\n");
+}
+else
+{
+ vputs("IMAP login failed.\n");
+}
+
+?>
\ No newline at end of file
+++ /dev/null
-#!/usr/bin/php -qC
-<?php
-
-$CWD = $INSTALL_PATH = preg_replace('/bin\/$/', '', getcwd() . '/');
-ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . $CWD.'program/');
-
-require_once('include/rcube_shared.inc');
-require_once('include/rcube_imap.inc');
-require_once('include/main.inc');
-require_once('include/bugs.inc');
-
-/**
- * Parse commandline arguments into a hash array
- */
-function get_args($aliases=array())
-{
- $args = array();
- for ($i=1; $i<count($_SERVER['argv']); $i++)
- {
- $arg = $_SERVER['argv'][$i];
- if (substr($arg, 0, 2) == '--')
- {
- $sp = strpos($arg, '=');
- $key = substr($arg, 2, $sp - 2);
- $value = substr($arg, $sp+1);
- }
- else if ($arg{0} == '-')
- {
- $key = substr($arg, 1);
- $value = $_SERVER['argv'][++$i];
- }
- else
- continue;
-
- $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value);
-
- if ($alias = $aliases[$key])
- $args[$alias] = $args[$key];
- }
-
- return $args;
-}
-
-
-function print_usage()
-{
- print "Usage: msgimport -h imap-host -u user-name -f message-file\n";
- print "--host IMAP host\n";
- print "--user IMAP user name\n";
- print "--file Message file to upload\n";
-}
-
-
-// get arguments
-$args = get_args(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'f' => 'file')) + array('host' => 'localhost');
-
-if ($_SERVER['argv'][1] == 'help')
-{
- print_usage();
- exit;
-}
-else if (!($args['host'] && $args['file']))
-{
- print "Missing required parameters.\n";
- print_usage();
- exit;
-}
-else if (!is_file($args['file']))
-{
- print "Cannot read message file\n";
- exit;
-}
-
-// prompt for username if not set
-if (empty($args['user']))
-{
- //fwrite(STDOUT, "Please enter your name\n");
- echo "IMAP user: ";
- $args['user'] = trim(fgets(STDIN));
-}
-
-// prompt for password
-echo "Password: ";
-$args['pass'] = trim(fgets(STDIN));
-
-// clear password input
-echo chr(8)."\rPassword: ".str_repeat("*", strlen($args['pass']))."\n";
-
-// parse $host URL
-$a_host = parse_url($args['host']);
-if ($a_host['host'])
-{
- $host = $a_host['host'];
- $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
- $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
-}
-else
-{
- $host = $args['host'];
- $imap_port = 143;
-}
-
-// instantiate IMAP class
-$IMAP = new rcube_imap(null);
-
-// try to connect to IMAP server
-if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
-{
- print "IMAP login successful.\n";
- print "Uploading message...\n";
-
- // upload message from file
- if ($IMAP->save_message('INBOX', file_get_contents($args['file'])))
- print "Message successfully added to INBOX.\n";
- else
- print "Adding message failed!\n";
-}
-else
-{
- print "IMAP login failed.\n";
-}
-
-?>
\ No newline at end of file
--- /dev/null
+#!/usr/bin/php -qC
+<?php
+
+define('INSTALL_PATH', preg_replace('/bin\/$/', '', getcwd()) . '/');
+ini_set('memory_limit', -1);
+
+require_once INSTALL_PATH.'program/include/iniset.php';
+
+/**
+ * Parse commandline arguments into a hash array
+ */
+function get_args($aliases=array())
+{
+ $args = array();
+ for ($i=1; $i<count($_SERVER['argv']); $i++)
+ {
+ $arg = $_SERVER['argv'][$i];
+ if (substr($arg, 0, 2) == '--')
+ {
+ $sp = strpos($arg, '=');
+ $key = substr($arg, 2, $sp - 2);
+ $value = substr($arg, $sp+1);
+ }
+ else if ($arg{0} == '-')
+ {
+ $key = substr($arg, 1);
+ $value = $_SERVER['argv'][++$i];
+ }
+ else
+ continue;
+
+ $args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value);
+
+ if ($alias = $aliases[$key])
+ $args[$alias] = $args[$key];
+ }
+
+ return $args;
+}
+
+
+function print_usage()
+{
+ print "Usage: msgimport -h imap-host -u user-name -f message-file\n";
+ print "--host IMAP host\n";
+ print "--user IMAP user name\n";
+ print "--file Message file to upload\n";
+}
+
+
+// get arguments
+$args = get_args(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'f' => 'file')) + array('host' => 'localhost');
+
+if ($_SERVER['argv'][1] == 'help')
+{
+ print_usage();
+ exit;
+}
+else if (!($args['host'] && $args['file']))
+{
+ print "Missing required parameters.\n";
+ print_usage();
+ exit;
+}
+else if (!is_file($args['file']))
+{
+ print "Cannot read message file\n";
+ exit;
+}
+
+// prompt for username if not set
+if (empty($args['user']))
+{
+ //fwrite(STDOUT, "Please enter your name\n");
+ echo "IMAP user: ";
+ $args['user'] = trim(fgets(STDIN));
+}
+
+// prompt for password
+echo "Password: ";
+$args['pass'] = trim(fgets(STDIN));
+
+// clear password input
+echo chr(8)."\rPassword: ".str_repeat("*", strlen($args['pass']))."\n";
+
+// parse $host URL
+$a_host = parse_url($args['host']);
+if ($a_host['host'])
+{
+ $host = $a_host['host'];
+ $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
+ $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
+}
+else
+{
+ $host = $args['host'];
+ $imap_port = 143;
+}
+
+// instantiate IMAP class
+$IMAP = new rcube_imap(null);
+
+// try to connect to IMAP server
+if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
+{
+ print "IMAP login successful.\n";
+ print "Uploading message...\n";
+
+ // upload message from file
+ if ($IMAP->save_message('INBOX', file_get_contents($args['file'])))
+ print "Message successfully added to INBOX.\n";
+ else
+ print "Adding message failed!\n";
+}
+else
+{
+ print "IMAP login failed.\n";
+}
+
+?>
\ No newline at end of file
// TCP port used for IMAP connections
$rcmail_config['default_port'] = 143;
+// IMAP auth type. Can be "auth" (CRAM-MD5), "plain" (PLAIN) or "check" to auto detect.
+// Optional, defaults to "check"
+$rcmail_config['imap_auth_type'] = null;
+
// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with 'host' => 'domain' values to support multiple hosts
$rcmail_config['des_key'] = 'rcmail-!24ByteDESkey*Str';
// the default locale setting
-$rcmail_config['locale_string'] = 'en';
+$rcmail_config['language'] = 'en';
// use this format for short date display
$rcmail_config['date_short'] = 'D H:i';
$rcmail_config['date_today'] = 'H:i';
// add this user-agent to message headers when sending
-$rcmail_config['useragent'] = 'RoundCube Webmail/0.1';
+$rcmail_config['useragent'] = 'RoundCube Webmail/0.2a';
// use this name to compose page titles
$rcmail_config['product_name'] = 'RoundCube Webmail';
// session domain: .example.org
$rcmail_config['session_domain'] = '';
-// in order to enable public ldap search, create a config array
-// like the Verisign example below. if you would like to test,
-// simply uncomment the Verisign example.
+// This indicates which type of address book to use. Possible choises:
+// 'sql' (default) and 'ldap'.
+// If set to 'ldap' then it will look at using the first writable LDAP
+// address book as the primary address book and it will not display the
+// SQL address book in the 'Address Book' view.
+$rcmail_config['address_book_type'] = 'sql';
+
+// In order to enable public ldap search, configure an array like the Verisign
+// example further below. if you would like to test, simply uncomment the example.
+//
+// If you are going to use LDAP for individual address books, you will need to
+// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it.
+//
+// The recommended directory structure for LDAP is to store all the address book entries
+// under the users main entry, e.g.:
+//
+// o=root
+// ou=people
+// uid=user@domain
+// mail=contact@contactdomain
+//
+// So the base_dn would be uid=%fu,ou=people,o=root
+// The bind_dn would be the same as based_dn or some super user login.
/**
* example config for Verisign directory
*
* 'name' => 'Verisign.com',
* 'hosts' => array('directory.verisign.com'),
* 'port' => 389,
+ * 'use_tls' => false,
+ * 'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
+ * // %fu - The full username provided, assumes the username is an email
+ * // address, uses the username_domain value if not an email address.
+ * // %u - The username prior to the '@'.
+ * // %d - The domain name after the '@'.
* 'base_dn' => '',
* 'bind_dn' => '',
* 'bind_pass' => '',
+ * 'writable' => false, // Indicates if we can write to the LDAP directory or not.
+ * // If writable is true then these fields need to be populated:
+ * // LDAP_Object_Classes, required_fields, LDAP_rdn
+ * 'LDAP_Object_Classes' => array("top", "inetOrgPerson"), // To create a new contact these are the object classes to specify (or any other classes you wish to use).
+ * 'required_fields' => array("cn", "sn", "mail"), // The required fields needed to build a new contact as required by the object classes (can include additional fields not required by the object classes).
+ * 'LDAP_rdn' => 'mail', // The RDN field that is used for new entries, this field needs to be one of the search_fields, the base of base_dn is appended to the RDN to insert into the LDAP directory.
* 'ldap_version' => 3, // using LDAPv3
* 'search_fields' => array('mail', 'cn'), // fields to search in
* 'name_field' => 'cn', // this field represents the contact's name
* 'email_field' => 'mail', // this field represents the contact's e-mail
* 'surname_field' => 'sn', // this field represents the contact's last name
* 'firstname_field' => 'gn', // this field represents the contact's first name
+ * 'sort' => 'cn', // The field to sort the listing by.
* 'scope' => 'sub', // search mode: sub|base|list
* 'filter' => '', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
+ * 'global_search' => true, // perform a global search for address auto-completion on compose
* 'fuzzy_search' => true); // server allows wildcard search
*/
// don't allow these settings to be overriden by the user
$rcmail_config['dont_override'] = array();
-// list of configuration option names that need to be available in Javascript.
-$rcmail_config['javascript_config'] = array('read_when_deleted', 'flag_for_deletion');
-
// try to load host-specific configuration
+// see http://trac.roundcube.net/wiki/Howto_Config for more details
$rcmail_config['include_host_config'] = false;
+// don't let users set pagesize to more than this value if set
+$rcmail_config['max_pagesize'] = 200;
+
+// mime magic database
+$rcmail_config['mime_magic'] = '/usr/share/misc/magic';
+
+// default sort col
+$rcmail_config['message_sort_col'] = 'date';
+
+// default sort order
+$rcmail_config['message_sort_order'] = 'DESC';
+
// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA.
// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING!
$rcmail_config['enable_installer'] = false;
-
/***** these settings can be overwritten by user's preferences *****/
// show up to X items in list view
// show pretty dates as standard
$rcmail_config['prettydate'] = TRUE;
-// default sort col
-$rcmail_config['message_sort_col'] = 'date';
-
-// default sort order
-$rcmail_config['message_sort_order'] = 'DESC';
-
// save compose message every 300 seconds (5min)
$rcmail_config['draft_autosave'] = 300;
// default setting if preview pane is enabled
$rcmail_config['preview_pane'] = FALSE;
-// don't let users set pagesize to more than this value if set
-$rcmail_config['max_pagesize'] = 200;
+// Clear Trash on logout
+$rcmail_config['logout_purge'] = FALSE;
-// mime magic database
-$rcmail_config['mime_magic'] = '/usr/share/misc/magic';
+// Compact INBOX on logout
+$rcmail_config['logout_expunge'] = FALSE;
+
+/**
+ * 'Delete always'
+ * This setting reflects if mail should be always marked as deleted,
+ * even if moving to "Trash" fails. This is necessary in some setups
+ * because a) people may not have a Trash folder or b) they are over
+ * quota (and Trash is included in the quota).
+ *
+ * This is a failover setting for iil_C_Move when a message is moved
+ * to the Trash, and not the same as "delete_right_away".
+ */
+$rcmail_config['delete_always'] = false;
+
+// Log successful logins
+$rcmail_config['log_logins'] = false;
// end of config file
?>
<?php
/*
- +-----------------------------------------------------------------------+
- | RoundCube Webmail IMAP Client |
- | Version 0.1.1 |
- | |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | Redistribution and use in source and binary forms, with or without |
- | modification, are permitted provided that the following conditions |
- | are met: |
- | |
- | o Redistributions of source code must retain the above copyright |
- | notice, this list of conditions and the following disclaimer. |
- | o 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.|
- | o The names of the authors may not 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. |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: index.php 1255 2008-04-05 12:49:21Z thomasb $
+ +-------------------------------------------------------------------------+
+ | RoundCube Webmail IMAP Client |
+ | Version 0.2-alpha |
+ | |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License version 2 |
+ | as published by the Free Software Foundation. |
+ | |
+ | This program is distributed in the hope that it will be useful, |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ | GNU General Public License for more details. |
+ | |
+ | You should have received a copy of the GNU General Public License along |
+ | with this program; if not, write to the Free Software Foundation, Inc., |
+ | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
+ | |
+ +-------------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-------------------------------------------------------------------------+
+
+ $Id: index.php 1499 2008-06-09 20:57:53Z thomasb $
*/
-// application constants
-define('RCMAIL_VERSION', '0.1.1');
-define('RCMAIL_CHARSET', 'UTF-8');
-define('JS_OBJECT_NAME', 'rcmail');
+// include environment
+require_once 'program/include/iniset.php';
// define global vars
$OUTPUT_TYPE = 'html';
-$INSTALL_PATH = dirname(__FILE__);
-$MAIN_TASKS = array('mail','settings','addressbook','logout');
-
-if (empty($INSTALL_PATH))
- $INSTALL_PATH = './';
-else
- $INSTALL_PATH .= '/';
-
-
-// make sure path_separator is defined
-if (!defined('PATH_SEPARATOR'))
- define('PATH_SEPARATOR', (eregi('win', PHP_OS) ? ';' : ':'));
-
-
-// RC include folders MUST be included FIRST to avoid other
-// possible not compatible libraries (i.e PEAR) to be included
-// instead the ones provided by RC
-ini_set('include_path', $INSTALL_PATH.PATH_SEPARATOR.$INSTALL_PATH.'program'.PATH_SEPARATOR.$INSTALL_PATH.'program/lib'.PATH_SEPARATOR.ini_get('include_path'));
-
-ini_set('session.name', 'roundcube_sessid');
-ini_set('session.use_cookies', 1);
-ini_set('session.gc_maxlifetime', 21600);
-ini_set('session.gc_divisor', 500);
-ini_set('error_reporting', E_ALL&~E_NOTICE);
-set_magic_quotes_runtime(0);
-
-// increase maximum execution time for php scripts
-// (does not work in safe mode)
-if (!ini_get('safe_mode')) @set_time_limit(120);
-
-// include base files
-require_once('include/rcube_shared.inc');
-require_once('include/rcube_imap.inc');
-require_once('include/bugs.inc');
-require_once('include/main.inc');
-require_once('PEAR.php');
-
-
-// set PEAR error handling
-// PEAR::setErrorHandling(PEAR_ERROR_TRIGGER, E_USER_NOTICE);
-
-
-// catch some url/post parameters
-$_task = strip_quotes(get_input_value('_task', RCUBE_INPUT_GPC));
-$_action = strip_quotes(get_input_value('_action', RCUBE_INPUT_GPC));
-$_framed = (!empty($_GET['_framed']) || !empty($_POST['_framed']));
-
-// use main task if empty or invalid value
-if (empty($_task) || !in_array($_task, $MAIN_TASKS))
- $_task = 'mail';
-
// set output buffering
-if ($_action != 'get' && $_action != 'viewsource')
-{
+if ($RCMAIL->action != 'get' && $RCMAIL->action != 'viewsource') {
// use gzip compression if supported
if (function_exists('ob_gzhandler')
- && !ini_get('zlib.output_compression')
- && ini_get('output_handler') != 'ob_gzhandler')
- {
+ && !ini_get('zlib.output_compression')
+ && ini_get('output_handler') != 'ob_gzhandler') {
ob_start('ob_gzhandler');
}
- else
+ else {
ob_start();
+ }
}
-// start session with requested task
-rcmail_startup($_task);
+// init application and start session with requested task
+$RCMAIL = rcmail::get_instance();
-// set session related variables
-$COMM_PATH = sprintf('./?_task=%s', $_task);
-$SESS_HIDDEN_FIELD = '';
-
-
-// add framed parameter
-if ($_framed)
-{
- $COMM_PATH .= '&_framed=1';
- $SESS_HIDDEN_FIELD .= "\n".'<input type="hidden" name="_framed" value="1" />';
-}
-
-
-// init necessary objects for GUI
-rcmail_load_gui();
+// init output class
+$OUTPUT = (!empty($_GET['_remote']) || !empty($_POST['_remote'])) ? $RCMAIL->init_json() : $RCMAIL->load_gui((!empty($_GET['_framed']) || !empty($_POST['_framed'])));
// check DB connections and exit on failure
-if ($err_str = $DB->is_error())
-{
+if ($err_str = $DB->is_error()) {
raise_error(array(
'code' => 603,
'type' => 'db',
// error steps
-if ($_action=='error' && !empty($_GET['_code']))
+if ($RCMAIL->action=='error' && !empty($_GET['_code'])) {
raise_error(array('code' => hexdec($_GET['_code'])), FALSE, TRUE);
-
+}
// try to log in
-if ($_action=='login' && $_task=='mail')
-{
- $host = rcmail_autoselect_host();
+if ($RCMAIL->action=='login' && $RCMAIL->task=='mail') {
+ $host = $RCMAIL->autoselect_host();
// check if client supports cookies
- if (empty($_COOKIE))
- {
+ if (empty($_COOKIE)) {
$OUTPUT->show_message("cookiesdisabled", 'warning');
}
else if ($_SESSION['temp'] && !empty($_POST['_user']) && isset($_POST['_pass']) &&
- rcmail_login(trim(get_input_value('_user', RCUBE_INPUT_POST), ' '),
- get_input_value('_pass', RCUBE_INPUT_POST, true, 'ISO-8859-1'), $host))
- {
+ $RCMAIL->login(trim(get_input_value('_user', RCUBE_INPUT_POST), ' '),
+ get_input_value('_pass', RCUBE_INPUT_POST, true, 'ISO-8859-1'), $host)) {
// create new session ID
unset($_SESSION['temp']);
sess_regenerate_id();
// send auth cookie if necessary
- rcmail_authenticate_session();
+ $RCMAIL->authenticate_session();
+
+ // log successful login
+ if ($RCMAIL->config->get('log_logins') && $RCMAIL->config->get('debug_level') & 1)
+ console(sprintf('Successful login for %s (id %d) from %s',
+ trim(get_input_value('_user', RCUBE_INPUT_POST), ' '),
+ $_SESSION['user_id'],
+ $_SERVER['REMOTE_ADDR']));
// send redirect
- header("Location: $COMM_PATH");
+ header("Location: {$RCMAIL->comm_path}");
exit;
}
- else
- {
+ else {
$OUTPUT->show_message($IMAP->error_code == -1 ? 'imaperror' : 'loginfailed', 'warning');
- rcmail_kill_session();
+ $RCMAIL->kill_session();
}
}
// end session
-else if (($_task=='logout' || $_action=='logout') && isset($_SESSION['user_id']))
-{
+else if (($RCMAIL->task=='logout' || $RCMAIL->action=='logout') && isset($_SESSION['user_id'])) {
$OUTPUT->show_message('loggedout');
- rcmail_kill_session();
+ $RCMAIL->logout_actions();
+ $RCMAIL->kill_session();
}
// check session and auth cookie
-else if ($_action != 'login' && $_SESSION['user_id'] && $_action != 'send')
-{
- if (!rcmail_authenticate_session())
- {
+else if ($RCMAIL->action != 'login' && $_SESSION['user_id'] && $RCMAIL->action != 'send') {
+ if (!$RCMAIL->authenticate_session()) {
$OUTPUT->show_message('sessionerror', 'error');
- rcmail_kill_session();
+ $RCMAIL->kill_session();
}
}
// log in to imap server
-if (!empty($USER->ID) && $_task=='mail')
-{
- $conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']);
- if (!$conn)
- {
- $OUTPUT->show_message($IMAP->error_code == -1 ? 'imaperror' : 'sessionerror', 'error');
- rcmail_kill_session();
+if (!empty($RCMAIL->user->ID) && $RCMAIL->task == 'mail') {
+ if (!$RCMAIL->imap_connect()) {
+ $RCMAIL->kill_session();
}
- else
- rcmail_set_imap_prop();
}
// not logged in -> set task to 'login
-if (empty($USER->ID))
-{
+if (empty($RCMAIL->user->ID)) {
if ($OUTPUT->ajax_call)
$OUTPUT->remote_response("setTimeout(\"location.href='\"+this.env.comm_path+\"'\", 2000);");
- $_task = 'login';
+ $RCMAIL->set_task('login');
}
// check client X-header to verify request origin
-if ($OUTPUT->ajax_call)
-{
- if (empty($CONFIG['devel_mode']) && !rc_request_header('X-RoundCube-Referer'))
- {
+if ($OUTPUT->ajax_call) {
+ if (empty($CONFIG['devel_mode']) && !rc_request_header('X-RoundCube-Referer')) {
header('HTTP/1.1 404 Not Found');
die("Invalid Request");
}
}
-// set task and action to client
-$OUTPUT->set_env('task', $_task);
-if (!empty($_action))
- $OUTPUT->set_env('action', $_action);
-
-
-
// not logged in -> show login page
-if (empty($USER->ID))
-{
+if (empty($RCMAIL->user->ID)) {
// check if installer is still active
- if ($CONFIG['enable_installer'] && is_readable('./installer/index.php'))
- $OUTPUT->add_footer('
- <div style="background:#ef9398; border:2px solid #dc5757; padding:0.5em; margin:2em auto; width:50em">
- <h2 style="margin-top:0.2em">Installer script is still accessible</h2>
- <p>The install script of your RoundCube installation is still stored in its default location!</p>
- <p>Please <b>remove</b> the whole <tt>installer</tt> folder from the RoundCube directory because
- these files may expose sensitive configuration data like server passwords and encryption keys
- to the public. Make sure you cannot access the <a href="./installer/">installer script</a> from your browser.</p>
- </div>');
+ if ($CONFIG['enable_installer'] && is_readable('./installer/index.php')) {
+ $OUTPUT->add_footer(html::div(array('style' => "background:#ef9398; border:2px solid #dc5757; padding:0.5em; margin:2em auto; width:50em"),
+ html::tag('h2', array('style' => "margin-top:0.2em"), "Installer script is still accessible") .
+ html::p(null, "The install script of your RoundCube installation is still stored in its default location!") .
+ html::p(null, "Please <b>remove</b> the whole <tt>installer</tt> folder from the RoundCube directory because .
+ these files may expose sensitive configuration data like server passwords and encryption keys
+ to the public. Make sure you cannot access the <a href=\"./installer/\">installer script</a> from your browser.")
+ )
+ );
+ }
+ $OUTPUT->set_env('task', 'login');
$OUTPUT->task = 'login';
$OUTPUT->send('login');
exit;
// handle keep-alive signal
-if ($_action=='keep-alive')
-{
+if ($RCMAIL->action=='keep-alive') {
$OUTPUT->reset();
$OUTPUT->send('');
exit;
}
// include task specific files
-if ($_task=='mail')
-{
+if ($RCMAIL->task=='mail') {
include_once('program/steps/mail/func.inc');
- if ($_action=='show' || $_action=='preview' || $_action=='print')
+ if ($RCMAIL->action=='show' || $RCMAIL->action=='preview' || $RCMAIL->action=='print')
include('program/steps/mail/show.inc');
- if ($_action=='get')
+ if ($RCMAIL->action=='get')
include('program/steps/mail/get.inc');
- if ($_action=='moveto' || $_action=='delete')
+ if ($RCMAIL->action=='moveto' || $RCMAIL->action=='delete')
include('program/steps/mail/move_del.inc');
- if ($_action=='mark')
+ if ($RCMAIL->action=='mark')
include('program/steps/mail/mark.inc');
- if ($_action=='viewsource')
+ if ($RCMAIL->action=='viewsource')
include('program/steps/mail/viewsource.inc');
- if ($_action=='sendmdn')
+ if ($RCMAIL->action=='sendmdn')
include('program/steps/mail/sendmdn.inc');
- if ($_action=='send')
+ if ($RCMAIL->action=='send')
include('program/steps/mail/sendmail.inc');
- if ($_action=='upload')
+ if ($RCMAIL->action=='upload')
include('program/steps/mail/upload.inc');
- if ($_action=='compose' || $_action=='remove-attachment' || $_action=='display-attachment')
+ if ($RCMAIL->action=='compose' || $RCMAIL->action=='remove-attachment' || $RCMAIL->action=='display-attachment')
include('program/steps/mail/compose.inc');
- if ($_action=='addcontact')
+ if ($RCMAIL->action=='addcontact')
include('program/steps/mail/addcontact.inc');
- if ($_action=='expunge' || $_action=='purge')
+ if ($RCMAIL->action=='expunge' || $RCMAIL->action=='purge')
include('program/steps/mail/folders.inc');
- if ($_action=='check-recent')
+ if ($RCMAIL->action=='check-recent')
include('program/steps/mail/check_recent.inc');
- if ($_action=='getunread')
+ if ($RCMAIL->action=='getunread')
include('program/steps/mail/getunread.inc');
- if ($_action=='list' && isset($_REQUEST['_remote']))
+ if ($RCMAIL->action=='list' && isset($_REQUEST['_remote']))
include('program/steps/mail/list.inc');
- if ($_action=='search')
+ if ($RCMAIL->action=='search')
include('program/steps/mail/search.inc');
- if ($_action=='spell')
+ if ($RCMAIL->action=='spell')
include('program/steps/mail/spell.inc');
- if ($_action=='rss')
+ if ($RCMAIL->action=='rss')
include('program/steps/mail/rss.inc');
- if ($_action=='quotadisplay')
- include('program/steps/mail/quotadisplay.inc');
-
-
// make sure the message count is refreshed
- $IMAP->messagecount($_SESSION['mbox'], 'ALL', TRUE);
+ $IMAP->messagecount($_SESSION['mbox'], 'ALL', true);
}
// include task specific files
-if ($_task=='addressbook')
-{
+if ($RCMAIL->task=='addressbook') {
include_once('program/steps/addressbook/func.inc');
- if ($_action=='save')
+ if ($RCMAIL->action=='save')
include('program/steps/addressbook/save.inc');
- if ($_action=='edit' || $_action=='add')
+ if ($RCMAIL->action=='edit' || $RCMAIL->action=='add')
include('program/steps/addressbook/edit.inc');
- if ($_action=='delete')
+ if ($RCMAIL->action=='delete')
include('program/steps/addressbook/delete.inc');
- if ($_action=='show')
+ if ($RCMAIL->action=='show')
include('program/steps/addressbook/show.inc');
- if ($_action=='list' && $_REQUEST['_remote'])
+ if ($RCMAIL->action=='list' && $_REQUEST['_remote'])
include('program/steps/addressbook/list.inc');
- if ($_action=='search')
+ if ($RCMAIL->action=='search')
include('program/steps/addressbook/search.inc');
- if ($_action=='copy')
+ if ($RCMAIL->action=='copy')
include('program/steps/addressbook/copy.inc');
- if ($_action=='mailto')
+ if ($RCMAIL->action=='mailto')
include('program/steps/addressbook/mailto.inc');
}
// include task specific files
-if ($_task=='settings')
-{
+if ($RCMAIL->task=='settings') {
include_once('program/steps/settings/func.inc');
- if ($_action=='save-identity')
+ if ($RCMAIL->action=='save-identity')
include('program/steps/settings/save_identity.inc');
- if ($_action=='add-identity' || $_action=='edit-identity')
+ if ($RCMAIL->action=='add-identity' || $RCMAIL->action=='edit-identity')
include('program/steps/settings/edit_identity.inc');
- if ($_action=='delete-identity')
+ if ($RCMAIL->action=='delete-identity')
include('program/steps/settings/delete_identity.inc');
- if ($_action=='identities')
+ if ($RCMAIL->action=='identities')
include('program/steps/settings/identities.inc');
- if ($_action=='save-prefs')
+ if ($RCMAIL->action=='save-prefs')
include('program/steps/settings/save_prefs.inc');
- if ($_action=='folders' || $_action=='subscribe' || $_action=='unsubscribe' ||
- $_action=='create-folder' || $_action=='rename-folder' || $_action=='delete-folder')
+ if ($RCMAIL->action=='folders' || $RCMAIL->action=='subscribe' || $RCMAIL->action=='unsubscribe' ||
+ $RCMAIL->action=='create-folder' || $RCMAIL->action=='rename-folder' || $RCMAIL->action=='delete-folder')
include('program/steps/settings/manage_folders.inc');
-
}
// parse main template
-$OUTPUT->send($_task);
+$OUTPUT->send($RCMAIL->task);
// if we arrive here, something went wrong
'type' => 'php',
'line' => __LINE__,
'file' => __FILE__,
- 'message' => "Invalid request"), TRUE, TRUE);
+ 'message' => "Invalid request"), true, true);
?>
<form action="index.php" method="get">
<?php
-$required_php_exts = array('PCRE' => 'pcre', 'Session' => 'session');
+$required_php_exts = array('PCRE' => 'pcre', 'Session' => 'session',
+ 'DOM XML' => 'dom');
$optional_php_exts = array('FileInfo' => 'fileinfo', 'Libiconv' => 'iconv',
- 'Multibyte' => 'mbstring', 'OpenSSL' => 'openssl', 'Mcrypt' => 'mcrypt', 'GD' => 'gd');
+ 'Multibyte' => 'mbstring', 'OpenSSL' => 'openssl', 'Mcrypt' => 'mcrypt',
+ 'GD' => 'gd');
$required_libs = array('PEAR' => 'PEAR.php', 'DB' => 'DB.php', 'MDB2' => 'MDB2.php',
- 'Net_SMTP' => 'Net/SMTP.php', 'Mail_mime' => 'Mail/mime.php', 'iilConnection' => 'lib/imap.inc');
+ 'Net_SMTP' => 'Net/SMTP.php', 'Mail_mime' => 'Mail/mime.php',
+ 'iilConnection' => 'lib/imap.inc');
$supported_dbs = array('MySQL' => 'mysql', 'MySQLi' => 'mysqli',
'PostgreSQL' => 'pgsql', 'SQLite (v2)' => 'sqlite');
<h3>Checking PHP version</h3>
<?php
-define('MIN_PHP_VERSION', '4.3.1');
+define('MIN_PHP_VERSION', '5.2.0');
if (version_compare(PHP_VERSION, MIN_PHP_VERSION, '>=')) {
$RCI->pass('Version', 'PHP ' . PHP_VERSION . ' detected');
-}
-else {
+} else {
$RCI->fail('Version', 'PHP Version ' . MIN_PHP_VERSION . ' or greater is required ' . PHP_VERSION . ' detected');
}
?>
foreach ($required_php_exts AS $name => $ext) {
if (extension_loaded($ext)) {
$RCI->pass($name);
- }
- else {
+ } else {
$_ext = $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
$msg = @dl($_ext) ? 'Could be loaded. Please add in php.ini' : '';
$RCI->fail($name, $msg, $source_urls[$name]);
<input type="hidden" name="_step" value="2" />
<?php
-ini_set('display_errors', 1);
-require_once 'include/rcube_html.inc';
-
// also load the default config to fill in the fields
$RCI->load_defaults();
if (!empty($_POST['submit'])) {
- echo '<p class="notice">Copy the following configurations and save them in two files (names above the text box)';
- echo ' within the <tt>config/</tt> directory of your RoundCube installation.<br/>';
+ echo '<p class="notice">Copy or download the following configurations and save them in two files';
+ echo ' (names above the text box) within the <tt>config/</tt> directory of your RoundCube installation.<br/>';
echo ' Make sure that there are no characters outside the <tt><?php ?></tt> brackets when saving the files.</p>';
- $textbox = new textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile"));
+ $textbox = new html_textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile"));
- echo '<div><em>main.inc.php</em></div>';
+ echo '<div><em>main.inc.php (<a href="index.php?_getfile=main">download</a>)</em></div>';
echo $textbox->show($RCI->create_config('main'));
- echo '<div style="margin-top:1em"><em>db.inc.php</em></div>';
+ echo '<div style="margin-top:1em"><em>db.inc.php (<a href="index.php?_getfile=db">download</a>)</em></div>';
echo $textbox->show($RCI->create_config('db'));
echo '<p class="hint">Of course there are more options to configure.
<?php
/*
$value = $RCI->getprop('debug_level');
-$check_debug = new checkbox(array('name' => '_debug_level[]'));
+$check_debug = new html_checkbox(array('name' => '_debug_level[]'));
echo $check_debug->show(($value & 1) ? 1 : 0 , array('value' => 1, 'id' => 'cfgdebug1'));
echo '<label for="cfgdebug1">Log errors</label><br />';
<dd>
<?php
-$input_prodname = new textfield(array('name' => '_product_name', 'size' => 30, 'id' => "cfgprodname"));
+$input_prodname = new html_inputfield(array('name' => '_product_name', 'size' => 30, 'id' => "cfgprodname"));
echo $input_prodname->show($RCI->getprop('product_name'));
?>
<dd>
<?php
-$input_skinpath = new textfield(array('name' => '_skin_path', 'size' => 30, 'id' => "cfgskinpath"));
+$input_skinpath = new html_inputfield(array('name' => '_skin_path', 'size' => 30, 'id' => "cfgskinpath"));
echo $input_skinpath->show($RCI->getprop('skin_path'));
?>
<dd>
<?php
-$input_tempdir = new textfield(array('name' => '_temp_dir', 'size' => 30, 'id' => "cfgtempdir"));
+$input_tempdir = new html_inputfield(array('name' => '_temp_dir', 'size' => 30, 'id' => "cfgtempdir"));
echo $input_tempdir->show($RCI->getprop('temp_dir'));
?>
<dd>
<?php
-$input_logdir = new textfield(array('name' => '_log_dir', 'size' => 30, 'id' => "cfglogdir"));
+$input_logdir = new html_inputfield(array('name' => '_log_dir', 'size' => 30, 'id' => "cfglogdir"));
echo $input_logdir->show($RCI->getprop('log_dir'));
?>
<dd>
<?php
-$check_ipcheck = new checkbox(array('name' => '_ip_check', 'id' => "cfgipcheck"));
+$check_ipcheck = new html_checkbox(array('name' => '_ip_check', 'id' => "cfgipcheck"));
echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1));
?>
<dd>
<?php
-$input_deskey = new textfield(array('name' => '_des_key', 'size' => 30, 'id' => "cfgdeskey"));
+$input_deskey = new html_inputfield(array('name' => '_des_key', 'size' => 30, 'id' => "cfgdeskey"));
echo $input_deskey->show($RCI->getprop('des_key'));
?>
<dd>
<?php
-$check_caching = new checkbox(array('name' => '_enable_caching', 'id' => "cfgcache"));
+$check_caching = new html_checkbox(array('name' => '_enable_caching', 'id' => "cfgcache"));
echo $check_caching->show(intval($RCI->getprop('enable_caching')), array('value' => 1));
?>
<dd>
<?php
-$check_caching = new checkbox(array('name' => '_enable_spellcheck', 'id' => "cfgspellcheck"));
+$check_caching = new html_checkbox(array('name' => '_enable_spellcheck', 'id' => "cfgspellcheck"));
echo $check_caching->show(intval($RCI->getprop('enable_spellcheck')), array('value' => 1));
?>
<dd>
<?php
-$select_mdnreq = new select(array('name' => '_mdn_requests', 'id' => "cfgmdnreq"));
+$select_mdnreq = new html_select(array('name' => '_mdn_requests', 'id' => "cfgmdnreq"));
$select_mdnreq->add(array('ask the user', 'send automatically', 'ignore'), array(0, 1, 2));
echo $select_mdnreq->show(intval($RCI->getprop('mdn_requests')));
<p>Database settings for read/write operations:</p>
<?php
-require_once 'DB.php';
+require_once 'MDB2.php';
$supported_dbs = array('MySQL' => 'mysql', 'MySQLi' => 'mysqli',
'PgSQL' => 'pgsql', 'SQLite' => 'sqlite');
-$select_dbtype = new select(array('name' => '_dbtype', 'id' => "cfgdbtype"));
+$select_dbtype = new html_select(array('name' => '_dbtype', 'id' => "cfgdbtype"));
foreach ($supported_dbs AS $database => $ext) {
if (extension_loaded($ext)) {
$select_dbtype->add($database, $ext);
}
}
-$input_dbhost = new textfield(array('name' => '_dbhost', 'size' => 20, 'id' => "cfgdbhost"));
-$input_dbname = new textfield(array('name' => '_dbname', 'size' => 20, 'id' => "cfgdbname"));
-$input_dbuser = new textfield(array('name' => '_dbuser', 'size' => 20, 'id' => "cfgdbuser"));
-$input_dbpass = new textfield(array('name' => '_dbpass', 'size' => 20, 'id' => "cfgdbpass"));
+$input_dbhost = new html_inputfield(array('name' => '_dbhost', 'size' => 20, 'id' => "cfgdbhost"));
+$input_dbname = new html_inputfield(array('name' => '_dbname', 'size' => 20, 'id' => "cfgdbname"));
+$input_dbuser = new html_inputfield(array('name' => '_dbuser', 'size' => 20, 'id' => "cfgdbuser"));
+$input_dbpass = new html_passwordfield(array('name' => '_dbpass', 'size' => 20, 'id' => "cfgdbpass"));
-$dsnw = DB::parseDSN($RCI->getprop('db_dsnw'));
+$dsnw = MDB2::parseDSN($RCI->getprop('db_dsnw'));
echo $select_dbtype->show($RCI->is_post ? $_POST['_dbtype'] : $dsnw['phptype']);
echo '<label for="cfgdbtype">Database type</label><br />';
@include_once 'DB.php';
@include_once 'MDB2.php';
-$select_dbba = new select(array('name' => '_db_backend', 'id' => "cfgdbba"));
+$select_dbba = new html_select(array('name' => '_db_backend', 'id' => "cfgdbba"));
if (class_exists('DB'))
$select_dbba->add('DB', 'db');
<div id="defaulthostlist">
<?php
-$text_imaphost = new textfield(array('name' => '_default_host[]', 'size' => 30));
+$text_imaphost = new html_inputfield(array('name' => '_default_host[]', 'size' => 30));
$default_hosts = $RCI->get_hostlist();
if (empty($default_hosts))
<dd>
<?php
-$text_imapport = new textfield(array('name' => '_default_port', 'size' => 6, 'id' => "cfgimapport"));
+$text_imapport = new html_inputfield(array('name' => '_default_port', 'size' => 6, 'id' => "cfgimapport"));
echo $text_imapport->show($RCI->getprop('default_port'));
?>
<dd>
<?php
-$text_userdomain = new textfield(array('name' => '_username_domain', 'size' => 30, 'id' => "cfguserdomain"));
+$text_userdomain = new html_inputfield(array('name' => '_username_domain', 'size' => 30, 'id' => "cfguserdomain"));
echo $text_userdomain->show($RCI->getprop('username_domain'));
?>
<dd>
<?php
-$check_autocreate = new checkbox(array('name' => '_auto_create_user', 'id' => "cfgautocreate"));
+$check_autocreate = new html_checkbox(array('name' => '_auto_create_user', 'id' => "cfgautocreate"));
echo $check_autocreate->show(intval($RCI->getprop('auto_create_user')), array('value' => 1));
?>
<dd>
<?php
-$text_sentmbox = new textfield(array('name' => '_sent_mbox', 'size' => 20, 'id' => "cfgsentmbox"));
+$text_sentmbox = new html_inputfield(array('name' => '_sent_mbox', 'size' => 20, 'id' => "cfgsentmbox"));
echo $text_sentmbox->show($RCI->getprop('sent_mbox'));
?>
<dd>
<?php
-$text_trashmbox = new textfield(array('name' => '_trash_mbox', 'size' => 20, 'id' => "cfgtrashmbox"));
+$text_trashmbox = new html_inputfield(array('name' => '_trash_mbox', 'size' => 20, 'id' => "cfgtrashmbox"));
echo $text_trashmbox->show($RCI->getprop('trash_mbox'));
?>
<dd>
<?php
-$text_draftsmbox = new textfield(array('name' => '_drafts_mbox', 'size' => 20, 'id' => "cfgdraftsmbox"));
+$text_draftsmbox = new html_inputfield(array('name' => '_drafts_mbox', 'size' => 20, 'id' => "cfgdraftsmbox"));
echo $text_draftsmbox->show($RCI->getprop('drafts_mbox'));
?>
<dd>
<?php
-$text_smtphost = new textfield(array('name' => '_smtp_server', 'size' => 30, 'id' => "cfgsmtphost"));
+$text_smtphost = new html_inputfield(array('name' => '_smtp_server', 'size' => 30, 'id' => "cfgsmtphost"));
echo $text_smtphost->show($RCI->getprop('smtp_server'));
?>
<dd>
<?php
-$text_smtpport = new textfield(array('name' => '_smtp_port', 'size' => 6, 'id' => "cfgsmtpport"));
+$text_smtpport = new html_inputfield(array('name' => '_smtp_port', 'size' => 6, 'id' => "cfgsmtpport"));
echo $text_smtpport->show($RCI->getprop('smtp_port'));
?>
<dd>
<?php
-$text_smtpuser = new textfield(array('name' => '_smtp_user', 'size' => 20, 'id' => "cfgsmtpuser"));
-$text_smtppass = new textfield(array('name' => '_smtp_pass', 'size' => 20, 'id' => "cfgsmtppass"));
+$text_smtpuser = new html_inputfield(array('name' => '_smtp_user', 'size' => 20, 'id' => "cfgsmtpuser"));
+$text_smtppass = new html_passwordfield(array('name' => '_smtp_pass', 'size' => 20, 'id' => "cfgsmtppass"));
echo $text_smtpuser->show($RCI->getprop('smtp_user'));
echo $text_smtppass->show($RCI->getprop('smtp_pass'));
<p>
<?php
-$check_smtpuser = new checkbox(array('name' => '_smtp_user_u', 'id' => "cfgsmtpuseru"));
+$check_smtpuser = new html_checkbox(array('name' => '_smtp_user_u', 'id' => "cfgsmtpuseru"));
echo $check_smtpuser->show($RCI->getprop('smtp_user') == '%u' || $_POST['_smtp_user_u'] ? 1 : 0, array('value' => 1));
?>
<dd>
<?php
/*
-$select_smtpauth = new select(array('name' => '_smtp_auth_type', 'id' => "cfgsmtpauth"));
+$select_smtpauth = new html_select(array('name' => '_smtp_auth_type', 'id' => "cfgsmtpauth"));
$select_smtpauth->add(array('(auto)', 'PLAIN', 'DIGEST-MD5', 'CRAM-MD5', 'LOGIN'), array('0', 'PLAIN', 'DIGEST-MD5', 'CRAM-MD5', 'LOGIN'));
echo $select_smtpauth->show(intval($RCI->getprop('smtp_auth_type')));
*/
<dd>
<?php
-$check_smtplog = new checkbox(array('name' => '_smtp_log', 'id' => "cfgsmtplog"));
+$check_smtplog = new html_checkbox(array('name' => '_smtp_log', 'id' => "cfgsmtplog"));
echo $check_smtplog->show(intval($RCI->getprop('smtp_log')), array('value' => 1));
?>
<dd>
<?php
-$input_locale = new textfield(array('name' => '_locale_string', 'size' => 6, 'id' => "cfglocale"));
+$input_locale = new html_inputfield(array('name' => '_locale_string', 'size' => 6, 'id' => "cfglocale"));
echo $input_locale->show($RCI->getprop('locale_string'));
?>
<dd>
<?php
-$input_pagesize = new textfield(array('name' => '_pagesize', 'size' => 6, 'id' => "cfgpagesize"));
+$input_pagesize = new html_inputfield(array('name' => '_pagesize', 'size' => 6, 'id' => "cfgpagesize"));
echo $input_pagesize->show($RCI->getprop('pagesize'));
?>
<dd>
<?php
-$check_htmlview = new checkbox(array('name' => '_prefer_html', 'id' => "cfghtmlview", 'value' => 1));
+$check_htmlview = new html_checkbox(array('name' => '_prefer_html', 'id' => "cfghtmlview", 'value' => 1));
echo $check_htmlview->show(intval($RCI->getprop('prefer_html')));
?>
<dd>
<?php
-$check_prevpane = new checkbox(array('name' => '_preview_pane', 'id' => "cfgprevpane", 'value' => 1));
+$check_prevpane = new html_checkbox(array('name' => '_preview_pane', 'id' => "cfgprevpane", 'value' => 1));
echo $check_prevpane->show(intval($RCI->getprop('preview_pane')));
?>
<dd>
<?php
-$check_htmlcomp = new checkbox(array('name' => '_htmleditor', 'id' => "cfghtmlcompose", 'value' => 1));
+$check_htmlcomp = new html_checkbox(array('name' => '_htmleditor', 'id' => "cfghtmlcompose", 'value' => 1));
echo $check_htmlcomp->show(intval($RCI->getprop('htmleditor')));
?>
<label for="cfgautosave">Save compose message every</label>
<?php
-$select_autosave = new select(array('name' => '_draft_autosave', 'id' => 'cfgautosave'));
+$select_autosave = new html_select(array('name' => '_draft_autosave', 'id' => 'cfgautosave'));
$select_autosave->add('never', 0);
foreach (array(3, 5, 10) as $i => $min)
$select_autosave->add("$min min", $min*60);
+<?php
+ini_set('error_reporting', E_ALL&~E_NOTICE);
+ini_set('display_errors', 1);
+
+define('INSTALL_PATH', realpath(dirname(__FILE__) . '/../').'/');
+$include_path = INSTALL_PATH . 'program/lib' . PATH_SEPARATOR;
+$include_path .= INSTALL_PATH . 'program' . PATH_SEPARATOR;
+$include_path .= INSTALL_PATH . 'program/include' . PATH_SEPARATOR;
+$include_path .= ini_get('include_path');
+
+set_include_path($include_path);
+
+session_start();
+
+/**
+ * Use PHP5 autoload for dynamic class loading
+ * (copy from program/incllude/iniset.php)
+ */
+function __autoload($classname)
+{
+ $filename = preg_replace(
+ array('/MDB2_(.+)/', '/Mail_(.+)/', '/^html_.+/', '/^utf8$/'),
+ array('MDB2/\\1', 'Mail/\\1', 'html', 'utf8.class'),
+ $classname
+ );
+ include_once $filename. '.php';
+}
+?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<div id="content">
<?php
- ini_set('error_reporting', E_ALL&~E_NOTICE);
- ini_set('display_errors', 1);
-
- session_start();
-
- $docroot = realpath(dirname(__FILE__) . '/../');
- $include_path = $docroot . '/program/lib' . PATH_SEPARATOR . $docroot . '/program' . PATH_SEPARATOR . ini_get('include_path');
- set_include_path($include_path);
- require_once 'rcube_install.php';
$RCI = rcube_install::get_instance();
$RCI->load_config();
// exit if installation is complete
if ($RCI->configured && !$RCI->getprop('enable_installer') && !$_SESSION['allowinstaller']) {
- header("HTTP/1.0 404 Not Found");
+ // header("HTTP/1.0 404 Not Found");
echo '<h2 class="error">The installer is disabled!</h2>';
echo '<p>To enable it again, set <tt>$rcmail_config[\'enable_installer\'] = true;</tt> in config/main.inc.php</p>';
echo '</div></body></html>';
{
$value = $this->is_post && (isset($_POST["_$name"]) || $this->config_props[$name]) ? $_POST["_$name"] : $this->config[$name];
- if ($name == 'des_key' && !isset($_REQUEST["_$name"]))
+ if ($name == 'des_key' && !$this->configured && !isset($_REQUEST["_$name"]))
$value = rcube_install::random_key(24);
return $value !== null && $value !== '' ? $value : $default;
if ($_POST['_dbtype'] == 'sqlite')
$value = sprintf('%s://%s?mode=0646', $_POST['_dbtype'], $_POST['_dbname']{0} == '/' ? '/' . $_POST['_dbname'] : $_POST['_dbname']);
else
- $value = sprintf('%s://%s:%s@%s/%s', $_POST['_dbtype'], $_POST['_dbuser'], $_POST['_dbpass'], $_POST['_dbhost'], $_POST['_dbname']);
+ $value = sprintf('%s://%s:%s@%s/%s', $_POST['_dbtype'],
+ rawurlencode($_POST['_dbuser']), rawurlencode($_POST['_dbpass']),
+ $_POST['_dbhost'], $_POST['_dbname']);
}
else if ($prop == 'smtp_auth_type' && $value == '0') {
$value = '';
if (count($value) <= 1)
$value = $value[0];
}
+ else if ($prop == 'pagesize') {
+ $value = max(2, intval($value));
+ }
else if ($prop == 'smtp_user' && !empty($_POST['_smtp_user_u'])) {
$value = '%u';
}
<h3>Check config files</h3>
<?php
-require_once 'include/rcube_html.inc';
-
-$read_main = is_readable('../config/main.inc.php');
-$read_db = is_readable('../config/db.inc.php');
+$read_main = is_readable(INSTALL_PATH.'config/main.inc.php');
+$read_db = is_readable(INSTALL_PATH.'config/db.inc.php');
if ($read_main && !empty($RCI->config)) {
$RCI->pass('main.inc.php');
if ($RCI->configured) {
$pass = false;
foreach (array($RCI->config['temp_dir'],$RCI->config['log_dir']) as $dir) {
- $dirpath = $dir{0} == '/' ? $dir : $docroot . '/' . $dir;
+ $dirpath = $dir{0} == '/' ? $dir : INSTALL_PATH . $dir;
if (is_writable(realpath($dirpath))) {
$RCI->pass($dir);
$pass = true;
echo 'Backend: ';
echo 'PEAR::' . strtoupper($RCI->config['db_backend']) . '<br />';
- $_class = 'rcube_' . strtolower($RCI->config['db_backend']);
- require_once 'include/' . $_class . '.inc';
+ $dbclass = 'rcube_' . strtolower($RCI->config['db_backend']);
- $DB = new $_class($RCI->config['db_dsnw'], '', false);
+ $DB = new $dbclass($RCI->config['db_dsnw'], '', false);
$DB->db_connect('w');
if (!($db_error_msg = $DB->is_error())) {
$RCI->pass('DSN (write)');
$pass = $RCI->getprop('smtp_pass', '(none)');
if ($user == '%u') {
- $user_field = new textfield(array('name' => '_smtp_user'));
+ $user_field = new html_inputfield(array('name' => '_smtp_user'));
$user = $user_field->show($_POST['_smtp_user']);
}
if ($pass == '%p') {
- $pass_field = new passwordfield(array('name' => '_smtp_pass'));
+ $pass_field = new html_passwordfield(array('name' => '_smtp_pass'));
$pass = $pass_field->show();
}
echo "Password: $pass<br />";
}
-$from_field = new textfield(array('name' => '_from', 'id' => 'sendmailfrom'));
-$to_field = new textfield(array('name' => '_to', 'id' => 'sendmailto'));
+$from_field = new html_inputfield(array('name' => '_from', 'id' => 'sendmailfrom'));
+$to_field = new html_inputfield(array('name' => '_to', 'id' => 'sendmailto'));
?>
</p>
if (isset($_POST['sendmail']) && !empty($_POST['_from']) && !empty($_POST['_to'])) {
- require_once 'lib/rc_mail_mime.inc';
- require_once 'include/rcube_smtp.inc';
+ require_once 'rcube_smtp.inc';
echo '<p>Trying to send email...<br />';
$CONFIG['smtp_pass'] = $_POST['_smtp_pass'];
}
- $mail_object = new rc_mail_mime();
+ $mail_object = new rcube_mail_mime();
$send_headers = $mail_object->headers($headers);
$status = smtp_mail($headers['From'], $headers['To'],
$default_hosts = $RCI->get_hostlist();
if (!empty($default_hosts)) {
- $host_field = new select(array('name' => '_host', 'id' => 'imaphost'));
+ $host_field = new html_select(array('name' => '_host', 'id' => 'imaphost'));
$host_field->add($default_hosts);
}
else {
- $host_field = new textfield(array('name' => '_host', 'id' => 'imaphost'));
+ $host_field = new html_inputfield(array('name' => '_host', 'id' => 'imaphost'));
}
-$user_field = new textfield(array('name' => '_user', 'id' => 'imapuser'));
-$pass_field = new passwordfield(array('name' => '_pass', 'id' => 'imappass'));
+$user_field = new html_inputfield(array('name' => '_user', 'id' => 'imapuser'));
+$pass_field = new html_passwordfield(array('name' => '_pass', 'id' => 'imappass'));
?>
if (isset($_POST['imaptest']) && !empty($_POST['_host']) && !empty($_POST['_user'])) {
- require_once 'include/rcube_imap.inc';
-
echo '<p>Connecting to ' . Q($_POST['_host']) . '...<br />';
$a_host = parse_url($_POST['_host']);
<p>The basic requirements are:</p>
<ul>
- <li>PHP Version 4.3.1 or greater including
+ <li>PHP Version 5.2.0 or greater including
<ul>
<li>PCRE (perl compatible regular expression)</li>
<li>Session support</li>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: bugs.inc 666 2007-08-07 21:02:12Z thomasb $
+ $Id: bugs.inc 1291 2008-04-12 13:54:45Z thomasb $
*/
*/
function log_bug($arg_arr)
{
- global $CONFIG, $INSTALL_PATH;
+ global $CONFIG;
$program = $arg_arr['type']=='xpath' ? 'XPath' : strtoupper($arg_arr['type']);
// write error to local log file
$arg_arr['line']);
if (empty($CONFIG['log_dir']))
- $CONFIG['log_dir'] = $INSTALL_PATH.'logs';
+ $CONFIG['log_dir'] = INSTALL_PATH.'logs';
// try to open specific log file for writing
if ($fp = @fopen($CONFIG['log_dir'].'/errors', 'a'))
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/html.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev, - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Helper class to create valid XHTML code |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: $
+
+ */
+
+
+/**
+ * Class for HTML code creation
+ *
+ * @package HTML
+ */
+class html
+{
+ protected $tagname;
+ protected $attrib = array();
+ protected $allowed;
+ protected $content;
+
+ public static $common_attrib = array('id','class','style','title','align');
+ public static $containers = array('div','span','p','h1','h2','h3','form','textarea');
+ public static $lc_tags = true;
+
+ /**
+ * Constructor
+ *
+ * @param array Hash array with tag attributes
+ */
+ public function __construct($attrib = array())
+ {
+ if (is_array($attrib)) {
+ $this->attrib = $attrib;
+ }
+ }
+
+ /**
+ * Return the tag code
+ *
+ * @return string The finally composed HTML tag
+ */
+ public function show()
+ {
+ return self::tag($this->tagname, $this->attrib, $this->content, $this->allowed);
+ }
+
+ /****** STATIC METHODS *******/
+
+ /**
+ * Generic method to create a HTML tag
+ *
+ * @param string Tag name
+ * @param array Tag attributes as key/value pairs
+ * @param string Optinal Tag content (creates a container tag)
+ * @param array List with allowed attributes, omit to allow all
+ * @return string The XHTML tag
+ */
+ public static function tag($tagname, $attrib = array(), $content = null, $allowed_attrib = null)
+ {
+ $inline_tags = array('a','span','img');
+ $suffix = $attrib['nl'] || ($content && $attrib['nl'] !== false && !in_array($tagname, $inline_tags)) ? "\n" : '';
+
+ $tagname = self::$lc_tags ? strtolower($tagname) : $tagname;
+ if ($content || in_array($tagname, self::$containers)) {
+ $templ = $attrib['noclose'] ? "<%s%s>%s" : "<%s%s>%s</%s>%s";
+ unset($attrib['noclose']);
+ return sprintf($templ, $tagname, self::attrib_string($attrib, $allowed_attrib), $content, $tagname, $suffix);
+ }
+ else {
+ return sprintf("<%s%s />%s", $tagname, self::attrib_string($attrib, $allowed_attrib), $suffix);
+ }
+ }
+
+ /**
+ * Derrived method for <div> containers
+ *
+ * @param mixed Hash array with tag attributes or string with class name
+ * @param string Div content
+ * @return string HTML code
+ * @see html::tag()
+ */
+ public static function div($attr = null, $cont = null)
+ {
+ if (is_string($attr)) {
+ $attr = array('class' => $attr);
+ }
+ return self::tag('div', $attr, $cont, self::$common_attrib);
+ }
+
+ /**
+ * Derrived method for <p> blocks
+ *
+ * @param mixed Hash array with tag attributes or string with class name
+ * @param string Paragraph content
+ * @return string HTML code
+ * @see html::tag()
+ */
+ public static function p($attr = null, $cont = null)
+ {
+ if (is_string($attr)) {
+ $attr = array('class' => $attr);
+ }
+ return self::tag('p', $attr, $cont, self::$common_attrib);
+ }
+
+ /**
+ * Derrived method to create <img />
+ *
+ * @param mixed Hash array with tag attributes or string with image source (src)
+ * @return string HTML code
+ * @see html::tag()
+ */
+ public static function img($attr = null)
+ {
+ if (is_string($attr)) {
+ $attr = array('src' => $attr);
+ }
+ return self::tag('img', $attr + array('alt' => ''), null, array_merge(self::$common_attrib, array('src','alt','width','height','border','usemap')));
+ }
+
+ /**
+ * Derrived method for link tags
+ *
+ * @param mixed Hash array with tag attributes or string with link location (href)
+ * @param string Link content
+ * @return string HTML code
+ * @see html::tag()
+ */
+ public static function a($attr, $cont)
+ {
+ if (is_string($attr)) {
+ $attr = array('href' => $attr);
+ }
+ return self::tag('a', $attr, $cont, array_merge(self::$common_attrib, array('href','target','name','onclick','onmouseover','onmouseout')));
+ }
+
+ /**
+ * Derrived method for inline span tags
+ *
+ * @param mixed Hash array with tag attributes or string with class name
+ * @param string Tag content
+ * @return string HTML code
+ * @see html::tag()
+ */
+ public static function span($attr, $cont)
+ {
+ if (is_string($attr)) {
+ $attr = array('class' => $attr);
+ }
+ return self::tag('span', $attr, $cont, self::$common_attrib);
+ }
+
+ /**
+ * Derrived method for form element labels
+ *
+ * @param mixed Hash array with tag attributes or string with 'for' attrib
+ * @param string Tag content
+ * @return string HTML code
+ * @see html::tag()
+ */
+ public static function label($attr, $cont)
+ {
+ if (is_string($attr)) {
+ $attr = array('for' => $attr);
+ }
+ return self::tag('label', $attr, $cont, array_merge(self::$common_attrib, array('for')));
+ }
+
+ /**
+ * Derrived method for line breaks
+ *
+ * @return string HTML code
+ * @see html::tag()
+ */
+ public static function br()
+ {
+ return self::tag('br');
+ }
+
+ /**
+ * Create string with attributes
+ *
+ * @param array Associative arry with tag attributes
+ * @param array List of allowed attributes
+ * @return string Valid attribute string
+ */
+ public static function attrib_string($attrib = array(), $allowed = null)
+ {
+ if (empty($attrib)) {
+ return '';
+ }
+
+ $allowed_f = array_flip((array)$allowed);
+ $attrib_arr = array();
+ foreach ($attrib as $key => $value) {
+ // skip size if not numeric
+ if (($key=='size' && !is_numeric($value))) {
+ continue;
+ }
+
+ // ignore "internal" or not allowed attributes
+ if ($key == 'nl' || ($allowed && !isset($allowed_f[$key])) || $value === null) {
+ continue;
+ }
+
+ // skip empty eventhandlers
+ if (preg_match('/^on[a-z]+/', $key) && !$value) {
+ continue;
+ }
+
+ // attributes with no value
+ if (in_array($key, array('checked', 'multiple', 'disabled', 'selected'))) {
+ if ($value) {
+ $attrib_arr[] = sprintf('%s="%s"', $key, $key);
+ }
+ }
+ else if ($key=='value') {
+ $attrib_arr[] = sprintf('%s="%s"', $key, Q($value, 'strict', false));
+ }
+ else {
+ $attrib_arr[] = sprintf('%s="%s"', $key, Q($value));
+ }
+ }
+ return count($attrib_arr) ? ' '.implode(' ', $attrib_arr) : '';
+ }
+}
+
+/**
+ * Class to create an HTML input field
+ *
+ * @package HTML
+ */
+class html_inputfield extends html
+{
+ protected $tagname = 'input';
+ protected $type = 'text';
+
+ public function __construct($attrib = array())
+ {
+ if (is_array($attrib)) {
+ $this->attrib = $attrib;
+ }
+
+ if ($attrib['type']) {
+ $this->type = $attrib['type'];
+ }
+
+ if ($attrib['newline']) {
+ $this->newline = true;
+ }
+ }
+
+ /**
+ * Compose input tag
+ *
+ * @param string Field value
+ * @param array Additional attributes to override
+ * @return string HTML output
+ */
+ public function show($value = null, $attrib = null)
+ {
+ // overwrite object attributes
+ if (is_array($attrib)) {
+ $this->attrib = array_merge($this->attrib, $attrib);
+ }
+
+ // set value attribute
+ if ($value !== null) {
+ $this->attrib['value'] = $value;
+ }
+ // set type
+ $this->attrib['type'] = $this->type;
+ return parent::show();
+ }
+}
+
+/**
+ * Class to create an HTML password field
+ *
+ * @package HTML
+ */
+class html_passwordfield extends html_inputfield
+{
+ protected $type = 'password';
+}
+
+/**
+ * Class to create an hidden HTML input field
+ *
+ * @package HTML
+ */
+
+class html_hiddenfield extends html_inputfield
+{
+ protected $type = 'hidden';
+ protected $fields_arr = array();
+ protected $newline = true;
+
+ /**
+ * Constructor
+ *
+ * @param array Named tag attributes
+ */
+ public function __construct($attrib = null)
+ {
+ if (is_array($attrib)) {
+ $this->add($attrib);
+ }
+ }
+
+ /**
+ * Add a hidden field to this instance
+ *
+ * @param array Named tag attributes
+ */
+ public function add($attrib)
+ {
+ $this->fields_arr[] = $attrib;
+ }
+
+ /**
+ * Create HTML code for the hidden fields
+ *
+ * @return string Final HTML code
+ */
+ public function show()
+ {
+ $out = '';
+ foreach ($this->fields_arr as $attrib) {
+ $out .= self::tag($this->tagname, array('type' => $this->type) + $attrib);
+ }
+ return $out;
+ }
+}
+
+/**
+ * Class to create HTML radio buttons
+ *
+ * @package HTML
+ */
+class html_radiobutton extends html_inputfield
+{
+ protected $type = 'radio';
+
+ /**
+ * Get HTML code for this object
+ *
+ * @param string Value of the checked field
+ * @param array Additional attributes to override
+ * @return string HTML output
+ */
+ public function show($value = '', $attrib = null)
+ {
+ // overwrite object attributes
+ if (is_array($attrib)) {
+ $this->attrib = array_merge($this->attrib, $attrib);
+ }
+
+ // set value attribute
+ $this->attrib['checked'] = ((string)$value == (string)$this->attrib['value']);
+
+ return parent::show();
+ }
+}
+
+/**
+ * Class to create HTML checkboxes
+ *
+ * @package HTML
+ */
+class html_checkbox extends html_inputfield
+{
+ protected $type = 'checkbox';
+
+ /**
+ * Get HTML code for this object
+ *
+ * @param string Value of the checked field
+ * @param array Additional attributes to override
+ * @return string HTML output
+ */
+ public function show($value = '', $attrib = null)
+ {
+ // overwrite object attributes
+ if (is_array($attrib)) {
+ $this->attrib = array_merge($this->attrib, $attrib);
+ }
+
+ // set value attribute
+ $this->attrib['checked'] = ((string)$value == (string)$this->attrib['value']);
+
+ return parent::show();
+ }
+}
+
+/**
+ * Class to create an HTML textarea
+ *
+ * @package HTML
+ */
+class html_textarea extends html
+{
+ protected $tagname = 'textarea';
+ protected $allowed_attrib = array('name','rows','cols','wrap','tabindex');
+
+ /**
+ * Get HTML code for this object
+ *
+ * @param string Textbox value
+ * @param array Additional attributes to override
+ * @return string HTML output
+ */
+ public function show($value = '', $attrib = null)
+ {
+ // overwrite object attributes
+ if (is_array($attrib)) {
+ $this->attrib = array_merge($this->attrib, $attrib);
+ }
+
+ // take value attribute as content
+ if (empty($value) && !empty($this->attrib['value'])) {
+ $value = $this->attrib['value'];
+ }
+
+ // make shure we don't print the value attribute
+ if (isset($this->attrib['value'])) {
+ unset($this->attrib['value']);
+ }
+
+ if (!empty($value) && !isset($this->attrib['mce_editable'])) {
+ $value = Q($value, 'strict', false);
+ }
+ return self::tag($this->tagname, $this->attrib, $value, array_merge(self::$common_attrib, $this->allowed_attrib));
+ }
+}
+
+/**
+ * Builder for HTML drop-down menus
+ * Syntax:<pre>
+ * // create instance. arguments are used to set attributes of select-tag
+ * $select = new html_select(array('name' => 'fieldname'));
+ *
+ * // add one option
+ * $select->add('Switzerland', 'CH');
+ *
+ * // add multiple options
+ * $select->add(array('Switzerland','Germany'), array('CH','DE'));
+ *
+ * // generate pulldown with selection 'Switzerland' and return html-code
+ * // as second argument the same attributes available to instanciate can be used
+ * print $select->show('CH');
+ * </pre>
+ *
+ * @package HTML
+ */
+class html_select extends html
+{
+ protected $tagname = 'select';
+ protected $options = array();
+
+ /**
+ * Add a new option to this drop-down
+ *
+ * @param mixed Option name or array with option names
+ * @param mixed Option value or array with option values
+ */
+ public function add($names, $values = null)
+ {
+ if (is_array($names)) {
+ foreach ($names as $i => $text) {
+ $this->options[] = array('text' => $text, 'value' => $values[$i]);
+ }
+ }
+ else {
+ $this->options[] = array('text' => $names, 'value' => $values);
+ }
+ }
+
+
+ /**
+ * Get HTML code for this object
+ *
+ * @param string Value of the selection option
+ * @param array Additional attributes to override
+ * @return string HTML output
+ */
+ public function show($select = array(), $attrib = null)
+ {
+ // overwrite object attributes
+ if (is_array($attrib)) {
+ $this->attrib = array_merge($this->attrib, $attrib);
+ }
+
+ $this->content = "\n";
+ $select = (array)$select;
+ foreach ($this->options as $option) {
+ $attr = array(
+ 'value' => $option['value'],
+ 'selected' => (in_array($option['value'], $select, true) ||
+ in_array($option['text'], $select, true)) ? 1 : null);
+
+ $this->content .= self::tag('option', $attr, Q($option['text']));
+ }
+ return parent::show();
+ }
+}
+
+
+/**
+ * Class to build an HTML table
+ *
+ * @package HTML
+ */
+class html_table extends html
+{
+ protected $tagname = 'table';
+ protected $allowed = array('id','class','style','width','summary','cellpadding','cellspacing','border');
+ private $header = array();
+ private $rows = array();
+ private $rowindex = 0;
+ private $colindex = 0;
+
+
+ public function __construct($attrib = array())
+ {
+ $this->attrib = array_merge($attrib, array('summary' => '', 'border' => 0));
+ }
+
+ /**
+ * Add a table cell
+ *
+ * @param array Cell attributes
+ * @param string Cell content
+ */
+ public function add($attr, $cont)
+ {
+ if (is_string($attr)) {
+ $attr = array('class' => $attr);
+ }
+
+ $cell = new stdClass;
+ $cell->attrib = $attr;
+ $cell->content = $cont;
+
+ $this->rows[$this->rowindex]->cells[$this->colindex] = $cell;
+ $this->colindex++;
+
+ if ($this->attrib['cols'] && $this->colindex == $this->attrib['cols']) {
+ $this->add_row();
+ }
+ }
+
+ /**
+ * Add a table header cell
+ *
+ * @param array Cell attributes
+ * @param string Cell content
+ */
+ private function add_header($attr, $cont)
+ {
+ if (is_string($attr))
+ $attr = array('class' => $attr);
+
+ $cell = new stdClass;
+ $cell->attrib = $attr;
+ $cell->content = $cont;
+ $this->header[] = $cell;
+ }
+
+ /**
+ * Jump to next row
+ *
+ * @param array Row attributes
+ */
+ private function add_row($attr = array())
+ {
+ $this->rowindex++;
+ $this->colindex = 0;
+ $this->rows[$this->rowindex] = new stdClass;
+ $this->rows[$this->rowindex]->attrib = $attr;
+ $this->rows[$this->rowindex]->cells = array();
+ }
+
+
+ /**
+ * Build HTML output of the table data
+ *
+ * @param array Table attributes
+ * @return string The final table HTML code
+ */
+ public function show($attr = array())
+ {
+ $this->attrib = array_merge($this->attrib, $attr);
+ $thead = $tbody = "";
+
+ // include <thead>
+ if (!empty($this->header)) {
+ $rowcontent = '';
+ foreach ($this->header as $c => $col) {
+ $rowcontent .= self::tag('th', $col->attrib, $col->content);
+ }
+ $thead = self::tag('thead', null, self::tag('tr', null, $rowcontent));
+ }
+
+ foreach ($this->rows as $r => $row) {
+ $rowcontent = '';
+ foreach ($row->cells as $c => $col) {
+ $rowcontent .= self::tag('td', $col->attrib, $col->content);
+ }
+
+ if ($r < $this->rowindex || count($row->cells)) {
+ $tbody .= self::tag('tr', $rows->attrib, $rowcontent);
+ }
+ }
+
+ if ($this->attrib['rowsonly']) {
+ return $tbody;
+ }
+
+ // add <tbody>
+ $this->content = $thead . self::tag('tbody', null, $tbody);
+
+ unset($this->attrib['cols'], $this->attrib['rowsonly']);
+ return parent::show();
+ }
+}
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/iniset.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2008, RoundCube Dev, - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Setup the application envoronment required to process |
+ | any request. |
+ +-----------------------------------------------------------------------+
+ | Author: Till Klampaeckel <till@php.net> |
+ | Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: cache.inc 88 2005-12-03 16:54:12Z roundcube $
+
+*/
+
+
+// application constants
+define('RCMAIL_VERSION', '0.2-alpha');
+define('RCMAIL_CHARSET', 'UTF-8');
+define('JS_OBJECT_NAME', 'rcmail');
+
+if (!defined('INSTALL_PATH')) {
+ define('INSTALL_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/');
+}
+
+// make sure path_separator is defined
+if (!defined('PATH_SEPARATOR')) {
+ define('PATH_SEPARATOR', (eregi('win', PHP_OS) ? ';' : ':'));
+}
+
+// RC include folders MUST be included FIRST to avoid other
+// possible not compatible libraries (i.e PEAR) to be included
+// instead the ones provided by RC
+$include_path = INSTALL_PATH . PATH_SEPARATOR;
+$include_path.= INSTALL_PATH . 'program' . PATH_SEPARATOR;
+$include_path.= INSTALL_PATH . 'program/lib' . PATH_SEPARATOR;
+$include_path.= INSTALL_PATH . 'program/include' . PATH_SEPARATOR;
+$include_path.= ini_get('include_path');
+
+if (set_include_path($include_path) === false) {
+ die('Fatal error: ini_set/set_include_path does not work.');
+}
+
+ini_set('session.name', 'roundcube_sessid');
+ini_set('session.use_cookies', 1);
+ini_set('session.gc_maxlifetime', 21600);
+ini_set('session.gc_divisor', 500);
+ini_set('error_reporting', E_ALL&~E_NOTICE);
+set_magic_quotes_runtime(0);
+
+// increase maximum execution time for php scripts
+// (does not work in safe mode)
+if (!ini_get('safe_mode')) {
+ set_time_limit(120);
+}
+
+/**
+ * Use PHP5 autoload for dynamic class loading
+ *
+ * @todo Make Zend, PEAR etc play with this
+ */
+function __autoload($classname)
+{
+ $filename = preg_replace(
+ array('/MDB2_(.+)/', '/Mail_(.+)/', '/^html_.+/', '/^utf8$/'),
+ array('MDB2/\\1', 'Mail/\\1', 'html', 'utf8.class'),
+ $classname
+ );
+ include_once $filename. '.php';
+}
+
+/**
+ * Local callback function for PEAR errors
+ */
+function rcube_pear_error($err)
+{
+ error_log(sprintf("%s (%s): %s",
+ $err->getMessage(),
+ $err->getCode(),
+ $err->getUserinfo()), 0);
+}
+
+// include global functions
+require_once 'include/bugs.inc';
+require_once 'include/main.inc';
+require_once 'include/rcube_shared.inc';
+
+
+// set PEAR error handling (will also load the PEAR main class)
+PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'rcube_pear_error');
+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: main.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: main.inc 1459 2008-05-30 19:55:28Z alec $
*/
*/
require_once('lib/utf7.inc');
-require_once('include/rcube_user.inc');
require_once('include/rcube_shared.inc');
-require_once('include/rcmail_template.inc');
// define constannts for input reading
define('RCUBE_INPUT_GET', 0x0101);
define('RCUBE_INPUT_GPC', 0x0103);
-/**
- * Initial startup function
- * to register session, create database and imap connections
- *
- * @param string Current task
- */
-function rcmail_startup($task='mail')
- {
- global $sess_id, $sess_user_lang;
- global $CONFIG, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB, $USER;
-
- // check client
- $BROWSER = rcube_browser();
-
- // load configuration
- $CONFIG = rcmail_load_config();
-
- // set session domain
- if (isset($CONFIG['session_domain']) && !empty($CONFIG['session_domain'])) {
- ini_set('session.cookie_domain', $CONFIG['session_domain']);
- }
-
- // set session garbage collecting time according to session_lifetime
- if (!empty($CONFIG['session_lifetime']))
- ini_set('session.gc_maxlifetime', ($CONFIG['session_lifetime']) * 120);
-
- // prepare DB connection
- $dbwrapper = empty($CONFIG['db_backend']) ? 'db' : $CONFIG['db_backend'];
- $dbclass = "rcube_" . $dbwrapper;
- require_once("include/$dbclass.inc");
-
- $DB = new $dbclass($CONFIG['db_dsnw'], $CONFIG['db_dsnr'], $CONFIG['db_persistent']);
- $DB->sqlite_initials = $INSTALL_PATH.'SQL/sqlite.initial.sql';
- $DB->set_debug((bool)$CONFIG['sql_debug']);
- $DB->db_connect('w');
-
- // use database for storing session data
- include_once('include/session.inc');
-
- // init session
- session_start();
- $sess_id = session_id();
-
- // create session and set session vars
- if (!isset($_SESSION['auth_time']))
- {
- $_SESSION['user_lang'] = rcube_language_prop($CONFIG['locale_string']);
- $_SESSION['auth_time'] = time();
- $_SESSION['temp'] = true;
- }
-
- // set session vars global
- $sess_user_lang = rcube_language_prop($_SESSION['user_lang']);
-
- // create user object
- $USER = new rcube_user($_SESSION['user_id']);
-
- // overwrite config with user preferences
- $CONFIG = array_merge($CONFIG, (array)$USER->get_prefs());
-
-
- // reset some session parameters when changing task
- if ($_SESSION['task'] != $task)
- unset($_SESSION['page']);
-
- // set current task to session
- $_SESSION['task'] = $task;
-
- // create IMAP object
- if ($task=='mail')
- rcmail_imap_init();
-
-
- // set localization
- if ($CONFIG['locale_string'])
- setlocale(LC_ALL, $CONFIG['locale_string']);
- else if ($sess_user_lang)
- setlocale(LC_ALL, $sess_user_lang);
-
-
- register_shutdown_function('rcmail_shutdown');
- }
-
-
-/**
- * Load roundcube configuration array
- *
- * @return array Named configuration parameters
- */
-function rcmail_load_config()
- {
- global $INSTALL_PATH;
-
- // load config file
- include_once('config/main.inc.php');
- $conf = is_array($rcmail_config) ? $rcmail_config : array();
-
- // load host-specific configuration
- rcmail_load_host_config($conf);
-
- $conf['skin_path'] = $conf['skin_path'] ? unslashify($conf['skin_path']) : 'skins/default';
-
- // load db conf
- include_once('config/db.inc.php');
- $conf = array_merge($conf, $rcmail_config);
-
- if (empty($conf['log_dir']))
- $conf['log_dir'] = $INSTALL_PATH.'logs';
- else
- $conf['log_dir'] = unslashify($conf['log_dir']);
-
- // set PHP error logging according to config
- if ($conf['debug_level'] & 1)
- {
- ini_set('log_errors', 1);
- ini_set('error_log', $conf['log_dir'].'/errors');
- }
- if ($conf['debug_level'] & 4)
- ini_set('display_errors', 1);
- else
- ini_set('display_errors', 0);
-
- return $conf;
- }
-
-
-/**
- * Load a host-specific config file if configured
- * This will merge the host specific configuration with the given one
- *
- * @param array Global configuration parameters
- */
-function rcmail_load_host_config(&$config)
- {
- $fname = NULL;
-
- if (is_array($config['include_host_config']))
- $fname = $config['include_host_config'][$_SERVER['HTTP_HOST']];
- else if (!empty($config['include_host_config']))
- $fname = preg_replace('/[^a-z0-9\.\-_]/i', '', $_SERVER['HTTP_HOST']) . '.inc.php';
-
- if ($fname && is_file('config/'.$fname))
- {
- include('config/'.$fname);
- $config = array_merge($config, $rcmail_config);
- }
- }
-
-
-/**
- * Create unique authorization hash
- *
- * @param string Session ID
- * @param int Timestamp
- * @return string The generated auth hash
- */
-function rcmail_auth_hash($sess_id, $ts)
- {
- global $CONFIG;
-
- $auth_string = sprintf('rcmail*sess%sR%s*Chk:%s;%s',
- $sess_id,
- $ts,
- $CONFIG['ip_check'] ? $_SERVER['REMOTE_ADDR'] : '***.***.***.***',
- $_SERVER['HTTP_USER_AGENT']);
-
- if (function_exists('sha1'))
- return sha1($auth_string);
- else
- return md5($auth_string);
- }
-
-
-/**
- * Check the auth hash sent by the client against the local session credentials
- *
- * @return boolean True if valid, False if not
- */
-function rcmail_authenticate_session()
- {
- global $CONFIG, $SESS_CLIENT_IP, $SESS_CHANGED;
-
- // advanced session authentication
- if ($CONFIG['double_auth'])
- {
- $now = time();
- $valid = ($_COOKIE['sessauth'] == rcmail_auth_hash(session_id(), $_SESSION['auth_time']) ||
- $_COOKIE['sessauth'] == rcmail_auth_hash(session_id(), $_SESSION['last_auth']));
-
- // renew auth cookie every 5 minutes (only for GET requests)
- if (!$valid || ($_SERVER['REQUEST_METHOD']!='POST' && $now-$_SESSION['auth_time'] > 300))
- {
- $_SESSION['last_auth'] = $_SESSION['auth_time'];
- $_SESSION['auth_time'] = $now;
- setcookie('sessauth', rcmail_auth_hash(session_id(), $now));
- }
- }
- else
- $valid = $CONFIG['ip_check'] ? $_SERVER['REMOTE_ADDR'] == $SESS_CLIENT_IP : true;
-
- // check session filetime
- if (!empty($CONFIG['session_lifetime']) && isset($SESS_CHANGED)
- && $SESS_CHANGED + $CONFIG['session_lifetime']*60 < time())
- $valid = false;
-
- return $valid;
- }
-
-
-/**
- * Create global IMAP object and connect to server
- *
- * @param boolean True if connection should be established
- */
-function rcmail_imap_init($connect=FALSE)
- {
- global $CONFIG, $DB, $IMAP, $OUTPUT;
-
- $IMAP = new rcube_imap($DB);
- $IMAP->debug_level = $CONFIG['debug_level'];
- $IMAP->skip_deleted = $CONFIG['skip_deleted'];
-
-
- // connect with stored session data
- if ($connect)
- {
- if (!($conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl'])))
- $OUTPUT->show_message('imaperror', 'error');
-
- rcmail_set_imap_prop();
- }
-
- // enable caching of imap data
- if ($CONFIG['enable_caching']===TRUE)
- $IMAP->set_caching(TRUE);
-
- // set pagesize from config
- if (isset($CONFIG['pagesize']))
- $IMAP->set_pagesize($CONFIG['pagesize']);
- }
-
-
-/**
- * Set root dir and last stored mailbox
- * This must be done AFTER connecting to the server!
- */
-function rcmail_set_imap_prop()
- {
- global $CONFIG, $IMAP;
-
- if (!empty($CONFIG['default_charset']))
- $IMAP->set_charset($CONFIG['default_charset']);
-
- // set root dir from config
- if (!empty($CONFIG['imap_root']))
- $IMAP->set_rootdir($CONFIG['imap_root']);
-
- if (is_array($CONFIG['default_imap_folders']))
- $IMAP->set_default_mailboxes($CONFIG['default_imap_folders']);
-
- if (!empty($_SESSION['mbox']))
- $IMAP->set_mailbox($_SESSION['mbox']);
- if (isset($_SESSION['page']))
- $IMAP->set_page($_SESSION['page']);
- }
-
-
-/**
- * Do these things on script shutdown
- */
-function rcmail_shutdown()
- {
- global $IMAP, $CONTACTS;
-
- if (is_object($IMAP))
- {
- $IMAP->close();
- $IMAP->write_cache();
- }
-
- if (is_object($CONTACTS))
- $CONTACTS->close();
-
- // before closing the database connection, write session data
- session_write_close();
- }
-
-
-/**
- * Destroy session data and remove cookie
- */
-function rcmail_kill_session()
- {
- global $USER;
-
- if ((isset($_SESSION['sort_col']) && $_SESSION['sort_col']!=$a_user_prefs['message_sort_col']) ||
- (isset($_SESSION['sort_order']) && $_SESSION['sort_order']!=$a_user_prefs['message_sort_order']))
- {
- $a_user_prefs = array('message_sort_col' => $_SESSION['sort_col'], 'message_sort_order' => $_SESSION['sort_order']);
- $USER->save_prefs($a_user_prefs);
- }
-
- $_SESSION = array('user_lang' => $GLOBALS['sess_user_lang'], 'auth_time' => time(), 'temp' => true);
- setcookie('sessauth', '-del-', time()-60);
- $USER->reset();
- }
-
/**
* Return correct name for a specific database table
function get_table_name($table)
{
global $CONFIG;
-
+
// return table name if configured
$config_key = 'db_table_'.$table;
if (strlen($CONFIG[$config_key]))
return $CONFIG[$config_key];
-
+
return $table;
}
/**
* Return correct name for a specific database sequence
- * (used for Postres only)
+ * (used for Postgres only)
*
* @param string Secuence name
* @return string Translated sequence name
*/
function get_sequence_name($sequence)
{
- global $CONFIG;
-
// return table name if configured
$config_key = 'db_sequence_'.$sequence;
+ $opt = rcmail::get_instance()->config->get($config_key);
- if (strlen($CONFIG[$config_key]))
- return $CONFIG[$config_key];
-
- return $sequence;
- }
-
-
-/**
- * Check the given string and returns language properties
- *
- * @param string Language code
- * @param string Peropert name
- * @return string Property value
- */
-function rcube_language_prop($lang, $prop='lang')
- {
- global $INSTALL_PATH;
- static $rcube_languages, $rcube_language_aliases, $rcube_charsets;
-
- if (empty($rcube_languages))
- @include($INSTALL_PATH.'program/localization/index.inc');
-
- // check if we have an alias for that language
- if (!isset($rcube_languages[$lang]) && isset($rcube_language_aliases[$lang]))
- $lang = $rcube_language_aliases[$lang];
-
- // try the first two chars
- if (!isset($rcube_languages[$lang]) && strlen($lang)>2)
+ if (!empty($opt))
{
- $lang = substr($lang, 0, 2);
- $lang = rcube_language_prop($lang);
- }
-
- if (!isset($rcube_languages[$lang]))
- $lang = 'en_US';
-
- // language has special charset configured
- if (isset($rcube_charsets[$lang]))
- $charset = $rcube_charsets[$lang];
- else
- $charset = 'UTF-8';
-
-
- if ($prop=='charset')
- return $charset;
- else
- return $lang;
- }
-
-
-/**
- * Init output object for GUI and add common scripts.
- * This will instantiate a rcmail_template object and set
- * environment vars according to the current session and configuration
- */
-function rcmail_load_gui()
- {
- global $CONFIG, $OUTPUT, $sess_user_lang;
-
- // init output page
- $OUTPUT = new rcmail_template($CONFIG, $GLOBALS['_task']);
- $OUTPUT->set_env('comm_path', $GLOBALS['COMM_PATH']);
-
- if (is_array($CONFIG['javascript_config']))
- {
- foreach ($CONFIG['javascript_config'] as $js_config_var)
- $OUTPUT->set_env($js_config_var, $CONFIG[$js_config_var]);
- }
-
- if (!empty($GLOBALS['_framed']))
- $OUTPUT->set_env('framed', true);
+ $db = &rcmail::get_instance()->db;
- // set locale setting
- rcmail_set_locale($sess_user_lang);
-
- // set user-selected charset
- if (!empty($CONFIG['charset']))
- $OUTPUT->set_charset($CONFIG['charset']);
-
- // register common UI objects
- $OUTPUT->add_handlers(array(
- 'loginform' => 'rcmail_login_form',
- 'username' => 'rcmail_current_username',
- 'message' => 'rcmail_message_container',
- 'charsetselector' => 'rcmail_charset_selector',
- ));
-
- // add some basic label to client
- if (!$OUTPUT->ajax_call)
- rcube_add_label('loading', 'movingmessage');
- }
-
-
-/**
- * Set localization charset based on the given language.
- * This also creates a global property for mbstring usage.
- */
-function rcmail_set_locale($lang)
- {
- global $OUTPUT, $MBSTRING;
- static $s_mbstring_loaded = NULL;
-
- // settings for mbstring module (by Tadashi Jokagi)
- if (is_null($s_mbstring_loaded))
- $MBSTRING = $s_mbstring_loaded = extension_loaded("mbstring");
- else
- $MBSTRING = $s_mbstring_loaded = FALSE;
-
- if ($MBSTRING)
- mb_internal_encoding(RCMAIL_CHARSET);
-
- $OUTPUT->set_charset(rcube_language_prop($lang, 'charset'));
- }
-
-
-/**
- * Auto-select IMAP host based on the posted login information
- *
- * @return string Selected IMAP host
- */
-function rcmail_autoselect_host()
- {
- global $CONFIG;
-
- $host = isset($_POST['_host']) ? get_input_value('_host', RCUBE_INPUT_POST) : $CONFIG['default_host'];
- if (is_array($host))
- {
- list($user, $domain) = explode('@', get_input_value('_user', RCUBE_INPUT_POST));
- if (!empty($domain))
+ if($db->db_provider=='pgsql') // just for sure
{
- foreach ($host as $imap_host => $mail_domains)
- if (is_array($mail_domains) && in_array($domain, $mail_domains))
- {
- $host = $imap_host;
- break;
- }
- }
-
- // take the first entry if $host is still an array
- if (is_array($host))
- $host = array_shift($host);
- }
+ $db->db_handle->setOption('disable_smart_seqname', true);
+ $db->db_handle->setOption('seqname_format', '%s');
+ }
- return $host;
+ return $CONFIG[$opt];
+ }
+
+ return $sequence;
}
/**
- * Perfom login to the IMAP server and to the webmail service.
- * This will also create a new user entry if auto_create_user is configured.
+ * Get localized text in the desired language
+ * It's a global wrapper for rcmail::gettext()
*
- * @param string IMAP user name
- * @param string IMAP password
- * @param string IMAP host
- * @return boolean True on success, False on failure
+ * @param mixed Named parameters array or label name
+ * @return string Localized text
+ * @see rcmail::gettext()
*/
-function rcmail_login($user, $pass, $host=NULL)
- {
- global $CONFIG, $IMAP, $DB, $USER, $sess_user_lang;
- $user_id = NULL;
-
- if (!$host)
- $host = $CONFIG['default_host'];
-
- // Validate that selected host is in the list of configured hosts
- if (is_array($CONFIG['default_host']))
- {
- $allowed = FALSE;
- foreach ($CONFIG['default_host'] as $key => $host_allowed)
- {
- if (!is_numeric($key))
- $host_allowed = $key;
- if ($host == $host_allowed)
- {
- $allowed = TRUE;
- break;
- }
- }
- if (!$allowed)
- return FALSE;
- }
- else if (!empty($CONFIG['default_host']) && $host != $CONFIG['default_host'])
- return FALSE;
-
- // parse $host URL
- $a_host = parse_url($host);
- if ($a_host['host'])
- {
- $host = $a_host['host'];
- $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null;
- $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $CONFIG['default_port']);
- }
- else
- $imap_port = $CONFIG['default_port'];
-
-
- /* Modify username with domain if required
- Inspired by Marco <P0L0_notspam_binware.org>
- */
- // Check if we need to add domain
- if (!empty($CONFIG['username_domain']) && !strpos($user, '@'))
- {
- if (is_array($CONFIG['username_domain']) && isset($CONFIG['username_domain'][$host]))
- $user .= '@'.$CONFIG['username_domain'][$host];
- else if (is_string($CONFIG['username_domain']))
- $user .= '@'.$CONFIG['username_domain'];
- }
-
- // try to resolve email address from virtuser table
- if (!empty($CONFIG['virtuser_file']) && strpos($user, '@'))
- $user = rcube_user::email2user($user);
-
- // lowercase username if it's an e-mail address (#1484473)
- if (strpos($user, '@'))
- $user = strtolower($user);
-
- // query if user already registered
- if ($existing = rcube_user::query($user, $host))
- $USER = $existing;
-
- // user already registered -> overwrite username
- if ($USER->ID)
- {
- $user_id = $USER->ID;
- $user = $USER->data['username'];
- }
-
- // exit if IMAP login failed
- if (!($imap_login = $IMAP->connect($host, $user, $pass, $imap_port, $imap_ssl)))
- return false;
-
- // user already registered
- if ($USER->ID)
- {
- // get user prefs
- $CONFIG = array_merge($CONFIG, (array)$USER->get_prefs());
-
- // set user specific language
- if (!empty($USER->data['language']))
- $sess_user_lang = $_SESSION['user_lang'] = $USER->data['language'];
-
- // update user's record
- $USER->touch();
- }
- // create new system user
- else if ($CONFIG['auto_create_user'])
- {
- if ($created = rcube_user::create($user, $host))
- {
- $USER = $created;
-
- // get existing mailboxes
- $a_mailboxes = $IMAP->list_mailboxes();
- }
- }
- else
- {
- raise_error(array(
- 'code' => 600,
- 'type' => 'php',
- 'file' => "config/main.inc.php",
- 'message' => "Acces denied for new user $user. 'auto_create_user' is disabled"
- ), true, false);
- }
-
- if ($USER->ID)
- {
- $_SESSION['user_id'] = $USER->ID;
- $_SESSION['username'] = $USER->data['username'];
- $_SESSION['imap_host'] = $host;
- $_SESSION['imap_port'] = $imap_port;
- $_SESSION['imap_ssl'] = $imap_ssl;
- $_SESSION['user_lang'] = $sess_user_lang;
- $_SESSION['password'] = encrypt_passwd($pass);
- $_SESSION['login_time'] = mktime();
-
- // force reloading complete list of subscribed mailboxes
- rcmail_set_imap_prop();
- $IMAP->clear_cache('mailboxes');
-
- if ($CONFIG['create_default_folders'])
- $IMAP->create_default_folders();
-
- return TRUE;
- }
-
- return FALSE;
- }
+function rcube_label($p)
+{
+ return rcmail::get_instance()->gettext($p);
+}
/**
*/
function rcmail_overwrite_action($action)
{
- global $OUTPUT;
- $GLOBALS['_action'] = $action;
- $OUTPUT->set_env('action', $action);
+ $app = rcmail::get_instance();
+ $app->action = $action;
+ $app->output->set_env('action', $action);
}
*/
function rcmail_url($action, $p=array(), $task=null)
{
- global $MAIN_TASKS, $COMM_PATH;
+ $app = rcmail::get_instance();
+
$qstring = '';
- $base = $COMM_PATH;
+ $base = $app->comm_path;
- if ($task && in_array($task, $MAIN_TASKS))
- $base = ereg_replace('_task=[a-z]+', '_task='.$task, $COMM_PATH);
+ if ($task && in_array($task, rcmail::$main_tasks))
+ $base = ereg_replace('_task=[a-z]+', '_task='.$task, $app->comm_path);
if (is_array($p))
foreach ($p as $key => $val)
}
-// @deprecated
-function show_message($message, $type='notice', $vars=NULL)
- {
- global $OUTPUT;
- $OUTPUT->show_message($message, $type, $vars);
- }
-
-
-/**
- * Encrypt IMAP password using DES encryption
- *
- * @param string Password to encrypt
- * @return string Encryprted string
- */
-function encrypt_passwd($pass)
-{
- if (function_exists('mcrypt_module_open') && ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""))) {
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
- mcrypt_generic_init($td, get_des_key(), $iv);
- $cypher = mcrypt_generic($td, $pass);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- }
- else if (function_exists('des')) {
- $cypher = des(get_des_key(), $pass, 1, 0, NULL);
- }
- else {
- $cypher = $pass;
-
- raise_error(array(
- 'code' => 500,
- 'type' => 'php',
- 'file' => __FILE__,
- 'message' => "Could not convert encrypt password. Make sure Mcrypt is installed or lib/des.inc is available"
- ), true, false);
- }
-
- return base64_encode($cypher);
-}
-
-
-/**
- * Decrypt IMAP password using DES encryption
- *
- * @param string Encrypted password
- * @return string Plain password
- */
-function decrypt_passwd($cypher)
-{
- if (function_exists('mcrypt_module_open') && ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""))) {
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
- mcrypt_generic_init($td, get_des_key(), $iv);
- $pass = mdecrypt_generic($td, base64_decode($cypher));
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- }
- else if (function_exists('des')) {
- $pass = des(get_des_key(), base64_decode($cypher), 0, 0, NULL);
- }
- else {
- $pass = base64_decode($cypher);
- }
-
- return preg_replace('/\x00/', '', $pass);
- }
-
-
-/**
- * Return a 24 byte key for the DES encryption
- *
- * @return string DES encryption key
- */
-function get_des_key()
- {
- $key = !empty($GLOBALS['CONFIG']['des_key']) ? $GLOBALS['CONFIG']['des_key'] : 'rcmail?24BitPwDkeyF**ECB';
- $len = strlen($key);
-
- // make sure the key is exactly 24 chars long
- if ($len<24)
- $key .= str_repeat('_', 24-$len);
- else if ($len>24)
- substr($key, 0, 24);
-
- return $key;
- }
-
-
-/**
- * Read directory program/localization and return a list of available languages
- *
- * @return array List of available localizations
- */
-function rcube_list_languages()
- {
- global $CONFIG, $INSTALL_PATH;
- static $sa_languages = array();
-
- if (!sizeof($sa_languages))
- {
- @include($INSTALL_PATH.'program/localization/index.inc');
-
- if ($dh = @opendir($INSTALL_PATH.'program/localization'))
- {
- while (($name = readdir($dh)) !== false)
- {
- if ($name{0}=='.' || !is_dir($INSTALL_PATH.'program/localization/'.$name))
- continue;
-
- if ($label = $rcube_languages[$name])
- $sa_languages[$name] = $label ? $label : $name;
- }
- closedir($dh);
- }
- }
- return $sa_languages;
- }
-
-
/**
* Add a localized label to the client environment
+ * @deprecated
*/
function rcube_add_label()
{
$arg_list = func_get_args();
foreach ($arg_list as $i => $name)
- $OUTPUT->command('add_label', $name, rcube_label($name));
+ $OUTPUT->add_label($name);
}
*/
function rcube_charset_convert($str, $from, $to=NULL)
{
- global $MBSTRING;
- static $convert_warning = false;
+ static $mbstring_loaded = null, $convert_warning = false;
$from = strtoupper($from);
$to = $to==NULL ? strtoupper(RCMAIL_CHARSET) : strtoupper($to);
if (function_exists('iconv') && $from != 'UTF-7' && $to != 'UTF-7')
{
$aliases['GB2312'] = 'GB18030';
- return iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str);
+ $_iconv = iconv(($aliases[$from] ? $aliases[$from] : $from), ($aliases[$to] ? $aliases[$to] : $to) . "//IGNORE", $str);
+ if ($_iconv !== false)
+ {
+ return $_iconv;
+ }
}
- // convert charset using mbstring module
- if ($MBSTRING)
+ // settings for mbstring module (by Tadashi Jokagi)
+ if (is_null($mbstring_loaded)) {
+ if ($mbstring_loaded = extension_loaded("mbstring"))
+ mb_internal_encoding(RCMAIL_CHARSET);
+ }
+
+ // convert charset using mbstring module
+ if ($mbstring_loaded)
{
$aliases['UTF-7'] = 'UTF7-IMAP';
$aliases['WINDOWS-1257'] = 'ISO-8859-13';
*/
function rep_specialchars_output($str, $enctype='', $mode='', $newlines=TRUE)
{
- global $OUTPUT_TYPE, $OUTPUT;
- static $html_encode_arr, $js_rep_table, $xml_rep_table;
-
+ global $OUTPUT;
+ static $html_encode_arr = false;
+ static $js_rep_table = false;
+ static $xml_rep_table = false;
+
+ $charset = $OUTPUT->get_charset();
+ $is_iso_8859_1 = false;
+ if ($charset == 'ISO-8859-1') {
+ $is_iso_8859_1 = true;
+ }
if (!$enctype)
$enctype = $GLOBALS['OUTPUT_TYPE'];
return rawurlencode($str);
// if the replace tables for XML and JS are not yet defined
- if (!$js_rep_table)
+ if ($js_rep_table===false)
{
$js_rep_table = $xml_rep_table = array();
$xml_rep_table['&'] = '&';
{
$xml_rep_table[Chr($c)] = "&#$c;";
- if ($OUTPUT->get_charset()=='ISO-8859-1')
+ if ($is_iso_8859_1)
$js_rep_table[Chr($c)] = sprintf("\\u%04x", $c);
}
// encode for javascript use
if ($enctype=='js')
{
- if ($OUTPUT->get_charset()!='UTF-8')
- $str = rcube_charset_convert($str, RCMAIL_CHARSET, $OUTPUT->get_charset());
+ if ($charset!='UTF-8')
+ $str = rcube_charset_convert($str, RCMAIL_CHARSET,$charset);
- return preg_replace(array("/\r?\n/", "/\r/"), array('\n', '\n'), addslashes(strtr($str, $js_rep_table)));
+ return preg_replace(array("/\r?\n/", "/\r/", '/<\\//'), array('\n', '\n', '<\\/'), addslashes(strtr($str, $js_rep_table)));
}
// no encoding given -> return original string
}
-/**
- * Wrapper for rcmail_template::parse()
- * @deprecated
- */
-function parse_template($name='main', $exit=true)
- {
- $GLOBALS['OUTPUT']->parse($name, $exit);
- }
-
-
/**
* Create a HTML table based on the given data
*
{
$zebra_class = $c%2 ? 'even' : 'odd';
- $table .= sprintf('<tr id="rcmrow%d" class="contact '.$zebra_class.'">'."\n", $row_data[$id_col]);
+ $table .= sprintf('<tr id="rcmrow%s" class="contact '.$zebra_class.'">'."\n", $row_data[$id_col]);
// format each col
foreach ($a_show_cols as $col)
if ($type=='checkbox')
{
$attrib['value'] = '1';
- $input = new checkbox($attrib);
+ $input = new html_checkbox($attrib);
}
else if ($type=='textarea')
{
$attrib['cols'] = $attrib['size'];
- $input = new textarea($attrib);
+ $input = new html_textarea($attrib);
}
else
- $input = new textfield($attrib);
+ $input = new html_inputfield($attrib);
// use value from post
if (!empty($_POST[$fname]))
function parse_attrib_string($str)
{
$attrib = array();
- preg_match_all('/\s*([-_a-z]+)=(["\'])([^"]+)\2/Ui', stripslashes($str), $regs, PREG_SET_ORDER);
+ preg_match_all('/\s*([-_a-z]+)=(["\'])??(?(2)([^\2]+)\2|(\S+?))/Ui', stripslashes($str), $regs, PREG_SET_ORDER);
// convert attributes to an associative array (name => value)
if ($regs)
foreach ($regs as $attr)
- $attrib[strtolower($attr[1])] = $attr[3];
+ {
+ $attrib[strtolower($attr[1])] = $attr[3] . $attr[4];
+ }
return $attrib;
}
*/
function format_date($date, $format=NULL)
{
- global $CONFIG, $sess_user_lang;
+ global $CONFIG;
$ts = NULL;
-
+
if (is_numeric($date))
$ts = $date;
else if (!empty($date))
- $ts = @strtotime($date);
-
+ {
+ while (($ts = @strtotime($date))===false)
+ {
+ // if we have a date in non-rfc format
+ // remove token from the end and try again
+ $d = explode(' ', $date);
+ array_pop($d);
+ if (!$d) break;
+ $date = implode(' ', $d);
+ }
+ }
+
if (empty($ts))
return '';
$out .= rcube_label(strtolower(date('M', $timestamp)));
// month name (long)
else if ($format{$i}=='F')
- $out .= rcube_label(strtolower(date('F', $timestamp)));
+ $out .= rcube_label('long'.strtolower(date('M', $timestamp)));
else
$out .= date($format{$i}, $timestamp);
}
if (!($GLOBALS['CONFIG']['debug_level'] & 4))
write_log('console', $msg);
- else if ($GLOBALS['REMOTE_REQUEST'])
+ else if ($GLOBALS['OUTPUT']->ajax_call)
print "/*\n $msg \n*/\n";
else
{
* Append a line to a logfile in the logs directory.
* Date will be added automatically to the line.
*
- * @param $name Name of logfile
- * @param $line Line to append
+ * @param $name name of log file
+ * @param line Line to append
*/
function write_log($name, $line)
{
- global $CONFIG, $INSTALL_PATH;
+ global $CONFIG;
if (!is_string($line))
$line = var_export($line, true);
$line);
if (empty($CONFIG['log_dir']))
- $CONFIG['log_dir'] = $INSTALL_PATH.'logs';
+ $CONFIG['log_dir'] = INSTALL_PATH.'logs';
// try to open specific log file for writing
if ($fp = @fopen($CONFIG['log_dir'].'/'.$name, 'a'))
$class_name = 'junk';
$js_name = htmlspecialchars(JQ($folder['id']));
- $out .= sprintf('<li id="rcmli%s" class="mailbox %s %s%s%s"><a href="%s"'.
+ $out .= sprintf('<li id="rcmli%s" class="mailbox %s %s%s"><a href="%s"'.
' onclick="return %s.command(\'list\',\'%s\',this)"'.
' onmouseover="return %s.focus_folder(\'%s\')"' .
' onmouseout="return %s.unfocus_folder(\'%s\')"' .
$folder_id,
$class_name,
$zebra_class,
- $unread_count ? ' unread' : '',
$folder['id']==$mbox_name ? ' selected' : '',
Q(rcmail_url('', array('_mbox' => $folder['id']))),
JS_OBJECT_NAME,
* Return html for a flat list <select> for the mailbox tree
* @access private
*/
-function rcmail_render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, $nestLevel=0)
+function rcmail_render_folder_tree_select(&$arrFolders, &$mbox_name, $maxlength, $nestLevel=0, $selected='')
{
global $IMAP, $OUTPUT;
$foldername = abbreviate_string($foldername, $maxlength);
}
- $out .= sprintf('<option value="%s">%s%s</option>'."\n",
+ $out .= sprintf('<option value="%s"%s>%s%s</option>'."\n",
htmlspecialchars($folder['id']),
+ ($selected == $foldername ? ' selected="selected"' : ''),
str_repeat(' ', $nestLevel*4),
Q($foldername));
if (!empty($folder['folders']))
- $out .= rcmail_render_folder_tree_select($folder['folders'], $mbox_name, $maxlength, $nestLevel+1);
+ $out .= rcmail_render_folder_tree_select($folder['folders'], $mbox_name, $maxlength, $nestLevel+1, $selected);
$idx++;
}
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcmail.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Application class providing core functions and holding |
+ | instances of all 'global' objects like db- and imap-connections |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_browser.php 328 2006-08-30 17:41:21Z thomasb $
+
+*/
+
+
+/**
+ * Application class of RoundCube Webmail
+ * implemented as singleton
+ *
+ * @package Core
+ */
+class rcmail
+{
+ static public $main_tasks = array('mail','settings','addressbook','login','logout');
+
+ static private $instance;
+
+ public $config;
+ public $user;
+ public $db;
+ public $imap;
+ public $output;
+ public $task = 'mail';
+ public $action = '';
+ public $comm_path = './';
+
+ private $texts;
+
+
+ /**
+ * This implements the 'singleton' design pattern
+ *
+ * @return object qvert The one and only instance
+ */
+ static function get_instance()
+ {
+ if (!self::$instance) {
+ self::$instance = new rcmail();
+ self::$instance->startup(); // init AFTER object was linked with self::$instance
+ }
+
+ return self::$instance;
+ }
+
+
+ /**
+ * Private constructor
+ */
+ private function __construct()
+ {
+ // load configuration
+ $this->config = new rcube_config();
+
+ register_shutdown_function(array($this, 'shutdown'));
+ }
+
+
+ /**
+ * Initial startup function
+ * to register session, create database and imap connections
+ *
+ * @todo Remove global vars $DB, $USER
+ */
+ private function startup()
+ {
+ $config_all = $this->config->all();
+
+ // set task and action properties
+ $this->set_task(strip_quotes(get_input_value('_task', RCUBE_INPUT_GPC)));
+ $this->action = strip_quotes(get_input_value('_action', RCUBE_INPUT_GPC));
+
+ // connect to database
+ $GLOBALS['DB'] = $this->get_dbh();
+
+ // use database for storing session data
+ include_once('include/session.inc');
+
+ // set session domain
+ if (!empty($config_all['session_domain'])) {
+ ini_set('session.cookie_domain', $config_all['session_domain']);
+ }
+ // set session garbage collecting time according to session_lifetime
+ if (!empty($config_all['session_lifetime'])) {
+ ini_set('session.gc_maxlifetime', ($config_all['session_lifetime']) * 120);
+ }
+
+ // start PHP session (if not in CLI mode)
+ if ($_SERVER['REMOTE_ADDR'])
+ session_start();
+
+ // set initial session vars
+ if (!isset($_SESSION['auth_time'])) {
+ $_SESSION['auth_time'] = time();
+ $_SESSION['temp'] = true;
+ }
+
+
+ // create user object
+ $this->set_user(new rcube_user($_SESSION['user_id']));
+
+ // reset some session parameters when changing task
+ if ($_SESSION['task'] != $this->task)
+ unset($_SESSION['page']);
+
+ // set current task to session
+ $_SESSION['task'] = $this->task;
+
+ // create IMAP object
+ if ($this->task == 'mail')
+ $this->imap_init();
+ }
+
+
+ /**
+ * Setter for application task
+ *
+ * @param string Task to set
+ */
+ public function set_task($task)
+ {
+ if (!in_array($task, self::$main_tasks))
+ $task = 'mail';
+
+ $this->task = $task;
+ $this->comm_path = './?_task=' . $task;
+
+ if ($this->output)
+ $this->output->set_env('task', $task);
+ }
+
+
+ /**
+ * Setter for system user object
+ *
+ * @param object rcube_user Current user instance
+ */
+ public function set_user($user)
+ {
+ if (is_object($user)) {
+ $this->user = $user;
+ $GLOBALS['USER'] = $this->user;
+
+ // overwrite config with user preferences
+ $this->config->merge((array)$this->user->get_prefs());
+ }
+
+ $_SESSION['language'] = $this->user->language = $this->language_prop($this->config->get('language'));
+
+ // set localization
+ setlocale(LC_ALL, $_SESSION['language'] . '.utf8');
+ }
+
+
+ /**
+ * Check the given string and return a valid language code
+ *
+ * @param string Language code
+ * @return string Valid language code
+ */
+ private function language_prop($lang)
+ {
+ static $rcube_languages, $rcube_language_aliases;
+
+ if (empty($rcube_languages)) {
+ @include(INSTALL_PATH . 'program/localization/index.inc');
+ }
+
+ // check if we have an alias for that language
+ if (!isset($rcube_languages[$lang]) && isset($rcube_language_aliases[$lang])) {
+ $lang = $rcube_language_aliases[$lang];
+ }
+ // try the first two chars
+ else if (!isset($rcube_languages[$lang])) {
+ $short = substr($lang, 0, 2);
+
+ // check if we have an alias for the short language code
+ if (!isset($rcube_languages[$short]) && isset($rcube_language_aliases[$short])) {
+ $lang = $rcube_language_aliases[$short];
+ }
+ // expand 'nn' to 'nn_NN'
+ else if (!isset($rcube_languages[$short])) {
+ $lang = $short.'_'.strtoupper($short);
+ }
+ }
+
+ if (!isset($rcube_languages[$lang]) || !is_dir(INSTALL_PATH . 'program/localization/' . $lang)) {
+ $lang = 'en_US';
+ }
+
+ return $lang;
+ }
+
+
+ /**
+ * Get the current database connection
+ *
+ * @return object rcube_db Database connection object
+ */
+ public function get_dbh()
+ {
+ if (!$this->db) {
+ $dbclass = "rcube_" . $this->config->get('db_backend', 'mdb2');
+ $config_all = $this->config->all();
+
+ $this->db = new $dbclass($config_all['db_dsnw'], $config_all['db_dsnr'], $config_all['db_persistent']);
+ $this->db->sqlite_initials = INSTALL_PATH . 'SQL/sqlite.initial.sql';
+ $this->db->set_debug((bool)$config_all['sql_debug']);
+ $this->db->db_connect('w');
+ }
+
+ return $this->db;
+ }
+
+
+ /**
+ * Init output object for GUI and add common scripts.
+ * This will instantiate a rcmail_template object and set
+ * environment vars according to the current session and configuration
+ */
+ public function load_gui($framed = false)
+ {
+ // init output page
+ $this->output = new rcube_template($this->task, $framed);
+
+ foreach (array('flag_for_deletion') as $js_config_var) {
+ $this->output->set_env($js_config_var, $this->config->get($js_config_var));
+ }
+
+ if ($framed) {
+ $this->comm_path .= '&_framed=1';
+ $this->output->set_env('framed', true);
+ }
+
+ $this->output->set_env('task', $this->task);
+ $this->output->set_env('action', $this->action);
+ $this->output->set_env('comm_path', $this->comm_path);
+ $this->output->set_charset($this->config->get('charset', RCMAIL_CHARSET));
+
+ // add some basic label to client
+ $this->output->add_label('loading');
+
+ return $this->output;
+ }
+
+
+ /**
+ * Create an output object for JSON responses
+ */
+ public function init_json()
+ {
+ $this->output = new rcube_json_output($this->task);
+
+ return $this->output;
+ }
+
+
+ /**
+ * Create global IMAP object and connect to server
+ *
+ * @param boolean True if connection should be established
+ * @todo Remove global $IMAP
+ */
+ public function imap_init($connect = false)
+ {
+ $this->imap = new rcube_imap($this->db);
+ $this->imap->debug_level = $this->config->get('debug_level');
+ $this->imap->skip_deleted = $this->config->get('skip_deleted');
+
+ // enable caching of imap data
+ if ($this->config->get('enable_caching')) {
+ $this->imap->set_caching(true);
+ }
+
+ // set pagesize from config
+ $this->imap->set_pagesize($this->config->get('pagesize', 50));
+
+ // set global object for backward compatibility
+ $GLOBALS['IMAP'] = $this->imap;
+
+ if ($connect)
+ $this->imap_connect();
+ }
+
+
+ /**
+ * Connect to IMAP server with stored session data
+ *
+ * @return bool True on success, false on error
+ */
+ public function imap_connect()
+ {
+ $conn = false;
+
+ if ($_SESSION['imap_host']) {
+ if (!($conn = $this->imap->connect($_SESSION['imap_host'], $_SESSION['username'], $this->decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl'], rcmail::get_instance()->config->get('imap_auth_type', 'check')))) {
+ if ($this->output)
+ $this->output->show_message($this->imap->error_code == -1 ? 'imaperror' : 'sessionerror', 'error');
+ }
+
+ $this->set_imap_prop();
+ }
+
+ return $conn;
+ }
+
+
+ /**
+ * Perfom login to the IMAP server and to the webmail service.
+ * This will also create a new user entry if auto_create_user is configured.
+ *
+ * @param string IMAP user name
+ * @param string IMAP password
+ * @param string IMAP host
+ * @return boolean True on success, False on failure
+ */
+ function login($username, $pass, $host=NULL)
+ {
+ $user = NULL;
+ $config = $this->config->all();
+
+ if (!$host)
+ $host = $config['default_host'];
+
+ // Validate that selected host is in the list of configured hosts
+ if (is_array($config['default_host'])) {
+ $allowed = false;
+ foreach ($config['default_host'] as $key => $host_allowed) {
+ if (!is_numeric($key))
+ $host_allowed = $key;
+ if ($host == $host_allowed) {
+ $allowed = true;
+ break;
+ }
+ }
+ if (!$allowed)
+ return false;
+ }
+ else if (!empty($config['default_host']) && $host != $config['default_host'])
+ return false;
+
+ // parse $host URL
+ $a_host = parse_url($host);
+ if ($a_host['host']) {
+ $host = $a_host['host'];
+ $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null;
+ $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : $config['default_port']);
+ }
+ else
+ $imap_port = $config['default_port'];
+
+
+ /* Modify username with domain if required
+ Inspired by Marco <P0L0_notspam_binware.org>
+ */
+ // Check if we need to add domain
+ if (!empty($config['username_domain']) && !strpos($username, '@')) {
+ if (is_array($config['username_domain']) && isset($config['username_domain'][$host]))
+ $username .= '@'.$config['username_domain'][$host];
+ else if (is_string($config['username_domain']))
+ $username .= '@'.$config['username_domain'];
+ }
+
+ // try to resolve email address from virtuser table
+ if (!empty($config['virtuser_file']) && strpos($username, '@'))
+ $username = rcube_user::email2user($username);
+
+ // lowercase username if it's an e-mail address (#1484473)
+ if (strpos($username, '@'))
+ $username = strtolower($username);
+
+ // user already registered -> overwrite username
+ if ($user = rcube_user::query($username, $host))
+ $username = $user->data['username'];
+
+ // exit if IMAP login failed
+ if (!($imap_login = $this->imap->connect($host, $username, $pass, $imap_port, $imap_ssl, $config['imap_auth_type'])))
+ return false;
+
+ // user already registered -> update user's record
+ if (is_object($user)) {
+ $user->touch();
+ }
+ // create new system user
+ else if ($config['auto_create_user']) {
+ if ($created = rcube_user::create($username, $host)) {
+ $user = $created;
+
+ // get existing mailboxes (but why?)
+ // $a_mailboxes = $this->imap->list_mailboxes();
+ }
+ }
+ else {
+ raise_error(array(
+ 'code' => 600,
+ 'type' => 'php',
+ 'file' => "config/main.inc.php",
+ 'message' => "Acces denied for new user $username. 'auto_create_user' is disabled"
+ ), true, false);
+ }
+
+ // login succeeded
+ if (is_object($user) && $user->ID) {
+ $this->set_user($user);
+
+ // set session vars
+ $_SESSION['user_id'] = $user->ID;
+ $_SESSION['username'] = $user->data['username'];
+ $_SESSION['imap_host'] = $host;
+ $_SESSION['imap_port'] = $imap_port;
+ $_SESSION['imap_ssl'] = $imap_ssl;
+ $_SESSION['password'] = $this->encrypt_passwd($pass);
+ $_SESSION['login_time'] = mktime();
+
+ // force reloading complete list of subscribed mailboxes
+ $this->set_imap_prop();
+ $this->imap->clear_cache('mailboxes');
+
+ if ($config['create_default_folders'])
+ $this->imap->create_default_folders();
+
+ return true;
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Set root dir and last stored mailbox
+ * This must be done AFTER connecting to the server!
+ */
+ public function set_imap_prop()
+ {
+ $this->imap->set_charset($this->config->get('default_charset', RCMAIL_CHARSET));
+
+ // set root dir from config
+ if ($imap_root = $this->config->get('imap_root')) {
+ $this->imap->set_rootdir($imap_root);
+ }
+ if ($default_folders = $this->config->get('default_imap_folders')) {
+ $this->imap->set_default_mailboxes($default_folders);
+ }
+ if (!empty($_SESSION['mbox'])) {
+ $this->imap->set_mailbox($_SESSION['mbox']);
+ }
+ if (isset($_SESSION['page'])) {
+ $this->imap->set_page($_SESSION['page']);
+ }
+ }
+
+
+ /**
+ * Auto-select IMAP host based on the posted login information
+ *
+ * @return string Selected IMAP host
+ */
+ public function autoselect_host()
+ {
+ $default_host = $this->config->get('default_host');
+ $host = !empty($default_host) ? get_input_value('_host', RCUBE_INPUT_POST) : $default_host;
+
+ if (is_array($host)) {
+ list($user, $domain) = explode('@', get_input_value('_user', RCUBE_INPUT_POST));
+ if (!empty($domain)) {
+ foreach ($host as $imap_host => $mail_domains) {
+ if (is_array($mail_domains) && in_array($domain, $mail_domains)) {
+ $host = $imap_host;
+ break;
+ }
+ }
+ }
+
+ // take the first entry if $host is still an array
+ if (is_array($host))
+ $host = array_shift($host);
+ }
+
+ return $host;
+ }
+
+
+ /**
+ * Get localized text in the desired language
+ *
+ * @param mixed Named parameters array or label name
+ * @return string Localized text
+ */
+ public function gettext($attrib)
+ {
+ // load localization files if not done yet
+ if (empty($this->texts))
+ $this->load_language();
+
+ // extract attributes
+ if (is_string($attrib))
+ $attrib = array('name' => $attrib);
+
+ $nr = is_numeric($attrib['nr']) ? $attrib['nr'] : 1;
+ $vars = isset($attrib['vars']) ? $attrib['vars'] : '';
+
+ $command_name = !empty($attrib['command']) ? $attrib['command'] : NULL;
+ $alias = $attrib['name'] ? $attrib['name'] : ($command_name && $command_label_map[$command_name] ? $command_label_map[$command_name] : '');
+
+ // text does not exist
+ if (!($text_item = $this->texts[$alias])) {
+ /*
+ raise_error(array(
+ 'code' => 500,
+ 'type' => 'php',
+ 'line' => __LINE__,
+ 'file' => __FILE__,
+ 'message' => "Missing localized text for '$alias' in '$sess_user_lang'"), TRUE, FALSE);
+ */
+ return "[$alias]";
+ }
+
+ // make text item array
+ $a_text_item = is_array($text_item) ? $text_item : array('single' => $text_item);
+
+ // decide which text to use
+ if ($nr == 1) {
+ $text = $a_text_item['single'];
+ }
+ else if ($nr > 0) {
+ $text = $a_text_item['multiple'];
+ }
+ else if ($nr == 0) {
+ if ($a_text_item['none'])
+ $text = $a_text_item['none'];
+ else if ($a_text_item['single'])
+ $text = $a_text_item['single'];
+ else if ($a_text_item['multiple'])
+ $text = $a_text_item['multiple'];
+ }
+
+ // default text is single
+ if ($text == '') {
+ $text = $a_text_item['single'];
+ }
+
+ // replace vars in text
+ if (is_array($attrib['vars'])) {
+ foreach ($attrib['vars'] as $var_key => $var_value)
+ $a_replace_vars[$var_key{0}=='$' ? substr($var_key, 1) : $var_key] = $var_value;
+ }
+
+ if ($a_replace_vars)
+ $text = preg_replace('/\$\{?([_a-z]{1}[_a-z0-9]*)\}?/ei', '$a_replace_vars["\1"]', $text);
+
+ // format output
+ if (($attrib['uppercase'] && strtolower($attrib['uppercase']=='first')) || $attrib['ucfirst'])
+ return ucfirst($text);
+ else if ($attrib['uppercase'])
+ return strtoupper($text);
+ else if ($attrib['lowercase'])
+ return strtolower($text);
+
+ return $text;
+ }
+
+
+ /**
+ * Load a localization package
+ *
+ * @param string Language ID
+ */
+ public function load_language($lang = null)
+ {
+ $lang = $lang ? $this->language_prop($lang) : $_SESSION['language'];
+
+ // load localized texts
+ if (empty($this->texts) || $lang != $_SESSION['language']) {
+ $this->texts = array();
+
+ // get english labels (these should be complete)
+ @include(INSTALL_PATH . 'program/localization/en_US/labels.inc');
+ @include(INSTALL_PATH . 'program/localization/en_US/messages.inc');
+
+ if (is_array($labels))
+ $this->texts = $labels;
+ if (is_array($messages))
+ $this->texts = array_merge($this->texts, $messages);
+
+ // include user language files
+ if ($lang != 'en' && is_dir(INSTALL_PATH . 'program/localization/' . $lang)) {
+ include_once(INSTALL_PATH . 'program/localization/' . $lang . '/labels.inc');
+ include_once(INSTALL_PATH . 'program/localization/' . $lang . '/messages.inc');
+
+ if (is_array($labels))
+ $this->texts = array_merge($this->texts, $labels);
+ if (is_array($messages))
+ $this->texts = array_merge($this->texts, $messages);
+ }
+
+ $_SESSION['language'] = $lang;
+ }
+ }
+
+
+ /**
+ * Read directory program/localization and return a list of available languages
+ *
+ * @return array List of available localizations
+ */
+ public function list_languages()
+ {
+ static $sa_languages = array();
+
+ if (!sizeof($sa_languages)) {
+ @include(INSTALL_PATH . 'program/localization/index.inc');
+
+ if ($dh = @opendir(INSTALL_PATH . 'program/localization')) {
+ while (($name = readdir($dh)) !== false) {
+ if ($name{0}=='.' || !is_dir(INSTALL_PATH . 'program/localization/' . $name))
+ continue;
+
+ if ($label = $rcube_languages[$name])
+ $sa_languages[$name] = $label ? $label : $name;
+ }
+ closedir($dh);
+ }
+ }
+
+ return $sa_languages;
+ }
+
+
+ /**
+ * Check the auth hash sent by the client against the local session credentials
+ *
+ * @return boolean True if valid, False if not
+ */
+ function authenticate_session()
+ {
+ global $SESS_CLIENT_IP, $SESS_CHANGED;
+
+ // advanced session authentication
+ if ($this->config->get('double_auth')) {
+ $now = time();
+ $valid = ($_COOKIE['sessauth'] == $this->get_auth_hash(session_id(), $_SESSION['auth_time']) ||
+ $_COOKIE['sessauth'] == $this->get_auth_hash(session_id(), $_SESSION['last_auth']));
+
+ // renew auth cookie every 5 minutes (only for GET requests)
+ if (!$valid || ($_SERVER['REQUEST_METHOD']!='POST' && $now - $_SESSION['auth_time'] > 300)) {
+ $_SESSION['last_auth'] = $_SESSION['auth_time'];
+ $_SESSION['auth_time'] = $now;
+ setcookie('sessauth', $this->get_auth_hash(session_id(), $now));
+ }
+ }
+ else {
+ $valid = $this->config->get('ip_check') ? $_SERVER['REMOTE_ADDR'] == $SESS_CLIENT_IP : true;
+ }
+
+ // check session filetime
+ $lifetime = $this->config->get('session_lifetime');
+ if (!empty($lifetime) && isset($SESS_CHANGED) && $SESS_CHANGED + $lifetime*60 < time()) {
+ $valid = false;
+ }
+
+ return $valid;
+ }
+
+
+ /**
+ * Destroy session data and remove cookie
+ */
+ public function kill_session()
+ {
+ $user_prefs = $this->user->get_prefs();
+
+ if ((isset($_SESSION['sort_col']) && $_SESSION['sort_col'] != $user_prefs['message_sort_col']) ||
+ (isset($_SESSION['sort_order']) && $_SESSION['sort_order'] != $user_prefs['message_sort_order'])) {
+ $this->user->save_prefs(array('message_sort_col' => $_SESSION['sort_col'], 'message_sort_order' => $_SESSION['sort_order']));
+ }
+
+ $_SESSION = array('language' => $USER->language, 'auth_time' => time(), 'temp' => true);
+ setcookie('sessauth', '-del-', time() - 60);
+ $this->user->reset();
+ }
+
+
+ /**
+ * Do server side actions on logout
+ */
+ public function logout_actions()
+ {
+ $config = $this->config->all();
+
+ // on logout action we're not connected to imap server
+ if (($config['logout_purge'] && !empty($config['trash_mbox'])) || $config['logout_expunge']) {
+ if (!$this->authenticate_session())
+ return;
+
+ $this->imap_init(true);
+ }
+
+ if ($config['logout_purge'] && !empty($config['trash_mbox'])) {
+ $this->imap->clear_mailbox($config['trash_mbox']);
+ }
+
+ if ($config['logout_expunge']) {
+ $this->imap->expunge('INBOX');
+ }
+ }
+
+
+ /**
+ * Function to be executed in script shutdown
+ * Registered with register_shutdown_function()
+ */
+ public function shutdown()
+ {
+ if (is_object($this->imap)) {
+ $this->imap->close();
+ $this->imap->write_cache();
+ }
+
+ if (is_object($this->contacts))
+ $this->contacts->close();
+
+ // before closing the database connection, write session data
+ if ($_SERVER['REMOTE_ADDR'])
+ session_write_close();
+ }
+
+
+ /**
+ * Create unique authorization hash
+ *
+ * @param string Session ID
+ * @param int Timestamp
+ * @return string The generated auth hash
+ */
+ private function get_auth_hash($sess_id, $ts)
+ {
+ $auth_string = sprintf('rcmail*sess%sR%s*Chk:%s;%s',
+ $sess_id,
+ $ts,
+ $this->config->get('ip_check') ? $_SERVER['REMOTE_ADDR'] : '***.***.***.***',
+ $_SERVER['HTTP_USER_AGENT']);
+
+ if (function_exists('sha1'))
+ return sha1($auth_string);
+ else
+ return md5($auth_string);
+ }
+
+ /**
+ * Encrypt IMAP password using DES encryption
+ *
+ * @param string Password to encrypt
+ * @return string Encryprted string
+ */
+ public function encrypt_passwd($pass)
+ {
+ if (function_exists('mcrypt_module_open') && ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""))) {
+ $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
+ mcrypt_generic_init($td, $this->config->get_des_key(), $iv);
+ $cypher = mcrypt_generic($td, $pass);
+ mcrypt_generic_deinit($td);
+ mcrypt_module_close($td);
+ }
+ else if (function_exists('des')) {
+ $cypher = des($this->config->get_des_key(), $pass, 1, 0, NULL);
+ }
+ else {
+ $cypher = $pass;
+
+ raise_error(array(
+ 'code' => 500,
+ 'type' => 'php',
+ 'file' => __FILE__,
+ 'message' => "Could not convert encrypt password. Make sure Mcrypt is installed or lib/des.inc is available"
+ ), true, false);
+ }
+
+ return base64_encode($cypher);
+ }
+
+
+ /**
+ * Decrypt IMAP password using DES encryption
+ *
+ * @param string Encrypted password
+ * @return string Plain password
+ */
+ public function decrypt_passwd($cypher)
+ {
+ if (function_exists('mcrypt_module_open') && ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""))) {
+ $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
+ mcrypt_generic_init($td, $this->config->get_des_key(), $iv);
+ $pass = mdecrypt_generic($td, base64_decode($cypher));
+ mcrypt_generic_deinit($td);
+ mcrypt_module_close($td);
+ }
+ else if (function_exists('des')) {
+ $pass = des($this->config->get_des_key(), base64_decode($cypher), 0, 0, NULL);
+ }
+ else {
+ $pass = base64_decode($cypher);
+ }
+
+ return preg_replace('/\x00/', '', $pass);
+ }
+
+}
+
+
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/include/rcmail_template.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Class to handle HTML page output using a skin template. |
- | Extends rcube_html_page class from rcube_html.inc |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: $
-
-*/
-
-
-/**
- * Classes and functions for HTML output
- *
- * @package View
- */
-
-require_once('include/rcube_html.inc');
-
-
-/**
- * Class to create HTML page output using a skin template
- */
-class rcmail_template extends rcube_html_page
-{
- var $config;
- var $task = '';
- var $framed = false;
- var $ajax_call = false;
- var $pagetitle = '';
- var $env = array();
- var $js_env = array();
- var $js_commands = array();
- var $object_handlers = array();
-
-
- /**
- * Constructor
- *
- * @param array Configuration array
- * @param string Current task
- */
- function __construct(&$config, $task)
- {
- $this->task = $task;
- $this->config = $config;
- $this->ajax_call = !empty($_GET['_remote']) || !empty($_POST['_remote']);
-
- // add common javascripts
- if (!$this->ajax_call)
- {
- $javascript = "var ".JS_OBJECT_NAME." = new rcube_webmail();";
-
- // don't wait for page onload. Call init at the bottom of the page (delayed)
- $javascript_foot = "if (window.call_init)\n call_init('".JS_OBJECT_NAME."');";
-
- $this->add_script($javascript, 'head_top');
- $this->add_script($javascript_foot, 'foot');
- $this->scripts_path = 'program/js/';
- $this->include_script('common.js');
- $this->include_script('app.js');
- }
- }
-
- /**
- * PHP 4 compatibility
- * @see rcmail_template::__construct()
- */
- function rcmail_template(&$config, $task)
- {
- $this->__construct($config, $task);
- }
-
-
- /**
- * Set environment variable
- *
- * @param string Property name
- * @param mixed Property value
- * @param boolean True if this property should be added to client environment
- */
- function set_env($name, $value, $addtojs=true)
- {
- $this->env[$name] = $value;
- if ($addtojs || isset($this->js_env[$name]))
- $this->js_env[$name] = $value;
- }
-
-
- /**
- * Set page title variable
- */
- function set_pagetitle($title)
- {
- $this->pagetitle = $title;
- }
-
-
- /**
- * Register a template object handler
- *
- * @param string Object name
- * @param string Function name to call
- */
- function add_handler($obj, $func)
- {
- $this->object_handlers[$obj] = $func;
- }
-
- /**
- * Register a list of template object handlers
- *
- * @param array Hash array with object=>handler pairs
- */
- function add_handlers($arr)
- {
- $this->object_handlers = array_merge($this->object_handlers, $arr);
- }
-
- /**
- * Register a GUI object to the client script
- *
- * @param string Object name
- * @param string Object ID
- */
- function add_gui_object($obj, $id)
- {
- $this->add_script(JS_OBJECT_NAME.".gui_object('$obj', '$id');");
- }
-
-
- /**
- * Call a client method
- *
- * @param string Method to call
- * @param ... Additional arguments
- */
- function command()
- {
- $this->js_commands[] = func_get_args();
- }
-
-
- /**
- * Invoke display_message command
- *
- * @param string Message to display
- * @param string Message type [notice|confirm|error]
- * @param array Key-value pairs to be replaced in localized text
- */
- function show_message($message, $type='notice', $vars=NULL)
- {
- $this->command(
- 'display_message',
- rcube_label(array('name' => $message, 'vars' => $vars)),
- $type);
- }
-
-
- /**
- * Delete all stored env variables and commands
- */
- function reset()
- {
- $this->env = array();
- $this->js_env = array();
- $this->js_commands = array();
- $this->object_handlers = array();
- parent::reset();
- }
-
- /**
- * Send the request output to the client.
- * This will either parse a skin tempalte or send an AJAX response
- *
- * @param string Template name
- * @param boolean True if script should terminate (default)
- */
- function send($templ=null, $exit=true)
- {
- if ($this->ajax_call)
- $this->remote_response('', !$exit);
- else if ($templ != 'iframe')
- $this->parse($templ, false);
- else
- {
- $this->framed = $templ == 'iframe' ? true : $this->framed;
- $this->write();
- }
-
- if ($exit)
- exit;
- }
-
-
- /**
- * Send an AJAX response with executable JS code
- *
- * @param string Additional JS code
- * @param boolean True if output buffer should be flushed
- */
- function remote_response($add='', $flush=false)
- {
- static $s_header_sent = FALSE;
-
- if (!$s_header_sent)
- {
- $s_header_sent = TRUE;
- send_nocacheing_headers();
- header('Content-Type: application/x-javascript; charset='.RCMAIL_CHARSET);
- print '/** ajax response ['.date('d/M/Y h:i:s O')."] **/\n";
- }
-
- // unset default env vars
- unset($this->js_env['task'], $this->js_env['action'], $this->js_env['comm_path']);
-
- // send response code
- print rcube_charset_convert($this->get_js_commands() . $add, RCMAIL_CHARSET, $this->get_charset());
-
- if ($flush) // flush the output buffer
- flush();
- }
-
-
- /**
- * Process template and write to stdOut
- *
- * @param string HTML template
- * @see rcube_html_page::write()
- */
- function write($template='')
- {
- // unlock interface after iframe load
- if ($this->framed)
- array_unshift($this->js_commands, array('set_busy', false));
-
- // write all env variables to client
- $js = $this->framed ? "if(window.parent) {\n" : '';
- $js .= $this->get_js_commands() . ($this->framed ? ' }' : '');
- $this->add_script($js, 'head_top');
-
- // call super method
- parent::write($template, $this->config['skin_path']);
- }
-
-
- /**
- * Parse a specific skin template and deliver to stdout
- *
- * @param string Template name
- * @param boolean Exit script
- */
- function parse($name='main', $exit=true)
- {
- $skin_path = $this->config['skin_path'];
-
- // read template file
- $templ = '';
- $path = "$skin_path/templates/$name.html";
-
- if($fp = @fopen($path, 'r'))
- {
- $templ = fread($fp, filesize($path));
- fclose($fp);
- }
- else
- {
- raise_error(array(
- 'code' => 501,
- 'type' => 'php',
- 'line' => __LINE__,
- 'file' => __FILE__,
- 'message' => "Error loading template for '$name'"), TRUE, TRUE);
- return FALSE;
- }
-
- // parse for specialtags
- $output = $this->parse_xml($this->parse_conditions($templ));
-
- // add debug console
- if ($this->config['debug_level'] & 8)
- $this->add_footer('<div style="position:absolute;top:5px;left:5px;width:400px;padding:0.2em;background:white;opacity:0.8;z-index:9000">
- <a href="#toggle" onclick="con=document.getElementById(\'dbgconsole\');con.style.display=(con.style.display==\'none\'?\'block\':\'none\');return false">console</a>
- <form action="/" name="debugform"><textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:x-small"></textarea></form></div>');
-
- $this->write(trim($this->parse_with_globals($output)), $skin_path);
-
- if ($exit)
- exit;
- }
-
-
- /**
- * Return executable javascript code for all registered commands
- * @access private
- */
- function get_js_commands()
- {
- $out = '';
- if (!$this->framed && !empty($this->js_env))
- $out .= ($this->ajax_call ? 'this' : JS_OBJECT_NAME) . '.set_env('.json_serialize($this->js_env).");\n";
-
- // add command to set page title
- if ($this->ajax_call && !empty($this->pagetitle))
- $out .= sprintf(
- "this.set_pagetitle('%s');\n",
- JQ((!empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '') . $this->pagetitle)
- );
-
- foreach ($this->js_commands as $i => $args)
- {
- $method = array_shift($args);
- foreach ($args as $i => $arg)
- $args[$i] = json_serialize($arg);
-
- $parent = $this->framed || preg_match('/^parent\./', $method);
- $out .= sprintf(
- "%s.%s(%s);\n",
- $this->ajax_call ? 'this' : ($parent ? 'parent.' : '') . JS_OBJECT_NAME,
- preg_replace('/^parent\./', '', $method),
- join(',', $args));
- }
-
-
-
- return $out;
- }
-
- /**
- * Make URLs starting with a slash point to skin directory
- * @access private
- */
- function abs_url($str)
- {
- return preg_replace('/^\//', $this->config['skin_path'].'/', $str);
- }
-
-
-
- /***** Template parsing methods *****/
-
- /**
- * Replace all strings ($varname)
- * with the content of the according global variable.
- * @access private
- */
- function parse_with_globals($input)
- {
- $GLOBALS['__comm_path'] = Q($GLOBALS['COMM_PATH']);
- return preg_replace('/\$(__[a-z0-9_\-]+)/e', '$GLOBALS["\\1"]', $input);
- }
-
-
- /**
- * Parse for conditional tags
- * @access private
- */
- function parse_conditions($input)
- {
- if (($matches = preg_split('/<roundcube:(if|elseif|else|endif)\s+([^>]+)>/is', $input, 2, PREG_SPLIT_DELIM_CAPTURE)) && count($matches)==4)
- {
- if (preg_match('/^(else|endif)$/i', $matches[1]))
- return $matches[0] . $this->parse_conditions($matches[3]);
- else
- {
- $attrib = parse_attrib_string($matches[2]);
- if (isset($attrib['condition']))
- {
- $condmet = $this->check_condition($attrib['condition']);
- $submatches = preg_split('/<roundcube:(elseif|else|endif)\s+([^>]+)>/is', $matches[3], 2, PREG_SPLIT_DELIM_CAPTURE);
-
- if ($condmet)
- $result = $submatches[0] . ($submatches[1] != 'endif' ? preg_replace('/.*<roundcube:endif\s+[^>]+>/Uis', '', $submatches[3], 1) : $submatches[3]);
- else
- $result = "<roundcube:$submatches[1] $submatches[2]>" . $submatches[3];
-
- return $matches[0] . $this->parse_conditions($result);
- }
- else
- {
- raise_error(array('code' => 500, 'type' => 'php', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => "Unable to parse conditional tag " . $matches[2]), TRUE, FALSE);
- }
- }
- }
-
- return $input;
- }
-
-
- /**
- * Determines if a given condition is met
- *
- * @return True if condition is valid, False is not
- * @access private
- */
- function check_condition($condition)
- {
- $condition = preg_replace(
- array('/session:([a-z0-9_]+)/i', '/config:([a-z0-9_]+)/i', '/env:([a-z0-9_]+)/i', '/request:([a-z0-9_]+)/ie'),
- array("\$_SESSION['\\1']", "\$this->config['\\1']", "\$this->env['\\1']", "get_input_value('\\1', RCUBE_INPUT_GPC)"),
- $condition);
-
- return @eval("return (".$condition.");");
- }
-
-
- /**
- * Search for special tags in input and replace them
- * with the appropriate content
- *
- * @param string Input string to parse
- * @return Altered input string
- * @access private
- */
- function parse_xml($input)
- {
- return preg_replace('/<roundcube:([-_a-z]+)\s+([^>]+)>/Uie', "\$this->xml_command('\\1', '\\2')", $input);
- }
-
-
- /**
- * Convert a xml command tag into real content
- *
- * @param string Tag command: object,button,label, etc.
- * @param string Attribute string
- * @return Tag/Object content string
- * @access private
- */
- function xml_command($command, $str_attrib, $add_attrib=array())
- {
- $command = strtolower($command);
- $attrib = parse_attrib_string($str_attrib) + $add_attrib;
-
- // empty output if required condition is not met
- if (!empty($attrib['condition']) && !$this->check_condition($attrib['condition']))
- return '';
-
- // execute command
- switch ($command)
- {
- // return a button
- case 'button':
- return $this->button($attrib);
- break;
-
- // show a label
- case 'label':
- if ($attrib['name'] || $attrib['command'])
- return Q(rcube_label($attrib + array('vars' => array('product' => $this->config['product_name']))));
- break;
-
- // include a file
- case 'include':
- $path = realpath($this->config['skin_path'].$attrib['file']);
- if (filesize($path))
- {
- if ($this->config['skin_include_php'])
- $incl = $this->include_php($path);
- else if ($fp = @fopen($path, 'r'))
- {
- $incl = fread($fp, filesize($path));
- fclose($fp);
- }
- return $this->parse_xml($incl);
- }
- break;
-
- // return code for a specific application object
- case 'object':
- $object = strtolower($attrib['name']);
-
- // execute object handler function
- if ($this->object_handlers[$object] && function_exists($this->object_handlers[$object]))
- return call_user_func($this->object_handlers[$object], $attrib);
-
- else if ($object=='productname')
- {
- $name = !empty($this->config['product_name']) ? $this->config['product_name'] : 'RoundCube Webmail';
- return Q($name);
- }
- else if ($object=='version')
- {
- return (string)RCMAIL_VERSION;
- }
- else if ($object=='pagetitle')
- {
- $task = $this->task;
- $title = !empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '';
-
- if (!empty($this->pagetitle))
- $title .= $this->pagetitle;
- else if ($task == 'login')
- $title = rcube_label(array('name' => 'welcome', 'vars' => array('product' => $this->config['product_name'])));
- else
- $title .= ucfirst($task);
-
- return Q($title);
- }
-
- break;
-
- // return variable
- case 'var':
- $var = explode(':', $attrib['name']);
- $name = $var[1];
- $value = '';
-
- switch ($var[0])
- {
- case 'env':
- $value = $this->env[$name];
- break;
- case 'config':
- $value = $this->config[$name];
- if (is_array($value) && $value[$_SESSION['imap_host']])
- $value = $value[$_SESSION['imap_host']];
- break;
- case 'request':
- $value = get_input_value($name, RCUBE_INPUT_GPC);
- break;
- case 'session':
- $value = $_SESSION[$name];
- break;
- }
-
- if (is_array($value))
- $value = join(", ", $value);
-
- return Q($value);
- }
-
- return '';
- }
-
-
- /**
- * Include a specific file and return it's contents
- *
- * @param string File path
- * @return string Contents of the processed file
- */
- function include_php($file)
- {
- ob_start();
- @include($file);
- $out = ob_get_contents();
- ob_end_clean();
-
- return $out;
- }
-
-
- /**
- * Create and register a button
- *
- * @param array Button attributes
- * @return HTML button
- * @access private
- */
- function button($attrib)
- {
- global $CONFIG, $OUTPUT, $BROWSER, $MAIN_TASKS;
- static $sa_buttons = array();
- static $s_button_count = 100;
-
- // these commands can be called directly via url
- $a_static_commands = array('compose', 'list');
-
- $skin_path = $this->config['skin_path'];
-
- if (!($attrib['command'] || $attrib['name'] || $attrib['onclick']))
- return '';
-
- // try to find out the button type
- if ($attrib['type'])
- $attrib['type'] = strtolower($attrib['type']);
- else
- $attrib['type'] = ($attrib['image'] || $attrib['imagepas'] || $attrib['imageact']) ? 'image' : 'link';
-
- $command = $attrib['command'];
-
- // take the button from the stack
- if($attrib['name'] && $sa_buttons[$attrib['name']])
- $attrib = $sa_buttons[$attrib['name']];
-
- // add button to button stack
- else if($attrib['image'] || $attrib['imageact'] || $attrib['imagepas'] || $attrib['class'])
- {
- if (!$attrib['name'])
- $attrib['name'] = $command;
-
- if (!$attrib['image'])
- $attrib['image'] = $attrib['imagepas'] ? $attrib['imagepas'] : $attrib['imageact'];
-
- $sa_buttons[$attrib['name']] = $attrib;
- }
-
- // get saved button for this command/name
- else if ($command && $sa_buttons[$command])
- $attrib = $sa_buttons[$command];
-
- //else
- // return '';
-
-
- // set border to 0 because of the link arround the button
- if ($attrib['type']=='image' && !isset($attrib['border']))
- $attrib['border'] = 0;
-
- if (!$attrib['id'])
- $attrib['id'] = sprintf('rcmbtn%d', $s_button_count++);
-
- // get localized text for labels and titles
- if ($attrib['title'])
- $attrib['title'] = Q(rcube_label($attrib['title']));
- if ($attrib['label'])
- $attrib['label'] = Q(rcube_label($attrib['label']));
-
- if ($attrib['alt'])
- $attrib['alt'] = Q(rcube_label($attrib['alt']));
-
- // set title to alt attribute for IE browsers
- if ($BROWSER['ie'] && $attrib['title'] && !$attrib['alt'])
- {
- $attrib['alt'] = $attrib['title'];
- unset($attrib['title']);
- }
-
- // add empty alt attribute for XHTML compatibility
- if (!isset($attrib['alt']))
- $attrib['alt'] = '';
-
-
- // register button in the system
- if ($attrib['command'])
- {
- $this->add_script(sprintf(
- "%s.register_button('%s', '%s', '%s', '%s', '%s', '%s');",
- JS_OBJECT_NAME,
- $command,
- $attrib['id'],
- $attrib['type'],
- $attrib['imageact'] ? $skin_path.$attrib['imageact'] : $attrib['classact'],
- $attrib['imagesel'] ? $skin_path.$attrib['imagesel'] : $attrib['classsel'],
- $attrib['imageover'] ? $skin_path.$attrib['imageover'] : '')
- );
-
- // make valid href to specific buttons
- if (in_array($attrib['command'], $MAIN_TASKS))
- $attrib['href'] = Q(rcmail_url(null, null, $attrib['command']));
- else if (in_array($attrib['command'], $a_static_commands))
- $attrib['href'] = Q(rcmail_url($attrib['command']));
- }
-
- // overwrite attributes
- if (!$attrib['href'])
- $attrib['href'] = '#';
-
- if ($command)
- $attrib['onclick'] = sprintf("return %s.command('%s','%s',this)", JS_OBJECT_NAME, $command, $attrib['prop']);
-
- if ($command && $attrib['imageover'])
- {
- $attrib['onmouseover'] = sprintf("return %s.button_over('%s','%s')", JS_OBJECT_NAME, $command, $attrib['id']);
- $attrib['onmouseout'] = sprintf("return %s.button_out('%s','%s')", JS_OBJECT_NAME, $command, $attrib['id']);
- }
-
- if ($command && $attrib['imagesel'])
- {
- $attrib['onmousedown'] = sprintf("return %s.button_sel('%s','%s')", JS_OBJECT_NAME, $command, $attrib['id']);
- $attrib['onmouseup'] = sprintf("return %s.button_out('%s','%s')", JS_OBJECT_NAME, $command, $attrib['id']);
- }
-
- $out = '';
-
- // generate image tag
- if ($attrib['type']=='image')
- {
- $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id', 'width', 'height', 'border', 'hspace', 'vspace', 'align', 'alt'));
- $img_tag = sprintf('<img src="%%s"%s />', $attrib_str);
- $btn_content = sprintf($img_tag, $skin_path.$attrib['image']);
- if ($attrib['label'])
- $btn_content .= ' '.$attrib['label'];
-
- $link_attrib = array('href', 'onclick', 'onmouseover', 'onmouseout', 'onmousedown', 'onmouseup', 'title');
- }
- else if ($attrib['type']=='link')
- {
- $btn_content = $attrib['label'] ? $attrib['label'] : $attrib['command'];
- $link_attrib = array('href', 'onclick', 'title', 'id', 'class', 'style');
- }
- else if ($attrib['type']=='input')
- {
- $attrib['type'] = 'button';
-
- if ($attrib['label'])
- $attrib['value'] = $attrib['label'];
-
- $attrib_str = create_attrib_string($attrib, array('type', 'value', 'onclick', 'id', 'class', 'style'));
- $out = sprintf('<input%s disabled="disabled" />', $attrib_str);
- }
-
- // generate html code for button
- if ($btn_content)
- {
- $attrib_str = create_attrib_string($attrib, $link_attrib);
- $out = sprintf('<a%s>%s</a>', $attrib_str, $btn_content);
- }
-
- return $out;
- }
-
-} // end class rcmail_template
-
-
-
-// ************** common functions delivering gui objects **************
-
-
-/**
- * Builder for GUI object 'message'
- *
- * @param array Named tag parameters
- * @return string HTML code for the gui object
- */
-function rcmail_message_container($attrib)
- {
- global $OUTPUT;
-
- if (!$attrib['id'])
- $attrib['id'] = 'rcmMessageContainer';
-
- // allow the following attributes to be added to the <table> tag
- $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id'));
- $out = '<div' . $attrib_str . "></div>";
-
- $OUTPUT->add_gui_object('message', $attrib['id']);
-
- return $out;
- }
-
-
-/**
- * GUI object 'username'
- * Showing IMAP username of the current session
- *
- * @param array Named tag parameters (currently not used)
- * @return string HTML code for the gui object
- */
-function rcmail_current_username($attrib)
- {
- global $USER;
- static $s_username;
-
- // alread fetched
- if (!empty($s_username))
- return $s_username;
-
- if ($sql_arr = $USER->get_identity())
- $s_username = $sql_arr['email'];
- else if (strstr($_SESSION['username'], '@'))
- $s_username = $_SESSION['username'];
- else
- $s_username = $_SESSION['username'].'@'.$_SESSION['imap_host'];
-
- return $s_username;
- }
-
-
-/**
- * GUI object 'loginform'
- * Returns code for the webmail login form
- *
- * @param array Named parameters
- * @return string HTML code for the gui object
- */
-function rcmail_login_form($attrib)
- {
- global $CONFIG, $OUTPUT, $SESS_HIDDEN_FIELD;
-
- $labels = array();
- $labels['user'] = rcube_label('username');
- $labels['pass'] = rcube_label('password');
- $labels['host'] = rcube_label('server');
-
- $input_user = new textfield(array('name' => '_user', 'id' => 'rcmloginuser', 'size' => 30) + $attrib);
- $input_pass = new passwordfield(array('name' => '_pass', 'id' => 'rcmloginpwd', 'size' => 30) + $attrib);
- $input_action = new hiddenfield(array('name' => '_action', 'value' => 'login'));
-
- $fields = array();
- $fields['user'] = $input_user->show(get_input_value('_user', RCUBE_INPUT_POST));
- $fields['pass'] = $input_pass->show();
- $fields['action'] = $input_action->show();
-
- if (is_array($CONFIG['default_host']))
- {
- $select_host = new select(array('name' => '_host', 'id' => 'rcmloginhost'));
-
- foreach ($CONFIG['default_host'] as $key => $value)
- {
- if (!is_array($value))
- $select_host->add($value, (is_numeric($key) ? $value : $key));
- else
- {
- unset($select_host);
- break;
- }
- }
-
- $fields['host'] = isset($select_host) ? $select_host->show(get_input_value('_host', RCUBE_INPUT_POST)) : null;
- }
- else if (!strlen($CONFIG['default_host']))
- {
- $input_host = new textfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30));
- $fields['host'] = $input_host->show(get_input_value('_host', RCUBE_INPUT_POST));
- }
-
- $form_name = strlen($attrib['form']) ? $attrib['form'] : 'form';
- $form_start = !strlen($attrib['form']) ? '<form name="form" action="./" method="post">' : '';
- $form_end = !strlen($attrib['form']) ? '</form>' : '';
-
- if ($fields['host'])
- $form_host = <<<EOF
-
-</tr><tr>
-
-<td class="title"><label for="rcmloginhost">$labels[host]</label></td>
-<td>$fields[host]</td>
-
-EOF;
-
- $OUTPUT->add_gui_object('loginform', $form_name);
-
- $out = <<<EOF
-$form_start
-$SESS_HIDDEN_FIELD
-$fields[action]
-<table><tr>
-
-<td class="title"><label for="rcmloginuser">$labels[user]</label></td>
-<td>$fields[user]</td>
-
-</tr><tr>
-
-<td class="title"><label for="rcmloginpwd">$labels[pass]</label></td>
-<td>$fields[pass]</td>
-$form_host
-</tr></table>
-$form_end
-EOF;
-
- return $out;
- }
-
-
-/**
- * GUI object 'charsetselector'
- *
- * @param array Named parameters for the select tag
- * @return string HTML code for the gui object
- */
-function rcmail_charset_selector($attrib)
- {
- global $OUTPUT;
-
- // pass the following attributes to the form class
- $field_attrib = array('name' => '_charset');
- foreach ($attrib as $attr => $value)
- if (in_array($attr, array('id', 'class', 'style', 'size', 'tabindex')))
- $field_attrib[$attr] = $value;
-
- $charsets = array(
- 'US-ASCII' => 'ASCII (English)',
- 'EUC-JP' => 'EUC-JP (Japanese)',
- 'EUC-KR' => 'EUC-KR (Korean)',
- 'BIG5' => 'BIG5 (Chinese)',
- 'GB2312' => 'GB2312 (Chinese)',
- 'ISO-2022-JP' => 'ISO-2022-JP (Japanese)',
- 'ISO-8859-1' => 'ISO-8859-1 (Latin-1)',
- 'ISO-8859-2' => 'ISO-8895-2 (Central European)',
- 'ISO-8859-7' => 'ISO-8859-7 (Greek)',
- 'ISO-8859-9' => 'ISO-8859-9 (Turkish)',
- 'Windows-1251' => 'Windows-1251 (Cyrillic)',
- 'Windows-1252' => 'Windows-1252 (Western)',
- 'Windows-1255' => 'Windows-1255 (Hebrew)',
- 'Windows-1256' => 'Windows-1256 (Arabic)',
- 'Windows-1257' => 'Windows-1257 (Baltic)',
- 'UTF-8' => 'UTF-8'
- );
-
- $select = new select($field_attrib);
- $select->add(array_values($charsets), array_keys($charsets));
-
- $set = $_POST['_charset'] ? $_POST['_charset'] : $OUTPUT->get_charset();
- return $select->show($set);
- }
-
-
-/**
- * GUI object 'searchform'
- * Returns code for search function
- *
- * @param array Named parameters
- * @return string HTML code for the gui object
- */
-function rcmail_search_form($attrib)
- {
- global $OUTPUT;
-
- // add some labels to client
- rcube_add_label('searching');
-
- $attrib['name'] = '_q';
-
- if (empty($attrib['id']))
- $attrib['id'] = 'rcmqsearchbox';
-
- $input_q = new textfield($attrib);
- $out = $input_q->show();
-
- $OUTPUT->add_gui_object('qsearchbox', $attrib['id']);
-
- // add form tag around text field
- if (empty($attrib['form']))
- $out = sprintf(
- '<form name="rcmqsearchform" action="./" '.
- 'onsubmit="%s.command(\'search\');return false" style="display:inline;">%s</form>',
- JS_OBJECT_NAME,
- $out);
-
- return $out;
- }
-
-
-?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_browser.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2007-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Class representing the client browser's properties |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_browser.php 328 2006-08-30 17:41:21Z thomasb $
+
+*/
+
+/**
+ * rcube_browser
+ *
+ * Provide details about the client's browser based on the User-Agent header
+ *
+ * @package Core
+ */
+class rcube_browser
+{
+ function __construct()
+ {
+ $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
+
+ $this->ver = 0;
+ $this->win = stristr($HTTP_USER_AGENT, 'win');
+ $this->mac = stristr($HTTP_USER_AGENT, 'mac');
+ $this->linux = stristr($HTTP_USER_AGENT, 'linux');
+ $this->unix = stristr($HTTP_USER_AGENT, 'unix');
+
+ $this->ns4 = stristr($HTTP_USER_AGENT, 'mozilla/4') && !stristr($HTTP_USER_AGENT, 'msie');
+ $this->ns = ($this->ns4 || stristr($HTTP_USER_AGENT, 'netscape'));
+ $this->ie = stristr($HTTP_USER_AGENT, 'msie');
+ $this->mz = stristr($HTTP_USER_AGENT, 'mozilla/5');
+ $this->opera = stristr($HTTP_USER_AGENT, 'opera');
+ $this->safari = stristr($HTTP_USER_AGENT, 'safari');
+
+ if ($this->ns) {
+ $test = eregi("mozilla\/([0-9\.]+)", $HTTP_USER_AGENT, $regs);
+ $this->ver = $test ? (float)$regs[1] : 0;
+ }
+ if ($this->mz) {
+ $test = ereg("rv:([0-9\.]+)", $HTTP_USER_AGENT, $regs);
+ $this->ver = $test ? (float)$regs[1] : 0;
+ }
+ if($this->ie) {
+ $test = eregi("msie ([0-9\.]+)", $HTTP_USER_AGENT, $regs);
+ $this->ver = $test ? (float)$regs[1] : 0;
+ }
+ if ($this->opera) {
+ $test = eregi("opera ([0-9\.]+)", $HTTP_USER_AGENT, $regs);
+ $this->ver = $test ? (float)$regs[1] : 0;
+ }
+
+ if (eregi(" ([a-z]{2})-([a-z]{2})", $HTTP_USER_AGENT, $regs))
+ $this->lang = $regs[1];
+ else
+ $this->lang = 'en';
+
+ $this->dom = ($this->mz || $this->safari || ($this->ie && $this->ver>=5) || ($this->opera && $this->ver>=7));
+ $this->pngalpha = $this->mz || $this->safari || ($this->ie && $this->ver>=5.5) ||
+ ($this->ie && $this->ver>=5 && $this->mac) || ($this->opera && $this->ver>=7) ? true : false;
+ }
+ }
+
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_config.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Class to read configuration settings |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: $
+
+*/
+
+/**
+ * Configuration class for RoundCube
+ *
+ * @package Core
+ */
+class rcube_config
+{
+ private $prop = array();
+
+
+ /**
+ * Object constructor
+ */
+ public function __construct()
+ {
+ $this->load();
+ }
+
+
+ /**
+ * Load config from local config file
+ *
+ * @todo Remove global $CONFIG
+ */
+ private function load()
+ {
+ // start output buffering, we don't need any output yet,
+ // it'll be cleared after reading of config files, etc.
+ ob_start();
+
+ // load main config file
+ include_once(INSTALL_PATH . 'config/main.inc.php');
+ $this->prop = (array)$rcmail_config;
+
+ // load database config
+ include_once(INSTALL_PATH . 'config/db.inc.php');
+ $this->prop += (array)$rcmail_config;
+
+ // load host-specific configuration
+ $this->load_host_config();
+
+ // fix paths
+ $this->prop['skin_path'] = $this->prop['skin_path'] ? unslashify($this->prop['skin_path']) : 'skins/default';
+ $this->prop['log_dir'] = $this->prop['log_dir'] ? unslashify($this->prop['log_dir']) : INSTALL_PATH . 'logs';
+
+ // handle aliases
+ if (isset($this->prop['locale_string']) && empty($this->prop['language']))
+ $this->prop['language'] = $this->prop['locale_string'];
+
+ // set PHP error logging according to config
+ if ($this->prop['debug_level'] & 1) {
+ ini_set('log_errors', 1);
+ ini_set('error_log', $this->prop['log_dir'] . '/errors');
+ }
+ if ($this->prop['debug_level'] & 4) {
+ ini_set('display_errors', 1);
+ }
+ else {
+ ini_set('display_errors', 0);
+ }
+
+ // clear output buffer
+ ob_end_clean();
+
+ // export config data
+ $GLOBALS['CONFIG'] = &$this->prop;
+ }
+
+
+ /**
+ * Load a host-specific config file if configured
+ * This will merge the host specific configuration with the given one
+ */
+ private function load_host_config()
+ {
+ $fname = null;
+
+ if (is_array($this->prop['include_host_config'])) {
+ $fname = $this->prop['include_host_config'][$_SERVER['HTTP_HOST']];
+ }
+ else if (!empty($this->prop['include_host_config'])) {
+ $fname = preg_replace('/[^a-z0-9\.\-_]/i', '', $_SERVER['HTTP_HOST']) . '.inc.php';
+ }
+
+ if ($fname && is_file(INSTALL_PATH . 'config/' . $fname)) {
+ include(INSTALL_PATH . 'config/' . $fname);
+ $this->prop = array_merge($this->prop, (array)$rcmail_config);
+ }
+ }
+
+
+ /**
+ * Getter for a specific config parameter
+ *
+ * @param string Parameter name
+ * @param mixed Default value if not set
+ * @return mixed The requested config value
+ */
+ public function get($name, $def = null)
+ {
+ return isset($this->prop[$name]) ? $this->prop[$name] : $def;
+ }
+
+
+ /**
+ * Setter for a config parameter
+ *
+ * @param string Parameter name
+ * @param mixed Parameter value
+ */
+ public function set($name, $value)
+ {
+ $this->prop[$name] = $value;
+ }
+
+
+ /**
+ * Override config options with the given values (eg. user prefs)
+ *
+ * @param array Hash array with config props to merge over
+ */
+ public function merge($prefs)
+ {
+ $this->prop = array_merge($this->prop, $prefs);
+ }
+
+
+ /**
+ * Getter for all config options
+ *
+ * @return array Hash array containg all config properties
+ */
+ public function all()
+ {
+ return $this->prop;
+ }
+
+
+ /**
+ * Return a 24 byte key for the DES encryption
+ *
+ * @return string DES encryption key
+ */
+ public function get_des_key()
+ {
+ $key = !empty($this->prop['des_key']) ? $this->prop['des_key'] : 'rcmail?24BitPwDkeyF**ECB';
+ $len = strlen($key);
+
+ // make sure the key is exactly 24 chars long
+ if ($len<24)
+ $key .= str_repeat('_', 24-$len);
+ else if ($len>24)
+ substr($key, 0, 24);
+
+ return $key;
+ }
+
+
+}
+
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/include/rcube_contacts.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2006-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Interface to the local address book database |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: rcube_contacts.inc 328 2006-08-30 17:41:21Z thomasb $
-
-*/
-
-
-/**
- * Model class for the local address book database
- *
- * @package Addressbook
- */
-class rcube_contacts
-{
- var $db = null;
- var $db_name = '';
- var $user_id = 0;
- var $filter = null;
- var $result = null;
- var $search_fields;
- var $search_string;
- var $table_cols = array('name', 'email', 'firstname', 'surname');
-
- /** public properties */
- var $primary_key = 'contact_id';
- var $readonly = false;
- var $list_page = 1;
- var $page_size = 10;
- var $ready = false;
-
-
- /**
- * Object constructor
- *
- * @param object Instance of the rcube_db class
- * @param integer User-ID
- */
- function __construct($dbconn, $user)
- {
- $this->db = $dbconn;
- $this->db_name = get_table_name('contacts');
- $this->user_id = $user;
- $this->ready = $this->db && !$this->db->is_error();
- }
-
- /**
- * PHP 4 object constructor
- *
- * @see rcube_contacts::__construct()
- */
- function rcube_contacts($dbconn, $user)
- {
- $this->__construct($dbconn, $user);
- }
-
-
- /**
- * Set internal list page
- *
- * @param number Page number to list
- * @access public
- */
- function set_page($page)
- {
- $this->list_page = (int)$page;
- }
-
-
- /**
- * Set internal page size
- *
- * @param number Number of messages to display on one page
- * @access public
- */
- function set_pagesize($size)
- {
- $this->page_size = (int)$size;
- }
-
-
- /**
- * Save a search string for future listings
- *
- * @param string SQL params to use in listing method
- */
- function set_search_set($filter)
- {
- $this->filter = $filter;
- }
-
-
- /**
- * Getter for saved search properties
- *
- * @return mixed Search properties used by this class
- */
- function get_search_set()
- {
- return $this->filter;
- }
-
-
- /**
- * Reset all saved results and search parameters
- */
- function reset()
- {
- $this->result = null;
- $this->filter = null;
- $this->search_fields = null;
- $this->search_string = null;
- }
-
-
- /**
- * Close connection to source
- * Called on script shutdown
- */
- function close(){}
-
-
- /**
- * List the current set of contact records
- *
- * @param array List of cols to show
- * @param int Only return this number of records, use negative values for tail
- * @return array Indexed list of contact records, each a hash array
- */
- function list_records($cols=null, $subset=0)
- {
- // count contacts for this user
- $this->result = $this->count();
- $sql_result = NULL;
-
- // get contacts from DB
- if ($this->result->count)
- {
- $start_row = $subset < 0 ? $this->result->first + $this->page_size + $subset : $this->result->first;
- $length = $subset != 0 ? abs($subset) : $this->page_size;
-
- $sql_result = $this->db->limitquery(
- "SELECT * FROM ".$this->db_name."
- WHERE del<>1
- AND user_id=?" .
- ($this->filter ? " AND (".$this->filter.")" : "") .
- " ORDER BY name",
- $start_row,
- $length,
- $this->user_id);
- }
-
- while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result)))
- {
- $sql_arr['ID'] = $sql_arr[$this->primary_key];
- // make sure we have a name to display
- if (empty($sql_arr['name']))
- $sql_arr['name'] = $sql_arr['email'];
- $this->result->add($sql_arr);
- }
-
- return $this->result;
- }
-
-
- /**
- * Search contacts
- *
- * @param array List of fields to search in
- * @param string Search value
- * @param boolean True if results are requested, False if count only
- * @return Indexed list of contact records and 'count' value
- */
- function search($fields, $value, $strict=false, $select=true)
- {
- if (!is_array($fields))
- $fields = array($fields);
-
- $add_where = array();
- foreach ($fields as $col)
- {
- if ($col == 'ID' || $col == $this->primary_key)
- {
- $ids = !is_array($value) ? split(',', $value) : $value;
- $add_where[] = $this->primary_key." IN (".join(',', $ids).")";
- }
- else if ($strict)
- $add_where[] = $this->db->quoteIdentifier($col)."=".$this->db->quote($value);
- else
- $add_where[] = $this->db->quoteIdentifier($col)." LIKE ".$this->db->quote(strlen($value)>2 ? "%$value%" : "$value%");
- }
-
- if (!empty($add_where))
- {
- $this->set_search_set(join(' OR ', $add_where));
- if ($select)
- $this->list_records();
- else
- $this->result = $this->count();
- }
-
- return $this->result;
- }
-
-
- /**
- * Count number of available contacts in database
- *
- * @return Result array with values for 'count' and 'first'
- */
- function count()
- {
- // count contacts for this user
- $sql_result = $this->db->query(
- "SELECT COUNT(contact_id) AS rows
- FROM ".$this->db_name."
- WHERE del<>1
- AND user_id=?".
- ($this->filter ? " AND (".$this->filter.")" : ""),
- $this->user_id);
-
- $sql_arr = $this->db->fetch_assoc($sql_result);
- return new rcube_result_set($sql_arr['rows'], ($this->list_page-1) * $this->page_size);;
- }
-
-
- /**
- * Return the last result set
- *
- * @return Result array or NULL if nothing selected yet
- */
- function get_result($as_res=true)
- {
- return $this->result;
- }
-
-
- /**
- * Get a specific contact record
- *
- * @param mixed record identifier(s)
- * @return Result object with all record fields or False if not found
- */
- function get_record($id, $assoc=false)
- {
- // return cached result
- if ($this->result && ($first = $this->result->first()) && $first[$this->primary_key] == $id)
- return $assoc ? $first : $this->result;
-
- $this->db->query(
- "SELECT * FROM ".$this->db_name."
- WHERE contact_id=?
- AND user_id=?
- AND del<>1",
- $id,
- $this->user_id);
-
- if ($sql_arr = $this->db->fetch_assoc())
- {
- $sql_arr['ID'] = $sql_arr[$this->primary_key];
- $this->result = new rcube_result_set(1);
- $this->result->add($sql_arr);
- }
-
- return $assoc && $sql_arr ? $sql_arr : $this->result;
- }
-
-
- /**
- * Create a new contact record
- *
- * @param array Assoziative array with save data
- * @return The created record ID on success, False on error
- */
- function insert($save_data, $check=false)
- {
- if (is_object($save_data) && is_a($save_data, rcube_result_set))
- return $this->insert_recset($save_data, $check);
-
- $insert_id = $existing = false;
-
- if ($check)
- $existing = $this->search('email', $save_data['email'], true, false);
-
- $a_insert_cols = $a_insert_values = array();
- foreach ($this->table_cols as $col)
- if (isset($save_data[$col]))
- {
- $a_insert_cols[] = $this->db->quoteIdentifier($col);
- $a_insert_values[] = $this->db->quote($save_data[$col]);
- }
-
- if (!$existing->count && !empty($a_insert_cols))
- {
- $this->db->query(
- "INSERT INTO ".$this->db_name."
- (user_id, changed, del, ".join(', ', $a_insert_cols).")
- VALUES (?, ".$this->db->now().", 0, ".join(', ', $a_insert_values).")",
- $this->user_id);
-
- $insert_id = $this->db->insert_id(get_sequence_name('contacts'));
- }
-
- return $insert_id;
- }
-
-
- /**
- * Insert new contacts for each row in set
- */
- function insert_recset($result, $check=false)
- {
- $ids = array();
- while ($row = $result->next())
- {
- if ($insert = $this->insert($row, $check))
- $ids[] = $insert;
- }
- return $ids;
- }
-
-
- /**
- * Update a specific contact record
- *
- * @param mixed Record identifier
- * @param array Assoziative array with save data
- * @return True on success, False on error
- */
- function update($id, $save_cols)
- {
- $updated = false;
- $write_sql = array();
- foreach ($this->table_cols as $col)
- if (isset($save_cols[$col]))
- $write_sql[] = sprintf("%s=%s", $this->db->quoteIdentifier($col), $this->db->quote($save_cols[$col]));
-
- if (!empty($write_sql))
- {
- $this->db->query(
- "UPDATE ".$this->db_name."
- SET changed=".$this->db->now().", ".join(', ', $write_sql)."
- WHERE contact_id=?
- AND user_id=?
- AND del<>1",
- $id,
- $this->user_id);
-
- $updated = $this->db->affected_rows();
- }
-
- return $updated;
- }
-
-
- /**
- * Mark one or more contact records as deleted
- *
- * @param array Record identifiers
- */
- function delete($ids)
- {
- if (is_array($ids))
- $ids = join(',', $ids);
-
- $this->db->query(
- "UPDATE ".$this->db_name."
- SET del=1
- WHERE user_id=?
- AND contact_id IN (".$ids.")",
- $this->user_id);
-
- return $this->db->affected_rows();
- }
-
-
- /**
- * Remove all records from the database
- */
- function delete_all()
- {
- if (is_array($ids))
- $ids = join(',', $ids);
-
- $this->db->query("DELETE FROM {$this->db_name} WHERE user_id=?", $this->user_id);
- return $this->db->affected_rows();
- }
-
-}
-
-
-/**
- * RoundCube result set class.
- * Representing an address directory result set.
- */
-class rcube_result_set
-{
- var $count = 0;
- var $first = 0;
- var $current = 0;
- var $records = array();
-
- function __construct($c=0, $f=0)
- {
- $this->count = (int)$c;
- $this->first = (int)$f;
- }
-
- function rcube_result_set($c=0, $f=0)
- {
- $this->__construct($c, $f);
- }
-
- function add($rec)
- {
- $this->records[] = $rec;
- }
-
- function iterate()
- {
- return $this->records[$this->current++];
- }
-
- function first()
- {
- $this->current = 0;
- return $this->records[$this->current++];
- }
-
- // alias
- function next()
- {
- return $this->iterate();
- }
-
- function seek($i)
- {
- $this->current = $i;
- }
-
-}
-
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_contacts.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2006-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Interface to the local address book database |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_contacts.inc 328 2006-08-30 17:41:21Z thomasb $
+
+*/
+
+
+/**
+ * Model class for the local address book database
+ *
+ * @package Addressbook
+ */
+class rcube_contacts
+{
+ var $db = null;
+ var $db_name = '';
+ var $user_id = 0;
+ var $filter = null;
+ var $result = null;
+ var $search_fields;
+ var $search_string;
+ var $table_cols = array('name', 'email', 'firstname', 'surname');
+
+ /** public properties */
+ var $primary_key = 'contact_id';
+ var $readonly = false;
+ var $list_page = 1;
+ var $page_size = 10;
+ var $ready = false;
+
+
+ /**
+ * Object constructor
+ *
+ * @param object Instance of the rcube_db class
+ * @param integer User-ID
+ */
+ function __construct($dbconn, $user)
+ {
+ $this->db = $dbconn;
+ $this->db_name = get_table_name('contacts');
+ $this->user_id = $user;
+ $this->ready = $this->db && !$this->db->is_error();
+ }
+
+ /**
+ * PHP 4 object constructor
+ *
+ * @see rcube_contacts::__construct()
+ */
+ function rcube_contacts($dbconn, $user)
+ {
+ $this->__construct($dbconn, $user);
+ }
+
+
+ /**
+ * Set internal list page
+ *
+ * @param number Page number to list
+ * @access public
+ */
+ function set_page($page)
+ {
+ $this->list_page = (int)$page;
+ }
+
+
+ /**
+ * Set internal page size
+ *
+ * @param number Number of messages to display on one page
+ * @access public
+ */
+ function set_pagesize($size)
+ {
+ $this->page_size = (int)$size;
+ }
+
+
+ /**
+ * Save a search string for future listings
+ *
+ * @param string SQL params to use in listing method
+ */
+ function set_search_set($filter)
+ {
+ $this->filter = $filter;
+ }
+
+
+ /**
+ * Getter for saved search properties
+ *
+ * @return mixed Search properties used by this class
+ */
+ function get_search_set()
+ {
+ return $this->filter;
+ }
+
+
+ /**
+ * Reset all saved results and search parameters
+ */
+ function reset()
+ {
+ $this->result = null;
+ $this->filter = null;
+ $this->search_fields = null;
+ $this->search_string = null;
+ }
+
+
+ /**
+ * Close connection to source
+ * Called on script shutdown
+ */
+ function close(){}
+
+
+ /**
+ * List the current set of contact records
+ *
+ * @param array List of cols to show
+ * @param int Only return this number of records, use negative values for tail
+ * @return array Indexed list of contact records, each a hash array
+ */
+ function list_records($cols=null, $subset=0)
+ {
+ // count contacts for this user
+ $this->result = $this->count();
+ $sql_result = NULL;
+
+ // get contacts from DB
+ if ($this->result->count)
+ {
+ $start_row = $subset < 0 ? $this->result->first + $this->page_size + $subset : $this->result->first;
+ $length = $subset != 0 ? abs($subset) : $this->page_size;
+
+ $sql_result = $this->db->limitquery(
+ "SELECT * FROM ".$this->db_name."
+ WHERE del<>1
+ AND user_id=?" .
+ ($this->filter ? " AND (".$this->filter.")" : "") .
+ " ORDER BY name",
+ $start_row,
+ $length,
+ $this->user_id);
+ }
+
+ while ($sql_result && ($sql_arr = $this->db->fetch_assoc($sql_result)))
+ {
+ $sql_arr['ID'] = $sql_arr[$this->primary_key];
+ // make sure we have a name to display
+ if (empty($sql_arr['name']))
+ $sql_arr['name'] = $sql_arr['email'];
+ $this->result->add($sql_arr);
+ }
+
+ return $this->result;
+ }
+
+
+ /**
+ * Search contacts
+ *
+ * @param array List of fields to search in
+ * @param string Search value
+ * @param boolean True if results are requested, False if count only
+ * @return Indexed list of contact records and 'count' value
+ */
+ function search($fields, $value, $strict=false, $select=true)
+ {
+ if (!is_array($fields))
+ $fields = array($fields);
+
+ $add_where = array();
+ foreach ($fields as $col)
+ {
+ if ($col == 'ID' || $col == $this->primary_key)
+ {
+ $ids = !is_array($value) ? split(',', $value) : $value;
+ $add_where[] = $this->primary_key." IN (".join(',', $ids).")";
+ }
+ else if ($strict)
+ $add_where[] = $this->db->quoteIdentifier($col)."=".$this->db->quote($value);
+ else
+ $add_where[] = $this->db->quoteIdentifier($col)." LIKE ".$this->db->quote(strlen($value)>2 ? "%$value%" : "$value%");
+ }
+
+ if (!empty($add_where))
+ {
+ $this->set_search_set(join(' OR ', $add_where));
+ if ($select)
+ $this->list_records();
+ else
+ $this->result = $this->count();
+ }
+
+ return $this->result;
+ }
+
+
+ /**
+ * Count number of available contacts in database
+ *
+ * @return Result array with values for 'count' and 'first'
+ */
+ function count()
+ {
+ // count contacts for this user
+ $sql_result = $this->db->query(
+ "SELECT COUNT(contact_id) AS rows
+ FROM ".$this->db_name."
+ WHERE del<>1
+ AND user_id=?".
+ ($this->filter ? " AND (".$this->filter.")" : ""),
+ $this->user_id);
+
+ $sql_arr = $this->db->fetch_assoc($sql_result);
+ return new rcube_result_set($sql_arr['rows'], ($this->list_page-1) * $this->page_size);;
+ }
+
+
+ /**
+ * Return the last result set
+ *
+ * @return Result array or NULL if nothing selected yet
+ */
+ function get_result($as_res=true)
+ {
+ return $this->result;
+ }
+
+
+ /**
+ * Get a specific contact record
+ *
+ * @param mixed record identifier(s)
+ * @return Result object with all record fields or False if not found
+ */
+ function get_record($id, $assoc=false)
+ {
+ // return cached result
+ if ($this->result && ($first = $this->result->first()) && $first[$this->primary_key] == $id)
+ return $assoc ? $first : $this->result;
+
+ $this->db->query(
+ "SELECT * FROM ".$this->db_name."
+ WHERE contact_id=?
+ AND user_id=?
+ AND del<>1",
+ $id,
+ $this->user_id);
+
+ if ($sql_arr = $this->db->fetch_assoc())
+ {
+ $sql_arr['ID'] = $sql_arr[$this->primary_key];
+ $this->result = new rcube_result_set(1);
+ $this->result->add($sql_arr);
+ }
+
+ return $assoc && $sql_arr ? $sql_arr : $this->result;
+ }
+
+
+ /**
+ * Create a new contact record
+ *
+ * @param array Assoziative array with save data
+ * @return The created record ID on success, False on error
+ */
+ function insert($save_data, $check=false)
+ {
+ if (is_object($save_data) && is_a($save_data, rcube_result_set))
+ return $this->insert_recset($save_data, $check);
+
+ $insert_id = $existing = false;
+
+ if ($check)
+ $existing = $this->search('email', $save_data['email'], true, false);
+
+ $a_insert_cols = $a_insert_values = array();
+ foreach ($this->table_cols as $col)
+ if (isset($save_data[$col]))
+ {
+ $a_insert_cols[] = $this->db->quoteIdentifier($col);
+ $a_insert_values[] = $this->db->quote($save_data[$col]);
+ }
+
+ if (!$existing->count && !empty($a_insert_cols))
+ {
+ $this->db->query(
+ "INSERT INTO ".$this->db_name."
+ (user_id, changed, del, ".join(', ', $a_insert_cols).")
+ VALUES (?, ".$this->db->now().", 0, ".join(', ', $a_insert_values).")",
+ $this->user_id);
+
+ $insert_id = $this->db->insert_id(get_sequence_name('contacts'));
+ }
+
+ return $insert_id;
+ }
+
+
+ /**
+ * Insert new contacts for each row in set
+ */
+ function insert_recset($result, $check=false)
+ {
+ $ids = array();
+ while ($row = $result->next())
+ {
+ if ($insert = $this->insert($row, $check))
+ $ids[] = $insert;
+ }
+ return $ids;
+ }
+
+
+ /**
+ * Update a specific contact record
+ *
+ * @param mixed Record identifier
+ * @param array Assoziative array with save data
+ * @return True on success, False on error
+ */
+ function update($id, $save_cols)
+ {
+ $updated = false;
+ $write_sql = array();
+ foreach ($this->table_cols as $col)
+ if (isset($save_cols[$col]))
+ $write_sql[] = sprintf("%s=%s", $this->db->quoteIdentifier($col), $this->db->quote($save_cols[$col]));
+
+ if (!empty($write_sql))
+ {
+ $this->db->query(
+ "UPDATE ".$this->db_name."
+ SET changed=".$this->db->now().", ".join(', ', $write_sql)."
+ WHERE contact_id=?
+ AND user_id=?
+ AND del<>1",
+ $id,
+ $this->user_id);
+
+ $updated = $this->db->affected_rows();
+ }
+
+ return $updated;
+ }
+
+
+ /**
+ * Mark one or more contact records as deleted
+ *
+ * @param array Record identifiers
+ */
+ function delete($ids)
+ {
+ if (is_array($ids))
+ $ids = join(',', $ids);
+
+ $this->db->query(
+ "UPDATE ".$this->db_name."
+ SET del=1
+ WHERE user_id=?
+ AND contact_id IN (".$ids.")",
+ $this->user_id);
+
+ return $this->db->affected_rows();
+ }
+
+
+ /**
+ * Remove all records from the database
+ */
+ function delete_all()
+ {
+ $this->db->query("DELETE FROM {$this->db_name} WHERE user_id=?", $this->user_id);
+ return $this->db->affected_rows();
+ }
+
+}
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/include/rcube_db.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | PEAR:DB wrapper class that implements PEAR DB functions |
- | See http://pear.php.net/package/DB |
- | |
- +-----------------------------------------------------------------------+
- | Author: David Saez Padros <david@ols.es> |
- | Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: rcube_db.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-
-/**
- * Obtain the PEAR::DB class that is used for abstraction
- */
-require_once 'DB.php';
-
-/**
- * Database independent query interface
- *
- * This is a wrapper for the PEAR::DB class
- *
- * @package Database
- * @author David Saez Padros <david@ols.es>
- * @author Thomas Bruederli <roundcube@gmail.com>
- * @version 1.17
- * @link http://pear.php.net/package/DB
- */
-class rcube_db
- {
- var $db_dsnw; // DSN for write operations
- var $db_dsnr; // DSN for read operations
- var $db_connected = false; // Already connected ?
- var $db_mode = ''; // Connection mode
- var $db_handle = 0; // Connection handle
- var $db_pconn = false; // Use persistent connections
- var $db_error = false;
- var $db_error_msg = '';
-
- var $a_query_results = array('dummy');
- var $last_res_id = 0;
-
-
- /**
- * Object constructor
- *
- * @param string DSN for read/write operations
- * @param string Optional DSN for read only operations
- */
- function __construct($db_dsnw, $db_dsnr='', $pconn=false)
- {
- if ($db_dsnr=='')
- $db_dsnr=$db_dsnw;
-
- $this->db_dsnw = $db_dsnw;
- $this->db_dsnr = $db_dsnr;
- $this->db_pconn = $pconn;
-
- $dsn_array = DB::parseDSN($db_dsnw);
- $this->db_provider = $dsn_array['phptype'];
- }
-
-
- /**
- * PHP 4 object constructor
- *
- * @see rcube_db::__construct
- */
- function rcube_db($db_dsnw, $db_dsnr='', $pconn=false)
- {
- $this->__construct($db_dsnw, $db_dsnr, $pconn);
- }
-
-
- /**
- * Connect to specific database
- *
- * @param string DSN for DB connections
- * @return object PEAR database handle
- * @access private
- */
- function dsn_connect($dsn)
- {
- // Use persistent connections if available
- $dbh = DB::connect($dsn, array('persistent' => $this->db_pconn));
-
- if (DB::isError($dbh))
- {
- $this->db_error = TRUE;
- $this->db_error_msg = $dbh->getMessage();
-
- raise_error(array('code' => 603, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $this->db_error_msg), TRUE, FALSE);
-
- return FALSE;
- }
-
- else if ($this->db_provider=='sqlite')
- {
- $dsn_array = DB::parseDSN($dsn);
- if (!filesize($dsn_array['database']) && !empty($this->sqlite_initials))
- $this->_sqlite_create_database($dbh, $this->sqlite_initials);
- }
-
- return $dbh;
- }
-
-
- /**
- * Connect to appropiate databse
- * depending on the operation
- *
- * @param string Connection mode (r|w)
- * @access public
- */
- function db_connect($mode)
- {
- $this->db_mode = $mode;
-
- // Already connected
- if ($this->db_connected)
- {
- // no replication, current connection is ok
- if ($this->db_dsnw==$this->db_dsnr)
- return;
-
- // connected to master, current connection is ok
- if ($this->db_mode=='w')
- return;
-
- // Same mode, current connection is ok
- if ($this->db_mode==$mode)
- return;
- }
-
- if ($mode=='r')
- $dsn = $this->db_dsnr;
- else
- $dsn = $this->db_dsnw;
-
- $this->db_handle = $this->dsn_connect($dsn);
- $this->db_connected = $this->db_handle ? TRUE : FALSE;
- }
-
-
- /**
- * Activate/deactivate debug mode
- * (not implemented)
- */
- function set_debug($dbg = true)
- {
-
- }
-
-
- /**
- * Getter for error state
- *
- * @param boolean True on error
- */
- function is_error()
- {
- return $this->db_error ? $this->db_error_msg : FALSE;
- }
-
-
- /**
- * Execute a SQL query
- *
- * @param string SQL query to execute
- * @param mixed Values to be inserted in query
- * @return number Query handle identifier
- * @access public
- */
- function query()
- {
- $params = func_get_args();
- $query = array_shift($params);
-
- return $this->_query($query, 0, 0, $params);
- }
-
-
- /**
- * Execute a SQL query with limits
- *
- * @param string SQL query to execute
- * @param number Offset for LIMIT statement
- * @param number Number of rows for LIMIT statement
- * @param mixed Values to be inserted in query
- * @return number Query handle identifier
- * @access public
- */
- function limitquery()
- {
- $params = func_get_args();
- $query = array_shift($params);
- $offset = array_shift($params);
- $numrows = array_shift($params);
-
- return $this->_query($query, $offset, $numrows, $params);
- }
-
-
- /**
- * Execute a SQL query with limits
- *
- * @param string SQL query to execute
- * @param number Offset for LIMIT statement
- * @param number Number of rows for LIMIT statement
- * @param array Values to be inserted in query
- * @return number Query handle identifier
- * @access private
- */
- function _query($query, $offset, $numrows, $params)
- {
- // Read or write ?
- if (strtolower(trim(substr($query,0,6)))=='select')
- $mode='r';
- else
- $mode='w';
-
- $this->db_connect($mode);
-
- if (!$this->db_connected)
- return FALSE;
-
- if ($this->db_provider == 'sqlite')
- $this->_sqlite_prepare();
-
- if ($numrows || $offset)
- $result = $this->db_handle->limitQuery($query,$offset,$numrows,$params);
- else
- $result = $this->db_handle->query($query, $params);
-
- // add result, even if it's an error
- return $this->_add_result($result);
- }
-
-
- /**
- * Get number of rows for a SQL query
- * If no query handle is specified, the last query will be taken as reference
- *
- * @param number Optional query handle identifier
- * @return mixed Number of rows or FALSE on failure
- * @access public
- */
- function num_rows($res_id=NULL)
- {
- if (!$this->db_handle)
- return FALSE;
-
- if ($result = $this->_get_result($res_id))
- return $result->numRows();
- else
- return FALSE;
- }
-
-
- /**
- * Get number of affected rows fort he last query
- *
- * @return mixed Number of rows or FALSE on failure
- * @access public
- */
- function affected_rows()
- {
- if (!$this->db_handle)
- return FALSE;
-
- return $this->db_handle->affectedRows();
- }
-
-
- /**
- * Get last inserted record ID
- * For Postgres databases, a sequence name is required
- *
- * @param string Sequence name for increment
- * @return mixed ID or FALSE on failure
- * @access public
- */
- function insert_id($sequence = '')
- {
- if (!$this->db_handle || $this->db_mode=='r')
- return FALSE;
-
- switch($this->db_provider)
- {
- case 'pgsql':
- $result = &$this->db_handle->getOne("SELECT CURRVAL('$sequence')");
- if (DB::isError($result))
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $result->getMessage()), TRUE, FALSE);
- return $result;
-
- case 'mssql':
- $result = &$this->db_handle->getOne("SELECT @@IDENTITY");
- if (DB::isError($result))
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $result->getMessage()), TRUE, FALSE);
- return $result;
-
- case 'mysql': // This is unfortuneate
- return mysql_insert_id($this->db_handle->connection);
-
- case 'mysqli':
- return mysqli_insert_id($this->db_handle->connection);
-
- case 'sqlite':
- return sqlite_last_insert_rowid($this->db_handle->connection);
-
- default:
- die("portability issue with this database, please have the developer fix");
- }
- }
-
-
- /**
- * Get an associative array for one row
- * If no query handle is specified, the last query will be taken as reference
- *
- * @param number Optional query handle identifier
- * @return mixed Array with col values or FALSE on failure
- * @access public
- */
- function fetch_assoc($res_id=NULL)
- {
- $result = $this->_get_result($res_id);
- return $this->_fetch_row($result, DB_FETCHMODE_ASSOC);
- }
-
-
- /**
- * Get an index array for one row
- * If no query handle is specified, the last query will be taken as reference
- *
- * @param number Optional query handle identifier
- * @return mixed Array with col values or FALSE on failure
- * @access public
- */
- function fetch_array($res_id=NULL)
- {
- $result = $this->_get_result($res_id);
- return $this->_fetch_row($result, DB_FETCHMODE_ORDERED);
- }
-
-
- /**
- * Get co values for a result row
- *
- * @param object Query result handle
- * @param number Fetch mode identifier
- * @return mixed Array with col values or FALSE on failure
- * @access private
- */
- function _fetch_row($result, $mode)
- {
- if (!$result || DB::isError($result))
- {
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $this->db_link->getMessage()), TRUE, FALSE);
- return FALSE;
- }
- elseif (!is_object($result))
- return FALSE;
-
- return $result->fetchRow($mode);
- }
-
-
- /**
- * Formats input so it can be safely used in a query
- *
- * @param mixed Value to quote
- * @return string Quoted/converted string for use in query
- * @access public
- */
- function quote($input)
- {
- // create DB handle if not available
- if (!$this->db_handle)
- $this->db_connect('r');
-
- // escape pear identifier chars
- $rep_chars = array('?' => '\?',
- '!' => '\!',
- '&' => '\&');
-
- return $this->db_handle->quoteSmart(strtr($input, $rep_chars));
- }
-
-
- /**
- * Quotes a string so it can be safely used as a table or column name
- *
- * @param string Value to quote
- * @return string Quoted string for use in query
- * @deprecated Replaced by rcube_db::quote_identifier
- * @see rcube_db::quote_identifier
- * @access public
- */
- function quoteIdentifier($str)
- {
- return $this->quote_identifier($str);
- }
-
-
- /**
- * Quotes a string so it can be safely used as a table or column name
- *
- * @param string Value to quote
- * @return string Quoted string for use in query
- * @access public
- */
- function quote_identifier($str)
- {
- if (!$this->db_handle)
- $this->db_connect('r');
-
- return $this->db_handle->quoteIdentifier($str);
- }
-
-
- /**
- * Escapes a string
- *
- * @param string The string to be escaped
- * @return string The escaped string
- * @access public
- */
- function escapeSimple($str)
- {
- if (!$this->db_handle)
- $this->db_connect('r');
-
- return $this->db_handle->escapeSimple($str);
- }
-
-
- /*
- * Return SQL function for current time and date
- *
- * @return string SQL function to use in query
- * @access public
- */
- function now()
- {
- switch($this->db_provider)
- {
- case 'mssql':
- return "getdate()";
-
- default:
- return "now()";
- }
- }
-
-
- /**
- * Return SQL statement to convert a field value into a unix timestamp
- *
- * @param string Field name
- * @return string SQL statement to use in query
- * @access public
- */
- function unixtimestamp($field)
- {
- switch($this->db_provider)
- {
- case 'pgsql':
- return "EXTRACT (EPOCH FROM $field)";
-
- case 'mssql':
- return "datediff(s, '1970-01-01 00:00:00', $field)";
-
- default:
- return "UNIX_TIMESTAMP($field)";
- }
- }
-
-
- /**
- * Return SQL statement to convert from a unix timestamp
- *
- * @param string Field name
- * @return string SQL statement to use in query
- * @access public
- */
- function fromunixtime($timestamp)
- {
- switch($this->db_provider)
- {
- case 'mysqli':
- case 'mysql':
- case 'sqlite':
- return sprintf("FROM_UNIXTIME(%d)", $timestamp);
-
- default:
- return date("'Y-m-d H:i:s'", $timestamp);
- }
- }
-
-
- /**
- * Adds a query result and returns a handle ID
- *
- * @param object Query handle
- * @return mixed Handle ID or FALE on failure
- * @access private
- */
- function _add_result($res)
- {
- // sql error occured
- if (DB::isError($res))
- {
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $res->getMessage() . " Query: " . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)), TRUE, FALSE);
- return FALSE;
- }
- else
- {
- $res_id = sizeof($this->a_query_results);
- $this->a_query_results[$res_id] = $res;
- $this->last_res_id = $res_id;
- return $res_id;
- }
- }
-
-
- /**
- * Resolves a given handle ID and returns the according query handle
- * If no ID is specified, the last ressource handle will be returned
- *
- * @param number Handle ID
- * @return mixed Ressource handle or FALE on failure
- * @access private
- */
- function _get_result($res_id=NULL)
- {
- if ($res_id==NULL)
- $res_id = $this->last_res_id;
-
- if ($res_id && isset($this->a_query_results[$res_id]))
- return $this->a_query_results[$res_id];
- else
- return FALSE;
- }
-
-
- /**
- * Create a sqlite database from a file
- *
- * @param object SQLite database handle
- * @param string File path to use for DB creation
- * @access private
- */
- function _sqlite_create_database($dbh, $file_name)
- {
- if (empty($file_name) || !is_string($file_name))
- return;
-
- $data = '';
- if ($fd = fopen($file_name, 'r'))
- {
- $data = fread($fd, filesize($file_name));
- fclose($fd);
- }
-
- if (strlen($data))
- sqlite_exec($dbh->connection, $data);
- }
-
-
- /**
- * Add some proprietary database functions to the current SQLite handle
- * in order to make it MySQL compatible
- *
- * @access private
- */
- function _sqlite_prepare()
- {
- include_once('include/rcube_sqlite.inc');
-
- // we emulate via callback some missing MySQL function
- sqlite_create_function($this->db_handle->connection, "from_unixtime", "rcube_sqlite_from_unixtime");
- sqlite_create_function($this->db_handle->connection, "unix_timestamp", "rcube_sqlite_unix_timestamp");
- sqlite_create_function($this->db_handle->connection, "now", "rcube_sqlite_now");
- sqlite_create_function($this->db_handle->connection, "md5", "rcube_sqlite_md5");
- }
-
-
- } // end class rcube_db
-
-?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_db.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | PEAR:DB wrapper class that implements PEAR DB functions |
+ | See http://pear.php.net/package/DB |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: David Saez Padros <david@ols.es> |
+ | Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_db.php 1291 2008-04-12 13:54:45Z thomasb $
+
+*/
+
+
+/**
+ * Database independent query interface
+ *
+ * This is a wrapper for the PEAR::DB class
+ *
+ * @package Database
+ * @author David Saez Padros <david@ols.es>
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ * @version 1.17
+ * @link http://pear.php.net/package/DB
+ */
+class rcube_db
+ {
+ var $db_dsnw; // DSN for write operations
+ var $db_dsnr; // DSN for read operations
+ var $db_connected = false; // Already connected ?
+ var $db_mode = ''; // Connection mode
+ var $db_handle = 0; // Connection handle
+ var $db_pconn = false; // Use persistent connections
+ var $db_error = false;
+ var $db_error_msg = '';
+
+ var $a_query_results = array('dummy');
+ var $last_res_id = 0;
+
+
+ /**
+ * Object constructor
+ *
+ * @param string DSN for read/write operations
+ * @param string Optional DSN for read only operations
+ */
+ function __construct($db_dsnw, $db_dsnr='', $pconn=false)
+ {
+ if ($db_dsnr=='')
+ $db_dsnr=$db_dsnw;
+
+ $this->db_dsnw = $db_dsnw;
+ $this->db_dsnr = $db_dsnr;
+ $this->db_pconn = $pconn;
+
+ $dsn_array = DB::parseDSN($db_dsnw);
+ $this->db_provider = $dsn_array['phptype'];
+ }
+
+
+ /**
+ * PHP 4 object constructor
+ *
+ * @see rcube_db::__construct
+ */
+ function rcube_db($db_dsnw, $db_dsnr='', $pconn=false)
+ {
+ $this->__construct($db_dsnw, $db_dsnr, $pconn);
+ }
+
+
+ /**
+ * Connect to specific database
+ *
+ * @param string DSN for DB connections
+ * @return object PEAR database handle
+ * @access private
+ */
+ function dsn_connect($dsn)
+ {
+ // Use persistent connections if available
+ $dbh = DB::connect($dsn, array('persistent' => $this->db_pconn));
+
+ if (DB::isError($dbh))
+ {
+ $this->db_error = TRUE;
+ $this->db_error_msg = $dbh->getMessage();
+
+ raise_error(array('code' => 603, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => $this->db_error_msg), TRUE, FALSE);
+
+ return FALSE;
+ }
+
+ else if ($this->db_provider=='sqlite')
+ {
+ $dsn_array = DB::parseDSN($dsn);
+ if (!filesize($dsn_array['database']) && !empty($this->sqlite_initials))
+ $this->_sqlite_create_database($dbh, $this->sqlite_initials);
+ }
+
+ return $dbh;
+ }
+
+
+ /**
+ * Connect to appropiate databse
+ * depending on the operation
+ *
+ * @param string Connection mode (r|w)
+ * @access public
+ */
+ function db_connect($mode)
+ {
+ $this->db_mode = $mode;
+
+ // Already connected
+ if ($this->db_connected)
+ {
+ // no replication, current connection is ok
+ if ($this->db_dsnw==$this->db_dsnr)
+ return;
+
+ // connected to master, current connection is ok
+ if ($this->db_mode=='w')
+ return;
+
+ // Same mode, current connection is ok
+ if ($this->db_mode==$mode)
+ return;
+ }
+
+ if ($mode=='r')
+ $dsn = $this->db_dsnr;
+ else
+ $dsn = $this->db_dsnw;
+
+ $this->db_handle = $this->dsn_connect($dsn);
+ $this->db_connected = $this->db_handle ? TRUE : FALSE;
+ }
+
+
+ /**
+ * Activate/deactivate debug mode
+ * (not implemented)
+ */
+ function set_debug($dbg = true)
+ {
+
+ }
+
+
+ /**
+ * Getter for error state
+ *
+ * @param boolean True on error
+ */
+ function is_error()
+ {
+ return $this->db_error ? $this->db_error_msg : FALSE;
+ }
+
+
+ /**
+ * Execute a SQL query
+ *
+ * @param string SQL query to execute
+ * @param mixed Values to be inserted in query
+ * @return number Query handle identifier
+ * @access public
+ */
+ function query()
+ {
+ $params = func_get_args();
+ $query = array_shift($params);
+
+ return $this->_query($query, 0, 0, $params);
+ }
+
+
+ /**
+ * Execute a SQL query with limits
+ *
+ * @param string SQL query to execute
+ * @param number Offset for LIMIT statement
+ * @param number Number of rows for LIMIT statement
+ * @param mixed Values to be inserted in query
+ * @return number Query handle identifier
+ * @access public
+ */
+ function limitquery()
+ {
+ $params = func_get_args();
+ $query = array_shift($params);
+ $offset = array_shift($params);
+ $numrows = array_shift($params);
+
+ return $this->_query($query, $offset, $numrows, $params);
+ }
+
+
+ /**
+ * Execute a SQL query with limits
+ *
+ * @param string SQL query to execute
+ * @param number Offset for LIMIT statement
+ * @param number Number of rows for LIMIT statement
+ * @param array Values to be inserted in query
+ * @return number Query handle identifier
+ * @access private
+ */
+ function _query($query, $offset, $numrows, $params)
+ {
+ // Read or write ?
+ if (strtolower(trim(substr($query,0,6)))=='select')
+ $mode='r';
+ else
+ $mode='w';
+
+ $this->db_connect($mode);
+
+ if (!$this->db_connected)
+ return FALSE;
+
+ if ($this->db_provider == 'sqlite')
+ $this->_sqlite_prepare();
+
+ if ($numrows || $offset)
+ $result = $this->db_handle->limitQuery($query,$offset,$numrows,$params);
+ else
+ $result = $this->db_handle->query($query, $params);
+
+ // add result, even if it's an error
+ return $this->_add_result($result);
+ }
+
+
+ /**
+ * Get number of rows for a SQL query
+ * If no query handle is specified, the last query will be taken as reference
+ *
+ * @param number Optional query handle identifier
+ * @return mixed Number of rows or FALSE on failure
+ * @access public
+ */
+ function num_rows($res_id=NULL)
+ {
+ if (!$this->db_handle)
+ return FALSE;
+
+ if ($result = $this->_get_result($res_id))
+ return $result->numRows();
+ else
+ return FALSE;
+ }
+
+
+ /**
+ * Get number of affected rows fort he last query
+ *
+ * @return mixed Number of rows or FALSE on failure
+ * @access public
+ */
+ function affected_rows()
+ {
+ if (!$this->db_handle)
+ return FALSE;
+
+ return $this->db_handle->affectedRows();
+ }
+
+
+ /**
+ * Get last inserted record ID
+ * For Postgres databases, a sequence name is required
+ *
+ * @param string Sequence name for increment
+ * @return mixed ID or FALSE on failure
+ * @access public
+ */
+ function insert_id($sequence = '')
+ {
+ if (!$this->db_handle || $this->db_mode=='r')
+ return FALSE;
+
+ switch($this->db_provider)
+ {
+ case 'pgsql':
+ $result = &$this->db_handle->getOne("SELECT CURRVAL('$sequence')");
+ if (DB::isError($result))
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => $result->getMessage()), TRUE, FALSE);
+ return $result;
+
+ case 'mssql':
+ $result = &$this->db_handle->getOne("SELECT @@IDENTITY");
+ if (DB::isError($result))
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => $result->getMessage()), TRUE, FALSE);
+ return $result;
+
+ case 'mysql': // This is unfortuneate
+ return mysql_insert_id($this->db_handle->connection);
+
+ case 'mysqli':
+ return mysqli_insert_id($this->db_handle->connection);
+
+ case 'sqlite':
+ return sqlite_last_insert_rowid($this->db_handle->connection);
+
+ default:
+ die("portability issue with this database, please have the developer fix");
+ }
+ }
+
+
+ /**
+ * Get an associative array for one row
+ * If no query handle is specified, the last query will be taken as reference
+ *
+ * @param number Optional query handle identifier
+ * @return mixed Array with col values or FALSE on failure
+ * @access public
+ */
+ function fetch_assoc($res_id=NULL)
+ {
+ $result = $this->_get_result($res_id);
+ return $this->_fetch_row($result, DB_FETCHMODE_ASSOC);
+ }
+
+
+ /**
+ * Get an index array for one row
+ * If no query handle is specified, the last query will be taken as reference
+ *
+ * @param number Optional query handle identifier
+ * @return mixed Array with col values or FALSE on failure
+ * @access public
+ */
+ function fetch_array($res_id=NULL)
+ {
+ $result = $this->_get_result($res_id);
+ return $this->_fetch_row($result, DB_FETCHMODE_ORDERED);
+ }
+
+
+ /**
+ * Get co values for a result row
+ *
+ * @param object Query result handle
+ * @param number Fetch mode identifier
+ * @return mixed Array with col values or FALSE on failure
+ * @access private
+ */
+ function _fetch_row($result, $mode)
+ {
+ if (!$result || DB::isError($result))
+ {
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => $this->db_link->getMessage()), TRUE, FALSE);
+ return FALSE;
+ }
+ elseif (!is_object($result))
+ return FALSE;
+
+ return $result->fetchRow($mode);
+ }
+
+
+ /**
+ * Formats input so it can be safely used in a query
+ *
+ * @param mixed Value to quote
+ * @return string Quoted/converted string for use in query
+ * @access public
+ */
+ function quote($input)
+ {
+ // create DB handle if not available
+ if (!$this->db_handle)
+ $this->db_connect('r');
+
+ // escape pear identifier chars
+ $rep_chars = array('?' => '\?',
+ '!' => '\!',
+ '&' => '\&');
+
+ return $this->db_handle->quoteSmart(strtr($input, $rep_chars));
+ }
+
+
+ /**
+ * Quotes a string so it can be safely used as a table or column name
+ *
+ * @param string Value to quote
+ * @return string Quoted string for use in query
+ * @deprecated Replaced by rcube_db::quote_identifier
+ * @see rcube_db::quote_identifier
+ * @access public
+ */
+ function quoteIdentifier($str)
+ {
+ return $this->quote_identifier($str);
+ }
+
+
+ /**
+ * Quotes a string so it can be safely used as a table or column name
+ *
+ * @param string Value to quote
+ * @return string Quoted string for use in query
+ * @access public
+ */
+ function quote_identifier($str)
+ {
+ if (!$this->db_handle)
+ $this->db_connect('r');
+
+ return $this->db_handle->quoteIdentifier($str);
+ }
+
+
+ /**
+ * Escapes a string
+ *
+ * @param string The string to be escaped
+ * @return string The escaped string
+ * @access public
+ */
+ function escapeSimple($str)
+ {
+ if (!$this->db_handle)
+ $this->db_connect('r');
+
+ return $this->db_handle->escapeSimple($str);
+ }
+
+
+ /*
+ * Return SQL function for current time and date
+ *
+ * @return string SQL function to use in query
+ * @access public
+ */
+ function now()
+ {
+ switch($this->db_provider)
+ {
+ case 'mssql':
+ return "getdate()";
+
+ default:
+ return "now()";
+ }
+ }
+
+
+ /**
+ * Return SQL statement to convert a field value into a unix timestamp
+ *
+ * @param string Field name
+ * @return string SQL statement to use in query
+ * @access public
+ */
+ function unixtimestamp($field)
+ {
+ switch($this->db_provider)
+ {
+ case 'pgsql':
+ return "EXTRACT (EPOCH FROM $field)";
+
+ case 'mssql':
+ return "datediff(s, '1970-01-01 00:00:00', $field)";
+
+ default:
+ return "UNIX_TIMESTAMP($field)";
+ }
+ }
+
+
+ /**
+ * Return SQL statement to convert from a unix timestamp
+ *
+ * @param string Field name
+ * @return string SQL statement to use in query
+ * @access public
+ */
+ function fromunixtime($timestamp)
+ {
+ switch($this->db_provider)
+ {
+ case 'mysqli':
+ case 'mysql':
+ case 'sqlite':
+ return sprintf("FROM_UNIXTIME(%d)", $timestamp);
+
+ default:
+ return date("'Y-m-d H:i:s'", $timestamp);
+ }
+ }
+
+
+ /**
+ * Adds a query result and returns a handle ID
+ *
+ * @param object Query handle
+ * @return mixed Handle ID or FALE on failure
+ * @access private
+ */
+ function _add_result($res)
+ {
+ // sql error occured
+ if (DB::isError($res))
+ {
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => $res->getMessage() . " Query: " . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)), TRUE, FALSE);
+ return FALSE;
+ }
+ else
+ {
+ $res_id = sizeof($this->a_query_results);
+ $this->a_query_results[$res_id] = $res;
+ $this->last_res_id = $res_id;
+ return $res_id;
+ }
+ }
+
+
+ /**
+ * Resolves a given handle ID and returns the according query handle
+ * If no ID is specified, the last ressource handle will be returned
+ *
+ * @param number Handle ID
+ * @return mixed Ressource handle or FALE on failure
+ * @access private
+ */
+ function _get_result($res_id=NULL)
+ {
+ if ($res_id==NULL)
+ $res_id = $this->last_res_id;
+
+ if ($res_id && isset($this->a_query_results[$res_id]))
+ return $this->a_query_results[$res_id];
+ else
+ return FALSE;
+ }
+
+
+ /**
+ * Create a sqlite database from a file
+ *
+ * @param object SQLite database handle
+ * @param string File path to use for DB creation
+ * @access private
+ */
+ function _sqlite_create_database($dbh, $file_name)
+ {
+ if (empty($file_name) || !is_string($file_name))
+ return;
+
+ $data = '';
+ if ($fd = fopen($file_name, 'r'))
+ {
+ $data = fread($fd, filesize($file_name));
+ fclose($fd);
+ }
+
+ if (strlen($data))
+ sqlite_exec($dbh->connection, $data);
+ }
+
+
+ /**
+ * Add some proprietary database functions to the current SQLite handle
+ * in order to make it MySQL compatible
+ *
+ * @access private
+ */
+ function _sqlite_prepare()
+ {
+ include_once('include/rcube_sqlite.inc');
+
+ // we emulate via callback some missing MySQL function
+ sqlite_create_function($this->db_handle->connection, "from_unixtime", "rcube_sqlite_from_unixtime");
+ sqlite_create_function($this->db_handle->connection, "unix_timestamp", "rcube_sqlite_unix_timestamp");
+ sqlite_create_function($this->db_handle->connection, "now", "rcube_sqlite_now");
+ sqlite_create_function($this->db_handle->connection, "md5", "rcube_sqlite_md5");
+ }
+
+
+ } // end class rcube_db
+
+
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | rcube_html.inc |
- | |
- | This file is part of the RoundCube PHP suite |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | CONTENTS: |
- | Common Classes to create HTML output |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: $
-
-*/
-
-
-/**
- * HTML page builder class
- *
- * @package HTML
- */
-class rcube_html_page
-{
- var $scripts_path = '';
- var $script_files = array();
- var $scripts = array();
- var $charset = 'UTF-8';
-
- var $script_tag_file = "<script type=\"text/javascript\" src=\"%s%s\"></script>\n";
- var $script_tag = "<script type=\"text/javascript\">\n<!--\n%s\n\n//-->\n</script>\n";
- var $default_template = "<html>\n<head><title></title></head>\n<body></body>\n</html>";
-
- var $title = 'RoundCube Mail';
- var $header = '';
- var $footer = '';
- var $body = '';
- var $body_attrib = array();
- var $meta_tags = array();
-
-
- /**
- * Link an external script file
- *
- * @param string File URL
- * @param string Target position [head|foot]
- */
- function include_script($file, $position='head')
- {
- static $sa_files = array();
-
- if (in_array($file, $sa_files))
- return;
-
- if (!is_array($this->script_files[$position]))
- $this->script_files[$position] = array();
-
- $this->script_files[$position][] = $file;
- }
-
- /**
- * Add inline javascript code
- *
- * @param string JS code snippet
- * @param string Target position [head|head_top|foot]
- */
- function add_script($script, $position='head')
- {
- if (!isset($this->scripts[$position]))
- $this->scripts[$position] = "\n".rtrim($script);
- else
- $this->scripts[$position] .= "\n".rtrim($script);
- }
-
- /**
- * Add HTML code to the page header
- */
- function add_header($str)
- {
- $this->header .= "\n".$str;
- }
-
- /**
- * Add HTML code to the page footer
- * To be added right befor </body>
- */
- function add_footer($str)
- {
- $this->footer .= "\n".$str;
- }
-
- /**
- * Setter for page title
- */
- function set_title($t)
- {
- $this->title = $t;
- }
-
-
- /**
- * Setter for output charset.
- * To be specified in a meta tag and sent as http-header
- */
- function set_charset($charset)
- {
- global $MBSTRING;
-
- $this->charset = $charset;
-
- if ($MBSTRING && function_exists("mb_internal_encoding"))
- {
- if(!@mb_internal_encoding($charset))
- $MBSTRING = FALSE;
- }
- }
-
- /**
- * Getter for output charset
- */
- function get_charset()
- {
- return $this->charset;
- }
-
-
- /**
- * Reset all saved properties
- */
- function reset()
- {
- $this->script_files = array();
- $this->scripts = array();
- $this->title = '';
- $this->header = '';
- $this->footer = '';
- }
-
-
- /**
- * Process template and write to stdOut
- *
- * @param string HTML template
- * @param string Base for absolute paths
- */
- function write($templ='', $base_path='')
- {
- $output = empty($templ) ? $this->default_template : trim($templ);
-
- // replace specialchars in content
- $__page_title = Q($this->title, 'show', FALSE);
- $__page_header = $__page_body = $__page_footer = '';
-
-
- // include meta tag with charset
- if (!empty($this->charset))
- {
- header('Content-Type: text/html; charset='.$this->charset, true);
- $__page_header = '<meta http-equiv="content-type" content="text/html; charset='.$this->charset.'" />'."\n";
- }
-
-
- // definition of the code to be placed in the document header and footer
- if (is_array($this->script_files['head']))
- foreach ($this->script_files['head'] as $file)
- $__page_header .= sprintf($this->script_tag_file, $this->scripts_path, $file);
-
- $head_script = $this->scripts['head_top'] . $this->scripts['head'];
- if (!empty($head_script))
- $__page_header .= sprintf($this->script_tag, $head_script);
-
- if (!empty($this->header))
- $__page_header .= $this->header;
-
- if (is_array($this->script_files['foot']))
- foreach ($this->script_files['foot'] as $file)
- $__page_footer .= sprintf($this->script_tag_file, $this->scripts_path, $file);
-
- if (!empty($this->scripts['foot']))
- $__page_footer .= sprintf($this->script_tag, $this->scripts['foot']);
-
- if (!empty($this->footer))
- $__page_footer .= $this->footer;
-
- // find page header
- if ($hpos = strpos(strtolower($output), '</head>'))
- $__page_header .= "\n";
- else
- {
- if (!is_numeric($hpos))
- $hpos = strpos(strtolower($output), '<body');
- if (!is_numeric($hpos) && ($hpos = strpos(strtolower($output), '<html')))
- {
- while($output[$hpos]!='>')
- $hpos++;
- $hpos++;
- }
-
- $__page_header = "<head>\n<title>$__page_title</title>\n$__page_header\n</head>\n";
- }
-
- // add page hader
- if ($hpos)
- $output = substr($output,0,$hpos) . $__page_header . substr($output,$hpos,strlen($output));
- else
- $output = $__page_header . $output;
-
-
- // find page body
- if($bpos = strpos(strtolower($output), '<body'))
- {
- while($output[$bpos]!='>') $bpos++;
- $bpos++;
- }
- else
- $bpos = strpos(strtolower($output), '</head>')+7;
-
- // add page body
- if($bpos && $__page_body)
- $output = substr($output,0,$bpos) . "\n$__page_body\n" . substr($output,$bpos,strlen($output));
-
-
- // find and add page footer
- $output_lc = strtolower($output);
- if(($fpos = strrstr($output_lc, '</body>')) ||
- ($fpos = strrstr($output_lc, '</html>')))
- $output = substr($output, 0, $fpos) . "$__page_footer\n" . substr($output, $fpos);
- else
- $output .= "\n$__page_footer";
-
-
- // reset those global vars
- $__page_header = $__page_footer = '';
-
-
- // correct absolute paths in images and other tags
- $output = preg_replace('/(src|href|background)=(["\']?)(\/[a-z0-9_\-]+)/Ui', "\\1=\\2$base_path\\3", $output);
- $output = str_replace('$__skin_path', $base_path, $output);
-
- print rcube_charset_convert($output, 'UTF-8', $this->charset);
- }
-
-} // end class rcube_html_page
-
-
-
-/**
- * Base class to build a HTML for element
- *
- * @package HTML
- */
-class rcube_form_element
- {
- var $uppertags = FALSE;
- var $upperattribs = FALSE;
- var $upperprops = FALSE;
- var $newline = FALSE;
-
- var $attrib = array();
-
-
- /**
- * Create string with saved attributes
- *
- * @return string HTML formatted tag attributes
- */
- function create_attrib_string()
- {
- if (!sizeof($this->attrib))
- return '';
-
- if ($this->name!='')
- $this->attrib['name'] = $this->name;
-
- $attrib_arr = array();
- foreach ($this->attrib as $key => $value)
- {
- // don't output some internally used attributes
- if (in_array($key, array('form', 'quicksearch')))
- continue;
-
- // skip if size if not numeric
- if (($key=='size' && !is_numeric($value)))
- continue;
-
- // skip empty eventhandlers
- if ((strpos($key,'on')===0 && $value==''))
- continue;
-
- // attributes with no value
- if (in_array($key, array('checked', 'multiple', 'disabled', 'selected', 'nowrap')))
- {
- if ($value)
- $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), $key);
- }
- // don't convert size of value attribute
- else if ($key=='value')
- $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), Q($value, 'strict', false));
-
- // regular tag attributes
- else
- $attrib_arr[] = sprintf('%s="%s"', $this->_conv_case($key, 'attrib'), $this->_conv_case(Q($value), 'value'));
- }
-
- return sizeof($attrib_arr) ? ' '.implode(' ', $attrib_arr) : '';
- }
-
-
- /**
- * Convert tags and attributes to upper-/lowercase
- *
- * @param string Input string
- * @param string Value type (can either be "tag" or "attrib")
- * @return string Converted output string
- * @access private
- */
- function _conv_case($str, $type='attrib')
- {
- if ($type == 'tag')
- return $this->uppertags ? strtoupper($str) : strtolower($str);
- else if ($type == 'attrib')
- return $this->upperattribs ? strtoupper($str) : strtolower($str);
- else if ($type == 'value')
- return $this->upperprops ? strtoupper($str) : strtolower($str);
- }
- }
-
-
-/**
- * Builder for an <input> field
- *
- * @package HTML
- */
-class input_field extends rcube_form_element
-{
- var $type = 'text';
-
- /**
- * Constructor
- * @param array Named tag attributes
- */
- function input_field($attrib=array())
- {
- if (is_array($attrib))
- $this->attrib = $attrib;
-
- if ($attrib['type'])
- $this->type = $attrib['type'];
-
- if ($attrib['newline'])
- $this->newline = TRUE;
- }
-
- /**
- * Compose input tag
- *
- * @param string Field value
- * @param array Additional tag attributes
- * @return string Final HTML code
- */
- function show($value=NULL, $attrib=NULL)
- {
- // overwrite object attributes
- if (is_array($attrib))
- $this->attrib = array_merge($this->attrib, $attrib);
-
- // set value attribute
- if ($value!==NULL)
- $this->attrib['value'] = $value;
-
- $this->attrib['type'] = $this->type;
-
- // return final tag
- return sprintf(
- '<%s%s />%s',
- $this->_conv_case('input', 'tag'),
- $this->create_attrib_string(),
- ($this->newline ? "\n" : ""));
- }
-}
-
-
-/**
- * Builder for a <input type="text"> field
- *
- * @package HTML
- */
-class textfield extends input_field
-{
- var $type = 'text';
-}
-
-/**
- * Builder for a <input type="password"> field
- *
- * @package HTML
- */
-class passwordfield extends input_field
-{
- var $type = 'password';
-}
-
-/**
- * Builder for <input type="radio"> fields
- *
- * @package HTML
- */
-class radiobutton extends input_field
-{
- var $type = 'radio';
-}
-
-/**
- * Builder for <input type="checkbox"> fields
- *
- * @package HTML
- */
-class checkbox extends input_field
-{
- var $type = 'checkbox';
-
-
- /**
- * Compose input tag
- *
- * @param string Field value
- * @param array Additional tag attributes
- * @return string Final HTML code
- */
- function show($value='', $attrib=NULL)
- {
- // overwrite object attributes
- if (is_array($attrib))
- $this->attrib = array_merge($this->attrib, $attrib);
-
- $this->attrib['type'] = $this->type;
-
- if ($value && (string)$value==(string)$this->attrib['value'])
- $this->attrib['checked'] = TRUE;
- else
- $this->attrib['checked'] = FALSE;
-
- // return final tag
- return sprintf(
- '<%s%s />%s',
- $this->_conv_case('input', 'tag'),
- $this->create_attrib_string(),
- ($this->newline ? "\n" : ""));
- }
-}
-
-
-/**
- * Builder for a <textarea> field
- *
- * @package HTML
- */
-class textarea extends rcube_form_element
- {
-
- /**
- * Constructor
- * @param array Named tag attributes
- */
- function textarea($attrib=array())
- {
- $this->attrib = $attrib;
-
- if ($attrib['newline'])
- $this->newline = TRUE;
- }
-
- /**
- * Create HTML representation for this field
- *
- * @param string Field value
- * @param array Additional tag attributes
- * @return string Final HTML code
- */
- function show($value='', $attrib=NULL)
- {
- // overwrite object attributes
- if (is_array($attrib))
- $this->attrib = array_merge($this->attrib, $attrib);
-
- // take value attribute as content
- if ($value=='')
- $value = $this->attrib['value'];
-
- // make shure we don't print the value attribute
- if (isset($this->attrib['value']))
- unset($this->attrib['value']);
-
- if (!empty($value) && !isset($this->attrib['mce_editable']))
- $value = Q($value, 'strict', FALSE);
-
- // return final tag
- return sprintf(
- '<%s%s>%s</%s>%s',
- $this->_conv_case('textarea', 'tag'),
- $this->create_attrib_string(),
- $value,
- $this->_conv_case('textarea', 'tag'),
- ($this->newline ? "\n" : ""));
- }
-}
-
-
-/**
- * Builder for group of hidden form fields
- *
- * @package HTML
- */
-class hiddenfield extends rcube_form_element
-{
- var $fields_arr = array();
- var $newline = TRUE;
-
- /**
- * Constructor
- *
- * @param array Named tag attributes
- */
- function hiddenfield($attrib=NULL)
- {
- if (is_array($attrib))
- $this->add($attrib);
- }
-
- /**
- * Add a hidden field to this instance
- * @param array Named tag attributes
- */
- function add($attrib)
- {
- $this->fields_arr[] = $attrib;
- }
-
-
- /**
- * Create HTML code for the hidden fields
- *
- * @return string Final HTML code
- */
- function show()
- {
- $out = '';
- foreach ($this->fields_arr as $attrib)
- {
- $this->attrib = $attrib;
- $this->attrib['type'] = 'hidden';
-
- $out .= sprintf(
- '<%s%s />%s',
- $this->_conv_case('input', 'tag'),
- $this->create_attrib_string(),
- ($this->newline ? "\n" : ""));
- }
-
- return $out;
- }
-}
-
-
-/**
- * Builder for HTML drop-down menus
- * Syntax:<pre>
- * // create instance. arguments are used to set attributes of select-tag
- * $select = new select(array('name' => 'fieldname'));
- *
- * // add one option
- * $select->add('Switzerland', 'CH');
- *
- * // add multiple options
- * $select->add(array('Switzerland','Germany'), array('CH','DE'));
- *
- * // generate pulldown with selection 'Switzerland' and return html-code
- * // as second argument the same attributes available to instanciate can be used
- * print $select->show('CH');
- * </pre>
- *
- * @package HTML
- */
-class select extends rcube_form_element
-{
- var $options = array();
-
- /**
- * Constructor
- *
- * @param array Named tag attributes
- */
- function select($attrib=NULL)
- {
- if (is_array($attrib))
- $this->attrib = $attrib;
-
- if ($attrib['newline'])
- $this->newline = TRUE;
- }
-
-
- /**
- * Add one ore more menu options
- *
- * @param mixed Array with names or single option name
- * @param mixed Array with values or single option value
- */
- function add($names, $values=NULL)
- {
- if (is_array($names))
- {
- foreach ($names as $i => $text)
- $this->options[] = array('text' => $text, 'value' => $values[$i]);
- }
- else
- $this->options[] = array('text' => $names, 'value' => $values);
- }
-
-
- /**
- * Generate HTML code for this drop-down menu
- *
- * @param string Value of the selected option
- * @param array Additional tag attributes
- * @return string Final HTML code
- */
- function show($select=array(), $attrib=NULL)
- {
- $options_str = "\n";
- $value_str = $this->_conv_case(' value="%s"', 'attrib');
-
- if (!is_array($select))
- $select = array($select);
-
- foreach ($this->options as $option)
- {
- $selected = ((isset($option['value']) &&
- in_array($option['value'], $select, TRUE)) ||
- (in_array($option['text'], $select, TRUE))) ?
- $this->_conv_case(' selected="selected"', 'attrib') : '';
-
- $options_str .= sprintf("<%s%s%s>%s</%s>\n",
- $this->_conv_case('option', 'tag'),
- isset($option['value']) ? sprintf($value_str, Q($option['value'])) : '',
- $selected,
- Q($option['text'], 'strict', FALSE),
- $this->_conv_case('option', 'tag'));
- }
-
- // return final tag
- return sprintf('<%s%s>%s</%s>%s',
- $this->_conv_case('select', 'tag'),
- $this->create_attrib_string(),
- $options_str,
- $this->_conv_case('select', 'tag'),
- ($this->newline ? "\n" : ""));
- }
-}
-
-
-?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_html_page.php |
+ | |
+ | This file is part of the RoundCube PHP suite |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | CONTENTS: |
+ | Class to build XHTML page output |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: $
+
+*/
+
+/**
+ * Class for HTML page creation
+ *
+ * @package HTML
+ */
+class rcube_html_page
+{
+ protected $scripts_path = '';
+ protected $script_files = array();
+ protected $scripts = array();
+ protected $charset = 'UTF-8';
+
+ protected $script_tag_file = "<script type=\"text/javascript\" src=\"%s%s\"></script>\n";
+ protected $script_tag = "<script type=\"text/javascript\">\n<!--\n%s\n\n//-->\n</script>\n";
+ protected $default_template = "<html>\n<head><title></title></head>\n<body></body>\n</html>";
+
+ protected $title = '';
+ protected $header = '';
+ protected $footer = '';
+ protected $body = '';
+
+
+ /** Constructor */
+ public function __construct() {}
+
+ /**
+ * Link an external script file
+ *
+ * @param string File URL
+ * @param string Target position [head|foot]
+ */
+ public function include_script($file, $position='head')
+ {
+ static $sa_files = array();
+
+ if (in_array($file, $sa_files)) {
+ return;
+ }
+ if (!is_array($this->script_files[$position])) {
+ $this->script_files[$position] = array();
+ }
+ $this->script_files[$position][] = $file;
+ }
+
+ /**
+ * Add inline javascript code
+ *
+ * @param string JS code snippet
+ * @param string Target position [head|head_top|foot]
+ */
+ public function add_script($script, $position='head')
+ {
+ if (!isset($this->scripts[$position])) {
+ $this->scripts[$position] = "\n".rtrim($script);
+ } else {
+ $this->scripts[$position] .= "\n".rtrim($script);
+ }
+ }
+
+ /**
+ * Add HTML code to the page header
+ */
+ public function add_header($str)
+ {
+ $this->header .= "\n".$str;
+ }
+
+ /**
+ * Add HTML code to the page footer
+ * To be added right befor </body>
+ */
+ public function add_footer($str)
+ {
+ $this->footer .= "\n".$str;
+ }
+
+ /**
+ * Setter for page title
+ */
+ public function set_title($t)
+ {
+ $this->title = $t;
+ }
+
+ /**
+ * Setter for output charset.
+ * To be specified in a meta tag and sent as http-header
+ */
+ public function set_charset($charset)
+ {
+ $this->charset = $charset;
+ }
+
+ /**
+ * Getter for output charset
+ */
+ public function get_charset()
+ {
+ return $this->charset;
+ }
+
+ /**
+ * Reset all saved properties
+ */
+ public function reset()
+ {
+ $this->script_files = array();
+ $this->scripts = array();
+ $this->title = '';
+ $this->header = '';
+ $this->footer = '';
+ $this->body = '';
+ }
+
+ /**
+ * Process template and write to stdOut
+ *
+ * @param string HTML template
+ * @param string Base for absolute paths
+ */
+ public function write($templ='', $base_path='')
+ {
+ $output = empty($templ) ? $this->default_template : trim($templ);
+
+ // set default page title
+ if (empty($this->title)) {
+ $this->title = 'RoundCube Mail';
+ }
+
+ // replace specialchars in content
+ $__page_title = Q($this->title, 'show', FALSE);
+ $__page_header = $__page_body = $__page_footer = '';
+
+ // include meta tag with charset
+ if (!empty($this->charset)) {
+ if (!headers_sent()) {
+ header('Content-Type: text/html; charset=' . $this->charset);
+ }
+ $__page_header = '<meta http-equiv="content-type"';
+ $__page_header.= ' content="text/html; charset=';
+ $__page_header.= $this->charset . '" />'."\n";
+ }
+
+ // definition of the code to be placed in the document header and footer
+ if (is_array($this->script_files['head'])) {
+ foreach ($this->script_files['head'] as $file) {
+ $__page_header .= sprintf($this->script_tag_file, $this->scripts_path, $file);
+ }
+ }
+
+ $head_script = $this->scripts['head_top'] . $this->scripts['head'];
+ if (!empty($head_script)) {
+ $__page_header .= sprintf($this->script_tag, $head_script);
+ }
+
+ if (!empty($this->header)) {
+ $__page_header .= $this->header;
+ }
+
+ if (is_array($this->script_files['foot'])) {
+ foreach ($this->script_files['foot'] as $file) {
+ $__page_footer .= sprintf($this->script_tag_file, $this->scripts_path, $file);
+ }
+ }
+
+ if (!empty($this->scripts['foot'])) {
+ $__page_footer .= sprintf($this->script_tag, $this->scripts['foot']);
+ }
+
+ if (!empty($this->footer)) {
+ $__page_footer .= $this->footer;
+ }
+
+ // find page header
+ if ($hpos = strpos(strtolower($output), '</head>')) {
+ $__page_header .= "\n";
+ }
+ else {
+ if (!is_numeric($hpos)) {
+ $hpos = strpos(strtolower($output), '<body');
+ }
+ if (!is_numeric($hpos) && ($hpos = strpos(strtolower($output), '<html'))) {
+ while ($output[$hpos] != '>') {
+ $hpos++;
+ }
+ $hpos++;
+ }
+ $__page_header = "<head>\n<title>$__page_title</title>\n$__page_header\n</head>\n";
+ }
+
+ // add page hader
+ if ($hpos) {
+ $output = substr($output,0,$hpos) . $__page_header . substr($output,$hpos,strlen($output));
+ }
+ else {
+ $output = $__page_header . $output;
+ }
+
+ // find page body
+ if ($bpos = strpos(strtolower($output), '<body')) {
+ while ($output[$bpos] != '>') {
+ $bpos++;
+ }
+ $bpos++;
+ }
+ else {
+ $bpos = strpos(strtolower($output), '</head>')+7;
+ }
+
+ // add page body
+ if ($bpos && $__page_body) {
+ $output = substr($output,0,$bpos) . "\n$__page_body\n" . substr($output,$bpos,strlen($output));
+ }
+
+ // find and add page footer
+ $output_lc = strtolower($output);
+ if (($fpos = strrpos($output_lc, '</body>')) || ($fpos = strrpos($output_lc, '</html>'))) {
+ $output = substr($output, 0, $fpos) . "$__page_footer\n" . substr($output, $fpos);
+ }
+ else {
+ $output .= "\n".$__page_footer;
+ }
+
+ // reset those global vars
+ $__page_header = $__page_footer = '';
+
+ // correct absolute paths in images and other tags
+ $output = preg_replace('/(src|href|background)=(["\']?)(\/[a-z0-9_\-]+)/Ui', "\\1=\\2$base_path\\3", $output);
+ $output = str_replace('$__skin_path', $base_path, $output);
+
+ echo rcube_charset_convert($output, 'UTF-8', $this->charset);
+ }
+}
+
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/include/rcube_imap.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | IMAP wrapper that implements the Iloha IMAP Library (IIL) |
- | See http://ilohamail.org/ for details |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: rcube_imap.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-
-/*
- * Obtain classes from the Iloha IMAP library
- */
-require_once('lib/imap.inc');
-require_once('lib/mime.inc');
-
-
-/**
- * Interface class for accessing an IMAP server
- *
- * This is a wrapper that implements the Iloha IMAP Library (IIL)
- *
- * @package Mail
- * @author Thomas Bruederli <roundcube@gmail.com>
- * @version 1.40
- * @link http://ilohamail.org
- */
-class rcube_imap
-{
- var $db;
- var $conn;
- var $root_ns = '';
- var $root_dir = '';
- var $mailbox = 'INBOX';
- var $list_page = 1;
- var $page_size = 10;
- var $sort_field = 'date';
- var $sort_order = 'DESC';
- var $delimiter = NULL;
- var $caching_enabled = FALSE;
- var $default_charset = 'ISO-8859-1';
- var $default_folders = array('INBOX');
- var $default_folders_lc = array('inbox');
- var $cache = array();
- var $cache_keys = array();
- var $cache_changes = array();
- var $uid_id_map = array();
- var $msg_headers = array();
- var $capabilities = array();
- var $skip_deleted = FALSE;
- var $search_set = NULL;
- var $search_subject = '';
- var $search_string = '';
- var $search_charset = '';
- var $debug_level = 1;
- var $error_code = 0;
-
-
- /**
- * Object constructor
- *
- * @param object DB Database connection
- */
- function __construct($db_conn)
- {
- $this->db = $db_conn;
- }
-
-
- /**
- * PHP 4 object constructor
- *
- * @see rcube_imap::__construct
- */
- function rcube_imap($db_conn)
- {
- $this->__construct($db_conn);
- }
-
-
- /**
- * Connect to an IMAP server
- *
- * @param string Host to connect
- * @param string Username for IMAP account
- * @param string Password for IMAP account
- * @param number Port to connect to
- * @param string SSL schema (either ssl or tls) or null if plain connection
- * @return boolean TRUE on success, FALSE on failure
- * @access public
- */
- function connect($host, $user, $pass, $port=143, $use_ssl=null)
- {
- global $ICL_SSL, $ICL_PORT, $IMAP_USE_INTERNAL_DATE;
-
- // check for Open-SSL support in PHP build
- if ($use_ssl && in_array('openssl', get_loaded_extensions()))
- $ICL_SSL = $use_ssl == 'imaps' ? 'ssl' : $use_ssl;
- else if ($use_ssl)
- {
- raise_error(array('code' => 403, 'type' => 'imap', 'file' => __FILE__,
- 'message' => 'Open SSL not available;'), TRUE, FALSE);
- $port = 143;
- }
-
- $ICL_PORT = $port;
- $IMAP_USE_INTERNAL_DATE = false;
-
- $this->conn = iil_Connect($host, $user, $pass, array('imap' => 'check'));
- $this->host = $host;
- $this->user = $user;
- $this->pass = $pass;
- $this->port = $port;
- $this->ssl = $use_ssl;
-
- // print trace mesages
- if ($this->conn && ($this->debug_level & 8))
- console($this->conn->message);
-
- // write error log
- else if (!$this->conn && $GLOBALS['iil_error'])
- {
- $this->error_code = $GLOBALS['iil_errornum'];
- raise_error(array('code' => 403,
- 'type' => 'imap',
- 'message' => $GLOBALS['iil_error']), TRUE, FALSE);
- }
-
- // get server properties
- if ($this->conn)
- {
- $this->_parse_capability($this->conn->capability);
-
- if (!empty($this->conn->delimiter))
- $this->delimiter = $this->conn->delimiter;
- if (!empty($this->conn->rootdir))
- {
- $this->set_rootdir($this->conn->rootdir);
- $this->root_ns = ereg_replace('[\.\/]$', '', $this->conn->rootdir);
- }
- }
-
- return $this->conn ? TRUE : FALSE;
- }
-
-
- /**
- * Close IMAP connection
- * Usually done on script shutdown
- *
- * @access public
- */
- function close()
- {
- if ($this->conn)
- iil_Close($this->conn);
- }
-
-
- /**
- * Close IMAP connection and re-connect
- * This is used to avoid some strange socket errors when talking to Courier IMAP
- *
- * @access public
- */
- function reconnect()
- {
- $this->close();
- $this->connect($this->host, $this->user, $this->pass, $this->port, $this->ssl);
- }
-
-
- /**
- * Set a root folder for the IMAP connection.
- *
- * Only folders within this root folder will be displayed
- * and all folder paths will be translated using this folder name
- *
- * @param string Root folder
- * @access public
- */
- function set_rootdir($root)
- {
- if (ereg('[\.\/]$', $root)) //(substr($root, -1, 1)==='/')
- $root = substr($root, 0, -1);
-
- $this->root_dir = $root;
-
- if (empty($this->delimiter))
- $this->get_hierarchy_delimiter();
- }
-
-
- /**
- * Set default message charset
- *
- * This will be used for message decoding if a charset specification is not available
- *
- * @param string Charset string
- * @access public
- */
- function set_charset($cs)
- {
- $this->default_charset = $ch;
- }
-
-
- /**
- * This list of folders will be listed above all other folders
- *
- * @param array Indexed list of folder names
- * @access public
- */
- function set_default_mailboxes($arr)
- {
- if (is_array($arr))
- {
- $this->default_folders = $arr;
- $this->default_folders_lc = array();
-
- // add inbox if not included
- if (!in_array_nocase('INBOX', $this->default_folders))
- array_unshift($this->default_folders, 'INBOX');
-
- // create a second list with lower cased names
- foreach ($this->default_folders as $mbox)
- $this->default_folders_lc[] = strtolower($mbox);
- }
- }
-
-
- /**
- * Set internal mailbox reference.
- *
- * All operations will be perfomed on this mailbox/folder
- *
- * @param string Mailbox/Folder name
- * @access public
- */
- function set_mailbox($new_mbox)
- {
- $mailbox = $this->_mod_mailbox($new_mbox);
-
- if ($this->mailbox == $mailbox)
- return;
-
- $this->mailbox = $mailbox;
-
- // clear messagecount cache for this mailbox
- $this->_clear_messagecount($mailbox);
- }
-
-
- /**
- * Set internal list page
- *
- * @param number Page number to list
- * @access public
- */
- function set_page($page)
- {
- $this->list_page = (int)$page;
- }
-
-
- /**
- * Set internal page size
- *
- * @param number Number of messages to display on one page
- * @access public
- */
- function set_pagesize($size)
- {
- $this->page_size = (int)$size;
- }
-
-
- /**
- * Save a set of message ids for future message listing methods
- *
- * @param array List of IMAP fields to search in
- * @param string Search string
- * @param array List of message ids or NULL if empty
- */
- function set_search_set($subject, $str=null, $msgs=null, $charset=null)
- {
- if (is_array($subject) && $str == null && $msgs == null)
- list($subject, $str, $msgs, $charset) = $subject;
- if ($msgs != null && !is_array($msgs))
- $msgs = split(',', $msgs);
-
- $this->search_subject = $subject;
- $this->search_string = $str;
- $this->search_set = (array)$msgs;
- $this->search_charset = $charset;
- }
-
-
- /**
- * Return the saved search set as hash array
- * @return array Search set
- */
- function get_search_set()
- {
- return array($this->search_subject, $this->search_string, $this->search_set, $this->search_charset);
- }
-
-
- /**
- * Returns the currently used mailbox name
- *
- * @return string Name of the mailbox/folder
- * @access public
- */
- function get_mailbox_name()
- {
- return $this->conn ? $this->_mod_mailbox($this->mailbox, 'out') : '';
- }
-
-
- /**
- * Returns the IMAP server's capability
- *
- * @param string Capability name
- * @return mixed Capability value or TRUE if supported, FALSE if not
- * @access public
- */
- function get_capability($cap)
- {
- $cap = strtoupper($cap);
- return $this->capabilities[$cap];
- }
-
-
- /**
- * Returns the delimiter that is used by the IMAP server for folder separation
- *
- * @return string Delimiter string
- * @access public
- */
- function get_hierarchy_delimiter()
- {
- if ($this->conn && empty($this->delimiter))
- $this->delimiter = iil_C_GetHierarchyDelimiter($this->conn);
-
- if (empty($this->delimiter))
- $this->delimiter = '/';
-
- return $this->delimiter;
- }
-
-
- /**
- * Public method for mailbox listing.
- *
- * Converts mailbox name with root dir first
- *
- * @param string Optional root folder
- * @param string Optional filter for mailbox listing
- * @return array List of mailboxes/folders
- * @access public
- */
- function list_mailboxes($root='', $filter='*')
- {
- $a_out = array();
- $a_mboxes = $this->_list_mailboxes($root, $filter);
-
- foreach ($a_mboxes as $mbox_row)
- {
- $name = $this->_mod_mailbox($mbox_row, 'out');
- if (strlen($name))
- $a_out[] = $name;
- }
-
- // INBOX should always be available
- if (!in_array_nocase('INBOX', $a_out))
- array_unshift($a_out, 'INBOX');
-
- // sort mailboxes
- $a_out = $this->_sort_mailbox_list($a_out);
-
- return $a_out;
- }
-
-
- /**
- * Private method for mailbox listing
- *
- * @return array List of mailboxes/folders
- * @see rcube_imap::list_mailboxes()
- * @access private
- */
- function _list_mailboxes($root='', $filter='*')
- {
- $a_defaults = $a_out = array();
-
- // get cached folder list
- $a_mboxes = $this->get_cache('mailboxes');
- if (is_array($a_mboxes))
- return $a_mboxes;
-
- // retrieve list of folders from IMAP server
- $a_folders = iil_C_ListSubscribed($this->conn, $this->_mod_mailbox($root), $filter);
-
- if (!is_array($a_folders) || !sizeof($a_folders))
- $a_folders = array();
-
- // write mailboxlist to cache
- $this->update_cache('mailboxes', $a_folders);
-
- return $a_folders;
- }
-
-
- /**
- * Get message count for a specific mailbox
- *
- * @param string Mailbox/folder name
- * @param string Mode for count [ALL|UNSEEN|RECENT]
- * @param boolean Force reading from server and update cache
- * @return int Number of messages
- * @access public
- */
- function messagecount($mbox_name='', $mode='ALL', $force=FALSE)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- return $this->_messagecount($mailbox, $mode, $force);
- }
-
-
- /**
- * Private method for getting nr of messages
- *
- * @access private
- * @see rcube_imap::messagecount()
- */
- function _messagecount($mailbox='', $mode='ALL', $force=FALSE)
- {
- $a_mailbox_cache = FALSE;
- $mode = strtoupper($mode);
-
- if (empty($mailbox))
- $mailbox = $this->mailbox;
-
- // count search set
- if ($this->search_string && $mailbox == $this->mailbox && $mode == 'ALL' && !$force)
- return count((array)$this->search_set);
-
- $a_mailbox_cache = $this->get_cache('messagecount');
-
- // return cached value
- if (!$force && is_array($a_mailbox_cache[$mailbox]) && isset($a_mailbox_cache[$mailbox][$mode]))
- return $a_mailbox_cache[$mailbox][$mode];
-
- // RECENT count is fetched abit different
- if ($mode == 'RECENT')
- $count = iil_C_CheckForRecent($this->conn, $mailbox);
-
- // use SEARCH for message counting
- else if ($this->skip_deleted)
- {
- $search_str = "ALL UNDELETED";
-
- // get message count and store in cache
- if ($mode == 'UNSEEN')
- $search_str .= " UNSEEN";
-
- // get message count using SEARCH
- // not very performant but more precise (using UNDELETED)
- $count = 0;
- $index = $this->_search_index($mailbox, $search_str);
- if (is_array($index))
- {
- $str = implode(",", $index);
- if (!empty($str))
- $count = count($index);
- }
- }
- else
- {
- if ($mode == 'UNSEEN')
- $count = iil_C_CountUnseen($this->conn, $mailbox);
- else
- $count = iil_C_CountMessages($this->conn, $mailbox);
- }
-
- if (!is_array($a_mailbox_cache[$mailbox]))
- $a_mailbox_cache[$mailbox] = array();
-
- $a_mailbox_cache[$mailbox][$mode] = (int)$count;
-
- // write back to cache
- $this->update_cache('messagecount', $a_mailbox_cache);
-
- return (int)$count;
- }
-
-
- /**
- * Public method for listing headers
- * convert mailbox name with root dir first
- *
- * @param string Mailbox/folder name
- * @param int Current page to list
- * @param string Header field to sort by
- * @param string Sort order [ASC|DESC]
- * @return array Indexed array with message header objects
- * @access public
- */
- function list_headers($mbox_name='', $page=NULL, $sort_field=NULL, $sort_order=NULL)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- return $this->_list_headers($mailbox, $page, $sort_field, $sort_order);
- }
-
-
- /**
- * Private method for listing message headers
- *
- * @access private
- * @see rcube_imap::list_headers
- */
- function _list_headers($mailbox='', $page=NULL, $sort_field=NULL, $sort_order=NULL, $recursive=FALSE)
- {
- if (!strlen($mailbox))
- return array();
-
- // use saved message set
- if ($this->search_string && $mailbox == $this->mailbox)
- return $this->_list_header_set($mailbox, $this->search_set, $page, $sort_field, $sort_order);
-
- $this->_set_sort_order($sort_field, $sort_order);
-
- $max = $this->_messagecount($mailbox);
- $start_msg = ($this->list_page-1) * $this->page_size;
-
- list($begin, $end) = $this->_get_message_range($max, $page);
-
- // mailbox is empty
- if ($begin >= $end)
- return array();
-
- $headers_sorted = FALSE;
- $cache_key = $mailbox.'.msg';
- $cache_status = $this->check_cache_status($mailbox, $cache_key);
-
- // cache is OK, we can get all messages from local cache
- if ($cache_status>0)
- {
- $a_msg_headers = $this->get_message_cache($cache_key, $start_msg, $start_msg+$this->page_size, $this->sort_field, $this->sort_order);
- $headers_sorted = TRUE;
- }
- // cache is dirty, sync it
- else if ($this->caching_enabled && $cache_status==-1 && !$recursive)
- {
- $this->sync_header_index($mailbox);
- return $this->_list_headers($mailbox, $page, $this->sort_field, $this->sort_order, TRUE);
- }
- else
- {
- // retrieve headers from IMAP
- if ($this->get_capability('sort') && ($msg_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, $this->skip_deleted ? 'UNDELETED' : '')))
- {
- $msgs = $msg_index[$begin];
- for ($i=$begin+1; $i < $end; $i++)
- $msgs = $msgs.','.$msg_index[$i];
- }
- else
- {
- $msgs = sprintf("%d:%d", $begin+1, $end);
-
- $i = 0;
- for ($msg_seqnum = $begin; $msg_seqnum <= $end; $msg_seqnum++)
- $msg_index[$i++] = $msg_seqnum;
- }
-
- // use this class for message sorting
- $sorter = new rcube_header_sorter();
- $sorter->set_sequence_numbers($msg_index);
-
- // fetch reuested headers from server
- $a_msg_headers = array();
- $deleted_count = $this->_fetch_headers($mailbox, $msgs, $a_msg_headers, $cache_key);
-
- // delete cached messages with a higher index than $max+1
- // Changed $max to $max+1 to fix this bug : #1484295
- $this->clear_message_cache($cache_key, $max + 1);
-
-
- // kick child process to sync cache
- // ...
-
- }
-
-
- // return empty array if no messages found
- if (!is_array($a_msg_headers) || empty($a_msg_headers))
- return array();
-
-
- // if not already sorted
- if (!$headers_sorted)
- {
- $sorter->sort_headers($a_msg_headers);
-
- if ($this->sort_order == 'DESC')
- $a_msg_headers = array_reverse($a_msg_headers);
- }
-
- return array_values($a_msg_headers);
- }
-
-
-
- /**
- * Public method for listing a specific set of headers
- * convert mailbox name with root dir first
- *
- * @param string Mailbox/folder name
- * @param array List of message ids to list
- * @param int Current page to list
- * @param string Header field to sort by
- * @param string Sort order [ASC|DESC]
- * @return array Indexed array with message header objects
- * @access public
- */
- function list_header_set($mbox_name='', $msgs, $page=NULL, $sort_field=NULL, $sort_order=NULL)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- return $this->_list_header_set($mailbox, $msgs, $page, $sort_field, $sort_order);
- }
-
-
- /**
- * Private method for listing a set of message headers
- *
- * @access private
- * @see rcube_imap::list_header_set()
- */
- function _list_header_set($mailbox, $msgs, $page=NULL, $sort_field=NULL, $sort_order=NULL)
- {
- // also accept a comma-separated list of message ids
- if (is_string($msgs))
- $msgs = split(',', $msgs);
-
- if (!strlen($mailbox) || empty($msgs))
- return array();
-
- $this->_set_sort_order($sort_field, $sort_order);
-
- $max = count($msgs);
- $start_msg = ($this->list_page-1) * $this->page_size;
-
- // fetch reuested headers from server
- $a_msg_headers = array();
- $this->_fetch_headers($mailbox, join(',', $msgs), $a_msg_headers, NULL);
-
- // return empty array if no messages found
- if (!is_array($a_msg_headers) || empty($a_msg_headers))
- return array();
-
- // if not already sorted
- $a_msg_headers = iil_SortHeaders($a_msg_headers, $this->sort_field, $this->sort_order);
-
- // only return the requested part of the set
- return array_slice(array_values($a_msg_headers), $start_msg, min($max-$start_msg, $this->page_size));
- }
-
-
- /**
- * Helper function to get first and last index of the requested set
- *
- * @param int message count
- * @param mixed page number to show, or string 'all'
- * @return array array with two values: first index, last index
- * @access private
- */
- function _get_message_range($max, $page)
- {
- $start_msg = ($this->list_page-1) * $this->page_size;
-
- if ($page=='all')
- {
- $begin = 0;
- $end = $max;
- }
- else if ($this->sort_order=='DESC')
- {
- $begin = $max - $this->page_size - $start_msg;
- $end = $max - $start_msg;
- }
- else
- {
- $begin = $start_msg;
- $end = $start_msg + $this->page_size;
- }
-
- if ($begin < 0) $begin = 0;
- if ($end < 0) $end = $max;
- if ($end > $max) $end = $max;
-
- return array($begin, $end);
- }
-
-
-
- /**
- * Fetches message headers
- * Used for loop
- *
- * @param string Mailbox name
- * @param string Message index to fetch
- * @param array Reference to message headers array
- * @param array Array with cache index
- * @return int Number of deleted messages
- * @access private
- */
- function _fetch_headers($mailbox, $msgs, &$a_msg_headers, $cache_key)
- {
- // cache is incomplete
- $cache_index = $this->get_message_cache_index($cache_key);
-
- // fetch reuested headers from server
- $a_header_index = iil_C_FetchHeaders($this->conn, $mailbox, $msgs);
- $deleted_count = 0;
-
- if (!empty($a_header_index))
- {
- foreach ($a_header_index as $i => $headers)
- {
- if ($headers->deleted && $this->skip_deleted)
- {
- // delete from cache
- if ($cache_index[$headers->id] && $cache_index[$headers->id] == $headers->uid)
- $this->remove_message_cache($cache_key, $headers->id);
-
- $deleted_count++;
- continue;
- }
-
- // add message to cache
- if ($this->caching_enabled && $cache_index[$headers->id] != $headers->uid)
- $this->add_message_cache($cache_key, $headers->id, $headers);
-
- $a_msg_headers[$headers->uid] = $headers;
- }
- }
-
- return $deleted_count;
- }
-
-
- /**
- * Return sorted array of message UIDs
- *
- * @param string Mailbox to get index from
- * @param string Sort column
- * @param string Sort order [ASC, DESC]
- * @return array Indexed array with message ids
- */
- function message_index($mbox_name='', $sort_field=NULL, $sort_order=NULL)
- {
- $this->_set_sort_order($sort_field, $sort_order);
-
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- $key = "{$mailbox}:{$this->sort_field}:{$this->sort_order}:{$this->search_string}.msgi";
-
- // we have a saved search result. get index from there
- if (!isset($this->cache[$key]) && $this->search_string && $mailbox == $this->mailbox)
- {
- $this->cache[$key] = $a_msg_headers = array();
- $this->_fetch_headers($mailbox, join(',', $this->search_set), $a_msg_headers, NULL);
-
- foreach (iil_SortHeaders($a_msg_headers, $this->sort_field, $this->sort_order) as $i => $msg)
- $this->cache[$key][] = $msg->uid;
- }
-
- // have stored it in RAM
- if (isset($this->cache[$key]))
- return $this->cache[$key];
-
- // check local cache
- $cache_key = $mailbox.'.msg';
- $cache_status = $this->check_cache_status($mailbox, $cache_key);
-
- // cache is OK
- if ($cache_status>0)
- {
- $a_index = $this->get_message_cache_index($cache_key, TRUE, $this->sort_field, $this->sort_order);
- return array_values($a_index);
- }
-
-
- // fetch complete message index
- $msg_count = $this->_messagecount($mailbox);
- if ($this->get_capability('sort') && ($a_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, '', TRUE)))
- {
- if ($this->sort_order == 'DESC')
- $a_index = array_reverse($a_index);
-
- $this->cache[$key] = $a_index;
-
- }
- else
- {
- $a_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:$msg_count", $this->sort_field);
- $a_uids = iil_C_FetchUIDs($this->conn, $mailbox);
-
- if ($this->sort_order=="ASC")
- asort($a_index);
- else if ($this->sort_order=="DESC")
- arsort($a_index);
-
- $i = 0;
- $this->cache[$key] = array();
- foreach ($a_index as $index => $value)
- $this->cache[$key][$i++] = $a_uids[$index];
- }
-
- return $this->cache[$key];
- }
-
-
- /**
- * @access private
- */
- function sync_header_index($mailbox)
- {
- $cache_key = $mailbox.'.msg';
- $cache_index = $this->get_message_cache_index($cache_key);
- $msg_count = $this->_messagecount($mailbox);
-
- // fetch complete message index
- $a_message_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:$msg_count", 'UID');
-
- foreach ($a_message_index as $id => $uid)
- {
- // message in cache at correct position
- if ($cache_index[$id] == $uid)
- {
- unset($cache_index[$id]);
- continue;
- }
-
- // message in cache but in wrong position
- if (in_array((string)$uid, $cache_index, TRUE))
- {
- unset($cache_index[$id]);
- }
-
- // other message at this position
- if (isset($cache_index[$id]))
- {
- $this->remove_message_cache($cache_key, $id);
- unset($cache_index[$id]);
- }
-
-
- // fetch complete headers and add to cache
- $headers = iil_C_FetchHeader($this->conn, $mailbox, $id);
- $this->add_message_cache($cache_key, $headers->id, $headers);
- }
-
- // those ids that are still in cache_index have been deleted
- if (!empty($cache_index))
- {
- foreach ($cache_index as $id => $uid)
- $this->remove_message_cache($cache_key, $id);
- }
- }
-
-
- /**
- * Invoke search request to IMAP server
- *
- * @param string mailbox name to search in
- * @param string search criteria (ALL, TO, FROM, SUBJECT, etc)
- * @param string search string
- * @return array search results as list of message ids
- * @access public
- */
- function search($mbox_name='', $criteria='ALL', $str=NULL, $charset=NULL)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
-
- // have an array of criterias => execute multiple searches
- if (is_array($criteria) && $str)
- {
- $results = array();
- foreach ($criteria as $crit)
- if ($search_result = $this->search($mbox_name, $crit, $str, $charset))
- $results = array_merge($results, $search_result);
-
- $results = array_unique($results);
- $this->set_search_set($criteria, $str, $results, $charset);
- return $results;
- }
- else if ($str && $criteria)
- {
- $search = (!empty($charset) ? "CHARSET $charset " : '') . sprintf("%s {%d}\r\n%s", $criteria, strlen($str), $str);
- $results = $this->_search_index($mailbox, $search);
-
- // try search with ISO charset (should be supported by server)
- if (empty($results) && !empty($charset) && $charset!='ISO-8859-1')
- $results = $this->search($mbox_name, $criteria, rcube_charset_convert($str, $charset, 'ISO-8859-1'), 'ISO-8859-1');
-
- $this->set_search_set($criteria, $str, $results, $charset);
- return $results;
- }
- else
- return $this->_search_index($mailbox, $criteria);
- }
-
-
- /**
- * Private search method
- *
- * @return array search results as list of message ids
- * @access private
- * @see rcube_imap::search()
- */
- function _search_index($mailbox, $criteria='ALL')
- {
- $a_messages = iil_C_Search($this->conn, $mailbox, $criteria);
- // clean message list (there might be some empty entries)
- if (is_array($a_messages))
- {
- foreach ($a_messages as $i => $val)
- if (empty($val))
- unset($a_messages[$i]);
- }
-
- return $a_messages;
- }
-
-
- /**
- * Refresh saved search set
- *
- * @return array Current search set
- */
- function refresh_search()
- {
- if (!empty($this->search_subject) && !empty($this->search_string))
- $this->search_set = $this->search('', $this->search_subject, $this->search_string, $this->search_charset);
-
- return $this->get_search_set();
- }
-
-
- /**
- * Check if the given message ID is part of the current search set
- *
- * @return boolean True on match or if no search request is stored
- */
- function in_searchset($msgid)
- {
- if (!empty($this->search_string))
- return in_array("$msgid", (array)$this->search_set, true);
- else
- return true;
- }
-
-
- /**
- * Return message headers object of a specific message
- *
- * @param int Message ID
- * @param string Mailbox to read from
- * @param boolean True if $id is the message UID
- * @return object Message headers representation
- */
- function get_headers($id, $mbox_name=NULL, $is_uid=TRUE)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- $uid = $is_uid ? $id : $this->_id2uid($id);
-
- // get cached headers
- if ($uid && ($headers = &$this->get_cached_message($mailbox.'.msg', $uid)))
- return $headers;
-
- $headers = iil_C_FetchHeader($this->conn, $mailbox, $id, $is_uid);
-
- // write headers cache
- if ($headers)
- {
- if ($headers->uid && $headers->id)
- $this->uid_id_map[$mailbox][$headers->uid] = $headers->id;
-
- $this->add_message_cache($mailbox.'.msg', $headers->id, $headers);
- }
-
- return $headers;
- }
-
-
- /**
- * Fetch body structure from the IMAP server and build
- * an object structure similar to the one generated by PEAR::Mail_mimeDecode
- *
- * @param int Message UID to fetch
- * @return object stdClass Message part tree or False on failure
- */
- function &get_structure($uid)
- {
- $cache_key = $this->mailbox.'.msg';
- $headers = &$this->get_cached_message($cache_key, $uid, true);
-
- // return cached message structure
- if (is_object($headers) && is_object($headers->structure))
- return $headers->structure;
-
- // resolve message sequence number
- if (!($msg_id = $this->_uid2id($uid)))
- return FALSE;
-
- $structure_str = iil_C_FetchStructureString($this->conn, $this->mailbox, $msg_id);
- $structure = iml_GetRawStructureArray($structure_str);
- $struct = false;
-
- // parse structure and add headers
- if (!empty($structure))
- {
- $this->_msg_id = $msg_id;
- $headers = $this->get_headers($uid);
-
- $struct = &$this->_structure_part($structure);
- $struct->headers = get_object_vars($headers);
-
- // don't trust given content-type
- if (empty($struct->parts) && !empty($struct->headers['ctype']))
- {
- $struct->mime_id = '1';
- $struct->mimetype = strtolower($struct->headers['ctype']);
- list($struct->ctype_primary, $struct->ctype_secondary) = explode('/', $struct->mimetype);
- }
-
- // write structure to cache
- if ($this->caching_enabled)
- $this->add_message_cache($cache_key, $msg_id, $headers, $struct);
- }
-
- return $struct;
- }
-
-
- /**
- * Build message part object
- *
- * @access private
- */
- function &_structure_part($part, $count=0, $parent='')
- {
- $struct = new rcube_message_part;
- $struct->mime_id = empty($parent) ? (string)$count : "$parent.$count";
-
- // multipart
- if (is_array($part[0]))
- {
- $struct->ctype_primary = 'multipart';
-
- // find first non-array entry
- for ($i=1; count($part); $i++)
- if (!is_array($part[$i]))
- {
- $struct->ctype_secondary = strtolower($part[$i]);
- break;
- }
-
- $struct->mimetype = 'multipart/'.$struct->ctype_secondary;
-
- $struct->parts = array();
- for ($i=0, $count=0; $i<count($part); $i++)
- if (is_array($part[$i]) && count($part[$i]) > 5)
- $struct->parts[] = $this->_structure_part($part[$i], ++$count, $struct->mime_id);
-
- return $struct;
- }
-
-
- // regular part
- $struct->ctype_primary = strtolower($part[0]);
- $struct->ctype_secondary = strtolower($part[1]);
- $struct->mimetype = $struct->ctype_primary.'/'.$struct->ctype_secondary;
-
- // read content type parameters
- if (is_array($part[2]))
- {
- $struct->ctype_parameters = array();
- for ($i=0; $i<count($part[2]); $i+=2)
- $struct->ctype_parameters[strtolower($part[2][$i])] = $part[2][$i+1];
-
- if (isset($struct->ctype_parameters['charset']))
- $struct->charset = $struct->ctype_parameters['charset'];
- }
-
- // read content encoding
- if (!empty($part[5]) && $part[5]!='NIL')
- {
- $struct->encoding = strtolower($part[5]);
- $struct->headers['content-transfer-encoding'] = $struct->encoding;
- }
-
- // get part size
- if (!empty($part[6]) && $part[6]!='NIL')
- $struct->size = intval($part[6]);
-
- // read part disposition
- $di = count($part) - 2;
- if ((is_array($part[$di]) && count($part[$di]) == 2 && is_array($part[$di][1])) ||
- (is_array($part[--$di]) && count($part[$di]) == 2))
- {
- $struct->disposition = strtolower($part[$di][0]);
-
- if (is_array($part[$di][1]))
- for ($n=0; $n<count($part[$di][1]); $n+=2)
- $struct->d_parameters[strtolower($part[$di][1][$n])] = $part[$di][1][$n+1];
- }
-
- // get child parts
- if (is_array($part[8]) && $di != 8)
- {
- $struct->parts = array();
- for ($i=0, $count=0; $i<count($part[8]); $i++)
- if (is_array($part[8][$i]) && count($part[8][$i]) > 5)
- $struct->parts[] = $this->_structure_part($part[8][$i], ++$count, $struct->mime_id);
- }
-
- // get part ID
- if (!empty($part[3]) && $part[3]!='NIL')
- {
- $struct->content_id = $part[3];
- $struct->headers['content-id'] = $part[3];
-
- if (empty($struct->disposition))
- $struct->disposition = 'inline';
- }
-
- // fetch message headers if message/rfc822
- if ($struct->ctype_primary=='message')
- {
- $headers = iil_C_FetchPartBody($this->conn, $this->mailbox, $this->_msg_id, $struct->mime_id.'.HEADER');
- $struct->headers = $this->_parse_headers($headers);
-
- if (is_array($part[8]) && empty($struct->parts))
- $struct->parts[] = $this->_structure_part($part[8], ++$count, $struct->mime_id);
- }
-
- // normalize filename property
- if ($filename_mime = $struct->d_parameters['filename'] ? $struct->d_parameters['filename'] : $struct->ctype_parameters['name'])
- $struct->filename = rcube_imap::decode_mime_string($filename_mime, $this->default_charset);
- else if ($filename_encoded = $struct->d_parameters['filename*'] ? $struct->d_parameters['filename*'] : $struct->ctype_parameters['name*'])
- {
- // decode filename according to RFC 2231, Section 4
- list($filename_charset,, $filename_urlencoded) = split('\'', $filename_encoded);
- $struct->filename = rcube_charset_convert(urldecode($filename_urlencoded), $filename_charset);
- }
- else if (!empty($struct->headers['content-description']))
- $struct->filename = rcube_imap::decode_mime_string($struct->headers['content-description'], $this->default_charset);
-
- return $struct;
- }
-
-
- /**
- * Return a flat array with references to all parts, indexed by part numbers
- *
- * @param object rcube_message_part Message body structure
- * @return Array with part number -> object pairs
- */
- function get_mime_numbers(&$structure)
- {
- $a_parts = array();
- $this->_get_part_numbers($structure, $a_parts);
- return $a_parts;
- }
-
-
- /**
- * Helper method for recursive calls
- *
- * @access private
- */
- function _get_part_numbers(&$part, &$a_parts)
- {
- if ($part->mime_id)
- $a_parts[$part->mime_id] = &$part;
-
- if (is_array($part->parts))
- for ($i=0; $i<count($part->parts); $i++)
- $this->_get_part_numbers($part->parts[$i], $a_parts);
- }
-
-
- /**
- * Fetch message body of a specific message from the server
- *
- * @param int Message UID
- * @param string Part number
- * @param object rcube_message_part Part object created by get_structure()
- * @param mixed True to print part, ressource to write part contents in
- * @return string Message/part body if not printed
- */
- function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL)
- {
- if (!($msg_id = $this->_uid2id($uid)))
- return FALSE;
-
- // get part encoding if not provided
- if (!is_object($o_part))
- {
- $structure_str = iil_C_FetchStructureString($this->conn, $this->mailbox, $msg_id);
- $structure = iml_GetRawStructureArray($structure_str);
- $part_type = iml_GetPartTypeCode($structure, $part);
- $o_part = new rcube_message_part;
- $o_part->ctype_primary = $part_type==0 ? 'text' : ($part_type==2 ? 'message' : 'other');
- $o_part->encoding = strtolower(iml_GetPartEncodingString($structure, $part));
- $o_part->charset = iml_GetPartCharset($structure, $part);
- }
-
- // TODO: Add caching for message parts
-
- if ($print)
- {
- $mode = $o_part->encoding == 'base64' ? 3 : ($o_part->encoding == 'quoted-printable' ? 1 : 2);
- $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, $mode);
-
- // we have to decode the part manually before printing
- if ($mode == 1)
- {
- echo $this->mime_decode($body, $o_part->encoding);
- $body = true;
- }
- }
- else
- {
- $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1);
-
- // decode part body
- if ($o_part->encoding)
- $body = $this->mime_decode($body, $o_part->encoding);
-
- // convert charset (if text or message part)
- if ($o_part->ctype_primary=='text' || $o_part->ctype_primary=='message')
- {
- // assume default if no charset specified
- if (empty($o_part->charset))
- $o_part->charset = $this->default_charset;
-
- $body = rcube_charset_convert($body, $o_part->charset);
- }
- }
-
- return $body;
- }
-
-
- /**
- * Fetch message body of a specific message from the server
- *
- * @param int Message UID
- * @return string Message/part body
- * @see rcube_imap::get_message_part()
- */
- function &get_body($uid, $part=1)
- {
- return $this->get_message_part($uid, $part);
- }
-
-
- /**
- * Returns the whole message source as string
- *
- * @param int Message UID
- * @return string Message source string
- */
- function &get_raw_body($uid)
- {
- if (!($msg_id = $this->_uid2id($uid)))
- return FALSE;
-
- $body = iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
- $body .= iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 1);
-
- return $body;
- }
-
-
- /**
- * Sends the whole message source to stdout
- *
- * @param int Message UID
- */
- function print_raw_body($uid)
- {
- if (!($msg_id = $this->_uid2id($uid)))
- return FALSE;
-
- print iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
- flush();
- iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 2);
- }
-
-
- /**
- * Set message flag to one or several messages
- *
- * @param mixed Message UIDs as array or as comma-separated string
- * @param string Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
- * @return boolean True on success, False on failure
- */
- function set_flag($uids, $flag)
- {
- $flag = strtoupper($flag);
- $msg_ids = array();
- if (!is_array($uids))
- $uids = explode(',',$uids);
-
- foreach ($uids as $uid) {
- $msg_ids[$uid] = $this->_uid2id($uid);
- }
-
- if ($flag=='UNDELETED')
- $result = iil_C_Undelete($this->conn, $this->mailbox, join(',', array_values($msg_ids)));
- else if ($flag=='UNSEEN')
- $result = iil_C_Unseen($this->conn, $this->mailbox, join(',', array_values($msg_ids)));
- else
- $result = iil_C_Flag($this->conn, $this->mailbox, join(',', array_values($msg_ids)), $flag);
-
- // reload message headers if cached
- $cache_key = $this->mailbox.'.msg';
- if ($this->caching_enabled)
- {
- foreach ($msg_ids as $uid => $id)
- {
- if ($cached_headers = $this->get_cached_message($cache_key, $uid))
- {
- $this->remove_message_cache($cache_key, $id);
- //$this->get_headers($uid);
- }
- }
-
- // close and re-open connection
- // this prevents connection problems with Courier
- $this->reconnect();
- }
-
- // set nr of messages that were flaged
- $count = count($msg_ids);
-
- // clear message count cache
- if ($result && $flag=='SEEN')
- $this->_set_messagecount($this->mailbox, 'UNSEEN', $count*(-1));
- else if ($result && $flag=='UNSEEN')
- $this->_set_messagecount($this->mailbox, 'UNSEEN', $count);
- else if ($result && $flag=='DELETED')
- $this->_set_messagecount($this->mailbox, 'ALL', $count*(-1));
-
- return $result;
- }
-
-
- /**
- * Append a mail message (source) to a specific mailbox
- *
- * @param string Target mailbox
- * @param string Message source
- * @return boolean True on success, False on error
- */
- function save_message($mbox_name, &$message)
- {
- $mbox_name = stripslashes($mbox_name);
- $mailbox = $this->_mod_mailbox($mbox_name);
-
- // make sure mailbox exists
- if (in_array($mailbox, $this->_list_mailboxes()))
- $saved = iil_C_Append($this->conn, $mailbox, $message);
-
- if ($saved)
- {
- // increase messagecount of the target mailbox
- $this->_set_messagecount($mailbox, 'ALL', 1);
- }
-
- return $saved;
- }
-
-
- /**
- * Move a message from one mailbox to another
- *
- * @param string List of UIDs to move, separated by comma
- * @param string Target mailbox
- * @param string Source mailbox
- * @return boolean True on success, False on error
- */
- function move_message($uids, $to_mbox, $from_mbox='')
- {
- $to_mbox = stripslashes($to_mbox);
- $from_mbox = stripslashes($from_mbox);
- $to_mbox = $this->_mod_mailbox($to_mbox);
- $from_mbox = $from_mbox ? $this->_mod_mailbox($from_mbox) : $this->mailbox;
-
- // make sure mailbox exists
- if (!in_array($to_mbox, $this->_list_mailboxes()))
- {
- if (in_array($to_mbox, $this->default_folders))
- $this->create_mailbox($to_mbox, TRUE);
- else
- return FALSE;
- }
-
- // convert the list of uids to array
- $a_uids = is_string($uids) ? explode(',', $uids) : (is_array($uids) ? $uids : NULL);
-
- // exit if no message uids are specified
- if (!is_array($a_uids))
- return false;
-
- // convert uids to message ids
- $a_mids = array();
- foreach ($a_uids as $uid)
- $a_mids[] = $this->_uid2id($uid, $from_mbox);
-
- $iil_move = iil_C_Move($this->conn, join(',', $a_mids), $from_mbox, $to_mbox);
- $moved = !($iil_move === false || $iil_move < 0);
-
- // send expunge command in order to have the moved message
- // really deleted from the source mailbox
- if ($moved)
- {
- $this->_expunge($from_mbox, FALSE);
- $this->_clear_messagecount($from_mbox);
- $this->_clear_messagecount($to_mbox);
- }
-
- // remove message ids from search set
- if ($moved && $this->search_set && $from_mbox == $this->mailbox)
- $this->search_set = array_diff($this->search_set, $a_mids);
-
- // update cached message headers
- $cache_key = $from_mbox.'.msg';
- if ($moved && ($a_cache_index = $this->get_message_cache_index($cache_key)))
- {
- $start_index = 100000;
- foreach ($a_uids as $uid)
- {
- if (($index = array_search($uid, $a_cache_index)) !== FALSE)
- $start_index = min($index, $start_index);
- }
-
- // clear cache from the lowest index on
- $this->clear_message_cache($cache_key, $start_index);
- }
-
- return $moved;
- }
-
-
- /**
- * Mark messages as deleted and expunge mailbox
- *
- * @param string List of UIDs to move, separated by comma
- * @param string Source mailbox
- * @return boolean True on success, False on error
- */
- function delete_message($uids, $mbox_name='')
- {
- $mbox_name = stripslashes($mbox_name);
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
-
- // convert the list of uids to array
- $a_uids = is_string($uids) ? explode(',', $uids) : (is_array($uids) ? $uids : NULL);
-
- // exit if no message uids are specified
- if (!is_array($a_uids))
- return false;
-
-
- // convert uids to message ids
- $a_mids = array();
- foreach ($a_uids as $uid)
- $a_mids[] = $this->_uid2id($uid, $mailbox);
-
- $deleted = iil_C_Delete($this->conn, $mailbox, join(',', $a_mids));
-
- // send expunge command in order to have the deleted message
- // really deleted from the mailbox
- if ($deleted)
- {
- $this->_expunge($mailbox, FALSE);
- $this->_clear_messagecount($mailbox);
- }
-
- // remove message ids from search set
- if ($moved && $this->search_set && $mailbox == $this->mailbox)
- $this->search_set = array_diff($this->search_set, $a_mids);
-
- // remove deleted messages from cache
- $cache_key = $mailbox.'.msg';
- if ($deleted && ($a_cache_index = $this->get_message_cache_index($cache_key)))
- {
- $start_index = 100000;
- foreach ($a_uids as $uid)
- {
- if (($index = array_search($uid, $a_cache_index)) !== FALSE)
- $start_index = min($index, $start_index);
- }
-
- // clear cache from the lowest index on
- $this->clear_message_cache($cache_key, $start_index);
- }
-
- return $deleted;
- }
-
-
- /**
- * Clear all messages in a specific mailbox
- *
- * @param string Mailbox name
- * @return int Above 0 on success
- */
- function clear_mailbox($mbox_name=NULL)
- {
- $mbox_name = stripslashes($mbox_name);
- $mailbox = !empty($mbox_name) ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- $msg_count = $this->_messagecount($mailbox, 'ALL');
-
- if ($msg_count>0)
- {
- $cleared = iil_C_ClearFolder($this->conn, $mailbox);
-
- // make sure the message count cache is cleared as well
- if ($cleared)
- {
- $this->clear_message_cache($mailbox.'.msg');
- $a_mailbox_cache = $this->get_cache('messagecount');
- unset($a_mailbox_cache[$mailbox]);
- $this->update_cache('messagecount', $a_mailbox_cache);
- }
-
- return $cleared;
- }
- else
- return 0;
- }
-
-
- /**
- * Send IMAP expunge command and clear cache
- *
- * @param string Mailbox name
- * @param boolean False if cache should not be cleared
- * @return boolean True on success
- */
- function expunge($mbox_name='', $clear_cache=TRUE)
- {
- $mbox_name = stripslashes($mbox_name);
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- return $this->_expunge($mailbox, $clear_cache);
- }
-
-
- /**
- * Send IMAP expunge command and clear cache
- *
- * @see rcube_imap::expunge()
- * @access private
- */
- function _expunge($mailbox, $clear_cache=TRUE)
- {
- $result = iil_C_Expunge($this->conn, $mailbox);
-
- if ($result>=0 && $clear_cache)
- {
- $this->clear_message_cache($mailbox.'.msg');
- $this->_clear_messagecount($mailbox);
- }
-
- return $result;
- }
-
-
- /* --------------------------------
- * folder managment
- * --------------------------------*/
-
-
- /**
- * Get a list of all folders available on the IMAP server
- *
- * @param string IMAP root dir
- * @return array Indexed array with folder names
- */
- function list_unsubscribed($root='')
- {
- static $sa_unsubscribed;
-
- if (is_array($sa_unsubscribed))
- return $sa_unsubscribed;
-
- // retrieve list of folders from IMAP server
- $a_mboxes = iil_C_ListMailboxes($this->conn, $this->_mod_mailbox($root), '*');
-
- // modify names with root dir
- foreach ($a_mboxes as $mbox_name)
- {
- $name = $this->_mod_mailbox($mbox_name, 'out');
- if (strlen($name))
- $a_folders[] = $name;
- }
-
- // filter folders and sort them
- $sa_unsubscribed = $this->_sort_mailbox_list($a_folders);
- return $sa_unsubscribed;
- }
-
-
- /**
- * Get mailbox quota information
- * added by Nuny
- *
- * @return mixed Quota info or False if not supported
- */
- function get_quota()
- {
- if ($this->get_capability('QUOTA'))
- return iil_C_GetQuota($this->conn);
-
- return FALSE;
- }
-
-
- /**
- * Subscribe to a specific mailbox(es)
- *
- * @param array Mailbox name(s)
- * @return boolean True on success
- */
- function subscribe($a_mboxes)
- {
- if (!is_array($a_mboxes))
- $a_mboxes = array($a_mboxes);
-
- // let this common function do the main work
- return $this->_change_subscription($a_mboxes, 'subscribe');
- }
-
-
- /**
- * Unsubscribe mailboxes
- *
- * @param array Mailbox name(s)
- * @return boolean True on success
- */
- function unsubscribe($a_mboxes)
- {
- if (!is_array($a_mboxes))
- $a_mboxes = array($a_mboxes);
-
- // let this common function do the main work
- return $this->_change_subscription($a_mboxes, 'unsubscribe');
- }
-
-
- /**
- * Create a new mailbox on the server and register it in local cache
- *
- * @param string New mailbox name (as utf-7 string)
- * @param boolean True if the new mailbox should be subscribed
- * @param string Name of the created mailbox, false on error
- */
- function create_mailbox($name, $subscribe=FALSE)
- {
- $result = FALSE;
-
- // replace backslashes
- $name = preg_replace('/[\\\]+/', '-', $name);
-
- // reduce mailbox name to 100 chars
- $name = substr($name, 0, 100);
-
- $abs_name = $this->_mod_mailbox($name);
- $a_mailbox_cache = $this->get_cache('mailboxes');
-
- if (strlen($abs_name) && (!is_array($a_mailbox_cache) || !in_array($abs_name, $a_mailbox_cache)))
- $result = iil_C_CreateFolder($this->conn, $abs_name);
-
- // try to subscribe it
- if ($result && $subscribe)
- $this->subscribe($name);
-
- return $result ? $name : FALSE;
- }
-
-
- /**
- * Set a new name to an existing mailbox
- *
- * @param string Mailbox to rename (as utf-7 string)
- * @param string New mailbox name (as utf-7 string)
- * @return string Name of the renames mailbox, False on error
- */
- function rename_mailbox($mbox_name, $new_name)
- {
- $result = FALSE;
-
- // replace backslashes
- $name = preg_replace('/[\\\]+/', '-', $new_name);
-
- // encode mailbox name and reduce it to 100 chars
- $name = substr($new_name, 0, 100);
-
- // make absolute path
- $mailbox = $this->_mod_mailbox($mbox_name);
- $abs_name = $this->_mod_mailbox($name);
-
- // check if mailbox is subscribed
- $a_subscribed = $this->_list_mailboxes();
- $subscribed = in_array($mailbox, $a_subscribed);
-
- // unsubscribe folder
- if ($subscribed)
- iil_C_UnSubscribe($this->conn, $mailbox);
-
- if (strlen($abs_name))
- $result = iil_C_RenameFolder($this->conn, $mailbox, $abs_name);
-
- if ($result)
- {
- $delm = $this->get_hierarchy_delimiter();
-
- // check if mailbox children are subscribed
- foreach ($a_subscribed as $c_subscribed)
- if (preg_match('/^'.preg_quote($mailbox.$delm, '/').'/', $c_subscribed))
- {
- iil_C_UnSubscribe($this->conn, $c_subscribed);
- iil_C_Subscribe($this->conn, preg_replace('/^'.preg_quote($mailbox, '/').'/', $abs_name, $c_subscribed));
- }
-
- // clear cache
- $this->clear_message_cache($mailbox.'.msg');
- $this->clear_cache('mailboxes');
- }
-
- // try to subscribe it
- if ($result && $subscribed)
- iil_C_Subscribe($this->conn, $abs_name);
-
- return $result ? $name : FALSE;
- }
-
-
- /**
- * Remove mailboxes from server
- *
- * @param string Mailbox name
- * @return boolean True on success
- */
- function delete_mailbox($mbox_name)
- {
- $deleted = FALSE;
-
- if (is_array($mbox_name))
- $a_mboxes = $mbox_name;
- else if (is_string($mbox_name) && strlen($mbox_name))
- $a_mboxes = explode(',', $mbox_name);
-
- $all_mboxes = iil_C_ListMailboxes($this->conn, $this->_mod_mailbox($root), '*');
-
- if (is_array($a_mboxes))
- foreach ($a_mboxes as $mbox_name)
- {
- $mailbox = $this->_mod_mailbox($mbox_name);
-
- // unsubscribe mailbox before deleting
- iil_C_UnSubscribe($this->conn, $mailbox);
-
- // send delete command to server
- $result = iil_C_DeleteFolder($this->conn, $mailbox);
- if ($result>=0)
- $deleted = TRUE;
-
- foreach ($all_mboxes as $c_mbox)
- {
- $regex = preg_quote($mailbox . $this->delimiter, '/');
- $regex = '/^' . $regex . '/';
- if (preg_match($regex, $c_mbox))
- {
- iil_C_UnSubscribe($this->conn, $c_mbox);
- $result = iil_C_DeleteFolder($this->conn, $c_mbox);
- if ($result>=0)
- $deleted = TRUE;
- }
- }
- }
-
- // clear mailboxlist cache
- if ($deleted)
- {
- $this->clear_message_cache($mailbox.'.msg');
- $this->clear_cache('mailboxes');
- }
-
- return $deleted;
- }
-
-
- /**
- * Create all folders specified as default
- */
- function create_default_folders()
- {
- $a_folders = iil_C_ListMailboxes($this->conn, $this->_mod_mailbox(''), '*');
- $a_subscribed = iil_C_ListSubscribed($this->conn, $this->_mod_mailbox(''), '*');
-
- // create default folders if they do not exist
- foreach ($this->default_folders as $folder)
- {
- $abs_name = $this->_mod_mailbox($folder);
- if (!in_array_nocase($abs_name, $a_folders))
- $this->create_mailbox($folder, TRUE);
- else if (!in_array_nocase($abs_name, $a_subscribed))
- $this->subscribe($folder);
- }
- }
-
-
-
- /* --------------------------------
- * internal caching methods
- * --------------------------------*/
-
- /**
- * @access private
- */
- function set_caching($set)
- {
- if ($set && is_object($this->db))
- $this->caching_enabled = TRUE;
- else
- $this->caching_enabled = FALSE;
- }
-
- /**
- * @access private
- */
- function get_cache($key)
- {
- // read cache
- if (!isset($this->cache[$key]) && $this->caching_enabled)
- {
- $cache_data = $this->_read_cache_record('IMAP.'.$key);
- $this->cache[$key] = strlen($cache_data) ? unserialize($cache_data) : FALSE;
- }
-
- return $this->cache[$key];
- }
-
- /**
- * @access private
- */
- function update_cache($key, $data)
- {
- $this->cache[$key] = $data;
- $this->cache_changed = TRUE;
- $this->cache_changes[$key] = TRUE;
- }
-
- /**
- * @access private
- */
- function write_cache()
- {
- if ($this->caching_enabled && $this->cache_changed)
- {
- foreach ($this->cache as $key => $data)
- {
- if ($this->cache_changes[$key])
- $this->_write_cache_record('IMAP.'.$key, serialize($data));
- }
- }
- }
-
- /**
- * @access private
- */
- function clear_cache($key=NULL)
- {
- if ($key===NULL)
- {
- foreach ($this->cache as $key => $data)
- $this->_clear_cache_record('IMAP.'.$key);
-
- $this->cache = array();
- $this->cache_changed = FALSE;
- $this->cache_changes = array();
- }
- else
- {
- $this->_clear_cache_record('IMAP.'.$key);
- $this->cache_changes[$key] = FALSE;
- unset($this->cache[$key]);
- }
- }
-
- /**
- * @access private
- */
- function _read_cache_record($key)
- {
- $cache_data = FALSE;
-
- if ($this->db)
- {
- // get cached data from DB
- $sql_result = $this->db->query(
- "SELECT cache_id, data
- FROM ".get_table_name('cache')."
- WHERE user_id=?
- AND cache_key=?",
- $_SESSION['user_id'],
- $key);
-
- if ($sql_arr = $this->db->fetch_assoc($sql_result))
- {
- $cache_data = $sql_arr['data'];
- $this->cache_keys[$key] = $sql_arr['cache_id'];
- }
- }
-
- return $cache_data;
- }
-
- /**
- * @access private
- */
- function _write_cache_record($key, $data)
- {
- if (!$this->db)
- return FALSE;
-
- // check if we already have a cache entry for this key
- if (!isset($this->cache_keys[$key]))
- {
- $sql_result = $this->db->query(
- "SELECT cache_id
- FROM ".get_table_name('cache')."
- WHERE user_id=?
- AND cache_key=?",
- $_SESSION['user_id'],
- $key);
-
- if ($sql_arr = $this->db->fetch_assoc($sql_result))
- $this->cache_keys[$key] = $sql_arr['cache_id'];
- else
- $this->cache_keys[$key] = FALSE;
- }
-
- // update existing cache record
- if ($this->cache_keys[$key])
- {
- $this->db->query(
- "UPDATE ".get_table_name('cache')."
- SET created=".$this->db->now().",
- data=?
- WHERE user_id=?
- AND cache_key=?",
- $data,
- $_SESSION['user_id'],
- $key);
- }
- // add new cache record
- else
- {
- $this->db->query(
- "INSERT INTO ".get_table_name('cache')."
- (created, user_id, cache_key, data)
- VALUES (".$this->db->now().", ?, ?, ?)",
- $_SESSION['user_id'],
- $key,
- $data);
- }
- }
-
- /**
- * @access private
- */
- function _clear_cache_record($key)
- {
- $this->db->query(
- "DELETE FROM ".get_table_name('cache')."
- WHERE user_id=?
- AND cache_key=?",
- $_SESSION['user_id'],
- $key);
- }
-
-
-
- /* --------------------------------
- * message caching methods
- * --------------------------------*/
-
-
- /**
- * Checks if the cache is up-to-date
- *
- * @param string Mailbox name
- * @param string Internal cache key
- * @return int -3 = off, -2 = incomplete, -1 = dirty
- */
- function check_cache_status($mailbox, $cache_key)
- {
- if (!$this->caching_enabled)
- return -3;
-
- $cache_index = $this->get_message_cache_index($cache_key, TRUE);
- $msg_count = $this->_messagecount($mailbox);
- $cache_count = count($cache_index);
-
- // console("Cache check: $msg_count !== ".count($cache_index));
-
- if ($cache_count==$msg_count)
- {
- // get highest index
- $header = iil_C_FetchHeader($this->conn, $mailbox, "$msg_count");
- $cache_uid = array_pop($cache_index);
-
- // uids of highest message matches -> cache seems OK
- if ($cache_uid == $header->uid)
- return 1;
-
- // cache is dirty
- return -1;
- }
- // if cache count differs less than 10% report as dirty
- else if (abs($msg_count - $cache_count) < $msg_count/10)
- return -1;
- else
- return -2;
- }
-
- /**
- * @access private
- */
- function get_message_cache($key, $from, $to, $sort_field, $sort_order)
- {
- $cache_key = "$key:$from:$to:$sort_field:$sort_order";
- $db_header_fields = array('idx', 'uid', 'subject', 'from', 'to', 'cc', 'date', 'size');
-
- if (!in_array($sort_field, $db_header_fields))
- $sort_field = 'idx';
-
- if ($this->caching_enabled && !isset($this->cache[$cache_key]))
- {
- $this->cache[$cache_key] = array();
- $sql_result = $this->db->limitquery(
- "SELECT idx, uid, headers
- FROM ".get_table_name('messages')."
- WHERE user_id=?
- AND cache_key=?
- ORDER BY ".$this->db->quoteIdentifier($sort_field)." ".
- strtoupper($sort_order),
- $from,
- $to-$from,
- $_SESSION['user_id'],
- $key);
-
- while ($sql_arr = $this->db->fetch_assoc($sql_result))
- {
- $uid = $sql_arr['uid'];
- $this->cache[$cache_key][$uid] = unserialize($sql_arr['headers']);
-
- // featch headers if unserialize failed
- if (empty($this->cache[$cache_key][$uid]))
- $this->cache[$cache_key][$uid] = iil_C_FetchHeader($this->conn, preg_replace('/.msg$/', '', $key), $uid, true);
- }
- }
-
- return $this->cache[$cache_key];
- }
-
- /**
- * @access private
- */
- function &get_cached_message($key, $uid, $struct=false)
- {
- $internal_key = '__single_msg';
-
- if ($this->caching_enabled && (!isset($this->cache[$internal_key][$uid]) ||
- ($struct && empty($this->cache[$internal_key][$uid]->structure))))
- {
- $sql_select = "idx, uid, headers" . ($struct ? ", structure" : '');
- $sql_result = $this->db->query(
- "SELECT $sql_select
- FROM ".get_table_name('messages')."
- WHERE user_id=?
- AND cache_key=?
- AND uid=?",
- $_SESSION['user_id'],
- $key,
- $uid);
-
- if ($sql_arr = $this->db->fetch_assoc($sql_result))
- {
- $this->cache[$internal_key][$uid] = unserialize($sql_arr['headers']);
- if (is_object($this->cache[$internal_key][$uid]) && !empty($sql_arr['structure']))
- $this->cache[$internal_key][$uid]->structure = unserialize($sql_arr['structure']);
- }
- }
-
- return $this->cache[$internal_key][$uid];
- }
-
- /**
- * @access private
- */
- function get_message_cache_index($key, $force=FALSE, $sort_col='idx', $sort_order='ASC')
- {
- static $sa_message_index = array();
-
- // empty key -> empty array
- if (!$this->caching_enabled || empty($key))
- return array();
-
- if (!empty($sa_message_index[$key]) && !$force)
- return $sa_message_index[$key];
-
- $sa_message_index[$key] = array();
- $sql_result = $this->db->query(
- "SELECT idx, uid
- FROM ".get_table_name('messages')."
- WHERE user_id=?
- AND cache_key=?
- ORDER BY ".$this->db->quote_identifier($sort_col)." ".$sort_order,
- $_SESSION['user_id'],
- $key);
-
- while ($sql_arr = $this->db->fetch_assoc($sql_result))
- $sa_message_index[$key][$sql_arr['idx']] = $sql_arr['uid'];
-
- return $sa_message_index[$key];
- }
-
- /**
- * @access private
- */
- function add_message_cache($key, $index, $headers, $struct=null)
- {
- if (empty($key) || !is_object($headers) || empty($headers->uid))
- return;
-
- // add to internal (fast) cache
- $this->cache['__single_msg'][$headers->uid] = $headers;
- $this->cache['__single_msg'][$headers->uid]->structure = $struct;
-
- // no further caching
- if (!$this->caching_enabled)
- return;
-
- // check for an existing record (probly headers are cached but structure not)
- $sql_result = $this->db->query(
- "SELECT message_id
- FROM ".get_table_name('messages')."
- WHERE user_id=?
- AND cache_key=?
- AND uid=?
- AND del<>1",
- $_SESSION['user_id'],
- $key,
- $headers->uid);
-
- // update cache record
- if ($sql_arr = $this->db->fetch_assoc($sql_result))
- {
- $this->db->query(
- "UPDATE ".get_table_name('messages')."
- SET idx=?, headers=?, structure=?
- WHERE message_id=?",
- $index,
- serialize($headers),
- is_object($struct) ? serialize($struct) : NULL,
- $sql_arr['message_id']
- );
- }
- else // insert new record
- {
- $this->db->query(
- "INSERT INTO ".get_table_name('messages')."
- (user_id, del, cache_key, created, idx, uid, subject, ".$this->db->quoteIdentifier('from').", ".$this->db->quoteIdentifier('to').", cc, date, size, headers, structure)
- VALUES (?, 0, ?, ".$this->db->now().", ?, ?, ?, ?, ?, ?, ".$this->db->fromunixtime($headers->timestamp).", ?, ?, ?)",
- $_SESSION['user_id'],
- $key,
- $index,
- $headers->uid,
- (string)substr($this->decode_header($headers->subject, TRUE), 0, 128),
- (string)substr($this->decode_header($headers->from, TRUE), 0, 128),
- (string)substr($this->decode_header($headers->to, TRUE), 0, 128),
- (string)substr($this->decode_header($headers->cc, TRUE), 0, 128),
- (int)$headers->size,
- serialize($headers),
- is_object($struct) ? serialize($struct) : NULL
- );
- }
- }
-
- /**
- * @access private
- */
- function remove_message_cache($key, $index)
- {
- if (!$this->caching_enabled)
- return;
-
- $this->db->query(
- "DELETE FROM ".get_table_name('messages')."
- WHERE user_id=?
- AND cache_key=?
- AND idx=?",
- $_SESSION['user_id'],
- $key,
- $index);
- }
-
- /**
- * @access private
- */
- function clear_message_cache($key, $start_index=1)
- {
- if (!$this->caching_enabled)
- return;
-
- $this->db->query(
- "DELETE FROM ".get_table_name('messages')."
- WHERE user_id=?
- AND cache_key=?
- AND idx>=?",
- $_SESSION['user_id'],
- $key,
- $start_index);
- }
-
-
-
-
- /* --------------------------------
- * encoding/decoding methods
- * --------------------------------*/
-
- /**
- * Split an address list into a structured array list
- *
- * @param string Input string
- * @param int List only this number of addresses
- * @param boolean Decode address strings
- * @return array Indexed list of addresses
- */
- function decode_address_list($input, $max=null, $decode=true)
- {
- $a = $this->_parse_address_list($input, $decode);
- $out = array();
- // Special chars as defined by RFC 822 need to in quoted string (or escaped).
- $special_chars = '[\(\)\<\>\\\.\[\]@,;:"]';
-
- if (!is_array($a))
- return $out;
-
- $c = count($a);
- $j = 0;
-
- foreach ($a as $val)
- {
- $j++;
- $address = $val['address'];
- $name = preg_replace(array('/^[\'"]/', '/[\'"]$/'), '', trim($val['name']));
- if ($name && $address && $name != $address)
- $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address);
- else if ($address)
- $string = $address;
- else if ($name)
- $string = $name;
-
- $out[$j] = array('name' => $name,
- 'mailto' => $address,
- 'string' => $string);
-
- if ($max && $j==$max)
- break;
- }
-
- return $out;
- }
-
-
- /**
- * Decode a message header value
- *
- * @param string Header value
- * @param boolean Remove quotes if necessary
- * @return string Decoded string
- */
- function decode_header($input, $remove_quotes=FALSE)
- {
- $str = rcube_imap::decode_mime_string((string)$input, $this->default_charset);
- if ($str{0}=='"' && $remove_quotes)
- $str = str_replace('"', '', $str);
-
- return $str;
- }
-
-
- /**
- * Decode a mime-encoded string to internal charset
- *
- * @param string Header value
- * @param string Fallback charset if none specified
- * @return string Decoded string
- * @static
- */
- function decode_mime_string($input, $fallback=null)
- {
- $out = '';
-
- $pos = strpos($input, '=?');
- if ($pos !== false)
- {
- // rfc: all line breaks or other characters not found in the Base64 Alphabet must be ignored by decoding software
- // delete all blanks between MIME-lines, differently we can receive unnecessary blanks and broken utf-8 symbols
- $input = preg_replace("/\?=\s+=\?/", '?==?', $input);
-
- $out = substr($input, 0, $pos);
-
- $end_cs_pos = strpos($input, "?", $pos+2);
- $end_en_pos = strpos($input, "?", $end_cs_pos+1);
- $end_pos = strpos($input, "?=", $end_en_pos+1);
-
- $encstr = substr($input, $pos+2, ($end_pos-$pos-2));
- $rest = substr($input, $end_pos+2);
-
- $out .= rcube_imap::_decode_mime_string_part($encstr);
- $out .= rcube_imap::decode_mime_string($rest, $fallback);
-
- return $out;
- }
-
- // no encoding information, use fallback
- return rcube_charset_convert($input, !empty($fallback) ? $fallback : 'ISO-8859-1');
- }
-
-
- /**
- * Decode a part of a mime-encoded string
- *
- * @access private
- */
- function _decode_mime_string_part($str)
- {
- $a = explode('?', $str);
- $count = count($a);
-
- // should be in format "charset?encoding?base64_string"
- if ($count >= 3)
- {
- for ($i=2; $i<$count; $i++)
- $rest.=$a[$i];
-
- if (($a[1]=="B")||($a[1]=="b"))
- $rest = base64_decode($rest);
- else if (($a[1]=="Q")||($a[1]=="q"))
- {
- $rest = str_replace("_", " ", $rest);
- $rest = quoted_printable_decode($rest);
- }
-
- return rcube_charset_convert($rest, $a[0]);
- }
- else
- return $str; // we dont' know what to do with this
- }
-
-
- /**
- * Decode a mime part
- *
- * @param string Input string
- * @param string Part encoding
- * @return string Decoded string
- * @access private
- */
- function mime_decode($input, $encoding='7bit')
- {
- switch (strtolower($encoding))
- {
- case '7bit':
- return $input;
- break;
-
- case 'quoted-printable':
- return quoted_printable_decode($input);
- break;
-
- case 'base64':
- return base64_decode($input);
- break;
-
- default:
- return $input;
- }
- }
-
-
- /**
- * Convert body charset to UTF-8 according to the ctype_parameters
- *
- * @param string Part body to decode
- * @param string Charset to convert from
- * @return string Content converted to internal charset
- */
- function charset_decode($body, $ctype_param)
- {
- if (is_array($ctype_param) && !empty($ctype_param['charset']))
- return rcube_charset_convert($body, $ctype_param['charset']);
-
- // defaults to what is specified in the class header
- return rcube_charset_convert($body, $this->default_charset);
- }
-
-
- /**
- * Translate UID to message ID
- *
- * @param int Message UID
- * @param string Mailbox name
- * @return int Message ID
- */
- function get_id($uid, $mbox_name=NULL)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- return $this->_uid2id($uid, $mailbox);
- }
-
-
- /**
- * Translate message number to UID
- *
- * @param int Message ID
- * @param string Mailbox name
- * @return int Message UID
- */
- function get_uid($id,$mbox_name=NULL)
- {
- $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
- return $this->_id2uid($id, $mailbox);
- }
-
-
-
- /* --------------------------------
- * private methods
- * --------------------------------*/
-
-
- /**
- * @access private
- */
- function _mod_mailbox($mbox_name, $mode='in')
- {
- if ((!empty($this->root_ns) && $this->root_ns == $mbox_name) || $mbox_name == 'INBOX')
- return $mbox_name;
-
- if (!empty($this->root_dir) && $mode=='in')
- $mbox_name = $this->root_dir.$this->delimiter.$mbox_name;
- else if (strlen($this->root_dir) && $mode=='out')
- $mbox_name = substr($mbox_name, strlen($this->root_dir)+1);
-
- return $mbox_name;
- }
-
- /**
- * Validate the given input and save to local properties
- * @access private
- */
- function _set_sort_order($sort_field, $sort_order)
- {
- if ($sort_field != null)
- $this->sort_field = asciiwords($sort_field);
- if ($sort_order != null)
- $this->sort_order = strtoupper($sort_order) == 'DESC' ? 'DESC' : 'ASC';
- }
-
- /**
- * Sort mailboxes first by default folders and then in alphabethical order
- * @access private
- */
- function _sort_mailbox_list($a_folders)
- {
- $a_out = $a_defaults = array();
-
- // find default folders and skip folders starting with '.'
- foreach($a_folders as $i => $folder)
- {
- if ($folder{0}=='.')
- continue;
-
- if (($p = array_search(strtolower($folder), $this->default_folders_lc)) !== false && !$a_defaults[$p])
- $a_defaults[$p] = $folder;
- else
- $a_out[] = $folder;
- }
-
- natcasesort($a_out);
- ksort($a_defaults);
-
- return array_merge($a_defaults, $a_out);
- }
-
- /**
- * @access private
- */
- function _uid2id($uid, $mbox_name=NULL)
- {
- if (!$mbox_name)
- $mbox_name = $this->mailbox;
-
- if (!isset($this->uid_id_map[$mbox_name][$uid]))
- $this->uid_id_map[$mbox_name][$uid] = iil_C_UID2ID($this->conn, $mbox_name, $uid);
-
- return $this->uid_id_map[$mbox_name][$uid];
- }
-
- /**
- * @access private
- */
- function _id2uid($id, $mbox_name=NULL)
- {
- if (!$mbox_name)
- $mbox_name = $this->mailbox;
-
- $index = array_flip((array)$this->uid_id_map[$mbox_name]);
- if (isset($index[$id]))
- $uid = $index[$id];
- else
- {
- $uid = iil_C_ID2UID($this->conn, $mbox_name, $id);
- $this->uid_id_map[$mbox_name][$uid] = $id;
- }
-
- return $uid;
- }
-
-
- /**
- * Parse string or array of server capabilities and put them in internal array
- * @access private
- */
- function _parse_capability($caps)
- {
- if (!is_array($caps))
- $cap_arr = explode(' ', $caps);
- else
- $cap_arr = $caps;
-
- foreach ($cap_arr as $cap)
- {
- if ($cap=='CAPABILITY')
- continue;
-
- if (strpos($cap, '=')>0)
- {
- list($key, $value) = explode('=', $cap);
- if (!is_array($this->capabilities[$key]))
- $this->capabilities[$key] = array();
-
- $this->capabilities[$key][] = $value;
- }
- else
- $this->capabilities[$cap] = TRUE;
- }
- }
-
-
- /**
- * Subscribe/unsubscribe a list of mailboxes and update local cache
- * @access private
- */
- function _change_subscription($a_mboxes, $mode)
- {
- $updated = FALSE;
-
- if (is_array($a_mboxes))
- foreach ($a_mboxes as $i => $mbox_name)
- {
- $mailbox = $this->_mod_mailbox($mbox_name);
- $a_mboxes[$i] = $mailbox;
-
- if ($mode=='subscribe')
- $result = iil_C_Subscribe($this->conn, $mailbox);
- else if ($mode=='unsubscribe')
- $result = iil_C_UnSubscribe($this->conn, $mailbox);
-
- if ($result>=0)
- $updated = TRUE;
- }
-
- // get cached mailbox list
- if ($updated)
- {
- $a_mailbox_cache = $this->get_cache('mailboxes');
- if (!is_array($a_mailbox_cache))
- return $updated;
-
- // modify cached list
- if ($mode=='subscribe')
- $a_mailbox_cache = array_merge($a_mailbox_cache, $a_mboxes);
- else if ($mode=='unsubscribe')
- $a_mailbox_cache = array_diff($a_mailbox_cache, $a_mboxes);
-
- // write mailboxlist to cache
- $this->update_cache('mailboxes', $this->_sort_mailbox_list($a_mailbox_cache));
- }
-
- return $updated;
- }
-
-
- /**
- * Increde/decrese messagecount for a specific mailbox
- * @access private
- */
- function _set_messagecount($mbox_name, $mode, $increment)
- {
- $a_mailbox_cache = FALSE;
- $mailbox = $mbox_name ? $mbox_name : $this->mailbox;
- $mode = strtoupper($mode);
-
- $a_mailbox_cache = $this->get_cache('messagecount');
-
- if (!is_array($a_mailbox_cache[$mailbox]) || !isset($a_mailbox_cache[$mailbox][$mode]) || !is_numeric($increment))
- return FALSE;
-
- // add incremental value to messagecount
- $a_mailbox_cache[$mailbox][$mode] += $increment;
-
- // there's something wrong, delete from cache
- if ($a_mailbox_cache[$mailbox][$mode] < 0)
- unset($a_mailbox_cache[$mailbox][$mode]);
-
- // write back to cache
- $this->update_cache('messagecount', $a_mailbox_cache);
-
- return TRUE;
- }
-
-
- /**
- * Remove messagecount of a specific mailbox from cache
- * @access private
- */
- function _clear_messagecount($mbox_name='')
- {
- $a_mailbox_cache = FALSE;
- $mailbox = $mbox_name ? $mbox_name : $this->mailbox;
-
- $a_mailbox_cache = $this->get_cache('messagecount');
-
- if (is_array($a_mailbox_cache[$mailbox]))
- {
- unset($a_mailbox_cache[$mailbox]);
- $this->update_cache('messagecount', $a_mailbox_cache);
- }
- }
-
-
- /**
- * Split RFC822 header string into an associative array
- * @access private
- */
- function _parse_headers($headers)
- {
- $a_headers = array();
- $lines = explode("\n", $headers);
- $c = count($lines);
- for ($i=0; $i<$c; $i++)
- {
- if ($p = strpos($lines[$i], ': '))
- {
- $field = strtolower(substr($lines[$i], 0, $p));
- $value = trim(substr($lines[$i], $p+1));
- if (!empty($value))
- $a_headers[$field] = $value;
- }
- }
-
- return $a_headers;
- }
-
-
- /**
- * @access private
- */
- function _parse_address_list($str, $decode=true)
- {
- // remove any newlines and carriage returns before
- $a = $this->_explode_quoted_string('[,;]', preg_replace( "/[\r\n]/", " ", $str));
- $result = array();
-
- foreach ($a as $key => $val)
- {
- $val = preg_replace("/([\"\w])</", "$1 <", $val);
- $sub_a = $this->_explode_quoted_string(' ', $decode ? $this->decode_header($val) : $val);
- $result[$key]['name'] = '';
-
- foreach ($sub_a as $k => $v)
- {
- if (strpos($v, '@') > 0)
- $result[$key]['address'] = str_replace('<', '', str_replace('>', '', $v));
- else
- $result[$key]['name'] .= (empty($result[$key]['name'])?'':' ').str_replace("\"",'',stripslashes($v));
- }
-
- if (empty($result[$key]['name']))
- $result[$key]['name'] = $result[$key]['address'];
- }
-
- return $result;
- }
-
-
- /**
- * @access private
- */
- function _explode_quoted_string($delimiter, $string)
- {
- $result = array();
- $strlen = strlen($string);
- for ($q=$p=$i=0; $i < $strlen; $i++)
- {
- if ($string{$i} == "\"" && $string{$i-1} != "\\")
- $q = $q ? false : true;
- else if (!$q && preg_match("/$delimiter/", $string{$i}))
- {
- $result[] = substr($string, $p, $i - $p);
- $p = $i + 1;
- }
- }
-
- $result[] = substr($string, $p);
- return $result;
- }
-
-} // end class rcube_imap
-
-
-/**
- * Class representing a message part
- *
- * @package Mail
- */
-class rcube_message_part
-{
- var $mime_id = '';
- var $ctype_primary = 'text';
- var $ctype_secondary = 'plain';
- var $mimetype = 'text/plain';
- var $disposition = '';
- var $filename = '';
- var $encoding = '8bit';
- var $charset = '';
- var $size = 0;
- var $headers = array();
- var $d_parameters = array();
- var $ctype_parameters = array();
-
-}
-
-
-/**
- * Class for sorting an array of iilBasicHeader objects in a predetermined order.
- *
- * @package Mail
- * @author Eric Stadtherr
- */
-class rcube_header_sorter
-{
- var $sequence_numbers = array();
-
- /**
- * Set the predetermined sort order.
- *
- * @param array Numerically indexed array of IMAP message sequence numbers
- */
- function set_sequence_numbers($seqnums)
- {
- $this->sequence_numbers = $seqnums;
- }
-
- /**
- * Sort the array of header objects
- *
- * @param array Array of iilBasicHeader objects indexed by UID
- */
- function sort_headers(&$headers)
- {
- /*
- * uksort would work if the keys were the sequence number, but unfortunately
- * the keys are the UIDs. We'll use uasort instead and dereference the value
- * to get the sequence number (in the "id" field).
- *
- * uksort($headers, array($this, "compare_seqnums"));
- */
- uasort($headers, array($this, "compare_seqnums"));
- }
-
- /**
- * Get the position of a message sequence number in my sequence_numbers array
- *
- * @param int Message sequence number contained in sequence_numbers
- * @return int Position, -1 if not found
- */
- function position_of($seqnum)
- {
- $c = count($this->sequence_numbers);
- for ($pos = 0; $pos <= $c; $pos++)
- {
- if ($this->sequence_numbers[$pos] == $seqnum)
- return $pos;
- }
- return -1;
- }
-
- /**
- * Sort method called by uasort()
- */
- function compare_seqnums($a, $b)
- {
- // First get the sequence number from the header object (the 'id' field).
- $seqa = $a->id;
- $seqb = $b->id;
-
- // then find each sequence number in my ordered list
- $posa = $this->position_of($seqa);
- $posb = $this->position_of($seqb);
-
- // return the relative position as the comparison value
- $ret = $posa - $posb;
- return $ret;
- }
-}
-
-
-/**
- * Add quoted-printable encoding to a given string
- *
- * @param string String to encode
- * @param int Add new line after this number of characters
- * @param boolean True if spaces should be converted into =20
- * @return string Encoded string
- */
-function quoted_printable_encode($input, $line_max=76, $space_conv=false)
- {
- $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
- $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
- $eol = "\r\n";
- $escape = "=";
- $output = "";
-
- while( list(, $line) = each($lines))
- {
- //$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary
- $linlen = strlen($line);
- $newline = "";
- for($i = 0; $i < $linlen; $i++)
- {
- $c = substr( $line, $i, 1 );
- $dec = ord( $c );
- if ( ( $i == 0 ) && ( $dec == 46 ) ) // convert first point in the line into =2E
- {
- $c = "=2E";
- }
- if ( $dec == 32 )
- {
- if ( $i == ( $linlen - 1 ) ) // convert space at eol only
- {
- $c = "=20";
- }
- else if ( $space_conv )
- {
- $c = "=20";
- }
- }
- else if ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) // always encode "\t", which is *not* required
- {
- $h2 = floor($dec/16);
- $h1 = floor($dec%16);
- $c = $escape.$hex["$h2"].$hex["$h1"];
- }
-
- if ( (strlen($newline) + strlen($c)) >= $line_max ) // CRLF is not counted
- {
- $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay
- $newline = "";
- // check if newline first character will be point or not
- if ( $dec == 46 )
- {
- $c = "=2E";
- }
- }
- $newline .= $c;
- } // end of for
- $output .= $newline.$eol;
- } // end of while
-
- return trim($output);
- }
-
-
-?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_imap.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | IMAP wrapper that implements the Iloha IMAP Library (IIL) |
+ | See http://ilohamail.org/ for details |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_imap.php 1490 2008-06-07 18:48:59Z alec $
+
+*/
+
+
+/*
+ * Obtain classes from the Iloha IMAP library
+ */
+require_once('lib/imap.inc');
+require_once('lib/mime.inc');
+
+
+/**
+ * Interface class for accessing an IMAP server
+ *
+ * This is a wrapper that implements the Iloha IMAP Library (IIL)
+ *
+ * @package Mail
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ * @version 1.40
+ * @link http://ilohamail.org
+ */
+class rcube_imap
+{
+ var $db;
+ var $conn;
+ var $root_ns = '';
+ var $root_dir = '';
+ var $mailbox = 'INBOX';
+ var $list_page = 1;
+ var $page_size = 10;
+ var $sort_field = 'date';
+ var $sort_order = 'DESC';
+ var $delimiter = NULL;
+ var $caching_enabled = FALSE;
+ var $default_charset = 'ISO-8859-1';
+ var $default_folders = array('INBOX');
+ var $default_folders_lc = array('inbox');
+ var $cache = array();
+ var $cache_keys = array();
+ var $cache_changes = array();
+ var $uid_id_map = array();
+ var $msg_headers = array();
+ var $capabilities = array();
+ var $skip_deleted = FALSE;
+ var $search_set = NULL;
+ var $search_subject = '';
+ var $search_string = '';
+ var $search_charset = '';
+ var $debug_level = 1;
+ var $error_code = 0;
+
+
+ /**
+ * Object constructor
+ *
+ * @param object DB Database connection
+ */
+ function __construct($db_conn)
+ {
+ $this->db = $db_conn;
+ }
+
+
+ /**
+ * PHP 4 object constructor
+ *
+ * @see rcube_imap::__construct
+ */
+ function rcube_imap($db_conn)
+ {
+ $this->__construct($db_conn);
+ }
+
+
+ /**
+ * Connect to an IMAP server
+ *
+ * @param string Host to connect
+ * @param string Username for IMAP account
+ * @param string Password for IMAP account
+ * @param number Port to connect to
+ * @param string SSL schema (either ssl or tls) or null if plain connection
+ * @return boolean TRUE on success, FALSE on failure
+ * @access public
+ */
+ function connect($host, $user, $pass, $port=143, $use_ssl=null, $auth_type='check')
+ {
+ global $ICL_SSL, $ICL_PORT, $IMAP_USE_INTERNAL_DATE;
+
+ // check for Open-SSL support in PHP build
+ if ($use_ssl && in_array('openssl', get_loaded_extensions()))
+ $ICL_SSL = $use_ssl == 'imaps' ? 'ssl' : $use_ssl;
+ else if ($use_ssl)
+ {
+ raise_error(array('code' => 403, 'type' => 'imap', 'file' => __FILE__,
+ 'message' => 'Open SSL not available;'), TRUE, FALSE);
+ $port = 143;
+ }
+
+ $ICL_PORT = $port;
+ $IMAP_USE_INTERNAL_DATE = false;
+
+ $this->conn = iil_Connect($host, $user, $pass, array('imap' => $auth_type));
+ $this->host = $host;
+ $this->user = $user;
+ $this->pass = $pass;
+ $this->port = $port;
+ $this->ssl = $use_ssl;
+
+ // print trace mesages
+ if ($this->conn && ($this->debug_level & 8))
+ console($this->conn->message);
+
+ // write error log
+ else if (!$this->conn && $GLOBALS['iil_error'])
+ {
+ $this->error_code = $GLOBALS['iil_errornum'];
+ raise_error(array('code' => 403,
+ 'type' => 'imap',
+ 'message' => $GLOBALS['iil_error']), TRUE, FALSE);
+ }
+
+ // get server properties
+ if ($this->conn)
+ {
+ $this->_parse_capability($this->conn->capability);
+
+ if (!empty($this->conn->delimiter))
+ $this->delimiter = $this->conn->delimiter;
+ if (!empty($this->conn->rootdir))
+ {
+ $this->set_rootdir($this->conn->rootdir);
+ $this->root_ns = ereg_replace('[\.\/]$', '', $this->conn->rootdir);
+ }
+ }
+
+ return $this->conn ? TRUE : FALSE;
+ }
+
+
+ /**
+ * Close IMAP connection
+ * Usually done on script shutdown
+ *
+ * @access public
+ */
+ function close()
+ {
+ if ($this->conn)
+ iil_Close($this->conn);
+ }
+
+
+ /**
+ * Close IMAP connection and re-connect
+ * This is used to avoid some strange socket errors when talking to Courier IMAP
+ *
+ * @access public
+ */
+ function reconnect()
+ {
+ $this->close();
+ $this->connect($this->host, $this->user, $this->pass, $this->port, $this->ssl);
+ }
+
+
+ /**
+ * Set a root folder for the IMAP connection.
+ *
+ * Only folders within this root folder will be displayed
+ * and all folder paths will be translated using this folder name
+ *
+ * @param string Root folder
+ * @access public
+ */
+ function set_rootdir($root)
+ {
+ if (ereg('[\.\/]$', $root)) //(substr($root, -1, 1)==='/')
+ $root = substr($root, 0, -1);
+
+ $this->root_dir = $root;
+
+ if (empty($this->delimiter))
+ $this->get_hierarchy_delimiter();
+ }
+
+
+ /**
+ * Set default message charset
+ *
+ * This will be used for message decoding if a charset specification is not available
+ *
+ * @param string Charset string
+ * @access public
+ */
+ function set_charset($cs)
+ {
+ $this->default_charset = $cs;
+ }
+
+
+ /**
+ * This list of folders will be listed above all other folders
+ *
+ * @param array Indexed list of folder names
+ * @access public
+ */
+ function set_default_mailboxes($arr)
+ {
+ if (is_array($arr))
+ {
+ $this->default_folders = $arr;
+ $this->default_folders_lc = array();
+
+ // add inbox if not included
+ if (!in_array_nocase('INBOX', $this->default_folders))
+ array_unshift($this->default_folders, 'INBOX');
+
+ // create a second list with lower cased names
+ foreach ($this->default_folders as $mbox)
+ $this->default_folders_lc[] = strtolower($mbox);
+ }
+ }
+
+
+ /**
+ * Set internal mailbox reference.
+ *
+ * All operations will be perfomed on this mailbox/folder
+ *
+ * @param string Mailbox/Folder name
+ * @access public
+ */
+ function set_mailbox($new_mbox)
+ {
+ $mailbox = $this->_mod_mailbox($new_mbox);
+
+ if ($this->mailbox == $mailbox)
+ return;
+
+ $this->mailbox = $mailbox;
+
+ // clear messagecount cache for this mailbox
+ $this->_clear_messagecount($mailbox);
+ }
+
+
+ /**
+ * Set internal list page
+ *
+ * @param number Page number to list
+ * @access public
+ */
+ function set_page($page)
+ {
+ $this->list_page = (int)$page;
+ }
+
+
+ /**
+ * Set internal page size
+ *
+ * @param number Number of messages to display on one page
+ * @access public
+ */
+ function set_pagesize($size)
+ {
+ $this->page_size = (int)$size;
+ }
+
+
+ /**
+ * Save a set of message ids for future message listing methods
+ *
+ * @param array List of IMAP fields to search in
+ * @param string Search string
+ * @param array List of message ids or NULL if empty
+ */
+ function set_search_set($subject, $str=null, $msgs=null, $charset=null)
+ {
+ if (is_array($subject) && $str == null && $msgs == null)
+ list($subject, $str, $msgs, $charset) = $subject;
+ if ($msgs != null && !is_array($msgs))
+ $msgs = split(',', $msgs);
+
+ $this->search_subject = $subject;
+ $this->search_string = $str;
+ $this->search_set = (array)$msgs;
+ $this->search_charset = $charset;
+ }
+
+
+ /**
+ * Return the saved search set as hash array
+ * @return array Search set
+ */
+ function get_search_set()
+ {
+ return array($this->search_subject, $this->search_string, $this->search_set, $this->search_charset);
+ }
+
+
+ /**
+ * Returns the currently used mailbox name
+ *
+ * @return string Name of the mailbox/folder
+ * @access public
+ */
+ function get_mailbox_name()
+ {
+ return $this->conn ? $this->_mod_mailbox($this->mailbox, 'out') : '';
+ }
+
+
+ /**
+ * Returns the IMAP server's capability
+ *
+ * @param string Capability name
+ * @return mixed Capability value or TRUE if supported, FALSE if not
+ * @access public
+ */
+ function get_capability($cap)
+ {
+ $cap = strtoupper($cap);
+ return $this->capabilities[$cap];
+ }
+
+
+ /**
+ * Returns the delimiter that is used by the IMAP server for folder separation
+ *
+ * @return string Delimiter string
+ * @access public
+ */
+ function get_hierarchy_delimiter()
+ {
+ if ($this->conn && empty($this->delimiter))
+ $this->delimiter = iil_C_GetHierarchyDelimiter($this->conn);
+
+ if (empty($this->delimiter))
+ $this->delimiter = '/';
+
+ return $this->delimiter;
+ }
+
+
+ /**
+ * Public method for mailbox listing.
+ *
+ * Converts mailbox name with root dir first
+ *
+ * @param string Optional root folder
+ * @param string Optional filter for mailbox listing
+ * @return array List of mailboxes/folders
+ * @access public
+ */
+ function list_mailboxes($root='', $filter='*')
+ {
+ $a_out = array();
+ $a_mboxes = $this->_list_mailboxes($root, $filter);
+
+ foreach ($a_mboxes as $mbox_row)
+ {
+ $name = $this->_mod_mailbox($mbox_row, 'out');
+ if (strlen($name))
+ $a_out[] = $name;
+ }
+
+ // INBOX should always be available
+ if (!in_array_nocase('INBOX', $a_out))
+ array_unshift($a_out, 'INBOX');
+
+ // sort mailboxes
+ $a_out = $this->_sort_mailbox_list($a_out);
+
+ return $a_out;
+ }
+
+
+ /**
+ * Private method for mailbox listing
+ *
+ * @return array List of mailboxes/folders
+ * @see rcube_imap::list_mailboxes()
+ * @access private
+ */
+ function _list_mailboxes($root='', $filter='*')
+ {
+ $a_defaults = $a_out = array();
+
+ // get cached folder list
+ $a_mboxes = $this->get_cache('mailboxes');
+ if (is_array($a_mboxes))
+ return $a_mboxes;
+
+ // retrieve list of folders from IMAP server
+ $a_folders = iil_C_ListSubscribed($this->conn, $this->_mod_mailbox($root), $filter);
+
+ if (!is_array($a_folders) || !sizeof($a_folders))
+ $a_folders = array();
+
+ // write mailboxlist to cache
+ $this->update_cache('mailboxes', $a_folders);
+
+ return $a_folders;
+ }
+
+
+ /**
+ * Get message count for a specific mailbox
+ *
+ * @param string Mailbox/folder name
+ * @param string Mode for count [ALL|UNSEEN|RECENT]
+ * @param boolean Force reading from server and update cache
+ * @return int Number of messages
+ * @access public
+ */
+ function messagecount($mbox_name='', $mode='ALL', $force=FALSE)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ return $this->_messagecount($mailbox, $mode, $force);
+ }
+
+
+ /**
+ * Private method for getting nr of messages
+ *
+ * @access private
+ * @see rcube_imap::messagecount()
+ */
+ function _messagecount($mailbox='', $mode='ALL', $force=FALSE)
+ {
+ $a_mailbox_cache = FALSE;
+ $mode = strtoupper($mode);
+
+ if (empty($mailbox))
+ $mailbox = $this->mailbox;
+
+ // count search set
+ if ($this->search_string && $mailbox == $this->mailbox && $mode == 'ALL' && !$force)
+ return count((array)$this->search_set);
+
+ $a_mailbox_cache = $this->get_cache('messagecount');
+
+ // return cached value
+ if (!$force && is_array($a_mailbox_cache[$mailbox]) && isset($a_mailbox_cache[$mailbox][$mode]))
+ return $a_mailbox_cache[$mailbox][$mode];
+
+ // RECENT count is fetched a bit different
+ if ($mode == 'RECENT')
+ $count = iil_C_CheckForRecent($this->conn, $mailbox);
+
+ // use SEARCH for message counting
+ else if ($this->skip_deleted)
+ {
+ $search_str = "ALL UNDELETED";
+
+ // get message count and store in cache
+ if ($mode == 'UNSEEN')
+ $search_str .= " UNSEEN";
+
+ // get message count using SEARCH
+ // not very performant but more precise (using UNDELETED)
+ $count = 0;
+ $index = $this->_search_index($mailbox, $search_str);
+ if (is_array($index))
+ {
+ $str = implode(",", $index);
+ if (!empty($str))
+ $count = count($index);
+ }
+ }
+ else
+ {
+ if ($mode == 'UNSEEN')
+ $count = iil_C_CountUnseen($this->conn, $mailbox);
+ else
+ $count = iil_C_CountMessages($this->conn, $mailbox);
+ }
+
+ if (!is_array($a_mailbox_cache[$mailbox]))
+ $a_mailbox_cache[$mailbox] = array();
+
+ $a_mailbox_cache[$mailbox][$mode] = (int)$count;
+
+ // write back to cache
+ $this->update_cache('messagecount', $a_mailbox_cache);
+
+ return (int)$count;
+ }
+
+
+ /**
+ * Public method for listing headers
+ * convert mailbox name with root dir first
+ *
+ * @param string Mailbox/folder name
+ * @param int Current page to list
+ * @param string Header field to sort by
+ * @param string Sort order [ASC|DESC]
+ * @return array Indexed array with message header objects
+ * @access public
+ */
+ function list_headers($mbox_name='', $page=NULL, $sort_field=NULL, $sort_order=NULL)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ return $this->_list_headers($mailbox, $page, $sort_field, $sort_order);
+ }
+
+
+ /**
+ * Private method for listing message headers
+ *
+ * @access private
+ * @see rcube_imap::list_headers
+ */
+ function _list_headers($mailbox='', $page=NULL, $sort_field=NULL, $sort_order=NULL, $recursive=FALSE)
+ {
+ if (!strlen($mailbox))
+ return array();
+
+ // use saved message set
+ if ($this->search_string && $mailbox == $this->mailbox)
+ return $this->_list_header_set($mailbox, $this->search_set, $page, $sort_field, $sort_order);
+
+ $this->_set_sort_order($sort_field, $sort_order);
+
+ $max = $this->_messagecount($mailbox);
+ $start_msg = ($this->list_page-1) * $this->page_size;
+
+ list($begin, $end) = $this->_get_message_range($max, $page);
+
+ // mailbox is empty
+ if ($begin >= $end)
+ return array();
+
+ $headers_sorted = FALSE;
+ $cache_key = $mailbox.'.msg';
+ $cache_status = $this->check_cache_status($mailbox, $cache_key);
+
+ // cache is OK, we can get all messages from local cache
+ if ($cache_status>0)
+ {
+ $a_msg_headers = $this->get_message_cache($cache_key, $start_msg, $start_msg+$this->page_size, $this->sort_field, $this->sort_order);
+ $headers_sorted = TRUE;
+ }
+ // cache is dirty, sync it
+ else if ($this->caching_enabled && $cache_status==-1 && !$recursive)
+ {
+ $this->sync_header_index($mailbox);
+ return $this->_list_headers($mailbox, $page, $this->sort_field, $this->sort_order, TRUE);
+ }
+ else
+ {
+ // retrieve headers from IMAP
+ if ($this->get_capability('sort') && ($msg_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, $this->skip_deleted ? 'UNDELETED' : '')))
+ {
+ $mymsgidx = array_slice ($msg_index, $begin, $end-$begin);
+ $msgs = join(",", $mymsgidx);
+ }
+ else
+ {
+ $msgs = sprintf("%d:%d", $begin+1, $end);
+ $msg_index = range($begin, $end);
+ }
+
+
+ // fetch reuested headers from server
+ $a_msg_headers = array();
+ $deleted_count = $this->_fetch_headers($mailbox, $msgs, $a_msg_headers, $cache_key);
+ if ($this->sort_order == 'DESC' && $headers_sorted) {
+ //since the sort order is not used in the iil_c_sort function we have to do it here
+ $a_msg_headers = array_reverse($a_msg_headers);
+ }
+ // delete cached messages with a higher index than $max+1
+ // Changed $max to $max+1 to fix this bug : #1484295
+ $this->clear_message_cache($cache_key, $max + 1);
+
+
+ // kick child process to sync cache
+ // ...
+
+ }
+
+ // return empty array if no messages found
+ if (!is_array($a_msg_headers) || empty($a_msg_headers)) {
+ return array();
+ }
+
+ // if not already sorted
+ if (!$headers_sorted)
+ {
+ // use this class for message sorting
+ $sorter = new rcube_header_sorter();
+ $sorter->set_sequence_numbers($msg_index);
+ $sorter->sort_headers($a_msg_headers);
+
+ if ($this->sort_order == 'DESC')
+ $a_msg_headers = array_reverse($a_msg_headers);
+ }
+
+ return array_values($a_msg_headers);
+ }
+
+
+
+ /**
+ * Public method for listing a specific set of headers
+ * convert mailbox name with root dir first
+ *
+ * @param string Mailbox/folder name
+ * @param array List of message ids to list
+ * @param int Current page to list
+ * @param string Header field to sort by
+ * @param string Sort order [ASC|DESC]
+ * @return array Indexed array with message header objects
+ * @access public
+ */
+ function list_header_set($mbox_name='', $msgs, $page=NULL, $sort_field=NULL, $sort_order=NULL)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ return $this->_list_header_set($mailbox, $msgs, $page, $sort_field, $sort_order);
+ }
+
+
+ /**
+ * Private method for listing a set of message headers
+ *
+ * @access private
+ * @see rcube_imap::list_header_set()
+ */
+ function _list_header_set($mailbox, $msgs, $page=NULL, $sort_field=NULL, $sort_order=NULL)
+ {
+ if (!strlen($mailbox) || empty($msgs))
+ return array();
+
+ // also accept a comma-separated list of message ids
+ if (is_array ($msgs)) {
+ $max = count ($msgs);
+ $msgs = join (',', $msgs);
+ } else {
+ $max = count(split(',', $msgs));
+ }
+
+ $this->_set_sort_order($sort_field, $sort_order);
+
+ $start_msg = ($this->list_page-1) * $this->page_size;
+
+ // fetch reuested headers from server
+ $a_msg_headers = array();
+ $this->_fetch_headers($mailbox, $msgs, $a_msg_headers, NULL);
+
+ // return empty array if no messages found
+ if (!is_array($a_msg_headers) || empty($a_msg_headers))
+ return array();
+
+ // if not already sorted
+ $a_msg_headers = iil_SortHeaders($a_msg_headers, $this->sort_field, $this->sort_order);
+
+ // only return the requested part of the set
+ return array_slice(array_values($a_msg_headers), $start_msg, min($max-$start_msg, $this->page_size));
+ }
+
+
+ /**
+ * Helper function to get first and last index of the requested set
+ *
+ * @param int message count
+ * @param mixed page number to show, or string 'all'
+ * @return array array with two values: first index, last index
+ * @access private
+ */
+ function _get_message_range($max, $page)
+ {
+ $start_msg = ($this->list_page-1) * $this->page_size;
+
+ if ($page=='all')
+ {
+ $begin = 0;
+ $end = $max;
+ }
+ else if ($this->sort_order=='DESC')
+ {
+ $begin = $max - $this->page_size - $start_msg;
+ $end = $max - $start_msg;
+ }
+ else
+ {
+ $begin = $start_msg;
+ $end = $start_msg + $this->page_size;
+ }
+
+ if ($begin < 0) $begin = 0;
+ if ($end < 0) $end = $max;
+ if ($end > $max) $end = $max;
+
+ return array($begin, $end);
+ }
+
+
+
+ /**
+ * Fetches message headers
+ * Used for loop
+ *
+ * @param string Mailbox name
+ * @param string Message index to fetch
+ * @param array Reference to message headers array
+ * @param array Array with cache index
+ * @return int Number of deleted messages
+ * @access private
+ */
+ function _fetch_headers($mailbox, $msgs, &$a_msg_headers, $cache_key)
+ {
+ // cache is incomplete
+ $cache_index = $this->get_message_cache_index($cache_key);
+
+ // fetch reuested headers from server
+ $a_header_index = iil_C_FetchHeaders($this->conn, $mailbox, $msgs);
+ $deleted_count = 0;
+
+ if (!empty($a_header_index))
+ {
+ foreach ($a_header_index as $i => $headers)
+ {
+ if ($headers->deleted && $this->skip_deleted)
+ {
+ // delete from cache
+ if ($cache_index[$headers->id] && $cache_index[$headers->id] == $headers->uid)
+ $this->remove_message_cache($cache_key, $headers->id);
+
+ $deleted_count++;
+ continue;
+ }
+
+ // add message to cache
+ if ($this->caching_enabled && $cache_index[$headers->id] != $headers->uid)
+ $this->add_message_cache($cache_key, $headers->id, $headers);
+
+ $a_msg_headers[$headers->uid] = $headers;
+ }
+ }
+
+ return $deleted_count;
+ }
+
+
+ /**
+ * Return sorted array of message UIDs
+ *
+ * @param string Mailbox to get index from
+ * @param string Sort column
+ * @param string Sort order [ASC, DESC]
+ * @return array Indexed array with message ids
+ */
+ function message_index($mbox_name='', $sort_field=NULL, $sort_order=NULL)
+ {
+ $this->_set_sort_order($sort_field, $sort_order);
+
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ $key = "{$mailbox}:{$this->sort_field}:{$this->sort_order}:{$this->search_string}.msgi";
+
+ // we have a saved search result. get index from there
+ if (!isset($this->cache[$key]) && $this->search_string && $mailbox == $this->mailbox)
+ {
+ $this->cache[$key] = $a_msg_headers = array();
+ $this->_fetch_headers($mailbox, join(',', $this->search_set), $a_msg_headers, NULL);
+
+ foreach (iil_SortHeaders($a_msg_headers, $this->sort_field, $this->sort_order) as $i => $msg)
+ $this->cache[$key][] = $msg->uid;
+ }
+
+ // have stored it in RAM
+ if (isset($this->cache[$key]))
+ return $this->cache[$key];
+
+ // check local cache
+ $cache_key = $mailbox.'.msg';
+ $cache_status = $this->check_cache_status($mailbox, $cache_key);
+
+ // cache is OK
+ if ($cache_status>0)
+ {
+ $a_index = $this->get_message_cache_index($cache_key, TRUE, $this->sort_field, $this->sort_order);
+ return array_values($a_index);
+ }
+
+
+ // fetch complete message index
+ $msg_count = $this->_messagecount($mailbox);
+ if ($this->get_capability('sort') && ($a_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, '', TRUE)))
+ {
+ if ($this->sort_order == 'DESC')
+ $a_index = array_reverse($a_index);
+
+ $this->cache[$key] = $a_index;
+
+ }
+ else
+ {
+ $a_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:$msg_count", $this->sort_field);
+ $a_uids = iil_C_FetchUIDs($this->conn, $mailbox);
+
+ if ($this->sort_order=="ASC")
+ asort($a_index);
+ else if ($this->sort_order=="DESC")
+ arsort($a_index);
+
+ $i = 0;
+ $this->cache[$key] = array();
+ foreach ($a_index as $index => $value)
+ $this->cache[$key][$i++] = $a_uids[$index];
+ }
+
+ return $this->cache[$key];
+ }
+
+
+ /**
+ * @access private
+ */
+ function sync_header_index($mailbox)
+ {
+ $cache_key = $mailbox.'.msg';
+ $cache_index = $this->get_message_cache_index($cache_key);
+ $msg_count = $this->_messagecount($mailbox);
+
+ // fetch complete message index
+ $a_message_index = iil_C_FetchHeaderIndex($this->conn, $mailbox, "1:$msg_count", 'UID');
+
+ foreach ($a_message_index as $id => $uid)
+ {
+ // message in cache at correct position
+ if ($cache_index[$id] == $uid)
+ {
+ unset($cache_index[$id]);
+ continue;
+ }
+
+ // message in cache but in wrong position
+ if (in_array((string)$uid, $cache_index, TRUE))
+ {
+ unset($cache_index[$id]);
+ }
+
+ // other message at this position
+ if (isset($cache_index[$id]))
+ {
+ $this->remove_message_cache($cache_key, $id);
+ unset($cache_index[$id]);
+ }
+
+
+ // fetch complete headers and add to cache
+ $headers = iil_C_FetchHeader($this->conn, $mailbox, $id);
+ $this->add_message_cache($cache_key, $headers->id, $headers);
+ }
+
+ // those ids that are still in cache_index have been deleted
+ if (!empty($cache_index))
+ {
+ foreach ($cache_index as $id => $uid)
+ $this->remove_message_cache($cache_key, $id);
+ }
+ }
+
+
+ /**
+ * Invoke search request to IMAP server
+ *
+ * @param string mailbox name to search in
+ * @param string search criteria (ALL, TO, FROM, SUBJECT, etc)
+ * @param string search string
+ * @return array search results as list of message ids
+ * @access public
+ */
+ function search($mbox_name='', $criteria='ALL', $str=NULL, $charset=NULL)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+
+ // have an array of criterias => execute multiple searches
+ if (is_array($criteria) && $str)
+ {
+ $results = array();
+ foreach ($criteria as $crit)
+ if ($search_result = $this->search($mbox_name, $crit, $str, $charset))
+ $results = array_merge($results, $search_result);
+
+ $results = array_unique($results);
+ $this->set_search_set($criteria, $str, $results, $charset);
+ return $results;
+ }
+ else if ($str && $criteria)
+ {
+ $search = (!empty($charset) ? "CHARSET $charset " : '') . sprintf("%s {%d}\r\n%s", $criteria, strlen($str), $str);
+ $results = $this->_search_index($mailbox, $search);
+
+ // try search with ISO charset (should be supported by server)
+ if (empty($results) && !empty($charset) && $charset!='ISO-8859-1')
+ $results = $this->search($mbox_name, $criteria, rcube_charset_convert($str, $charset, 'ISO-8859-1'), 'ISO-8859-1');
+
+ $this->set_search_set($criteria, $str, $results, $charset);
+ return $results;
+ }
+ else
+ return $this->_search_index($mailbox, $criteria);
+ }
+
+
+ /**
+ * Private search method
+ *
+ * @return array search results as list of message ids
+ * @access private
+ * @see rcube_imap::search()
+ */
+ function _search_index($mailbox, $criteria='ALL')
+ {
+ $a_messages = iil_C_Search($this->conn, $mailbox, $criteria);
+ // clean message list (there might be some empty entries)
+ if (is_array($a_messages))
+ {
+ foreach ($a_messages as $i => $val)
+ if (empty($val))
+ unset($a_messages[$i]);
+ }
+
+ return $a_messages;
+ }
+
+
+ /**
+ * Refresh saved search set
+ *
+ * @return array Current search set
+ */
+ function refresh_search()
+ {
+ if (!empty($this->search_subject) && !empty($this->search_string))
+ $this->search_set = $this->search('', $this->search_subject, $this->search_string, $this->search_charset);
+
+ return $this->get_search_set();
+ }
+
+
+ /**
+ * Check if the given message ID is part of the current search set
+ *
+ * @return boolean True on match or if no search request is stored
+ */
+ function in_searchset($msgid)
+ {
+ if (!empty($this->search_string))
+ return in_array("$msgid", (array)$this->search_set, true);
+ else
+ return true;
+ }
+
+
+ /**
+ * Return message headers object of a specific message
+ *
+ * @param int Message ID
+ * @param string Mailbox to read from
+ * @param boolean True if $id is the message UID
+ * @return object Message headers representation
+ */
+ function get_headers($id, $mbox_name=NULL, $is_uid=TRUE)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ $uid = $is_uid ? $id : $this->_id2uid($id);
+
+ // get cached headers
+ if ($uid && ($headers = &$this->get_cached_message($mailbox.'.msg', $uid)))
+ return $headers;
+
+ $headers = iil_C_FetchHeader($this->conn, $mailbox, $id, $is_uid);
+
+ // write headers cache
+ if ($headers)
+ {
+ if ($headers->uid && $headers->id)
+ $this->uid_id_map[$mailbox][$headers->uid] = $headers->id;
+
+ $this->add_message_cache($mailbox.'.msg', $headers->id, $headers);
+ }
+
+ return $headers;
+ }
+
+
+ /**
+ * Fetch body structure from the IMAP server and build
+ * an object structure similar to the one generated by PEAR::Mail_mimeDecode
+ *
+ * @param int Message UID to fetch
+ * @return object stdClass Message part tree or False on failure
+ */
+ function &get_structure($uid)
+ {
+ $cache_key = $this->mailbox.'.msg';
+ $headers = &$this->get_cached_message($cache_key, $uid, true);
+
+ // return cached message structure
+ if (is_object($headers) && is_object($headers->structure))
+ return $headers->structure;
+
+ // resolve message sequence number
+ if (!($msg_id = $this->_uid2id($uid)))
+ return FALSE;
+
+ $structure_str = iil_C_FetchStructureString($this->conn, $this->mailbox, $msg_id);
+ $structure = iml_GetRawStructureArray($structure_str);
+ $struct = false;
+
+ // parse structure and add headers
+ if (!empty($structure))
+ {
+ $this->_msg_id = $msg_id;
+ $headers = $this->get_headers($uid);
+
+ $struct = &$this->_structure_part($structure);
+ $struct->headers = get_object_vars($headers);
+
+ // don't trust given content-type
+ if (empty($struct->parts) && !empty($struct->headers['ctype']))
+ {
+ $struct->mime_id = '1';
+ $struct->mimetype = strtolower($struct->headers['ctype']);
+ list($struct->ctype_primary, $struct->ctype_secondary) = explode('/', $struct->mimetype);
+ }
+
+ // write structure to cache
+ if ($this->caching_enabled)
+ $this->add_message_cache($cache_key, $msg_id, $headers, $struct);
+ }
+
+ return $struct;
+ }
+
+
+ /**
+ * Build message part object
+ *
+ * @access private
+ */
+ function &_structure_part($part, $count=0, $parent='')
+ {
+ $struct = new rcube_message_part;
+ $struct->mime_id = empty($parent) ? (string)$count : "$parent.$count";
+
+ // multipart
+ if (is_array($part[0]))
+ {
+ $struct->ctype_primary = 'multipart';
+
+ // find first non-array entry
+ for ($i=1; $i<count($part); $i++)
+ if (!is_array($part[$i]))
+ {
+ $struct->ctype_secondary = strtolower($part[$i]);
+ break;
+ }
+
+ $struct->mimetype = 'multipart/'.$struct->ctype_secondary;
+
+ $struct->parts = array();
+ for ($i=0, $count=0; $i<count($part); $i++)
+ if (is_array($part[$i]) && count($part[$i]) > 3)
+ $struct->parts[] = $this->_structure_part($part[$i], ++$count, $struct->mime_id);
+
+ return $struct;
+ }
+
+
+ // regular part
+ $struct->ctype_primary = strtolower($part[0]);
+ $struct->ctype_secondary = strtolower($part[1]);
+ $struct->mimetype = $struct->ctype_primary.'/'.$struct->ctype_secondary;
+
+ // read content type parameters
+ if (is_array($part[2]))
+ {
+ $struct->ctype_parameters = array();
+ for ($i=0; $i<count($part[2]); $i+=2)
+ $struct->ctype_parameters[strtolower($part[2][$i])] = $part[2][$i+1];
+
+ if (isset($struct->ctype_parameters['charset']))
+ $struct->charset = $struct->ctype_parameters['charset'];
+ }
+
+ // read content encoding
+ if (!empty($part[5]) && $part[5]!='NIL')
+ {
+ $struct->encoding = strtolower($part[5]);
+ $struct->headers['content-transfer-encoding'] = $struct->encoding;
+ }
+
+ // get part size
+ if (!empty($part[6]) && $part[6]!='NIL')
+ $struct->size = intval($part[6]);
+
+ // read part disposition
+ $di = count($part) - 2;
+ if ((is_array($part[$di]) && count($part[$di]) == 2 && is_array($part[$di][1])) ||
+ (is_array($part[--$di]) && count($part[$di]) == 2))
+ {
+ $struct->disposition = strtolower($part[$di][0]);
+
+ if (is_array($part[$di][1]))
+ for ($n=0; $n<count($part[$di][1]); $n+=2)
+ $struct->d_parameters[strtolower($part[$di][1][$n])] = $part[$di][1][$n+1];
+ }
+
+ // get child parts
+ if (is_array($part[8]) && $di != 8)
+ {
+ $struct->parts = array();
+ for ($i=0, $count=0; $i<count($part[8]); $i++)
+ if (is_array($part[8][$i]) && count($part[8][$i]) > 5)
+ $struct->parts[] = $this->_structure_part($part[8][$i], ++$count, $struct->mime_id);
+ }
+
+ // get part ID
+ if (!empty($part[3]) && $part[3]!='NIL')
+ {
+ $struct->content_id = $part[3];
+ $struct->headers['content-id'] = $part[3];
+
+ if (empty($struct->disposition))
+ $struct->disposition = 'inline';
+ }
+
+ // fetch message headers if message/rfc822
+ if ($struct->ctype_primary=='message')
+ {
+ $headers = iil_C_FetchPartBody($this->conn, $this->mailbox, $this->_msg_id, $struct->mime_id.'.HEADER');
+ $struct->headers = $this->_parse_headers($headers);
+
+ if (is_array($part[8]) && empty($struct->parts))
+ $struct->parts[] = $this->_structure_part($part[8], ++$count, $struct->mime_id);
+ }
+
+ // normalize filename property
+ if ($filename_mime = $struct->d_parameters['filename'] ? $struct->d_parameters['filename'] : $struct->ctype_parameters['name'])
+ {
+ $struct->filename = rcube_imap::decode_mime_string($filename_mime,
+ $struct->charset ? $struct->charset : rc_detect_encoding($filename_mime, $this->default_charset));
+ }
+ else if ($filename_encoded = $struct->d_parameters['filename*'] ? $struct->d_parameters['filename*'] : $struct->ctype_parameters['name*'])
+ {
+ // decode filename according to RFC 2231, Section 4
+ list($filename_charset,, $filename_urlencoded) = split('\'', $filename_encoded);
+ $struct->filename = rcube_charset_convert(urldecode($filename_urlencoded), $filename_charset);
+ }
+ else if (!empty($struct->headers['content-description']))
+ $struct->filename = rcube_imap::decode_mime_string($struct->headers['content-description'],
+ $struct->charset ? $struct->charset : rc_detect_encoding($struct->headers['content-description'],$this->default_charset));
+
+ return $struct;
+ }
+
+
+ /**
+ * Fetch message body of a specific message from the server
+ *
+ * @param int Message UID
+ * @param string Part number
+ * @param object rcube_message_part Part object created by get_structure()
+ * @param mixed True to print part, ressource to write part contents in
+ * @return string Message/part body if not printed
+ */
+ function &get_message_part($uid, $part=1, $o_part=NULL, $print=NULL)
+ {
+ if (!($msg_id = $this->_uid2id($uid)))
+ return FALSE;
+
+ // get part encoding if not provided
+ if (!is_object($o_part))
+ {
+ $structure_str = iil_C_FetchStructureString($this->conn, $this->mailbox, $msg_id);
+ $structure = iml_GetRawStructureArray($structure_str);
+ $part_type = iml_GetPartTypeCode($structure, $part);
+ $o_part = new rcube_message_part;
+ $o_part->ctype_primary = $part_type==0 ? 'text' : ($part_type==2 ? 'message' : 'other');
+ $o_part->encoding = strtolower(iml_GetPartEncodingString($structure, $part));
+ $o_part->charset = iml_GetPartCharset($structure, $part);
+ }
+
+ // TODO: Add caching for message parts
+
+ if ($print)
+ {
+ $mode = $o_part->encoding == 'base64' ? 3 : ($o_part->encoding == 'quoted-printable' ? 1 : 2);
+ $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, $mode);
+
+ // we have to decode the part manually before printing
+ if ($mode == 1)
+ {
+ echo $this->mime_decode($body, $o_part->encoding);
+ $body = true;
+ }
+ }
+ else
+ {
+ $body = iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, $part, 1);
+
+ // decode part body
+ if ($o_part->encoding)
+ $body = $this->mime_decode($body, $o_part->encoding);
+
+ // convert charset (if text or message part)
+ if ($o_part->ctype_primary=='text' || $o_part->ctype_primary=='message')
+ {
+ // assume default if no charset specified
+ if (empty($o_part->charset))
+ $o_part->charset = $this->default_charset;
+
+ $body = rcube_charset_convert($body, $o_part->charset);
+ }
+ }
+
+ return $body;
+ }
+
+
+ /**
+ * Fetch message body of a specific message from the server
+ *
+ * @param int Message UID
+ * @return string Message/part body
+ * @see rcube_imap::get_message_part()
+ */
+ function &get_body($uid, $part=1)
+ {
+ $headers = $this->get_headers($uid);
+ return rcube_charset_convert(
+ $this->mime_decode($this->get_message_part($uid, $part), 'quoted-printable'),
+ $headers->charset ? $headers->charset : $this->default_charset);
+ }
+
+
+ /**
+ * Returns the whole message source as string
+ *
+ * @param int Message UID
+ * @return string Message source string
+ */
+ function &get_raw_body($uid)
+ {
+ if (!($msg_id = $this->_uid2id($uid)))
+ return FALSE;
+
+ $body = iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
+ $body .= iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 1);
+
+ return $body;
+ }
+
+
+ /**
+ * Sends the whole message source to stdout
+ *
+ * @param int Message UID
+ */
+ function print_raw_body($uid)
+ {
+ if (!($msg_id = $this->_uid2id($uid)))
+ return FALSE;
+
+ print iil_C_FetchPartHeader($this->conn, $this->mailbox, $msg_id, NULL);
+ flush();
+ iil_C_HandlePartBody($this->conn, $this->mailbox, $msg_id, NULL, 2);
+ }
+
+
+ /**
+ * Set message flag to one or several messages
+ *
+ * @param mixed Message UIDs as array or as comma-separated string
+ * @param string Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT
+ * @return boolean True on success, False on failure
+ */
+ function set_flag($uids, $flag)
+ {
+ $flag = strtoupper($flag);
+ $msg_ids = array();
+ if (!is_array($uids))
+ $uids = explode(',',$uids);
+
+ foreach ($uids as $uid) {
+ $msg_ids[$uid] = $this->_uid2id($uid);
+ }
+
+ if ($flag=='UNDELETED')
+ $result = iil_C_Undelete($this->conn, $this->mailbox, join(',', array_values($msg_ids)));
+ else if ($flag=='UNSEEN')
+ $result = iil_C_Unseen($this->conn, $this->mailbox, join(',', array_values($msg_ids)));
+ else
+ $result = iil_C_Flag($this->conn, $this->mailbox, join(',', array_values($msg_ids)), $flag);
+
+ // reload message headers if cached
+ $cache_key = $this->mailbox.'.msg';
+ if ($this->caching_enabled)
+ {
+ foreach ($msg_ids as $uid => $id)
+ {
+ if ($cached_headers = $this->get_cached_message($cache_key, $uid))
+ {
+ $this->remove_message_cache($cache_key, $id);
+ //$this->get_headers($uid);
+ }
+ }
+
+ // close and re-open connection
+ // this prevents connection problems with Courier
+ $this->reconnect();
+ }
+
+ // set nr of messages that were flaged
+ $count = count($msg_ids);
+
+ // clear message count cache
+ if ($result && $flag=='SEEN')
+ $this->_set_messagecount($this->mailbox, 'UNSEEN', $count*(-1));
+ else if ($result && $flag=='UNSEEN')
+ $this->_set_messagecount($this->mailbox, 'UNSEEN', $count);
+ else if ($result && $flag=='DELETED')
+ $this->_set_messagecount($this->mailbox, 'ALL', $count*(-1));
+
+ return $result;
+ }
+
+
+ /**
+ * Append a mail message (source) to a specific mailbox
+ *
+ * @param string Target mailbox
+ * @param string Message source
+ * @return boolean True on success, False on error
+ */
+ function save_message($mbox_name, &$message)
+ {
+ $mbox_name = stripslashes($mbox_name);
+ $mailbox = $this->_mod_mailbox($mbox_name);
+
+ // make sure mailbox exists
+ if (in_array($mailbox, $this->_list_mailboxes()))
+ $saved = iil_C_Append($this->conn, $mailbox, $message);
+
+ if ($saved)
+ {
+ // increase messagecount of the target mailbox
+ $this->_set_messagecount($mailbox, 'ALL', 1);
+ }
+
+ return $saved;
+ }
+
+
+ /**
+ * Move a message from one mailbox to another
+ *
+ * @param string List of UIDs to move, separated by comma
+ * @param string Target mailbox
+ * @param string Source mailbox
+ * @return boolean True on success, False on error
+ */
+ function move_message($uids, $to_mbox, $from_mbox='')
+ {
+ $to_mbox_in = stripslashes($to_mbox);
+ $from_mbox = stripslashes($from_mbox);
+ $to_mbox = $this->_mod_mailbox($to_mbox_in);
+ $from_mbox = $from_mbox ? $this->_mod_mailbox($from_mbox) : $this->mailbox;
+
+ // make sure mailbox exists
+ if (!in_array($to_mbox, $this->_list_mailboxes()))
+ {
+ if (in_array($to_mbox_in, $this->default_folders))
+ $this->create_mailbox($to_mbox_in, TRUE);
+ else
+ return FALSE;
+ }
+
+ // convert the list of uids to array
+ $a_uids = is_string($uids) ? explode(',', $uids) : (is_array($uids) ? $uids : NULL);
+
+ // exit if no message uids are specified
+ if (!is_array($a_uids))
+ return false;
+
+ // convert uids to message ids
+ $a_mids = array();
+ foreach ($a_uids as $uid)
+ $a_mids[] = $this->_uid2id($uid, $from_mbox);
+
+ $iil_move = iil_C_Move($this->conn, join(',', $a_mids), $from_mbox, $to_mbox);
+ $moved = !($iil_move === false || $iil_move < 0);
+
+ // send expunge command in order to have the moved message
+ // really deleted from the source mailbox
+ if ($moved) {
+ $this->_expunge($from_mbox, FALSE);
+ $this->_clear_messagecount($from_mbox);
+ $this->_clear_messagecount($to_mbox);
+ }
+ // moving failed
+ else if (rcmail::get_instance()->config->get('delete_always', false)) {
+ return iil_C_Delete($this->conn, $from_mbox, join(',', $a_mids));
+ }
+
+ // remove message ids from search set
+ if ($moved && $this->search_set && $from_mbox == $this->mailbox)
+ $this->search_set = array_diff($this->search_set, $a_mids);
+
+ // update cached message headers
+ $cache_key = $from_mbox.'.msg';
+ if ($moved && ($a_cache_index = $this->get_message_cache_index($cache_key)))
+ {
+ $start_index = 100000;
+ foreach ($a_uids as $uid)
+ {
+ if (($index = array_search($uid, $a_cache_index)) !== FALSE)
+ $start_index = min($index, $start_index);
+ }
+
+ // clear cache from the lowest index on
+ $this->clear_message_cache($cache_key, $start_index);
+ }
+
+ return $moved;
+ }
+
+
+ /**
+ * Mark messages as deleted and expunge mailbox
+ *
+ * @param string List of UIDs to move, separated by comma
+ * @param string Source mailbox
+ * @return boolean True on success, False on error
+ */
+ function delete_message($uids, $mbox_name='')
+ {
+ $mbox_name = stripslashes($mbox_name);
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+
+ // convert the list of uids to array
+ $a_uids = is_string($uids) ? explode(',', $uids) : (is_array($uids) ? $uids : NULL);
+
+ // exit if no message uids are specified
+ if (!is_array($a_uids))
+ return false;
+
+ // convert uids to message ids
+ $a_mids = array();
+ foreach ($a_uids as $uid)
+ $a_mids[] = $this->_uid2id($uid, $mailbox);
+
+ $deleted = iil_C_Delete($this->conn, $mailbox, join(',', $a_mids));
+
+ // send expunge command in order to have the deleted message
+ // really deleted from the mailbox
+ if ($deleted)
+ {
+ $this->_expunge($mailbox, FALSE);
+ $this->_clear_messagecount($mailbox);
+ }
+
+ // remove message ids from search set
+ if ($deleted && $this->search_set && $mailbox == $this->mailbox)
+ $this->search_set = array_diff($this->search_set, $a_mids);
+
+ // remove deleted messages from cache
+ $cache_key = $mailbox.'.msg';
+ if ($deleted && ($a_cache_index = $this->get_message_cache_index($cache_key)))
+ {
+ $start_index = 100000;
+ foreach ($a_uids as $uid)
+ {
+ if (($index = array_search($uid, $a_cache_index)) !== FALSE)
+ $start_index = min($index, $start_index);
+ }
+
+ // clear cache from the lowest index on
+ $this->clear_message_cache($cache_key, $start_index);
+ }
+
+ return $deleted;
+ }
+
+
+ /**
+ * Clear all messages in a specific mailbox
+ *
+ * @param string Mailbox name
+ * @return int Above 0 on success
+ */
+ function clear_mailbox($mbox_name=NULL)
+ {
+ $mbox_name = stripslashes($mbox_name);
+ $mailbox = !empty($mbox_name) ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ $msg_count = $this->_messagecount($mailbox, 'ALL');
+
+ if ($msg_count>0)
+ {
+ $cleared = iil_C_ClearFolder($this->conn, $mailbox);
+
+ // make sure the message count cache is cleared as well
+ if ($cleared)
+ {
+ $this->clear_message_cache($mailbox.'.msg');
+ $a_mailbox_cache = $this->get_cache('messagecount');
+ unset($a_mailbox_cache[$mailbox]);
+ $this->update_cache('messagecount', $a_mailbox_cache);
+ }
+
+ return $cleared;
+ }
+ else
+ return 0;
+ }
+
+
+ /**
+ * Send IMAP expunge command and clear cache
+ *
+ * @param string Mailbox name
+ * @param boolean False if cache should not be cleared
+ * @return boolean True on success
+ */
+ function expunge($mbox_name='', $clear_cache=TRUE)
+ {
+ $mbox_name = stripslashes($mbox_name);
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ return $this->_expunge($mailbox, $clear_cache);
+ }
+
+
+ /**
+ * Send IMAP expunge command and clear cache
+ *
+ * @see rcube_imap::expunge()
+ * @access private
+ */
+ function _expunge($mailbox, $clear_cache=TRUE)
+ {
+ $result = iil_C_Expunge($this->conn, $mailbox);
+
+ if ($result>=0 && $clear_cache)
+ {
+ $this->clear_message_cache($mailbox.'.msg');
+ $this->_clear_messagecount($mailbox);
+ }
+
+ return $result;
+ }
+
+
+ /* --------------------------------
+ * folder managment
+ * --------------------------------*/
+
+
+ /**
+ * Get a list of all folders available on the IMAP server
+ *
+ * @param string IMAP root dir
+ * @return array Indexed array with folder names
+ */
+ function list_unsubscribed($root='')
+ {
+ static $sa_unsubscribed;
+
+ if (is_array($sa_unsubscribed))
+ return $sa_unsubscribed;
+
+ // retrieve list of folders from IMAP server
+ $a_mboxes = iil_C_ListMailboxes($this->conn, $this->_mod_mailbox($root), '*');
+
+ // modify names with root dir
+ foreach ($a_mboxes as $mbox_name)
+ {
+ $name = $this->_mod_mailbox($mbox_name, 'out');
+ if (strlen($name))
+ $a_folders[] = $name;
+ }
+
+ // filter folders and sort them
+ $sa_unsubscribed = $this->_sort_mailbox_list($a_folders);
+ return $sa_unsubscribed;
+ }
+
+
+ /**
+ * Get mailbox quota information
+ * added by Nuny
+ *
+ * @return mixed Quota info or False if not supported
+ */
+ function get_quota()
+ {
+ if ($this->get_capability('QUOTA'))
+ return iil_C_GetQuota($this->conn);
+
+ return FALSE;
+ }
+
+
+ /**
+ * Subscribe to a specific mailbox(es)
+ *
+ * @param array Mailbox name(s)
+ * @return boolean True on success
+ */
+ function subscribe($a_mboxes)
+ {
+ if (!is_array($a_mboxes))
+ $a_mboxes = array($a_mboxes);
+
+ // let this common function do the main work
+ return $this->_change_subscription($a_mboxes, 'subscribe');
+ }
+
+
+ /**
+ * Unsubscribe mailboxes
+ *
+ * @param array Mailbox name(s)
+ * @return boolean True on success
+ */
+ function unsubscribe($a_mboxes)
+ {
+ if (!is_array($a_mboxes))
+ $a_mboxes = array($a_mboxes);
+
+ // let this common function do the main work
+ return $this->_change_subscription($a_mboxes, 'unsubscribe');
+ }
+
+
+ /**
+ * Create a new mailbox on the server and register it in local cache
+ *
+ * @param string New mailbox name (as utf-7 string)
+ * @param boolean True if the new mailbox should be subscribed
+ * @param string Name of the created mailbox, false on error
+ */
+ function create_mailbox($name, $subscribe=FALSE)
+ {
+ $result = FALSE;
+
+ // replace backslashes
+ $name = preg_replace('/[\\\]+/', '-', $name);
+
+ // reduce mailbox name to 100 chars
+ $name = substr($name, 0, 100);
+
+ $abs_name = $this->_mod_mailbox($name);
+ $a_mailbox_cache = $this->get_cache('mailboxes');
+
+ if (strlen($abs_name) && (!is_array($a_mailbox_cache) || !in_array($abs_name, $a_mailbox_cache)))
+ $result = iil_C_CreateFolder($this->conn, $abs_name);
+
+ // try to subscribe it
+ if ($result && $subscribe)
+ $this->subscribe($name);
+
+ return $result ? $name : FALSE;
+ }
+
+
+ /**
+ * Set a new name to an existing mailbox
+ *
+ * @param string Mailbox to rename (as utf-7 string)
+ * @param string New mailbox name (as utf-7 string)
+ * @return string Name of the renames mailbox, False on error
+ */
+ function rename_mailbox($mbox_name, $new_name)
+ {
+ $result = FALSE;
+
+ // replace backslashes
+ $name = preg_replace('/[\\\]+/', '-', $new_name);
+
+ // encode mailbox name and reduce it to 100 chars
+ $name = substr($new_name, 0, 100);
+
+ // make absolute path
+ $mailbox = $this->_mod_mailbox($mbox_name);
+ $abs_name = $this->_mod_mailbox($name);
+
+ // check if mailbox is subscribed
+ $a_subscribed = $this->_list_mailboxes();
+ $subscribed = in_array($mailbox, $a_subscribed);
+
+ // unsubscribe folder
+ if ($subscribed)
+ iil_C_UnSubscribe($this->conn, $mailbox);
+
+ if (strlen($abs_name))
+ $result = iil_C_RenameFolder($this->conn, $mailbox, $abs_name);
+
+ if ($result)
+ {
+ $delm = $this->get_hierarchy_delimiter();
+
+ // check if mailbox children are subscribed
+ foreach ($a_subscribed as $c_subscribed)
+ if (preg_match('/^'.preg_quote($mailbox.$delm, '/').'/', $c_subscribed))
+ {
+ iil_C_UnSubscribe($this->conn, $c_subscribed);
+ iil_C_Subscribe($this->conn, preg_replace('/^'.preg_quote($mailbox, '/').'/', $abs_name, $c_subscribed));
+ }
+
+ // clear cache
+ $this->clear_message_cache($mailbox.'.msg');
+ $this->clear_cache('mailboxes');
+ }
+
+ // try to subscribe it
+ if ($result && $subscribed)
+ iil_C_Subscribe($this->conn, $abs_name);
+
+ return $result ? $name : FALSE;
+ }
+
+
+ /**
+ * Remove mailboxes from server
+ *
+ * @param string Mailbox name
+ * @return boolean True on success
+ */
+ function delete_mailbox($mbox_name)
+ {
+ $deleted = FALSE;
+
+ if (is_array($mbox_name))
+ $a_mboxes = $mbox_name;
+ else if (is_string($mbox_name) && strlen($mbox_name))
+ $a_mboxes = explode(',', $mbox_name);
+
+ $all_mboxes = iil_C_ListMailboxes($this->conn, $this->_mod_mailbox($root), '*');
+
+ if (is_array($a_mboxes))
+ foreach ($a_mboxes as $mbox_name)
+ {
+ $mailbox = $this->_mod_mailbox($mbox_name);
+
+ // unsubscribe mailbox before deleting
+ iil_C_UnSubscribe($this->conn, $mailbox);
+
+ // send delete command to server
+ $result = iil_C_DeleteFolder($this->conn, $mailbox);
+ if ($result>=0)
+ $deleted = TRUE;
+
+ foreach ($all_mboxes as $c_mbox)
+ {
+ $regex = preg_quote($mailbox . $this->delimiter, '/');
+ $regex = '/^' . $regex . '/';
+ if (preg_match($regex, $c_mbox))
+ {
+ iil_C_UnSubscribe($this->conn, $c_mbox);
+ $result = iil_C_DeleteFolder($this->conn, $c_mbox);
+ if ($result>=0)
+ $deleted = TRUE;
+ }
+ }
+ }
+
+ // clear mailboxlist cache
+ if ($deleted)
+ {
+ $this->clear_message_cache($mailbox.'.msg');
+ $this->clear_cache('mailboxes');
+ }
+
+ return $deleted;
+ }
+
+
+ /**
+ * Create all folders specified as default
+ */
+ function create_default_folders()
+ {
+ $a_folders = iil_C_ListMailboxes($this->conn, $this->_mod_mailbox(''), '*');
+ $a_subscribed = iil_C_ListSubscribed($this->conn, $this->_mod_mailbox(''), '*');
+
+ // create default folders if they do not exist
+ foreach ($this->default_folders as $folder)
+ {
+ $abs_name = $this->_mod_mailbox($folder);
+ if (!in_array_nocase($abs_name, $a_folders))
+ $this->create_mailbox($folder, TRUE);
+ else if (!in_array_nocase($abs_name, $a_subscribed))
+ $this->subscribe($folder);
+ }
+ }
+
+
+
+ /* --------------------------------
+ * internal caching methods
+ * --------------------------------*/
+
+ /**
+ * @access private
+ */
+ function set_caching($set)
+ {
+ if ($set && is_object($this->db))
+ $this->caching_enabled = TRUE;
+ else
+ $this->caching_enabled = FALSE;
+ }
+
+ /**
+ * @access private
+ */
+ function get_cache($key)
+ {
+ // read cache
+ if (!isset($this->cache[$key]) && $this->caching_enabled)
+ {
+ $cache_data = $this->_read_cache_record('IMAP.'.$key);
+ $this->cache[$key] = strlen($cache_data) ? unserialize($cache_data) : FALSE;
+ }
+
+ return $this->cache[$key];
+ }
+
+ /**
+ * @access private
+ */
+ function update_cache($key, $data)
+ {
+ $this->cache[$key] = $data;
+ $this->cache_changed = TRUE;
+ $this->cache_changes[$key] = TRUE;
+ }
+
+ /**
+ * @access private
+ */
+ function write_cache()
+ {
+ if ($this->caching_enabled && $this->cache_changed)
+ {
+ foreach ($this->cache as $key => $data)
+ {
+ if ($this->cache_changes[$key])
+ $this->_write_cache_record('IMAP.'.$key, serialize($data));
+ }
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function clear_cache($key=NULL)
+ {
+ if (!$this->caching_enabled)
+ return;
+
+ if ($key===NULL)
+ {
+ foreach ($this->cache as $key => $data)
+ $this->_clear_cache_record('IMAP.'.$key);
+
+ $this->cache = array();
+ $this->cache_changed = FALSE;
+ $this->cache_changes = array();
+ }
+ else
+ {
+ $this->_clear_cache_record('IMAP.'.$key);
+ $this->cache_changes[$key] = FALSE;
+ unset($this->cache[$key]);
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _read_cache_record($key)
+ {
+ $cache_data = FALSE;
+
+ if ($this->db)
+ {
+ // get cached data from DB
+ $sql_result = $this->db->query(
+ "SELECT cache_id, data
+ FROM ".get_table_name('cache')."
+ WHERE user_id=?
+ AND cache_key=?",
+ $_SESSION['user_id'],
+ $key);
+
+ if ($sql_arr = $this->db->fetch_assoc($sql_result))
+ {
+ $cache_data = $sql_arr['data'];
+ $this->cache_keys[$key] = $sql_arr['cache_id'];
+ }
+ }
+
+ return $cache_data;
+ }
+
+ /**
+ * @access private
+ */
+ function _write_cache_record($key, $data)
+ {
+ if (!$this->db)
+ return FALSE;
+
+ // check if we already have a cache entry for this key
+ if (!isset($this->cache_keys[$key]))
+ {
+ $sql_result = $this->db->query(
+ "SELECT cache_id
+ FROM ".get_table_name('cache')."
+ WHERE user_id=?
+ AND cache_key=?",
+ $_SESSION['user_id'],
+ $key);
+
+ if ($sql_arr = $this->db->fetch_assoc($sql_result))
+ $this->cache_keys[$key] = $sql_arr['cache_id'];
+ else
+ $this->cache_keys[$key] = FALSE;
+ }
+
+ // update existing cache record
+ if ($this->cache_keys[$key])
+ {
+ $this->db->query(
+ "UPDATE ".get_table_name('cache')."
+ SET created=".$this->db->now().",
+ data=?
+ WHERE user_id=?
+ AND cache_key=?",
+ $data,
+ $_SESSION['user_id'],
+ $key);
+ }
+ // add new cache record
+ else
+ {
+ $this->db->query(
+ "INSERT INTO ".get_table_name('cache')."
+ (created, user_id, cache_key, data)
+ VALUES (".$this->db->now().", ?, ?, ?)",
+ $_SESSION['user_id'],
+ $key,
+ $data);
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _clear_cache_record($key)
+ {
+ $this->db->query(
+ "DELETE FROM ".get_table_name('cache')."
+ WHERE user_id=?
+ AND cache_key=?",
+ $_SESSION['user_id'],
+ $key);
+ }
+
+
+
+ /* --------------------------------
+ * message caching methods
+ * --------------------------------*/
+
+
+ /**
+ * Checks if the cache is up-to-date
+ *
+ * @param string Mailbox name
+ * @param string Internal cache key
+ * @return int -3 = off, -2 = incomplete, -1 = dirty
+ */
+ function check_cache_status($mailbox, $cache_key)
+ {
+ if (!$this->caching_enabled)
+ return -3;
+
+ $cache_index = $this->get_message_cache_index($cache_key, TRUE);
+ $msg_count = $this->_messagecount($mailbox);
+ $cache_count = count($cache_index);
+
+ // console("Cache check: $msg_count !== ".count($cache_index));
+
+ if ($cache_count==$msg_count)
+ {
+ // get highest index
+ $header = iil_C_FetchHeader($this->conn, $mailbox, "$msg_count");
+ $cache_uid = array_pop($cache_index);
+
+ // uids of highest message matches -> cache seems OK
+ if ($cache_uid == $header->uid)
+ return 1;
+
+ // cache is dirty
+ return -1;
+ }
+ // if cache count differs less than 10% report as dirty
+ else if (abs($msg_count - $cache_count) < $msg_count/10)
+ return -1;
+ else
+ return -2;
+ }
+
+ /**
+ * @access private
+ */
+ function get_message_cache($key, $from, $to, $sort_field, $sort_order)
+ {
+ $cache_key = "$key:$from:$to:$sort_field:$sort_order";
+ $db_header_fields = array('idx', 'uid', 'subject', 'from', 'to', 'cc', 'date', 'size');
+
+ if (!in_array($sort_field, $db_header_fields))
+ $sort_field = 'idx';
+
+ if ($this->caching_enabled && !isset($this->cache[$cache_key]))
+ {
+ $this->cache[$cache_key] = array();
+ $sql_result = $this->db->limitquery(
+ "SELECT idx, uid, headers
+ FROM ".get_table_name('messages')."
+ WHERE user_id=?
+ AND cache_key=?
+ ORDER BY ".$this->db->quoteIdentifier($sort_field)." ".
+ strtoupper($sort_order),
+ $from,
+ $to-$from,
+ $_SESSION['user_id'],
+ $key);
+
+ while ($sql_arr = $this->db->fetch_assoc($sql_result))
+ {
+ $uid = $sql_arr['uid'];
+ $this->cache[$cache_key][$uid] = unserialize($sql_arr['headers']);
+
+ // featch headers if unserialize failed
+ if (empty($this->cache[$cache_key][$uid]))
+ $this->cache[$cache_key][$uid] = iil_C_FetchHeader($this->conn, preg_replace('/.msg$/', '', $key), $uid, true);
+ }
+ }
+
+ return $this->cache[$cache_key];
+ }
+
+ /**
+ * @access private
+ */
+ function &get_cached_message($key, $uid, $struct=false)
+ {
+ $internal_key = '__single_msg';
+
+ if ($this->caching_enabled && (!isset($this->cache[$internal_key][$uid]) ||
+ ($struct && empty($this->cache[$internal_key][$uid]->structure))))
+ {
+ $sql_select = "idx, uid, headers" . ($struct ? ", structure" : '');
+ $sql_result = $this->db->query(
+ "SELECT $sql_select
+ FROM ".get_table_name('messages')."
+ WHERE user_id=?
+ AND cache_key=?
+ AND uid=?",
+ $_SESSION['user_id'],
+ $key,
+ $uid);
+
+ if ($sql_arr = $this->db->fetch_assoc($sql_result))
+ {
+ $this->cache[$internal_key][$uid] = unserialize($sql_arr['headers']);
+ if (is_object($this->cache[$internal_key][$uid]) && !empty($sql_arr['structure']))
+ $this->cache[$internal_key][$uid]->structure = unserialize($sql_arr['structure']);
+ }
+ }
+
+ return $this->cache[$internal_key][$uid];
+ }
+
+ /**
+ * @access private
+ */
+ function get_message_cache_index($key, $force=FALSE, $sort_col='idx', $sort_order='ASC')
+ {
+ static $sa_message_index = array();
+
+ // empty key -> empty array
+ if (!$this->caching_enabled || empty($key))
+ return array();
+
+ if (!empty($sa_message_index[$key]) && !$force)
+ return $sa_message_index[$key];
+
+ $sa_message_index[$key] = array();
+ $sql_result = $this->db->query(
+ "SELECT idx, uid
+ FROM ".get_table_name('messages')."
+ WHERE user_id=?
+ AND cache_key=?
+ ORDER BY ".$this->db->quote_identifier($sort_col)." ".$sort_order,
+ $_SESSION['user_id'],
+ $key);
+
+ while ($sql_arr = $this->db->fetch_assoc($sql_result))
+ $sa_message_index[$key][$sql_arr['idx']] = $sql_arr['uid'];
+
+ return $sa_message_index[$key];
+ }
+
+ /**
+ * @access private
+ */
+ function add_message_cache($key, $index, $headers, $struct=null)
+ {
+ if (empty($key) || !is_object($headers) || empty($headers->uid))
+ return;
+
+ // add to internal (fast) cache
+ $this->cache['__single_msg'][$headers->uid] = $headers;
+ $this->cache['__single_msg'][$headers->uid]->structure = $struct;
+
+ // no further caching
+ if (!$this->caching_enabled)
+ return;
+
+ // check for an existing record (probly headers are cached but structure not)
+ $sql_result = $this->db->query(
+ "SELECT message_id
+ FROM ".get_table_name('messages')."
+ WHERE user_id=?
+ AND cache_key=?
+ AND uid=?
+ AND del<>1",
+ $_SESSION['user_id'],
+ $key,
+ $headers->uid);
+
+ // update cache record
+ if ($sql_arr = $this->db->fetch_assoc($sql_result))
+ {
+ $this->db->query(
+ "UPDATE ".get_table_name('messages')."
+ SET idx=?, headers=?, structure=?
+ WHERE message_id=?",
+ $index,
+ serialize($headers),
+ is_object($struct) ? serialize($struct) : NULL,
+ $sql_arr['message_id']
+ );
+ }
+ else // insert new record
+ {
+ $this->db->query(
+ "INSERT INTO ".get_table_name('messages')."
+ (user_id, del, cache_key, created, idx, uid, subject, ".$this->db->quoteIdentifier('from').", ".$this->db->quoteIdentifier('to').", cc, date, size, headers, structure)
+ VALUES (?, 0, ?, ".$this->db->now().", ?, ?, ?, ?, ?, ?, ".$this->db->fromunixtime($headers->timestamp).", ?, ?, ?)",
+ $_SESSION['user_id'],
+ $key,
+ $index,
+ $headers->uid,
+ (string)substr($this->decode_header($headers->subject, TRUE), 0, 128),
+ (string)substr($this->decode_header($headers->from, TRUE), 0, 128),
+ (string)substr($this->decode_header($headers->to, TRUE), 0, 128),
+ (string)substr($this->decode_header($headers->cc, TRUE), 0, 128),
+ (int)$headers->size,
+ serialize($headers),
+ is_object($struct) ? serialize($struct) : NULL
+ );
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function remove_message_cache($key, $index)
+ {
+ if (!$this->caching_enabled)
+ return;
+
+ $this->db->query(
+ "DELETE FROM ".get_table_name('messages')."
+ WHERE user_id=?
+ AND cache_key=?
+ AND idx=?",
+ $_SESSION['user_id'],
+ $key,
+ $index);
+ }
+
+ /**
+ * @access private
+ */
+ function clear_message_cache($key, $start_index=1)
+ {
+ if (!$this->caching_enabled)
+ return;
+
+ $this->db->query(
+ "DELETE FROM ".get_table_name('messages')."
+ WHERE user_id=?
+ AND cache_key=?
+ AND idx>=?",
+ $_SESSION['user_id'],
+ $key,
+ $start_index);
+ }
+
+
+
+
+ /* --------------------------------
+ * encoding/decoding methods
+ * --------------------------------*/
+
+ /**
+ * Split an address list into a structured array list
+ *
+ * @param string Input string
+ * @param int List only this number of addresses
+ * @param boolean Decode address strings
+ * @return array Indexed list of addresses
+ */
+ function decode_address_list($input, $max=null, $decode=true)
+ {
+ $a = $this->_parse_address_list($input, $decode);
+ $out = array();
+ // Special chars as defined by RFC 822 need to in quoted string (or escaped).
+ $special_chars = '[\(\)\<\>\\\.\[\]@,;:"]';
+
+ if (!is_array($a))
+ return $out;
+
+ $c = count($a);
+ $j = 0;
+
+ foreach ($a as $val)
+ {
+ $j++;
+ $address = $val['address'];
+ $name = preg_replace(array('/^[\'"]/', '/[\'"]$/'), '', trim($val['name']));
+ if ($name && $address && $name != $address)
+ $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address);
+ else if ($address)
+ $string = $address;
+ else if ($name)
+ $string = $name;
+
+ $out[$j] = array('name' => $name,
+ 'mailto' => $address,
+ 'string' => $string);
+
+ if ($max && $j==$max)
+ break;
+ }
+
+ return $out;
+ }
+
+
+ /**
+ * Decode a message header value
+ *
+ * @param string Header value
+ * @param boolean Remove quotes if necessary
+ * @return string Decoded string
+ */
+ function decode_header($input, $remove_quotes=FALSE)
+ {
+ $str = rcube_imap::decode_mime_string((string)$input, $this->default_charset);
+ if ($str{0}=='"' && $remove_quotes)
+ $str = str_replace('"', '', $str);
+
+ return $str;
+ }
+
+
+ /**
+ * Decode a mime-encoded string to internal charset
+ *
+ * @param string Header value
+ * @param string Fallback charset if none specified
+ * @return string Decoded string
+ * @static
+ */
+ function decode_mime_string($input, $fallback=null)
+ {
+ $out = '';
+
+ $pos = strpos($input, '=?');
+ if ($pos !== false)
+ {
+ // rfc: all line breaks or other characters not found
+ // in the Base64 Alphabet must be ignored by decoding software
+ // delete all blanks between MIME-lines, differently we can
+ // receive unnecessary blanks and broken utf-8 symbols
+ $input = preg_replace("/\?=\s+=\?/", '?==?', $input);
+
+ $out = substr($input, 0, $pos);
+
+ $end_cs_pos = strpos($input, "?", $pos+2);
+ $end_en_pos = strpos($input, "?", $end_cs_pos+1);
+ $end_pos = strpos($input, "?=", $end_en_pos+1);
+
+ $encstr = substr($input, $pos+2, ($end_pos-$pos-2));
+ $rest = substr($input, $end_pos+2);
+
+ $out .= rcube_imap::_decode_mime_string_part($encstr);
+ $out .= rcube_imap::decode_mime_string($rest, $fallback);
+
+ return $out;
+ }
+
+ // no encoding information, use fallback
+ return rcube_charset_convert($input,
+ !empty($fallback) ? $fallback : rcmail::get_instance()->config->get('default_charset', 'ISO-8859-1'));
+ }
+
+
+ /**
+ * Decode a part of a mime-encoded string
+ *
+ * @access private
+ */
+ function _decode_mime_string_part($str)
+ {
+ $a = explode('?', $str);
+ $count = count($a);
+
+ // should be in format "charset?encoding?base64_string"
+ if ($count >= 3)
+ {
+ for ($i=2; $i<$count; $i++)
+ $rest.=$a[$i];
+
+ if (($a[1]=="B")||($a[1]=="b"))
+ $rest = base64_decode($rest);
+ else if (($a[1]=="Q")||($a[1]=="q"))
+ {
+ $rest = str_replace("_", " ", $rest);
+ $rest = quoted_printable_decode($rest);
+ }
+
+ return rcube_charset_convert($rest, $a[0]);
+ }
+ else
+ return $str; // we dont' know what to do with this
+ }
+
+
+ /**
+ * Decode a mime part
+ *
+ * @param string Input string
+ * @param string Part encoding
+ * @return string Decoded string
+ * @access private
+ */
+ function mime_decode($input, $encoding='7bit')
+ {
+ switch (strtolower($encoding))
+ {
+ case '7bit':
+ return $input;
+ break;
+
+ case 'quoted-printable':
+ return quoted_printable_decode($input);
+ break;
+
+ case 'base64':
+ return base64_decode($input);
+ break;
+
+ default:
+ return $input;
+ }
+ }
+
+
+ /**
+ * Convert body charset to UTF-8 according to the ctype_parameters
+ *
+ * @param string Part body to decode
+ * @param string Charset to convert from
+ * @return string Content converted to internal charset
+ */
+ function charset_decode($body, $ctype_param)
+ {
+ if (is_array($ctype_param) && !empty($ctype_param['charset']))
+ return rcube_charset_convert($body, $ctype_param['charset']);
+
+ // defaults to what is specified in the class header
+ return rcube_charset_convert($body, $this->default_charset);
+ }
+
+
+ /**
+ * Translate UID to message ID
+ *
+ * @param int Message UID
+ * @param string Mailbox name
+ * @return int Message ID
+ */
+ function get_id($uid, $mbox_name=NULL)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ return $this->_uid2id($uid, $mailbox);
+ }
+
+
+ /**
+ * Translate message number to UID
+ *
+ * @param int Message ID
+ * @param string Mailbox name
+ * @return int Message UID
+ */
+ function get_uid($id,$mbox_name=NULL)
+ {
+ $mailbox = $mbox_name ? $this->_mod_mailbox($mbox_name) : $this->mailbox;
+ return $this->_id2uid($id, $mailbox);
+ }
+
+
+
+ /* --------------------------------
+ * private methods
+ * --------------------------------*/
+
+
+ /**
+ * @access private
+ */
+ function _mod_mailbox($mbox_name, $mode='in')
+ {
+ if ((!empty($this->root_ns) && $this->root_ns == $mbox_name) || $mbox_name == 'INBOX')
+ return $mbox_name;
+
+ if (!empty($this->root_dir) && $mode=='in')
+ $mbox_name = $this->root_dir.$this->delimiter.$mbox_name;
+ else if (strlen($this->root_dir) && $mode=='out')
+ $mbox_name = substr($mbox_name, strlen($this->root_dir)+1);
+
+ return $mbox_name;
+ }
+
+ /**
+ * Validate the given input and save to local properties
+ * @access private
+ */
+ function _set_sort_order($sort_field, $sort_order)
+ {
+ if ($sort_field != null)
+ $this->sort_field = asciiwords($sort_field);
+ if ($sort_order != null)
+ $this->sort_order = strtoupper($sort_order) == 'DESC' ? 'DESC' : 'ASC';
+ }
+
+ /**
+ * Sort mailboxes first by default folders and then in alphabethical order
+ * @access private
+ */
+ function _sort_mailbox_list($a_folders)
+ {
+ $a_out = $a_defaults = $folders = array();
+
+ $delimiter = $this->get_hierarchy_delimiter();
+
+ // find default folders and skip folders starting with '.'
+ foreach ($a_folders as $i => $folder)
+ {
+ if ($folder{0}=='.')
+ continue;
+
+ if (($p = array_search(strtolower($folder), $this->default_folders_lc)) !== false && !$a_defaults[$p])
+ $a_defaults[$p] = $folder;
+ else
+ $folders[$folder] = rc_strtolower(rcube_charset_convert($folder, 'UTF-7'));
+ }
+
+ asort($folders, SORT_LOCALE_STRING);
+ ksort($a_defaults);
+
+ $folders = array_merge($a_defaults, array_keys($folders));
+
+ // finally we must rebuild the list to move
+ // subfolders of default folders to their place
+ while (list($key, $folder) = each($folders)) {
+ $a_out[] = $folder;
+ unset($folders[$key]);
+ if (in_array(strtolower($folder), $this->default_folders_lc)) {
+ foreach ($folders as $idx => $f) {
+ if (strpos($f, $folder.$delimiter) === 0) {
+ $a_out[] = $f;
+ unset($folders[$idx]);
+ }
+ }
+ reset($folders);
+ }
+ }
+
+ return $a_out;
+ }
+
+ /**
+ * @access private
+ */
+ function _uid2id($uid, $mbox_name=NULL)
+ {
+ if (!$mbox_name)
+ $mbox_name = $this->mailbox;
+
+ if (!isset($this->uid_id_map[$mbox_name][$uid]))
+ $this->uid_id_map[$mbox_name][$uid] = iil_C_UID2ID($this->conn, $mbox_name, $uid);
+
+ return $this->uid_id_map[$mbox_name][$uid];
+ }
+
+ /**
+ * @access private
+ */
+ function _id2uid($id, $mbox_name=NULL)
+ {
+ if (!$mbox_name)
+ $mbox_name = $this->mailbox;
+
+ $index = array_flip((array)$this->uid_id_map[$mbox_name]);
+ if (isset($index[$id]))
+ $uid = $index[$id];
+ else
+ {
+ $uid = iil_C_ID2UID($this->conn, $mbox_name, $id);
+ $this->uid_id_map[$mbox_name][$uid] = $id;
+ }
+
+ return $uid;
+ }
+
+
+ /**
+ * Parse string or array of server capabilities and put them in internal array
+ * @access private
+ */
+ function _parse_capability($caps)
+ {
+ if (!is_array($caps))
+ $cap_arr = explode(' ', $caps);
+ else
+ $cap_arr = $caps;
+
+ foreach ($cap_arr as $cap)
+ {
+ if ($cap=='CAPABILITY')
+ continue;
+
+ if (strpos($cap, '=')>0)
+ {
+ list($key, $value) = explode('=', $cap);
+ if (!is_array($this->capabilities[$key]))
+ $this->capabilities[$key] = array();
+
+ $this->capabilities[$key][] = $value;
+ }
+ else
+ $this->capabilities[$cap] = TRUE;
+ }
+ }
+
+
+ /**
+ * Subscribe/unsubscribe a list of mailboxes and update local cache
+ * @access private
+ */
+ function _change_subscription($a_mboxes, $mode)
+ {
+ $updated = FALSE;
+
+ if (is_array($a_mboxes))
+ foreach ($a_mboxes as $i => $mbox_name)
+ {
+ $mailbox = $this->_mod_mailbox($mbox_name);
+ $a_mboxes[$i] = $mailbox;
+
+ if ($mode=='subscribe')
+ $result = iil_C_Subscribe($this->conn, $mailbox);
+ else if ($mode=='unsubscribe')
+ $result = iil_C_UnSubscribe($this->conn, $mailbox);
+
+ if ($result>=0)
+ $updated = TRUE;
+ }
+
+ // get cached mailbox list
+ if ($updated)
+ {
+ $a_mailbox_cache = $this->get_cache('mailboxes');
+ if (!is_array($a_mailbox_cache))
+ return $updated;
+
+ // modify cached list
+ if ($mode=='subscribe')
+ $a_mailbox_cache = array_merge($a_mailbox_cache, $a_mboxes);
+ else if ($mode=='unsubscribe')
+ $a_mailbox_cache = array_diff($a_mailbox_cache, $a_mboxes);
+
+ // write mailboxlist to cache
+ $this->update_cache('mailboxes', $this->_sort_mailbox_list($a_mailbox_cache));
+ }
+
+ return $updated;
+ }
+
+
+ /**
+ * Increde/decrese messagecount for a specific mailbox
+ * @access private
+ */
+ function _set_messagecount($mbox_name, $mode, $increment)
+ {
+ $a_mailbox_cache = FALSE;
+ $mailbox = $mbox_name ? $mbox_name : $this->mailbox;
+ $mode = strtoupper($mode);
+
+ $a_mailbox_cache = $this->get_cache('messagecount');
+
+ if (!is_array($a_mailbox_cache[$mailbox]) || !isset($a_mailbox_cache[$mailbox][$mode]) || !is_numeric($increment))
+ return FALSE;
+
+ // add incremental value to messagecount
+ $a_mailbox_cache[$mailbox][$mode] += $increment;
+
+ // there's something wrong, delete from cache
+ if ($a_mailbox_cache[$mailbox][$mode] < 0)
+ unset($a_mailbox_cache[$mailbox][$mode]);
+
+ // write back to cache
+ $this->update_cache('messagecount', $a_mailbox_cache);
+
+ return TRUE;
+ }
+
+
+ /**
+ * Remove messagecount of a specific mailbox from cache
+ * @access private
+ */
+ function _clear_messagecount($mbox_name='')
+ {
+ $a_mailbox_cache = FALSE;
+ $mailbox = $mbox_name ? $mbox_name : $this->mailbox;
+
+ $a_mailbox_cache = $this->get_cache('messagecount');
+
+ if (is_array($a_mailbox_cache[$mailbox]))
+ {
+ unset($a_mailbox_cache[$mailbox]);
+ $this->update_cache('messagecount', $a_mailbox_cache);
+ }
+ }
+
+
+ /**
+ * Split RFC822 header string into an associative array
+ * @access private
+ */
+ function _parse_headers($headers)
+ {
+ $a_headers = array();
+ $lines = explode("\n", $headers);
+ $c = count($lines);
+ for ($i=0; $i<$c; $i++)
+ {
+ if ($p = strpos($lines[$i], ': '))
+ {
+ $field = strtolower(substr($lines[$i], 0, $p));
+ $value = trim(substr($lines[$i], $p+1));
+ if (!empty($value))
+ $a_headers[$field] = $value;
+ }
+ }
+
+ return $a_headers;
+ }
+
+
+ /**
+ * @access private
+ */
+ function _parse_address_list($str, $decode=true)
+ {
+ // remove any newlines and carriage returns before
+ $a = $this->_explode_quoted_string('[,;]', preg_replace( "/[\r\n]/", " ", $str));
+ $result = array();
+
+ foreach ($a as $key => $val)
+ {
+ $val = preg_replace("/([\"\w])</", "$1 <", $val);
+ $sub_a = $this->_explode_quoted_string(' ', $decode ? $this->decode_header($val) : $val);
+ $result[$key]['name'] = '';
+
+ foreach ($sub_a as $k => $v)
+ {
+ if (strpos($v, '@') > 0)
+ $result[$key]['address'] = str_replace('<', '', str_replace('>', '', $v));
+ else
+ $result[$key]['name'] .= (empty($result[$key]['name'])?'':' ').str_replace("\"",'',stripslashes($v));
+ }
+
+ if (empty($result[$key]['name']))
+ $result[$key]['name'] = $result[$key]['address'];
+ }
+
+ return $result;
+ }
+
+
+ /**
+ * @access private
+ */
+ function _explode_quoted_string($delimiter, $string)
+ {
+ $result = array();
+ $strlen = strlen($string);
+ for ($q=$p=$i=0; $i < $strlen; $i++)
+ {
+ if ($string{$i} == "\"" && $string{$i-1} != "\\")
+ $q = $q ? false : true;
+ else if (!$q && preg_match("/$delimiter/", $string{$i}))
+ {
+ $result[] = substr($string, $p, $i - $p);
+ $p = $i + 1;
+ }
+ }
+
+ $result[] = substr($string, $p);
+ return $result;
+ }
+
+} // end class rcube_imap
+
+
+/**
+ * Class representing a message part
+ *
+ * @package Mail
+ */
+class rcube_message_part
+{
+ var $mime_id = '';
+ var $ctype_primary = 'text';
+ var $ctype_secondary = 'plain';
+ var $mimetype = 'text/plain';
+ var $disposition = '';
+ var $filename = '';
+ var $encoding = '8bit';
+ var $charset = '';
+ var $size = 0;
+ var $headers = array();
+ var $d_parameters = array();
+ var $ctype_parameters = array();
+
+}
+
+
+/**
+ * Class for sorting an array of iilBasicHeader objects in a predetermined order.
+ *
+ * @package Mail
+ * @author Eric Stadtherr
+ */
+class rcube_header_sorter
+{
+ var $sequence_numbers = array();
+
+ /**
+ * Set the predetermined sort order.
+ *
+ * @param array Numerically indexed array of IMAP message sequence numbers
+ */
+ function set_sequence_numbers($seqnums)
+ {
+ $this->sequence_numbers = array_flip($seqnums);
+ }
+
+ /**
+ * Sort the array of header objects
+ *
+ * @param array Array of iilBasicHeader objects indexed by UID
+ */
+ function sort_headers(&$headers)
+ {
+ /*
+ * uksort would work if the keys were the sequence number, but unfortunately
+ * the keys are the UIDs. We'll use uasort instead and dereference the value
+ * to get the sequence number (in the "id" field).
+ *
+ * uksort($headers, array($this, "compare_seqnums"));
+ */
+ uasort($headers, array($this, "compare_seqnums"));
+ }
+
+ /**
+ * Sort method called by uasort()
+ */
+ function compare_seqnums($a, $b)
+ {
+ // First get the sequence number from the header object (the 'id' field).
+ $seqa = $a->id;
+ $seqb = $b->id;
+
+ // then find each sequence number in my ordered list
+ $posa = isset($this->sequence_numbers[$seqa]) ? intval($this->sequence_numbers[$seqa]) : -1;
+ $posb = isset($this->sequence_numbers[$seqb]) ? intval($this->sequence_numbers[$seqb]) : -1;
+
+ // return the relative position as the comparison value
+ return $posa - $posb;
+ }
+}
+
+
+/**
+ * Add quoted-printable encoding to a given string
+ *
+ * @param string String to encode
+ * @param int Add new line after this number of characters
+ * @param boolean True if spaces should be converted into =20
+ * @return string Encoded string
+ */
+function quoted_printable_encode($input, $line_max=76, $space_conv=false)
+ {
+ $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
+ $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
+ $eol = "\r\n";
+ $escape = "=";
+ $output = "";
+
+ while( list(, $line) = each($lines))
+ {
+ //$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary
+ $linlen = strlen($line);
+ $newline = "";
+ for($i = 0; $i < $linlen; $i++)
+ {
+ $c = substr( $line, $i, 1 );
+ $dec = ord( $c );
+ if ( ( $i == 0 ) && ( $dec == 46 ) ) // convert first point in the line into =2E
+ {
+ $c = "=2E";
+ }
+ if ( $dec == 32 )
+ {
+ if ( $i == ( $linlen - 1 ) ) // convert space at eol only
+ {
+ $c = "=20";
+ }
+ else if ( $space_conv )
+ {
+ $c = "=20";
+ }
+ }
+ else if ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) // always encode "\t", which is *not* required
+ {
+ $h2 = floor($dec/16);
+ $h1 = floor($dec%16);
+ $c = $escape.$hex["$h2"].$hex["$h1"];
+ }
+
+ if ( (strlen($newline) + strlen($c)) >= $line_max ) // CRLF is not counted
+ {
+ $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay
+ $newline = "";
+ // check if newline first character will be point or not
+ if ( $dec == 46 )
+ {
+ $c = "=2E";
+ }
+ }
+ $newline .= $c;
+ } // end of for
+ $output .= $newline.$eol;
+ } // end of while
+
+ return trim($output);
+ }
+
+
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_json_output.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Class to handle HTML page output using a skin template. |
+ | Extends rcube_html_page class from rcube_shared.inc |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: $
+
+*/
+
+
+/**
+ * View class to produce JSON responses
+ *
+ * @package View
+ */
+class rcube_json_output
+{
+ private $config;
+ private $charset = 'UTF-8';
+ private $env = array();
+ private $texts = array();
+ private $commands = array();
+
+ public $task = '';
+ public $ajax_call = true;
+
+
+ /**
+ * Constructor
+ */
+ public function __construct($task)
+ {
+ $this->task = $task;
+ $this->config = rcmail::get_instance()->config;
+ }
+
+
+ /**
+ * Set environment variable
+ *
+ * @param string Property name
+ * @param mixed Property value
+ */
+ public function set_env($name, $value)
+ {
+ $this->env[$name] = $value;
+ }
+
+ /**
+ * @ignore
+ */
+ public function set_pagetitle($title)
+ {
+ $name = $this->config->get('product_name');
+ $this->command('set_pagetitle', JQ(empty($name) ? $title : $name.' :: '.$title));
+ }
+
+ /**
+ * @ignore
+ */
+ function set_charset($charset)
+ {
+ // ignore: $this->charset = $charset;
+ }
+
+
+ /**
+ * Get charset for output
+ *
+ * @return string Output charset
+ */
+ function get_charset()
+ {
+ return $this->charset;
+ }
+
+
+ /**
+ * Register a template object handler
+ *
+ * @param string Object name
+ * @param string Function name to call
+ * @return void
+ */
+ public function add_handler($obj, $func)
+ {
+ // ignore
+ }
+
+ /**
+ * Register a list of template object handlers
+ *
+ * @param array Hash array with object=>handler pairs
+ * @return void
+ */
+ public function add_handlers($arr)
+ {
+ // ignore
+ }
+
+
+ /**
+ * Call a client method
+ *
+ * @param string Method to call
+ * @param ... Additional arguments
+ */
+ public function command()
+ {
+ $this->commands[] = func_get_args();
+ }
+
+
+ /**
+ * Add a localized label to the client environment
+ */
+ public function add_label()
+ {
+ $arg_list = func_get_args();
+ foreach ($arg_list as $i => $name) {
+ $this->texts[$name] = rcube_label($name);
+ }
+ }
+
+
+ /**
+ * Invoke display_message command
+ *
+ * @param string Message to display
+ * @param string Message type [notice|confirm|error]
+ * @param array Key-value pairs to be replaced in localized text
+ * @uses self::command()
+ */
+ public function show_message($message, $type='notice', $vars=null)
+ {
+ $this->command(
+ 'display_message',
+ rcube_label(array('name' => $message, 'vars' => $vars)),
+ $type
+ );
+ }
+
+ /**
+ * Delete all stored env variables and commands
+ */
+ public public function reset()
+ {
+ $this->env = array();
+ $this->texts = array();
+ $this->commands = array();
+ }
+
+
+ /**
+ * Send an AJAX response to the client.
+ */
+ public function send()
+ {
+ $this->remote_response();
+ exit;
+ }
+
+
+ /**
+ * Send an AJAX response with executable JS code
+ *
+ * @param string Additional JS code
+ * @param boolean True if output buffer should be flushed
+ * @return void
+ * @deprecated
+ */
+ public function remote_response($add='', $flush=false)
+ {
+ static $s_header_sent = false;
+
+ if (!$s_header_sent) {
+ $s_header_sent = true;
+ send_nocacheing_headers();
+ header('Content-Type: application/x-javascript; charset=' . $this->get_charset());
+ print '/** ajax response ['.date('d/M/Y h:i:s O')."] **/\n";
+ }
+
+ // unset default env vars
+ unset($this->env['task'], $this->env['action'], $this->env['comm_path']);
+
+ // send response code
+ echo $this->get_js_commands() . $add;
+
+ // flush the output buffer
+ if ($flush)
+ flush();
+ }
+
+
+ /**
+ * Return executable javascript code for all registered commands
+ *
+ * @return string $out
+ */
+ private function get_js_commands()
+ {
+ $out = '';
+
+ if (sizeof($this->env))
+ $out .= 'this.set_env('.json_serialize($this->env).");\n";
+
+ foreach($this->texts as $name => $text) {
+ $out .= sprintf("this.add_label('%s', '%s');\n", $name, JQ($text));
+ }
+
+ foreach ($this->commands as $i => $args) {
+ $method = array_shift($args);
+ foreach ($args as $i => $arg) {
+ $args[$i] = json_serialize($arg);
+ }
+
+ $out .= sprintf(
+ "this.%s(%s);\n",
+ preg_replace('/^parent\./', '', $method),
+ implode(',', $args)
+ );
+ }
+
+ return $out;
+ }
+}
+
+
+++ /dev/null
-<?php
-/*
- +-----------------------------------------------------------------------+
- | program/include/rcube_ldap.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2006-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Interface to an LDAP address directory |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: rcube_ldap.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-
-/**
- * Model class to access an LDAP address directory
- *
- * @package Addressbook
- */
-class rcube_ldap
-{
- var $conn;
- var $prop = array();
- var $fieldmap = array();
-
- var $filter = '';
- var $result = null;
- var $ldap_result = null;
- var $sort_col = '';
-
- /** public properties */
- var $primary_key = 'ID';
- var $readonly = true;
- var $list_page = 1;
- var $page_size = 10;
- var $ready = false;
-
-
- /**
- * Object constructor
- *
- * @param array LDAP connection properties
- * @param integer User-ID
- */
- function __construct($p)
- {
- $this->prop = $p;
-
- foreach ($p as $prop => $value)
- if (preg_match('/^(.+)_field$/', $prop, $matches))
- $this->fieldmap[$matches[1]] = $value;
-
- $this->connect();
- }
-
- /**
- * PHP 4 object constructor
- *
- * @see rcube_ldap::__construct()
- */
- function rcube_ldap($p)
- {
- $this->__construct($p);
- }
-
-
- /**
- * Establish a connection to the LDAP server
- */
- function connect()
- {
- if (!function_exists('ldap_connect'))
- raise_error(array('type' => 'ldap', 'message' => "No ldap support in this installation of PHP"), true);
-
- if (is_resource($this->conn))
- return true;
-
- if (!is_array($this->prop['hosts']))
- $this->prop['hosts'] = array($this->prop['hosts']);
-
- if (empty($this->prop['ldap_version']))
- $this->prop['ldap_version'] = 3;
-
- foreach ($this->prop['hosts'] as $host)
- {
- if ($lc = @ldap_connect($host, $this->prop['port']))
- {
- ldap_set_option($lc, LDAP_OPT_PROTOCOL_VERSION, $this->prop['ldap_version']);
- $this->prop['host'] = $host;
- $this->conn = $lc;
- break;
- }
- }
-
- if (is_resource($this->conn))
- {
- $this->ready = true;
- if (!empty($this->prop['bind_dn']) && !empty($this->prop['bind_pass']))
- $this->ready = $this->bind($this->prop['bind_dn'], $this->prop['bind_pass']);
- }
- else
- raise_error(array('type' => 'ldap', 'message' => "Could not connect to any LDAP server, tried $host:{$this->prop[port]} last"), true);
- }
-
-
- /**
- * Bind connection with DN and password
- *
- * @param string Bind DN
- * @param string Bind password
- * @return boolean True on success, False on error
- */
- function bind($dn, $pass)
- {
- if (!$this->conn) {
- return false;
- }
-
- if (ldap_bind($this->conn, $dn, $pass)) {
- return true;
- }
-
- raise_error(array(
- 'code' => ldap_errno($this->conn),
- 'type' => 'ldap',
- 'message' => "Bind failed for dn=$dn: ".ldap_error($this->conn)),
- true);
-
- return false;
- }
-
-
- /**
- * Close connection to LDAP server
- */
- function close()
- {
- if ($this->conn)
- {
- @ldap_unbind($this->conn);
- $this->conn = null;
- }
- }
-
-
- /**
- * Set internal list page
- *
- * @param number Page number to list
- * @access public
- */
- function set_page($page)
- {
- $this->list_page = (int)$page;
- }
-
-
- /**
- * Set internal page size
- *
- * @param number Number of messages to display on one page
- * @access public
- */
- function set_pagesize($size)
- {
- $this->page_size = (int)$size;
- }
-
-
- /**
- * Save a search string for future listings
- *
- * @param string Filter string
- */
- function set_search_set($filter)
- {
- $this->filter = $filter;
- }
-
-
- /**
- * Getter for saved search properties
- *
- * @return mixed Search properties used by this class
- */
- function get_search_set()
- {
- return $this->filter;
- }
-
-
- /**
- * Reset all saved results and search parameters
- */
- function reset()
- {
- $this->result = null;
- $this->ldap_result = null;
- $this->filter = '';
- }
-
-
- /**
- * List the current set of contact records
- *
- * @param array List of cols to show
- * @param int Only return this number of records (not implemented)
- * @return array Indexed list of contact records, each a hash array
- */
- function list_records($cols=null, $subset=0)
- {
- // add general filter to query
- if (!empty($this->prop['filter']))
- {
- $filter = $this->prop['filter'];
- $this->set_search_set($filter);
- }
-
- // exec LDAP search if no result resource is stored
- if ($this->conn && !$this->ldap_result)
- $this->_exec_search();
-
- // count contacts for this user
- $this->result = $this->count();
-
- // we have a search result resource
- if ($this->ldap_result && $this->result->count > 0)
- {
- if ($this->sort_col && $this->prop['scope'] !== "base")
- @ldap_sort($this->conn, $this->ldap_result, $this->sort_col);
-
- $entries = ldap_get_entries($this->conn, $this->ldap_result);
- for ($i = $this->result->first; $i < min($entries['count'], $this->result->first + $this->page_size); $i++)
- $this->result->add($this->_ldap2result($entries[$i]));
- }
-
- return $this->result;
- }
-
-
- /**
- * Search contacts
- *
- * @param array List of fields to search in
- * @param string Search value
- * @param boolean True if results are requested, False if count only
- * @return array Indexed list of contact records and 'count' value
- */
- function search($fields, $value, $strict=false, $select=true)
- {
- // special treatment for ID-based search
- if ($fields == 'ID' || $fields == $this->primary_key)
- {
- $ids = explode(',', $value);
- $result = new rcube_result_set();
- foreach ($ids as $id)
- if ($rec = $this->get_record($id, true))
- {
- $result->add($rec);
- $result->count++;
- }
-
- return $result;
- }
-
- $filter = '(|';
- $wc = !$strict && $this->prop['fuzzy_search'] ? '*' : '';
- if (is_array($this->prop['search_fields']))
- {
- foreach ($this->prop['search_fields'] as $k => $field)
- $filter .= "($field=$wc" . rcube_ldap::quote_string($value) . "$wc)";
- }
- else
- {
- foreach ((array)$fields as $field)
- if ($f = $this->_map_field($field))
- $filter .= "($f=$wc" . rcube_ldap::quote_string($value) . "$wc)";
- }
- $filter .= ')';
-
- // avoid double-wildcard if $value is empty
- $filter = preg_replace('/\*+/', '*', $filter);
-
- // add general filter to query
- if (!empty($this->prop['filter']))
- $filter = '(&(' . preg_replace('/^\(|\)$/', '', $this->prop['filter']) . ')' . $filter . ')';
-
- // set filter string and execute search
- $this->set_search_set($filter);
- $this->_exec_search();
-
- if ($select)
- $this->list_records();
- else
- $this->result = $this->count();
-
- return $this->result;
- }
-
-
- /**
- * Count number of available contacts in database
- *
- * @return object rcube_result_set Resultset with values for 'count' and 'first'
- */
- function count()
- {
- $count = 0;
- if ($this->conn && $this->ldap_result)
- $count = ldap_count_entries($this->conn, $this->ldap_result);
-
- return new rcube_result_set($count, ($this->list_page-1) * $this->page_size);
- }
-
-
- /**
- * Return the last result set
- *
- * @return object rcube_result_set Current resultset or NULL if nothing selected yet
- */
- function get_result()
- {
- return $this->result;
- }
-
-
- /**
- * Get a specific contact record
- *
- * @param mixed Record identifier
- * @param boolean Return as associative array
- * @return mixed Hash array or rcube_result_set with all record fields
- */
- function get_record($dn, $assoc=false)
- {
- $res = null;
- if ($this->conn && $dn)
- {
- $this->ldap_result = @ldap_read($this->conn, base64_decode($dn), "(objectclass=*)", array_values($this->fieldmap));
- $entry = @ldap_first_entry($this->conn, $this->ldap_result);
-
- if ($entry && ($rec = ldap_get_attributes($this->conn, $entry)))
- {
- $res = $this->_ldap2result($rec);
- $this->result = new rcube_result_set(1);
- $this->result->add($res);
- }
- }
-
- return $assoc ? $res : $this->result;
- }
-
-
- /**
- * Create a new contact record
- *
- * @param array Hash array with save data
- * @return boolean The create record ID on success, False on error
- */
- function insert($save_cols)
- {
- // TODO
- return false;
- }
-
-
- /**
- * Update a specific contact record
- *
- * @param mixed Record identifier
- * @param array Hash array with save data
- * @return boolean True on success, False on error
- */
- function update($id, $save_cols)
- {
- // TODO
- return false;
- }
-
-
- /**
- * Mark one or more contact records as deleted
- *
- * @param array Record identifiers
- * @return boolean True on success, False on error
- */
- function delete($ids)
- {
- // TODO
- return false;
- }
-
-
- /**
- * Execute the LDAP search based on the stored credentials
- *
- * @access private
- */
- function _exec_search()
- {
- if ($this->conn && $this->filter)
- {
- $function = $this->prop['scope'] == 'sub' ? 'ldap_search' : ($this->prop['scope'] == 'base' ? 'ldap_read' : 'ldap_list');
- $this->ldap_result = $function($this->conn, $this->prop['base_dn'], $this->filter, array_values($this->fieldmap), 0, 0);
- return true;
- }
- else
- return false;
- }
-
-
- /**
- * @access private
- */
- function _ldap2result($rec)
- {
- $out = array();
-
- if ($rec['dn'])
- $out[$this->primary_key] = base64_encode($rec['dn']);
-
- foreach ($this->fieldmap as $rf => $lf)
- {
- if ($rec[$lf]['count'])
- $out[$rf] = $rec[$lf][0];
- }
-
- return $out;
- }
-
-
- /**
- * @access private
- */
- function _map_field($field)
- {
- return $this->fieldmap[$field];
- }
-
-
- /**
- * @static
- */
- function quote_string($str)
- {
- return strtr($str, array('*'=>'\2a', '('=>'\28', ')'=>'\29', '\\'=>'\5c'));
- }
-
-
-}
-
-?>
--- /dev/null
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_ldap.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2006-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Interface to an LDAP address directory |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_ldap.php 1482 2008-06-06 09:42:31Z alec $
+
+*/
+
+
+/**
+ * Model class to access an LDAP address directory
+ *
+ * @package Addressbook
+ */
+class rcube_ldap
+{
+ var $conn;
+ var $prop = array();
+ var $fieldmap = array();
+
+ var $filter = '';
+ var $result = null;
+ var $ldap_result = null;
+ var $sort_col = '';
+
+ /** public properties */
+ var $primary_key = 'ID';
+ var $readonly = true;
+ var $list_page = 1;
+ var $page_size = 10;
+ var $ready = false;
+
+
+ /**
+ * Object constructor
+ *
+ * @param array LDAP connection properties
+ * @param integer User-ID
+ */
+ function __construct($p)
+ {
+ $this->prop = $p;
+
+ foreach ($p as $prop => $value)
+ if (preg_match('/^(.+)_field$/', $prop, $matches))
+ $this->fieldmap[$matches[1]] = $value;
+
+ $this->sort_col = $p["sort"];
+
+ $this->connect();
+ }
+
+ /**
+ * PHP 4 object constructor
+ *
+ * @see rcube_ldap::__construct()
+ */
+ function rcube_ldap($p)
+ {
+ $this->__construct($p);
+ }
+
+
+ /**
+ * Establish a connection to the LDAP server
+ */
+ function connect()
+ {
+ if (!function_exists('ldap_connect'))
+ raise_error(array('type' => 'ldap', 'message' => "No ldap support in this installation of PHP"), true);
+
+ if (is_resource($this->conn))
+ return true;
+
+ if (!is_array($this->prop['hosts']))
+ $this->prop['hosts'] = array($this->prop['hosts']);
+
+ if (empty($this->prop['ldap_version']))
+ $this->prop['ldap_version'] = 3;
+
+ foreach ($this->prop['hosts'] as $host)
+ {
+ if ($lc = @ldap_connect($host, $this->prop['port']))
+ {
+ if ($this->prop['use_tls']===true)
+ if (!ldap_start_tls($lc))
+ continue;
+
+ ldap_set_option($lc, LDAP_OPT_PROTOCOL_VERSION, $this->prop['ldap_version']);
+ $this->prop['host'] = $host;
+ $this->conn = $lc;
+ break;
+ }
+ }
+
+ if (is_resource($this->conn))
+ {
+ $this->ready = true;
+
+ if ($this->prop["user_specific"]) {
+ // User specific access, generate the proper values to use.
+ global $CONFIG, $RCMAIL;
+ if (empty($this->prop['bind_pass'])) {
+ // No password set, use the users.
+ $this->prop['bind_pass'] = $RCMAIL->decrypt_passwd($_SESSION["password"]);
+ } // end if
+
+ // Get the pieces needed for variable replacement.
+ // See if the logged in username has an "@" in it.
+ if (is_bool(strstr($_SESSION["username"], "@"))) {
+ // It does not, use the global default.
+ $fu = $_SESSION["username"]."@".$CONFIG["username_domain"];
+ $u = $_SESSION["username"];
+ $d = $CONFIG["username_domain"];
+ } // end if
+ else {
+ // It does.
+ $fu = $_SESSION["username"];
+ // Get the pieces needed for username and domain.
+ list($u, $d) = explode("@", $_SESSION["username"]);
+ } # end else
+
+ // Replace the bind_dn variables.
+ $bind_dn = str_replace(array("%fu", "%u", "%d"),
+ array($fu, $u, $d),
+ $this->prop['bind_dn']);
+ $this->prop['bind_dn'] = $bind_dn;
+ // Replace the base_dn variables.
+ $base_dn = str_replace(array("%fu", "%u", "%d"),
+ array($fu, $u, $d),
+ $this->prop['base_dn']);
+ $this->prop['base_dn'] = $base_dn;
+
+ $this->ready = $this->bind($this->prop['bind_dn'], $this->prop['bind_pass']);
+ } // end if
+ elseif (!empty($this->prop['bind_dn']) && !empty($this->prop['bind_pass']))
+ $this->ready = $this->bind($this->prop['bind_dn'], $this->prop['bind_pass']);
+ }
+ else
+ raise_error(array('type' => 'ldap', 'message' => "Could not connect to any LDAP server, tried $host:{$this->prop[port]} last"), true);
+
+ // See if the directory is writeable.
+ if ($this->prop['writable']) {
+ $this->readonly = false;
+ } // end if
+
+ }
+
+
+ /**
+ * Bind connection with DN and password
+ *
+ * @param string Bind DN
+ * @param string Bind password
+ * @return boolean True on success, False on error
+ */
+ function bind($dn, $pass)
+ {
+ if (!$this->conn) {
+ return false;
+ }
+
+ if (ldap_bind($this->conn, $dn, $pass)) {
+ return true;
+ }
+
+ raise_error(array(
+ 'code' => ldap_errno($this->conn),
+ 'type' => 'ldap',
+ 'message' => "Bind failed for dn=$dn: ".ldap_error($this->conn)),
+ true);
+
+ return false;
+ }
+
+
+ /**
+ * Close connection to LDAP server
+ */
+ function close()
+ {
+ if ($this->conn)
+ {
+ @ldap_unbind($this->conn);
+ $this->conn = null;
+ }
+ }
+
+
+ /**
+ * Set internal list page
+ *
+ * @param number Page number to list
+ * @access public
+ */
+ function set_page($page)
+ {
+ $this->list_page = (int)$page;
+ }
+
+
+ /**
+ * Set internal page size
+ *
+ * @param number Number of messages to display on one page
+ * @access public
+ */
+ function set_pagesize($size)
+ {
+ $this->page_size = (int)$size;
+ }
+
+
+ /**
+ * Save a search string for future listings
+ *
+ * @param string Filter string
+ */
+ function set_search_set($filter)
+ {
+ $this->filter = $filter;
+ }
+
+
+ /**
+ * Getter for saved search properties
+ *
+ * @return mixed Search properties used by this class
+ */
+ function get_search_set()
+ {
+ return $this->filter;
+ }
+
+
+ /**
+ * Reset all saved results and search parameters
+ */
+ function reset()
+ {
+ $this->result = null;
+ $this->ldap_result = null;
+ $this->filter = '';
+ }
+
+
+ /**
+ * List the current set of contact records
+ *
+ * @param array List of cols to show
+ * @param int Only return this number of records
+ * @return array Indexed list of contact records, each a hash array
+ */
+ function list_records($cols=null, $subset=0)
+ {
+ // add general filter to query
+ if (!empty($this->prop['filter']))
+ {
+ $filter = $this->prop['filter'];
+ $this->set_search_set($filter);
+ }
+
+ // exec LDAP search if no result resource is stored
+ if ($this->conn && !$this->ldap_result)
+ $this->_exec_search();
+
+ // count contacts for this user
+ $this->result = $this->count();
+
+ // we have a search result resource
+ if ($this->ldap_result && $this->result->count > 0)
+ {
+ if ($this->sort_col && $this->prop['scope'] !== "base")
+ @ldap_sort($this->conn, $this->ldap_result, $this->sort_col);
+
+ $start_row = $subset < 0 ? $this->result->first + $this->page_size + $subset : $this->result->first;
+ $last_row = $this->result->first + $this->page_size;
+ $last_row = $subset != 0 ? $start_row + abs($subset) : $last_row;
+
+ $entries = ldap_get_entries($this->conn, $this->ldap_result);
+ for ($i = $start_row; $i < min($entries['count'], $last_row); $i++)
+ $this->result->add($this->_ldap2result($entries[$i]));
+ }
+
+ return $this->result;
+ }
+
+
+ /**
+ * Search contacts
+ *
+ * @param array List of fields to search in
+ * @param string Search value
+ * @param boolean True if results are requested, False if count only
+ * @return array Indexed list of contact records and 'count' value
+ */
+ function search($fields, $value, $strict=false, $select=true)
+ {
+ // special treatment for ID-based search
+ if ($fields == 'ID' || $fields == $this->primary_key)
+ {
+ $ids = explode(',', $value);
+ $result = new rcube_result_set();
+ foreach ($ids as $id)
+ if ($rec = $this->get_record($id, true))
+ {
+ $result->add($rec);
+ $result->count++;
+ }
+
+ return $result;
+ }
+
+ $filter = '(|';
+ $wc = !$strict && $this->prop['fuzzy_search'] ? '*' : '';
+ if (is_array($this->prop['search_fields']))
+ {
+ foreach ($this->prop['search_fields'] as $k => $field)
+ $filter .= "($field=$wc" . rcube_ldap::quote_string($value) . "$wc)";
+ }
+ else
+ {
+ foreach ((array)$fields as $field)
+ if ($f = $this->_map_field($field))
+ $filter .= "($f=$wc" . rcube_ldap::quote_string($value) . "$wc)";
+ }
+ $filter .= ')';
+
+ // avoid double-wildcard if $value is empty
+ $filter = preg_replace('/\*+/', '*', $filter);
+
+ // add general filter to query
+ if (!empty($this->prop['filter']))
+ $filter = '(&(' . preg_replace('/^\(|\)$/', '', $this->prop['filter']) . ')' . $filter . ')';
+
+ // set filter string and execute search
+ $this->set_search_set($filter);
+ $this->_exec_search();
+
+ if ($select)
+ $this->list_records();
+ else
+ $this->result = $this->count();
+
+ return $this->result;
+ }
+
+
+ /**
+ * Count number of available contacts in database
+ *
+ * @return object rcube_result_set Resultset with values for 'count' and 'first'
+ */
+ function count()
+ {
+ $count = 0;
+ if ($this->conn && $this->ldap_result) {
+ $count = ldap_count_entries($this->conn, $this->ldap_result);
+ } // end if
+ elseif ($this->conn) {
+ // We have a connection but no result set, attempt to get one.
+ if (empty($this->filter)) {
+ // The filter is not set, set it.
+ $this->filter = $this->prop['filter'];
+ } // end if
+ $this->_exec_search();
+ if ($this->ldap_result) {
+ $count = ldap_count_entries($this->conn, $this->ldap_result);
+ } // end if
+ } // end else
+
+ return new rcube_result_set($count, ($this->list_page-1) * $this->page_size);
+ }
+
+
+ /**
+ * Return the last result set
+ *
+ * @return object rcube_result_set Current resultset or NULL if nothing selected yet
+ */
+ function get_result()
+ {
+ return $this->result;
+ }
+
+
+ /**
+ * Get a specific contact record
+ *
+ * @param mixed Record identifier
+ * @param boolean Return as associative array
+ * @return mixed Hash array or rcube_result_set with all record fields
+ */
+ function get_record($dn, $assoc=false)
+ {
+ $res = null;
+ if ($this->conn && $dn)
+ {
+ $this->ldap_result = @ldap_read($this->conn, base64_decode($dn), "(objectclass=*)", array_values($this->fieldmap));
+ $entry = @ldap_first_entry($this->conn, $this->ldap_result);
+
+ if ($entry && ($rec = ldap_get_attributes($this->conn, $entry)))
+ {
+ // Add in the dn for the entry.
+ $rec["dn"] = base64_decode($dn);
+ $res = $this->_ldap2result($rec);
+ $this->result = new rcube_result_set(1);
+ $this->result->add($res);
+ }
+ }
+
+ return $assoc ? $res : $this->result;
+ }
+
+
+ /**
+ * Create a new contact record
+ *
+ * @param array Hash array with save data
+ * @return encoded record ID on success, False on error
+ */
+ function insert($save_cols)
+ {
+ // Map out the column names to their LDAP ones to build the new entry.
+ $newentry = array();
+ $newentry["objectClass"] = $this->prop["LDAP_Object_Classes"];
+ foreach ($save_cols as $col => $val) {
+ $fld = "";
+ $fld = $this->_map_field($col);
+ if ($fld != "") {
+ // The field does exist, add it to the entry.
+ $newentry[$fld] = $val;
+ } // end if
+ } // end foreach
+
+ // Verify that the required fields are set.
+ // We know that the email address is required as a default of rcube, so
+ // we will default its value into any unfilled required fields.
+ foreach ($this->prop["required_fields"] as $fld) {
+ if (!isset($newentry[$fld])) {
+ $newentry[$fld] = $newentry[$this->_map_field("email")];
+ } // end if
+ } // end foreach
+
+ // Build the new entries DN.
+ $dn = $this->prop["LDAP_rdn"]."=".$newentry[$this->prop["LDAP_rdn"]].",".$this->prop['base_dn'];
+ $res = @ldap_add($this->conn, $dn, $newentry);
+ if ($res === FALSE) {
+ return false;
+ } // end if
+
+ return base64_encode($dn);
+ }
+
+
+ /**
+ * Update a specific contact record
+ *
+ * @param mixed Record identifier
+ * @param array Hash array with save data
+ * @return boolean True on success, False on error
+ */
+ function update($id, $save_cols)
+ {
+ $record = $this->get_record($id, true);
+ $result = $this->get_result();
+ $record = $result->first();
+
+ $newdata = array();
+ $replacedata = array();
+ $deletedata = array();
+ foreach ($save_cols as $col => $val) {
+ $fld = "";
+ $fld = $this->_map_field($col);
+ if ($fld != "") {
+ // The field does exist compare it to the ldap record.
+ if ($record[$col] != $val) {
+ // Changed, but find out how.
+ if (!isset($record[$col])) {
+ // Field was not set prior, need to add it.
+ $newdata[$fld] = $val;
+ } // end if
+ elseif ($val == "") {
+ // Field supplied is empty, verify that it is not required.
+ if (!in_array($fld, $this->prop["required_fields"])) {
+ // It is not, safe to clear.
+ $deletedata[$fld] = $record[$col];
+ } // end if
+ } // end elseif
+ else {
+ // The data was modified, save it out.
+ $replacedata[$fld] = $val;
+ } // end else
+ } // end if
+ } // end if
+ } // end foreach
+
+ // Update the entry as required.
+ $dn = base64_decode($id);
+ if (!empty($deletedata)) {
+ // Delete the fields.
+ $res = @ldap_mod_del($this->conn, $dn, $deletedata);
+ if ($res === FALSE) {
+ return false;
+ } // end if
+ } // end if
+
+ if (!empty($replacedata)) {
+ // Replace the fields.
+ $res = @ldap_mod_replace($this->conn, $dn, $replacedata);
+ if ($res === FALSE) {
+ return false;
+ } // end if
+ } // end if
+
+ if (!empty($newdata)) {
+ // Add the fields.
+ $res = @ldap_mod_add($this->conn, $dn, $newdata);
+ if ($res === FALSE) {
+ return false;
+ } // end if
+ } // end if
+
+ return true;
+ }
+
+
+ /**
+ * Mark one or more contact records as deleted
+ *
+ * @param array Record identifiers
+ * @return boolean True on success, False on error
+ */
+ function delete($ids)
+ {
+ if (!is_array($ids)) {
+ // Not an array, break apart the encoded DNs.
+ $dns = explode(",", $ids);
+ } // end if
+
+ foreach ($dns as $id) {
+ $dn = base64_decode($id);
+ // Delete the record.
+ $res = @ldap_delete($this->conn, $dn);
+ if ($res === FALSE) {
+ return false;
+ } // end if
+ } // end foreach
+
+ return true;
+ }
+
+
+ /**
+ * Execute the LDAP search based on the stored credentials
+ *
+ * @access private
+ */
+ function _exec_search()
+ {
+ if ($this->conn && $this->filter)
+ {
+ $function = $this->prop['scope'] == 'sub' ? 'ldap_search' : ($this->prop['scope'] == 'base' ? 'ldap_read' : 'ldap_list');
+ $this->ldap_result = $function($this->conn, $this->prop['base_dn'], $this->filter, array_values($this->fieldmap), 0, 0);
+ return true;
+ }
+ else
+ return false;
+ }
+
+
+ /**
+ * @access private
+ */
+ function _ldap2result($rec)
+ {
+ $out = array();
+
+ if ($rec['dn'])
+ $out[$this->primary_key] = base64_encode($rec['dn']);
+
+ foreach ($this->fieldmap as $rf => $lf)
+ {
+ if ($rec[$lf]['count'])
+ $out[$rf] = $rec[$lf][0];
+ }
+
+ return $out;
+ }
+
+
+ /**
+ * @access private
+ */
+ function _map_field($field)
+ {
+ return $this->fieldmap[$field];
+ }
+
+
+ /**
+ * @static
+ */
+ function quote_string($str)
+ {
+ return strtr($str, array('*'=>'\2a', '('=>'\28', ')'=>'\29', '\\'=>'\5c'));
+ }
+
+
+}
+
+
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_mail_mime.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2007-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Extend PEAR:Mail_mime class and override encodeHeaders method |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: sendmail.inc 506 2007-03-14 00:39:51Z thomasb $
+
+*/
+
+
+/**
+ * Replacement PEAR:Mail_mime with some additional or overloaded methods
+ *
+ * @package Mail
+ */
+class rcube_mail_mime extends Mail_mime
+{
+ /**
+ * Set build parameters
+ */
+ function setParam($param)
+ {
+ if (is_array($param)) {
+ $this->_build_params = array_merge($this->_build_params, $param);
+ }
+ }
+
+ /**
+ * Adds an image to the list of embedded images.
+ *
+ * @param string $file The image file name OR image data itself
+ * @param string $c_type The content type
+ * @param string $name The filename of the image.
+ * Only use if $file is the image data
+ * @param bool $isfilename Whether $file is a filename or not
+ * Defaults to true
+ * @param string $contentid Desired Content-ID of MIME part
+ * Defaults to generated unique ID
+ * @return mixed true on success or PEAR_Error object
+ * @access public
+ */
+ function addHTMLImage($file, $c_type='application/octet-stream', $name = '', $isfilename = true, $contentid = '')
+ {
+ $filedata = ($isfilename === true) ? $this->_file2str($file) : $file;
+ if ($isfilename === true) {
+ $filename = ($name == '' ? $file : $name);
+ }
+ else {
+ $filename = $name;
+ }
+
+ if (PEAR::isError($filedata)) {
+ return $filedata;
+ }
+
+ if ($contentid == '') {
+ $contentid = md5(uniqid(time()));
+ }
+
+ $this->_html_images[] = array(
+ 'body' => $filedata,
+ 'name' => $filename,
+ 'c_type' => $c_type,
+ 'cid' => $contentid
+ );
+
+ return true;
+ }
+
+
+ /**
+ * returns the HTML body portion of the message
+ * @return string HTML body of the message
+ * @access public
+ */
+ function getHTMLBody()
+ {
+ return $this->_htmlbody;
+ }
+
+
+ /**
+ * Creates a new mimePart object, using multipart/mixed as
+ * the initial content-type and returns it during the
+ * build process.
+ *
+ * @return object The multipart/mixed mimePart object
+ * @access private
+ */
+ function &_addMixedPart()
+ {
+ $params['content_type'] = $this->_headers['Content-Type'] ? $this->_headers['Content-Type'] : 'multipart/mixed';
+ $ret = new Mail_mimePart('', $params);
+ return $ret;
+ }
+
+
+ /**
+ * Encodes a header as per RFC2047
+ *
+ * @param array $input The header data to encode
+ * @param array $params Extra build parameters
+ * @return array Encoded data
+ * @access private
+ * @override
+ */
+ function _encodeHeaders($input, $params = array())
+ {
+ $maxlen = 73;
+ $params += $this->_build_params;
+
+ foreach ($input as $hdr_name => $hdr_value)
+ {
+ // if header contains e-mail addresses
+ if (preg_match('/\s<.+@[a-z0-9\-\.]+\.[a-z]+>/U', $hdr_value)) {
+ $chunks = $this->_explode_quoted_string(',', $hdr_value);
+ }
+ else {
+ $chunks = array($hdr_value);
+ }
+
+ $hdr_value = '';
+ $line_len = 0;
+
+ foreach ($chunks as $i => $value) {
+ $value = trim($value);
+
+ //This header contains non ASCII chars and should be encoded.
+ if (preg_match('#[\x80-\xFF]{1}#', $value)) {
+ $suffix = '';
+ // Don't encode e-mail address
+ if (preg_match('/(.+)\s(<.+@[a-z0-9\-\.]+>)$/Ui', $value, $matches)) {
+ $value = $matches[1];
+ $suffix = ' '.$matches[2];
+ }
+
+ switch ($params['head_encoding']) {
+ case 'base64':
+ // Base64 encoding has been selected.
+ $mode = 'B';
+ $encoded = base64_encode($value);
+ break;
+
+ case 'quoted-printable':
+ default:
+ // quoted-printable encoding has been selected
+ $mode = 'Q';
+ $encoded = preg_replace('/([\x2C\x3F\x80-\xFF])/e', "'='.sprintf('%02X', ord('\\1'))", $value);
+ // replace spaces with _
+ $encoded = str_replace(' ', '_', $encoded);
+ }
+
+ $value = '=?' . $params['head_charset'] . '?' . $mode . '?' . $encoded . '?=' . $suffix;
+ }
+
+ // add chunk to output string by regarding the header maxlen
+ $len = strlen($value);
+ if ($i == 0 || $line_len + $len < $maxlen) {
+ $hdr_value .= ($i>0?', ':'') . $value;
+ $line_len += $len + ($i>0?2:0);
+ }
+ else {
+ $hdr_value .= ($i>0?', ':'') . "\n " . $value;
+ $line_len = $len;
+ }
+ }
+
+ $input[$hdr_name] = $hdr_value;
+ }
+
+ return $input;
+ }
+
+
+ function _explode_quoted_string($delimiter, $string)
+ {
+ $result = array();
+ $strlen = strlen($string);
+ for ($q=$p=$i=0; $i < $strlen; $i++) {
+ if ($string{$i} == "\"" && $string{$i-1} != "\\") {
+ $q = $q ? false : true;
+ }
+ else if (!$q && $string{$i} == $delimiter) {
+ $result[] = substr($string, $p, $i - $p);
+ $p = $i + 1;
+ }
+ }
+
+ $result[] = substr($string, $p);
+ return $result;
+ }
+
+}
+
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/include/rcube_mdb2.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | PEAR:DB wrapper class that implements PEAR MDB2 functions |
- | See http://pear.php.net/package/MDB2 |
- | |
- +-----------------------------------------------------------------------+
- | Author: Lukas Kahwe Smith <smith@pooteeweet.org> |
- +-----------------------------------------------------------------------+
-
- $Id: rcube_mdb2.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-
-/**
- * Obtain the PEAR::DB class that is used for abstraction
- */
-require_once('MDB2.php');
-
-
-/**
- * Database independent query interface
- *
- * This is a wrapper for the PEAR::MDB2 class
- *
- * @package Database
- * @author David Saez Padros <david@ols.es>
- * @author Thomas Bruederli <roundcube@gmail.com>
- * @author Lukas Kahwe Smith <smith@pooteeweet.org>
- * @version 1.16
- * @link http://pear.php.net/package/MDB2
- */
-class rcube_mdb2
- {
- var $db_dsnw; // DSN for write operations
- var $db_dsnr; // DSN for read operations
- var $db_connected = false; // Already connected ?
- var $db_mode = ''; // Connection mode
- var $db_handle = 0; // Connection handle
- var $db_error = false;
- var $db_error_msg = '';
- var $debug_mode = false;
-
- var $a_query_results = array('dummy');
- var $last_res_id = 0;
-
-
- /**
- * Object constructor
- *
- * @param string DSN for read/write operations
- * @param string Optional DSN for read only operations
- */
- function __construct($db_dsnw, $db_dsnr='', $pconn=false)
- {
- if ($db_dsnr=='')
- $db_dsnr=$db_dsnw;
-
- $this->db_dsnw = $db_dsnw;
- $this->db_dsnr = $db_dsnr;
- $this->db_pconn = $pconn;
-
- $dsn_array = MDB2::parseDSN($db_dsnw);
- $this->db_provider = $dsn_array['phptype'];
- }
-
-
- /**
- * PHP 4 object constructor
- *
- * @see rcube_mdb2::__construct
- */
- function rcube_db($db_dsnw,$db_dsnr='')
- {
- $this->__construct($db_dsnw,$db_dsnr);
- }
-
-
- /**
- * Connect to specific database
- *
- * @param string DSN for DB connections
- * @return object PEAR database handle
- * @access private
- */
- function dsn_connect($dsn)
- {
- // Use persistent connections if available
- $dbh = MDB2::connect($dsn, array(
- 'persistent' => $this->db_pconn,
- 'emulate_prepared' => $this->debug_mode,
- 'debug' => $this->debug_mode,
- 'debug_handler' => 'mdb2_debug_handler',
- 'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL));
-
- if (MDB2::isError($dbh))
- {
- $this->db_error = TRUE;
- $this->db_error_msg = $dbh->getMessage();
-
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__,
- 'file' => __FILE__, 'message' => $dbh->getUserInfo()), TRUE, FALSE);
- }
- else if ($this->db_provider=='sqlite')
- {
- $dsn_array = MDB2::parseDSN($dsn);
- if (!filesize($dsn_array['database']) && !empty($this->sqlite_initials))
- $this->_sqlite_create_database($dbh, $this->sqlite_initials);
- }
- else
- $dbh->setCharset('utf8');
-
- return $dbh;
- }
-
-
- /**
- * Connect to appropiate databse
- * depending on the operation
- *
- * @param string Connection mode (r|w)
- * @access public
- */
- function db_connect($mode)
- {
- $this->db_mode = $mode;
-
- // Already connected
- if ($this->db_connected)
- {
- // no replication, current connection is ok
- if ($this->db_dsnw==$this->db_dsnr)
- return;
-
- // connected to master, current connection is ok
- if ($this->db_mode=='w')
- return;
-
- // Same mode, current connection is ok
- if ($this->db_mode==$mode)
- return;
- }
-
- if ($mode=='r')
- $dsn = $this->db_dsnr;
- else
- $dsn = $this->db_dsnw;
-
- $this->db_handle = $this->dsn_connect($dsn);
- $this->db_connected = true;
- }
-
-
- /**
- * Activate/deactivate debug mode
- *
- * @param boolean True if SQL queries should be logged
- */
- function set_debug($dbg = true)
- {
- $this->debug_mode = $dbg;
- if ($this->db_connected)
- {
- $this->db_handle->setOption('debug', $dbg);
- $this->db_handle->setOption('emulate_prepared', $dbg);
- }
- }
-
-
- /**
- * Getter for error state
- *
- * @param boolean True on error
- */
- function is_error()
- {
- return $this->db_error ? $this->db_error_msg : FALSE;
- }
-
-
- /**
- * Execute a SQL query
- *
- * @param string SQL query to execute
- * @param mixed Values to be inserted in query
- * @return number Query handle identifier
- * @access public
- */
- function query()
- {
- $params = func_get_args();
- $query = array_shift($params);
-
- return $this->_query($query, 0, 0, $params);
- }
-
-
- /**
- * Execute a SQL query with limits
- *
- * @param string SQL query to execute
- * @param number Offset for LIMIT statement
- * @param number Number of rows for LIMIT statement
- * @param mixed Values to be inserted in query
- * @return number Query handle identifier
- * @access public
- */
- function limitquery()
- {
- $params = func_get_args();
- $query = array_shift($params);
- $offset = array_shift($params);
- $numrows = array_shift($params);
-
- return $this->_query($query, $offset, $numrows, $params);
- }
-
-
- /**
- * Execute a SQL query with limits
- *
- * @param string SQL query to execute
- * @param number Offset for LIMIT statement
- * @param number Number of rows for LIMIT statement
- * @param array Values to be inserted in query
- * @return number Query handle identifier
- * @access private
- */
- function _query($query, $offset, $numrows, $params)
- {
- // Read or write ?
- if (strtolower(trim(substr($query,0,6)))=='select')
- $mode='r';
- else
- $mode='w';
-
- $this->db_connect($mode);
-
- if ($this->db_provider == 'sqlite')
- $this->_sqlite_prepare();
-
- if ($numrows || $offset)
- $result = $this->db_handle->setLimit($numrows,$offset);
-
- if (empty($params))
- $result = $this->db_handle->query($query);
- else
- {
- $params = (array)$params;
- $q = $this->db_handle->prepare($query);
- if ($this->db_handle->isError($q))
- {
- $this->db_error = TRUE;
- $this->db_error_msg = $q->userinfo;
-
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $this->db_error_msg), TRUE, TRUE);
- }
- else
- {
- $result = $q->execute($params);
- $q->free();
- }
- }
-
- // add result, even if it's an error
- return $this->_add_result($result);
- }
-
-
- /**
- * Get number of rows for a SQL query
- * If no query handle is specified, the last query will be taken as reference
- *
- * @param number Optional query handle identifier
- * @return mixed Number of rows or FALSE on failure
- * @access public
- */
- function num_rows($res_id=NULL)
- {
- if (!$this->db_handle)
- return FALSE;
-
- if ($result = $this->_get_result($res_id))
- return $result->numRows();
- else
- return FALSE;
- }
-
-
- /**
- * Get number of affected rows fort he last query
- *
- * @return mixed Number of rows or FALSE on failure
- * @access public
- */
- function affected_rows($result = null)
- {
- if (!$this->db_handle)
- return FALSE;
-
- return $this->_get_result($result);
- }
-
-
- /**
- * Get last inserted record ID
- * For Postgres databases, a sequence name is required
- *
- * @param string Sequence name for increment
- * @return mixed ID or FALSE on failure
- * @access public
- */
- function insert_id($sequence = '')
- {
- if (!$this->db_handle || $this->db_mode=='r')
- return FALSE;
-
- return $this->db_handle->lastInsertID($sequence);
- }
-
-
- /**
- * Get an associative array for one row
- * If no query handle is specified, the last query will be taken as reference
- *
- * @param number Optional query handle identifier
- * @return mixed Array with col values or FALSE on failure
- * @access public
- */
- function fetch_assoc($res_id=NULL)
- {
- $result = $this->_get_result($res_id);
- return $this->_fetch_row($result, MDB2_FETCHMODE_ASSOC);
- }
-
-
- /**
- * Get an index array for one row
- * If no query handle is specified, the last query will be taken as reference
- *
- * @param number Optional query handle identifier
- * @return mixed Array with col values or FALSE on failure
- * @access public
- */
- function fetch_array($res_id=NULL)
- {
- $result = $this->_get_result($res_id);
- return $this->_fetch_row($result, MDB2_FETCHMODE_ORDERED);
- }
-
-
- /**
- * Get co values for a result row
- *
- * @param object Query result handle
- * @param number Fetch mode identifier
- * @return mixed Array with col values or FALSE on failure
- * @access private
- */
- function _fetch_row($result, $mode)
- {
- if (PEAR::isError($result))
- {
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $this->db_link->getMessage()), TRUE, FALSE);
- return FALSE;
- }
-
- return $result->fetchRow($mode);
- }
-
-
- /**
- * Formats input so it can be safely used in a query
- *
- * @param mixed Value to quote
- * @return string Quoted/converted string for use in query
- * @access public
- */
- function quote($input, $type = null)
- {
- // create DB handle if not available
- if (!$this->db_handle)
- $this->db_connect('r');
-
- // escape pear identifier chars
- $rep_chars = array('?' => '\?',
- '!' => '\!',
- '&' => '\&');
-
- return $this->db_handle->quote($input, $type);
- }
-
-
- /**
- * Quotes a string so it can be safely used as a table or column name
- *
- * @param string Value to quote
- * @return string Quoted string for use in query
- * @deprecated Replaced by rcube_MDB2::quote_identifier
- * @see rcube_MDB2::quote_identifier
- * @access public
- */
- function quoteIdentifier($str)
- {
- return $this->quote_identifier($str);
- }
-
-
- /**
- * Quotes a string so it can be safely used as a table or column name
- *
- * @param string Value to quote
- * @return string Quoted string for use in query
- * @access public
- */
- function quote_identifier($str)
- {
- if (!$this->db_handle)
- $this->db_connect('r');
-
- return $this->db_handle->quoteIdentifier($str);
- }
-
- /**
- * Escapes a string
- *
- * @param string The string to be escaped
- * @return string The escaped string
- * @access public
- * @since 0.1.1
- */
- function escapeSimple($str)
- {
- if (!$this->db_handle)
- $this->db_connect('r');
-
- return $this->db_handle->escape($str);
- }
-
-
- /**
- * Return SQL function for current time and date
- *
- * @return string SQL function to use in query
- * @access public
- */
- function now()
- {
- switch($this->db_provider)
- {
- case 'mssql':
- return "getdate()";
-
- default:
- return "now()";
- }
- }
-
-
- /**
- * Return SQL statement to convert a field value into a unix timestamp
- *
- * @param string Field name
- * @return string SQL statement to use in query
- * @access public
- */
- function unixtimestamp($field)
- {
- switch($this->db_provider)
- {
- case 'pgsql':
- return "EXTRACT (EPOCH FROM $field)";
- break;
-
- case 'mssql':
- return "datediff(s, '1970-01-01 00:00:00', $field)";
-
- default:
- return "UNIX_TIMESTAMP($field)";
- }
- }
-
-
- /**
- * Return SQL statement to convert from a unix timestamp
- *
- * @param string Field name
- * @return string SQL statement to use in query
- * @access public
- */
- function fromunixtime($timestamp)
- {
- switch($this->db_provider)
- {
- case 'mysqli':
- case 'mysql':
- case 'sqlite':
- return "FROM_UNIXTIME($timestamp)";
-
- default:
- return date("'Y-m-d H:i:s'", $timestamp);
- }
- }
-
-
- /**
- * Adds a query result and returns a handle ID
- *
- * @param object Query handle
- * @return mixed Handle ID or FALE on failure
- * @access private
- */
- function _add_result($res)
- {
- // sql error occured
- if (PEAR::isError($res))
- {
- raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
- 'message' => $res->getMessage() . " Query: " . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)), TRUE, FALSE);
- return FALSE;
- }
- else
- {
- $res_id = sizeof($this->a_query_results);
- $this->a_query_results[$res_id] = $res;
- $this->last_res_id = $res_id;
- return $res_id;
- }
- }
-
-
- /**
- * Resolves a given handle ID and returns the according query handle
- * If no ID is specified, the last ressource handle will be returned
- *
- * @param number Handle ID
- * @return mixed Ressource handle or FALE on failure
- * @access private
- */
- function _get_result($res_id=NULL)
- {
- if ($res_id==NULL)
- $res_id = $this->last_res_id;
-
- if ($res_id && isset($this->a_query_results[$res_id]))
- return $this->a_query_results[$res_id];
- else
- return FALSE;
- }
-
-
- /**
- * Create a sqlite database from a file
- *
- * @param object SQLite database handle
- * @param string File path to use for DB creation
- * @access private
- */
- function _sqlite_create_database($dbh, $file_name)
- {
- if (empty($file_name) || !is_string($file_name))
- return;
-
- $data = '';
- if ($fd = fopen($file_name, 'r'))
- {
- $data = fread($fd, filesize($file_name));
- fclose($fd);
- }
-
- if (strlen($data))
- sqlite_exec($dbh->connection, $data);
- }
-
-
- /**
- * Add some proprietary database functions to the current SQLite handle
- * in order to make it MySQL compatible
- *
- * @access private
- */
- function _sqlite_prepare()
- {
- include_once('include/rcube_sqlite.inc');
-
- // we emulate via callback some missing MySQL function
- sqlite_create_function($this->db_handle->connection, "from_unixtime", "rcube_sqlite_from_unixtime");
- sqlite_create_function($this->db_handle->connection, "unix_timestamp", "rcube_sqlite_unix_timestamp");
- sqlite_create_function($this->db_handle->connection, "now", "rcube_sqlite_now");
- sqlite_create_function($this->db_handle->connection, "md5", "rcube_sqlite_md5");
- }
-
-
- } // end class rcube_db
-
-
-/* this is our own debug handler for the MDB2 connection */
-function mdb2_debug_handler(&$db, $scope, $message, $context = array())
-{
- if ($scope != 'prepare')
- {
- $debug_output = $scope . '('.$db->db_index.'): ';
- $debug_output .= $message . $db->getOption('log_line_break');
- write_log('sqllog', $debug_output);
- }
-}
-
-
-?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_mdb2.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | PEAR:DB wrapper class that implements PEAR MDB2 functions |
+ | See http://pear.php.net/package/MDB2 |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Lukas Kahwe Smith <smith@pooteeweet.org> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_mdb2.php 1390 2008-05-15 11:15:58Z thomasb $
+
+*/
+
+
+/**
+ * Database independent query interface
+ *
+ * This is a wrapper for the PEAR::MDB2 class
+ *
+ * @package Database
+ * @author David Saez Padros <david@ols.es>
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ * @author Lukas Kahwe Smith <smith@pooteeweet.org>
+ * @version 1.16
+ * @link http://pear.php.net/package/MDB2
+ */
+class rcube_mdb2
+ {
+ var $db_dsnw; // DSN for write operations
+ var $db_dsnr; // DSN for read operations
+ var $db_connected = false; // Already connected ?
+ var $db_mode = ''; // Connection mode
+ var $db_handle = 0; // Connection handle
+ var $db_error = false;
+ var $db_error_msg = '';
+ var $debug_mode = false;
+
+ var $a_query_results = array('dummy');
+ var $last_res_id = 0;
+
+
+ /**
+ * Object constructor
+ *
+ * @param string DSN for read/write operations
+ * @param string Optional DSN for read only operations
+ */
+ function __construct($db_dsnw, $db_dsnr='', $pconn=false)
+ {
+ if ($db_dsnr=='')
+ $db_dsnr=$db_dsnw;
+
+ $this->db_dsnw = $db_dsnw;
+ $this->db_dsnr = $db_dsnr;
+ $this->db_pconn = $pconn;
+
+ $dsn_array = MDB2::parseDSN($db_dsnw);
+ $this->db_provider = $dsn_array['phptype'];
+ }
+
+
+ /**
+ * PHP 4 object constructor
+ *
+ * @see rcube_mdb2::__construct
+ */
+ function rcube_db($db_dsnw,$db_dsnr='')
+ {
+ $this->__construct($db_dsnw,$db_dsnr);
+ }
+
+
+ /**
+ * Connect to specific database
+ *
+ * @param string DSN for DB connections
+ * @return object PEAR database handle
+ * @access private
+ */
+ function dsn_connect($dsn)
+ {
+ // Use persistent connections if available
+ $dbh = MDB2::connect($dsn, array(
+ 'persistent' => $this->db_pconn,
+ 'emulate_prepared' => $this->debug_mode,
+ 'debug' => $this->debug_mode,
+ 'debug_handler' => 'mdb2_debug_handler',
+ 'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL));
+
+ if (MDB2::isError($dbh))
+ {
+ $this->db_error = TRUE;
+ $this->db_error_msg = $dbh->getMessage();
+
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__,
+ 'file' => __FILE__, 'message' => $dbh->getUserInfo()), TRUE, FALSE);
+ }
+ else if ($this->db_provider=='sqlite')
+ {
+ $dsn_array = MDB2::parseDSN($dsn);
+ if (!filesize($dsn_array['database']) && !empty($this->sqlite_initials))
+ $this->_sqlite_create_database($dbh, $this->sqlite_initials);
+ }
+ else
+ $dbh->setCharset('utf8');
+
+ return $dbh;
+ }
+
+
+ /**
+ * Connect to appropiate databse
+ * depending on the operation
+ *
+ * @param string Connection mode (r|w)
+ * @access public
+ */
+ function db_connect($mode)
+ {
+ $this->db_mode = $mode;
+
+ // Already connected
+ if ($this->db_connected)
+ {
+ // no replication, current connection is ok
+ if ($this->db_dsnw==$this->db_dsnr)
+ return;
+
+ // connected to master, current connection is ok
+ if ($this->db_mode=='w')
+ return;
+
+ // Same mode, current connection is ok
+ if ($this->db_mode==$mode)
+ return;
+ }
+
+ if ($mode=='r')
+ $dsn = $this->db_dsnr;
+ else
+ $dsn = $this->db_dsnw;
+
+ $this->db_handle = $this->dsn_connect($dsn);
+ $this->db_connected = true;
+ }
+
+
+ /**
+ * Activate/deactivate debug mode
+ *
+ * @param boolean True if SQL queries should be logged
+ */
+ function set_debug($dbg = true)
+ {
+ $this->debug_mode = $dbg;
+ if ($this->db_connected)
+ {
+ $this->db_handle->setOption('debug', $dbg);
+ $this->db_handle->setOption('emulate_prepared', $dbg);
+ }
+ }
+
+
+ /**
+ * Getter for error state
+ *
+ * @param boolean True on error
+ */
+ function is_error()
+ {
+ return $this->db_error ? $this->db_error_msg : FALSE;
+ }
+
+
+ /**
+ * Execute a SQL query
+ *
+ * @param string SQL query to execute
+ * @param mixed Values to be inserted in query
+ * @return number Query handle identifier
+ * @access public
+ */
+ function query()
+ {
+ $params = func_get_args();
+ $query = array_shift($params);
+
+ return $this->_query($query, 0, 0, $params);
+ }
+
+
+ /**
+ * Execute a SQL query with limits
+ *
+ * @param string SQL query to execute
+ * @param number Offset for LIMIT statement
+ * @param number Number of rows for LIMIT statement
+ * @param mixed Values to be inserted in query
+ * @return number Query handle identifier
+ * @access public
+ */
+ function limitquery()
+ {
+ $params = func_get_args();
+ $query = array_shift($params);
+ $offset = array_shift($params);
+ $numrows = array_shift($params);
+
+ return $this->_query($query, $offset, $numrows, $params);
+ }
+
+
+ /**
+ * Execute a SQL query with limits
+ *
+ * @param string SQL query to execute
+ * @param number Offset for LIMIT statement
+ * @param number Number of rows for LIMIT statement
+ * @param array Values to be inserted in query
+ * @return number Query handle identifier
+ * @access private
+ */
+ function _query($query, $offset, $numrows, $params)
+ {
+ // Read or write ?
+ if (strtolower(trim(substr($query,0,6)))=='select')
+ $mode='r';
+ else
+ $mode='w';
+
+ $this->db_connect($mode);
+
+ if ($this->db_provider == 'sqlite')
+ $this->_sqlite_prepare();
+
+ if ($numrows || $offset)
+ $result = $this->db_handle->setLimit($numrows,$offset);
+
+ if (empty($params))
+ $result = $this->db_handle->query($query);
+ else
+ {
+ $params = (array)$params;
+ $q = $this->db_handle->prepare($query);
+ if ($this->db_handle->isError($q))
+ {
+ $this->db_error = TRUE;
+ $this->db_error_msg = $q->userinfo;
+
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => $this->db_error_msg), TRUE, TRUE);
+ }
+ else
+ {
+ $result = $q->execute($params);
+ $q->free();
+ }
+ }
+
+ // add result, even if it's an error
+ return $this->_add_result($result);
+ }
+
+
+ /**
+ * Get number of rows for a SQL query
+ * If no query handle is specified, the last query will be taken as reference
+ *
+ * @param number Optional query handle identifier
+ * @return mixed Number of rows or FALSE on failure
+ * @access public
+ */
+ function num_rows($res_id=NULL)
+ {
+ if (!$this->db_handle)
+ return FALSE;
+
+ if ($result = $this->_get_result($res_id))
+ return $result->numRows();
+ else
+ return FALSE;
+ }
+
+
+ /**
+ * Get number of affected rows fort he last query
+ *
+ * @return mixed Number of rows or FALSE on failure
+ * @access public
+ */
+ function affected_rows($result = null)
+ {
+ if (!$this->db_handle)
+ return FALSE;
+
+ return $this->_get_result($result);
+ }
+
+
+ /**
+ * Get last inserted record ID
+ * For Postgres databases, a sequence name is required
+ *
+ * @param string Sequence name for increment
+ * @return mixed ID or FALSE on failure
+ * @access public
+ */
+ function insert_id($sequence = '')
+ {
+ if (!$this->db_handle || $this->db_mode=='r')
+ return FALSE;
+
+ return $this->db_handle->lastInsertID($sequence);
+ }
+
+
+ /**
+ * Get an associative array for one row
+ * If no query handle is specified, the last query will be taken as reference
+ *
+ * @param number Optional query handle identifier
+ * @return mixed Array with col values or FALSE on failure
+ * @access public
+ */
+ function fetch_assoc($res_id=NULL)
+ {
+ $result = $this->_get_result($res_id);
+ return $this->_fetch_row($result, MDB2_FETCHMODE_ASSOC);
+ }
+
+
+ /**
+ * Get an index array for one row
+ * If no query handle is specified, the last query will be taken as reference
+ *
+ * @param number Optional query handle identifier
+ * @return mixed Array with col values or FALSE on failure
+ * @access public
+ */
+ function fetch_array($res_id=NULL)
+ {
+ $result = $this->_get_result($res_id);
+ return $this->_fetch_row($result, MDB2_FETCHMODE_ORDERED);
+ }
+
+
+ /**
+ * Get co values for a result row
+ *
+ * @param object Query result handle
+ * @param number Fetch mode identifier
+ * @return mixed Array with col values or FALSE on failure
+ * @access private
+ */
+ function _fetch_row($result, $mode)
+ {
+ if (PEAR::isError($result))
+ {
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => $this->db_link->getMessage()), TRUE, FALSE);
+ return FALSE;
+ }
+
+ return $result->fetchRow($mode);
+ }
+
+
+ /**
+ * Formats input so it can be safely used in a query
+ *
+ * @param mixed Value to quote
+ * @return string Quoted/converted string for use in query
+ * @access public
+ */
+ function quote($input, $type = null)
+ {
+ // create DB handle if not available
+ if (!$this->db_handle)
+ $this->db_connect('r');
+
+ // escape pear identifier chars
+ $rep_chars = array('?' => '\?',
+ '!' => '\!',
+ '&' => '\&');
+
+ return $this->db_handle->quote($input, $type);
+ }
+
+
+ /**
+ * Quotes a string so it can be safely used as a table or column name
+ *
+ * @param string Value to quote
+ * @return string Quoted string for use in query
+ * @deprecated Replaced by rcube_MDB2::quote_identifier
+ * @see rcube_MDB2::quote_identifier
+ * @access public
+ */
+ function quoteIdentifier($str)
+ {
+ return $this->quote_identifier($str);
+ }
+
+
+ /**
+ * Quotes a string so it can be safely used as a table or column name
+ *
+ * @param string Value to quote
+ * @return string Quoted string for use in query
+ * @access public
+ */
+ function quote_identifier($str)
+ {
+ if (!$this->db_handle)
+ $this->db_connect('r');
+
+ return $this->db_handle->quoteIdentifier($str);
+ }
+
+ /**
+ * Escapes a string
+ *
+ * @param string The string to be escaped
+ * @return string The escaped string
+ * @access public
+ * @since 0.1.1
+ */
+ function escapeSimple($str)
+ {
+ if (!$this->db_handle)
+ $this->db_connect('r');
+
+ return $this->db_handle->escape($str);
+ }
+
+
+ /**
+ * Return SQL function for current time and date
+ *
+ * @return string SQL function to use in query
+ * @access public
+ */
+ function now()
+ {
+ switch($this->db_provider)
+ {
+ case 'mssql':
+ return "getdate()";
+
+ default:
+ return "now()";
+ }
+ }
+
+
+ /**
+ * Return SQL statement to convert a field value into a unix timestamp
+ *
+ * @param string Field name
+ * @return string SQL statement to use in query
+ * @access public
+ */
+ function unixtimestamp($field)
+ {
+ switch($this->db_provider)
+ {
+ case 'pgsql':
+ return "EXTRACT (EPOCH FROM $field)";
+ break;
+
+ case 'mssql':
+ return "datediff(s, '1970-01-01 00:00:00', $field)";
+
+ default:
+ return "UNIX_TIMESTAMP($field)";
+ }
+ }
+
+
+ /**
+ * Return SQL statement to convert from a unix timestamp
+ *
+ * @param string Field name
+ * @return string SQL statement to use in query
+ * @access public
+ */
+ function fromunixtime($timestamp)
+ {
+ switch($this->db_provider)
+ {
+ case 'mysqli':
+ case 'mysql':
+ case 'sqlite':
+ return sprintf("FROM_UNIXTIME(%d)", $timestamp);
+
+ default:
+ return date("'Y-m-d H:i:s'", $timestamp);
+ }
+ }
+
+
+ /**
+ * Adds a query result and returns a handle ID
+ *
+ * @param object Query handle
+ * @return mixed Handle ID or FALE on failure
+ * @access private
+ */
+ function _add_result($res)
+ {
+ // sql error occured
+ if (PEAR::isError($res))
+ {
+ raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__,
+ 'message' => $res->getMessage() . " Query: " . substr(preg_replace('/[\r\n]+\s*/', ' ', $res->userinfo), 0, 512)), TRUE, FALSE);
+ return FALSE;
+ }
+ else
+ {
+ $res_id = sizeof($this->a_query_results);
+ $this->a_query_results[$res_id] = $res;
+ $this->last_res_id = $res_id;
+ return $res_id;
+ }
+ }
+
+
+ /**
+ * Resolves a given handle ID and returns the according query handle
+ * If no ID is specified, the last ressource handle will be returned
+ *
+ * @param number Handle ID
+ * @return mixed Ressource handle or FALE on failure
+ * @access private
+ */
+ function _get_result($res_id=NULL)
+ {
+ if ($res_id==NULL)
+ $res_id = $this->last_res_id;
+
+ if ($res_id && isset($this->a_query_results[$res_id]))
+ return $this->a_query_results[$res_id];
+ else
+ return FALSE;
+ }
+
+
+ /**
+ * Create a sqlite database from a file
+ *
+ * @param object SQLite database handle
+ * @param string File path to use for DB creation
+ * @access private
+ */
+ function _sqlite_create_database($dbh, $file_name)
+ {
+ if (empty($file_name) || !is_string($file_name))
+ return;
+
+ $data = '';
+ if ($fd = fopen($file_name, 'r'))
+ {
+ $data = fread($fd, filesize($file_name));
+ fclose($fd);
+ }
+
+ if (strlen($data))
+ sqlite_exec($dbh->connection, $data);
+ }
+
+
+ /**
+ * Add some proprietary database functions to the current SQLite handle
+ * in order to make it MySQL compatible
+ *
+ * @access private
+ */
+ function _sqlite_prepare()
+ {
+ include_once('include/rcube_sqlite.inc');
+
+ // we emulate via callback some missing MySQL function
+ sqlite_create_function($this->db_handle->connection, "from_unixtime", "rcube_sqlite_from_unixtime");
+ sqlite_create_function($this->db_handle->connection, "unix_timestamp", "rcube_sqlite_unix_timestamp");
+ sqlite_create_function($this->db_handle->connection, "now", "rcube_sqlite_now");
+ sqlite_create_function($this->db_handle->connection, "md5", "rcube_sqlite_md5");
+ }
+
+
+ } // end class rcube_db
+
+
+/* this is our own debug handler for the MDB2 connection */
+function mdb2_debug_handler(&$db, $scope, $message, $context = array())
+{
+ if ($scope != 'prepare')
+ {
+ $debug_output = $scope . '('.$db->db_index.'): ';
+ $debug_output .= $message . $db->getOption('log_line_break');
+ write_log('sqllog', $debug_output);
+ }
+}
+
+
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_message.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Logical representation of a mail message with all its data |
+ | and related functions |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_imap.php 1344 2008-04-30 08:21:42Z thomasb $
+
+*/
+
+
+/**
+ * Logical representation of a mail message with all its data
+ * and related functions
+ *
+ * @package Mail
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ */
+class rcube_message
+{
+ private $app;
+ private $imap;
+ private $opt = array();
+ private $inline_parts = array();
+ private $parse_alternative = false;
+
+ public $uid = null;
+ public $headers;
+ public $structure;
+ public $parts = array();
+ public $mime_parts = array();
+ public $attachments = array();
+ public $subject = '';
+ public $is_safe = false;
+
+
+ function __construct($uid)
+ {
+ $this->app = rcmail::get_instance();
+ $this->imap = $this->app->imap;
+
+ $this->uid = $uid;
+ $this->headers = $this->imap->get_headers($uid);
+ $this->subject = rcube_imap::decode_mime_string($this->headers->subject, $this->headers->charset);
+
+ $this->is_safe = (intval($_GET['_safe']) || $_SESSION['safe_messages'][$uid]) ? true : false;
+ $_SESSION['safe_messages'][$uid] = $this->is_safe;
+
+ $this->opt = array(
+ 'safe' => $this->is_safe,
+ 'prefer_html' => $this->app->config->get('prefer_html'),
+ 'get_url' => rcmail_url('get', array('_mbox' => $this->imap->get_mailbox_name(), '_uid' => $uid))
+ );
+
+ if ($this->structure = $this->imap->get_structure($uid)) {
+ $this->get_mime_numbers($this->structure);
+ $this->parse_structure($this->structure);
+ }
+ else {
+ $this->body = $this->imap->get_body($uid);
+ }
+ }
+
+
+ /**
+ * Return a (decoded) message header
+ *
+ * @param string Header name
+ * @param bool Don't mime-decode the value
+ * @return string Header value
+ */
+ public function get_header($name, $raw = false)
+ {
+ $value = $this->headers->$name;
+ return $raw ? $value : $this->imap->decode_header($value);
+ }
+
+
+ /**
+ * Compose a valid URL for getting a message part
+ *
+ * @param string Part MIME-ID
+ * @return string URL or false if part does not exist
+ */
+ public function get_part_url($mime_id)
+ {
+ if ($this->mime_parts[$mime_id])
+ return $this->opt['get_url'] . "&_part=" . $mime_id;
+ else
+ return false;
+ }
+
+
+ /**
+ * Get content of a specific part of this message
+ *
+ * @param string Part MIME-ID
+ * @return string Part content
+ */
+ public function get_part_content($mime_id)
+ {
+ if ($part = $this->mime_parts[$mime_id])
+ return $this->imap->get_message_part($this->uid, $mime_id, $part);
+ else
+ return null;
+ }
+
+
+ /**
+ * Determine if the message contains a HTML part
+ *
+ * @return bool True if a HTML is available, False if not
+ */
+ function has_html_part()
+ {
+ // check all message parts
+ foreach ($this->parts as $pid => $part) {
+ $mimetype = strtolower($part->ctype_primary . '/' . $part->ctype_secondary);
+ if ($mimetype == 'text/html')
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Return the first HTML part of this message
+ *
+ * @return string HTML message part content
+ */
+ function first_html_part()
+ {
+ $html_part = null;
+
+ // check all message parts
+ foreach ($this->mime_parts as $mime_id => $part) {
+ $mimetype = strtolower($part->ctype_primary . '/' . $part->ctype_secondary);
+ if ($mimetype == 'text/html') {
+ $html_part = $this->imap->get_message_part($this->uid, $mime_id, $part);
+ }
+ }
+
+ return $html_part;
+ }
+
+
+ /**
+ * Return the first text part of this message
+ *
+ * @return string Plain text message/part content
+ */
+ function first_text_part()
+ {
+ // no message structure, return complete body
+ if (empty($this->parts))
+ return $this->body;
+
+ $out = null;
+
+ // check all message parts
+ foreach ($this->mime_parts as $mime_id => $part) {
+ $mimetype = strtolower($part->ctype_primary . '/' . $part->ctype_secondary);
+
+ if ($mimetype == 'text/plain') {
+ $out = $this->imap->get_message_part($this->uid, $mime_id, $part);
+ break;
+ }
+ else if ($mimetype == 'text/html') {
+ $html_part = $this->imap->get_message_part($this->uid, $mime_id, $part);
+
+ // remove special chars encoding
+ $trans = array_flip(get_html_translation_table(HTML_ENTITIES));
+ $html_part = strtr($html_part, $trans);
+
+ // create instance of html2text class
+ $txt = new html2text($html_part);
+ $out = $txt->get_text();
+ break;
+ }
+ }
+
+ return $out;
+ }
+
+
+ /**
+ * Raad the message structure returend by the IMAP server
+ * and build flat lists of content parts and attachments
+ *
+ * @param object rcube_message_part Message structure node
+ * @param bool True when called recursively
+ */
+ private function parse_structure($structure, $recursive = false)
+ {
+ $message_ctype_primary = strtolower($structure->ctype_primary);
+ $message_ctype_secondary = strtolower($structure->ctype_secondary);
+
+ // show message headers
+ if ($recursive && is_array($structure->headers) && isset($structure->headers['subject'])) {
+ $c = new stdClass;
+ $c->type = 'headers';
+ $c->headers = &$structure->headers;
+ $this->parts[] = $c;
+ }
+
+ // print body if message doesn't have multiple parts
+ if ($message_ctype_primary == 'text' && !$recursive) {
+ $structure->type = 'content';
+ $this->parts[] = &$structure;
+ }
+ // message contains alternative parts
+ else if ($message_ctype_primary == 'multipart' && ($message_ctype_secondary == 'alternative') && is_array($structure->parts)) {
+ // get html/plaintext parts
+ $plain_part = $html_part = $print_part = $related_part = null;
+
+ foreach ($structure->parts as $p => $sub_part) {
+ $rel_parts = $attachmnts = null;
+ $sub_ctype_primary = strtolower($sub_part->ctype_primary);
+ $sub_ctype_secondary = strtolower($sub_part->ctype_secondary);
+
+ // check if sub part is
+ if ($sub_ctype_primary=='text' && $sub_ctype_secondary=='plain')
+ $plain_part = $p;
+ else if ($sub_ctype_primary=='text' && $sub_ctype_secondary=='html')
+ $html_part = $p;
+ else if ($sub_ctype_primary=='text' && $sub_ctype_secondary=='enriched')
+ $enriched_part = $p;
+ else if ($sub_ctype_primary=='multipart' && ($sub_ctype_secondary=='related' || $sub_ctype_secondary=='mixed'))
+ $related_part = $p;
+ }
+
+ // parse related part (alternative part could be in here)
+ if ($related_part !== null && !$this->parse_alternative) {
+ $this->parse_alternative = true;
+ $this->parse_structure($structure->parts[$related_part], true);
+ $this->parse_alternative = false;
+
+ // if plain part was found, we should unset it if html is preferred
+ if ($this->opt['prefer_html'] && count($this->parts))
+ $plain_part = null;
+ }
+
+ // choose html/plain part to print
+ if ($html_part !== null && $this->opt['prefer_html']) {
+ $print_part = &$structure->parts[$html_part];
+ }
+ else if ($enriched_part !== null) {
+ $print_part = &$structure->parts[$enriched_part];
+ }
+ else if ($plain_part !== null) {
+ $print_part = &$structure->parts[$plain_part];
+ }
+
+ // add the right message body
+ if (is_object($print_part)) {
+ $print_part->type = 'content';
+ $this->parts[] = $print_part;
+ }
+ // show plaintext warning
+ else if ($html_part !== nullL && empty($this->parts)) {
+ $c = new stdClass;
+ $c->type = 'content';
+ $c->body = rcube_label('htmlmessage');
+ $c->ctype_primary = 'text';
+ $c->ctype_secondary = 'plain';
+
+ $this->parts[] = $c;
+ }
+
+ // add html part as attachment
+ if ($html_part !== null && $structure->parts[$html_part] !== $print_part) {
+ $html_part = &$structure->parts[$html_part];
+ $html_part->filename = rcube_label('htmlmessage');
+ $html_part->mimetype = 'text/html';
+
+ $this->attachments[] = $html_part;
+ }
+ }
+ // this is an ecrypted message -> create a plaintext body with the according message
+ else if ($message_ctype_primary == 'multipart' && $message_ctype_secondary == 'encrypted') {
+ $p = new stdClass;
+ $p->type = 'content';
+ $p->ctype_primary = 'text';
+ $p->ctype_secondary = 'plain';
+ $p->body = rcube_label('encryptedmessage');
+
+ $this->parts[] = $p;
+ }
+ // message contains multiple parts
+ else if (is_array($structure->parts) && !empty($structure->parts)) {
+ // iterate over parts
+ for ($i=0; $i < count($structure->parts); $i++) {
+ $mail_part = &$structure->parts[$i];
+ $primary_type = strtolower($mail_part->ctype_primary);
+ $secondary_type = strtolower($mail_part->ctype_secondary);
+
+ // multipart/alternative
+ if ($primary_type=='multipart') {
+ $this->parse_structure($mail_part, true);
+ }
+ // part text/[plain|html] OR message/delivery-status
+ else if (($primary_type == 'text' && ($secondary_type == 'plain' || $secondary_type == 'html') && $mail_part->disposition != 'attachment') ||
+ ($primary_type == 'message' && ($secondary_type == 'delivery-status' || $secondary_type == 'disposition-notification'))) {
+
+ // add text part if we're not in alternative mode or if it matches the prefs
+ if (!$this->parse_alternative ||
+ ($secondary_type == 'html' && $this->opt['prefer_html']) ||
+ ($secondary_type == 'plain' && !$this->opt['prefer_html'])) {
+ $mail_part->type = 'content';
+ $this->parts[] = $mail_part;
+ }
+
+ // list as attachment as well
+ if (!empty($mail_part->filename))
+ $this->attachments[] = $mail_part;
+ }
+ // part message/*
+ else if ($primary_type=='message') {
+ $this->parse_structure($mail_part, true);
+ }
+ // ignore "virtual" protocol parts
+ else if ($primary_type == 'protocol')
+ continue;
+
+ // part is file/attachment
+ else if ($mail_part->disposition == 'attachment' || $mail_part->disposition == 'inline' ||
+ $mail_part->headers['content-id'] || (empty($mail_part->disposition) && $mail_part->filename)) {
+ // skip apple resource forks
+ if ($message_ctype_secondary == 'appledouble' && $secondary_type == 'applefile')
+ continue;
+
+ // part belongs to a related message
+ if ($message_ctype_secondary == 'related' && $mail_part->headers['content-id']) {
+ $mail_part->content_id = preg_replace(array('/^</', '/>$/'), '', $mail_part->headers['content-id']);
+ $this->inline_parts[] = $mail_part;
+ }
+ // is regular attachment
+ else {
+ if (!$mail_part->filename)
+ $mail_part->filename = 'Part '.$mail_part->mime_id;
+ $this->attachments[] = $mail_part;
+ }
+ }
+ }
+
+ // if this was a related part try to resolve references
+ if ($message_ctype_secondary == 'related' && sizeof($this->inline_parts)) {
+ $a_replaces = array();
+
+ foreach ($this->inline_parts as $inline_object) {
+ $a_replaces['cid:'.$inline_object->content_id] = $this->get_part_url($inline_object->mime_id);
+ }
+
+ // add replace array to each content part
+ // (will be applied later when part body is available)
+ foreach ($this->parts as $i => $part) {
+ if ($part->type == 'content')
+ $this->parts[$i]->replaces = $a_replaces;
+ }
+ }
+ }
+
+ // message is single part non-text
+ else if ($structure->filename) {
+ $this->attachments[] = $structure;
+ }
+ }
+
+
+ /**
+ * Fill aflat array with references to all parts, indexed by part numbers
+ *
+ * @param object rcube_message_part Message body structure
+ */
+ private function get_mime_numbers(&$part)
+ {
+ if (strlen($part->mime_id))
+ $this->mime_parts[$part->mime_id] = &$part;
+
+ if (is_array($part->parts))
+ for ($i=0; $i<count($part->parts); $i++)
+ $this->get_mime_numbers($part->parts[$i]);
+ }
+
+
+}
+
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_result_set.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2006-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Class representing an address directory result set |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_result_set.php 328 2006-08-30 17:41:21Z thomasb $
+
+*/
+
+
+/**
+ * RoundCube result set class.
+ * Representing an address directory result set.
+ *
+ * @package Addressbook
+ */
+class rcube_result_set
+{
+ var $count = 0;
+ var $first = 0;
+ var $current = 0;
+ var $records = array();
+
+ function __construct($c=0, $f=0)
+ {
+ $this->count = (int)$c;
+ $this->first = (int)$f;
+ }
+
+ function rcube_result_set($c=0, $f=0)
+ {
+ $this->__construct($c, $f);
+ }
+
+ function add($rec)
+ {
+ $this->records[] = $rec;
+ }
+
+ function iterate()
+ {
+ return $this->records[$this->current++];
+ }
+
+ function first()
+ {
+ $this->current = 0;
+ return $this->records[$this->current++];
+ }
+
+ // alias
+ function next()
+ {
+ return $this->iterate();
+ }
+
+ function seek($i)
+ {
+ $this->current = $i;
+ }
+
+}
\ No newline at end of file
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: rcube_shared.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: rcube_shared.inc 1490 2008-06-07 18:48:59Z alec $
*/
}
-/**
- * Get localized text in the desired language
- *
- * @param mixed Named parameters array or label name
- * @return string Localized text
- */
-function rcube_label($attrib)
-{
- global $sess_user_lang, $INSTALL_PATH, $OUTPUT;
- static $sa_text_data, $s_language, $utf8_decode;
-
- // extract attributes
- if (is_string($attrib))
- $attrib = array('name' => $attrib);
-
- $nr = is_numeric($attrib['nr']) ? $attrib['nr'] : 1;
- $vars = isset($attrib['vars']) ? $attrib['vars'] : '';
-
- $command_name = !empty($attrib['command']) ? $attrib['command'] : NULL;
- $alias = $attrib['name'] ? $attrib['name'] : ($command_name && $command_label_map[$command_name] ? $command_label_map[$command_name] : '');
-
-
- // load localized texts
- if (!$sa_text_data || $s_language != $sess_user_lang)
- {
- $sa_text_data = array();
-
- // get english labels (these should be complete)
- @include($INSTALL_PATH.'program/localization/en_US/labels.inc');
- @include($INSTALL_PATH.'program/localization/en_US/messages.inc');
-
- if (is_array($labels))
- $sa_text_data = $labels;
- if (is_array($messages))
- $sa_text_data = array_merge($sa_text_data, $messages);
-
- // include user language files
- if ($sess_user_lang!='en' && is_dir($INSTALL_PATH.'program/localization/'.$sess_user_lang))
- {
- include_once($INSTALL_PATH.'program/localization/'.$sess_user_lang.'/labels.inc');
- include_once($INSTALL_PATH.'program/localization/'.$sess_user_lang.'/messages.inc');
-
- if (is_array($labels))
- $sa_text_data = array_merge($sa_text_data, $labels);
- if (is_array($messages))
- $sa_text_data = array_merge($sa_text_data, $messages);
- }
-
- $s_language = $sess_user_lang;
- }
-
- // text does not exist
- if (!($text_item = $sa_text_data[$alias]))
- {
- /*
- raise_error(array(
- 'code' => 500,
- 'type' => 'php',
- 'line' => __LINE__,
- 'file' => __FILE__,
- 'message' => "Missing localized text for '$alias' in '$sess_user_lang'"), TRUE, FALSE);
- */
- return "[$alias]";
- }
-
- // make text item array
- $a_text_item = is_array($text_item) ? $text_item : array('single' => $text_item);
-
- // decide which text to use
- if ($nr==1)
- $text = $a_text_item['single'];
- else if ($nr>0)
- $text = $a_text_item['multiple'];
- else if ($nr==0)
- {
- if ($a_text_item['none'])
- $text = $a_text_item['none'];
- else if ($a_text_item['single'])
- $text = $a_text_item['single'];
- else if ($a_text_item['multiple'])
- $text = $a_text_item['multiple'];
- }
-
- // default text is single
- if ($text=='')
- $text = $a_text_item['single'];
-
- // replace vars in text
- if (is_array($attrib['vars']))
- {
- foreach ($attrib['vars'] as $var_key=>$var_value)
- $a_replace_vars[substr($var_key, 0, 1)=='$' ? substr($var_key, 1) : $var_key] = $var_value;
- }
-
- if ($a_replace_vars)
- $text = preg_replace('/\${?([_a-z]{1}[_a-z0-9]*)}?/ei', '$a_replace_vars["\1"]', $text);
-
- // remove variables in text which were not available in arg $vars and $nr
- eval("\$text = <<<EOF
-$text
-EOF;
-");
-
- // format output
- if (($attrib['uppercase'] && strtolower($attrib['uppercase']=='first')) || $attrib['ucfirst'])
- return ucfirst($text);
- else if ($attrib['uppercase'])
- return strtoupper($text);
- else if ($attrib['lowercase'])
- return strtolower($text);
-
- return $text;
-}
-
-
/**
* Send HTTP headers to prevent caching this page
*/
* @param int Modified date as unix timestamp
* @param string Etag value for caching
*/
-function send_modified_header($mdate, $etag=null)
+function send_modified_header($mdate, $etag=null, $skip_check=false)
{
if (headers_sent())
return;
$iscached = false;
- if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $mdate)
- $iscached = true;
-
$etag = $etag ? "\"$etag\"" : null;
- if ($etag)
- $iscached = ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag);
+
+ if (!$skip_check)
+ {
+ if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $mdate)
+ $iscached = true;
+
+ if ($etag)
+ $iscached = ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag);
+ }
if ($iscached)
header("HTTP/1.x 304 Not Modified");
}
-/**
- * Return the last occurence of a string in another string
- *
- * @param haystack string string in which to search
- * @param needle string string for which to search
- * @return index of needle within haystack, or false if not found
- */
-function strrstr($haystack, $needle)
-{
- $pver = phpversion();
- if ($pver[0] >= 5)
- return strrpos($haystack, $needle);
- else
- {
- $index = strpos(strrev($haystack), strrev($needle));
- if($index === false)
- return false;
-
- $index = strlen($haystack) - strlen($needle) - $index;
- return $index;
- }
-}
-
/**
* A method to guess the mime_type of an attachment.
*
return $mime_type;
}
-?>
\ No newline at end of file
+
+/**
+ * A method to guess encoding of a string.
+ *
+ * @param string $string String.
+ * @param string $failover Default result for failover.
+ *
+ * @return string
+ */
+function rc_detect_encoding($string, $failover='')
+{
+ if (!function_exists('mb_detect_encoding')) {
+ return $failover;
+ }
+
+ // FIXME: the order is important, because sometimes
+ // iso string is detected as euc-jp and etc.
+ $enc = array(
+ 'UTF-8', 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4',
+ 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9',
+ 'ISO-8859-10', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16',
+ 'WINDOWS-1252', 'WINDOWS-1251', 'EUC-JP', 'EUC-TW', 'KOI8-R'
+ );
+
+ $result = mb_detect_encoding($string, join(',', $enc));
+
+ return $result ? $result : $failover;
+}
+
+?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: rcube_smtp.inc 1136 2008-02-25 10:17:35Z till $
+ $Id: rcube_smtp.inc 1360 2008-05-07 09:38:44Z thomasb $
*/
*/
function smtp_mail($from, $recipients, &$headers, &$body, &$response)
{
- global $SMTP_CONN, $CONFIG;
+ global $SMTP_CONN, $CONFIG, $RCMAIL;
$smtp_timeout = null;
$smtp_host = $CONFIG['smtp_server'];
$smtp_port = is_numeric($CONFIG['smtp_port']) ? $CONFIG['smtp_port'] : 25;
$smtp_user = $CONFIG['smtp_user'];
if (strstr($CONFIG['smtp_pass'], '%p'))
- $smtp_pass = str_replace('%p', decrypt_passwd($_SESSION['password']), $CONFIG['smtp_pass']);
+ $smtp_pass = str_replace('%p', $RCMAIL->decrypt_passwd($_SESSION['password']), $CONFIG['smtp_pass']);
else
$smtp_pass = $CONFIG['smtp_pass'];
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_template.php |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2006-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | Class to handle HTML page output using a skin template. |
+ | Extends rcube_html_page class from rcube_shared.inc |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id$
+
+ */
+
+
+/**
+ * Class to create HTML page output using a skin template
+ *
+ * @package View
+ * @todo Documentation
+ * @uses rcube_html_page
+ */
+class rcube_template extends rcube_html_page
+{
+ var $app;
+ var $config;
+ var $task = '';
+ var $framed = false;
+ var $pagetitle = '';
+ var $env = array();
+ var $js_env = array();
+ var $js_commands = array();
+ var $object_handlers = array();
+
+ public $ajax_call = false;
+
+ /**
+ * Constructor
+ *
+ * @todo Use jQuery's $(document).ready() here.
+ * @todo Replace $this->config with the real rcube_config object
+ */
+ public function __construct($task, $framed = false)
+ {
+ parent::__construct();
+
+ $this->app = rcmail::get_instance();
+ $this->config = $this->app->config->all();
+
+ //$this->framed = $framed;
+ $this->task = $task;
+
+ // add common javascripts
+ $javascript = 'var '.JS_OBJECT_NAME.' = new rcube_webmail();';
+
+ // don't wait for page onload. Call init at the bottom of the page (delayed)
+ $javascript_foot = "if (window.call_init)\n call_init('".JS_OBJECT_NAME."');";
+
+ $this->add_script($javascript, 'head_top');
+ $this->add_script($javascript_foot, 'foot');
+ $this->scripts_path = 'program/js/';
+ $this->include_script('common.js');
+ $this->include_script('app.js');
+
+ // register common UI objects
+ $this->add_handlers(array(
+ 'loginform' => array($this, 'login_form'),
+ 'username' => array($this, 'current_username'),
+ 'message' => array($this, 'message_container'),
+ 'charsetselector' => array($this, 'charset_selector'),
+ ));
+ }
+
+ /**
+ * Set environment variable
+ *
+ * @param string Property name
+ * @param mixed Property value
+ * @param boolean True if this property should be added to client environment
+ */
+ public function set_env($name, $value, $addtojs = true)
+ {
+ $this->env[$name] = $value;
+ if ($addtojs || isset($this->js_env[$name])) {
+ $this->js_env[$name] = $value;
+ }
+ }
+
+
+ /**
+ * Set page title variable
+ */
+ public function set_pagetitle($title)
+ {
+ $this->pagetitle = $title;
+ }
+
+
+ /**
+ * Register a template object handler
+ *
+ * @param string Object name
+ * @param string Function name to call
+ * @return void
+ */
+ public function add_handler($obj, $func)
+ {
+ $this->object_handlers[$obj] = $func;
+ }
+
+ /**
+ * Register a list of template object handlers
+ *
+ * @param array Hash array with object=>handler pairs
+ * @return void
+ */
+ public function add_handlers($arr)
+ {
+ $this->object_handlers = array_merge($this->object_handlers, $arr);
+ }
+
+ /**
+ * Register a GUI object to the client script
+ *
+ * @param string Object name
+ * @param string Object ID
+ * @return void
+ */
+ public function add_gui_object($obj, $id)
+ {
+ $this->add_script(JS_OBJECT_NAME.".gui_object('$obj', '$id');");
+ }
+
+ /**
+ * Call a client method
+ *
+ * @param string Method to call
+ * @param ... Additional arguments
+ */
+ public function command()
+ {
+ $this->js_commands[] = func_get_args();
+ }
+
+
+ /**
+ * Add a localized label to the client environment
+ */
+ public function add_label()
+ {
+ $arg_list = func_get_args();
+ foreach ($arg_list as $i => $name) {
+ $this->command('add_label', $name, rcube_label($name));
+ }
+ }
+
+
+ /**
+ * Invoke display_message command
+ *
+ * @param string Message to display
+ * @param string Message type [notice|confirm|error]
+ * @param array Key-value pairs to be replaced in localized text
+ * @uses self::command()
+ */
+ public function show_message($message, $type='notice', $vars=NULL)
+ {
+ $this->command(
+ 'display_message',
+ rcube_label(array('name' => $message, 'vars' => $vars)),
+ $type);
+ }
+
+
+ /**
+ * Delete all stored env variables and commands
+ *
+ * @return void
+ * @uses rcube_html::reset()
+ * @uses self::$env
+ * @uses self::$js_env
+ * @uses self::$js_commands
+ * @uses self::$object_handlers
+ */
+ public public function reset()
+ {
+ $this->env = array();
+ $this->js_env = array();
+ $this->js_commands = array();
+ $this->object_handlers = array();
+ parent::reset();
+ }
+
+
+ /**
+ * Send the request output to the client.
+ * This will either parse a skin tempalte or send an AJAX response
+ *
+ * @param string Template name
+ * @param boolean True if script should terminate (default)
+ */
+ public function send($templ = null, $exit = true)
+ {
+ if ($templ != 'iframe') {
+ $this->parse($templ, false);
+ }
+ else {
+ $this->framed = $templ == 'iframe' ? true : $this->framed;
+ $this->write();
+ }
+
+ if ($exit) {
+ exit;
+ }
+ }
+
+ /**
+ * Process template and write to stdOut
+ *
+ * @param string HTML template
+ * @see rcube_html_page::write()
+ * @override
+ */
+ public function write($template = '')
+ {
+ // unlock interface after iframe load
+ if ($this->framed) {
+ array_unshift($this->js_commands, array('set_busy', false));
+ }
+ // write all env variables to client
+ $js = $this->framed ? "if(window.parent) {\n" : '';
+ $js .= $this->get_js_commands() . ($this->framed ? ' }' : '');
+ $this->add_script($js, 'head_top');
+
+ // call super method
+ parent::write($template, $this->config['skin_path']);
+ }
+
+ /**
+ * Parse a specific skin template and deliver to stdout
+ *
+ * Either returns nothing, or exists hard (exit();)
+ *
+ * @param string Template name
+ * @param boolean Exit script
+ * @return void
+ * @link http://php.net/manual/en/function.exit.php
+ */
+ private function parse($name = 'main', $exit = true)
+ {
+ $skin_path = $this->config['skin_path'];
+
+ // read template file
+ $templ = '';
+ $path = "$skin_path/templates/$name.html";
+
+ if (($fp = fopen($path, 'r')) === false) {
+ $message = '';
+ ob_start();
+ fopen($path, 'r');
+ $message.= ob_get_contents();
+ ob_end_clean();
+ raise_error(array(
+ 'code' => 501,
+ 'type' => 'php',
+ 'line' => __LINE__,
+ 'file' => __FILE__,
+ 'message' => 'Error loading template for '.$name.': '.$message
+ ), true, true);
+ return false;
+ }
+ $templ = fread($fp, filesize($path));
+ fclose($fp);
+
+ // parse for specialtags
+ $output = $this->parse_conditions($templ);
+ $output = $this->parse_xml($output);
+
+ // add debug console
+ if ($this->config['debug_level'] & 8) {
+ $this->add_footer('<div style="position:absolute;top:5px;left:5px;width:400px;padding:0.2em;background:white;opacity:0.8;z-index:9000">
+ <a href="#toggle" onclick="con=document.getElementById(\'dbgconsole\');con.style.display=(con.style.display==\'none\'?\'block\':\'none\');return false">console</a>
+ <form action="/" name="debugform"><textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:x-small"></textarea></form></div>'
+ );
+ }
+ $output = $this->parse_with_globals($output);
+ $this->write(trim($output), $skin_path);
+ if ($exit) {
+ exit;
+ }
+ }
+
+
+ /**
+ * Return executable javascript code for all registered commands
+ *
+ * @return string $out
+ */
+ private function get_js_commands()
+ {
+ $out = '';
+ if (!$this->framed && !empty($this->js_env)) {
+ $out .= JS_OBJECT_NAME . '.set_env('.json_serialize($this->js_env).");\n";
+ }
+ foreach ($this->js_commands as $i => $args) {
+ $method = array_shift($args);
+ foreach ($args as $i => $arg) {
+ $args[$i] = json_serialize($arg);
+ }
+ $parent = $this->framed || preg_match('/^parent\./', $method);
+ $out .= sprintf(
+ "%s.%s(%s);\n",
+ ($parent ? 'parent.' : '') . JS_OBJECT_NAME,
+ preg_replace('/^parent\./', '', $method),
+ implode(',', $args)
+ );
+ }
+ // add command to set page title
+ if ($this->ajax_call && !empty($this->pagetitle)) {
+ $out .= sprintf(
+ "this.set_pagetitle('%s');\n",
+ JQ((!empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '') . $this->pagetitle)
+ );
+ }
+ return $out;
+ }
+
+ /**
+ * Make URLs starting with a slash point to skin directory
+ *
+ * @param string Input string
+ * @return string
+ */
+ public function abs_url($str)
+ {
+ return preg_replace('/^\//', $this->config['skin_path'].'/', $str);
+ }
+
+
+ /***** Template parsing methods *****/
+
+ /**
+ * Replace all strings ($varname)
+ * with the content of the according global variable.
+ */
+ private function parse_with_globals($input)
+ {
+ $GLOBALS['__comm_path'] = Q($this->app->comm_path);
+ return preg_replace('/\$(__[a-z0-9_\-]+)/e', '$GLOBALS["\\1"]', $input);
+ }
+
+ /**
+ * Public wrapper to dipp into template parsing.
+ *
+ * @param string $input
+ * @return string
+ * @uses rcube_template::parse_xml()
+ * @since 0.1-rc1
+ */
+ public function just_parse($input)
+ {
+ return $this->parse_xml($input);
+ }
+
+ /**
+ * Parse for conditional tags
+ *
+ * @param string $input
+ * @return string
+ */
+ private function parse_conditions($input)
+ {
+ $matches = preg_split('/<roundcube:(if|elseif|else|endif)\s+([^>]+)>/is', $input, 2, PREG_SPLIT_DELIM_CAPTURE);
+ if ($matches && count($matches) == 4) {
+ if (preg_match('/^(else|endif)$/i', $matches[1])) {
+ return $matches[0] . $this->parse_conditions($matches[3]);
+ }
+ $attrib = parse_attrib_string($matches[2]);
+ if (isset($attrib['condition'])) {
+ $condmet = $this->check_condition($attrib['condition']);
+ $submatches = preg_split('/<roundcube:(elseif|else|endif)\s+([^>]+)>/is', $matches[3], 2, PREG_SPLIT_DELIM_CAPTURE);
+ if ($condmet) {
+ $result = $submatches[0];
+ $result.= ($submatches[1] != 'endif' ? preg_replace('/.*<roundcube:endif\s+[^>]+>/Uis', '', $submatches[3], 1) : $submatches[3]);
+ }
+ else {
+ $result = "<roundcube:$submatches[1] $submatches[2]>" . $submatches[3];
+ }
+ return $matches[0] . $this->parse_conditions($result);
+ }
+ raise_error(array(
+ 'code' => 500,
+ 'type' => 'php',
+ 'line' => __LINE__,
+ 'file' => __FILE__,
+ 'message' => "Unable to parse conditional tag " . $matches[2]
+ ), true, false);
+ }
+ return $input;
+ }
+
+
+ /**
+ * Determines if a given condition is met
+ *
+ * @todo Get rid off eval() once I understand what this does.
+ * @todo Extend this to allow real conditions, not just "set"
+ * @param string Condition statement
+ * @return boolean True if condition is met, False is not
+ */
+ private function check_condition($condition)
+ {
+ $condition = preg_replace(
+ array(
+ '/session:([a-z0-9_]+)/i',
+ '/config:([a-z0-9_]+)/i',
+ '/env:([a-z0-9_]+)/i',
+ '/request:([a-z0-9_]+)/ie'
+ ),
+ array(
+ "\$_SESSION['\\1']",
+ "\$this->config['\\1']",
+ "\$this->env['\\1']",
+ "get_input_value('\\1', RCUVE_INPUT_GPC)"
+ ),
+ $condition);
+
+ return eval("return (".$condition.");");
+ }
+
+
+ /**
+ * Search for special tags in input and replace them
+ * with the appropriate content
+ *
+ * @param string Input string to parse
+ * @return string Altered input string
+ * @todo Maybe a cache.
+ */
+ private function parse_xml($input)
+ {
+ return preg_replace('/<roundcube:([-_a-z]+)\s+([^>]+)>/Uie', "\$this->xml_command('\\1', '\\2')", $input);
+ }
+
+
+ /**
+ * Convert a xml command tag into real content
+ *
+ * @param string Tag command: object,button,label, etc.
+ * @param string Attribute string
+ * @return string Tag/Object content
+ */
+ private function xml_command($command, $str_attrib, $add_attrib = array())
+ {
+ $command = strtolower($command);
+ $attrib = parse_attrib_string($str_attrib) + $add_attrib;
+
+ // empty output if required condition is not met
+ if (!empty($attrib['condition']) && !$this->check_condition($attrib['condition'])) {
+ return '';
+ }
+
+ // execute command
+ switch ($command) {
+ // return a button
+ case 'button':
+ if ($attrib['name'] || $attrib['command']) {
+ return $this->button($attrib);
+ }
+ break;
+
+ // show a label
+ case 'label':
+ if ($attrib['name'] || $attrib['command']) {
+ return Q(rcube_label($attrib + array('vars' => array('product' => $this->config['product_name']))));
+ }
+ break;
+
+ // include a file
+ case 'include':
+ $path = realpath($this->config['skin_path'].$attrib['file']);
+ if ($fsize = filesize($path)) {
+ if ($this->config['skin_include_php']) {
+ $incl = $this->include_php($path);
+ }
+ else if ($fp = fopen($path, 'r')) {
+ $incl = fread($fp, $fsize);
+ fclose($fp);
+ }
+ return $this->parse_xml($incl);
+ }
+ break;
+
+ case 'plugin.include':
+ //rcube::tfk_debug(var_export($this->config['skin_path'], true));
+ $path = realpath($this->config['skin_path'].$attrib['file']);
+ if (!$path) {
+ //rcube::tfk_debug("Does not exist:");
+ //rcube::tfk_debug($this->config['skin_path']);
+ //rcube::tfk_debug($attrib['file']);
+ //rcube::tfk_debug($path);
+ }
+ $incl = file_get_contents($path);
+ if ($incl) {
+ return $this->parse_xml($incl);
+ }
+ break;
+
+ // return code for a specific application object
+ case 'object':
+ $object = strtolower($attrib['name']);
+
+ // we are calling a class/method
+ if (($handler = $this->object_handlers[$object]) && is_array($handler)) {
+ if ((is_object($handler[0]) && method_exists($handler[0], $handler[1])) ||
+ (is_string($handler[0]) && class_exists($handler[0])))
+ return call_user_func($handler, $attrib);
+ }
+ else if (function_exists($handler)) {
+ // execute object handler function
+ return call_user_func($handler, $attrib);
+ }
+
+ if ($object=='productname') {
+ $name = !empty($this->config['product_name']) ? $this->config['product_name'] : 'RoundCube Webmail';
+ return Q($name);
+ }
+ if ($object=='version') {
+ $ver = (string)RCMAIL_VERSION;
+ if (is_file(INSTALL_PATH . '.svn/entries')) {
+ if (preg_match('/Revision:\s(\d+)/', @shell_exec('svn info'), $regs))
+ $ver .= ' [SVN r'.$regs[1].']';
+ }
+ return $ver;
+ }
+ if ($object=='pagetitle') {
+ $task = $this->task;
+ $title = !empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '';
+
+ if (!empty($this->pagetitle)) {
+ $title .= $this->pagetitle;
+ }
+ else if ($task == 'login') {
+ $title = rcube_label(array('name' => 'welcome', 'vars' => array('product' => $this->config['product_name'])));
+ }
+ else {
+ $title .= ucfirst($task);
+ }
+
+ return Q($title);
+ }
+ break;
+
+ // return variable
+ case 'var':
+ $var = explode(':', $attrib['name']);
+ $name = $var[1];
+ $value = '';
+
+ switch ($var[0]) {
+ case 'env':
+ $value = $this->env[$name];
+ break;
+ case 'config':
+ $value = $this->config[$name];
+ if (is_array($value) && $value[$_SESSION['imap_host']]) {
+ $value = $value[$_SESSION['imap_host']];
+ }
+ break;
+ case 'request':
+ $value = get_input_value($name, RCUBE_INPUT_GPC);
+ break;
+ case 'session':
+ $value = $_SESSION[$name];
+ break;
+ }
+
+ if (is_array($value)) {
+ $value = implode(', ', $value);
+ }
+
+ return Q($value);
+ break;
+ }
+ return '';
+ }
+
+ /**
+ * Include a specific file and return it's contents
+ *
+ * @param string File path
+ * @return string Contents of the processed file
+ */
+ private function include_php($file)
+ {
+ ob_start();
+ include $file;
+ $out = ob_get_contents();
+ ob_end_clean();
+
+ return $out;
+ }
+
+ /**
+ * Create and register a button
+ *
+ * @param array Named button attributes
+ * @return string HTML button
+ * @todo Remove all inline JS calls and use jQuery instead.
+ * @todo Remove all sprintf()'s - they are pretty, but also slow.
+ */
+ private function button($attrib)
+ {
+ static $sa_buttons = array();
+ static $s_button_count = 100;
+
+ // these commands can be called directly via url
+ $a_static_commands = array('compose', 'list');
+
+ if (!($attrib['command'] || $attrib['name'])) {
+ return '';
+ }
+
+ $browser = new rcube_browser();
+
+ // try to find out the button type
+ if ($attrib['type']) {
+ $attrib['type'] = strtolower($attrib['type']);
+ }
+ else {
+ $attrib['type'] = ($attrib['image'] || $attrib['imagepas'] || $attrib['imageact']) ? 'image' : 'link';
+ }
+ $command = $attrib['command'];
+
+ // take the button from the stack
+ if ($attrib['name'] && $sa_buttons[$attrib['name']]) {
+ $attrib = $sa_buttons[$attrib['name']];
+ }
+ else if($attrib['image'] || $attrib['imageact'] || $attrib['imagepas'] || $attrib['class']) {
+ // add button to button stack
+ if (!$attrib['name']) {
+ $attrib['name'] = $command;
+ }
+ if (!$attrib['image']) {
+ $attrib['image'] = $attrib['imagepas'] ? $attrib['imagepas'] : $attrib['imageact'];
+ }
+ $sa_buttons[$attrib['name']] = $attrib;
+ }
+ else if ($command && $sa_buttons[$command]) {
+ // get saved button for this command/name
+ $attrib = $sa_buttons[$command];
+ }
+
+ // set border to 0 because of the link arround the button
+ if ($attrib['type']=='image' && !isset($attrib['border'])) {
+ $attrib['border'] = 0;
+ }
+ if (!$attrib['id']) {
+ $attrib['id'] = sprintf('rcmbtn%d', $s_button_count++);
+ }
+ // get localized text for labels and titles
+ if ($attrib['title']) {
+ $attrib['title'] = Q(rcube_label($attrib['title']));
+ }
+ if ($attrib['label']) {
+ $attrib['label'] = Q(rcube_label($attrib['label']));
+ }
+ if ($attrib['alt']) {
+ $attrib['alt'] = Q(rcube_label($attrib['alt']));
+ }
+ // set title to alt attribute for IE browsers
+ if ($browser->ie && $attrib['title'] && !$attrib['alt']) {
+ $attrib['alt'] = $attrib['title'];
+ unset($attrib['title']);
+ }
+
+ // add empty alt attribute for XHTML compatibility
+ if (!isset($attrib['alt'])) {
+ $attrib['alt'] = '';
+ }
+
+ // register button in the system
+ if ($attrib['command']) {
+ $this->add_script(sprintf(
+ "%s.register_button('%s', '%s', '%s', '%s', '%s', '%s');",
+ JS_OBJECT_NAME,
+ $command,
+ $attrib['id'],
+ $attrib['type'],
+ $attrib['imageact'] ? $this->abs_url($attrib['imageact']) : $attrib['classact'],
+ $attrib['imagesel'] ? $this->abs_url($attrib['imagesel']) : $attrib['classsel'],
+ $attrib['imageover'] ? $this->abs_url($attrib['imageover']) : ''
+ ));
+
+ // make valid href to specific buttons
+ if (in_array($attrib['command'], rcmail::$main_tasks)) {
+ $attrib['href'] = Q(rcmail_url(null, null, $attrib['command']));
+ }
+ else if (in_array($attrib['command'], $a_static_commands)) {
+ $attrib['href'] = Q(rcmail_url($attrib['command']));
+ }
+ }
+
+ // overwrite attributes
+ if (!$attrib['href']) {
+ $attrib['href'] = '#';
+ }
+ if ($command) {
+ $attrib['onclick'] = sprintf(
+ "return %s.command('%s','%s',this)",
+ JS_OBJECT_NAME,
+ $command,
+ $attrib['prop']
+ );
+ }
+ if ($command && $attrib['imageover']) {
+ $attrib['onmouseover'] = sprintf(
+ "return %s.button_over('%s','%s')",
+ JS_OBJECT_NAME,
+ $command,
+ $attrib['id']
+ );
+ $attrib['onmouseout'] = sprintf(
+ "return %s.button_out('%s','%s')",
+ JS_OBJECT_NAME,
+ $command,
+ $attrib['id']
+ );
+ }
+
+ if ($command && $attrib['imagesel']) {
+ $attrib['onmousedown'] = sprintf(
+ "return %s.button_sel('%s','%s')",
+ JS_OBJECT_NAME,
+ $command,
+ $attrib['id']
+ );
+ $attrib['onmouseup'] = sprintf(
+ "return %s.button_out('%s','%s')",
+ JS_OBJECT_NAME,
+ $command,
+ $attrib['id']
+ );
+ }
+
+ $out = '';
+
+ // generate image tag
+ if ($attrib['type']=='image') {
+ $attrib_str = html::attrib_string(
+ $attrib,
+ array(
+ 'style', 'class', 'id', 'width',
+ 'height', 'border', 'hspace',
+ 'vspace', 'align', 'alt',
+ )
+ );
+ $btn_content = sprintf('<img src="%s"%s />', $this->abs_url($attrib['image']), $attrib_str);
+ if ($attrib['label']) {
+ $btn_content .= ' '.$attrib['label'];
+ }
+ $link_attrib = array('href', 'onclick', 'onmouseover', 'onmouseout', 'onmousedown', 'onmouseup', 'title');
+ }
+ else if ($attrib['type']=='link') {
+ $btn_content = $attrib['label'] ? $attrib['label'] : $attrib['command'];
+ $link_attrib = array('href', 'onclick', 'title', 'id', 'class', 'style');
+ }
+ else if ($attrib['type']=='input') {
+ $attrib['type'] = 'button';
+
+ if ($attrib['label']) {
+ $attrib['value'] = $attrib['label'];
+ }
+
+ $attrib_str = html::attrib_string(
+ $attrib,
+ array(
+ 'type', 'value', 'onclick',
+ 'id', 'class', 'style'
+ )
+ );
+ $out = sprintf('<input%s disabled="disabled" />', $attrib_str);
+ }
+
+ // generate html code for button
+ if ($btn_content) {
+ $attrib_str = html::attrib_string($attrib, $link_attrib);
+ $out = sprintf('<a%s>%s</a>', $attrib_str, $btn_content);
+ }
+
+ return $out;
+ }
+
+
+ /* ************* common functions delivering gui objects ************** */
+
+
+ /**
+ * Create a form tag with the necessary hidden fields
+ *
+ * @param array Named tag parameters
+ * @return string HTML code for the form
+ */
+ public function form_tag($attrib, $content = null)
+ {
+ if ($this->framed) {
+ $hiddenfield = new html_hiddenfield(array('name' => '_framed', 'value' => '1'));
+ $hidden = $hiddenfield->show();
+ }
+
+ if (!$content)
+ $attrib['noclose'] = true;
+
+ return html::tag('form',
+ $attrib + array('action' => "./", 'method' => "get"),
+ $hidden . $content);
+ }
+
+
+ /**
+ * GUI object 'username'
+ * Showing IMAP username of the current session
+ *
+ * @param array Named tag parameters (currently not used)
+ * @return string HTML code for the gui object
+ */
+ public function current_username($attrib)
+ {
+ static $username;
+
+ // alread fetched
+ if (!empty($username)) {
+ return $username;
+ }
+
+ // get e-mail address form default identity
+ if ($sql_arr = $this->app->user->get_identity()) {
+ $username = $sql_arr['email'];
+ }
+ else {
+ $username = $this->app->user->get_username();
+ }
+
+ return $username;
+ }
+
+
+ /**
+ * GUI object 'loginform'
+ * Returns code for the webmail login form
+ *
+ * @param array Named parameters
+ * @return string HTML code for the gui object
+ */
+ private function login_form($attrib)
+ {
+ $default_host = $this->config['default_host'];
+
+ $_SESSION['temp'] = true;
+
+ $input_user = new html_inputfield(array('name' => '_user', 'id' => 'rcmloginuser', 'size' => 30, 'autocomplete' => 'off'));
+ $input_pass = new html_passwordfield(array('name' => '_pass', 'id' => 'rcmloginpwd', 'size' => 30));
+ $input_action = new html_hiddenfield(array('name' => '_action', 'value' => 'login'));
+ $input_host = null;
+
+ if (is_array($default_host)) {
+ $input_host = new html_select(array('name' => '_host', 'id' => 'rcmloginhost'));
+
+ foreach ($default_host as $key => $value) {
+ if (!is_array($value)) {
+ $input_host->add($value, (is_numeric($key) ? $value : $key));
+ }
+ else {
+ $input_host = null;
+ break;
+ }
+ }
+ }
+ else if (!strlen($default_host)) {
+ $input_host = new html_inputfield(array('name' => '_host', 'id' => 'rcmloginhost', 'size' => 30));
+ }
+
+ $form_name = !empty($attrib['form']) ? $attrib['form'] : 'form';
+ $this->add_gui_object('loginform', $form_name);
+
+ // create HTML table with two cols
+ $table = new html_table(array('cols' => 2));
+
+ $table->add('title', html::label('rcmloginuser', Q(rcube_label('username'))));
+ $table->add(null, $input_user->show(get_input_value('_user', RCUVE_INPUT_POST)));
+
+ $table->add('title', html::label('rcmloginpwd', Q(rcube_label('password'))));
+ $table->add(null, $input_pass->show());
+
+ // add host selection row
+ if (is_object($input_host)) {
+ $table->add('title', html::label('rcmloginhost', Q(rcube_label('server'))));
+ $table->add(null, $input_host->show(get_input_value('_host', RCUVE_INPUT_POST)));
+ }
+
+ $out = $input_action->show();
+ $out .= $table->show();
+
+ // surround html output with a form tag
+ if (empty($attrib['form'])) {
+ $out = $this->form_tag(array('name' => $form_name, 'method' => "post"), $out);
+ }
+
+ return $out;
+ }
+
+
+ /**
+ * GUI object 'searchform'
+ * Returns code for search function
+ *
+ * @param array Named parameters
+ * @return string HTML code for the gui object
+ */
+ private function search_form($attrib)
+ {
+ // add some labels to client
+ $this->add_label('searching');
+
+ $attrib['name'] = '_q';
+
+ if (empty($attrib['id'])) {
+ $attrib['id'] = 'rcmqsearchbox';
+ }
+ $input_q = new html_inputfield($attrib);
+ $out = $input_q->show();
+
+ $this->add_gui_object('qsearchbox', $attrib['id']);
+
+ // add form tag around text field
+ if (empty($attrib['form'])) {
+ $out = $this->form_tag(array(
+ 'name' => "rcmqsearchform",
+ 'onsubmit' => JS_OBJECT_NAME . ".command('search');return false;",
+ 'style' => "display:inline"),
+ $out);
+ }
+
+ return $out;
+ }
+
+
+ /**
+ * Builder for GUI object 'message'
+ *
+ * @param array Named tag parameters
+ * @return string HTML code for the gui object
+ */
+ private function message_container($attrib)
+ {
+ if (isset($attrib['id']) === false) {
+ $attrib['id'] = 'rcmMessageContainer';
+ }
+
+ $this->add_gui_object('message', $attrib['id']);
+ return html::div($attrib, "");
+ }
+
+
+ /**
+ * GUI object 'charsetselector'
+ *
+ * @param array Named parameters for the select tag
+ * @return string HTML code for the gui object
+ */
+ static function charset_selector($attrib)
+ {
+ // pass the following attributes to the form class
+ $field_attrib = array('name' => '_charset');
+ foreach ($attrib as $attr => $value) {
+ if (in_array($attr, array('id', 'class', 'style', 'size', 'tabindex'))) {
+ $field_attrib[$attr] = $value;
+ }
+ }
+ $charsets = array(
+ 'US-ASCII' => 'ASCII (English)',
+ 'EUC-JP' => 'EUC-JP (Japanese)',
+ 'EUC-KR' => 'EUC-KR (Korean)',
+ 'BIG5' => 'BIG5 (Chinese)',
+ 'GB2312' => 'GB2312 (Chinese)',
+ 'ISO-2022-JP' => 'ISO-2022-JP (Japanese)',
+ 'ISO-8859-1' => 'ISO-8859-1 (Latin-1)',
+ 'ISO-8859-2' => 'ISO-8895-2 (Central European)',
+ 'ISO-8859-7' => 'ISO-8859-7 (Greek)',
+ 'ISO-8859-9' => 'ISO-8859-9 (Turkish)',
+ 'Windows-1251' => 'Windows-1251 (Cyrillic)',
+ 'Windows-1252' => 'Windows-1252 (Western)',
+ 'Windows-1255' => 'Windows-1255 (Hebrew)',
+ 'Windows-1256' => 'Windows-1256 (Arabic)',
+ 'Windows-1257' => 'Windows-1257 (Baltic)',
+ 'UTF-8' => 'UTF-8'
+ );
+
+ $select = new html_select($field_attrib);
+ $select->add(array_values($charsets), array_keys($charsets));
+
+ $set = $_POST['_charset'] ? $_POST['_charset'] : $this->get_charset();
+ return $select->show($set);
+ }
+
+} // end class rcube_template
+
+
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/include/rcube_user.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | This class represents a system user linked and provides access |
- | to the related database records. |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: rcube_user.inc 933 2007-11-29 14:17:32Z thomasb $
-
-*/
-
-
-/**
- * Class representing a system user
- *
- * @package core
- * @author Thomas Bruederli <roundcube@gmail.com>
- */
-class rcube_user
-{
- var $ID = null;
- var $data = null;
-
-
- /**
- * Object constructor
- *
- * @param object DB Database connection
- */
- function __construct($id = null, $sql_arr = null)
- {
- global $DB;
-
- if ($id && !$sql_arr)
- {
- $sql_result = $DB->query("SELECT * FROM ".get_table_name('users')." WHERE user_id=?", $id);
- $sql_arr = $DB->fetch_assoc($sql_result);
- }
-
- if (!empty($sql_arr))
- {
- $this->ID = $sql_arr['user_id'];
- $this->data = $sql_arr;
- }
- }
-
- /**
- * PHP 4 object constructor
- *
- * @see rcube_user::__construct
- */
- function rcube_user($id = null, $sql_arr = null)
- {
- $this->__construct($id, $sql_arr);
- }
-
-
- /**
- * Build a user name string (as e-mail address)
- *
- * @return string Full user name
- */
- function get_username()
- {
- return $this->data['username'] ? $this->data['username'] . (!strpos($this->data['username'], '@') ? '@'.$this->data['mail_host'] : '') : false;
- }
-
-
- /**
- * Get the preferences saved for this user
- *
- * @return array Hash array with prefs
- */
- function get_prefs()
- {
- if ($this->ID && $this->data['preferences'])
- return unserialize($this->data['preferences']);
- else
- return array();
- }
-
-
- /**
- * Write the given user prefs to the user's record
- *
- * @param mixed User prefs to save
- * @return boolean True on success, False on failure
- */
- function save_prefs($a_user_prefs)
- {
- global $DB, $CONFIG, $sess_user_lang;
-
- if (!$this->ID)
- return false;
-
- // merge (partial) prefs array with existing settings
- $a_user_prefs += (array)$this->get_prefs();
-
- $DB->query(
- "UPDATE ".get_table_name('users')."
- SET preferences=?,
- language=?
- WHERE user_id=?",
- serialize($a_user_prefs),
- $sess_user_lang,
- $this->ID);
-
- if ($DB->affected_rows())
- {
- $CONFIG = array_merge($CONFIG, $a_user_prefs);
- return true;
- }
-
- return false;
- }
-
-
- /**
- * Get default identity of this user
- *
- * @param int Identity ID. If empty, the default identity is returned
- * @return array Hash array with all cols of the
- */
- function get_identity($id = null)
- {
- global $DB;
-
- $sql_result = $this->list_identities($id ? sprintf('AND identity_id=%d', $id) : '');
- return $DB->fetch_assoc($sql_result);
- }
-
-
- /**
- * Return a list of all identities linked with this user
- *
- * @return array List of identities
- */
- function list_identities($sql_add = '')
- {
- global $DB;
-
- // get contacts from DB
- $sql_result = $DB->query(
- "SELECT * FROM ".get_table_name('identities')."
- WHERE del<>1
- AND user_id=?
- $sql_add
- ORDER BY ".$DB->quoteIdentifier('standard')." DESC, name ASC",
- $this->ID);
-
- return $sql_result;
- }
-
-
- /**
- * Update a specific identity record
- *
- * @param int Identity ID
- * @param array Hash array with col->value pairs to save
- * @return boolean True if saved successfully, false if nothing changed
- */
- function update_identity($iid, $data)
- {
- global $DB;
-
- if (!$this->ID)
- return false;
-
- $write_sql = array();
-
- foreach ((array)$data as $col => $value)
- {
- $write_sql[] = sprintf("%s=%s",
- $DB->quoteIdentifier($col),
- $DB->quote($value));
- }
-
- $DB->query(
- "UPDATE ".get_table_name('identities')."
- SET ".join(', ', $write_sql)."
- WHERE identity_id=?
- AND user_id=?
- AND del<>1",
- $iid,
- $this->ID);
-
- return $DB->affected_rows();
- }
-
-
- /**
- * Create a new identity record linked with this user
- *
- * @param array Hash array with col->value pairs to save
- * @return int The inserted identity ID or false on error
- */
- function insert_identity($data)
- {
- global $DB;
-
- if (!$this->ID)
- return false;
-
- $insert_cols = $insert_values = array();
- foreach ((array)$data as $col => $value)
- {
- $insert_cols[] = $DB->quoteIdentifier($col);
- $insert_values[] = $DB->quote($value);
- }
-
- $DB->query(
- "INSERT INTO ".get_table_name('identities')."
- (user_id, ".join(', ', $insert_cols).")
- VALUES (?, ".join(', ', $insert_values).")",
- $this->ID);
-
- return $DB->insert_id(get_sequence_name('identities'));
- }
-
-
- /**
- * Mark the given identity as deleted
- *
- * @param int Identity ID
- * @return boolean True if deleted successfully, false if nothing changed
- */
- function delete_identity($iid)
- {
- global $DB;
-
- if (!$this->ID)
- return false;
-
- if (!$this->ID || $this->ID == '')
- return false;
-
- $sql_result = $DB->query("SELECT count(*) AS ident_count FROM " .
- get_table_name('identities') .
- " WHERE user_id = ? AND del <> 1",
- $this->ID);
-
- $sql_arr = $DB->fetch_assoc($sql_result);
- if ($sql_arr['ident_count'] <= 1)
- return false;
-
- $DB->query(
- "UPDATE ".get_table_name('identities')."
- SET del=1
- WHERE user_id=?
- AND identity_id=?",
- $this->ID,
- $iid);
-
- return $DB->affected_rows();
- }
-
-
- /**
- * Make this identity the default one for this user
- *
- * @param int The identity ID
- */
- function set_default($iid)
- {
- global $DB;
-
- if ($this->ID && $iid)
- {
- $DB->query(
- "UPDATE ".get_table_name('identities')."
- SET ".$DB->quoteIdentifier('standard')."='0'
- WHERE user_id=?
- AND identity_id<>?
- AND del<>1",
- $this->ID,
- $iid);
- }
- }
-
-
- /**
- * Update user's last_login timestamp
- */
- function touch()
- {
- global $DB;
-
- if ($this->ID)
- {
- $DB->query(
- "UPDATE ".get_table_name('users')."
- SET last_login=".$DB->now()."
- WHERE user_id=?",
- $this->ID);
- }
- }
-
-
- /**
- * Clear the saved object state
- */
- function reset()
- {
- $this->ID = null;
- $this->data = null;
- }
-
-
- /**
- * Find a user record matching the given name and host
- *
- * @param string IMAP user name
- * @param string IMAP host name
- * @return object rcube_user New user instance
- * @static
- */
- function query($user, $host)
- {
- global $DB;
-
- // query if user already registered
- $sql_result = $DB->query(
- "SELECT * FROM ".get_table_name('users')."
- WHERE mail_host=? AND (username=? OR alias=?)",
- $host,
- $user,
- $user);
-
- // user already registered -> overwrite username
- if ($sql_arr = $DB->fetch_assoc($sql_result))
- return new rcube_user($sql_arr['user_id'], $sql_arr);
- else
- return false;
- }
-
-
- /**
- * Create a new user record and return a rcube_user instance
- *
- * @param string IMAP user name
- * @param string IMAP host
- * @return object rcube_user New user instance
- * @static
- */
- function create($user, $host)
- {
- global $DB, $CONFIG;
-
- $user_email = '';
-
- // try to resolve user in virtusertable
- if (!empty($CONFIG['virtuser_file']) && !strpos($user, '@'))
- $user_email = rcube_user::user2email($user);
-
- $DB->query(
- "INSERT INTO ".get_table_name('users')."
- (created, last_login, username, mail_host, alias, language)
- VALUES (".$DB->now().", ".$DB->now().", ?, ?, ?, ?)",
- strip_newlines($user),
- strip_newlines($host),
- strip_newlines($user_email),
- $_SESSION['user_lang']);
-
- if ($user_id = $DB->insert_id(get_sequence_name('users')))
- {
- $mail_domain = rcmail_mail_domain($host);
-
- if ($user_email=='')
- $user_email = strpos($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);
-
- $user_name = $user != $user_email ? $user : '';
-
- // try to resolve the e-mail address from the virtuser table
- if (!empty($CONFIG['virtuser_query']) &&
- ($sql_result = $DB->query(preg_replace('/%u/', $DB->escapeSimple($user), $CONFIG['virtuser_query']))) &&
- ($DB->num_rows()>0))
- {
- while ($sql_arr = $DB->fetch_array($sql_result))
- {
- $DB->query(
- "INSERT INTO ".get_table_name('identities')."
- (user_id, del, standard, name, email)
- VALUES (?, 0, 1, ?, ?)",
- $user_id,
- strip_newlines($user_name),
- preg_replace('/^@/', $user . '@', $sql_arr[0]));
- }
- }
- else
- {
- // also create new identity records
- $DB->query(
- "INSERT INTO ".get_table_name('identities')."
- (user_id, del, standard, name, email)
- VALUES (?, 0, 1, ?, ?)",
- $user_id,
- strip_newlines($user_name),
- strip_newlines($user_email));
- }
- }
- else
- {
- raise_error(array(
- 'code' => 500,
- 'type' => 'php',
- 'line' => __LINE__,
- 'file' => __FILE__,
- 'message' => "Failed to create new user"), true, false);
- }
-
- return $user_id ? new rcube_user($user_id) : false;
- }
-
-
- /**
- * Resolve username using a virtuser table
- *
- * @param string E-mail address to resolve
- * @return string Resolved IMAP username
- * @static
- */
- function email2user($email)
- {
- $user = $email;
- $r = rcmail_findinvirtual("^$email");
-
- for ($i=0; $i<count($r); $i++)
- {
- $data = $r[$i];
- $arr = preg_split('/\s+/', $data);
- if (count($arr) > 0)
- {
- $user = trim($arr[count($arr)-1]);
- break;
- }
- }
-
- return $user;
- }
-
-
- /**
- * Resolve e-mail address from virtuser table
- *
- * @param string User name
- * @return string Resolved e-mail address
- * @static
- */
- function user2email($user)
- {
- $email = "";
- $r = rcmail_findinvirtual("$user$");
-
- for ($i=0; $i<count($r); $i++)
- {
- $data = $r[$i];
- $arr = preg_split('/\s+/', $data);
- if (count($arr) > 0)
- {
- $email = trim(str_replace('\\@', '@', $arr[0]));
- break;
- }
- }
-
- return $email;
- }
-
-}
-
-
-?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/include/rcube_user.inc |
+ | |
+ | This file is part of the RoundCube Webmail client |
+ | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ | PURPOSE: |
+ | This class represents a system user linked and provides access |
+ | to the related database records. |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ $Id: rcube_user.inc 933 2007-11-29 14:17:32Z thomasb $
+
+*/
+
+
+/**
+ * Class representing a system user
+ *
+ * @package Core
+ * @author Thomas Bruederli <roundcube@gmail.com>
+ */
+class rcube_user
+{
+ public $ID = null;
+ public $data = null;
+ public $language = 'en_US';
+
+ private $db = null;
+
+
+ /**
+ * Object constructor
+ *
+ * @param object DB Database connection
+ */
+ function __construct($id = null, $sql_arr = null)
+ {
+ $this->db = rcmail::get_instance()->get_dbh();
+
+ if ($id && !$sql_arr)
+ {
+ $sql_result = $this->db->query("SELECT * FROM ".get_table_name('users')." WHERE user_id=?", $id);
+ $sql_arr = $this->db->fetch_assoc($sql_result);
+ }
+
+ if (!empty($sql_arr))
+ {
+ $this->ID = $sql_arr['user_id'];
+ $this->data = $sql_arr;
+ $this->language = $sql_arr['language'];
+ }
+ }
+
+ /**
+ * PHP 4 object constructor
+ *
+ * @see rcube_user::__construct
+ */
+ function rcube_user($id = null, $sql_arr = null)
+ {
+ $this->__construct($id, $sql_arr);
+ }
+
+
+ /**
+ * Build a user name string (as e-mail address)
+ *
+ * @return string Full user name
+ */
+ function get_username()
+ {
+ return $this->data['username'] ? $this->data['username'] . (!strpos($this->data['username'], '@') ? '@'.$this->data['mail_host'] : '') : false;
+ }
+
+
+ /**
+ * Get the preferences saved for this user
+ *
+ * @return array Hash array with prefs
+ */
+ function get_prefs()
+ {
+ if ($this->ID && $this->data['preferences'])
+ return array('language' => $this->language) + unserialize($this->data['preferences']);
+ else
+ return array();
+ }
+
+
+ /**
+ * Write the given user prefs to the user's record
+ *
+ * @param mixed User prefs to save
+ * @return boolean True on success, False on failure
+ */
+ function save_prefs($a_user_prefs)
+ {
+ if (!$this->ID)
+ return false;
+
+ // merge (partial) prefs array with existing settings
+ $a_user_prefs += (array)$this->get_prefs();
+ unset($a_user_prefs['language']);
+
+ $this->db->query(
+ "UPDATE ".get_table_name('users')."
+ SET preferences=?,
+ language=?
+ WHERE user_id=?",
+ serialize($a_user_prefs),
+ $_SESSION['language'],
+ $this->ID);
+
+ $this->language = $_SESSION['language'];
+ if ($this->db->affected_rows())
+ {
+ rcmail::get_instance()->config->merge($a_user_prefs);
+ return true;
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Get default identity of this user
+ *
+ * @param int Identity ID. If empty, the default identity is returned
+ * @return array Hash array with all cols of the
+ */
+ function get_identity($id = null)
+ {
+ $sql_result = $this->list_identities($id ? sprintf('AND identity_id=%d', $id) : '');
+ return $this->db->fetch_assoc($sql_result);
+ }
+
+
+ /**
+ * Return a list of all identities linked with this user
+ *
+ * @return array List of identities
+ */
+ function list_identities($sql_add = '')
+ {
+ // get contacts from DB
+ $sql_result = $this->db->query(
+ "SELECT * FROM ".get_table_name('identities')."
+ WHERE del<>1
+ AND user_id=?
+ $sql_add
+ ORDER BY ".$this->db->quoteIdentifier('standard')." DESC, name ASC",
+ $this->ID);
+
+ return $sql_result;
+ }
+
+
+ /**
+ * Update a specific identity record
+ *
+ * @param int Identity ID
+ * @param array Hash array with col->value pairs to save
+ * @return boolean True if saved successfully, false if nothing changed
+ */
+ function update_identity($iid, $data)
+ {
+ if (!$this->ID)
+ return false;
+
+ $write_sql = array();
+
+ foreach ((array)$data as $col => $value)
+ {
+ $write_sql[] = sprintf("%s=%s",
+ $this->db->quoteIdentifier($col),
+ $this->db->quote($value));
+ }
+
+ $this->db->query(
+ "UPDATE ".get_table_name('identities')."
+ SET ".join(', ', $write_sql)."
+ WHERE identity_id=?
+ AND user_id=?
+ AND del<>1",
+ $iid,
+ $this->ID);
+
+ return $this->db->affected_rows();
+ }
+
+
+ /**
+ * Create a new identity record linked with this user
+ *
+ * @param array Hash array with col->value pairs to save
+ * @return int The inserted identity ID or false on error
+ */
+ function insert_identity($data)
+ {
+ if (!$this->ID)
+ return false;
+
+ $insert_cols = $insert_values = array();
+ foreach ((array)$data as $col => $value)
+ {
+ $insert_cols[] = $this->db->quoteIdentifier($col);
+ $insert_values[] = $this->db->quote($value);
+ }
+
+ $this->db->query(
+ "INSERT INTO ".get_table_name('identities')."
+ (user_id, ".join(', ', $insert_cols).")
+ VALUES (?, ".join(', ', $insert_values).")",
+ $this->ID);
+
+ return $this->db->insert_id(get_sequence_name('identities'));
+ }
+
+
+ /**
+ * Mark the given identity as deleted
+ *
+ * @param int Identity ID
+ * @return boolean True if deleted successfully, false if nothing changed
+ */
+ function delete_identity($iid)
+ {
+ if (!$this->ID)
+ return false;
+
+ if (!$this->ID || $this->ID == '')
+ return false;
+
+ $sql_result = $this->db->query("SELECT count(*) AS ident_count FROM " .
+ get_table_name('identities') .
+ " WHERE user_id = ? AND del <> 1",
+ $this->ID);
+
+ $sql_arr = $this->db->fetch_assoc($sql_result);
+ if ($sql_arr['ident_count'] <= 1)
+ return false;
+
+ $this->db->query(
+ "UPDATE ".get_table_name('identities')."
+ SET del=1
+ WHERE user_id=?
+ AND identity_id=?",
+ $this->ID,
+ $iid);
+
+ return $this->db->affected_rows();
+ }
+
+
+ /**
+ * Make this identity the default one for this user
+ *
+ * @param int The identity ID
+ */
+ function set_default($iid)
+ {
+ if ($this->ID && $iid)
+ {
+ $this->db->query(
+ "UPDATE ".get_table_name('identities')."
+ SET ".$this->db->quoteIdentifier('standard')."='0'
+ WHERE user_id=?
+ AND identity_id<>?
+ AND del<>1",
+ $this->ID,
+ $iid);
+ }
+ }
+
+
+ /**
+ * Update user's last_login timestamp
+ */
+ function touch()
+ {
+ if ($this->ID)
+ {
+ $this->db->query(
+ "UPDATE ".get_table_name('users')."
+ SET last_login=".$this->db->now()."
+ WHERE user_id=?",
+ $this->ID);
+ }
+ }
+
+
+ /**
+ * Clear the saved object state
+ */
+ function reset()
+ {
+ $this->ID = null;
+ $this->data = null;
+ }
+
+
+ /**
+ * Find a user record matching the given name and host
+ *
+ * @param string IMAP user name
+ * @param string IMAP host name
+ * @return object rcube_user New user instance
+ */
+ static function query($user, $host)
+ {
+ $dbh = rcmail::get_instance()->get_dbh();
+
+ // query if user already registered
+ $sql_result = $dbh->query(
+ "SELECT * FROM ".get_table_name('users')."
+ WHERE mail_host=? AND (username=? OR alias=?)",
+ $host,
+ $user,
+ $user);
+
+ // user already registered -> overwrite username
+ if ($sql_arr = $dbh->fetch_assoc($sql_result))
+ return new rcube_user($sql_arr['user_id'], $sql_arr);
+ else
+ return false;
+ }
+
+
+ /**
+ * Create a new user record and return a rcube_user instance
+ *
+ * @param string IMAP user name
+ * @param string IMAP host
+ * @return object rcube_user New user instance
+ */
+ static function create($user, $host)
+ {
+ $user_email = '';
+ $rcmail = rcmail::get_instance();
+ $dbh = $rcmail->get_dbh();
+
+ // try to resolve user in virtusertable
+ if ($rcmail->config->get('virtuser_file') && !strpos($user, '@'))
+ $user_email = rcube_user::user2email($user);
+
+ $dbh->query(
+ "INSERT INTO ".get_table_name('users')."
+ (created, last_login, username, mail_host, alias, language)
+ VALUES (".$dbh->now().", ".$dbh->now().", ?, ?, ?, ?)",
+ strip_newlines($user),
+ strip_newlines($host),
+ strip_newlines($user_email),
+ $_SESSION['language']);
+
+ if ($user_id = $dbh->insert_id(get_sequence_name('users')))
+ {
+ $mail_domain = rcmail_mail_domain($host);
+
+ if ($user_email=='')
+ $user_email = strpos($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);
+
+ $user_name = $user != $user_email ? $user : '';
+
+ // try to resolve the e-mail address from the virtuser table
+ if ($virtuser_query = $rcmail->config->get('virtuser_query') &&
+ ($sql_result = $dbh->query(preg_replace('/%u/', $dbh->escapeSimple($user), $virtuser_query))) &&
+ ($dbh->num_rows() > 0))
+ {
+ while ($sql_arr = $dbh->fetch_array($sql_result))
+ {
+ $dbh->query(
+ "INSERT INTO ".get_table_name('identities')."
+ (user_id, del, standard, name, email)
+ VALUES (?, 0, 1, ?, ?)",
+ $user_id,
+ strip_newlines($user_name),
+ preg_replace('/^@/', $user . '@', $sql_arr[0]));
+ }
+ }
+ else
+ {
+ // also create new identity records
+ $dbh->query(
+ "INSERT INTO ".get_table_name('identities')."
+ (user_id, del, standard, name, email)
+ VALUES (?, 0, 1, ?, ?)",
+ $user_id,
+ strip_newlines($user_name),
+ strip_newlines($user_email));
+ }
+ }
+ else
+ {
+ raise_error(array(
+ 'code' => 500,
+ 'type' => 'php',
+ 'line' => __LINE__,
+ 'file' => __FILE__,
+ 'message' => "Failed to create new user"), true, false);
+ }
+
+ return $user_id ? new rcube_user($user_id) : false;
+ }
+
+
+ /**
+ * Resolve username using a virtuser table
+ *
+ * @param string E-mail address to resolve
+ * @return string Resolved IMAP username
+ */
+ static function email2user($email)
+ {
+ $user = $email;
+ $r = rcmail_findinvirtual("^$email");
+
+ for ($i=0; $i<count($r); $i++)
+ {
+ $data = $r[$i];
+ $arr = preg_split('/\s+/', $data);
+ if (count($arr) > 0)
+ {
+ $user = trim($arr[count($arr)-1]);
+ break;
+ }
+ }
+
+ return $user;
+ }
+
+
+ /**
+ * Resolve e-mail address from virtuser table
+ *
+ * @param string User name
+ * @return string Resolved e-mail address
+ */
+ static function user2email($user)
+ {
+ $email = "";
+ $r = rcmail_findinvirtual("$user$");
+
+ for ($i=0; $i<count($r); $i++)
+ {
+ $data = $r[$i];
+ $arr = preg_split('/\s+/', $data);
+ if (count($arr) > 0)
+ {
+ $email = trim(str_replace('\\@', '@', $arr[0]));
+ break;
+ }
+ }
+
+ return $email;
+ }
+
+}
+
+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: session.inc 1063 2008-02-13 05:26:47Z till $
+ $Id: session.inc 1400 2008-05-17 17:46:43Z thomasb $
*/
}
-
function sess_close()
{
return TRUE;
VALUES (?, ?, ?, ".$DB->now().", ".$DB->now().")",
$key,
$vars,
- $_SERVER['REMOTE_ADDR']);
-
-
+ (string)$_SERVER['REMOTE_ADDR']);
}
return TRUE;
// handler for session_destroy()
function sess_destroy($key)
{
- global $DB;
+ global $DB, $CONFIG;
if ($DB->is_error())
return FALSE;
-
- // delete session entries in cache table
- $DB->query("DELETE FROM ".get_table_name('cache')."
- WHERE session_id=?",
+
+ if ($CONFIG['enable_caching'])
+ {
+ // delete session entries in cache table
+ $DB->query("DELETE FROM ".get_table_name('cache')."
+ WHERE session_id=?",
$key);
+ }
$DB->query("DELETE FROM ".get_table_name('session')."
WHERE sess_id=?",
// garbage collecting function
function sess_gc($maxlifetime)
{
- global $DB;
+ global $DB, $CONFIG;
if ($DB->is_error())
return FALSE;
while ($sql_arr = $DB->fetch_assoc($sql_result))
$a_exp_sessions[] = $sql_arr['sess_id'];
-
if (sizeof($a_exp_sessions))
{
- // delete session cache records
- $DB->query("DELETE FROM ".get_table_name('cache')."
- WHERE session_id IN ('".join("','", $a_exp_sessions)."')");
-
+ if ($CONFIG['enable_caching'])
+ {
+ // delete session cache records
+ $DB->query("DELETE FROM ".get_table_name('cache')."
+ WHERE session_id IN ('".join("','", $a_exp_sessions)."')");
+ }
+
// delete session records
$DB->query("DELETE FROM ".get_table_name('session')."
WHERE sess_id IN ('".join("','", $a_exp_sessions)."')");
}
// also run message cache GC
- rcmail_message_cache_gc();
+ if ($CONFIG['enable_caching'])
+ rcmail_message_cache_gc();
rcmail_temp_gc();
return TRUE;
| Requires: common.js, list.js |
+-----------------------------------------------------------------------+
- $Id: app.js 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: app.js 1464 2008-06-02 12:24:31Z alec $
*/
{
this.enable_command('compose', 'add-contact', false);
parent.rcmail.show_contentframe(true);
- parent.rcmail.mark_message('read', this.env.uid);
}
if ((this.env.action=='show' || this.env.action=='preview') && this.env.blockedobjects)
// start interval for keep-alive/recent_check signal
this.start_keepalive = function()
{
- if (this.env.keep_alive && !this.env.framed && this.task=='mail' && this.gui_objects.messagelist)
+ if (this.env.keep_alive && !this.env.framed && this.task=='mail' && this.gui_objects.mailboxlist)
this._int = setInterval(function(){ ref.check_for_recent(); }, this.env.keep_alive * 1000);
else if (this.env.keep_alive && !this.env.framed && this.task!='login')
this._int = setInterval(function(){ ref.send_keep_alive(); }, this.env.keep_alive * 1000);
this.init_address_input_events(input_cc);
if (input_bcc)
this.init_address_input_events(input_bcc);
-
+
// add signature according to selected identity
if (input_from && input_from.type=='select-one')
this.change_identity(input_from);
break;
case 'logout':
- this.goto_url('logout', true);
+ this.goto_url('logout', '', true);
break;
// commands to switch task
var input_email = rcube_find_object('_email');
// user prefs
- if (input_pagesize && isNaN(input_pagesize.value))
+ if (input_pagesize && isNaN(parseInt(input_pagesize.value)))
{
alert(this.get_label('nopagesizewarning'));
input_pagesize.focus();
this.attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', 'rcubemailattachment');
if (this.attachment_win)
{
- setTimeout(function(){ ref.attachment_win.focus(); }, 10);
+ window.setTimeout(function(){ ref.attachment_win.focus(); }, 10);
break;
}
}
ref.printwin = window.open(this.env.comm_path+'&_action=print&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+(this.env.safemode ? '&_safe=1' : ''));
if (this.printwin)
{
- setTimeout(function(){ ref.printwin.focus(); }, 20);
+ window.setTimeout(function(){ ref.printwin.focus(); }, 20);
if (this.env.action != 'show')
this.mark_message('read', uid);
}
{
ref.sourcewin = window.open(this.env.comm_path+'&_action=viewsource&_uid='+this.env.uid+'&_mbox='+urlencode(this.env.mailbox));
if (this.sourcewin)
- setTimeout(function(){ ref.sourcewin.focus(); }, 20);
+ window.setTimeout(function(){ ref.sourcewin.focus(); }, 20);
}
break;
// set timer for requests
if (a && this.env.request_timeout)
- this.request_timer = setTimeout(function(){ ref.request_timed_out(); }, this.env.request_timeout * 1000);
+ this.request_timer = window.setTimeout(function(){ ref.request_timed_out(); }, this.env.request_timeout * 1000);
};
// start timer for message preview (wait for double click)
if (selected && this.env.contentframe && !list.multi_selecting)
- this.preview_timer = setTimeout(function(){ ref.msglist_get_preview(); }, this.dblclick_time + 10);
+ this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, this.dblclick_time + 10);
else if (this.env.contentframe)
this.show_contentframe(false);
};
var frm;
if (this.env.contentframe && (frm = rcube_find_object(this.env.contentframe)))
{
- if (!show && window.frames[this.env.contentframe] && frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0)
- frames[this.env.contentframe].location.href = this.env.blankpage;
- if (!bw.safari)
+ if (!show && window.frames[this.env.contentframe])
+ {
+ if (window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0)
+ window.frames[this.env.contentframe].location.href = this.env.blankpage;
+ }
+ else if (!bw.safari)
frm.style.display = show ? 'block' : 'none';
}
this.delete_messages = function()
{
var selection = this.message_list ? this.message_list.get_selection() : new Array();
-
+
// exit if no mailbox specified or if selection is empty
if (!this.env.uid && !selection.length)
return;
this._with_selected_messages = function(action, lock, add_url)
{
var a_uids = new Array();
+
if (this.env.uid)
- a_uids[a_uids.length] = this.env.uid;
+ a_uids[0] = this.env.uid;
else
{
var selection = this.message_list.get_selection();
{
id = selection[n];
a_uids[a_uids.length] = id;
+
this.message_list.remove_row(id, (n == selection.length-1));
}
}
-
+
// also send search request to get the right messages
if (this.env.search_request)
add_url += '&_search='+this.env.search_request;
var a_uids = new Array();
var r_uids = new Array();
var selection = this.message_list ? this.message_list.get_selection() : new Array();
-
+
if (uid)
a_uids[0] = uid;
else if (this.env.uid)
a_uids[0] = this.env.uid;
else if (this.message_list)
{
- for (var id, n=0; n<selection.length; n++)
+ for (var n=0; n<selection.length; n++)
{
a_uids[a_uids.length] = selection[n];
}
}
- for (var id, n=0; n<a_uids.length; n++)
+ if (!this.message_list)
+ r_uids = a_uids;
+ else
+ for (var id, n=0; n<a_uids.length; n++)
{
id = a_uids[n];
if ((flag=='read' && this.message_list.rows[id].unread)
r_uids[r_uids.length] = id;
}
}
-
+
// nothing to do
if (!r_uids.length)
return;
-
+
switch (flag)
{
case 'read':
rows[uid].classname = rows[uid].classname.replace(/\s*unread/, '');
this.set_classname(rows[uid].obj, 'unread', false);
- if (rows[uid].replied && this.env.repliedicon)
- icn_src = this.env.repliedicon;
- else if (this.env.messageicon)
+ if (this.env.messageicon)
icn_src = this.env.messageicon;
}
- if (rows[uid].icon && icn_src)
+ if (rows[uid].icon && icn_src
+ && !(rows[uid].replied && this.env.repliedicon)
+ && !(rows[uid].deleted && this.env.deletedicon))
rows[uid].icon.src = icn_src;
}
}
this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag);
};
+
+ // set class to read/unread
+ this.mark_as_read_from_preview = function(uid)
+ {
+ var icn_src;
+ var rows = parent.rcmail.message_list.rows;
+ if(rows[uid].unread)
+ {
+ rows[uid].unread = false;
+ rows[uid].classname = rows[uid].classname.replace(/\s*unread/, '');
+ parent.rcmail.set_classname(rows[uid].obj, 'unread', false);
+
+ if (rows[uid].replied && parent.rcmail.env.repliedicon)
+ icn_src = parent.rcmail.env.repliedicon;
+ else if (rows[uid].deleted && parent.rcmail.env.deletedicon)
+ icn_src = parent.rcmail.env.deletedicon;
+ else if (parent.rcmail.env.messageicon)
+ icn_src = parent.rcmail.env.messageicon;
+
+ if (rows[uid].icon && icn_src)
+ rows[uid].icon.src = icn_src;
+ }
+ }
+
// mark all message rows as deleted/undeleted
this.toggle_delete_status = function(a_uids)
{
- if (this.env.read_when_deleted)
- this.mark_message('read',a_uids);
-
- // if deleting message from "view message" don't bother with delete icon
- if (this.env.action == "show")
- return false;
-
- var rows = this.message_list.rows;
+ var rows = this.message_list ? this.message_list.rows : new Array();
+
if (a_uids.length==1)
{
- if (rows[a_uids[0]] && rows[a_uids[0]].classname.indexOf('deleted') < 0)
+ if (!rows.length || (rows[a_uids[0]] && rows[a_uids[0]].classname.indexOf('deleted') < 0))
this.flag_as_deleted(a_uids);
else
this.flag_as_undeleted(a_uids);
this.flag_as_undeleted = function(a_uids)
{
- // if deleting message from "view message" don't bother with delete icon
- if (this.env.action == "show")
- return false;
-
var icn_src;
- var rows = this.message_list.rows;
+ var rows = this.message_list ? this.message_list.rows : new Array();
for (var i=0; i<a_uids.length; i++)
{
icn_src = this.env.repliedicon;
else if (this.env.messageicon)
icn_src = this.env.messageicon;
+
if (rows[uid].icon && icn_src)
rows[uid].icon.src = icn_src;
}
this.flag_as_deleted = function(a_uids)
{
- // if deleting message from "view message" don't bother with delete icon
- if (this.env.action == "show")
- return false;
-
- var rows = this.message_list.rows;
+ var add_url = '';
+ var r_uids = new Array();
+ var rows = this.message_list ? this.message_list.rows : new Array();
+
for (var i=0; i<a_uids.length; i++)
- {
+ {
uid = a_uids[i];
- if (rows[uid]) {
+ if (rows[uid])
+ {
rows[uid].deleted = true;
- if (rows[uid].classname.indexOf('deleted')<0) {
+ if (rows[uid].classname.indexOf('deleted')<0)
+ {
rows[uid].classname += ' deleted';
this.set_classname(rows[uid].obj, 'deleted', true);
- }
- if (rows[uid].icon && this.env.deletedicon)
+ }
+
+ if (rows[uid].icon && this.env.deletedicon)
rows[uid].icon.src = this.env.deletedicon;
+
+ if (rows[uid].unread)
+ r_uids[r_uids.length] = uid;
+ }
}
- }
- this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=delete');
+ if (r_uids.length)
+ add_url = '&_ruid='+r_uids.join(',');
+
+ this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=delete'+add_url);
return true;
};
+ // flag as read without mark request (called from backend)
+ // argument should be a coma-separated list of uids
+ this.flag_deleted_as_read = function(uids)
+ {
+ var icn_src;
+ var rows = this.message_list ? this.message_list.rows : new Array();
+ var str = String(uids);
+ var a_uids = new Array();
+
+ a_uids = str.split(',');
+
+ for (var uid, i=0; i<a_uids.length; i++)
+ {
+ uid = a_uids[i];
+ if (rows[uid])
+ {
+ rows[uid].unread = false;
+ rows[uid].read = true;
+
+ rows[uid].classname = rows[uid].classname.replace(/\s*unread/, '');
+ this.set_classname(rows[uid].obj, 'unread', false);
+
+ if (rows[uid].icon)
+ rows[uid].icon.src = this.env.deletedicon;
+ }
+ }
+ };
+
/*********************************************************/
/********* login form methods *********/
/*********************************************************/
}
// check for empty body
- if ((input_message.value == '' && (!window.tinyMCE || tinyMCE.getContent() == '')) && !confirm(this.get_label('nobodywarning')))
+ if ((input_message.value == '' &&
+ (!window.tinyMCE || tinyMCE.get('compose-body').getContent() == '')) &&
+ !confirm(this.get_label('nobodywarning')))
{
input_message.focus();
return false;
{
// check input fields
var input_to = rcube_find_object('_to');
- var input_cc = rcube_find_object('_to');
- var input_bcc = rcube_find_object('_to');
+ var input_cc = rcube_find_object('_cc');
+ var input_bcc = rcube_find_object('_bcc');
var input_subject = rcube_find_object('_subject');
- var input_message = rcube_find_object('_message');
-
+ var editor, input_message;
var str = '';
+
if (input_to && input_to.value)
str += input_to.value+':';
if (input_cc && input_cc.value)
str += input_bcc.value+':';
if (input_subject && input_subject.value)
str += input_subject.value+':';
- if (input_message && input_message.value)
+
+ if (editor = tinyMCE.get('compose-body'))
+ str += editor.getContent();
+ else
+ {
+ input_message = rcube_find_object('_message');
str += input_message.value;
+ }
if (save)
this.cmp_hash = str;
}
else
{
- var eid = tinyMCE.getEditorId('_message');
- // editor is a TinyMCE_Control object
- var editor = tinyMCE.getInstanceById(eid);
- // if this is null, we should exit
- if (editor == null) {
- return false;
- }
- var msgDoc = editor.getDoc();
- var msgBody = msgDoc.body;
+ var editor = tinyMCE.get('compose-body');
if (this.env.signatures && this.env.signatures[id])
{
// Append the signature as a span within the body
- var sigElem = msgDoc.getElementById("_rc_sig");
+ var sigElem = editor.dom.get("_rc_sig");
if (!sigElem)
{
- sigElem = msgDoc.createElement("span");
+ sigElem = editor.getDoc().createElement("span");
sigElem.setAttribute("id", "_rc_sig");
- msgBody.appendChild(sigElem);
+ editor.getBody().appendChild(sigElem);
}
if (this.env.signatures[id]['is_html'])
{
// have to do it this way for IE
// otherwise the form will be posted to a new window
- if(document.all && !window.opera)
+ if(document.all)
{
var html = '<iframe name="'+frame_name+'" src="program/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>';
document.body.insertAdjacentHTML('BeforeEnd',html);
{
var frame = document.createElement('IFRAME');
frame.name = frame_name;
- frame.width = 10;
- frame.height = 10;
+ frame.style.border = 'none';
+ frame.style.width = 0;
+ frame.style.height = 0;
frame.style.visibility = 'hidden';
document.body.appendChild(frame);
}
}
// start timer
- this.ksearch_timer = setTimeout(function(){ ref.ksearch_get_results(); }, 200);
+ this.ksearch_timer = window.setTimeout(function(){ ref.ksearch_get_results(); }, 200);
this.ksearch_input = obj;
return true;
cpos = p+insert.length;
if (this.ksearch_input.setSelectionRange)
this.ksearch_input.setSelectionRange(cpos, cpos);
-
};
{
li = document.createElement('LI');
li.innerHTML = a_results[i].replace(/</, '<').replace(/>/, '>');
- li.onmousedown = function(e){ ref.insert_recipient(this._rcm_id); ref.ksearch_pane.show(0); return rcube_event.cancel(e); };
- li.style.cursor = 'pointer';
li._rcm_id = a_result_ids[i];
ul.appendChild(li);
}
var id, frame, ref = this;
if (id = list.get_single_selection())
- this.preview_timer = setTimeout(function(){ ref.load_contact(id, 'show'); }, this.dblclick_time + 10);
+ this.preview_timer = window.setTimeout(function(){ ref.load_contact(id, 'show'); }, this.dblclick_time + 10);
else if (this.env.contentframe)
this.show_contentframe(false);
qs += '&_search='+this.env.search_request;
// send request to server
- this.http_post('delete', '_cid='+urlencode(a_cids.join(','))+'&_from='+(this.env.action ? this.env.action : '')+qs);
+ this.http_post('delete', '_cid='+urlencode(a_cids.join(','))+'&_source='+urlencode(this.env.source)+'&_from='+(this.env.action ? this.env.action : '')+qs);
return true;
};
var row, folder;
var reg = RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
- if (this.drag_active && (row = document.getElementById(id)))
+ if (this.drag_active && this.env.folder && (row = document.getElementById(id)))
if (this.env.subscriptionrows[id] &&
(folder = this.env.subscriptionrows[id][0]))
{
if (this.check_droptarget(folder) &&
- (folder != this.env.folder.replace(reg, '')) &&
+ !this.env.subscriptionrows[this.get_folder_row_id(this.env.folder)][2] &&
+ (folder != this.env.folder.replace(reg, '')) &&
(!folder.match(new RegExp('^'+RegExp.escape(this.env.folder+this.env.delimiter)))))
{
this.set_env('dstfolder', folder);
var id, folder;
if ((id = list.get_single_selection()) &&
this.env.subscriptionrows['rcmrow'+id] &&
- (folder = this.env.subscriptionrows['rcmrow'+id][0]) &&
- (find_in_array(this.env.defaultfolders, folder)!=0))
+ (folder = this.env.subscriptionrows['rcmrow'+id][0]))
this.set_env('folder', folder);
else
this.set_env('folder', null);
var form;
if ((form = this.gui_objects.editform) && form.elements['_folder_name'])
+ {
name = form.elements['_folder_name'].value;
- if (this.env.folder && name != '')
- name = this.env.folder+this.env.delimiter+name;
- if (name)
+ if (name.indexOf(this.env.delimiter)>=0)
+ {
+ alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
+ return false;
+ }
+
+ if (this.env.folder && name != '')
+ name = this.env.folder+this.env.delimiter+name;
+
this.http_post('create-folder', '_name='+urlencode(name), true);
+ }
else if (form.elements['_folder_name'])
form.elements['_folder_name'].focus();
};
var temp, row, form;
// reset current renaming
- if (temp = this.edit_folder)
- {
- this.reset_folder_rename();
- if (temp == id)
- return;
- }
+ if (temp = this.edit_folder)
+ {
+ this.reset_folder_rename();
+ if (temp == id)
+ return;
+ }
if (id && this.env.subscriptionrows[id] && (row = document.getElementById(id)))
{
var reg = new RegExp('.*['+RegExp.escape(this.env.delimiter)+']');
this.name_input = document.createElement('INPUT');
- this.name_input.value = this.env.subscriptionrows[id][1].replace(reg, '');
+ this.name_input.value = this.env.subscriptionrows[id][0].replace(reg, '');
this.name_input.style.width = '100%';
-
+
reg = new RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$');
this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, '');
this.name_input.onkeypress = function(e){ rcmail.name_input_keypress(e); };
this.reset_folder_rename = function()
{
var cell = this.name_input ? this.name_input.parentNode : null;
+
if (cell && this.edit_folder && this.env.subscriptionrows[this.edit_folder])
- {
- var reg = new RegExp('[^'+RegExp.escape(this.env.delimiter)+']*['+RegExp.escape(this.env.delimiter)+']', 'g');
- cell.innerHTML = this.env.subscriptionrows[this.edit_folder][1].replace(reg, ' ');
- }
+ cell.innerHTML = this.env.subscriptionrows[this.edit_folder][1];
this.edit_folder = null;
};
var newname = this.name_input ? this.name_input.value : null;
if (this.edit_folder && newname)
{
+ if (newname.indexOf(this.env.delimiter)>=0)
+ {
+ alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
+ return false;
+ }
+
if (this.name_input.__parent)
newname = this.name_input.__parent + this.env.delimiter + newname;
+
this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname));
}
}
if (this.gui_objects.createfolderhint)
this.gui_objects.createfolderhint.innerHTML = '';
-
}
};
// add a new folder to the subscription list by cloning a folder row
- this.add_folder_row = function(name, display_name, replace)
+ this.add_folder_row = function(name, display_name, replace, before)
{
- name = name.replace('\\',"");
if (!this.gui_objects.subscriptionlist)
return false;
+ // find not protected folder
for (var refid in this.env.subscriptionrows)
- if (this.env.subscriptionrows[refid]!=null)
+ if (this.env.subscriptionrows[refid]!=null && !this.env.subscriptionrows[refid][2])
break;
var refrow, form;
// clone a table row if there are existing rows
var row = this.clone_table_row(refrow);
row.id = id;
- if (replace)
- tbody.replaceChild(row, replace);
+
+ if (before && (before = this.get_folder_row_id(before)))
+ tbody.insertBefore(row, document.getElementById(before));
else
- tbody.appendChild(row);
+ tbody.appendChild(row);
+
+ if (replace)
+ tbody.removeChild(replace);
}
-
+
// add to folder/row-ID map
- this.env.subscriptionrows[row.id] = [name, display_name];
+ this.env.subscriptionrows[row.id] = [name, display_name, 0];
// set folder name
row.cells[0].innerHTML = display_name;
form.elements['_folder_name'].value = '';
}
- this.sort_subscription_list();
this.init_subscription_list();
if (selection && document.getElementById('rcmrow'+selection))
this.subscription_list.select_row(selection);
// replace an existing table row with a new folder line
- this.replace_folder_row = function(oldfolder, newfolder, display_name)
+ this.replace_folder_row = function(oldfolder, newfolder, display_name, before)
{
var id = this.get_folder_row_id(oldfolder);
var row = document.getElementById(id);
// replace an existing table row (if found)
- this.add_folder_row(newfolder, display_name, row);
+ this.add_folder_row(newfolder, display_name, row, before);
// rename folder in rename-folder dropdown
var form, elm;
form.elements['_folder_newname'].value = '';
}
};
-
+
// remove the table row of a specific mailbox from the table
// (the row will not be removed, just hidden)
var row;
var id = this.get_folder_row_id(folder);
if (id && (row = document.getElementById(id)))
- row.style.display = 'none';
+ row.style.display = 'none';
// remove folder from rename-folder list
var form;
return new_row;
};
- // sort subscription folder list
- this.sort_subscription_list = function()
- {
- var index = new Array();
- var tbody = this.gui_objects.subscriptionlist.tBodies[0];
- var swapped = false;
- for (var i = 0; i<tbody.childNodes.length; i++)
- if (this.env.subscriptionrows[tbody.childNodes[i].id]!=null)
- index.push(i);
- for (i = 0; i<(index.length-1); i++)
- {
- var one = tbody.childNodes[index[i]];
- var two = tbody.childNodes[index[i+1]];
- if (this.env.subscriptionrows[one.id][0].toLowerCase()>
- this.env.subscriptionrows[two.id][0].toLowerCase())
- {
- var swap = one.cloneNode(true);
- tbody.replaceChild(swap, two);
- tbody.replaceChild(two, one);
- swapped = true;
- }
- }
- if (swapped)
- this.sort_subscription_list();
- };
-
/*********************************************************/
/********* GUI functionality *********/
var button, obj;
if(!a_buttons || !a_buttons.length)
- return;
+ return false;
for(var n=0; n<a_buttons.length; n++)
{
var button, img;
if(!a_buttons || !a_buttons.length)
- return;
+ return false;
for(var n=0; n<a_buttons.length; n++)
{
img.src = button.over;
}
}
+
};
// mouse down on button
this.gui_objects.message.onmousedown = function(){ _rcube.hide_message(); return true; };
if (!hold)
- this.message_timer = setTimeout(function(){ ref.hide_message(); }, this.message_time);
+ this.message_timer = window.setTimeout(function(){ ref.hide_message(); }, this.message_time);
};
this.set_page_buttons();
};
+
// replace content of quota display
- this.set_quota = function()
+ this.set_quota = function(content)
{
- if (this.gui_objects.quotadisplay &&
- this.gui_objects.quotadisplay.attributes.getNamedItem('display') &&
- this.gui_objects.quotadisplay.attributes.getNamedItem('id'))
- this.http_request('quotadisplay', '_display='+
- this.gui_objects.quotadisplay.attributes.getNamedItem('display').nodeValue+
- '&_id='+this.gui_objects.quotadisplay.attributes.getNamedItem('id').nodeValue, false);
- };
+ if (this.gui_objects.quotadisplay && content)
+ this.gui_objects.quotadisplay.innerHTML = content;
+ };
// update the mailboxlist
}
};
-
+ // update parent's mailboxlist (from preview)
+ this.set_unread_count_from_preview = function(mbox, count, set_title)
+ {
+ parent.rcmail.set_unread_count(mbox, count, set_title);
+ }
+
// add row to contacts list
this.add_contact_row = function(cid, cols, select)
{
};
- this.toggle_editor = function(checkbox, textElementName)
+ this.toggle_editor = function(checkbox, textAreaId)
{
var ischecked = checkbox.checked;
if (ischecked)
{
- tinyMCE.execCommand('mceAddControl', true, textElementName);
+ tinyMCE.execCommand('mceAddControl', true, textAreaId);
}
else
{
- tinyMCE.execCommand('mceRemoveControl', true, textElementName);
+ tinyMCE.execCommand('mceRemoveControl', true, textAreaId);
}
};
// process the response data according to the sent action
switch (request_obj.__action)
{
+
case 'delete':
case 'moveto':
if (this.env.action=='show')
this.command('list');
else if (this.message_list)
this.message_list.init();
- break;
- case 'list':
- if (this.env.messagecount)
- this.enable_command('purge', (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox));
+ case 'purge':
+ case 'expunge':
+ if (!this.env.messagecount)
+ {
+ // clear preview pane content
+ if (this.env.contentframe)
+ this.show_contentframe(false);
+ // disable commands useless when mailbox is empty
+ this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource',
+ 'print', 'load-attachment', 'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
+ }
+ break;
+
+ case 'list':
this.msglist_select(this.message_list);
+ case 'check-recent':
case 'getunread':
- this.enable_command('sort', (this.env.messagecount > 0));
+ this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0));
+ this.enable_command('purge', (this.env.messagecount && (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox)));
- case 'expunge':
- this.enable_command('select-all', 'select-none', 'expunge', this.env.messagecount ? true : false);
- break;
+ break;
}
// helper function to call the init method with a delay
function call_init(o)
{
- if (window[o] && window[o].init)
- setTimeout(o+'.init()', 200);
+ window.setTimeout('if (window[\''+o+'\'] && window[\''+o+'\'].init) { '+o+'.init(); }',
+ bw.win ? 500 : 200);
}
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: common.js 1064 2008-02-13 05:33:41Z till $
+ $Id: common.js 1264 2008-04-07 09:08:06Z alec $
*/
// Constants
// tiny replacement for Firebox functionality
function rcube_console()
{
- this.box = rcube_find_object('console');
-
this.log = function(msg)
{
- if (this.box)
- this.box.value += str+'\n--------------------------------------\n';
+ box = rcube_find_object('console');
+ if (box)
+ if (msg[msg.length-1]=='\n')
+ box.value += msg+'--------------------------------------\n';
+ else
+ box.value += msg+'\n--------------------------------------\n';
};
-
+
this.reset = function()
{
- if (this.box)
- this.box.value = '';
+ box = rcube_find_object('console');
+ if (box)
+ box.value = '';
};
}
// Initialize the message editor
-function rcmail_editor_init(skin_path)
+function rcmail_editor_init(skin_path, editor_lang)
{
- tinyMCE.init({ mode : 'specific_textareas',
+ tinyMCE.init({ mode : "textareas",
+ editor_selector : "mce_editor",
accessibility_focus : false,
apply_source_formatting : true,
- theme : 'advanced',
- plugins : 'emotions,media,nonbreaking,table,searchreplace,spellchecker,visualchars',
- theme_advanced_buttons1 : 'bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,emotions,charmap,code,forecolor,backcolor,fontselect,fontsizeselect, separator,undo,redo,image,media',
- theme_advanced_buttons2 : '',
- theme_advanced_buttons3 : '',
- theme_advanced_toolbar_location : 'top',
- theme_advanced_toolbar_align : 'left',
- extended_valid_elements : 'font[face|size|color|style],span[id|class|align|style]',
- content_css : skin_path + '/editor_content.css',
- editor_css : skin_path + '/editor_ui.css',
- external_image_list_url : 'program/js/editor_images.js'
+ theme : "advanced",
+ language : editor_lang,
+ plugins : "emotions,media,nonbreaking,table,searchreplace,visualchars,directionality",
+ theme_advanced_buttons1 : "bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,link,unlink,emotions,charmap,code,forecolor,backcolor,fontselect,fontsizeselect, separator,undo,redo,image,media,ltr,rtl",
+ theme_advanced_buttons2 : "",
+ theme_advanced_buttons3 : "",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ extended_valid_elements : "font[face|size|color|style],span[id|class|align|style]",
+ content_css : skin_path + "/editor_content.css",
+ external_image_list_url : "editor_images.js"
});
}
-// Set the state of the HTML/Plain toggles based on the _is_html field value
-function rcmail_set_editor_toggle_states()
- {
- // set the editor toggle based on the state of the editor
-
- var htmlFlag = document.getElementsByName('_is_html')[0];
- var toggles = document.getElementsByName('_editorSelect');
- for(var t=0; t<toggles.length; t++)
- {
- if (toggles[t].value == 'html')
- {
- toggles[t].checked = (htmlFlag.value == "1");
- }
- else
- {
- toggles[t].checked = (htmlFlag.value == "0");
- }
- }
- }
-
// Toggle between the HTML and Plain Text editors
function rcmail_toggle_editor(toggler)
var selectedEditor = toggler.value;
// determine the currently displayed editor
-
var htmlFlag = document.getElementsByName('_is_html')[0];
var isHtml = htmlFlag.value;
var existingPlainText = composeElement.value;
var htmlText = "<pre>" + existingPlainText + "</pre>";
composeElement.value = htmlText;
- tinyMCE.execCommand('mceAddControl', true, '_message');
+ tinyMCE.execCommand('mceAddControl', true, 'compose-body');
htmlFlag.value = "1";
}
else
{
rcmail.set_busy(true, 'converting');
- var thisMCE = tinyMCE.getInstanceById('_message');
- var existingHtml = tinyMCE.getContent();
+ var thisMCE = tinyMCE.get('compose-body');
+ var existingHtml = thisMCE.getContent();
rcmail_html2plain(existingHtml);
- tinyMCE.execCommand('mceRemoveControl', true, '_message');
+ tinyMCE.execCommand('mceRemoveControl', true, 'compose-body');
htmlFlag.value = "0";
}
}
for (var n=0; n<this.selection.length; n++)
{
id = this.selection[n];
- if (this.rows[id].obj)
+ if (this.rows[id] && this.rows[id].obj)
{
this.set_classname(this.rows[id].obj, 'selected', true);
this.set_classname(this.rows[id].obj, 'unfocused', false);
*/
shift_select: function(id, control)
{
+ if (!this.rows[this.shift_start] || !this.selection.length)
+ this.shift_start = id;
+
var from_rowIndex = this.rows[this.shift_start].obj.rowIndex;
var to_rowIndex = this.rows[id].obj.rowIndex;
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<head>\r
- <title>blank_page</title>\r
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
-</head>\r
-<body class="mceContentBody">\r
-\r
-</body>\r
-</html>\r
-// UK lang variables\r
-\r
-tinyMCE.addToLang('',{\r
-bold_desc : 'Bold (Ctrl+B)',\r
-italic_desc : 'Italic (Ctrl+I)',\r
-underline_desc : 'Underline (Ctrl+U)',\r
-striketrough_desc : 'Strikethrough',\r
-justifyleft_desc : 'Align left',\r
-justifycenter_desc : 'Align center',\r
-justifyright_desc : 'Align right',\r
-justifyfull_desc : 'Align full',\r
-bullist_desc : 'Unordered list',\r
-numlist_desc : 'Ordered list',\r
-outdent_desc : 'Outdent',\r
-indent_desc : 'Indent',\r
-undo_desc : 'Undo (Ctrl+Z)',\r
-redo_desc : 'Redo (Ctrl+Y)',\r
-link_desc : 'Insert/edit link',\r
-unlink_desc : 'Unlink',\r
-image_desc : 'Insert/edit image',\r
-cleanup_desc : 'Cleanup messy code',\r
-focus_alert : 'A editor instance must be focused before using this command.',\r
-edit_confirm : 'Do you want to use the WYSIWYG mode for this textarea?',\r
-insert_link_title : 'Insert/edit link',\r
-insert : 'Insert',\r
-update : 'Update',\r
-cancel : 'Cancel',\r
-insert_link_url : 'Link URL',\r
-insert_link_target : 'Target',\r
-insert_link_target_same : 'Open link in the same window',\r
-insert_link_target_blank : 'Open link in a new window',\r
-insert_image_title : 'Insert/edit image',\r
-insert_image_src : 'Image URL',\r
-insert_image_alt : 'Image description',\r
-help_desc : 'Help',\r
-bold_img : "bold.gif",\r
-italic_img : "italic.gif",\r
-underline_img : "underline.gif",\r
-clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?',\r
-popup_blocked : 'Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.'\r
-});\r
+tinyMCE.addI18n({en:{\r
+common:{\r
+edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?",\r
+apply:"Apply",\r
+insert:"Insert",\r
+update:"Update",\r
+cancel:"Cancel",\r
+close:"Close",\r
+browse:"Browse",\r
+class_name:"Class",\r
+not_set:"-- Not set --",\r
+clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?",\r
+clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.",\r
+popup_blocked:"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.",\r
+invalid_data:"Error: Invalid values entered, these are marked in red.",\r
+more_colors:"More colors"\r
+},\r
+contextmenu:{\r
+align:"Alignment",\r
+left:"Left",\r
+center:"Center",\r
+right:"Right",\r
+full:"Full"\r
+},\r
+insertdatetime:{\r
+date_fmt:"%Y-%m-%d",\r
+time_fmt:"%H:%M:%S",\r
+insertdate_desc:"Insert date",\r
+inserttime_desc:"Insert time",\r
+months_long:"January,February,March,April,May,June,July,August,September,October,November,December",\r
+months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",\r
+day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday",\r
+day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"\r
+},\r
+print:{\r
+print_desc:"Print"\r
+},\r
+preview:{\r
+preview_desc:"Preview"\r
+},\r
+directionality:{\r
+ltr_desc:"Direction left to right",\r
+rtl_desc:"Direction right to left"\r
+},\r
+layer:{\r
+insertlayer_desc:"Insert new layer",\r
+forward_desc:"Move forward",\r
+backward_desc:"Move backward",\r
+absolute_desc:"Toggle absolute positioning",\r
+content:"New layer..."\r
+},\r
+save:{\r
+save_desc:"Save",\r
+cancel_desc:"Cancel all changes"\r
+},\r
+nonbreaking:{\r
+nonbreaking_desc:"Insert non-breaking space character"\r
+},\r
+iespell:{\r
+iespell_desc:"Run spell checking",\r
+download:"ieSpell not detected. Do you want to install it now?"\r
+},\r
+advhr:{\r
+advhr_desc:"Horizontale rule"\r
+},\r
+emotions:{\r
+emotions_desc:"Emotions"\r
+},\r
+searchreplace:{\r
+search_desc:"Find",\r
+replace_desc:"Find/Replace"\r
+},\r
+advimage:{\r
+image_desc:"Insert/edit image"\r
+},\r
+advlink:{\r
+link_desc:"Insert/edit link"\r
+},\r
+xhtmlxtras:{\r
+cite_desc:"Citation",\r
+abbr_desc:"Abbreviation",\r
+acronym_desc:"Acronym",\r
+del_desc:"Deletion",\r
+ins_desc:"Insertion",\r
+attribs_desc:"Insert/Edit Attributes"\r
+},\r
+style:{\r
+desc:"Edit CSS Style"\r
+},\r
+paste:{\r
+paste_text_desc:"Paste as Plain Text",\r
+paste_word_desc:"Paste from Word",\r
+selectall_desc:"Select All"\r
+},\r
+paste_dlg:{\r
+text_title:"Use CTRL+V on your keyboard to paste the text into the window.",\r
+text_linebreaks:"Keep linebreaks",\r
+word_title:"Use CTRL+V on your keyboard to paste the text into the window."\r
+},\r
+table:{\r
+desc:"Inserts a new table",\r
+row_before_desc:"Insert row before",\r
+row_after_desc:"Insert row after",\r
+delete_row_desc:"Delete row",\r
+col_before_desc:"Insert column before",\r
+col_after_desc:"Insert column after",\r
+delete_col_desc:"Remove column",\r
+split_cells_desc:"Split merged table cells",\r
+merge_cells_desc:"Merge table cells",\r
+row_desc:"Table row properties",\r
+cell_desc:"Table cell properties",\r
+props_desc:"Table properties",\r
+paste_row_before_desc:"Paste table row before",\r
+paste_row_after_desc:"Paste table row after",\r
+cut_row_desc:"Cut table row",\r
+copy_row_desc:"Copy table row",\r
+del:"Delete table",\r
+row:"Row",\r
+col:"Column",\r
+cell:"Cell"\r
+},\r
+autosave:{\r
+unload_msg:"The changes you made will be lost if you navigate away from this page."\r
+},\r
+fullscreen:{\r
+desc:"Toggle fullscreen mode"\r
+},\r
+media:{\r
+desc:"Insert / edit embedded media",\r
+edit:"Edit embedded media"\r
+},\r
+fullpage:{\r
+desc:"Document properties"\r
+},\r
+template:{\r
+desc:"Insert predefined template content"\r
+},\r
+visualchars:{\r
+desc:"Visual control characters on/off."\r
+},\r
+spellchecker:{\r
+desc:"Toggle spellchecker",\r
+menu:"Spellchecker settings",\r
+ignore_word:"Ignore word",\r
+ignore_words:"Ignore all",\r
+langs:"Languages",\r
+wait:"Please wait...",\r
+sug:"Suggestions",\r
+no_sug:"No suggestions",\r
+no_mpell:"No misspellings found."\r
+},\r
+pagebreak:{\r
+desc:"Insert page break."\r
+}}});
\ No newline at end of file
+++ /dev/null
-Beginning with version 2.0.5 the language packs are no\r
-longer included with the core distribution.\r
-Language packs can be downloaded from the TinyMCE website:\r
-http://tinymce.moxiecode.com/download.php\r
-\r
-The language pack codes are based on ISO-639-1:\r
-http://www.loc.gov/standards/iso639-2/englangn.html\r
-\r
-Plrease try using entities if possible. Like å etc for non a-z characters.\r
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
+ GNU LESSER GENERAL PUBLIC LICENSE\r
+ Version 2.1, February 1999\r
+\r
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\r
+ Everyone is permitted to copy and distribute verbatim copies\r
+ of this license document, but changing it is not allowed.\r
+\r
+[This is the first released version of the Lesser GPL. It also counts\r
+ as the successor of the GNU Library Public License, version 2, hence\r
+ the version number 2.1.]\r
+\r
+ Preamble\r
+\r
+ The licenses for most software are designed to take away your\r
+freedom to share and change it. By contrast, the GNU General Public\r
+Licenses are intended to guarantee your freedom to share and change\r
+free software--to make sure the software is free for all its users.\r
+\r
+ This license, the Lesser General Public License, applies to some\r
+specially designated software packages--typically libraries--of the\r
+Free Software Foundation and other authors who decide to use it. You\r
+can use it too, but we suggest you first think carefully about whether\r
+this license or the ordinary General Public License is the better\r
+strategy to use in any particular case, based on the explanations below.\r
+\r
+ When we speak of free software, we are referring to freedom of use,\r
+not price. Our General Public Licenses are designed to make sure that\r
+you have the freedom to distribute copies of free software (and charge\r
+for this service if you wish); that you receive source code or can get\r
+it if you want it; that you can change the software and use pieces of\r
+it in new free programs; and that you are informed that you can do\r
+these things.\r
+\r
+ To protect your rights, we need to make restrictions that forbid\r
+distributors to deny you these rights or to ask you to surrender these\r
+rights. These restrictions translate to certain responsibilities for\r
+you if you distribute copies of the library or if you modify it.\r
+\r
+ For example, if you distribute copies of the library, whether gratis\r
+or for a fee, you must give the recipients all the rights that we gave\r
+you. You must make sure that they, too, receive or can get the source\r
+code. If you link other code with the library, you must provide\r
+complete object files to the recipients, so that they can relink them\r
+with the library after making changes to the library and recompiling\r
+it. And you must show them these terms so they know their rights.\r
+\r
+ We protect your rights with a two-step method: (1) we copyright the\r
+library, and (2) we offer you this license, which gives you legal\r
+permission to copy, distribute and/or modify the library.\r
+\r
+ To protect each distributor, we want to make it very clear that\r
+there is no warranty for the free library. Also, if the library is\r
+modified by someone else and passed on, the recipients should know\r
+that what they have is not the original version, so that the original\r
+author's reputation will not be affected by problems that might be\r
+introduced by others.\r
+\r
+ Finally, software patents pose a constant threat to the existence of\r
+any free program. We wish to make sure that a company cannot\r
+effectively restrict the users of a free program by obtaining a\r
+restrictive license from a patent holder. Therefore, we insist that\r
+any patent license obtained for a version of the library must be\r
+consistent with the full freedom of use specified in this license.\r
+\r
+ Most GNU software, including some libraries, is covered by the\r
+ordinary GNU General Public License. This license, the GNU Lesser\r
+General Public License, applies to certain designated libraries, and\r
+is quite different from the ordinary General Public License. We use\r
+this license for certain libraries in order to permit linking those\r
+libraries into non-free programs.\r
+\r
+ When a program is linked with a library, whether statically or using\r
+a shared library, the combination of the two is legally speaking a\r
+combined work, a derivative of the original library. The ordinary\r
+General Public License therefore permits such linking only if the\r
+entire combination fits its criteria of freedom. The Lesser General\r
+Public License permits more lax criteria for linking other code with\r
+the library.\r
+\r
+ We call this license the "Lesser" General Public License because it\r
+does Less to protect the user's freedom than the ordinary General\r
+Public License. It also provides other free software developers Less\r
+of an advantage over competing non-free programs. These disadvantages\r
+are the reason we use the ordinary General Public License for many\r
+libraries. However, the Lesser license provides advantages in certain\r
+special circumstances.\r
+\r
+ For example, on rare occasions, there may be a special need to\r
+encourage the widest possible use of a certain library, so that it becomes\r
+a de-facto standard. To achieve this, non-free programs must be\r
+allowed to use the library. A more frequent case is that a free\r
+library does the same job as widely used non-free libraries. In this\r
+case, there is little to gain by limiting the free library to free\r
+software only, so we use the Lesser General Public License.\r
+\r
+ In other cases, permission to use a particular library in non-free\r
+programs enables a greater number of people to use a large body of\r
+free software. For example, permission to use the GNU C Library in\r
+non-free programs enables many more people to use the whole GNU\r
+operating system, as well as its variant, the GNU/Linux operating\r
+system.\r
+\r
+ Although the Lesser General Public License is Less protective of the\r
+users' freedom, it does ensure that the user of a program that is\r
+linked with the Library has the freedom and the wherewithal to run\r
+that program using a modified version of the Library.\r
+\r
+ The precise terms and conditions for copying, distribution and\r
+modification follow. Pay close attention to the difference between a\r
+"work based on the library" and a "work that uses the library". The\r
+former contains code derived from the library, whereas the latter must\r
+be combined with the library in order to run.\r
+\r
+ GNU LESSER GENERAL PUBLIC LICENSE\r
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
+\r
+ 0. This License Agreement applies to any software library or other\r
+program which contains a notice placed by the copyright holder or\r
+other authorized party saying it may be distributed under the terms of\r
+this Lesser General Public License (also called "this License").\r
+Each licensee is addressed as "you".\r
+\r
+ A "library" means a collection of software functions and/or data\r
+prepared so as to be conveniently linked with application programs\r
+(which use some of those functions and data) to form executables.\r
+\r
+ The "Library", below, refers to any such software library or work\r
+which has been distributed under these terms. A "work based on the\r
+Library" means either the Library or any derivative work under\r
+copyright law: that is to say, a work containing the Library or a\r
+portion of it, either verbatim or with modifications and/or translated\r
+straightforwardly into another language. (Hereinafter, translation is\r
+included without limitation in the term "modification".)\r
+\r
+ "Source code" for a work means the preferred form of the work for\r
+making modifications to it. For a library, complete source code means\r
+all the source code for all modules it contains, plus any associated\r
+interface definition files, plus the scripts used to control compilation\r
+and installation of the library.\r
+\r
+ Activities other than copying, distribution and modification are not\r
+covered by this License; they are outside its scope. The act of\r
+running a program using the Library is not restricted, and output from\r
+such a program is covered only if its contents constitute a work based\r
+on the Library (independent of the use of the Library in a tool for\r
+writing it). Whether that is true depends on what the Library does\r
+and what the program that uses the Library does.\r
+ \r
+ 1. You may copy and distribute verbatim copies of the Library's\r
+complete source code as you receive it, in any medium, provided that\r
+you conspicuously and appropriately publish on each copy an\r
+appropriate copyright notice and disclaimer of warranty; keep intact\r
+all the notices that refer to this License and to the absence of any\r
+warranty; and distribute a copy of this License along with the\r
+Library.\r
+\r
+ You may charge a fee for the physical act of transferring a copy,\r
+and you may at your option offer warranty protection in exchange for a\r
+fee.\r
+\r
+ 2. You may modify your copy or copies of the Library or any portion\r
+of it, thus forming a work based on the Library, and copy and\r
+distribute such modifications or work under the terms of Section 1\r
+above, provided that you also meet all of these conditions:\r
+\r
+ a) The modified work must itself be a software library.\r
+\r
+ b) You must cause the files modified to carry prominent notices\r
+ stating that you changed the files and the date of any change.\r
+\r
+ c) You must cause the whole of the work to be licensed at no\r
+ charge to all third parties under the terms of this License.\r
+\r
+ d) If a facility in the modified Library refers to a function or a\r
+ table of data to be supplied by an application program that uses\r
+ the facility, other than as an argument passed when the facility\r
+ is invoked, then you must make a good faith effort to ensure that,\r
+ in the event an application does not supply such function or\r
+ table, the facility still operates, and performs whatever part of\r
+ its purpose remains meaningful.\r
+\r
+ (For example, a function in a library to compute square roots has\r
+ a purpose that is entirely well-defined independent of the\r
+ application. Therefore, Subsection 2d requires that any\r
+ application-supplied function or table used by this function must\r
+ be optional: if the application does not supply it, the square\r
+ root function must still compute square roots.)\r
+\r
+These requirements apply to the modified work as a whole. If\r
+identifiable sections of that work are not derived from the Library,\r
+and can be reasonably considered independent and separate works in\r
+themselves, then this License, and its terms, do not apply to those\r
+sections when you distribute them as separate works. But when you\r
+distribute the same sections as part of a whole which is a work based\r
+on the Library, the distribution of the whole must be on the terms of\r
+this License, whose permissions for other licensees extend to the\r
+entire whole, and thus to each and every part regardless of who wrote\r
+it.\r
+\r
+Thus, it is not the intent of this section to claim rights or contest\r
+your rights to work written entirely by you; rather, the intent is to\r
+exercise the right to control the distribution of derivative or\r
+collective works based on the Library.\r
+\r
+In addition, mere aggregation of another work not based on the Library\r
+with the Library (or with a work based on the Library) on a volume of\r
+a storage or distribution medium does not bring the other work under\r
+the scope of this License.\r
+\r
+ 3. You may opt to apply the terms of the ordinary GNU General Public\r
+License instead of this License to a given copy of the Library. To do\r
+this, you must alter all the notices that refer to this License, so\r
+that they refer to the ordinary GNU General Public License, version 2,\r
+instead of to this License. (If a newer version than version 2 of the\r
+ordinary GNU General Public License has appeared, then you can specify\r
+that version instead if you wish.) Do not make any other change in\r
+these notices.\r
+\r
+ Once this change is made in a given copy, it is irreversible for\r
+that copy, so the ordinary GNU General Public License applies to all\r
+subsequent copies and derivative works made from that copy.\r
+\r
+ This option is useful when you wish to copy part of the code of\r
+the Library into a program that is not a library.\r
+\r
+ 4. You may copy and distribute the Library (or a portion or\r
+derivative of it, under Section 2) in object code or executable form\r
+under the terms of Sections 1 and 2 above provided that you accompany\r
+it with the complete corresponding machine-readable source code, which\r
+must be distributed under the terms of Sections 1 and 2 above on a\r
+medium customarily used for software interchange.\r
+\r
+ If distribution of object code is made by offering access to copy\r
+from a designated place, then offering equivalent access to copy the\r
+source code from the same place satisfies the requirement to\r
+distribute the source code, even though third parties are not\r
+compelled to copy the source along with the object code.\r
+\r
+ 5. A program that contains no derivative of any portion of the\r
+Library, but is designed to work with the Library by being compiled or\r
+linked with it, is called a "work that uses the Library". Such a\r
+work, in isolation, is not a derivative work of the Library, and\r
+therefore falls outside the scope of this License.\r
+\r
+ However, linking a "work that uses the Library" with the Library\r
+creates an executable that is a derivative of the Library (because it\r
+contains portions of the Library), rather than a "work that uses the\r
+library". The executable is therefore covered by this License.\r
+Section 6 states terms for distribution of such executables.\r
+\r
+ When a "work that uses the Library" uses material from a header file\r
+that is part of the Library, the object code for the work may be a\r
+derivative work of the Library even though the source code is not.\r
+Whether this is true is especially significant if the work can be\r
+linked without the Library, or if the work is itself a library. The\r
+threshold for this to be true is not precisely defined by law.\r
+\r
+ If such an object file uses only numerical parameters, data\r
+structure layouts and accessors, and small macros and small inline\r
+functions (ten lines or less in length), then the use of the object\r
+file is unrestricted, regardless of whether it is legally a derivative\r
+work. (Executables containing this object code plus portions of the\r
+Library will still fall under Section 6.)\r
+\r
+ Otherwise, if the work is a derivative of the Library, you may\r
+distribute the object code for the work under the terms of Section 6.\r
+Any executables containing that work also fall under Section 6,\r
+whether or not they are linked directly with the Library itself.\r
+\r
+ 6. As an exception to the Sections above, you may also combine or\r
+link a "work that uses the Library" with the Library to produce a\r
+work containing portions of the Library, and distribute that work\r
+under terms of your choice, provided that the terms permit\r
+modification of the work for the customer's own use and reverse\r
+engineering for debugging such modifications.\r
+\r
+ You must give prominent notice with each copy of the work that the\r
+Library is used in it and that the Library and its use are covered by\r
+this License. You must supply a copy of this License. If the work\r
+during execution displays copyright notices, you must include the\r
+copyright notice for the Library among them, as well as a reference\r
+directing the user to the copy of this License. Also, you must do one\r
+of these things:\r
+\r
+ a) Accompany the work with the complete corresponding\r
+ machine-readable source code for the Library including whatever\r
+ changes were used in the work (which must be distributed under\r
+ Sections 1 and 2 above); and, if the work is an executable linked\r
+ with the Library, with the complete machine-readable "work that\r
+ uses the Library", as object code and/or source code, so that the\r
+ user can modify the Library and then relink to produce a modified\r
+ executable containing the modified Library. (It is understood\r
+ that the user who changes the contents of definitions files in the\r
+ Library will not necessarily be able to recompile the application\r
+ to use the modified definitions.)\r
+\r
+ b) Use a suitable shared library mechanism for linking with the\r
+ Library. A suitable mechanism is one that (1) uses at run time a\r
+ copy of the library already present on the user's computer system,\r
+ rather than copying library functions into the executable, and (2)\r
+ will operate properly with a modified version of the library, if\r
+ the user installs one, as long as the modified version is\r
+ interface-compatible with the version that the work was made with.\r
+\r
+ c) Accompany the work with a written offer, valid for at\r
+ least three years, to give the same user the materials\r
+ specified in Subsection 6a, above, for a charge no more\r
+ than the cost of performing this distribution.\r
+\r
+ d) If distribution of the work is made by offering access to copy\r
+ from a designated place, offer equivalent access to copy the above\r
+ specified materials from the same place.\r
+\r
+ e) Verify that the user has already received a copy of these\r
+ materials or that you have already sent this user a copy.\r
+\r
+ For an executable, the required form of the "work that uses the\r
+Library" must include any data and utility programs needed for\r
+reproducing the executable from it. However, as a special exception,\r
+the materials to be distributed need not include anything that is\r
+normally distributed (in either source or binary form) with the major\r
+components (compiler, kernel, and so on) of the operating system on\r
+which the executable runs, unless that component itself accompanies\r
+the executable.\r
+\r
+ It may happen that this requirement contradicts the license\r
+restrictions of other proprietary libraries that do not normally\r
+accompany the operating system. Such a contradiction means you cannot\r
+use both them and the Library together in an executable that you\r
+distribute.\r
+\r
+ 7. You may place library facilities that are a work based on the\r
+Library side-by-side in a single library together with other library\r
+facilities not covered by this License, and distribute such a combined\r
+library, provided that the separate distribution of the work based on\r
+the Library and of the other library facilities is otherwise\r
+permitted, and provided that you do these two things:\r
+\r
+ a) Accompany the combined library with a copy of the same work\r
+ based on the Library, uncombined with any other library\r
+ facilities. This must be distributed under the terms of the\r
+ Sections above.\r
+\r
+ b) Give prominent notice with the combined library of the fact\r
+ that part of it is a work based on the Library, and explaining\r
+ where to find the accompanying uncombined form of the same work.\r
+\r
+ 8. You may not copy, modify, sublicense, link with, or distribute\r
+the Library except as expressly provided under this License. Any\r
+attempt otherwise to copy, modify, sublicense, link with, or\r
+distribute the Library is void, and will automatically terminate your\r
+rights under this License. However, parties who have received copies,\r
+or rights, from you under this License will not have their licenses\r
+terminated so long as such parties remain in full compliance.\r
+\r
+ 9. You are not required to accept this License, since you have not\r
+signed it. However, nothing else grants you permission to modify or\r
+distribute the Library or its derivative works. These actions are\r
+prohibited by law if you do not accept this License. Therefore, by\r
+modifying or distributing the Library (or any work based on the\r
+Library), you indicate your acceptance of this License to do so, and\r
+all its terms and conditions for copying, distributing or modifying\r
+the Library or works based on it.\r
+\r
+ 10. Each time you redistribute the Library (or any work based on the\r
+Library), the recipient automatically receives a license from the\r
+original licensor to copy, distribute, link with or modify the Library\r
+subject to these terms and conditions. You may not impose any further\r
+restrictions on the recipients' exercise of the rights granted herein.\r
+You are not responsible for enforcing compliance by third parties with\r
+this License.\r
+\r
+ 11. If, as a consequence of a court judgment or allegation of patent\r
+infringement or for any other reason (not limited to patent issues),\r
+conditions are imposed on you (whether by court order, agreement or\r
+otherwise) that contradict the conditions of this License, they do not\r
+excuse you from the conditions of this License. If you cannot\r
+distribute so as to satisfy simultaneously your obligations under this\r
+License and any other pertinent obligations, then as a consequence you\r
+may not distribute the Library at all. For example, if a patent\r
+license would not permit royalty-free redistribution of the Library by\r
+all those who receive copies directly or indirectly through you, then\r
+the only way you could satisfy both it and this License would be to\r
+refrain entirely from distribution of the Library.\r
+\r
+If any portion of this section is held invalid or unenforceable under any\r
+particular circumstance, the balance of the section is intended to apply,\r
+and the section as a whole is intended to apply in other circumstances.\r
+\r
+It is not the purpose of this section to induce you to infringe any\r
+patents or other property right claims or to contest validity of any\r
+such claims; this section has the sole purpose of protecting the\r
+integrity of the free software distribution system which is\r
+implemented by public license practices. Many people have made\r
+generous contributions to the wide range of software distributed\r
+through that system in reliance on consistent application of that\r
+system; it is up to the author/donor to decide if he or she is willing\r
+to distribute software through any other system and a licensee cannot\r
+impose that choice.\r
+\r
+This section is intended to make thoroughly clear what is believed to\r
+be a consequence of the rest of this License.\r
+\r
+ 12. If the distribution and/or use of the Library is restricted in\r
+certain countries either by patents or by copyrighted interfaces, the\r
+original copyright holder who places the Library under this License may add\r
+an explicit geographical distribution limitation excluding those countries,\r
+so that distribution is permitted only in or among countries not thus\r
+excluded. In such case, this License incorporates the limitation as if\r
+written in the body of this License.\r
+\r
+ 13. The Free Software Foundation may publish revised and/or new\r
+versions of the Lesser General Public License from time to time.\r
+Such new versions will be similar in spirit to the present version,\r
+but may differ in detail to address new problems or concerns.\r
+\r
+Each version is given a distinguishing version number. If the Library\r
+specifies a version number of this License which applies to it and\r
+"any later version", you have the option of following the terms and\r
+conditions either of that version or of any later version published by\r
+the Free Software Foundation. If the Library does not specify a\r
+license version number, you may choose any version ever published by\r
+the Free Software Foundation.\r
+\r
+ 14. If you wish to incorporate parts of the Library into other free\r
+programs whose distribution conditions are incompatible with these,\r
+write to the author to ask for permission. For software which is\r
+copyrighted by the Free Software Foundation, write to the Free\r
+Software Foundation; we sometimes make exceptions for this. Our\r
+decision will be guided by the two goals of preserving the free status\r
+of all derivatives of our free software and of promoting the sharing\r
+and reuse of software generally.\r
+\r
+ NO WARRANTY\r
+\r
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\r
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\r
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\r
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\r
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\r
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\r
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\r
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r
+\r
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\r
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\r
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\r
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\r
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\r
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\r
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\r
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\r
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
+DAMAGES.\r
+\r
+ END OF TERMS AND CONDITIONS\r
+\r
+ How to Apply These Terms to Your New Libraries\r
+\r
+ If you develop a new library, and you want it to be of the greatest\r
+possible use to the public, we recommend making it free software that\r
+everyone can redistribute and change. You can do so by permitting\r
+redistribution under these terms (or, alternatively, under the terms of the\r
+ordinary General Public License).\r
+\r
+ To apply these terms, attach the following notices to the library. It is\r
+safest to attach them to the start of each source file to most effectively\r
+convey the exclusion of warranty; and each file should have at least the\r
+"copyright" line and a pointer to where the full notice is found.\r
+\r
+ <one line to give the library's name and a brief idea of what it does.>\r
+ Copyright (C) <year> <name of author>\r
+\r
+ This library is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU Lesser General Public\r
+ License as published by the Free Software Foundation; either\r
+ version 2.1 of the License, or (at your option) any later version.\r
+\r
+ This library is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ Lesser General Public License for more details.\r
+\r
+ You should have received a copy of the GNU Lesser General Public\r
+ License along with this library; if not, write to the Free Software\r
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\r
+\r
+Also add information on how to contact you by electronic and paper mail.\r
+\r
+You should also get your employer (if you work as a programmer) or your\r
+school, if any, to sign a "copyright disclaimer" for the library, if\r
+necessary. Here is a sample; alter the names:\r
+\r
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the\r
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.\r
+\r
+ <signature of Ty Coon>, 1 April 1990\r
+ Ty Coon, President of Vice\r
+\r
+That's all there is to it!\r
+\r
+\r
+++ /dev/null
-/**\r
- * $Id: editor_plugin_src.js 162 2007-01-03 16:16:52Z spocke $\r
- *\r
- * Experimental plugin for new Cleanup routine, this logic will be moved into the core ones it's stable enougth.\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-/* Dummy file since cleanup is now moved to core */\r
+++ /dev/null
-Dummy plugin since cleanup is now moved into core.\r
--- /dev/null
+(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.Compat2x',{getInfo:function(){return{longname:'Compat2x',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};}});(function(){tinymce.extend(tinyMCE,{addToLang:function(p,l){each(l,function(v,k){tinyMCE.i18n[(tinyMCE.settings.language||'en')+'.'+(p?p+'_':'')+k]=v;});},getInstanceById:function(n){return this.get(n);}});})();(function(){var EditorManager=tinymce.EditorManager;tinyMCE.instances={};tinyMCE.plugins={};tinymce.PluginManager.onAdd.add(function(pm,n,p){tinyMCE.plugins[n]=p;});tinyMCE.majorVersion=tinymce.majorVersion;tinyMCE.minorVersion=tinymce.minorVersion;tinyMCE.releaseDate=tinymce.releaseDate;tinyMCE.baseURL=tinymce.baseURL;tinyMCE.isIE=tinyMCE.isMSIE=tinymce.isIE||tinymce.isOpera;tinyMCE.isMSIE5=tinymce.isIE;tinyMCE.isMSIE5_0=tinymce.isIE;tinyMCE.isMSIE7=tinymce.isIE;tinyMCE.isGecko=tinymce.isGecko;tinyMCE.isSafari=tinymce.isWebKit;tinyMCE.isOpera=tinymce.isOpera;tinyMCE.isMac=false;tinyMCE.isNS7=false;tinyMCE.isNS71=false;tinyMCE.compat=true;TinyMCE_Engine=tinyMCE;tinymce.extend(tinyMCE,{getParam:function(n,dv){return this.activeEditor.getParam(n,dv);},addEvent:function(e,na,f,sc){tinymce.dom.Event.add(e,na,f,sc||this);},getControlHTML:function(n){return EditorManager.activeEditor.controlManager.createControl(n);},loadCSS:function(u){tinymce.DOM.loadCSS(u);},importCSS:function(doc,u){if(doc==document)this.loadCSS(u);else new tinymce.dom.DOMUtils(doc).loadCSS(u);},log:function(){console.debug.apply(console,arguments);},getLang:function(n,dv){var v=EditorManager.activeEditor.getLang(n.replace(/^lang_/g,''),dv);if(/^[0-9\-.]+$/g.test(v))return parseInt(v);return v;},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.execCommand;},triggerNodeChange:function(){EditorManager.activeEditor.nodeChanged();},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);},trim:function(s){return tinymce.trim(s);},xmlEncode:function(s){return tinymce.DOM.encode(s);},explode:function(s,d){var o=[];tinymce.each(s.split(d),function(v){if(v!='')o.push(v);});return o;},switchClass:function(id,cls){var b;if(/^mceButton/.test(cls)){b=EditorManager.activeEditor.controlManager.get(id);if(!b)return;switch(cls){case"mceButtonNormal":b.setDisabled(false);b.setActive(false);return;case"mceButtonDisabled":b.setDisabled(true);return;case"mceButtonSelected":b.setActive(true);b.setDisabled(false);return;}}},addCSSClass:function(e,n,b){return tinymce.DOM.addClass(e,n,b);},hasCSSClass:function(e,n){return tinymce.DOM.hasClass(e,n);},removeCSSClass:function(e,n){return tinymce.DOM.removeClass(e,n);},getCSSClasses:function(){var cl=EditorManager.activeEditor.dom.getClasses(),o=[];each(cl,function(c){o.push(c['class']);});return o;},setWindowArg:function(n,v){EditorManager.activeEditor.windowManager.params[n]=v;},getWindowArg:function(n,dv){var wm=EditorManager.activeEditor.windowManager,v;v=wm.getParam(n);if(v==='')return'';return v||wm.getFeature(n)||dv;},getParentNode:function(n,f){return this._getDOM().getParent(n,f);},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a;},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn);},na?na:[]);},getAttrib:function(e,n,dv){return this._getDOM().getAttrib(e,n,dv);},setAttrib:function(e,n,v){return this._getDOM().setAttrib(e,n,v);},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i];}return o;},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a);}return a;},getContent:function(){return EditorManager.activeEditor.getContent();},getParentElement:function(n,na,f){if(na)na=new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$','g');return this._getDOM().getParent(n,function(n){return n.nodeType==1&&(!na||na.test(n.nodeName))&&(!f||f(n));},this.activeEditor.getBody());},importPluginLanguagePack:function(n){tinymce.PluginManager.requireLangPack(n);},getButtonHTML:function(cn,lang,img,c,u,v){var ed=EditorManager.activeEditor;img=img.replace(/\{\$pluginurl\}/g,tinyMCE.pluginURL);img=img.replace(/\{\$themeurl\}/g,tinyMCE.themeURL);lang=lang.replace(/^lang_/g,'');return ed.controlManager.createButton(cn,{title:lang,command:c,ui:u,value:v,scope:this,'class':'compat',image:img});},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w;}return false;},accessibleEventHandler:function(e){var elm,win=this._win;e=tinymce.isIE?win.event:e;elm=tinymce.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null;}return true;}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null;}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false;}return true;},cancelEvent:function(e){return tinymce.dom.Event.cancel(e);},handleVisualAid:function(e){EditorManager.activeEditor.addVisual(e);},getAbsPosition:function(n,r){return tinymce.DOM.getPos(n,r);},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s;},getVisualAidClass:function(s){return s;},parseStyle:function(s){return this._getDOM().parseStyle(s);},serializeStyle:function(s){return this._getDOM().serializeStyle(s);},openWindow:function(tpl,args){var ed=EditorManager.activeEditor,o={},n;for(n in tpl)o[n]=tpl[n];tpl=o;args=args||{};tpl.url=new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);tpl.inline=tpl.inline||args.inline;ed.windowManager.open(tpl,args);},closeWindow:function(win){EditorManager.activeEditor.windowManager.close(win);},getOuterHTML:function(e){return tinymce.DOM.getOuterHTML(e);},setOuterHTML:function(e,h,d){return tinymce.DOM.setOuterHTML(e,h,d);},hasPlugin:function(n){return tinymce.PluginManager.get(n)!=null;},_setEventsEnabled:function(){},addPlugin:function(pn,f){var t=this;function PluginWrapper(ed){tinyMCE.selectedInstance=ed;ed.onInit.add(function(){t.settings=ed.settings;t.settings['base_href']=tinyMCE.documentBasePath;tinyMCE.settings=t.settings;tinyMCE.documentBasePath=ed.documentBasePath;if(f.initInstance)f.initInstance(ed);ed.contentDocument=ed.getDoc();ed.contentWindow=ed.getWin();ed.undoRedo=ed.undoManager;ed.startContent=ed.getContent({format:'raw'});tinyMCE.instances[ed.id]=ed;tinyMCE.loadedFiles=[];});ed.onActivate.add(function(){tinyMCE.settings=ed.settings;tinyMCE.selectedInstance=ed;});if(f.handleNodeChange){ed.onNodeChange.add(function(ed,cm,n){f.handleNodeChange(ed.id,n,0,0,false,!ed.selection.isCollapsed());});}if(f.onChange){ed.onChange.add(function(ed,n){return f.onChange(ed);});}if(f.cleanup){ed.onGetContent.add(function(){});}this.getInfo=function(){return f.getInfo();};this.createControl=function(n){tinyMCE.pluginURL=tinymce.baseURL+'/plugins/'+pn;tinyMCE.themeURL=tinymce.baseURL+'/themes/'+tinyMCE.activeEditor.settings.theme;if(f.getControlHTML)return f.getControlHTML(n);return null;};this.execCommand=function(cmd,ui,val){if(f.execCommand)return f.execCommand(ed.id,ed.getBody(),cmd,ui,val);return false;};};tinymce.PluginManager.add(pn,PluginWrapper);},_getDOM:function(){return tinyMCE.activeEditor?tinyMCE.activeEditor.dom:tinymce.DOM;},convertRelativeToAbsoluteURL:function(b,u){return new tinymce.util.URI(b).toAbsolute(u);},convertAbsoluteURLToRelativeURL:function(b,u){return new tinymce.util.URI(b).toRelative(u);}});tinymce.extend(tinymce.Editor.prototype,{getFocusElement:function(){return this.selection.getNode();},getData:function(n){if(!this.data)this.data=[];if(!this.data[n])this.data[n]=[];return this.data[n];},hasPlugin:function(n){return this.plugins[n]!=null;},getContainerWin:function(){return window;},getHTML:function(raw){return this.getContent({format:raw?'raw':'html'});},setHTML:function(h){this.setContent(h);},getSel:function(){return this.selection.getSel();},getRng:function(){return this.selection.getRng();},isHidden:function(){var s;if(!tinymce.isGecko)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},translate:function(s){var c=this.settings.language,o;o=tinymce.EditorManager.i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{#'+b+'}';});o=o.replace(/{\$lang_([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{$lang_'+b+'}';});return o;},repaint:function(){this.execCommand('mceRepaint');}});tinymce.extend(tinymce.dom.Selection.prototype,{getSelectedText:function(){return this.getContent({format:'text'});},getSelectedHTML:function(){return this.getContent({format:'html'});},getFocusElement:function(){return this.getNode();},selectNode:function(node,collapse,select_text_node,to_start){var t=this;t.select(node,select_text_node||0);if(!is(collapse))collapse=true;if(collapse){if(!is(to_start))to_start=true;t.collapse(to_start);}}});}).call(this);tinymce.PluginManager.add('compat2x',tinymce.plugins.Compat2x);})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;\r
+\r
+ tinymce.create('tinymce.plugins.Compat2x', {\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Compat2x',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',\r
+ version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
+ };\r
+ }\r
+ });\r
+\r
+ (function() {\r
+ // Extend tinyMCE/EditorManager\r
+ tinymce.extend(tinyMCE, {\r
+ addToLang : function(p, l) {\r
+ each(l, function(v, k) {\r
+ tinyMCE.i18n[(tinyMCE.settings.language || 'en') + '.' + (p ? p + '_' : '') + k] = v;\r
+ });\r
+ },\r
+\r
+ getInstanceById : function(n) {\r
+ return this.get(n);\r
+ }\r
+ });\r
+ })();\r
+\r
+ (function() {\r
+ var EditorManager = tinymce.EditorManager;\r
+\r
+ tinyMCE.instances = {};\r
+ tinyMCE.plugins = {};\r
+ tinymce.PluginManager.onAdd.add(function(pm, n, p) {\r
+ tinyMCE.plugins[n] = p;\r
+ });\r
+\r
+ tinyMCE.majorVersion = tinymce.majorVersion;\r
+ tinyMCE.minorVersion = tinymce.minorVersion;\r
+ tinyMCE.releaseDate = tinymce.releaseDate;\r
+ tinyMCE.baseURL = tinymce.baseURL;\r
+ tinyMCE.isIE = tinyMCE.isMSIE = tinymce.isIE || tinymce.isOpera;\r
+ tinyMCE.isMSIE5 = tinymce.isIE;\r
+ tinyMCE.isMSIE5_0 = tinymce.isIE;\r
+ tinyMCE.isMSIE7 = tinymce.isIE;\r
+ tinyMCE.isGecko = tinymce.isGecko;\r
+ tinyMCE.isSafari = tinymce.isWebKit;\r
+ tinyMCE.isOpera = tinymce.isOpera;\r
+ tinyMCE.isMac = false;\r
+ tinyMCE.isNS7 = false;\r
+ tinyMCE.isNS71 = false;\r
+ tinyMCE.compat = true;\r
+\r
+ // Extend tinyMCE class\r
+ TinyMCE_Engine = tinyMCE;\r
+ tinymce.extend(tinyMCE, {\r
+ getParam : function(n, dv) {\r
+ return this.activeEditor.getParam(n, dv);\r
+ },\r
+\r
+ addEvent : function(e, na, f, sc) {\r
+ tinymce.dom.Event.add(e, na, f, sc || this);\r
+ },\r
+\r
+ getControlHTML : function(n) {\r
+ return EditorManager.activeEditor.controlManager.createControl(n);\r
+ },\r
+\r
+ loadCSS : function(u) {\r
+ tinymce.DOM.loadCSS(u);\r
+ },\r
+\r
+ importCSS : function(doc, u) {\r
+ if (doc == document)\r
+ this.loadCSS(u);\r
+ else\r
+ new tinymce.dom.DOMUtils(doc).loadCSS(u);\r
+ },\r
+\r
+ log : function() {\r
+ console.debug.apply(console, arguments);\r
+ },\r
+\r
+ getLang : function(n, dv) {\r
+ var v = EditorManager.activeEditor.getLang(n.replace(/^lang_/g, ''), dv);\r
+\r
+ // Is number\r
+ if (/^[0-9\-.]+$/g.test(v))\r
+ return parseInt(v);\r
+\r
+ return v;\r
+ },\r
+\r
+ isInstance : function(o) {\r
+ return o != null && typeof(o) == "object" && o.execCommand;\r
+ },\r
+\r
+ triggerNodeChange : function() {\r
+ EditorManager.activeEditor.nodeChanged();\r
+ },\r
+\r
+ regexpReplace : function(in_str, reg_exp, replace_str, opts) {\r
+ var re;\r
+\r
+ if (in_str == null)\r
+ return in_str;\r
+\r
+ if (typeof(opts) == "undefined")\r
+ opts = 'g';\r
+\r
+ re = new RegExp(reg_exp, opts);\r
+\r
+ return in_str.replace(re, replace_str);\r
+ },\r
+\r
+ trim : function(s) {\r
+ return tinymce.trim(s);\r
+ },\r
+\r
+ xmlEncode : function(s) {\r
+ return tinymce.DOM.encode(s);\r
+ },\r
+\r
+ explode : function(s, d) {\r
+ var o = [];\r
+\r
+ tinymce.each(s.split(d), function(v) {\r
+ if (v != '')\r
+ o.push(v);\r
+ });\r
+\r
+ return o;\r
+ },\r
+\r
+ switchClass : function(id, cls) {\r
+ var b;\r
+\r
+ if (/^mceButton/.test(cls)) {\r
+ b = EditorManager.activeEditor.controlManager.get(id);\r
+\r
+ if (!b)\r
+ return;\r
+\r
+ switch (cls) {\r
+ case "mceButtonNormal":\r
+ b.setDisabled(false);\r
+ b.setActive(false);\r
+ return;\r
+\r
+ case "mceButtonDisabled":\r
+ b.setDisabled(true);\r
+ return;\r
+\r
+ case "mceButtonSelected":\r
+ b.setActive(true);\r
+ b.setDisabled(false);\r
+ return;\r
+ }\r
+ }\r
+ },\r
+\r
+ addCSSClass : function(e, n, b) {\r
+ return tinymce.DOM.addClass(e, n, b);\r
+ },\r
+\r
+ hasCSSClass : function(e, n) {\r
+ return tinymce.DOM.hasClass(e, n);\r
+ },\r
+\r
+ removeCSSClass : function(e, n) {\r
+ return tinymce.DOM.removeClass(e, n);\r
+ },\r
+\r
+ getCSSClasses : function() {\r
+ var cl = EditorManager.activeEditor.dom.getClasses(), o = [];\r
+\r
+ each(cl, function(c) {\r
+ o.push(c['class']);\r
+ });\r
+\r
+ return o;\r
+ },\r
+\r
+ setWindowArg : function(n, v) {\r
+ EditorManager.activeEditor.windowManager.params[n] = v;\r
+ },\r
+\r
+ getWindowArg : function(n, dv) {\r
+ var wm = EditorManager.activeEditor.windowManager, v;\r
+\r
+ v = wm.getParam(n);\r
+ if (v === '')\r
+ return '';\r
+\r
+ return v || wm.getFeature(n) || dv;\r
+ },\r
+\r
+ getParentNode : function(n, f) {\r
+ return this._getDOM().getParent(n, f);\r
+ },\r
+\r
+ selectElements : function(n, na, f) {\r
+ var i, a = [], nl, x;\r
+\r
+ for (x=0, na = na.split(','); x<na.length; x++)\r
+ for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)\r
+ (!f || f(nl[i])) && a.push(nl[i]);\r
+\r
+ return a;\r
+ },\r
+\r
+ getNodeTree : function(n, na, t, nn) {\r
+ return this.selectNodes(n, function(n) {\r
+ return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);\r
+ }, na ? na : []);\r
+ },\r
+\r
+ getAttrib : function(e, n, dv) {\r
+ return this._getDOM().getAttrib(e, n, dv);\r
+ },\r
+\r
+ setAttrib : function(e, n, v) {\r
+ return this._getDOM().setAttrib(e, n, v);\r
+ },\r
+\r
+ getElementsByAttributeValue : function(n, e, a, v) {\r
+ var i, nl = n.getElementsByTagName(e), o = [];\r
+\r
+ for (i=0; i<nl.length; i++) {\r
+ if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)\r
+ o[o.length] = nl[i];\r
+ }\r
+\r
+ return o;\r
+ },\r
+\r
+ selectNodes : function(n, f, a) {\r
+ var i;\r
+\r
+ if (!a)\r
+ a = [];\r
+\r
+ if (f(n))\r
+ a[a.length] = n;\r
+\r
+ if (n.hasChildNodes()) {\r
+ for (i=0; i<n.childNodes.length; i++)\r
+ tinyMCE.selectNodes(n.childNodes[i], f, a);\r
+ }\r
+\r
+ return a;\r
+ },\r
+\r
+ getContent : function() {\r
+ return EditorManager.activeEditor.getContent();\r
+ },\r
+\r
+ getParentElement : function(n, na, f) {\r
+ if (na)\r
+ na = new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$', 'g');\r
+\r
+ return this._getDOM().getParent(n, function(n) {\r
+ return n.nodeType == 1 && (!na || na.test(n.nodeName)) && (!f || f(n));\r
+ }, this.activeEditor.getBody());\r
+ },\r
+\r
+ importPluginLanguagePack : function(n) {\r
+ tinymce.PluginManager.requireLangPack(n);\r
+ },\r
+\r
+ getButtonHTML : function(cn, lang, img, c, u, v) {\r
+ var ed = EditorManager.activeEditor;\r
+\r
+ img = img.replace(/\{\$pluginurl\}/g, tinyMCE.pluginURL);\r
+ img = img.replace(/\{\$themeurl\}/g, tinyMCE.themeURL);\r
+ lang = lang.replace(/^lang_/g, '');\r
+\r
+ return ed.controlManager.createButton(cn, {\r
+ title : lang,\r
+ command : c,\r
+ ui : u,\r
+ value : v,\r
+ scope : this,\r
+ 'class' : 'compat',\r
+ image : img\r
+ });\r
+ },\r
+\r
+ addSelectAccessibility : function(e, s, w) {\r
+ // Add event handlers \r
+ if (!s._isAccessible) {\r
+ s.onkeydown = tinyMCE.accessibleEventHandler;\r
+ s.onblur = tinyMCE.accessibleEventHandler;\r
+ s._isAccessible = true;\r
+ s._win = w;\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ accessibleEventHandler : function(e) {\r
+ var elm, win = this._win;\r
+\r
+ e = tinymce.isIE ? win.event : e;\r
+ elm = tinymce.isIE ? e.srcElement : e.target;\r
+\r
+ // Unpiggyback onchange on blur\r
+ if (e.type == "blur") {\r
+ if (elm.oldonchange) {\r
+ elm.onchange = elm.oldonchange;\r
+ elm.oldonchange = null;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ // Piggyback onchange\r
+ if (elm.nodeName == "SELECT" && !elm.oldonchange) {\r
+ elm.oldonchange = elm.onchange;\r
+ elm.onchange = null;\r
+ }\r
+\r
+ // Execute onchange and remove piggyback\r
+ if (e.keyCode == 13 || e.keyCode == 32) {\r
+ elm.onchange = elm.oldonchange;\r
+ elm.onchange();\r
+ elm.oldonchange = null;\r
+\r
+ tinyMCE.cancelEvent(e);\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ },\r
+\r
+ cancelEvent : function(e) {\r
+ return tinymce.dom.Event.cancel(e);\r
+ },\r
+\r
+ handleVisualAid : function(e) {\r
+ EditorManager.activeEditor.addVisual(e);\r
+ },\r
+\r
+ getAbsPosition : function(n, r) {\r
+ return tinymce.DOM.getPos(n, r);\r
+ },\r
+\r
+ cleanupEventStr : function(s) {\r
+ s = "" + s;\r
+ s = s.replace('function anonymous()\n{\n', '');\r
+ s = s.replace('\n}', '');\r
+ s = s.replace(/^return true;/gi, ''); // Remove event blocker\r
+\r
+ return s;\r
+ },\r
+\r
+ getVisualAidClass : function(s) {\r
+ // TODO: Implement\r
+ return s;\r
+ },\r
+\r
+ parseStyle : function(s) {\r
+ return this._getDOM().parseStyle(s);\r
+ },\r
+\r
+ serializeStyle : function(s) {\r
+ return this._getDOM().serializeStyle(s);\r
+ },\r
+\r
+ openWindow : function(tpl, args) {\r
+ var ed = EditorManager.activeEditor, o = {}, n;\r
+\r
+ // Convert name/value array to object\r
+ for (n in tpl)\r
+ o[n] = tpl[n];\r
+\r
+ tpl = o;\r
+\r
+ args = args || {};\r
+ tpl.url = new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);\r
+ tpl.inline = tpl.inline || args.inline;\r
+\r
+ ed.windowManager.open(tpl, args);\r
+ },\r
+\r
+ closeWindow : function(win) {\r
+ EditorManager.activeEditor.windowManager.close(win);\r
+ },\r
+\r
+ getOuterHTML : function(e) {\r
+ return tinymce.DOM.getOuterHTML(e);\r
+ },\r
+\r
+ setOuterHTML : function(e, h, d) {\r
+ return tinymce.DOM.setOuterHTML(e, h, d);\r
+ },\r
+\r
+ hasPlugin : function(n) {\r
+ return tinymce.PluginManager.get(n) != null;\r
+ },\r
+\r
+ _setEventsEnabled : function() {\r
+ // Ignore it!!\r
+ },\r
+\r
+ addPlugin : function(pn, f) {\r
+ var t = this;\r
+\r
+ function PluginWrapper(ed) {\r
+ tinyMCE.selectedInstance = ed;\r
+\r
+ ed.onInit.add(function() {\r
+ t.settings = ed.settings;\r
+ t.settings['base_href'] = tinyMCE.documentBasePath;\r
+ tinyMCE.settings = t.settings;\r
+ tinyMCE.documentBasePath = ed.documentBasePath;\r
+ //ed.formElement = DOM.get(ed.id);\r
+\r
+ if (f.initInstance)\r
+ f.initInstance(ed);\r
+\r
+ ed.contentDocument = ed.getDoc();\r
+ ed.contentWindow = ed.getWin();\r
+ ed.undoRedo = ed.undoManager;\r
+ ed.startContent = ed.getContent({format : 'raw'});\r
+\r
+ tinyMCE.instances[ed.id] = ed;\r
+ tinyMCE.loadedFiles = [];\r
+ });\r
+\r
+ ed.onActivate.add(function() {\r
+ tinyMCE.settings = ed.settings;\r
+ tinyMCE.selectedInstance = ed;\r
+ });\r
+\r
+ /* if (f.removeInstance) {\r
+ ed.onDestroy.add(function() {\r
+ return f.removeInstance(ed.id);\r
+ });\r
+ }*/\r
+\r
+ if (f.handleNodeChange) {\r
+ ed.onNodeChange.add(function(ed, cm, n) {\r
+ f.handleNodeChange(ed.id, n, 0, 0, false, !ed.selection.isCollapsed());\r
+ });\r
+ }\r
+\r
+ if (f.onChange) {\r
+ ed.onChange.add(function(ed, n) {\r
+ return f.onChange(ed);\r
+ });\r
+ }\r
+\r
+ if (f.cleanup) {\r
+ ed.onGetContent.add(function() {\r
+ //f.cleanup(type, content, inst);\r
+ });\r
+ }\r
+\r
+ this.getInfo = function() {\r
+ return f.getInfo();\r
+ };\r
+\r
+ this.createControl = function(n) {\r
+ tinyMCE.pluginURL = tinymce.baseURL + '/plugins/' + pn;\r
+ tinyMCE.themeURL = tinymce.baseURL + '/themes/' + tinyMCE.activeEditor.settings.theme;\r
+\r
+ if (f.getControlHTML)\r
+ return f.getControlHTML(n);\r
+\r
+ return null;\r
+ };\r
+\r
+ this.execCommand = function(cmd, ui, val) {\r
+ if (f.execCommand)\r
+ return f.execCommand(ed.id, ed.getBody(), cmd, ui, val);\r
+\r
+ return false;\r
+ };\r
+ };\r
+\r
+ tinymce.PluginManager.add(pn, PluginWrapper);\r
+ },\r
+\r
+ _getDOM : function() {\r
+ return tinyMCE.activeEditor ? tinyMCE.activeEditor.dom : tinymce.DOM;\r
+ },\r
+\r
+ convertRelativeToAbsoluteURL : function(b, u) {\r
+ return new tinymce.util.URI(b).toAbsolute(u);\r
+ },\r
+\r
+ convertAbsoluteURLToRelativeURL : function(b, u) {\r
+ return new tinymce.util.URI(b).toRelative(u);\r
+ }\r
+ });\r
+\r
+ // Extend Editor class\r
+ tinymce.extend(tinymce.Editor.prototype, {\r
+ getFocusElement : function() {\r
+ return this.selection.getNode();\r
+ },\r
+\r
+ getData : function(n) {\r
+ if (!this.data)\r
+ this.data = [];\r
+\r
+ if (!this.data[n])\r
+ this.data[n] = [];\r
+\r
+ return this.data[n];\r
+ },\r
+\r
+ hasPlugin : function(n) {\r
+ return this.plugins[n] != null;\r
+ },\r
+\r
+ getContainerWin : function() {\r
+ return window;\r
+ },\r
+\r
+ getHTML : function(raw) {\r
+ return this.getContent({ format : raw ? 'raw' : 'html'});\r
+ },\r
+\r
+ setHTML : function(h) {\r
+ this.setContent(h);\r
+ },\r
+\r
+ getSel : function() {\r
+ return this.selection.getSel();\r
+ },\r
+\r
+ getRng : function() {\r
+ return this.selection.getRng();\r
+ },\r
+\r
+ isHidden : function() {\r
+ var s;\r
+\r
+ if (!tinymce.isGecko)\r
+ return false;\r
+\r
+ s = this.getSel();\r
+\r
+ // Weird, wheres that cursor selection?\r
+ return (!s || !s.rangeCount || s.rangeCount == 0);\r
+ },\r
+\r
+ translate : function(s) {\r
+ var c = this.settings.language, o;\r
+\r
+ o = tinymce.EditorManager.i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {\r
+ return tinymce.EditorManager.i18n[c + '.' + b] || '{#' + b + '}';\r
+ });\r
+\r
+ o = o.replace(/{\$lang_([^}]+)\}/g, function(a, b) {\r
+ return tinymce.EditorManager.i18n[c + '.' + b] || '{$lang_' + b + '}';\r
+ });\r
+\r
+ return o;\r
+ },\r
+\r
+ repaint : function() {\r
+ this.execCommand('mceRepaint');\r
+ }\r
+ });\r
+\r
+ // Extend selection\r
+ tinymce.extend(tinymce.dom.Selection.prototype, {\r
+ getSelectedText : function() {\r
+ return this.getContent({format : 'text'});\r
+ },\r
+\r
+ getSelectedHTML : function() {\r
+ return this.getContent({format : 'html'});\r
+ },\r
+\r
+ getFocusElement : function() {\r
+ return this.getNode();\r
+ },\r
+\r
+ selectNode : function(node, collapse, select_text_node, to_start) {\r
+ var t = this;\r
+\r
+ t.select(node, select_text_node || 0);\r
+\r
+ if (!is(collapse))\r
+ collapse = true;\r
+\r
+ if (collapse) {\r
+ if (!is(to_start))\r
+ to_start = true;\r
+\r
+ t.collapse(to_start);\r
+ }\r
+ }\r
+ });\r
+ }).call(this);\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('compat2x', tinymce.plugins.Compat2x);\r
+})();\r
+\r
--- /dev/null
+(function(){var Event=tinymce.dom.Event,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.ContextMenu',{init:function(ed){var t=this;t.editor=ed;t.onContextMenu=new tinymce.util.Dispatcher(this);ed.onContextMenu.add(function(ed,e){if(!e.ctrlKey){t._getMenu(ed).showMenu(e.clientX,e.clientY);Event.add(document,'click',hide);Event.cancel(e);}});function hide(){if(t._menu){t._menu.removeAll();t._menu.destroy();Event.remove(document,'click',hide);}};ed.onMouseDown.add(hide);ed.onKeyDown.add(hide);},getInfo:function(){return{longname:'Contextmenu',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_getMenu:function(ed){var t=this,m=t._menu,se=ed.selection,col=se.isCollapsed(),el=se.getNode()||ed.getBody(),am,p1,p2;if(m){m.removeAll();m.destroy();}p1=DOM.getPos(ed.getContentAreaContainer());p2=DOM.getPos(ed.getContainer());m=ed.controlManager.createDropMenu('contextmenu',{offset_x:p1.x,offset_y:p1.y,constrain:1});t._menu=m;m.add({title:'advanced.cut_desc',icon:'cut',cmd:'Cut'}).setDisabled(col);m.add({title:'advanced.copy_desc',icon:'copy',cmd:'Copy'}).setDisabled(col);m.add({title:'advanced.paste_desc',icon:'paste',cmd:'Paste'});if((el.nodeName=='A'&&!ed.dom.getAttrib(el,'name'))||!col){m.addSeparator();m.add({title:'advanced.link_desc',icon:'link',cmd:ed.plugins.advlink?'mceAdvLink':'mceLink',ui:true});m.add({title:'advanced.unlink_desc',icon:'unlink',cmd:'UnLink'});}m.addSeparator();m.add({title:'advanced.image_desc',icon:'image',cmd:ed.plugins.advimage?'mceAdvImage':'mceImage',ui:true});m.addSeparator();am=m.addMenu({title:'contextmenu.align'});am.add({title:'contextmenu.left',icon:'justifyleft',cmd:'JustifyLeft'});am.add({title:'contextmenu.center',icon:'justifycenter',cmd:'JustifyCenter'});am.add({title:'contextmenu.right',icon:'justifyright',cmd:'JustifyRight'});am.add({title:'contextmenu.full',icon:'justifyfull',cmd:'JustifyFull'});t.onContextMenu.dispatch(t,m,el,col);return m;}});tinymce.PluginManager.add('contextmenu',tinymce.plugins.ContextMenu);})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * $Id: editor_plugin_src.js 755 2008-03-29 19:14:42Z spocke $\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+ var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;\r
+\r
+ tinymce.create('tinymce.plugins.ContextMenu', {\r
+ init : function(ed) {\r
+ var t = this;\r
+\r
+ t.editor = ed;\r
+ t.onContextMenu = new tinymce.util.Dispatcher(this);\r
+\r
+ ed.onContextMenu.add(function(ed, e) {\r
+ if (!e.ctrlKey) {\r
+ t._getMenu(ed).showMenu(e.clientX, e.clientY);\r
+ Event.add(document, 'click', hide);\r
+ Event.cancel(e);\r
+ }\r
+ });\r
+\r
+ function hide() {\r
+ if (t._menu) {\r
+ t._menu.removeAll();\r
+ t._menu.destroy();\r
+ Event.remove(document, 'click', hide);\r
+ }\r
+ };\r
+\r
+ ed.onMouseDown.add(hide);\r
+ ed.onKeyDown.add(hide);\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Contextmenu',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ },\r
+\r
+ _getMenu : function(ed) {\r
+ var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2;\r
+\r
+ if (m) {\r
+ m.removeAll();\r
+ m.destroy();\r
+ }\r
+\r
+ p1 = DOM.getPos(ed.getContentAreaContainer());\r
+ p2 = DOM.getPos(ed.getContainer());\r
+\r
+ m = ed.controlManager.createDropMenu('contextmenu', {\r
+ offset_x : p1.x,\r
+ offset_y : p1.y,\r
+/* vp_offset_x : p2.x,\r
+ vp_offset_y : p2.y,*/\r
+ constrain : 1\r
+ });\r
+\r
+ t._menu = m;\r
+\r
+ m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);\r
+ m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);\r
+ m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});\r
+\r
+ if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {\r
+ m.addSeparator();\r
+ m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});\r
+ m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});\r
+ }\r
+\r
+ m.addSeparator();\r
+ m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});\r
+\r
+ m.addSeparator();\r
+ am = m.addMenu({title : 'contextmenu.align'});\r
+ am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});\r
+ am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});\r
+ am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});\r
+ am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});\r
+\r
+ t.onContextMenu.dispatch(t, m, el, col);\r
+\r
+ return m;\r
+ }\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);\r
+})();
\ No newline at end of file
--- /dev/null
+(function(){tinymce.create('tinymce.plugins.Directionality',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceDirectionLTR',function(){var e=ed.dom.getParent(ed.selection.getNode(),ed.dom.isBlock);if(e){if(ed.dom.getAttrib(e,"dir")!="ltr")ed.dom.setAttrib(e,"dir","ltr");else ed.dom.setAttrib(e,"dir","");}ed.nodeChanged();});ed.addCommand('mceDirectionRTL',function(){var e=ed.dom.getParent(ed.selection.getNode(),ed.dom.isBlock);if(e){if(ed.dom.getAttrib(e,"dir")!="rtl")ed.dom.setAttrib(e,"dir","rtl");else ed.dom.setAttrib(e,"dir","");}ed.nodeChanged();});ed.addButton('ltr',{title:'directionality.ltr_desc',cmd:'mceDirectionLTR'});ed.addButton('rtl',{title:'directionality.rtl_desc',cmd:'mceDirectionRTL'});ed.onNodeChange.add(t._nodeChange,t);},getInfo:function(){return{longname:'Directionality',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_nodeChange:function(ed,cm,n){var dom=ed.dom,dir;n=dom.getParent(n,dom.isBlock);if(!n){cm.setDisabled('ltr',1);cm.setDisabled('rtl',1);return;}dir=dom.getAttrib(n,'dir');cm.setActive('ltr',dir=="ltr");cm.setDisabled('ltr',0);cm.setActive('rtl',dir=="rtl");cm.setDisabled('rtl',0);}});tinymce.PluginManager.add('directionality',tinymce.plugins.Directionality);})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * $Id: editor_plugin_src.js 520 2008-01-07 16:30:32Z spocke $\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+ tinymce.create('tinymce.plugins.Directionality', {\r
+ init : function(ed, url) {\r
+ var t = this;\r
+\r
+ t.editor = ed;\r
+\r
+ ed.addCommand('mceDirectionLTR', function() {\r
+ var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);\r
+\r
+ if (e) {\r
+ if (ed.dom.getAttrib(e, "dir") != "ltr")\r
+ ed.dom.setAttrib(e, "dir", "ltr");\r
+ else\r
+ ed.dom.setAttrib(e, "dir", "");\r
+ }\r
+\r
+ ed.nodeChanged();\r
+ });\r
+\r
+ ed.addCommand('mceDirectionRTL', function() {\r
+ var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);\r
+\r
+ if (e) {\r
+ if (ed.dom.getAttrib(e, "dir") != "rtl")\r
+ ed.dom.setAttrib(e, "dir", "rtl");\r
+ else\r
+ ed.dom.setAttrib(e, "dir", "");\r
+ }\r
+\r
+ ed.nodeChanged();\r
+ });\r
+\r
+ ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});\r
+ ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});\r
+\r
+ ed.onNodeChange.add(t._nodeChange, t);\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Directionality',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ },\r
+\r
+ // Private methods\r
+\r
+ _nodeChange : function(ed, cm, n) {\r
+ var dom = ed.dom, dir;\r
+\r
+ n = dom.getParent(n, dom.isBlock);\r
+ if (!n) {\r
+ cm.setDisabled('ltr', 1);\r
+ cm.setDisabled('rtl', 1);\r
+ return;\r
+ }\r
+\r
+ dir = dom.getAttrib(n, 'dir');\r
+ cm.setActive('ltr', dir == "ltr");\r
+ cm.setDisabled('ltr', 0);\r
+ cm.setActive('rtl', dir == "rtl");\r
+ cm.setDisabled('rtl', 0);\r
+ }\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);\r
+})();
\ No newline at end of file
-tinyMCE.importPluginLanguagePack('emotions');var TinyMCE_EmotionsPlugin={getInfo:function(){return{longname:'Emotions',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},getControlHTML:function(cn){switch(cn){case"emotions":return tinyMCE.getButtonHTML(cn,'lang_emotions_desc','{$pluginurl}/images/emotions.gif','mceEmotion')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceEmotion":var template=new Array();template['file']='../../plugins/emotions/emotions.htm';template['width']=250;template['height']=160;template['width']+=tinyMCE.getLang('lang_emotions_delta_width',0);template['height']+=tinyMCE.getLang('lang_emotions_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true}return false}};tinyMCE.addPlugin('emotions',TinyMCE_EmotionsPlugin);
\ No newline at end of file
+(function(){tinymce.create('tinymce.plugins.EmotionsPlugin',{init:function(ed,url){ed.addCommand('mceEmotion',function(){ed.windowManager.open({file:url+'/emotions.htm',width:250+parseInt(ed.getLang('emotions.delta_width',0)),height:160+parseInt(ed.getLang('emotions.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('emotions',{title:'emotions.emotions_desc',cmd:'mceEmotion'});},getInfo:function(){return{longname:'Emotions',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('emotions',tinymce.plugins.EmotionsPlugin);})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
+ * $Id: editor_plugin_src.js 520 2008-01-07 16:30:32Z spocke $\r
*\r
* @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
*/\r
\r
-/* Import plugin specific language pack */\r
-tinyMCE.importPluginLanguagePack('emotions');\r
-\r
-// Plucin static class\r
-var TinyMCE_EmotionsPlugin = {\r
- getInfo : function() {\r
- return {\r
- longname : 'Emotions',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',\r
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
- };\r
- },\r
-\r
- /**\r
- * Returns the HTML contents of the emotions control.\r
- */\r
- getControlHTML : function(cn) {\r
- switch (cn) {\r
- case "emotions":\r
- return tinyMCE.getButtonHTML(cn, 'lang_emotions_desc', '{$pluginurl}/images/emotions.gif', 'mceEmotion');\r
- }\r
-\r
- return "";\r
- },\r
-\r
- /**\r
- * Executes the mceEmotion command.\r
- */\r
- execCommand : function(editor_id, element, command, user_interface, value) {\r
- // Handle commands\r
- switch (command) {\r
- case "mceEmotion":\r
- var template = new Array();\r
-\r
- template['file'] = '../../plugins/emotions/emotions.htm'; // Relative to theme\r
- template['width'] = 250;\r
- template['height'] = 160;\r
-\r
- // Language specific width and height addons\r
- template['width'] += tinyMCE.getLang('lang_emotions_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_emotions_delta_height', 0);\r
-\r
- tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});\r
-\r
- return true;\r
+(function() {\r
+ tinymce.create('tinymce.plugins.EmotionsPlugin', {\r
+ init : function(ed, url) {\r
+ // Register commands\r
+ ed.addCommand('mceEmotion', function() {\r
+ ed.windowManager.open({\r
+ file : url + '/emotions.htm',\r
+ width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),\r
+ height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ });\r
+\r
+ // Register buttons\r
+ ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Emotions',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
}\r
+ });\r
\r
- // Pass to next handler in chain\r
- return false;\r
- }\r
-};\r
-\r
-// Register plugin\r
-tinyMCE.addPlugin('emotions', TinyMCE_EmotionsPlugin);\r
+ // Register plugin\r
+ tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);\r
+})();
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_emotions_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/functions.js"></script>\r
+ <title>{#emotions_dlg.title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="js/emotions.js"></script>\r
<base target="_self" />\r
</head>\r
-<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
+<body style="display: none">\r
<div align="center">\r
- <div class="title">{$lang_emotions_title}:<br /><br /></div>\r
+ <div class="title">{#emotions_dlg.title}:<br /><br /></div>\r
\r
<table border="0" cellspacing="0" cellpadding="4">\r
<tr>\r
- <td><a href="javascript:insertEmotion('smiley-cool.gif','lang_emotions_cool');"><img src="images/smiley-cool.gif" width="18" height="18" border="0" alt="{$lang_emotions_cool}" title="{$lang_emotions_cool}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-cry.gif','lang_emotions_cry');"><img src="images/smiley-cry.gif" width="18" height="18" border="0" alt="{$lang_emotions_cry}" title="{$lang_emotions_cry}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-embarassed.gif','lang_emotions_embarassed');"><img src="images/smiley-embarassed.gif" width="18" height="18" border="0" alt="{$lang_emotions_embarassed}" title="{$lang_emotions_embarassed}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-foot-in-mouth.gif','lang_emotions_foot_in_mouth');"><img src="images/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{$lang_emotions_foot_in_mouth}" title="{$lang_emotions_foot_in_mouth}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}" title="{#emotions_dlg.cool}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}" title="{#emotions_dlg.cry}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}" title="{#emotions_dlg.embarassed}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}" title="{#emotions_dlg.foot_in_mouth}" /></a></td>\r
</tr>\r
<tr>\r
- <td><a href="javascript:insertEmotion('smiley-frown.gif','lang_emotions_frown');"><img src="images/smiley-frown.gif" width="18" height="18" border="0" alt="{$lang_emotions_frown}" title="{$lang_emotions_frown}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-innocent.gif','lang_emotions_innocent');"><img src="images/smiley-innocent.gif" width="18" height="18" border="0" alt="{$lang_emotions_innocent}" title="{$lang_emotions_innocent}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-kiss.gif','lang_emotions_kiss');"><img src="images/smiley-kiss.gif" width="18" height="18" border="0" alt="{$lang_emotions_kiss}" title="{$lang_emotions_kiss}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-laughing.gif','lang_emotions_laughing');"><img src="images/smiley-laughing.gif" width="18" height="18" border="0" alt="{$lang_emotions_laughing}" title="{$lang_emotions_laughing}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}" title="{#emotions_dlg.frown}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}" title="{#emotions_dlg.innocent}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}" title="{#emotions_dlg.kiss}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}" title="{#emotions_dlg.laughing}" /></a></td>\r
</tr>\r
<tr>\r
- <td><a href="javascript:insertEmotion('smiley-money-mouth.gif','lang_emotions_money_mouth');"><img src="images/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{$lang_emotions_money_mouth}" title="{$lang_emotions_money_mouth}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-sealed.gif','lang_emotions_sealed');"><img src="images/smiley-sealed.gif" width="18" height="18" border="0" alt="{$lang_emotions_sealed}" title="{$lang_emotions_sealed}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-smile.gif','lang_emotions_smile');"><img src="images/smiley-smile.gif" width="18" height="18" border="0" alt="{$lang_emotions_smile}" title="{$lang_emotions_smile}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-surprised.gif','lang_emotions_surprised');"><img src="images/smiley-surprised.gif" width="18" height="18" border="0" alt="{$lang_emotions_surprised}" title="{$lang_emotions_surprised}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}" title="{#emotions_dlg.money_mouth}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}" title="{#emotions_dlg.sealed}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}" title="{#emotions_dlg.smile}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}" title="{#emotions_dlg.surprised}" /></a></td>\r
</tr>\r
<tr>\r
- <td><a href="javascript:insertEmotion('smiley-tongue-out.gif','lang_emotions_tongue_out');"><img src="images/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{$lang_emotions_tongue-out}" title="{$lang_emotions_tongue_out}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-undecided.gif','lang_emotions_undecided');"><img src="images/smiley-undecided.gif" width="18" height="18" border="0" alt="{$lang_emotions_undecided}" title="{$lang_emotions_undecided}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-wink.gif','lang_emotions_wink');"><img src="images/smiley-wink.gif" width="18" height="18" border="0" alt="{$lang_emotions_wink}" title="{$lang_emotions_wink}" /></a></td>\r
- <td><a href="javascript:insertEmotion('smiley-yell.gif','lang_emotions_yell');"><img src="images/smiley-yell.gif" width="18" height="18" border="0" alt="{$lang_emotions_yell}" title="{$lang_emotions_yell}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}" title="{#emotions_dlg.tongue_out}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}" title="{#emotions_dlg.undecided}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}" title="{#emotions_dlg.wink}" /></a></td>\r
+ <td><a href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}" title="{#emotions_dlg.yell}" /></a></td>\r
</tr>\r
</table>\r
</div>\r
+++ /dev/null
-These emotions where taken from Mozilla Thunderbird.\r
-I hope they don't get angry if I use them here after all this is a open source project aswell.\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var EmotionsDialog = {\r
+ init : function(ed) {\r
+ tinyMCEPopup.resizeToInnerSize();\r
+ },\r
+\r
+ insert : function(file, title) {\r
+ var ed = tinyMCEPopup.editor, dom = ed.dom;\r
+\r
+ tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {\r
+ src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,\r
+ alt : ed.getLang(title),\r
+ title : ed.getLang(title),\r
+ border : 0\r
+ }));\r
+\r
+ tinyMCEPopup.close();\r
+ }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);\r
+++ /dev/null
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-}\r
-\r
-function insertEmotion(file_name, title) {\r
- title = tinyMCE.getLang(title);\r
-\r
- if (title == null)\r
- title = "";\r
-\r
- // XML encode\r
- title = title.replace(/&/g, '&');\r
- title = title.replace(/\"/g, '"');\r
- title = title.replace(/</g, '<');\r
- title = title.replace(/>/g, '>');\r
-\r
- var html = '<img src="' + tinyMCE.baseURL + "/plugins/emotions/images/" + file_name + '" mce_src="' + tinyMCE.baseURL + "/plugins/emotions/images/" + file_name + '" border="0" alt="' + title + '" title="' + title + '" />';\r
-\r
- tinyMCE.execCommand('mceInsertContent', false, html);\r
- tinyMCEPopup.close();\r
-}\r
+++ /dev/null
-// UK lang variables\r
-\r
-tinyMCE.addToLang('emotions',{\r
-title : 'Insert emotion',\r
-desc : 'Emotions',\r
-cool : 'Cool',\r
-cry : 'Cry',\r
-embarassed : 'Embarassed',\r
-foot_in_mouth : 'Foot in mouth',\r
-frown : 'Frown',\r
-innocent : 'Innocent',\r
-kiss : 'Kiss',\r
-laughing : 'Laughing',\r
-money_mouth : 'Money mouth',\r
-sealed : 'Sealed',\r
-smile : 'Smile',\r
-surprised : 'Surprised',\r
-tongue_out : 'Tongue out',\r
-undecided : 'Undecided',\r
-wink : 'Wink',\r
-yell : 'Yell'\r
-});\r
--- /dev/null
+tinyMCE.addI18n('en.emotions_dlg',{\r
+title:"Insert emotion",\r
+desc:"Emotions",\r
+cool:"Cool",\r
+cry:"Cry",\r
+embarassed:"Embarassed",\r
+foot_in_mouth:"Foot in mouth",\r
+frown:"Frown",\r
+innocent:"Innocent",\r
+kiss:"Kiss",\r
+laughing:"Laughing",\r
+money_mouth:"Money mouth",\r
+sealed:"Sealed",\r
+smile:"Smile",\r
+surprised:"Surprised",\r
+tongue_out:"Tongue out",\r
+undecided:"Undecided",\r
+wink:"Wink",\r
+yell:"Yell"\r
+});
\ No newline at end of file
+++ /dev/null
-Check the TinyMCE documentation for details on this plugin.\r
-.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {
- border: 1px dotted #cc0000;
- background-position: center;
- background-repeat: no-repeat;
- background-color: #ffffcc;
-}
-
-.mceItemShockWave {
- background-image: url('../images/shockwave.gif');
-}
-
-.mceItemFlash {
- background-image: url('../images/flash.gif');
-}
-
-.mceItemQuickTime {
- background-image: url('../images/quicktime.gif');
-}
-
-.mceItemWindowsMedia {
- background-image: url('../images/windowsmedia.gif');
-}
-
-.mceItemRealMedia {
- background-image: url('../images/realmedia.gif');
-}
+.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;}\r
+.mceItemShockWave {background-image: url(../img/shockwave.gif);}\r
+.mceItemFlash {background-image:url(../img/flash.gif);}\r
+.mceItemQuickTime {background-image:url(../img/quicktime.gif);}\r
+.mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);}\r
+.mceItemRealMedia {background-image:url(../img/realmedia.gif);}\r
-#id, #name, #hspace, #vspace, #class_name, #align {
- width: 100px;
-}
-
-#hspace, #vspace {
- width: 50px;
-}
-
-#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode {
- width: 100px;
-}
-
-#flash_base, #flash_flashvars {
- width: 240px;
-}
-
-#width, #height {
- width: 40px;
-}
-
-#src, #media_type {
- width: 250px;
-}
-
-#class {
- width: 120px;
-}
-
-#prev {
- margin: 0;
- border: 1px solid black;
- width: 99%;
- height: 230px;
- overflow: auto;
-}
-
-.panel_wrapper div.current {
- height: 390px;
- overflow: auto;
-}
-
-#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options {
- display: none;
-}
-
-.mceAddSelectValue {
- background-color: #DDDDDD;
-}
-
-#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume {
- width: 70px;
-}
-
-#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume {
- width: 70px;
-}
-
-#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks {
- width: 70px;
-}
-
-#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle {
- width: 90px;
-}
-
-#qt_qtsrc {
- width: 200px;
-}
+#id, #name, #hspace, #vspace, #class_name, #align {\r
+ width: 100px;\r
+}\r
+\r
+#hspace, #vspace {\r
+ width: 50px;\r
+}\r
+\r
+#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode {\r
+ width: 100px;\r
+}\r
+\r
+#flash_base, #flash_flashvars {\r
+ width: 240px;\r
+}\r
+\r
+#width, #height {\r
+ width: 40px;\r
+}\r
+\r
+#src, #media_type {\r
+ width: 250px;\r
+}\r
+\r
+#class {\r
+ width: 120px;\r
+}\r
+\r
+#prev {\r
+ margin: 0;\r
+ border: 1px solid black;\r
+ width: 99%;\r
+ height: 230px;\r
+ overflow: auto;\r
+}\r
+\r
+.panel_wrapper div.current {\r
+ height: 390px;\r
+ overflow: auto;\r
+}\r
+\r
+#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options {\r
+ display: none;\r
+}\r
+\r
+.mceAddSelectValue {\r
+ background-color: #DDDDDD;\r
+}\r
+\r
+#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume {\r
+ width: 70px;\r
+}\r
+\r
+#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume {\r
+ width: 70px;\r
+}\r
+\r
+#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks {\r
+ width: 70px;\r
+}\r
+\r
+#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle {\r
+ width: 90px;\r
+}\r
+\r
+#qt_qtsrc {\r
+ width: 200px;\r
+}\r
-tinyMCE.importPluginLanguagePack('media');var TinyMCE_MediaPlugin={getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(inst.hasPlugin('flash')&&!tinyMCE.flashWarn){alert('Flash plugin is deprecated and should not be used together with the media plugin.');tinyMCE.flashWarn=true}if(!tinyMCE.settings['media_skip_plugin_css'])tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/media/css/content.css")},getControlHTML:function(cn){switch(cn){case"media":return tinyMCE.getButtonHTML(cn,'lang_media_desc','{$pluginurl}/images/media.gif','mceMedia')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceMedia":tinyMCE.openWindow({file:'../../plugins/media/media.htm',width:430+tinyMCE.getLang('lang_media_delta_width',0),height:470+tinyMCE.getLang('lang_media_delta_height',0)},{editor_id:editor_id,inline:"yes"});return true}return false},cleanup:function(type,content,inst){var nl,img,i,ne,d,s,ci;switch(type){case"insert_to_editor":img=tinyMCE.getParam("theme_href")+'/images/spacer.gif';content=content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,'<img class="mceItem$1" title="$2" src="'+img+'" />');content=content.replace(/<object([^>]*)>/gi,'<div class="mceItemObject" $1>');content=content.replace(/<embed([^>]*)>/gi,'<div class="mceItemObjectEmbed" $1>');content=content.replace(/<\/(object|embed)([^>]*)>/gi,'</div>');content=content.replace(/<param([^>]*)>/gi,'<div $1 class="mceItemParam"></div>');content=content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>','gi'),'class="mceItemParam"></div>');break;case"insert_to_editor_dom":d=inst.getDoc();nl=content.getElementsByTagName("img");for(i=0;i<nl.length;i++){if(/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)){nl[i].width=nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g,'$1');nl[i].height=nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g,'$1');}}nl=tinyMCE.selectElements(content,'DIV',function(n){return tinyMCE.hasCSSClass(n,'mceItemObject')});for(i=0;i<nl.length;i++){ci=tinyMCE.getAttrib(nl[i],"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash',d,nl[i]),nl[i]);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave',d,nl[i]),nl[i]);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia',d,nl[i]),nl[i]);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime',d,nl[i]),nl[i]);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia',d,nl[i]),nl[i]);break}}nl=tinyMCE.selectNodes(content,function(n){return n.className=='mceItemObjectEmbed'});for(i=0;i<nl.length;i++){switch(tinyMCE.getAttrib(nl[i],'type')){case'application/x-shockwave-flash':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemFlash');break;case'application/x-director':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemShockWave');break;case'application/x-mplayer2':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemWindowsMedia');break;case'video/quicktime':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemQuickTime');break;case'audio/x-pn-realaudio-plugin':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemRealMedia');break}}break;case"get_from_editor":var startPos=-1,endPos,attribs,chunkBefore,chunkAfter,embedHTML,at,pl,cb,mt,ex;while((startPos=content.indexOf('<img',startPos+1))!=-1){endPos=content.indexOf('/>',startPos);attribs=TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos+4,endPos));if(!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))continue;endPos+=2;at=attribs['title'];if(at){at=at.replace(/&(#39|apos);/g,"'");at=at.replace(/&#quot;/g,'"');try{pl=eval('x={'+at+'};')}catch(ex){pl={}}}if(!tinyMCE.getParam('media_use_script',false)){switch(attribs['class']){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166B1BCA-3F9C-11CF-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=tinyMCE.getParam('media_wmp6_compatible')?'05589FA1-C356-11CE-BF01-00AA0055595A':'6BF52A52-394A-11D3-B153-00C04F79FAA6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break}pl.src=tinyMCE.convertURL(pl.src,null,true);embedHTML=TinyMCE_MediaPlugin._getEmbed(ci,cb,mt,pl,attribs)}else{switch(attribs['class']){case'mceItemFlash':s='writeFlash';break;case'mceItemShockWave':s='writeShockWave';break;case'mceItemWindowsMedia':s='writeWindowsMedia';break;case'mceItemQuickTime':s='writeQuickTime';break;case'mceItemRealMedia':s='writeRealMedia';break}if(attribs.width)at=at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g,"width:'"+attribs.width+"'");if(attribs.height)at=at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g,"height:'"+attribs.height+"'");pl.src=tinyMCE.convertURL(pl.src,null,true);at=at.replace(new RegExp("src:'[^']*'","g"),"src:'"+pl.src+"'");embedHTML='<script type="text/javascript">'+s+'({'+at+'});</script>'}chunkBefore=content.substring(0,startPos);chunkAfter=content.substring(endPos);content=chunkBefore+embedHTML+chunkAfter}break}return content},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){if(node==null)return;do{if(node.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node,'class'))){tinyMCE.switchClass(editor_id+'_media','mceButtonSelected');return true}}while((node=node.parentNode));tinyMCE.switchClass(editor_id+'_media','mceButtonNormal');return true},_createImgFromEmbed:function(n,d,cl){var ne,at,i,ti='',an;ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;at=n.attributes;for(i=0;i<at.length;i++){if(at[i].specified&&at[i].nodeValue){an=at[i].nodeName.toLowerCase();if(an=='src')continue;if(an=='mce_src')an='src';if(an.indexOf('mce_')==-1&&!new RegExp('^(class|type)$').test(an))ti+=an.toLowerCase()+':\''+at[i].nodeValue+"',"}}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;n.parentNode.replaceChild(ne,n)},_createImg:function(cl,d,n){var i,nl,ti="",an,av,al=new Array();ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;al.id=tinyMCE.getAttrib(n,'id');al.name=tinyMCE.getAttrib(n,'name');al.width=tinyMCE.getAttrib(n,'width');al.height=tinyMCE.getAttrib(n,'height');al.bgcolor=tinyMCE.getAttrib(n,'bgcolor');al.align=tinyMCE.getAttrib(n,'align');al.class_name=tinyMCE.getAttrib(n,'mce_class');nl=n.getElementsByTagName('div');for(i=0;i<nl.length;i++){av=tinyMCE.getAttrib(nl[i],'value');av=av.replace(new RegExp('\\\\','g'),'\\\\');av=av.replace(new RegExp('"','g'),'\\"');av=av.replace(new RegExp("'",'g'),"\\'");an=tinyMCE.getAttrib(nl[i],'name');al[an]=av}if(al.movie){al.src=al.movie;al.movie=null}for(an in al){if(al[an]!=null&&typeof(al[an])!="function"&&al[an]!='')ti+=an.toLowerCase()+':\''+al[an]+"',"}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;return ne},_getEmbed:function(cls,cb,mt,p,at){var h='',n;p.width=at.width?at.width:p.width;p.height=at.height?at.height:p.height;h+='<object classid="clsid:'+cls+'" codebase="'+cb+'"';h+=typeof(p.id)!="undefined"?' id="'+p.id+'"':'';h+=typeof(p.name)!="undefined"?' name="'+p.name+'"':'';h+=typeof(p.width)!="undefined"?' width="'+p.width+'"':'';h+=typeof(p.height)!="undefined"?' height="'+p.height+'"':'';h+=typeof(p.align)!="undefined"?' align="'+p.align+'"':'';h+='>';for(n in p){if(typeof(p[n])!="undefined"&&typeof(p[n])!="function"){h+='<param name="'+n+'" value="'+p[n]+'" />';if(n=='src'&&p[n].indexOf('://')!=-1&&mt=='application/x-mplayer2')h+='<param name="url" value="'+p[n]+'" />'}}h+='<embed type="'+mt+'"';for(n in p){if(typeof(p[n])=="function")continue;if(!(n=='url'&&mt=='application/x-mplayer2'))h+=' '+n+'="'+p[n]+'"'}h+='></embed></object>';return h},_parseAttributes:function(attribute_string){var attributeName="",endChr='"';var attributeValue="";var withInName;var withInValue;var attributes=new Array();var whiteSpaceRegExp=new RegExp('^[ \n\r\t]+','g');if(attribute_string==null||attribute_string.length<2)return null;withInName=withInValue=false;for(var i=0;i<attribute_string.length;i++){var chr=attribute_string.charAt(i);if((chr=='"'||chr=="'")&&!withInValue){withInValue=true;endChr=chr}else if(chr==endChr&&withInValue){withInValue=false;var pos=attributeName.lastIndexOf(' ');if(pos!=-1)attributeName=attributeName.substring(pos+1);attributes[attributeName.toLowerCase()]=attributeValue.substring(1);attributeName="";attributeValue=""}else if(!whiteSpaceRegExp.test(chr)&&!withInName&&!withInValue)withInName=true;if(chr=='='&&withInName)withInName=false;if(withInName)attributeName+=chr;if(withInValue)attributeValue+=chr}return attributes}};tinyMCE.addPlugin("media",TinyMCE_MediaPlugin);
\ No newline at end of file
+(function(){var each=tinymce.each;tinymce.create('tinymce.plugins.MediaPlugin',{init:function(ed,url){var t=this;t.editor=ed;t.url=url;function isMediaElm(n){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);};ed.addCommand('mceMedia',function(){ed.windowManager.open({file:url+'/media.htm',width:430+parseInt(ed.getLang('media.delta_width',0)),height:470+parseInt(ed.getLang('media.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('media',{title:'media.desc',cmd:'mceMedia'});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('media',n.nodeName=='IMG'&&isMediaElm(n));});ed.onInit.add(function(){var lo={mceItemFlash:'flash',mceItemShockWave:'shockwave',mceItemWindowsMedia:'windowsmedia',mceItemQuickTime:'quicktime',mceItemRealMedia:'realmedia'};if(ed.settings.content_css!==false)ed.dom.loadCSS(url+"/css/content.css");if(ed.theme.onResolveName){ed.theme.onResolveName.add(function(th,o){if(o.name=='img'){each(lo,function(v,k){if(ed.dom.hasClass(o.node,k)){o.name=v;o.title=ed.dom.getAttrib(o.node,'title');return false;}});}});}if(ed&&ed.plugins.contextmenu){ed.plugins.contextmenu.onContextMenu.add(function(th,m,e){if(e.nodeName=='IMG'&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)){m.add({title:'media.edit',icon:'media',cmd:'mceMedia'});}});}});ed.onBeforeSetContent.add(function(ed,o){var h=o.content;h=h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,function(a,b,c){var o=t._parse(c);return'<img class="mceItem'+b+'" title="'+ed.dom.encode(c)+'" src="'+url+'/img/trans.gif" width="'+o.width+'" height="'+o.height+'" />'});h=h.replace(/<object([^>]*)>/gi,'<span class="mceItemObject" $1>');h=h.replace(/<embed([^>]*)>/gi,'<span class="mceItemEmbed" $1>');h=h.replace(/<\/(object|embed)([^>]*)>/gi,'</span>');h=h.replace(/<param([^>]*)>/gi,function(a,b){return'<span '+b.replace(/value=/gi,'_value=')+' class="mceItemParam"></span>'});h=h.replace(/\/ class=\"mceItemParam\"><\/span>/gi,'class="mceItemParam"></span>');o.content=h;});ed.onSetContent.add(function(){t._spansToImgs(ed.getBody());});ed.onPreProcess.add(function(ed,o){var dom=ed.dom;if(o.set){t._spansToImgs(o.node);each(dom.select('IMG',o.node),function(n){var p;if(isMediaElm(n)){p=t._parse(n.title);dom.setAttrib(n,'width',dom.getAttrib(n,'width',p.width||100));dom.setAttrib(n,'height',dom.getAttrib(n,'height',p.height||100));}});}if(o.get){each(dom.select('IMG',o.node),function(n){var ci,cb,mt;if(ed.getParam('media_use_script')){if(isMediaElm(n))n.className=n.className.replace(/mceItem/g,'mceTemp');return;}switch(n.className){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166b1bca-3f9c-11cf-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=ed.getParam('media_wmp6_compatible')?'05589fa1-c356-11ce-bf01-00aa0055595a':'6bf52a52-394a-11d3-b153-00c04f79faa6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02bf25d5-8c17-4b23-bc80-d3488abddc6b';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='cfcdaa03-8be4-11cf-b84b-0020afbbccfa';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break;}if(ci){dom.replace(t._buildObj({classid:ci,codebase:cb,type:mt},n),n);}});}});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/_value=/g,'value=');});if(ed.getParam('media_use_script')){function getAttr(s,n){n=new RegExp(n+'=\"([^\"]+)\"','g').exec(s);return n?ed.dom.decode(n[1]):'';};ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/<img[^>]+>/g,function(im){var cl=getAttr(im,'class');if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)){at=t._parse(getAttr(im,'title'));at.width=getAttr(im,'width');at.height=getAttr(im,'height');im='<script type="text/javascript">write'+cl.substring(7)+'({'+t._serialize(at)+'});</script>';}return im;});});}},getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_buildObj:function(o,n){var ob,ed=this.editor,dom=ed.dom,p=this._parse(n.title);p.width=o.width=dom.getAttrib(n,'width')||100;p.height=o.height=dom.getAttrib(n,'height')||100;ob=dom.create('span',{mce_name:'object',classid:"clsid:"+o.classid,codebase:o.codebase,width:o.width,height:o.height});if(p.src)p.src=ed.convertURL(p.src,'src',n);each(p,function(v,k){if(!/^(width|height|codebase|classid)$/.test(k)){if(o.type=='application/x-mplayer2'&&k=='src')k='url';dom.add(ob,'span',{mce_name:'param',name:k,'_value':v});}});dom.add(ob,'span',tinymce.extend({mce_name:'embed',type:o.type},p));return ob;},_spansToImgs:function(p){var t=this,dom=t.editor.dom,im,ci;each(dom.select('span',p),function(n){if(dom.getAttrib(n,'class')=='mceItemObject'){ci=dom.getAttrib(n,"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':dom.replace(t._createImg('mceItemFlash',n),n);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':dom.replace(t._createImg('mceItemShockWave',n),n);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':dom.replace(t._createImg('mceItemWindowsMedia',n),n);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':dom.replace(t._createImg('mceItemQuickTime',n),n);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':dom.replace(t._createImg('mceItemRealMedia',n),n);break;default:dom.replace(t._createImg('mceItemFlash',n),n);}return;}if(dom.getAttrib(n,'class')=='mceItemEmbed'){switch(dom.getAttrib(n,'type')){case'application/x-shockwave-flash':dom.replace(t._createImg('mceItemFlash',n),n);break;case'application/x-director':dom.replace(t._createImg('mceItemShockWave',n),n);break;case'application/x-mplayer2':dom.replace(t._createImg('mceItemWindowsMedia',n),n);break;case'video/quicktime':dom.replace(t._createImg('mceItemQuickTime',n),n);break;case'audio/x-pn-realaudio-plugin':dom.replace(t._createImg('mceItemRealMedia',n),n);break;default:dom.replace(t._createImg('mceItemFlash',n),n);}}});},_createImg:function(cl,n){var im,dom=this.editor.dom,pa={},ti='';im=dom.create('img',{src:this.url+'/img/trans.gif',width:dom.getAttrib(n,'width')||100,height:dom.getAttrib(n,'height')||100,'class':cl});each(['id','name','width','height','bgcolor','align','flashvars','src','wmode'],function(na){var v=dom.getAttrib(n,na);if(v)pa[na]=v;});each(dom.select('span',n),function(n){if(dom.hasClass(n,'mceItemParam'))pa[dom.getAttrib(n,'name')]=dom.getAttrib(n,'_value');});if(pa.movie){pa.src=pa.movie;delete pa.movie;}delete pa.width;delete pa.height;im.title=this._serialize(pa);return im;},_parse:function(s){return tinymce.util.JSON.parse('{'+s+'}');},_serialize:function(o){return tinymce.util.JSON.serialize(o).replace(/[{}]/g,'');}});tinymce.PluginManager.add('media',tinymce.plugins.MediaPlugin);})();
\ No newline at end of file
-/**
- * $Id: editor_plugin_src.js 296 2007-08-21 10:36:35Z spocke $
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-/* Import plugin specific language pack */
-tinyMCE.importPluginLanguagePack('media');
-
-var TinyMCE_MediaPlugin = {
- getInfo : function() {
- return {
- longname : 'Media',
- author : 'Moxiecode Systems AB',
- authorurl : 'http://tinymce.moxiecode.com',
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
- };
- },
-
- initInstance : function(inst) {
- // Warn if user has flash plugin and media plugin at the same time
- if (inst.hasPlugin('flash') && !tinyMCE.flashWarn) {
- alert('Flash plugin is deprecated and should not be used together with the media plugin.');
- tinyMCE.flashWarn = true;
- }
-
- if (!tinyMCE.settings['media_skip_plugin_css'])
- tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/media/css/content.css");
- },
-
- getControlHTML : function(cn) {
- switch (cn) {
- case "media":
- return tinyMCE.getButtonHTML(cn, 'lang_media_desc', '{$pluginurl}/images/media.gif', 'mceMedia');
- }
-
- return "";
- },
-
- execCommand : function(editor_id, element, command, user_interface, value) {
- // Handle commands
- switch (command) {
- case "mceMedia":
- tinyMCE.openWindow({
- file : '../../plugins/media/media.htm',
- width : 430 + tinyMCE.getLang('lang_media_delta_width', 0),
- height : 470 + tinyMCE.getLang('lang_media_delta_height', 0)
- }, {
- editor_id : editor_id,
- inline : "yes"
- });
-
- return true;
- }
-
- // Pass to next handler in chain
- return false;
- },
-
- cleanup : function(type, content, inst) {
- var nl, img, i, ne, d, s, ci;
-
- switch (type) {
- case "insert_to_editor":
- img = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
- content = content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, '<img class="mceItem$1" title="$2" src="' + img + '" />');
- content = content.replace(/<object([^>]*)>/gi, '<div class="mceItemObject" $1>');
- content = content.replace(/<embed([^>]*)>/gi, '<div class="mceItemObjectEmbed" $1>');
- content = content.replace(/<\/(object|embed)([^>]*)>/gi, '</div>');
- content = content.replace(/<param([^>]*)>/gi, '<div $1 class="mceItemParam"></div>');
- content = content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>', 'gi'), 'class="mceItemParam"></div>');
- break;
-
- case "insert_to_editor_dom":
- d = inst.getDoc();
- nl = content.getElementsByTagName("img");
- for (i=0; i<nl.length; i++) {
- if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)) {
- nl[i].width = nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g, '$1');
- nl[i].height = nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g, '$1');
- //nl[i].align = nl[i].title.replace(/.*align:([a-z]+).*/gi, '$1');
- }
- }
-
- nl = tinyMCE.selectElements(content, 'DIV', function (n) {return tinyMCE.hasCSSClass(n, 'mceItemObject');});
- for (i=0; i<nl.length; i++) {
- ci = tinyMCE.getAttrib(nl[i], "classid").toLowerCase().replace(/\s+/g, '');
-
- switch (ci) {
- case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash', d, nl[i]), nl[i]);
- break;
-
- case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave', d, nl[i]), nl[i]);
- break;
-
- case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':
- case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':
- case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia', d, nl[i]), nl[i]);
- break;
-
- case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime', d, nl[i]), nl[i]);
- break;
-
- case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':
- nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia', d, nl[i]), nl[i]);
- break;
- }
- }
-
- // Handle embed (if any)
- nl = tinyMCE.selectNodes(content, function (n) {return n.className == 'mceItemObjectEmbed';});
- for (i=0; i<nl.length; i++) {
- switch (tinyMCE.getAttrib(nl[i], 'type')) {
- case 'application/x-shockwave-flash':
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemFlash');
- break;
-
- case 'application/x-director':
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemShockWave');
- break;
-
- case 'application/x-mplayer2':
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemWindowsMedia');
- break;
-
- case 'video/quicktime':
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemQuickTime');
- break;
-
- case 'audio/x-pn-realaudio-plugin':
- TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemRealMedia');
- break;
- }
- }
- break;
-
- case "get_from_editor":
- var startPos = -1, endPos, attribs, chunkBefore, chunkAfter, embedHTML, at, pl, cb, mt, ex;
-
- while ((startPos = content.indexOf('<img', startPos+1)) != -1) {
- endPos = content.indexOf('/>', startPos);
- attribs = TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos + 4, endPos));
-
- // Is not flash, skip it
- if (!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))
- continue;
-
- endPos += 2;
-
- // Parse attributes
- at = attribs['title'];
- if (at) {
- at = at.replace(/&(#39|apos);/g, "'");
- at = at.replace(/&#quot;/g, '"');
-
- try {
- pl = eval('x={' + at + '};');
- } catch (ex) {
- pl = {};
- }
- }
-
- // Use object/embed
- if (!tinyMCE.getParam('media_use_script', false)) {
- switch (attribs['class']) {
- case 'mceItemFlash':
- ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000';
- cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
- mt = 'application/x-shockwave-flash';
- break;
-
- case 'mceItemShockWave':
- ci = '166B1BCA-3F9C-11CF-8075-444553540000';
- cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
- mt = 'application/x-director';
- break;
-
- case 'mceItemWindowsMedia':
- ci = tinyMCE.getParam('media_wmp6_compatible') ? '05589FA1-C356-11CE-BF01-00AA0055595A' : '6BF52A52-394A-11D3-B153-00C04F79FAA6';
- cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
- mt = 'application/x-mplayer2';
- break;
-
- case 'mceItemQuickTime':
- ci = '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
- cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
- mt = 'video/quicktime';
- break;
-
- case 'mceItemRealMedia':
- ci = 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
- cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
- mt = 'audio/x-pn-realaudio-plugin';
- break;
- }
-
- // Convert the URL
- pl.src = tinyMCE.convertURL(pl.src, null, true);
-
- embedHTML = TinyMCE_MediaPlugin._getEmbed(ci, cb, mt, pl, attribs);
- } else {
- // Use script version
- switch (attribs['class']) {
- case 'mceItemFlash':
- s = 'writeFlash';
- break;
-
- case 'mceItemShockWave':
- s = 'writeShockWave';
- break;
-
- case 'mceItemWindowsMedia':
- s = 'writeWindowsMedia';
- break;
-
- case 'mceItemQuickTime':
- s = 'writeQuickTime';
- break;
-
- case 'mceItemRealMedia':
- s = 'writeRealMedia';
- break;
- }
-
- if (attribs.width)
- at = at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g, "width:'" + attribs.width + "'");
-
- if (attribs.height)
- at = at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g, "height:'" + attribs.height + "'");
-
- // Force absolute URL
- pl.src = tinyMCE.convertURL(pl.src, null, true);
- at = at.replace(new RegExp("src:'[^']*'", "g"), "src:'" + pl.src + "'");
-
- embedHTML = '<script type="text/javascript">' + s + '({' + at + '});</script>';
- }
-
- // Insert embed/object chunk
- chunkBefore = content.substring(0, startPos);
- chunkAfter = content.substring(endPos);
- content = chunkBefore + embedHTML + chunkAfter;
- }
- break;
- }
-
- return content;
- },
-
- handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
- if (node == null)
- return;
-
- do {
- if (node.nodeName == "IMG" && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node, 'class'))) {
- tinyMCE.switchClass(editor_id + '_media', 'mceButtonSelected');
- return true;
- }
- } while ((node = node.parentNode));
-
- tinyMCE.switchClass(editor_id + '_media', 'mceButtonNormal');
-
- return true;
- },
-
- _createImgFromEmbed : function(n, d, cl) {
- var ne, at, i, ti = '', an;
-
- ne = d.createElement('img');
- ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
- ne.width = tinyMCE.getAttrib(n, 'width');
- ne.height = tinyMCE.getAttrib(n, 'height');
- ne.className = cl;
-
- at = n.attributes;
- for (i=0; i<at.length; i++) {
- if (at[i].specified && at[i].nodeValue) {
- an = at[i].nodeName.toLowerCase();
-
- if (an == 'src')
- continue;
-
- if (an == 'mce_src')
- an = 'src';
-
- if (an.indexOf('mce_') == -1 && !new RegExp('^(class|type)$').test(an))
- ti += an.toLowerCase() + ':\'' + at[i].nodeValue + "',";
- }
- }
-
- ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti;
- ne.title = ti;
-
- n.parentNode.replaceChild(ne, n);
- },
-
- _createImg : function(cl, d, n) {
- var i, nl, ti = "", an, av, al = new Array();
-
- ne = d.createElement('img');
- ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
- ne.width = tinyMCE.getAttrib(n, 'width');
- ne.height = tinyMCE.getAttrib(n, 'height');
- ne.className = cl;
-
- al.id = tinyMCE.getAttrib(n, 'id');
- al.name = tinyMCE.getAttrib(n, 'name');
- al.width = tinyMCE.getAttrib(n, 'width');
- al.height = tinyMCE.getAttrib(n, 'height');
- al.bgcolor = tinyMCE.getAttrib(n, 'bgcolor');
- al.align = tinyMCE.getAttrib(n, 'align');
- al.class_name = tinyMCE.getAttrib(n, 'mce_class');
-
- nl = n.getElementsByTagName('div');
- for (i=0; i<nl.length; i++) {
- av = tinyMCE.getAttrib(nl[i], 'value');
- av = av.replace(new RegExp('\\\\', 'g'), '\\\\');
- av = av.replace(new RegExp('"', 'g'), '\\"');
- av = av.replace(new RegExp("'", 'g'), "\\'");
- an = tinyMCE.getAttrib(nl[i], 'name');
- al[an] = av;
- }
-
- if (al.movie) {
- al.src = al.movie;
- al.movie = null;
- }
-
- for (an in al) {
- if (al[an] != null && typeof(al[an]) != "function" && al[an] != '')
- ti += an.toLowerCase() + ':\'' + al[an] + "',";
- }
-
- ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti;
- ne.title = ti;
-
- return ne;
- },
-
- _getEmbed : function(cls, cb, mt, p, at) {
- var h = '', n;
-
- p.width = at.width ? at.width : p.width;
- p.height = at.height ? at.height : p.height;
-
- h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
- h += typeof(p.id) != "undefined" ? ' id="' + p.id + '"' : '';
- h += typeof(p.name) != "undefined" ? ' name="' + p.name + '"' : '';
- h += typeof(p.width) != "undefined" ? ' width="' + p.width + '"' : '';
- h += typeof(p.height) != "undefined" ? ' height="' + p.height + '"' : '';
- h += typeof(p.align) != "undefined" ? ' align="' + p.align + '"' : '';
- h += '>';
-
- for (n in p) {
- if (typeof(p[n]) != "undefined" && typeof(p[n]) != "function") {
- h += '<param name="' + n + '" value="' + p[n] + '" />';
-
- // Add extra url parameter if it's an absolute URL on WMP
- if (n == 'src' && p[n].indexOf('://') != -1 && mt == 'application/x-mplayer2')
- h += '<param name="url" value="' + p[n] + '" />';
- }
- }
-
- h += '<embed type="' + mt + '"';
-
- for (n in p) {
- if (typeof(p[n]) == "function")
- continue;
-
- // Skip url parameter for embed tag on WMP
- if (!(n == 'url' && mt == 'application/x-mplayer2'))
- h += ' ' + n + '="' + p[n] + '"';
- }
-
- h += '></embed></object>';
-
- return h;
- },
-
- _parseAttributes : function(attribute_string) {
- var attributeName = "", endChr = '"';
- var attributeValue = "";
- var withInName;
- var withInValue;
- var attributes = new Array();
- var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g');
-
- if (attribute_string == null || attribute_string.length < 2)
- return null;
-
- withInName = withInValue = false;
-
- for (var i=0; i<attribute_string.length; i++) {
- var chr = attribute_string.charAt(i);
-
- if ((chr == '"' || chr == "'") && !withInValue) {
- withInValue = true;
- endChr = chr;
- } else if (chr == endChr && withInValue) {
- withInValue = false;
-
- var pos = attributeName.lastIndexOf(' ');
- if (pos != -1)
- attributeName = attributeName.substring(pos+1);
-
- attributes[attributeName.toLowerCase()] = attributeValue.substring(1);
-
- attributeName = "";
- attributeValue = "";
- } else if (!whiteSpaceRegExp.test(chr) && !withInName && !withInValue)
- withInName = true;
-
- if (chr == '=' && withInName)
- withInName = false;
-
- if (withInName)
- attributeName += chr;
-
- if (withInValue)
- attributeValue += chr;
- }
-
- return attributes;
- }
-};
-
-tinyMCE.addPlugin("media", TinyMCE_MediaPlugin);
+/**\r
+ * $Id: editor_plugin_src.js 763 2008-04-03 13:25:45Z spocke $\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+ var each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.plugins.MediaPlugin', {\r
+ init : function(ed, url) {\r
+ var t = this;\r
+ \r
+ t.editor = ed;\r
+ t.url = url;\r
+\r
+ function isMediaElm(n) {\r
+ return /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);\r
+ };\r
+\r
+ // Register commands\r
+ ed.addCommand('mceMedia', function() {\r
+ ed.windowManager.open({\r
+ file : url + '/media.htm',\r
+ width : 430 + parseInt(ed.getLang('media.delta_width', 0)),\r
+ height : 470 + parseInt(ed.getLang('media.delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ });\r
+\r
+ // Register buttons\r
+ ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});\r
+\r
+ ed.onNodeChange.add(function(ed, cm, n) {\r
+ cm.setActive('media', n.nodeName == 'IMG' && isMediaElm(n));\r
+ });\r
+\r
+ ed.onInit.add(function() {\r
+ var lo = {\r
+ mceItemFlash : 'flash',\r
+ mceItemShockWave : 'shockwave',\r
+ mceItemWindowsMedia : 'windowsmedia',\r
+ mceItemQuickTime : 'quicktime',\r
+ mceItemRealMedia : 'realmedia'\r
+ };\r
+\r
+ if (ed.settings.content_css !== false)\r
+ ed.dom.loadCSS(url + "/css/content.css");\r
+\r
+ if (ed.theme.onResolveName) {\r
+ ed.theme.onResolveName.add(function(th, o) {\r
+ if (o.name == 'img') {\r
+ each(lo, function(v, k) {\r
+ if (ed.dom.hasClass(o.node, k)) {\r
+ o.name = v;\r
+ o.title = ed.dom.getAttrib(o.node, 'title');\r
+ return false;\r
+ }\r
+ });\r
+ }\r
+ });\r
+ }\r
+\r
+ if (ed && ed.plugins.contextmenu) {\r
+ ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {\r
+ if (e.nodeName == 'IMG' && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)) {\r
+ m.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});\r
+ }\r
+ });\r
+ }\r
+ });\r
+\r
+ ed.onBeforeSetContent.add(function(ed, o) {\r
+ var h = o.content;\r
+\r
+ h = h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) {\r
+ var o = t._parse(c);\r
+\r
+ return '<img class="mceItem' + b + '" title="' + ed.dom.encode(c) + '" src="' + url + '/img/trans.gif" width="' + o.width + '" height="' + o.height + '" />'\r
+ });\r
+\r
+ h = h.replace(/<object([^>]*)>/gi, '<span class="mceItemObject" $1>');\r
+ h = h.replace(/<embed([^>]*)>/gi, '<span class="mceItemEmbed" $1>');\r
+ h = h.replace(/<\/(object|embed)([^>]*)>/gi, '</span>');\r
+ h = h.replace(/<param([^>]*)>/gi, function(a, b) {return '<span ' + b.replace(/value=/gi, '_value=') + ' class="mceItemParam"></span>'});\r
+ h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam"></span>');\r
+\r
+ o.content = h;\r
+ });\r
+\r
+ ed.onSetContent.add(function() {\r
+ t._spansToImgs(ed.getBody());\r
+ });\r
+\r
+ ed.onPreProcess.add(function(ed, o) {\r
+ var dom = ed.dom;\r
+\r
+ if (o.set) {\r
+ t._spansToImgs(o.node);\r
+\r
+ each(dom.select('IMG', o.node), function(n) {\r
+ var p;\r
+\r
+ if (isMediaElm(n)) {\r
+ p = t._parse(n.title);\r
+ dom.setAttrib(n, 'width', dom.getAttrib(n, 'width', p.width || 100));\r
+ dom.setAttrib(n, 'height', dom.getAttrib(n, 'height', p.height || 100));\r
+ }\r
+ });\r
+ }\r
+\r
+ if (o.get) {\r
+ each(dom.select('IMG', o.node), function(n) {\r
+ var ci, cb, mt;\r
+\r
+ if (ed.getParam('media_use_script')) {\r
+ if (isMediaElm(n))\r
+ n.className = n.className.replace(/mceItem/g, 'mceTemp');\r
+\r
+ return;\r
+ }\r
+\r
+ switch (n.className) {\r
+ case 'mceItemFlash':\r
+ ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000';\r
+ cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
+ mt = 'application/x-shockwave-flash';\r
+ break;\r
+\r
+ case 'mceItemShockWave':\r
+ ci = '166b1bca-3f9c-11cf-8075-444553540000';\r
+ cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';\r
+ mt = 'application/x-director';\r
+ break;\r
+\r
+ case 'mceItemWindowsMedia':\r
+ ci = ed.getParam('media_wmp6_compatible') ? '05589fa1-c356-11ce-bf01-00aa0055595a' : '6bf52a52-394a-11d3-b153-00c04f79faa6';\r
+ cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
+ mt = 'application/x-mplayer2';\r
+ break;\r
+\r
+ case 'mceItemQuickTime':\r
+ ci = '02bf25d5-8c17-4b23-bc80-d3488abddc6b';\r
+ cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';\r
+ mt = 'video/quicktime';\r
+ break;\r
+\r
+ case 'mceItemRealMedia':\r
+ ci = 'cfcdaa03-8be4-11cf-b84b-0020afbbccfa';\r
+ cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
+ mt = 'audio/x-pn-realaudio-plugin';\r
+ break;\r
+ }\r
+\r
+ if (ci) {\r
+ dom.replace(t._buildObj({\r
+ classid : ci,\r
+ codebase : cb,\r
+ type : mt\r
+ }, n), n);\r
+ }\r
+ });\r
+ }\r
+ });\r
+\r
+ ed.onPostProcess.add(function(ed, o) {\r
+ o.content = o.content.replace(/_value=/g, 'value=');\r
+ });\r
+\r
+ if (ed.getParam('media_use_script')) {\r
+ function getAttr(s, n) {\r
+ n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);\r
+\r
+ return n ? ed.dom.decode(n[1]) : '';\r
+ };\r
+\r
+ ed.onPostProcess.add(function(ed, o) {\r
+ o.content = o.content.replace(/<img[^>]+>/g, function(im) {\r
+ var cl = getAttr(im, 'class');\r
+\r
+ if (/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)) {\r
+ at = t._parse(getAttr(im, 'title'));\r
+ at.width = getAttr(im, 'width');\r
+ at.height = getAttr(im, 'height');\r
+ im = '<script type="text/javascript">write' + cl.substring(7) + '({' + t._serialize(at) + '});</script>';\r
+ }\r
+\r
+ return im;\r
+ });\r
+ });\r
+ }\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Media',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ },\r
+\r
+ // Private methods\r
+\r
+ _buildObj : function(o, n) {\r
+ var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title);\r
+\r
+ p.width = o.width = dom.getAttrib(n, 'width') || 100;\r
+ p.height = o.height = dom.getAttrib(n, 'height') || 100;\r
+\r
+ ob = dom.create('span', {\r
+ mce_name : 'object',\r
+ classid : "clsid:" + o.classid,\r
+ codebase : o.codebase,\r
+ width : o.width,\r
+ height : o.height\r
+ });\r
+\r
+ if (p.src)\r
+ p.src = ed.convertURL(p.src, 'src', n);\r
+\r
+ each (p, function(v, k) {\r
+ if (!/^(width|height|codebase|classid)$/.test(k)) {\r
+ // Use url instead of src in IE for Windows media\r
+ if (o.type == 'application/x-mplayer2' && k == 'src')\r
+ k = 'url';\r
+\r
+ dom.add(ob, 'span', {mce_name : 'param', name : k, '_value' : v});\r
+ }\r
+ });\r
+\r
+ dom.add(ob, 'span', tinymce.extend({mce_name : 'embed', type : o.type}, p));\r
+\r
+ return ob;\r
+ },\r
+\r
+ _spansToImgs : function(p) {\r
+ var t = this, dom = t.editor.dom, im, ci;\r
+\r
+ each(dom.select('span', p), function(n) {\r
+ // Convert object into image\r
+ if (dom.getAttrib(n, 'class') == 'mceItemObject') {\r
+ ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, '');\r
+\r
+ switch (ci) {\r
+ case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':\r
+ dom.replace(t._createImg('mceItemFlash', n), n);\r
+ break;\r
+\r
+ case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':\r
+ dom.replace(t._createImg('mceItemShockWave', n), n);\r
+ break;\r
+\r
+ case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':\r
+ case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':\r
+ case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':\r
+ dom.replace(t._createImg('mceItemWindowsMedia', n), n);\r
+ break;\r
+\r
+ case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':\r
+ dom.replace(t._createImg('mceItemQuickTime', n), n);\r
+ break;\r
+\r
+ case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':\r
+ dom.replace(t._createImg('mceItemRealMedia', n), n);\r
+ break;\r
+\r
+ default:\r
+ dom.replace(t._createImg('mceItemFlash', n), n);\r
+ }\r
+ \r
+ return;\r
+ }\r
+\r
+ // Convert embed into image\r
+ if (dom.getAttrib(n, 'class') == 'mceItemEmbed') {\r
+ switch (dom.getAttrib(n, 'type')) {\r
+ case 'application/x-shockwave-flash':\r
+ dom.replace(t._createImg('mceItemFlash', n), n);\r
+ break;\r
+\r
+ case 'application/x-director':\r
+ dom.replace(t._createImg('mceItemShockWave', n), n);\r
+ break;\r
+\r
+ case 'application/x-mplayer2':\r
+ dom.replace(t._createImg('mceItemWindowsMedia', n), n);\r
+ break;\r
+\r
+ case 'video/quicktime':\r
+ dom.replace(t._createImg('mceItemQuickTime', n), n);\r
+ break;\r
+\r
+ case 'audio/x-pn-realaudio-plugin':\r
+ dom.replace(t._createImg('mceItemRealMedia', n), n);\r
+ break;\r
+\r
+ default:\r
+ dom.replace(t._createImg('mceItemFlash', n), n);\r
+ }\r
+ } \r
+ });\r
+ },\r
+\r
+ _createImg : function(cl, n) {\r
+ var im, dom = this.editor.dom, pa = {}, ti = '';\r
+\r
+ // Create image\r
+ im = dom.create('img', {\r
+ src : this.url + '/img/trans.gif',\r
+ width : dom.getAttrib(n, 'width') || 100,\r
+ height : dom.getAttrib(n, 'height') || 100,\r
+ 'class' : cl\r
+ });\r
+\r
+ // Setup base parameters\r
+ each(['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode'], function(na) {\r
+ var v = dom.getAttrib(n, na);\r
+\r
+ if (v)\r
+ pa[na] = v;\r
+ });\r
+\r
+ // Add optional parameters\r
+ each(dom.select('span', n), function(n) {\r
+ if (dom.hasClass(n, 'mceItemParam'))\r
+ pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_value');\r
+ });\r
+\r
+ // Use src not movie\r
+ if (pa.movie) {\r
+ pa.src = pa.movie;\r
+ delete pa.movie;\r
+ }\r
+\r
+ delete pa.width;\r
+ delete pa.height;\r
+\r
+ im.title = this._serialize(pa);\r
+\r
+ return im;\r
+ },\r
+\r
+ _parse : function(s) {\r
+ return tinymce.util.JSON.parse('{' + s + '}');\r
+ },\r
+\r
+ _serialize : function(o) {\r
+ return tinymce.util.JSON.serialize(o).replace(/[{}]/g, '');\r
+ }\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);\r
+})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.\r
+ */\r
+\r
+function writeFlash(p) {\r
+ writeEmbed(\r
+ 'D27CDB6E-AE6D-11cf-96B8-444553540000',\r
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
+ 'application/x-shockwave-flash',\r
+ p\r
+ );\r
+}\r
+\r
+function writeShockWave(p) {\r
+ writeEmbed(\r
+ '166B1BCA-3F9C-11CF-8075-444553540000',\r
+ 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',\r
+ 'application/x-director',\r
+ p\r
+ );\r
+}\r
+\r
+function writeQuickTime(p) {\r
+ writeEmbed(\r
+ '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',\r
+ 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',\r
+ 'video/quicktime',\r
+ p\r
+ );\r
+}\r
+\r
+function writeRealMedia(p) {\r
+ writeEmbed(\r
+ 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',\r
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
+ 'audio/x-pn-realaudio-plugin',\r
+ p\r
+ );\r
+}\r
+\r
+function writeWindowsMedia(p) {\r
+ p.url = p.src;\r
+ writeEmbed(\r
+ '6BF52A52-394A-11D3-B153-00C04F79FAA6',\r
+ 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',\r
+ 'application/x-mplayer2',\r
+ p\r
+ );\r
+}\r
+\r
+function writeEmbed(cls, cb, mt, p) {\r
+ var h = '', n;\r
+\r
+ h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';\r
+ h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';\r
+ h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';\r
+ h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';\r
+ h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';\r
+ h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';\r
+ h += '>';\r
+\r
+ for (n in p)\r
+ h += '<param name="' + n + '" value="' + p[n] + '">';\r
+\r
+ h += '<embed type="' + mt + '"';\r
+\r
+ for (n in p)\r
+ h += n + '="' + p[n] + '" ';\r
+\r
+ h += '></embed></object>';\r
+\r
+ document.write(h);\r
+}\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var oldWidth, oldHeight, ed, url;\r
+\r
+if (url = tinyMCEPopup.getParam("media_external_list_url"))\r
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
+\r
+function init() {\r
+ var pl = "", f, val;\r
+ var type = "flash", fe, i;\r
+\r
+ ed = tinyMCEPopup.editor;\r
+\r
+ tinyMCEPopup.resizeToInnerSize();\r
+ f = document.forms[0]\r
+\r
+ fe = ed.selection.getNode();\r
+ if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {\r
+ pl = fe.title;\r
+\r
+ switch (ed.dom.getAttrib(fe, 'class')) {\r
+ case 'mceItemFlash':\r
+ type = 'flash';\r
+ break;\r
+\r
+ case 'mceItemFlashVideo':\r
+ type = 'flv';\r
+ break;\r
+\r
+ case 'mceItemShockWave':\r
+ type = 'shockwave';\r
+ break;\r
+\r
+ case 'mceItemWindowsMedia':\r
+ type = 'wmp';\r
+ break;\r
+\r
+ case 'mceItemQuickTime':\r
+ type = 'qt';\r
+ break;\r
+\r
+ case 'mceItemRealMedia':\r
+ type = 'rmp';\r
+ break;\r
+ }\r
+\r
+ document.forms[0].insert.value = ed.getLang('update', 'Insert', true); \r
+ }\r
+\r
+ document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');\r
+ document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media');\r
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
+\r
+ var html = getMediaListHTML('medialist','src','media','media');\r
+ if (html == "")\r
+ document.getElementById("linklistrow").style.display = 'none';\r
+ else\r
+ document.getElementById("linklistcontainer").innerHTML = html;\r
+\r
+ // Resize some elements\r
+ if (isVisible('filebrowser'))\r
+ document.getElementById('src').style.width = '230px';\r
+\r
+ // Setup form\r
+ if (pl != "") {\r
+ pl = tinyMCEPopup.editor.plugins.media._parse(pl);\r
+\r
+ switch (type) {\r
+ case "flash":\r
+ setBool(pl, 'flash', 'play');\r
+ setBool(pl, 'flash', 'loop');\r
+ setBool(pl, 'flash', 'menu');\r
+ setBool(pl, 'flash', 'swliveconnect');\r
+ setStr(pl, 'flash', 'quality');\r
+ setStr(pl, 'flash', 'scale');\r
+ setStr(pl, 'flash', 'salign');\r
+ setStr(pl, 'flash', 'wmode');\r
+ setStr(pl, 'flash', 'base');\r
+ setStr(pl, 'flash', 'flashvars');\r
+ break;\r
+\r
+ case "qt":\r
+ setBool(pl, 'qt', 'loop');\r
+ setBool(pl, 'qt', 'autoplay');\r
+ setBool(pl, 'qt', 'cache');\r
+ setBool(pl, 'qt', 'controller');\r
+ setBool(pl, 'qt', 'correction');\r
+ setBool(pl, 'qt', 'enablejavascript');\r
+ setBool(pl, 'qt', 'kioskmode');\r
+ setBool(pl, 'qt', 'autohref');\r
+ setBool(pl, 'qt', 'playeveryframe');\r
+ setBool(pl, 'qt', 'tarsetcache');\r
+ setStr(pl, 'qt', 'scale');\r
+ setStr(pl, 'qt', 'starttime');\r
+ setStr(pl, 'qt', 'endtime');\r
+ setStr(pl, 'qt', 'tarset');\r
+ setStr(pl, 'qt', 'qtsrcchokespeed');\r
+ setStr(pl, 'qt', 'volume');\r
+ setStr(pl, 'qt', 'qtsrc');\r
+ break;\r
+\r
+ case "shockwave":\r
+ setBool(pl, 'shockwave', 'sound');\r
+ setBool(pl, 'shockwave', 'progress');\r
+ setBool(pl, 'shockwave', 'autostart');\r
+ setBool(pl, 'shockwave', 'swliveconnect');\r
+ setStr(pl, 'shockwave', 'swvolume');\r
+ setStr(pl, 'shockwave', 'swstretchstyle');\r
+ setStr(pl, 'shockwave', 'swstretchhalign');\r
+ setStr(pl, 'shockwave', 'swstretchvalign');\r
+ break;\r
+\r
+ case "wmp":\r
+ setBool(pl, 'wmp', 'autostart');\r
+ setBool(pl, 'wmp', 'enabled');\r
+ setBool(pl, 'wmp', 'enablecontextmenu');\r
+ setBool(pl, 'wmp', 'fullscreen');\r
+ setBool(pl, 'wmp', 'invokeurls');\r
+ setBool(pl, 'wmp', 'mute');\r
+ setBool(pl, 'wmp', 'stretchtofit');\r
+ setBool(pl, 'wmp', 'windowlessvideo');\r
+ setStr(pl, 'wmp', 'balance');\r
+ setStr(pl, 'wmp', 'baseurl');\r
+ setStr(pl, 'wmp', 'captioningid');\r
+ setStr(pl, 'wmp', 'currentmarker');\r
+ setStr(pl, 'wmp', 'currentposition');\r
+ setStr(pl, 'wmp', 'defaultframe');\r
+ setStr(pl, 'wmp', 'playcount');\r
+ setStr(pl, 'wmp', 'rate');\r
+ setStr(pl, 'wmp', 'uimode');\r
+ setStr(pl, 'wmp', 'volume');\r
+ break;\r
+\r
+ case "rmp":\r
+ setBool(pl, 'rmp', 'autostart');\r
+ setBool(pl, 'rmp', 'loop');\r
+ setBool(pl, 'rmp', 'autogotourl');\r
+ setBool(pl, 'rmp', 'center');\r
+ setBool(pl, 'rmp', 'imagestatus');\r
+ setBool(pl, 'rmp', 'maintainaspect');\r
+ setBool(pl, 'rmp', 'nojava');\r
+ setBool(pl, 'rmp', 'prefetch');\r
+ setBool(pl, 'rmp', 'shuffle');\r
+ setStr(pl, 'rmp', 'console');\r
+ setStr(pl, 'rmp', 'controls');\r
+ setStr(pl, 'rmp', 'numloop');\r
+ setStr(pl, 'rmp', 'scriptcallbacks');\r
+ break;\r
+ }\r
+\r
+ setStr(pl, null, 'src');\r
+ setStr(pl, null, 'id');\r
+ setStr(pl, null, 'name');\r
+ setStr(pl, null, 'vspace');\r
+ setStr(pl, null, 'hspace');\r
+ setStr(pl, null, 'bgcolor');\r
+ setStr(pl, null, 'align');\r
+ setStr(pl, null, 'width');\r
+ setStr(pl, null, 'height');\r
+\r
+ if ((val = ed.dom.getAttrib(fe, "width")) != "")\r
+ pl.width = f.width.value = val;\r
+\r
+ if ((val = ed.dom.getAttrib(fe, "height")) != "")\r
+ pl.height = f.height.value = val;\r
+\r
+ oldWidth = pl.width ? parseInt(pl.width) : 0;\r
+ oldHeight = pl.height ? parseInt(pl.height) : 0;\r
+ } else\r
+ oldWidth = oldHeight = 0;\r
+\r
+ selectByValue(f, 'media_type', type);\r
+ changedType(type);\r
+ updateColor('bgcolor_pick', 'bgcolor');\r
+\r
+ TinyMCE_EditableSelects.init();\r
+ generatePreview();\r
+}\r
+\r
+function insertMedia() {\r
+ var fe, f = document.forms[0], h;\r
+\r
+ tinyMCEPopup.restoreSelection();\r
+\r
+ if (!AutoValidator.validate(f)) {\r
+ alert(ed.getLang('invalid_data'));\r
+ return false;\r
+ }\r
+\r
+ f.width.value = f.width.value == "" ? 100 : f.width.value;\r
+ f.height.value = f.height.value == "" ? 100 : f.height.value;\r
+\r
+ fe = ed.selection.getNode();\r
+ if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {\r
+ switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
+ case "flash":\r
+ fe.className = "mceItemFlash";\r
+ break;\r
+\r
+ case "flv":\r
+ fe.className = "mceItemFlashVideo";\r
+ break;\r
+\r
+ case "shockwave":\r
+ fe.className = "mceItemShockWave";\r
+ break;\r
+\r
+ case "qt":\r
+ fe.className = "mceItemQuickTime";\r
+ break;\r
+\r
+ case "wmp":\r
+ fe.className = "mceItemWindowsMedia";\r
+ break;\r
+\r
+ case "rmp":\r
+ fe.className = "mceItemRealMedia";\r
+ break;\r
+ }\r
+\r
+ if (fe.width != f.width.value || fe.height != f.height.height)\r
+ ed.execCommand('mceRepaint');\r
+\r
+ fe.title = serializeParameters();\r
+ fe.width = f.width.value;\r
+ fe.height = f.height.value;\r
+ fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');\r
+ fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : '');\r
+ fe.align = f.align.options[f.align.selectedIndex].value;\r
+ } else {\r
+ h = '<img src="' + tinyMCEPopup.getWindowArg("plugin_url") + '/img/trans.gif"' ;\r
+\r
+ switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
+ case "flash":\r
+ h += ' class="mceItemFlash"';\r
+ break;\r
+\r
+ case "flv":\r
+ h += ' class="mceItemFlashVideo"';\r
+ break;\r
+\r
+ case "shockwave":\r
+ h += ' class="mceItemShockWave"';\r
+ break;\r
+\r
+ case "qt":\r
+ h += ' class="mceItemQuickTime"';\r
+ break;\r
+\r
+ case "wmp":\r
+ h += ' class="mceItemWindowsMedia"';\r
+ break;\r
+\r
+ case "rmp":\r
+ h += ' class="mceItemRealMedia"';\r
+ break;\r
+ }\r
+\r
+ h += ' title="' + serializeParameters() + '"';\r
+ h += ' width="' + f.width.value + '"';\r
+ h += ' height="' + f.height.value + '"';\r
+ h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';\r
+\r
+ h += ' />';\r
+\r
+ ed.execCommand('mceInsertContent', false, h);\r
+ }\r
+\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function updatePreview() {\r
+ var f = document.forms[0], type;\r
+\r
+ f.width.value = f.width.value || '320';\r
+ f.height.value = f.height.value || '240';\r
+\r
+ type = getType(f.src.value);\r
+ selectByValue(f, 'media_type', type);\r
+ changedType(type);\r
+ generatePreview();\r
+}\r
+\r
+function getMediaListHTML() {\r
+ if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {\r
+ var html = "";\r
+\r
+ html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;updatePreview();">';\r
+ html += '<option value="">---</option>';\r
+\r
+ for (var i=0; i<tinyMCEMediaList.length; i++)\r
+ html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';\r
+\r
+ html += '</select>';\r
+\r
+ return html;\r
+ }\r
+\r
+ return "";\r
+}\r
+\r
+function getType(v) {\r
+ var fo, i, c, el, x, f = document.forms[0];\r
+\r
+ fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');\r
+\r
+ // YouTube\r
+ if (v.match(/watch\?v=(.+)(.*)/)) {\r
+ f.width.value = '425';\r
+ f.height.value = '350';\r
+ f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1];\r
+ return 'flash';\r
+ }\r
+\r
+ // Google video\r
+ if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {\r
+ f.width.value = '425';\r
+ f.height.value = '326';\r
+ f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';\r
+ return 'flash';\r
+ }\r
+\r
+ for (i=0; i<fo.length; i++) {\r
+ c = fo[i].split('=');\r
+\r
+ el = c[1].split(',');\r
+ for (x=0; x<el.length; x++)\r
+ if (v.indexOf('.' + el[x]) != -1)\r
+ return c[0];\r
+ }\r
+\r
+ return null;\r
+}\r
+\r
+function switchType(v) {\r
+ var t = getType(v), d = document, f = d.forms[0];\r
+\r
+ if (!t)\r
+ return;\r
+\r
+ selectByValue(d.forms[0], 'media_type', t);\r
+ changedType(t);\r
+\r
+ // Update qtsrc also\r
+ if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {\r
+ alert(ed.getLang("media_qt_stream_warn"));\r
+\r
+ if (f.qt_qtsrc.value == '')\r
+ f.qt_qtsrc.value = f.src.value;\r
+ }\r
+}\r
+\r
+function changedType(t) {\r
+ var d = document;\r
+\r
+ d.getElementById('flash_options').style.display = 'none';\r
+ d.getElementById('flv_options').style.display = 'none';\r
+ d.getElementById('qt_options').style.display = 'none';\r
+ d.getElementById('shockwave_options').style.display = 'none';\r
+ d.getElementById('wmp_options').style.display = 'none';\r
+ d.getElementById('rmp_options').style.display = 'none';\r
+ d.getElementById(t + '_options').style.display = 'block';\r
+}\r
+\r
+function serializeParameters() {\r
+ var d = document, f = d.forms[0], s = '';\r
+\r
+ switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
+ case "flash":\r
+ s += getBool('flash', 'play', true);\r
+ s += getBool('flash', 'loop', true);\r
+ s += getBool('flash', 'menu', true);\r
+ s += getBool('flash', 'swliveconnect', false);\r
+ s += getStr('flash', 'quality');\r
+ s += getStr('flash', 'scale');\r
+ s += getStr('flash', 'salign');\r
+ s += getStr('flash', 'wmode');\r
+ s += getStr('flash', 'base');\r
+ s += getStr('flash', 'flashvars');\r
+ break;\r
+\r
+ case "qt":\r
+ s += getBool('qt', 'loop', false);\r
+ s += getBool('qt', 'autoplay', true);\r
+ s += getBool('qt', 'cache', false);\r
+ s += getBool('qt', 'controller', true);\r
+ s += getBool('qt', 'correction', false, 'none', 'full');\r
+ s += getBool('qt', 'enablejavascript', false);\r
+ s += getBool('qt', 'kioskmode', false);\r
+ s += getBool('qt', 'autohref', false);\r
+ s += getBool('qt', 'playeveryframe', false);\r
+ s += getBool('qt', 'targetcache', false);\r
+ s += getStr('qt', 'scale');\r
+ s += getStr('qt', 'starttime');\r
+ s += getStr('qt', 'endtime');\r
+ s += getStr('qt', 'target');\r
+ s += getStr('qt', 'qtsrcchokespeed');\r
+ s += getStr('qt', 'volume');\r
+ s += getStr('qt', 'qtsrc');\r
+ break;\r
+\r
+ case "shockwave":\r
+ s += getBool('shockwave', 'sound');\r
+ s += getBool('shockwave', 'progress');\r
+ s += getBool('shockwave', 'autostart');\r
+ s += getBool('shockwave', 'swliveconnect');\r
+ s += getStr('shockwave', 'swvolume');\r
+ s += getStr('shockwave', 'swstretchstyle');\r
+ s += getStr('shockwave', 'swstretchhalign');\r
+ s += getStr('shockwave', 'swstretchvalign');\r
+ break;\r
+\r
+ case "wmp":\r
+ s += getBool('wmp', 'autostart', true);\r
+ s += getBool('wmp', 'enabled', false);\r
+ s += getBool('wmp', 'enablecontextmenu', true);\r
+ s += getBool('wmp', 'fullscreen', false);\r
+ s += getBool('wmp', 'invokeurls', true);\r
+ s += getBool('wmp', 'mute', false);\r
+ s += getBool('wmp', 'stretchtofit', false);\r
+ s += getBool('wmp', 'windowlessvideo', false);\r
+ s += getStr('wmp', 'balance');\r
+ s += getStr('wmp', 'baseurl');\r
+ s += getStr('wmp', 'captioningid');\r
+ s += getStr('wmp', 'currentmarker');\r
+ s += getStr('wmp', 'currentposition');\r
+ s += getStr('wmp', 'defaultframe');\r
+ s += getStr('wmp', 'playcount');\r
+ s += getStr('wmp', 'rate');\r
+ s += getStr('wmp', 'uimode');\r
+ s += getStr('wmp', 'volume');\r
+ break;\r
+\r
+ case "rmp":\r
+ s += getBool('rmp', 'autostart', false);\r
+ s += getBool('rmp', 'loop', false);\r
+ s += getBool('rmp', 'autogotourl', true);\r
+ s += getBool('rmp', 'center', false);\r
+ s += getBool('rmp', 'imagestatus', true);\r
+ s += getBool('rmp', 'maintainaspect', false);\r
+ s += getBool('rmp', 'nojava', false);\r
+ s += getBool('rmp', 'prefetch', false);\r
+ s += getBool('rmp', 'shuffle', false);\r
+ s += getStr('rmp', 'console');\r
+ s += getStr('rmp', 'controls');\r
+ s += getStr('rmp', 'numloop');\r
+ s += getStr('rmp', 'scriptcallbacks');\r
+ break;\r
+ }\r
+\r
+ s += getStr(null, 'id');\r
+ s += getStr(null, 'name');\r
+ s += getStr(null, 'src');\r
+ s += getStr(null, 'align');\r
+ s += getStr(null, 'bgcolor');\r
+ s += getInt(null, 'vspace');\r
+ s += getInt(null, 'hspace');\r
+ s += getStr(null, 'width');\r
+ s += getStr(null, 'height');\r
+\r
+ s = s.length > 0 ? s.substring(0, s.length - 1) : s;\r
+\r
+ return s;\r
+}\r
+\r
+function setBool(pl, p, n) {\r
+ if (typeof(pl[n]) == "undefined")\r
+ return;\r
+\r
+ document.forms[0].elements[p + "_" + n].checked = pl[n];\r
+}\r
+\r
+function setStr(pl, p, n) {\r
+ var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];\r
+\r
+ if (typeof(pl[n]) == "undefined")\r
+ return;\r
+\r
+ if (e.type == "text")\r
+ e.value = pl[n];\r
+ else\r
+ selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);\r
+}\r
+\r
+function getBool(p, n, d, tv, fv) {\r
+ var v = document.forms[0].elements[p + "_" + n].checked;\r
+\r
+ tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";\r
+ fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";\r
+\r
+ return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ',');\r
+}\r
+\r
+function getStr(p, n, d) {\r
+ var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];\r
+ var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;\r
+\r
+ if (n == 'src')\r
+ v = tinyMCEPopup.editor.convertURL(v, 'src', null);\r
+\r
+ return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");\r
+}\r
+\r
+function getInt(p, n, d) {\r
+ var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];\r
+ var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;\r
+\r
+ return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");\r
+}\r
+\r
+function jsEncode(s) {\r
+ s = s.replace(new RegExp('\\\\', 'g'), '\\\\');\r
+ s = s.replace(new RegExp('"', 'g'), '\\"');\r
+ s = s.replace(new RegExp("'", 'g'), "\\'");\r
+\r
+ return s;\r
+}\r
+\r
+function generatePreview(c) {\r
+ var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;\r
+\r
+ p.innerHTML = '<!-- x --->';\r
+\r
+ nw = parseInt(f.width.value);\r
+ nh = parseInt(f.height.value);\r
+\r
+ if (f.width.value != "" && f.height.value != "") {\r
+ if (f.constrain.checked) {\r
+ if (c == 'width' && oldWidth != 0) {\r
+ wp = nw / oldWidth;\r
+ nh = Math.round(wp * nh);\r
+ f.height.value = nh;\r
+ } else if (c == 'height' && oldHeight != 0) {\r
+ hp = nh / oldHeight;\r
+ nw = Math.round(hp * nw);\r
+ f.width.value = nw;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (f.width.value != "")\r
+ oldWidth = nw;\r
+\r
+ if (f.height.value != "")\r
+ oldHeight = nh;\r
+\r
+ // After constrain\r
+ pl = serializeParameters();\r
+\r
+ switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
+ case "flash":\r
+ cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';\r
+ codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
+ type = 'application/x-shockwave-flash';\r
+ break;\r
+\r
+ case "shockwave":\r
+ cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';\r
+ codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';\r
+ type = 'application/x-director';\r
+ break;\r
+\r
+ case "qt":\r
+ cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';\r
+ codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';\r
+ type = 'video/quicktime';\r
+ break;\r
+\r
+ case "wmp":\r
+ cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';\r
+ codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
+ type = 'application/x-mplayer2';\r
+ break;\r
+\r
+ case "rmp":\r
+ cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';\r
+ codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
+ type = 'audio/x-pn-realaudio-plugin';\r
+ break;\r
+ }\r
+\r
+ if (pl == '') {\r
+ p.innerHTML = '';\r
+ return;\r
+ }\r
+\r
+ pl = tinyMCEPopup.editor.plugins.media._parse(pl);\r
+\r
+ if (!pl.src) {\r
+ p.innerHTML = '';\r
+ return;\r
+ }\r
+\r
+ pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src);\r
+ pl.width = !pl.width ? 100 : pl.width;\r
+ pl.height = !pl.height ? 100 : pl.height;\r
+ pl.id = !pl.id ? 'obj' : pl.id;\r
+ pl.name = !pl.name ? 'eobj' : pl.name;\r
+ pl.align = !pl.align ? '' : pl.align;\r
+\r
+ h += '<object classid="clsid:' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';\r
+\r
+ for (n in pl) {\r
+ h += '<param name="' + n + '" value="' + pl[n] + '">';\r
+\r
+ // Add extra url parameter if it's an absolute URL\r
+ if (n == 'src' && pl[n].indexOf('://') != -1)\r
+ h += '<param name="url" value="' + pl[n] + '" />';\r
+ }\r
+\r
+ h += '<embed type="' + type + '" ';\r
+\r
+ for (n in pl)\r
+ h += n + '="' + pl[n] + '" ';\r
+\r
+ h += '></embed></object>';\r
+\r
+ p.innerHTML = "<!-- x --->" + h;\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
+++ /dev/null
-/**
- * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
- */
-
-function writeFlash(p) {
- writeEmbed(
- 'D27CDB6E-AE6D-11cf-96B8-444553540000',
- 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
- 'application/x-shockwave-flash',
- p
- );
-}
-
-function writeShockWave(p) {
- writeEmbed(
- '166B1BCA-3F9C-11CF-8075-444553540000',
- 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
- 'application/x-director',
- p
- );
-}
-
-function writeQuickTime(p) {
- writeEmbed(
- '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
- 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
- 'video/quicktime',
- p
- );
-}
-
-function writeRealMedia(p) {
- writeEmbed(
- 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
- 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
- 'audio/x-pn-realaudio-plugin',
- p
- );
-}
-
-function writeWindowsMedia(p) {
- p.url = p.src;
- writeEmbed(
- '6BF52A52-394A-11D3-B153-00C04F79FAA6',
- 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
- 'application/x-mplayer2',
- p
- );
-}
-
-function writeEmbed(cls, cb, mt, p) {
- var h = '', n;
-
- h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
- h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
- h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
- h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
- h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
- h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
- h += '>';
-
- for (n in p)
- h += '<param name="' + n + '" value="' + p[n] + '">';
-
- h += '<embed type="' + mt + '"';
-
- for (n in p)
- h += n + '="' + p[n] + '" ';
-
- h += '></embed></object>';
-
- document.write(h);
-}
+++ /dev/null
-var oldWidth, oldHeight;
-var url = tinyMCE.getParam("media_external_list_url");
-if (url != null) {
- // Fix relative
- if (url.charAt(0) != '/' && url.indexOf('://') == -1)
- url = tinyMCE.documentBasePath + "/" + url;
-
- document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
-}
-
-function init() {
- var pl = "", f, val;
- var type = "flash", fe, i;
-
- tinyMCEPopup.resizeToInnerSize();
- f = document.forms[0]
-
- fe = tinyMCE.selectedInstance.getFocusElement();
- if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) {
- pl = "x={" + fe.title + "};";
-
- switch (tinyMCE.getAttrib(fe, 'class')) {
- case 'mceItemFlash':
- type = 'flash';
- break;
-
- case 'mceItemShockWave':
- type = 'shockwave';
- break;
-
- case 'mceItemWindowsMedia':
- type = 'wmp';
- break;
-
- case 'mceItemQuickTime':
- type = 'qt';
- break;
-
- case 'mceItemRealMedia':
- type = 'rmp';
- break;
- }
-
- document.forms[0].insert.value = tinyMCE.getLang('lang_update', 'Insert', true);
- }
-
- document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');
- document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media');
- document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
-
- var html = getMediaListHTML('filebrowser','src','media','media');
- if (html == "")
- document.getElementById("linklistrow").style.display = 'none';
- else
- document.getElementById("linklistcontainer").innerHTML = html;
-
- // Resize some elements
- if (isVisible('filebrowsercontainer'))
- document.getElementById('src').style.width = '230px';
-
- // Setup form
- if (pl != "") {
- pl = eval(pl);
-
- switch (type) {
- case "flash":
- setBool(pl, 'flash', 'play');
- setBool(pl, 'flash', 'loop');
- setBool(pl, 'flash', 'menu');
- setBool(pl, 'flash', 'swliveconnect');
- setStr(pl, 'flash', 'quality');
- setStr(pl, 'flash', 'scale');
- setStr(pl, 'flash', 'salign');
- setStr(pl, 'flash', 'wmode');
- setStr(pl, 'flash', 'base');
- setStr(pl, 'flash', 'flashvars');
- break;
-
- case "qt":
- setBool(pl, 'qt', 'loop');
- setBool(pl, 'qt', 'autoplay');
- setBool(pl, 'qt', 'cache');
- setBool(pl, 'qt', 'controller');
- setBool(pl, 'qt', 'correction');
- setBool(pl, 'qt', 'enablejavascript');
- setBool(pl, 'qt', 'kioskmode');
- setBool(pl, 'qt', 'autohref');
- setBool(pl, 'qt', 'playeveryframe');
- setBool(pl, 'qt', 'tarsetcache');
- setStr(pl, 'qt', 'scale');
- setStr(pl, 'qt', 'starttime');
- setStr(pl, 'qt', 'endtime');
- setStr(pl, 'qt', 'tarset');
- setStr(pl, 'qt', 'qtsrcchokespeed');
- setStr(pl, 'qt', 'volume');
- setStr(pl, 'qt', 'qtsrc');
- break;
-
- case "shockwave":
- setBool(pl, 'shockwave', 'sound');
- setBool(pl, 'shockwave', 'progress');
- setBool(pl, 'shockwave', 'autostart');
- setBool(pl, 'shockwave', 'swliveconnect');
- setStr(pl, 'shockwave', 'swvolume');
- setStr(pl, 'shockwave', 'swstretchstyle');
- setStr(pl, 'shockwave', 'swstretchhalign');
- setStr(pl, 'shockwave', 'swstretchvalign');
- break;
-
- case "wmp":
- setBool(pl, 'wmp', 'autostart');
- setBool(pl, 'wmp', 'enabled');
- setBool(pl, 'wmp', 'enablecontextmenu');
- setBool(pl, 'wmp', 'fullscreen');
- setBool(pl, 'wmp', 'invokeurls');
- setBool(pl, 'wmp', 'mute');
- setBool(pl, 'wmp', 'stretchtofit');
- setBool(pl, 'wmp', 'windowlessvideo');
- setStr(pl, 'wmp', 'balance');
- setStr(pl, 'wmp', 'baseurl');
- setStr(pl, 'wmp', 'captioningid');
- setStr(pl, 'wmp', 'currentmarker');
- setStr(pl, 'wmp', 'currentposition');
- setStr(pl, 'wmp', 'defaultframe');
- setStr(pl, 'wmp', 'playcount');
- setStr(pl, 'wmp', 'rate');
- setStr(pl, 'wmp', 'uimode');
- setStr(pl, 'wmp', 'volume');
- break;
-
- case "rmp":
- setBool(pl, 'rmp', 'autostart');
- setBool(pl, 'rmp', 'loop');
- setBool(pl, 'rmp', 'autogotourl');
- setBool(pl, 'rmp', 'center');
- setBool(pl, 'rmp', 'imagestatus');
- setBool(pl, 'rmp', 'maintainaspect');
- setBool(pl, 'rmp', 'nojava');
- setBool(pl, 'rmp', 'prefetch');
- setBool(pl, 'rmp', 'shuffle');
- setStr(pl, 'rmp', 'console');
- setStr(pl, 'rmp', 'controls');
- setStr(pl, 'rmp', 'numloop');
- setStr(pl, 'rmp', 'scriptcallbacks');
- break;
- }
-
- setStr(pl, null, 'src');
- setStr(pl, null, 'id');
- setStr(pl, null, 'name');
- setStr(pl, null, 'vspace');
- setStr(pl, null, 'hspace');
- setStr(pl, null, 'bgcolor');
- setStr(pl, null, 'align');
- setStr(pl, null, 'width');
- setStr(pl, null, 'height');
-
- if ((val = tinyMCE.getAttrib(fe, "width")) != "")
- pl.width = f.width.value = val;
-
- if ((val = tinyMCE.getAttrib(fe, "height")) != "")
- pl.height = f.height.value = val;
-
- oldWidth = pl.width ? parseInt(pl.width) : 0;
- oldHeight = pl.height ? parseInt(pl.height) : 0;
- } else
- oldWidth = oldHeight = 0;
-
- selectByValue(f, 'media_type', type);
- changedType(type);
- updateColor('bgcolor_pick', 'bgcolor');
-
- TinyMCE_EditableSelects.init();
- generatePreview();
-}
-
-function insertMedia() {
- var fe, f = document.forms[0], h;
-
- if (!AutoValidator.validate(f)) {
- alert(tinyMCE.getLang('lang_invalid_data'));
- return false;
- }
-
- f.width.value = f.width.value == "" ? 100 : f.width.value;
- f.height.value = f.height.value == "" ? 100 : f.height.value;
-
- fe = tinyMCE.selectedInstance.getFocusElement();
- if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) {
- switch (f.media_type.options[f.media_type.selectedIndex].value) {
- case "flash":
- fe.className = "mceItemFlash";
- break;
-
- case "shockwave":
- fe.className = "mceItemShockWave";
- break;
-
- case "qt":
- fe.className = "mceItemQuickTime";
- break;
-
- case "wmp":
- fe.className = "mceItemWindowsMedia";
- break;
-
- case "rmp":
- fe.className = "mceItemRealMedia";
- break;
- }
-
- if (fe.width != f.width.value || fe.height != f.height.height)
- tinyMCE.selectedInstance.repaint();
-
- fe.title = serializeParameters();
- fe.width = f.width.value;
- fe.height = f.height.value;
- fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');
- fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : '');
- fe.align = f.align.options[f.align.selectedIndex].value;
- } else {
- h = '<img src="' + tinyMCE.getParam("theme_href") + '/images/spacer.gif"' ;
-
- switch (f.media_type.options[f.media_type.selectedIndex].value) {
- case "flash":
- h += ' class="mceItemFlash"';
- break;
-
- case "shockwave":
- h += ' class="mceItemShockWave"';
- break;
-
- case "qt":
- h += ' class="mceItemQuickTime"';
- break;
-
- case "wmp":
- h += ' class="mceItemWindowsMedia"';
- break;
-
- case "rmp":
- h += ' class="mceItemRealMedia"';
- break;
- }
-
- h += ' title="' + serializeParameters() + '"';
- h += ' width="' + f.width.value + '"';
- h += ' height="' + f.height.value + '"';
- h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';
-
- h += ' />';
-
- tinyMCE.selectedInstance.execCommand('mceInsertContent', false, h);
- }
-
- tinyMCEPopup.close();
-}
-
-function getMediaListHTML() {
- if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {
- var html = "";
-
- html += '<select id="linklist" name="linklist" style="width: 250px" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.src.value=this.options[this.selectedIndex].value;">';
- html += '<option value="">---</option>';
-
- for (var i=0; i<tinyMCEMediaList.length; i++)
- html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';
-
- html += '</select>';
-
- return html;
- }
-
- return "";
-}
-
-function getType(v) {
- var fo, i, c, el, x, f = document.forms[0];
-
- fo = tinyMCE.getParam("media_types", "flash=swf;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');
-
- // YouTube
- if (v.indexOf('http://www.youtube.com/watch?v=') == 0 || v.indexOf('http://youtube.com/watch?v=') == 0) {
- f.width.value = '425';
- f.height.value = '350';
-
- v = v.replace('http://youtube.com/watch?v=', '');
- v = v.replace('http://www.youtube.com/watch?v=', '');
-
- f.src.value = 'http://www.youtube.com/v/' + v;
- return 'flash';
- }
-
- // Google video
- if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {
- f.width.value = '425';
- f.height.value = '326';
- f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';
- return 'flash';
- }
-
- for (i=0; i<fo.length; i++) {
- c = fo[i].split('=');
-
- el = c[1].split(',');
- for (x=0; x<el.length; x++)
- if (v.indexOf('.' + el[x]) != -1)
- return c[0];
- }
-
- return null;
-}
-
-function switchType(v) {
- var t = getType(v), d = document, f = d.forms[0];
-
- if (!t)
- return;
-
- selectByValue(d.forms[0], 'media_type', t);
- changedType(t);
-
- // Update qtsrc also
- if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {
- alert(tinyMCE.getLang("lang_media_qt_stream_warn"));
-
- if (f.qt_qtsrc.value == '')
- f.qt_qtsrc.value = f.src.value;
- }
-}
-
-function changedType(t) {
- var d = document;
-
- d.getElementById('flash_options').style.display = 'none';
- d.getElementById('qt_options').style.display = 'none';
- d.getElementById('shockwave_options').style.display = 'none';
- d.getElementById('wmp_options').style.display = 'none';
- d.getElementById('rmp_options').style.display = 'none';
- d.getElementById(t + '_options').style.display = 'block';
-}
-
-function serializeParameters() {
- var d = document, f = d.forms[0], s = '';
-
- switch (f.media_type.options[f.media_type.selectedIndex].value) {
- case "flash":
- s += getBool('flash', 'play', true);
- s += getBool('flash', 'loop', true);
- s += getBool('flash', 'menu', true);
- s += getBool('flash', 'swliveconnect', false);
- s += getStr('flash', 'quality');
- s += getStr('flash', 'scale');
- s += getStr('flash', 'salign');
- s += getStr('flash', 'wmode');
- s += getStr('flash', 'base');
- s += getStr('flash', 'flashvars');
- break;
-
- case "qt":
- s += getBool('qt', 'loop', false);
- s += getBool('qt', 'autoplay', true);
- s += getBool('qt', 'cache', false);
- s += getBool('qt', 'controller', true);
- s += getBool('qt', 'correction', false, 'none', 'full');
- s += getBool('qt', 'enablejavascript', false);
- s += getBool('qt', 'kioskmode', false);
- s += getBool('qt', 'autohref', false);
- s += getBool('qt', 'playeveryframe', false);
- s += getBool('qt', 'targetcache', false);
- s += getStr('qt', 'scale');
- s += getStr('qt', 'starttime');
- s += getStr('qt', 'endtime');
- s += getStr('qt', 'target');
- s += getStr('qt', 'qtsrcchokespeed');
- s += getStr('qt', 'volume');
- s += getStr('qt', 'qtsrc');
- break;
-
- case "shockwave":
- s += getBool('shockwave', 'sound');
- s += getBool('shockwave', 'progress');
- s += getBool('shockwave', 'autostart');
- s += getBool('shockwave', 'swliveconnect');
- s += getStr('shockwave', 'swvolume');
- s += getStr('shockwave', 'swstretchstyle');
- s += getStr('shockwave', 'swstretchhalign');
- s += getStr('shockwave', 'swstretchvalign');
- break;
-
- case "wmp":
- s += getBool('wmp', 'autostart', true);
- s += getBool('wmp', 'enabled', false);
- s += getBool('wmp', 'enablecontextmenu', true);
- s += getBool('wmp', 'fullscreen', false);
- s += getBool('wmp', 'invokeurls', true);
- s += getBool('wmp', 'mute', false);
- s += getBool('wmp', 'stretchtofit', false);
- s += getBool('wmp', 'windowlessvideo', false);
- s += getStr('wmp', 'balance');
- s += getStr('wmp', 'baseurl');
- s += getStr('wmp', 'captioningid');
- s += getStr('wmp', 'currentmarker');
- s += getStr('wmp', 'currentposition');
- s += getStr('wmp', 'defaultframe');
- s += getStr('wmp', 'playcount');
- s += getStr('wmp', 'rate');
- s += getStr('wmp', 'uimode');
- s += getStr('wmp', 'volume');
- break;
-
- case "rmp":
- s += getBool('rmp', 'autostart', false);
- s += getBool('rmp', 'loop', false);
- s += getBool('rmp', 'autogotourl', true);
- s += getBool('rmp', 'center', false);
- s += getBool('rmp', 'imagestatus', true);
- s += getBool('rmp', 'maintainaspect', false);
- s += getBool('rmp', 'nojava', false);
- s += getBool('rmp', 'prefetch', false);
- s += getBool('rmp', 'shuffle', false);
- s += getStr('rmp', 'console');
- s += getStr('rmp', 'controls');
- s += getStr('rmp', 'numloop');
- s += getStr('rmp', 'scriptcallbacks');
- break;
- }
-
- s += getStr(null, 'id');
- s += getStr(null, 'name');
- s += getStr(null, 'src');
- s += getStr(null, 'align');
- s += getStr(null, 'bgcolor');
- s += getInt(null, 'vspace');
- s += getInt(null, 'hspace');
- s += getStr(null, 'width');
- s += getStr(null, 'height');
-
- s = s.length > 0 ? s.substring(0, s.length - 1) : s;
-
- return s;
-}
-
-function setBool(pl, p, n) {
- if (typeof(pl[n]) == "undefined")
- return;
-
- document.forms[0].elements[p + "_" + n].checked = pl[n];
-}
-
-function setStr(pl, p, n) {
- var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];
-
- if (typeof(pl[n]) == "undefined")
- return;
-
- if (e.type == "text")
- e.value = pl[n];
- else
- selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);
-}
-
-function getBool(p, n, d, tv, fv) {
- var v = document.forms[0].elements[p + "_" + n].checked;
-
- tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";
- fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";
-
- return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ',');
-}
-
-function getStr(p, n, d) {
- var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
- var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
-
- return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");
-}
-
-function getInt(p, n, d) {
- var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
- var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
-
- return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");
-}
-
-function jsEncode(s) {
- s = s.replace(new RegExp('\\\\', 'g'), '\\\\');
- s = s.replace(new RegExp('"', 'g'), '\\"');
- s = s.replace(new RegExp("'", 'g'), "\\'");
-
- return s;
-}
-
-function generatePreview(c) {
- var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;
-
- p.innerHTML = '<!-- x --->';
-
- nw = parseInt(f.width.value);
- nh = parseInt(f.height.value);
-
- if (f.width.value != "" && f.height.value != "") {
- if (f.constrain.checked) {
- if (c == 'width' && oldWidth != 0) {
- wp = nw / oldWidth;
- nh = Math.round(wp * nh);
- f.height.value = nh;
- } else if (c == 'height' && oldHeight != 0) {
- hp = nh / oldHeight;
- nw = Math.round(hp * nw);
- f.width.value = nw;
- }
- }
- }
-
- if (f.width.value != "")
- oldWidth = nw;
-
- if (f.height.value != "")
- oldHeight = nh;
-
- // After constrain
- pl = serializeParameters();
-
- switch (f.media_type.options[f.media_type.selectedIndex].value) {
- case "flash":
- cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
- codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
- type = 'application/x-shockwave-flash';
- break;
-
- case "shockwave":
- cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';
- codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
- type = 'application/x-director';
- break;
-
- case "qt":
- cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
- codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
- type = 'video/quicktime';
- break;
-
- case "wmp":
- cls = tinyMCE.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';
- codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
- type = 'application/x-mplayer2';
- break;
-
- case "rmp":
- cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
- codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
- type = 'audio/x-pn-realaudio-plugin';
- break;
- }
-
- if (pl == '') {
- p.innerHTML = '';
- return;
- }
-
- pl = eval('x={' + pl + '};');
-
- if (!pl.src) {
- p.innerHTML = '';
- return;
- }
-
- pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);
- pl.width = !pl.width ? 100 : pl.width;
- pl.height = !pl.height ? 100 : pl.height;
- pl.id = !pl.id ? 'obj' : pl.id;
- pl.name = !pl.name ? 'eobj' : pl.name;
- pl.align = !pl.align ? '' : pl.align;
-
- h += '<object classid="clsid:' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';
-
- for (n in pl) {
- h += '<param name="' + n + '" value="' + pl[n] + '">';
-
- // Add extra url parameter if it's an absolute URL
- if (n == 'src' && pl[n].indexOf('://') != -1)
- h += '<param name="url" value="' + pl[n] + '" />';
- }
-
- h += '<embed type="' + type + '" ';
-
- for (n in pl)
- h += n + '="' + pl[n] + '" ';
-
- h += '></embed></object>';
-
- p.innerHTML = "<!-- x --->" + h;
-}
+++ /dev/null
-// UK lang variables
-
-tinyMCE.addToLang('media',{
-title : 'Insert / edit embedded media',
-desc : 'Insert / edit embedded media',
-general : 'General',
-advanced : 'Advanced',
-file : 'File/URL',
-list : 'List',
-size : 'Dimensions',
-preview : 'Preview',
-constrain_proportions : 'Constrain proportions',
-type : 'Type',
-id : 'Id',
-name : 'Name',
-class_name : 'Class',
-vspace : 'V-Space',
-hspace : 'H-Space',
-play : 'Auto play',
-loop : 'Loop',
-menu : 'Show menu',
-quality : 'Quality',
-scale : 'Scale',
-align : 'Align',
-salign : 'SAlign',
-wmode : 'WMode',
-bgcolor : 'Background',
-base : 'Base',
-flashvars : 'Flashvars',
-liveconnect : 'SWLiveConnect',
-autohref : 'AutoHREF',
-cache : 'Cache',
-hidden : 'Hidden',
-controller : 'Controller',
-kioskmode : 'Kiosk mode',
-playeveryframe : 'Play every frame',
-targetcache : 'Target cache',
-correction : 'No correction',
-enablejavascript : 'Enable JavaScript',
-starttime : 'Start time',
-endtime : 'End time',
-href : 'Href',
-qtsrcchokespeed : 'Choke speed',
-target : 'Target',
-volume : 'Volume',
-autostart : 'Auto start',
-enabled : 'Enabled',
-fullscreen : 'Fullscreen',
-invokeurls : 'Invoke URLs',
-mute : 'Mute',
-stretchtofit : 'Stretch to fit',
-windowlessvideo : 'Windowless video',
-balance : 'Balance',
-baseurl : 'Base URL',
-captioningid : 'Captioning id',
-currentmarker : 'Current marker',
-currentposition : 'Current position',
-defaultframe : 'Default frame',
-playcount : 'Play count',
-rate : 'Rate',
-uimode : 'UI Mode',
-flash_options : 'Flash options',
-qt_options : 'Quicktime options',
-wmp_options : 'Windows media player options',
-rmp_options : 'Real media player options',
-shockwave_options : 'Shockwave options',
-autogotourl : 'Auto goto URL',
-center : 'Center',
-imagestatus : 'Image status',
-maintainaspect : 'Maintain aspect',
-nojava : 'No java',
-prefetch : 'Prefetch',
-shuffle : 'Shuffle',
-console : 'Console',
-numloop : 'Num loops',
-controls : 'Controls',
-scriptcallbacks : 'Script callbacks',
-swstretchstyle : 'Stretch style',
-swstretchhalign : 'Stretch H-Align',
-swstretchvalign : 'Stretch V-Align',
-sound : 'Sound',
-progress : 'Progress',
-qtsrc : 'QT Src',
-qt_stream_warn : 'Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..',
-align_top : 'Top',
-align_right : 'Right',
-align_bottom : 'Bottom',
-align_left : 'Left',
-align_center : 'Center',
-align_top_left : 'Top left',
-align_top_right : 'Top right',
-align_bottom_left : 'Bottom left',
-align_bottom_right : 'Bottom right'
-});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('en.media_dlg',{\r
+title:"Insert / edit embedded media",\r
+general:"General",\r
+advanced:"Advanced",\r
+file:"File/URL",\r
+list:"List",\r
+size:"Dimensions",\r
+preview:"Preview",\r
+constrain_proportions:"Constrain proportions",\r
+type:"Type",\r
+id:"Id",\r
+name:"Name",\r
+class_name:"Class",\r
+vspace:"V-Space",\r
+hspace:"H-Space",\r
+play:"Auto play",\r
+loop:"Loop",\r
+menu:"Show menu",\r
+quality:"Quality",\r
+scale:"Scale",\r
+align:"Align",\r
+salign:"SAlign",\r
+wmode:"WMode",\r
+bgcolor:"Background",\r
+base:"Base",\r
+flashvars:"Flashvars",\r
+liveconnect:"SWLiveConnect",\r
+autohref:"AutoHREF",\r
+cache:"Cache",\r
+hidden:"Hidden",\r
+controller:"Controller",\r
+kioskmode:"Kiosk mode",\r
+playeveryframe:"Play every frame",\r
+targetcache:"Target cache",\r
+correction:"No correction",\r
+enablejavascript:"Enable JavaScript",\r
+starttime:"Start time",\r
+endtime:"End time",\r
+href:"Href",\r
+qtsrcchokespeed:"Choke speed",\r
+target:"Target",\r
+volume:"Volume",\r
+autostart:"Auto start",\r
+enabled:"Enabled",\r
+fullscreen:"Fullscreen",\r
+invokeurls:"Invoke URLs",\r
+mute:"Mute",\r
+stretchtofit:"Stretch to fit",\r
+windowlessvideo:"Windowless video",\r
+balance:"Balance",\r
+baseurl:"Base URL",\r
+captioningid:"Captioning id",\r
+currentmarker:"Current marker",\r
+currentposition:"Current position",\r
+defaultframe:"Default frame",\r
+playcount:"Play count",\r
+rate:"Rate",\r
+uimode:"UI Mode",\r
+flash_options:"Flash options",\r
+qt_options:"Quicktime options",\r
+wmp_options:"Windows media player options",\r
+rmp_options:"Real media player options",\r
+shockwave_options:"Shockwave options",\r
+autogotourl:"Auto goto URL",\r
+center:"Center",\r
+imagestatus:"Image status",\r
+maintainaspect:"Maintain aspect",\r
+nojava:"No java",\r
+prefetch:"Prefetch",\r
+shuffle:"Shuffle",\r
+console:"Console",\r
+numloop:"Num loops",\r
+controls:"Controls",\r
+scriptcallbacks:"Script callbacks",\r
+swstretchstyle:"Stretch style",\r
+swstretchhalign:"Stretch H-Align",\r
+swstretchvalign:"Stretch V-Align",\r
+sound:"Sound",\r
+progress:"Progress",\r
+qtsrc:"QT Src",\r
+qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",\r
+align_top:"Top",\r
+align_right:"Right",\r
+align_bottom:"Bottom",\r
+align_left:"Left",\r
+align_center:"Center",\r
+align_top_left:"Top left",\r
+align_top_right:"Top right",\r
+align_bottom_left:"Bottom left",\r
+align_bottom_right:"Bottom right",\r
+flv_options:"Flash video options",\r
+flv_scalemode:"Scale mode",\r
+flv_buffer:"Buffer",\r
+flv_startimage:"Start image",\r
+flv_starttime:"Start time",\r
+flv_defaultvolume:"Default volumne",\r
+flv_hiddengui:"Hidden GUI",\r
+flv_autostart:"Auto start",\r
+flv_loop:"Loop",\r
+flv_showscalemodes:"Show scale modes",\r
+flv_smoothvideo:"Smooth video",\r
+flv_jscallback:"JS Callback"\r
+});
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_media_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/media.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <title>{#media_dlg.title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="js/media.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/validate.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
<link href="css/media.css" rel="stylesheet" type="text/css" />\r
<base target="_self" />\r
</head>\r
-<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
+<body style="display: none">\r
<form onsubmit="insertMedia();return false;" action="#">\r
<div class="tabs">\r
<ul>\r
- <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{$lang_media_general}</a></span></li>\r
- <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_media_advanced}</a></span></li>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{#media_dlg.general}</a></span></li>\r
+ <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>\r
</ul>\r
</div>\r
\r
<div class="panel_wrapper">\r
<div id="general_panel" class="panel current">\r
<fieldset>\r
- <legend>{$lang_media_general}</legend>\r
+ <legend>{#media_dlg.general}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td><label for="media_type">{$lang_media_type}</label></td>\r
+ <td><label for="media_type">{#media_dlg.type}</label></td>\r
<td>\r
<select id="media_type" name="media_type" onchange="changedType(this.value);generatePreview();">\r
<option value="flash">Flash</option>\r
+ <!-- <option value="flv">Flash video (FLV)</option> -->\r
<option value="qt">Quicktime</option>\r
<option value="shockwave">Shockwave</option>\r
<option value="wmp">Windows Media</option>\r
</td>\r
</tr>\r
<tr>\r
- <td><label for="src">{$lang_media_file}</label></td>\r
+ <td><label for="src">{#media_dlg.file}</label></td>\r
<td>\r
<table border="0" cellspacing="0" cellpadding="0">\r
<tr>\r
- <td><input id="src" name="src" type="text" value="" onchange="switchType(this.value);generatePreview();" /></td>\r
+ <td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="switchType(this.value);generatePreview();" /></td>\r
<td id="filebrowsercontainer"> </td>\r
</tr>\r
</table>\r
</td>\r
</tr>\r
<tr id="linklistrow">\r
- <td><label for="linklist">{$lang_media_list}</label></td>\r
+ <td><label for="linklist">{#media_dlg.list}</label></td>\r
<td id="linklistcontainer"> </td>\r
</tr>\r
<tr>\r
- <td><label for="width">{$lang_media_size}</label></td>\r
+ <td><label for="width">{#media_dlg.size}</label></td>\r
<td>\r
- <table border="0" cellpadding="0" cellspacing="0">\r
- <tr>\r
- <td><input type="text" id="width" name="width" value="" class="size" onchange="generatePreview('width');" /> x <input type="text" id="height" name="height" value="" class="size" onchange="generatePreview('height');" /></td>\r
- <td> <input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>\r
- <td><label id="constrainlabel" for="constrain">{$lang_media_constrain_proportions}</label></td>\r
- </tr>\r
- </table>\r
+ <table border="0" cellpadding="0" cellspacing="0">\r
+ <tr>\r
+ <td><input type="text" id="width" name="width" value="" class="size" onchange="generatePreview('width');" /> x <input type="text" id="height" name="height" value="" class="size" onchange="generatePreview('height');" /></td>\r
+ <td> <input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>\r
+ <td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
</tr>\r
</table>\r
</fieldset>\r
\r
<fieldset>\r
- <legend>{$lang_media_preview}</legend>\r
+ <legend>{#media_dlg.preview}</legend>\r
<div id="prev"></div>\r
</fieldset>\r
</div>\r
\r
<div id="advanced_panel" class="panel">\r
<fieldset>\r
- <legend>{$lang_media_advanced}</legend>\r
+ <legend>{#media_dlg.advanced}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0" width="100%">\r
<tr>\r
- <td><label for="id">{$lang_media_id}</label></td>\r
+ <td><label for="id">{#media_dlg.id}</label></td>\r
<td><input type="text" id="id" name="id" onchange="generatePreview();" /></td>\r
- <td><label for="name">{$lang_media_name}</label></td>\r
+ <td><label for="name">{#media_dlg.name}</label></td>\r
<td><input type="text" id="name" name="name" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="align">{$lang_media_align}</label></td>\r
+ <td><label for="align">{#media_dlg.align}</label></td>\r
<td>\r
<select id="align" name="align" onchange="generatePreview();">\r
- <option value="">{$lang_not_set}</option> \r
- <option value="top">{$lang_media_align_top}</option>\r
- <option value="right">{$lang_media_align_right}</option>\r
- <option value="bottom">{$lang_media_align_bottom}</option>\r
- <option value="left">{$lang_media_align_left}</option>\r
+ <option value="">{#not_set}</option> \r
+ <option value="top">{#media_dlg.align_top}</option>\r
+ <option value="right">{#media_dlg.align_right}</option>\r
+ <option value="bottom">{#media_dlg.align_bottom}</option>\r
+ <option value="left">{#media_dlg.align_left}</option>\r
</select>\r
</td>\r
\r
- <td><label for="bgcolor">{$lang_media_bgcolor}</label></td>\r
+ <td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>\r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
</tr>\r
\r
<tr>\r
- <td><label for="vspace">{$lang_media_vspace}</label></td>\r
+ <td><label for="vspace">{#media_dlg.vspace}</label></td>\r
<td><input type="text" id="vspace" name="vspace" class="number" onchange="generatePreview();" /></td>\r
- <td><label for="hspace">{$lang_media_hspace}</label></td>\r
+ <td><label for="hspace">{#media_dlg.hspace}</label></td>\r
<td><input type="text" id="hspace" name="hspace" class="number" onchange="generatePreview();" /></td>\r
</tr>\r
</table>\r
</fieldset>\r
\r
<fieldset id="flash_options">\r
- <legend>{$lang_media_flash_options}</legend>\r
+ <legend>{#media_dlg.flash_options}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td><label for="flash_quality">{$lang_media_quality}</label></td>\r
+ <td><label for="flash_quality">{#media_dlg.quality}</label></td>\r
<td>\r
<select id="flash_quality" name="flash_quality" onchange="generatePreview();">\r
- <option value="">{$lang_not_set}</option> \r
+ <option value="">{#not_set}</option> \r
<option value="high">high</option>\r
<option value="low">low</option>\r
<option value="autolow">autolow</option>\r
</select>\r
</td>\r
\r
- <td><label for="flash_scale">{$lang_media_scale}</label></td>\r
+ <td><label for="flash_scale">{#media_dlg.scale}</label></td>\r
<td>\r
<select id="flash_scale" name="flash_scale" onchange="generatePreview();">\r
- <option value="">{$lang_not_set}</option> \r
+ <option value="">{#not_set}</option> \r
<option value="showall">showall</option>\r
<option value="noborder">noborder</option>\r
<option value="exactfit">exactfit</option>\r
+ <option value="noscale">noscale</option>\r
</select>\r
</td>\r
</tr>\r
\r
<tr>\r
- <td><label for="flash_wmode">{$lang_media_wmode}</label></td>\r
+ <td><label for="flash_wmode">{#media_dlg.wmode}</label></td>\r
<td>\r
<select id="flash_wmode" name="flash_wmode" onchange="generatePreview();">\r
- <option value="">{$lang_not_set}</option> \r
+ <option value="">{#not_set}</option> \r
<option value="window">window</option>\r
<option value="opaque">opaque</option>\r
<option value="transparent">transparent</option>\r
</select>\r
</td>\r
\r
- <td><label for="flash_salign">{$lang_media_salign}</label></td>\r
+ <td><label for="flash_salign">{#media_dlg.salign}</label></td>\r
<td>\r
<select id="flash_salign" name="flash_salign" onchange="generatePreview();">\r
- <option value="">{$lang_not_set}</option> \r
- <option value="l">{$lang_media_align_left}</option>\r
- <option value="t">{$lang_media_align_top}</option>\r
- <option value="r">{$lang_media_align_right}</option>\r
- <option value="b">{$lang_media_align_bottom}</option>\r
- <option value="tl">{$lang_media_align_top_left}</option>\r
- <option value="tr">{$lang_media_align_top_right}</option>\r
- <option value="bl">{$lang_media_align_bottom_left}</option>\r
- <option value="br">{$lang_media_align_bottom_right}</option>\r
+ <option value="">{#not_set}</option> \r
+ <option value="l">{#media_dlg.align_left}</option>\r
+ <option value="t">{#media_dlg.align_top}</option>\r
+ <option value="r">{#media_dlg.align_right}</option>\r
+ <option value="b">{#media_dlg.align_bottom}</option>\r
+ <option value="tl">{#media_dlg.align_top_left}</option>\r
+ <option value="tr">{#media_dlg.align_top_right}</option>\r
+ <option value="bl">{#media_dlg.align_bottom_left}</option>\r
+ <option value="br">{#media_dlg.align_bottom_right}</option>\r
</select>\r
</td>\r
</tr>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="flash_play">{$lang_media_play}</label></td>\r
+ <td><label for="flash_play">{#media_dlg.play}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="flash_loop">{$lang_media_loop}</label></td>\r
+ <td><label for="flash_loop">{#media_dlg.loop}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="flash_menu">{$lang_media_menu}</label></td>\r
+ <td><label for="flash_menu">{#media_dlg.menu}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="generatePreview();" /></td>\r
- <td><label for="flash_swliveconnect">{$lang_media_liveconnect}</label></td>\r
+ <td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>\r
</tr>\r
</table>\r
</td>\r
\r
<table>\r
<tr>\r
- <td><label for="flash_base">{$lang_media_base}</label></td>\r
+ <td><label for="flash_base">{#media_dlg.base}</label></td>\r
<td><input type="text" id="flash_base" name="flash_base" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="flash_flashvars">{$lang_media_flashvars}</label></td>\r
+ <td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>\r
<td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="generatePreview();" /></td>\r
</tr>\r
</table>\r
</fieldset>\r
\r
+ <fieldset id="flv_options">\r
+ <legend>{#media_dlg.flv_options}</legend>\r
+\r
+ <table border="0" cellpadding="4" cellspacing="0">\r
+ <tr>\r
+ <td><label for="flv_scalemode">{#media_dlg.flv_scalemode}</label></td>\r
+ <td>\r
+ <select id="flv_scalemode" name="flv_scalemode" onchange="generatePreview();">\r
+ <option value="">{#not_set}</option> \r
+ <option value="none">none</option>\r
+ <option value="double">double</option>\r
+ <option value="full">full</option>\r
+ </select>\r
+ </td>\r
+\r
+ <td><label for="flv_buffer">{#media_dlg.flv_buffer}</label></td>\r
+ <td><input type="text" id="flv_buffer" name="flv_buffer" onchange="generatePreview();" /></td>\r
+ </tr>\r
+\r
+ <tr>\r
+ <td><label for="flv_startimage">{#media_dlg.flv_startimage}</label></td>\r
+ <td><input type="text" id="flv_startimage" name="flv_startimage" onchange="generatePreview();" /></td>\r
+\r
+ <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>\r
+ <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>\r
+ </tr>\r
+\r
+ <tr>\r
+ <td><label for="flv_defaultvolume">{#media_dlg.flv_defaultvolume}</label></td>\r
+ <td><input type="text" id="flv_defaultvolume" name="flv_defaultvolume" onchange="generatePreview();" /></td>\r
+\r
+ <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>\r
+ <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>\r
+ </tr>\r
+\r
+ <tr>\r
+ <td colspan="2">\r
+ <table border="0" cellpadding="0" cellspacing="0">\r
+ <tr>\r
+ <td><input type="checkbox" class="checkbox" id="flv_hiddengui" name="flv_hiddengui" checked="checked" onchange="generatePreview();" /></td>\r
+ <td><label for="flv_hiddengui">{#media_dlg.flv_hiddengui}</label></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
+\r
+ <td colspan="2">\r
+ <table border="0" cellpadding="0" cellspacing="0">\r
+ <tr>\r
+ <td><input type="checkbox" class="checkbox" id="flv_autostart" name="flv_autostart" checked="checked" onchange="generatePreview();" /></td>\r
+ <td><label for="flv_autostart">{#media_dlg.flv_autostart}</label></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
+ </tr>\r
+\r
+ <tr>\r
+ <td colspan="2">\r
+ <table border="0" cellpadding="0" cellspacing="0">\r
+ <tr>\r
+ <td><input type="checkbox" class="checkbox" id="flv_loop" name="flv_loop" checked="checked" onchange="generatePreview();" /></td>\r
+ <td><label for="flv_loop">{#media_dlg.flv_loop}</label></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
+\r
+ <td colspan="2">\r
+ <table border="0" cellpadding="0" cellspacing="0">\r
+ <tr>\r
+ <td><input type="checkbox" class="checkbox" id="flv_showscalemodes" name="flv_showscalemodes" onchange="generatePreview();" /></td>\r
+ <td><label for="flv_showscalemodes">{#media_dlg.flv_showscalemodes}</label></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
+ </tr>\r
+\r
+ <tr>\r
+ <td colspan="2">\r
+ <table border="0" cellpadding="0" cellspacing="0">\r
+ <tr>\r
+ <td><input type="checkbox" class="checkbox" id="flv_smoothvideo" name="flash_flv_flv_smoothvideosmoothvideo" checked="checked" onchange="generatePreview();" /></td>\r
+ <td><label for="flv_smoothvideo">{#media_dlg.flv_smoothvideo}</label></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
+\r
+ <td colspan="2">\r
+ <table border="0" cellpadding="0" cellspacing="0">\r
+ <tr>\r
+ <td><input type="checkbox" class="checkbox" id="flv_jscallback" name="flv_jscallback" onchange="generatePreview();" /></td>\r
+ <td><label for="flv_jscallback">{#media_dlg.flv_jscallback}</label></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+\r
<fieldset id="qt_options">\r
- <legend>{$lang_media_qt_options}</legend>\r
+ <legend>{#media_dlg.qt_options}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_loop" name="qt_loop" onchange="generatePreview();" /></td>\r
- <td><label for="qt_loop">{$lang_media_loop}</label></td>\r
+ <td><label for="qt_loop">{#media_dlg.loop}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_autoplay" name="qt_autoplay" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="qt_autoplay">{$lang_media_play}</label></td>\r
+ <td><label for="qt_autoplay">{#media_dlg.play}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_cache" name="qt_cache" onchange="generatePreview();" /></td>\r
- <td><label for="qt_cache">{$lang_media_cache}</label></td>\r
+ <td><label for="qt_cache">{#media_dlg.cache}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_controller" name="qt_controller" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="qt_controller">{$lang_media_controller}</label></td>\r
+ <td><label for="qt_controller">{#media_dlg.controller}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_correction" name="qt_correction" onchange="generatePreview();" /></td>\r
- <td><label for="qt_correction">{$lang_media_correction}</label></td>\r
+ <td><label for="qt_correction">{#media_dlg.correction}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_enablejavascript" name="qt_enablejavascript" onchange="generatePreview();" /></td>\r
- <td><label for="qt_enablejavascript">{$lang_media_enablejavascript}</label></td>\r
+ <td><label for="qt_enablejavascript">{#media_dlg.enablejavascript}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_kioskmode" name="qt_kioskmode" onchange="generatePreview();" /></td>\r
- <td><label for="qt_kioskmode">{$lang_media_kioskmode}</label></td>\r
+ <td><label for="qt_kioskmode">{#media_dlg.kioskmode}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_autohref" name="qt_autohref" onchange="generatePreview();" /></td>\r
- <td><label for="qt_autohref">{$lang_media_autohref}</label></td>\r
+ <td><label for="qt_autohref">{#media_dlg.autohref}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_playeveryframe" name="qt_playeveryframe" onchange="generatePreview();" /></td>\r
- <td><label for="qt_playeveryframe">{$lang_media_playeveryframe}</label></td>\r
+ <td><label for="qt_playeveryframe">{#media_dlg.playeveryframe}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="qt_targetcache" name="qt_targetcache" onchange="generatePreview();" /></td>\r
- <td><label for="qt_targetcache">{$lang_media_targetcache}</label></td>\r
+ <td><label for="qt_targetcache">{#media_dlg.targetcache}</label></td>\r
</tr>\r
</table>\r
</td>\r
</tr>\r
\r
<tr>\r
- <td><label for="qt_scale">{$lang_media_scale}</label></td>\r
+ <td><label for="qt_scale">{#media_dlg.scale}</label></td>\r
<td><select id="qt_scale" name="qt_scale" class="mceEditableSelect" onchange="generatePreview();">\r
- <option value="">{$lang_not_set}</option> \r
+ <option value="">{#not_set}</option> \r
<option value="tofit">tofit</option>\r
<option value="aspect">aspect</option>\r
</select>\r
</tr>\r
\r
<tr>\r
- <td><label for="qt_starttime">{$lang_media_starttime}</label></td>\r
+ <td><label for="qt_starttime">{#media_dlg.starttime}</label></td>\r
<td><input type="text" id="qt_starttime" name="qt_starttime" onchange="generatePreview();" /></td>\r
\r
- <td><label for="qt_endtime">{$lang_media_endtime}</label></td>\r
+ <td><label for="qt_endtime">{#media_dlg.endtime}</label></td>\r
<td><input type="text" id="qt_endtime" name="qt_endtime" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="qt_target">{$lang_media_target}</label></td>\r
+ <td><label for="qt_target">{#media_dlg.target}</label></td>\r
<td><input type="text" id="qt_target" name="qt_target" onchange="generatePreview();" /></td>\r
\r
- <td><label for="qt_href">{$lang_media_href}</label></td>\r
+ <td><label for="qt_href">{#media_dlg.href}</label></td>\r
<td><input type="text" id="qt_href" name="qt_href" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="qt_qtsrcchokespeed">{$lang_media_qtsrcchokespeed}</label></td>\r
+ <td><label for="qt_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>\r
<td><input type="text" id="qt_qtsrcchokespeed" name="qt_qtsrcchokespeed" onchange="generatePreview();" /></td>\r
\r
- <td><label for="qt_volume">{$lang_media_volume}</label></td>\r
+ <td><label for="qt_volume">{#media_dlg.volume}</label></td>\r
<td><input type="text" id="qt_volume" name="qt_volume" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="qt_qtsrc">{$lang_media_qtsrc}</label></td>\r
+ <td><label for="qt_qtsrc">{#media_dlg.qtsrc}</label></td>\r
<td colspan="4">\r
<table border="0" cellspacing="0" cellpadding="0">\r
<tr>\r
</fieldset>\r
\r
<fieldset id="wmp_options">\r
- <legend>{$lang_media_wmp_options}</legend>\r
+ <legend>{#media_dlg.wmp_options}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="wmp_autostart" name="wmp_autostart" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="wmp_autostart">{$lang_media_autostart}</label></td>\r
+ <td><label for="wmp_autostart">{#media_dlg.autostart}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="wmp_enabled" name="wmp_enabled" onchange="generatePreview();" /></td>\r
- <td><label for="wmp_enabled">{$lang_media_enabled}</label></td>\r
+ <td><label for="wmp_enabled">{#media_dlg.enabled}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="wmp_enablecontextmenu" name="wmp_enablecontextmenu" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="wmp_enablecontextmenu">{$lang_media_menu}</label></td>\r
+ <td><label for="wmp_enablecontextmenu">{#media_dlg.menu}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="wmp_fullscreen" name="wmp_fullscreen" onchange="generatePreview();" /></td>\r
- <td><label for="wmp_fullscreen">{$lang_media_fullscreen}</label></td>\r
+ <td><label for="wmp_fullscreen">{#media_dlg.fullscreen}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="wmp_invokeurls" name="wmp_invokeurls" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="wmp_invokeurls">{$lang_media_invokeurls}</label></td>\r
+ <td><label for="wmp_invokeurls">{#media_dlg.invokeurls}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="wmp_mute" name="wmp_mute" onchange="generatePreview();" /></td>\r
- <td><label for="wmp_mute">{$lang_media_mute}</label></td>\r
+ <td><label for="wmp_mute">{#media_dlg.mute}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="wmp_stretchtofit" name="wmp_stretchtofit" onchange="generatePreview();" /></td>\r
- <td><label for="wmp_stretchtofit">{$lang_media_stretchtofit}</label></td>\r
+ <td><label for="wmp_stretchtofit">{#media_dlg.stretchtofit}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="wmp_windowlessvideo" name="wmp_windowlessvideo" onchange="generatePreview();" /></td>\r
- <td><label for="wmp_windowlessvideo">{$lang_media_windowlessvideo}</label></td>\r
+ <td><label for="wmp_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>\r
</tr>\r
</table>\r
</td>\r
</tr>\r
\r
<tr>\r
- <td><label for="wmp_balance">{$lang_media_balance}</label></td>\r
+ <td><label for="wmp_balance">{#media_dlg.balance}</label></td>\r
<td><input type="text" id="wmp_balance" name="wmp_balance" onchange="generatePreview();" /></td>\r
\r
- <td><label for="wmp_baseurl">{$lang_media_baseurl}</label></td>\r
+ <td><label for="wmp_baseurl">{#media_dlg.baseurl}</label></td>\r
<td><input type="text" id="wmp_baseurl" name="wmp_baseurl" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="wmp_captioningid">{$lang_media_captioningid}</label></td>\r
+ <td><label for="wmp_captioningid">{#media_dlg.captioningid}</label></td>\r
<td><input type="text" id="wmp_captioningid" name="wmp_captioningid" onchange="generatePreview();" /></td>\r
\r
- <td><label for="wmp_currentmarker">{$lang_media_currentmarker}</label></td>\r
+ <td><label for="wmp_currentmarker">{#media_dlg.currentmarker}</label></td>\r
<td><input type="text" id="wmp_currentmarker" name="wmp_currentmarker" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="wmp_currentposition">{$lang_media_currentposition}</label></td>\r
+ <td><label for="wmp_currentposition">{#media_dlg.currentposition}</label></td>\r
<td><input type="text" id="wmp_currentposition" name="wmp_currentposition" onchange="generatePreview();" /></td>\r
\r
- <td><label for="wmp_defaultframe">{$lang_media_defaultframe}</label></td>\r
+ <td><label for="wmp_defaultframe">{#media_dlg.defaultframe}</label></td>\r
<td><input type="text" id="wmp_defaultframe" name="wmp_defaultframe" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="wmp_playcount">{$lang_media_playcount}</label></td>\r
+ <td><label for="wmp_playcount">{#media_dlg.playcount}</label></td>\r
<td><input type="text" id="wmp_playcount" name="wmp_playcount" onchange="generatePreview();" /></td>\r
\r
- <td><label for="wmp_rate">{$lang_media_rate}</label></td>\r
+ <td><label for="wmp_rate">{#media_dlg.rate}</label></td>\r
<td><input type="text" id="wmp_rate" name="wmp_rate" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="wmp_uimode">{$lang_media_uimode}</label></td>\r
+ <td><label for="wmp_uimode">{#media_dlg.uimode}</label></td>\r
<td><input type="text" id="wmp_uimode" name="wmp_uimode" onchange="generatePreview();" /></td>\r
\r
- <td><label for="wmp_volume">{$lang_media_volume}</label></td>\r
+ <td><label for="wmp_volume">{#media_dlg.volume}</label></td>\r
<td><input type="text" id="wmp_volume" name="wmp_volume" onchange="generatePreview();" /></td>\r
</tr>\r
\r
</fieldset>\r
\r
<fieldset id="rmp_options">\r
- <legend>{$lang_media_rmp_options}</legend>\r
+ <legend>{#media_dlg.rmp_options}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_autostart" name="rmp_autostart" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_autostart">{$lang_media_autostart}</label></td>\r
+ <td><label for="rmp_autostart">{#media_dlg.autostart}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_loop" name="rmp_loop" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_loop">{$lang_media_loop}</label></td>\r
+ <td><label for="rmp_loop">{#media_dlg.loop}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_autogotourl" name="rmp_autogotourl" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_autogotourl">{$lang_media_autogotourl}</label></td>\r
+ <td><label for="rmp_autogotourl">{#media_dlg.autogotourl}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_center" name="rmp_center" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_center">{$lang_media_center}</label></td>\r
+ <td><label for="rmp_center">{#media_dlg.center}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_imagestatus" name="rmp_imagestatus" checked="checked" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_imagestatus">{$lang_media_imagestatus}</label></td>\r
+ <td><label for="rmp_imagestatus">{#media_dlg.imagestatus}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_maintainaspect" name="rmp_maintainaspect" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_maintainaspect">{$lang_media_maintainaspect}</label></td>\r
+ <td><label for="rmp_maintainaspect">{#media_dlg.maintainaspect}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_nojava" name="rmp_nojava" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_nojava">{$lang_media_nojava}</label></td>\r
+ <td><label for="rmp_nojava">{#media_dlg.nojava}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_prefetch" name="rmp_prefetch" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_prefetch">{$lang_media_prefetch}</label></td>\r
+ <td><label for="rmp_prefetch">{#media_dlg.prefetch}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="rmp_shuffle" name="rmp_shuffle" onchange="generatePreview();" /></td>\r
- <td><label for="rmp_shuffle">{$lang_media_shuffle}</label></td>\r
+ <td><label for="rmp_shuffle">{#media_dlg.shuffle}</label></td>\r
</tr>\r
</table>\r
</td>\r
</tr>\r
\r
<tr>\r
- <td><label for="rmp_console">{$lang_media_console}</label></td>\r
+ <td><label for="rmp_console">{#media_dlg.console}</label></td>\r
<td><input type="text" id="rmp_console" name="rmp_console" onchange="generatePreview();" /></td>\r
\r
- <td><label for="rmp_controls">{$lang_media_controls}</label></td>\r
+ <td><label for="rmp_controls">{#media_dlg.controls}</label></td>\r
<td><input type="text" id="rmp_controls" name="rmp_controls" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="rmp_numloop">{$lang_media_numloop}</label></td>\r
+ <td><label for="rmp_numloop">{#media_dlg.numloop}</label></td>\r
<td><input type="text" id="rmp_numloop" name="rmp_numloop" onchange="generatePreview();" /></td>\r
\r
- <td><label for="rmp_scriptcallbacks">{$lang_media_scriptcallbacks}</label></td>\r
+ <td><label for="rmp_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>\r
<td><input type="text" id="rmp_scriptcallbacks" name="rmp_scriptcallbacks" onchange="generatePreview();" /></td>\r
</tr>\r
</table>\r
</fieldset>\r
\r
<fieldset id="shockwave_options">\r
- <legend>{$lang_media_shockwave_options}</legend>\r
+ <legend>{#media_dlg.shockwave_options}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td><label for="shockwave_swstretchstyle">{$lang_media_swstretchstyle}</label></td>\r
+ <td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>\r
<td>\r
<select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="generatePreview();">\r
- <option value="none">{$lang_not_set}</option>\r
+ <option value="none">{#not_set}</option>\r
<option value="meet">Meet</option>\r
<option value="fill">Fill</option>\r
<option value="stage">Stage</option>\r
</select>\r
</td>\r
\r
- <td><label for="shockwave_swvolume">{$lang_media_volume}</label></td>\r
+ <td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>\r
<td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="generatePreview();" /></td>\r
</tr>\r
\r
<tr>\r
- <td><label for="shockwave_swstretchhalign">{$lang_media_swstretchhalign}</label></td>\r
+ <td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>\r
<td>\r
<select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="generatePreview();">\r
- <option value="none">{$lang_not_set}</option>\r
- <option value="left">{$lang_media_align_left}</option>\r
- <option value="center">{$lang_media_align_center}</option>\r
- <option value="right">{$lang_media_align_right}</option>\r
+ <option value="none">{#not_set}</option>\r
+ <option value="left">{#media_dlg.align_left}</option>\r
+ <option value="center">{#media_dlg.align_center}</option>\r
+ <option value="right">{#media_dlg.align_right}</option>\r
</select>\r
</td>\r
\r
- <td><label for="shockwave_swstretchvalign">{$lang_media_swstretchvalign}</label></td>\r
+ <td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>\r
<td>\r
<select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="generatePreview();">\r
- <option value="none">{$lang_not_set}</option>\r
+ <option value="none">{#not_set}</option>\r
<option value="meet">Meet</option>\r
<option value="fill">Fill</option>\r
<option value="stage">Stage</option>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="generatePreview();" checked="checked" /></td>\r
- <td><label for="shockwave_autostart">{$lang_media_autostart}</label></td>\r
+ <td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="generatePreview();" checked="checked" /></td>\r
- <td><label for="shockwave_sound">{$lang_media_sound}</label></td>\r
+ <td><label for="shockwave_sound">{#media_dlg.sound}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="generatePreview();" /></td>\r
- <td><label for="shockwave_swliveconnect">{$lang_media_liveconnect}</label></td>\r
+ <td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="generatePreview();" checked="checked" /></td>\r
- <td><label for="shockwave_progress">{$lang_media_progress}</label></td>\r
+ <td><label for="shockwave_progress">{#media_dlg.progress}</label></td>\r
</tr>\r
</table>\r
</td>\r
\r
<div class="mceActionPanel">\r
<div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertMedia();" />\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
</div>\r
\r
<div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
</form>\r
-tinyMCE.importPluginLanguagePack('nonbreaking');var TinyMCE_NonBreakingPlugin={getInfo:function(){return{longname:'Nonbreaking space',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},getControlHTML:function(cn){switch(cn){case"nonbreaking":return tinyMCE.getButtonHTML(cn,'lang_nonbreaking_desc','{$pluginurl}/images/nonbreaking.gif','mceNonBreaking',false)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),h;switch(command){case"mceNonBreaking":h=(inst.visualChars&&inst.visualChars.state)?'<span class="mceItemHiddenVisualChar">·</span>':' ';tinyMCE.execInstanceCommand(editor_id,'mceInsertContent',false,h);return true}return false},handleEvent:function(e){var inst,h;if(!tinyMCE.isOpera&&e.type=='keydown'&&e.keyCode==9&&tinyMCE.getParam('nonbreaking_force_tab',false)){inst=tinyMCE.selectedInstance;h=(inst.visualChars&&inst.visualChars.state)?'<span class="mceItemHiddenVisualChar">···</span>':' ';tinyMCE.execInstanceCommand(inst.editorId,'mceInsertContent',false,h);tinyMCE.cancelEvent(e);return false}return true}};tinyMCE.addPlugin("nonbreaking",TinyMCE_NonBreakingPlugin);
\ No newline at end of file
+(function(){tinymce.create('tinymce.plugins.Nonbreaking',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceNonBreaking',function(){ed.execCommand('mceInsertContent',false,(ed.plugins.visualchars&&ed.plugins.visualchars.state)?'<span class="mceItemHidden mceVisualNbsp">·</span>':' ');});ed.addButton('nonbreaking',{title:'nonbreaking.nonbreaking_desc',cmd:'mceNonBreaking'});if(ed.getParam('nonbreaking_force_tab')){ed.onKeyDown.add(function(ed,e){if(tinymce.isIE&&e.keyCode==9){ed.execCommand('mceNonBreaking');ed.execCommand('mceNonBreaking');ed.execCommand('mceNonBreaking');tinymce.dom.Event.cancel(e);}});}},getInfo:function(){return{longname:'Nonbreaking space',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('nonbreaking',tinymce.plugins.Nonbreaking);})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
*\r
* @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
*/\r
\r
-/* Import plugin specific language pack */\r
-tinyMCE.importPluginLanguagePack('nonbreaking');\r
-\r
-var TinyMCE_NonBreakingPlugin = {\r
- getInfo : function() {\r
- return {\r
- longname : 'Nonbreaking space',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',\r
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
- };\r
- },\r
-\r
- getControlHTML : function(cn) {\r
- switch (cn) {\r
- case "nonbreaking":\r
- return tinyMCE.getButtonHTML(cn, 'lang_nonbreaking_desc', '{$pluginurl}/images/nonbreaking.gif', 'mceNonBreaking', false);\r
+(function() {\r
+ tinymce.create('tinymce.plugins.Nonbreaking', {\r
+ init : function(ed, url) {\r
+ var t = this;\r
+\r
+ t.editor = ed;\r
+\r
+ // Register commands\r
+ ed.addCommand('mceNonBreaking', function() {\r
+ ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span class="mceItemHidden mceVisualNbsp">·</span>' : ' ');\r
+ });\r
+\r
+ // Register buttons\r
+ ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});\r
+\r
+ if (ed.getParam('nonbreaking_force_tab')) {\r
+ ed.onKeyDown.add(function(ed, e) {\r
+ if (tinymce.isIE && e.keyCode == 9) {\r
+ ed.execCommand('mceNonBreaking');\r
+ ed.execCommand('mceNonBreaking');\r
+ ed.execCommand('mceNonBreaking');\r
+ tinymce.dom.Event.cancel(e);\r
+ }\r
+ });\r
+ }\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Nonbreaking space',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
}\r
\r
- return "";\r
- },\r
+ // Private methods\r
+ });\r
\r
-\r
- execCommand : function(editor_id, element, command, user_interface, value) {\r
- var inst = tinyMCE.getInstanceById(editor_id), h;\r
-\r
- switch (command) {\r
- case "mceNonBreaking":\r
- h = (inst.visualChars && inst.visualChars.state) ? '<span class="mceItemHiddenVisualChar">·</span>' : ' ';\r
- tinyMCE.execInstanceCommand(editor_id, 'mceInsertContent', false, h);\r
- return true;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- handleEvent : function(e) {\r
- var inst, h;\r
-\r
- if (!tinyMCE.isOpera && e.type == 'keydown' && e.keyCode == 9 && tinyMCE.getParam('nonbreaking_force_tab', false)) {\r
- inst = tinyMCE.selectedInstance;\r
-\r
- h = (inst.visualChars && inst.visualChars.state) ? '<span class="mceItemHiddenVisualChar">···</span>' : ' ';\r
- tinyMCE.execInstanceCommand(inst.editorId, 'mceInsertContent', false, h);\r
-\r
- tinyMCE.cancelEvent(e);\r
- return false;\r
- }\r
-\r
- return true;\r
- }\r
-};\r
-\r
-tinyMCE.addPlugin("nonbreaking", TinyMCE_NonBreakingPlugin);\r
+ // Register plugin\r
+ tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);\r
+})();
\ No newline at end of file
+++ /dev/null
-// UK lang variables\r
-\r
-tinyMCE.addToLang('nonbreaking',{\r
-desc : 'Insert non-breaking space character'\r
-});\r
--- /dev/null
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+<title>blank_page</title>\r
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+<link href="css/blank.css" rel="stylesheet" type="text/css" />\r
+<base target="_self" />\r
+<script type="text/javascript">\r
+function init() {\r
+ if (parent.tinymce.isIE)\r
+ document.body.contentEditable = true;\r
+ else\r
+ document.designMode = 'on';\r
+\r
+ parent.initIframe(document);\r
+ window.focus();\r
+}\r
+</script>\r
+</head>\r
+<body onload="init();">\r
+\r
+</body>\r
+</html>\r
--- /dev/null
+html, body {height:98%}\r
+body {\r
+background-color: #FFFFFF;\r
+font-family: Verdana, Arial, Helvetica, sans-serif;\r
+font-size: 10px;\r
+scrollbar-3dlight-color: #F0F0EE;\r
+scrollbar-arrow-color: #676662;\r
+scrollbar-base-color: #F0F0EE;\r
+scrollbar-darkshadow-color: #DDDDDD;\r
+scrollbar-face-color: #E0E0DD;\r
+scrollbar-highlight-color: #F0F0EE;\r
+scrollbar-shadow-color: #F0F0EE;\r
+scrollbar-track-color: #F5F5F5;\r
+}\r
--- /dev/null
+.sourceIframe {\r
+ border: 1px solid #808080;\r
+}\r
--- /dev/null
+(function(){var Event=tinymce.dom.Event;tinymce.create('tinymce.plugins.PastePlugin',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mcePasteText',function(ui,v){if(ui){if((ed.getParam('paste_use_dialog',true))||(!tinymce.isIE)){ed.windowManager.open({file:url+'/pastetext.htm',width:450,height:400,inline:1},{plugin_url:url});}else t._insertText(clipboardData.getData("Text"),true);}else t._insertText(v.html,v.linebreaks);});ed.addCommand('mcePasteWord',function(ui,v){if(ui){if((ed.getParam('paste_use_dialog',true))||(!tinymce.isIE)){ed.windowManager.open({file:url+'/pasteword.htm',width:450,height:400,inline:1},{plugin_url:url});}else t._insertText(t._clipboardHTML());}else t._insertWordContent(v);});ed.addCommand('mceSelectAll',function(){ed.execCommand('selectall');});ed.addButton('pastetext',{title:'paste.paste_text_desc',cmd:'mcePasteText',ui:true});ed.addButton('pasteword',{title:'paste.paste_word_desc',cmd:'mcePasteWord',ui:true});ed.addButton('selectall',{title:'paste.selectall_desc',cmd:'mceSelectAll'});if(ed.getParam("paste_auto_cleanup_on_paste",false)){ed.onPaste.add(function(ed,e){return t._handlePasteEvent(e)});}if(!tinymce.isIE&&ed.getParam("paste_auto_cleanup_on_paste",false)){ed.onKeyDown.add(function(ed,e){if(e.ctrlKey&&e.keyCode==86){window.setTimeout(function(){ed.execCommand("mcePasteText",true);},1);Event.cancel(e);}});}},getInfo:function(){return{longname:'Paste text/word',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_handlePasteEvent:function(e){var html=this._clipboardHTML(),ed=this.editor,sel=ed.selection,r;if(ed&&(r=sel.getRng())&&r.text.length>0)ed.execCommand('delete');if(html&&html.length>0)ed.execCommand('mcePasteWord',false,html);return Event.cancel(e);},_insertText:function(content,bLinebreaks){if(content&&content.length>0){if(bLinebreaks){if(this.editor.getParam("paste_create_paragraphs",true)){var rl=this.editor.getParam("paste_replace_list",'\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i<rl.length;i+=2)content=content.replace(new RegExp(rl[i],'gi'),rl[i+1]);content=content.replace(/\r\n\r\n/g,'</p><p>');content=content.replace(/\r\r/g,'</p><p>');content=content.replace(/\n\n/g,'</p><p>');if((pos=content.indexOf('</p><p>'))!=-1){this.editor.execCommand("Delete");var node=this.editor.selection.getNode();var breakElms=[];do{if(node.nodeType==1){if(node.nodeName=="TD"||node.nodeName=="BODY")break;breakElms[breakElms.length]=node;}}while(node=node.parentNode);var before="",after="</p>";before+=content.substring(0,pos);for(var i=0;i<breakElms.length;i++){before+="</"+breakElms[i].nodeName+">";after+="<"+breakElms[(breakElms.length-1)-i].nodeName+">";}before+="<p>";content=before+content.substring(pos+7)+after;}}if(this.editor.getParam("paste_create_linebreaks",true)){content=content.replace(/\r\n/g,'<br />');content=content.replace(/\r/g,'<br />');content=content.replace(/\n/g,'<br />');}}this.editor.execCommand("mceInsertRawHTML",false,content);}},_insertWordContent:function(content){var t=this,ed=t.editor;if(content&&content.length>0){var bull=String.fromCharCode(8226);var middot=String.fromCharCode(183);if(ed.getParam('paste_insert_word_content_callback'))content=ed.execCallback('paste_insert_word_content_callback','before',content);var rl=ed.getParam("paste_replace_list",'\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i<rl.length;i+=2)content=content.replace(new RegExp(rl[i],'gi'),rl[i+1]);if(this.editor.getParam("paste_convert_headers_to_strong",false)){content=content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>','gi'),'<p><b>$1</b></p>');}content=content.replace(new RegExp('tab-stops: list [0-9]+.0pt">','gi'),'">'+"--list--");content=content.replace(new RegExp(bull+"(.*?)<BR>","gi"),"<p>"+middot+"$1</p>");content=content.replace(new RegExp('<SPAN style="mso-list: Ignore">','gi'),"<span>"+bull);content=content.replace(/<o:p><\/o:p>/gi,"");content=content.replace(new RegExp('<br style="page-break-before: always;.*>','gi'),'-- page break --');content=content.replace(new RegExp('<(!--)([^>]*)(--)>','g'),"");if(this.editor.getParam("paste_remove_spans",true))content=content.replace(/<\/?span[^>]*>/gi,"");if(this.editor.getParam("paste_remove_styles",true))content=content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)','gi'),"<$1$3");content=content.replace(/<\/?font[^>]*>/gi,"");switch(this.editor.getParam("paste_strip_class_attributes","all")){case"all":content=content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi,"<$1$3");break;case"mso":content=content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)','gi'),"<$1$3");break;}content=content.replace(new RegExp('href="?'+this._reEscape(""+document.location)+'','gi'),'href="'+this.editor.documentBaseURI.getURI());content=content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi,"<$1$3");content=content.replace(/<\\?\?xml[^>]*>/gi,"");content=content.replace(/<\/?\w+:[^>]*>/gi,"");content=content.replace(/-- page break --\s*<p> <\/p>/gi,"");content=content.replace(/-- page break --/gi,"");if(!this.editor.getParam('force_p_newlines')){content=content.replace('','','gi');content=content.replace('</p>','<br /><br />','gi');}if(!tinymce.isIE&&!this.editor.getParam('force_p_newlines')){content=content.replace(/<\/?p[^>]*>/gi,"");}content=content.replace(/<\/?div[^>]*>/gi,"");if(this.editor.getParam("paste_convert_middot_lists",true)){var div=ed.dom.create("div",null,content);var className=this.editor.getParam("paste_unindented_list_class","unIndentedList");while(this._convertMiddots(div,"--list--"));while(this._convertMiddots(div,middot,className));while(this._convertMiddots(div,bull));content=div.innerHTML;}if(this.editor.getParam("paste_convert_headers_to_strong",false)){content=content.replace(/<h[1-6]> <\/h[1-6]>/gi,'<p> </p>');content=content.replace(/<h[1-6]>/gi,'<p><b>');content=content.replace(/<\/h[1-6]>/gi,'</b></p>');content=content.replace(/<b> <\/b>/gi,'<b> </b>');content=content.replace(/^( )*/gi,'');}content=content.replace(/--list--/gi,"");if(ed.getParam('paste_insert_word_content_callback'))content=ed.execCallback('paste_insert_word_content_callback','after',content);this.editor.execCommand("mceInsertContent",false,content);if(this.editor.getParam('paste_force_cleanup_wordpaste',true)){var ed=this.editor;window.setTimeout(function(){ed.execCommand("mceCleanup");},1);}}},_reEscape:function(s){var l="?.\\*[](){}+^$:";var o="";for(var i=0;i<s.length;i++){var c=s.charAt(i);if(l.indexOf(c)!=-1)o+='\\'+c;else o+=c;}return o;},_convertMiddots:function(div,search,class_name){var ed=this.editor,mdot=String.fromCharCode(183),bull=String.fromCharCode(8226);var nodes,prevul,i,p,ul,li,np,cp,li;nodes=div.getElementsByTagName("p");for(i=0;i<nodes.length;i++){p=nodes[i];if(p.innerHTML.indexOf(search)==0){ul=ed.dom.create("ul");if(class_name)ul.className=class_name;li=ed.dom.create("li");li.innerHTML=p.innerHTML.replace(new RegExp(''+mdot+'|'+bull+'|--list--| ',"gi"),'');ul.appendChild(li);np=p.nextSibling;while(np){if(np.nodeType==3&&new RegExp('^\\s$','m').test(np.nodeValue)){np=np.nextSibling;continue;}if(search==mdot){if(np.nodeType==1&&new RegExp('^o(\\s+| )').test(np.innerHTML)){if(!prevul){prevul=ul;ul=ed.dom.create("ul");prevul.appendChild(ul);}np.innerHTML=np.innerHTML.replace(/^o/,'');}else{if(prevul){ul=prevul;prevul=null;}if(np.nodeType!=1||np.innerHTML.indexOf(search)!=0)break;}}else{if(np.nodeType!=1||np.innerHTML.indexOf(search)!=0)break;}cp=np.nextSibling;li=ed.dom.create("li");li.innerHTML=np.innerHTML.replace(new RegExp(''+mdot+'|'+bull+'|--list--| ',"gi"),'');np.parentNode.removeChild(np);ul.appendChild(li);np=cp;}p.parentNode.replaceChild(ul,p);return true;}}return false;},_clipboardHTML:function(){var div=document.getElementById('_TinyMCE_clipboardHTML');if(!div){var div=document.createElement('DIV');div.id='_TinyMCE_clipboardHTML';with(div.style){visibility='hidden';overflow='hidden';position='absolute';width=1;height=1;}document.body.appendChild(div);}div.innerHTML='';var rng=document.body.createTextRange();rng.moveToElementText(div);rng.execCommand('Paste');var html=div.innerHTML;div.innerHTML='';return html;}});tinymce.PluginManager.add('paste',tinymce.plugins.PastePlugin);})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * $Id: editor_plugin_src.js 738 2008-03-20 20:00:48Z spocke $\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+ var Event = tinymce.dom.Event;\r
+\r
+ tinymce.create('tinymce.plugins.PastePlugin', {\r
+ init : function(ed, url) {\r
+ var t = this;\r
+\r
+ t.editor = ed; \r
+\r
+ // Register commands\r
+ ed.addCommand('mcePasteText', function(ui, v) {\r
+ if (ui) {\r
+ if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) {\r
+ ed.windowManager.open({\r
+ file : url + '/pastetext.htm',\r
+ width : 450,\r
+ height : 400,\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ } else\r
+ t._insertText(clipboardData.getData("Text"), true);\r
+ } else\r
+ t._insertText(v.html, v.linebreaks);\r
+ });\r
+\r
+ ed.addCommand('mcePasteWord', function(ui, v) {\r
+ if (ui) {\r
+ if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) {\r
+ ed.windowManager.open({\r
+ file : url + '/pasteword.htm',\r
+ width : 450,\r
+ height : 400,\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ } else\r
+ t._insertText(t._clipboardHTML());\r
+ } else\r
+ t._insertWordContent(v);\r
+ });\r
+\r
+ ed.addCommand('mceSelectAll', function() {\r
+ ed.execCommand('selectall'); \r
+ });\r
+\r
+ // Register buttons\r
+ ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText', ui : true});\r
+ ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord', ui : true});\r
+ ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'mceSelectAll'});\r
+\r
+ if (ed.getParam("paste_auto_cleanup_on_paste", false)) {\r
+ ed.onPaste.add(function(ed, e) {\r
+ return t._handlePasteEvent(e)\r
+ });\r
+ }\r
+\r
+ if (!tinymce.isIE && ed.getParam("paste_auto_cleanup_on_paste", false)) {\r
+ // Force paste dialog if non IE browser\r
+ ed.onKeyDown.add(function(ed, e) {\r
+ if (e.ctrlKey && e.keyCode == 86) {\r
+ window.setTimeout(function() {\r
+ ed.execCommand("mcePasteText", true);\r
+ }, 1);\r
+\r
+ Event.cancel(e);\r
+ }\r
+ });\r
+ }\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Paste text/word',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ },\r
+\r
+ // Private methods\r
+\r
+ _handlePasteEvent : function(e) {\r
+ var html = this._clipboardHTML(), ed = this.editor, sel = ed.selection, r;\r
+\r
+ // Removes italic, strong etc, the if was needed due to bug #1437114\r
+ if (ed && (r = sel.getRng()) && r.text.length > 0)\r
+ ed.execCommand('delete');\r
+\r
+ if (html && html.length > 0)\r
+ ed.execCommand('mcePasteWord', false, html);\r
+\r
+ return Event.cancel(e);\r
+ },\r
+\r
+ _insertText : function(content, bLinebreaks) { \r
+ if (content && content.length > 0) {\r
+ if (bLinebreaks) { \r
+ // Special paragraph treatment \r
+ if (this.editor.getParam("paste_create_paragraphs", true)) {\r
+ var rl = this.editor.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');\r
+ for (var i=0; i<rl.length; i+=2)\r
+ content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);\r
+\r
+ content = content.replace(/\r\n\r\n/g, '</p><p>');\r
+ content = content.replace(/\r\r/g, '</p><p>');\r
+ content = content.replace(/\n\n/g, '</p><p>');\r
+\r
+ // Has paragraphs \r
+ if ((pos = content.indexOf('</p><p>')) != -1) { \r
+ this.editor.execCommand("Delete"); \r
+\r
+ var node = this.editor.selection.getNode(); \r
+\r
+ // Get list of elements to break \r
+ var breakElms = [];\r
+\r
+ do { \r
+ if (node.nodeType == 1) { \r
+ // Don't break tables and break at body \r
+ if (node.nodeName == "TD" || node.nodeName == "BODY") \r
+ break; \r
+ \r
+ breakElms[breakElms.length] = node; \r
+ } \r
+ } while(node = node.parentNode); \r
+\r
+ var before = "", after = "</p>"; \r
+ before += content.substring(0, pos); \r
+\r
+ for (var i=0; i<breakElms.length; i++) { \r
+ before += "</" + breakElms[i].nodeName + ">"; \r
+ after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; \r
+ } \r
+\r
+ before += "<p>"; \r
+ content = before + content.substring(pos+7) + after; \r
+ } \r
+ } \r
+\r
+ if (this.editor.getParam("paste_create_linebreaks", true)) {\r
+ content = content.replace(/\r\n/g, '<br />');\r
+ content = content.replace(/\r/g, '<br />');\r
+ content = content.replace(/\n/g, '<br />');\r
+ }\r
+ } \r
+ \r
+ this.editor.execCommand("mceInsertRawHTML", false, content); \r
+ }\r
+ },\r
+\r
+ _insertWordContent : function(content) { \r
+ var t = this, ed = t.editor;\r
+\r
+ if (content && content.length > 0) {\r
+ // Cleanup Word content\r
+ var bull = String.fromCharCode(8226);\r
+ var middot = String.fromCharCode(183);\r
+\r
+ if (ed.getParam('paste_insert_word_content_callback'))\r
+ content = ed.execCallback('paste_insert_word_content_callback', 'before', content);\r
+\r
+ var rl = ed.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');\r
+ for (var i=0; i<rl.length; i+=2)\r
+ content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);\r
+\r
+ if (this.editor.getParam("paste_convert_headers_to_strong", false)) {\r
+ content = content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>', 'gi'), '<p><b>$1</b></p>');\r
+ }\r
+\r
+ content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--");\r
+ content = content.replace(new RegExp(bull + "(.*?)<BR>", "gi"), "<p>" + middot + "$1</p>");\r
+ content = content.replace(new RegExp('<SPAN style="mso-list: Ignore">', 'gi'), "<span>" + bull); // Covert to bull list\r
+ content = content.replace(/<o:p><\/o:p>/gi, "");\r
+ content = content.replace(new RegExp('<br style="page-break-before: always;.*>', 'gi'), '-- page break --'); // Replace pagebreaks\r
+ content = content.replace(new RegExp('<(!--)([^>]*)(--)>', 'g'), ""); // Word comments\r
+\r
+ if (this.editor.getParam("paste_remove_spans", true))\r
+ content = content.replace(/<\/?span[^>]*>/gi, "");\r
+\r
+ if (this.editor.getParam("paste_remove_styles", true))\r
+ content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3");\r
+\r
+ content = content.replace(/<\/?font[^>]*>/gi, "");\r
+\r
+ // Strips class attributes.\r
+ switch (this.editor.getParam("paste_strip_class_attributes", "all")) {\r
+ case "all":\r
+ content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");\r
+ break;\r
+\r
+ case "mso":\r
+ content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3");\r
+ break;\r
+ }\r
+\r
+ content = content.replace(new RegExp('href="?' + this._reEscape("" + document.location) + '', 'gi'), 'href="' + this.editor.documentBaseURI.getURI());\r
+ content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");\r
+ content = content.replace(/<\\?\?xml[^>]*>/gi, "");\r
+ content = content.replace(/<\/?\w+:[^>]*>/gi, "");\r
+ content = content.replace(/-- page break --\s*<p> <\/p>/gi, ""); // Remove pagebreaks\r
+ content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks\r
+\r
+ // content = content.replace(/\/? */gi, ""); \r
+ // content = content.replace(/<p> <\/p>/gi, '');\r
+\r
+ if (!this.editor.getParam('force_p_newlines')) {\r
+ content = content.replace('', '' ,'gi');\r
+ content = content.replace('</p>', '<br /><br />' ,'gi');\r
+ }\r
+\r
+ if (!tinymce.isIE && !this.editor.getParam('force_p_newlines')) {\r
+ content = content.replace(/<\/?p[^>]*>/gi, "");\r
+ }\r
+\r
+ content = content.replace(/<\/?div[^>]*>/gi, "");\r
+\r
+ // Convert all middlot lists to UL lists\r
+ if (this.editor.getParam("paste_convert_middot_lists", true)) {\r
+ var div = ed.dom.create("div", null, content);\r
+\r
+ // Convert all middot paragraphs to li elements\r
+ var className = this.editor.getParam("paste_unindented_list_class", "unIndentedList");\r
+\r
+ while (this._convertMiddots(div, "--list--")) ; // bull\r
+ while (this._convertMiddots(div, middot, className)) ; // Middot\r
+ while (this._convertMiddots(div, bull)) ; // bull\r
+\r
+ content = div.innerHTML;\r
+ }\r
+\r
+ // Replace all headers with strong and fix some other issues\r
+ if (this.editor.getParam("paste_convert_headers_to_strong", false)) {\r
+ content = content.replace(/<h[1-6]> <\/h[1-6]>/gi, '<p> </p>');\r
+ content = content.replace(/<h[1-6]>/gi, '<p><b>');\r
+ content = content.replace(/<\/h[1-6]>/gi, '</b></p>');\r
+ content = content.replace(/<b> <\/b>/gi, '<b> </b>');\r
+ content = content.replace(/^( )*/gi, '');\r
+ }\r
+\r
+ content = content.replace(/--list--/gi, ""); // Remove --list--\r
+\r
+ if (ed.getParam('paste_insert_word_content_callback'))\r
+ content = ed.execCallback('paste_insert_word_content_callback', 'after', content);\r
+\r
+ // Insert cleaned content\r
+ this.editor.execCommand("mceInsertContent", false, content);\r
+\r
+ if (this.editor.getParam('paste_force_cleanup_wordpaste', true)) {\r
+ var ed = this.editor;\r
+\r
+ window.setTimeout(function() {\r
+ ed.execCommand("mceCleanup");\r
+ }, 1); // Do normal cleanup detached from this thread\r
+ }\r
+ }\r
+ },\r
+\r
+ _reEscape : function(s) {\r
+ var l = "?.\\*[](){}+^$:";\r
+ var o = "";\r
+\r
+ for (var i=0; i<s.length; i++) {\r
+ var c = s.charAt(i);\r
+\r
+ if (l.indexOf(c) != -1)\r
+ o += '\\' + c;\r
+ else\r
+ o += c;\r
+ }\r
+\r
+ return o;\r
+ },\r
+\r
+ _convertMiddots : function(div, search, class_name) {\r
+ var ed = this.editor, mdot = String.fromCharCode(183), bull = String.fromCharCode(8226);\r
+ var nodes, prevul, i, p, ul, li, np, cp, li;\r
+\r
+ nodes = div.getElementsByTagName("p");\r
+ for (i=0; i<nodes.length; i++) {\r
+ p = nodes[i];\r
+\r
+ // Is middot\r
+ if (p.innerHTML.indexOf(search) == 0) {\r
+ ul = ed.dom.create("ul");\r
+\r
+ if (class_name)\r
+ ul.className = class_name;\r
+\r
+ // Add the first one\r
+ li = ed.dom.create("li");\r
+ li.innerHTML = p.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--| ', "gi"), '');\r
+ ul.appendChild(li);\r
+\r
+ // Add the rest\r
+ np = p.nextSibling;\r
+ while (np) {\r
+ // If the node is whitespace, then\r
+ // ignore it and continue on.\r
+ if (np.nodeType == 3 && new RegExp('^\\s$', 'm').test(np.nodeValue)) {\r
+ np = np.nextSibling;\r
+ continue;\r
+ }\r
+\r
+ if (search == mdot) {\r
+ if (np.nodeType == 1 && new RegExp('^o(\\s+| )').test(np.innerHTML)) {\r
+ // Second level of nesting\r
+ if (!prevul) {\r
+ prevul = ul;\r
+ ul = ed.dom.create("ul");\r
+ prevul.appendChild(ul);\r
+ }\r
+ np.innerHTML = np.innerHTML.replace(/^o/, '');\r
+ } else {\r
+ // Pop the stack if we're going back up to the first level\r
+ if (prevul) {\r
+ ul = prevul;\r
+ prevul = null;\r
+ }\r
+ // Not element or middot paragraph\r
+ if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)\r
+ break;\r
+ }\r
+ } else {\r
+ // Not element or middot paragraph\r
+ if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)\r
+ break;\r
+ }\r
+\r
+ cp = np.nextSibling;\r
+ li = ed.dom.create("li");\r
+ li.innerHTML = np.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--| ', "gi"), '');\r
+ np.parentNode.removeChild(np);\r
+ ul.appendChild(li);\r
+ np = cp;\r
+ }\r
+\r
+ p.parentNode.replaceChild(ul, p);\r
+\r
+ return true;\r
+ }\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ _clipboardHTML : function() {\r
+ var div = document.getElementById('_TinyMCE_clipboardHTML');\r
+\r
+ if (!div) {\r
+ var div = document.createElement('DIV');\r
+ div.id = '_TinyMCE_clipboardHTML';\r
+\r
+ with (div.style) {\r
+ visibility = 'hidden';\r
+ overflow = 'hidden';\r
+ position = 'absolute';\r
+ width = 1;\r
+ height = 1;\r
+ }\r
+\r
+ document.body.appendChild(div);\r
+ }\r
+\r
+ div.innerHTML = '';\r
+ var rng = document.body.createTextRange();\r
+ rng.moveToElementText(div);\r
+ rng.execCommand('Paste');\r
+ var html = div.innerHTML;\r
+ div.innerHTML = '';\r
+ return html;\r
+ }\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('paste', tinymce.plugins.PastePlugin);\r
+})();
\ No newline at end of file
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+function saveContent() {\r
+ if (document.forms[0].htmlSource.value == '') {\r
+ tinyMCEPopup.close();\r
+ return false;\r
+ }\r
+\r
+ tinyMCEPopup.execCommand('mcePasteText', false, {\r
+ html : document.forms[0].htmlSource.value,\r
+ linebreaks : document.forms[0].linebreaks.checked\r
+ });\r
+\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function onLoadInit() {\r
+ tinyMCEPopup.resizeToInnerSize();\r
+\r
+ // Remove Gecko spellchecking\r
+ if (tinymce.isGecko)\r
+ document.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");\r
+\r
+ resizeInputs();\r
+}\r
+\r
+var wHeight=0, wWidth=0, owHeight=0, owWidth=0;\r
+\r
+function resizeInputs() {\r
+ if (!tinymce.isIE) {\r
+ wHeight = self.innerHeight-80;\r
+ wWidth = self.innerWidth-17;\r
+ } else {\r
+ wHeight = document.body.clientHeight-80;\r
+ wWidth = document.body.clientWidth-17;\r
+ }\r
+\r
+ document.forms[0].htmlSource.style.height = Math.abs(wHeight) + 'px';\r
+ document.forms[0].htmlSource.style.width = Math.abs(wWidth) + 'px';\r
+}\r
+\r
+tinyMCEPopup.onInit.add(onLoadInit);
\ No newline at end of file
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+function saveContent() {\r
+ var html = document.getElementById("frmData").contentWindow.document.body.innerHTML;\r
+\r
+ if (html == ''){\r
+ tinyMCEPopup.close();\r
+ return false;\r
+ }\r
+\r
+ tinyMCEPopup.execCommand('mcePasteWord', false, html);\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function onLoadInit() {\r
+ tinyMCEPopup.resizeToInnerSize();\r
+\r
+ // Fix for endless reloading in FF\r
+ window.setTimeout(createIFrame, 10);\r
+}\r
+\r
+function createIFrame() {\r
+ document.getElementById('iframecontainer').innerHTML = '<iframe id="frmData" name="frmData" class="sourceIframe" src="blank.htm" height="280" width="400" frameborder="0" style="background-color:#FFFFFF; width:100%;" dir="ltr" wrap="soft"></iframe>';\r
+}\r
+\r
+var wHeight=0, wWidth=0, owHeight=0, owWidth=0;\r
+\r
+function initIframe(doc) {\r
+ var dir = tinyMCEPopup.editor.settings.directionality;\r
+\r
+ doc.body.dir = dir;\r
+\r
+ // Remove Gecko spellchecking\r
+ if (tinymce.isGecko)\r
+ doc.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");\r
+\r
+ resizeInputs();\r
+}\r
+\r
+function resizeInputs() {\r
+ if (!tinymce.isIE) {\r
+ wHeight = self.innerHeight - 80;\r
+ wWidth = self.innerWidth - 18;\r
+ } else {\r
+ wHeight = document.body.clientHeight - 80;\r
+ wWidth = document.body.clientWidth - 18;\r
+ }\r
+\r
+ var elm = document.getElementById('frmData');\r
+ if (elm) {\r
+ elm.style.height = Math.abs(wHeight) + 'px';\r
+ elm.style.width = Math.abs(wWidth) + 'px';\r
+ }\r
+}\r
+\r
+tinyMCEPopup.onInit.add(onLoadInit);\r
--- /dev/null
+tinyMCE.addI18n('en.paste_dlg',{\r
+text_title:"Use CTRL+V on your keyboard to paste the text into the window.",\r
+text_linebreaks:"Keep linebreaks",\r
+word_title:"Use CTRL+V on your keyboard to paste the text into the window."\r
+});
\ No newline at end of file
--- /dev/null
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>{#paste.paste_text_desc}</title>\r
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="js/pastetext.js"></script>\r
+ <base target="_self" />\r
+</head>\r
+<body onresize="resizeInputs();" style="display:none; overflow:hidden;">\r
+<form name="source" onsubmit="saveContent();return false;" action="#">\r
+ <div style="float: left" class="title">{#paste.paste_text_desc}</div>\r
+\r
+ <div style="float: right">\r
+ <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>\r
+ </div>\r
+\r
+ <br style="clear: both" />\r
+\r
+ <div>{#paste_dlg.text_title}</div>\r
+\r
+ <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>\r
+\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="submit" name="insert" value="{#insert}" id="insert" />\r
+ </div>\r
+\r
+ <div style="float: right">\r
+ <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
+ </div>\r
+ </div>\r
+</form>\r
+</body> \r
+</html>
\ No newline at end of file
--- /dev/null
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
+ <title>{#paste.paste_word_desc}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="js/pasteword.js"></script>\r
+ <link href="css/pasteword.css" rel="stylesheet" type="text/css" />\r
+ <base target="_self" />\r
+</head>\r
+<body onresize="resizeInputs();" style="display:none; overflow:hidden;">\r
+ <form name="source" onsubmit="saveContent();" action="#">\r
+ <div class="title">{#paste.paste_word_desc}</div>\r
+\r
+ <div>{#paste_dlg.word_title}</div>\r
+\r
+ <div id="iframecontainer"></div>\r
+\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="button" id="insert" name="insert" value="{#insert}" onclick="saveContent();" />\r
+ </div>\r
+\r
+ <div style="float: right">\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+ </div>\r
+ </div>\r
+ </form>\r
+</body>\r
+</html>\r
+++ /dev/null
-This is the location you place TinyMCE plugins.
-/* stylesheet for advsearchreplace plugin*/\r
+.panel_wrapper {height:85px;}\r
+.panel_wrapper div.current {height:85px;}\r
\r
-.panel_wrapper { height: 85px; }\r
-.panel_wrapper div.current { height: 85px; }\r
-\r
-/* MS IE only styles */\r
-* html .panel_wrapper { height: 100px; }\r
-* html .panel_wrapper div.current { height: 100px; }\r
-\r
-#replaceBtn, #replaceAllBtn {\r
- padding-bottom: 2px;\r
- font-weight: bold;\r
- width: 90px;\r
- height: 21px;\r
- border: 0;\r
- cursor: pointer;\r
-}\r
-\r
-#replaceBtn { background: url(../images/replace_button_bg.gif); }\r
-#replaceAllBtn { background: url(../images/replace_all_button_bg.gif); }\r
+/* IE */\r
+* html .panel_wrapper {height:100px;}\r
+* html .panel_wrapper div.current {height:100px;}\r
-tinyMCE.importPluginLanguagePack('searchreplace');var TinyMCE_SearchReplacePlugin={getInfo:function(){return{longname:'Search/Replace',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){inst.addShortcut('ctrl','f','lang_searchreplace_search_desc','mceSearch',true);},getControlHTML:function(cn){switch(cn){case"search":return tinyMCE.getButtonHTML(cn,'lang_searchreplace_search_desc','{$pluginurl}/images/search.gif','mceSearch',true);case"replace":return tinyMCE.getButtonHTML(cn,'lang_searchreplace_replace_desc','{$pluginurl}/images/replace.gif','mceSearchReplace',true)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),selectedText=inst.selection.getSelectedText(),rng;function defValue(key,default_value){value[key]=typeof(value[key])=="undefined"?default_value:value[key]}function replaceSel(search_str,str,back){if(!inst.selection.isCollapsed()){if(tinyMCE.isRealIE)inst.selection.getRng().duplicate().pasteHTML(str);else inst.execCommand('mceInsertContent',false,str)}}if(!value)value=[];defValue("editor_id",editor_id);defValue("searchstring",selectedText);defValue("replacestring",null);defValue("replacemode","none");defValue("casesensitive",false);defValue("backwards",false);defValue("wrap",false);defValue("wholeword",false);defValue("inline","yes");defValue("resizable","no");switch(command){case"mceSearch":if(user_interface){var template=new Array();template['file']='../../plugins/searchreplace/searchreplace.htm';template['width']=380;template['height']=155+(tinyMCE.isNS7?20:0)+(tinyMCE.isMSIE?15:0);template['width']+=tinyMCE.getLang('lang_searchreplace_delta_width',0);template['height']+=tinyMCE.getLang('lang_searchreplace_delta_height',0);inst.selection.collapse(true);tinyMCE.openWindow(template,value)}else{var win=tinyMCE.getInstanceById(editor_id).contentWindow;var doc=tinyMCE.getInstanceById(editor_id).contentWindow.document;var body=tinyMCE.getInstanceById(editor_id).contentWindow.document.body;var awin=value.win,found;if(body.innerHTML==""){awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(value['replacemode']=="current"){replaceSel(value['string'],value['replacestring'],value['backwards']);value['replacemode']="none";}inst.selection.collapse(value['backwards']);if(tinyMCE.isMSIE){var rng=inst.selection.getRng();var flags=0;if(value['wholeword'])flags=flags|2;if(value['casesensitive'])flags=flags|4;if(!rng.findText){awin.alert('This operation is currently not supported by this browser.');return true}if(value['replacemode']=="all"){found=false;while(rng.findText(value['string'],value['backwards']?-1:1,flags)){found=true;rng.scrollIntoView();rng.select();replaceSel(value['string'],value['replacestring'],value['backwards'])}if(found)awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select()}else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'))}else{if(value['replacemode']=="all"){found=false;while(win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false)){found=true;replaceSel(value['string'],value['replacestring'],value['backwards'])}if(found)awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(!win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'))}}return true;case"mceSearchReplace":value['replacestring']="";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true}return false}};tinyMCE.addPlugin("searchreplace",TinyMCE_SearchReplacePlugin);
\ No newline at end of file
+(function(){tinymce.create('tinymce.plugins.SearchReplacePlugin',{init:function(ed,url){function open(m){ed.windowManager.open({file:url+'/searchreplace.htm',width:420+parseInt(ed.getLang('searchreplace.delta_width',0)),height:160+parseInt(ed.getLang('searchreplace.delta_height',0)),inline:1,auto_focus:0},{mode:m,search_string:ed.selection.getContent({format:'text'}),plugin_url:url});};ed.addCommand('mceSearch',function(){open('search');});ed.addCommand('mceReplace',function(){open('replace');});ed.addButton('search',{title:'searchreplace.search_desc',cmd:'mceSearch'});ed.addButton('replace',{title:'searchreplace.replace_desc',cmd:'mceReplace'});ed.addShortcut('ctrl+f','searchreplace.search_desc','mceSearch');},getInfo:function(){return{longname:'Search/Replace',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('searchreplace',tinymce.plugins.SearchReplacePlugin);})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
+ * $Id: editor_plugin_src.js 686 2008-03-09 18:13:49Z spocke $\r
*\r
* @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
*/\r
\r
-tinyMCE.importPluginLanguagePack('searchreplace');\r
-\r
-var TinyMCE_SearchReplacePlugin = {\r
- getInfo : function() {\r
- return {\r
- longname : 'Search/Replace',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',\r
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
- };\r
- },\r
-\r
- initInstance : function (inst) {\r
- inst.addShortcut('ctrl', 'f', 'lang_searchreplace_search_desc', 'mceSearch', true);\r
- // No CTRL+R for "replace" because browsers will reload page instead of executing plugin\r
- },\r
-\r
- getControlHTML : function (cn) {\r
- switch (cn) {\r
- case "search" :\r
- return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_search_desc', '{$pluginurl}/images/search.gif','mceSearch', true);\r
-\r
- case "replace" :\r
- return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_replace_desc', '{$pluginurl}/images/replace.gif', 'mceSearchReplace', true);\r
- }\r
-\r
- return "";\r
- },\r
-\r
- execCommand : function (editor_id, element, command, user_interface, value) {\r
- var inst = tinyMCE.getInstanceById(editor_id), selectedText = inst.selection.getSelectedText(), rng;\r
-\r
- function defValue(key, default_value) {\r
- value[key] = typeof(value[key]) == "undefined" ? default_value : value[key];\r
- }\r
-\r
- function replaceSel(search_str, str, back) {\r
- if (!inst.selection.isCollapsed()) {\r
- if (tinyMCE.isRealIE)\r
- inst.selection.getRng().duplicate().pasteHTML(str); // Needs to be duplicated due to selection bug in IE\r
- else\r
- inst.execCommand('mceInsertContent', false, str);\r
- }\r
+(function() {\r
+ tinymce.create('tinymce.plugins.SearchReplacePlugin', {\r
+ init : function(ed, url) {\r
+ function open(m) {\r
+ ed.windowManager.open({\r
+ file : url + '/searchreplace.htm',\r
+ width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),\r
+ height : 160 + parseInt(ed.getLang('searchreplace.delta_height', 0)),\r
+ inline : 1,\r
+ auto_focus : 0\r
+ }, {\r
+ mode : m,\r
+ search_string : ed.selection.getContent({format : 'text'}),\r
+ plugin_url : url\r
+ });\r
+ };\r
+\r
+ // Register commands\r
+ ed.addCommand('mceSearch', function() {\r
+ open('search');\r
+ });\r
+\r
+ ed.addCommand('mceReplace', function() {\r
+ open('replace');\r
+ });\r
+\r
+ // Register buttons\r
+ ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});\r
+ ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});\r
+\r
+ ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch');\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Search/Replace',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
}\r
+ });\r
\r
- if (!value)\r
- value = [];\r
-\r
- defValue("editor_id", editor_id);\r
- defValue("searchstring", selectedText);\r
- defValue("replacestring", null);\r
- defValue("replacemode", "none");\r
- defValue("casesensitive", false);\r
- defValue("backwards", false);\r
- defValue("wrap", false);\r
- defValue("wholeword", false);\r
- defValue("inline", "yes");\r
- defValue("resizable", "no");\r
-\r
- switch (command) {\r
- case "mceSearch" :\r
- if (user_interface) {\r
- var template = new Array();\r
-\r
- template['file'] = '../../plugins/searchreplace/searchreplace.htm';\r
- template['width'] = 380;\r
- template['height'] = 155 + (tinyMCE.isNS7 ? 20 : 0) + (tinyMCE.isMSIE ? 15 : 0);\r
- template['width'] += tinyMCE.getLang('lang_searchreplace_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_searchreplace_delta_height', 0);\r
-\r
- inst.selection.collapse(true);\r
-\r
- tinyMCE.openWindow(template, value);\r
- } else {\r
- var win = tinyMCE.getInstanceById(editor_id).contentWindow;\r
- var doc = tinyMCE.getInstanceById(editor_id).contentWindow.document;\r
- var body = tinyMCE.getInstanceById(editor_id).contentWindow.document.body;\r
- var awin = value.win, found;\r
-\r
- if (body.innerHTML == "") {\r
- awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));\r
- return true;\r
- }\r
-\r
- if (value['replacemode'] == "current") {\r
- replaceSel(value['string'], value['replacestring'], value['backwards']);\r
- value['replacemode'] = "none";\r
- //tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value);\r
- //return true;\r
- }\r
-\r
- inst.selection.collapse(value['backwards']);\r
-\r
- if (tinyMCE.isMSIE) {\r
- var rng = inst.selection.getRng();\r
- var flags = 0;\r
- if (value['wholeword'])\r
- flags = flags | 2;\r
-\r
- if (value['casesensitive'])\r
- flags = flags | 4;\r
-\r
- if (!rng.findText) {\r
- awin.alert('This operation is currently not supported by this browser.');\r
- return true;\r
- }\r
-\r
- if (value['replacemode'] == "all") {\r
- found = false;\r
-\r
- while (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) {\r
- found = true;\r
- rng.scrollIntoView();\r
- rng.select();\r
- replaceSel(value['string'], value['replacestring'], value['backwards']);\r
- }\r
-\r
- if (found)\r
- awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));\r
- else\r
- awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));\r
-\r
- return true;\r
- }\r
-\r
- if (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) {\r
- rng.scrollIntoView();\r
- rng.select();\r
- } else\r
- awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));\r
- } else {\r
- if (value['replacemode'] == "all") {\r
- found = false;\r
-\r
- while (win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) {\r
- found = true;\r
- replaceSel(value['string'], value['replacestring'], value['backwards']);\r
- }\r
-\r
- if (found)\r
- awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));\r
- else\r
- awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));\r
-\r
- return true;\r
- }\r
-\r
- if (!win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false))\r
- awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));\r
- }\r
- }\r
-\r
- return true;\r
-\r
- case "mceSearchReplace" :\r
- value['replacestring'] = "";\r
- tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false);\r
- return true;\r
- }\r
-\r
- return false;\r
- }\r
-};\r
-\r
-tinyMCE.addPlugin("searchreplace", TinyMCE_SearchReplacePlugin);
\ No newline at end of file
+ // Register plugin\r
+ tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin);\r
+})();
\ No newline at end of file
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var SearchReplaceDialog = {\r
+ init : function(ed) {\r
+ var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");\r
+\r
+ this.switchMode(m);\r
+\r
+ f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");\r
+\r
+ // Focus input field\r
+ f[m + '_panel_searchstring'].focus();\r
+ },\r
+\r
+ switchMode : function(m) {\r
+ var f, lm = this.lastMode;\r
+\r
+ if (lm != m) {\r
+ f = document.forms[0];\r
+\r
+ if (lm) {\r
+ f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;\r
+ f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;\r
+ f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;\r
+ f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;\r
+ }\r
+\r
+ mcTabs.displayTab(m + '_tab', m + '_panel');\r
+ document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";\r
+ document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";\r
+ this.lastMode = m;\r
+ }\r
+ },\r
+\r
+ searchNext : function(a) {\r
+ var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;\r
+\r
+ // Get input\r
+ f = document.forms[0];\r
+ s = f[m + '_panel_searchstring'].value;\r
+ b = f[m + '_panel_backwardsu'].checked;\r
+ ca = f[m + '_panel_casesensitivebox'].checked;\r
+ rs = f['replace_panel_replacestring'].value;\r
+\r
+ function fix() {\r
+ // Correct Firefox graphics glitches\r
+ r = se.getRng().cloneRange();\r
+ ed.getDoc().execCommand('SelectAll', false, null);\r
+ se.setRng(r);\r
+ };\r
+\r
+ function replace() {\r
+ if (tinymce.isIE)\r
+ ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE\r
+ else\r
+ ed.getDoc().execCommand('InsertHTML', false, rs);\r
+ };\r
+\r
+ // IE flags\r
+ if (ca)\r
+ fl = fl | 4;\r
+\r
+ switch (a) {\r
+ case 'all':\r
+ if (tinymce.isIE) {\r
+ while (r.findText(s, b ? -1 : 1, fl)) {\r
+ r.scrollIntoView();\r
+ r.select();\r
+ replace();\r
+ fo = 1;\r
+ }\r
+\r
+ tinyMCEPopup.storeSelection();\r
+ } else {\r
+ while (w.find(s, ca, b, false, false, false, false)) {\r
+ replace();\r
+ fo = 1;\r
+ }\r
+ }\r
+\r
+ if (fo)\r
+ wm.alert(ed.getLang('searchreplace_dlg.allreplaced'));\r
+ else\r
+ wm.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+\r
+ return;\r
+\r
+ case 'current':\r
+ replace();\r
+ break;\r
+ }\r
+\r
+ se.collapse(b);\r
+ r = se.getRng();\r
+\r
+ // Whats the point\r
+ if (!s)\r
+ return;\r
+\r
+ if (tinymce.isIE) {\r
+ if (r.findText(s, b ? -1 : 1, fl)) {\r
+ r.scrollIntoView();\r
+ r.select();\r
+ } else\r
+ wm.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+\r
+ tinyMCEPopup.storeSelection();\r
+ } else {\r
+ if (!w.find(s, ca, b, false, false, false, false))\r
+ wm.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+ else\r
+ fix();\r
+ }\r
+ }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);\r
+++ /dev/null
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- // start with appropiate tab\r
- var task = (tinyMCE.getWindowArg("replacestring") != null) ? "replace" : "search";\r
- mcTabs.displayTab(task + '_tab', task +'_panel');\r
- manageReplaceButtons();\r
- \r
- var formObj = document.forms[0];\r
-\r
- formObj[task + "_panel_searchstring"].value = tinyMCE.getWindowArg("searchstring");\r
- formObj["replace_panel_replacestring"].value = (tinyMCE.getWindowArg("replacestring") != null) ? tinyMCE.getWindowArg("replacestring") : "";\r
- formObj[task + "_panel_casesensitivebox"].checked = tinyMCE.getWindowArg("casesensitive");\r
- formObj[task + "_panel_backwardsu"].checked = tinyMCE.getWindowArg("backwards");\r
- formObj[task + "_panel_backwardsd"].checked = !tinyMCE.getWindowArg("backwards");\r
-}\r
-\r
-function searchNext(replacemode) {\r
- // "search" or "replace" mode of operation?\r
- var task = (document.getElementById("search_tab").className == "current") ? "search" : "replace";\r
-\r
- var formObj = document.forms[0];\r
-\r
- if (task == "replace") {\r
- // Whats the point?\r
- if (formObj[task + "_panel_searchstring"].value == "" || formObj[task + "_panel_searchstring"].value == formObj[task + "_panel_replacestring"].value)\r
- return false;\r
- }\r
-\r
- // Do search\r
- tinyMCEPopup.execCommand('mceSearch', false, { \r
- string : formObj[task + "_panel_searchstring"].value,\r
- replacestring : formObj["replace_panel_replacestring"].value,\r
- replacemode : replacemode,\r
- casesensitive : formObj[task + "_panel_casesensitivebox"].checked,\r
- backwards : formObj[task + "_panel_backwardsu"].checked,\r
- win : window\r
- }, false);\r
-\r
- window.focus();\r
-\r
- return false;\r
-}\r
-\r
-function cancelAction() {\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function manageReplaceButtons() {\r
- // "search" or "replace" mode of operation?\r
- var task = (document.getElementById("search_tab").className == "current") ? "search" : "replace";\r
- document.getElementById("replace_buttons").style.visibility = (task == "replace") ? "visible" : "hidden";\r
-}\r
-\r
-function copyValues(link) {\r
- // check if tab is already active\r
- var tab = link;\r
- while (tab.tagName && tab.tagName.toLowerCase() != "li") tab = tab.parentNode;\r
- if (tab.className) return false; // tab is already active -> no need to copy any values!\r
-\r
- // copy values from one panel to the other (if they exist there)\r
- var from_panel_name = tab.id.match(/^search/i) ? "replace_panel" : "search_panel";\r
- var to_panel_name = (from_panel_name == "search_panel") ? "replace_panel" : "search_panel";\r
-\r
- // find all elements with IDs to copy their values\r
- var elms = document.getElementById(from_panel_name).getElementsByTagName("*");\r
- for (var i = 0; i < elms.length; i++) {\r
- if (elms[i].id && elms[i].id != "") {\r
- var checked = "undefined";\r
- if (elms[i].type.toLowerCase() == "checkbox" || elms[i].type.toLowerCase() == "radio")\r
- checked = elms[i].checked;\r
-\r
- // copy values if element exists in other panel\r
- var to_elm_name = to_panel_name + elms[i].id.substring(from_panel_name.length, elms[i].id.length);\r
- var to_elm = document.getElementById(to_elm_name);\r
- if (to_elm) {\r
- if (checked != "undefined")\r
- to_elm.checked = checked;\r
- else\r
- to_elm.value = elms[i].value;\r
- }\r
- }\r
- }\r
-\r
- return false;\r
-}
\ No newline at end of file
+++ /dev/null
-// UK lang variables\r
-\r
-tinyMCE.addToLang('',{\r
-searchreplace_search_desc : 'Find',\r
-searchreplace_searchnext_desc : 'Find again',\r
-searchreplace_replace_desc : 'Find/Replace',\r
-searchreplace_notfound : 'The search has been completed. The search string could not be found.',\r
-searchreplace_search_title : 'Find',\r
-searchreplace_replace_title : 'Find/Replace',\r
-searchreplace_allreplaced : 'All occurrences of the search string were replaced.',\r
-searchreplace_findwhat : 'Find what',\r
-searchreplace_replacewith : 'Replace with',\r
-searchreplace_direction : 'Direction',\r
-searchreplace_up : 'Up',\r
-searchreplace_down : 'Down',\r
-searchreplace_case : 'Match case',\r
-searchreplace_findnext : 'Find next',\r
-searchreplace_replace : 'Replace',\r
-searchreplace_replaceall : 'Replace all',\r
-searchreplace_cancel : 'Cancel'\r
-});\r
--- /dev/null
+tinyMCE.addI18n('en.searchreplace_dlg',{\r
+searchnext_desc:"Find again",\r
+notfound:"The search has been completed. The search string could not be found.",\r
+search_title:"Find",\r
+replace_title:"Find/Replace",\r
+allreplaced:"All occurrences of the search string were replaced.",\r
+findwhat:"Find what",\r
+replacewith:"Replace with",\r
+direction:"Direction",\r
+up:"Up",\r
+down:"Down",\r
+mcase:"Match case",\r
+findnext:"Find next",\r
+replace:"Replace",\r
+replaceall:"Replace all"\r
+});
\ No newline at end of file
+++ /dev/null
-Check the TinyMCE documentation for details on this plugin.\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_searchreplace_replace_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/searchreplace.js"></script>\r
+ <title>{#searchreplace_dlg.replace_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="js/searchreplace.js"></script>\r
<link rel="stylesheet" type="text/css" href="css/searchreplace.css" />\r
<base target="_self" />\r
</head>\r
-<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none; margin: 4px;">\r
-<form onsubmit="return false;" action="#">\r
+<body style="display:none;">\r
+<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">\r
<div class="tabs">\r
<ul>\r
- <li id="search_tab"><span><a href="javascript:mcTabs.displayTab('search_tab','search_panel');manageReplaceButtons();" onmousedown="return copyValues(this);">{$lang_searchreplace_search_desc}</a></span></li>\r
- <li id="replace_tab"><span><a href="javascript:mcTabs.displayTab('replace_tab','replace_panel');manageReplaceButtons();" onmousedown="return copyValues(this);">{$lang_searchreplace_replace}</a></span></li>\r
+ <li id="search_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>\r
+ <li id="replace_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>\r
</ul>\r
</div>\r
\r
<div class="panel_wrapper">\r
-\r
<div id="search_panel" class="panel">\r
<table border="0" cellspacing="0" cellpadding="2">\r
<tr>\r
- <td><label for="search_panel_searchstring">{$lang_searchreplace_findwhat}</label></td>\r
+ <td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>\r
<td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" /></td>\r
</tr>\r
<tr>\r
<td colspan="2">\r
<table border="0" cellspacing="0" cellpadding="0" class="direction">\r
<tr>\r
- <td><label>{$lang_searchreplace_direction}</label></td>\r
+ <td><label>{#searchreplace_dlg.direction}</label></td>\r
<td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>\r
- <td><label for="search_panel_backwardsu">{$lang_searchreplace_up}</label></td>\r
- <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" /></td>\r
- <td><label for="search_panel_backwardsd">{$lang_searchreplace_down}</label></td>\r
+ <td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>\r
+ <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>\r
+ <td><label for="search_panel_backwardsd">{#searchreplace_dlg.down}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellspacing="0" cellpadding="0">\r
<tr>\r
<td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>\r
- <td><label for="search_panel_casesensitivebox">{$lang_searchreplace_case}</label></td>\r
+ <td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>\r
</tr>\r
</table>\r
</td>\r
<div id="replace_panel" class="panel">\r
<table border="0" cellspacing="0" cellpadding="2">\r
<tr>\r
- <td><label for="replace_panel_searchstring">{$lang_searchreplace_findwhat}</label></td>\r
+ <td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>\r
<td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" /></td>\r
</tr>\r
<tr>\r
- <td><label for="replace_panel_replacestring">{$lang_searchreplace_replacewith}</label></td>\r
+ <td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>\r
<td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" /></td>\r
</tr>\r
<tr>\r
<td colspan="2">\r
<table border="0" cellspacing="0" cellpadding="0" class="direction">\r
<tr>\r
- <td><label>{$lang_searchreplace_direction}</label></td>\r
+ <td><label>{#searchreplace_dlg.direction}</label></td>\r
<td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>\r
- <td><label for="replace_panel_backwardsu">{$lang_searchreplace_up}</label></td>\r
- <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" /></td>\r
- <td><label for="replace_panel_backwardsd">{$lang_searchreplace_down}</label></td>\r
+ <td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>\r
+ <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>\r
+ <td><label for="replace_panel_backwardsd">{#searchreplace_dlg.down}</label></td>\r
</tr>\r
</table>\r
</td>\r
<table border="0" cellspacing="0" cellpadding="0">\r
<tr>\r
<td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>\r
- <td><label for="replace_panel_casesensitivebox">{$lang_searchreplace_case}</label></td>\r
+ <td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>\r
</tr>\r
</table>\r
</td>\r
\r
<div class="mceActionPanel">\r
<div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{$lang_searchreplace_findnext}" onclick="searchNext('none');" />\r
- <span id="replace_buttons">\r
- <input type="button" id="replaceBtn" name="replaceBtn" value="{$lang_searchreplace_replace}" onclick="searchNext('current');" />\r
- <input type="button" id="replaceAllBtn" name="replaceAllBtn" value="{$lang_searchreplace_replaceall}" onclick="searchNext('all');;" />\r
- </span>\r
+ <input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />\r
+ <input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />\r
+ <input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />\r
</div>\r
\r
<div style="float: right"> \r
- <input type="button" id="cancel" name="cancel" value="{$lang_searchreplace_cancel}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
</form>\r
+++ /dev/null
-Version 1.0.2 (2006-08-02)\r
- Added new spellchecker_report_mispellings option, contributed by Jeremy B.\r
- Fixed various regexp bugs and issues. Some where contributed by Jeremy B.\r
- Fixed the Google speller class so it uses curl, patch contributed by Yuriy Kramar.\r
- Fixed encoding issues with language specific characters, patch contributed by codepit.\r
- Fixed bug where the spellchecker wasn't working in MSIE if the editor was placed in a P tag.\r
-Version 1.0.1 (2006-05-05)\r
- Since sourceforge has a serious bug when it comes to replacing files with the same name this release was necessary.\r
- Goggle spellchecker class was added.\r
-Version 1.0 (2006-05-03)\r
- Official first release.\r
+++ /dev/null
-<?php\r
-\r
-/* *\r
- * Tiny Spelling Interface for TinyMCE Spell Checking.\r
- *\r
- * Copyright © 2006 Moxiecode Systems AB\r
- */\r
-\r
-class TinyGoogleSpell {\r
- var $lang;\r
- var $spellurl;\r
-\r
- function TinyGoogleSpell(& $config, $lang, $mode, $spelling, $jargon, $encoding) {\r
- $this->lang = $lang;\r
- $this->spellurl = $config['googlespell.url'];\r
- }\r
-\r
- // Returns array with bad words or false if failed.\r
- function checkWords($word_array) {\r
- $words = array ();\r
- $wordstr = implode(' ', $word_array);\r
-\r
- $matches = $this->_getMatches($wordstr);\r
-\r
- for ($i = 0; $i < count($matches); $i++)\r
- $words[] = $this->unhtmlentities(mb_substr($wordstr, $matches[$i][1], $matches[$i][2], "UTF-8"));\r
-\r
- return $words;\r
- }\r
-\r
- function unhtmlentities($string) {\r
- $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);\r
- $string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string);\r
-\r
- $trans_tbl = get_html_translation_table(HTML_ENTITIES);\r
- $trans_tbl = array_flip($trans_tbl);\r
-\r
- return strtr($string, $trans_tbl);\r
- }\r
-\r
- // Returns array with suggestions or false if failed.\r
- function getSuggestion($word) {\r
- $sug = array ();\r
-\r
- $matches = $this->_getMatches($word);\r
-\r
- if (count($matches) > 0)\r
- $sug = explode("\t", utf8_encode($this->unhtmlentities($matches[0][4])));\r
-\r
- return $sug;\r
- }\r
-\r
- function _xmlChars($string) {\r
- $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);\r
-\r
- foreach ($trans as $k => $v)\r
- $trans[$k] = "&#" . ord($k) . ";";\r
-\r
- return strtr($string, $trans);\r
- }\r
-\r
- function _getMatches($word_list) {\r
- $url = $this->spellurl . "&" . $this->lang;\r
-\r
- $path = preg_replace("/^https?:\/\//i", "", $url);\r
-\r
- // Setup XML request\r
- $xml = '<?xml version="1.0" encoding="utf-8" ?><spellrequest textalreadyclipped="0" ignoredups="0" ignoredigits="1" ignoreallcaps="1"><text>' . $word_list . '</text></spellrequest>';\r
-\r
- $header = "POST " . $path . " HTTP/1.0 \r\n";\r
- $header .= "MIME-Version: 1.0 \r\n";\r
- $header .= "Content-type: application/PTI26 \r\n";\r
- $header .= "Content-length: " . strlen($xml) . " \r\n";\r
- $header .= "Content-transfer-encoding: text \r\n";\r
- $header .= "Request-number: 1 \r\n";\r
- $header .= "Document-type: Request \r\n";\r
- $header .= "Interface-Version: Test 1.4 \r\n";\r
- $header .= "Connection: close \r\n\r\n";\r
- $header .= $xml;\r
- //$this->_debugData($xml);\r
-\r
- $ch = curl_init();\r
- curl_setopt($ch, CURLOPT_URL, $url);\r
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\r
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);\r
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);\r
- $xml = curl_exec($ch);\r
- curl_close($ch);\r
-\r
- //$this->_debugData($xml);\r
-\r
- // Grab and parse content\r
- preg_match_all('/<c o="([^"]*)" l="([^"]*)" s="([^"]*)">([^<]*)<\/c>/', $xml, $matches, PREG_SET_ORDER);\r
-\r
- return $matches;\r
- }\r
-\r
- function _debugData($data) {\r
- $fh = @ fopen("debug.log", 'a+');\r
- @ fwrite($fh, $data);\r
- @ fclose($fh);\r
- }\r
-}\r
-\r
-// Setup classname, should be the same as the name of the spellchecker class\r
-$spellCheckerConfig['class'] = "TinyGoogleSpell";\r
-?>\r
+++ /dev/null
-<?php\r
-/* * \r
- * Tiny Spelling Interface for TinyMCE Spell Checking.\r
- *\r
- * Copyright © 2006 Moxiecode Systems AB\r
- *\r
- */\r
-\r
-class TinyPSpell {\r
- var $lang;\r
- var $mode;\r
- var $string;\r
- var $plink;\r
- var $errorMsg;\r
-\r
- var $jargon;\r
- var $spelling;\r
- var $encoding;\r
-\r
- function TinyPSpell(&$config, $lang, $mode, $spelling, $jargon, $encoding) {\r
- $this->lang = $lang;\r
- $this->mode = $mode;\r
- $this->plink = false;\r
- $this->errorMsg = array();\r
-\r
- if (!function_exists("pspell_new")) {\r
- $this->errorMsg[] = "PSpell not found.";\r
- return;\r
- }\r
-\r
- $this->plink = pspell_new($this->lang, $this->spelling, $this->jargon, $this->encoding, $this->mode);\r
- }\r
-\r
- // Returns array with bad words or false if failed.\r
- function checkWords($wordArray) {\r
- if (!$this->plink) {\r
- $this->errorMsg[] = "No PSpell link found for checkWords.";\r
- return array();\r
- }\r
-\r
- $wordError = array();\r
- foreach($wordArray as $word) {\r
- if(!pspell_check($this->plink, trim($word)))\r
- $wordError[] = $word;\r
- }\r
-\r
- return $wordError;\r
- }\r
-\r
- // Returns array with suggestions or false if failed.\r
- function getSuggestion($word) {\r
- if (!$this->plink) {\r
- $this->errorMsg[] = "No PSpell link found for getSuggestion.";\r
- return array();\r
- }\r
-\r
- return pspell_suggest($this->plink, $word);\r
- }\r
-}\r
-\r
-// Setup classname, should be the same as the name of the spellchecker class\r
-$spellCheckerConfig['class'] = "TinyPspell";\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-/* * \r
- * Tiny Spelling Interface for TinyMCE Spell Checking.\r
- *\r
- * Copyright © 2006 Moxiecode Systems AB\r
- *\r
- */\r
-\r
-\r
-class TinyPspellShell {\r
- var $lang;\r
- var $mode;\r
- var $string;\r
- var $error;\r
- var $errorMsg;\r
-\r
- var $cmd;\r
- var $tmpfile;\r
-\r
- var $jargon;\r
- var $spelling;\r
- var $encoding;\r
-\r
- function TinyPspellShell(&$config, $lang, $mode, $spelling, $jargon, $encoding) {\r
- $this->lang = $lang;\r
- $this->mode = $mode;\r
- $this->error = false;\r
- $this->errorMsg = array();\r
-\r
- $this->tmpfile = tempnam($config['tinypspellshell.tmp'], "tinyspell");\r
-\r
- if(preg_match("#win#i",php_uname()))\r
- $this->cmd = $config['tinypspellshell.aspell'] . " -a --lang=". $this->lang." --encoding=utf-8 -H < $this->tmpfile 2>&1";\r
- else\r
- $this->cmd = "cat ". $this->tmpfile ." | " . $config['tinypspellshell.aspell'] . " -a --encoding=utf-8 -H --lang=". $this->lang;\r
- }\r
-\r
- // Returns array with bad words or false if failed.\r
- function checkWords($wordArray) {\r
- if ($fh = fopen($this->tmpfile, "w")) {\r
- fwrite($fh, "!\n");\r
- foreach($wordArray as $key => $value)\r
- fwrite($fh, "^" . $value . "\n");\r
- fclose($fh);\r
- } else {\r
- $this->errorMsg[] = "PSpell not found.";\r
- return array();\r
- }\r
-\r
- $data = shell_exec($this->cmd);\r
- @unlink($this->tmpfile);\r
- \r
- $returnData = array();\r
- $dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY);\r
-\r
- foreach($dataArr as $dstr) {\r
- $matches = array();\r
-\r
- // Skip this line.\r
- if (strpos($dstr, "@") === 0)\r
- continue;\r
-\r
- preg_match("/\& (.*) .* .*: .*/i", $dstr, $matches);\r
-\r
- if (!empty($matches[1]))\r
- $returnData[] = $matches[1];\r
- }\r
-\r
- return $returnData;\r
- }\r
-\r
- // Returns array with suggestions or false if failed.\r
- function getSuggestion($word) {\r
- if (function_exists("mb_convert_encoding"))\r
- $word = mb_convert_encoding($word, "ISO-8859-1", mb_detect_encoding($word, "UTF-8"));\r
- else\r
- $word = utf8_encode($word);\r
-\r
- if ($fh = fopen($this->tmpfile, "w")) {\r
- fwrite($fh, "!\n");\r
- fwrite($fh, "^$word\n");\r
- fclose($fh);\r
- } else\r
- die("Error opening tmp file.");\r
-\r
- $data = shell_exec($this->cmd);\r
-\r
- @unlink($this->tmpfile);\r
-\r
- $returnData = array();\r
- $dataArr = preg_split("/\n/", $data, -1, PREG_SPLIT_NO_EMPTY);\r
-\r
- foreach($dataArr as $dstr) {\r
- $matches = array();\r
-\r
- // Skip this line.\r
- if (strpos($dstr, "@") === 0)\r
- continue;\r
-\r
- preg_match("/\& .* .* .*: (.*)/i", $dstr, $matches);\r
-\r
- if (!empty($matches[1])) {\r
- // For some reason, the exec version seems to add commas?\r
- $returnData[] = str_replace(",", "", $matches[1]);\r
- }\r
- }\r
- return $returnData;\r
- }\r
-\r
- function _debugData($data) {\r
- $fh = @fopen("debug.log", 'a+');\r
- @fwrite($fh, $data);\r
- @fclose($fh);\r
- }\r
-\r
-}\r
-\r
-// Setup classname, should be the same as the name of the spellchecker class\r
-$spellCheckerConfig['class'] = "TinyPspellShell";\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
- $spellCheckerConfig = array();\r
-\r
- // Spellchecker class use\r
- // require_once("classes/TinyPspellShell.class.php"); // Command line pspell\r
- require_once("classes/TinyGoogleSpell.class.php"); // Google web service\r
- // require_once("classes/TinyPspell.class.php"); // Internal PHP version\r
-\r
- // General settings\r
- $spellCheckerConfig['enabled'] = true;\r
-\r
- // Default settings\r
- $spellCheckerConfig['default.language'] = 'en';\r
- $spellCheckerConfig['default.mode'] = PSPELL_FAST;\r
-\r
- // Normaly not required to configure\r
- $spellCheckerConfig['default.spelling'] = "";\r
- $spellCheckerConfig['default.jargon'] = "";\r
- $spellCheckerConfig['default.encoding'] = "";\r
-\r
- // Pspell shell specific settings\r
- $spellCheckerConfig['tinypspellshell.aspell'] = '/usr/bin/aspell';\r
- $spellCheckerConfig['tinypspellshell.tmp'] = '/tmp';\r
- \r
- $spellCheckerConfig['googlespell.url'] = 'https://www.google.com/tbproxy/spell?hl=en'\r
-?>
\ No newline at end of file
-.mceItemHiddenSpellWord {\r
- background: url('../images/wline.gif') repeat-x bottom left;\r
- bo2rder-bottom: 1px dashed red;\r
- cursor: default;\r
-}\r
+.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}\r
+++ /dev/null
-.mceMsgBox {\r
- border: 1px solid gray;\r
- padding: 8px;\r
-}\r
-\r
-.mceMsgBox span {\r
- vertical-align: top;\r
- color: #555555;\r
-}\r
-\r
-/* Misc */\r
-\r
-.mceBlockBox {\r
- display: none;\r
- position: absolute;\r
- left: 0;\r
- top: 0;\r
- z-index: 100;\r
- filter:progid:DXImageTransform.Microsoft.Alpha(style=0, opacity=60);\r
- -moz-opacity:0.6;\r
- opacity: 0.6;\r
- background-color: white;\r
-}\r
-\r
-.mceMsgBox {\r
- display: none;\r
- z-index: 101;\r
- position: absolute;\r
- left: 0;\r
- top: 0;\r
- font-family: Arial, Verdana, Tahoma, Helvetica;\r
- font-weight: bold;\r
- font-size: 11px;\r
-}\r
-tinyMCE.importPluginLanguagePack('spellchecker','en,fr,sv,nn,nb');var TinyMCE_SpellCheckerPlugin={_contextMenu:new TinyMCE_Menu(),_menu:new TinyMCE_Menu(),_counter:0,_ajaxPage:'/tinyspell.php',getInfo:function(){return{longname:'Spellchecker',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},handleEvent:function(e){var elm=tinyMCE.isMSIE?e.srcElement:e.target;var inst=tinyMCE.selectedInstance,args='';var self=TinyMCE_SpellCheckerPlugin;var cm=self._contextMenu;var p,p2,x,y,sx,sy,h,elm;if((e.type=="click"||e.type=="contextmenu")&&elm){do{if(tinyMCE.getAttrib(elm,'class')=="mceItemHiddenSpellWord"){inst.spellCheckerElm=elm;args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=suggest&check='+encodeURIComponent(elm.innerHTML);args+='&lang='+escape(inst.spellCheckerLang);elm=inst.spellCheckerElm;p=tinyMCE.getAbsPosition(inst.iframeElement);p2=tinyMCE.getAbsPosition(elm);h=parseInt(elm.offsetHeight);sx=inst.getBody().scrollLeft;sy=inst.getBody().scrollTop;x=p.absLeft+p2.absLeft-sx;y=p.absTop+p2.absTop-sy+h;cm.clear();cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait','',true));cm.show();cm.moveTo(x,y);inst.selection.selectNode(elm,false,false);self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);tinyMCE.cancelEvent(e);return false;}}while((elm=elm.parentNode));}return true;},initInstance:function(inst){var self=TinyMCE_SpellCheckerPlugin,m=self._menu,cm=self._contextMenu,e;tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/spellchecker/css/content.css");if(!tinyMCE.hasMenu('spellcheckercontextmenu')){tinyMCE.importCSS(document,tinyMCE.baseURL+"/plugins/spellchecker/css/spellchecker.css");cm.init({drop_menu:false});tinyMCE.addMenu('spellcheckercontextmenu',cm);}if(!tinyMCE.hasMenu('spellcheckermenu')){m.init({});tinyMCE.addMenu('spellcheckermenu',m);}inst.spellCheckerLang='en';self._buildSettingsMenu(inst,null);e=self._getBlockBoxLayer(inst).create('div','mceBlockBox',document.getElementById(inst.editorId+'_parent'));self._getMsgBoxLayer(inst).create('div','mceMsgBox',document.getElementById(inst.editorId+'_parent'));},_getMsgBoxLayer:function(inst){if(!inst.spellCheckerMsgBoxL)inst.spellCheckerMsgBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerMsgBox',false);return inst.spellCheckerMsgBoxL;},_getBlockBoxLayer:function(inst){if(!inst.spellCheckerBoxL)inst.spellCheckerBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerBlockBox',false);return inst.spellCheckerBoxL;},_buildSettingsMenu:function(inst,lang){var i,ar=tinyMCE.getParam('spellchecker_languages','+English=en').split(','),p;var self=TinyMCE_SpellCheckerPlugin,m=self._menu,c;m.clear();m.addTitle(tinyMCE.getLang('lang_spellchecker_langs','',true));for(i=0;i<ar.length;i++){if(ar[i]!=''){p=ar[i].split('=');c='mceMenuCheckItem';if(p[0].charAt(0)=='+'){p[0]=p[0].substring(1);if(lang==null){c='mceMenuSelectedItem';inst.spellCheckerLang=p[1];}}if(lang==p[1])c='mceMenuSelectedItem';m.add({text:p[0],js:"tinyMCE.execInstanceCommand('"+inst.editorId+"','mceSpellCheckerSetLang',false,'"+p[1]+"');",class_name:c});}}},setupContent:function(editor_id,body,doc){TinyMCE_SpellCheckerPlugin._removeWords(doc);},getControlHTML:function(cn){switch(cn){case"spellchecker":return TinyMCE_SpellCheckerPlugin._getMenuButtonHTML(cn,'lang_spellchecker_desc','{$pluginurl}/images/spellchecker.gif','lang_spellchecker_desc','mceSpellCheckerMenu','mceSpellCheck');}return"";},_getMenuButtonHTML:function(id,lang,img,mlang,mid,cmd,ui,val){var h='',m,x;cmd='tinyMCE.hideMenus();tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isMSIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" title="{$'+lang+'}" />';h+='<img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" onclick="'+mcmd+'return false;" />';h+='</a>';}else{if(tinyMCE.isMSIE&&!tinyMCE.isOpera)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE.plugins.spellchecker._menuButtonEvent(\'over\',this);" onmouseout="tinyMCE.plugins.spellchecker._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="#" onclick="tinyMCE.plugins.spellchecker._toggleMenu(\'{$editor_id}\',\''+mid+'\');return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>';}return h;},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'');},_toggleMenu:function(editor_id,id){var self=TinyMCE_SpellCheckerPlugin;var e=document.getElementById(editor_id+'_spellchecker');var inst=tinyMCE.getInstanceById(editor_id);if(self._menu.isVisible()){tinyMCE.hideMenus();return;}tinyMCE.lastMenuBtnClass=e.className.replace(/\s.*$/,'');tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonFocus');self._menu.moveRelativeTo(e,'bl');self._menu.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?0:1,-1);if(tinyMCE.isOpera)self._menu.moveBy(0,-2);self._onMenuEvent(inst,self._menu,'show');self._menu.show();tinyMCE.lastSelectedMenuBtn=editor_id+'_spellchecker';},_onMenuEvent:function(inst,m,n){TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst,inst.spellCheckerLang);},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),self=TinyMCE_SpellCheckerPlugin,args='',co,bb,mb,nl,i,e;switch(command){case"mceSpellCheck":if(!inst.spellcheckerOn){inst.spellCheckerBookmark=inst.selection.getBookmark();args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=spell&check='+encodeURIComponent(self._getWordList(inst.getBody())).replace(/\'/g,'%27');args+='&lang='+escape(inst.spellCheckerLang);co=document.getElementById(inst.editorId+'_parent').firstChild;bb=self._getBlockBoxLayer(inst);bb.moveRelativeTo(co,'tl');bb.resizeTo(co.offsetWidth,co.offsetHeight);bb.show();mb=self._getMsgBoxLayer(inst);e=mb.getElement();e.innerHTML='<span>'+tinyMCE.getLang('lang_spellchecker_swait','',true)+'</span>';mb.show();mb.moveRelativeTo(co,'cc');if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i<nl.length;i++)nl[i].disabled=true;}inst.spellcheckerOn=true;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonSelected');self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);}else{self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButton');}return true;case"mceSpellCheckReplace":if(inst.spellCheckerElm)tinyMCE.setOuterHTML(inst.spellCheckerElm,value);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckIgnore":if(inst.spellCheckerElm)self._removeWord(inst.spellCheckerElm);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckIgnoreAll":if(inst.spellCheckerElm)self._removeWords(inst.getDoc(),inst.spellCheckerElm.innerHTML);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckerSetLang":tinyMCE.hideMenus();inst.spellCheckerLang=value;self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButton');return true;}return false;},cleanup:function(type,content,inst){switch(type){case"get_from_editor_dom":TinyMCE_SpellCheckerPlugin._removeWords(content);inst.spellcheckerOn=false;break;}return content;},_displayUI:function(inst){var self=TinyMCE_SpellCheckerPlugin;var bb=self._getBlockBoxLayer(inst);var mb=self._getMsgBoxLayer(inst);var nl,i;var co=document.getElementById(inst.editorId+'_parent').firstChild;if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i<nl.length;i++)nl[i].disabled=false;}bb.hide();mb.hide();},_ajaxResponse:function(xml){var el=xml?xml.documentElement:null;var inst=tinyMCE.selectedInstance,self=TinyMCE_SpellCheckerPlugin;var cmd=el?el.getAttribute("cmd"):null,err,id=el?el.getAttribute("id"):null;if(id)inst=tinyMCE.getInstanceById(id.substring(0,id.indexOf('|')));self._displayUI(inst);if(cmd=="suggest"&&id!=inst.editorId+"|"+self._counter)return;if(!el){inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');alert("Could not execute AJAX call, server didn't return valid a XML.");return;}err=el.getAttribute("error");if(err=="true"){inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');alert(el.getAttribute("msg"));return;}switch(cmd){case"spell":if(xml.documentElement.firstChild){self._markWords(inst.getDoc(),inst.getBody(),decodeURIComponent(el.firstChild.nodeValue).split('+'));inst.selection.moveToBookmark(inst.spellCheckerBookmark);if(tinyMCE.getParam('spellchecker_report_mispellings',false))alert(tinyMCE.getLang('lang_spellchecker_mpell_found','',true,{words:self._countWords(inst)}));}else alert(tinyMCE.getLang('lang_spellchecker_no_mpell','',true));self._checkDone(inst);break;case"suggest":self._buildMenu(el.firstChild?decodeURIComponent(el.firstChild.nodeValue).split('+'):null,10);self._contextMenu.show();break;}},_getWordSeparators:function(){var i,re='',ch=tinyMCE.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c');for(i=0;i<ch.length;i++)re+='\\'+ch.charAt(i);return re;},_getWordList:function(n){var i,x,s,nv='',nl=tinyMCE.getNodeTree(n,new Array(),3),wl=new Array();var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i<nl.length;i++){if(!new RegExp('/SCRIPT|STYLE/').test(nl[i].parentNode.nodeName))nv+=nl[i].nodeValue+" ";}nv=nv.replace(new RegExp('([0-9]|['+re+'])','g'),' ');nv=tinyMCE.trim(nv.replace(/(\s+)/g,' '));nl=nv.split(/\s+/);for(i=0;i<nl.length;i++){s=false;for(x=0;x<wl.length;x++){if(wl[x]==nl[i]){s=true;break;}}if(!s&&nl[i].length>0)wl[wl.length]=nl[i];}return wl.join(' ');},_removeWords:function(doc,word){var i,c,nl=doc.getElementsByTagName("span");var self=TinyMCE_SpellCheckerPlugin;var inst=tinyMCE.selectedInstance,b=inst?inst.selection.getBookmark():null;word=typeof(word)=='undefined'?null:word;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if((c=='mceItemHiddenSpellWord'||c=='mceItemHidden')&&(word==null||nl[i].innerHTML==word))self._removeWord(nl[i]);}if(b)inst.selection.moveToBookmark(b);},_checkDone:function(inst){var self=TinyMCE_SpellCheckerPlugin;var w=self._countWords(inst);if(w==0){self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');}},_countWords:function(inst){var i,w=0,nl=inst.getDoc().getElementsByTagName("span"),c;var self=TinyMCE_SpellCheckerPlugin;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if(c=='mceItemHiddenSpellWord')w++;}return w;},_removeWord:function(e){if(e!=null)tinyMCE.setOuterHTML(e,e.innerHTML);},_markWords:function(doc,n,wl){var i,nv,nn,nl=tinyMCE.getNodeTree(n,new Array(),3);var r1,r2,r3,r4,r5,w='';var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i<wl.length;i++){if(wl[i].length>0)w+=wl[i]+((i==wl.length-1)?'':'|');}for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');if(r1.test(nv)||r2.test(nv)||r3.test(nv)||r4.test(nv)){nv=tinyMCE.xmlEncode(nv);nv=nv.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');nv=nv.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');nn=doc.createElement('span');nn.className="mceItemHidden";nn.innerHTML=nv;nl[i].parentNode.replaceChild(nn,nl[i]);}}},_buildMenu:function(sg,max){var i,self=TinyMCE_SpellCheckerPlugin,cm=self._contextMenu;cm.clear();if(sg!=null){cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug','',true));for(i=0;i<sg.length&&i<max;i++)cm.addItem(sg[i],'tinyMCE.execCommand("mceSpellCheckReplace",false,"'+sg[i]+'");');cm.addSeparator();}else cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug','',true));cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_word','',true),'tinyMCE.execCommand(\'mceSpellCheckIgnore\');');cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_words','',true),'tinyMCE.execCommand(\'mceSpellCheckIgnoreAll\');');cm.update();},_getAjaxHTTP:function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest();}}},_sendAjax:function(u,f,m,a){var x=TinyMCE_SpellCheckerPlugin._getAjaxHTTP();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseXML);};if(m=='post')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a);}};tinyMCE.addPlugin('spellchecker',TinyMCE_SpellCheckerPlugin);
\ No newline at end of file
+(function(){var JSONRequest=tinymce.util.JSONRequest,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.SpellcheckerPlugin',{getInfo:function(){return{longname:'Spellchecker',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',version:tinymce.majorVersion+"."+tinymce.minorVersion};},init:function(ed,url){var t=this,cm;t.url=url;t.editor=ed;ed.addCommand('mceSpellCheck',function(){if(!t.active){ed.setProgressState(1);t._sendRPC('checkWords',[t.selectedLang,t._getWords()],function(r){if(r.length>0){t.active=1;t._markWords(r);ed.setProgressState(0);ed.nodeChanged();}else{ed.setProgressState(0);ed.windowManager.alert('spellchecker.no_mpell');}});}else t._done();});ed.onInit.add(function(){if(ed.settings.content_css!==false)ed.dom.loadCSS(url+'/css/content.css');});ed.onClick.add(t._showMenu,t);ed.onContextMenu.add(t._showMenu,t);ed.onBeforeGetContent.add(function(){if(t.active)t._removeWords();});ed.onNodeChange.add(function(ed,cm){cm.setActive('spellchecker',t.active);});ed.onSetContent.add(function(){t._done();});ed.onBeforeGetContent.add(function(){t._done();});ed.onBeforeExecCommand.add(function(ed,cmd){if(cmd=='mceFullScreen')t._done();});t.languages={};each(ed.getParam('spellchecker_languages','+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv','hash'),function(v,k){if(k.indexOf('+')===0){k=k.substring(1);t.selectedLang=v;}t.languages[k]=v;});},createControl:function(n,cm){var t=this,c,ed=t.editor;if(n=='spellchecker'){c=cm.createSplitButton(n,{title:'spellchecker.desc',cmd:'mceSpellCheck',scope:t});c.onRenderMenu.add(function(c,m){m.add({title:'spellchecker.langs','class':'mceMenuItemTitle'}).setDisabled(1);each(t.languages,function(v,k){var o={icon:1},mi;o.onclick=function(){mi.setSelected(1);t.selectedItem.setSelected(0);t.selectedItem=mi;t.selectedLang=v;};o.title=k;mi=m.add(o);mi.setSelected(v==t.selectedLang);if(v==t.selectedLang)t.selectedItem=mi;})});return c;}},_walk:function(n,f){var d=this.editor.getDoc(),w;if(d.createTreeWalker){w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while((n=w.nextNode())!=null)f.call(this,n);}else tinymce.walk(n,f,'childNodes');},_getSeparators:function(){var re='',i,str=this.editor.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}����������������\u201d\u201c');for(i=0;i<str.length;i++)re+='\\'+str.charAt(i);return re;},_getWords:function(){var ed=this.editor,wl=[],tx='',lo={};this._walk(ed.getBody(),function(n){if(n.nodeType==3)tx+=n.nodeValue+' ';});tx=tx.replace(new RegExp('([0-9]|['+this._getSeparators()+'])','g'),' ');tx=tinymce.trim(tx.replace(/(\s+)/g,' '));each(tx.split(' '),function(v){if(!lo[v]){wl.push(v);lo[v]=1;}});return wl;},_removeWords:function(w){var ed=this.editor,dom=ed.dom,se=ed.selection,b=se.getBookmark();each(dom.select('span').reverse(),function(n){if(n&&(dom.hasClass(n,'mceItemHiddenSpellWord')||dom.hasClass(n,'mceItemHidden'))){if(!w||dom.decode(n.innerHTML)==w)dom.remove(n,1);}});se.moveToBookmark(b);},_markWords:function(wl){var r1,r2,r3,r4,r5,w='',ed=this.editor,re=this._getSeparators(),dom=ed.dom,nl=[];var se=ed.selection,b=se.getBookmark();each(wl,function(v){w+=(w?'|':'')+v;});r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');this._walk(this.editor.getBody(),function(n){if(n.nodeType==3){nl.push(n);}});each(nl,function(n){var v;if(n.nodeType==3){v=n.nodeValue;if(r1.test(v)||r2.test(v)||r3.test(v)||r4.test(v)){v=dom.encode(v);v=v.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');v=v.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');dom.replace(dom.create('span',{'class':'mceItemHidden'},v),n);}}});se.moveToBookmark(b);},_showMenu:function(ed,e){var t=this,ed=t.editor,m=t._menu,p1,dom=ed.dom,vp=dom.getViewPort(ed.getWin());if(!m){p1=DOM.getPos(ed.getContentAreaContainer());m=ed.controlManager.createDropMenu('spellcheckermenu',{offset_x:p1.x,offset_y:p1.y,'class':'mceNoIcons'});t._menu=m;}if(dom.hasClass(e.target,'mceItemHiddenSpellWord')){m.removeAll();m.add({title:'spellchecker.wait','class':'mceMenuItemTitle'}).setDisabled(1);t._sendRPC('getSuggestions',[t.selectedLang,dom.decode(e.target.innerHTML)],function(r){m.removeAll();if(r.length>0){m.add({title:'spellchecker.sug','class':'mceMenuItemTitle'}).setDisabled(1);each(r,function(v){m.add({title:v,onclick:function(){dom.replace(ed.getDoc().createTextNode(v),e.target);t._checkDone();}});});m.addSeparator();}else m.add({title:'spellchecker.no_sug','class':'mceMenuItemTitle'}).setDisabled(1);m.add({title:'spellchecker.ignore_word',onclick:function(){dom.remove(e.target,1);t._checkDone();}});m.add({title:'spellchecker.ignore_words',onclick:function(){t._removeWords(dom.decode(e.target.innerHTML));t._checkDone();}});m.update();});ed.selection.select(e.target);p1=dom.getPos(e.target);m.showMenu(p1.x,p1.y+e.target.offsetHeight-vp.y);return tinymce.dom.Event.cancel(e);}else m.hideMenu();},_checkDone:function(){var t=this,ed=t.editor,dom=ed.dom,o;each(dom.select('span'),function(n){if(n&&dom.hasClass(n,'mceItemHiddenSpellWord')){o=true;return false;}});if(!o)t._done();},_done:function(){var t=this,la=t.active;if(t.active){t.active=0;t._removeWords();if(t._menu)t._menu.hideMenu();if(la)t.editor.nodeChanged();}},_sendRPC:function(m,p,cb){var t=this,url=t.editor.getParam("spellchecker_rpc_url","{backend}");if(url=='{backend}'){t.editor.setProgressState(0);alert('Please specify: spellchecker_rpc_url');return;}JSONRequest.sendRPC({url:url,method:m,params:p,success:cb,error:function(e,x){t.editor.setProgressState(0);t.editor.windowManager.alert(e.errstr||('Error response: '+x.responseText));}});}});tinymce.PluginManager.add('spellchecker',tinymce.plugins.SpellcheckerPlugin);})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 28 2006-08-01 16:02:56Z spocke $\r
+ * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $\r
*\r
* @author Moxiecode\r
- * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
*/\r
\r
-tinyMCE.importPluginLanguagePack('spellchecker', 'en,fr,sv,nn,nb');\r
-\r
-// Plucin static class\r
-var TinyMCE_SpellCheckerPlugin = {\r
- _contextMenu : new TinyMCE_Menu(),\r
- _menu : new TinyMCE_Menu(),\r
- _counter : 0,\r
- _ajaxPage : '/tinyspell.php',\r
-\r
- getInfo : function() {\r
- return {\r
- longname : 'Spellchecker',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',\r
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
- };\r
- },\r
-\r
- handleEvent : function(e) {\r
- var elm = tinyMCE.isMSIE ? e.srcElement : e.target;\r
- var inst = tinyMCE.selectedInstance, args = '';\r
- var self = TinyMCE_SpellCheckerPlugin;\r
- var cm = self._contextMenu;\r
- var p, p2, x, y, sx, sy, h, elm;\r
-\r
- // Handle click on word\r
- if ((e.type == "click" || e.type == "contextmenu") && elm) {\r
- do {\r
- if (tinyMCE.getAttrib(elm, 'class') == "mceItemHiddenSpellWord") {\r
- inst.spellCheckerElm = elm;\r
-\r
- // Setup arguments\r
- args += 'id=' + inst.editorId + "|" + (++self._counter);\r
- args += '&cmd=suggest&check=' + encodeURIComponent(elm.innerHTML);\r
- args += '&lang=' + escape(inst.spellCheckerLang);\r
-\r
- elm = inst.spellCheckerElm;\r
- p = tinyMCE.getAbsPosition(inst.iframeElement);\r
- p2 = tinyMCE.getAbsPosition(elm);\r
- h = parseInt(elm.offsetHeight);\r
- sx = inst.getBody().scrollLeft;\r
- sy = inst.getBody().scrollTop;\r
- x = p.absLeft + p2.absLeft - sx;\r
- y = p.absTop + p2.absTop - sy + h;\r
-\r
- cm.clear();\r
- cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait', '', true));\r
- cm.show();\r
- cm.moveTo(x, y);\r
-\r
- inst.selection.selectNode(elm, false, false);\r
-\r
- self._sendAjax(self.baseURL + self._ajaxPage, self._ajaxResponse, 'post', args);\r
-\r
- tinyMCE.cancelEvent(e);\r
- return false;\r
+(function() {\r
+ var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM;\r
+\r
+ tinymce.create('tinymce.plugins.SpellcheckerPlugin', {\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Spellchecker',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ },\r
+\r
+ init : function(ed, url) {\r
+ var t = this, cm;\r
+\r
+ t.url = url;\r
+ t.editor = ed;\r
+\r
+ // Register commands\r
+ ed.addCommand('mceSpellCheck', function() {\r
+ if (!t.active) {\r
+ ed.setProgressState(1);\r
+ t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {\r
+ if (r.length > 0) {\r
+ t.active = 1;\r
+ t._markWords(r);\r
+ ed.setProgressState(0);\r
+ ed.nodeChanged();\r
+ } else {\r
+ ed.setProgressState(0);\r
+ ed.windowManager.alert('spellchecker.no_mpell');\r
+ }\r
+ });\r
+ } else\r
+ t._done();\r
+ });\r
+\r
+ ed.onInit.add(function() {\r
+ if (ed.settings.content_css !== false)\r
+ ed.dom.loadCSS(url + '/css/content.css');\r
+ });\r
+\r
+ ed.onClick.add(t._showMenu, t);\r
+ ed.onContextMenu.add(t._showMenu, t);\r
+ ed.onBeforeGetContent.add(function() {\r
+ if (t.active)\r
+ t._removeWords();\r
+ });\r
+\r
+ ed.onNodeChange.add(function(ed, cm) {\r
+ cm.setActive('spellchecker', t.active);\r
+ });\r
+\r
+ ed.onSetContent.add(function() {\r
+ t._done();\r
+ });\r
+\r
+ ed.onBeforeGetContent.add(function() {\r
+ t._done();\r
+ });\r
+\r
+ ed.onBeforeExecCommand.add(function(ed, cmd) {\r
+ if (cmd == 'mceFullScreen')\r
+ t._done();\r
+ });\r
+\r
+ // Find selected language\r
+ t.languages = {};\r
+ each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) {\r
+ if (k.indexOf('+') === 0) {\r
+ k = k.substring(1);\r
+ t.selectedLang = v;\r
}\r
- } while ((elm = elm.parentNode));\r
- }\r
-\r
- return true;\r
- },\r
-\r
- initInstance : function(inst) {\r
- var self = TinyMCE_SpellCheckerPlugin, m = self._menu, cm = self._contextMenu, e;\r
-\r
- tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/spellchecker/css/content.css");\r
-\r
- if (!tinyMCE.hasMenu('spellcheckercontextmenu')) {\r
- tinyMCE.importCSS(document, tinyMCE.baseURL + "/plugins/spellchecker/css/spellchecker.css");\r
-\r
- cm.init({drop_menu : false});\r
- tinyMCE.addMenu('spellcheckercontextmenu', cm);\r
- }\r
-\r
- if (!tinyMCE.hasMenu('spellcheckermenu')) {\r
- m.init({});\r
- tinyMCE.addMenu('spellcheckermenu', m);\r
- }\r
-\r
- inst.spellCheckerLang = 'en';\r
- self._buildSettingsMenu(inst, null);\r
-\r
- e = self._getBlockBoxLayer(inst).create('div', 'mceBlockBox', document.getElementById(inst.editorId + '_parent'));\r
- self._getMsgBoxLayer(inst).create('div', 'mceMsgBox', document.getElementById(inst.editorId + '_parent'));\r
- },\r
-\r
- _getMsgBoxLayer : function(inst) {\r
- if (!inst.spellCheckerMsgBoxL)\r
- inst.spellCheckerMsgBoxL = new TinyMCE_Layer(inst.editorId + '_spellcheckerMsgBox', false);\r
\r
- return inst.spellCheckerMsgBoxL;\r
- },\r
+ t.languages[k] = v;\r
+ });\r
+ },\r
\r
- _getBlockBoxLayer : function(inst) {\r
- if (!inst.spellCheckerBoxL)\r
- inst.spellCheckerBoxL = new TinyMCE_Layer(inst.editorId + '_spellcheckerBlockBox', false);\r
+ createControl : function(n, cm) {\r
+ var t = this, c, ed = t.editor;\r
\r
- return inst.spellCheckerBoxL;\r
- },\r
+ if (n == 'spellchecker') {\r
+ c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});\r
\r
- _buildSettingsMenu : function(inst, lang) {\r
- var i, ar = tinyMCE.getParam('spellchecker_languages', '+English=en').split(','), p;\r
- var self = TinyMCE_SpellCheckerPlugin, m = self._menu, c;\r
+ c.onRenderMenu.add(function(c, m) {\r
+ m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+ each(t.languages, function(v, k) {\r
+ var o = {icon : 1}, mi;\r
\r
- m.clear();\r
- m.addTitle(tinyMCE.getLang('lang_spellchecker_langs', '', true));\r
+ o.onclick = function() {\r
+ mi.setSelected(1);\r
+ t.selectedItem.setSelected(0);\r
+ t.selectedItem = mi;\r
+ t.selectedLang = v;\r
+ };\r
\r
- for (i=0; i<ar.length; i++) {\r
- if (ar[i] != '') {\r
- p = ar[i].split('=');\r
- c = 'mceMenuCheckItem';\r
+ o.title = k;\r
+ mi = m.add(o);\r
+ mi.setSelected(v == t.selectedLang);\r
\r
- if (p[0].charAt(0) == '+') {\r
- p[0] = p[0].substring(1);\r
+ if (v == t.selectedLang)\r
+ t.selectedItem = mi;\r
+ })\r
+ });\r
\r
- if (lang == null) {\r
- c = 'mceMenuSelectedItem';\r
- inst.spellCheckerLang = p[1];\r
- }\r
- }\r
-\r
- if (lang == p[1])\r
- c = 'mceMenuSelectedItem';\r
-\r
- m.add({text : p[0], js : "tinyMCE.execInstanceCommand('" + inst.editorId + "','mceSpellCheckerSetLang',false,'" + p[1] + "');", class_name : c});\r
+ return c;\r
}\r
- }\r
- },\r
-\r
- setupContent : function(editor_id, body, doc) {\r
- TinyMCE_SpellCheckerPlugin._removeWords(doc);\r
- },\r
-\r
- getControlHTML : function(cn) {\r
- switch (cn) {\r
- case "spellchecker":\r
- return TinyMCE_SpellCheckerPlugin._getMenuButtonHTML(cn, 'lang_spellchecker_desc', '{$pluginurl}/images/spellchecker.gif', 'lang_spellchecker_desc', 'mceSpellCheckerMenu', 'mceSpellCheck');\r
- }\r
-\r
- return "";\r
- },\r
-\r
- /**\r
- * Returns the HTML code for a normal button control.\r
- *\r
- * @param {string} id Button control id, this will be the suffix for the element id, the prefix is the editor id.\r
- * @param {string} lang Language variable key name to insert as the title/alt of the button image.\r
- * @param {string} img Image URL to insert, {$themeurl} and {$pluginurl} will be replaced.\r
- * @param {string} mlang Language variable key name to insert as the title/alt of the menu button image.\r
- * @param {string} mid Menu by id to display when the menu button is pressed.\r
- * @param {string} cmd Command to execute when the user clicks the button.\r
- * @param {string} ui Optional user interface boolean for command.\r
- * @param {string} val Optional value for command.\r
- * @return HTML code for a normal button based in input information.\r
- * @type string\r
- */\r
- _getMenuButtonHTML : function(id, lang, img, mlang, mid, cmd, ui, val) {\r
- var h = '', m, x;\r
-\r
- cmd = 'tinyMCE.hideMenus();tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';\r
-\r
- if (typeof(ui) != "undefined" && ui != null)\r
- cmd += ',' + ui;\r
-\r
- if (typeof(val) != "undefined" && val != null)\r
- cmd += ",'" + val + "'";\r
-\r
- cmd += ');';\r
-\r
- // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled\r
- if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isMSIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {\r
- // Tiled button\r
- x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);\r
- h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';\r
- h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" title="{$' + lang + '}" />';\r
- h += '<img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" onclick="' + mcmd + 'return false;" />';\r
- h += '</a>';\r
- } else {\r
- if (tinyMCE.isMSIE && !tinyMCE.isOpera)\r
- h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE.plugins.spellchecker._menuButtonEvent(\'over\',this);" onmouseout="tinyMCE.plugins.spellchecker._menuButtonEvent(\'out\',this);">';\r
- else\r
- h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';\r
-\r
- h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';\r
- h += '<img src="' + img + '" title="{$' + lang + '}" /></a>';\r
- h += '<a href="#" onclick="tinyMCE.plugins.spellchecker._toggleMenu(\'{$editor_id}\',\'' + mid + '\');return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';\r
- h += '</a></span>';\r
- }\r
-\r
- return h;\r
- },\r
-\r
- _menuButtonEvent : function(e, o) {\r
- if (o.className == 'mceMenuButtonFocus')\r
- return;\r
-\r
- if (e == 'over')\r
- o.className = o.className + ' mceMenuHover';\r
- else\r
- o.className = o.className.replace(/\s.*$/, '');\r
- },\r
+ },\r
\r
- _toggleMenu : function(editor_id, id) {\r
- var self = TinyMCE_SpellCheckerPlugin;\r
- var e = document.getElementById(editor_id + '_spellchecker');\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
+ // Internal functions\r
\r
- if (self._menu.isVisible()) {\r
- tinyMCE.hideMenus();\r
- return;\r
- }\r
-\r
- tinyMCE.lastMenuBtnClass = e.className.replace(/\s.*$/, '');\r
- tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButtonFocus');\r
-\r
- self._menu.moveRelativeTo(e, 'bl');\r
- self._menu.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? 0 : 1, -1);\r
-\r
- if (tinyMCE.isOpera)\r
- self._menu.moveBy(0, -2);\r
-\r
- self._onMenuEvent(inst, self._menu, 'show');\r
-\r
- self._menu.show();\r
-\r
- tinyMCE.lastSelectedMenuBtn = editor_id + '_spellchecker';\r
- },\r
+ _walk : function(n, f) {\r
+ var d = this.editor.getDoc(), w;\r
\r
- _onMenuEvent : function(inst, m, n) {\r
- TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst, inst.spellCheckerLang);\r
- },\r
+ if (d.createTreeWalker) {\r
+ w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
\r
- execCommand : function(editor_id, element, command, user_interface, value) {\r
- var inst = tinyMCE.getInstanceById(editor_id), self = TinyMCE_SpellCheckerPlugin, args = '', co, bb, mb, nl, i, e;\r
+ while ((n = w.nextNode()) != null)\r
+ f.call(this, n);\r
+ } else\r
+ tinymce.walk(n, f, 'childNodes');\r
+ },\r
\r
- // Handle commands\r
- switch (command) {\r
- case "mceSpellCheck":\r
- if (!inst.spellcheckerOn) {\r
- inst.spellCheckerBookmark = inst.selection.getBookmark();\r
+ _getSeparators : function() {\r
+ var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');\r
\r
- // Setup arguments\r
- args += 'id=' + inst.editorId + "|" + (++self._counter);\r
- args += '&cmd=spell&check=' + encodeURIComponent(self._getWordList(inst.getBody())).replace( /\'/g, '%27' );\r
- args += '&lang=' + escape(inst.spellCheckerLang);\r
+ // Build word separator regexp\r
+ for (i=0; i<str.length; i++)\r
+ re += '\\' + str.charAt(i);\r
\r
- co = document.getElementById(inst.editorId + '_parent').firstChild;\r
- bb = self._getBlockBoxLayer(inst);\r
- bb.moveRelativeTo(co, 'tl');\r
- bb.resizeTo(co.offsetWidth, co.offsetHeight);\r
- bb.show();\r
+ return re;\r
+ },\r
\r
- // Setup message box\r
- mb = self._getMsgBoxLayer(inst);\r
- e = mb.getElement();\r
- e.innerHTML = '<span>' + tinyMCE.getLang('lang_spellchecker_swait', '', true) + '</span>';\r
- mb.show();\r
- mb.moveRelativeTo(co, 'cc');\r
+ _getWords : function() {\r
+ var ed = this.editor, wl = [], tx = '', lo = {};\r
\r
- if (tinyMCE.isMSIE && !tinyMCE.isOpera) {\r
- nl = co.getElementsByTagName('select');\r
- for (i=0; i<nl.length; i++)\r
- nl[i].disabled = true;\r
- }\r
+ // Get area text\r
+ this._walk(ed.getBody(), function(n) {\r
+ if (n.nodeType == 3)\r
+ tx += n.nodeValue + ' ';\r
+ });\r
\r
- inst.spellcheckerOn = true;\r
- tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButtonSelected');\r
+ // Split words by separator\r
+ tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');\r
+ tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));\r
\r
- self._sendAjax(self.baseURL + self._ajaxPage, self._ajaxResponse, 'post', args);\r
- } else {\r
- self._removeWords(inst.getDoc());\r
- inst.spellcheckerOn = false;\r
- tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButton');\r
+ // Build word array and remove duplicates\r
+ each(tx.split(' '), function(v) {\r
+ if (!lo[v]) {\r
+ wl.push(v);\r
+ lo[v] = 1;\r
}\r
+ });\r
\r
- return true;\r
-\r
- case "mceSpellCheckReplace":\r
- if (inst.spellCheckerElm)\r
- tinyMCE.setOuterHTML(inst.spellCheckerElm, value);\r
-\r
- self._checkDone(inst);\r
- self._contextMenu.hide();\r
- self._menu.hide();\r
-\r
- return true;\r
-\r
- case "mceSpellCheckIgnore":\r
- if (inst.spellCheckerElm)\r
- self._removeWord(inst.spellCheckerElm);\r
-\r
- self._checkDone(inst);\r
- self._contextMenu.hide();\r
- self._menu.hide();\r
- return true;\r
-\r
- case "mceSpellCheckIgnoreAll":\r
- if (inst.spellCheckerElm)\r
- self._removeWords(inst.getDoc(), inst.spellCheckerElm.innerHTML);\r
-\r
- self._checkDone(inst);\r
- self._contextMenu.hide();\r
- self._menu.hide();\r
- return true;\r
-\r
- case "mceSpellCheckerSetLang":\r
- tinyMCE.hideMenus();\r
- inst.spellCheckerLang = value;\r
- self._removeWords(inst.getDoc());\r
- inst.spellcheckerOn = false;\r
- tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButton');\r
- return true;\r
- }\r
-\r
- // Pass to next handler in chain\r
- return false;\r
- },\r
-\r
- cleanup : function(type, content, inst) {\r
- switch (type) {\r
- case "get_from_editor_dom":\r
- TinyMCE_SpellCheckerPlugin._removeWords(content);\r
- inst.spellcheckerOn = false;\r
- break;\r
- }\r
-\r
- return content;\r
- },\r
-\r
- // Private plugin specific methods\r
-\r
- _displayUI : function(inst) {\r
- var self = TinyMCE_SpellCheckerPlugin;\r
- var bb = self._getBlockBoxLayer(inst);\r
- var mb = self._getMsgBoxLayer(inst);\r
- var nl, i;\r
- var co = document.getElementById(inst.editorId + '_parent').firstChild;\r
-\r
- if (tinyMCE.isMSIE && !tinyMCE.isOpera) {\r
- nl = co.getElementsByTagName('select');\r
- for (i=0; i<nl.length; i++)\r
- nl[i].disabled = false;\r
- }\r
-\r
- bb.hide();\r
- mb.hide();\r
- },\r
-\r
- _ajaxResponse : function(xml) {\r
- var el = xml ? xml.documentElement : null;\r
- var inst = tinyMCE.selectedInstance, self = TinyMCE_SpellCheckerPlugin;\r
- var cmd = el ? el.getAttribute("cmd") : null, err, id = el ? el.getAttribute("id") : null;\r
+ return wl;\r
+ },\r
\r
- if (id)\r
- inst = tinyMCE.getInstanceById(id.substring(0, id.indexOf('|')));\r
+ _removeWords : function(w) {\r
+ var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();\r
\r
- self._displayUI(inst);\r
-\r
- // Ignore suggestions for other ajax responses\r
- if (cmd == "suggest" && id != inst.editorId + "|" + self._counter)\r
- return;\r
-\r
- if (!el) {\r
- inst.spellcheckerOn = false;\r
- tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');\r
- alert("Could not execute AJAX call, server didn't return valid a XML.");\r
- return;\r
- }\r
-\r
- err = el.getAttribute("error");\r
-\r
- if (err == "true") {\r
- inst.spellcheckerOn = false;\r
- tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');\r
- alert(el.getAttribute("msg"));\r
- return;\r
- }\r
-\r
- switch (cmd) {\r
- case "spell":\r
- if (xml.documentElement.firstChild) {\r
- self._markWords(inst.getDoc(), inst.getBody(), decodeURIComponent(el.firstChild.nodeValue).split('+'));\r
- inst.selection.moveToBookmark(inst.spellCheckerBookmark);\r
-\r
- if(tinyMCE.getParam('spellchecker_report_mispellings', false))\r
- alert(tinyMCE.getLang('lang_spellchecker_mpell_found', '', true, {words : self._countWords(inst)}));\r
- } else\r
- alert(tinyMCE.getLang('lang_spellchecker_no_mpell', '', true));\r
-\r
- self._checkDone(inst);\r
-\r
- break;\r
-\r
- case "suggest":\r
- self._buildMenu(el.firstChild ? decodeURIComponent(el.firstChild.nodeValue).split('+') : null, 10);\r
- self._contextMenu.show();\r
- break;\r
- }\r
- },\r
-\r
- _getWordSeparators : function() {\r
- var i, re = '', ch = tinyMCE.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');\r
-\r
- for (i=0; i<ch.length; i++)\r
- re += '\\' + ch.charAt(i);\r
-\r
- return re;\r
- },\r
-\r
- _getWordList : function(n) {\r
- var i, x, s, nv = '', nl = tinyMCE.getNodeTree(n, new Array(), 3), wl = new Array();\r
- var re = TinyMCE_SpellCheckerPlugin._getWordSeparators();\r
-\r
- for (i=0; i<nl.length; i++) {\r
- if (!new RegExp('/SCRIPT|STYLE/').test(nl[i].parentNode.nodeName))\r
- nv += nl[i].nodeValue + " ";\r
- }\r
-\r
- nv = nv.replace(new RegExp('([0-9]|[' + re + '])', 'g'), ' ');\r
- nv = tinyMCE.trim(nv.replace(/(\s+)/g, ' '));\r
-\r
- nl = nv.split(/\s+/);\r
- for (i=0; i<nl.length; i++) {\r
- s = false;\r
- for (x=0; x<wl.length; x++) {\r
- if (wl[x] == nl[i]) {\r
- s = true;\r
- break;\r
+ each(dom.select('span').reverse(), function(n) {\r
+ if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {\r
+ if (!w || dom.decode(n.innerHTML) == w)\r
+ dom.remove(n, 1);\r
}\r
- }\r
-\r
- if (!s && nl[i].length > 0)\r
- wl[wl.length] = nl[i];\r
- }\r
+ });\r
\r
- return wl.join(' ');\r
- },\r
+ se.moveToBookmark(b);\r
+ },\r
\r
- _removeWords : function(doc, word) {\r
- var i, c, nl = doc.getElementsByTagName("span");\r
- var self = TinyMCE_SpellCheckerPlugin;\r
- var inst = tinyMCE.selectedInstance, b = inst ? inst.selection.getBookmark() : null;\r
+ _markWords : function(wl) {\r
+ var r1, r2, r3, r4, r5, w = '', ed = this.editor, re = this._getSeparators(), dom = ed.dom, nl = [];\r
+ var se = ed.selection, b = se.getBookmark();\r
\r
- word = typeof(word) == 'undefined' ? null : word;\r
-\r
- for (i=nl.length-1; i>=0; i--) {\r
- c = tinyMCE.getAttrib(nl[i], 'class');\r
-\r
- if ((c == 'mceItemHiddenSpellWord' || c == 'mceItemHidden') && (word == null || nl[i].innerHTML == word))\r
- self._removeWord(nl[i]);\r
- }\r
+ each(wl, function(v) {\r
+ w += (w ? '|' : '') + v;\r
+ });\r
\r
- if (b)\r
- inst.selection.moveToBookmark(b);\r
- },\r
-\r
- _checkDone : function(inst) {\r
- var self = TinyMCE_SpellCheckerPlugin;\r
- var w = self._countWords(inst);\r
-\r
- if (w == 0) {\r
- self._removeWords(inst.getDoc());\r
- inst.spellcheckerOn = false;\r
- tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');\r
- }\r
- },\r
-\r
- _countWords : function(inst) {\r
- var i, w = 0, nl = inst.getDoc().getElementsByTagName("span"), c;\r
- var self = TinyMCE_SpellCheckerPlugin;\r
+ r1 = new RegExp('([' + re + '])(' + w + ')([' + re + '])', 'g');\r
+ r2 = new RegExp('^(' + w + ')', 'g');\r
+ r3 = new RegExp('(' + w + ')([' + re + ']?)$', 'g');\r
+ r4 = new RegExp('^(' + w + ')([' + re + ']?)$', 'g');\r
+ r5 = new RegExp('(' + w + ')([' + re + '])', 'g');\r
\r
- for (i=nl.length-1; i>=0; i--) {\r
- c = tinyMCE.getAttrib(nl[i], 'class');\r
+ // Collect all text nodes\r
+ this._walk(this.editor.getBody(), function(n) {\r
+ if (n.nodeType == 3) {\r
+ nl.push(n);\r
+ }\r
+ });\r
\r
- if (c == 'mceItemHiddenSpellWord')\r
- w++;\r
- }\r
+ // Wrap incorrect words in spans\r
+ each(nl, function(n) {\r
+ var v;\r
\r
- return w;\r
- },\r
+ if (n.nodeType == 3) {\r
+ v = n.nodeValue;\r
\r
- _removeWord : function(e) {\r
- if (e != null)\r
- tinyMCE.setOuterHTML(e, e.innerHTML);\r
- },\r
+ if (r1.test(v) || r2.test(v) || r3.test(v) || r4.test(v)) {\r
+ v = dom.encode(v);\r
+ v = v.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');\r
+ v = v.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');\r
\r
- _markWords : function(doc, n, wl) {\r
- var i, nv, nn, nl = tinyMCE.getNodeTree(n, new Array(), 3);\r
- var r1, r2, r3, r4, r5, w = '';\r
- var re = TinyMCE_SpellCheckerPlugin._getWordSeparators();\r
+ dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n);\r
+ }\r
+ }\r
+ });\r
\r
- for (i=0; i<wl.length; i++) {\r
- if (wl[i].length > 0)\r
- w += wl[i] + ((i == wl.length-1) ? '' : '|');\r
- }\r
+ se.moveToBookmark(b);\r
+ },\r
\r
- for (i=0; i<nl.length; i++) {\r
- nv = nl[i].nodeValue;\r
- r1 = new RegExp('([' + re + '])(' + w + ')([' + re + '])', 'g');\r
- r2 = new RegExp('^(' + w + ')', 'g');\r
- r3 = new RegExp('(' + w + ')([' + re + ']?)$', 'g');\r
- r4 = new RegExp('^(' + w + ')([' + re + ']?)$', 'g');\r
- r5 = new RegExp('(' + w + ')([' + re + '])', 'g');\r
+ _showMenu : function(ed, e) {\r
+ var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin());\r
\r
- if (r1.test(nv) || r2.test(nv) || r3.test(nv) || r4.test(nv)) {\r
- nv = tinyMCE.xmlEncode(nv);\r
- nv = nv.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');\r
- nv = nv.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');\r
+ if (!m) {\r
+ p1 = DOM.getPos(ed.getContentAreaContainer());\r
+ //p2 = DOM.getPos(ed.getContainer());\r
\r
- nn = doc.createElement('span');\r
- nn.className = "mceItemHidden";\r
- nn.innerHTML = nv;\r
+ m = ed.controlManager.createDropMenu('spellcheckermenu', {\r
+ offset_x : p1.x,\r
+ offset_y : p1.y,\r
+ 'class' : 'mceNoIcons'\r
+ });\r
\r
- // Remove old text node\r
- nl[i].parentNode.replaceChild(nn, nl[i]);\r
+ t._menu = m;\r
}\r
- }\r
- },\r
\r
- _buildMenu : function(sg, max) {\r
- var i, self = TinyMCE_SpellCheckerPlugin, cm = self._contextMenu;\r
+ if (dom.hasClass(e.target, 'mceItemHiddenSpellWord')) {\r
+ m.removeAll();\r
+ m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+\r
+ t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(e.target.innerHTML)], function(r) {\r
+ m.removeAll();\r
+\r
+ if (r.length > 0) {\r
+ m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+ each(r, function(v) {\r
+ m.add({title : v, onclick : function() {\r
+ dom.replace(ed.getDoc().createTextNode(v), e.target);\r
+ t._checkDone();\r
+ }});\r
+ });\r
+\r
+ m.addSeparator();\r
+ } else\r
+ m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+\r
+ m.add({\r
+ title : 'spellchecker.ignore_word',\r
+ onclick : function() {\r
+ dom.remove(e.target, 1);\r
+ t._checkDone();\r
+ }\r
+ });\r
+\r
+ m.add({\r
+ title : 'spellchecker.ignore_words',\r
+ onclick : function() {\r
+ t._removeWords(dom.decode(e.target.innerHTML));\r
+ t._checkDone();\r
+ }\r
+ });\r
+\r
+ m.update();\r
+ });\r
+\r
+ ed.selection.select(e.target);\r
+ p1 = dom.getPos(e.target);\r
+ m.showMenu(p1.x, p1.y + e.target.offsetHeight - vp.y);\r
+\r
+ return tinymce.dom.Event.cancel(e);\r
+ } else\r
+ m.hideMenu();\r
+ },\r
+\r
+ _checkDone : function() {\r
+ var t = this, ed = t.editor, dom = ed.dom, o;\r
+\r
+ each(dom.select('span'), function(n) {\r
+ if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {\r
+ o = true;\r
+ return false;\r
+ }\r
+ });\r
\r
- cm.clear();\r
+ if (!o)\r
+ t._done();\r
+ },\r
\r
- if (sg != null) {\r
- cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug', '', true));\r
+ _done : function() {\r
+ var t = this, la = t.active;\r
\r
- for (i=0; i<sg.length && i<max; i++)\r
- cm.addItem(sg[i], 'tinyMCE.execCommand("mceSpellCheckReplace",false,"' + sg[i] + '");');\r
+ if (t.active) {\r
+ t.active = 0;\r
+ t._removeWords();\r
\r
- cm.addSeparator();\r
- } else\r
- cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug', '', true));\r
+ if (t._menu)\r
+ t._menu.hideMenu();\r
\r
- cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_word', '', true), 'tinyMCE.execCommand(\'mceSpellCheckIgnore\');');\r
- cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_words', '', true), 'tinyMCE.execCommand(\'mceSpellCheckIgnoreAll\');');\r
+ if (la)\r
+ t.editor.nodeChanged();\r
+ }\r
+ },\r
\r
- cm.update();\r
- },\r
+ _sendRPC : function(m, p, cb) {\r
+ var t = this, url = t.editor.getParam("spellchecker_rpc_url", "{backend}");\r
\r
- _getAjaxHTTP : function() {\r
- try {\r
- return new ActiveXObject('Msxml2.XMLHTTP')\r
- } catch (e) {\r
- try {\r
- return new ActiveXObject('Microsoft.XMLHTTP')\r
- } catch (e) {\r
- return new XMLHttpRequest();\r
+ if (url == '{backend}') {\r
+ t.editor.setProgressState(0);\r
+ alert('Please specify: spellchecker_rpc_url');\r
+ return;\r
}\r
+\r
+ JSONRequest.sendRPC({\r
+ url : url,\r
+ method : m,\r
+ params : p,\r
+ success : cb,\r
+ error : function(e, x) {\r
+ t.editor.setProgressState(0);\r
+ t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));\r
+ }\r
+ });\r
}\r
- },\r
-\r
- /**\r
- * Perform AJAX call.\r
- *\r
- * @param {string} u URL of AJAX service.\r
- * @param {function} f Function to call when response arrives.\r
- * @param {string} m Request method post or get.\r
- * @param {Array} a Array with arguments to send.\r
- */\r
- _sendAjax : function(u, f, m, a) {\r
- var x = TinyMCE_SpellCheckerPlugin._getAjaxHTTP();\r
-\r
- x.open(m, u, true);\r
-\r
- x.onreadystatechange = function() {\r
- if (x.readyState == 4)\r
- f(x.responseXML);\r
- };\r
-\r
- if (m == 'post')\r
- x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\r
-\r
- x.send(a);\r
- }\r
-};\r
-\r
-// Register plugin\r
-tinyMCE.addPlugin('spellchecker', TinyMCE_SpellCheckerPlugin);\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);\r
+})();
\ No newline at end of file
+++ /dev/null
-// UK lang variables\r
-\r
-tinyMCE.addToLang('spellchecker',{\r
- desc : 'Toggle spellchecker',\r
- menu : 'Spellchecker settings',\r
- ignore_word : 'Ignore word',\r
- ignore_words : 'Ignore all',\r
- langs : 'Languages',\r
- wait : 'Please wait...',\r
- swait : 'Spellchecking, please wait...',\r
- sug : 'Suggestions',\r
- no_sug : 'No suggestions',\r
- no_mpell : 'No misspellings found.',\r
- mpell_found : 'Found {$words} misspellings.'\r
-});\r
+++ /dev/null
-<?php\r
-/**\r
- * $RCSfile: tinyspell.php,v $\r
- * $Revision: 1.1 $\r
- * $Date: 2006/03/14 17:33:47 $\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
- // Ignore the Notice errors for now.\r
- error_reporting(E_ALL ^ E_NOTICE);\r
-\r
- require_once("config.php");\r
-\r
- $id = sanitize($_POST['id'], "loose");\r
-\r
- if (!$spellCheckerConfig['enabled']) {\r
- header('Content-type: text/xml; charset=utf-8');\r
- echo '<?xml version="1.0" encoding="utf-8" ?><res id="' . $id . '" error="true" msg="You must enable the spellchecker by modifying the config.php file." />';\r
- die;\r
- }\r
-\r
- // Basic config\r
- $defaultLanguage = $spellCheckerConfig['default.language'];\r
- $defaultMode = $spellCheckerConfig['default.mode'];\r
-\r
- // Normaly not required to configure\r
- $defaultSpelling = $spellCheckerConfig['default.spelling'];\r
- $defaultJargon = $spellCheckerConfig['default.jargon'];\r
- $defaultEncoding = $spellCheckerConfig['default.encoding'];\r
- $outputType = "xml"; // Do not change\r
-\r
- // Get input parameters.\r
-\r
- $check = urldecode($_REQUEST['check']);\r
- $cmd = sanitize($_REQUEST['cmd']);\r
- $lang = sanitize($_REQUEST['lang'], "strict");\r
- $mode = sanitize($_REQUEST['mode'], "strict");\r
- $spelling = sanitize($_REQUEST['spelling'], "strict");\r
- $jargon = sanitize($_REQUEST['jargon'], "strict");\r
- $encoding = sanitize($_REQUEST['encoding'], "strict");\r
- $sg = sanitize($_REQUEST['sg'], "bool");\r
- $words = array();\r
-\r
- $validRequest = true;\r
-\r
- if (empty($check))\r
- $validRequest = false;\r
-\r
- if (empty($lang))\r
- $lang = $defaultLanguage;\r
-\r
- if (empty($mode))\r
- $mode = $defaultMode;\r
-\r
- if (empty($spelling))\r
- $spelling = $defaultSpelling;\r
-\r
- if (empty($jargon))\r
- $jargon = $defaultJargon;\r
-\r
- if (empty($encoding))\r
- $encoding = $defaultEncoding;\r
-\r
- function sanitize($str, $type="strict") {\r
- switch ($type) {\r
- case "strict":\r
- $str = preg_replace("/[^a-zA-Z0-9_\-]/i", "", $str);\r
- break;\r
- case "loose":\r
- $str = preg_replace("/</i", ">", $str);\r
- $str = preg_replace("/>/i", "<", $str);\r
- break;\r
- case "bool":\r
- if ($str == "true" || $str == true)\r
- $str = true;\r
- else\r
- $str = false;\r
- break;\r
- }\r
-\r
- return $str;\r
- }\r
-\r
- $result = array();\r
- $tinyspell = new $spellCheckerConfig['class']($spellCheckerConfig, $lang, $mode, $spelling, $jargon, $encoding);\r
-\r
- if (count($tinyspell->errorMsg) == 0) {\r
- switch($cmd) {\r
- case "spell":\r
- // Space for non-exec version and \n for the exec version.\r
- $words = preg_split("/ |\n/", $check, -1, PREG_SPLIT_NO_EMPTY);\r
- $result = $tinyspell->checkWords($words);\r
- break;\r
- \r
- case "suggest":\r
- $result = $tinyspell->getSuggestion($check);\r
- break;\r
-\r
- default:\r
- // Just use this for now.\r
- $tinyspell->errorMsg[] = "No command.";\r
- $outputType = $outputType . "error";\r
- break;\r
- }\r
- } else\r
- $outputType = $outputType . "error";\r
-\r
- if (!$result)\r
- $result = array();\r
-\r
- // Output data\r
- switch($outputType) {\r
- case "xml":\r
- header('Content-type: text/xml; charset=utf-8');\r
- $body = '<?xml version="1.0" encoding="utf-8" ?>';\r
- $body .= "\n";\r
- \r
- if (count($result) == 0)\r
- $body .= '<res id="' . $id . '" cmd="'. $cmd .'" />';\r
- else\r
- $body .= '<res id="' . $id . '" cmd="'. $cmd .'">'. urlencode(implode(" ", $result)) .'</res>';\r
-\r
- echo $body;\r
- break;\r
- case "xmlerror";\r
- header('Content-type: text/xml; charset=utf-8');\r
- $body = '<?xml version="1.0" encoding="utf-8" ?>';\r
- $body .= "\n";\r
- $body .= '<res id="' . $id . '" cmd="'. $cmd .'" error="true" msg="'. implode(" ", $tinyspell->errorMsg) .'" />';\r
- echo $body;\r
- break;\r
- case "html":\r
- var_dump($result);\r
- break;\r
- case "htmlerror":\r
- echo "Error";\r
- break;\r
- }\r
-\r
-?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_table_cell_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/cell.js"></script>\r
+ <title>{#table_dlg.cell_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="js/cell.js"></script>\r
<link href="css/cell.css" rel="stylesheet" type="text/css" />\r
<base target="_self" />\r
</head>\r
-<body id="tablecell" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
+<body id="tablecell" style="display: none">\r
<form onsubmit="updateAction();return false;" action="#">\r
<div class="tabs">\r
<ul>\r
- <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>\r
- <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
+ <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
</ul>\r
</div>\r
\r
<div class="panel_wrapper">\r
<div id="general_panel" class="panel current">\r
<fieldset>\r
- <legend>{$lang_table_general_props}</legend>\r
+ <legend>{#table_dlg.general_props}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td><label for="align">{$lang_table_align}</label></td>\r
+ <td><label for="align">{#table_dlg.align}</label></td>\r
<td>\r
- <select id="align" name="align">\r
- <option value="">{$lang_not_set}</option>\r
- <option value="center">{$lang_table_align_middle}</option>\r
- <option value="left">{$lang_table_align_left}</option>\r
- <option value="right">{$lang_table_align_right}</option>\r
+ <select id="align" name="align" class="mceFocus">\r
+ <option value="">{#not_set}</option>\r
+ <option value="center">{#table_dlg.align_middle}</option>\r
+ <option value="left">{#table_dlg.align_left}</option>\r
+ <option value="right">{#table_dlg.align_right}</option>\r
</select>\r
</td>\r
\r
- <td><label for="celltype">{$lang_table_cell_type}</label></td>\r
+ <td><label for="celltype">{#table_dlg.cell_type}</label></td>\r
<td>\r
<select id="celltype" name="celltype">\r
- <option value="td">{$lang_table_td}</option>\r
- <option value="th">{$lang_table_th}</option>\r
+ <option value="td">{#table_dlg.td}</option>\r
+ <option value="th">{#table_dlg.th}</option>\r
</select>\r
</td>\r
</tr>\r
\r
<tr>\r
- <td><label for="valign">{$lang_table_valign}</label></td>\r
+ <td><label for="valign">{#table_dlg.valign}</label></td>\r
<td>\r
<select id="valign" name="valign">\r
- <option value="">{$lang_not_set}</option>\r
- <option value="top">{$lang_table_align_top}</option>\r
- <option value="middle">{$lang_table_align_middle}</option>\r
- <option value="bottom">{$lang_table_align_bottom}</option>\r
+ <option value="">{#not_set}</option>\r
+ <option value="top">{#table_dlg.align_top}</option>\r
+ <option value="middle">{#table_dlg.align_middle}</option>\r
+ <option value="bottom">{#table_dlg.align_bottom}</option>\r
</select>\r
</td>\r
\r
- <td><label for="scope">{$lang_table_scope}</label></td>\r
+ <td><label for="scope">{#table_dlg.scope}</label></td>\r
<td>\r
<select id="scope" name="scope">\r
- <option value="">{$lang_not_set}</option>\r
- <option value="col">{$lang_table_col}</option>\r
- <option value="row">{$lang_table_row}</option>\r
- <option value="rowgroup">{$lang_table_rowgroup}</option>\r
- <option value="colgroup">{$lang_table_colgroup}</option>\r
+ <option value="">{#not_set}</option>\r
+ <option value="col">{#table.col}</option>\r
+ <option value="row">{#table.row}</option>\r
+ <option value="rowgroup">{#table_dlg.rowgroup}</option>\r
+ <option value="colgroup">{#table_dlg.colgroup}</option>\r
</select>\r
</td>\r
\r
</tr>\r
\r
<tr>\r
- <td><label for="width">{$lang_table_width}</label></td>\r
+ <td><label for="width">{#table_dlg.width}</label></td>\r
<td><input id="width" name="width" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>\r
\r
- <td><label for="height">{$lang_table_height}</label></td>\r
+ <td><label for="height">{#table_dlg.height}</label></td>\r
<td><input id="height" name="height" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>\r
</tr>\r
\r
<tr id="styleSelectRow">\r
- <td><label for="class">{$lang_class_name}</label></td>\r
+ <td><label for="class">{#class_name}</label></td>\r
<td colspan="3">\r
- <select id="class" name="class">\r
- <option value="" selected="selected">{$lang_not_set}</option>\r
+ <select id="class" name="class" class="mceEditableSelect">\r
+ <option value="" selected="selected">{#not_set}</option>\r
</select>\r
</td>\r
</tr>\r
\r
<div id="advanced_panel" class="panel">\r
<fieldset>\r
- <legend>{$lang_table_advanced_props}</legend>\r
+ <legend>{#table_dlg.advanced_props}</legend>\r
\r
<table border="0" cellpadding="0" cellspacing="4">\r
<tr>\r
- <td class="column1"><label for="id">{$lang_table_id}</label></td> \r
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
<td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> \r
</tr>\r
\r
<tr>\r
- <td><label for="style">{$lang_table_style}</label></td>\r
+ <td><label for="style">{#table_dlg.style}</label></td>\r
<td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="dir">{$lang_table_langdir}</label></td> \r
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
<td>\r
<select id="dir" name="dir" style="width: 200px"> \r
- <option value="">{$lang_not_set}</option> \r
- <option value="ltr">{$lang_table_ltr}</option> \r
- <option value="rtl">{$lang_table_rtl}</option> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#table_dlg.ltr}</option> \r
+ <option value="rtl">{#table_dlg.rtl}</option> \r
</select>\r
</td> \r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="lang">{$lang_table_langcode}</label></td> \r
+ <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> \r
<td>\r
<input id="lang" name="lang" type="text" value="" style="width: 200px" />\r
</td> \r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td> \r
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="bordercolor">{$lang_table_bordercolor}</label></td> \r
+ <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td> \r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td> \r
+ <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> \r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<div class="mceActionPanel">\r
<div>\r
<select id="action" name="action">\r
- <option value="cell">{$lang_table_cell_cell}</option>\r
- <option value="row">{$lang_table_cell_row}</option>\r
- <option value="all">{$lang_table_cell_all}</option>\r
+ <option value="cell">{#table_dlg.cell_cell}</option>\r
+ <option value="row">{#table_dlg.cell_row}</option>\r
+ <option value="all">{#table_dlg.cell_all}</option>\r
</select>\r
</div>\r
\r
<div style="float: left">\r
- <div><input type="button" id="insert" name="insert" value="{$lang_update}" onclick="updateAction();" /></div>\r
+ <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>\r
</div>\r
\r
<div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
</form>\r
-/* CSS file for cell dialog in the table plugin */
-
-.panel_wrapper div.current {
- height: 200px;
-}
-
-.advfield {
- width: 200px;
-}
-
-#action {
- margin-bottom: 3px;
-}
-
-#class {
- width: 150px;
+/* CSS file for cell dialog in the table plugin */\r
+\r
+.panel_wrapper div.current {\r
+ height: 200px;\r
+}\r
+\r
+.advfield {\r
+ width: 200px;\r
+}\r
+\r
+#action {\r
+ margin-bottom: 3px;\r
+}\r
+\r
+#class {\r
+ width: 150px;\r
}
\ No newline at end of file
-/* CSS file for row dialog in the table plugin */
-
-.panel_wrapper div.current {
- height: 200px;
-}
-
-.advfield {
- width: 200px;
-}
-
-#action {
- margin-bottom: 3px;
-}
-
-#rowtype,#align,#valign,#class,#height {
- width: 150px;
-}
-
-#height {
- width: 50px;
-}
-
-.col2 {
- padding-left: 20px;
-}
+/* CSS file for row dialog in the table plugin */\r
+\r
+.panel_wrapper div.current {\r
+ height: 200px;\r
+}\r
+\r
+.advfield {\r
+ width: 200px;\r
+}\r
+\r
+#action {\r
+ margin-bottom: 3px;\r
+}\r
+\r
+#rowtype,#align,#valign,#class,#height {\r
+ width: 150px;\r
+}\r
+\r
+#height {\r
+ width: 50px; \r
+}\r
+\r
+.col2 {\r
+ padding-left: 20px;\r
+}\r
-/* CSS file for table dialog in the table plugin */
-
-.panel_wrapper div.current {
- height: 220px;
-}
-
-.advfield {
- width: 200px;
-}
-
-#class {
- width: 150px;
-}
+/* CSS file for table dialog in the table plugin */\r
+\r
+.panel_wrapper div.current {\r
+ height: 245px;\r
+}\r
+\r
+.advfield {\r
+ width: 200px;\r
+}\r
+\r
+#class {\r
+ width: 150px;\r
+}\r
-tinyMCE.importPluginLanguagePack('table');var TinyMCE_TablePlugin={getInfo:function(){return{longname:'Tables',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(tinyMCE.isGecko){var doc=inst.getDoc();tinyMCE.addEvent(doc,"mouseup",TinyMCE_TablePlugin._mouseDownHandler)}inst.tableRowClipboard=null},getControlHTML:function(control_name){var controls=new Array(['table','table.gif','lang_table_desc','mceInsertTable',true],['delete_table','table_delete.gif','lang_table_del','mceTableDelete'],['delete_col','table_delete_col.gif','lang_table_delete_col_desc','mceTableDeleteCol'],['delete_row','table_delete_row.gif','lang_table_delete_row_desc','mceTableDeleteRow'],['col_after','table_insert_col_after.gif','lang_table_col_after_desc','mceTableInsertColAfter'],['col_before','table_insert_col_before.gif','lang_table_col_before_desc','mceTableInsertColBefore'],['row_after','table_insert_row_after.gif','lang_table_row_after_desc','mceTableInsertRowAfter'],['row_before','table_insert_row_before.gif','lang_table_row_before_desc','mceTableInsertRowBefore'],['row_props','table_row_props.gif','lang_table_row_desc','mceTableRowProps',true],['cell_props','table_cell_props.gif','lang_table_cell_desc','mceTableCellProps',true],['split_cells','table_split_cells.gif','lang_table_split_cells_desc','mceTableSplitCells',true],['merge_cells','table_merge_cells.gif','lang_table_merge_cells_desc','mceTableMergeCells',true]);for(var i=0;i<controls.length;i++){var but=controls[i];var cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+but[3]+'\', '+(but.length>4?but[4]:false)+(but.length>5?', \''+but[5]+'\'':'')+');return false;';if(but[0]==control_name)return tinyMCE.getButtonHTML(control_name,but[2],'{$pluginurl}/images/'+but[1],but[3],(but.length>4?but[4]:false))}if(control_name=="tablecontrols"){var html="";html+=tinyMCE.getControlHTML("table");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_props");html+=tinyMCE.getControlHTML("cell_props");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_before");html+=tinyMCE.getControlHTML("row_after");html+=tinyMCE.getControlHTML("delete_row");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("col_before");html+=tinyMCE.getControlHTML("col_after");html+=tinyMCE.getControlHTML("delete_col");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("split_cells");html+=tinyMCE.getControlHTML("merge_cells");return html}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":var inst=tinyMCE.getInstanceById(editor_id);inst.execCommand('mceBeginUndoLevel');TinyMCE_TablePlugin._doExecCommand(editor_id,element,command,user_interface,value);inst.execCommand('mceEndUndoLevel');return true}return false},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){var colspan="1",rowspan="1",tdElm;var inst=tinyMCE.getInstanceById(editor_id);tinyMCE.switchClass(editor_id+'_table','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_table','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_props','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_cell_props','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_before','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_after','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_delete_row','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_col_before','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_col_after','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_delete_col','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_split_cells','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_merge_cells','mceButtonDisabled');if(tdElm=tinyMCE.getParentElement(node,"td,th")){tinyMCE.switchClass(editor_id+'_cell_props','mceButtonSelected');tinyMCE.switchClass(editor_id+'_delete_table','mceButtonNormal');tinyMCE.switchClass(editor_id+'_row_before','mceButtonNormal');tinyMCE.switchClass(editor_id+'_row_after','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_row','mceButtonNormal');tinyMCE.switchClass(editor_id+'_col_before','mceButtonNormal');tinyMCE.switchClass(editor_id+'_col_after','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_col','mceButtonNormal');colspan=tinyMCE.getAttrib(tdElm,"colspan");rowspan=tinyMCE.getAttrib(tdElm,"rowspan");colspan=colspan==""?"1":colspan;rowspan=rowspan==""?"1":rowspan;if(colspan!="1"||rowspan!="1")tinyMCE.switchClass(editor_id+'_split_cells','mceButtonNormal')}if(tinyMCE.getParentElement(node,"tr"))tinyMCE.switchClass(editor_id+'_row_props','mceButtonSelected');if(tinyMCE.getParentElement(node,"table")){tinyMCE.switchClass(editor_id+'_table','mceButtonSelected');tinyMCE.switchClass(editor_id+'_merge_cells','mceButtonNormal')}},_mouseDownHandler:function(e){var elm=tinyMCE.isMSIE?event.srcElement:e.target;var focusElm=tinyMCE.selectedInstance.getFocusElement();if(elm.nodeName=="BODY"&&(focusElm.nodeName=="TD"||focusElm.nodeName=="TH"||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TD")||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TH"))){window.setTimeout(function(){var tableElm=tinyMCE.getParentElement(focusElm,"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual'],tinyMCE.selectedInstance)},10)}},_doExecCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id);var focusElm=inst.getFocusElement();var trElm=tinyMCE.getParentElement(focusElm,"tr");var tdElm=tinyMCE.getParentElement(focusElm,"td,th");var tableElm=tinyMCE.getParentElement(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i<ar.length;i++){if(ar[i].length>0&&inArray(ar[i],v))return true;if(ar[i]==v)return true}return false}function makeTD(){var newTD=doc.createElement("td");newTD.innerHTML=" "}function getColRowSpan(td){var colspan=tinyMCE.getAttrib(td,"colspan");var rowspan=tinyMCE.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan}}function getCellPos(grid,td){var x,y;for(y=0;y<grid.length;y++){for(x=0;x<grid[y].length;x++){if(grid[y][x]==td)return{cellindex:x,rowindex:y}}}return null}function getCell(grid,row,col){if(grid[row]&&grid[row][col])return grid[row][col];return null}function getTableGrid(table){var grid=new Array(),rows=table.rows,x,y,td,sd,xstart,x2,y2;for(y=0;y<rows.length;y++){for(x=0;x<rows[y].cells.length;x++){td=rows[y].cells[x];sd=getColRowSpan(td);for(xstart=x;grid[y]&&grid[y][xstart];xstart++);for(y2=y;y2<y+sd['rowspan'];y2++){if(!grid[y2])grid[y2]=new Array();for(x2=xstart;x2<xstart+sd['colspan'];x2++)grid[y2][x2]=td}}}return grid}function trimRow(table,tr,td,new_tr){var grid=getTableGrid(table),cpos=getCellPos(grid,td);var cells,lastElm;if(new_tr.cells.length!=tr.childNodes.length){cells=tr.childNodes;lastElm=null;for(var x=0;td=getCell(grid,cpos.rowindex,x);x++){var remove=true;var sd=getColRowSpan(td);if(inArray(cells,td)){new_tr.childNodes[x]._delete=true}else if((lastElm==null||td!=lastElm)&&sd.colspan>1){for(var i=x;i<x+td.colSpan;i++)new_tr.childNodes[i]._delete=true}if((lastElm==null||td!=lastElm)&&sd.rowspan>1)td.rowSpan=sd.rowspan+1;lastElm=td}deleteMarked(tableElm)}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node}return null}function nextElm(node,names){var namesAr=names.split(',');while((node=node.nextSibling)!=null){for(var i=0;i<namesAr.length;i++){if(node.nodeName.toLowerCase()==namesAr[i].toLowerCase())return node}}return null}function deleteMarked(tbl){if(tbl.rows==0)return;var tr=tbl.rows[0];do{var next=nextElm(tr,"TR");if(tr._delete){tr.parentNode.removeChild(tr);continue}var td=tr.cells[0];if(td.cells>1){do{var nexttd=nextElm(td,"TD,TH");if(td._delete)td.parentNode.removeChild(td)}while((td=nexttd)!=null)}}while((tr=next)!=null)}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;i<rowspan&&trNext;i++){var newTD=doc.createElement("td");newTD.innerHTML=" ";if(tinyMCE.isMSIE)trNext.insertBefore(newTD,trNext.cells(td_elm.cellIndex));else trNext.insertBefore(newTD,trNext.cells[td_elm.cellIndex]);trNext=nextElm(trNext,"TR")}}function copyRow(doc,table,tr){var grid=getTableGrid(table);var newTR=tr.cloneNode(false);var cpos=getCellPos(grid,tr.cells[0]);var lastCell=null;var tableBorder=tinyMCE.getAttrib(table,"border");var tdElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){var newTD=null;if(lastCell!=tdElm){for(var i=0;i<tr.cells.length;i++){if(tdElm==tr.cells[i]){newTD=tdElm.cloneNode(true);break}}}if(newTD==null){newTD=doc.createElement("td");newTD.innerHTML=" "}newTD.colSpan=1;newTD.rowSpan=1;newTR.appendChild(newTD);lastCell=tdElm}return newTR}switch(command){case"mceTableRowProps":if(trElm==null)return true;if(user_interface){var template=new Array();template['file']='../../plugins/table/row.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_rowprops_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_rowprops_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes"})}return true;case"mceTableCellProps":if(tdElm==null)return true;if(user_interface){var template=new Array();template['file']='../../plugins/table/cell.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_cellprops_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_cellprops_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes"})}return true;case"mceInsertTable":if(user_interface){var template=new Array();template['file']='../../plugins/table/table.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_table_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_table_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes",action:value})}return true;case"mceTableDelete":var table=tinyMCE.getParentElement(inst.getFocusElement(),"table");if(table){table.parentNode.removeChild(table);inst.repaint()}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!tableElm)return true;if(trElm&&tableElm!=trElm.parentNode)tableElm=trElm.parentNode;if(tableElm&&trElm){switch(command){case"mceTableCutRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);inst.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);break;case"mceTablePasteRowBefore":if(!trElm||!tdElm)return true;var newTR=inst.tableRowClipboard.cloneNode(true);var prevTR=prevElm(trElm,"TR");if(prevTR!=null)trimRow(tableElm,prevTR,prevTR.cells[0],newTR);trElm.parentNode.insertBefore(newTR,trElm);break;case"mceTablePasteRowAfter":if(!trElm||!tdElm)return true;var nextTR=nextElm(trElm,"TR");var newTR=inst.tableRowClipboard.cloneNode(true);trimRow(tableElm,trElm,tdElm,newTR);if(nextTR==null)trElm.parentNode.appendChild(newTR);else nextTR.parentNode.insertBefore(newTR,nextTR);break;case"mceTableInsertRowBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");newTD.innerHTML=" ";newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD)}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm}}trElm.parentNode.insertBefore(newTR,trElm);grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex+1,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableInsertRowAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");newTD.innerHTML=" ";newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD)}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm}}if(newTR.hasChildNodes()){var nextTR=nextElm(trElm,"TR");if(nextTR)nextTR.parentNode.insertBefore(newTR,nextTR);else tableElm.appendChild(newTR)}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableDeleteRow":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);if(grid.length==1){tableElm=tinyMCE.getParentElement(tableElm,"table");tableElm.parentNode.removeChild(tableElm);return true}var cells=trElm.cells;var nextTR=nextElm(trElm,"TR");for(var x=0;x<cells.length;x++){if(cells[x].rowSpan>1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD)}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true}lastTDElm=tdElm}}deleteMarked(tableElm);cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,0),tinyMCE.isGecko,true);break;case"mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);newTD.innerHTML=" ";newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm)}else tdElm.colSpan++;lastTDElm=tdElm}}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex+1),tinyMCE.isGecko,true);break;case"mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);newTD.innerHTML=" ";newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD,TH");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD)}else tdElm.colSpan++;lastTDElm=tdElm}}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if(grid.length>1&&grid[0].length<=1){tableElm=tinyMCE.getParentElement(tableElm,"table");tableElm.parentNode.removeChild(tableElm);return true}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm)}lastTDElm=tdElm}}cpos.cellindex--;if(cpos.cellindex<0)cpos.cellindex=0;grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,0),tinyMCE.isGecko,true);break;case"mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i<colspan;i++){var newTD=doc.createElement("td");newTD.innerHTML=" ";trElm.insertBefore(newTD,nextElm(tdElm,"TD,TH"));if(rowspan>1)addRows(newTD,trElm,rowspan)}addRows(tdElm,trElm,rowspan)}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");break;case"mceTableMergeCells":var rows=new Array();var sel=inst.getSel();var grid=getTableGrid(tableElm);if(tinyMCE.isMSIE||sel.rangeCount==1){if(user_interface){var template=new Array();var sp=getColRowSpan(tdElm);template['file']='../../plugins/table/merge_cells.htm';template['width']=250;template['height']=105+(tinyMCE.isNS7?25:0);template['width']+=tinyMCE.getLang('lang_table_merge_cells_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_merge_cells_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes",action:"update",numcols:sp.colspan,numrows:sp.rowspan});return true}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y<grid.length;y++){var rowCells=new Array();for(var x=cpos.cellindex;x<grid[y].length;x++){var td=getCell(grid,y,x);if(td&&!inArray(rows,td)&&!inArray(rowCells,td)){var cp=getCellPos(grid,td);if(cp.cellindex<cpos.cellindex+numCols&&cp.rowindex<cpos.rowindex+numRows)rowCells[rowCells.length]=td}}if(rowCells.length>0)rows[rows.length]=rowCells}}}else{var cells=new Array();var sel=inst.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i<sel.rangeCount;i++){var rng=sel.getRangeAt(i);var tdElm=rng.startContainer.childNodes[rng.startOffset];if(!tdElm)break;if(tdElm.nodeName=="TD")cells[cells.length]=tdElm}var tRows=tableElm.rows;for(var y=0;y<tRows.length;y++){var rowCells=new Array();for(var x=0;x<tRows[y].cells.length;x++){var td=tRows[y].cells[x];for(var i=0;i<cells.length;i++){if(td==cells[i]){rowCells[rowCells.length]=td}}}if(rowCells.length>0)rows[rows.length]=rowCells}var curRow=new Array();var lastTR=null;for(var y=0;y<grid.length;y++){for(var x=0;x<grid[y].length;x++){grid[y][x]._selected=false;for(var i=0;i<cells.length;i++){if(grid[y][x]==cells[i]){if(x1==-1){x1=x;y1=y}x2=x;y2=y;grid[y][x]._selected=true}}}}for(var y=y1;y<=y2;y++){for(var x=x1;x<=x2;x++){if(!grid[y][x]._selected){alert("Invalid selection for merge.");return true}}}}var rowSpan=1,colSpan=1;var lastRowSpan=-1;for(var y=0;y<rows.length;y++){var rowColSpan=0;for(var x=0;x<rows[y].length;x++){var sd=getColRowSpan(rows[y][x]);rowColSpan+=sd['colspan'];if(lastRowSpan!=-1&&sd['rowspan']!=lastRowSpan){alert("Invalid selection for merge.");return true}lastRowSpan=sd['rowspan']}if(rowColSpan>colSpan)colSpan=rowColSpan;lastRowSpan=-1}var lastColSpan=-1;for(var x=0;x<rows[0].length;x++){var colRowSpan=0;for(var y=0;y<rows.length;y++){var sd=getColRowSpan(rows[y][x]);colRowSpan+=sd['rowspan'];if(lastColSpan!=-1&&sd['colspan']!=lastColSpan){alert("Invalid selection for merge.");return true}lastColSpan=sd['colspan']}if(colRowSpan>rowSpan)rowSpan=colRowSpan;lastColSpan=-1}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y<rows.length;y++){for(var x=0;x<rows[y].length;x++){var html=rows[y][x].innerHTML;var chk=tinyMCE.regexpReplace(html,"[ \t\r\n]","");if(chk!="<br/>"&&chk!="<br>"&&chk!=" "&&(x+y>0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm}if(tdElm.rowSpan>1)tdElm.rowSpan--}}}}break}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual'],tinyMCE.selectedInstance);tinyMCE.triggerNodeChange();inst.repaint()}return true}return false}};tinyMCE.addPlugin("table",TinyMCE_TablePlugin);
\ No newline at end of file
+(function(){var each=tinymce.each;tinymce.create('tinymce.plugins.TablePlugin',{init:function(ed,url){var t=this;t.editor=ed;t.url=url;each([['table','table.desc','mceInsertTable',true],['delete_table','table.del','mceTableDelete'],['delete_col','table.delete_col_desc','mceTableDeleteCol'],['delete_row','table.delete_row_desc','mceTableDeleteRow'],['col_after','table.col_after_desc','mceTableInsertColAfter'],['col_before','table.col_before_desc','mceTableInsertColBefore'],['row_after','table.row_after_desc','mceTableInsertRowAfter'],['row_before','table.row_before_desc','mceTableInsertRowBefore'],['row_props','table.row_desc','mceTableRowProps',true],['cell_props','table.cell_desc','mceTableCellProps',true],['split_cells','table.split_cells_desc','mceTableSplitCells',true],['merge_cells','table.merge_cells_desc','mceTableMergeCells',true]],function(c){ed.addButton(c[0],{title:c[1],cmd:c[2],ui:c[3]});});ed.onInit.add(function(){if(ed&&ed.plugins.contextmenu){ed.plugins.contextmenu.onContextMenu.add(function(th,m,e){var sm,se=ed.selection,el=se.getNode()||ed.getBody();if(ed.dom.getParent(e,'td')||ed.dom.getParent(e,'th')){m.removeAll();if(el.nodeName=='A'&&!ed.dom.getAttrib(el,'name')){m.add({title:'advanced.link_desc',icon:'link',cmd:ed.plugins.advlink?'mceAdvLink':'mceLink',ui:true});m.add({title:'advanced.unlink_desc',icon:'unlink',cmd:'UnLink'});m.addSeparator();}if(el.nodeName=='IMG'&&el.className.indexOf('mceItem')==-1){m.add({title:'advanced.image_desc',icon:'image',cmd:ed.plugins.advimage?'mceAdvImage':'mceImage',ui:true});m.addSeparator();}m.add({title:'table.desc',icon:'table',cmd:'mceInsertTable',ui:true,value:{action:'insert'}});m.add({title:'table.props_desc',icon:'table_props',cmd:'mceInsertTable',ui:true});m.add({title:'table.del',icon:'delete_table',cmd:'mceTableDelete',ui:true});m.addSeparator();sm=m.addMenu({title:'table.cell'});sm.add({title:'table.cell_desc',icon:'cell_props',cmd:'mceTableCellProps',ui:true});sm.add({title:'table.split_cells_desc',icon:'split_cells',cmd:'mceTableSplitCells',ui:true});sm.add({title:'table.merge_cells_desc',icon:'merge_cells',cmd:'mceTableMergeCells',ui:true});sm=m.addMenu({title:'table.row'});sm.add({title:'table.row_desc',icon:'row_props',cmd:'mceTableRowProps',ui:true});sm.add({title:'table.row_before_desc',icon:'row_before',cmd:'mceTableInsertRowBefore'});sm.add({title:'table.row_after_desc',icon:'row_after',cmd:'mceTableInsertRowAfter'});sm.add({title:'table.delete_row_desc',icon:'delete_row',cmd:'mceTableDeleteRow'});sm.addSeparator();sm.add({title:'table.cut_row_desc',icon:'cut',cmd:'mceTableCutRow'});sm.add({title:'table.copy_row_desc',icon:'copy',cmd:'mceTableCopyRow'});sm.add({title:'table.paste_row_before_desc',icon:'paste',cmd:'mceTablePasteRowBefore'});sm.add({title:'table.paste_row_after_desc',icon:'paste',cmd:'mceTablePasteRowAfter'});sm=m.addMenu({title:'table.col'});sm.add({title:'table.col_before_desc',icon:'col_before',cmd:'mceTableInsertColBefore'});sm.add({title:'table.col_after_desc',icon:'col_after',cmd:'mceTableInsertColAfter'});sm.add({title:'table.delete_col_desc',icon:'delete_col',cmd:'mceTableDeleteCol'});}else m.add({title:'table.desc',icon:'table',cmd:'mceInsertTable',ui:true});});}});ed.onKeyDown.add(function(ed,e){if(e.keyCode==9&&ed.dom.getParent(ed.selection.getNode(),'TABLE'))ed.undoManager.add();});ed.onNodeChange.add(function(ed,cm,n){var p=ed.dom.getParent(n,'td,th,caption');cm.setActive('table',!!p);if(p&&p.nodeName==='CAPTION')p=null;cm.setDisabled('delete_table',!p);cm.setDisabled('delete_col',!p);cm.setDisabled('delete_table',!p);cm.setDisabled('delete_row',!p);cm.setDisabled('col_after',!p);cm.setDisabled('col_before',!p);cm.setDisabled('row_after',!p);cm.setDisabled('row_before',!p);cm.setDisabled('row_props',!p);cm.setDisabled('cell_props',!p);cm.setDisabled('split_cells',!p||(parseInt(ed.dom.getAttrib(p,'colspan','1'))<2&&parseInt(ed.dom.getAttrib(p,'rowspan','1'))<2));cm.setDisabled('merge_cells',!p);});if(!tinymce.isIE){ed.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g,tinymce.isOpera?'<$1$2> </$1>':'<$1$2><br mce_bogus="1" /></$1>');});}},execCommand:function(cmd,ui,val){var ed=this.editor,b;switch(cmd){case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":ed.execCommand('mceBeginUndoLevel');this._doExecCommand(cmd,ui,val);ed.execCommand('mceEndUndoLevel');return true;}return false;},getInfo:function(){return{longname:'Tables',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_doExecCommand:function(command,user_interface,value){var inst=this.editor,ed=inst,url=this.url;var focusElm=inst.selection.getNode();var trElm=inst.dom.getParent(focusElm,"tr");var tdElm=inst.dom.getParent(focusElm,"td,th");var tableElm=inst.dom.getParent(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i<ar.length;i++){if(ar[i].length>0&&inArray(ar[i],v))return true;if(ar[i]==v)return true;}return false;}function select(dx,dy){var td;grid=getTableGrid(tableElm);dx=dx||0;dy=dy||0;dx=Math.max(cpos.cellindex+dx,0);dy=Math.max(cpos.rowindex+dy,0);inst.execCommand('mceRepaint');td=getCell(grid,dy,dx);if(td){inst.selection.select(td.firstChild||td);inst.selection.collapse(1);}};function makeTD(){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';}function getColRowSpan(td){var colspan=inst.dom.getAttrib(td,"colspan");var rowspan=inst.dom.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan};}function getCellPos(grid,td){var x,y;for(y=0;y<grid.length;y++){for(x=0;x<grid[y].length;x++){if(grid[y][x]==td)return{cellindex:x,rowindex:y};}}return null;}function getCell(grid,row,col){if(grid[row]&&grid[row][col])return grid[row][col];return null;}function getTableGrid(table){var grid=[],rows=table.rows,x,y,td,sd,xstart,x2,y2;for(y=0;y<rows.length;y++){for(x=0;x<rows[y].cells.length;x++){td=rows[y].cells[x];sd=getColRowSpan(td);for(xstart=x;grid[y]&&grid[y][xstart];xstart++);for(y2=y;y2<y+sd['rowspan'];y2++){if(!grid[y2])grid[y2]=[];for(x2=xstart;x2<xstart+sd['colspan'];x2++)grid[y2][x2]=td;}}}return grid;}function trimRow(table,tr,td,new_tr){var grid=getTableGrid(table),cpos=getCellPos(grid,td);var cells,lastElm;if(new_tr.cells.length!=tr.childNodes.length){cells=tr.childNodes;lastElm=null;for(var x=0;td=getCell(grid,cpos.rowindex,x);x++){var remove=true;var sd=getColRowSpan(td);if(inArray(cells,td)){new_tr.childNodes[x]._delete=true;}else if((lastElm==null||td!=lastElm)&&sd.colspan>1){for(var i=x;i<x+td.colSpan;i++)new_tr.childNodes[i]._delete=true;}if((lastElm==null||td!=lastElm)&&sd.rowspan>1)td.rowSpan=sd.rowspan+1;lastElm=td;}deleteMarked(tableElm);}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node;}return null;}function nextElm(node,names){var namesAr=names.split(',');while((node=node.nextSibling)!=null){for(var i=0;i<namesAr.length;i++){if(node.nodeName.toLowerCase()==namesAr[i].toLowerCase())return node;}}return null;}function deleteMarked(tbl){if(tbl.rows==0)return;var tr=tbl.rows[0];do{var next=nextElm(tr,"TR");if(tr._delete){tr.parentNode.removeChild(tr);continue;}var td=tr.cells[0];if(td.cells>1){do{var nexttd=nextElm(td,"TD,TH");if(td._delete)td.parentNode.removeChild(td);}while((td=nexttd)!=null);}}while((tr=next)!=null);}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;i<rowspan&&trNext;i++){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';if(tinymce.isIE)trNext.insertBefore(newTD,trNext.cells(td_elm.cellIndex));else trNext.insertBefore(newTD,trNext.cells[td_elm.cellIndex]);trNext=nextElm(trNext,"TR");}}function copyRow(doc,table,tr){var grid=getTableGrid(table);var newTR=tr.cloneNode(false);var cpos=getCellPos(grid,tr.cells[0]);var lastCell=null;var tableBorder=inst.dom.getAttrib(table,"border");var tdElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){var newTD=null;if(lastCell!=tdElm){for(var i=0;i<tr.cells.length;i++){if(tdElm==tr.cells[i]){newTD=tdElm.cloneNode(true);break;}}}if(newTD==null){newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';}newTD.colSpan=1;newTD.rowSpan=1;newTR.appendChild(newTD);lastCell=tdElm;}return newTR;}switch(command){case"mceTableRowProps":if(trElm==null)return true;if(user_interface){inst.windowManager.open({url:url+'/row.htm',width:400+parseInt(inst.getLang('table.rowprops_delta_width',0)),height:295+parseInt(inst.getLang('table.rowprops_delta_height',0)),inline:1},{plugin_url:url});}return true;case"mceTableCellProps":if(tdElm==null)return true;if(user_interface){inst.windowManager.open({url:url+'/cell.htm',width:400+parseInt(inst.getLang('table.cellprops_delta_width',0)),height:295+parseInt(inst.getLang('table.cellprops_delta_height',0)),inline:1},{plugin_url:url});}return true;case"mceInsertTable":if(user_interface){inst.windowManager.open({url:url+'/table.htm',width:400+parseInt(inst.getLang('table.table_delta_width',0)),height:320+parseInt(inst.getLang('table.table_delta_height',0)),inline:1},{plugin_url:url,action:value?value.action:0});}return true;case"mceTableDelete":var table=inst.dom.getParent(inst.selection.getNode(),"table");if(table){table.parentNode.removeChild(table);inst.execCommand('mceRepaint');}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!tableElm)return true;if(trElm&&tableElm!=trElm.parentNode)tableElm=trElm.parentNode;if(tableElm&&trElm){switch(command){case"mceTableCutRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);inst.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);break;case"mceTablePasteRowBefore":if(!trElm||!tdElm)return true;var newTR=inst.tableRowClipboard.cloneNode(true);var prevTR=prevElm(trElm,"TR");if(prevTR!=null)trimRow(tableElm,prevTR,prevTR.cells[0],newTR);trElm.parentNode.insertBefore(newTR,trElm);break;case"mceTablePasteRowAfter":if(!trElm||!tdElm)return true;var nextTR=nextElm(trElm,"TR");var newTR=inst.tableRowClipboard.cloneNode(true);trimRow(tableElm,trElm,tdElm,newTR);if(nextTR==null)trElm.parentNode.appendChild(newTR);else nextTR.parentNode.insertBefore(newTR,nextTR);break;case"mceTableInsertRowBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}trElm.parentNode.insertBefore(newTR,trElm);select(0,1);break;case"mceTableInsertRowAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}if(newTR.hasChildNodes()){var nextTR=nextElm(trElm,"TR");if(nextTR)nextTR.parentNode.insertBefore(newTR,nextTR);else tableElm.appendChild(newTR);}select(0,1);break;case"mceTableDeleteRow":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);if(grid.length==1){inst.dom.remove(inst.dom.getParent(tableElm,"table"));return true;}var cells=trElm.cells;var nextTR=nextElm(trElm,"TR");for(var x=0;x<cells.length;x++){if(cells[x].rowSpan>1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD);}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1;}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true;}lastTDElm=tdElm;}}deleteMarked(tableElm);select(0,-1);break;case"mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm);}else tdElm.colSpan++;lastTDElm=tdElm;}}select();break;case"mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD,TH");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD);}else tdElm.colSpan++;lastTDElm=tdElm;}}select(1);break;case"mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if(grid.length>1&&grid[0].length<=1){inst.dom.remove(inst.dom.getParent(tableElm,"table"));return true;}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm);}lastTDElm=tdElm;}}select(-1);break;case"mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i<colspan;i++){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';trElm.insertBefore(newTD,nextElm(tdElm,"TD,TH"));if(rowspan>1)addRows(newTD,trElm,rowspan);}addRows(tdElm,trElm,rowspan);}tableElm=inst.dom.getParent(inst.selection.getNode(),"table");break;case"mceTableMergeCells":var rows=[];var sel=inst.selection.getSel();var grid=getTableGrid(tableElm);if(tinymce.isIE||sel.rangeCount==1){if(user_interface){var sp=getColRowSpan(tdElm);inst.windowManager.open({url:url+'/merge_cells.htm',width:240+parseInt(inst.getLang('table.merge_cells_delta_width',0)),height:110+parseInt(inst.getLang('table.merge_cells_delta_height',0)),inline:1},{action:"update",numcols:sp.colspan,numrows:sp.rowspan,plugin_url:url});return true;}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y<grid.length;y++){var rowCells=[];for(var x=cpos.cellindex;x<grid[y].length;x++){var td=getCell(grid,y,x);if(td&&!inArray(rows,td)&&!inArray(rowCells,td)){var cp=getCellPos(grid,td);if(cp.cellindex<cpos.cellindex+numCols&&cp.rowindex<cpos.rowindex+numRows)rowCells[rowCells.length]=td;}}if(rowCells.length>0)rows[rows.length]=rowCells;var td=getCell(grid,cpos.rowindex,cpos.cellindex);each(ed.dom.select('br',td),function(e,i){if(i>0&&ed.dom.getAttrib('mce_bogus'))ed.dom.remove(e);});}}}else{var cells=[];var sel=inst.selection.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i<sel.rangeCount;i++){var rng=sel.getRangeAt(i);var tdElm=rng.startContainer.childNodes[rng.startOffset];if(!tdElm)break;if(tdElm.nodeName=="TD")cells[cells.length]=tdElm;}var tRows=tableElm.rows;for(var y=0;y<tRows.length;y++){var rowCells=[];for(var x=0;x<tRows[y].cells.length;x++){var td=tRows[y].cells[x];for(var i=0;i<cells.length;i++){if(td==cells[i]){rowCells[rowCells.length]=td;}}}if(rowCells.length>0)rows[rows.length]=rowCells;}var curRow=[];var lastTR=null;for(var y=0;y<grid.length;y++){for(var x=0;x<grid[y].length;x++){grid[y][x]._selected=false;for(var i=0;i<cells.length;i++){if(grid[y][x]==cells[i]){if(x1==-1){x1=x;y1=y;}x2=x;y2=y;grid[y][x]._selected=true;}}}}for(var y=y1;y<=y2;y++){for(var x=x1;x<=x2;x++){if(!grid[y][x]._selected){alert("Invalid selection for merge.");return true;}}}}var rowSpan=1,colSpan=1;var lastRowSpan=-1;for(var y=0;y<rows.length;y++){var rowColSpan=0;for(var x=0;x<rows[y].length;x++){var sd=getColRowSpan(rows[y][x]);rowColSpan+=sd['colspan'];if(lastRowSpan!=-1&&sd['rowspan']!=lastRowSpan){alert("Invalid selection for merge.");return true;}lastRowSpan=sd['rowspan'];}if(rowColSpan>colSpan)colSpan=rowColSpan;lastRowSpan=-1;}var lastColSpan=-1;for(var x=0;x<rows[0].length;x++){var colRowSpan=0;for(var y=0;y<rows.length;y++){var sd=getColRowSpan(rows[y][x]);colRowSpan+=sd['rowspan'];if(lastColSpan!=-1&&sd['colspan']!=lastColSpan){alert("Invalid selection for merge.");return true;}lastColSpan=sd['colspan'];}if(colRowSpan>rowSpan)rowSpan=colRowSpan;lastColSpan=-1;}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y<rows.length;y++){for(var x=0;x<rows[y].length;x++){var html=rows[y][x].innerHTML;var chk=html.replace(/[ \t\r\n]/g,"");if(chk!="<br/>"&&chk!="<br>"&&chk!='<br mce_bogus="1"/>'&&(x+y>0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm;}if(tdElm.rowSpan>1)tdElm.rowSpan--;}}}}each(ed.dom.select('br',tdElm),function(e,i){if(i>0&&ed.dom.getAttrib(e,'mce_bogus'))ed.dom.remove(e);});break;}tableElm=inst.dom.getParent(inst.selection.getNode(),"table");inst.addVisual(tableElm);inst.nodeChanged();}return true;}return false;}});tinymce.PluginManager.add('table',tinymce.plugins.TablePlugin);})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
+ * $Id: editor_plugin_src.js 768 2008-04-04 13:52:49Z spocke $\r
*\r
* @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
*/\r
\r
-/* Import plugin specific language pack */\r
-tinyMCE.importPluginLanguagePack('table');\r
-\r
-var TinyMCE_TablePlugin = {\r
- getInfo : function() {\r
- return {\r
- longname : 'Tables',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',\r
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
- };\r
- },\r
-\r
- initInstance : function(inst) {\r
- if (tinyMCE.isGecko) {\r
- var doc = inst.getDoc();\r
- tinyMCE.addEvent(doc, "mouseup", TinyMCE_TablePlugin._mouseDownHandler);\r
- }\r
+(function() {\r
+ var each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.plugins.TablePlugin', {\r
+ init : function(ed, url) {\r
+ var t = this;\r
+\r
+ t.editor = ed;\r
+ t.url = url;\r
+\r
+ // Register buttons\r
+ each([\r
+ ['table', 'table.desc', 'mceInsertTable', true],\r
+ ['delete_table', 'table.del', 'mceTableDelete'],\r
+ ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],\r
+ ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],\r
+ ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],\r
+ ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],\r
+ ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],\r
+ ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],\r
+ ['row_props', 'table.row_desc', 'mceTableRowProps', true],\r
+ ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],\r
+ ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],\r
+ ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]\r
+ ], function(c) {\r
+ ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});\r
+ });\r
+\r
+ ed.onInit.add(function() {\r
+ if (ed && ed.plugins.contextmenu) {\r
+ ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {\r
+ var sm, se = ed.selection, el = se.getNode() || ed.getBody();\r
+\r
+ if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th')) {\r
+ m.removeAll();\r
+\r
+ if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {\r
+ m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});\r
+ m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});\r
+ m.addSeparator();\r
+ }\r
\r
- inst.tableRowClipboard = null;\r
- },\r
-\r
- /**\r
- * Returns the HTML contents of the table control.\r
- */\r
- getControlHTML : function(control_name) {\r
- var controls = new Array(\r
- ['table', 'table.gif', 'lang_table_desc', 'mceInsertTable', true],\r
- ['delete_table', 'table_delete.gif', 'lang_table_del', 'mceTableDelete'],\r
- ['delete_col', 'table_delete_col.gif', 'lang_table_delete_col_desc', 'mceTableDeleteCol'],\r
- ['delete_row', 'table_delete_row.gif', 'lang_table_delete_row_desc', 'mceTableDeleteRow'],\r
- ['col_after', 'table_insert_col_after.gif', 'lang_table_col_after_desc', 'mceTableInsertColAfter'],\r
- ['col_before', 'table_insert_col_before.gif', 'lang_table_col_before_desc', 'mceTableInsertColBefore'],\r
- ['row_after', 'table_insert_row_after.gif', 'lang_table_row_after_desc', 'mceTableInsertRowAfter'],\r
- ['row_before', 'table_insert_row_before.gif', 'lang_table_row_before_desc', 'mceTableInsertRowBefore'],\r
- ['row_props', 'table_row_props.gif', 'lang_table_row_desc', 'mceTableRowProps', true],\r
- ['cell_props', 'table_cell_props.gif', 'lang_table_cell_desc', 'mceTableCellProps', true],\r
- ['split_cells', 'table_split_cells.gif', 'lang_table_split_cells_desc', 'mceTableSplitCells', true],\r
- ['merge_cells', 'table_merge_cells.gif', 'lang_table_merge_cells_desc', 'mceTableMergeCells', true]);\r
-\r
- // Render table control\r
- for (var i=0; i<controls.length; i++) {\r
- var but = controls[i];\r
- var cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + but[3] + '\', ' + (but.length > 4 ? but[4] : false) + (but.length > 5 ? ', \'' + but[5] + '\'' : '') + ');return false;';\r
-\r
- if (but[0] == control_name)\r
- return tinyMCE.getButtonHTML(control_name, but[2], '{$pluginurl}/images/'+ but[1], but[3], (but.length > 4 ? but[4] : false));\r
- }\r
+ if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {\r
+ m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});\r
+ m.addSeparator();\r
+ }\r
\r
- // Special tablecontrols\r
- if (control_name == "tablecontrols") {\r
- var html = "";\r
-\r
- html += tinyMCE.getControlHTML("table");\r
- html += tinyMCE.getControlHTML("separator");\r
- html += tinyMCE.getControlHTML("row_props");\r
- html += tinyMCE.getControlHTML("cell_props");\r
- html += tinyMCE.getControlHTML("separator");\r
- html += tinyMCE.getControlHTML("row_before");\r
- html += tinyMCE.getControlHTML("row_after");\r
- html += tinyMCE.getControlHTML("delete_row");\r
- html += tinyMCE.getControlHTML("separator");\r
- html += tinyMCE.getControlHTML("col_before");\r
- html += tinyMCE.getControlHTML("col_after");\r
- html += tinyMCE.getControlHTML("delete_col");\r
- html += tinyMCE.getControlHTML("separator");\r
- html += tinyMCE.getControlHTML("split_cells");\r
- html += tinyMCE.getControlHTML("merge_cells");\r
-\r
- return html;\r
- }\r
+ m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true, value : {action : 'insert'}});\r
+ m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable', ui : true});\r
+ m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete', ui : true});\r
+ m.addSeparator();\r
+\r
+ // Cell menu\r
+ sm = m.addMenu({title : 'table.cell'});\r
+ sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps', ui : true});\r
+ sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells', ui : true});\r
+ sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells', ui : true});\r
+\r
+ // Row menu\r
+ sm = m.addMenu({title : 'table.row'});\r
+ sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps', ui : true});\r
+ sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});\r
+ sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});\r
+ sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});\r
+ sm.addSeparator();\r
+ sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});\r
+ sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});\r
+ sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'});\r
+ sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'});\r
+\r
+ // Column menu\r
+ sm = m.addMenu({title : 'table.col'});\r
+ sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});\r
+ sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});\r
+ sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});\r
+ } else\r
+ m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true});\r
+ });\r
+ }\r
+ });\r
+\r
+ // Add undo level when new rows are created using the tab key\r
+ ed.onKeyDown.add(function(ed, e) {\r
+ if (e.keyCode == 9 && ed.dom.getParent(ed.selection.getNode(), 'TABLE'))\r
+ ed.undoManager.add();\r
+ });\r
+\r
+ ed.onNodeChange.add(function(ed, cm, n) {\r
+ var p = ed.dom.getParent(n, 'td,th,caption');\r
+\r
+ cm.setActive('table', !!p);\r
+ if (p && p.nodeName === 'CAPTION')\r
+ p = null;\r
+\r
+ cm.setDisabled('delete_table', !p);\r
+ cm.setDisabled('delete_col', !p);\r
+ cm.setDisabled('delete_table', !p);\r
+ cm.setDisabled('delete_row', !p);\r
+ cm.setDisabled('col_after', !p);\r
+ cm.setDisabled('col_before', !p);\r
+ cm.setDisabled('row_after', !p);\r
+ cm.setDisabled('row_before', !p);\r
+ cm.setDisabled('row_props', !p);\r
+ cm.setDisabled('cell_props', !p);\r
+ cm.setDisabled('split_cells', !p || (parseInt(ed.dom.getAttrib(p, 'colspan', '1')) < 2 && parseInt(ed.dom.getAttrib(p, 'rowspan', '1')) < 2));\r
+ cm.setDisabled('merge_cells', !p);\r
+ });\r
+\r
+ // Padd empty table cells\r
+ if (!tinymce.isIE) {\r
+ ed.onBeforeSetContent.add(function(ed, o) {\r
+ if (o.initial)\r
+ o.content = o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g, tinymce.isOpera ? '<$1$2> </$1>' : '<$1$2><br mce_bogus="1" /></$1>');\r
+ });\r
+ }\r
+ },\r
+\r
+ execCommand : function(cmd, ui, val) {\r
+ var ed = this.editor, b;\r
+\r
+ // Is table command\r
+ switch (cmd) {\r
+ case "mceInsertTable":\r
+ case "mceTableRowProps":\r
+ case "mceTableCellProps":\r
+ case "mceTableSplitCells":\r
+ case "mceTableMergeCells":\r
+ case "mceTableInsertRowBefore":\r
+ case "mceTableInsertRowAfter":\r
+ case "mceTableDeleteRow":\r
+ case "mceTableInsertColBefore":\r
+ case "mceTableInsertColAfter":\r
+ case "mceTableDeleteCol":\r
+ case "mceTableCutRow":\r
+ case "mceTableCopyRow":\r
+ case "mceTablePasteRowBefore":\r
+ case "mceTablePasteRowAfter":\r
+ case "mceTableDelete":\r
+ ed.execCommand('mceBeginUndoLevel');\r
+ this._doExecCommand(cmd, ui, val);\r
+ ed.execCommand('mceEndUndoLevel');\r
\r
- return "";\r
- },\r
-\r
- /**\r
- * Executes the table commands.\r
- */\r
- execCommand : function(editor_id, element, command, user_interface, value) {\r
- // Is table command\r
- switch (command) {\r
- case "mceInsertTable":\r
- case "mceTableRowProps":\r
- case "mceTableCellProps":\r
- case "mceTableSplitCells":\r
- case "mceTableMergeCells":\r
- case "mceTableInsertRowBefore":\r
- case "mceTableInsertRowAfter":\r
- case "mceTableDeleteRow":\r
- case "mceTableInsertColBefore":\r
- case "mceTableInsertColAfter":\r
- case "mceTableDeleteCol":\r
- case "mceTableCutRow":\r
- case "mceTableCopyRow":\r
- case "mceTablePasteRowBefore":\r
- case "mceTablePasteRowAfter":\r
- case "mceTableDelete":\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
-\r
- inst.execCommand('mceBeginUndoLevel');\r
- TinyMCE_TablePlugin._doExecCommand(editor_id, element, command, user_interface, value);\r
- inst.execCommand('mceEndUndoLevel');\r
+ return true;\r
+ }\r
\r
- return true;\r
- }\r
+ // Pass to next handler in chain\r
+ return false;\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Tables',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ },\r
+\r
+ // Private plugin internal methods\r
+\r
+ /**\r
+ * Executes the table commands.\r
+ */\r
+ _doExecCommand : function(command, user_interface, value) {\r
+ var inst = this.editor, ed = inst, url = this.url;\r
+ var focusElm = inst.selection.getNode();\r
+ var trElm = inst.dom.getParent(focusElm, "tr");\r
+ var tdElm = inst.dom.getParent(focusElm, "td,th");\r
+ var tableElm = inst.dom.getParent(focusElm, "table");\r
+ var doc = inst.contentWindow.document;\r
+ var tableBorder = tableElm ? tableElm.getAttribute("border") : "";\r
+\r
+ // Get first TD if no TD found\r
+ if (trElm && tdElm == null)\r
+ tdElm = trElm.cells[0];\r
+\r
+ function inArray(ar, v) {\r
+ for (var i=0; i<ar.length; i++) {\r
+ // Is array\r
+ if (ar[i].length > 0 && inArray(ar[i], v))\r
+ return true;\r
+\r
+ // Found value\r
+ if (ar[i] == v)\r
+ return true;\r
+ }\r
\r
- // Pass to next handler in chain\r
- return false;\r
- },\r
-\r
- handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {\r
- var colspan = "1", rowspan = "1", tdElm;\r
-\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
-\r
- // Reset table controls\r
- tinyMCE.switchClass(editor_id + '_table', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_delete_table', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_row_props', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_cell_props', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_row_before', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_row_after', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_delete_row', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_col_before', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_col_after', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_delete_col', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_split_cells', 'mceButtonDisabled');\r
- tinyMCE.switchClass(editor_id + '_merge_cells', 'mceButtonDisabled');\r
-\r
- // Within a td element\r
- if (tdElm = tinyMCE.getParentElement(node, "td,th")) {\r
- tinyMCE.switchClass(editor_id + '_cell_props', 'mceButtonSelected');\r
- tinyMCE.switchClass(editor_id + '_delete_table', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_row_before', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_row_after', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_delete_row', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_col_before', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_col_after', 'mceButtonNormal');\r
- tinyMCE.switchClass(editor_id + '_delete_col', 'mceButtonNormal');\r
-\r
- colspan = tinyMCE.getAttrib(tdElm, "colspan");\r
- rowspan = tinyMCE.getAttrib(tdElm, "rowspan");\r
-\r
- colspan = colspan == "" ? "1" : colspan;\r
- rowspan = rowspan == "" ? "1" : rowspan;\r
-\r
- if (colspan != "1" || rowspan != "1")\r
- tinyMCE.switchClass(editor_id + '_split_cells', 'mceButtonNormal');\r
- }\r
+ return false;\r
+ }\r
\r
- // Within a tr element\r
- if (tinyMCE.getParentElement(node, "tr"))\r
- tinyMCE.switchClass(editor_id + '_row_props', 'mceButtonSelected');\r
+ function select(dx, dy) {\r
+ var td;\r
\r
- // Within table\r
- if (tinyMCE.getParentElement(node, "table")) {\r
- tinyMCE.switchClass(editor_id + '_table', 'mceButtonSelected');\r
- tinyMCE.switchClass(editor_id + '_merge_cells', 'mceButtonNormal');\r
- }\r
- },\r
+ grid = getTableGrid(tableElm);\r
+ dx = dx || 0;\r
+ dy = dy || 0;\r
+ dx = Math.max(cpos.cellindex + dx, 0);\r
+ dy = Math.max(cpos.rowindex + dy, 0);\r
\r
- // Private plugin internal methods\r
+ // Recalculate grid and select\r
+ inst.execCommand('mceRepaint');\r
+ td = getCell(grid, dy, dx);\r
\r
- _mouseDownHandler : function(e) {\r
- var elm = tinyMCE.isMSIE ? event.srcElement : e.target;\r
- var focusElm = tinyMCE.selectedInstance.getFocusElement();\r
+ if (td) {\r
+ inst.selection.select(td.firstChild || td);\r
+ inst.selection.collapse(1);\r
+ }\r
+ };\r
\r
- // If press on special Mozilla create TD/TR thingie\r
- if (elm.nodeName == "BODY" && (focusElm.nodeName == "TD" || focusElm.nodeName == "TH" || (focusElm.parentNode && focusElm.parentNode.nodeName == "TD") ||(focusElm.parentNode && focusElm.parentNode.nodeName == "TH") )) {\r
- window.setTimeout(function() {\r
- var tableElm = tinyMCE.getParentElement(focusElm, "table");\r
- tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);\r
- }, 10);\r
- }\r
- },\r
-\r
- /**\r
- * Executes the table commands.\r
- */\r
- _doExecCommand : function(editor_id, element, command, user_interface, value) {\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
- var focusElm = inst.getFocusElement();\r
- var trElm = tinyMCE.getParentElement(focusElm, "tr");\r
- var tdElm = tinyMCE.getParentElement(focusElm, "td,th");\r
- var tableElm = tinyMCE.getParentElement(focusElm, "table");\r
- var doc = inst.contentWindow.document;\r
- var tableBorder = tableElm ? tableElm.getAttribute("border") : "";\r
-\r
- // Get first TD if no TD found\r
- if (trElm && tdElm == null)\r
- tdElm = trElm.cells[0];\r
-\r
- // ------- Inner functions ---------\r
- function inArray(ar, v) {\r
- for (var i=0; i<ar.length; i++) {\r
- // Is array\r
- if (ar[i].length > 0 && inArray(ar[i], v))\r
- return true;\r
+ function makeTD() {\r
+ var newTD = doc.createElement("td");\r
\r
- // Found value\r
- if (ar[i] == v)\r
- return true;\r
+ if (!tinymce.isIE)\r
+ newTD.innerHTML = '<br mce_bogus="1"/>';\r
}\r
\r
- return false;\r
- }\r
-\r
- function makeTD() {\r
- var newTD = doc.createElement("td");\r
- newTD.innerHTML = " ";\r
- }\r
-\r
- function getColRowSpan(td) {\r
- var colspan = tinyMCE.getAttrib(td, "colspan");\r
- var rowspan = tinyMCE.getAttrib(td, "rowspan");\r
+ function getColRowSpan(td) {\r
+ var colspan = inst.dom.getAttrib(td, "colspan");\r
+ var rowspan = inst.dom.getAttrib(td, "rowspan");\r
\r
- colspan = colspan == "" ? 1 : parseInt(colspan);\r
- rowspan = rowspan == "" ? 1 : parseInt(rowspan);\r
+ colspan = colspan == "" ? 1 : parseInt(colspan);\r
+ rowspan = rowspan == "" ? 1 : parseInt(rowspan);\r
\r
- return {colspan : colspan, rowspan : rowspan};\r
- }\r
+ return {colspan : colspan, rowspan : rowspan};\r
+ }\r
\r
- function getCellPos(grid, td) {\r
- var x, y;\r
+ function getCellPos(grid, td) {\r
+ var x, y;\r
\r
- for (y=0; y<grid.length; y++) {\r
- for (x=0; x<grid[y].length; x++) {\r
- if (grid[y][x] == td)\r
- return {cellindex : x, rowindex : y};\r
+ for (y=0; y<grid.length; y++) {\r
+ for (x=0; x<grid[y].length; x++) {\r
+ if (grid[y][x] == td)\r
+ return {cellindex : x, rowindex : y};\r
+ }\r
}\r
- }\r
\r
- return null;\r
- }\r
+ return null;\r
+ }\r
\r
- function getCell(grid, row, col) {\r
- if (grid[row] && grid[row][col])\r
- return grid[row][col];\r
+ function getCell(grid, row, col) {\r
+ if (grid[row] && grid[row][col])\r
+ return grid[row][col];\r
\r
- return null;\r
- }\r
+ return null;\r
+ }\r
\r
- function getTableGrid(table) {\r
- var grid = new Array(), rows = table.rows, x, y, td, sd, xstart, x2, y2;\r
+ function getTableGrid(table) {\r
+ var grid = [], rows = table.rows, x, y, td, sd, xstart, x2, y2;\r
\r
- for (y=0; y<rows.length; y++) {\r
- for (x=0; x<rows[y].cells.length; x++) {\r
- td = rows[y].cells[x];\r
- sd = getColRowSpan(td);\r
+ for (y=0; y<rows.length; y++) {\r
+ for (x=0; x<rows[y].cells.length; x++) {\r
+ td = rows[y].cells[x];\r
+ sd = getColRowSpan(td);\r
\r
- // All ready filled\r
- for (xstart = x; grid[y] && grid[y][xstart]; xstart++) ;\r
+ // All ready filled\r
+ for (xstart = x; grid[y] && grid[y][xstart]; xstart++) ;\r
\r
- // Fill box\r
- for (y2=y; y2<y+sd['rowspan']; y2++) {\r
- if (!grid[y2])\r
- grid[y2] = new Array();\r
+ // Fill box\r
+ for (y2=y; y2<y+sd['rowspan']; y2++) {\r
+ if (!grid[y2])\r
+ grid[y2] = [];\r
\r
- for (x2=xstart; x2<xstart+sd['colspan']; x2++)\r
- grid[y2][x2] = td;\r
+ for (x2=xstart; x2<xstart+sd['colspan']; x2++)\r
+ grid[y2][x2] = td;\r
+ }\r
}\r
}\r
+\r
+ return grid;\r
}\r
\r
- return grid;\r
- }\r
+ function trimRow(table, tr, td, new_tr) {\r
+ var grid = getTableGrid(table), cpos = getCellPos(grid, td);\r
+ var cells, lastElm;\r
+\r
+ // Time to crop away some\r
+ if (new_tr.cells.length != tr.childNodes.length) {\r
+ cells = tr.childNodes;\r
+ lastElm = null;\r
+\r
+ for (var x=0; td = getCell(grid, cpos.rowindex, x); x++) {\r
+ var remove = true;\r
+ var sd = getColRowSpan(td);\r
+\r
+ // Remove due to rowspan\r
+ if (inArray(cells, td)) {\r
+ new_tr.childNodes[x]._delete = true;\r
+ } else if ((lastElm == null || td != lastElm) && sd.colspan > 1) { // Remove due to colspan\r
+ for (var i=x; i<x+td.colSpan; i++)\r
+ new_tr.childNodes[i]._delete = true;\r
+ }\r
\r
- function trimRow(table, tr, td, new_tr) {\r
- var grid = getTableGrid(table), cpos = getCellPos(grid, td);\r
- var cells, lastElm;\r
-\r
- // Time to crop away some\r
- if (new_tr.cells.length != tr.childNodes.length) {\r
- cells = tr.childNodes;\r
- lastElm = null;\r
-\r
- for (var x=0; td = getCell(grid, cpos.rowindex, x); x++) {\r
- var remove = true;\r
- var sd = getColRowSpan(td);\r
-\r
- // Remove due to rowspan\r
- if (inArray(cells, td)) {\r
- new_tr.childNodes[x]._delete = true;\r
- } else if ((lastElm == null || td != lastElm) && sd.colspan > 1) { // Remove due to colspan\r
- for (var i=x; i<x+td.colSpan; i++)\r
- new_tr.childNodes[i]._delete = true;\r
- }\r
+ if ((lastElm == null || td != lastElm) && sd.rowspan > 1)\r
+ td.rowSpan = sd.rowspan + 1;\r
\r
- if ((lastElm == null || td != lastElm) && sd.rowspan > 1)\r
- td.rowSpan = sd.rowspan + 1;\r
+ lastElm = td;\r
+ }\r
\r
- lastElm = td;\r
+ deleteMarked(tableElm);\r
}\r
-\r
- deleteMarked(tableElm);\r
}\r
- }\r
\r
- function prevElm(node, name) {\r
- while ((node = node.previousSibling) != null) {\r
- if (node.nodeName == name)\r
- return node;\r
- }\r
+ function prevElm(node, name) {\r
+ while ((node = node.previousSibling) != null) {\r
+ if (node.nodeName == name)\r
+ return node;\r
+ }\r
\r
- return null;\r
- }\r
+ return null;\r
+ }\r
\r
- function nextElm(node, names) {\r
- var namesAr = names.split(',');\r
+ function nextElm(node, names) {\r
+ var namesAr = names.split(',');\r
\r
- while ((node = node.nextSibling) != null) {\r
- for (var i=0; i<namesAr.length; i++) {\r
- if (node.nodeName.toLowerCase() == namesAr[i].toLowerCase() )\r
- return node;\r
+ while ((node = node.nextSibling) != null) {\r
+ for (var i=0; i<namesAr.length; i++) {\r
+ if (node.nodeName.toLowerCase() == namesAr[i].toLowerCase() )\r
+ return node;\r
+ }\r
}\r
+\r
+ return null;\r
}\r
\r
- return null;\r
- }\r
+ function deleteMarked(tbl) {\r
+ if (tbl.rows == 0)\r
+ return;\r
\r
- function deleteMarked(tbl) {\r
- if (tbl.rows == 0)\r
- return;\r
+ var tr = tbl.rows[0];\r
+ do {\r
+ var next = nextElm(tr, "TR");\r
\r
- var tr = tbl.rows[0];\r
- do {\r
- var next = nextElm(tr, "TR");\r
+ // Delete row\r
+ if (tr._delete) {\r
+ tr.parentNode.removeChild(tr);\r
+ continue;\r
+ }\r
\r
- // Delete row\r
- if (tr._delete) {\r
- tr.parentNode.removeChild(tr);\r
- continue;\r
- }\r
+ // Delete cells\r
+ var td = tr.cells[0];\r
+ if (td.cells > 1) {\r
+ do {\r
+ var nexttd = nextElm(td, "TD,TH");\r
\r
- // Delete cells\r
- var td = tr.cells[0];\r
- if (td.cells > 1) {\r
- do {\r
- var nexttd = nextElm(td, "TD,TH");\r
+ if (td._delete)\r
+ td.parentNode.removeChild(td);\r
+ } while ((td = nexttd) != null);\r
+ }\r
+ } while ((tr = next) != null);\r
+ }\r
\r
- if (td._delete)\r
- td.parentNode.removeChild(td);\r
- } while ((td = nexttd) != null);\r
- }\r
- } while ((tr = next) != null);\r
- }\r
+ function addRows(td_elm, tr_elm, rowspan) {\r
+ // Add rows\r
+ td_elm.rowSpan = 1;\r
+ var trNext = nextElm(tr_elm, "TR");\r
+ for (var i=1; i<rowspan && trNext; i++) {\r
+ var newTD = doc.createElement("td");\r
\r
- function addRows(td_elm, tr_elm, rowspan) {\r
- // Add rows\r
- td_elm.rowSpan = 1;\r
- var trNext = nextElm(tr_elm, "TR");\r
- for (var i=1; i<rowspan && trNext; i++) {\r
- var newTD = doc.createElement("td");\r
- newTD.innerHTML = " ";\r
+ if (!tinymce.isIE)\r
+ newTD.innerHTML = '<br mce_bogus="1"/>';\r
\r
- if (tinyMCE.isMSIE)\r
- trNext.insertBefore(newTD, trNext.cells(td_elm.cellIndex));\r
- else\r
- trNext.insertBefore(newTD, trNext.cells[td_elm.cellIndex]);\r
+ if (tinymce.isIE)\r
+ trNext.insertBefore(newTD, trNext.cells(td_elm.cellIndex));\r
+ else\r
+ trNext.insertBefore(newTD, trNext.cells[td_elm.cellIndex]);\r
\r
- trNext = nextElm(trNext, "TR");\r
+ trNext = nextElm(trNext, "TR");\r
+ }\r
}\r
- }\r
\r
- function copyRow(doc, table, tr) {\r
- var grid = getTableGrid(table);\r
- var newTR = tr.cloneNode(false);\r
- var cpos = getCellPos(grid, tr.cells[0]);\r
- var lastCell = null;\r
- var tableBorder = tinyMCE.getAttrib(table, "border");\r
- var tdElm = null;\r
-\r
- for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
- var newTD = null;\r
-\r
- if (lastCell != tdElm) {\r
- for (var i=0; i<tr.cells.length; i++) {\r
- if (tdElm == tr.cells[i]) {\r
- newTD = tdElm.cloneNode(true);\r
- break;\r
+ function copyRow(doc, table, tr) {\r
+ var grid = getTableGrid(table);\r
+ var newTR = tr.cloneNode(false);\r
+ var cpos = getCellPos(grid, tr.cells[0]);\r
+ var lastCell = null;\r
+ var tableBorder = inst.dom.getAttrib(table, "border");\r
+ var tdElm = null;\r
+\r
+ for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
+ var newTD = null;\r
+\r
+ if (lastCell != tdElm) {\r
+ for (var i=0; i<tr.cells.length; i++) {\r
+ if (tdElm == tr.cells[i]) {\r
+ newTD = tdElm.cloneNode(true);\r
+ break;\r
+ }\r
}\r
}\r
- }\r
\r
- if (newTD == null) {\r
- newTD = doc.createElement("td");\r
- newTD.innerHTML = " ";\r
- }\r
+ if (newTD == null) {\r
+ newTD = doc.createElement("td");\r
\r
- // Reset col/row span\r
- newTD.colSpan = 1;\r
- newTD.rowSpan = 1;\r
-\r
- newTR.appendChild(newTD);\r
-\r
- lastCell = tdElm;\r
- }\r
-\r
- return newTR;\r
- }\r
+ if (!tinymce.isIE)\r
+ newTD.innerHTML = '<br mce_bogus="1"/>';\r
+ }\r
\r
- // ---- Commands -----\r
+ // Reset col/row span\r
+ newTD.colSpan = 1;\r
+ newTD.rowSpan = 1;\r
\r
- // Handle commands\r
- switch (command) {\r
- case "mceTableRowProps":\r
- if (trElm == null)\r
- return true;\r
+ newTR.appendChild(newTD);\r
\r
- if (user_interface) {\r
- // Setup template\r
- var template = new Array();\r
+ lastCell = tdElm;\r
+ }\r
\r
- template['file'] = '../../plugins/table/row.htm';\r
- template['width'] = 380;\r
- template['height'] = 295;\r
+ return newTR;\r
+ }\r
\r
- // Language specific width and height addons\r
- template['width'] += tinyMCE.getLang('lang_table_rowprops_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_table_rowprops_delta_height', 0);\r
+ // ---- Commands -----\r
+\r
+ // Handle commands\r
+ switch (command) {\r
+ case "mceTableRowProps":\r
+ if (trElm == null)\r
+ return true;\r
+\r
+ if (user_interface) {\r
+ inst.windowManager.open({\r
+ url : url + '/row.htm',\r
+ width : 400 + parseInt(inst.getLang('table.rowprops_delta_width', 0)),\r
+ height : 295 + parseInt(inst.getLang('table.rowprops_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ }\r
\r
- // Open window\r
- tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes"});\r
- }\r
+ return true;\r
\r
- return true;\r
+ case "mceTableCellProps":\r
+ if (tdElm == null)\r
+ return true;\r
+\r
+ if (user_interface) {\r
+ inst.windowManager.open({\r
+ url : url + '/cell.htm',\r
+ width : 400 + parseInt(inst.getLang('table.cellprops_delta_width', 0)),\r
+ height : 295 + parseInt(inst.getLang('table.cellprops_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ }\r
\r
- case "mceTableCellProps":\r
- if (tdElm == null)\r
return true;\r
\r
- if (user_interface) {\r
- // Setup template\r
- var template = new Array();\r
+ case "mceInsertTable":\r
+ if (user_interface) {\r
+ inst.windowManager.open({\r
+ url : url + '/table.htm',\r
+ width : 400 + parseInt(inst.getLang('table.table_delta_width', 0)),\r
+ height : 320 + parseInt(inst.getLang('table.table_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url,\r
+ action : value ? value.action : 0\r
+ });\r
+ }\r
\r
- template['file'] = '../../plugins/table/cell.htm';\r
- template['width'] = 380;\r
- template['height'] = 295;\r
+ return true;\r
\r
- // Language specific width and height addons\r
- template['width'] += tinyMCE.getLang('lang_table_cellprops_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_table_cellprops_delta_height', 0);\r
+ case "mceTableDelete":\r
+ var table = inst.dom.getParent(inst.selection.getNode(), "table");\r
+ if (table) {\r
+ table.parentNode.removeChild(table);\r
+ inst.execCommand('mceRepaint');\r
+ }\r
+ return true;\r
\r
- // Open window\r
- tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes"});\r
- }\r
+ case "mceTableSplitCells":\r
+ case "mceTableMergeCells":\r
+ case "mceTableInsertRowBefore":\r
+ case "mceTableInsertRowAfter":\r
+ case "mceTableDeleteRow":\r
+ case "mceTableInsertColBefore":\r
+ case "mceTableInsertColAfter":\r
+ case "mceTableDeleteCol":\r
+ case "mceTableCutRow":\r
+ case "mceTableCopyRow":\r
+ case "mceTablePasteRowBefore":\r
+ case "mceTablePasteRowAfter":\r
+ // No table just return (invalid command)\r
+ if (!tableElm)\r
+ return true;\r
+\r
+ // Table has a tbody use that reference\r
+ // Changed logic by ApTest 2005.07.12 (www.aptest.com)\r
+ // Now lookk at the focused element and take its parentNode. That will be a tbody or a table.\r
+ if (trElm && tableElm != trElm.parentNode)\r
+ tableElm = trElm.parentNode;\r
+\r
+ if (tableElm && trElm) {\r
+ switch (command) {\r
+ case "mceTableCutRow":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- return true;\r
+ inst.tableRowClipboard = copyRow(doc, tableElm, trElm);\r
+ inst.execCommand("mceTableDeleteRow");\r
+ break;\r
\r
- case "mceInsertTable":\r
- if (user_interface) {\r
- // Setup template\r
- var template = new Array();\r
+ case "mceTableCopyRow":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- template['file'] = '../../plugins/table/table.htm';\r
- template['width'] = 380;\r
- template['height'] = 295;\r
+ inst.tableRowClipboard = copyRow(doc, tableElm, trElm);\r
+ break;\r
\r
- // Language specific width and height addons\r
- template['width'] += tinyMCE.getLang('lang_table_table_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_table_table_delta_height', 0);\r
+ case "mceTablePasteRowBefore":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- // Open window\r
- tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : value});\r
- }\r
+ var newTR = inst.tableRowClipboard.cloneNode(true);\r
\r
- return true;\r
+ var prevTR = prevElm(trElm, "TR");\r
+ if (prevTR != null)\r
+ trimRow(tableElm, prevTR, prevTR.cells[0], newTR);\r
\r
- case "mceTableDelete":\r
- var table = tinyMCE.getParentElement(inst.getFocusElement(), "table");\r
- if (table) {\r
- table.parentNode.removeChild(table);\r
- inst.repaint();\r
- }\r
- return true;\r
+ trElm.parentNode.insertBefore(newTR, trElm);\r
+ break;\r
\r
- case "mceTableSplitCells":\r
- case "mceTableMergeCells":\r
- case "mceTableInsertRowBefore":\r
- case "mceTableInsertRowAfter":\r
- case "mceTableDeleteRow":\r
- case "mceTableInsertColBefore":\r
- case "mceTableInsertColAfter":\r
- case "mceTableDeleteCol":\r
- case "mceTableCutRow":\r
- case "mceTableCopyRow":\r
- case "mceTablePasteRowBefore":\r
- case "mceTablePasteRowAfter":\r
- // No table just return (invalid command)\r
- if (!tableElm)\r
- return true;\r
+ case "mceTablePasteRowAfter":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
+ \r
+ var nextTR = nextElm(trElm, "TR");\r
+ var newTR = inst.tableRowClipboard.cloneNode(true);\r
\r
- // Table has a tbody use that reference\r
- // Changed logic by ApTest 2005.07.12 (www.aptest.com)\r
- // Now lookk at the focused element and take its parentNode. That will be a tbody or a table.\r
- if (trElm && tableElm != trElm.parentNode)\r
- tableElm = trElm.parentNode;\r
+ trimRow(tableElm, trElm, tdElm, newTR);\r
\r
- if (tableElm && trElm) {\r
- switch (command) {\r
- case "mceTableCutRow":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ if (nextTR == null)\r
+ trElm.parentNode.appendChild(newTR);\r
+ else\r
+ nextTR.parentNode.insertBefore(newTR, nextTR);\r
\r
- inst.tableRowClipboard = copyRow(doc, tableElm, trElm);\r
- inst.execCommand("mceTableDeleteRow");\r
- break;\r
+ break;\r
\r
- case "mceTableCopyRow":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ case "mceTableInsertRowBefore":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- inst.tableRowClipboard = copyRow(doc, tableElm, trElm);\r
- break;\r
+ var grid = getTableGrid(tableElm);\r
+ var cpos = getCellPos(grid, tdElm);\r
+ var newTR = doc.createElement("tr");\r
+ var lastTDElm = null;\r
\r
- case "mceTablePasteRowBefore":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ cpos.rowindex--;\r
+ if (cpos.rowindex < 0)\r
+ cpos.rowindex = 0;\r
\r
- var newTR = inst.tableRowClipboard.cloneNode(true);\r
+ // Create cells\r
+ for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
+ if (tdElm != lastTDElm) {\r
+ var sd = getColRowSpan(tdElm);\r
\r
- var prevTR = prevElm(trElm, "TR");\r
- if (prevTR != null)\r
- trimRow(tableElm, prevTR, prevTR.cells[0], newTR);\r
+ if (sd['rowspan'] == 1) {\r
+ var newTD = doc.createElement("td");\r
\r
- trElm.parentNode.insertBefore(newTR, trElm);\r
- break;\r
+ if (!tinymce.isIE)\r
+ newTD.innerHTML = '<br mce_bogus="1"/>';\r
\r
- case "mceTablePasteRowAfter":\r
- if (!trElm || !tdElm)\r
- return true;\r
- \r
- var nextTR = nextElm(trElm, "TR");\r
- var newTR = inst.tableRowClipboard.cloneNode(true);\r
+ newTD.colSpan = tdElm.colSpan;\r
\r
- trimRow(tableElm, trElm, tdElm, newTR);\r
+ newTR.appendChild(newTD);\r
+ } else\r
+ tdElm.rowSpan = sd['rowspan'] + 1;\r
\r
- if (nextTR == null)\r
- trElm.parentNode.appendChild(newTR);\r
- else\r
- nextTR.parentNode.insertBefore(newTR, nextTR);\r
+ lastTDElm = tdElm;\r
+ }\r
+ }\r
\r
+ trElm.parentNode.insertBefore(newTR, trElm);\r
+ select(0, 1);\r
break;\r
\r
- case "mceTableInsertRowBefore":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ case "mceTableInsertRowAfter":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
- var newTR = doc.createElement("tr");\r
- var lastTDElm = null;\r
+ var grid = getTableGrid(tableElm);\r
+ var cpos = getCellPos(grid, tdElm);\r
+ var newTR = doc.createElement("tr");\r
+ var lastTDElm = null;\r
\r
- cpos.rowindex--;\r
- if (cpos.rowindex < 0)\r
- cpos.rowindex = 0;\r
+ // Create cells\r
+ for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
+ if (tdElm != lastTDElm) {\r
+ var sd = getColRowSpan(tdElm);\r
\r
- // Create cells\r
- for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ if (sd['rowspan'] == 1) {\r
+ var newTD = doc.createElement("td");\r
\r
- if (sd['rowspan'] == 1) {\r
- var newTD = doc.createElement("td");\r
+ if (!tinymce.isIE)\r
+ newTD.innerHTML = '<br mce_bogus="1"/>';\r
\r
- newTD.innerHTML = " ";\r
- newTD.colSpan = tdElm.colSpan;\r
+ newTD.colSpan = tdElm.colSpan;\r
\r
- newTR.appendChild(newTD);\r
- } else\r
- tdElm.rowSpan = sd['rowspan'] + 1;\r
+ newTR.appendChild(newTD);\r
+ } else\r
+ tdElm.rowSpan = sd['rowspan'] + 1;\r
\r
- lastTDElm = tdElm;\r
+ lastTDElm = tdElm;\r
+ }\r
}\r
- }\r
\r
- trElm.parentNode.insertBefore(newTR, trElm);\r
+ if (newTR.hasChildNodes()) {\r
+ var nextTR = nextElm(trElm, "TR");\r
+ if (nextTR)\r
+ nextTR.parentNode.insertBefore(newTR, nextTR);\r
+ else\r
+ tableElm.appendChild(newTR);\r
+ }\r
\r
- grid = getTableGrid(tableElm);\r
- inst.selection.selectNode(getCell(grid, cpos.rowindex + 1, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko\r
- break;\r
+ select(0, 1);\r
+ break;\r
\r
- case "mceTableInsertRowAfter":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ case "mceTableDeleteRow":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
- var newTR = doc.createElement("tr");\r
- var lastTDElm = null;\r
+ var grid = getTableGrid(tableElm);\r
+ var cpos = getCellPos(grid, tdElm);\r
\r
- // Create cells\r
- for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ // Only one row, remove whole table\r
+ if (grid.length == 1) {\r
+ inst.dom.remove(inst.dom.getParent(tableElm, "table"));\r
+ return true;\r
+ }\r
\r
- if (sd['rowspan'] == 1) {\r
- var newTD = doc.createElement("td");\r
+ // Move down row spanned cells\r
+ var cells = trElm.cells;\r
+ var nextTR = nextElm(trElm, "TR");\r
+ for (var x=0; x<cells.length; x++) {\r
+ if (cells[x].rowSpan > 1) {\r
+ var newTD = cells[x].cloneNode(true);\r
+ var sd = getColRowSpan(cells[x]);\r
\r
- newTD.innerHTML = " ";\r
- newTD.colSpan = tdElm.colSpan;\r
+ newTD.rowSpan = sd.rowspan - 1;\r
\r
- newTR.appendChild(newTD);\r
- } else\r
- tdElm.rowSpan = sd['rowspan'] + 1;\r
+ var nextTD = nextTR.cells[x];\r
\r
- lastTDElm = tdElm;\r
+ if (nextTD == null)\r
+ nextTR.appendChild(newTD);\r
+ else\r
+ nextTR.insertBefore(newTD, nextTD);\r
+ }\r
}\r
- }\r
\r
- if (newTR.hasChildNodes()) {\r
- var nextTR = nextElm(trElm, "TR");\r
- if (nextTR)\r
- nextTR.parentNode.insertBefore(newTR, nextTR);\r
- else\r
- tableElm.appendChild(newTR);\r
- }\r
+ // Delete cells\r
+ var lastTDElm = null;\r
+ for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
+ if (tdElm != lastTDElm) {\r
+ var sd = getColRowSpan(tdElm);\r
\r
- grid = getTableGrid(tableElm);\r
- inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko\r
- break;\r
+ if (sd.rowspan > 1) {\r
+ tdElm.rowSpan = sd.rowspan - 1;\r
+ } else {\r
+ trElm = tdElm.parentNode;\r
\r
- case "mceTableDeleteRow":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ if (trElm.parentNode)\r
+ trElm._delete = true;\r
+ }\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
+ lastTDElm = tdElm;\r
+ }\r
+ }\r
\r
- // Only one row, remove whole table\r
- if (grid.length == 1) {\r
- tableElm = tinyMCE.getParentElement(tableElm, "table"); // Look for table instead of tbody\r
- tableElm.parentNode.removeChild(tableElm);\r
- return true;\r
- }\r
+ deleteMarked(tableElm);\r
\r
- // Move down row spanned cells\r
- var cells = trElm.cells;\r
- var nextTR = nextElm(trElm, "TR");\r
- for (var x=0; x<cells.length; x++) {\r
- if (cells[x].rowSpan > 1) {\r
- var newTD = cells[x].cloneNode(true);\r
- var sd = getColRowSpan(cells[x]);\r
+ select(0, -1);\r
+ break;\r
\r
- newTD.rowSpan = sd.rowspan - 1;\r
+ case "mceTableInsertColBefore":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- var nextTD = nextTR.cells[x];\r
+ var grid = getTableGrid(tableElm);\r
+ var cpos = getCellPos(grid, tdElm);\r
+ var lastTDElm = null;\r
\r
- if (nextTD == null)\r
- nextTR.appendChild(newTD);\r
- else\r
- nextTR.insertBefore(newTD, nextTD);\r
- }\r
- }\r
+ for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
+ if (tdElm != lastTDElm) {\r
+ var sd = getColRowSpan(tdElm);\r
\r
- // Delete cells\r
- var lastTDElm = null;\r
- for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ if (sd['colspan'] == 1) {\r
+ var newTD = doc.createElement(tdElm.nodeName);\r
\r
- if (sd.rowspan > 1) {\r
- tdElm.rowSpan = sd.rowspan - 1;\r
- } else {\r
- trElm = tdElm.parentNode;\r
+ if (!tinymce.isIE)\r
+ newTD.innerHTML = '<br mce_bogus="1"/>';\r
\r
- if (trElm.parentNode)\r
- trElm._delete = true;\r
- }\r
+ newTD.rowSpan = tdElm.rowSpan;\r
\r
- lastTDElm = tdElm;\r
- }\r
- }\r
+ tdElm.parentNode.insertBefore(newTD, tdElm);\r
+ } else\r
+ tdElm.colSpan++;\r
\r
- deleteMarked(tableElm);\r
+ lastTDElm = tdElm;\r
+ }\r
+ }\r
\r
- cpos.rowindex--;\r
- if (cpos.rowindex < 0)\r
- cpos.rowindex = 0;\r
+ select();\r
+ break;\r
\r
- // Recalculate grid and select\r
- grid = getTableGrid(tableElm);\r
- inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), tinyMCE.isGecko, true); // Only collape on gecko\r
- break;\r
+ case "mceTableInsertColAfter":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- case "mceTableInsertColBefore":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ var grid = getTableGrid(tableElm);\r
+ var cpos = getCellPos(grid, tdElm);\r
+ var lastTDElm = null;\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
- var lastTDElm = null;\r
+ for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
+ if (tdElm != lastTDElm) {\r
+ var sd = getColRowSpan(tdElm);\r
\r
- for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ if (sd['colspan'] == 1) {\r
+ var newTD = doc.createElement(tdElm.nodeName);\r
\r
- if (sd['colspan'] == 1) {\r
- var newTD = doc.createElement(tdElm.nodeName);\r
+ if (!tinymce.isIE)\r
+ newTD.innerHTML = '<br mce_bogus="1"/>';\r
\r
- newTD.innerHTML = " ";\r
- newTD.rowSpan = tdElm.rowSpan;\r
+ newTD.rowSpan = tdElm.rowSpan;\r
\r
- tdElm.parentNode.insertBefore(newTD, tdElm);\r
- } else\r
- tdElm.colSpan++;\r
+ var nextTD = nextElm(tdElm, "TD,TH");\r
+ if (nextTD == null)\r
+ tdElm.parentNode.appendChild(newTD);\r
+ else\r
+ nextTD.parentNode.insertBefore(newTD, nextTD);\r
+ } else\r
+ tdElm.colSpan++;\r
\r
- lastTDElm = tdElm;\r
+ lastTDElm = tdElm;\r
+ }\r
}\r
- }\r
-\r
- grid = getTableGrid(tableElm);\r
- inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex + 1), tinyMCE.isGecko, true); // Only collape on gecko\r
- break;\r
\r
- case "mceTableInsertColAfter":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ select(1);\r
+ break;\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
- var lastTDElm = null;\r
+ case "mceTableDeleteCol":\r
+ if (!trElm || !tdElm)\r
+ return true;\r
\r
- for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ var grid = getTableGrid(tableElm);\r
+ var cpos = getCellPos(grid, tdElm);\r
+ var lastTDElm = null;\r
\r
- if (sd['colspan'] == 1) {\r
- var newTD = doc.createElement(tdElm.nodeName);\r
+ // Only one col, remove whole table\r
+ if (grid.length > 1 && grid[0].length <= 1) {\r
+ inst.dom.remove(inst.dom.getParent(tableElm, "table"));\r
+ return true;\r
+ }\r
\r
- newTD.innerHTML = " ";\r
- newTD.rowSpan = tdElm.rowSpan;\r
+ // Delete cells\r
+ for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
+ if (tdElm != lastTDElm) {\r
+ var sd = getColRowSpan(tdElm);\r
\r
- var nextTD = nextElm(tdElm, "TD,TH");\r
- if (nextTD == null)\r
- tdElm.parentNode.appendChild(newTD);\r
- else\r
- nextTD.parentNode.insertBefore(newTD, nextTD);\r
- } else\r
- tdElm.colSpan++;\r
+ if (sd['colspan'] > 1)\r
+ tdElm.colSpan = sd['colspan'] - 1;\r
+ else {\r
+ if (tdElm.parentNode)\r
+ tdElm.parentNode.removeChild(tdElm);\r
+ }\r
\r
- lastTDElm = tdElm;\r
+ lastTDElm = tdElm;\r
+ }\r
}\r
- }\r
\r
- grid = getTableGrid(tableElm);\r
- inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko\r
- break;\r
+ select(-1);\r
+ break;\r
\r
- case "mceTableDeleteCol":\r
+ case "mceTableSplitCells":\r
if (!trElm || !tdElm)\r
return true;\r
\r
- var grid = getTableGrid(tableElm);\r
- var cpos = getCellPos(grid, tdElm);\r
- var lastTDElm = null;\r
+ var spandata = getColRowSpan(tdElm);\r
\r
- // Only one col, remove whole table\r
- if (grid.length > 1 && grid[0].length <= 1) {\r
- tableElm = tinyMCE.getParentElement(tableElm, "table"); // Look for table instead of tbody\r
- tableElm.parentNode.removeChild(tableElm);\r
- return true;\r
- }\r
+ var colspan = spandata["colspan"];\r
+ var rowspan = spandata["rowspan"];\r
\r
- // Delete cells\r
- for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {\r
- if (tdElm != lastTDElm) {\r
- var sd = getColRowSpan(tdElm);\r
+ // Needs splitting\r
+ if (colspan > 1 || rowspan > 1) {\r
+ // Generate cols\r
+ tdElm.colSpan = 1;\r
+ for (var i=1; i<colspan; i++) {\r
+ var newTD = doc.createElement("td");\r
\r
- if (sd['colspan'] > 1)\r
- tdElm.colSpan = sd['colspan'] - 1;\r
- else {\r
- if (tdElm.parentNode)\r
- tdElm.parentNode.removeChild(tdElm);\r
- }\r
+ if (!tinymce.isIE)\r
+ newTD.innerHTML = '<br mce_bogus="1"/>';\r
\r
- lastTDElm = tdElm;\r
- }\r
- }\r
-\r
- cpos.cellindex--;\r
- if (cpos.cellindex < 0)\r
- cpos.cellindex = 0;\r
-\r
- // Recalculate grid and select\r
- grid = getTableGrid(tableElm);\r
- inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), tinyMCE.isGecko, true); // Only collape on gecko\r
- break;\r
+ trElm.insertBefore(newTD, nextElm(tdElm, "TD,TH"));\r
\r
- case "mceTableSplitCells":\r
- if (!trElm || !tdElm)\r
- return true;\r
+ if (rowspan > 1)\r
+ addRows(newTD, trElm, rowspan);\r
+ }\r
\r
- var spandata = getColRowSpan(tdElm);\r
+ addRows(tdElm, trElm, rowspan);\r
+ }\r
\r
- var colspan = spandata["colspan"];\r
- var rowspan = spandata["rowspan"];\r
+ // Apply visual aids\r
+ tableElm = inst.dom.getParent(inst.selection.getNode(), "table");\r
+ break;\r
\r
- // Needs splitting\r
- if (colspan > 1 || rowspan > 1) {\r
- // Generate cols\r
- tdElm.colSpan = 1;\r
- for (var i=1; i<colspan; i++) {\r
- var newTD = doc.createElement("td");\r
+ case "mceTableMergeCells":\r
+ var rows = [];\r
+ var sel = inst.selection.getSel();\r
+ var grid = getTableGrid(tableElm);\r
\r
- newTD.innerHTML = " ";\r
+ if (tinymce.isIE || sel.rangeCount == 1) {\r
+ if (user_interface) {\r
+ // Setup template\r
+ var sp = getColRowSpan(tdElm);\r
+\r
+ inst.windowManager.open({\r
+ url : url + '/merge_cells.htm',\r
+ width : 240 + parseInt(inst.getLang('table.merge_cells_delta_width', 0)),\r
+ height : 110 + parseInt(inst.getLang('table.merge_cells_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ action : "update",\r
+ numcols : sp.colspan,\r
+ numrows : sp.rowspan,\r
+ plugin_url : url\r
+ });\r
\r
- trElm.insertBefore(newTD, nextElm(tdElm, "TD,TH"));\r
+ return true;\r
+ } else {\r
+ var numRows = parseInt(value['numrows']);\r
+ var numCols = parseInt(value['numcols']);\r
+ var cpos = getCellPos(grid, tdElm);\r
\r
- if (rowspan > 1)\r
- addRows(newTD, trElm, rowspan);\r
- }\r
+ if (("" + numRows) == "NaN")\r
+ numRows = 1;\r
\r
- addRows(tdElm, trElm, rowspan);\r
- }\r
+ if (("" + numCols) == "NaN")\r
+ numCols = 1;\r
\r
- // Apply visual aids\r
- tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");\r
- break;\r
+ // Get rows and cells\r
+ var tRows = tableElm.rows;\r
+ for (var y=cpos.rowindex; y<grid.length; y++) {\r
+ var rowCells = [];\r
\r
- case "mceTableMergeCells":\r
- var rows = new Array();\r
- var sel = inst.getSel();\r
- var grid = getTableGrid(tableElm);\r
+ for (var x=cpos.cellindex; x<grid[y].length; x++) {\r
+ var td = getCell(grid, y, x);\r
\r
- if (tinyMCE.isMSIE || sel.rangeCount == 1) {\r
- if (user_interface) {\r
- // Setup template\r
- var template = new Array();\r
- var sp = getColRowSpan(tdElm);\r
+ if (td && !inArray(rows, td) && !inArray(rowCells, td)) {\r
+ var cp = getCellPos(grid, td);\r
\r
- template['file'] = '../../plugins/table/merge_cells.htm';\r
- template['width'] = 250;\r
- template['height'] = 105 + (tinyMCE.isNS7 ? 25 : 0);\r
+ // Within range\r
+ if (cp.cellindex < cpos.cellindex+numCols && cp.rowindex < cpos.rowindex+numRows)\r
+ rowCells[rowCells.length] = td;\r
+ }\r
+ }\r
\r
- // Language specific width and height addons\r
- template['width'] += tinyMCE.getLang('lang_table_merge_cells_delta_width', 0);\r
- template['height'] += tinyMCE.getLang('lang_table_merge_cells_delta_height', 0);\r
+ if (rowCells.length > 0)\r
+ rows[rows.length] = rowCells;\r
\r
- // Open window\r
- tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : "update", numcols : sp.colspan, numrows : sp.rowspan});\r
+ var td = getCell(grid, cpos.rowindex, cpos.cellindex);\r
+ each(ed.dom.select('br', td), function(e, i) {\r
+ if (i > 0 && ed.dom.getAttrib('mce_bogus'))\r
+ ed.dom.remove(e);\r
+ });\r
+ }\r
\r
- return true;\r
+ //return true;\r
+ }\r
} else {\r
- var numRows = parseInt(value['numrows']);\r
- var numCols = parseInt(value['numcols']);\r
- var cpos = getCellPos(grid, tdElm);\r
+ var cells = [];\r
+ var sel = inst.selection.getSel();\r
+ var lastTR = null;\r
+ var curRow = null;\r
+ var x1 = -1, y1 = -1, x2, y2;\r
+\r
+ // Only one cell selected, whats the point?\r
+ if (sel.rangeCount < 2)\r
+ return true;\r
+\r
+ // Get all selected cells\r
+ for (var i=0; i<sel.rangeCount; i++) {\r
+ var rng = sel.getRangeAt(i);\r
+ var tdElm = rng.startContainer.childNodes[rng.startOffset];\r
\r
- if (("" + numRows) == "NaN")\r
- numRows = 1;\r
+ if (!tdElm)\r
+ break;\r
\r
- if (("" + numCols) == "NaN")\r
- numCols = 1;\r
+ if (tdElm.nodeName == "TD")\r
+ cells[cells.length] = tdElm;\r
+ }\r
\r
// Get rows and cells\r
var tRows = tableElm.rows;\r
- for (var y=cpos.rowindex; y<grid.length; y++) {\r
- var rowCells = new Array();\r
-\r
- for (var x=cpos.cellindex; x<grid[y].length; x++) {\r
- var td = getCell(grid, y, x);\r
+ for (var y=0; y<tRows.length; y++) {\r
+ var rowCells = [];\r
\r
- if (td && !inArray(rows, td) && !inArray(rowCells, td)) {\r
- var cp = getCellPos(grid, td);\r
+ for (var x=0; x<tRows[y].cells.length; x++) {\r
+ var td = tRows[y].cells[x];\r
\r
- // Within range\r
- if (cp.cellindex < cpos.cellindex+numCols && cp.rowindex < cpos.rowindex+numRows)\r
+ for (var i=0; i<cells.length; i++) {\r
+ if (td == cells[i]) {\r
rowCells[rowCells.length] = td;\r
+ }\r
}\r
}\r
\r
rows[rows.length] = rowCells;\r
}\r
\r
- //return true;\r
- }\r
- } else {\r
- var cells = new Array();\r
- var sel = inst.getSel();\r
- var lastTR = null;\r
- var curRow = null;\r
- var x1 = -1, y1 = -1, x2, y2;\r
-\r
- // Only one cell selected, whats the point?\r
- if (sel.rangeCount < 2)\r
- return true;\r
-\r
- // Get all selected cells\r
- for (var i=0; i<sel.rangeCount; i++) {\r
- var rng = sel.getRangeAt(i);\r
- var tdElm = rng.startContainer.childNodes[rng.startOffset];\r
-\r
- if (!tdElm)\r
- break;\r
-\r
- if (tdElm.nodeName == "TD")\r
- cells[cells.length] = tdElm;\r
- }\r
-\r
- // Get rows and cells\r
- var tRows = tableElm.rows;\r
- for (var y=0; y<tRows.length; y++) {\r
- var rowCells = new Array();\r
-\r
- for (var x=0; x<tRows[y].cells.length; x++) {\r
- var td = tRows[y].cells[x];\r
-\r
- for (var i=0; i<cells.length; i++) {\r
- if (td == cells[i]) {\r
- rowCells[rowCells.length] = td;\r
+ // Find selected cells in grid and box\r
+ var curRow = [];\r
+ var lastTR = null;\r
+ for (var y=0; y<grid.length; y++) {\r
+ for (var x=0; x<grid[y].length; x++) {\r
+ grid[y][x]._selected = false;\r
+\r
+ for (var i=0; i<cells.length; i++) {\r
+ if (grid[y][x] == cells[i]) {\r
+ // Get start pos\r
+ if (x1 == -1) {\r
+ x1 = x;\r
+ y1 = y;\r
+ }\r
+\r
+ // Get end pos\r
+ x2 = x;\r
+ y2 = y;\r
+\r
+ grid[y][x]._selected = true;\r
+ }\r
}\r
}\r
}\r
\r
- if (rowCells.length > 0)\r
- rows[rows.length] = rowCells;\r
- }\r
-\r
- // Find selected cells in grid and box\r
- var curRow = new Array();\r
- var lastTR = null;\r
- for (var y=0; y<grid.length; y++) {\r
- for (var x=0; x<grid[y].length; x++) {\r
- grid[y][x]._selected = false;\r
-\r
- for (var i=0; i<cells.length; i++) {\r
- if (grid[y][x] == cells[i]) {\r
- // Get start pos\r
- if (x1 == -1) {\r
- x1 = x;\r
- y1 = y;\r
- }\r
-\r
- // Get end pos\r
- x2 = x;\r
- y2 = y;\r
-\r
- grid[y][x]._selected = true;\r
+ // Is there gaps, if so deny\r
+ for (var y=y1; y<=y2; y++) {\r
+ for (var x=x1; x<=x2; x++) {\r
+ if (!grid[y][x]._selected) {\r
+ alert("Invalid selection for merge.");\r
+ return true;\r
}\r
}\r
}\r
}\r
\r
- // Is there gaps, if so deny\r
- for (var y=y1; y<=y2; y++) {\r
- for (var x=x1; x<=x2; x++) {\r
- if (!grid[y][x]._selected) {\r
- alert("Invalid selection for merge.");\r
- return true;\r
- }\r
- }\r
- }\r
- }\r
+ // Validate selection and get total rowspan and colspan\r
+ var rowSpan = 1, colSpan = 1;\r
\r
- // Validate selection and get total rowspan and colspan\r
- var rowSpan = 1, colSpan = 1;\r
+ // Validate horizontal and get total colspan\r
+ var lastRowSpan = -1;\r
+ for (var y=0; y<rows.length; y++) {\r
+ var rowColSpan = 0;\r
\r
- // Validate horizontal and get total colspan\r
- var lastRowSpan = -1;\r
- for (var y=0; y<rows.length; y++) {\r
- var rowColSpan = 0;\r
+ for (var x=0; x<rows[y].length; x++) {\r
+ var sd = getColRowSpan(rows[y][x]);\r
\r
- for (var x=0; x<rows[y].length; x++) {\r
- var sd = getColRowSpan(rows[y][x]);\r
+ rowColSpan += sd['colspan'];\r
\r
- rowColSpan += sd['colspan'];\r
+ if (lastRowSpan != -1 && sd['rowspan'] != lastRowSpan) {\r
+ alert("Invalid selection for merge.");\r
+ return true;\r
+ }\r
\r
- if (lastRowSpan != -1 && sd['rowspan'] != lastRowSpan) {\r
- alert("Invalid selection for merge.");\r
- return true;\r
+ lastRowSpan = sd['rowspan'];\r
}\r
\r
- lastRowSpan = sd['rowspan'];\r
- }\r
+ if (rowColSpan > colSpan)\r
+ colSpan = rowColSpan;\r
\r
- if (rowColSpan > colSpan)\r
- colSpan = rowColSpan;\r
+ lastRowSpan = -1;\r
+ }\r
\r
- lastRowSpan = -1;\r
- }\r
+ // Validate vertical and get total rowspan\r
+ var lastColSpan = -1;\r
+ for (var x=0; x<rows[0].length; x++) {\r
+ var colRowSpan = 0;\r
\r
- // Validate vertical and get total rowspan\r
- var lastColSpan = -1;\r
- for (var x=0; x<rows[0].length; x++) {\r
- var colRowSpan = 0;\r
+ for (var y=0; y<rows.length; y++) {\r
+ var sd = getColRowSpan(rows[y][x]);\r
\r
- for (var y=0; y<rows.length; y++) {\r
- var sd = getColRowSpan(rows[y][x]);\r
+ colRowSpan += sd['rowspan'];\r
\r
- colRowSpan += sd['rowspan'];\r
+ if (lastColSpan != -1 && sd['colspan'] != lastColSpan) {\r
+ alert("Invalid selection for merge.");\r
+ return true;\r
+ }\r
\r
- if (lastColSpan != -1 && sd['colspan'] != lastColSpan) {\r
- alert("Invalid selection for merge.");\r
- return true;\r
+ lastColSpan = sd['colspan'];\r
}\r
\r
- lastColSpan = sd['colspan'];\r
- }\r
+ if (colRowSpan > rowSpan)\r
+ rowSpan = colRowSpan;\r
\r
- if (colRowSpan > rowSpan)\r
- rowSpan = colRowSpan;\r
+ lastColSpan = -1;\r
+ }\r
\r
- lastColSpan = -1;\r
- }\r
+ // Setup td\r
+ tdElm = rows[0][0];\r
+ tdElm.rowSpan = rowSpan;\r
+ tdElm.colSpan = colSpan;\r
\r
- // Setup td\r
- tdElm = rows[0][0];\r
- tdElm.rowSpan = rowSpan;\r
- tdElm.colSpan = colSpan;\r
+ // Merge cells\r
+ for (var y=0; y<rows.length; y++) {\r
+ for (var x=0; x<rows[y].length; x++) {\r
+ var html = rows[y][x].innerHTML;\r
+ var chk = html.replace(/[ \t\r\n]/g, "");\r
\r
- // Merge cells\r
- for (var y=0; y<rows.length; y++) {\r
- for (var x=0; x<rows[y].length; x++) {\r
- var html = rows[y][x].innerHTML;\r
- var chk = tinyMCE.regexpReplace(html, "[ \t\r\n]", "");\r
+ if (chk != "<br/>" && chk != "<br>" && chk != '<br mce_bogus="1"/>' && (x+y > 0))\r
+ tdElm.innerHTML += html;\r
\r
- if (chk != "<br/>" && chk != "<br>" && chk != " " && (x+y > 0))\r
- tdElm.innerHTML += html;\r
+ // Not current cell\r
+ if (rows[y][x] != tdElm && !rows[y][x]._deleted) {\r
+ var cpos = getCellPos(grid, rows[y][x]);\r
+ var tr = rows[y][x].parentNode;\r
\r
- // Not current cell\r
- if (rows[y][x] != tdElm && !rows[y][x]._deleted) {\r
- var cpos = getCellPos(grid, rows[y][x]);\r
- var tr = rows[y][x].parentNode;\r
+ tr.removeChild(rows[y][x]);\r
+ rows[y][x]._deleted = true;\r
\r
- tr.removeChild(rows[y][x]);\r
- rows[y][x]._deleted = true;\r
+ // Empty TR, remove it\r
+ if (!tr.hasChildNodes()) {\r
+ tr.parentNode.removeChild(tr);\r
\r
- // Empty TR, remove it\r
- if (!tr.hasChildNodes()) {\r
- tr.parentNode.removeChild(tr);\r
+ var lastCell = null;\r
+ for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) {\r
+ if (cellElm != lastCell && cellElm.rowSpan > 1)\r
+ cellElm.rowSpan--;\r
\r
- var lastCell = null;\r
- for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) {\r
- if (cellElm != lastCell && cellElm.rowSpan > 1)\r
- cellElm.rowSpan--;\r
+ lastCell = cellElm;\r
+ }\r
\r
- lastCell = cellElm;\r
+ if (tdElm.rowSpan > 1)\r
+ tdElm.rowSpan--;\r
}\r
-\r
- if (tdElm.rowSpan > 1)\r
- tdElm.rowSpan--;\r
}\r
}\r
}\r
+\r
+ // Remove all but one bogus br\r
+ each(ed.dom.select('br', tdElm), function(e, i) {\r
+ if (i > 0 && ed.dom.getAttrib(e, 'mce_bogus'))\r
+ ed.dom.remove(e);\r
+ });\r
+\r
+ break;\r
}\r
\r
- break;\r
+ tableElm = inst.dom.getParent(inst.selection.getNode(), "table");\r
+ inst.addVisual(tableElm);\r
+ inst.nodeChanged();\r
}\r
\r
- tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");\r
- tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);\r
- tinyMCE.triggerNodeChange();\r
- inst.repaint();\r
- }\r
+ return true;\r
+ }\r
\r
- return true;\r
+ // Pass to next handler in chain\r
+ return false;\r
}\r
+ });\r
\r
- // Pass to next handler in chain\r
- return false;\r
- }\r
-};\r
-\r
-tinyMCE.addPlugin("table", TinyMCE_TablePlugin);\r
+ // Register plugin\r
+ tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);\r
+})();
\ No newline at end of file
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var ed;\r
+\r
+function init() {\r
+ ed = tinyMCEPopup.editor;\r
+ tinyMCEPopup.resizeToInnerSize();\r
+\r
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
+ document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');\r
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')\r
+\r
+ var inst = ed;\r
+ var tdElm = ed.dom.getParent(ed.selection.getNode(), "td,th");\r
+ var formObj = document.forms[0];\r
+ var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));\r
+\r
+ // Get table cell data\r
+ var celltype = tdElm.nodeName.toLowerCase();\r
+ var align = ed.dom.getAttrib(tdElm, 'align');\r
+ var valign = ed.dom.getAttrib(tdElm, 'valign');\r
+ var width = trimSize(getStyle(tdElm, 'width', 'width'));\r
+ var height = trimSize(getStyle(tdElm, 'height', 'height'));\r
+ var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));\r
+ var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));\r
+ var className = ed.dom.getAttrib(tdElm, 'class');\r
+ var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;\r
+ var id = ed.dom.getAttrib(tdElm, 'id');\r
+ var lang = ed.dom.getAttrib(tdElm, 'lang');\r
+ var dir = ed.dom.getAttrib(tdElm, 'dir');\r
+ var scope = ed.dom.getAttrib(tdElm, 'scope');\r
+\r
+ // Setup form\r
+ addClassesToList('class', 'table_cell_styles');\r
+ TinyMCE_EditableSelects.init();\r
+\r
+ formObj.bordercolor.value = bordercolor;\r
+ formObj.bgcolor.value = bgcolor;\r
+ formObj.backgroundimage.value = backgroundimage;\r
+ formObj.width.value = width;\r
+ formObj.height.value = height;\r
+ formObj.id.value = id;\r
+ formObj.lang.value = lang;\r
+ formObj.style.value = ed.dom.serializeStyle(st);\r
+ selectByValue(formObj, 'align', align);\r
+ selectByValue(formObj, 'valign', valign);\r
+ selectByValue(formObj, 'class', className, true, true);\r
+ selectByValue(formObj, 'celltype', celltype);\r
+ selectByValue(formObj, 'dir', dir);\r
+ selectByValue(formObj, 'scope', scope);\r
+\r
+ // Resize some elements\r
+ if (isVisible('backgroundimagebrowser'))\r
+ document.getElementById('backgroundimage').style.width = '180px';\r
+\r
+ updateColor('bordercolor_pick', 'bordercolor');\r
+ updateColor('bgcolor_pick', 'bgcolor');\r
+}\r
+\r
+function updateAction() {\r
+ var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];\r
+\r
+ tinyMCEPopup.restoreSelection();\r
+ el = ed.selection.getNode();\r
+ tdElm = ed.dom.getParent(el, "td,th");\r
+ trElm = ed.dom.getParent(el, "tr");\r
+ tableElm = ed.dom.getParent(el, "table");\r
+\r
+ ed.execCommand('mceBeginUndoLevel');\r
+\r
+ switch (getSelectValue(formObj, 'action')) {\r
+ case "cell":\r
+ var celltype = getSelectValue(formObj, 'celltype');\r
+ var scope = getSelectValue(formObj, 'scope');\r
+\r
+ if (ed.getParam("accessibility_warnings")) {\r
+ if (celltype == "th" && scope == "")\r
+ var answer = confirm(ed.getLang('table_dlg.missing_scope', '', true));\r
+ else\r
+ var answer = true;\r
+\r
+ if (!answer)\r
+ return;\r
+ }\r
+\r
+ updateCell(tdElm);\r
+ break;\r
+\r
+ case "row":\r
+ var cell = trElm.firstChild;\r
+\r
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
+ cell = nextCell(cell);\r
+\r
+ do {\r
+ cell = updateCell(cell, true);\r
+ } while ((cell = nextCell(cell)) != null);\r
+\r
+ break;\r
+\r
+ case "all":\r
+ var rows = tableElm.getElementsByTagName("tr");\r
+\r
+ for (var i=0; i<rows.length; i++) {\r
+ var cell = rows[i].firstChild;\r
+\r
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
+ cell = nextCell(cell);\r
+\r
+ do {\r
+ cell = updateCell(cell, true);\r
+ } while ((cell = nextCell(cell)) != null);\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ ed.addVisual();\r
+ ed.nodeChanged();\r
+ inst.execCommand('mceEndUndoLevel');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function nextCell(elm) {\r
+ while ((elm = elm.nextSibling) != null) {\r
+ if (elm.nodeName == "TD" || elm.nodeName == "TH")\r
+ return elm;\r
+ }\r
+\r
+ return null;\r
+}\r
+\r
+function updateCell(td, skip_id) {\r
+ var inst = ed;\r
+ var formObj = document.forms[0];\r
+ var curCellType = td.nodeName.toLowerCase();\r
+ var celltype = getSelectValue(formObj, 'celltype');\r
+ var doc = inst.getDoc();\r
+ var dom = ed.dom;\r
+\r
+ if (!skip_id)\r
+ td.setAttribute('id', formObj.id.value);\r
+\r
+ td.setAttribute('align', formObj.align.value);\r
+ td.setAttribute('vAlign', formObj.valign.value);\r
+ td.setAttribute('lang', formObj.lang.value);\r
+ td.setAttribute('dir', getSelectValue(formObj, 'dir'));\r
+ td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));\r
+ td.setAttribute('scope', formObj.scope.value);\r
+ ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));\r
+\r
+ // Clear deprecated attributes\r
+ ed.dom.setAttrib(td, 'width', '');\r
+ ed.dom.setAttrib(td, 'height', '');\r
+ ed.dom.setAttrib(td, 'bgColor', '');\r
+ ed.dom.setAttrib(td, 'borderColor', '');\r
+ ed.dom.setAttrib(td, 'background', '');\r
+\r
+ // Set styles\r
+ td.style.width = getCSSSize(formObj.width.value);\r
+ td.style.height = getCSSSize(formObj.height.value);\r
+ if (formObj.bordercolor.value != "") {\r
+ td.style.borderColor = formObj.bordercolor.value;\r
+ td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;\r
+ td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;\r
+ } else\r
+ td.style.borderColor = '';\r
+\r
+ td.style.backgroundColor = formObj.bgcolor.value;\r
+\r
+ if (formObj.backgroundimage.value != "")\r
+ td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
+ else\r
+ td.style.backgroundImage = '';\r
+\r
+ if (curCellType != celltype) {\r
+ // changing to a different node type\r
+ var newCell = doc.createElement(celltype);\r
+\r
+ for (var c=0; c<td.childNodes.length; c++)\r
+ newCell.appendChild(td.childNodes[c].cloneNode(1));\r
+\r
+ for (var a=0; a<td.attributes.length; a++)\r
+ ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));\r
+\r
+ td.parentNode.replaceChild(newCell, td);\r
+ td = newCell;\r
+ }\r
+\r
+ dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));\r
+\r
+ return td;\r
+}\r
+\r
+function changedBackgroundImage() {\r
+ var formObj = document.forms[0];\r
+ var st = ed.dom.parseStyle(formObj.style.value);\r
+\r
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
+\r
+ formObj.style.value = ed.dom.serializeStyle(st);\r
+}\r
+\r
+function changedSize() {\r
+ var formObj = document.forms[0];\r
+ var st = ed.dom.parseStyle(formObj.style.value);\r
+\r
+ var width = formObj.width.value;\r
+ if (width != "")\r
+ st['width'] = getCSSSize(width);\r
+ else\r
+ st['width'] = "";\r
+\r
+ var height = formObj.height.value;\r
+ if (height != "")\r
+ st['height'] = getCSSSize(height);\r
+ else\r
+ st['height'] = "";\r
+\r
+ formObj.style.value = ed.dom.serializeStyle(st);\r
+}\r
+\r
+function changedColor() {\r
+ var formObj = document.forms[0];\r
+ var st = ed.dom.parseStyle(formObj.style.value);\r
+\r
+ st['background-color'] = formObj.bgcolor.value;\r
+ st['border-color'] = formObj.bordercolor.value;\r
+\r
+ formObj.style.value = ed.dom.serializeStyle(st);\r
+}\r
+\r
+function changedStyle() {\r
+ var formObj = document.forms[0];\r
+ var st = ed.dom.parseStyle(formObj.style.value);\r
+\r
+ if (st['background-image'])\r
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+ else\r
+ formObj.backgroundimage.value = '';\r
+\r
+ if (st['width'])\r
+ formObj.width.value = trimSize(st['width']);\r
+\r
+ if (st['height'])\r
+ formObj.height.value = trimSize(st['height']);\r
+\r
+ if (st['background-color']) {\r
+ formObj.bgcolor.value = st['background-color'];\r
+ updateColor('bgcolor_pick','bgcolor');\r
+ }\r
+\r
+ if (st['border-color']) {\r
+ formObj.bordercolor.value = st['border-color'];\r
+ updateColor('bordercolor_pick','bordercolor');\r
+ }\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+function init() {\r
+ var f = document.forms[0], v;\r
+\r
+ tinyMCEPopup.resizeToInnerSize();\r
+\r
+ f.numcols.value = tinyMCEPopup.getWindowArg('numcols', 1);\r
+ f.numrows.value = tinyMCEPopup.getWindowArg('numcols', 1);\r
+}\r
+\r
+function mergeCells() {\r
+ var args = [], f = document.forms[0];\r
+\r
+ tinyMCEPopup.restoreSelection();\r
+\r
+ if (!AutoValidator.validate(f)) {\r
+ alert(tinyMCEPopup.getLang('invalid_data'));\r
+ return false;\r
+ }\r
+\r
+ args["numcols"] = f.numcols.value;\r
+ args["numrows"] = f.numrows.value;\r
+\r
+ tinyMCEPopup.execCommand("mceTableMergeCells", false, args);\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+function init() {\r
+ tinyMCEPopup.resizeToInnerSize();\r
+\r
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
+\r
+ var inst = tinyMCEPopup.editor;\r
+ var dom = inst.dom;\r
+ var trElm = dom.getParent(inst.selection.getNode(), "tr");\r
+ var formObj = document.forms[0];\r
+ var st = dom.parseStyle(dom.getAttrib(trElm, "style"));\r
+\r
+ // Get table row data\r
+ var rowtype = trElm.parentNode.nodeName.toLowerCase();\r
+ var align = dom.getAttrib(trElm, 'align');\r
+ var valign = dom.getAttrib(trElm, 'valign');\r
+ var height = trimSize(getStyle(trElm, 'height', 'height'));\r
+ var className = dom.getAttrib(trElm, 'class');\r
+ var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));\r
+ var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;\r
+ var id = dom.getAttrib(trElm, 'id');\r
+ var lang = dom.getAttrib(trElm, 'lang');\r
+ var dir = dom.getAttrib(trElm, 'dir');\r
+\r
+ // Setup form\r
+ addClassesToList('class', 'table_row_styles');\r
+ TinyMCE_EditableSelects.init();\r
+\r
+ formObj.bgcolor.value = bgcolor;\r
+ formObj.backgroundimage.value = backgroundimage;\r
+ formObj.height.value = height;\r
+ formObj.id.value = id;\r
+ formObj.lang.value = lang;\r
+ formObj.style.value = dom.serializeStyle(st);\r
+ selectByValue(formObj, 'align', align);\r
+ selectByValue(formObj, 'valign', valign);\r
+ selectByValue(formObj, 'class', className, true, true);\r
+ selectByValue(formObj, 'rowtype', rowtype);\r
+ selectByValue(formObj, 'dir', dir);\r
+\r
+ // Resize some elements\r
+ if (isVisible('backgroundimagebrowser'))\r
+ document.getElementById('backgroundimage').style.width = '180px';\r
+\r
+ updateColor('bgcolor_pick', 'bgcolor');\r
+}\r
+\r
+function updateAction() {\r
+ var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];\r
+ var action = getSelectValue(formObj, 'action');\r
+\r
+ tinyMCEPopup.restoreSelection();\r
+ trElm = dom.getParent(inst.selection.getNode(), "tr");\r
+ tableElm = dom.getParent(inst.selection.getNode(), "table");\r
+\r
+ inst.execCommand('mceBeginUndoLevel');\r
+\r
+ switch (action) {\r
+ case "row":\r
+ updateRow(trElm);\r
+ break;\r
+\r
+ case "all":\r
+ var rows = tableElm.getElementsByTagName("tr");\r
+\r
+ for (var i=0; i<rows.length; i++)\r
+ updateRow(rows[i], true);\r
+\r
+ break;\r
+\r
+ case "odd":\r
+ case "even":\r
+ var rows = tableElm.getElementsByTagName("tr");\r
+\r
+ for (var i=0; i<rows.length; i++) {\r
+ if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))\r
+ updateRow(rows[i], true, true);\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ inst.addVisual();\r
+ inst.nodeChanged();\r
+ inst.execCommand('mceEndUndoLevel');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function updateRow(tr_elm, skip_id, skip_parent) {\r
+ var inst = tinyMCEPopup.editor;\r
+ var formObj = document.forms[0];\r
+ var dom = inst.dom;\r
+ var curRowType = tr_elm.parentNode.nodeName.toLowerCase();\r
+ var rowtype = getSelectValue(formObj, 'rowtype');\r
+ var doc = inst.getDoc();\r
+\r
+ // Update row element\r
+ if (!skip_id)\r
+ tr_elm.setAttribute('id', formObj.id.value);\r
+\r
+ tr_elm.setAttribute('align', getSelectValue(formObj, 'align'));\r
+ tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));\r
+ tr_elm.setAttribute('lang', formObj.lang.value);\r
+ tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));\r
+ tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));\r
+ dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));\r
+\r
+ // Clear deprecated attributes\r
+ tr_elm.setAttribute('background', '');\r
+ tr_elm.setAttribute('bgColor', '');\r
+ tr_elm.setAttribute('height', '');\r
+\r
+ // Set styles\r
+ tr_elm.style.height = getCSSSize(formObj.height.value);\r
+ tr_elm.style.backgroundColor = formObj.bgcolor.value;\r
+\r
+ if (formObj.backgroundimage.value != "")\r
+ tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
+ else\r
+ tr_elm.style.backgroundImage = '';\r
+\r
+ // Setup new rowtype\r
+ if (curRowType != rowtype && !skip_parent) {\r
+ // first, clone the node we are working on\r
+ var newRow = tr_elm.cloneNode(1);\r
+\r
+ // next, find the parent of its new destination (creating it if necessary)\r
+ var theTable = dom.getParent(tr_elm, "table");\r
+ var dest = rowtype;\r
+ var newParent = null;\r
+ for (var i = 0; i < theTable.childNodes.length; i++) {\r
+ if (theTable.childNodes[i].nodeName.toLowerCase() == dest)\r
+ newParent = theTable.childNodes[i];\r
+ }\r
+\r
+ if (newParent == null) {\r
+ newParent = doc.createElement(dest);\r
+\r
+ if (dest == "thead") {\r
+ if (theTable.firstChild.nodeName == 'CAPTION')\r
+ inst.dom.insertAfter(newParent, theTable.firstChild);\r
+ else\r
+ theTable.insertBefore(newParent, theTable.firstChild);\r
+ } else\r
+ theTable.appendChild(newParent);\r
+ }\r
+\r
+ // append the row to the new parent\r
+ newParent.appendChild(newRow);\r
+\r
+ // remove the original\r
+ tr_elm.parentNode.removeChild(tr_elm);\r
+\r
+ // set tr_elm to the new node\r
+ tr_elm = newRow;\r
+ }\r
+\r
+ dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));\r
+}\r
+\r
+function changedBackgroundImage() {\r
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
+\r
+ formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedStyle() {\r
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+ if (st['background-image'])\r
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+ else\r
+ formObj.backgroundimage.value = '';\r
+\r
+ if (st['height'])\r
+ formObj.height.value = trimSize(st['height']);\r
+\r
+ if (st['background-color']) {\r
+ formObj.bgcolor.value = st['background-color'];\r
+ updateColor('bgcolor_pick','bgcolor');\r
+ }\r
+}\r
+\r
+function changedSize() {\r
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+ var height = formObj.height.value;\r
+ if (height != "")\r
+ st['height'] = getCSSSize(height);\r
+ else\r
+ st['height'] = "";\r
+\r
+ formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedColor() {\r
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+ st['background-color'] = formObj.bgcolor.value;\r
+\r
+ formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;\r
+\r
+function insertTable() {\r
+ var formObj = document.forms[0];\r
+ var inst = tinyMCEPopup.editor, dom = inst.dom;\r
+ var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;\r
+ var html = '', capEl, elm;\r
+ var cellLimit, rowLimit, colLimit;\r
+\r
+ tinyMCEPopup.restoreSelection();\r
+\r
+ if (!AutoValidator.validate(formObj)) {\r
+ alert(inst.getLang('invalid_data'));\r
+ return false;\r
+ }\r
+\r
+ elm = dom.getParent(inst.selection.getNode(), 'table');\r
+\r
+ // Get form data\r
+ cols = formObj.elements['cols'].value;\r
+ rows = formObj.elements['rows'].value;\r
+ border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;\r
+ cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";\r
+ cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";\r
+ align = formObj.elements['align'].options[formObj.elements['align'].selectedIndex].value;\r
+ frame = formObj.elements['frame'].options[formObj.elements['frame'].selectedIndex].value;\r
+ rules = formObj.elements['rules'].options[formObj.elements['rules'].selectedIndex].value;\r
+ width = formObj.elements['width'].value;\r
+ height = formObj.elements['height'].value;\r
+ bordercolor = formObj.elements['bordercolor'].value;\r
+ bgcolor = formObj.elements['bgcolor'].value;\r
+ className = formObj.elements['class'].options[formObj.elements['class'].selectedIndex].value;\r
+ id = formObj.elements['id'].value;\r
+ summary = formObj.elements['summary'].value;\r
+ style = formObj.elements['style'].value;\r
+ dir = formObj.elements['dir'].value;\r
+ lang = formObj.elements['lang'].value;\r
+ background = formObj.elements['backgroundimage'].value;\r
+ caption = formObj.elements['caption'].checked;\r
+\r
+ cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);\r
+ rowLimit = tinyMCEPopup.getParam('table_row_limit', false);\r
+ colLimit = tinyMCEPopup.getParam('table_col_limit', false);\r
+\r
+ // Validate table size\r
+ if (colLimit && cols > colLimit) {\r
+ alert(inst.getLang('table_col_limit', '', true, {cols : colLimit}));\r
+ return false;\r
+ } else if (rowLimit && rows > rowLimit) {\r
+ alert(inst.getLang('table_row_limit', '', true, {rows : rowLimit}));\r
+ return false;\r
+ } else if (cellLimit && cols * rows > cellLimit) {\r
+ alert(inst.getLang('table_cell_limit', '', true, {cells : cellLimit}));\r
+ return false;\r
+ }\r
+\r
+ // Update table\r
+ if (action == "update") {\r
+ inst.execCommand('mceBeginUndoLevel');\r
+\r
+ dom.setAttrib(elm, 'cellPadding', cellpadding, true);\r
+ dom.setAttrib(elm, 'cellSpacing', cellspacing, true);\r
+ dom.setAttrib(elm, 'border', border);\r
+ dom.setAttrib(elm, 'align', align);\r
+ dom.setAttrib(elm, 'frame', frame);\r
+ dom.setAttrib(elm, 'rules', rules);\r
+ dom.setAttrib(elm, 'class', className);\r
+ dom.setAttrib(elm, 'style', style);\r
+ dom.setAttrib(elm, 'id', id);\r
+ dom.setAttrib(elm, 'summary', summary);\r
+ dom.setAttrib(elm, 'dir', dir);\r
+ dom.setAttrib(elm, 'lang', lang);\r
+\r
+ capEl = inst.dom.select('caption', elm)[0];\r
+\r
+ if (capEl && !caption)\r
+ capEl.parentNode.removeChild(capEl);\r
+\r
+ if (!capEl && caption) {\r
+ capEl = elm.ownerDocument.createElement('caption');\r
+\r
+ if (!tinymce.isIE)\r
+ capEl.innerHTML = '<br mce_bogus="1"/>';\r
+\r
+ elm.insertBefore(capEl, elm.firstChild);\r
+ }\r
+\r
+ if (width && /(pt|em|cm)$/.test(width)) {\r
+ dom.setStyle(elm, 'width', width);\r
+ dom.setAttrib(elm, 'width', '');\r
+ } else {\r
+ dom.setAttrib(elm, 'width', width, true);\r
+ dom.setStyle(elm, 'width', '');\r
+ }\r
+\r
+ // Remove these since they are not valid XHTML\r
+ dom.setAttrib(elm, 'borderColor', '');\r
+ dom.setAttrib(elm, 'bgColor', '');\r
+ dom.setAttrib(elm, 'background', '');\r
+\r
+ if (height) {\r
+ dom.setStyle(elm, 'height', height);\r
+ dom.setAttrib(elm, 'height', '');\r
+ }\r
+\r
+ if (background != '')\r
+ elm.style.backgroundImage = "url('" + background + "')";\r
+ else\r
+ elm.style.backgroundImage = '';\r
+\r
+/* if (tinyMCEPopup.getParam("inline_styles")) {\r
+ if (width != '')\r
+ elm.style.width = getCSSSize(width);\r
+ }*/\r
+\r
+ if (bordercolor != "") {\r
+ elm.style.borderColor = bordercolor;\r
+ elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;\r
+ elm.style.borderWidth = border == "" ? "1px" : border;\r
+ } else\r
+ elm.style.borderColor = '';\r
+\r
+ elm.style.backgroundColor = bgcolor;\r
+ elm.style.height = getCSSSize(height);\r
+\r
+ inst.addVisual();\r
+\r
+ // Fix for stange MSIE align bug\r
+ //elm.outerHTML = elm.outerHTML;\r
+\r
+ inst.nodeChanged();\r
+ inst.execCommand('mceEndUndoLevel');\r
+\r
+ // Repaint if dimensions changed\r
+ if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)\r
+ inst.execCommand('mceRepaint');\r
+\r
+ tinyMCEPopup.close();\r
+ return true;\r
+ }\r
+\r
+ // Create new table\r
+ html += '<table';\r
+\r
+ html += makeAttrib('id', id);\r
+ html += makeAttrib('border', border);\r
+ html += makeAttrib('cellpadding', cellpadding);\r
+ html += makeAttrib('cellspacing', cellspacing);\r
+\r
+ if (width && /(pt|em|cm)$/.test(width)) {\r
+ if (style)\r
+ style += '; ';\r
+\r
+ style += 'width: ' + width;\r
+ } else\r
+ html += makeAttrib('width', width);\r
+\r
+/* if (height) {\r
+ if (style)\r
+ style += '; ';\r
+\r
+ style += 'height: ' + height;\r
+ }*/\r
+\r
+ //html += makeAttrib('height', height);\r
+ //html += makeAttrib('bordercolor', bordercolor);\r
+ //html += makeAttrib('bgcolor', bgcolor);\r
+ html += makeAttrib('align', align);\r
+ html += makeAttrib('frame', frame);\r
+ html += makeAttrib('rules', rules);\r
+ html += makeAttrib('class', className);\r
+ html += makeAttrib('style', style);\r
+ html += makeAttrib('summary', summary);\r
+ html += makeAttrib('dir', dir);\r
+ html += makeAttrib('lang', lang);\r
+ html += '>';\r
+\r
+ if (caption) {\r
+ if (!tinymce.isIE)\r
+ html += '<caption><br mce_bogus="1"/></caption>';\r
+ else\r
+ html += '<caption></caption>';\r
+ }\r
+\r
+ for (var y=0; y<rows; y++) {\r
+ html += "<tr>";\r
+\r
+ for (var x=0; x<cols; x++) {\r
+ if (!tinymce.isIE)\r
+ html += '<td><br mce_bogus="1"/></td>';\r
+ else\r
+ html += '<td></td>';\r
+ }\r
+\r
+ html += "</tr>";\r
+ }\r
+\r
+ html += "</table>";\r
+\r
+ inst.execCommand('mceBeginUndoLevel');\r
+ inst.execCommand('mceInsertContent', false, html);\r
+ inst.addVisual();\r
+ inst.execCommand('mceEndUndoLevel');\r
+\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function makeAttrib(attrib, value) {\r
+ var formObj = document.forms[0];\r
+ var valueElm = formObj.elements[attrib];\r
+\r
+ if (typeof(value) == "undefined" || value == null) {\r
+ value = "";\r
+\r
+ if (valueElm)\r
+ value = valueElm.value;\r
+ }\r
+\r
+ if (value == "")\r
+ return "";\r
+\r
+ // XML encode it\r
+ value = value.replace(/&/g, '&');\r
+ value = value.replace(/\"/g, '"');\r
+ value = value.replace(/</g, '<');\r
+ value = value.replace(/>/g, '>');\r
+\r
+ return ' ' + attrib + '="' + value + '"';\r
+}\r
+\r
+function init() {\r
+ tinyMCEPopup.resizeToInnerSize();\r
+\r
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
+ document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');\r
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
+\r
+ var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');\r
+ var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";\r
+ var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame;\r
+ var inst = tinyMCEPopup.editor, dom = inst.dom;\r
+ var formObj = document.forms[0];\r
+ var elm = dom.getParent(inst.selection.getNode(), "table");\r
+\r
+ action = tinyMCEPopup.getWindowArg('action');\r
+\r
+ if (!action)\r
+ action = elm ? "update" : "insert";\r
+\r
+ if (elm && action != "insert") {\r
+ var rowsAr = elm.rows;\r
+ var cols = 0;\r
+ for (var i=0; i<rowsAr.length; i++)\r
+ if (rowsAr[i].cells.length > cols)\r
+ cols = rowsAr[i].cells.length;\r
+\r
+ cols = cols;\r
+ rows = rowsAr.length;\r
+\r
+ st = dom.parseStyle(dom.getAttrib(elm, "style"));\r
+ border = trimSize(getStyle(elm, 'border', 'borderWidth'));\r
+ cellpadding = dom.getAttrib(elm, 'cellpadding', "");\r
+ cellspacing = dom.getAttrib(elm, 'cellspacing', "");\r
+ width = trimSize(getStyle(elm, 'width', 'width'));\r
+ height = trimSize(getStyle(elm, 'height', 'height'));\r
+ bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));\r
+ bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));\r
+ align = dom.getAttrib(elm, 'align', align);\r
+ frame = dom.getAttrib(elm, 'frame');\r
+ rules = dom.getAttrib(elm, 'rules');\r
+ className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));\r
+ id = dom.getAttrib(elm, 'id');\r
+ summary = dom.getAttrib(elm, 'summary');\r
+ style = dom.serializeStyle(st);\r
+ dir = dom.getAttrib(elm, 'dir');\r
+ lang = dom.getAttrib(elm, 'lang');\r
+ background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+ formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;\r
+\r
+ orgTableWidth = width;\r
+ orgTableHeight = height;\r
+\r
+ action = "update";\r
+ formObj.insert.value = inst.getLang('update');\r
+ }\r
+\r
+ addClassesToList('class', "table_styles");\r
+ TinyMCE_EditableSelects.init();\r
+\r
+ // Update form\r
+ selectByValue(formObj, 'align', align);\r
+ selectByValue(formObj, 'frame', frame);\r
+ selectByValue(formObj, 'rules', rules);\r
+ selectByValue(formObj, 'class', className, true, true);\r
+ formObj.cols.value = cols;\r
+ formObj.rows.value = rows;\r
+ formObj.border.value = border;\r
+ formObj.cellpadding.value = cellpadding;\r
+ formObj.cellspacing.value = cellspacing;\r
+ formObj.width.value = width;\r
+ formObj.height.value = height;\r
+ formObj.bordercolor.value = bordercolor;\r
+ formObj.bgcolor.value = bgcolor;\r
+ formObj.id.value = id;\r
+ formObj.summary.value = summary;\r
+ formObj.style.value = style;\r
+ formObj.dir.value = dir;\r
+ formObj.lang.value = lang;\r
+ formObj.backgroundimage.value = background;\r
+\r
+ updateColor('bordercolor_pick', 'bordercolor');\r
+ updateColor('bgcolor_pick', 'bgcolor');\r
+\r
+ // Resize some elements\r
+ if (isVisible('backgroundimagebrowser'))\r
+ document.getElementById('backgroundimage').style.width = '180px';\r
+\r
+ // Disable some fields in update mode\r
+ if (action == "update") {\r
+ formObj.cols.disabled = true;\r
+ formObj.rows.disabled = true;\r
+ }\r
+}\r
+\r
+function changedSize() {\r
+ var formObj = document.forms[0];\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+/* var width = formObj.width.value;\r
+ if (width != "")\r
+ st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";\r
+ else\r
+ st['width'] = "";*/\r
+\r
+ var height = formObj.height.value;\r
+ if (height != "")\r
+ st['height'] = getCSSSize(height);\r
+ else\r
+ st['height'] = "";\r
+\r
+ formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedBackgroundImage() {\r
+ var formObj = document.forms[0];\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
+\r
+ formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedBorder() {\r
+ var formObj = document.forms[0];\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+ // Update border width if the element has a color\r
+ if (formObj.border.value != "" && formObj.bordercolor.value != "")\r
+ st['border-width'] = formObj.border.value + "px";\r
+\r
+ formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedColor() {\r
+ var formObj = document.forms[0];\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+ st['background-color'] = formObj.bgcolor.value;\r
+\r
+ if (formObj.bordercolor.value != "") {\r
+ st['border-color'] = formObj.bordercolor.value;\r
+\r
+ // Add border-width if it's missing\r
+ if (!st['border-width'])\r
+ st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";\r
+ }\r
+\r
+ formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedStyle() {\r
+ var formObj = document.forms[0];\r
+ var st = dom.parseStyle(formObj.style.value);\r
+\r
+ if (st['background-image'])\r
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+ else\r
+ formObj.backgroundimage.value = '';\r
+\r
+ if (st['width'])\r
+ formObj.width.value = trimSize(st['width']);\r
+\r
+ if (st['height'])\r
+ formObj.height.value = trimSize(st['height']);\r
+\r
+ if (st['background-color']) {\r
+ formObj.bgcolor.value = st['background-color'];\r
+ updateColor('bgcolor_pick','bgcolor');\r
+ }\r
+\r
+ if (st['border-color']) {\r
+ formObj.bordercolor.value = st['border-color'];\r
+ updateColor('bordercolor_pick','bordercolor');\r
+ }\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
+++ /dev/null
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
- document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');\r
- document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')\r
-\r
- var inst = tinyMCE.selectedInstance;\r
- var tdElm = tinyMCE.getParentElement(inst.getFocusElement(), "td,th");\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(tinyMCE.getAttrib(tdElm, "style"));\r
-\r
- // Get table cell data\r
- var celltype = tdElm.nodeName.toLowerCase();\r
- var align = tinyMCE.getAttrib(tdElm, 'align');\r
- var valign = tinyMCE.getAttrib(tdElm, 'valign');\r
- var width = trimSize(getStyle(tdElm, 'width', 'width'));\r
- var height = trimSize(getStyle(tdElm, 'height', 'height'));\r
- var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));\r
- var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));\r
- var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tdElm, 'class'), false);\r
- var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;\r
- var id = tinyMCE.getAttrib(tdElm, 'id');\r
- var lang = tinyMCE.getAttrib(tdElm, 'lang');\r
- var dir = tinyMCE.getAttrib(tdElm, 'dir');\r
- var scope = tinyMCE.getAttrib(tdElm, 'scope');\r
-\r
- // Setup form\r
- addClassesToList('class', 'table_cell_styles');\r
- formObj.bordercolor.value = bordercolor;\r
- formObj.bgcolor.value = bgcolor;\r
- formObj.backgroundimage.value = backgroundimage;\r
- formObj.width.value = width;\r
- formObj.height.value = height;\r
- formObj.id.value = id;\r
- formObj.lang.value = lang;\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
- selectByValue(formObj, 'align', align);\r
- selectByValue(formObj, 'valign', valign);\r
- selectByValue(formObj, 'class', className);\r
- selectByValue(formObj, 'celltype', celltype);\r
- selectByValue(formObj, 'dir', dir);\r
- selectByValue(formObj, 'scope', scope);\r
-\r
- // Resize some elements\r
- if (isVisible('backgroundimagebrowser'))\r
- document.getElementById('backgroundimage').style.width = '180px';\r
-\r
- updateColor('bordercolor_pick', 'bordercolor');\r
- updateColor('bgcolor_pick', 'bgcolor');\r
-}\r
-\r
-function updateAction() {\r
- tinyMCEPopup.restoreSelection();\r
-\r
- var inst = tinyMCE.selectedInstance;\r
- var tdElm = tinyMCE.getParentElement(inst.getFocusElement(), "td,th");\r
- var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");\r
- var tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");\r
- var formObj = document.forms[0];\r
-\r
- inst.execCommand('mceBeginUndoLevel');\r
-\r
- switch (getSelectValue(formObj, 'action')) {\r
- case "cell":\r
- var celltype = getSelectValue(formObj, 'celltype');\r
- var scope = getSelectValue(formObj, 'scope');\r
-\r
- if (tinyMCE.getParam("accessibility_warnings")) {\r
- if (celltype == "th" && scope == "")\r
- var answer = confirm(tinyMCE.getLang('lang_table_missing_scope', '', true));\r
- else\r
- var answer = true;\r
-\r
- if (!answer)\r
- return;\r
- }\r
-\r
- updateCell(tdElm);\r
- break;\r
-\r
- case "row":\r
- var cell = trElm.firstChild;\r
-\r
- if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
- cell = nextCell(cell);\r
-\r
- do {\r
- cell = updateCell(cell, true);\r
- } while ((cell = nextCell(cell)) != null);\r
-\r
- break;\r
-\r
- case "all":\r
- var rows = tableElm.getElementsByTagName("tr");\r
-\r
- for (var i=0; i<rows.length; i++) {\r
- var cell = rows[i].firstChild;\r
-\r
- if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
- cell = nextCell(cell);\r
-\r
- do {\r
- cell = updateCell(cell, true);\r
- } while ((cell = nextCell(cell)) != null);\r
- }\r
-\r
- break;\r
- }\r
-\r
- tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);\r
- tinyMCE.triggerNodeChange();\r
- inst.execCommand('mceEndUndoLevel');\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function nextCell(elm) {\r
- while ((elm = elm.nextSibling) != null) {\r
- if (elm.nodeName == "TD" || elm.nodeName == "TH")\r
- return elm;\r
- }\r
-\r
- return null;\r
-}\r
-\r
-function updateCell(td, skip_id) {\r
- var inst = tinyMCE.selectedInstance;\r
- var formObj = document.forms[0];\r
- var curCellType = td.nodeName.toLowerCase();\r
- var celltype = getSelectValue(formObj, 'celltype');\r
- var doc = inst.getDoc();\r
-\r
- if (!skip_id)\r
- td.setAttribute('id', formObj.id.value);\r
-\r
- td.setAttribute('align', formObj.align.value);\r
- td.setAttribute('vAlign', formObj.valign.value);\r
- td.setAttribute('lang', formObj.lang.value);\r
- td.setAttribute('dir', getSelectValue(formObj, 'dir'));\r
- td.setAttribute('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(formObj.style.value)));\r
- td.setAttribute('scope', formObj.scope.value);\r
- tinyMCE.setAttrib(td, 'class', getSelectValue(formObj, 'class'));\r
-\r
- // Clear deprecated attributes\r
- tinyMCE.setAttrib(td, 'width', '');\r
- tinyMCE.setAttrib(td, 'height', '');\r
- tinyMCE.setAttrib(td, 'bgColor', '');\r
- tinyMCE.setAttrib(td, 'borderColor', '');\r
- tinyMCE.setAttrib(td, 'background', '');\r
-\r
- // Set styles\r
- td.style.width = getCSSSize(formObj.width.value);\r
- td.style.height = getCSSSize(formObj.height.value);\r
- if (formObj.bordercolor.value != "") {\r
- td.style.borderColor = formObj.bordercolor.value;\r
- td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;\r
- td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;\r
- } else\r
- td.style.borderColor = '';\r
-\r
- td.style.backgroundColor = formObj.bgcolor.value;\r
-\r
- if (formObj.backgroundimage.value != "")\r
- td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
- else\r
- td.style.backgroundImage = '';\r
-\r
- if (curCellType != celltype) {\r
- // changing to a different node type\r
- var newCell = doc.createElement(celltype);\r
-\r
- for (var c=0; c<td.childNodes.length; c++)\r
- newCell.appendChild(td.childNodes[c].cloneNode(1));\r
-\r
- for (var a=0; a<td.attributes.length; a++) {\r
- var attr = td.attributes[a];\r
- newCell.setAttribute(attr.name, attr.value);\r
- }\r
-\r
- td.parentNode.replaceChild(newCell, td);\r
- td = newCell;\r
- }\r
-\r
- return td;\r
-}\r
-\r
-function changedBackgroundImage() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedSize() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- var width = formObj.width.value;\r
- if (width != "")\r
- st['width'] = getCSSSize(width);\r
- else\r
- st['width'] = "";\r
-\r
- var height = formObj.height.value;\r
- if (height != "")\r
- st['height'] = getCSSSize(height);\r
- else\r
- st['height'] = "";\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedColor() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- st['background-color'] = formObj.bgcolor.value;\r
- st['border-color'] = formObj.bordercolor.value;\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedStyle() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- if (st['background-image'])\r
- formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
- else\r
- formObj.backgroundimage.value = '';\r
-\r
- if (st['width'])\r
- formObj.width.value = trimSize(st['width']);\r
-\r
- if (st['height'])\r
- formObj.height.value = trimSize(st['height']);\r
-\r
- if (st['background-color']) {\r
- formObj.bgcolor.value = st['background-color'];\r
- updateColor('bgcolor_pick','bgcolor');\r
- }\r
-\r
- if (st['border-color']) {\r
- formObj.bordercolor.value = st['border-color'];\r
- updateColor('bordercolor_pick','bordercolor');\r
- }\r
-}\r
+++ /dev/null
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- var formObj = document.forms[0];\r
-\r
- formObj.numcols.value = tinyMCE.getWindowArg('numcols', 1);\r
- formObj.numrows.value = tinyMCE.getWindowArg('numrows', 1);\r
-}\r
-\r
-function mergeCells() {\r
- var args = new Array();\r
- var formObj = document.forms[0];\r
-\r
- if (!AutoValidator.validate(formObj)) {\r
- alert(tinyMCE.getLang('lang_invalid_data'));\r
- return false;\r
- }\r
-\r
- args["numcols"] = formObj.numcols.value;\r
- args["numrows"] = formObj.numrows.value;\r
-\r
- tinyMCEPopup.execCommand("mceTableMergeCells", false, args);\r
- tinyMCEPopup.close();\r
-}\r
+++ /dev/null
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
- document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
-\r
- var inst = tinyMCE.selectedInstance;\r
- var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(tinyMCE.getAttrib(trElm, "style"));\r
-\r
- // Get table row data\r
- var rowtype = trElm.parentNode.nodeName.toLowerCase();\r
- var align = tinyMCE.getAttrib(trElm, 'align');\r
- var valign = tinyMCE.getAttrib(trElm, 'valign');\r
- var height = trimSize(getStyle(trElm, 'height', 'height'));\r
- var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(trElm, 'class'), false);\r
- var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));\r
- var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;\r
- var id = tinyMCE.getAttrib(trElm, 'id');\r
- var lang = tinyMCE.getAttrib(trElm, 'lang');\r
- var dir = tinyMCE.getAttrib(trElm, 'dir');\r
-\r
- // Setup form\r
- addClassesToList('class', 'table_row_styles');\r
- formObj.bgcolor.value = bgcolor;\r
- formObj.backgroundimage.value = backgroundimage;\r
- formObj.height.value = height;\r
- formObj.id.value = id;\r
- formObj.lang.value = lang;\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
- selectByValue(formObj, 'align', align);\r
- selectByValue(formObj, 'valign', valign);\r
- selectByValue(formObj, 'class', className);\r
- selectByValue(formObj, 'rowtype', rowtype);\r
- selectByValue(formObj, 'dir', dir);\r
-\r
- // Resize some elements\r
- if (isVisible('backgroundimagebrowser'))\r
- document.getElementById('backgroundimage').style.width = '180px';\r
-\r
- updateColor('bgcolor_pick', 'bgcolor');\r
-}\r
-\r
-function updateAction() {\r
- tinyMCEPopup.restoreSelection();\r
-\r
- var inst = tinyMCE.selectedInstance;\r
- var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");\r
- var tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");\r
- var formObj = document.forms[0];\r
- var action = getSelectValue(formObj, 'action');\r
-\r
- inst.execCommand('mceBeginUndoLevel');\r
-\r
- switch (action) {\r
- case "row":\r
- updateRow(trElm);\r
- break;\r
-\r
- case "all":\r
- var rows = tableElm.getElementsByTagName("tr");\r
-\r
- for (var i=0; i<rows.length; i++)\r
- updateRow(rows[i], true);\r
-\r
- break;\r
-\r
- case "odd":\r
- case "even":\r
- var rows = tableElm.getElementsByTagName("tr");\r
-\r
- for (var i=0; i<rows.length; i++) {\r
- if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))\r
- updateRow(rows[i], true, true);\r
- }\r
-\r
- break;\r
- }\r
-\r
- tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);\r
- tinyMCE.triggerNodeChange();\r
- inst.execCommand('mceEndUndoLevel');\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function updateRow(tr_elm, skip_id, skip_parent) {\r
- var inst = tinyMCE.selectedInstance;\r
- var formObj = document.forms[0];\r
- var curRowType = tr_elm.parentNode.nodeName.toLowerCase();\r
- var rowtype = getSelectValue(formObj, 'rowtype');\r
- var doc = inst.getDoc();\r
-\r
- // Update row element\r
- if (!skip_id)\r
- tr_elm.setAttribute('id', formObj.id.value);\r
-\r
- tr_elm.setAttribute('align', getSelectValue(formObj, 'align'));\r
- tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));\r
- tr_elm.setAttribute('lang', formObj.lang.value);\r
- tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));\r
- tr_elm.setAttribute('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(formObj.style.value)));\r
- tinyMCE.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));\r
-\r
- // Clear deprecated attributes\r
- tr_elm.setAttribute('background', '');\r
- tr_elm.setAttribute('bgColor', '');\r
- tr_elm.setAttribute('height', '');\r
-\r
- // Set styles\r
- tr_elm.style.height = getCSSSize(formObj.height.value);\r
- tr_elm.style.backgroundColor = formObj.bgcolor.value;\r
-\r
- if (formObj.backgroundimage.value != "")\r
- tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
- else\r
- tr_elm.style.backgroundImage = '';\r
-\r
- // Setup new rowtype\r
- if (curRowType != rowtype && !skip_parent) {\r
- // first, clone the node we are working on\r
- var newRow = tr_elm.cloneNode(1);\r
-\r
- // next, find the parent of its new destination (creating it if necessary)\r
- var theTable = tinyMCE.getParentElement(tr_elm, "table");\r
- var dest = rowtype;\r
- var newParent = null;\r
- for (var i = 0; i < theTable.childNodes.length; i++) {\r
- if (theTable.childNodes[i].nodeName.toLowerCase() == dest)\r
- newParent = theTable.childNodes[i];\r
- }\r
-\r
- if (newParent == null) {\r
- newParent = doc.createElement(dest);\r
-\r
- if (dest == "thead")\r
- theTable.insertBefore(newParent, theTable.firstChild);\r
- else\r
- theTable.appendChild(newParent);\r
- }\r
-\r
- // append the row to the new parent\r
- newParent.appendChild(newRow);\r
-\r
- // remove the original\r
- tr_elm.parentNode.removeChild(tr_elm);\r
-\r
- // set tr_elm to the new node\r
- tr_elm = newRow;\r
- }\r
-}\r
-\r
-function changedBackgroundImage() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedStyle() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- if (st['background-image'])\r
- formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
- else\r
- formObj.backgroundimage.value = '';\r
-\r
- if (st['height'])\r
- formObj.height.value = trimSize(st['height']);\r
-\r
- if (st['background-color']) {\r
- formObj.bgcolor.value = st['background-color'];\r
- updateColor('bgcolor_pick','bgcolor');\r
- }\r
-}\r
-\r
-function changedSize() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- var height = formObj.height.value;\r
- if (height != "")\r
- st['height'] = getCSSSize(height);\r
- else\r
- st['height'] = "";\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedColor() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- st['background-color'] = formObj.bgcolor.value;\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
+++ /dev/null
-var action, orgTableWidth, orgTableHeight;\r
-\r
-function insertTable() {\r
- var formObj = document.forms[0];\r
- var inst = tinyMCE.selectedInstance;\r
- var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption;\r
- var html = '', capEl;\r
- var elm = tinyMCE.tableElm;\r
- var cellLimit, rowLimit, colLimit;\r
-\r
- if (!AutoValidator.validate(formObj)) {\r
- alert(tinyMCE.getLang('lang_invalid_data'));\r
- return false;\r
- }\r
-\r
- tinyMCEPopup.restoreSelection();\r
-\r
- // Get form data\r
- cols = formObj.elements['cols'].value;\r
- rows = formObj.elements['rows'].value;\r
- border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;\r
- cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";\r
- cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";\r
- align = formObj.elements['align'].options[formObj.elements['align'].selectedIndex].value;\r
- width = formObj.elements['width'].value;\r
- height = formObj.elements['height'].value;\r
- bordercolor = formObj.elements['bordercolor'].value;\r
- bgcolor = formObj.elements['bgcolor'].value;\r
- className = formObj.elements['class'].options[formObj.elements['class'].selectedIndex].value;\r
- id = formObj.elements['id'].value;\r
- summary = formObj.elements['summary'].value;\r
- style = formObj.elements['style'].value;\r
- dir = formObj.elements['dir'].value;\r
- lang = formObj.elements['lang'].value;\r
- background = formObj.elements['backgroundimage'].value;\r
- caption = formObj.elements['caption'].checked;\r
-\r
- cellLimit = tinyMCE.getParam('table_cell_limit', false);\r
- rowLimit = tinyMCE.getParam('table_row_limit', false);\r
- colLimit = tinyMCE.getParam('table_col_limit', false);\r
-\r
- // Validate table size\r
- if (colLimit && cols > colLimit) {\r
- alert(tinyMCE.getLang('lang_table_col_limit', '', true, {cols : colLimit}));\r
- return false;\r
- } else if (rowLimit && rows > rowLimit) {\r
- alert(tinyMCE.getLang('lang_table_row_limit', '', true, {rows : rowLimit}));\r
- return false;\r
- } else if (cellLimit && cols * rows > cellLimit) {\r
- alert(tinyMCE.getLang('lang_table_cell_limit', '', true, {cells : cellLimit}));\r
- return false;\r
- }\r
-\r
- // Update table\r
- if (action == "update") {\r
- inst.execCommand('mceBeginUndoLevel');\r
-\r
- tinyMCE.setAttrib(elm, 'cellPadding', cellpadding, true);\r
- tinyMCE.setAttrib(elm, 'cellSpacing', cellspacing, true);\r
- tinyMCE.setAttrib(elm, 'border', border, true);\r
- tinyMCE.setAttrib(elm, 'align', align);\r
- tinyMCE.setAttrib(elm, 'class', className);\r
- tinyMCE.setAttrib(elm, 'style', style);\r
- tinyMCE.setAttrib(elm, 'id', id);\r
- tinyMCE.setAttrib(elm, 'summary', summary);\r
- tinyMCE.setAttrib(elm, 'dir', dir);\r
- tinyMCE.setAttrib(elm, 'lang', lang);\r
-\r
- capEl = elm.getElementsByTagName('caption')[0];\r
-\r
- if (capEl && !caption)\r
- capEl.parentNode.removeChild(capEl);\r
-\r
- if (!capEl && caption) {\r
- capEl = elm.ownerDocument.createElement('caption');\r
- capEl.innerHTML = ' ';\r
- elm.insertBefore(capEl, elm.firstChild);\r
- }\r
-\r
- // Not inline styles\r
- if (!tinyMCE.getParam("inline_styles"))\r
- tinyMCE.setAttrib(elm, 'width', width, true);\r
-\r
- // Remove these since they are not valid XHTML\r
- tinyMCE.setAttrib(elm, 'borderColor', '');\r
- tinyMCE.setAttrib(elm, 'bgColor', '');\r
- tinyMCE.setAttrib(elm, 'background', '');\r
- tinyMCE.setAttrib(elm, 'height', '');\r
-\r
- if (background != '')\r
- elm.style.backgroundImage = "url('" + background + "')";\r
- else\r
- elm.style.backgroundImage = '';\r
-\r
- if (tinyMCE.getParam("inline_styles"))\r
- elm.style.borderWidth = border + "px";\r
-\r
- if (tinyMCE.getParam("inline_styles")) {\r
- if (width != '')\r
- elm.style.width = getCSSSize(width);\r
- }\r
-\r
- if (bordercolor != "") {\r
- elm.style.borderColor = bordercolor;\r
- elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;\r
- elm.style.borderWidth = border == "" ? "1px" : border;\r
- } else\r
- elm.style.borderColor = '';\r
-\r
- elm.style.backgroundColor = bgcolor;\r
- elm.style.height = getCSSSize(height);\r
-\r
- tinyMCE.handleVisualAid(tinyMCE.tableElm, false, inst.visualAid, inst);\r
-\r
- // Fix for stange MSIE align bug\r
- tinyMCE.tableElm.outerHTML = tinyMCE.tableElm.outerHTML;\r
-\r
- tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);\r
- tinyMCE.triggerNodeChange();\r
- inst.execCommand('mceEndUndoLevel');\r
-\r
- // Repaint if dimensions changed\r
- if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)\r
- inst.repaint();\r
-\r
- tinyMCEPopup.close();\r
- return true;\r
- }\r
-\r
- // Create new table\r
- html += '<table';\r
-\r
- html += makeAttrib('id', id);\r
- html += makeAttrib('border', border);\r
- html += makeAttrib('cellpadding', cellpadding);\r
- html += makeAttrib('cellspacing', cellspacing);\r
- html += makeAttrib('width', width);\r
- //html += makeAttrib('height', height);\r
- //html += makeAttrib('bordercolor', bordercolor);\r
- //html += makeAttrib('bgcolor', bgcolor);\r
- html += makeAttrib('align', align);\r
- html += makeAttrib('class', tinyMCE.getVisualAidClass(className, border == 0));\r
- html += makeAttrib('style', style);\r
- html += makeAttrib('summary', summary);\r
- html += makeAttrib('dir', dir);\r
- html += makeAttrib('lang', lang);\r
- html += '>';\r
-\r
- if (caption)\r
- html += '<caption> </caption>';\r
-\r
- for (var y=0; y<rows; y++) {\r
- html += "<tr>";\r
-\r
- for (var x=0; x<cols; x++)\r
- html += '<td> </td>';\r
-\r
- html += "</tr>";\r
- }\r
-\r
- html += "</table>";\r
-\r
- inst.execCommand('mceBeginUndoLevel');\r
- inst.execCommand('mceInsertContent', false, html);\r
- tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual']);\r
- inst.execCommand('mceEndUndoLevel');\r
-\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function makeAttrib(attrib, value) {\r
- var formObj = document.forms[0];\r
- var valueElm = formObj.elements[attrib];\r
-\r
- if (typeof(value) == "undefined" || value == null) {\r
- value = "";\r
-\r
- if (valueElm)\r
- value = valueElm.value;\r
- }\r
-\r
- if (value == "")\r
- return "";\r
-\r
- // XML encode it\r
- value = value.replace(/&/g, '&');\r
- value = value.replace(/\"/g, '"');\r
- value = value.replace(/</g, '<');\r
- value = value.replace(/>/g, '>');\r
-\r
- return ' ' + attrib + '="' + value + '"';\r
-}\r
-\r
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
- document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
- document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');\r
- document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
-\r
- var cols = 2, rows = 2, border = tinyMCE.getParam('table_default_border', '0'), cellpadding = tinyMCE.getParam('table_default_cellpadding', ''), cellspacing = tinyMCE.getParam('table_default_cellspacing', '');\r
- var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";\r
- var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "";\r
- var inst = tinyMCE.selectedInstance;\r
- var formObj = document.forms[0];\r
- var elm = tinyMCE.getParentElement(inst.getFocusElement(), "table");\r
-\r
- tinyMCE.tableElm = elm;\r
- action = tinyMCE.getWindowArg('action');\r
- if (action == null)\r
- action = tinyMCE.tableElm ? "update" : "insert";\r
-\r
- if (tinyMCE.tableElm && action != "insert") {\r
- var rowsAr = tinyMCE.tableElm.rows;\r
- var cols = 0;\r
- for (var i=0; i<rowsAr.length; i++)\r
- if (rowsAr[i].cells.length > cols)\r
- cols = rowsAr[i].cells.length;\r
-\r
- cols = cols;\r
- rows = rowsAr.length;\r
-\r
- st = tinyMCE.parseStyle(tinyMCE.getAttrib(tinyMCE.tableElm, "style"));\r
- border = trimSize(getStyle(elm, 'border', 'borderWidth'));\r
- cellpadding = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellpadding', "");\r
- cellspacing = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellspacing', "");\r
- width = trimSize(getStyle(elm, 'width', 'width'));\r
- height = trimSize(getStyle(elm, 'height', 'height'));\r
- bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));\r
- bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));\r
- align = tinyMCE.getAttrib(tinyMCE.tableElm, 'align', align);\r
- className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tinyMCE.tableElm, 'class'), false);\r
- id = tinyMCE.getAttrib(tinyMCE.tableElm, 'id');\r
- summary = tinyMCE.getAttrib(tinyMCE.tableElm, 'summary');\r
- style = tinyMCE.serializeStyle(st);\r
- dir = tinyMCE.getAttrib(tinyMCE.tableElm, 'dir');\r
- lang = tinyMCE.getAttrib(tinyMCE.tableElm, 'lang');\r
- background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
- formObj.caption.checked = tinyMCE.tableElm.getElementsByTagName('caption').length > 0;\r
-\r
- orgTableWidth = width;\r
- orgTableHeight = height;\r
-\r
- action = "update";\r
- }\r
-\r
- addClassesToList('class', "table_styles");\r
-\r
- // Update form\r
- selectByValue(formObj, 'align', align);\r
- selectByValue(formObj, 'class', className);\r
- formObj.cols.value = cols;\r
- formObj.rows.value = rows;\r
- formObj.border.value = border;\r
- formObj.cellpadding.value = cellpadding;\r
- formObj.cellspacing.value = cellspacing;\r
- formObj.width.value = width;\r
- formObj.height.value = height;\r
- formObj.bordercolor.value = bordercolor;\r
- formObj.bgcolor.value = bgcolor;\r
- formObj.id.value = id;\r
- formObj.summary.value = summary;\r
- formObj.style.value = style;\r
- formObj.dir.value = dir;\r
- formObj.lang.value = lang;\r
- formObj.backgroundimage.value = background;\r
- formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); \r
-\r
- updateColor('bordercolor_pick', 'bordercolor');\r
- updateColor('bgcolor_pick', 'bgcolor');\r
-\r
- // Resize some elements\r
- if (isVisible('backgroundimagebrowser'))\r
- document.getElementById('backgroundimage').style.width = '180px';\r
-\r
- // Disable some fields in update mode\r
- if (action == "update") {\r
- formObj.cols.disabled = true;\r
- formObj.rows.disabled = true;\r
- }\r
-}\r
-\r
-function changedSize() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- var width = formObj.width.value;\r
- if (width != "")\r
- st['width'] = tinyMCE.getParam("inline_styles") ? getCSSSize(width) : "";\r
- else\r
- st['width'] = "";\r
-\r
- var height = formObj.height.value;\r
- if (height != "")\r
- st['height'] = getCSSSize(height);\r
- else\r
- st['height'] = "";\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedBackgroundImage() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedBorder() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- // Update border width if the element has a color\r
- if (formObj.border.value != "" && formObj.bordercolor.value != "")\r
- st['border-width'] = formObj.border.value + "px";\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedColor() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- st['background-color'] = formObj.bgcolor.value;\r
-\r
- if (formObj.bordercolor.value != "") {\r
- st['border-color'] = formObj.bordercolor.value;\r
-\r
- // Add border-width if it's missing\r
- if (!st['border-width'])\r
- st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";\r
- }\r
-\r
- formObj.style.value = tinyMCE.serializeStyle(st);\r
-}\r
-\r
-function changedStyle() {\r
- var formObj = document.forms[0];\r
- var st = tinyMCE.parseStyle(formObj.style.value);\r
-\r
- if (st['background-image'])\r
- formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
- else\r
- formObj.backgroundimage.value = '';\r
-\r
- if (st['width'])\r
- formObj.width.value = trimSize(st['width']);\r
-\r
- if (st['height'])\r
- formObj.height.value = trimSize(st['height']);\r
-\r
- if (st['background-color']) {\r
- formObj.bgcolor.value = st['background-color'];\r
- updateColor('bgcolor_pick','bgcolor');\r
- }\r
-\r
- if (st['border-color']) {\r
- formObj.bordercolor.value = st['border-color'];\r
- updateColor('bordercolor_pick','bordercolor');\r
- }\r
-}\r
+++ /dev/null
-// UK lang variables\r
-\r
-tinyMCE.addToLang('table',{\r
-general_tab : 'General',\r
-advanced_tab : 'Advanced',\r
-general_props : 'General properties',\r
-advanced_props : 'Advanced properties',\r
-desc : 'Inserts a new table',\r
-row_before_desc : 'Insert row before',\r
-row_after_desc : 'Insert row after',\r
-delete_row_desc : 'Delete row',\r
-col_before_desc : 'Insert column before',\r
-col_after_desc : 'Insert column after',\r
-delete_col_desc : 'Remove column',\r
-rowtype : 'Row in table part',\r
-title : 'Insert/Modify table',\r
-width : 'Width',\r
-height : 'Height',\r
-cols : 'Columns',\r
-rows : 'Rows',\r
-cellspacing : 'Cellspacing',\r
-cellpadding : 'Cellpadding',\r
-border : 'Border',\r
-align : 'Alignment',\r
-align_default : 'Default',\r
-align_left : 'Left',\r
-align_right : 'Right',\r
-align_middle : 'Center',\r
-row_title : 'Table row properties',\r
-cell_title : 'Table cell properties',\r
-cell_type : 'Cell type',\r
-row_desc : 'Table row properties',\r
-cell_desc : 'Table cell properties',\r
-valign : 'Vertical alignment',\r
-align_top : 'Top',\r
-align_bottom : 'Bottom',\r
-props_desc : 'Table properties',\r
-bordercolor : 'Border color',\r
-bgcolor : 'Background color',\r
-merge_cells_title : 'Merge table cells',\r
-split_cells_desc : 'Split merged table cells',\r
-merge_cells_desc : 'Merge table cells',\r
-cut_row_desc : 'Cut table row',\r
-copy_row_desc : 'Copy table row',\r
-paste_row_before_desc : 'Paste table row before',\r
-paste_row_after_desc : 'Paste table row after',\r
-id : 'Id',\r
-style: 'Style',\r
-langdir : 'Language direction',\r
-langcode : 'Language code',\r
-mime : 'Target MIME type',\r
-ltr : 'Left to right',\r
-rtl : 'Right to left',\r
-bgimage : 'Background image',\r
-summary : 'Summary',\r
-td : "Data",\r
-th : "Header",\r
-cell_cell : 'Update current cell',\r
-cell_row : 'Update all cells in row',\r
-cell_all : 'Update all cells in table',\r
-row_row : 'Update current row',\r
-row_odd : 'Update odd rows in table',\r
-row_even : 'Update even rows in table',\r
-row_all : 'Update all rows in table',\r
-thead : 'Table Head',\r
-tbody : 'Table Body',\r
-tfoot : 'Table Foot',\r
-del : 'Delete table',\r
-scope : 'Scope',\r
-row : 'Row',\r
-col : 'Col',\r
-rowgroup : 'Row Group',\r
-colgroup : 'Col Group',\r
-col_limit : 'You\'ve exceeded the maximum number of columns of {$cols}.',\r
-row_limit : 'You\'ve exceeded the maximum number of rows of {$rows}.',\r
-cell_limit : 'You\'ve exceeded the maximum number of cells of {$cells}.',\r
-missing_scope: 'Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.',\r
-caption : 'Table caption'\r
-});\r
--- /dev/null
+tinyMCE.addI18n('en.table_dlg',{\r
+general_tab:"General",\r
+advanced_tab:"Advanced",\r
+general_props:"General properties",\r
+advanced_props:"Advanced properties",\r
+rowtype:"Row in table part",\r
+title:"Insert/Modify table",\r
+width:"Width",\r
+height:"Height",\r
+cols:"Cols",\r
+rows:"Rows",\r
+cellspacing:"Cellspacing",\r
+cellpadding:"Cellpadding",\r
+border:"Border",\r
+align:"Alignment",\r
+align_default:"Default",\r
+align_left:"Left",\r
+align_right:"Right",\r
+align_middle:"Center",\r
+row_title:"Table row properties",\r
+cell_title:"Table cell properties",\r
+cell_type:"Cell type",\r
+valign:"Vertical alignment",\r
+align_top:"Top",\r
+align_bottom:"Bottom",\r
+bordercolor:"Border color",\r
+bgcolor:"Background color",\r
+merge_cells_title:"Merge table cells",\r
+id:"Id",\r
+style:"Style",\r
+langdir:"Language direction",\r
+langcode:"Language code",\r
+mime:"Target MIME type",\r
+ltr:"Left to right",\r
+rtl:"Right to left",\r
+bgimage:"Background image",\r
+summary:"Summary",\r
+td:"Data",\r
+th:"Header",\r
+cell_cell:"Update current cell",\r
+cell_row:"Update all cells in row",\r
+cell_all:"Update all cells in table",\r
+row_row:"Update current row",\r
+row_odd:"Update odd rows in table",\r
+row_even:"Update even rows in table",\r
+row_all:"Update all rows in table",\r
+thead:"Table Head",\r
+tbody:"Table Body",\r
+tfoot:"Table Foot",\r
+scope:"Scope",\r
+rowgroup:"Row Group",\r
+colgroup:"Col Group",\r
+col_limit:"You've exceeded the maximum number of columns of {$cols}.",\r
+row_limit:"You've exceeded the maximum number of rows of {$rows}.",\r
+cell_limit:"You've exceeded the maximum number of cells of {$cells}.",\r
+missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.",\r
+caption:"Table caption",\r
+frame:"Frame",\r
+frame_none:"none",\r
+frame_groups:"groups",\r
+frame_rows:"rows",\r
+frame_cols:"cols",\r
+frame_all:"all",\r
+rules:"Rules",\r
+rules_void:"void",\r
+rules_above:"above",\r
+rules_below:"below",\r
+rules_hsides:"hsides",\r
+rules_lhs:"lhs",\r
+rules_rhs:"rhs",\r
+rules_vsides:"vsides",\r
+rules_box:"box",\r
+rules_border:"border"\r
+});
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_table_merge_cells_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/merge_cells.js"></script>\r
+ <title>{#table_dlg.merge_cells_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/validate.js"></script>\r
+ <script type="text/javascript" src="js/merge_cells.js"></script>\r
<base target="_self" />\r
</head>\r
-<body onload="tinyMCEPopup.executeOnLoad('init();');" style="margin: 8px" style="display: none">\r
-<form onsubmit="insertTable();return false;" action="#">\r
+<body style="margin: 8px" style="display: none">\r
+<form onsubmit="mergeCells();return false;" action="#">\r
<fieldset>\r
- <legend>{$lang_table_merge_cells_title}</legend>\r
+ <legend>{#table_dlg.merge_cells_title}</legend>\r
<table border="0" cellpadding="0" cellspacing="3" width="100%">\r
<tr>\r
- <td>{$lang_table_cols}:</td>\r
- <td align="right"><input type="text" name="numcols" value="" class="number min1" style="width: 30px" /></td>\r
- <td>\r
+ <td>{#table_dlg.cols}:</td>\r
+ <td align="right"><input type="text" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" /></td>\r
</tr>\r
<tr>\r
- <td>{$lang_table_rows}:</td>\r
+ <td>{#table_dlg.rows}:</td>\r
<td align="right"><input type="text" name="numrows" value="" class="number min1" style="width: 30px" /></td>\r
</tr>\r
</table>\r
\r
<div class="mceActionPanel">\r
<div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{$lang_update}" onclick="mergeCells();" />\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
</div>\r
\r
<div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
</form>\r
+++ /dev/null
-Check the TinyMCE documentation for details on this plugin.\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_table_row_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/row.js"></script>\r
+ <title>{#table_dlg.row_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="js/row.js"></script>\r
<link href="css/row.css" rel="stylesheet" type="text/css" />\r
<base target="_self" />\r
</head>\r
-<body id="tablerow" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
+<body id="tablerow" style="display: none">\r
<form onsubmit="updateAction();return false;">\r
<div class="tabs">\r
<ul>\r
- <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>\r
- <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
+ <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
</ul>\r
</div>\r
\r
<div class="panel_wrapper">\r
<div id="general_panel" class="panel current">\r
<fieldset>\r
- <legend>{$lang_table_general_props}</legend>\r
+ <legend>{#table_dlg.general_props}</legend>\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td><label for="rowtype">{$lang_table_rowtype}</label></td>\r
+ <td><label for="rowtype">{#table_dlg.rowtype}</label></td>\r
<td class="col2">\r
- <select id="rowtype" name="rowtype">\r
- <option value="thead">{$lang_table_thead}</option>\r
- <option value="tbody">{$lang_table_tbody}</option>\r
- <option value="tfoot">{$lang_table_tfoot}</option>\r
+ <select id="rowtype" name="rowtype" class="mceFocus">\r
+ <option value="thead">{#table_dlg.thead}</option>\r
+ <option value="tbody">{#table_dlg.tbody}</option>\r
+ <option value="tfoot">{#table_dlg.tfoot}</option>\r
</select>\r
</td>\r
</tr>\r
\r
<tr>\r
- <td><label for="align">{$lang_table_align}</label></td>\r
+ <td><label for="align">{#table_dlg.align}</label></td>\r
<td class="col2">\r
<select id="align" name="align">\r
- <option value="">{$lang_not_set}</option>\r
- <option value="center">{$lang_table_align_middle}</option>\r
- <option value="left">{$lang_table_align_left}</option>\r
- <option value="right">{$lang_table_align_right}</option>\r
+ <option value="">{#not_set}</option>\r
+ <option value="center">{#table_dlg.align_middle}</option>\r
+ <option value="left">{#table_dlg.align_left}</option>\r
+ <option value="right">{#table_dlg.align_right}</option>\r
</select>\r
</td>\r
</tr>\r
\r
<tr>\r
- <td><label for="valign">{$lang_table_valign}</label></td>\r
+ <td><label for="valign">{#table_dlg.valign}</label></td>\r
<td class="col2">\r
<select id="valign" name="valign">\r
- <option value="">{$lang_not_set}</option>\r
- <option value="top">{$lang_table_align_top}</option>\r
- <option value="middle">{$lang_table_align_middle}</option>\r
- <option value="bottom">{$lang_table_align_bottom}</option>\r
+ <option value="">{#not_set}</option>\r
+ <option value="top">{#table_dlg.align_top}</option>\r
+ <option value="middle">{#table_dlg.align_middle}</option>\r
+ <option value="bottom">{#table_dlg.align_bottom}</option>\r
</select>\r
</td>\r
</tr>\r
\r
<tr id="styleSelectRow">\r
- <td><label for="class">{$lang_class_name}</label></td>\r
+ <td><label for="class">{#class_name}</label></td>\r
<td class="col2">\r
- <select id="class" name="class">\r
- <option value="" selected="selected">{$lang_not_set}</option>\r
+ <select id="class" name="class" class="mceEditableSelect">\r
+ <option value="" selected="selected">{#not_set}</option>\r
</select>\r
</td>\r
</tr>\r
\r
<tr>\r
- <td><label for="height">{$lang_table_height}</label></td>\r
+ <td><label for="height">{#table_dlg.height}</label></td>\r
<td class="col2"><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" /></td>\r
</tr>\r
</table>\r
\r
<div id="advanced_panel" class="panel">\r
<fieldset>\r
- <legend>{$lang_table_advanced_props}</legend>\r
+ <legend>{#table_dlg.advanced_props}</legend>\r
\r
<table border="0" cellpadding="0" cellspacing="4">\r
<tr>\r
- <td class="column1"><label for="id">{$lang_table_id}</label></td> \r
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
<td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> \r
</tr>\r
\r
<tr>\r
- <td><label for="style">{$lang_table_style}</label></td>\r
+ <td><label for="style">{#table_dlg.style}</label></td>\r
<td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="dir">{$lang_table_langdir}</label></td> \r
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
<td>\r
<select id="dir" name="dir" style="width: 200px"> \r
- <option value="">{$lang_not_set}</option> \r
- <option value="ltr">{$lang_table_ltr}</option> \r
- <option value="rtl">{$lang_table_rtl}</option> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#table_dlg.ltr}</option> \r
+ <option value="rtl">{#table_dlg.rtl}</option> \r
</select>\r
</td> \r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="lang">{$lang_table_langcode}</label></td> \r
+ <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> \r
<td>\r
<input id="lang" name="lang" type="text" value="" style="width: 200px" />\r
</td> \r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td> \r
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td> \r
+ <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> \r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
<div class="mceActionPanel">\r
<div>\r
<select id="action" name="action">\r
- <option value="row">{$lang_table_row_row}</option>\r
- <option value="odd">{$lang_table_row_odd}</option>\r
- <option value="even">{$lang_table_row_even}</option>\r
- <option value="all">{$lang_table_row_all}</option>\r
+ <option value="row">{#table_dlg.row_row}</option>\r
+ <option value="odd">{#table_dlg.row_odd}</option>\r
+ <option value="even">{#table_dlg.row_even}</option>\r
+ <option value="all">{#table_dlg.row_all}</option>\r
</select>\r
</div>\r
\r
<div style="float: left">\r
- <div><input type="button" id="insert" name="insert" value="{$lang_update}" onclick="updateAction();" /></div>\r
+ <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>\r
</div>\r
\r
<div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
</form>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_table_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/table.js"></script>\r
+ <title>{#table_dlg.title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/validate.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="js/table.js"></script>\r
<link href="css/table.css" rel="stylesheet" type="text/css" />\r
<base target="_self" />\r
</head>\r
-<body id="table" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
+<body id="table" style="display: none">\r
<form onsubmit="insertTable();return false;" action="#">\r
<div class="tabs">\r
<ul>\r
- <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>\r
- <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
+ <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
</ul>\r
</div>\r
\r
<div class="panel_wrapper">\r
<div id="general_panel" class="panel current">\r
<fieldset>\r
- <legend>{$lang_table_general_props}</legend>\r
-\r
+ <legend>{#table_dlg.general_props}</legend>\r
<table border="0" cellpadding="4" cellspacing="0" width="100%">\r
<tr>\r
- <td><label id="colslabel" for="cols">{$lang_table_cols}</label></td>\r
- <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>\r
- <td><label id="rowslabel" for="rows">{$lang_table_rows}</label></td>\r
+ <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>\r
+ <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" /></td>\r
+ <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>\r
<td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>\r
</tr>\r
<tr>\r
- <td><label id="cellpaddinglabel" for="cellpadding">{$lang_table_cellpadding}</label></td>\r
+ <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>\r
<td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>\r
- <td><label id="cellspacinglabel" for="cellspacing">{$lang_table_cellspacing}</label></td>\r
+ <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>\r
<td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>\r
</tr>\r
<tr>\r
- <td><label id="alignlabel" for="align">{$lang_table_align}</label></td>\r
+ <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>\r
<td><select id="align" name="align">\r
- <option value="">{$lang_not_set}</option>\r
- <option value="center">{$lang_table_align_middle}</option>\r
- <option value="left">{$lang_table_align_left}</option>\r
- <option value="right">{$lang_table_align_right}</option>\r
+ <option value="">{#not_set}</option>\r
+ <option value="center">{#table_dlg.align_middle}</option>\r
+ <option value="left">{#table_dlg.align_left}</option>\r
+ <option value="right">{#table_dlg.align_right}</option>\r
</select></td>\r
- <td><label id="borderlabel" for="border">{$lang_table_border}</label></td>\r
+ <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>\r
<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="changedBorder();" class="number" /></td>\r
</tr>\r
<tr id="width_row">\r
- <td><label id="widthlabel" for="width">{$lang_table_width}</label></td>\r
+ <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>\r
<td><input name="width" type="text" id="width" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>\r
- <td><label id="heightlabel" for="height">{$lang_table_height}</label></td>\r
+ <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>\r
<td><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>\r
</tr>\r
<tr id="styleSelectRow">\r
- <td><label id="classlabel" for="class">{$lang_class_name}</label></td>\r
+ <td><label id="classlabel" for="class">{#class_name}</label></td>\r
<td colspan="3">\r
- <select id="class" name="class">\r
- <option value="" selected>{$lang_not_set}</option>\r
+ <select id="class" name="class" class="mceEditableSelect">\r
+ <option value="" selected>{#not_set}</option>\r
</select></td>\r
</tr>\r
<tr>\r
- <td class="column1"><label for="caption">{$lang_table_caption}</label></td> \r
+ <td class="column1"><label for="caption">{#table_dlg.caption}</label></td> \r
<td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td> \r
</tr>\r
</table>\r
\r
<div id="advanced_panel" class="panel">\r
<fieldset>\r
- <legend>{$lang_table_advanced_props}</legend>\r
+ <legend>{#table_dlg.advanced_props}</legend>\r
\r
<table border="0" cellpadding="0" cellspacing="4">\r
<tr>\r
- <td class="column1"><label for="id">{$lang_table_id}</label></td> \r
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
<td><input id="id" name="id" type="text" value="" class="advfield" /></td> \r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="summary">{$lang_table_summary}</label></td> \r
+ <td class="column1"><label for="summary">{#table_dlg.summary}</label></td> \r
<td><input id="summary" name="summary" type="text" value="" class="advfield" /></td> \r
</tr>\r
\r
<tr>\r
- <td><label for="style">{$lang_table_style}</label></td>\r
+ <td><label for="style">{#table_dlg.style}</label></td>\r
<td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="dir">{$lang_table_langdir}</label></td> \r
- <td>\r
- <select id="dir" name="dir" class="advfield"> \r
- <option value="">{$lang_not_set}</option> \r
- <option value="ltr">{$lang_table_ltr}</option> \r
- <option value="rtl">{$lang_table_rtl}</option> \r
- </select>\r
- </td> \r
- </tr>\r
-\r
- <tr>\r
- <td class="column1"><label id="langlabel" for="lang">{$lang_table_langcode}</label></td> \r
+ <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td> \r
<td>\r
<input id="lang" name="lang" type="text" value="" class="advfield" />\r
</td> \r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td> \r
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="bordercolor">{$lang_table_bordercolor}</label></td> \r
+ <td class="column1"><label for="frame">{#table_dlg.frame}</label></td> \r
+ <td>\r
+ <select id="frame" name="frame" class="advfield"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="none">{#table_dlg.frame_none}</option>\r
+ <option value="groups">{#table_dlg.frame_groups}</option>\r
+ <option value="rows">{#table_dlg.frame_rows}</option>\r
+ <option value="cols">{#table_dlg.frame_cols}</option>\r
+ <option value="all">{#table_dlg.frame_all}</option>\r
+ </select>\r
+ </td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="column1"><label for="rules">{#table_dlg.rules}</label></td> \r
+ <td>\r
+ <select id="rules" name="rules" class="advfield"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="void">{#table_dlg.rules_void}</option>\r
+ <option value="above">{#table_dlg.rules_above}</option> \r
+ <option value="below">{#table_dlg.rules_below}</option> \r
+ <option value="hsides">{#table_dlg.rules_hsides}</option> \r
+ <option value="lhs">{#table_dlg.rules_lhs}</option> \r
+ <option value="rhs">{#table_dlg.rules_rhs}</option> \r
+ <option value="vsides">{#table_dlg.rules_vsides}</option> \r
+ <option value="box">{#table_dlg.rules_box}</option> \r
+ <option value="border">{#table_dlg.rules_border}</option> \r
+ </select>\r
+ </td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
+ <td>\r
+ <select id="dir" name="dir" class="advfield"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#table_dlg.ltr}</option> \r
+ <option value="rtl">{#table_dlg.rtl}</option> \r
+ </select>\r
+ </td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td> \r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
</tr>\r
\r
<tr>\r
- <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td> \r
+ <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> \r
<td>\r
<table border="0" cellpadding="0" cellspacing="0">\r
<tr>\r
\r
<div class="mceActionPanel">\r
<div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertTable();" />\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
</div>\r
\r
<div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
</form>\r
-tinyMCE.importPluginLanguagePack('visualchars');var TinyMCE_VisualCharsPlugin={getInfo:function(){return{longname:'Visual characters',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){inst.visualChars={state:false}},getControlHTML:function(cn){switch(cn){case"visualchars":return tinyMCE.getButtonHTML(cn,'lang_visualchars_desc','{$pluginurl}/images/visualchars.gif','mceVisualChars',false)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id);switch(command){case"mceVisualChars":this._toggleVisualChars(editor_id,inst);return true}return false},cleanup:function(type,content,inst){if(type=="insert_to_editor_dom"||type=="get_from_editor_dom"){inst.visualChars.state=true;this._toggleVisualChars(inst.editorId,inst)}return content},_toggleVisualChars:function(editor_id,inst){var nl,i,h,d=inst.getDoc(),b=inst.getBody(),nv,s=inst.selection,bo;inst.visualChars.state=!inst.visualChars.state;bo=s.getBookmark(true);tinyMCE.switchClass(editor_id+'_visualchars',inst.visualChars.state?'mceButtonSelected':'mceButtonNormal');if(inst.visualChars.state){nl=tinyMCE.selectNodes(b,function(n){return n.nodeType==3&&n.nodeValue&&n.nodeValue.indexOf('\u00a0')!=-1});for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;nv=nv.replace(/(\u00a0+)/g,'<span class="mceItemHiddenVisualChar">$1</span>');nv=nv.replace(/\u00a0/g,'\u00b7');tinyMCE.setOuterHTML(nl[i],nv,d)}}else{nl=tinyMCE.selectNodes(b,function(n){return n.nodeType==1&&n.nodeName=='SPAN'&&n.className=='mceItemHiddenVisualChar'});for(i=0;i<nl.length;i++)tinyMCE.setOuterHTML(nl[i],nl[i].innerHTML.replace(/(·|\u00b7)/g,' '),d)}}};tinyMCE.addPlugin("visualchars",TinyMCE_VisualCharsPlugin);
\ No newline at end of file
+(function(){tinymce.create('tinymce.plugins.VisualChars',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceVisualChars',t._toggleVisualChars,t);ed.addButton('visualchars',{title:'visualchars.desc',cmd:'mceVisualChars'});ed.onBeforeGetContent.add(function(ed,o){if(t.state){t.state=true;t._toggleVisualChars();}});},getInfo:function(){return{longname:'Visual characters',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_toggleVisualChars:function(){var t=this,ed=t.editor,nl,i,h,d=ed.getDoc(),b=ed.getBody(),nv,s=ed.selection,bo;t.state=!t.state;ed.controlManager.setActive('visualchars',t.state);if(t.state){nl=[];tinymce.walk(b,function(n){if(n.nodeType==3&&n.nodeValue&&n.nodeValue.indexOf('\u00a0')!=-1)nl.push(n);},'childNodes');for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;nv=nv.replace(/(\u00a0+)/g,'<span class="mceItemHidden mceVisualNbsp">$1</span>');nv=nv.replace(/\u00a0/g,'\u00b7');ed.dom.setOuterHTML(nl[i],nv,d);}}else{nl=tinymce.grep(ed.dom.select('span',b),function(n){return ed.dom.hasClass(n,'mceVisualNbsp');});for(i=0;i<nl.length;i++)ed.dom.setOuterHTML(nl[i],nl[i].innerHTML.replace(/(·|\u00b7)/g,' '),d);}}});tinymce.PluginManager.add('visualchars',tinymce.plugins.VisualChars);})();
\ No newline at end of file
/**\r
- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
*\r
* @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
*/\r
\r
-/* Import plugin specific language pack */\r
-tinyMCE.importPluginLanguagePack('visualchars');\r
-\r
-var TinyMCE_VisualCharsPlugin = {\r
- getInfo : function() {\r
- return {\r
- longname : 'Visual characters',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',\r
- version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
- };\r
- },\r
-\r
- initInstance : function(inst) {\r
- inst.visualChars = {\r
- state : false\r
- };\r
- },\r
-\r
- getControlHTML : function(cn) {\r
- switch (cn) {\r
- case "visualchars":\r
- return tinyMCE.getButtonHTML(cn, 'lang_visualchars_desc', '{$pluginurl}/images/visualchars.gif', 'mceVisualChars', false);\r
- }\r
-\r
- return "";\r
- },\r
-\r
- execCommand : function(editor_id, element, command, user_interface, value) {\r
- var inst = tinyMCE.getInstanceById(editor_id);\r
-\r
- switch (command) {\r
- case "mceVisualChars":\r
- this._toggleVisualChars(editor_id, inst);\r
- return true;\r
- }\r
-\r
- return false;\r
- },\r
-\r
- cleanup : function(type, content, inst) {\r
- if (type == "insert_to_editor_dom" || type == "get_from_editor_dom") {\r
- inst.visualChars.state = true;\r
- this._toggleVisualChars(inst.editorId, inst);\r
- }\r
-\r
- return content;\r
- },\r
-\r
- // Private plugin internal methods\r
-\r
- _toggleVisualChars : function(editor_id, inst) {\r
- var nl, i, h, d = inst.getDoc(), b = inst.getBody(), nv, s = inst.selection, bo;\r
-\r
- inst.visualChars.state = !inst.visualChars.state;\r
-\r
- bo = s.getBookmark(true);\r
-\r
- tinyMCE.switchClass(editor_id + '_visualchars', inst.visualChars.state ? 'mceButtonSelected' : 'mceButtonNormal');\r
-\r
- if (inst.visualChars.state) {\r
- nl = tinyMCE.selectNodes(b, function(n) {return n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1;});\r
-\r
- for (i=0; i<nl.length; i++) {\r
- nv = nl[i].nodeValue;\r
- nv = nv.replace(/(\u00a0+)/g, '<span class="mceItemHiddenVisualChar">$1</span>');\r
- nv = nv.replace(/\u00a0/g, '\u00b7');\r
- tinyMCE.setOuterHTML(nl[i], nv, d);\r
+(function() {\r
+ tinymce.create('tinymce.plugins.VisualChars', {\r
+ init : function(ed, url) {\r
+ var t = this;\r
+\r
+ t.editor = ed;\r
+\r
+ // Register commands\r
+ ed.addCommand('mceVisualChars', t._toggleVisualChars, t);\r
+\r
+ // Register buttons\r
+ ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});\r
+\r
+ ed.onBeforeGetContent.add(function(ed, o) {\r
+ if (t.state) {\r
+ t.state = true;\r
+ t._toggleVisualChars();\r
+ }\r
+ });\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Visual characters',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ },\r
+\r
+ // Private methods\r
+\r
+ _toggleVisualChars : function() {\r
+ var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo;\r
+\r
+ t.state = !t.state;\r
+ ed.controlManager.setActive('visualchars', t.state);\r
+\r
+ if (t.state) {\r
+ nl = [];\r
+ tinymce.walk(b, function(n) {\r
+ if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)\r
+ nl.push(n);\r
+ }, 'childNodes');\r
+\r
+ for (i=0; i<nl.length; i++) {\r
+ nv = nl[i].nodeValue;\r
+ nv = nv.replace(/(\u00a0+)/g, '<span class="mceItemHidden mceVisualNbsp">$1</span>');\r
+ nv = nv.replace(/\u00a0/g, '\u00b7');\r
+ ed.dom.setOuterHTML(nl[i], nv, d);\r
+ }\r
+ } else {\r
+ nl = tinymce.grep(ed.dom.select('span', b), function(n) {\r
+ return ed.dom.hasClass(n, 'mceVisualNbsp');\r
+ });\r
+\r
+ for (i=0; i<nl.length; i++)\r
+ ed.dom.setOuterHTML(nl[i], nl[i].innerHTML.replace(/(·|\u00b7)/g, ' '), d);\r
}\r
- } else {\r
- nl = tinyMCE.selectNodes(b, function(n) {return n.nodeType == 1 && n.nodeName == 'SPAN' && n.className == 'mceItemHiddenVisualChar';});\r
-\r
- for (i=0; i<nl.length; i++)\r
- tinyMCE.setOuterHTML(nl[i], nl[i].innerHTML.replace(/(·|\u00b7)/g, ' '), d);\r
}\r
+ });\r
\r
- //s.moveToBookmark(bo);\r
- }\r
-};\r
-\r
-tinyMCE.addPlugin("visualchars", TinyMCE_VisualCharsPlugin);\r
+ // Register plugin\r
+ tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);\r
+})();
\ No newline at end of file
+++ /dev/null
-// EN lang variables\r
-\r
-tinyMCE.addToLang('visualchars',{\r
-desc : 'Visual control characters on/off.'\r
-});\r
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>{#xhtmlxtras_dlg.title_abbr_element}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="js/element_common.js"></script>\r
+ <script type="text/javascript" src="js/abbr.js"></script>\r
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+ <base target="_self" />\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="insertAbbr();return false;" action="#">\r
+ <div class="tabs">\r
+ <ul>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+ </ul>\r
+ </div>\r
+\r
+ <div class="panel_wrapper">\r
+ <div id="general_panel" class="panel current">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+ <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+ <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+ <td>\r
+ <select id="class" name="class" class="field mceEditableSelect">\r
+ <option value="">{#not_set}</option> \r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+ <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+ <td>\r
+ <select id="dir" name="dir" class="field"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+ </select>\r
+ </td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+ <td>\r
+ <input id="lang" name="lang" type="text" value="" class="field" />\r
+ </td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ <div id="events_panel" class="panel">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onblur">onblur</label>:</td> \r
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onclick">onclick</label>:</td> \r
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ </div>\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ </div>\r
+ <div style="float: left">\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />\r
+ </div>\r
+ <div style="float: right">\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+ </div>\r
+ </div>\r
+\r
+</form>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>{#xhtmlxtras_dlg.title_acronym_element}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="js/element_common.js"></script>\r
+ <script type="text/javascript" src="js/acronym.js"></script>\r
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+ <base target="_self" />\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="insertAcronym();return false;" action="#">\r
+ <div class="tabs">\r
+ <ul>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+ </ul>\r
+ </div>\r
+\r
+ <div class="panel_wrapper">\r
+ <div id="general_panel" class="panel current">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+ <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+ <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+ <td>\r
+ <select id="class" name="class" class="field mceEditableSelect">\r
+ <option value="">{#not_set}</option> \r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+ <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+ <td>\r
+ <select id="dir" name="dir" class="field"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+ </select>\r
+ </td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+ <td>\r
+ <input id="lang" name="lang" type="text" value="" class="field" />\r
+ </td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ <div id="events_panel" class="panel">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onblur">onblur</label>:</td> \r
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onclick">onclick</label>:</td> \r
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ </div>\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ </div>\r
+ <div style="float: left">\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />\r
+ </div>\r
+ <div style="float: right">\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+ </div>\r
+ </div>\r
+\r
+</form>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>{#xhtmlxtras_dlg.attribs_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="js/attributes.js"></script>\r
+ <link rel="stylesheet" type="text/css" href="css/attributes.css" />\r
+ <base target="_self" />\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="insertAction();return false;" action="#">\r
+ <div class="tabs">\r
+ <ul>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_attrib_tab}</a></span></li>\r
+ <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_events_tab}</a></span></li>\r
+ </ul>\r
+ </div>\r
+\r
+ <div class="panel_wrapper">\r
+ <div id="general_panel" class="panel current">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.attribute_attrib_tab}</legend>\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+ <td><input id="title" name="title" type="text" value="" class="mceFocus" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+ <td><input id="id" name="id" type="text" value="" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td><label id="classlabel" for="classlist">{#class_name}</label></td>\r
+ <td>\r
+ <select id="classlist" name="classlist" class="mceEditableSelect">\r
+ <option value="" selected>{#not_set}</option>\r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+ <td><input id="style" name="style" type="text" value="" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+ <td>\r
+ <select id="dir" name="dir"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#xhtmlxtras_dlg.option_ltr}</option> \r
+ <option value="rtl">{#xhtmlxtras_dlg.option_rtl}</option> \r
+ </select>\r
+ </td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+ <td>\r
+ <input id="lang" name="lang" type="text" value="" />\r
+ </td> \r
+ </tr>\r
+ <tr>\r
+ <td><label id="tabindexlabel" for="tabindex">{#xhtmlxtras_dlg.attribute_label_tabindex}</label></td>\r
+ <td><input type="text" id="tabindex" name="tabindex" value="" /></td>\r
+ </tr>\r
+\r
+ <tr>\r
+ <td><label id="accesskeylabel" for="accesskey">{#xhtmlxtras_dlg.attribute_label_accesskey}</label></td>\r
+ <td><input type="text" id="accesskey" name="accesskey" value="" /></td>\r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ <div id="events_panel" class="panel">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.attribute_events_tab}</legend>\r
+\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+ <td><input id="onfocus" name="onfocus" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onblur">onblur</label>:</td> \r
+ <td><input id="onblur" name="onblur" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onclick">onclick</label>:</td> \r
+ <td><input id="onclick" name="onclick" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ </div>\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ </div>\r
+ <div style="float: right">\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+ </div>\r
+ </div>\r
+\r
+</form>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>{#xhtmlxtras_dlg.title_cite_element}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="js/element_common.js"></script>\r
+ <script type="text/javascript" src="js/cite.js"></script>\r
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+ <base target="_self" />\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="insertCite();return false;" action="#">\r
+ <div class="tabs">\r
+ <ul>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+ </ul>\r
+ </div>\r
+\r
+ <div class="panel_wrapper">\r
+ <div id="general_panel" class="panel current">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+ <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+ <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+ <td>\r
+ <select id="class" name="class" class="field mceEditableSelect">\r
+ <option value="">{#not_set}</option> \r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+ <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+ <td>\r
+ <select id="dir" name="dir" class="field"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+ </select>\r
+ </td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+ <td>\r
+ <input id="lang" name="lang" type="text" value="" class="field" />\r
+ </td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ <div id="events_panel" class="panel">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onblur">onblur</label>:</td> \r
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onclick">onclick</label>:</td> \r
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ </div>\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ </div>\r
+ <div style="float: left">\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />\r
+ </div>\r
+ <div style="float: right">\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+ </div>\r
+ </div>\r
+\r
+</form>\r
+</body>\r
+</html>\r
--- /dev/null
+.panel_wrapper div.current {\r
+ height: 290px;\r
+}\r
+\r
+#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey {\r
+ width: 200px;\r
+}\r
+\r
+#events_panel input {\r
+ width: 200px;\r
+}\r
--- /dev/null
+input.field, select.field {width:200px;}\r
+input.picker {width:179px; margin-left: 5px;}\r
+input.disabled {border-color:#F2F2F2;}\r
+img.picker {vertical-align:text-bottom; cursor:pointer;}\r
+h1 {padding: 0 0 5px 0;}\r
+.panel_wrapper div.current {height:160px;}\r
+#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;}\r
+a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;}\r
+#datetime {width:180px;}\r
--- /dev/null
+ins {\r
+ border-bottom: 1px solid green;\r
+ text-decoration: none;\r
+ color: green;\r
+}\r
+\r
+del {\r
+ color: Red;\r
+ text-decoration: line-through;\r
+}\r
+\r
+cite {\r
+ border-bottom: 1px dashed blue;\r
+}\r
+\r
+acronym {\r
+ border-bottom: 1px dotted #CCC;\r
+ cursor: help;\r
+}\r
+\r
+abbr, html\:abbr {\r
+ border-bottom: 1px dashed #CCC;\r
+ cursor: help;\r
+}\r
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>{#xhtmlxtras_dlg.title_del_element}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="js/element_common.js"></script>\r
+ <script type="text/javascript" src="js/del.js"></script>\r
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+ <base target="_self" />\r
+</head>\r
+<body id="xhtmlxtrasins" style="display: none">\r
+<form onsubmit="insertDel();return false;" action="#">\r
+ <div class="tabs">\r
+ <ul>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+ </ul>\r
+ </div>\r
+\r
+ <div class="panel_wrapper">\r
+ <div id="general_panel" class="panel current">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>\r
+ <td>\r
+ <table border="0" cellspacing="0" cellpadding="0">\r
+ <tr> \r
+ <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> \r
+ <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" alt="{#xhtmlxtras_dlg.insert_date}" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>\r
+ <td><input id="cite" name="cite" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+ <td><input id="title" name="title" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+ <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+ <td>\r
+ <select id="class" name="class" class="field mceEditableSelect">\r
+ <option value="">{#not_set}</option> \r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+ <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+ <td>\r
+ <select id="dir" name="dir" class="field"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+ </select>\r
+ </td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+ <td>\r
+ <input id="lang" name="lang" type="text" value="" class="field" />\r
+ </td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ <div id="events_panel" class="panel">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onblur">onblur</label>:</td> \r
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onclick">onclick</label>:</td> \r
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ </div>\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ </div>\r
+ <div style="float: left">\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />\r
+ </div>\r
+ <div style="float: right">\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+ </div>\r
+ </div>\r
+\r
+</form>\r
+\r
+</body>\r
+</html>\r
--- /dev/null
+(function(){tinymce.create('tinymce.plugins.XHTMLXtrasPlugin',{init:function(ed,url){ed.addCommand('mceCite',function(){ed.windowManager.open({file:url+'/cite.htm',width:350+parseInt(ed.getLang('xhtmlxtras.cite_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.cite_delta_height',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAcronym',function(){ed.windowManager.open({file:url+'/acronym.htm',width:350+parseInt(ed.getLang('xhtmlxtras.acronym_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.acronym_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAbbr',function(){ed.windowManager.open({file:url+'/abbr.htm',width:350+parseInt(ed.getLang('xhtmlxtras.abbr_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.abbr_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceDel',function(){ed.windowManager.open({file:url+'/del.htm',width:340+parseInt(ed.getLang('xhtmlxtras.del_delta_width',0)),height:310+parseInt(ed.getLang('xhtmlxtras.del_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceIns',function(){ed.windowManager.open({file:url+'/ins.htm',width:340+parseInt(ed.getLang('xhtmlxtras.ins_delta_width',0)),height:310+parseInt(ed.getLang('xhtmlxtras.ins_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAttributes',function(){ed.windowManager.open({file:url+'/attributes.htm',width:380,height:370,inline:1},{plugin_url:url});});ed.addButton('cite',{title:'xhtmlxtras.cite_desc',cmd:'mceCite'});ed.addButton('acronym',{title:'xhtmlxtras.acronym_desc',cmd:'mceAcronym'});ed.addButton('abbr',{title:'xhtmlxtras.abbr_desc',cmd:'mceAbbr'});ed.addButton('del',{title:'xhtmlxtras.del_desc',cmd:'mceDel'});ed.addButton('ins',{title:'xhtmlxtras.ins_desc',cmd:'mceIns'});ed.addButton('attribs',{title:'xhtmlxtras.attribs_desc',cmd:'mceAttributes'});if(tinymce.isIE){function fix(ed,o){if(o.set){o.content=o.content.replace(/<abbr([^>]+)>/gi,'<html:abbr $1>');o.content=o.content.replace(/<\/abbr>/gi,'</html:abbr>');}};ed.onBeforeSetContent.add(fix);ed.onPostProcess.add(fix);}ed.onNodeChange.add(function(ed,cm,n,co){n=ed.dom.getParent(n,'CITE,ACRONYM,ABBR,DEL,INS');cm.setDisabled('cite',co);cm.setDisabled('acronym',co);cm.setDisabled('abbr',co);cm.setDisabled('del',co);cm.setDisabled('ins',co);cm.setDisabled('attribs',n&&n.nodeName=='BODY');if(n){cm.setDisabled(n.nodeName.toLowerCase(),0);cm.setActive(n.nodeName.toLowerCase(),1);}else{cm.setActive('cite',0);cm.setActive('acronym',0);cm.setActive('abbr',0);cm.setActive('del',0);cm.setActive('ins',0);}});},getInfo:function(){return{longname:'XHTML Xtras Plugin',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('xhtmlxtras',tinymce.plugins.XHTMLXtrasPlugin);})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+ tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', {\r
+ init : function(ed, url) {\r
+ // Register commands\r
+ ed.addCommand('mceCite', function() {\r
+ ed.windowManager.open({\r
+ file : url + '/cite.htm',\r
+ width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)),\r
+ height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ });\r
+\r
+ ed.addCommand('mceAcronym', function() {\r
+ ed.windowManager.open({\r
+ file : url + '/acronym.htm',\r
+ width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),\r
+ height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ });\r
+\r
+ ed.addCommand('mceAbbr', function() {\r
+ ed.windowManager.open({\r
+ file : url + '/abbr.htm',\r
+ width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),\r
+ height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ });\r
+\r
+ ed.addCommand('mceDel', function() {\r
+ ed.windowManager.open({\r
+ file : url + '/del.htm',\r
+ width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),\r
+ height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ });\r
+\r
+ ed.addCommand('mceIns', function() {\r
+ ed.windowManager.open({\r
+ file : url + '/ins.htm',\r
+ width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),\r
+ height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ });\r
+\r
+ ed.addCommand('mceAttributes', function() {\r
+ ed.windowManager.open({\r
+ file : url + '/attributes.htm',\r
+ width : 380,\r
+ height : 370,\r
+ inline : 1\r
+ }, {\r
+ plugin_url : url\r
+ });\r
+ });\r
+\r
+ // Register buttons\r
+ ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'});\r
+ ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'});\r
+ ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'});\r
+ ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'});\r
+ ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});\r
+ ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});\r
+\r
+ if (tinymce.isIE) {\r
+ function fix(ed, o) {\r
+ if (o.set) {\r
+ o.content = o.content.replace(/<abbr([^>]+)>/gi, '<html:abbr $1>');\r
+ o.content = o.content.replace(/<\/abbr>/gi, '</html:abbr>');\r
+ }\r
+ };\r
+\r
+ ed.onBeforeSetContent.add(fix);\r
+ ed.onPostProcess.add(fix);\r
+ }\r
+\r
+ ed.onNodeChange.add(function(ed, cm, n, co) {\r
+ n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');\r
+\r
+ cm.setDisabled('cite', co);\r
+ cm.setDisabled('acronym', co);\r
+ cm.setDisabled('abbr', co);\r
+ cm.setDisabled('del', co);\r
+ cm.setDisabled('ins', co);\r
+ cm.setDisabled('attribs', n && n.nodeName == 'BODY');\r
+\r
+ if (n) {\r
+ cm.setDisabled(n.nodeName.toLowerCase(), 0);\r
+ cm.setActive(n.nodeName.toLowerCase(), 1);\r
+ } else {\r
+ cm.setActive('cite', 0);\r
+ cm.setActive('acronym', 0);\r
+ cm.setActive('abbr', 0);\r
+ cm.setActive('del', 0);\r
+ cm.setActive('ins', 0);\r
+ }\r
+ });\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'XHTML Xtras Plugin',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ };\r
+ }\r
+ });\r
+\r
+ // Register plugin\r
+ tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin);\r
+})();
\ No newline at end of file
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>{#xhtmlxtras_dlg.title_ins_element}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+ <script type="text/javascript" src="js/element_common.js"></script>\r
+ <script type="text/javascript" src="js/ins.js"></script>\r
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+ <base target="_self" />\r
+</head>\r
+<body id="xhtmlxtrasins" style="display: none">\r
+<form onsubmit="insertIns();return false;" action="#">\r
+ <div class="tabs">\r
+ <ul>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+ </ul>\r
+ </div>\r
+\r
+ <div class="panel_wrapper">\r
+ <div id="general_panel" class="panel current">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td> \r
+ <td>\r
+ <table border="0" cellspacing="0" cellpadding="0">\r
+ <tr> \r
+ <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> \r
+ <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" alt="{#xhtmlxtras_dlg.insert_date}" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
+ </tr>\r
+ </table>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td> \r
+ <td><input id="cite" name="cite" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+ <td><input id="title" name="title" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+ <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+ <td>\r
+ <select id="class" name="class" class="field mceEditableSelect">\r
+ <option value="">{#not_set}</option> \r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+ <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+ <td>\r
+ <select id="dir" name="dir" class="field"> \r
+ <option value="">{#not_set}</option> \r
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+ </select>\r
+ </td> \r
+ </tr>\r
+ <tr>\r
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+ <td>\r
+ <input id="lang" name="lang" type="text" value="" class="field" />\r
+ </td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ <div id="events_panel" class="panel">\r
+ <fieldset>\r
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+ <table border="0" cellpadding="0" cellspacing="4">\r
+ <tr>\r
+ <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onblur">onblur</label>:</td> \r
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onclick">onclick</label>:</td> \r
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+ </tr>\r
+\r
+ <tr>\r
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+ </tr>\r
+ </table>\r
+ </fieldset>\r
+ </div>\r
+ </div>\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
+ </div>\r
+ <div style="float: left">\r
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />\r
+ </div>\r
+ <div style="float: right">\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+ </div>\r
+ </div>\r
+\r
+</form>\r
+\r
+</body>\r
+</html>\r
--- /dev/null
+ /**\r
+ * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ *\r
+ * @author Moxiecode - based on work by Andrew Tetlaw\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+function init() {\r
+ SXE.initElementDialog('abbr');\r
+ if (SXE.currentAction == "update") {\r
+ SXE.showRemoveButton();\r
+ }\r
+}\r
+\r
+function insertAbbr() {\r
+ SXE.insertElement(tinymce.isIE ? 'html:abbr' : 'abbr');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function removeAbbr() {\r
+ SXE.removeElement('abbr');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+ /**\r
+ * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ *\r
+ * @author Moxiecode - based on work by Andrew Tetlaw\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+function init() {\r
+ SXE.initElementDialog('acronym');\r
+ if (SXE.currentAction == "update") {\r
+ SXE.showRemoveButton();\r
+ }\r
+}\r
+\r
+function insertAcronym() {\r
+ SXE.insertElement('acronym');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function removeAcronym() {\r
+ SXE.removeElement('acronym');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+ /**\r
+ * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ *\r
+ * @author Moxiecode - based on work by Andrew Tetlaw\r
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+function init() {\r
+ tinyMCEPopup.resizeToInnerSize();\r
+ var inst = tinyMCEPopup.editor;\r
+ var dom = inst.dom;\r
+ var elm = inst.selection.getNode();\r
+ var f = document.forms[0];\r
+ var onclick = dom.getAttrib(elm, 'onclick');\r
+\r
+ setFormValue('title', dom.getAttrib(elm, 'title'));\r
+ setFormValue('id', dom.getAttrib(elm, 'id'));\r
+ setFormValue('style', dom.getAttrib(elm, "style"));\r
+ setFormValue('dir', dom.getAttrib(elm, 'dir'));\r
+ setFormValue('lang', dom.getAttrib(elm, 'lang'));\r
+ setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));\r
+ setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));\r
+ setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));\r
+ setFormValue('onblur', dom.getAttrib(elm, 'onblur'));\r
+ setFormValue('onclick', onclick);\r
+ setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));\r
+ setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));\r
+ setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));\r
+ setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));\r
+ setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));\r
+ setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));\r
+ setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));\r
+ setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));\r
+ setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));\r
+ className = dom.getAttrib(elm, 'class');\r
+\r
+ addClassesToList('classlist', 'advlink_styles');\r
+ selectByValue(f, 'classlist', className, true);\r
+\r
+ TinyMCE_EditableSelects.init();\r
+}\r
+\r
+function setFormValue(name, value) {\r
+ if(value && document.forms[0].elements[name]){\r
+ document.forms[0].elements[name].value = value;\r
+ }\r
+}\r
+\r
+function insertAction() {\r
+ var inst = tinyMCEPopup.editor;\r
+ var elm = inst.selection.getNode();\r
+\r
+ tinyMCEPopup.execCommand("mceBeginUndoLevel"); \r
+ setAllAttribs(elm);\r
+ tinyMCEPopup.execCommand("mceEndUndoLevel");\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function setAttrib(elm, attrib, value) {\r
+ var formObj = document.forms[0];\r
+ var valueElm = formObj.elements[attrib.toLowerCase()];\r
+ var inst = tinyMCEPopup.editor;\r
+ var dom = inst.dom;\r
+\r
+ if (typeof(value) == "undefined" || value == null) {\r
+ value = "";\r
+\r
+ if (valueElm)\r
+ value = valueElm.value;\r
+ }\r
+\r
+ if (value != "") {\r
+ dom.setAttrib(elm, attrib.toLowerCase(), value);\r
+\r
+ if (attrib == "style")\r
+ attrib = "style.cssText";\r
+\r
+ if (attrib.substring(0, 2) == 'on')\r
+ value = 'return true;' + value;\r
+\r
+ if (attrib == "class")\r
+ attrib = "className";\r
+\r
+ elm[attrib]=value;\r
+ } else\r
+ elm.removeAttribute(attrib);\r
+}\r
+\r
+function setAllAttribs(elm) {\r
+ var f = document.forms[0];\r
+\r
+ setAttrib(elm, 'title');\r
+ setAttrib(elm, 'id');\r
+ setAttrib(elm, 'style');\r
+ setAttrib(elm, 'class', getSelectValue(f, 'classlist'));\r
+ setAttrib(elm, 'dir');\r
+ setAttrib(elm, 'lang');\r
+ setAttrib(elm, 'tabindex');\r
+ setAttrib(elm, 'accesskey');\r
+ setAttrib(elm, 'onfocus');\r
+ setAttrib(elm, 'onblur');\r
+ setAttrib(elm, 'onclick');\r
+ setAttrib(elm, 'ondblclick');\r
+ setAttrib(elm, 'onmousedown');\r
+ setAttrib(elm, 'onmouseup');\r
+ setAttrib(elm, 'onmouseover');\r
+ setAttrib(elm, 'onmousemove');\r
+ setAttrib(elm, 'onmouseout');\r
+ setAttrib(elm, 'onkeypress');\r
+ setAttrib(elm, 'onkeydown');\r
+ setAttrib(elm, 'onkeyup');\r
+\r
+ // Refresh in old MSIE\r
+// if (tinyMCE.isMSIE5)\r
+// elm.outerHTML = elm.outerHTML;\r
+}\r
+\r
+function insertAttribute() {\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
+tinyMCEPopup.requireLangPack();\r
--- /dev/null
+ /**\r
+ * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ *\r
+ * @author Moxiecode - based on work by Andrew Tetlaw\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+function init() {\r
+ SXE.initElementDialog('cite');\r
+ if (SXE.currentAction == "update") {\r
+ SXE.showRemoveButton();\r
+ }\r
+}\r
+\r
+function insertCite() {\r
+ SXE.insertElement('cite');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function removeCite() {\r
+ SXE.removeElement('cite');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+ /**\r
+ * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ *\r
+ * @author Moxiecode - based on work by Andrew Tetlaw\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+function init() {\r
+ SXE.initElementDialog('del');\r
+ if (SXE.currentAction == "update") {\r
+ setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));\r
+ setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));\r
+ SXE.showRemoveButton();\r
+ }\r
+}\r
+\r
+function setElementAttribs(elm) {\r
+ setAllCommonAttribs(elm);\r
+ setAttrib(elm, 'datetime');\r
+ setAttrib(elm, 'cite');\r
+}\r
+\r
+function insertDel() {\r
+ var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL');\r
+\r
+ tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
+ if (elm == null) {\r
+ var s = SXE.inst.selection.getContent();\r
+ if(s.length > 0) {\r
+ tinyMCEPopup.execCommand('mceInsertContent', false, '<del id="#sxe_temp_del#">' + s + '</del>');\r
+ var elementArray = tinymce.grep(SXE.inst.dom.select('del'), function(n) {return n.id == '#sxe_temp_del#';});\r
+ for (var i=0; i<elementArray.length; i++) {\r
+ var elm = elementArray[i];\r
+ setElementAttribs(elm);\r
+ }\r
+ }\r
+ } else {\r
+ setElementAttribs(elm);\r
+ }\r
+ tinyMCEPopup.editor.nodeChanged();\r
+ tinyMCEPopup.execCommand('mceEndUndoLevel');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function removeDel() {\r
+ SXE.removeElement('del');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+ /**\r
+ * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ *\r
+ * @author Moxiecode - based on work by Andrew Tetlaw\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+tinyMCEPopup.requireLangPack();\r
+\r
+function initCommonAttributes(elm) {\r
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+\r
+ // Setup form data for common element attributes\r
+ setFormValue('title', dom.getAttrib(elm, 'title'));\r
+ setFormValue('id', dom.getAttrib(elm, 'id'));\r
+ selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);\r
+ setFormValue('style', dom.getAttrib(elm, 'style'));\r
+ selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));\r
+ setFormValue('lang', dom.getAttrib(elm, 'lang'));\r
+ setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));\r
+ setFormValue('onblur', dom.getAttrib(elm, 'onblur'));\r
+ setFormValue('onclick', dom.getAttrib(elm, 'onclick'));\r
+ setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));\r
+ setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));\r
+ setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));\r
+ setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));\r
+ setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));\r
+ setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));\r
+ setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));\r
+ setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));\r
+ setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));\r
+}\r
+\r
+function setFormValue(name, value) {\r
+ if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;\r
+}\r
+\r
+function insertDateTime(id) {\r
+ document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");\r
+}\r
+\r
+function getDateTime(d, fmt) {\r
+ fmt = fmt.replace("%D", "%m/%d/%y");\r
+ fmt = fmt.replace("%r", "%I:%M:%S %p");\r
+ fmt = fmt.replace("%Y", "" + d.getFullYear());\r
+ fmt = fmt.replace("%y", "" + d.getYear());\r
+ fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));\r
+ fmt = fmt.replace("%d", addZeros(d.getDate(), 2));\r
+ fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));\r
+ fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));\r
+ fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
+ fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
+ fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
+ fmt = fmt.replace("%%", "%");\r
+\r
+ return fmt;\r
+}\r
+\r
+function addZeros(value, len) {\r
+ var i;\r
+\r
+ value = "" + value;\r
+\r
+ if (value.length < len) {\r
+ for (i=0; i<(len-value.length); i++)\r
+ value = "0" + value;\r
+ }\r
+\r
+ return value;\r
+}\r
+\r
+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {\r
+ if (!form_obj || !form_obj.elements[field_name])\r
+ return;\r
+\r
+ var sel = form_obj.elements[field_name];\r
+\r
+ var found = false;\r
+ for (var i=0; i<sel.options.length; i++) {\r
+ var option = sel.options[i];\r
+\r
+ if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {\r
+ option.selected = true;\r
+ found = true;\r
+ } else\r
+ option.selected = false;\r
+ }\r
+\r
+ if (!found && add_custom && value != '') {\r
+ var option = new Option('Value: ' + value, value);\r
+ option.selected = true;\r
+ sel.options[sel.options.length] = option;\r
+ }\r
+\r
+ return found;\r
+}\r
+\r
+function setAttrib(elm, attrib, value) {\r
+ var formObj = document.forms[0];\r
+ var valueElm = formObj.elements[attrib.toLowerCase()];\r
+ tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);\r
+}\r
+\r
+function setAllCommonAttribs(elm) {\r
+ setAttrib(elm, 'title');\r
+ setAttrib(elm, 'id');\r
+ setAttrib(elm, 'class');\r
+ setAttrib(elm, 'style');\r
+ setAttrib(elm, 'dir');\r
+ setAttrib(elm, 'lang');\r
+ /*setAttrib(elm, 'onfocus');\r
+ setAttrib(elm, 'onblur');\r
+ setAttrib(elm, 'onclick');\r
+ setAttrib(elm, 'ondblclick');\r
+ setAttrib(elm, 'onmousedown');\r
+ setAttrib(elm, 'onmouseup');\r
+ setAttrib(elm, 'onmouseover');\r
+ setAttrib(elm, 'onmousemove');\r
+ setAttrib(elm, 'onmouseout');\r
+ setAttrib(elm, 'onkeypress');\r
+ setAttrib(elm, 'onkeydown');\r
+ setAttrib(elm, 'onkeyup');*/\r
+}\r
+\r
+SXE = {\r
+ currentAction : "insert",\r
+ inst : tinyMCEPopup.editor,\r
+ updateElement : null\r
+}\r
+\r
+SXE.focusElement = SXE.inst.selection.getNode();\r
+\r
+SXE.initElementDialog = function(element_name) {\r
+ addClassesToList('class', 'xhtmlxtras_styles');\r
+ TinyMCE_EditableSelects.init();\r
+\r
+ element_name = element_name.toLowerCase();\r
+ var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());\r
+ if (elm != null && elm.nodeName == element_name.toUpperCase()) {\r
+ SXE.currentAction = "update";\r
+ }\r
+\r
+ if (SXE.currentAction == "update") {\r
+ initCommonAttributes(elm);\r
+ SXE.updateElement = elm;\r
+ }\r
+\r
+ document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true); \r
+}\r
+\r
+SXE.insertElement = function(element_name) {\r
+ var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;\r
+\r
+ tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
+ if (elm == null) {\r
+ var s = SXE.inst.selection.getContent();\r
+ if(s.length > 0) {\r
+ tagName = element_name;\r
+\r
+ if (tinymce.isIE && element_name.indexOf('html:') == 0)\r
+ element_name = element_name.substring(5).toLowerCase();\r
+\r
+ h = '<' + tagName + ' id="#sxe_temp_' + element_name + '#">' + s + '</' + tagName + '>';\r
+\r
+ tinyMCEPopup.execCommand('mceInsertContent', false, h);\r
+\r
+ var elementArray = tinymce.grep(SXE.inst.dom.select(element_name), function(n) {return n.id == '#sxe_temp_' + element_name + '#';});\r
+ for (var i=0; i<elementArray.length; i++) {\r
+ var elm = elementArray[i];\r
+\r
+ elm.id = '';\r
+ elm.setAttribute('id', '');\r
+ elm.removeAttribute('id');\r
+\r
+ setAllCommonAttribs(elm);\r
+ }\r
+ }\r
+ } else {\r
+ setAllCommonAttribs(elm);\r
+ }\r
+ SXE.inst.nodeChanged();\r
+ tinyMCEPopup.execCommand('mceEndUndoLevel');\r
+}\r
+\r
+SXE.removeElement = function(element_name){\r
+ element_name = element_name.toLowerCase();\r
+ elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());\r
+ if(elm && elm.nodeName == element_name.toUpperCase()){\r
+ tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
+ tinyMCE.execCommand('mceRemoveNode', false, elm);\r
+ SXE.inst.nodeChanged();\r
+ tinyMCEPopup.execCommand('mceEndUndoLevel');\r
+ }\r
+}\r
+\r
+SXE.showRemoveButton = function() {\r
+ document.getElementById("remove").style.display = 'block';\r
+}\r
+\r
+SXE.containsClass = function(elm,cl) {\r
+ return (elm.className.indexOf(cl) > -1) ? true : false;\r
+}\r
+\r
+SXE.removeClass = function(elm,cl) {\r
+ if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {\r
+ return true;\r
+ }\r
+ var classNames = elm.className.split(" ");\r
+ var newClassNames = "";\r
+ for (var x = 0, cnl = classNames.length; x < cnl; x++) {\r
+ if (classNames[x] != cl) {\r
+ newClassNames += (classNames[x] + " ");\r
+ }\r
+ }\r
+ elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end\r
+}\r
+\r
+SXE.addClass = function(elm,cl) {\r
+ if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;\r
+ return true;\r
+}
\ No newline at end of file
--- /dev/null
+ /**\r
+ * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $\r
+ *\r
+ * @author Moxiecode - based on work by Andrew Tetlaw\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+function init() {\r
+ SXE.initElementDialog('ins');\r
+ if (SXE.currentAction == "update") {\r
+ setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));\r
+ setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));\r
+ SXE.showRemoveButton();\r
+ }\r
+}\r
+\r
+function setElementAttribs(elm) {\r
+ setAllCommonAttribs(elm);\r
+ setAttrib(elm, 'datetime');\r
+ setAttrib(elm, 'cite');\r
+}\r
+\r
+function insertIns() {\r
+ var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS');\r
+ tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
+ if (elm == null) {\r
+ var s = SXE.inst.selection.getContent();\r
+ if(s.length > 0) {\r
+ tinyMCEPopup.execCommand('mceInsertContent', false, '<ins id="#sxe_temp_ins#">' + s + '</ins>');\r
+ var elementArray = tinymce.grep(SXE.inst.dom.select('ins'), function(n) {return n.id == '#sxe_temp_ins#';});\r
+ for (var i=0; i<elementArray.length; i++) {\r
+ var elm = elementArray[i];\r
+ setElementAttribs(elm);\r
+ }\r
+ }\r
+ } else {\r
+ setElementAttribs(elm);\r
+ }\r
+ tinyMCEPopup.editor.nodeChanged();\r
+ tinyMCEPopup.execCommand('mceEndUndoLevel');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function removeIns() {\r
+ SXE.removeElement('ins');\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+tinyMCE.addI18n('en.xhtmlxtras_dlg',{\r
+attribute_label_title:"Title",\r
+attribute_label_id:"ID",\r
+attribute_label_class:"Class",\r
+attribute_label_style:"Style",\r
+attribute_label_cite:"Cite",\r
+attribute_label_datetime:"Date/Time",\r
+attribute_label_langdir:"Text Direction",\r
+attribute_option_ltr:"Left to right",\r
+attribute_option_rtl:"Right to left",\r
+attribute_label_langcode:"Language",\r
+attribute_label_tabindex:"TabIndex",\r
+attribute_label_accesskey:"AccessKey",\r
+attribute_events_tab:"Events",\r
+attribute_attrib_tab:"Attributes",\r
+general_tab:"General",\r
+attrib_tab:"Attributes",\r
+events_tab:"Events",\r
+fieldset_general_tab:"General Settings",\r
+fieldset_attrib_tab:"Element Attributes",\r
+fieldset_events_tab:"Element Events",\r
+title_ins_element:"Insertion Element",\r
+title_del_element:"Deletion Element",\r
+title_acronym_element:"Acronym Element",\r
+title_abbr_element:"Abbreviation Element",\r
+title_cite_element:"Citation Element",\r
+remove:"Remove",\r
+insert_date:"Insert current date/time",\r
+option_ltr:"Left to right",\r
+option_rtl:"Right to left",\r
+attribs_title:"Insert/Edit Attributes"\r
+});
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_about_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/about.js"></script>\r
- <base target="_self" />\r
+ <title>{#advanced_dlg.about_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="js/about.js"></script>\r
</head>\r
-<body id="about" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
+<body id="about" style="display: none">\r
<div class="tabs">\r
<ul>\r
- <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_about}</a></span></li>\r
- <li id="help_tab"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{$lang_help}</a></span></li>\r
- <li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{$lang_plugins}</a></span></li>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>\r
+ <li id="help_tab" style="display:none"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>\r
+ <li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>\r
</ul>\r
</div>\r
\r
<div class="panel_wrapper">\r
<div id="general_panel" class="panel current">\r
- <h3>{$lang_about_title}</h3>\r
- <p>Version: {$tinymce_version} ({$tinymce_releasedate})</p>\r
+ <h3>{#advanced_dlg.about_title}</h3>\r
+ <p>Version: <span id="version"></span> (<span id="date"></span>)</p>\r
<p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>\r
by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>\r
- <p>Copyright © 2003-2007, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>\r
+ <p>Copyright © 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>\r
<p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>\r
\r
- <div id="buttoncontainer"></div>\r
+ <div id="buttoncontainer">\r
+ <a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>\r
+ <a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a>\r
+ <a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a>\r
+ </div>\r
</div>\r
\r
<div id="plugins_panel" class="panel">\r
<div id="pluginscontainer">\r
- <h3>{$lang_loaded_plugins}</h3>\r
+ <h3>{#advanced_dlg.about_loaded}</h3>\r
\r
<div id="plugintablecontainer">\r
</div>\r
\r
<div class="mceActionPanel">\r
<div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_close}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
</body>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_insert_anchor_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/anchor.js"></script>\r
+ <title>{#advanced_dlg.anchor_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="js/anchor.js"></script>\r
<base target="_self" />\r
</head>\r
-<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
-<form onsubmit="insertAnchor();return false;" action="#">\r
-\r
+<body style="display: none">\r
+<form onsubmit="AnchorDialog.update();return false;" action="#">\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td colspan="2" class="title">{$lang_insert_anchor_title}</td>\r
+ <td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>\r
</tr>\r
<tr>\r
- <td nowrap="nowrap">{$lang_insert_anchor_name}:</td>\r
- <td><input name="anchorName" type="text" id="anchorName" value="" style="width: 200px" /></td>\r
+ <td nowrap="nowrap">{#advanced_dlg.anchor_name}:</td>\r
+ <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>\r
</tr>\r
</table>\r
\r
<div class="mceActionPanel">\r
<div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{$lang_update}" onclick="insertAnchor();" />\r
+ <input type="submit" id="insert" name="insert" value="{#update}" />\r
</div>\r
\r
<div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
-\r
</form>\r
</body>\r
</html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_theme_charmap_title}</title>\r
+ <title>{#advanced_dlg.charmap_title}</title>\r
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/charmap.js"></script>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="js/charmap.js"></script>\r
<base target="_self" />\r
</head>\r
-<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
+<body id="charmap" style="display:none">\r
<table align="center" border="0" cellspacing="0" cellpadding="2">\r
<tr>\r
- <td colspan="2" class="title">{$lang_theme_charmap_title}</td>\r
+ <td colspan="2" class="title">{#advanced_dlg.charmap_title}</td>\r
</tr>\r
<tr>\r
- <td rowspan="2" align="left" valign="top">\r
- <script language="javascript" type="text/javascript">renderCharMapHTML();</script>\r
+ <td id="charmapView" rowspan="2" align="left" valign="top">\r
+ <!-- Chars will be rendered here -->\r
</td>\r
<td width="100" align="center" valign="top">\r
- <table border="0" cellpadding="0" cellspacing="0" width="100" style="height: 100px">\r
+ <table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px">\r
<tr>\r
- <td class="charmapOver" style="font-size: 40px; height:80px;" id="codeV"> </td>\r
+ <td id="codeV"> </td>\r
</tr>\r
<tr>\r
- <td style="font-size: 10px; font-family: Arial, Helvetica, sans-serif; text-align:center;" id="codeN"> </td>\r
+ <td id="codeN"> </td>\r
</tr>\r
</table>\r
</td>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_theme_colorpicker_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/color_picker.js"></script>\r
- <link href="css/colorpicker.css" rel="stylesheet" type="text/css" />\r
+ <title>{#advanced_dlg.colorpicker_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="js/color_picker.js"></script>\r
<base target="_self" />\r
</head>\r
-<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
+<body id="colorpicker" style="display: none">\r
+<form onsubmit="insertAction();return false" action="#">\r
<div class="tabs">\r
<ul>\r
- <li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{$lang_color_picker_tab}</a></span></li>\r
- <li id="rgb_tab"><span><a href="#" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{$lang_web_colors_tab}</a></span></li>\r
- <li id="named_tab"><span><a href="#" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{$lang_named_colors_tab}</a></span></li>\r
+ <li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>\r
+ <li id="rgb_tab"><span><a href="javascript:;" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>\r
+ <li id="named_tab"><span><a href="javascript:;" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>\r
</ul>\r
</div>\r
\r
<div class="panel_wrapper">\r
<div id="picker_panel" class="panel current">\r
<fieldset>\r
- <legend>{$lang_color_picker}</legend>\r
+ <legend>{#advanced_dlg.colorpicker_picker_title}</legend>\r
<div id="picker">\r
- <img id="colorpicker" src="images/colors.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" />\r
+ <img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" />\r
\r
<div id="light">\r
<!-- Will be filled with divs -->\r
\r
<div id="rgb_panel" class="panel">\r
<fieldset>\r
- <legend>{$lang_web_colors}</legend>\r
+ <legend>{#advanced_dlg.colorpicker_palette_title}</legend>\r
<div id="webcolors">\r
<!-- Gets filled with web safe colors-->\r
</div>\r
\r
<div id="named_panel" class="panel">\r
<fieldset>\r
- <legend>{$lang_named_colors}</legend>\r
+ <legend>{#advanced_dlg.colorpicker_named_title}</legend>\r
<div id="namedcolors">\r
<!-- Gets filled with named colors-->\r
</div>\r
<br style="clear: both" />\r
\r
<div id="colornamecontainer">\r
- {$lang_color_name} <span id="colorname"></span>\r
+ {#advanced_dlg.colorpicker_name} <span id="colorname"></span>\r
</div>\r
</fieldset>\r
</div>\r
\r
<div class="mceActionPanel">\r
<div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{$lang_theme_colorpicker_apply}" onclick="insertAction();" />\r
+ <input type="submit" id="insert" name="insert" value="{#apply}" />\r
</div>\r
\r
<div id="preview"></div>\r
\r
<div id="previewblock">\r
- <label for="color">{$lang_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text" />\r
+ <label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text mceFocus" />\r
</div>\r
</div>\r
+</form>\r
</body>\r
</html>\r
+++ /dev/null
-/* This file contains the CSS data for the editable area(iframe) of TinyMCE */\r
-/* You can extend this CSS by adding your own CSS file with the the content_css option */\r
-\r
-body, td, pre {\r
- font-family: Verdana, Arial, Helvetica, sans-serif;\r
- font-size: 10px;\r
-}\r
-\r
-body {\r
- background-color: #FFFFFF;\r
-}\r
-\r
-.mceVisualAid {\r
- border: 1px dashed #BBBBBB !important;\r
-}\r
-\r
-div.mceVisualAid {\r
- background-image:url('../images/spacer.gif');\r
- visibility: visible !important;\r
-}\r
-\r
-.mceItemAnchor {\r
- width: 12px;\r
- line-height: 6px;\r
- overflow: hidden;\r
- padding-left: 12px;\r
- background-image: url('../images/anchor_symbol.gif');\r
- background-position: bottom;\r
- background-repeat: no-repeat;\r
-}\r
-\r
-/* Important is needed in Gecko browsers inorder to style links */\r
-/*\r
-a {\r
- color: green !important;\r
-}\r
-*/\r
-\r
-/* Style selection range colors in Gecko browsers */\r
-/*\r
-::-moz-selection {\r
- background-color: red;\r
- color: green;\r
-}\r
-*/\r
-\r
-/* MSIE specific */\r
-\r
-* html body {\r
- scrollbar-3dlight-color: #F0F0EE;\r
- scrollbar-arrow-color: #676662;\r
- scrollbar-base-color: #F0F0EE;\r
- scrollbar-darkshadow-color: #DDDDDD;\r
- scrollbar-face-color: #E0E0DD;\r
- scrollbar-highlight-color: #F0F0EE;\r
- scrollbar-shadow-color: #F0F0EE;\r
- scrollbar-track-color: #F5F5F5;\r
-}\r
+++ /dev/null
-/* This file contains the CSS data for all popups in TinyMCE */\r
-\r
-body {\r
- background-color: #F0F0EE;\r
- font-family: Verdana, Arial, Helvetica, sans-serif;\r
- font-size: 11px;\r
- scrollbar-3dlight-color: #F0F0EE;\r
- scrollbar-arrow-color: #676662;\r
- scrollbar-base-color: #F0F0EE;\r
- scrollbar-darkshadow-color: #DDDDDD;\r
- scrollbar-face-color: #E0E0DD;\r
- scrollbar-highlight-color: #F0F0EE;\r
- scrollbar-shadow-color: #F0F0EE;\r
- scrollbar-track-color: #F5F5F5;\r
- margin: 8px;\r
-}\r
-\r
-td {\r
- font-family: Verdana, Arial, Helvetica, sans-serif;\r
- font-size: 11px;\r
-}\r
-\r
-input {\r
- background: #FFFFFF;\r
- border: 1px solid #cccccc;\r
-}\r
-\r
-td, input, select, textarea {\r
- font-family: Verdana, Arial, Helvetica, sans-serif;\r
- font-size: 10px;\r
-}\r
-\r
-input, select, textarea {\r
- border: 1px solid #808080;\r
-}\r
-\r
-.input_noborder {\r
- border: 0;\r
-}\r
-\r
-#insert, .updateButton {\r
- font-weight: bold;\r
- width: 90px;\r
- height: 21px;\r
- border: 0;\r
- background-image: url('../images/insert_button_bg.gif');\r
- cursor: pointer;\r
-}\r
-\r
-#cancel {\r
- font-weight: bold;\r
- width: 90px;\r
- height: 21px;\r
- border: 0;\r
- background-image: url('../images/cancel_button_bg.gif');\r
- cursor: pointer;\r
-}\r
-\r
-/* Mozilla only style */\r
-html>body #insert, html>body #cancel {\r
- padding-bottom: 2px;\r
-}\r
-\r
-.title {\r
- font-size: 12px;\r
- font-weight: bold;\r
- color: #2B6FB6;\r
-}\r
-\r
-table.charmap {\r
- border-style: solid;\r
- border-width: 1px;\r
- border-color: #AAAAAA;\r
-}\r
-\r
-td.charmap, td.charmapOver {\r
- color: #000000;\r
- border-color: #AAAAAA;\r
- border-style: solid;\r
- border-width: 1px;\r
- text-align: center;\r
- font-size: 12px;\r
-}\r
-\r
-td.charmapOver {\r
- background-color: #CCCCCC;\r
- cursor: default;\r
-}\r
-\r
-a.charmap {\r
- color: #000000;\r
- text-decoration: none\r
-}\r
-\r
-.wordWrapCode {\r
- vertical-align: middle;\r
- border: 1px none #000000;\r
- background-color: transparent;\r
-}\r
-\r
-input.radio {\r
- border: 1px none #000000;\r
- background-color: transparent;\r
- vertical-align: middle;\r
-}\r
-\r
-input.checkbox {\r
- border: 1px none #000000;\r
- background-color: transparent;\r
- vertical-align: middle;\r
-}\r
-\r
-.mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected {\r
- margin-left: 1px;\r
-}\r
-\r
-.mceButtonNormal {\r
- border-top: 1px solid;\r
- border-left: 1px solid;\r
- border-bottom: 1px solid;\r
- border-right: 1px solid;\r
- border-color: #F0F0EE;\r
- cursor: default;\r
-}\r
-\r
-.mceButtonOver {\r
- border: 1px solid #0A246A;\r
- cursor: default;\r
- background-color: #B6BDD2;\r
-}\r
-\r
-.mceButtonDown {\r
- cursor: default;\r
- border: 1px solid #0A246A;\r
- background-color: #8592B5;\r
-}\r
-\r
-.mceButtonDisabled {\r
- filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);\r
- -moz-opacity:0.3;\r
- opacity: 0.3;\r
- border-top: 1px solid;\r
- border-left: 1px solid;\r
- border-bottom: 1px solid;\r
- border-right: 1px solid;\r
- border-color: #F0F0EE;\r
- cursor: default;\r
-}\r
-\r
-.mceActionPanel {\r
- margin-top: 5px;\r
-}\r
-\r
-/* Tabs classes */\r
-\r
-.tabs {\r
- float: left;\r
- width: 100%;\r
- line-height: normal;\r
- background-image: url("../images/xp/tabs_bg.gif");\r
-}\r
-\r
-.tabs ul {\r
- margin: 0;\r
- padding: 0 0 0;\r
- list-style: none;\r
-}\r
-\r
-.tabs li {\r
- float: left;\r
- background: url("../images/xp/tab_bg.gif") no-repeat left top;\r
- margin: 0;\r
- margin-left: 0;\r
- margin-right: 2px;\r
- padding: 0 0 0 10px;\r
- line-height: 18px;\r
-}\r
-\r
-.tabs li.current {\r
- background: url("../images/xp/tab_sel_bg.gif") no-repeat left top;\r
- margin-right: 2px;\r
-}\r
-\r
-.tabs span {\r
- float: left;\r
- display: block;\r
- background: url("../images/xp/tab_end.gif") no-repeat right top;\r
- padding: 0px 10px 0 0;\r
-}\r
-\r
-.tabs .current span {\r
- background: url("../images/xp/tab_sel_end.gif") no-repeat right top;\r
-}\r
-\r
-.tabs a {\r
- text-decoration: none;\r
- font-family: Verdana, Arial;\r
- font-size: 10px;\r
-}\r
-\r
-.tabs a:link, .tabs a:visited, .tabs a:hover {\r
- color: black;\r
-}\r
-\r
-.tabs a:hover {\r
-}\r
-\r
-.tabs .current {\r
-}\r
-\r
-.tabs .current a, .tabs .current a:link, .tabs .current a:visited {\r
-}\r
-\r
-.panel_wrapper div.panel {\r
- display: none;\r
-}\r
-\r
-.panel_wrapper div.current {\r
- display: block;\r
- width: 100%;\r
- height: 300px;\r
- overflow: visible; /* Should be auto but that breaks Safari */\r
-}\r
-\r
-.panel_wrapper {\r
- border: 1px solid #919B9C;\r
- border-top: 0px;\r
- padding: 10px;\r
- padding-top: 5px;\r
- clear: both;\r
- background-color: white;\r
-}\r
-\r
-fieldset {\r
- border: 1px solid #919B9C;\r
- font-family: Verdana, Arial;\r
- font-size: 10px;\r
- padding: 0;\r
- margin: 0;\r
- padding: 4px;\r
-}\r
-\r
-legend {\r
- color: #2B6FB6;\r
- font-weight: bold;\r
-}\r
-\r
-.properties {\r
- width: 100%;\r
-}\r
-\r
-.properties .column1 {\r
-}\r
-\r
-.properties .column2 {\r
- text-align: left;\r
-}\r
-\r
-a:link, a:visited {\r
- color: black;\r
-}\r
-\r
-a:hover {\r
- color: #2B6FB6;\r
-}\r
-\r
-#plugintable thead {\r
- font-weight: bold;\r
- background-color: #DDDDDD;\r
-}\r
-\r
-#plugintable, #about #plugintable td {\r
- border: 1px solid #919B9C;\r
-}\r
-\r
-#plugintable {\r
- width: 99%;\r
- margin-top: 10px;\r
-}\r
-\r
-#pluginscontainer {\r
- height: 290px;\r
- overflow: auto;\r
-}\r
-\r
-/* MSIE Specific styles */\r
-\r
-* html .panel_wrapper {\r
- width: 100%;\r
-}\r
-\r
-.column {\r
- float: left;\r
-}\r
-\r
-h1, h2, h3, h4 {\r
- color: #2B6FB6;\r
- margin: 0;\r
- padding: 0;\r
- padding-top: 5px;\r
-}\r
-\r
-h3 {\r
- font-size: 14px;\r
-}\r
-\r
-#link .panel_wrapper, #link div.current {\r
- height: 125px;\r
-}\r
-\r
-#image .panel_wrapper, #image div.current {\r
- height: 190px;\r
-}\r
-\r
-label.msg { display: none; }\r
-label.invalid { color: #EE0000; display: inline; }\r
-input.invalid { border: 1px solid #EE0000; }\r
-\r
-/* Disables the advanced tab in the table plugin. */\r
-/*\r
-#table #advanced_tab {\r
- display: none;\r
-}\r
-*/\r
-\r
-/* Disables the border input field and label in the table plugin. */\r
-/*\r
-#table #border, #table #borderlabel {\r
- display: none;\r
-}\r
-*/\r
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<HEAD>\r
-<TITLE>About TinyMCE</TITLE>\r
-<link href="style.css" rel="stylesheet" type="text/css">\r
-</HEAD>\r
-\r
-<BODY>\r
-\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pageheader">\r
- <tr> \r
- <td><span class="title">About TinyMCE</span></td>\r
- <td align="right"><a href="index.htm"><acronym title="Table of contents">TOC</acronym></a></td>\r
- </tr>\r
-</table>\r
-<hr noshade>\r
-<br>\r
-TinyMCE is a small WYSIWYG editor control for web browsers such as MSIE or Mozilla \r
-that enables you to edit HTML contents in a more user friendly way. It has common \r
-features that are found in most word processors and should not be difficult to \r
-use.<br>\r
-<br>\r
-<hr noshade>\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pagefooter">\r
- <tr> \r
- <td>Go to: <a href="index.htm">Table of contents</a></td>\r
- <td align="right"><a href="#">Top</a></td>\r
- </tr>\r
-</table>\r
-<br>\r
-</BODY>\r
-</HTML>\r
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<HEAD>\r
-<TITLE>Common buttons</TITLE>\r
-<link href="style.css" rel="stylesheet" type="text/css">\r
-</HEAD>\r
-\r
-<BODY>\r
-\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pageheader">\r
- <tr> \r
- <td><span class="title">Common buttons</span></td>\r
- <td align="right"><a href="index.htm"><acronym title="Table of contents">TOC</acronym></a></td>\r
- </tr>\r
-</table>\r
-<hr noshade>\r
-<br>\r
-Below is a short description about each button.\r
-<br>\r
-<br>\r
-<table border="1" cellpadding="3" cellspacing="0">\r
- <tr>\r
- <td><img src="../../images/bold.gif" width="20" height="20" alt="Bold text icon" /></td>\r
- <td>Bold text style (Ctrl+B).</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/italic.gif" width="20" height="20" alt="Italic text icon" /></td>\r
- <td>Italic text style (Ctrl+I).</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/underline.gif" width="20" height="20" alt="Underline text icon." /></td>\r
- <td>Underline text style (Ctrl+U).</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/strikethrough.gif" width="20" height="20" alt="Strikethrough text icon." /></td>\r
- <td>Strikethrough text style.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/justifyleft.gif" width="20" height="20" alt="Align left icon." /></td>\r
- <td>Align left.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/justifycenter.gif" width="20" height="20" alt="Align center icon." /></td>\r
- <td>Align center.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/justifyright.gif" width="20" height="20" alt="Align right icon." /></td>\r
- <td>Align right.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/justifyfull.gif" width="20" height="20" alt="Align full icon." /></td>\r
- <td>Align full.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/bullist.gif" width="20" height="20" alt="Unordered list/bullet list icon." /></td>\r
- <td>Unordered list/bullet list.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/numlist.gif" width="20" height="20" alt="Ordered list/numbered list icon." /></td>\r
- <td>Ordered list/numbered list</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/outdent.gif" width="20" height="20" alt="Outdent/decrease indentation icon." /></td>\r
- <td>Outdent/decrease indentation.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/indent.gif" width="20" height="20" alt="Indent/increase indentation icon." /></td>\r
- <td>Indent/increase indentation.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/undo.gif" width="20" height="20" alt="Undo the last operation." /></td>\r
- <td>Undo the last operation (Ctrl+Z).</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/redo.gif" width="20" height="20" alt="Redo the last operation icon." /></td>\r
- <td>Redo the last operation (Ctrl+Y).</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/link.gif" width="20" height="20" alt="Insert a new link icon." /></td>\r
- <td>Insert a new link, read more about this function in the <a href="insert_link_button.htm">Insert \r
- link section</a>.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/unlink.gif" width="20" height="20" alt="Unlinks the current selection icon." /></td>\r
- <td>Unlinks the current selection/removes all selected links.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/anchor.gif" width="20" height="20" alt="Insert a new anchor icon." /></td>\r
- <td>Insert a new anchor, read more about this function in the <a href="insert_anchor_button.htm">Insert anchor section.</a></td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/image.gif" width="20" height="20" alt="Insert a new image icon." /></td>\r
- <td>Insert a new image, read more about this function in the <a href="insert_image_button.htm">Insert \r
- image section</a>.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/cleanup.gif" width="20" height="20" alt="Cleanup code icon." /></td>\r
- <td>Cleanup code/Removes unwanted formating. This function is useful when \r
- you copy contents from for example a office product.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/help.gif" width="20" height="20" alt="Show help icon." /></td>\r
- <td>Shows this help window.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/code.gif" width="20" height="20" alt="Source code editor icon." /></td>\r
- <td>Opens HTML source code editor. </td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../../../plugins/table/images/table.gif" width="20" height="20" alt="Insert table icon." /></td>\r
- <td>Inserts a new table at the current location. </td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../../../plugins/table/images/table_insert_row_before.gif" width="20" height="20" alt="Adds a row above icon." /></td>\r
- <td>Adds a row above the current one. </td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../../../plugins/table/images/table_insert_row_after.gif" width="20" height="20" alt="Adds a row under icon." /></td>\r
- <td>Adds a row under the current one. </td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../../../plugins/table/images/table_delete_row.gif" width="20" height="20" alt="Remove row icon." /></td>\r
- <td>Removes the row. </td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../../../plugins/table/images/table_insert_col_before.gif" width="20" height="20" alt="Add column before icon." /></td>\r
- <td>Adds a column before the current one.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../../../plugins/table/images/table_insert_col_after.gif" width="20" height="20" alt="Add column after icon." /></td>\r
- <td>Adds a column after the current one.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../../../plugins/table/images/table_delete_col.gif" width="20" height="20" alt="Remove column icon." /></td>\r
- <td>Removes the current column.</td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/hr.gif" width="20" height="20" alt="Insert horizontal ruler icon." /></td>\r
- <td>Inserts a new horizontal ruler </td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/removeformat.gif" width="20" height="20" alt="Remove formatting icon." /></td>\r
- <td>Removes formatting from the selection. </td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/sub.gif" width="20" height="20" alt="Subscript icon." /></td>\r
- <td>Makes the selection to be subscript. </td>\r
- </tr>\r
- <tr>\r
- <td><img src="../../images/sup.gif" width="20" height="20" alt="Superscript icon." /></td>\r
- <td>Makes the selection to be superscripted. </td>\r
- </tr>\r
-</table>\r
-<br>\r
-<hr noshade="noshade" />\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pagefooter">\r
- <tr> \r
- <td>Go to: <a href="index.htm">Table of contents</a></td>\r
- <td align="right"><a href="#">Top</a></td>\r
- </tr>\r
-</table>\r
-</BODY>\r
-</HTML>\r
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<HEAD>\r
-<TITLE>Insert table button</TITLE>\r
-<link href="style.css" rel="stylesheet" type="text/css">\r
-</HEAD>\r
-\r
-<BODY>\r
-\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pageheader">\r
- <tr> \r
- <td><span class="title">Create accessible content</span></td>\r
- <td align="right"><a href="index.htm"><acronym title="Table of contents">TOC</acronym></a></td>\r
- </tr>\r
-</table>\r
-<hr noshade>\r
-<p>TinyMCE can create HTML content that will be accessible to all users, including those with disabilities using assistive technologies, as well as those using text-based browsers, or those browsing the Web with images turned off. </p>\r
-\r
-<p><strong>Things you can do to make your content accessible:</strong></p>\r
-<ol>\r
-<li><strong>Include an Image Description:</strong> Blind users, or others who are unable to view images, will rely on the Image Description (or Alt text) to take the place of the image. If an image contains no meaning, such as a decoration or a spacer image, leave the Image Description empty. TinyMCE will then insert an empty Alt text attribute that will force assistive technologies to ignore the image. <br /><br /></li>\r
-\r
-<li> <strong>Add Scope to data table header cells:</strong> In the table cell editor dialog window, choose a Scope when creating Header cells so the column or row label in that cell becomes explicitely associated with its data cells. Table cell headers will then be announced with each data cell, making it easier for blind users using a screen reader to understand what the content of each cell represents. <br /><br /></li>\r
-\r
-<li><strong> Structure content with properly nested headings:</strong> In the format selection menu choose Heading 1 to Heading 6 to represent headings in your content, rather than using other font formating options. Blind users using a screen reader can then extract the headings from the page to generate a summary of the content it contains, and use those headings to navigate quickly to subsections within the page.<br /><br /></li>\r
-\r
-<li><strong> Include alternate content:</strong> Create an alternate page for non-HTML content such as Flash, Java applets, or embedded movies. This might be a static image, with a description of the image, and a description of the content that would have appeared in its place. An alternate HTML page could also be created, and a link to it included next to the non-HTML object. This will ensure that the content will be accessible to users of assistive technologies that can not view or play the content, and ensure the content will be available to those who do not have the appropriate plugin or helper application installed.<br /><br /></li>\r
-\r
-<li><strong> Check accessbility: </strong> When the AChecker plugin is installed with TinyMCE, click on the Check Accessibility button to generate a report of potential accessibility problems.<br /><br /></li>\r
-\r
-</ol>\r
-\r
-<p>See the <a href="http://checker.atrc.utoronto.ca" target="_new">AChecker Web Site</a> for further details about creating content that will be accessible to all users.<br />\r
-</p>\r
-\r
-<hr noshade>\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pagefooter">\r
- <tr> \r
- <td>Go to: <a href="index.htm">Table of contents</a></td>\r
- <td align="right"><a href="#">Top</a></td>\r
- </tr>\r
-</table>\r
-\r
-<br>\r
-</BODY>\r
-</HTML>\r
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<HEAD>\r
-<TITLE>Help Index</TITLE>\r
-<link href="style.css" rel="stylesheet" type="text/css">\r
-</HEAD>\r
-<BODY onload="window.focus();">\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pageheader">\r
- <tr> \r
- <td><span class="title">Table of contents</span></td>\r
- <td align="right"> </td>\r
- </tr>\r
-</table>\r
-<hr noshade>\r
-<br>\r
-Click the links below to go to the different help sections. \r
-<ul class="toc_ul">\r
- <li class="toc_li"><a href="about.htm">About TinyMCE</a></li>\r
- <li class="toc_li"><a href="common_buttons.htm">Common buttons</a></li>\r
- <li class="toc_li"><a href="insert_image_button.htm">Insert image button</a></li>\r
- <li class="toc_li"><a href="insert_link_button.htm">Insert link button</a></li>\r
- <li class="toc_li"><a href="insert_anchor_button.htm">Insert anchor button</a></li>\r
- <li class="toc_li"><a href="insert_table_button.htm">Insert table button</a></li>\r
- <li class="toc_li"><a href="create_accessible_content.htm">Create accessible content</a></li>\r
-</ul>\r
-<hr noshade>\r
-</BODY>\r
-</HTML>\r
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<HEAD>\r
-<TITLE>Insert anchor button</TITLE>\r
-<link href="style.css" rel="stylesheet" type="text/css">\r
-</HEAD>\r
-\r
-<BODY>\r
-\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pageheader">\r
- <tr> \r
- <td><span class="title">Insert anchor button</span></td>\r
- <td align="right"><a href="index.htm"><acronym title="Table of contents">TOC</acronym></a></td>\r
- </tr>\r
-</table>\r
-<hr noshade>\r
-<br>\r
-This button opens a new window with the insert/edit anchor function.<br>\r
-<br>\r
-<img src="images/insert_anchor_window.gif" width="330" height="139" alt="Anchor dialog/window" /><br>\r
-<br>\r
-There are one field in this window, this is where you enter the name of you anchor point. Remember the anchor name needs to be unique. <br>\r
-<br>\r
-<hr noshade>\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pagefooter">\r
- <tr> \r
- <td>Go to: <a href="index.htm">Table of contents</a></td>\r
- <td align="right"><a href="#">Top</a></td>\r
- </tr>\r
-</table>\r
-<br>\r
-</BODY>\r
-</HTML>\r
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<HEAD>\r
-<TITLE>Insert image button</TITLE>\r
-<link href="style.css" rel="stylesheet" type="text/css">\r
-</HEAD>\r
-\r
-<BODY>\r
-\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pageheader">\r
- <tr> \r
- <td><span class="title">Insert image button</span></td>\r
- <td align="right"><a href="index.htm"><acronym title="Table of contents">TOC</acronym></a></td>\r
- </tr>\r
-</table>\r
-<hr noshade>\r
-<br>\r
-The insert image button opens the window shown below.<br>\r
-<br>\r
-<img src="images/insert_image_window.gif" alt="Insert image dialog/window" /><br>\r
-<br>\r
-You simply enter a URL to the image you want to link to and enter a image description, \r
-this is then displayed as an alternative text descripton of the image on the page.<br>\r
-<br>\r
-<strong>Field descriptions:</strong><br>\r
-<table border="1" cellspacing="0">\r
- <tr>\r
- <td width="150"><strong>Image URL </strong></td>\r
- <td>URL/path to the image.</td>\r
- </tr>\r
- <tr>\r
- <td width="150"><strong>Image description </strong></td>\r
- <td>Alternative description of image contents.</td>\r
- </tr>\r
- <tr>\r
- <td><strong>Dimentions</strong></td>\r
- <td>Image width/height. </td>\r
- </tr>\r
- <tr>\r
- <td><strong>Alignment</strong></td>\r
- <td>Image alignment, useful when wrapping text around images.</td>\r
- </tr>\r
- <tr>\r
- <td><strong>Border</strong></td>\r
- <td>Border thickness. </td>\r
- </tr>\r
- <tr>\r
- <td><strong>VSpace</strong></td>\r
- <td>Vertical space, useful when wrapping text around images.</td>\r
- </tr>\r
- <tr>\r
- <td><strong>HSpace</strong></td>\r
- <td>Horizontal space, useful when wrapping text around images.</td>\r
- </tr>\r
-</table>\r
-<br>\r
-<hr noshade>\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pagefooter">\r
- <tr> \r
- <td>Go to: <a href="index.htm">Table of contents</a></td>\r
- <td align="right"><a href="#">Top</a></td>\r
- </tr>\r
-</table>\r
-<br>\r
-</BODY>\r
-</HTML>\r
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<HEAD>\r
-<TITLE>Insert link button</TITLE>\r
-<link href="style.css" rel="stylesheet" type="text/css">\r
-</HEAD>\r
-\r
-<BODY>\r
-\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pageheader">\r
- <tr> \r
- <td><span class="title">Insert link button</span></td>\r
- <td align="right"><a href="index.htm"><acronym title="Table of contents">TOC</acronym></a></td>\r
- </tr>\r
-</table>\r
-<hr noshade>\r
-<br>\r
-This button opens a new window with the insert/edit link function.<br>\r
-<br>\r
-<img src="images/insert_link_window.gif" width="330" height="159" alt="Insert link dialog/window" /><br>\r
-<br>\r
-There are two fields in this window the first one "Link URL" is the \r
-URL of the link. The target enables you to select how the link is to be opened.<br>\r
-<br>\r
-<hr noshade>\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pagefooter">\r
- <tr> \r
- <td>Go to: <a href="index.htm">Table of contents</a></td>\r
- <td align="right"><a href="#">Top</a></td>\r
- </tr>\r
-</table>\r
-<br>\r
-</BODY>\r
-</HTML>\r
+++ /dev/null
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-<HEAD>\r
-<TITLE>Insert table button</TITLE>\r
-<link href="style.css" rel="stylesheet" type="text/css">\r
-</HEAD>\r
-\r
-<BODY>\r
-\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pageheader">\r
- <tr> \r
- <td><span class="title">Insert table button</span></td>\r
- <td align="right"><a href="index.htm"><acronym title="Table of contents">TOC</acronym></a></td>\r
- </tr>\r
-</table>\r
-<hr noshade>\r
-<br>\r
-The insert table button opens the window shown below. This action enables you to create tables. <br>\r
-<br>\r
-<img src="images/insert_table_window.gif" width="340" height="229" alt="Image of table window" /><br>\r
-<br>\r
-<strong>Field descriptions:</strong><br>\r
-<table border="1" cellspacing="0">\r
- <tr>\r
- <td width="150"><strong>Columns</strong></td>\r
- <td>Number of columns in the table. </td>\r
- </tr>\r
- <tr>\r
- <td width="150"><strong>Rows</strong></td>\r
- <td>Number of rows in the new table.</td>\r
- </tr>\r
- <tr>\r
- <td><strong>Cellpadding</strong></td>\r
- <td>Cellpadding of the table . </td>\r
- </tr>\r
- <tr>\r
- <td><strong>Cellspacing</strong></td>\r
- <td>Cellspacing of the table .</td>\r
- </tr>\r
- <tr>\r
- <td><strong>Alignment</strong></td>\r
- <td>Table alignment . </td>\r
- </tr>\r
- <tr>\r
- <td><strong>Border</strong></td>\r
- <td>Border thinkness of table.</td>\r
- </tr>\r
- <tr>\r
- <td><strong>Width</strong></td>\r
- <td>Width in pixels of table .</td>\r
- </tr>\r
- <tr>\r
- <td><strong>Height</strong></td>\r
- <td>Height in pixels of table.</td>\r
- </tr>\r
- <tr>\r
- <td><strong>Class</strong></td>\r
- <td>Style or CSS class of table.</td>\r
- </tr>\r
-</table>\r
-<br>\r
-<br>\r
-<hr noshade>\r
-<table width="100%" border="0" cellpadding="1" cellspacing="3" class="pagefooter">\r
- <tr> \r
- <td>Go to: <a href="index.htm">Table of contents</a></td>\r
- <td align="right"><a href="#">Top</a></td>\r
- </tr>\r
-</table>\r
-<br>\r
-</BODY>\r
-</HTML>\r
+++ /dev/null
-body { background-color: #FFFFFF; }\r
-body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; }\r
-.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; }\r
-.subtitle { font-size: 12px; font-weight: bold; }\r
-\r
-.toc_ul, .toc_li { margin-left: 8px; line-height: 16px; }\r
-.step_ol, .step_li { margin-left: 11px; line-height: 16px; }\r
-img { border: #000000 solid 1px; }\r
-\r
-a:visited { color: #666666; text-decoration: underline; }\r
-a:active { color: #666666; text-decoration: underline; }\r
-a:hover { color: #666666; text-decoration: underline; }\r
-a { color: #666666; text-decoration: underline; }\r
-\r
-.pageheader { border: #E0E0E0 solid 1px; }\r
-.pagefooter { border: #E0E0E0 solid 1px; }\r
-.sample { background-color: #FFFFFF; border: #000000 solid 1px; }\r
-.samplecontent { font-size: 10px; }\r
-\r
-.code { background-color: #FFFFFF; border: #000000 solid 1px; }\r
-.codecontent { font-size: 10px; }\r
-.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold }\r
-.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold }\r
-.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold }\r
-.codecontent a { color: #666666; text-decoration: none; font-weight: bold }\r
-\r
-hr { height: 1px; }\r
-\r
-tinyMCE.importThemeLanguagePack('advanced');var TinyMCE_AdvancedTheme={_defColors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",_autoImportCSSClasses:true,_resizer:{},_buttons:[['bold','{$lang_bold_img}','lang_bold_desc','Bold'],['italic','{$lang_italic_img}','lang_italic_desc','Italic'],['underline','{$lang_underline_img}','lang_underline_desc','Underline'],['strikethrough','strikethrough.gif','lang_striketrough_desc','Strikethrough'],['justifyleft','justifyleft.gif','lang_justifyleft_desc','JustifyLeft'],['justifycenter','justifycenter.gif','lang_justifycenter_desc','JustifyCenter'],['justifyright','justifyright.gif','lang_justifyright_desc','JustifyRight'],['justifyfull','justifyfull.gif','lang_justifyfull_desc','JustifyFull'],['bullist','bullist.gif','lang_bullist_desc','InsertUnorderedList'],['numlist','numlist.gif','lang_numlist_desc','InsertOrderedList'],['outdent','outdent.gif','lang_outdent_desc','Outdent'],['indent','indent.gif','lang_indent_desc','Indent'],['cut','cut.gif','lang_cut_desc','Cut'],['copy','copy.gif','lang_copy_desc','Copy'],['paste','paste.gif','lang_paste_desc','Paste'],['undo','undo.gif','lang_undo_desc','Undo'],['redo','redo.gif','lang_redo_desc','Redo'],['link','link.gif','lang_link_desc','mceLink',true],['unlink','unlink.gif','lang_unlink_desc','unlink'],['image','image.gif','lang_image_desc','mceImage',true],['cleanup','cleanup.gif','lang_cleanup_desc','mceCleanup'],['help','help.gif','lang_help_desc','mceHelp'],['code','code.gif','lang_theme_code_desc','mceCodeEditor'],['hr','hr.gif','lang_theme_hr_desc','inserthorizontalrule'],['removeformat','removeformat.gif','lang_theme_removeformat_desc','removeformat'],['sub','sub.gif','lang_theme_sub_desc','subscript'],['sup','sup.gif','lang_theme_sup_desc','superscript'],['forecolor','forecolor.gif','lang_theme_forecolor_desc','forecolor',true],['forecolorpicker','forecolor.gif','lang_theme_forecolor_desc','forecolorpicker',true],['backcolor','backcolor.gif','lang_theme_backcolor_desc','HiliteColor',true],['backcolorpicker','backcolor.gif','lang_theme_backcolor_desc','backcolorpicker',true],['charmap','charmap.gif','lang_theme_charmap_desc','mceCharMap'],['visualaid','visualaid.gif','lang_theme_visualaid_desc','mceToggleVisualAid'],['anchor','anchor.gif','lang_theme_anchor_desc','mceInsertAnchor'],['newdocument','newdocument.gif','lang_newdocument_desc','mceNewDocument']],_buttonMap:'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',getControlHTML:function(button_name){var i,x,but;for(i=0;i<TinyMCE_AdvancedTheme._buttons.length;i++){but=TinyMCE_AdvancedTheme._buttons[i];if(but[0]==button_name&&(button_name=="forecolor"||button_name=="backcolor"))return tinyMCE.getMenuButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3]+"Menu",but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null));if(but[0]==button_name)return tinyMCE.getButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null))}switch(button_name){case"formatselect":var html='<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';var formats=tinyMCE.getParam("theme_advanced_blockformats","p,address,pre,h1,h2,h3,h4,h5,h6",true).split(',');var lookup=[['p','{$lang_theme_paragraph}'],['address','{$lang_theme_address}'],['pre','{$lang_theme_pre}'],['h1','{$lang_theme_h1}'],['h2','{$lang_theme_h2}'],['h3','{$lang_theme_h3}'],['h4','{$lang_theme_h4}'],['h5','{$lang_theme_h5}'],['h6','{$lang_theme_h6}'],['div','{$lang_theme_div}'],['blockquote','{$lang_theme_blockquote}'],['code','{$lang_theme_code}'],['dt','{$lang_theme_dt}'],['dd','{$lang_theme_dd}'],['samp','{$lang_theme_samp}']];html+='<option value="">{$lang_theme_block}</option>';for(var i=0;i<formats.length;i++){for(var x=0;x<lookup.length;x++){if(formats[i]==lookup[x][0])html+='<option value="<'+lookup[x][0]+'>">'+lookup[x][1]+'</option>'}}html+='</select>';return html;case"styleselect":return'<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';case"fontselect":var fontHTML='<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';var iFonts='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';var nFonts='Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';var fonts=tinyMCE.getParam("theme_advanced_fonts",nFonts).split(';');for(i=0;i<fonts.length;i++){if(fonts[i]!=''){var parts=fonts[i].split('=');fontHTML+='<option value="'+parts[1]+'">'+parts[0]+'</option>'}}fontHTML+='</select>';return fontHTML;case"fontsizeselect":return'<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+'<option value="0">{$lang_theme_font_size}</option>'+'<option value="1">1 (8 pt)</option>'+'<option value="2">2 (10 pt)</option>'+'<option value="3">3 (12 pt)</option>'+'<option value="4">4 (14 pt)</option>'+'<option value="5">5 (18 pt)</option>'+'<option value="6">6 (24 pt)</option>'+'<option value="7">7 (36 pt)</option>'+'</select>';case"|":case"separator":return'<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';case"spacer":return'<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';case"rowseparator":return'<br />'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case'mceHelp':tinyMCE.openWindow({file:'about.htm',width:480,height:380},{tinymce_version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion,tinymce_releasedate:tinyMCE.releaseDate,inline:"yes"});return true;case"mceLink":var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=inst.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return true}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_href');if(mceRealHref!=""){href=mceRealHref;if(tinyMCE.getParam('convert_urls'))href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);")}action="update"}var template=new Array();template['file']='link.htm';template['width']=310;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);if(inst.settings['insertlink_callback']){var returnVal=eval(inst.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])TinyMCE_AdvancedTheme._insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class'])}else{tinyMCE.openWindow(template,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class,inline:"yes"})}return true;case"mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;var inst=tinyMCE.getInstanceById(editor_id);if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return true;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h)}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:""}src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");mceRealSrc=tinyMCE.getAttrib(img,'mce_src');if(mceRealSrc!=""){src=mceRealSrc;if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);")}action="update"}var template=new Array();template['file']='image.htm?src={$src}';template['width']=355;template['height']=265+(tinyMCE.isMSIE?25:0);template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);if(inst.settings['insertimage_callback']){var returnVal=eval(inst.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])TinyMCE_AdvancedTheme._insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout'])}else tinyMCE.openWindow(template,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action,inline:"yes"});return true;case"forecolor":var fcp=new TinyMCE_Layer(editor_id+'_fcPreview',false),p,img,elm;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!fcp.exists()){fcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=fcp.getElement();elm._editor_id=editor_id;elm._command="forecolor";elm._switchId=editor_id+"_forecolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_forecolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));fcp.moveTo(p.absLeft,p.absTop);fcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).foreColor;fcp.show();return false;case"forecolorpicker":this._pickColor(editor_id,'forecolor');return true;case"forecolorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_fcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_text_colors','forecolor'));tinyMCE.switchClass(editor_id+'_forecolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_forecolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"HiliteColor":var bcp=new TinyMCE_Layer(editor_id+'_bcPreview',false),p,img;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!bcp.exists()){bcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=bcp.getElement();elm._editor_id=editor_id;elm._command="HiliteColor";elm._switchId=editor_id+"_backcolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_backcolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));bcp.moveTo(p.absLeft,p.absTop);bcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).backColor;bcp.show();return false;case"HiliteColorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_bcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_background_colors','HiliteColor'));tinyMCE.switchClass(editor_id+'_backcolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_backcolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"backcolorpicker":this._pickColor(editor_id,'HiliteColor');return true;case"mceColorPicker":if(user_interface){var template=[];if(!value['callback']&&!value['color'])value['color']=value['document'].getElementById(value['element_id']).value;template['file']='color_picker.htm';template['width']=380;template['height']=250;template['close_previous']="no";template['width']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height',0);if(typeof(value['store_selection'])=="undefined")value['store_selection']=true;tinyMCE.lastColorPickerValue=value;tinyMCE.openWindow(template,{editor_id:editor_id,mce_store_selection:value['store_selection'],inline:"yes",command:"mceColorPicker",input_color:value['color']})}else{var savedVal=tinyMCE.lastColorPickerValue,elm;if(savedVal['callback']){savedVal['callback'](value);return true}elm=savedVal['document'].getElementById(savedVal['element_id']);elm.value=value;if(elm.onchange!=null&&elm.onchange!='')eval('elm.onchange();')}return true;case"mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_width",720));template['height']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_height",580));tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no",inline:"yes"});return true;case"mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550+(tinyMCE.isOpera?40:0);template['height']=250;template['width']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=90+(tinyMCE.isNS7?30:0);template['width']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceNewDocument":if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument'))))tinyMCE.execInstanceCommand(editor_id,'mceSetContent',false,' ');return true}return false},getEditorTemplate:function(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array(),skip;for(var i=0;i<in_array.length;i++){skip=false;for(var j=0;j<remove_array.length;j++){if(in_array[i]==remove_array[j]){skip=true}}if(!skip){outArray[outArray.length]=in_array[i]}}return outArray}function addToArray(in_array,add_array){for(var i=0;i<add_array.length;i++){in_array[in_array.length]=add_array[i]}return in_array}var template=new Array();var deltaHeight=0;var resizing=tinyMCE.getParam("theme_advanced_resizing",false);var path=tinyMCE.getParam("theme_advanced_path",true);var statusbarHTML='<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: '+(path?"block":"none")+'"> </div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: '+(resizing?"block":"none")+'" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';var layoutManager=tinyMCE.getParam("theme_advanced_layout_manager","SimpleLayout");var styleSelectHTML='<option value="">{$lang_theme_style_select}</option>';if(settings['theme_advanced_styles']){var stylesAr=settings['theme_advanced_styles'].split(';');for(var i=0;i<stylesAr.length;i++){var key,value;key=stylesAr[i].split('=')[0];value=stylesAr[i].split('=')[1];styleSelectHTML+='<option value="'+value+'">'+key+'</option>'}TinyMCE_AdvancedTheme._autoImportCSSClasses=false}switch(layoutManager){case"SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var statusbarLocation=tinyMCE.getParam("theme_advanced_statusbar_location",pathLocation);var defVals={theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,separator,sub,sup,separator,charmap"};toolbarHTML+='<a href="#" accesskey="q" title="'+tinyMCE.getLang("lang_toolbar_focus")+'"';if(!tinyMCE.getParam("accessibility_focus"))toolbarHTML+=' onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"';toolbarHTML+='></a>';for(var i=1;i<100;i++){var def=defVals["theme_advanced_buttons"+i];var buttons=tinyMCE.getParam("theme_advanced_buttons"+i,def==null?'':def,true,',');if(buttons.length==0)break;buttons=removeFromArray(buttons,tinyMCE.getParam("theme_advanced_disable","",true,','));buttons=addToArray(buttons,tinyMCE.getParam("theme_advanced_buttons"+i+"_add","",true,','));buttons=addToArray(tinyMCE.getParam("theme_advanced_buttons"+i+"_add_before","",true,','),buttons);for(var b=0;b<buttons.length;b++)toolbarHTML+=tinyMCE.getControlHTML(buttons[b]);if(buttons.length>0){toolbarHTML+="<br />";deltaHeight-=23}}toolbarHTML+='<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"></a>';template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';if(toolbarLocation=="top")template['html']+='<tr><td dir="ltr" class="mceToolbarTop" align="'+toolbarAlign+'" height="1" nowrap="nowrap"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(statusbarLocation=="top"){template['html']+='<tr><td class="mceStatusbarTop" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';if(toolbarLocation=="bottom")template['html']+='<tr><td dir="ltr" class="mceToolbarBottom" align="'+toolbarAlign+'" height="1"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.applyTemplate(toolbarHTML,{editor_id:editorId});elm.className="mceToolbarExternal";elm.id=editorId+"_toolbar";elm.innerHTML='<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';bod.appendChild(elm);deltaHeight=0;tinyMCE.getInstanceById(editorId).toolbarElement=elm;}else{tinyMCE.getInstanceById(editorId).toolbarElement=null}if(statusbarLocation=="bottom"){template['html']+='<tr><td class="mceStatusbarBottom" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='</tbody></table>';break;case"RowLayout":template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i<containers.length;i++){if(containers[i]=="mceEditor")template['html']+='<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';else if(containers[i]=="mceElementpath"||containers[i]=="mceStatusbar"){var pathClass="mceStatusbar";if(i==containers.length-1){pathClass="mceStatusbarBottom"}else if(i==0){pathClass="mceStatusbar"}else{deltaHeight-=2}template['html']+='<tr><td class="'+pathClass+'" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=22}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);curContainer=removeFromArray(curContainer,tinyMCE.getParam("theme_advanced_disable","",true,','));for(var j=0;j<curContainer.length;j++)curContainerHTML+=tinyMCE.getControlHTML(curContainer[j]);if(curContainer.length>0){curContainerHTML+="<br />";deltaHeight-=23}template['html']+='<tr><td class="'+curCSS+'" align="'+curAlign+'" height="1">'+curContainerHTML+'</td></tr>'}}template['html']+='</tbody></table>';break;case"CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);")}break}if(resizing)template['html']+='<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);if(!template['delta_width'])template['delta_width']=0;if(!template['delta_height'])template['delta_height']=deltaHeight;return template},initInstance:function(inst){if(tinyMCE.getParam("theme_advanced_resizing",false)){if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var w=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_width");var h=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_height");TinyMCE_AdvancedTheme._resizeTo(inst,w,h,tinyMCE.getParam("theme_advanced_resize_horizontal",true))}}inst.addShortcut('ctrl','k','lang_link_desc','mceLink')},removeInstance:function(inst){new TinyMCE_Layer(inst.editorId+'_fcMenu').remove();new TinyMCE_Layer(inst.editorId+'_bcMenu').remove()},hideInstance:function(inst){TinyMCE_AdvancedTheme._hideMenus(inst.editorId)},_handleMenuEvent:function(e){var te=tinyMCE.isMSIE?window.event.srcElement:e.target;tinyMCE._menuButtonEvent(e.type=="mouseover"?"over":"out",document.getElementById(te._switchId));if(e.type=="click")tinyMCE.execInstanceCommand(te._editor_id,te._command)},_hideMenus:function(id){var fcml=new TinyMCE_Layer(id+'_fcMenu'),bcml=new TinyMCE_Layer(id+'_bcMenu');if(fcml.exists()&&fcml.isVisible()){tinyMCE.switchClass(id+'_forecolor','mceMenuButton');fcml.hide()}if(bcml.exists()&&bcml.isVisible()){tinyMCE.switchClass(id+'_backcolor','mceMenuButton');bcml.hide()}},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection,setup_content){var alignNode,breakOut,classNode;function selectByValue(select_elm,value,first_index){first_index=typeof(first_index)=="undefined"?false:true;if(select_elm){for(var i=0;i<select_elm.options.length;i++){var ov=""+select_elm.options[i].value;if(first_index&&ov.toLowerCase().indexOf(value.toLowerCase())==0){select_elm.selectedIndex=i;return true}if(ov==value){select_elm.selectedIndex=i;return true}}}return false};if(node==null)return;var pathElm=document.getElementById(editor_id+"_path");var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();TinyMCE_AdvancedTheme._hideMenus(editor_id);if(pathElm){var parentNode=node;var path=new Array();while(parentNode!=null){if(parentNode.nodeName.toUpperCase()=="BODY"){break}if(parentNode.nodeType==1&&tinyMCE.getAttrib(parentNode,"class").indexOf('mceItemHidden')==-1){path[path.length]=parentNode}parentNode=parentNode.parentNode}var html="";for(var i=path.length-1;i>=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName.indexOf("html:")==0)nodeName=nodeName.substring(5);if(nodeName=="b"){nodeName="strong"}if(nodeName=="i"){nodeName="em"}if(nodeName=="span"){var cn=tinyMCE.getAttrib(path[i],"class");if(cn!=""&&cn.indexOf('mceItem')==-1)nodeData+="class: "+cn+" ";var st=tinyMCE.getAttrib(path[i],"style");if(st!=""){st=tinyMCE.serializeStyle(tinyMCE.parseStyle(st));nodeData+="style: "+tinyMCE.xmlEncode(st)+" "}}if(nodeName=="font"){if(tinyMCE.getParam("convert_fonts_to_spans"))nodeName="span";var face=tinyMCE.getAttrib(path[i],"face");if(face!="")nodeData+="font: "+tinyMCE.xmlEncode(face)+" ";var size=tinyMCE.getAttrib(path[i],"size");if(size!="")nodeData+="size: "+tinyMCE.xmlEncode(size)+" ";var color=tinyMCE.getAttrib(path[i],"color");if(color!="")nodeData+="color: "+tinyMCE.xmlEncode(color)+" "}if(tinyMCE.getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" "}var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1)nodeData+="class: "+className+" ";if(tinyMCE.getAttrib(path[i],'src')!=""){var src=tinyMCE.getAttrib(path[i],"mce_src");if(src=="")src=tinyMCE.getAttrib(path[i],"src");nodeData+="src: "+tinyMCE.xmlEncode(src)+" "}if(path[i].nodeName=='A'&&tinyMCE.getAttrib(path[i],'href')!=""){var href=tinyMCE.getAttrib(path[i],"mce_href");if(href=="")href=tinyMCE.getAttrib(path[i],"href");nodeData+="href: "+tinyMCE.xmlEncode(href)+" "}className=tinyMCE.getAttrib(path[i],"class");if((nodeName=="img"||nodeName=="span")&&className.indexOf('mceItem')!=-1){nodeName=className.replace(/mceItem([a-z]+)/gi,'$1').toLowerCase();nodeData=path[i].getAttribute('title')}if(nodeName=="a"&&(anchor=tinyMCE.getAttrib(path[i],"name"))!=""){nodeName="a";nodeName+="#"+tinyMCE.xmlEncode(anchor);nodeData=""}if(tinyMCE.getAttrib(path[i],'name').indexOf("mce_")!=0){var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1){nodeName+="."+className}}var cmd='tinyMCE.execInstanceCommand(\''+editor_id+'\',\'mceSelectNodeDepth\',false,\''+i+'\');';html+='<a title="'+nodeData+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" target="_self" class="mcePathItem">'+nodeName+'</a>';if(i>0){html+=" » "}}pathElm.innerHTML='<a href="#" accesskey="x"></a>'+tinyMCE.getLang('lang_theme_path')+": "+html+' '}tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClass(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClass(editor_id+'_link','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_unlink','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_outdent','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_image','mceButtonNormal');tinyMCE.switchClass(editor_id+'_hr','mceButtonNormal');if(node.nodeName=="A"&&tinyMCE.getAttrib(node,"class").indexOf('mceItemAnchor')!=-1)tinyMCE.switchClass(editor_id+'_anchor','mceButtonSelected');var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClass(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal');tinyMCE.switchClass(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal')}tinyMCE.switchClass(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal');if(undo_levels!=-1){tinyMCE.switchClass(editor_id+'_undo','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_redo','mceButtonDisabled')}if(tinyMCE.getParentElement(node,"li,blockquote"))tinyMCE.switchClass(editor_id+'_outdent','mceButtonNormal');if(undo_index!=-1&&(undo_index<undo_levels-1&&undo_levels>0))tinyMCE.switchClass(editor_id+'_redo','mceButtonNormal');if(undo_index!=-1&&(undo_index>0&&undo_levels>0))tinyMCE.switchClass(editor_id+'_undo','mceButtonNormal');var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i<selectElm.options.length;i++){if(selectElm.options[i].value==classNode.className){index=i;breakOut=true;break}}}}while(!breakOut&&classNode!=null&&(classNode=classNode.parentNode)!=null);selectElm.selectedIndex=index}var selectElm=document.getElementById(editor_id+"_formatSelect");if(selectElm){var elm=tinyMCE.getParentElement(node,"p,div,h1,h2,h3,h4,h5,h6,pre,address");if(elm)selectByValue(selectElm,"<"+elm.nodeName.toLowerCase()+">");else selectByValue(selectElm,"")}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){if(!tinyMCE.isSafari&&!(tinyMCE.isMSIE&&!tinyMCE.isOpera)){var face=inst.queryCommandValue('FontName');face=face==null||face==""?"":face;selectByValue(selectElm,face,face!="")}else{var elm=tinyMCE.getParentElement(node,"font","face");if(elm){var family=tinyMCE.getAttrib(elm,"face");if(family=='')family=''+elm.style.fontFamily;if(!selectByValue(selectElm,family,family!=""))selectByValue(selectElm,"")}else selectByValue(selectElm,"")}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){if(!tinyMCE.isSafari&&!tinyMCE.isOpera){var size=inst.queryCommandValue('FontSize');selectByValue(selectElm,size==null||size==""?"0":size)}else{var elm=tinyMCE.getParentElement(node,"font","size");if(elm){var size=tinyMCE.getAttrib(elm,"size");if(size==''){var sizes=new Array('','8px','10px','12px','14px','18px','24px','36px');size=''+elm.style.fontSize;for(var i=0;i<sizes.length;i++){if((''+sizes[i])==size){size=i;break}}}if(!selectByValue(selectElm,size))selectByValue(selectElm,"")}else selectByValue(selectElm,"0")}}alignNode=node;breakOut=false;do{if(!alignNode.getAttribute||!alignNode.getAttribute('align'))continue;switch(alignNode.getAttribute('align').toLowerCase()){case"left":tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonSelected');breakOut=true;break;case"right":tinyMCE.switchClass(editor_id+'_justifyright','mceButtonSelected');breakOut=true;break;case"middle":case"center":tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');breakOut=true;break;case"justify":tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonSelected');breakOut=true;break}}while(!breakOut&&(alignNode=alignNode.parentNode)!=null);var div=tinyMCE.getParentElement(node,"div");if(div&&div.style.textAlign=="center")tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');if(!setup_content){var ar=new Array("Bold","_bold","Italic","_italic","Strikethrough","_strikethrough","superscript","_sup","subscript","_sub");for(var i=0;i<ar.length;i+=2){if(inst.queryCommandState(ar[i]))tinyMCE.switchClass(editor_id+ar[i+1],'mceButtonSelected')}if(inst.queryCommandState("Underline")&&(node.parentNode==null||node.parentNode.nodeName!="A"))tinyMCE.switchClass(editor_id+'_underline','mceButtonSelected')}do{switch(node.nodeName){case"UL":tinyMCE.switchClass(editor_id+'_bullist','mceButtonSelected');break;case"OL":tinyMCE.switchClass(editor_id+'_numlist','mceButtonSelected');break;case"HR":tinyMCE.switchClass(editor_id+'_hr','mceButtonSelected');break;case"IMG":if(tinyMCE.getAttrib(node,'name').indexOf('mce_')!=0&&tinyMCE.getAttrib(node,'class').indexOf('mceItem')==-1){tinyMCE.switchClass(editor_id+'_image','mceButtonSelected')}break}}while((node=node.parentNode)!=null)},_setupCSSClasses:function(editor_id){var i,selectElm;if(!TinyMCE_AdvancedTheme._autoImportCSSClasses)return;selectElm=document.getElementById(editor_id+'_styleSelect');if(selectElm&&selectElm.getAttribute('cssImported')!='true'){var csses=tinyMCE.getCSSClasses(editor_id);if(csses&&selectElm){for(i=0;i<csses.length;i++)selectElm.options[selectElm.options.length]=new Option(csses[i],csses[i])}if(csses!=null&&csses.length>0)selectElm.setAttribute('cssImported','true')}},_setCookie:function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+escape(path):"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");document.cookie=curCookie},_getCookie:function(name){var dc=document.cookie;var prefix=name+"=";var begin=dc.indexOf("; "+prefix);if(begin==-1){begin=dc.indexOf(prefix);if(begin!=0)return null}else begin+=2;var end=document.cookie.indexOf(";",begin);if(end==-1)end=dc.length;return unescape(dc.substring(begin+prefix.length,end))},_resizeTo:function(inst,w,h,set_w){var editorContainer=document.getElementById(inst.editorId+'_parent');var tableElm=editorContainer.firstChild;var iframe=inst.iframeElement;if(w==null||w=="null"){set_w=false;w=0}if(h==null||h=="null")return;w=parseInt(w);h=parseInt(h);if(tinyMCE.isGecko){w+=2;h+=2}var dx=w-tableElm.clientWidth;var dy=h-tableElm.clientHeight;w=w<1?30:w;h=h<1?30:h;if(set_w)tableElm.style.width=w+"px";tableElm.style.height=h+"px";iw=iframe.clientWidth+dx;ih=iframe.clientHeight+dy;iw=iw<1?30:iw;ih=ih<1?30:ih;if(tinyMCE.isGecko){iw-=2;ih-=2}if(set_w)iframe.style.width=iw+"px";iframe.style.height=ih+"px";if(set_w){var tableBodyElm=tableElm.firstChild;var minIframeWidth=tableBodyElm.scrollWidth;if(inst.iframeElement.clientWidth<minIframeWidth){dx=minIframeWidth-inst.iframeElement.clientWidth;inst.iframeElement.style.width=(iw+dx)+"px"}}inst.useCSS=false},_resizeEventHandler:function(e){var resizer=TinyMCE_AdvancedTheme._resizer;if(!resizer.resizing)return;e=typeof(e)=="undefined"?window.event:e;var dx=e.screenX-resizer.downX;var dy=e.screenY-resizer.downY;var resizeBox=resizer.resizeBox;var editorId=resizer.editorId;switch(e.type){case"mousemove":var w,h;w=resizer.width+dx;h=resizer.height+dy;w=w<1?1:w;h=h<1?1:h;if(resizer.horizontal)resizeBox.style.width=w+"px";resizeBox.style.height=h+"px";break;case"mouseup":TinyMCE_AdvancedTheme._setResizing(e,editorId,false);TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId),resizer.width+dx,resizer.height+dy,resizer.horizontal);if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var expires=new Date();expires.setTime(expires.getTime()+3600000*24*30);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_width",""+(resizer.horizontal?resizer.width+dx:""),expires);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_height",""+(resizer.height+dy),expires)}break}},_setResizing:function(e,editor_id,state){e=typeof(e)=="undefined"?window.event:e;var resizer=TinyMCE_AdvancedTheme._resizer;var editorContainer=document.getElementById(editor_id+'_parent');var editorArea=document.getElementById(editor_id+'_parent').firstChild;var resizeBox=document.getElementById(editor_id+'_resize_box');var inst=tinyMCE.getInstanceById(editor_id);if(state){var width=editorArea.clientWidth;var height=editorArea.clientHeight;resizeBox.style.width=width+"px";resizeBox.style.height=height+"px";resizer.iframeWidth=inst.iframeElement.clientWidth;resizer.iframeHeight=inst.iframeElement.clientHeight;editorArea.style.display="none";resizeBox.style.display="block";if(!resizer.eventHandlers){if(tinyMCE.isMSIE)tinyMCE.addEvent(document,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);else tinyMCE.addEvent(window,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);tinyMCE.addEvent(document,"mouseup",TinyMCE_AdvancedTheme._resizeEventHandler);resizer.eventHandlers=true}resizer.resizing=true;resizer.downX=e.screenX;resizer.downY=e.screenY;resizer.width=parseInt(resizeBox.style.width);resizer.height=parseInt(resizeBox.style.height);resizer.editorId=editor_id;resizer.resizeBox=resizeBox;resizer.horizontal=tinyMCE.getParam("theme_advanced_resize_horizontal",true)}else{resizer.resizing=false;resizeBox.style.display="none";editorArea.style.display=tinyMCE.isMSIE&&!tinyMCE.isOpera?"block":"table";tinyMCE.execCommand('mceResetDesignMode')}},_getColorHTML:function(id,n,cm){var i,h,cl;h='<span class="mceMenuLine"></span>';cl=tinyMCE.getParam(n,TinyMCE_AdvancedTheme._defColors).split(',');h+='<table class="mceColors"><tr>';for(i=0;i<cl.length;i++){c='tinyMCE.execInstanceCommand(\''+id+'\', \''+cm+'\', false, \'#'+cl[i]+'\');';h+='<td><a href="javascript:'+c+'" style="background-color: #'+cl[i]+'" onclick="'+c+';return false;"></a></td>';if((i+1)%8==0)h+='</tr><tr>'}h+='</tr></table>';if(tinyMCE.getParam("theme_advanced_more_colors",true))h+='<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\''+id+'\',\''+cm+'\');" class="mceMoreColors">'+tinyMCE.getLang('lang_more_colors')+'</a>';return h},_pickColor:function(id,cm){var inputColor,inst=tinyMCE.selectedInstance;if(cm=='forecolor'&&inst)inputColor=inst.foreColor;if((cm=='backcolor'||cm=='HiliteColor')&&inst)inputColor=inst.backColor;tinyMCE.execCommand('mceColorPicker',true,{color:inputColor,callback:function(c){tinyMCE.execInstanceCommand(id,cm,false,c)}})},_insertImage:function(src,alt,border,hspace,vspace,width,height,align,title,onmouseover,onmouseout){tinyMCE.execCommand("mceInsertContent",false,tinyMCE.createTagHTML('img',{src:tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],src),mce_src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout}))},_insertLink:function(href,target,title,onclick,style_class){tinyMCE.execCommand('mceBeginUndoLevel');if(tinyMCE.selectedInstance&&tinyMCE.selectedElement&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){var doc=tinyMCE.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true}var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(linkElement,'href',thref);tinyMCE.setAttrib(linkElement,'mce_href',mhref);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));tinyMCE.selectedElement.parentNode.replaceChild(linkElement,tinyMCE.selectedElement)}return}if(!tinyMCE.linkElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari){tinyMCE.execCommand("mceInsertContent",false,'<a href="'+tinyMCE.uniqueURL+'">'+tinyMCE.selectedInstance.selection.getSelectedHTML()+'</a>')}else tinyMCE.selectedInstance.contentDocument.execCommand("createlink",false,tinyMCE.uniqueURL);tinyMCE.linkElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);var elementArray=tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);for(var i=0;i<elementArray.length;i++){var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, elementArray[i]);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(elementArray[i],'href',thref);tinyMCE.setAttrib(elementArray[i],'mce_href',mhref);tinyMCE.setAttrib(elementArray[i],'target',target);tinyMCE.setAttrib(elementArray[i],'title',title);tinyMCE.setAttrib(elementArray[i],'onclick',onclick);tinyMCE.setAttrib(elementArray[i],'class',style_class)}tinyMCE.linkElement=elementArray[0]}if(tinyMCE.linkElement){var mhref=href;href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(tinyMCE.linkElement,'href',href);tinyMCE.setAttrib(tinyMCE.linkElement,'mce_href',mhref);tinyMCE.setAttrib(tinyMCE.linkElement,'target',target);tinyMCE.setAttrib(tinyMCE.linkElement,'title',title);tinyMCE.setAttrib(tinyMCE.linkElement,'onclick',onclick);tinyMCE.setAttrib(tinyMCE.linkElement,'class',style_class)}tinyMCE.execCommand('mceEndUndoLevel')}};tinyMCE.addTheme("advanced",TinyMCE_AdvancedTheme);tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);
\ No newline at end of file
+(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,each=tinymce.each,Cookie=tinymce.util.Cookie,lastExtID,explode=tinymce.explode;tinymce.ThemeManager.requireLangPack('advanced');tinymce.create('tinymce.themes.AdvancedTheme',{controls:{bold:['bold_desc','Bold'],italic:['italic_desc','Italic'],underline:['underline_desc','Underline'],strikethrough:['striketrough_desc','Strikethrough'],justifyleft:['justifyleft_desc','JustifyLeft'],justifycenter:['justifycenter_desc','JustifyCenter'],justifyright:['justifyright_desc','JustifyRight'],justifyfull:['justifyfull_desc','JustifyFull'],bullist:['bullist_desc','InsertUnorderedList'],numlist:['numlist_desc','InsertOrderedList'],outdent:['outdent_desc','Outdent'],indent:['indent_desc','Indent'],cut:['cut_desc','Cut'],copy:['copy_desc','Copy'],paste:['paste_desc','Paste'],undo:['undo_desc','Undo'],redo:['redo_desc','Redo'],link:['link_desc','mceLink'],unlink:['unlink_desc','unlink'],image:['image_desc','mceImage'],cleanup:['cleanup_desc','mceCleanup'],help:['help_desc','mceHelp'],code:['code_desc','mceCodeEditor'],hr:['hr_desc','InsertHorizontalRule'],removeformat:['removeformat_desc','RemoveFormat'],sub:['sub_desc','subscript'],sup:['sup_desc','superscript'],forecolor:['forecolor_desc','ForeColor'],forecolorpicker:['forecolor_desc','mceForeColor'],backcolor:['backcolor_desc','HiliteColor'],backcolorpicker:['backcolor_desc','mceBackColor'],charmap:['charmap_desc','mceCharMap'],visualaid:['visualaid_desc','mceToggleVisualAid'],anchor:['anchor_desc','mceInsertAnchor'],newdocument:['newdocument_desc','mceNewDocument'],blockquote:['blockquote_desc','mceBlockQuote']},stateControls:['bold','italic','underline','strikethrough','bullist','numlist','justifyleft','justifycenter','justifyright','justifyfull','sub','sup','blockquote'],init:function(ed,url){var t=this,s,v;t.editor=ed;t.url=url;t.onResolveName=new tinymce.util.Dispatcher(this);t.settings=s=extend({theme_advanced_path:true,theme_advanced_toolbar_location:'bottom',theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1},ed.settings);if((v=s.theme_advanced_path_location)&&v!='none')s.theme_advanced_statusbar_location=s.theme_advanced_path_location;if(s.theme_advanced_statusbar_location=='none')s.theme_advanced_statusbar_location=0;ed.onInit.add(function(){ed.onNodeChange.add(t._nodeChanged,t);if(ed.settings.content_css!==false)ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/"+ed.settings.skin+"/content.css"));});ed.onSetProgressState.add(function(ed,b,ti){var co,id=ed.id,tb;if(b){t.progressTimer=setTimeout(function(){co=ed.getContainer();co=co.insertBefore(DOM.create('DIV',{style:'position:relative'}),co.firstChild);tb=DOM.get(ed.id+'_tbl');DOM.add(co,'div',{id:id+'_blocker','class':'mceBlocker',style:{width:tb.clientWidth+2,height:tb.clientHeight+2}});DOM.add(co,'div',{id:id+'_progress','class':'mceProgress',style:{left:tb.clientWidth/ 2, top : tb.clientHeight /2}});},ti||0);}else{DOM.remove(id+'_blocker');DOM.remove(id+'_progress');clearTimeout(t.progressTimer);}});DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css||"themes/advanced/skins/"+ed.settings.skin+"/ui.css"));if(s.skin_variant)DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css||"themes/advanced/skins/"+ed.settings.skin+"/ui_"+s.skin_variant+".css"));},createControl:function(n,cf){var cd,c;if(c=cf.createControl(n))return c;switch(n){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu();}if((cd=this.controls[n]))return cf.createButton(n,{title:"advanced."+cd[0],cmd:cd[1],ui:cd[2],value:cd[3]});},execCommand:function(cmd,ui,val){var f=this['_'+cmd];if(f){f.call(this,ui,val);return true;}return false;},_importClasses:function(){var ed=this.editor,c=ed.controlManager.get('styleselect');if(c.getLength()==0){each(ed.dom.getClasses(),function(o){c.add(o['class'],o['class']);});}},_createStyleSelect:function(n){var t=this,ed=t.editor,cf=ed.controlManager,c=cf.createListBox('styleselect',{title:'advanced.style_select',onselect:function(v){if(c.selectedValue===v){ed.execCommand('mceSetStyleInfo',0,{command:'removeformat'});c.select();return false;}else ed.execCommand('mceSetCSSClass',0,v);}});if(c){each(ed.getParam('theme_advanced_styles','','hash'),function(v,k){if(v)c.add(t.editor.translate(k),v);});c.onPostRender.add(function(ed,n){Event.add(n,'focus',t._importClasses,t);Event.add(n,'mousedown',t._importClasses,t);});}return c;},_createFontSelect:function(){var c,t=this,ed=t.editor;c=ed.controlManager.createListBox('fontselect',{title:'advanced.fontdefault',cmd:'FontName'});if(c){each(ed.getParam('theme_advanced_fonts',t.settings.theme_advanced_fonts,'hash'),function(v,k){c.add(ed.translate(k),v,{style:v.indexOf('dings')==-1?'font-family:'+v:''});});}return c;},_createFontSizeSelect:function(){var c,t=this,lo=["1 (8 pt)","2 (10 pt)","3 (12 pt)","4 (14 pt)","5 (18 pt)","6 (24 pt)","7 (36 pt)"],fz=[8,10,12,14,18,24,36];c=t.editor.controlManager.createListBox('fontsizeselect',{title:'advanced.font_size',cmd:'FontSize'});if(c){each(explode(t.settings.theme_advanced_font_sizes),function(v){c.add(lo[parseInt(v)-1],v,{'style':'font-size:'+fz[v-1]+'pt','class':'mceFontSize'+v});});}return c;},_createBlockFormats:function(){var c,fmts={p:'advanced.paragraph',address:'advanced.address',pre:'advanced.pre',h1:'advanced.h1',h2:'advanced.h2',h3:'advanced.h3',h4:'advanced.h4',h5:'advanced.h5',h6:'advanced.h6',div:'advanced.div',blockquote:'advanced.blockquote',code:'advanced.code',dt:'advanced.dt',dd:'advanced.dd',samp:'advanced.samp'},t=this;c=t.editor.controlManager.createListBox('formatselect',{title:'advanced.block',cmd:'FormatBlock'});if(c){each(t.editor.getParam('theme_advanced_blockformats',t.settings.theme_advanced_blockformats,'hash'),function(v,k){c.add(t.editor.translate(k!=v?k:fmts[v]),v,{'class':'mce_formatPreview mce_'+v});});}return c;},_createForeColorMenu:function(){var c,t=this,s=t.settings,o={},v;if(s.theme_advanced_more_colors){o.more_colors_func=function(){t._mceColorPicker(0,{color:c.value,func:function(co){c.setColor(co);}});};}if(v=s.theme_advanced_text_colors)o.colors=v;o.title='advanced.forecolor_desc';o.cmd='ForeColor';o.scope=this;c=t.editor.controlManager.createColorSplitButton('forecolor',o);return c;},_createBackColorMenu:function(){var c,t=this,s=t.settings,o={},v;if(s.theme_advanced_more_colors){o.more_colors_func=function(){t._mceColorPicker(0,{color:c.value,func:function(co){c.setColor(co);}});};}if(v=s.theme_advanced_background_colors)o.colors=v;o.title='advanced.backcolor_desc';o.cmd='HiliteColor';o.scope=this;c=t.editor.controlManager.createColorSplitButton('backcolor',o);return c;},renderUI:function(o){var n,ic,tb,t=this,ed=t.editor,s=t.settings,sc,p,nl;n=p=DOM.create('span',{id:ed.id+'_parent','class':'mceEditor '+ed.settings.skin+'Skin'+(s.skin_variant?' '+ed.settings.skin+'Skin'+t._ufirst(s.skin_variant):'')});if(!DOM.boxModel)n=DOM.add(n,'div',{'class':'mceOldBoxModel'});n=sc=DOM.add(n,'table',{id:ed.id+'_tbl','class':'mceLayout',cellSpacing:0,cellPadding:0});n=tb=DOM.add(n,'tbody');switch((s.theme_advanced_layout_manager||'').toLowerCase()){case"rowlayout":ic=t._rowLayout(s,tb,o);break;case"customlayout":ic=ed.execCallback("theme_advanced_custom_layout",s,tb,o,p);break;default:ic=t._simpleLayout(s,tb,o,p);}n=o.targetNode;nl=DOM.stdMode?sc.getElementsByTagName('tr'):sc.rows;DOM.addClass(nl[0],'mceFirst');DOM.addClass(nl[nl.length-1],'mceLast');each(DOM.select('tr',tb),function(n){DOM.addClass(n.firstChild,'mceFirst');DOM.addClass(n.childNodes[n.childNodes.length-1],'mceLast');});if(DOM.get(s.theme_advanced_toolbar_container))DOM.get(s.theme_advanced_toolbar_container).appendChild(p);else DOM.insertAfter(p,n);Event.add(ed.id+'_path_row','click',function(e){e=e.target;if(e.nodeName=='A'){t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/,'$1'));return Event.cancel(e);}});if(!ed.getParam('accessibility_focus')||ed.getParam('tab_focus'))Event.add(DOM.add(p,'a',{href:'#'},'<!-- IE -->'),'focus',function(){tinyMCE.get(ed.id).focus();});if(s.theme_advanced_toolbar_location=='external')o.deltaHeight=0;t.deltaHeight=o.deltaHeight;o.targetNode=null;return{iframeContainer:ic,editorContainer:ed.id+'_parent',sizeContainer:sc,deltaHeight:o.deltaHeight};},getInfo:function(){return{longname:'Advanced theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}},resizeBy:function(dw,dh){var e=DOM.get(this.editor.id+'_tbl');this.resizeTo(e.clientWidth+dw,e.clientHeight+dh);},resizeTo:function(w,h){var ed=this.editor,s=ed.settings,e=DOM.get(ed.id+'_tbl'),ifr=DOM.get(ed.id+'_ifr'),dh;w=Math.max(s.theme_advanced_resizing_min_width||100,w);h=Math.max(s.theme_advanced_resizing_min_height||100,h);w=Math.min(s.theme_advanced_resizing_max_width||0xFFFF,w);h=Math.min(s.theme_advanced_resizing_max_height||0xFFFF,h);dh=e.clientHeight-ifr.clientHeight;DOM.setStyle(ifr,'height',h-dh);DOM.setStyles(e,{width:w,height:h});},destroy:function(){var id=this.editor.id;Event.clear(id+'_resize');Event.clear(id+'_path_row');Event.clear(id+'_external_close');},_simpleLayout:function(s,tb,o,p){var t=this,ed=t.editor,lo=s.theme_advanced_toolbar_location,sl=s.theme_advanced_statusbar_location,n,ic,etb,c;if(lo=='top')t._addToolbars(tb,o);if(lo=='external'){n=c=DOM.create('div',{style:'position:relative'});n=DOM.add(n,'div',{id:ed.id+'_external','class':'mceExternalToolbar'});DOM.add(n,'a',{id:ed.id+'_external_close',href:'javascript:;','class':'mceExternalClose'});n=DOM.add(n,'table',{id:ed.id+'_tblext',cellSpacing:0,cellPadding:0});etb=DOM.add(n,'tbody');if(p.firstChild.className=='mceOldBoxModel')p.firstChild.appendChild(c);else p.insertBefore(c,p.firstChild);t._addToolbars(etb,o);ed.onMouseUp.add(function(){var e=DOM.get(ed.id+'_external');DOM.show(e);DOM.hide(lastExtID);var f=Event.add(ed.id+'_external_close','click',function(){DOM.hide(ed.id+'_external');Event.remove(ed.id+'_external_close','click',f);});DOM.show(e);DOM.setStyle(e,'top',0-DOM.getRect(ed.id+'_tblext').h-1);DOM.hide(e);DOM.show(e);e.style.filter='';lastExtID=ed.id+'_external';e=null;});}if(sl=='top')t._addStatusBar(tb,o);if(!s.theme_advanced_toolbar_container){n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});}if(lo=='bottom')t._addToolbars(tb,o);if(sl=='bottom')t._addStatusBar(tb,o);return ic;},_rowLayout:function(s,tb,o){var t=this,ed=t.editor,dc,da,cf=ed.controlManager,n,ic,to,a;dc=s.theme_advanced_containers_default_class||'';da=s.theme_advanced_containers_default_align||'center';each(explode(s.theme_advanced_containers||''),function(c,i){var v=s['theme_advanced_container_'+c]||'';switch(c.toLowerCase()){case'mceeditor':n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});break;case'mceelementpath':t._addStatusBar(tb,o);break;default:a=s['theme_advanced_container_'+c+'_align'].toLowerCase();a='mce'+t._ufirst(a);n=DOM.add(DOM.add(tb,'tr'),'td',{'class':'mceToolbar '+(s['theme_advanced_container_'+c+'_class']||dc)+' '+a||da});to=cf.createToolbar("toolbar"+i);t._addControls(v,to);DOM.setHTML(n,to.renderHTML());o.deltaHeight-=s.theme_advanced_row_height;}});return ic;},_addControls:function(v,tb){var t=this,s=t.settings,di,cf=t.editor.controlManager;if(s.theme_advanced_disable&&!t._disabled){di={};each(explode(s.theme_advanced_disable),function(v){di[v]=1;});t._disabled=di;}else di=t._disabled;each(explode(v),function(n){var c;if(di&&di[n])return;if(n=='tablecontrols'){each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(n){n=t.createControl(n,cf);if(n)tb.add(n);});return;}c=t.createControl(n,cf);if(c)tb.add(c);});},_addToolbars:function(c,o){var t=this,i,tb,ed=t.editor,s=t.settings,v,cf=ed.controlManager,di,n,h=[],a;a=s.theme_advanced_toolbar_align.toLowerCase();a='mce'+t._ufirst(a);n=DOM.add(DOM.add(c,'tr'),'td',{'class':'mceToolbar '+a});if(!ed.getParam('accessibility_focus')||ed.getParam('tab_focus'))h.push(DOM.createHTML('a',{href:'#',onfocus:'tinyMCE.get(\''+ed.id+'\').focus();'},'<!-- IE -->'));h.push(DOM.createHTML('a',{href:'#',accesskey:'q',title:ed.getLang("advanced.toolbar_focus")},'<!-- IE -->'));for(i=1;(v=s['theme_advanced_buttons'+i]);i++){tb=cf.createToolbar("toolbar"+i,{'class':'mceToolbarRow'+i});if(s['theme_advanced_buttons'+i+'_add'])v+=','+s['theme_advanced_buttons'+i+'_add'];if(s['theme_advanced_buttons'+i+'_add_before'])v=s['theme_advanced_buttons'+i+'_add_before']+','+v;t._addControls(v,tb);h.push(tb.renderHTML());o.deltaHeight-=s.theme_advanced_row_height;}h.push(DOM.createHTML('a',{href:'#',accesskey:'z',title:ed.getLang("advanced.toolbar_focus"),onfocus:'tinyMCE.getInstanceById(\''+ed.id+'\').focus();'},'<!-- IE -->'));DOM.setHTML(n,h.join(''));},_addStatusBar:function(tb,o){var n,t=this,ed=t.editor,s=t.settings,r,mf,me,td;n=DOM.add(tb,'tr');n=td=DOM.add(n,'td',{'class':'mceStatusbar'});n=DOM.add(n,'div',{id:ed.id+'_path_row'},s.theme_advanced_path?ed.translate('advanced.path')+': ':' ');DOM.add(n,'a',{href:'#',accesskey:'x'});if(s.theme_advanced_resizing&&!tinymce.isOldWebKit){DOM.add(td,'a',{id:ed.id+'_resize',href:'javascript:;',onclick:"return false;",'class':'mceResize'});if(s.theme_advanced_resizing_use_cookie){ed.onPostRender.add(function(){var o=Cookie.getHash("TinyMCE_"+ed.id+"_size"),c=DOM.get(ed.id+'_tbl');if(!o)return;if(s.theme_advanced_resize_horizontal)c.style.width=Math.max(10,o.cw)+'px';c.style.height=Math.max(10,o.ch)+'px';DOM.get(ed.id+'_ifr').style.height=Math.max(10,parseInt(o.ch)+t.deltaHeight)+'px';});}ed.onPostRender.add(function(){Event.add(ed.id+'_resize','mousedown',function(e){var c,p,w,h,n,pa;c=DOM.get(ed.id+'_tbl');w=c.clientWidth;h=c.clientHeight;miw=s.theme_advanced_resizing_min_width||100;mih=s.theme_advanced_resizing_min_height||100;maw=s.theme_advanced_resizing_max_width||0xFFFF;mah=s.theme_advanced_resizing_max_height||0xFFFF;p=DOM.add(DOM.get(ed.id+'_parent'),'div',{'class':'mcePlaceHolder'});DOM.setStyles(p,{width:w,height:h});DOM.hide(c);DOM.show(p);r={x:e.screenX,y:e.screenY,w:w,h:h,dx:null,dy:null};mf=Event.add(DOM.doc,'mousemove',function(e){var w,h;r.dx=e.screenX-r.x;r.dy=e.screenY-r.y;w=Math.max(miw,r.w+r.dx);h=Math.max(mih,r.h+r.dy);w=Math.min(maw,w);h=Math.min(mah,h);if(s.theme_advanced_resize_horizontal)p.style.width=w+'px';p.style.height=h+'px';return Event.cancel(e);});me=Event.add(DOM.doc,'mouseup',function(e){var ifr;Event.remove(DOM.doc,'mousemove',mf);Event.remove(DOM.doc,'mouseup',me);c.style.display='';DOM.remove(p);if(r.dx===null)return;ifr=DOM.get(ed.id+'_ifr');if(s.theme_advanced_resize_horizontal)c.style.width=Math.max(10,r.w+r.dx)+'px';c.style.height=Math.max(10,r.h+r.dy)+'px';ifr.style.height=Math.max(10,ifr.clientHeight+r.dy)+'px';if(s.theme_advanced_resizing_use_cookie){Cookie.setHash("TinyMCE_"+ed.id+"_size",{cw:r.w+r.dx,ch:r.h+r.dy});}});return Event.cancel(e);});});}o.deltaHeight-=21;n=tb=null;},_nodeChanged:function(ed,cm,n,co){var t=this,p,de=0,v,c,s=t.settings;tinymce.each(t.stateControls,function(c){cm.setActive(c,ed.queryCommandState(t.controls[c][1]));});cm.setActive('visualaid',ed.hasVisual);cm.setDisabled('undo',!ed.undoManager.hasUndo()&&!ed.typing);cm.setDisabled('redo',!ed.undoManager.hasRedo());cm.setDisabled('outdent',!ed.queryCommandState('Outdent'));p=DOM.getParent(n,'A');if(c=cm.get('link')){if(!p||!p.name){c.setDisabled(!p&&co);c.setActive(!!p);}}if(c=cm.get('unlink')){c.setDisabled(!p&&co);c.setActive(!!p&&!p.name);}if(c=cm.get('anchor')){c.setActive(!!p&&p.name);if(tinymce.isWebKit){p=DOM.getParent(n,'IMG');c.setActive(!!p&&DOM.getAttrib(p,'mce_name')=='a');}}p=DOM.getParent(n,'IMG');if(c=cm.get('image'))c.setActive(!!p&&n.className.indexOf('mceItem')==-1);if(c=cm.get('styleselect')){if(n.className){t._importClasses();c.select(n.className);}else c.select();}if(c=cm.get('formatselect')){p=DOM.getParent(n,DOM.isBlock);if(p)c.select(p.nodeName.toLowerCase());}if(c=cm.get('fontselect'))c.select(ed.queryCommandValue('FontName'));if(c=cm.get('fontsizeselect'))c.select(ed.queryCommandValue('FontSize'));if(s.theme_advanced_path&&s.theme_advanced_statusbar_location){p=DOM.get(ed.id+'_path')||DOM.add(ed.id+'_path_row','span',{id:ed.id+'_path'});DOM.setHTML(p,'');ed.dom.getParent(n,function(n){var na=n.nodeName.toLowerCase(),u,pi,ti='';if(n.nodeType!=1||(DOM.hasClass(n,'mceItemHidden')||DOM.hasClass(n,'mceItemRemoved')))return;if(v=DOM.getAttrib(n,'mce_name'))na=v;if(tinymce.isIE&&n.scopeName!=='HTML')na=n.scopeName+':'+na;na=na.replace(/mce\:/g,'');switch(na){case'b':na='strong';break;case'i':na='em';break;case'img':if(v=DOM.getAttrib(n,'src'))ti+='src: '+v+' ';break;case'a':if(v=DOM.getAttrib(n,'name')){ti+='name: '+v+' ';na+='#'+v;}if(v=DOM.getAttrib(n,'href'))ti+='href: '+v+' ';break;case'font':if(s.convert_fonts_to_spans)na='span';if(v=DOM.getAttrib(n,'face'))ti+='font: '+v+' ';if(v=DOM.getAttrib(n,'size'))ti+='size: '+v+' ';if(v=DOM.getAttrib(n,'color'))ti+='color: '+v+' ';break;case'span':if(v=DOM.getAttrib(n,'style'))ti+='style: '+v+' ';break;}if(v=DOM.getAttrib(n,'id'))ti+='id: '+v+' ';if(v=n.className){v=v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g,'');if(v&&v.indexOf('mceItem')==-1){ti+='class: '+v+' ';if(DOM.isBlock(n)||na=='img'||na=='span')na+='.'+v;}}na=na.replace(/(html:)/g,'');na={name:na,node:n,title:ti};t.onResolveName.dispatch(t,na);ti=na.title;na=na.name;pi=DOM.create('a',{'href':"javascript:;",onmousedown:"return false;",title:ti,'class':'mcePath_'+(de++)},na);if(p.hasChildNodes()){p.insertBefore(DOM.doc.createTextNode(' \u00bb '),p.firstChild);p.insertBefore(pi,p.firstChild);}else p.appendChild(pi);},ed.getBody());}},_sel:function(v){this.editor.execCommand('mceSelectNodeDepth',false,v);},_mceInsertAnchor:function(ui,v){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/anchor.htm',width:320+parseInt(ed.getLang('advanced.anchor_delta_width',0)),height:90+parseInt(ed.getLang('advanced.anchor_delta_height',0)),inline:true},{theme_url:this.url});},_mceCharMap:function(){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/charmap.htm',width:550+parseInt(ed.getLang('advanced.charmap_delta_width',0)),height:250+parseInt(ed.getLang('advanced.charmap_delta_height',0)),inline:true},{theme_url:this.url});},_mceHelp:function(){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/about.htm',width:480,height:380,inline:true},{theme_url:this.url});},_mceColorPicker:function(u,v){var ed=this.editor;v=v||{};ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/color_picker.htm',width:375+parseInt(ed.getLang('advanced.colorpicker_delta_width',0)),height:250+parseInt(ed.getLang('advanced.colorpicker_delta_height',0)),close_previous:false,inline:true},{input_color:v.color,func:v.func,theme_url:this.url});},_mceCodeEditor:function(ui,val){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/source_editor.htm',width:parseInt(ed.getParam("theme_advanced_source_editor_width",720)),height:parseInt(ed.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url});},_mceImage:function(ui,val){var ed=this.editor;if(ed.dom.getAttrib(ed.selection.getNode(),'class').indexOf('mceItem')!=-1)return;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/image.htm',width:355+parseInt(ed.getLang('advanced.image_delta_width',0)),height:275+parseInt(ed.getLang('advanced.image_delta_height',0)),inline:true},{theme_url:this.url});},_mceLink:function(ui,val){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/link.htm',width:310+parseInt(ed.getLang('advanced.link_delta_width',0)),height:200+parseInt(ed.getLang('advanced.link_delta_height',0)),inline:true},{theme_url:this.url});},_mceNewDocument:function(){var ed=this.editor;ed.windowManager.confirm('advanced.newdocument',function(s){if(s)ed.execCommand('mceSetContent',false,'');});},_mceForeColor:function(){var t=this;this._mceColorPicker(0,{func:function(co){t.editor.execCommand('ForeColor',false,co);}});},_mceBackColor:function(){var t=this;this._mceColorPicker(0,{func:function(co){t.editor.execCommand('HiliteColor',false,co);}});},_ufirst:function(s){return s.substring(0,1).toUpperCase()+s.substring(1);}});tinymce.ThemeManager.add('advanced',tinymce.themes.AdvancedTheme);}());
\ No newline at end of file
-/**
- * $Id: editor_template_src.js 296 2007-08-21 10:36:35Z spocke $
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-/* Import theme specific language pack */
-tinyMCE.importThemeLanguagePack('advanced');
-
-var TinyMCE_AdvancedTheme = {
- // Private theme fields
- _defColors : "000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",
- _autoImportCSSClasses : true,
- _resizer : {},
- _buttons : [
- // Control id, button img, button title, command, user_interface, value
- ['bold', '{$lang_bold_img}', 'lang_bold_desc', 'Bold'],
- ['italic', '{$lang_italic_img}', 'lang_italic_desc', 'Italic'],
- ['underline', '{$lang_underline_img}', 'lang_underline_desc', 'Underline'],
- ['strikethrough', 'strikethrough.gif', 'lang_striketrough_desc', 'Strikethrough'],
- ['justifyleft', 'justifyleft.gif', 'lang_justifyleft_desc', 'JustifyLeft'],
- ['justifycenter', 'justifycenter.gif', 'lang_justifycenter_desc', 'JustifyCenter'],
- ['justifyright', 'justifyright.gif', 'lang_justifyright_desc', 'JustifyRight'],
- ['justifyfull', 'justifyfull.gif', 'lang_justifyfull_desc', 'JustifyFull'],
- ['bullist', 'bullist.gif', 'lang_bullist_desc', 'InsertUnorderedList'],
- ['numlist', 'numlist.gif', 'lang_numlist_desc', 'InsertOrderedList'],
- ['outdent', 'outdent.gif', 'lang_outdent_desc', 'Outdent'],
- ['indent', 'indent.gif', 'lang_indent_desc', 'Indent'],
- ['cut', 'cut.gif', 'lang_cut_desc', 'Cut'],
- ['copy', 'copy.gif', 'lang_copy_desc', 'Copy'],
- ['paste', 'paste.gif', 'lang_paste_desc', 'Paste'],
- ['undo', 'undo.gif', 'lang_undo_desc', 'Undo'],
- ['redo', 'redo.gif', 'lang_redo_desc', 'Redo'],
- ['link', 'link.gif', 'lang_link_desc', 'mceLink', true],
- ['unlink', 'unlink.gif', 'lang_unlink_desc', 'unlink'],
- ['image', 'image.gif', 'lang_image_desc', 'mceImage', true],
- ['cleanup', 'cleanup.gif', 'lang_cleanup_desc', 'mceCleanup'],
- ['help', 'help.gif', 'lang_help_desc', 'mceHelp'],
- ['code', 'code.gif', 'lang_theme_code_desc', 'mceCodeEditor'],
- ['hr', 'hr.gif', 'lang_theme_hr_desc', 'inserthorizontalrule'],
- ['removeformat', 'removeformat.gif', 'lang_theme_removeformat_desc', 'removeformat'],
- ['sub', 'sub.gif', 'lang_theme_sub_desc', 'subscript'],
- ['sup', 'sup.gif', 'lang_theme_sup_desc', 'superscript'],
- ['forecolor', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolor', true],
- ['forecolorpicker', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolorpicker', true],
- ['backcolor', 'backcolor.gif', 'lang_theme_backcolor_desc', 'HiliteColor', true],
- ['backcolorpicker', 'backcolor.gif', 'lang_theme_backcolor_desc', 'backcolorpicker', true],
- ['charmap', 'charmap.gif', 'lang_theme_charmap_desc', 'mceCharMap'],
- ['visualaid', 'visualaid.gif', 'lang_theme_visualaid_desc', 'mceToggleVisualAid'],
- ['anchor', 'anchor.gif', 'lang_theme_anchor_desc', 'mceInsertAnchor'],
- ['newdocument', 'newdocument.gif', 'lang_newdocument_desc', 'mceNewDocument']
- ],
-
- _buttonMap : 'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',
-
- /**
- * Returns HTML code for the specificed control.
- */
- getControlHTML : function(button_name) {
- var i, x, but;
-
- // Lookup button in button list
- for (i=0; i<TinyMCE_AdvancedTheme._buttons.length; i++) {
- but = TinyMCE_AdvancedTheme._buttons[i];
-
- if (but[0] == button_name && (button_name == "forecolor" || button_name == "backcolor"))
- return tinyMCE.getMenuButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3] + "Menu", but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null));
-
- if (but[0] == button_name)
- return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null));
- }
-
- // Custom controlls other than buttons
- switch (button_name) {
- case "formatselect":
- var html = '<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';
- var formats = tinyMCE.getParam("theme_advanced_blockformats", "p,address,pre,h1,h2,h3,h4,h5,h6", true).split(',');
- var lookup = [
- ['p', '{$lang_theme_paragraph}'],
- ['address', '{$lang_theme_address}'],
- ['pre', '{$lang_theme_pre}'],
- ['h1', '{$lang_theme_h1}'],
- ['h2', '{$lang_theme_h2}'],
- ['h3', '{$lang_theme_h3}'],
- ['h4', '{$lang_theme_h4}'],
- ['h5', '{$lang_theme_h5}'],
- ['h6', '{$lang_theme_h6}'],
- ['div', '{$lang_theme_div}'],
- ['blockquote', '{$lang_theme_blockquote}'],
- ['code', '{$lang_theme_code}'],
- ['dt', '{$lang_theme_dt}'],
- ['dd', '{$lang_theme_dd}'],
- ['samp', '{$lang_theme_samp}']
- ];
-
- html += '<option value="">{$lang_theme_block}</option>';
-
- // Build format select
- for (var i=0; i<formats.length; i++) {
- for (var x=0; x<lookup.length; x++) {
- if (formats[i] == lookup[x][0])
- html += '<option value="<' + lookup[x][0] + '>">' + lookup[x][1] + '</option>';
- }
- }
-
- html += '</select>';
-
- return html;
-
- case "styleselect":
- return '<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';
-
- case "fontselect":
- var fontHTML = '<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';
- var iFonts = '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';
- var nFonts = 'Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';
- var fonts = tinyMCE.getParam("theme_advanced_fonts", nFonts).split(';');
- for (i=0; i<fonts.length; i++) {
- if (fonts[i] != '') {
- var parts = fonts[i].split('=');
- fontHTML += '<option value="' + parts[1] + '">' + parts[0] + '</option>';
- }
- }
-
- fontHTML += '</select>';
- return fontHTML;
-
- case "fontsizeselect":
- return '<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+
- '<option value="0">{$lang_theme_font_size}</option>'+
- '<option value="1">1 (8 pt)</option>'+
- '<option value="2">2 (10 pt)</option>'+
- '<option value="3">3 (12 pt)</option>'+
- '<option value="4">4 (14 pt)</option>'+
- '<option value="5">5 (18 pt)</option>'+
- '<option value="6">6 (24 pt)</option>'+
- '<option value="7">7 (36 pt)</option>'+
- '</select>';
-
- case "|":
- case "separator":
- return '<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';
-
- case "spacer":
- return '<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';
-
- case "rowseparator":
- return '<br />';
- }
-
- return "";
- },
-
- /**
- * Theme specific execcommand handling.
- */
- execCommand : function(editor_id, element, command, user_interface, value) {
- switch (command) {
- case 'mceHelp':
- tinyMCE.openWindow({
- file : 'about.htm',
- width : 480,
- height : 380
- }, {
- tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion,
- tinymce_releasedate : tinyMCE.releaseDate,
- inline : "yes"
- });
- return true;
-
- case "mceLink":
- var inst = tinyMCE.getInstanceById(editor_id);
- var doc = inst.getDoc();
- var selectedText = "";
-
- if (tinyMCE.isMSIE) {
- var rng = doc.selection.createRange();
- selectedText = rng.text;
- } else
- selectedText = inst.getSel().toString();
-
- if (!tinyMCE.linkElement) {
- if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0))
- return true;
- }
-
- var href = "", target = "", title = "", onclick = "", action = "insert", style_class = "";
-
- if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a")
- tinyMCE.linkElement = tinyMCE.selectedElement;
-
- // Is anchor not a link
- if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "")
- tinyMCE.linkElement = null;
-
- if (tinyMCE.linkElement) {
- href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href');
- target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target');
- title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title');
- onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick');
- style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class');
-
- // Try old onclick to if copy/pasted content
- if (onclick == "")
- onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick');
-
- onclick = tinyMCE.cleanupEventStr(onclick);
-
- href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);");
-
- // Use mce_href if defined
- mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href');
- if (mceRealHref != "") {
- href = mceRealHref;
-
- if (tinyMCE.getParam('convert_urls'))
- href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);");
- }
-
- action = "update";
- }
-
- var template = new Array();
-
- template['file'] = 'link.htm';
- template['width'] = 310;
- template['height'] = 200;
-
- // Language specific width and height addons
- template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0);
- template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0);
-
- if (inst.settings['insertlink_callback']) {
- var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);");
- if (returnVal && returnVal['href'])
- TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']);
- } else {
- tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"});
- }
-
- return true;
-
- case "mceImage":
- var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = "";
- var title = "", onmouseover = "", onmouseout = "", action = "insert";
- var img = tinyMCE.imgElement;
- var inst = tinyMCE.getInstanceById(editor_id);
-
- if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") {
- img = tinyMCE.selectedElement;
- tinyMCE.imgElement = img;
- }
-
- if (img) {
- // Is it a internal MCE visual aid image, then skip this one.
- if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0)
- return true;
-
- src = tinyMCE.getAttrib(img, 'src');
- alt = tinyMCE.getAttrib(img, 'alt');
-
- // Try polling out the title
- if (alt == "")
- alt = tinyMCE.getAttrib(img, 'title');
-
- // Fix width/height attributes if the styles is specified
- if (tinyMCE.isGecko) {
- var w = img.style.width;
- if (w != null && w != "")
- img.setAttribute("width", w);
-
- var h = img.style.height;
- if (h != null && h != "")
- img.setAttribute("height", h);
- }
-
- border = tinyMCE.getAttrib(img, 'border');
- hspace = tinyMCE.getAttrib(img, 'hspace');
- vspace = tinyMCE.getAttrib(img, 'vspace');
- width = tinyMCE.getAttrib(img, 'width');
- height = tinyMCE.getAttrib(img, 'height');
- align = tinyMCE.getAttrib(img, 'align');
- onmouseover = tinyMCE.getAttrib(img, 'onmouseover');
- onmouseout = tinyMCE.getAttrib(img, 'onmouseout');
- title = tinyMCE.getAttrib(img, 'title');
-
- // Is realy specified?
- if (tinyMCE.isMSIE) {
- width = img.attributes['width'].specified ? width : "";
- height = img.attributes['height'].specified ? height : "";
- }
-
- //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover));
- //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout));
-
- src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);");
-
- // Use mce_src if defined
- mceRealSrc = tinyMCE.getAttrib(img, 'mce_src');
- if (mceRealSrc != "") {
- src = mceRealSrc;
-
- if (tinyMCE.getParam('convert_urls'))
- src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);");
- }
-
- //if (onmouseover != "")
- // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);");
-
- //if (onmouseout != "")
- // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);");
-
- action = "update";
- }
-
- var template = new Array();
-
- template['file'] = 'image.htm?src={$src}';
- template['width'] = 355;
- template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0);
-
- // Language specific width and height addons
- template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0);
- template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0);
-
- if (inst.settings['insertimage_callback']) {
- var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");
- if (returnVal && returnVal['src'])
- TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']);
- } else
- tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"});
-
- return true;
-
- case "forecolor":
- var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm;
-
- TinyMCE_AdvancedTheme._hideMenus(editor_id);
-
- if (!fcp.exists()) {
- fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar'));
- elm = fcp.getElement();
- elm._editor_id = editor_id;
- elm._command = "forecolor";
- elm._switchId = editor_id + "_forecolor";
- tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent);
- tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent);
- tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent);
- }
-
- img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0];
- p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar'));
-
- fcp.moveTo(p.absLeft, p.absTop);
- fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor;
- fcp.show();
-
- return false;
-
- case "forecolorpicker":
- this._pickColor(editor_id, 'forecolor');
- return true;
-
- case "forecolorMenu":
- TinyMCE_AdvancedTheme._hideMenus(editor_id);
-
- // Create color layer
- var ml = new TinyMCE_Layer(editor_id + '_fcMenu');
-
- if (!ml.exists())
- ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor'));
-
- tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus');
- ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl');
-
- ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1);
-
- if (tinyMCE.isOpera)
- ml.moveBy(0, -2);
-
- ml.show();
- return true;
-
- case "HiliteColor":
- var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img;
-
- TinyMCE_AdvancedTheme._hideMenus(editor_id);
-
- if (!bcp.exists()) {
- bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar'));
- elm = bcp.getElement();
- elm._editor_id = editor_id;
- elm._command = "HiliteColor";
- elm._switchId = editor_id + "_backcolor";
- tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent);
- tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent);
- tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent);
- }
-
- img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0];
- p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar'));
-
- bcp.moveTo(p.absLeft, p.absTop);
- bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor;
- bcp.show();
-
- return false;
-
- case "HiliteColorMenu":
- TinyMCE_AdvancedTheme._hideMenus(editor_id);
-
- // Create color layer
- var ml = new TinyMCE_Layer(editor_id + '_bcMenu');
-
- if (!ml.exists())
- ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor'));
-
- tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus');
- ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl');
-
- ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1);
-
- if (tinyMCE.isOpera)
- ml.moveBy(0, -2);
-
- ml.show();
- return true;
-
- case "backcolorpicker":
- this._pickColor(editor_id, 'HiliteColor');
- return true;
-
- case "mceColorPicker":
- if (user_interface) {
- var template = [];
-
- if (!value['callback'] && !value['color'])
- value['color'] = value['document'].getElementById(value['element_id']).value;
-
- template['file'] = 'color_picker.htm';
- template['width'] = 380;
- template['height'] = 250;
- template['close_previous'] = "no";
-
- template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0);
- template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0);
-
- if (typeof(value['store_selection']) == "undefined")
- value['store_selection'] = true;
-
- tinyMCE.lastColorPickerValue = value;
- tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']});
- } else {
- var savedVal = tinyMCE.lastColorPickerValue, elm;
-
- if (savedVal['callback']) {
- savedVal['callback'](value);
- return true;
- }
-
- elm = savedVal['document'].getElementById(savedVal['element_id']);
- elm.value = value;
-
- if (elm.onchange != null && elm.onchange != '')
- eval('elm.onchange();');
- }
- return true;
-
- case "mceCodeEditor":
- var template = new Array();
-
- template['file'] = 'source_editor.htm';
- template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720));
- template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580));
-
- tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"});
- return true;
-
- case "mceCharMap":
- var template = new Array();
-
- template['file'] = 'charmap.htm';
- template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0);
- template['height'] = 250;
-
- template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0);
- template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0);
-
- tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});
- return true;
-
- case "mceInsertAnchor":
- var template = new Array();
-
- template['file'] = 'anchor.htm';
- template['width'] = 320;
- template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0);
-
- template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0);
- template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0);
-
- tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});
- return true;
-
- case "mceNewDocument":
- if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument'))))
- tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' ');
-
- return true;
- }
-
- return false;
- },
-
- /**
- * Editor instance template function.
- */
- getEditorTemplate : function(settings, editorId) {
- function removeFromArray(in_array, remove_array) {
- var outArray = new Array(), skip;
-
- for (var i=0; i<in_array.length; i++) {
- skip = false;
-
- for (var j=0; j<remove_array.length; j++) {
- if (in_array[i] == remove_array[j]) {
- skip = true;
- }
- }
-
- if (!skip) {
- outArray[outArray.length] = in_array[i];
- }
- }
-
- return outArray;
- }
-
- function addToArray(in_array, add_array) {
- for (var i=0; i<add_array.length; i++) {
- in_array[in_array.length] = add_array[i];
- }
-
- return in_array;
- }
-
- var template = new Array();
- var deltaHeight = 0;
- var resizing = tinyMCE.getParam("theme_advanced_resizing", false);
- var path = tinyMCE.getParam("theme_advanced_path", true);
- var statusbarHTML = '<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: ' + (path ? "block" : "none") + '"> </div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: ' + (resizing ? "block" : "none") + '" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';
- var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout");
-
- // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY!
- var styleSelectHTML = '<option value="">{$lang_theme_style_select}</option>';
- if (settings['theme_advanced_styles']) {
- var stylesAr = settings['theme_advanced_styles'].split(';');
-
- for (var i=0; i<stylesAr.length; i++) {
- var key, value;
-
- key = stylesAr[i].split('=')[0];
- value = stylesAr[i].split('=')[1];
-
- styleSelectHTML += '<option value="' + value + '">' + key + '</option>';
- }
-
- TinyMCE_AdvancedTheme._autoImportCSSClasses = false;
- }
-
- switch(layoutManager) {
- case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)...
- var toolbarHTML = "";
- var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom");
- var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center");
- var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity
- var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation);
- var defVals = {
- theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",
- theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",
- theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap"
- };
-
- // Add accessibility control
- toolbarHTML += '<a href="#" accesskey="q" title="' + tinyMCE.getLang("lang_toolbar_focus") + '"';
-
- if (!tinyMCE.getParam("accessibility_focus"))
- toolbarHTML += ' onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"';
-
- toolbarHTML += '></a>';
-
- // Render rows
- for (var i=1; i<100; i++) {
- var def = defVals["theme_advanced_buttons" + i];
-
- var buttons = tinyMCE.getParam("theme_advanced_buttons" + i, def == null ? '' : def, true, ',');
- if (buttons.length == 0)
- break;
-
- buttons = removeFromArray(buttons, tinyMCE.getParam("theme_advanced_disable", "", true, ','));
- buttons = addToArray(buttons, tinyMCE.getParam("theme_advanced_buttons" + i + "_add", "", true, ','));
- buttons = addToArray(tinyMCE.getParam("theme_advanced_buttons" + i + "_add_before", "", true, ','), buttons);
-
- for (var b=0; b<buttons.length; b++)
- toolbarHTML += tinyMCE.getControlHTML(buttons[b]);
-
- if (buttons.length > 0) {
- toolbarHTML += "<br />";
- deltaHeight -= 23;
- }
- }
-
- // Add accessibility control
- toolbarHTML += '<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"></a>';
-
- // Setup template html
- template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';
-
- if (toolbarLocation == "top")
- template['html'] += '<tr><td dir="ltr" class="mceToolbarTop" align="' + toolbarAlign + '" height="1" nowrap="nowrap"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
-
- if (statusbarLocation == "top") {
- template['html'] += '<tr><td class="mceStatusbarTop" height="1">' + statusbarHTML + '</td></tr>';
- deltaHeight -= 23;
- }
-
- template['html'] += '<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';
-
- if (toolbarLocation == "bottom")
- template['html'] += '<tr><td dir="ltr" class="mceToolbarBottom" align="' + toolbarAlign + '" height="1"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
-
- // External toolbar changes
- if (toolbarLocation == "external") {
- var bod = document.body;
- var elm = document.createElement ("div");
-
- toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML);
- toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId});
-
- elm.className = "mceToolbarExternal";
- elm.id = editorId+"_toolbar";
- elm.innerHTML = '<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';
- bod.appendChild (elm);
- // bod.style.marginTop = elm.offsetHeight + "px";
-
- deltaHeight = 0;
- tinyMCE.getInstanceById(editorId).toolbarElement = elm;
-
- //template['html'] = '<div id="mceExternalToolbar" align="center" class="mceToolbarExternal"><table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table></div>' + template["html"];
- } else {
- tinyMCE.getInstanceById(editorId).toolbarElement = null;
- }
-
- if (statusbarLocation == "bottom") {
- template['html'] += '<tr><td class="mceStatusbarBottom" height="1">' + statusbarHTML + '</td></tr>';
- deltaHeight -= 23;
- }
-
- template['html'] += '</tbody></table>';
- //"SimpleLayout"
- break;
-
- case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom.
- template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';
-
- var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ",");
- var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container");
- var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center");
-
- //Render Containers:
- for (var i = 0; i < containers.length; i++)
- {
- if (containers[i] == "mceEditor") //Exceptions for mceEditor and ...
- template['html'] += '<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';
- else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath:
- {
- var pathClass = "mceStatusbar";
-
- if (i == containers.length-1)
- {
- pathClass = "mceStatusbarBottom";
- }
- else if (i == 0)
- {
- pathClass = "mceStatusbar";
- }
- else
- {
- deltaHeight-=2;
- }
-
- template['html'] += '<tr><td class="' + pathClass + '" height="1">' + statusbarHTML + '</td></tr>';
- deltaHeight -= 22;
- } else { // Render normal Container
- var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ',');
- var curContainerHTML = "";
- var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign);
- var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS);
-
- curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ','));
-
- for (var j=0; j<curContainer.length; j++)
- curContainerHTML += tinyMCE.getControlHTML(curContainer[j]);
-
- if (curContainer.length > 0) {
- curContainerHTML += "<br />";
- deltaHeight -= 23;
- }
-
- template['html'] += '<tr><td class="' + curCSS + '" align="' + curAlign + '" height="1">' + curContainerHTML + '</td></tr>';
- }
- }
-
- template['html'] += '</tbody></table>';
- //RowLayout
- break;
-
- case "CustomLayout" : //User defined layout callback...
- var customLayout = tinyMCE.getParam("theme_advanced_custom_layout","");
-
- if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") {
- template = eval(customLayout + "(template);");
- }
- break;
- }
-
- if (resizing)
- template['html'] += '<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';
-
- template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML);
-
- // Set to default values
- if (!template['delta_width'])
- template['delta_width'] = 0;
-
- if (!template['delta_height'])
- template['delta_height'] = deltaHeight;
-
- return template;
- },
-
- initInstance : function(inst) {
- if (tinyMCE.getParam("theme_advanced_resizing", false)) {
- if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {
- var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width");
- var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height");
-
- TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true));
- }
- }
-
- inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink');
- },
-
- removeInstance : function(inst) {
- new TinyMCE_Layer(inst.editorId + '_fcMenu').remove();
- new TinyMCE_Layer(inst.editorId + '_bcMenu').remove();
- },
-
- hideInstance : function(inst) {
- TinyMCE_AdvancedTheme._hideMenus(inst.editorId);
- },
-
- _handleMenuEvent : function(e) {
- var te = tinyMCE.isMSIE ? window.event.srcElement : e.target;
- tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId));
-
- if (e.type == "click")
- tinyMCE.execInstanceCommand(te._editor_id, te._command);
- },
-
- _hideMenus : function(id) {
- var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu');
-
- if (fcml.exists() && fcml.isVisible()) {
- tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton');
- fcml.hide();
- }
-
- if (bcml.exists() && bcml.isVisible()) {
- tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton');
- bcml.hide();
- }
- },
-
- /**
- * Node change handler.
- */
- handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) {
- var alignNode, breakOut, classNode;
-
- function selectByValue(select_elm, value, first_index) {
- first_index = typeof(first_index) == "undefined" ? false : true;
-
- if (select_elm) {
- for (var i=0; i<select_elm.options.length; i++) {
- var ov = "" + select_elm.options[i].value;
-
- if (first_index && ov.toLowerCase().indexOf(value.toLowerCase()) == 0) {
- select_elm.selectedIndex = i;
- return true;
- }
-
- if (ov == value) {
- select_elm.selectedIndex = i;
- return true;
- }
- }
- }
-
- return false;
- };
-
- // No node provided
- if (node == null)
- return;
-
- // Update path
- var pathElm = document.getElementById(editor_id + "_path");
- var inst = tinyMCE.getInstanceById(editor_id);
- var doc = inst.getDoc();
- TinyMCE_AdvancedTheme._hideMenus(editor_id);
-
- if (pathElm) {
- // Get node path
- var parentNode = node;
- var path = new Array();
-
- while (parentNode != null) {
- if (parentNode.nodeName.toUpperCase() == "BODY") {
- break;
- }
-
- // Only append element nodes to path
- if (parentNode.nodeType == 1 && tinyMCE.getAttrib(parentNode, "class").indexOf('mceItemHidden') == -1) {
- path[path.length] = parentNode;
- }
-
- parentNode = parentNode.parentNode;
- }
-
- // Setup HTML
- var html = "";
- for (var i=path.length-1; i>=0; i--) {
- var nodeName = path[i].nodeName.toLowerCase();
- var nodeData = "";
-
- if (nodeName.indexOf("html:") == 0)
- nodeName = nodeName.substring(5);
-
- if (nodeName == "b") {
- nodeName = "strong";
- }
-
- if (nodeName == "i") {
- nodeName = "em";
- }
-
- if (nodeName == "span") {
- var cn = tinyMCE.getAttrib(path[i], "class");
- if (cn != "" && cn.indexOf('mceItem') == -1)
- nodeData += "class: " + cn + " ";
-
- var st = tinyMCE.getAttrib(path[i], "style");
- if (st != "") {
- st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st));
- nodeData += "style: " + tinyMCE.xmlEncode(st) + " ";
- }
- }
-
- if (nodeName == "font") {
- if (tinyMCE.getParam("convert_fonts_to_spans"))
- nodeName = "span";
-
- var face = tinyMCE.getAttrib(path[i], "face");
- if (face != "")
- nodeData += "font: " + tinyMCE.xmlEncode(face) + " ";
-
- var size = tinyMCE.getAttrib(path[i], "size");
- if (size != "")
- nodeData += "size: " + tinyMCE.xmlEncode(size) + " ";
-
- var color = tinyMCE.getAttrib(path[i], "color");
- if (color != "")
- nodeData += "color: " + tinyMCE.xmlEncode(color) + " ";
- }
-
- if (tinyMCE.getAttrib(path[i], 'id') != "") {
- nodeData += "id: " + path[i].getAttribute('id') + " ";
- }
-
- var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false);
- if (className != "" && className.indexOf('mceItem') == -1)
- nodeData += "class: " + className + " ";
-
- if (tinyMCE.getAttrib(path[i], 'src') != "") {
- var src = tinyMCE.getAttrib(path[i], "mce_src");
-
- if (src == "")
- src = tinyMCE.getAttrib(path[i], "src");
-
- nodeData += "src: " + tinyMCE.xmlEncode(src) + " ";
- }
-
- if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") {
- var href = tinyMCE.getAttrib(path[i], "mce_href");
-
- if (href == "")
- href = tinyMCE.getAttrib(path[i], "href");
-
- nodeData += "href: " + tinyMCE.xmlEncode(href) + " ";
- }
-
- className = tinyMCE.getAttrib(path[i], "class");
- if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) {
- nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase();
- nodeData = path[i].getAttribute('title');
- }
-
- if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") {
- nodeName = "a";
- nodeName += "#" + tinyMCE.xmlEncode(anchor);
- nodeData = "";
- }
-
- if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) {
- var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false);
- if (className != "" && className.indexOf('mceItem') == -1) {
- nodeName += "." + className;
- }
- }
-
- var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');';
- html += '<a title="' + nodeData + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" target="_self" class="mcePathItem">' + nodeName + '</a>';
-
- if (i > 0) {
- html += " » ";
- }
- }
-
- pathElm.innerHTML = '<a href="#" accesskey="x"></a>' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' ';
- }
-
- // Reset old states
- tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled');
- tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled');
- tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled');
- tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal');
-
- if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1)
- tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected');
-
- // Get link
- var anchorLink = tinyMCE.getParentElement(node, "a", "href");
-
- if (anchorLink || any_selection) {
- tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal');
- tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal');
- }
-
- // Handle visual aid
- tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal');
-
- if (undo_levels != -1) {
- tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled');
- tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled');
- }
-
- // Within li, blockquote
- if (tinyMCE.getParentElement(node, "li,blockquote"))
- tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal');
-
- // Has redo levels
- if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0))
- tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal');
-
- // Has undo levels
- if (undo_index != -1 && (undo_index > 0 && undo_levels > 0))
- tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal');
-
- // Select class in select box
- var selectElm = document.getElementById(editor_id + "_styleSelect");
-
- if (selectElm) {
- TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);
-
- classNode = node;
- breakOut = false;
- var index = 0;
-
- do {
- if (classNode && classNode.className) {
- for (var i=0; i<selectElm.options.length; i++) {
- if (selectElm.options[i].value == classNode.className) {
- index = i;
- breakOut = true;
- break;
- }
- }
- }
- } while (!breakOut && classNode != null && (classNode = classNode.parentNode) != null);
-
- selectElm.selectedIndex = index;
- }
-
- // Select formatblock
- var selectElm = document.getElementById(editor_id + "_formatSelect");
- if (selectElm) {
- var elm = tinyMCE.getParentElement(node, "p,div,h1,h2,h3,h4,h5,h6,pre,address");
-
- if (elm)
- selectByValue(selectElm, "<" + elm.nodeName.toLowerCase() + ">");
- else
- selectByValue(selectElm, "");
- }
-
- // Select fontselect
- var selectElm = document.getElementById(editor_id + "_fontNameSelect");
- if (selectElm) {
- if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) {
- var face = inst.queryCommandValue('FontName');
-
- face = face == null || face == "" ? "" : face;
-
- selectByValue(selectElm, face, face != "");
- } else {
- var elm = tinyMCE.getParentElement(node, "font", "face");
-
- if (elm) {
- var family = tinyMCE.getAttrib(elm, "face");
-
- if (family == '')
- family = '' + elm.style.fontFamily;
-
- if (!selectByValue(selectElm, family, family != ""))
- selectByValue(selectElm, "");
- } else
- selectByValue(selectElm, "");
- }
- }
-
- // Select fontsize
- var selectElm = document.getElementById(editor_id + "_fontSizeSelect");
- if (selectElm) {
- if (!tinyMCE.isSafari && !tinyMCE.isOpera) {
- var size = inst.queryCommandValue('FontSize');
- selectByValue(selectElm, size == null || size == "" ? "0" : size);
- } else {
- var elm = tinyMCE.getParentElement(node, "font", "size");
- if (elm) {
- var size = tinyMCE.getAttrib(elm, "size");
-
- if (size == '') {
- var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px');
-
- size = '' + elm.style.fontSize;
-
- for (var i=0; i<sizes.length; i++) {
- if (('' + sizes[i]) == size) {
- size = i;
- break;
- }
- }
- }
-
- if (!selectByValue(selectElm, size))
- selectByValue(selectElm, "");
- } else
- selectByValue(selectElm, "0");
- }
- }
-
- // Handle align attributes
- alignNode = node;
- breakOut = false;
- do {
- if (!alignNode.getAttribute || !alignNode.getAttribute('align'))
- continue;
-
- switch (alignNode.getAttribute('align').toLowerCase()) {
- case "left":
- tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonSelected');
- breakOut = true;
- break;
-
- case "right":
- tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonSelected');
- breakOut = true;
- break;
-
- case "middle":
- case "center":
- tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected');
- breakOut = true;
- break;
-
- case "justify":
- tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonSelected');
- breakOut = true;
- break;
- }
- } while (!breakOut && (alignNode = alignNode.parentNode) != null);
-
- // Div justification
- var div = tinyMCE.getParentElement(node, "div");
- if (div && div.style.textAlign == "center")
- tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected');
-
- // Do special text
- if (!setup_content) {
- // , "JustifyLeft", "_justifyleft", "JustifyCenter", "justifycenter", "JustifyRight", "justifyright", "JustifyFull", "justifyfull", "InsertUnorderedList", "bullist", "InsertOrderedList", "numlist", "InsertUnorderedList", "bullist", "Outdent", "outdent", "Indent", "indent", "subscript", "sub"
- var ar = new Array("Bold", "_bold", "Italic", "_italic", "Strikethrough", "_strikethrough", "superscript", "_sup", "subscript", "_sub");
- for (var i=0; i<ar.length; i+=2) {
- if (inst.queryCommandState(ar[i]))
- tinyMCE.switchClass(editor_id + ar[i+1], 'mceButtonSelected');
- }
-
- if (inst.queryCommandState("Underline") && (node.parentNode == null || node.parentNode.nodeName != "A"))
- tinyMCE.switchClass(editor_id + '_underline', 'mceButtonSelected');
- }
-
- // Handle elements
- do {
- switch (node.nodeName) {
- case "UL":
- tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonSelected');
- break;
-
- case "OL":
- tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonSelected');
- break;
-
- case "HR":
- tinyMCE.switchClass(editor_id + '_hr', 'mceButtonSelected');
- break;
-
- case "IMG":
- if (tinyMCE.getAttrib(node, 'name').indexOf('mce_') != 0 && tinyMCE.getAttrib(node, 'class').indexOf('mceItem') == -1) {
- tinyMCE.switchClass(editor_id + '_image', 'mceButtonSelected');
- }
- break;
- }
- } while ((node = node.parentNode) != null);
- },
-
- // Private theme internal functions
-
- // This function auto imports CSS classes into the class selection droplist
- _setupCSSClasses : function(editor_id) {
- var i, selectElm;
-
- if (!TinyMCE_AdvancedTheme._autoImportCSSClasses)
- return;
-
- selectElm = document.getElementById(editor_id + '_styleSelect');
-
- if (selectElm && selectElm.getAttribute('cssImported') != 'true') {
- var csses = tinyMCE.getCSSClasses(editor_id);
- if (csses && selectElm) {
- for (i=0; i<csses.length; i++)
- selectElm.options[selectElm.options.length] = new Option(csses[i], csses[i]);
- }
-
- // Only do this once
- if (csses != null && csses.length > 0)
- selectElm.setAttribute('cssImported', 'true');
- }
- },
-
- _setCookie : function(name, value, expires, path, domain, secure) {
- var curCookie = name + "=" + escape(value) +
- ((expires) ? "; expires=" + expires.toGMTString() : "") +
- ((path) ? "; path=" + escape(path) : "") +
- ((domain) ? "; domain=" + domain : "") +
- ((secure) ? "; secure" : "");
-
- document.cookie = curCookie;
- },
-
- _getCookie : function(name) {
- var dc = document.cookie;
- var prefix = name + "=";
- var begin = dc.indexOf("; " + prefix);
-
- if (begin == -1) {
- begin = dc.indexOf(prefix);
-
- if (begin != 0)
- return null;
- } else
- begin += 2;
-
- var end = document.cookie.indexOf(";", begin);
-
- if (end == -1)
- end = dc.length;
-
- return unescape(dc.substring(begin + prefix.length, end));
- },
-
- _resizeTo : function(inst, w, h, set_w) {
- var editorContainer = document.getElementById(inst.editorId + '_parent');
- var tableElm = editorContainer.firstChild;
- var iframe = inst.iframeElement;
-
- if (w == null || w == "null") {
- set_w = false;
- w = 0;
- }
-
- if (h == null || h == "null")
- return;
-
- w = parseInt(w);
- h = parseInt(h);
-
- if (tinyMCE.isGecko) {
- w += 2;
- h += 2;
- }
-
- var dx = w - tableElm.clientWidth;
- var dy = h - tableElm.clientHeight;
-
- w = w < 1 ? 30 : w;
- h = h < 1 ? 30 : h;
-
- if (set_w)
- tableElm.style.width = w + "px";
-
- tableElm.style.height = h + "px";
-
- iw = iframe.clientWidth + dx;
- ih = iframe.clientHeight + dy;
-
- iw = iw < 1 ? 30 : iw;
- ih = ih < 1 ? 30 : ih;
-
- if (tinyMCE.isGecko) {
- iw -= 2;
- ih -= 2;
- }
-
- if (set_w)
- iframe.style.width = iw + "px";
-
- iframe.style.height = ih + "px";
-
- // Is it to small, make it bigger again
- if (set_w) {
- var tableBodyElm = tableElm.firstChild;
- var minIframeWidth = tableBodyElm.scrollWidth;
- if (inst.iframeElement.clientWidth < minIframeWidth) {
- dx = minIframeWidth - inst.iframeElement.clientWidth;
-
- inst.iframeElement.style.width = (iw + dx) + "px";
- }
- }
-
- // Remove pesky table controls
- inst.useCSS = false;
- },
-
- /**
- * Handles resizing events.
- */
- _resizeEventHandler : function(e) {
- var resizer = TinyMCE_AdvancedTheme._resizer;
-
- // Do nothing
- if (!resizer.resizing)
- return;
-
- e = typeof(e) == "undefined" ? window.event : e;
-
- var dx = e.screenX - resizer.downX;
- var dy = e.screenY - resizer.downY;
- var resizeBox = resizer.resizeBox;
- var editorId = resizer.editorId;
-
- switch (e.type) {
- case "mousemove":
- var w, h;
-
- w = resizer.width + dx;
- h = resizer.height + dy;
-
- w = w < 1 ? 1 : w;
- h = h < 1 ? 1 : h;
-
- if (resizer.horizontal)
- resizeBox.style.width = w + "px";
-
- resizeBox.style.height = h + "px";
- break;
-
- case "mouseup":
- TinyMCE_AdvancedTheme._setResizing(e, editorId, false);
- TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal);
-
- // Expire in a month
- if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {
- var expires = new Date();
- expires.setTime(expires.getTime() + 3600000 * 24 * 30);
-
- // Set the cookies
- TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires);
- TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires);
- }
- break;
- }
- },
-
- /**
- * Starts/stops the editor resizing.
- */
- _setResizing : function(e, editor_id, state) {
- e = typeof(e) == "undefined" ? window.event : e;
-
- var resizer = TinyMCE_AdvancedTheme._resizer;
- var editorContainer = document.getElementById(editor_id + '_parent');
- var editorArea = document.getElementById(editor_id + '_parent').firstChild;
- var resizeBox = document.getElementById(editor_id + '_resize_box');
- var inst = tinyMCE.getInstanceById(editor_id);
-
- if (state) {
- // Place box over editor area
- var width = editorArea.clientWidth;
- var height = editorArea.clientHeight;
-
- resizeBox.style.width = width + "px";
- resizeBox.style.height = height + "px";
-
- resizer.iframeWidth = inst.iframeElement.clientWidth;
- resizer.iframeHeight = inst.iframeElement.clientHeight;
-
- // Hide editor and show resize box
- editorArea.style.display = "none";
- resizeBox.style.display = "block";
-
- // Add event handlers, only once
- if (!resizer.eventHandlers) {
- if (tinyMCE.isMSIE)
- tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler);
- else
- tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler);
-
- tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler);
-
- resizer.eventHandlers = true;
- }
-
- resizer.resizing = true;
- resizer.downX = e.screenX;
- resizer.downY = e.screenY;
- resizer.width = parseInt(resizeBox.style.width);
- resizer.height = parseInt(resizeBox.style.height);
- resizer.editorId = editor_id;
- resizer.resizeBox = resizeBox;
- resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true);
- } else {
- resizer.resizing = false;
- resizeBox.style.display = "none";
- editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table";
- tinyMCE.execCommand('mceResetDesignMode');
- }
- },
-
- _getColorHTML : function(id, n, cm) {
- var i, h, cl;
-
- h = '<span class="mceMenuLine"></span>';
- cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(',');
-
- h += '<table class="mceColors"><tr>';
- for (i=0; i<cl.length; i++) {
- c = 'tinyMCE.execInstanceCommand(\'' + id + '\', \'' + cm + '\', false, \'#' + cl[i] + '\');';
- h += '<td><a href="javascript:' + c + '" style="background-color: #' + cl[i] + '" onclick="' + c + ';return false;"></a></td>';
-
- if ((i+1) % 8 == 0)
- h += '</tr><tr>';
- }
-
- h += '</tr></table>';
-
- if (tinyMCE.getParam("theme_advanced_more_colors", true))
- h += '<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\'' + id + '\',\'' + cm + '\');" class="mceMoreColors">' + tinyMCE.getLang('lang_more_colors') + '</a>';
-
- return h;
- },
-
- _pickColor : function(id, cm) {
- var inputColor, inst = tinyMCE.selectedInstance;
-
- if (cm == 'forecolor' && inst)
- inputColor = inst.foreColor;
-
- if ((cm == 'backcolor' || cm == 'HiliteColor') && inst)
- inputColor = inst.backColor;
-
- tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) {
- tinyMCE.execInstanceCommand(id, cm, false, c);
- }});
- },
-
- _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) {
- tinyMCE.execCommand("mceInsertContent", false, tinyMCE.createTagHTML('img', {
- src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, src), // Force absolute
- mce_src : src,
- alt : alt,
- border : border,
- hspace : hspace,
- vspace : vspace,
- width : width,
- height : height,
- align : align,
- title : title,
- onmouseover : onmouseover,
- onmouseout : onmouseout
- }));
- },
-
- _insertLink : function(href, target, title, onclick, style_class) {
- tinyMCE.execCommand('mceBeginUndoLevel');
-
- if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") {
- var doc = tinyMCE.selectedInstance.getDoc();
- var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");
- var newLink = false;
-
- if (!linkElement) {
- linkElement = doc.createElement("a");
- newLink = true;
- }
-
- var mhref = href;
- var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);");
- mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
-
- tinyMCE.setAttrib(linkElement, 'href', thref);
- tinyMCE.setAttrib(linkElement, 'mce_href', mhref);
- tinyMCE.setAttrib(linkElement, 'target', target);
- tinyMCE.setAttrib(linkElement, 'title', title);
- tinyMCE.setAttrib(linkElement, 'onclick', onclick);
- tinyMCE.setAttrib(linkElement, 'class', style_class);
-
- if (newLink) {
- linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));
- tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement);
- }
-
- return;
- }
-
- if (!tinyMCE.linkElement && tinyMCE.selectedInstance) {
- if (tinyMCE.isSafari) {
- tinyMCE.execCommand("mceInsertContent", false, '<a href="' + tinyMCE.uniqueURL + '">' + tinyMCE.selectedInstance.selection.getSelectedHTML() + '</a>');
- } else
- tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL);
-
- tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL);
-
- var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL);
-
- for (var i=0; i<elementArray.length; i++) {
- var mhref = href;
- var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, elementArray[i]);");
- mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
-
- tinyMCE.setAttrib(elementArray[i], 'href', thref);
- tinyMCE.setAttrib(elementArray[i], 'mce_href', mhref);
- tinyMCE.setAttrib(elementArray[i], 'target', target);
- tinyMCE.setAttrib(elementArray[i], 'title', title);
- tinyMCE.setAttrib(elementArray[i], 'onclick', onclick);
- tinyMCE.setAttrib(elementArray[i], 'class', style_class);
- }
-
- tinyMCE.linkElement = elementArray[0];
- }
-
- if (tinyMCE.linkElement) {
- var mhref = href;
- href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement);");
- mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
-
- tinyMCE.setAttrib(tinyMCE.linkElement, 'href', href);
- tinyMCE.setAttrib(tinyMCE.linkElement, 'mce_href', mhref);
- tinyMCE.setAttrib(tinyMCE.linkElement, 'target', target);
- tinyMCE.setAttrib(tinyMCE.linkElement, 'title', title);
- tinyMCE.setAttrib(tinyMCE.linkElement, 'onclick', onclick);
- tinyMCE.setAttrib(tinyMCE.linkElement, 'class', style_class);
- }
-
- tinyMCE.execCommand('mceEndUndoLevel');
- }
-};
-
-tinyMCE.addTheme("advanced", TinyMCE_AdvancedTheme);
-
-// Add default buttons maps for advanced theme and all internal plugins
-tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);
+/**\r
+ * $Id: editor_template_src.js 766 2008-04-03 20:37:06Z spocke $\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;\r
+\r
+ // Tell it to load theme specific language pack(s)\r
+ tinymce.ThemeManager.requireLangPack('advanced');\r
+\r
+ tinymce.create('tinymce.themes.AdvancedTheme', {\r
+ // Control name lookup, format: title, command\r
+ controls : {\r
+ bold : ['bold_desc', 'Bold'],\r
+ italic : ['italic_desc', 'Italic'],\r
+ underline : ['underline_desc', 'Underline'],\r
+ strikethrough : ['striketrough_desc', 'Strikethrough'],\r
+ justifyleft : ['justifyleft_desc', 'JustifyLeft'],\r
+ justifycenter : ['justifycenter_desc', 'JustifyCenter'],\r
+ justifyright : ['justifyright_desc', 'JustifyRight'],\r
+ justifyfull : ['justifyfull_desc', 'JustifyFull'],\r
+ bullist : ['bullist_desc', 'InsertUnorderedList'],\r
+ numlist : ['numlist_desc', 'InsertOrderedList'],\r
+ outdent : ['outdent_desc', 'Outdent'],\r
+ indent : ['indent_desc', 'Indent'],\r
+ cut : ['cut_desc', 'Cut'],\r
+ copy : ['copy_desc', 'Copy'],\r
+ paste : ['paste_desc', 'Paste'],\r
+ undo : ['undo_desc', 'Undo'],\r
+ redo : ['redo_desc', 'Redo'],\r
+ link : ['link_desc', 'mceLink'],\r
+ unlink : ['unlink_desc', 'unlink'],\r
+ image : ['image_desc', 'mceImage'],\r
+ cleanup : ['cleanup_desc', 'mceCleanup'],\r
+ help : ['help_desc', 'mceHelp'],\r
+ code : ['code_desc', 'mceCodeEditor'],\r
+ hr : ['hr_desc', 'InsertHorizontalRule'],\r
+ removeformat : ['removeformat_desc', 'RemoveFormat'],\r
+ sub : ['sub_desc', 'subscript'],\r
+ sup : ['sup_desc', 'superscript'],\r
+ forecolor : ['forecolor_desc', 'ForeColor'],\r
+ forecolorpicker : ['forecolor_desc', 'mceForeColor'],\r
+ backcolor : ['backcolor_desc', 'HiliteColor'],\r
+ backcolorpicker : ['backcolor_desc', 'mceBackColor'],\r
+ charmap : ['charmap_desc', 'mceCharMap'],\r
+ visualaid : ['visualaid_desc', 'mceToggleVisualAid'],\r
+ anchor : ['anchor_desc', 'mceInsertAnchor'],\r
+ newdocument : ['newdocument_desc', 'mceNewDocument'],\r
+ blockquote : ['blockquote_desc', 'mceBlockQuote']\r
+ },\r
+\r
+ stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'],\r
+\r
+ init : function(ed, url) {\r
+ var t = this, s, v;\r
+ \r
+ t.editor = ed;\r
+ t.url = url;\r
+ t.onResolveName = new tinymce.util.Dispatcher(this);\r
+\r
+ // Default settings\r
+ t.settings = s = extend({\r
+ theme_advanced_path : true,\r
+ theme_advanced_toolbar_location : 'bottom',\r
+ theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",\r
+ theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",\r
+ theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap",\r
+ theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6",\r
+ theme_advanced_toolbar_align : "center",\r
+ theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",\r
+ theme_advanced_font_sizes : "1,2,3,4,5,6,7",\r
+ theme_advanced_more_colors : 1,\r
+ theme_advanced_row_height : 23,\r
+ theme_advanced_resize_horizontal : 1,\r
+ theme_advanced_resizing_use_cookie : 1\r
+ }, ed.settings);\r
+\r
+ if ((v = s.theme_advanced_path_location) && v != 'none')\r
+ s.theme_advanced_statusbar_location = s.theme_advanced_path_location;\r
+\r
+ if (s.theme_advanced_statusbar_location == 'none')\r
+ s.theme_advanced_statusbar_location = 0;\r
+\r
+ // Init editor\r
+ ed.onInit.add(function() {\r
+ ed.onNodeChange.add(t._nodeChanged, t);\r
+\r
+ if (ed.settings.content_css !== false)\r
+ ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css"));\r
+ });\r
+\r
+ ed.onSetProgressState.add(function(ed, b, ti) {\r
+ var co, id = ed.id, tb;\r
+\r
+ if (b) {\r
+ t.progressTimer = setTimeout(function() {\r
+ co = ed.getContainer();\r
+ co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild);\r
+ tb = DOM.get(ed.id + '_tbl');\r
+\r
+ DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}});\r
+ DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}});\r
+ }, ti || 0);\r
+ } else {\r
+ DOM.remove(id + '_blocker');\r
+ DOM.remove(id + '_progress');\r
+ clearTimeout(t.progressTimer);\r
+ }\r
+ });\r
+\r
+ DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css || "themes/advanced/skins/" + ed.settings.skin + "/ui.css"));\r
+\r
+ if (s.skin_variant)\r
+ DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css || "themes/advanced/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"));\r
+ },\r
+\r
+ createControl : function(n, cf) {\r
+ var cd, c;\r
+\r
+ if (c = cf.createControl(n))\r
+ return c;\r
+\r
+ switch (n) {\r
+ case "styleselect":\r
+ return this._createStyleSelect();\r
+\r
+ case "formatselect":\r
+ return this._createBlockFormats();\r
+\r
+ case "fontselect":\r
+ return this._createFontSelect();\r
+\r
+ case "fontsizeselect":\r
+ return this._createFontSizeSelect();\r
+\r
+ case "forecolor":\r
+ return this._createForeColorMenu();\r
+\r
+ case "backcolor":\r
+ return this._createBackColorMenu();\r
+ }\r
+\r
+ if ((cd = this.controls[n]))\r
+ return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]});\r
+ },\r
+\r
+ execCommand : function(cmd, ui, val) {\r
+ var f = this['_' + cmd];\r
+\r
+ if (f) {\r
+ f.call(this, ui, val);\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ _importClasses : function() {\r
+ var ed = this.editor, c = ed.controlManager.get('styleselect');\r
+\r
+ if (c.getLength() == 0) {\r
+ each(ed.dom.getClasses(), function(o) {\r
+ c.add(o['class'], o['class']);\r
+ });\r
+ }\r
+ },\r
+\r
+ _createStyleSelect : function(n) {\r
+ var t = this, ed = t.editor, cf = ed.controlManager, c = cf.createListBox('styleselect', {\r
+ title : 'advanced.style_select',\r
+ onselect : function(v) {\r
+ if (c.selectedValue === v) {\r
+ ed.execCommand('mceSetStyleInfo', 0, {command : 'removeformat'});\r
+ c.select();\r
+ return false;\r
+ } else\r
+ ed.execCommand('mceSetCSSClass', 0, v);\r
+ }\r
+ });\r
+\r
+ if (c) {\r
+ each(ed.getParam('theme_advanced_styles', '', 'hash'), function(v, k) {\r
+ if (v)\r
+ c.add(t.editor.translate(k), v);\r
+ });\r
+\r
+ c.onPostRender.add(function(ed, n) {\r
+ Event.add(n, 'focus', t._importClasses, t);\r
+ Event.add(n, 'mousedown', t._importClasses, t);\r
+ });\r
+ }\r
+\r
+ return c;\r
+ },\r
+\r
+ _createFontSelect : function() {\r
+ var c, t = this, ed = t.editor;\r
+\r
+ c = ed.controlManager.createListBox('fontselect', {title : 'advanced.fontdefault', cmd : 'FontName'});\r
+ if (c) {\r
+ each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {\r
+ c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});\r
+ });\r
+ }\r
+\r
+ return c;\r
+ },\r
+\r
+ _createFontSizeSelect : function() {\r
+ var c, t = this, lo = [\r
+ "1 (8 pt)",\r
+ "2 (10 pt)",\r
+ "3 (12 pt)",\r
+ "4 (14 pt)",\r
+ "5 (18 pt)",\r
+ "6 (24 pt)",\r
+ "7 (36 pt)"\r
+ ], fz = [8, 10, 12, 14, 18, 24, 36];\r
+\r
+ c = t.editor.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', cmd : 'FontSize'});\r
+ if (c) {\r
+ each(explode(t.settings.theme_advanced_font_sizes), function(v) {\r
+ c.add(lo[parseInt(v) - 1], v, {'style' : 'font-size:' + fz[v - 1] + 'pt', 'class' : 'mceFontSize' + v});\r
+ });\r
+ }\r
+\r
+ return c;\r
+ },\r
+\r
+ _createBlockFormats : function() {\r
+ var c, fmts = {\r
+ p : 'advanced.paragraph',\r
+ address : 'advanced.address',\r
+ pre : 'advanced.pre',\r
+ h1 : 'advanced.h1',\r
+ h2 : 'advanced.h2',\r
+ h3 : 'advanced.h3',\r
+ h4 : 'advanced.h4',\r
+ h5 : 'advanced.h5',\r
+ h6 : 'advanced.h6',\r
+ div : 'advanced.div',\r
+ blockquote : 'advanced.blockquote',\r
+ code : 'advanced.code',\r
+ dt : 'advanced.dt',\r
+ dd : 'advanced.dd',\r
+ samp : 'advanced.samp'\r
+ }, t = this;\r
+\r
+ c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', cmd : 'FormatBlock'});\r
+ if (c) {\r
+ each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) {\r
+ c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v});\r
+ });\r
+ }\r
+\r
+ return c;\r
+ },\r
+\r
+ _createForeColorMenu : function() {\r
+ var c, t = this, s = t.settings, o = {}, v;\r
+\r
+ if (s.theme_advanced_more_colors) {\r
+ o.more_colors_func = function() {\r
+ t._mceColorPicker(0, {\r
+ color : c.value,\r
+ func : function(co) {\r
+ c.setColor(co);\r
+ }\r
+ });\r
+ };\r
+ }\r
+\r
+ if (v = s.theme_advanced_text_colors)\r
+ o.colors = v;\r
+\r
+ o.title = 'advanced.forecolor_desc';\r
+ o.cmd = 'ForeColor';\r
+ o.scope = this;\r
+\r
+ c = t.editor.controlManager.createColorSplitButton('forecolor', o);\r
+\r
+ return c;\r
+ },\r
+\r
+ _createBackColorMenu : function() {\r
+ var c, t = this, s = t.settings, o = {}, v;\r
+\r
+ if (s.theme_advanced_more_colors) {\r
+ o.more_colors_func = function() {\r
+ t._mceColorPicker(0, {\r
+ color : c.value,\r
+ func : function(co) {\r
+ c.setColor(co);\r
+ }\r
+ });\r
+ };\r
+ }\r
+\r
+ if (v = s.theme_advanced_background_colors)\r
+ o.colors = v;\r
+\r
+ o.title = 'advanced.backcolor_desc';\r
+ o.cmd = 'HiliteColor';\r
+ o.scope = this;\r
+\r
+ c = t.editor.controlManager.createColorSplitButton('backcolor', o);\r
+\r
+ return c;\r
+ },\r
+\r
+ renderUI : function(o) {\r
+ var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl;\r
+\r
+ n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')});\r
+\r
+ if (!DOM.boxModel)\r
+ n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'});\r
+\r
+ n = sc = DOM.add(n, 'table', {id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0});\r
+ n = tb = DOM.add(n, 'tbody');\r
+\r
+ switch ((s.theme_advanced_layout_manager || '').toLowerCase()) {\r
+ case "rowlayout":\r
+ ic = t._rowLayout(s, tb, o);\r
+ break;\r
+\r
+ case "customlayout":\r
+ ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p);\r
+ break;\r
+\r
+ default:\r
+ ic = t._simpleLayout(s, tb, o, p);\r
+ }\r
+\r
+ n = o.targetNode;\r
+\r
+ // Add classes to first and last TRs\r
+ nl = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8\r
+ DOM.addClass(nl[0], 'mceFirst');\r
+ DOM.addClass(nl[nl.length - 1], 'mceLast');\r
+\r
+ // Add classes to first and last TDs\r
+ each(DOM.select('tr', tb), function(n) {\r
+ DOM.addClass(n.firstChild, 'mceFirst');\r
+ DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast');\r
+ });\r
+\r
+ if (DOM.get(s.theme_advanced_toolbar_container))\r
+ DOM.get(s.theme_advanced_toolbar_container).appendChild(p);\r
+ else\r
+ DOM.insertAfter(p, n);\r
+\r
+ Event.add(ed.id + '_path_row', 'click', function(e) {\r
+ e = e.target;\r
+\r
+ if (e.nodeName == 'A') {\r
+ t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1'));\r
+\r
+ return Event.cancel(e);\r
+ }\r
+ });\r
+/*\r
+ if (DOM.get(ed.id + '_path_row')) {\r
+ Event.add(ed.id + '_tbl', 'mouseover', function(e) {\r
+ var re;\r
+ \r
+ e = e.target;\r
+\r
+ if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) {\r
+ re = DOM.get(ed.id + '_path_row');\r
+ t.lastPath = re.innerHTML;\r
+ DOM.setHTML(re, e.parentNode.title);\r
+ }\r
+ });\r
+\r
+ Event.add(ed.id + '_tbl', 'mouseout', function(e) {\r
+ if (t.lastPath) {\r
+ DOM.setHTML(ed.id + '_path_row', t.lastPath);\r
+ t.lastPath = 0;\r
+ }\r
+ });\r
+ }\r
+*/\r
+\r
+ if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus'))\r
+ Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});\r
+\r
+ if (s.theme_advanced_toolbar_location == 'external')\r
+ o.deltaHeight = 0;\r
+\r
+ t.deltaHeight = o.deltaHeight;\r
+ o.targetNode = null;\r
+\r
+ return {\r
+ iframeContainer : ic,\r
+ editorContainer : ed.id + '_parent',\r
+ sizeContainer : sc,\r
+ deltaHeight : o.deltaHeight\r
+ };\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Advanced theme',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ }\r
+ },\r
+\r
+ resizeBy : function(dw, dh) {\r
+ var e = DOM.get(this.editor.id + '_tbl');\r
+\r
+ this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);\r
+ },\r
+\r
+ resizeTo : function(w, h) {\r
+ var ed = this.editor, s = ed.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'), dh;\r
+\r
+ // Boundery fix box\r
+ w = Math.max(s.theme_advanced_resizing_min_width || 100, w);\r
+ h = Math.max(s.theme_advanced_resizing_min_height || 100, h);\r
+ w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);\r
+ h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);\r
+\r
+ // Calc difference between iframe and container\r
+ dh = e.clientHeight - ifr.clientHeight;\r
+\r
+ // Resize iframe and container\r
+ DOM.setStyle(ifr, 'height', h - dh);\r
+ DOM.setStyles(e, {width : w, height : h});\r
+ },\r
+\r
+ destroy : function() {\r
+ var id = this.editor.id;\r
+\r
+ Event.clear(id + '_resize');\r
+ Event.clear(id + '_path_row');\r
+ Event.clear(id + '_external_close');\r
+ },\r
+\r
+ // Internal functions\r
+\r
+ _simpleLayout : function(s, tb, o, p) {\r
+ var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c;\r
+\r
+ // Create toolbar container at top\r
+ if (lo == 'top')\r
+ t._addToolbars(tb, o);\r
+\r
+ // Create external toolbar\r
+ if (lo == 'external') {\r
+ n = c = DOM.create('div', {style : 'position:relative'});\r
+ n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'});\r
+ DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'});\r
+ n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0});\r
+ etb = DOM.add(n, 'tbody');\r
+\r
+ if (p.firstChild.className == 'mceOldBoxModel')\r
+ p.firstChild.appendChild(c);\r
+ else\r
+ p.insertBefore(c, p.firstChild);\r
+\r
+ t._addToolbars(etb, o);\r
+\r
+ ed.onMouseUp.add(function() {\r
+ var e = DOM.get(ed.id + '_external');\r
+ DOM.show(e);\r
+\r
+ DOM.hide(lastExtID);\r
+\r
+ var f = Event.add(ed.id + '_external_close', 'click', function() {\r
+ DOM.hide(ed.id + '_external');\r
+ Event.remove(ed.id + '_external_close', 'click', f);\r
+ });\r
+\r
+ DOM.show(e);\r
+ DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1);\r
+\r
+ // Fixes IE rendering bug\r
+ DOM.hide(e);\r
+ DOM.show(e);\r
+ e.style.filter = '';\r
+\r
+ lastExtID = ed.id + '_external';\r
+\r
+ e = null;\r
+ });\r
+ }\r
+\r
+ if (sl == 'top')\r
+ t._addStatusBar(tb, o);\r
+\r
+ // Create iframe container\r
+ if (!s.theme_advanced_toolbar_container) {\r
+ n = DOM.add(tb, 'tr');\r
+ n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});\r
+ }\r
+\r
+ // Create toolbar container at bottom\r
+ if (lo == 'bottom')\r
+ t._addToolbars(tb, o);\r
+\r
+ if (sl == 'bottom')\r
+ t._addStatusBar(tb, o);\r
+\r
+ return ic;\r
+ },\r
+\r
+ _rowLayout : function(s, tb, o) {\r
+ var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a;\r
+\r
+ dc = s.theme_advanced_containers_default_class || '';\r
+ da = s.theme_advanced_containers_default_align || 'center';\r
+\r
+ each(explode(s.theme_advanced_containers || ''), function(c, i) {\r
+ var v = s['theme_advanced_container_' + c] || '';\r
+\r
+ switch (c.toLowerCase()) {\r
+ case 'mceeditor':\r
+ n = DOM.add(tb, 'tr');\r
+ n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});\r
+ break;\r
+\r
+ case 'mceelementpath':\r
+ t._addStatusBar(tb, o);\r
+ break;\r
+\r
+ default:\r
+ a = s['theme_advanced_container_' + c + '_align'].toLowerCase();\r
+ a = 'mce' + t._ufirst(a);\r
+\r
+ n = DOM.add(DOM.add(tb, 'tr'), 'td', {\r
+ 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da\r
+ });\r
+\r
+ to = cf.createToolbar("toolbar" + i);\r
+ t._addControls(v, to);\r
+ DOM.setHTML(n, to.renderHTML());\r
+ o.deltaHeight -= s.theme_advanced_row_height;\r
+ }\r
+ });\r
+\r
+ return ic;\r
+ },\r
+\r
+ _addControls : function(v, tb) {\r
+ var t = this, s = t.settings, di, cf = t.editor.controlManager;\r
+\r
+ if (s.theme_advanced_disable && !t._disabled) {\r
+ di = {};\r
+\r
+ each(explode(s.theme_advanced_disable), function(v) {\r
+ di[v] = 1;\r
+ });\r
+\r
+ t._disabled = di;\r
+ } else\r
+ di = t._disabled;\r
+\r
+ each(explode(v), function(n) {\r
+ var c;\r
+\r
+ if (di && di[n])\r
+ return;\r
+\r
+ // Compatiblity with 2.x\r
+ if (n == 'tablecontrols') {\r
+ each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) {\r
+ n = t.createControl(n, cf);\r
+\r
+ if (n)\r
+ tb.add(n);\r
+ });\r
+\r
+ return;\r
+ }\r
+\r
+ c = t.createControl(n, cf);\r
+\r
+ if (c)\r
+ tb.add(c);\r
+ });\r
+ },\r
+\r
+ _addToolbars : function(c, o) {\r
+ var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a;\r
+\r
+ a = s.theme_advanced_toolbar_align.toLowerCase();\r
+ a = 'mce' + t._ufirst(a);\r
+\r
+ n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a});\r
+\r
+ if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus'))\r
+ h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));\r
+\r
+ h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '<!-- IE -->'));\r
+\r
+ // Create toolbar and add the controls\r
+ for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {\r
+ tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});\r
+\r
+ if (s['theme_advanced_buttons' + i + '_add'])\r
+ v += ',' + s['theme_advanced_buttons' + i + '_add'];\r
+\r
+ if (s['theme_advanced_buttons' + i + '_add_before'])\r
+ v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v;\r
+\r
+ t._addControls(v, tb);\r
+\r
+ //n.appendChild(n = tb.render());\r
+ h.push(tb.renderHTML());\r
+\r
+ o.deltaHeight -= s.theme_advanced_row_height;\r
+ }\r
+\r
+ h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));\r
+ DOM.setHTML(n, h.join(''));\r
+ },\r
+\r
+ _addStatusBar : function(tb, o) {\r
+ var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td;\r
+\r
+ n = DOM.add(tb, 'tr');\r
+ n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'});\r
+ n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' ');\r
+ DOM.add(n, 'a', {href : '#', accesskey : 'x'});\r
+\r
+ if (s.theme_advanced_resizing && !tinymce.isOldWebKit) {\r
+ DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'});\r
+\r
+ if (s.theme_advanced_resizing_use_cookie) {\r
+ ed.onPostRender.add(function() {\r
+ var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl');\r
+\r
+ if (!o)\r
+ return;\r
+\r
+ if (s.theme_advanced_resize_horizontal)\r
+ c.style.width = Math.max(10, o.cw) + 'px';\r
+\r
+ c.style.height = Math.max(10, o.ch) + 'px';\r
+ DOM.get(ed.id + '_ifr').style.height = Math.max(10, parseInt(o.ch) + t.deltaHeight) + 'px';\r
+ });\r
+ }\r
+\r
+ ed.onPostRender.add(function() {\r
+ Event.add(ed.id + '_resize', 'mousedown', function(e) {\r
+ var c, p, w, h, n, pa;\r
+\r
+ // Measure container\r
+ c = DOM.get(ed.id + '_tbl');\r
+ w = c.clientWidth;\r
+ h = c.clientHeight;\r
+\r
+ miw = s.theme_advanced_resizing_min_width || 100;\r
+ mih = s.theme_advanced_resizing_min_height || 100;\r
+ maw = s.theme_advanced_resizing_max_width || 0xFFFF;\r
+ mah = s.theme_advanced_resizing_max_height || 0xFFFF;\r
+\r
+ // Setup placeholder\r
+ p = DOM.add(DOM.get(ed.id + '_parent'), 'div', {'class' : 'mcePlaceHolder'});\r
+ DOM.setStyles(p, {width : w, height : h});\r
+\r
+ // Replace with placeholder\r
+ DOM.hide(c);\r
+ DOM.show(p);\r
+\r
+ // Create internal resize obj\r
+ r = {\r
+ x : e.screenX,\r
+ y : e.screenY,\r
+ w : w,\r
+ h : h,\r
+ dx : null,\r
+ dy : null\r
+ };\r
+\r
+ // Start listening\r
+ mf = Event.add(DOM.doc, 'mousemove', function(e) {\r
+ var w, h;\r
+\r
+ // Calc delta values\r
+ r.dx = e.screenX - r.x;\r
+ r.dy = e.screenY - r.y;\r
+\r
+ // Boundery fix box\r
+ w = Math.max(miw, r.w + r.dx);\r
+ h = Math.max(mih, r.h + r.dy);\r
+ w = Math.min(maw, w);\r
+ h = Math.min(mah, h);\r
+\r
+ // Resize placeholder\r
+ if (s.theme_advanced_resize_horizontal)\r
+ p.style.width = w + 'px';\r
+\r
+ p.style.height = h + 'px';\r
+\r
+ return Event.cancel(e);\r
+ });\r
+\r
+ me = Event.add(DOM.doc, 'mouseup', function(e) {\r
+ var ifr;\r
+\r
+ // Stop listening\r
+ Event.remove(DOM.doc, 'mousemove', mf);\r
+ Event.remove(DOM.doc, 'mouseup', me);\r
+\r
+ c.style.display = '';\r
+ DOM.remove(p);\r
+\r
+ if (r.dx === null)\r
+ return;\r
+\r
+ ifr = DOM.get(ed.id + '_ifr');\r
+\r
+ if (s.theme_advanced_resize_horizontal)\r
+ c.style.width = Math.max(10, r.w + r.dx) + 'px';\r
+\r
+ c.style.height = Math.max(10, r.h + r.dy) + 'px';\r
+ ifr.style.height = Math.max(10, ifr.clientHeight + r.dy) + 'px';\r
+\r
+ if (s.theme_advanced_resizing_use_cookie) {\r
+ Cookie.setHash("TinyMCE_" + ed.id + "_size", {\r
+ cw : r.w + r.dx,\r
+ ch : r.h + r.dy\r
+ });\r
+ }\r
+ });\r
+\r
+ return Event.cancel(e);\r
+ });\r
+ });\r
+ }\r
+\r
+ o.deltaHeight -= 21;\r
+ n = tb = null;\r
+ },\r
+\r
+ _nodeChanged : function(ed, cm, n, co) {\r
+ var t = this, p, de = 0, v, c, s = t.settings;\r
+\r
+ tinymce.each(t.stateControls, function(c) {\r
+ cm.setActive(c, ed.queryCommandState(t.controls[c][1]));\r
+ });\r
+\r
+ cm.setActive('visualaid', ed.hasVisual);\r
+ cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing);\r
+ cm.setDisabled('redo', !ed.undoManager.hasRedo());\r
+ cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));\r
+\r
+ p = DOM.getParent(n, 'A');\r
+ if (c = cm.get('link')) {\r
+ if (!p || !p.name) {\r
+ c.setDisabled(!p && co);\r
+ c.setActive(!!p);\r
+ }\r
+ }\r
+\r
+ if (c = cm.get('unlink')) {\r
+ c.setDisabled(!p && co);\r
+ c.setActive(!!p && !p.name);\r
+ }\r
+\r
+ if (c = cm.get('anchor')) {\r
+ c.setActive(!!p && p.name);\r
+\r
+ if (tinymce.isWebKit) {\r
+ p = DOM.getParent(n, 'IMG');\r
+ c.setActive(!!p && DOM.getAttrib(p, 'mce_name') == 'a');\r
+ }\r
+ }\r
+\r
+ p = DOM.getParent(n, 'IMG');\r
+ if (c = cm.get('image'))\r
+ c.setActive(!!p && n.className.indexOf('mceItem') == -1);\r
+\r
+ if (c = cm.get('styleselect')) {\r
+ if (n.className) {\r
+ t._importClasses();\r
+ c.select(n.className);\r
+ } else\r
+ c.select();\r
+ }\r
+\r
+ if (c = cm.get('formatselect')) {\r
+ p = DOM.getParent(n, DOM.isBlock);\r
+\r
+ if (p)\r
+ c.select(p.nodeName.toLowerCase());\r
+ }\r
+\r
+ if (c = cm.get('fontselect'))\r
+ c.select(ed.queryCommandValue('FontName'));\r
+\r
+ if (c = cm.get('fontsizeselect'))\r
+ c.select(ed.queryCommandValue('FontSize'));\r
+\r
+ if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {\r
+ p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});\r
+ DOM.setHTML(p, '');\r
+\r
+ ed.dom.getParent(n, function(n) {\r
+ var na = n.nodeName.toLowerCase(), u, pi, ti = '';\r
+\r
+ // Ignore non element and hidden elements\r
+ if (n.nodeType != 1 || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')))\r
+ return;\r
+\r
+ // Fake name\r
+ if (v = DOM.getAttrib(n, 'mce_name'))\r
+ na = v;\r
+ \r
+ // Handle prefix\r
+ if (tinymce.isIE && n.scopeName !== 'HTML')\r
+ na = n.scopeName + ':' + na;\r
+\r
+ // Remove internal prefix\r
+ na = na.replace(/mce\:/g, '');\r
+\r
+ // Handle node name\r
+ switch (na) {\r
+ case 'b':\r
+ na = 'strong';\r
+ break;\r
+\r
+ case 'i':\r
+ na = 'em';\r
+ break;\r
+\r
+ case 'img':\r
+ if (v = DOM.getAttrib(n, 'src'))\r
+ ti += 'src: ' + v + ' ';\r
+\r
+ break;\r
+\r
+ case 'a':\r
+ if (v = DOM.getAttrib(n, 'name')) {\r
+ ti += 'name: ' + v + ' ';\r
+ na += '#' + v;\r
+ }\r
+\r
+ if (v = DOM.getAttrib(n, 'href'))\r
+ ti += 'href: ' + v + ' ';\r
+\r
+ break;\r
+\r
+ case 'font':\r
+ if (s.convert_fonts_to_spans)\r
+ na = 'span';\r
+\r
+ if (v = DOM.getAttrib(n, 'face'))\r
+ ti += 'font: ' + v + ' ';\r
+\r
+ if (v = DOM.getAttrib(n, 'size'))\r
+ ti += 'size: ' + v + ' ';\r
+\r
+ if (v = DOM.getAttrib(n, 'color'))\r
+ ti += 'color: ' + v + ' ';\r
+\r
+ break;\r
+\r
+ case 'span':\r
+ if (v = DOM.getAttrib(n, 'style'))\r
+ ti += 'style: ' + v + ' ';\r
+\r
+ break;\r
+ }\r
+\r
+ if (v = DOM.getAttrib(n, 'id'))\r
+ ti += 'id: ' + v + ' ';\r
+\r
+ if (v = n.className) {\r
+ v = v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g, '');\r
+\r
+ if (v && v.indexOf('mceItem') == -1) {\r
+ ti += 'class: ' + v + ' ';\r
+\r
+ if (DOM.isBlock(n) || na == 'img' || na == 'span')\r
+ na += '.' + v;\r
+ }\r
+ }\r
+\r
+ na = na.replace(/(html:)/g, '');\r
+ na = {name : na, node : n, title : ti};\r
+ t.onResolveName.dispatch(t, na);\r
+ ti = na.title;\r
+ na = na.name;\r
+\r
+ //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');";\r
+ pi = DOM.create('a', {'href' : "javascript:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na);\r
+\r
+ if (p.hasChildNodes()) {\r
+ p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild);\r
+ p.insertBefore(pi, p.firstChild);\r
+ } else\r
+ p.appendChild(pi);\r
+ }, ed.getBody());\r
+ }\r
+ },\r
+\r
+ // Commands gets called by execCommand\r
+\r
+ _sel : function(v) {\r
+ this.editor.execCommand('mceSelectNodeDepth', false, v);\r
+ },\r
+\r
+ _mceInsertAnchor : function(ui, v) {\r
+ var ed = this.editor;\r
+\r
+ ed.windowManager.open({\r
+ url : tinymce.baseURL + '/themes/advanced/anchor.htm',\r
+ width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),\r
+ height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),\r
+ inline : true\r
+ }, {\r
+ theme_url : this.url\r
+ });\r
+ },\r
+\r
+ _mceCharMap : function() {\r
+ var ed = this.editor;\r
+\r
+ ed.windowManager.open({\r
+ url : tinymce.baseURL + '/themes/advanced/charmap.htm',\r
+ width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),\r
+ height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),\r
+ inline : true\r
+ }, {\r
+ theme_url : this.url\r
+ });\r
+ },\r
+\r
+ _mceHelp : function() {\r
+ var ed = this.editor;\r
+\r
+ ed.windowManager.open({\r
+ url : tinymce.baseURL + '/themes/advanced/about.htm',\r
+ width : 480,\r
+ height : 380,\r
+ inline : true\r
+ }, {\r
+ theme_url : this.url\r
+ });\r
+ },\r
+\r
+ _mceColorPicker : function(u, v) {\r
+ var ed = this.editor;\r
+\r
+ v = v || {};\r
+\r
+ ed.windowManager.open({\r
+ url : tinymce.baseURL + '/themes/advanced/color_picker.htm',\r
+ width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),\r
+ height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),\r
+ close_previous : false,\r
+ inline : true\r
+ }, {\r
+ input_color : v.color,\r
+ func : v.func,\r
+ theme_url : this.url\r
+ });\r
+ },\r
+\r
+ _mceCodeEditor : function(ui, val) {\r
+ var ed = this.editor;\r
+\r
+ ed.windowManager.open({\r
+ url : tinymce.baseURL + '/themes/advanced/source_editor.htm',\r
+ width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),\r
+ height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),\r
+ inline : true,\r
+ resizable : true,\r
+ maximizable : true\r
+ }, {\r
+ theme_url : this.url\r
+ });\r
+ },\r
+\r
+ _mceImage : function(ui, val) {\r
+ var ed = this.editor;\r
+\r
+ // Internal image object like a flash placeholder\r
+ if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)\r
+ return;\r
+\r
+ ed.windowManager.open({\r
+ url : tinymce.baseURL + '/themes/advanced/image.htm',\r
+ width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),\r
+ height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),\r
+ inline : true\r
+ }, {\r
+ theme_url : this.url\r
+ });\r
+ },\r
+\r
+ _mceLink : function(ui, val) {\r
+ var ed = this.editor;\r
+\r
+ ed.windowManager.open({\r
+ url : tinymce.baseURL + '/themes/advanced/link.htm',\r
+ width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),\r
+ height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),\r
+ inline : true\r
+ }, {\r
+ theme_url : this.url\r
+ });\r
+ },\r
+\r
+ _mceNewDocument : function() {\r
+ var ed = this.editor;\r
+\r
+ ed.windowManager.confirm('advanced.newdocument', function(s) {\r
+ if (s)\r
+ ed.execCommand('mceSetContent', false, '');\r
+ });\r
+ },\r
+\r
+ _mceForeColor : function() {\r
+ var t = this;\r
+\r
+ this._mceColorPicker(0, {\r
+ func : function(co) {\r
+ t.editor.execCommand('ForeColor', false, co);\r
+ }\r
+ });\r
+ },\r
+\r
+ _mceBackColor : function() {\r
+ var t = this;\r
+\r
+ this._mceColorPicker(0, {\r
+ func : function(co) {\r
+ t.editor.execCommand('HiliteColor', false, co);\r
+ }\r
+ });\r
+ },\r
+\r
+ _ufirst : function(s) {\r
+ return s.substring(0, 1).toUpperCase() + s.substring(1);\r
+ }\r
+ });\r
+\r
+ tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);\r
+}());
\ No newline at end of file
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>{$lang_insert_image_title}</title>
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
- <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
- <script language="javascript" type="text/javascript" src="jscripts/image.js"></script>
- <base target="_self" />
-</head>
-<body id="image" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
-<form onsubmit="insertImage();return false;" action="#">
- <div class="tabs">
- <ul>
- <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_insert_image_title}</a></span></li>
- </ul>
- </div>
-
- <div class="panel_wrapper">
- <div id="general_panel" class="panel current">
- <table border="0" cellpadding="4" cellspacing="0">
- <tr>
- <td nowrap="nowrap"><label for="src">{$lang_insert_image_src}</label></td>
- <td><table border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td><input id="src" name="src" type="text" value="" style="width: 200px" onchange="getImageData();" /></td>
- <td id="srcbrowsercontainer"> </td>
- </tr>
- </table></td>
- </tr>
- <!-- Image list -->
- <script language="javascript">
- if (typeof(tinyMCEImageList) != "undefined" && tinyMCEImageList.length > 0) {
- var html = "";
-
- html += '<tr><td><label for="image_list">{$lang_image_list}</label></td>';
- html += '<td><select id="image_list" name="image_list" style="width: 200px" onchange="this.form.src.value=this.options[this.selectedIndex].value;resetImageData();getImageData();">';
- html += '<option value="">---</option>';
-
- for (var i=0; i<tinyMCEImageList.length; i++)
- html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>';
-
- html += '</select></td></tr>';
-
- document.write(html);
- }
- </script>
- <!-- /Image list -->
- <tr>
- <td nowrap="nowrap"><label for="alt">{$lang_insert_image_alt}</label></td>
- <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
- </tr>
- <tr>
- <td nowrap="nowrap"><label for="align">{$lang_insert_image_align}</label></td>
- <td><select id="align" name="align">
- <option value="">{$lang_insert_image_align_default}</option>
- <option value="baseline">{$lang_insert_image_align_baseline}</option>
- <option value="top">{$lang_insert_image_align_top}</option>
- <option value="middle">{$lang_insert_image_align_middle}</option>
- <option value="bottom">{$lang_insert_image_align_bottom}</option>
- <option value="texttop">{$lang_insert_image_align_texttop}</option>
- <option value="absmiddle">{$lang_insert_image_align_absmiddle}</option>
- <option value="absbottom">{$lang_insert_image_align_absbottom}</option>
- <option value="left">{$lang_insert_image_align_left}</option>
- <option value="right">{$lang_insert_image_align_right}</option>
- </select></td>
- </tr>
- <tr>
- <td nowrap="nowrap"><label for="width">{$lang_insert_image_dimensions}</label></td>
- <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
- x
- <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
- </tr>
- <tr>
- <td nowrap="nowrap"><label for="border">{$lang_insert_image_border}</label></td>
- <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" /></td>
- </tr>
- <tr>
- <td nowrap="nowrap"><label for="vspace">{$lang_insert_image_vspace}</label></td>
- <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" /></td>
- </tr>
- <tr>
- <td nowrap="nowrap"><label for="hspace">{$lang_insert_image_hspace}</label></td>
- <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" /></td>
- </tr>
- </table>
- </div>
- </div>
-
- <div class="mceActionPanel">
- <div style="float: left">
- <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertImage();" />
- </div>
-
- <div style="float: right">
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
- </div>
- </div>
-</form>
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title>{#advanced_dlg.image_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="js/image.js"></script>\r
+ <base target="_self" />\r
+</head>\r
+<body id="image" style="display: none">\r
+<form onsubmit="ImageDialog.update();return false;" action="#">\r
+ <div class="tabs">\r
+ <ul>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>\r
+ </ul>\r
+ </div>\r
+\r
+ <div class="panel_wrapper">\r
+ <div id="general_panel" class="panel current">\r
+ <table border="0" cellpadding="4" cellspacing="0">\r
+ <tr>\r
+ <td nowrap="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>\r
+ <td><table border="0" cellspacing="0" cellpadding="0">\r
+ <tr>\r
+ <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>\r
+ <td id="srcbrowsercontainer"> </td>\r
+ </tr>\r
+ </table></td>\r
+ </tr>\r
+ <tr>\r
+ <td><label for="image_list">{#advanced_dlg.image_list}</label></td>\r
+ <td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>\r
+ </tr>\r
+ <tr>\r
+ <td nowrap="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>\r
+ <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>\r
+ </tr>\r
+ <tr>\r
+ <td nowrap="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>\r
+ <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">\r
+ <option value="">{#not_set}</option>\r
+ <option value="baseline">{#advanced_dlg.image_align_baseline}</option>\r
+ <option value="top">{#advanced_dlg.image_align_top}</option>\r
+ <option value="middle">{#advanced_dlg.image_align_middle}</option>\r
+ <option value="bottom">{#advanced_dlg.image_align_bottom}</option>\r
+ <option value="text-top">{#advanced_dlg.image_align_texttop}</option>\r
+ <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>\r
+ <option value="left">{#advanced_dlg.image_align_left}</option>\r
+ <option value="right">{#advanced_dlg.image_align_right}</option>\r
+ </select></td>\r
+ </tr>\r
+ <tr>\r
+ <td nowrap="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>\r
+ <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />\r
+ x\r
+ <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>\r
+ </tr>\r
+ <tr>\r
+ <td nowrap="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>\r
+ <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
+ </tr>\r
+ <tr>\r
+ <td nowrap="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>\r
+ <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
+ </tr>\r
+ <tr>\r
+ <td nowrap="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>\r
+ <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
+ </tr>\r
+ </table>\r
+ </div>\r
+ </div>\r
+\r
+ <div class="mceActionPanel">\r
+ <div style="float: left">\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+ </div>\r
+\r
+ <div style="float: right">\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+ </div>\r
+ </div>\r
+</form>\r
+</body>\r
+</html>\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+function init() {\r
+ var ed, tcont;\r
+\r
+ tinyMCEPopup.resizeToInnerSize();\r
+ ed = tinyMCEPopup.editor;\r
+\r
+ // Give FF some time\r
+ window.setTimeout('insertHelpIFrame();', 10);\r
+\r
+ tcont = document.getElementById('plugintablecontainer');\r
+ document.getElementById('plugins_tab').style.display = 'none';\r
+\r
+ var html = "";\r
+ html += '<table id="plugintable">';\r
+ html += '<thead>';\r
+ html += '<tr>';\r
+ html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';\r
+ html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';\r
+ html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';\r
+ html += '</tr>';\r
+ html += '</thead>';\r
+ html += '<tbody>';\r
+\r
+ tinymce.each(ed.plugins, function(p, n) {\r
+ var info;\r
+\r
+ if (!p.getInfo)\r
+ return;\r
+\r
+ html += '<tr>';\r
+\r
+ info = p.getInfo();\r
+\r
+ if (info.infourl != null && info.infourl != '')\r
+ html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';\r
+ else\r
+ html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';\r
+\r
+ if (info.authorurl != null && info.authorurl != '')\r
+ html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';\r
+ else\r
+ html += '<td width="35%">' + info.author + '</td>';\r
+\r
+ html += '<td width="15%">' + info.version + '</td>';\r
+ html += '</tr>';\r
+\r
+ document.getElementById('plugins_tab').style.display = '';\r
+\r
+ });\r
+\r
+ html += '</tbody>';\r
+ html += '</table>';\r
+\r
+ tcont.innerHTML = html;\r
+\r
+ tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;\r
+ tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;\r
+}\r
+\r
+function insertHelpIFrame() {\r
+ var html;\r
+\r
+ if (tinyMCEPopup.getParam('docs_url')) {\r
+ html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';\r
+ document.getElementById('iframecontainer').innerHTML = html;\r
+ document.getElementById('help_tab').style.display = 'block';\r
+ }\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var AnchorDialog = {\r
+ init : function(ed) {\r
+ var action, elm, f = document.forms[0];\r
+\r
+ this.editor = ed;\r
+ elm = ed.dom.getParent(ed.selection.getNode(), 'A,IMG');\r
+ v = ed.dom.getAttrib(elm, 'name');\r
+\r
+ if (v) {\r
+ this.action = 'update';\r
+ f.anchorName.value = v;\r
+ }\r
+\r
+ f.insert.value = ed.getLang(elm ? 'update' : 'insert');\r
+ },\r
+\r
+ update : function() {\r
+ var ed = this.editor;\r
+ \r
+ tinyMCEPopup.restoreSelection();\r
+\r
+ if (this.action != 'update')\r
+ ed.selection.collapse(1);\r
+\r
+ // Webkit acts weird if empty inline element is inserted so we need to use a image instead\r
+ if (tinymce.isWebKit)\r
+ ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('img', {mce_name : 'a', name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}));\r
+ else\r
+ ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}, ''));\r
+\r
+ tinyMCEPopup.close();\r
+ }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var charmap = [\r
+ [' ', ' ', true, 'no-break space'],\r
+ ['&', '&', true, 'ampersand'],\r
+ ['"', '"', true, 'quotation mark'],\r
+// finance\r
+ ['¢', '¢', true, 'cent sign'],\r
+ ['€', '€', true, 'euro sign'],\r
+ ['£', '£', true, 'pound sign'],\r
+ ['¥', '¥', true, 'yen sign'],\r
+// signs\r
+ ['©', '©', true, 'copyright sign'],\r
+ ['®', '®', true, 'registered sign'],\r
+ ['™', '™', true, 'trade mark sign'],\r
+ ['‰', '‰', true, 'per mille sign'],\r
+ ['µ', 'µ', true, 'micro sign'],\r
+ ['·', '·', true, 'middle dot'],\r
+ ['•', '•', true, 'bullet'],\r
+ ['…', '…', true, 'three dot leader'],\r
+ ['′', '′', true, 'minutes / feet'],\r
+ ['″', '″', true, 'seconds / inches'],\r
+ ['§', '§', true, 'section sign'],\r
+ ['¶', '¶', true, 'paragraph sign'],\r
+ ['ß', 'ß', true, 'sharp s / ess-zed'],\r
+// quotations\r
+ ['‹', '‹', true, 'single left-pointing angle quotation mark'],\r
+ ['›', '›', true, 'single right-pointing angle quotation mark'],\r
+ ['«', '«', true, 'left pointing guillemet'],\r
+ ['»', '»', true, 'right pointing guillemet'],\r
+ ['‘', '‘', true, 'left single quotation mark'],\r
+ ['’', '’', true, 'right single quotation mark'],\r
+ ['“', '“', true, 'left double quotation mark'],\r
+ ['”', '”', true, 'right double quotation mark'],\r
+ ['‚', '‚', true, 'single low-9 quotation mark'],\r
+ ['„', '„', true, 'double low-9 quotation mark'],\r
+ ['<', '<', true, 'less-than sign'],\r
+ ['>', '>', true, 'greater-than sign'],\r
+ ['≤', '≤', true, 'less-than or equal to'],\r
+ ['≥', '≥', true, 'greater-than or equal to'],\r
+ ['–', '–', true, 'en dash'],\r
+ ['—', '—', true, 'em dash'],\r
+ ['¯', '¯', true, 'macron'],\r
+ ['‾', '‾', true, 'overline'],\r
+ ['¤', '¤', true, 'currency sign'],\r
+ ['¦', '¦', true, 'broken bar'],\r
+ ['¨', '¨', true, 'diaeresis'],\r
+ ['¡', '¡', true, 'inverted exclamation mark'],\r
+ ['¿', '¿', true, 'turned question mark'],\r
+ ['ˆ', 'ˆ', true, 'circumflex accent'],\r
+ ['˜', '˜', true, 'small tilde'],\r
+ ['°', '°', true, 'degree sign'],\r
+ ['−', '−', true, 'minus sign'],\r
+ ['±', '±', true, 'plus-minus sign'],\r
+ ['÷', '÷', true, 'division sign'],\r
+ ['⁄', '⁄', true, 'fraction slash'],\r
+ ['×', '×', true, 'multiplication sign'],\r
+ ['¹', '¹', true, 'superscript one'],\r
+ ['²', '²', true, 'superscript two'],\r
+ ['³', '³', true, 'superscript three'],\r
+ ['¼', '¼', true, 'fraction one quarter'],\r
+ ['½', '½', true, 'fraction one half'],\r
+ ['¾', '¾', true, 'fraction three quarters'],\r
+// math / logical\r
+ ['ƒ', 'ƒ', true, 'function / florin'],\r
+ ['∫', '∫', true, 'integral'],\r
+ ['∑', '∑', true, 'n-ary sumation'],\r
+ ['∞', '∞', true, 'infinity'],\r
+ ['√', '√', true, 'square root'],\r
+ ['∼', '∼', false,'similar to'],\r
+ ['≅', '≅', false,'approximately equal to'],\r
+ ['≈', '≈', true, 'almost equal to'],\r
+ ['≠', '≠', true, 'not equal to'],\r
+ ['≡', '≡', true, 'identical to'],\r
+ ['∈', '∈', false,'element of'],\r
+ ['∉', '∉', false,'not an element of'],\r
+ ['∋', '∋', false,'contains as member'],\r
+ ['∏', '∏', true, 'n-ary product'],\r
+ ['∧', '∧', false,'logical and'],\r
+ ['∨', '∨', false,'logical or'],\r
+ ['¬', '¬', true, 'not sign'],\r
+ ['∩', '∩', true, 'intersection'],\r
+ ['∪', '∪', false,'union'],\r
+ ['∂', '∂', true, 'partial differential'],\r
+ ['∀', '∀', false,'for all'],\r
+ ['∃', '∃', false,'there exists'],\r
+ ['∅', '∅', false,'diameter'],\r
+ ['∇', '∇', false,'backward difference'],\r
+ ['∗', '∗', false,'asterisk operator'],\r
+ ['∝', '∝', false,'proportional to'],\r
+ ['∠', '∠', false,'angle'],\r
+// undefined\r
+ ['´', '´', true, 'acute accent'],\r
+ ['¸', '¸', true, 'cedilla'],\r
+ ['ª', 'ª', true, 'feminine ordinal indicator'],\r
+ ['º', 'º', true, 'masculine ordinal indicator'],\r
+ ['†', '†', true, 'dagger'],\r
+ ['‡', '‡', true, 'double dagger'],\r
+// alphabetical special chars\r
+ ['À', 'À', true, 'A - grave'],\r
+ ['Á', 'Á', true, 'A - acute'],\r
+ ['Â', 'Â', true, 'A - circumflex'],\r
+ ['Ã', 'Ã', true, 'A - tilde'],\r
+ ['Ä', 'Ä', true, 'A - diaeresis'],\r
+ ['Å', 'Å', true, 'A - ring above'],\r
+ ['Æ', 'Æ', true, 'ligature AE'],\r
+ ['Ç', 'Ç', true, 'C - cedilla'],\r
+ ['È', 'È', true, 'E - grave'],\r
+ ['É', 'É', true, 'E - acute'],\r
+ ['Ê', 'Ê', true, 'E - circumflex'],\r
+ ['Ë', 'Ë', true, 'E - diaeresis'],\r
+ ['Ì', 'Ì', true, 'I - grave'],\r
+ ['Í', 'Í', true, 'I - acute'],\r
+ ['Î', 'Î', true, 'I - circumflex'],\r
+ ['Ï', 'Ï', true, 'I - diaeresis'],\r
+ ['Ð', 'Ð', true, 'ETH'],\r
+ ['Ñ', 'Ñ', true, 'N - tilde'],\r
+ ['Ò', 'Ò', true, 'O - grave'],\r
+ ['Ó', 'Ó', true, 'O - acute'],\r
+ ['Ô', 'Ô', true, 'O - circumflex'],\r
+ ['Õ', 'Õ', true, 'O - tilde'],\r
+ ['Ö', 'Ö', true, 'O - diaeresis'],\r
+ ['Ø', 'Ø', true, 'O - slash'],\r
+ ['Œ', 'Œ', true, 'ligature OE'],\r
+ ['Š', 'Š', true, 'S - caron'],\r
+ ['Ù', 'Ù', true, 'U - grave'],\r
+ ['Ú', 'Ú', true, 'U - acute'],\r
+ ['Û', 'Û', true, 'U - circumflex'],\r
+ ['Ü', 'Ü', true, 'U - diaeresis'],\r
+ ['Ý', 'Ý', true, 'Y - acute'],\r
+ ['Ÿ', 'Ÿ', true, 'Y - diaeresis'],\r
+ ['Þ', 'Þ', true, 'THORN'],\r
+ ['à', 'à', true, 'a - grave'],\r
+ ['á', 'á', true, 'a - acute'],\r
+ ['â', 'â', true, 'a - circumflex'],\r
+ ['ã', 'ã', true, 'a - tilde'],\r
+ ['ä', 'ä', true, 'a - diaeresis'],\r
+ ['å', 'å', true, 'a - ring above'],\r
+ ['æ', 'æ', true, 'ligature ae'],\r
+ ['ç', 'ç', true, 'c - cedilla'],\r
+ ['è', 'è', true, 'e - grave'],\r
+ ['é', 'é', true, 'e - acute'],\r
+ ['ê', 'ê', true, 'e - circumflex'],\r
+ ['ë', 'ë', true, 'e - diaeresis'],\r
+ ['ì', 'ì', true, 'i - grave'],\r
+ ['í', 'í', true, 'i - acute'],\r
+ ['î', 'î', true, 'i - circumflex'],\r
+ ['ï', 'ï', true, 'i - diaeresis'],\r
+ ['ð', 'ð', true, 'eth'],\r
+ ['ñ', 'ñ', true, 'n - tilde'],\r
+ ['ò', 'ò', true, 'o - grave'],\r
+ ['ó', 'ó', true, 'o - acute'],\r
+ ['ô', 'ô', true, 'o - circumflex'],\r
+ ['õ', 'õ', true, 'o - tilde'],\r
+ ['ö', 'ö', true, 'o - diaeresis'],\r
+ ['ø', 'ø', true, 'o slash'],\r
+ ['œ', 'œ', true, 'ligature oe'],\r
+ ['š', 'š', true, 's - caron'],\r
+ ['ù', 'ù', true, 'u - grave'],\r
+ ['ú', 'ú', true, 'u - acute'],\r
+ ['û', 'û', true, 'u - circumflex'],\r
+ ['ü', 'ü', true, 'u - diaeresis'],\r
+ ['ý', 'ý', true, 'y - acute'],\r
+ ['þ', 'þ', true, 'thorn'],\r
+ ['ÿ', 'ÿ', true, 'y - diaeresis'],\r
+ ['Α', 'Α', true, 'Alpha'],\r
+ ['Β', 'Β', true, 'Beta'],\r
+ ['Γ', 'Γ', true, 'Gamma'],\r
+ ['Δ', 'Δ', true, 'Delta'],\r
+ ['Ε', 'Ε', true, 'Epsilon'],\r
+ ['Ζ', 'Ζ', true, 'Zeta'],\r
+ ['Η', 'Η', true, 'Eta'],\r
+ ['Θ', 'Θ', true, 'Theta'],\r
+ ['Ι', 'Ι', true, 'Iota'],\r
+ ['Κ', 'Κ', true, 'Kappa'],\r
+ ['Λ', 'Λ', true, 'Lambda'],\r
+ ['Μ', 'Μ', true, 'Mu'],\r
+ ['Ν', 'Ν', true, 'Nu'],\r
+ ['Ξ', 'Ξ', true, 'Xi'],\r
+ ['Ο', 'Ο', true, 'Omicron'],\r
+ ['Π', 'Π', true, 'Pi'],\r
+ ['Ρ', 'Ρ', true, 'Rho'],\r
+ ['Σ', 'Σ', true, 'Sigma'],\r
+ ['Τ', 'Τ', true, 'Tau'],\r
+ ['Υ', 'Υ', true, 'Upsilon'],\r
+ ['Φ', 'Φ', true, 'Phi'],\r
+ ['Χ', 'Χ', true, 'Chi'],\r
+ ['Ψ', 'Ψ', true, 'Psi'],\r
+ ['Ω', 'Ω', true, 'Omega'],\r
+ ['α', 'α', true, 'alpha'],\r
+ ['β', 'β', true, 'beta'],\r
+ ['γ', 'γ', true, 'gamma'],\r
+ ['δ', 'δ', true, 'delta'],\r
+ ['ε', 'ε', true, 'epsilon'],\r
+ ['ζ', 'ζ', true, 'zeta'],\r
+ ['η', 'η', true, 'eta'],\r
+ ['θ', 'θ', true, 'theta'],\r
+ ['ι', 'ι', true, 'iota'],\r
+ ['κ', 'κ', true, 'kappa'],\r
+ ['λ', 'λ', true, 'lambda'],\r
+ ['μ', 'μ', true, 'mu'],\r
+ ['ν', 'ν', true, 'nu'],\r
+ ['ξ', 'ξ', true, 'xi'],\r
+ ['ο', 'ο', true, 'omicron'],\r
+ ['π', 'π', true, 'pi'],\r
+ ['ρ', 'ρ', true, 'rho'],\r
+ ['ς', 'ς', true, 'final sigma'],\r
+ ['σ', 'σ', true, 'sigma'],\r
+ ['τ', 'τ', true, 'tau'],\r
+ ['υ', 'υ', true, 'upsilon'],\r
+ ['φ', 'φ', true, 'phi'],\r
+ ['χ', 'χ', true, 'chi'],\r
+ ['ψ', 'ψ', true, 'psi'],\r
+ ['ω', 'ω', true, 'omega'],\r
+// symbols\r
+ ['ℵ', 'ℵ', false,'alef symbol'],\r
+ ['ϖ', 'ϖ', false,'pi symbol'],\r
+ ['ℜ', 'ℜ', false,'real part symbol'],\r
+ ['ϑ','ϑ', false,'theta symbol'],\r
+ ['ϒ', 'ϒ', false,'upsilon - hook symbol'],\r
+ ['℘', '℘', false,'Weierstrass p'],\r
+ ['ℑ', 'ℑ', false,'imaginary part'],\r
+// arrows\r
+ ['←', '←', true, 'leftwards arrow'],\r
+ ['↑', '↑', true, 'upwards arrow'],\r
+ ['→', '→', true, 'rightwards arrow'],\r
+ ['↓', '↓', true, 'downwards arrow'],\r
+ ['↔', '↔', true, 'left right arrow'],\r
+ ['↵', '↵', false,'carriage return'],\r
+ ['⇐', '⇐', false,'leftwards double arrow'],\r
+ ['⇑', '⇑', false,'upwards double arrow'],\r
+ ['⇒', '⇒', false,'rightwards double arrow'],\r
+ ['⇓', '⇓', false,'downwards double arrow'],\r
+ ['⇔', '⇔', false,'left right double arrow'],\r
+ ['∴', '∴', false,'therefore'],\r
+ ['⊂', '⊂', false,'subset of'],\r
+ ['⊃', '⊃', false,'superset of'],\r
+ ['⊄', '⊄', false,'not a subset of'],\r
+ ['⊆', '⊆', false,'subset of or equal to'],\r
+ ['⊇', '⊇', false,'superset of or equal to'],\r
+ ['⊕', '⊕', false,'circled plus'],\r
+ ['⊗', '⊗', false,'circled times'],\r
+ ['⊥', '⊥', false,'perpendicular'],\r
+ ['⋅', '⋅', false,'dot operator'],\r
+ ['⌈', '⌈', false,'left ceiling'],\r
+ ['⌉', '⌉', false,'right ceiling'],\r
+ ['⌊', '⌊', false,'left floor'],\r
+ ['⌋', '⌋', false,'right floor'],\r
+ ['⟨', '〈', false,'left-pointing angle bracket'],\r
+ ['⟩', '〉', false,'right-pointing angle bracket'],\r
+ ['◊', '◊', true,'lozenge'],\r
+ ['♠', '♠', false,'black spade suit'],\r
+ ['♣', '♣', true, 'black club suit'],\r
+ ['♥', '♥', true, 'black heart suit'],\r
+ ['♦', '♦', true, 'black diamond suit'],\r
+ [' ', ' ', false,'en space'],\r
+ [' ', ' ', false,'em space'],\r
+ [' ', ' ', false,'thin space'],\r
+ ['‌', '‌', false,'zero width non-joiner'],\r
+ ['‍', '‍', false,'zero width joiner'],\r
+ ['‎', '‎', false,'left-to-right mark'],\r
+ ['‏', '‏', false,'right-to-left mark'],\r
+ ['­', '­', false,'soft hyphen']\r
+];\r
+\r
+tinyMCEPopup.onInit.add(function() {\r
+ tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());\r
+});\r
+\r
+function renderCharMapHTML() {\r
+ var charsPerRow = 20, tdWidth=20, tdHeight=20, i;\r
+ var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';\r
+ var cols=-1;\r
+\r
+ for (i=0; i<charmap.length; i++) {\r
+ if (charmap[i][2]==true) {\r
+ cols++;\r
+ html += ''\r
+ + '<td class="charmap">'\r
+ + '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'\r
+ + charmap[i][1]\r
+ + '</a></td>';\r
+ if ((cols+1) % charsPerRow == 0)\r
+ html += '</tr><tr height="' + tdHeight + '">';\r
+ }\r
+ }\r
+\r
+ if (cols % charsPerRow > 0) {\r
+ var padd = charsPerRow - (cols % charsPerRow);\r
+ for (var i=0; i<padd-1; i++)\r
+ html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap"> </td>';\r
+ }\r
+\r
+ html += '</tr></table>';\r
+\r
+ return html;\r
+}\r
+\r
+function insertChar(chr) {\r
+ tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');\r
+\r
+ // Refocus in window\r
+ if (tinyMCEPopup.isWindow)\r
+ window.focus();\r
+\r
+ tinyMCEPopup.editor.focus();\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function previewChar(codeA, codeB, codeN) {\r
+ var elmA = document.getElementById('codeA');\r
+ var elmB = document.getElementById('codeB');\r
+ var elmV = document.getElementById('codeV');\r
+ var elmN = document.getElementById('codeN');\r
+\r
+ if (codeA=='#160;') {\r
+ elmV.innerHTML = '__';\r
+ } else {\r
+ elmV.innerHTML = '&' + codeA;\r
+ }\r
+\r
+ elmB.innerHTML = '&' + codeA;\r
+ elmA.innerHTML = '&' + codeB;\r
+ elmN.innerHTML = codeN;\r
+}\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;\r
+\r
+var colors = [\r
+ "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",\r
+ "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",\r
+ "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",\r
+ "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",\r
+ "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",\r
+ "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",\r
+ "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",\r
+ "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",\r
+ "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",\r
+ "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",\r
+ "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",\r
+ "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",\r
+ "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",\r
+ "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",\r
+ "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",\r
+ "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",\r
+ "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",\r
+ "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",\r
+ "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",\r
+ "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",\r
+ "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",\r
+ "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",\r
+ "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",\r
+ "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",\r
+ "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",\r
+ "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",\r
+ "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"\r
+];\r
+\r
+var named = {\r
+ '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',\r
+ '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',\r
+ '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',\r
+ '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',\r
+ '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',\r
+ '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',\r
+ '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',\r
+ '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',\r
+ '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',\r
+ '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',\r
+ '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',\r
+ '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',\r
+ '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',\r
+ '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',\r
+ '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',\r
+ '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',\r
+ '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',\r
+ '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',\r
+ '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',\r
+ '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',\r
+ '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',\r
+ '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',\r
+ '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'\r
+};\r
+\r
+function init() {\r
+ var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));\r
+\r
+ tinyMCEPopup.resizeToInnerSize();\r
+\r
+ generatePicker();\r
+\r
+ if (inputColor) {\r
+ changeFinalColor(inputColor);\r
+\r
+ col = convertHexToRGB(inputColor);\r
+\r
+ if (col)\r
+ updateLight(col.r, col.g, col.b);\r
+ }\r
+}\r
+\r
+function insertAction() {\r
+ var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');\r
+\r
+ tinyMCEPopup.restoreSelection();\r
+\r
+ if (f)\r
+ f(color);\r
+\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function showColor(color, name) {\r
+ if (name)\r
+ document.getElementById("colorname").innerHTML = name;\r
+\r
+ document.getElementById("preview").style.backgroundColor = color;\r
+ document.getElementById("color").value = color.toLowerCase();\r
+}\r
+\r
+function convertRGBToHex(col) {\r
+ var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");\r
+\r
+ if (!col)\r
+ return col;\r
+\r
+ var rgb = col.replace(re, "$1,$2,$3").split(',');\r
+ if (rgb.length == 3) {\r
+ r = parseInt(rgb[0]).toString(16);\r
+ g = parseInt(rgb[1]).toString(16);\r
+ b = parseInt(rgb[2]).toString(16);\r
+\r
+ r = r.length == 1 ? '0' + r : r;\r
+ g = g.length == 1 ? '0' + g : g;\r
+ b = b.length == 1 ? '0' + b : b;\r
+\r
+ return "#" + r + g + b;\r
+ }\r
+\r
+ return col;\r
+}\r
+\r
+function convertHexToRGB(col) {\r
+ if (col.indexOf('#') != -1) {\r
+ col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
+\r
+ r = parseInt(col.substring(0, 2), 16);\r
+ g = parseInt(col.substring(2, 4), 16);\r
+ b = parseInt(col.substring(4, 6), 16);\r
+\r
+ return {r : r, g : g, b : b};\r
+ }\r
+\r
+ return null;\r
+}\r
+\r
+function generatePicker() {\r
+ var el = document.getElementById('light'), h = '', i;\r
+\r
+ for (i = 0; i < detail; i++){\r
+ h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'\r
+ + ' onclick="changeFinalColor(this.style.backgroundColor)"'\r
+ + ' onmousedown="isMouseDown = true; return false;"'\r
+ + ' onmouseup="isMouseDown = false;"'\r
+ + ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'\r
+ + ' onmouseover="isMouseOver = true;"'\r
+ + ' onmouseout="isMouseOver = false;"'\r
+ + '></div>';\r
+ }\r
+\r
+ el.innerHTML = h;\r
+}\r
+\r
+function generateWebColors() {\r
+ var el = document.getElementById('webcolors'), h = '', i;\r
+\r
+ if (el.className == 'generated')\r
+ return;\r
+\r
+ h += '<table border="0" cellspacing="1" cellpadding="0">'\r
+ + '<tr>';\r
+\r
+ for (i=0; i<colors.length; i++) {\r
+ h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'\r
+ + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">'\r
+ + '</a></td>';\r
+ if ((i+1) % 18 == 0)\r
+ h += '</tr><tr>';\r
+ }\r
+\r
+ h += '</table>';\r
+\r
+ el.innerHTML = h;\r
+ el.className = 'generated';\r
+}\r
+\r
+function generateNamedColors() {\r
+ var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;\r
+\r
+ if (el.className == 'generated')\r
+ return;\r
+\r
+ for (n in named) {\r
+ v = named[n];\r
+ h += '<a href="javascript:insertAction();" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '"><!-- IE --></a>'\r
+ }\r
+\r
+ el.innerHTML = h;\r
+ el.className = 'generated';\r
+}\r
+\r
+function dechex(n) {\r
+ return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);\r
+}\r
+\r
+function computeColor(e) {\r
+ var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB;\r
+\r
+ x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);\r
+ y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);\r
+\r
+ partWidth = document.getElementById('colors').width / 6;\r
+ partDetail = detail / 2;\r
+ imHeight = document.getElementById('colors').height;\r
+\r
+ r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;\r
+ g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);\r
+ b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);\r
+\r
+ coef = (imHeight - y) / imHeight;\r
+ r = 128 + (r - 128) * coef;\r
+ g = 128 + (g - 128) * coef;\r
+ b = 128 + (b - 128) * coef;\r
+\r
+ changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));\r
+ updateLight(r, g, b);\r
+}\r
+\r
+function updateLight(r, g, b) {\r
+ var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;\r
+\r
+ for (i=0; i<detail; i++) {\r
+ if ((i>=0) && (i<partDetail)) {\r
+ finalCoef = i / partDetail;\r
+ finalR = dechex(255 - (255 - r) * finalCoef);\r
+ finalG = dechex(255 - (255 - g) * finalCoef);\r
+ finalB = dechex(255 - (255 - b) * finalCoef);\r
+ } else {\r
+ finalCoef = 2 - i / partDetail;\r
+ finalR = dechex(r * finalCoef);\r
+ finalG = dechex(g * finalCoef);\r
+ finalB = dechex(b * finalCoef);\r
+ }\r
+\r
+ color = finalR + finalG + finalB;\r
+\r
+ document.getElementById('gs' + i).style.backgroundColor = '#'+color;\r
+ }\r
+}\r
+\r
+function changeFinalColor(color) {\r
+ if (color.indexOf('#') == -1)\r
+ color = convertRGBToHex(color);\r
+\r
+ document.getElementById('preview').style.backgroundColor = color;\r
+ document.getElementById('color').value = color;\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
--- /dev/null
+var ImageDialog = {\r
+ preInit : function() {\r
+ var url;\r
+\r
+ tinyMCEPopup.requireLangPack();\r
+\r
+ if (url = tinyMCEPopup.getParam("external_image_list_url"))\r
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
+ },\r
+\r
+ init : function() {\r
+ var f = document.forms[0], ed = tinyMCEPopup.editor;\r
+\r
+ // Setup browse button\r
+ document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');\r
+ if (isVisible('srcbrowser'))\r
+ document.getElementById('src').style.width = '180px';\r
+\r
+ e = ed.selection.getNode();\r
+\r
+ this.fillFileList('image_list', 'tinyMCEImageList');\r
+\r
+ if (e.nodeName == 'IMG') {\r
+ f.src.value = ed.dom.getAttrib(e, 'src');\r
+ f.alt.value = ed.dom.getAttrib(e, 'alt');\r
+ f.border.value = this.getAttrib(e, 'border');\r
+ f.vspace.value = this.getAttrib(e, 'vspace');\r
+ f.hspace.value = this.getAttrib(e, 'hspace');\r
+ f.width.value = ed.dom.getAttrib(e, 'width');\r
+ f.height.value = ed.dom.getAttrib(e, 'height');\r
+ f.insert.value = ed.getLang('update');\r
+ this.styleVal = ed.dom.getAttrib(e, 'style');\r
+ selectByValue(f, 'image_list', f.src.value);\r
+ selectByValue(f, 'align', this.getAttrib(e, 'align'));\r
+ this.updateStyle();\r
+ }\r
+ },\r
+\r
+ fillFileList : function(id, l) {\r
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
+\r
+ l = window[l];\r
+\r
+ if (l && l.length > 0) {\r
+ lst.options[lst.options.length] = new Option('', '');\r
+\r
+ tinymce.each(l, function(o) {\r
+ lst.options[lst.options.length] = new Option(o[0], o[1]);\r
+ });\r
+ } else\r
+ dom.remove(dom.getParent(id, 'tr'));\r
+ },\r
+\r
+ update : function() {\r
+ var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;\r
+\r
+ tinyMCEPopup.restoreSelection();\r
+\r
+ if (f.src.value === '') {\r
+ if (ed.selection.getNode().nodeName == 'IMG') {\r
+ ed.dom.remove(ed.selection.getNode());\r
+ ed.execCommand('mceRepaint');\r
+ }\r
+\r
+ tinyMCEPopup.close();\r
+ return;\r
+ }\r
+\r
+ if (!ed.settings.inline_styles) {\r
+ args = tinymce.extend(args, {\r
+ vspace : nl.vspace.value,\r
+ hspace : nl.hspace.value,\r
+ border : nl.border.value,\r
+ align : getSelectValue(f, 'align')\r
+ });\r
+ } else\r
+ args.style = this.styleVal;\r
+\r
+ tinymce.extend(args, {\r
+ src : f.src.value,\r
+ alt : f.alt.value,\r
+ width : f.width.value,\r
+ height : f.height.value\r
+ });\r
+\r
+ el = ed.selection.getNode();\r
+\r
+ if (el && el.nodeName == 'IMG') {\r
+ ed.dom.setAttribs(el, args);\r
+ } else {\r
+ ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" src="javascript:;" />', {skip_undo : 1});\r
+ ed.dom.setAttribs('__mce_tmp', args);\r
+ ed.dom.setAttrib('__mce_tmp', 'id', '');\r
+ ed.undoManager.add();\r
+ }\r
+\r
+ tinyMCEPopup.close();\r
+ },\r
+\r
+ updateStyle : function() {\r
+ var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];\r
+\r
+ if (tinyMCEPopup.editor.settings.inline_styles) {\r
+ st = tinyMCEPopup.dom.parseStyle(this.styleVal);\r
+\r
+ // Handle align\r
+ v = getSelectValue(f, 'align');\r
+ if (v) {\r
+ if (v == 'left' || v == 'right') {\r
+ st['float'] = v;\r
+ delete st['vertical-align'];\r
+ } else {\r
+ st['vertical-align'] = v;\r
+ delete st['float'];\r
+ }\r
+ } else {\r
+ delete st['float'];\r
+ delete st['vertical-align'];\r
+ }\r
+\r
+ // Handle border\r
+ v = f.border.value;\r
+ if (v || v == '0') {\r
+ if (v == '0')\r
+ st['border'] = '0';\r
+ else\r
+ st['border'] = v + 'px solid black';\r
+ } else\r
+ delete st['border'];\r
+\r
+ // Handle hspace\r
+ v = f.hspace.value;\r
+ if (v) {\r
+ delete st['margin'];\r
+ st['margin-left'] = v + 'px';\r
+ st['margin-right'] = v + 'px';\r
+ } else {\r
+ delete st['margin-left'];\r
+ delete st['margin-right'];\r
+ }\r
+\r
+ // Handle vspace\r
+ v = f.vspace.value;\r
+ if (v) {\r
+ delete st['margin'];\r
+ st['margin-top'] = v + 'px';\r
+ st['margin-bottom'] = v + 'px';\r
+ } else {\r
+ delete st['margin-top'];\r
+ delete st['margin-bottom'];\r
+ }\r
+\r
+ // Merge\r
+ st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st));\r
+ this.styleVal = dom.serializeStyle(st);\r
+ }\r
+ },\r
+\r
+ getAttrib : function(e, at) {\r
+ var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;\r
+\r
+ if (ed.settings.inline_styles) {\r
+ switch (at) {\r
+ case 'align':\r
+ if (v = dom.getStyle(e, 'float'))\r
+ return v;\r
+\r
+ if (v = dom.getStyle(e, 'vertical-align'))\r
+ return v;\r
+\r
+ break;\r
+\r
+ case 'hspace':\r
+ v = dom.getStyle(e, 'margin-left')\r
+ v2 = dom.getStyle(e, 'margin-right');\r
+ if (v && v == v2)\r
+ return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+ break;\r
+\r
+ case 'vspace':\r
+ v = dom.getStyle(e, 'margin-top')\r
+ v2 = dom.getStyle(e, 'margin-bottom');\r
+ if (v && v == v2)\r
+ return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+ break;\r
+\r
+ case 'border':\r
+ v = 0;\r
+\r
+ tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {\r
+ sv = dom.getStyle(e, 'border-' + sv + '-width');\r
+\r
+ // False or not the same as prev\r
+ if (!sv || (sv != v && v !== 0)) {\r
+ v = 0;\r
+ return false;\r
+ }\r
+\r
+ if (sv)\r
+ v = sv;\r
+ });\r
+\r
+ if (v)\r
+ return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (v = dom.getAttrib(e, at))\r
+ return v;\r
+\r
+ return '';\r
+ },\r
+\r
+ resetImageData : function() {\r
+ var f = document.forms[0];\r
+\r
+ f.width.value = f.height.value = ""; \r
+ },\r
+\r
+ updateImageData : function() {\r
+ var f = document.forms[0], t = ImageDialog;\r
+\r
+ if (f.width.value == "")\r
+ f.width.value = t.preloadImg.width;\r
+\r
+ if (f.height.value == "")\r
+ f.height.value = t.preloadImg.height;\r
+ },\r
+\r
+ getImageData : function() {\r
+ var f = document.forms[0];\r
+\r
+ this.preloadImg = new Image();\r
+ this.preloadImg.onload = this.updateImageData;\r
+ this.preloadImg.onerror = this.resetImageData;\r
+ this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);\r
+ }\r
+};\r
+\r
+ImageDialog.preInit();\r
+tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+\r
+var LinkDialog = {\r
+ preInit : function() {\r
+ var url;\r
+\r
+ if (url = tinyMCEPopup.getParam("external_link_list_url"))\r
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
+ },\r
+\r
+ init : function() {\r
+ var f = document.forms[0], ed = tinyMCEPopup.editor;\r
+\r
+ // Setup browse button\r
+ document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');\r
+ if (isVisible('hrefbrowser'))\r
+ document.getElementById('href').style.width = '180px';\r
+\r
+ this.fillClassList('class_list');\r
+ this.fillFileList('link_list', 'tinyMCELinkList');\r
+ this.fillTargetList('target_list');\r
+\r
+ if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {\r
+ f.href.value = ed.dom.getAttrib(e, 'href');\r
+ f.linktitle.value = ed.dom.getAttrib(e, 'title');\r
+ f.insert.value = ed.getLang('update');\r
+ selectByValue(f, 'link_list', f.href.value);\r
+ selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));\r
+ selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));\r
+ }\r
+ },\r
+\r
+ update : function() {\r
+ var f = document.forms[0], ed = tinyMCEPopup.editor, e, b;\r
+\r
+ tinyMCEPopup.restoreSelection();\r
+\r
+ // Remove element if there is no href\r
+ if (!f.href.value) {\r
+ e = ed.dom.getParent(ed.selection.getNode(), 'A');\r
+ if (e) {\r
+ tinyMCEPopup.execCommand("mceBeginUndoLevel");\r
+ b = ed.selection.getBookmark();\r
+ ed.dom.remove(e, 1);\r
+ ed.selection.moveToBookmark(b);\r
+ tinyMCEPopup.execCommand("mceEndUndoLevel");\r
+ tinyMCEPopup.close();\r
+ return;\r
+ }\r
+ }\r
+\r
+ ed.execCommand('mceInsertLink', false, {\r
+ href : f.href.value,\r
+ title : f.linktitle.value,\r
+ target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null,\r
+ 'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null\r
+ });\r
+\r
+ tinyMCEPopup.close();\r
+ },\r
+\r
+ checkPrefix : function(n) {\r
+ if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))\r
+ n.value = 'mailto:' + n.value;\r
+\r
+ if (/^\s*www./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))\r
+ n.value = 'http://' + n.value;\r
+ },\r
+\r
+ fillFileList : function(id, l) {\r
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
+\r
+ l = window[l];\r
+\r
+ if (l && l.length > 0) {\r
+ lst.options[lst.options.length] = new Option('', '');\r
+\r
+ tinymce.each(l, function(o) {\r
+ lst.options[lst.options.length] = new Option(o[0], o[1]);\r
+ });\r
+ } else\r
+ dom.remove(dom.getParent(id, 'tr'));\r
+ },\r
+\r
+ fillClassList : function(id) {\r
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
+\r
+ if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {\r
+ cl = [];\r
+\r
+ tinymce.each(v.split(';'), function(v) {\r
+ var p = v.split('=');\r
+\r
+ cl.push({'title' : p[0], 'class' : p[1]});\r
+ });\r
+ } else\r
+ cl = tinyMCEPopup.editor.dom.getClasses();\r
+\r
+ if (cl.length > 0) {\r
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
+\r
+ tinymce.each(cl, function(o) {\r
+ lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);\r
+ });\r
+ } else\r
+ dom.remove(dom.getParent(id, 'tr'));\r
+ },\r
+\r
+ fillTargetList : function(id) {\r
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v;\r
+\r
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');\r
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');\r
+\r
+ if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {\r
+ tinymce.each(v.split(','), function(v) {\r
+ v = v.split('=');\r
+ lst.options[lst.options.length] = new Option(v[0], v[1]);\r
+ });\r
+ }\r
+ }\r
+};\r
+\r
+LinkDialog.preInit();\r
+tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);\r
--- /dev/null
+tinyMCEPopup.requireLangPack();\r
+tinyMCEPopup.onInit.add(onLoadInit);\r
+\r
+function saveContent() {\r
+ tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value);\r
+ tinyMCEPopup.close();\r
+}\r
+\r
+function onLoadInit() {\r
+ tinyMCEPopup.resizeToInnerSize();\r
+\r
+ // Remove Gecko spellchecking\r
+ if (tinymce.isGecko)\r
+ document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");\r
+\r
+ document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent();\r
+\r
+ if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {\r
+ setWrap('soft');\r
+ document.getElementById('wraped').checked = true;\r
+ }\r
+\r
+ resizeInputs();\r
+}\r
+\r
+function setWrap(val) {\r
+ var v, n, s = document.getElementById('htmlSource');\r
+\r
+ s.wrap = val;\r
+\r
+ if (!tinymce.isIE) {\r
+ v = s.value;\r
+ n = s.cloneNode(false);\r
+ n.setAttribute("wrap", val);\r
+ s.parentNode.replaceChild(n, s);\r
+ n.value = v;\r
+ }\r
+}\r
+\r
+function toggleWordWrap(elm) {\r
+ if (elm.checked)\r
+ setWrap('soft');\r
+ else\r
+ setWrap('off');\r
+}\r
+\r
+var wHeight=0, wWidth=0, owHeight=0, owWidth=0;\r
+\r
+function resizeInputs() {\r
+ var el = document.getElementById('htmlSource');\r
+\r
+ if (!tinymce.isIE) {\r
+ wHeight = self.innerHeight - 65;\r
+ wWidth = self.innerWidth - 16;\r
+ } else {\r
+ wHeight = document.body.clientHeight - 70;\r
+ wWidth = document.body.clientWidth - 16;\r
+ }\r
+\r
+ el.style.height = Math.abs(wHeight) + 'px';\r
+ el.style.width = Math.abs(wWidth) + 'px';\r
+}\r
+++ /dev/null
-function init() {\r
- var inst;\r
-\r
- tinyMCEPopup.resizeToInnerSize();\r
- inst = tinyMCE.selectedInstance;\r
-\r
- // Give FF some time\r
- window.setTimeout('insertHelpIFrame();', 10);\r
-\r
- var tcont = document.getElementById('plugintablecontainer');\r
- var plugins = tinyMCE.getParam('plugins', '', true, ',');\r
- if (plugins.length == 0)\r
- document.getElementById('plugins_tab').style.display = 'none';\r
-\r
- var html = "";\r
- html += '<table id="plugintable">';\r
- html += '<thead>';\r
- html += '<tr>';\r
- html += '<td>' + tinyMCE.getLang('lang_plugin') + '</td>';\r
- html += '<td>' + tinyMCE.getLang('lang_author') + '</td>';\r
- html += '<td>' + tinyMCE.getLang('lang_version') + '</td>';\r
- html += '</tr>';\r
- html += '</thead>';\r
- html += '<tbody>';\r
-\r
- for (var i=0; i<inst.plugins.length; i++) {\r
- var info = getPluginInfo(inst.plugins[i]);\r
-\r
- html += '<tr>';\r
-\r
- if (info.infourl != null && info.infourl != '')\r
- html += '<td width="50%" title="' + plugins[i] + '"><a href="' + info.infourl + '" target="mceplugin">' + info.longname + '</a></td>';\r
- else\r
- html += '<td width="50%" title="' + plugins[i] + '">' + info.longname + '</td>';\r
-\r
- if (info.authorurl != null && info.authorurl != '')\r
- html += '<td width="35%"><a href="' + info.authorurl + '" target="mceplugin">' + info.author + '</a></td>';\r
- else\r
- html += '<td width="35%">' + info.author + '</td>';\r
-\r
- html += '<td width="15%">' + info.version + '</td>';\r
- html += '</tr>';\r
- }\r
-\r
- html += '</tbody>';\r
- html += '</table>';\r
-\r
- tcont.innerHTML = html;\r
-}\r
-\r
-function getPluginInfo(name) {\r
- if (tinyMCE.plugins[name].getInfo)\r
- return tinyMCE.plugins[name].getInfo();\r
-\r
- return {\r
- longname : name,\r
- authorurl : '',\r
- infourl : '',\r
- author : '--',\r
- version : '--'\r
- };\r
-}\r
-\r
-function insertHelpIFrame() {\r
- var html = '<iframe width="100%" height="300" src="' + tinyMCE.themeURL + "/docs/" + tinyMCE.settings['docs_language'] + "/index.htm" + '"></iframe>';\r
-\r
- document.getElementById('iframecontainer').innerHTML = html;\r
-\r
- html = '';\r
- html += '<a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a> ';\r
- html += '<a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a> ';\r
- html += '<a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a> ';\r
-\r
- document.getElementById('buttoncontainer').innerHTML = html;\r
-}\r
+++ /dev/null
-var action, element;\r
-\r
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));\r
- var anchor = tinyMCE.getParentElement(inst.getFocusElement(), "a", "name");\r
- var img = inst.getFocusElement();\r
- action = 'insert';\r
-\r
- if (anchor != null) {\r
- element = anchor;\r
- action = "update";\r
- }\r
-\r
- if (tinyMCE.getAttrib(img, "class") == "mceItemAnchor") {\r
- element = img;\r
- action = "update";\r
- }\r
-\r
- if (action == "update")\r
- document.forms[0].anchorName.value = element.nodeName == "IMG" ? element.getAttribute("title") : element.getAttribute("name");\r
-\r
- document.forms[0].insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true);\r
-}\r
-\r
-function insertAnchor() {\r
- var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));\r
- var name = document.forms[0].anchorName.value, e;\r
-\r
- tinyMCEPopup.execCommand("mceBeginUndoLevel");\r
-\r
- if (action == "update") {\r
- if (element.nodeName == "IMG")\r
- element.setAttribute("title", name);\r
- else\r
- element.setAttribute("name", name);\r
- } else {\r
- var rng = inst.getRng();\r
-\r
- if (rng.collapse)\r
- rng.collapse(false);\r
-\r
- name = name.replace(/&/g, '&');\r
- name = name.replace(/\"/g, '"');\r
- name = name.replace(/</g, '<');\r
- name = name.replace(/>/g, '>');\r
-\r
- // Fix for bug #1447335\r
- if (tinyMCE.isGecko)\r
- html = '<a id="mceNewAnchor" name="' + name + '"></a>';\r
- else\r
- html = '<a name="' + name + '"></a>';\r
-\r
- tinyMCEPopup.execCommand("mceInsertContent", false, html);\r
-\r
- // Fix for bug #1447335 force cursor after the anchor element\r
- if (tinyMCE.isGecko) {\r
- e = inst.getDoc().getElementById('mceNewAnchor');\r
-\r
- if (e) {\r
- inst.selection.selectNode(e, true, false, false);\r
- e.removeAttribute('id');\r
- }\r
- }\r
-\r
- tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);\r
- }\r
-\r
- tinyMCEPopup.execCommand("mceEndUndoLevel");\r
-\r
- tinyMCE.triggerNodeChange();\r
- tinyMCEPopup.close();\r
-}\r
+++ /dev/null
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-}\r
-\r
-var charmap = new Array();\r
-\r
-// for mor details please see w3c.org\r
-// now here is the complete list ;)\r
-\r
-charmap = [\r
- [' ', ' ', true, 'no-break space'],\r
- ['&', '&', true, 'ampersand'],\r
- ['"', '"', true, 'quotation mark'],\r
-// finance\r
- ['¢', '¢', true, 'cent sign'],\r
- ['€', '€', true, 'euro sign'],\r
- ['£', '£', true, 'pound sign'],\r
- ['¥', '¥', true, 'yen sign'],\r
-// signs\r
- ['©', '©', true, 'copyright sign'],\r
- ['®', '®', true, 'registered sign'],\r
- ['™', '™', true, 'trade mark sign'],\r
- ['‰', '‰', true, 'per mille sign'],\r
- ['µ', 'µ', true, 'micro sign'],\r
- ['·', '·', true, 'middle dot'],\r
- ['•', '•', true, 'bullet'],\r
- ['…', '…', true, 'three dot leader'],\r
- ['′', '′', true, 'minutes / feet'],\r
- ['″', '″', true, 'seconds / inches'],\r
- ['§', '§', true, 'section sign'],\r
- ['¶', '¶', true, 'paragraph sign'],\r
- ['ß', 'ß', true, 'sharp s / ess-zed'],\r
-// quotations\r
- ['‹', '‹', true, 'single left-pointing angle quotation mark'],\r
- ['›', '›', true, 'single right-pointing angle quotation mark'],\r
- ['«', '«', true, 'left pointing guillemet'],\r
- ['»', '»', true, 'right pointing guillemet'],\r
- ['‘', '‘', true, 'left single quotation mark'],\r
- ['’', '’', true, 'right single quotation mark'],\r
- ['“', '“', true, 'left double quotation mark'],\r
- ['”', '”', true, 'right double quotation mark'],\r
- ['‚', '‚', true, 'single low-9 quotation mark'],\r
- ['„', '„', true, 'double low-9 quotation mark'],\r
- ['<', '<', true, 'less-than sign'],\r
- ['>', '>', true, 'greater-than sign'],\r
- ['≤', '≤', true, 'less-than or equal to'],\r
- ['≥', '≥', true, 'greater-than or equal to'],\r
- ['–', '–', true, 'en dash'],\r
- ['—', '—', true, 'em dash'],\r
- ['¯', '¯', true, 'macron'],\r
- ['‾', '‾', true, 'overline'],\r
- ['¤', '¤', true, 'currency sign'],\r
- ['¦', '¦', true, 'broken bar'],\r
- ['¨', '¨', true, 'diaeresis'],\r
- ['¡', '¡', true, 'inverted exclamation mark'],\r
- ['¿', '¿', true, 'turned question mark'],\r
- ['ˆ', 'ˆ', true, 'circumflex accent'],\r
- ['˜', '˜', true, 'small tilde'],\r
- ['°', '°', true, 'degree sign'],\r
- ['−', '−', true, 'minus sign'],\r
- ['±', '±', true, 'plus-minus sign'],\r
- ['÷', '÷', true, 'division sign'],\r
- ['⁄', '⁄', true, 'fraction slash'],\r
- ['×', '×', true, 'multiplication sign'],\r
- ['¹', '¹', true, 'superscript one'],\r
- ['²', '²', true, 'superscript two'],\r
- ['³', '³', true, 'superscript three'],\r
- ['¼', '¼', true, 'fraction one quarter'],\r
- ['½', '½', true, 'fraction one half'],\r
- ['¾', '¾', true, 'fraction three quarters'],\r
-// math / logical\r
- ['ƒ', 'ƒ', true, 'function / florin'],\r
- ['∫', '∫', true, 'integral'],\r
- ['∑', '∑', true, 'n-ary sumation'],\r
- ['∞', '∞', true, 'infinity'],\r
- ['√', '√', true, 'square root'],\r
- ['∼', '∼', false,'similar to'],\r
- ['≅', '≅', false,'approximately equal to'],\r
- ['≈', '≈', true, 'almost equal to'],\r
- ['≠', '≠', true, 'not equal to'],\r
- ['≡', '≡', true, 'identical to'],\r
- ['∈', '∈', false,'element of'],\r
- ['∉', '∉', false,'not an element of'],\r
- ['∋', '∋', false,'contains as member'],\r
- ['∏', '∏', true, 'n-ary product'],\r
- ['∧', '∧', false,'logical and'],\r
- ['∨', '∨', false,'logical or'],\r
- ['¬', '¬', true, 'not sign'],\r
- ['∩', '∩', true, 'intersection'],\r
- ['∪', '∪', false,'union'],\r
- ['∂', '∂', true, 'partial differential'],\r
- ['∀', '∀', false,'for all'],\r
- ['∃', '∃', false,'there exists'],\r
- ['∅', '∅', false,'diameter'],\r
- ['∇', '∇', false,'backward difference'],\r
- ['∗', '∗', false,'asterisk operator'],\r
- ['∝', '∝', false,'proportional to'],\r
- ['∠', '∠', false,'angle'],\r
-// undefined\r
- ['´', '´', true, 'acute accent'],\r
- ['¸', '¸', true, 'cedilla'],\r
- ['ª', 'ª', true, 'feminine ordinal indicator'],\r
- ['º', 'º', true, 'masculine ordinal indicator'],\r
- ['†', '†', true, 'dagger'],\r
- ['‡', '‡', true, 'double dagger'],\r
-// alphabetical special chars\r
- ['À', 'À', true, 'A - grave'],\r
- ['Á', 'Á', true, 'A - acute'],\r
- ['Â', 'Â', true, 'A - circumflex'],\r
- ['Ã', 'Ã', true, 'A - tilde'],\r
- ['Ä', 'Ä', true, 'A - diaeresis'],\r
- ['Å', 'Å', true, 'A - ring above'],\r
- ['Æ', 'Æ', true, 'ligature AE'],\r
- ['Ç', 'Ç', true, 'C - cedilla'],\r
- ['È', 'È', true, 'E - grave'],\r
- ['É', 'É', true, 'E - acute'],\r
- ['Ê', 'Ê', true, 'E - circumflex'],\r
- ['Ë', 'Ë', true, 'E - diaeresis'],\r
- ['Ì', 'Ì', true, 'I - grave'],\r
- ['Í', 'Í', true, 'I - acute'],\r
- ['Î', 'Î', true, 'I - circumflex'],\r
- ['Ï', 'Ï', true, 'I - diaeresis'],\r
- ['Ð', 'Ð', true, 'ETH'],\r
- ['Ñ', 'Ñ', true, 'N - tilde'],\r
- ['Ò', 'Ò', true, 'O - grave'],\r
- ['Ó', 'Ó', true, 'O - acute'],\r
- ['Ô', 'Ô', true, 'O - circumflex'],\r
- ['Õ', 'Õ', true, 'O - tilde'],\r
- ['Ö', 'Ö', true, 'O - diaeresis'],\r
- ['Ø', 'Ø', true, 'O - slash'],\r
- ['Œ', 'Œ', true, 'ligature OE'],\r
- ['Š', 'Š', true, 'S - caron'],\r
- ['Ù', 'Ù', true, 'U - grave'],\r
- ['Ú', 'Ú', true, 'U - acute'],\r
- ['Û', 'Û', true, 'U - circumflex'],\r
- ['Ü', 'Ü', true, 'U - diaeresis'],\r
- ['Ý', 'Ý', true, 'Y - acute'],\r
- ['Ÿ', 'Ÿ', true, 'Y - diaeresis'],\r
- ['Þ', 'Þ', true, 'THORN'],\r
- ['à', 'à', true, 'a - grave'],\r
- ['á', 'á', true, 'a - acute'],\r
- ['â', 'â', true, 'a - circumflex'],\r
- ['ã', 'ã', true, 'a - tilde'],\r
- ['ä', 'ä', true, 'a - diaeresis'],\r
- ['å', 'å', true, 'a - ring above'],\r
- ['æ', 'æ', true, 'ligature ae'],\r
- ['ç', 'ç', true, 'c - cedilla'],\r
- ['è', 'è', true, 'e - grave'],\r
- ['é', 'é', true, 'e - acute'],\r
- ['ê', 'ê', true, 'e - circumflex'],\r
- ['ë', 'ë', true, 'e - diaeresis'],\r
- ['ì', 'ì', true, 'i - grave'],\r
- ['í', 'í', true, 'i - acute'],\r
- ['î', 'î', true, 'i - circumflex'],\r
- ['ï', 'ï', true, 'i - diaeresis'],\r
- ['ð', 'ð', true, 'eth'],\r
- ['ñ', 'ñ', true, 'n - tilde'],\r
- ['ò', 'ò', true, 'o - grave'],\r
- ['ó', 'ó', true, 'o - acute'],\r
- ['ô', 'ô', true, 'o - circumflex'],\r
- ['õ', 'õ', true, 'o - tilde'],\r
- ['ö', 'ö', true, 'o - diaeresis'],\r
- ['ø', 'ø', true, 'o slash'],\r
- ['œ', 'œ', true, 'ligature oe'],\r
- ['š', 'š', true, 's - caron'],\r
- ['ù', 'ù', true, 'u - grave'],\r
- ['ú', 'ú', true, 'u - acute'],\r
- ['û', 'û', true, 'u - circumflex'],\r
- ['ü', 'ü', true, 'u - diaeresis'],\r
- ['ý', 'ý', true, 'y - acute'],\r
- ['þ', 'þ', true, 'thorn'],\r
- ['ÿ', 'ÿ', true, 'y - diaeresis'],\r
- ['Α', 'Α', true, 'Alpha'],\r
- ['Β', 'Β', true, 'Beta'],\r
- ['Γ', 'Γ', true, 'Gamma'],\r
- ['Δ', 'Δ', true, 'Delta'],\r
- ['Ε', 'Ε', true, 'Epsilon'],\r
- ['Ζ', 'Ζ', true, 'Zeta'],\r
- ['Η', 'Η', true, 'Eta'],\r
- ['Θ', 'Θ', true, 'Theta'],\r
- ['Ι', 'Ι', true, 'Iota'],\r
- ['Κ', 'Κ', true, 'Kappa'],\r
- ['Λ', 'Λ', true, 'Lambda'],\r
- ['Μ', 'Μ', true, 'Mu'],\r
- ['Ν', 'Ν', true, 'Nu'],\r
- ['Ξ', 'Ξ', true, 'Xi'],\r
- ['Ο', 'Ο', true, 'Omicron'],\r
- ['Π', 'Π', true, 'Pi'],\r
- ['Ρ', 'Ρ', true, 'Rho'],\r
- ['Σ', 'Σ', true, 'Sigma'],\r
- ['Τ', 'Τ', true, 'Tau'],\r
- ['Υ', 'Υ', true, 'Upsilon'],\r
- ['Φ', 'Φ', true, 'Phi'],\r
- ['Χ', 'Χ', true, 'Chi'],\r
- ['Ψ', 'Ψ', true, 'Psi'],\r
- ['Ω', 'Ω', true, 'Omega'],\r
- ['α', 'α', true, 'alpha'],\r
- ['β', 'β', true, 'beta'],\r
- ['γ', 'γ', true, 'gamma'],\r
- ['δ', 'δ', true, 'delta'],\r
- ['ε', 'ε', true, 'epsilon'],\r
- ['ζ', 'ζ', true, 'zeta'],\r
- ['η', 'η', true, 'eta'],\r
- ['θ', 'θ', true, 'theta'],\r
- ['ι', 'ι', true, 'iota'],\r
- ['κ', 'κ', true, 'kappa'],\r
- ['λ', 'λ', true, 'lambda'],\r
- ['μ', 'μ', true, 'mu'],\r
- ['ν', 'ν', true, 'nu'],\r
- ['ξ', 'ξ', true, 'xi'],\r
- ['ο', 'ο', true, 'omicron'],\r
- ['π', 'π', true, 'pi'],\r
- ['ρ', 'ρ', true, 'rho'],\r
- ['ς', 'ς', true, 'final sigma'],\r
- ['σ', 'σ', true, 'sigma'],\r
- ['τ', 'τ', true, 'tau'],\r
- ['υ', 'υ', true, 'upsilon'],\r
- ['φ', 'φ', true, 'phi'],\r
- ['χ', 'χ', true, 'chi'],\r
- ['ψ', 'ψ', true, 'psi'],\r
- ['ω', 'ω', true, 'omega'],\r
-// symbols\r
- ['ℵ', 'ℵ', false,'alef symbol'],\r
- ['ϖ', 'ϖ', false,'pi symbol'],\r
- ['ℜ', 'ℜ', false,'real part symbol'],\r
- ['ϑ','ϑ', false,'theta symbol'],\r
- ['ϒ', 'ϒ', false,'upsilon - hook symbol'],\r
- ['℘', '℘', false,'Weierstrass p'],\r
- ['ℑ', 'ℑ', false,'imaginary part'],\r
-// arrows\r
- ['←', '←', true, 'leftwards arrow'],\r
- ['↑', '↑', true, 'upwards arrow'],\r
- ['→', '→', true, 'rightwards arrow'],\r
- ['↓', '↓', true, 'downwards arrow'],\r
- ['↔', '↔', true, 'left right arrow'],\r
- ['↵', '↵', false,'carriage return'],\r
- ['⇐', '⇐', false,'leftwards double arrow'],\r
- ['⇑', '⇑', false,'upwards double arrow'],\r
- ['⇒', '⇒', false,'rightwards double arrow'],\r
- ['⇓', '⇓', false,'downwards double arrow'],\r
- ['⇔', '⇔', false,'left right double arrow'],\r
- ['∴', '∴', false,'therefore'],\r
- ['⊂', '⊂', false,'subset of'],\r
- ['⊃', '⊃', false,'superset of'],\r
- ['⊄', '⊄', false,'not a subset of'],\r
- ['⊆', '⊆', false,'subset of or equal to'],\r
- ['⊇', '⊇', false,'superset of or equal to'],\r
- ['⊕', '⊕', false,'circled plus'],\r
- ['⊗', '⊗', false,'circled times'],\r
- ['⊥', '⊥', false,'perpendicular'],\r
- ['⋅', '⋅', false,'dot operator'],\r
- ['⌈', '⌈', false,'left ceiling'],\r
- ['⌉', '⌉', false,'right ceiling'],\r
- ['⌊', '⌊', false,'left floor'],\r
- ['⌋', '⌋', false,'right floor'],\r
- ['⟨', '〈', false,'left-pointing angle bracket'],\r
- ['⟩', '〉', false,'right-pointing angle bracket'],\r
- ['◊', '◊', true,'lozenge'],\r
- ['♠', '♠', false,'black spade suit'],\r
- ['♣', '♣', true, 'black club suit'],\r
- ['♥', '♥', true, 'black heart suit'],\r
- ['♦', '♦', true, 'black diamond suit'],\r
- [' ', ' ', false,'en space'],\r
- [' ', ' ', false,'em space'],\r
- [' ', ' ', false,'thin space'],\r
- ['‌', '‌', false,'zero width non-joiner'],\r
- ['‍', '‍', false,'zero width joiner'],\r
- ['‎', '‎', false,'left-to-right mark'],\r
- ['‏', '‏', false,'right-to-left mark'],\r
- ['­', '­', false,'soft hyphen']\r
-];\r
-\r
-function renderCharMapHTML() {\r
- var charsPerRow = 20, tdWidth=20, tdHeight=20;\r
- var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';\r
- var cols=-1;\r
- for (var i=0; i<charmap.length; i++) {\r
- if (charmap[i][2]==true) {\r
- cols++;\r
- html += ''\r
- + '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap"'\r
- + ' onmouseover="this.className=\'charmapOver\';'\r
- + 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');"'\r
- + ' onmouseout="this.className=\'charmap\';"'\r
- + ' nowrap="nowrap" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');"><a style="text-decoration: none;" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'\r
- + charmap[i][1]\r
- + '</a></td>';\r
- if ((cols+1) % charsPerRow == 0)\r
- html += '</tr><tr height="' + tdHeight + '">';\r
- }\r
- }\r
- if (cols % charsPerRow > 0) {\r
- var padd = charsPerRow - (cols % charsPerRow);\r
- for (var i=0; i<padd-1; i++)\r
- html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap"> </td>';\r
- }\r
- html += '</tr></table>';\r
- document.write(html);\r
-}\r
-\r
-function insertChar(chr) {\r
- tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');\r
-\r
- // Refocus in window\r
- if (tinyMCEPopup.isWindow)\r
- window.focus();\r
-\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function previewChar(codeA, codeB, codeN) {\r
- var elmA = document.getElementById('codeA');\r
- var elmB = document.getElementById('codeB');\r
- var elmV = document.getElementById('codeV');\r
- var elmN = document.getElementById('codeN');\r
-\r
- if (codeA=='#160;') {\r
- elmV.innerHTML = '__';\r
- } else {\r
- elmV.innerHTML = '&' + codeA;\r
- }\r
-\r
- elmB.innerHTML = '&' + codeA;\r
- elmA.innerHTML = '&' + codeB;\r
- elmN.innerHTML = codeN;\r
-}\r
+++ /dev/null
-var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;\r
-\r
-var colors = new Array(\r
- "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",\r
- "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",\r
- "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",\r
- "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",\r
- "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",\r
- "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",\r
- "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",\r
- "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",\r
- "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",\r
- "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",\r
- "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",\r
- "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",\r
- "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",\r
- "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",\r
- "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",\r
- "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",\r
- "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",\r
- "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",\r
- "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",\r
- "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",\r
- "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",\r
- "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",\r
- "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",\r
- "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",\r
- "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",\r
- "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",\r
- "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"\r
-);\r
-\r
-var named = {\r
- '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',\r
- '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',\r
- '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',\r
- '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',\r
- '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',\r
- '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',\r
- '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',\r
- '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',\r
- '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',\r
- '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',\r
- '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',\r
- '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',\r
- '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',\r
- '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',\r
- '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',\r
- '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',\r
- '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',\r
- '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',\r
- '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',\r
- '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',\r
- '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',\r
- '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',\r
- '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'\r
-};\r
-\r
-function init() {\r
- var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color'));\r
-\r
- if (tinyMCE.isMSIE)\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- generatePicker();\r
-\r
- if (inputColor) {\r
- changeFinalColor(inputColor);\r
-\r
- col = convertHexToRGB(inputColor);\r
-\r
- if (col)\r
- updateLight(col.r, col.g, col.b);\r
- }\r
-}\r
-\r
-function insertAction() {\r
- var color = document.getElementById("color").value;\r
-\r
- tinyMCEPopup.execCommand(tinyMCE.getWindowArg('command'), false, color);\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function showColor(color, name) {\r
- if (name)\r
- document.getElementById("colorname").innerHTML = name;\r
-\r
- document.getElementById("preview").style.backgroundColor = color;\r
- document.getElementById("color").value = color;\r
-}\r
-\r
-function convertRGBToHex(col) {\r
- var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");\r
-\r
- if (!col)\r
- return col;\r
-\r
- var rgb = col.replace(re, "$1,$2,$3").split(',');\r
- if (rgb.length == 3) {\r
- r = parseInt(rgb[0]).toString(16);\r
- g = parseInt(rgb[1]).toString(16);\r
- b = parseInt(rgb[2]).toString(16);\r
-\r
- r = r.length == 1 ? '0' + r : r;\r
- g = g.length == 1 ? '0' + g : g;\r
- b = b.length == 1 ? '0' + b : b;\r
-\r
- return "#" + r + g + b;\r
- }\r
-\r
- return col;\r
-}\r
-\r
-function convertHexToRGB(col) {\r
- if (col.indexOf('#') != -1) {\r
- col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
-\r
- r = parseInt(col.substring(0, 2), 16);\r
- g = parseInt(col.substring(2, 4), 16);\r
- b = parseInt(col.substring(4, 6), 16);\r
-\r
- return {r : r, g : g, b : b};\r
- }\r
-\r
- return null;\r
-}\r
-\r
-function generatePicker() {\r
- var el = document.getElementById('light'), h = '', i;\r
-\r
- for (i = 0; i < detail; i++){\r
- h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'\r
- + ' onclick="changeFinalColor(this.style.backgroundColor)"'\r
- + ' onmousedown="isMouseDown = true; return false;"'\r
- + ' onmouseup="isMouseDown = false;"'\r
- + ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'\r
- + ' onmouseover="isMouseOver = true;"'\r
- + ' onmouseout="isMouseOver = false;"'\r
- + '></div>';\r
- }\r
-\r
- el.innerHTML = h;\r
-}\r
-\r
-function generateWebColors() {\r
- var el = document.getElementById('webcolors'), h = '', i;\r
-\r
- if (el.className == 'generated')\r
- return;\r
-\r
- h += '<table border="0" cellspacing="1" cellpadding="0">'\r
- + '<tr>';\r
-\r
- for (i=0; i<colors.length; i++) {\r
- h += '<td bgcolor="' + colors[i] + '">'\r
- + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');">'\r
- + '<img border="0" src="images/spacer.gif" width="10" height="10" title="' + colors[i] + '" alt="' + colors[i] + '" /></a></td>';\r
- if ((i+1) % 18 == 0)\r
- h += '</tr><tr>';\r
- }\r
-\r
- h += '</table>';\r
-\r
- el.innerHTML = h;\r
- el.className = 'generated';\r
-}\r
-\r
-function generateNamedColors() {\r
- var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;\r
-\r
- if (el.className == 'generated')\r
- return;\r
-\r
- for (n in named) {\r
- v = named[n];\r
- h += '<a href="javascript:insertAction();" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '"><!-- IE --></a>'\r
- }\r
-\r
- el.innerHTML = h;\r
- el.className = 'generated';\r
-}\r
-\r
-function dechex(n) {\r
- return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);\r
-}\r
-\r
-function computeColor(e) {\r
- var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB;\r
-\r
- x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);\r
- y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);\r
-\r
- partWidth = document.getElementById('colorpicker').width / 6;\r
- partDetail = detail / 2;\r
- imHeight = document.getElementById('colorpicker').height;\r
-\r
- r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;\r
- g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);\r
- b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);\r
-\r
- coef = (imHeight - y) / imHeight;\r
- r = 128 + (r - 128) * coef;\r
- g = 128 + (g - 128) * coef;\r
- b = 128 + (b - 128) * coef;\r
-\r
- changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));\r
- updateLight(r, g, b);\r
-}\r
-\r
-function updateLight(r, g, b) {\r
- var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;\r
-\r
- for (i=0; i<detail; i++) {\r
- if ((i>=0) && (i<partDetail)) {\r
- finalCoef = i / partDetail;\r
- finalR = dechex(255 - (255 - r) * finalCoef);\r
- finalG = dechex(255 - (255 - g) * finalCoef);\r
- finalB = dechex(255 - (255 - b) * finalCoef);\r
- } else {\r
- finalCoef = 2 - i / partDetail;\r
- finalR = dechex(r * finalCoef);\r
- finalG = dechex(g * finalCoef);\r
- finalB = dechex(b * finalCoef);\r
- }\r
-\r
- color = finalR + finalG + finalB;\r
-\r
- document.getElementById('gs' + i).style.backgroundColor = '#'+color;\r
- }\r
-}\r
-\r
-function changeFinalColor(color) {\r
- if (color.indexOf('#') == -1)\r
- color = convertRGBToHex(color);\r
-\r
- document.getElementById('preview').style.backgroundColor = color;\r
- document.getElementById('color').value = color;\r
-}\r
-\r
-window.focus();
\ No newline at end of file
+++ /dev/null
-var url = tinyMCE.getParam("external_image_list_url");\r
-if (url != null) {\r
- // Fix relative\r
- if (url.charAt(0) != '/' && url.indexOf('://') == -1)\r
- url = tinyMCE.documentBasePath + "/" + url;\r
-\r
- document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');\r
-}\r
-\r
-function insertImage() {\r
- var src = document.forms[0].src.value;\r
- var alt = document.forms[0].alt.value;\r
- var border = document.forms[0].border.value;\r
- var vspace = document.forms[0].vspace.value;\r
- var hspace = document.forms[0].hspace.value;\r
- var width = document.forms[0].width.value;\r
- var height = document.forms[0].height.value;\r
- var align = document.forms[0].align.options[document.forms[0].align.selectedIndex].value;\r
-\r
- tinyMCEPopup.restoreSelection();\r
- tinyMCE.themes['advanced']._insertImage(src, alt, border, hspace, vspace, width, height, align);\r
- tinyMCEPopup.close();\r
-}\r
-\r
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');\r
-\r
- var formObj = document.forms[0];\r
-\r
- for (var i=0; i<document.forms[0].align.options.length; i++) {\r
- if (document.forms[0].align.options[i].value == tinyMCE.getWindowArg('align'))\r
- document.forms[0].align.options.selectedIndex = i;\r
- }\r
-\r
- formObj.src.value = tinyMCE.getWindowArg('src');\r
- formObj.alt.value = tinyMCE.getWindowArg('alt');\r
- formObj.border.value = tinyMCE.getWindowArg('border');\r
- formObj.vspace.value = tinyMCE.getWindowArg('vspace');\r
- formObj.hspace.value = tinyMCE.getWindowArg('hspace');\r
- formObj.width.value = tinyMCE.getWindowArg('width');\r
- formObj.height.value = tinyMCE.getWindowArg('height');\r
- formObj.insert.value = tinyMCE.getLang('lang_' + tinyMCE.getWindowArg('action'), 'Insert', true); \r
-\r
- // Handle file browser\r
- if (isVisible('srcbrowser'))\r
- document.getElementById('src').style.width = '180px';\r
-\r
- // Auto select image in list\r
- if (typeof(tinyMCEImageList) != "undefined" && tinyMCEImageList.length > 0) {\r
- for (var i=0; i<formObj.image_list.length; i++) {\r
- if (formObj.image_list.options[i].value == tinyMCE.getWindowArg('src'))\r
- formObj.image_list.options[i].selected = true;\r
- }\r
- }\r
-}\r
-\r
-var preloadImg = new Image();\r
-\r
-function resetImageData() {\r
- var formObj = document.forms[0];\r
- formObj.width.value = formObj.height.value = ""; \r
-}\r
-\r
-function updateImageData() {\r
- var formObj = document.forms[0];\r
-\r
- if (formObj.width.value == "")\r
- formObj.width.value = preloadImg.width;\r
-\r
- if (formObj.height.value == "")\r
- formObj.height.value = preloadImg.height;\r
-}\r
-\r
-function getImageData() {\r
- preloadImg = new Image();\r
- tinyMCE.addEvent(preloadImg, "load", updateImageData);\r
- tinyMCE.addEvent(preloadImg, "error", function () {var formObj = document.forms[0];formObj.width.value = formObj.height.value = "";});\r
- preloadImg.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], document.forms[0].src.value);\r
-}\r
+++ /dev/null
-var url = tinyMCE.getParam("external_link_list_url");\r
-if (url != null) {\r
- // Fix relative\r
- if (url.charAt(0) != '/' && url.indexOf('://') == -1)\r
- url = tinyMCE.documentBasePath + "/" + url;\r
-\r
- document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');\r
-}\r
-\r
-function init() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','theme_advanced_link');\r
-\r
- // Handle file browser\r
- if (isVisible('hrefbrowser'))\r
- document.getElementById('href').style.width = '180px';\r
-\r
- var formObj = document.forms[0];\r
-\r
- for (var i=0; i<document.forms[0].target.options.length; i++) {\r
- var option = document.forms[0].target.options[i];\r
-\r
- if (option.value == tinyMCE.getWindowArg('target'))\r
- option.selected = true;\r
- }\r
-\r
- document.forms[0].href.value = tinyMCE.getWindowArg('href');\r
- document.forms[0].linktitle.value = tinyMCE.getWindowArg('title');\r
- document.forms[0].insert.value = tinyMCE.getLang('lang_' + tinyMCE.getWindowArg('action'), 'Insert', true); \r
-\r
- addClassesToList('styleSelect', 'theme_advanced_link_styles');\r
- selectByValue(formObj, 'styleSelect', tinyMCE.getWindowArg('className'), true);\r
-\r
- // Hide css select row if no CSS classes\r
- if (formObj.styleSelect && formObj.styleSelect.options.length <= 1) {\r
- var sr = document.getElementById('styleSelectRow');\r
- sr.style.display = 'none';\r
- sr.parentNode.removeChild(sr);\r
- }\r
-\r
- // Auto select link in list\r
- if (typeof(tinyMCELinkList) != "undefined" && tinyMCELinkList.length > 0) {\r
- var formObj = document.forms[0];\r
-\r
- for (var i=0; i<formObj.link_list.length; i++) {\r
- if (formObj.link_list.options[i].value == tinyMCE.getWindowArg('href'))\r
- formObj.link_list.options[i].selected = true;\r
- }\r
- }\r
-}\r
-\r
-function checkPrefix(n) {\r
- if (Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCE.getLang('lang_is_email')))\r
- n.value = 'mailto:' + n.value;\r
-\r
- if (/^\s*www./i.test(n.value) && confirm(tinyMCE.getLang('lang_is_external')))\r
- n.value = 'http://' + n.value;\r
-}\r
-\r
-function insertLink() {\r
- var href = document.forms[0].href.value;\r
- var target = document.forms[0].target.options[document.forms[0].target.selectedIndex].value;\r
- var title = document.forms[0].linktitle.value;\r
- var style_class = document.forms[0].styleSelect ? document.forms[0].styleSelect.value : "";\r
- var dummy;\r
-\r
- if (target == '_self')\r
- target = '';\r
-\r
- tinyMCEPopup.restoreSelection();\r
- tinyMCE.themes['advanced']._insertLink(href, target, title, dummy, style_class);\r
- tinyMCEPopup.close();\r
-}\r
+++ /dev/null
-function saveContent() {\r
- tinyMCE.setContent(document.getElementById('htmlSource').value);\r
- tinyMCE.closeWindow(window);\r
-}\r
-\r
-function onLoadInit() {\r
- tinyMCEPopup.resizeToInnerSize();\r
-\r
- // Remove Gecko spellchecking\r
- if (tinyMCE.isGecko)\r
- document.body.spellcheck = tinyMCE.getParam("gecko_spellcheck");\r
-\r
- document.getElementById('htmlSource').value = tinyMCE.getContent(tinyMCE.getWindowArg('editor_id'));\r
-\r
- resizeInputs();\r
-\r
- if (tinyMCE.getParam("theme_advanced_source_editor_wrap", true)) {\r
- setWrap('soft');\r
- document.getElementById('wraped').checked = true;\r
- }\r
-}\r
-\r
-function setWrap(val) {\r
- var s = document.getElementById('htmlSource');\r
-\r
- s.wrap = val;\r
-\r
- if (tinyMCE.isGecko || tinyMCE.isOpera) {\r
- var v = s.value;\r
- var n = s.cloneNode(false);\r
- n.setAttribute("wrap", val);\r
- s.parentNode.replaceChild(n, s);\r
- n.value = v;\r
- }\r
-}\r
-\r
-function toggleWordWrap(elm) {\r
- if (elm.checked)\r
- setWrap('soft');\r
- else\r
- setWrap('off');\r
-}\r
-\r
-var wHeight=0, wWidth=0, owHeight=0, owWidth=0;\r
-\r
-function resizeInputs() {\r
- var el = document.getElementById('htmlSource');\r
-\r
- if (!tinyMCE.isMSIE) {\r
- wHeight = self.innerHeight - 60;\r
- wWidth = self.innerWidth - 16;\r
- } else {\r
- wHeight = document.body.clientHeight - 60;\r
- wWidth = document.body.clientWidth - 16;\r
- }\r
-\r
- el.style.height = Math.abs(wHeight) + 'px';\r
- el.style.width = Math.abs(wWidth) + 'px';\r
-}\r
-// UK lang variables\r
-\r
-tinyMCE.addToLang('',{\r
-theme_style_select : '-- Styles --',\r
-theme_code_desc : 'Edit HTML Source',\r
-theme_code_title : 'HTML Source Editor',\r
-theme_code_wordwrap : 'Word wrap',\r
-theme_sub_desc : 'Subscript',\r
-theme_sup_desc : 'Superscript',\r
-theme_hr_desc : 'Insert horizontal ruler',\r
-theme_removeformat_desc : 'Remove formatting',\r
-theme_custom1_desc : 'Your custom description here',\r
-insert_image_border : 'Border',\r
-insert_image_dimensions : 'Dimensions',\r
-insert_image_vspace : 'Vertical space',\r
-insert_image_hspace : 'Horizontal space',\r
-insert_image_align : 'Alignment',\r
-insert_image_align_default : '-- Not set --',\r
-insert_image_align_baseline : 'Baseline',\r
-insert_image_align_top : 'Top',\r
-insert_image_align_middle : 'Middle',\r
-insert_image_align_bottom : 'Bottom',\r
-insert_image_align_texttop : 'TextTop',\r
-insert_image_align_absmiddle : 'Absolute Middle',\r
-insert_image_align_absbottom : 'Absolute Bottom',\r
-insert_image_align_left : 'Left',\r
-insert_image_align_right : 'Right',\r
-theme_font_size : '-- Font size --',\r
-theme_fontdefault : '-- Font family --',\r
-theme_block : '-- Format --',\r
-theme_paragraph : 'Paragraph',\r
-theme_div : 'Div',\r
-theme_address : 'Address',\r
-theme_pre : 'Preformatted',\r
-theme_h1 : 'Heading 1',\r
-theme_h2 : 'Heading 2',\r
-theme_h3 : 'Heading 3',\r
-theme_h4 : 'Heading 4',\r
-theme_h5 : 'Heading 5',\r
-theme_h6 : 'Heading 6',\r
-theme_blockquote : 'Blockquote',\r
-theme_code : 'Code',\r
-theme_samp : 'Code sample',\r
-theme_dt : 'Definition term ',\r
-theme_dd : 'Definition description',\r
-theme_colorpicker_title : 'Select a color',\r
-theme_colorpicker_apply : 'Apply',\r
-theme_forecolor_desc : 'Select text color',\r
-theme_backcolor_desc : 'Select background color',\r
-theme_charmap_title : 'Select custom character',\r
-theme_charmap_desc : 'Insert custom character',\r
-theme_visualaid_desc : 'Toggle guidelines/invisible elements',\r
-insert_anchor_title : 'Insert/edit anchor',\r
-insert_anchor_name : 'Anchor name',\r
-theme_anchor_desc : 'Insert/edit anchor',\r
-theme_insert_link_titlefield : 'Title',\r
-theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?',\r
-theme_path : 'Path',\r
-cut_desc : 'Cut',\r
-copy_desc : 'Copy',\r
-paste_desc : 'Paste',\r
-link_list : 'Link list',\r
-image_list : 'Image list',\r
-browse : 'Browse',\r
-image_props_desc : 'Image properties',\r
-newdocument_desc : 'New document',\r
-class_name : 'Class',\r
-newdocument : 'Are you sure you want clear all contents?',\r
-about_title : 'About TinyMCE',\r
-about : 'About',\r
-license : 'License',\r
-plugins : 'Plugins',\r
-plugin : 'Plugin',\r
-author : 'Author',\r
-version : 'Version',\r
-loaded_plugins : 'Loaded plugins',\r
-help : 'Help',\r
-not_set : '-- Not set --',\r
-close : 'Close',\r
-toolbar_focus : 'Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X',\r
-invalid_data : 'Error: Invalid values entered, these are marked in red.',\r
-more_colors : 'More colors',\r
-color_picker_tab : 'Picker',\r
-color_picker : 'Color picker',\r
-web_colors_tab : 'Palette',\r
-web_colors : 'Palette colors',\r
-named_colors_tab : 'Named',\r
-named_colors : 'Named colors',\r
-color : 'Color:',\r
-color_name : 'Name:',\r
-is_email : 'The URL you entered seems to be an email address, do you want to add the required mailto: prefix?',\r
-is_external : 'The URL you entered seems to external link, do you want to add the required http:// prefix?'\r
-});\r
+tinyMCE.addI18n('en.advanced',{\r
+style_select:"Styles",\r
+font_size:"Font size",\r
+fontdefault:"Font family",\r
+block:"Format",\r
+paragraph:"Paragraph",\r
+div:"Div",\r
+address:"Address",\r
+pre:"Preformatted",\r
+h1:"Heading 1",\r
+h2:"Heading 2",\r
+h3:"Heading 3",\r
+h4:"Heading 4",\r
+h5:"Heading 5",\r
+h6:"Heading 6",\r
+blockquote:"Blockquote",\r
+code:"Code",\r
+samp:"Code sample",\r
+dt:"Definition term ",\r
+dd:"Definition description",\r
+bold_desc:"Bold (Ctrl+B)",\r
+italic_desc:"Italic (Ctrl+I)",\r
+underline_desc:"Underline (Ctrl+U)",\r
+striketrough_desc:"Strikethrough",\r
+justifyleft_desc:"Align left",\r
+justifycenter_desc:"Align center",\r
+justifyright_desc:"Align right",\r
+justifyfull_desc:"Align full",\r
+bullist_desc:"Unordered list",\r
+numlist_desc:"Ordered list",\r
+outdent_desc:"Outdent",\r
+indent_desc:"Indent",\r
+undo_desc:"Undo (Ctrl+Z)",\r
+redo_desc:"Redo (Ctrl+Y)",\r
+link_desc:"Insert/edit link",\r
+unlink_desc:"Unlink",\r
+image_desc:"Insert/edit image",\r
+cleanup_desc:"Cleanup messy code",\r
+code_desc:"Edit HTML Source",\r
+sub_desc:"Subscript",\r
+sup_desc:"Superscript",\r
+hr_desc:"Insert horizontal ruler",\r
+removeformat_desc:"Remove formatting",\r
+custom1_desc:"Your custom description here",\r
+forecolor_desc:"Select text color",\r
+backcolor_desc:"Select background color",\r
+charmap_desc:"Insert custom character",\r
+visualaid_desc:"Toggle guidelines/invisible elements",\r
+anchor_desc:"Insert/edit anchor",\r
+cut_desc:"Cut",\r
+copy_desc:"Copy",\r
+paste_desc:"Paste",\r
+image_props_desc:"Image properties",\r
+newdocument_desc:"New document",\r
+help_desc:"Help",\r
+blockquote_desc:"Blockquote",\r
+clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?",\r
+path:"Path",\r
+newdocument:"Are you sure you want clear all contents?",\r
+toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",\r
+more_colors:"More colors"\r
+});
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('en.advanced_dlg',{\r
+about_title:"About TinyMCE",\r
+about_general:"About",\r
+about_help:"Help",\r
+about_license:"License",\r
+about_plugins:"Plugins",\r
+about_plugin:"Plugin",\r
+about_author:"Author",\r
+about_version:"Version",\r
+about_loaded:"Loaded plugins",\r
+anchor_title:"Insert/edit anchor",\r
+anchor_name:"Anchor name",\r
+code_title:"HTML Source Editor",\r
+code_wordwrap:"Word wrap",\r
+colorpicker_title:"Select a color",\r
+colorpicker_picker_tab:"Picker",\r
+colorpicker_picker_title:"Color picker",\r
+colorpicker_palette_tab:"Palette",\r
+colorpicker_palette_title:"Palette colors",\r
+colorpicker_named_tab:"Named",\r
+colorpicker_named_title:"Named colors",\r
+colorpicker_color:"Color:",\r
+colorpicker_name:"Name:",\r
+charmap_title:"Select custom character",\r
+image_title:"Insert/edit image",\r
+image_src:"Image URL",\r
+image_alt:"Image description",\r
+image_list:"Image list",\r
+image_border:"Border",\r
+image_dimensions:"Dimensions",\r
+image_vspace:"Vertical space",\r
+image_hspace:"Horizontal space",\r
+image_align:"Alignment",\r
+image_align_baseline:"Baseline",\r
+image_align_top:"Top",\r
+image_align_middle:"Middle",\r
+image_align_bottom:"Bottom",\r
+image_align_texttop:"Text top",\r
+image_align_textbottom:"Text bottom",\r
+image_align_left:"Left",\r
+image_align_right:"Right",\r
+link_title:"Insert/edit link",\r
+link_url:"Link URL",\r
+link_target:"Target",\r
+link_target_same:"Open link in the same window",\r
+link_target_blank:"Open link in a new window",\r
+link_titlefield:"Title",\r
+link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",\r
+link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?",\r
+link_list:"Link list"\r
+});
\ No newline at end of file
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
- <title>{$lang_insert_link_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>\r
- <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/link.js"></script>\r
+ <title>{#advanced_dlg.link_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+ <script type="text/javascript" src="../../utils/validate.js"></script>\r
+ <script type="text/javascript" src="js/link.js"></script>\r
<base target="_self" />\r
</head>\r
-<body id="link" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">\r
-<form onsubmit="insertLink();return false;" action="#">\r
+<body id="link" style="display: none">\r
+<form onsubmit="LinkDialog.update();return false;" action="#">\r
<div class="tabs">\r
<ul>\r
- <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_insert_link_title}</a></span></li>\r
+ <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>\r
</ul>\r
</div>\r
\r
\r
<table border="0" cellpadding="4" cellspacing="0">\r
<tr>\r
- <td nowrap="nowrap"><label for="href">{$lang_insert_link_url}</label></td>\r
+ <td nowrap="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>\r
<td><table border="0" cellspacing="0" cellpadding="0"> \r
<tr> \r
- <td><input id="href" name="href" type="text" value="" style="width: 200px" onchange="checkPrefix(this);" /></td> \r
+ <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td> \r
<td id="hrefbrowsercontainer"> </td>\r
</tr> \r
</table></td>\r
</tr>\r
- <!-- Link list -->\r
- <script language="javascript">\r
- if (typeof(tinyMCELinkList) != "undefined" && tinyMCELinkList.length > 0) {\r
- var html = "";\r
-\r
- html += '<tr><td><label for="link_list">{$lang_link_list}</label></td>';\r
- html += '<td><select id="link_list" name="link_list" style="width: 200px" onchange="this.form.href.value=this.options[this.selectedIndex].value;">';\r
- html += '<option value="">---</option>';\r
-\r
- for (var i=0; i<tinyMCELinkList.length; i++)\r
- html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';\r
-\r
- html += '</select></td></tr>';\r
-\r
- document.write(html);\r
- }\r
- </script>\r
- <!-- /Link list -->\r
- <tr>\r
- <td nowrap="nowrap"><label for="target">{$lang_insert_link_target}</label></td>\r
- <td><select id="target" name="target" style="width: 200px">\r
- <option value="_self">{$lang_insert_link_target_same}</option>\r
- <option value="_blank">{$lang_insert_link_target_blank}</option>\r
- <script language="javascript">\r
- var html = "";\r
- var targets = tinyMCE.getParam('theme_advanced_link_targets', '').split(';');\r
-\r
- for (var i=0; i<targets.length; i++) {\r
- var key, value;\r
-\r
- if (targets[i] == "")\r
- continue;\r
-\r
- key = targets[i].split('=')[0];\r
- value = targets[i].split('=')[1];\r
-\r
- html += '<option value="' + value + '">' + key + '</option>';\r
- }\r
-\r
- document.write(html);\r
- </script>\r
- </select></td>\r
- </tr>\r
+ <tr>\r
+ <td><label for="link_list">{#advanced_dlg.link_list}</label></td>\r
+ <td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>\r
+ </tr>\r
+ <tr>\r
+ <td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>\r
+ <td><select id="target_list" name="target_list"></select></td>\r
+ </tr>\r
<tr>\r
- <td nowrap="nowrap"><label for="linktitle">{$lang_theme_insert_link_titlefield}</label></td>\r
- <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px"></td>\r
- </tr>\r
- <tr id="styleSelectRow">\r
- <td><label for="styleSelect">{$lang_class_name}</label></td>\r
- <td>\r
- <select id="styleSelect" name="styleSelect">\r
- <option value="" selected>{$lang_theme_style_select}</option>\r
- </select></td>\r
+ <td nowrap="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>\r
+ <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>\r
</tr>\r
+ <tr>\r
+ <td><label for="class_list">{#class_name}</label></td>\r
+ <td><select id="class_list" name="class_list"></select></td>\r
+ </tr>\r
</table>\r
</div>\r
</div>\r
\r
<div class="mceActionPanel">\r
<div style="float: left">\r
- <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertLink();" />\r
+ <input type="submit" id="insert" name="insert" value="{#insert}" />\r
</div>\r
\r
<div style="float: right">\r
- <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />\r
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
</div>\r
</div>\r
</form>\r
--- /dev/null
+body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}\r
+body {background:#FFF;}\r
+body.mceForceColors {background:#FFF; color:#000;}\r
+h1 {font-size: 2em}\r
+h2 {font-size: 1.5em}\r
+h3 {font-size: 1.17em}\r
+h4 {font-size: 1em}\r
+h5 {font-size: .83em}\r
+h6 {font-size: .75em}\r
+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
+a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(img/items.gif) no-repeat bottom left;}\r
+img.mceItemAnchor {width:12px; height:12px; background:url(img/items.gif) no-repeat;}\r
+img {border:0;}\r
+\r
+/* IE */\r
+* html body {\r
+scrollbar-3dlight-color:#F0F0EE;\r
+scrollbar-arrow-color:#676662;\r
+scrollbar-base-color:#F0F0EE;\r
+scrollbar-darkshadow-color:#DDD;\r
+scrollbar-face-color:#E0E0DD;\r
+scrollbar-highlight-color:#F0F0EE;\r
+scrollbar-shadow-color:#F0F0EE;\r
+scrollbar-track-color:#F5F5F5;\r
+}\r
--- /dev/null
+/* Generic */\r
+body {\r
+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;\r
+scrollbar-3dlight-color:#F0F0EE;\r
+scrollbar-arrow-color:#676662;\r
+scrollbar-base-color:#F0F0EE;\r
+scrollbar-darkshadow-color:#DDDDDD;\r
+scrollbar-face-color:#E0E0DD;\r
+scrollbar-highlight-color:#F0F0EE;\r
+scrollbar-shadow-color:#F0F0EE;\r
+scrollbar-track-color:#F5F5F5;\r
+background:#F0F0EE;\r
+padding:0;\r
+margin:8px 8px 0 8px;\r
+}\r
+\r
+html {background:#F0F0EE;}\r
+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+textarea {resize:none;outline:none;}\r
+a:link, a:visited {color:black;}\r
+a:hover {color:#2B6FB6;}\r
+\r
+/* Forms */\r
+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
+legend {color:#2B6FB6; font-weight:bold;}\r
+label.msg {display:none;}\r
+label.invalid {color:#EE0000; display:inline;}\r
+input.invalid {border:1px solid #EE0000;}\r
+input {background:#FFF; border:1px solid #CCC;}\r
+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+input, select, textarea {border:1px solid #808080;}\r
+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}\r
+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}\r
+.input_noborder {border:0;}\r
+\r
+/* Buttons */\r
+#insert, #cancel, input.button, .updateButton {\r
+border:0; margin:0; padding:0;\r
+font-weight:bold;\r
+width:94px; height:26px;\r
+background:url(img/buttons.png) 0 -26px;\r
+cursor:pointer;\r
+padding-bottom:2px;\r
+}\r
+\r
+#insert {background:url(img/buttons.png) 0 -52px;}\r
+#cancel {background:url(img/buttons.png) 0 0;}\r
+\r
+/* Browse */\r
+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
+.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
+a.browse span.disabled {border:1px solid white; -moz-opacity:0.3; opacity:0.3; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);}\r
+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}\r
+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}\r
+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}\r
+a.pickcolor:hover span {background-color:#B2BBD0;}\r
+a.pickcolor:hover span.disabled {}\r
+\r
+/* Charmap */\r
+table.charmap {border:1px solid #AAA; text-align:center}\r
+td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}\r
+#charmap a {display:block; color:#000; text-decoration:none; border:0}\r
+#charmap a:hover {background:#CCC;color:#2B6FB6}\r
+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}\r
+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}\r
+\r
+/* Source */\r
+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}\r
+.mceActionPanel {margin-top:5px;}\r
+\r
+/* Tabs classes */\r
+.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}\r
+.tabs ul {margin:0; padding:0; list-style:none;}\r
+.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}\r
+.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}\r
+.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}\r
+.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}\r
+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}\r
+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}\r
+\r
+/* Panels */\r
+.panel_wrapper div.panel {display:none;}\r
+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}\r
+.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}\r
+\r
+/* Columns */\r
+.column {float:left;}\r
+.properties {width:100%;}\r
+.properties .column1 {}\r
+.properties .column2 {text-align:left;}\r
+\r
+/* Titles */\r
+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}\r
+h3 {font-size:14px;}\r
+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}\r
+\r
+/* Dialog specific */\r
+#link .panel_wrapper, #link div.current {height:125px;}\r
+#image .panel_wrapper, #image div.current {height:200px;}\r
+#plugintable thead {font-weight:bold; background:#DDD;}\r
+#plugintable, #about #plugintable td {border:1px solid #919B9C;}\r
+#plugintable {width:96%; margin-top:10px;}\r
+#pluginscontainer {height:290px; overflow:auto;}\r
+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}\r
+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}\r
+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}\r
+#colorpicker #light div {overflow:hidden;}\r
+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}\r
+#colorpicker .panel_wrapper div.current {height:175px;}\r
+#colorpicker #namedcolors {width:150px;}\r
+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}\r
+#colorpicker #colornamecontainer {margin-top:5px;}\r
+#colorpicker #picker_panel fieldset {margin:auto;width:325px;}
\ No newline at end of file
--- /dev/null
+/* Reset */\r
+.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}\r
+.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
+.defaultSkin table td {vertical-align:middle}\r
+\r
+/* Containers */\r
+.defaultSkin table {background:#F0F0EE}\r
+.defaultSkin iframe {display:block; background:#FFF}\r
+.defaultSkin .mceToolbar {height:26px}\r
+.defaultSkin .mceLeft {text-align:left}\r
+.defaultSkin .mceRight {text-align:right}\r
+\r
+/* External */\r
+.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}\r
+.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}\r
+.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}\r
+\r
+/* Layout */\r
+.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}\r
+.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}\r
+.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}\r
+.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}\r
+.defaultSkin td.mceToolbar {padding-top:1px; vertical-align:top}\r
+.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}\r
+.defaultSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}\r
+.defaultSkin .mceStatusbar div {float:left; margin:2px}\r
+.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}\r
+.defaultSkin .mceStatusbar a:hover {text-decoration:underline}\r
+.defaultSkin table.mceToolbar {margin-left:3px}\r
+.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}\r
+.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
+.defaultSkin td.mceCenter {text-align:center;}\r
+.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}\r
+.defaultSkin td.mceRight table {margin:0 0 0 auto;}\r
+\r
+/* Button */\r
+.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px;}\r
+.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}\r
+.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}\r
+.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; filter:alpha(opacity=30)}\r
+\r
+/* Separator */\r
+.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}\r
+\r
+/* ListBox */\r
+.defaultSkin .mceListBox {direction:ltr}\r
+.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}\r
+.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}\r
+.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}\r
+.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}\r
+.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}\r
+.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}\r
+.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}\r
+.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}\r
+.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}\r
+.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}\r
+\r
+/* SplitButton */\r
+.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}\r
+.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}\r
+.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}\r
+.defaultSkin .mceSplitButton span.mceAction {width:20px; background:url(../../img/icons.gif) 20px 20px;}\r
+.defaultSkin .mceSplitButton a.mceOpen {width:9px; border:1px solid #F0F0EE;}\r
+.defaultSkin .mceSplitButton span.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0;}\r
+.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}\r
+.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {border:1px solid #0A246A;}\r
+.defaultSkin table.mceSplitButtonEnabled:hover span.mceOpen, .defaultSkin .mceSplitButtonHover span.mceOpen, .defaultSkin .mceSplitButtonSelected span.mceOpen {background-color:#B2BBD0}\r
+.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled span.mceOpen {opacity:0.3; filter:alpha(opacity=30)}\r
+.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}\r
+.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}\r
+\r
+/* ColorSplitButton */\r
+.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}\r
+.defaultSkin .mceColorSplitMenu td {padding:2px}\r
+.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}\r
+.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}\r
+.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}\r
+.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}\r
+.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}\r
+.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}\r
+.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}\r
+\r
+/* Menu */\r
+.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}\r
+.defaultSkin .mceNoIcons span.mceIcon {width:0;}\r
+.defaultSkin .mceNoIcons a .mceText {padding-left:10px}\r
+.defaultSkin .mceMenu table {background:#FFF}\r
+.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}\r
+.defaultSkin .mceMenu td {height:20px}\r
+.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}\r
+.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}\r
+.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}\r
+.defaultSkin .mceMenu pre.mceText {font-family:Monospace}\r
+.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}\r
+.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}\r
+.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}\r
+.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}\r
+.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}\r
+.defaultSkin .mceMenuItemDisabled .mceText {color:#888}\r
+.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}\r
+.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}\r
+.defaultSkin .mceMenu span.mceMenuLine {display:none}\r
+.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}\r
+\r
+/* Progress,Resize */\r
+.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; filter:alpha(opacity=50); background:#FFF}\r
+.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
+.defaultSkin .mcePlaceHolder {border:1px dotted gray}\r
+\r
+/* Formats */\r
+.defaultSkin .mce_formatPreview a {font-size:10px}\r
+.defaultSkin .mce_p span.mceText {}\r
+.defaultSkin .mce_address span.mceText {font-style:italic}\r
+.defaultSkin .mce_pre span.mceText {font-family:monospace}\r
+.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}\r
+.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}\r
+.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}\r
+.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}\r
+.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}\r
+.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}\r
+\r
+/* Theme */\r
+.defaultSkin span.mce_bold {background-position:0 0}\r
+.defaultSkin span.mce_italic {background-position:-60px 0}\r
+.defaultSkin span.mce_underline {background-position:-140px 0}\r
+.defaultSkin span.mce_strikethrough {background-position:-120px 0}\r
+.defaultSkin span.mce_undo {background-position:-160px 0}\r
+.defaultSkin span.mce_redo {background-position:-100px 0}\r
+.defaultSkin span.mce_cleanup {background-position:-40px 0}\r
+.defaultSkin span.mce_bullist {background-position:-20px 0}\r
+.defaultSkin span.mce_numlist {background-position:-80px 0}\r
+.defaultSkin span.mce_justifyleft {background-position:-460px 0}\r
+.defaultSkin span.mce_justifyright {background-position:-480px 0}\r
+.defaultSkin span.mce_justifycenter {background-position:-420px 0}\r
+.defaultSkin span.mce_justifyfull {background-position:-440px 0}\r
+.defaultSkin span.mce_anchor {background-position:-200px 0}\r
+.defaultSkin span.mce_indent {background-position:-400px 0}\r
+.defaultSkin span.mce_outdent {background-position:-540px 0}\r
+.defaultSkin span.mce_link {background-position:-500px 0}\r
+.defaultSkin span.mce_unlink {background-position:-640px 0}\r
+.defaultSkin span.mce_sub {background-position:-600px 0}\r
+.defaultSkin span.mce_sup {background-position:-620px 0}\r
+.defaultSkin span.mce_removeformat {background-position:-580px 0}\r
+.defaultSkin span.mce_newdocument {background-position:-520px 0}\r
+.defaultSkin span.mce_image {background-position:-380px 0}\r
+.defaultSkin span.mce_help {background-position:-340px 0}\r
+.defaultSkin span.mce_code {background-position:-260px 0}\r
+.defaultSkin span.mce_hr {background-position:-360px 0}\r
+.defaultSkin span.mce_visualaid {background-position:-660px 0}\r
+.defaultSkin span.mce_charmap {background-position:-240px 0}\r
+.defaultSkin span.mce_paste {background-position:-560px 0}\r
+.defaultSkin span.mce_copy {background-position:-700px 0}\r
+.defaultSkin span.mce_cut {background-position:-680px 0}\r
+.defaultSkin span.mce_blockquote {background-position:-220px 0}\r
+.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}\r
+.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}\r
+.defaultSkin .mce_forecolorpicker {background-position:-720px 0}\r
+.defaultSkin .mce_backcolorpicker {background-position:-760px 0}\r
+\r
+/* Plugins */\r
+.defaultSkin span.mce_advhr {background-position:-0px -20px}\r
+.defaultSkin span.mce_ltr {background-position:-20px -20px}\r
+.defaultSkin span.mce_rtl {background-position:-40px -20px}\r
+.defaultSkin span.mce_emotions {background-position:-60px -20px}\r
+.defaultSkin span.mce_fullpage {background-position:-80px -20px}\r
+.defaultSkin span.mce_fullscreen {background-position:-100px -20px}\r
+.defaultSkin span.mce_iespell {background-position:-120px -20px}\r
+.defaultSkin span.mce_insertdate {background-position:-140px -20px}\r
+.defaultSkin span.mce_inserttime {background-position:-160px -20px}\r
+.defaultSkin span.mce_absolute {background-position:-180px -20px}\r
+.defaultSkin span.mce_backward {background-position:-200px -20px}\r
+.defaultSkin span.mce_forward {background-position:-220px -20px}\r
+.defaultSkin span.mce_insert_layer {background-position:-240px -20px}\r
+.defaultSkin span.mce_insertlayer {background-position:-260px -20px}\r
+.defaultSkin span.mce_movebackward {background-position:-280px -20px}\r
+.defaultSkin span.mce_moveforward {background-position:-300px -20px}\r
+.defaultSkin span.mce_media {background-position:-320px -20px}\r
+.defaultSkin span.mce_nonbreaking {background-position:-340px -20px}\r
+.defaultSkin span.mce_pastetext {background-position:-360px -20px}\r
+.defaultSkin span.mce_pasteword {background-position:-380px -20px}\r
+.defaultSkin span.mce_selectall {background-position:-400px -20px}\r
+.defaultSkin span.mce_preview {background-position:-420px -20px}\r
+.defaultSkin span.mce_print {background-position:-440px -20px}\r
+.defaultSkin span.mce_cancel {background-position:-460px -20px}\r
+.defaultSkin span.mce_save {background-position:-480px -20px}\r
+.defaultSkin span.mce_replace {background-position:-500px -20px}\r
+.defaultSkin span.mce_search {background-position:-520px -20px}\r
+.defaultSkin span.mce_styleprops {background-position:-560px -20px}\r
+.defaultSkin span.mce_table {background-position:-580px -20px}\r
+.defaultSkin span.mce_cell_props {background-position:-600px -20px}\r
+.defaultSkin span.mce_delete_table {background-position:-620px -20px}\r
+.defaultSkin span.mce_delete_col {background-position:-640px -20px}\r
+.defaultSkin span.mce_delete_row {background-position:-660px -20px}\r
+.defaultSkin span.mce_col_after {background-position:-680px -20px}\r
+.defaultSkin span.mce_col_before {background-position:-700px -20px}\r
+.defaultSkin span.mce_row_after {background-position:-720px -20px}\r
+.defaultSkin span.mce_row_before {background-position:-740px -20px}\r
+.defaultSkin span.mce_merge_cells {background-position:-760px -20px}\r
+.defaultSkin span.mce_table_props {background-position:-980px -20px}\r
+.defaultSkin span.mce_row_props {background-position:-780px -20px}\r
+.defaultSkin span.mce_split_cells {background-position:-800px -20px}\r
+.defaultSkin span.mce_template {background-position:-820px -20px}\r
+.defaultSkin span.mce_visualchars {background-position:-840px -20px}\r
+.defaultSkin span.mce_abbr {background-position:-860px -20px}\r
+.defaultSkin span.mce_acronym {background-position:-880px -20px}\r
+.defaultSkin span.mce_attribs {background-position:-900px -20px}\r
+.defaultSkin span.mce_cite {background-position:-920px -20px}\r
+.defaultSkin span.mce_del {background-position:-940px -20px}\r
+.defaultSkin span.mce_ins {background-position:-960px -20px}\r
+.defaultSkin span.mce_pagebreak {background-position:0 -40px}\r
+.defaultSkin .mce_spellchecker span.mceAction {background-position:-540px -20px}\r
--- /dev/null
+body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}\r
+body {background:#FFF;}\r
+body.mceForceColors {background:#FFF; color:#000;}\r
+h1 {font-size: 2em}\r
+h2 {font-size: 1.5em}\r
+h3 {font-size: 1.17em}\r
+h4 {font-size: 1em}\r
+h5 {font-size: .83em}\r
+h6 {font-size: .75em}\r
+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
+a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(../default/img/items.gif) no-repeat bottom left;}\r
+img.mceItemAnchor {width:12px; height:12px; background:url(../default/img/items.gif) no-repeat;}\r
+img {border:0;}\r
+\r
+/* IE */\r
+* html body {\r
+scrollbar-3dlight-color:#F0F0EE;\r
+scrollbar-arrow-color:#676662;\r
+scrollbar-base-color:#F0F0EE;\r
+scrollbar-darkshadow-color:#DDD;\r
+scrollbar-face-color:#E0E0DD;\r
+scrollbar-highlight-color:#F0F0EE;\r
+scrollbar-shadow-color:#F0F0EE;\r
+scrollbar-track-color:#F5F5F5;\r
+}\r
--- /dev/null
+/* Generic */\r
+body {\r
+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;\r
+scrollbar-3dlight-color:#F0F0EE;\r
+scrollbar-arrow-color:#676662;\r
+scrollbar-base-color:#F0F0EE;\r
+scrollbar-darkshadow-color:#DDDDDD;\r
+scrollbar-face-color:#E0E0DD;\r
+scrollbar-highlight-color:#F0F0EE;\r
+scrollbar-shadow-color:#F0F0EE;\r
+scrollbar-track-color:#F5F5F5;\r
+background:#F0F0EE;\r
+padding:0;\r
+margin:8px 8px 0 8px;\r
+}\r
+\r
+html {background:#F0F0EE;}\r
+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+textarea {resize:none;outline:none;}\r
+a:link, a:visited {color:black;}\r
+a:hover {color:#2B6FB6;}\r
+\r
+/* Forms */\r
+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
+legend {color:#2B6FB6; font-weight:bold;}\r
+label.msg {display:none;}\r
+label.invalid {color:#EE0000; display:inline;}\r
+input.invalid {border:1px solid #EE0000;}\r
+input {background:#FFF; border:1px solid #CCC;}\r
+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+input, select, textarea {border:1px solid #808080;}\r
+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}\r
+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}\r
+.input_noborder {border:0;}\r
+\r
+/* Buttons */\r
+#insert, #cancel, input.button, .updateButton {\r
+border:0; margin:0; padding:0;\r
+font-weight:bold;\r
+width:94px; height:26px;\r
+background:url(../default/img/buttons.png) 0 -26px;\r
+cursor:pointer;\r
+padding-bottom:2px;\r
+}\r
+\r
+#insert {background:url(../default/img/buttons.png) 0 -52px;}\r
+#cancel {background:url(../default/img/buttons.png) 0 0;}\r
+\r
+/* Browse */\r
+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
+.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
+a.browse span.disabled {border:1px solid white; -moz-opacity:0.3; opacity:0.3; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);}\r
+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}\r
+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}\r
+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}\r
+a.pickcolor:hover span {background-color:#B2BBD0;}\r
+a.pickcolor:hover span.disabled {}\r
+\r
+/* Charmap */\r
+table.charmap {border:1px solid #AAA; text-align:center}\r
+td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}\r
+#charmap a {display:block; color:#000; text-decoration:none; border:0}\r
+#charmap a:hover {background:#CCC;color:#2B6FB6}\r
+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}\r
+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}\r
+\r
+/* Source */\r
+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}\r
+.mceActionPanel {margin-top:5px;}\r
+\r
+/* Tabs classes */\r
+.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;}\r
+.tabs ul {margin:0; padding:0; list-style:none;}\r
+.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}\r
+.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}\r
+.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}\r
+.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;}\r
+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}\r
+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}\r
+\r
+/* Panels */\r
+.panel_wrapper div.panel {display:none;}\r
+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}\r
+.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}\r
+\r
+/* Columns */\r
+.column {float:left;}\r
+.properties {width:100%;}\r
+.properties .column1 {}\r
+.properties .column2 {text-align:left;}\r
+\r
+/* Titles */\r
+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}\r
+h3 {font-size:14px;}\r
+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}\r
+\r
+/* Dialog specific */\r
+#link .panel_wrapper, #link div.current {height:125px;}\r
+#image .panel_wrapper, #image div.current {height:200px;}\r
+#plugintable thead {font-weight:bold; background:#DDD;}\r
+#plugintable, #about #plugintable td {border:1px solid #919B9C;}\r
+#plugintable {width:96%; margin-top:10px;}\r
+#pluginscontainer {height:290px; overflow:auto;}\r
+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}\r
+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}\r
+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}\r
+#colorpicker #light div {overflow:hidden;}\r
+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}\r
+#colorpicker .panel_wrapper div.current {height:175px;}\r
+#colorpicker #namedcolors {width:150px;}\r
+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}\r
+#colorpicker #colornamecontainer {margin-top:5px;}\r
--- /dev/null
+/* Reset */\r
+.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}\r
+.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
+.o2k7Skin table td {vertical-align:middle}\r
+\r
+/* Containers */\r
+.o2k7Skin table {background:#E5EFFD}\r
+.o2k7Skin iframe {display:block; background:#FFF}\r
+.o2k7Skin .mceToolbar {height:26px}\r
+\r
+/* External */\r
+.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none}\r
+.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;}\r
+.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}\r
+\r
+/* Layout */\r
+.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}\r
+.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}\r
+.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}\r
+.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}\r
+.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}\r
+.o2k7Skin .mceStatusbar {display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}\r
+.o2k7Skin .mceStatusbar div {float:left; padding:2px}\r
+.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}\r
+.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}\r
+.o2k7Skin table.mceToolbar {margin-left:3px}\r
+.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}\r
+.o2k7Skin .mceToolbar td.mceFirst span {margin:0}\r
+.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}\r
+.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}\r
+.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}\r
+.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
+.o2k7Skin td.mceCenter {text-align:center;}\r
+.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}\r
+.o2k7Skin td.mceRight table {margin:0 0 0 auto;}\r
+\r
+/* Button */\r
+.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}\r
+.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}\r
+.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}\r
+.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\r
+.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}\r
+.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; filter:alpha(opacity=30)}\r
+\r
+/* Separator */\r
+.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}\r
+\r
+/* ListBox */\r
+.o2k7Skin .mceListBox {margin-left:3px}\r
+.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}\r
+.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}\r
+.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}\r
+.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}\r
+.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}\r
+.o2k7Skin .mceListBoxDisabled .mceText {color:gray}\r
+.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden}\r
+.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}\r
+.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}\r
+\r
+/* SplitButton */\r
+.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px}\r
+.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}\r
+.o2k7Skin .mceSplitButton a.mceAction {width:22px}\r
+.o2k7Skin .mceSplitButton span.mceAction {width:22px; background:url(../../img/icons.gif) 20px 20px}\r
+.o2k7Skin .mceSplitButton a.mceOpen {width:10px}\r
+.o2k7Skin .mceSplitButton span.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}\r
+.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}\r
+.o2k7Skin table.mceSplitButtonEnabled:hover span.mceOpen, .o2k7Skin .mceSplitButtonHover span.mceOpen, .o2k7Skin .mceSplitButtonSelected span.mceOpen {background-position:-44px -44px}\r
+.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; filter:alpha(opacity=30)}\r
+.o2k7Skin .mceSplitButtonActive {background-position:0 -44px}\r
+\r
+/* ColorSplitButton */\r
+.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}\r
+.o2k7Skin .mceColorSplitMenu td {padding:2px}\r
+.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}\r
+.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}\r
+.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}\r
+.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}\r
+.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A}\r
+.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}\r
+.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px}\r
+\r
+/* Menu */\r
+.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}\r
+.o2k7Skin .mceNoIcons span.mceIcon {width:0;}\r
+.o2k7Skin .mceNoIcons a .mceText {padding-left:10px}\r
+.o2k7Skin .mceMenu table {background:#FFF}\r
+.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block}\r
+.o2k7Skin .mceMenu td {height:20px}\r
+.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0}\r
+.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}\r
+.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px}\r
+.o2k7Skin .mceMenu pre.mceText {font-family:Monospace}\r
+.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}\r
+.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3}\r
+.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px}\r
+.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD}\r
+.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}\r
+.o2k7Skin .mceMenuItemDisabled .mceText {color:#888}\r
+.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)}\r
+.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center}\r
+.o2k7Skin .mceMenu span.mceMenuLine {display:none}\r
+.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;}\r
+\r
+/* Progress,Resize */\r
+.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; filter:alpha(opacity=50); background:#FFF}\r
+.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
+.o2k7Skin .mcePlaceHolder {border:1px dotted gray}\r
+\r
+/* Formats */\r
+.o2k7Skin .mce_formatPreview a {font-size:10px}\r
+.o2k7Skin .mce_p span.mceText {}\r
+.o2k7Skin .mce_address span.mceText {font-style:italic}\r
+.o2k7Skin .mce_pre span.mceText {font-family:monospace}\r
+.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}\r
+.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}\r
+.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}\r
+.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}\r
+.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}\r
+.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}\r
+\r
+/* Theme */\r
+.o2k7Skin span.mce_bold {background-position:0 0}\r
+.o2k7Skin span.mce_italic {background-position:-60px 0}\r
+.o2k7Skin span.mce_underline {background-position:-140px 0}\r
+.o2k7Skin span.mce_strikethrough {background-position:-120px 0}\r
+.o2k7Skin span.mce_undo {background-position:-160px 0}\r
+.o2k7Skin span.mce_redo {background-position:-100px 0}\r
+.o2k7Skin span.mce_cleanup {background-position:-40px 0}\r
+.o2k7Skin span.mce_bullist {background-position:-20px 0}\r
+.o2k7Skin span.mce_numlist {background-position:-80px 0}\r
+.o2k7Skin span.mce_justifyleft {background-position:-460px 0}\r
+.o2k7Skin span.mce_justifyright {background-position:-480px 0}\r
+.o2k7Skin span.mce_justifycenter {background-position:-420px 0}\r
+.o2k7Skin span.mce_justifyfull {background-position:-440px 0}\r
+.o2k7Skin span.mce_anchor {background-position:-200px 0}\r
+.o2k7Skin span.mce_indent {background-position:-400px 0}\r
+.o2k7Skin span.mce_outdent {background-position:-540px 0}\r
+.o2k7Skin span.mce_link {background-position:-500px 0}\r
+.o2k7Skin span.mce_unlink {background-position:-640px 0}\r
+.o2k7Skin span.mce_sub {background-position:-600px 0}\r
+.o2k7Skin span.mce_sup {background-position:-620px 0}\r
+.o2k7Skin span.mce_removeformat {background-position:-580px 0}\r
+.o2k7Skin span.mce_newdocument {background-position:-520px 0}\r
+.o2k7Skin span.mce_image {background-position:-380px 0}\r
+.o2k7Skin span.mce_help {background-position:-340px 0}\r
+.o2k7Skin span.mce_code {background-position:-260px 0}\r
+.o2k7Skin span.mce_hr {background-position:-360px 0}\r
+.o2k7Skin span.mce_visualaid {background-position:-660px 0}\r
+.o2k7Skin span.mce_charmap {background-position:-240px 0}\r
+.o2k7Skin span.mce_paste {background-position:-560px 0}\r
+.o2k7Skin span.mce_copy {background-position:-700px 0}\r
+.o2k7Skin span.mce_cut {background-position:-680px 0}\r
+.o2k7Skin span.mce_blockquote {background-position:-220px 0}\r
+.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0}\r
+.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0}\r
+.o2k7Skin .mce_forecolorpicker {background-position:-720px 0}\r
+.o2k7Skin .mce_backcolorpicker {background-position:-760px 0}\r
+\r
+/* Plugins */\r
+.o2k7Skin span.mce_advhr {background-position:-0px -20px}\r
+.o2k7Skin span.mce_ltr {background-position:-20px -20px}\r
+.o2k7Skin span.mce_rtl {background-position:-40px -20px}\r
+.o2k7Skin span.mce_emotions {background-position:-60px -20px}\r
+.o2k7Skin span.mce_fullpage {background-position:-80px -20px}\r
+.o2k7Skin span.mce_fullscreen {background-position:-100px -20px}\r
+.o2k7Skin span.mce_iespell {background-position:-120px -20px}\r
+.o2k7Skin span.mce_insertdate {background-position:-140px -20px}\r
+.o2k7Skin span.mce_inserttime {background-position:-160px -20px}\r
+.o2k7Skin span.mce_absolute {background-position:-180px -20px}\r
+.o2k7Skin span.mce_backward {background-position:-200px -20px}\r
+.o2k7Skin span.mce_forward {background-position:-220px -20px}\r
+.o2k7Skin span.mce_insert_layer {background-position:-240px -20px}\r
+.o2k7Skin span.mce_insertlayer {background-position:-260px -20px}\r
+.o2k7Skin span.mce_movebackward {background-position:-280px -20px}\r
+.o2k7Skin span.mce_moveforward {background-position:-300px -20px}\r
+.o2k7Skin span.mce_media {background-position:-320px -20px}\r
+.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px}\r
+.o2k7Skin span.mce_pastetext {background-position:-360px -20px}\r
+.o2k7Skin span.mce_pasteword {background-position:-380px -20px}\r
+.o2k7Skin span.mce_selectall {background-position:-400px -20px}\r
+.o2k7Skin span.mce_preview {background-position:-420px -20px}\r
+.o2k7Skin span.mce_print {background-position:-440px -20px}\r
+.o2k7Skin span.mce_cancel {background-position:-460px -20px}\r
+.o2k7Skin span.mce_save {background-position:-480px -20px}\r
+.o2k7Skin span.mce_replace {background-position:-500px -20px}\r
+.o2k7Skin span.mce_search {background-position:-520px -20px}\r
+.o2k7Skin span.mce_styleprops {background-position:-560px -20px}\r
+.o2k7Skin span.mce_table {background-position:-580px -20px}\r
+.o2k7Skin span.mce_cell_props {background-position:-600px -20px}\r
+.o2k7Skin span.mce_delete_table {background-position:-620px -20px}\r
+.o2k7Skin span.mce_delete_col {background-position:-640px -20px}\r
+.o2k7Skin span.mce_delete_row {background-position:-660px -20px}\r
+.o2k7Skin span.mce_col_after {background-position:-680px -20px}\r
+.o2k7Skin span.mce_col_before {background-position:-700px -20px}\r
+.o2k7Skin span.mce_row_after {background-position:-720px -20px}\r
+.o2k7Skin span.mce_row_before {background-position:-740px -20px}\r
+.o2k7Skin span.mce_merge_cells {background-position:-760px -20px}\r
+.o2k7Skin span.mce_table_props {background-position:-980px -20px}\r
+.o2k7Skin span.mce_row_props {background-position:-780px -20px}\r
+.o2k7Skin span.mce_split_cells {background-position:-800px -20px}\r
+.o2k7Skin span.mce_template {background-position:-820px -20px}\r
+.o2k7Skin span.mce_visualchars {background-position:-840px -20px}\r
+.o2k7Skin span.mce_abbr {background-position:-860px -20px}\r
+.o2k7Skin span.mce_acronym {background-position:-880px -20px}\r
+.o2k7Skin span.mce_attribs {background-position:-900px -20px}\r
+.o2k7Skin span.mce_cite {background-position:-920px -20px}\r
+.o2k7Skin span.mce_del {background-position:-940px -20px}\r
+.o2k7Skin span.mce_ins {background-position:-960px -20px}\r
+.o2k7Skin span.mce_pagebreak {background-position:0 -40px}\r
+.o2k7Skin .mce_spellchecker span.mceAction {background-position:-540px -20px}\r
--- /dev/null
+/* Black */\r
+.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton span.mceOpen, .o2k7SkinBlack .mceListBox .mceOpen {background-image:url(img/button_bg_black.png)}\r
+.o2k7SkinBlack table, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF}\r
+.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}\r
+.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}\r
+.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;}\r
+.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}\r
+.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#FFE7A1}
\ No newline at end of file
--- /dev/null
+/* Silver */\r
+.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton span.mceOpen, .o2k7SkinSilver .mceListBox .mceOpen {background-image:url(img/button_bg_silver.png)}\r
+.o2k7SkinSilver table, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}\r
+.o2k7SkinSilver .mceListBox .mceText {background:#FFF}\r
+.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb}\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\r
- <title>{$lang_theme_code_title}</title>\r
- <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
- <script language="javascript" type="text/javascript" src="jscripts/source_editor.js"></script>\r
+ <title>{#advanced_dlg.code_title}</title>\r
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+ <script type="text/javascript" src="js/source_editor.js"></script>\r
<base target="_self" />\r
</head>\r
-<body onload="tinyMCEPopup.executeOnLoad('onLoadInit();');" onresize="resizeInputs();" style="display: none">\r
- <form name="source" onsubmit="saveContent();" action="#">\r
- <div style="float: left" class="title">{$lang_theme_code_title}</div>\r
+<body onresize="resizeInputs();" style="display:none; overflow:hidden;">\r
+ <form name="source" onsubmit="saveContent();return false;" action="#">\r
+ <div style="float: left" class="title">{#advanced_dlg.code_title}</div>\r
\r
<div id="wrapline" style="float: right">\r
- <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{$lang_theme_code_wordwrap}</label>\r
+ <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>\r
</div>\r
\r
<br style="clear: both" />\r
\r
- <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px" dir="ltr" wrap="off"></textarea>\r
+ <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>\r
\r
<div class="mceActionPanel">\r
<div style="float: left">\r
- <input type="button" name="insert" value="{$lang_update}" onclick="saveContent();" id="insert" />\r
+ <input type="submit" name="insert" value="{#update}" id="insert" />\r
</div>\r
\r
<div style="float: right">\r
- <input type="button" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
+ <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
</div>\r
</div>\r
</form>\r
--- /dev/null
+(function(){var DOM=tinymce.DOM;tinymce.ThemeManager.requireLangPack('simple');tinymce.create('tinymce.themes.SimpleTheme',{init:function(ed,url){var t=this,states=['Bold','Italic','Underline','Strikethrough','InsertUnorderedList','InsertOrderedList'],s=ed.settings;t.editor=ed;ed.onInit.add(function(){ed.onNodeChange.add(function(ed,cm){tinymce.each(states,function(c){cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));});});ed.dom.loadCSS(url+"/skins/"+s.skin+"/content.css");});DOM.loadCSS((s.editor_css?ed.baseURI.toAbsolute(s.editor_css):'')||url+"/skins/"+s.skin+"/ui.css");},renderUI:function(o){var t=this,n=o.targetNode,ic,tb,ed=t.editor,cf=ed.controlManager,sc;n=DOM.insertAfter(DOM.create('span',{id:ed.id+'_container','class':'mceEditor '+ed.settings.skin+'SimpleSkin'}),n);n=sc=DOM.add(n,'table',{cellPadding:0,cellSpacing:0,'class':'mceLayout'});n=tb=DOM.add(n,'tbody');n=DOM.add(tb,'tr');n=ic=DOM.add(DOM.add(n,'td'),'div',{'class':'mceIframeContainer'});n=DOM.add(DOM.add(tb,'tr',{'class':'last'}),'td',{'class':'mceToolbar mceLast',align:'center'});tb=t.toolbar=cf.createToolbar("tools1");tb.add(cf.createButton('bold',{title:'simple.bold_desc',cmd:'Bold'}));tb.add(cf.createButton('italic',{title:'simple.italic_desc',cmd:'Italic'}));tb.add(cf.createButton('underline',{title:'simple.underline_desc',cmd:'Underline'}));tb.add(cf.createButton('strikethrough',{title:'simple.striketrough_desc',cmd:'Strikethrough'}));tb.add(cf.createSeparator());tb.add(cf.createButton('undo',{title:'simple.undo_desc',cmd:'Undo'}));tb.add(cf.createButton('redo',{title:'simple.redo_desc',cmd:'Redo'}));tb.add(cf.createSeparator());tb.add(cf.createButton('cleanup',{title:'simple.cleanup_desc',cmd:'mceCleanup'}));tb.add(cf.createSeparator());tb.add(cf.createButton('insertunorderedlist',{title:'simple.bullist_desc',cmd:'InsertUnorderedList'}));tb.add(cf.createButton('insertorderedlist',{title:'simple.numlist_desc',cmd:'InsertOrderedList'}));tb.renderTo(n);return{iframeContainer:ic,editorContainer:ed.id+'_container',sizeContainer:sc,deltaHeight:-20};},getInfo:function(){return{longname:'Simple theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add('simple',tinymce.themes.SimpleTheme);})();
\ No newline at end of file
--- /dev/null
+/**\r
+ * $Id: editor_template_src.js 752 2008-03-27 21:51:25Z spocke $\r
+ *\r
+ * This file is meant to showcase how to create a simple theme. The advanced\r
+ * theme is more suitable for production use.\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM;\r
+\r
+ // Tell it to load theme specific language pack(s)\r
+ tinymce.ThemeManager.requireLangPack('simple');\r
+\r
+ tinymce.create('tinymce.themes.SimpleTheme', {\r
+ init : function(ed, url) {\r
+ var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings;\r
+\r
+ t.editor = ed;\r
+\r
+ ed.onInit.add(function() {\r
+ ed.onNodeChange.add(function(ed, cm) {\r
+ tinymce.each(states, function(c) {\r
+ cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));\r
+ });\r
+ });\r
+\r
+ ed.dom.loadCSS(url + "/skins/" + s.skin + "/content.css");\r
+ });\r
+\r
+ DOM.loadCSS((s.editor_css ? ed.baseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css");\r
+ },\r
+\r
+ renderUI : function(o) {\r
+ var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;\r
+\r
+ n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n);\r
+ n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'});\r
+ n = tb = DOM.add(n, 'tbody');\r
+\r
+ // Create iframe container\r
+ n = DOM.add(tb, 'tr');\r
+ n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'});\r
+\r
+ // Create toolbar container\r
+ n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'});\r
+\r
+ // Create toolbar\r
+ tb = t.toolbar = cf.createToolbar("tools1");\r
+ tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'}));\r
+ tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'}));\r
+ tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'}));\r
+ tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'}));\r
+ tb.add(cf.createSeparator());\r
+ tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'}));\r
+ tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'}));\r
+ tb.add(cf.createSeparator());\r
+ tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'}));\r
+ tb.add(cf.createSeparator());\r
+ tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'}));\r
+ tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'}));\r
+ tb.renderTo(n);\r
+\r
+ return {\r
+ iframeContainer : ic,\r
+ editorContainer : ed.id + '_container',\r
+ sizeContainer : sc,\r
+ deltaHeight : -20\r
+ };\r
+ },\r
+\r
+ getInfo : function() {\r
+ return {\r
+ longname : 'Simple theme',\r
+ author : 'Moxiecode Systems AB',\r
+ authorurl : 'http://tinymce.moxiecode.com',\r
+ version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+ }\r
+ }\r
+ });\r
+\r
+ tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme);\r
+})();
\ No newline at end of file
--- /dev/null
+tinyMCE.addI18n('en.simple',{\r
+bold_desc:"Bold (Ctrl+B)",\r
+italic_desc:"Italic (Ctrl+I)",\r
+underline_desc:"Underline (Ctrl+U)",\r
+striketrough_desc:"Strikethrough",\r
+bullist_desc:"Unordered list",\r
+numlist_desc:"Ordered list",\r
+undo_desc:"Undo (Ctrl+Z)",\r
+redo_desc:"Redo (Ctrl+Y)",\r
+cleanup_desc:"Cleanup messy code"\r
+});
\ No newline at end of file
--- /dev/null
+body, td, pre {\r
+ font-family: Verdana, Arial, Helvetica, sans-serif;\r
+ font-size: 10px;\r
+}\r
+\r
+body {\r
+ background-color: #FFFFFF;\r
+}\r
+\r
+.mceVisualAid {\r
+ border: 1px dashed #BBBBBB;\r
+}\r
+\r
+/* MSIE specific */\r
+\r
+* html body {\r
+ scrollbar-3dlight-color: #F0F0EE;\r
+ scrollbar-arrow-color: #676662;\r
+ scrollbar-base-color: #F0F0EE;\r
+ scrollbar-darkshadow-color: #DDDDDD;\r
+ scrollbar-face-color: #E0E0DD;\r
+ scrollbar-highlight-color: #F0F0EE;\r
+ scrollbar-shadow-color: #F0F0EE;\r
+ scrollbar-track-color: #F5F5F5; \r
+}\r
--- /dev/null
+/* Reset */\r
+.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
+\r
+/* Containers */\r
+.defaultSimpleSkin {position:relative}\r
+.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}\r
+.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}\r
+.defaultSimpleSkin .mceToolbar {height:24px;}\r
+\r
+/* Layout */\r
+.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}\r
+.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
+\r
+/* Button */\r
+.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}\r
+.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}\r
+.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}\r
+.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; filter:alpha(opacity=30)}\r
+\r
+/* Separator */\r
+.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}\r
+\r
+/* Theme */\r
+.defaultSimpleSkin span.mce_bold {background-position:0 0}\r
+.defaultSimpleSkin span.mce_italic {background-position:-60px 0}\r
+.defaultSimpleSkin span.mce_underline {background-position:-140px 0}\r
+.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}\r
+.defaultSimpleSkin span.mce_undo {background-position:-160px 0}\r
+.defaultSimpleSkin span.mce_redo {background-position:-100px 0}\r
+.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}\r
+.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}\r
+.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}\r
--- /dev/null
+body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+\r
+body {background: #FFF;}\r
+.mceVisualAid {border: 1px dashed #BBB;}\r
+\r
+/* IE */\r
+\r
+* html body {\r
+scrollbar-3dlight-color: #F0F0EE;\r
+scrollbar-arrow-color: #676662;\r
+scrollbar-base-color: #F0F0EE;\r
+scrollbar-darkshadow-color: #DDDDDD;\r
+scrollbar-face-color: #E0E0DD;\r
+scrollbar-highlight-color: #F0F0EE;\r
+scrollbar-shadow-color: #F0F0EE;\r
+scrollbar-track-color: #F5F5F5; \r
+}\r
--- /dev/null
+/* Reset */\r
+.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
+\r
+/* Containers */\r
+.o2k7SimpleSkin {position:relative}\r
+.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}\r
+.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}\r
+.o2k7SimpleSkin .mceToolbar {height:26px;}\r
+\r
+/* Layout */\r
+.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }\r
+.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}\r
+.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}\r
+.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
+\r
+/* Button */\r
+.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}\r
+.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}\r
+.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\r
+.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}\r
+.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; filter:alpha(opacity=30)}\r
+\r
+/* Separator */\r
+.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}\r
+\r
+/* Theme */\r
+.o2k7SimpleSkin span.mce_bold {background-position:0 0}\r
+.o2k7SimpleSkin span.mce_italic {background-position:-60px 0}\r
+.o2k7SimpleSkin span.mce_underline {background-position:-140px 0}\r
+.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}\r
+.o2k7SimpleSkin span.mce_undo {background-position:-160px 0}\r
+.o2k7SimpleSkin span.mce_redo {background-position:-100px 0}\r
+.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}\r
+.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}\r
+.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0}\r
-function TinyMCE_Engine(){var ua;this.majorVersion="2";this.minorVersion="1.3";this.releaseDate="2007-11-27";this.instances=[];this.switchClassCache=[];this.windowArgs=[];this.loadedFiles=[];this.pendingFiles=[];this.loadingIndex=0;this.configs=[];this.currentConfig=0;this.eventHandlers=[];this.log=[];this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.settings=[];ua=navigator.userAgent;this.isMSIE=(navigator.appName=="Microsoft Internet Explorer");this.isMSIE5=this.isMSIE&&(ua.indexOf('MSIE 5')!=-1);this.isMSIE5_0=this.isMSIE&&(ua.indexOf('MSIE 5.0')!=-1);this.isMSIE7=this.isMSIE&&(ua.indexOf('MSIE 7')!=-1);this.isGecko=ua.indexOf('Gecko')!=-1;this.isSafari=ua.indexOf('Safari')!=-1;this.isOpera=window['opera']&&opera.buildNumber?true:false;this.isMac=ua.indexOf('Mac')!=-1;this.isNS7=ua.indexOf('Netscape/7')!=-1;this.isNS71=ua.indexOf('Netscape/7.1')!=-1;this.dialogCounter=0;this.plugins=[];this.themes=[];this.menus=[];this.loadedPlugins=[];this.buttonMap=[];this.isLoaded=false;if(this.isOpera){this.isMSIE=true;this.isGecko=false;this.isSafari=false}this.isIE=this.isMSIE;this.isRealIE=this.isMSIE&&!this.isOpera;this.idCounter=0};TinyMCE_Engine.prototype={init:function(settings){var theme,nl,baseHREF="",i,cssPath,entities,h,p,src,elements=[],head;if(this.isMSIE5_0)return;this.settings=settings;if(typeof(document.execCommand)=='undefined')return;if(!tinyMCE.baseURL){head=document.getElementsByTagName('head')[0];if(head){for(i=0,nl=head.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i])}for(i=0,nl=document.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i]);nl=document.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(nl[i].href)baseHREF=nl[i].href}for(i=0;i<elements.length;i++){if(elements[i].src&&(elements[i].src.indexOf("tiny_mce.js")!=-1||elements[i].src.indexOf("tiny_mce_dev.js")!=-1||elements[i].src.indexOf("tiny_mce_src.js")!=-1||elements[i].src.indexOf("tiny_mce_gzip")!=-1)){src=elements[i].src;tinyMCE.srcMode=(src.indexOf('_src')!=-1||src.indexOf('_dev')!=-1)?'_src':'';tinyMCE.gzipMode=src.indexOf('_gzip')!=-1;src=src.substring(0,src.lastIndexOf('/'));if(settings.exec_mode=="src"||settings.exec_mode=="normal")tinyMCE.srcMode=settings.exec_mode=="src"?'_src':'';if(baseHREF!==''&&src.indexOf('://')==-1)tinyMCE.baseURL=baseHREF+src;else tinyMCE.baseURL=src;break}}}this.documentBasePath=document.location.href;if(this.documentBasePath.indexOf('?')!=-1)this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.indexOf('?'));this.documentURL=this.documentBasePath;this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.lastIndexOf('/'));if(tinyMCE.baseURL.indexOf('://')==-1&&tinyMCE.baseURL.charAt(0)!='/'){tinyMCE.baseURL=this.documentBasePath+"/"+tinyMCE.baseURL}this._def("mode","none");this._def("theme","advanced");this._def("plugins","",true);this._def("language","en");this._def("docs_language",this.settings.language);this._def("elements","");this._def("textarea_trigger","mce_editable");this._def("editor_selector","");this._def("editor_deselector","mceNoEditor");this._def("valid_elements","+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],cite[title|id|class|style|dir|lang],abbr[title|id|class|style|dir|lang],acronym[title|id|class|style|dir|lang],del[title|id|class|style|dir|lang|datetime|cite],ins[title|id|class|style|dir|lang|datetime|cite]");this._def("extended_valid_elements","");this._def("invalid_elements","");this._def("encoding","");this._def("urlconverter_callback",tinyMCE.getParam("urlconvertor_callback","TinyMCE_Engine.prototype.convertURL"));this._def("save_callback","");this._def("force_br_newlines",false);this._def("force_p_newlines",true);this._def("add_form_submit_trigger",true);this._def("relative_urls",true);this._def("remove_script_host",true);this._def("focus_alert",true);this._def("document_base_url",this.documentURL);this._def("visual",true);this._def("visual_table_class","mceVisualAid");this._def("setupcontent_callback","");this._def("fix_content_duplication",true);this._def("custom_undo_redo",true);this._def("custom_undo_redo_levels",-1);this._def("custom_undo_redo_keyboard_shortcuts",true);this._def("custom_undo_redo_restore_selection",true);this._def("custom_undo_redo_global",false);this._def("verify_html",true);this._def("apply_source_formatting",false);this._def("directionality","ltr");this._def("cleanup_on_startup",false);this._def("inline_styles",false);this._def("convert_newlines_to_brs",false);this._def("auto_reset_designmode",true);this._def("entities","39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",true);this._def("entity_encoding","named");this._def("cleanup_callback","");this._def("add_unload_trigger",true);this._def("ask",false);this._def("nowrap",false);this._def("auto_resize",false);this._def("auto_focus",false);this._def("cleanup",true);this._def("remove_linebreaks",true);this._def("button_tile_map",false);this._def("submit_patch",true);this._def("browsers","msie,safari,gecko,opera",true);this._def("dialog_type","window");this._def("accessibility_warnings",true);this._def("accessibility_focus",true);this._def("merge_styles_invalid_parents","");this._def("force_hex_style_colors",true);this._def("trim_span_elements",true);this._def("convert_fonts_to_spans",false);this._def("doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');this._def("font_size_classes",'');this._def("font_size_style_values",'xx-small,x-small,small,medium,large,x-large,xx-large',true);this._def("event_elements",'a,img',true);this._def("convert_urls",true);this._def("table_inline_editing",false);this._def("object_resizing",true);this._def("custom_shortcuts",true);this._def("convert_on_click",false);this._def("content_css",'');this._def("fix_list_elements",true);this._def("fix_table_elements",false);this._def("strict_loading_mode",document.contentType=='application/xhtml+xml');this._def("hidden_tab_class",'');this._def("display_tab_class",'');this._def("gecko_spellcheck",false);this._def("hide_selects_on_submit",true);this._def("forced_root_block",false);this._def("remove_trailing_nbsp",false);this._def("save_on_tinymce_forms",false);if(this.isMSIE&&!this.isOpera)this.settings.strict_loading_mode=false;if(this.isMSIE&&this.settings.browsers.indexOf('msie')==-1)return;if(this.isGecko&&this.settings.browsers.indexOf('gecko')==-1)return;if(this.isSafari&&this.settings.browsers.indexOf('safari')==-1)return;if(this.isOpera&&this.settings.browsers.indexOf('opera')==-1)return;baseHREF=tinyMCE.settings.document_base_url;h=document.location.href;p=h.indexOf('://');if(p>0&&document.location.protocol!="file:"){p=h.indexOf('/',p+3);h=h.substring(0,p);if(baseHREF.indexOf('://')==-1)baseHREF=h+baseHREF;tinyMCE.settings.document_base_url=baseHREF;tinyMCE.settings.document_base_prefix=h}if(baseHREF.indexOf('?')!=-1)baseHREF=baseHREF.substring(0,baseHREF.indexOf('?'));this.settings.base_href=baseHREF.substring(0,baseHREF.lastIndexOf('/'))+"/";theme=this.settings.theme;this.inlineStrict='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';this.inlineTransitional='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';this.blockElms='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';this.blockRegExp=new RegExp("^("+this.blockElms+")$","i");this.posKeyCodes=[13,45,36,35,33,34,37,38,39,40];this.uniqueURL='javascript:void(091039730);';this.uniqueTag='<div id="mceTMPElement" style="display: none">TMP</div>';this.callbacks=['onInit','getInfo','getEditorTemplate','setupContent','onChange','onPageLoad','handleNodeChange','initInstance','execCommand','getControlHTML','handleEvent','cleanup','removeInstance'];this.settings.theme_href=tinyMCE.baseURL+"/themes/"+theme;if(!tinyMCE.isIE||tinyMCE.isOpera)this.settings.force_br_newlines=false;if(tinyMCE.getParam("popups_css",false)){cssPath=tinyMCE.getParam("popups_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.popups_css=this.documentBasePath+"/"+cssPath;else this.settings.popups_css=cssPath}else this.settings.popups_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_popup.css";if(tinyMCE.getParam("editor_css",false)){cssPath=tinyMCE.getParam("editor_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.editor_css=this.documentBasePath+"/"+cssPath;else this.settings.editor_css=cssPath}else{if(this.settings.editor_css!=='')this.settings.editor_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_ui.css"}if(this.configs.length==0){if(typeof(TinyMCECompressed)=="undefined"){tinyMCE.addEvent(window,"DOMContentLoaded",TinyMCE_Engine.prototype.onLoad);if(tinyMCE.isRealIE){if(document.body)tinyMCE.addEvent(document.body,"readystatechange",TinyMCE_Engine.prototype.onLoad);else tinyMCE.addEvent(document,"readystatechange",TinyMCE_Engine.prototype.onLoad)}tinyMCE.addEvent(window,"load",TinyMCE_Engine.prototype.onLoad);tinyMCE._addUnloadEvents()}}this.loadScript(tinyMCE.baseURL+'/themes/'+this.settings.theme+'/editor_template'+tinyMCE.srcMode+'.js');this.loadScript(tinyMCE.baseURL+'/langs/'+this.settings.language+'.js');this.loadCSS(this.settings.editor_css);p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){if(p[i].charAt(0)!='-')this.loadScript(tinyMCE.baseURL+'/plugins/'+p[i]+'/editor_plugin'+tinyMCE.srcMode+'.js')}}if(tinyMCE.getParam('entity_encoding')=='named'){settings.cleanup_entities=[];entities=tinyMCE.getParam('entities','',true,',');for(i=0;i<entities.length;i+=2)settings.cleanup_entities['c'+entities[i]]=entities[i+1]}settings.index=this.configs.length;this.configs[this.configs.length]=settings;this.loadNextScript();if(this.isIE&&!this.isOpera){try{document.execCommand('BackgroundImageCache',false,true)}catch(e){}}this.xmlEncodeRe=new RegExp('[<>&"]','g')},_addUnloadEvents:function(){var st=tinyMCE.settings.add_unload_trigger;if(tinyMCE.isIE){if(st){tinyMCE.addEvent(window,"unload",TinyMCE_Engine.prototype.unloadHandler);tinyMCE.addEvent(window.document,"beforeunload",TinyMCE_Engine.prototype.unloadHandler)}}else{if(st)tinyMCE.addEvent(window,"unload",function(){tinyMCE.triggerSave(true,true)})}},_def:function(key,def_val,t){var v=tinyMCE.getParam(key,def_val);v=t?v.replace(/\s+/g,""):v;this.settings[key]=v},hasPlugin:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},addPlugin:function(n,p){var op=this.plugins[n];p.baseURL=op?op.baseURL:tinyMCE.baseURL+"/plugins/"+n;this.plugins[n]=p;this.loadNextScript()},setPluginBaseURL:function(n,u){var op=this.plugins[n];if(op)op.baseURL=u;else this.plugins[n]={baseURL:u}},loadPlugin:function(n,u){u=u.indexOf('.js')!=-1?u.substring(0,u.lastIndexOf('/')):u;u=u.charAt(u.length-1)=='/'?u.substring(0,u.length-1):u;this.plugins[n]={baseURL:u};this.loadScript(u+"/editor_plugin"+(tinyMCE.srcMode?'_src':'')+".js")},hasTheme:function(n){return typeof(this.themes[n])!="undefined"&&this.themes[n]!=null},addTheme:function(n,t){this.themes[n]=t;this.loadNextScript()},addMenu:function(n,m){this.menus[n]=m},hasMenu:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},loadScript:function(url){var i;for(i=0;i<this.loadedFiles.length;i++){if(this.loadedFiles[i]==url)return}if(tinyMCE.settings.strict_loading_mode)this.pendingFiles[this.pendingFiles.length]=url;else document.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'"></script>');this.loadedFiles[this.loadedFiles.length]=url},loadNextScript:function(){var d=document,se;if(!tinyMCE.settings.strict_loading_mode)return;if(this.loadingIndex<this.pendingFiles.length){se=d.createElementNS('http://www.w3.org/1999/xhtml','script');se.setAttribute('language','javascript');se.setAttribute('type','text/javascript');se.setAttribute('src',this.pendingFiles[this.loadingIndex++]);d.getElementsByTagName("head")[0].appendChild(se)}else this.loadingIndex=-1;},loadCSS:function(url){var ar=url.replace(/\s+/,'').split(',');var lflen=0,csslen=0,skip=false;var x=0,i=0,nl,le;for(x=0,csslen=ar.length;x<csslen;x++){if(ar[x]!=null&&ar[x]!='null'&&ar[x].length>0){for(i=0,lflen=this.loadedFiles.length;i<lflen;i++){if(this.loadedFiles[i]==ar[x]){skip=true;break}}if(!skip){if(tinyMCE.settings.strict_loading_mode){nl=document.getElementsByTagName("head");le=document.createElement('link');le.setAttribute('href',ar[x]);le.setAttribute('rel','stylesheet');le.setAttribute('type','text/css');nl[0].appendChild(le)}else document.write('<link href="'+ar[x]+'" rel="stylesheet" type="text/css" />');this.loadedFiles[this.loadedFiles.length]=ar[x]}}}},importCSS:function(doc,css){var css_ary=css.replace(/\s+/,'').split(',');var csslen,elm,headArr,x,css_file;for(x=0,csslen=css_ary.length;x<csslen;x++){css_file=css_ary[x];if(css_file!=null&&css_file!='null'&&css_file.length>0){if(css_file.indexOf('://')==-1&&css_file.charAt(0)!='/')css_file=this.documentBasePath+"/"+css_file;if(typeof(doc.createStyleSheet)=="undefined"){elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if((headArr=doc.getElementsByTagName("head"))!=null&&headArr.length>0)headArr[0].appendChild(elm)}else doc.createStyleSheet(css_file)}}},confirmAdd:function(e,settings){var elm=tinyMCE.isIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(tinyMCE.settings.convert_on_click||(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang.lang_edit_confirm)))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true')},updateContent:function(form_element_name){var formElement,n,inst,doc;formElement=document.getElementById(form_element_name);for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();if(inst.formElement==formElement){doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isIE)doc.body.innerHTML=tinyMCE._cleanupHTML(inst,doc,this.settings,doc.body,inst.visualAid)}}},addMCEControl:function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCE_Control(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst._onAdd(replace_element,form_element_name,target_document)},removeInstance:function(ti){var t=[],n,i;for(n in tinyMCE.instances){i=tinyMCE.instances[n];if(tinyMCE.isInstance(i)&&ti!=i)t[n]=i}tinyMCE.instances=t;n=[];t=tinyMCE.undoLevels;for(i=0;i<t.length;i++){if(t[i]!=ti)n.push(t[i])}tinyMCE.undoLevels=n;tinyMCE.undoIndex=n.length;tinyMCE.dispatchCallback(ti,'remove_instance_callback','removeInstance',ti);return ti},removeMCEControl:function(editor_id){var inst=tinyMCE.getInstanceById(editor_id),h,re,ot,tn,n;if(inst){inst.switchSettings();editor_id=inst.editorId;h=tinyMCE.getContent(editor_id);this.removeInstance(inst);tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;tinyMCE.selectedInstance=tinyMCE.instances[n];break}re=document.getElementById(editor_id+"_parent");ot=inst.oldTargetElement;tn=ot.nodeName.toLowerCase();if(tn=="textarea"||tn=="input"){re.parentNode.removeChild(re);ot.style.display="inline";ot.value=h}else{ot.innerHTML=h;ot.style.display='block';re.parentNode.insertBefore(ot,re);re.parentNode.removeChild(re)}}},triggerSave:function(skip_cleanup,skip_callback){var inst,n;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.triggerSave(skip_cleanup,skip_callback)}},resetForm:function(form_index){var i,inst,n,formObj=document.forms[form_index];for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();for(i=0;i<formObj.elements.length;i++){if(inst.formTargetElementId==formObj.elements[i].name)inst.getBody().innerHTML=inst.startContent}}},execInstanceCommand:function(editor_id,command,user_interface,value,focus){var inst=tinyMCE.getInstanceById(editor_id),r;if(inst){r=inst.selection.getRng();if(typeof(focus)=="undefined")focus=true;if(focus&&(!r||!r.item))inst.contentWindow.focus();inst.autoResetDesignMode();this.selectedElement=inst.getFocusElement();inst.select();tinyMCE.execCommand(command,user_interface,value);if(tinyMCE.isIE&&window.event!=null)tinyMCE.cancelEvent(window.event)}},execCommand:function(command,user_interface,value){var inst=tinyMCE.selectedInstance,n,pe,te;user_interface=user_interface?user_interface:false;value=value?value:null;if(inst)inst.switchSettings();switch(command){case"Undo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex>0){tinyMCE.nextUndoRedoAction='Undo';inst=this.undoLevels[--this.undoIndex];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Undo')}}else inst.execCommand('Undo');return true;case"Redo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex<=this.undoLevels.length-1){tinyMCE.nextUndoRedoAction='Redo';inst=this.undoLevels[this.undoIndex++];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Redo')}}else inst.execCommand('Redo');return true;case'mceFocus':inst=tinyMCE.getInstanceById(value);if(inst)inst.getWin().focus();return;case"mceAddControl":case"mceAddEditor":tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceAddFrameControl":tinyMCE.addMCEControl(tinyMCE._getElementById(value.element,value.document),value.element,value.document);return;case"mceRemoveControl":case"mceRemoveEditor":tinyMCE.removeMCEControl(value);return;case"mceToggleEditor":inst=tinyMCE.getInstanceById(value);if(inst){pe=document.getElementById(inst.editorId+'_parent');te=inst.oldTargetElement;if(typeof(inst.enabled)=='undefined')inst.enabled=true;inst.enabled=!inst.enabled;if(!inst.enabled){pe.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')te.value=inst.getHTML();else te.innerHTML=inst.getHTML();te.style.display=inst.oldTargetDisplay;tinyMCE.dispatchCallback(inst,'hide_instance_callback','hideInstance',inst)}else{pe.style.display='block';te.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')inst.setHTML(te.value);else inst.setHTML(te.innerHTML);inst.useCSS=false;tinyMCE.dispatchCallback(inst,'show_instance_callback','showInstance',inst)}}else tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceResetDesignMode":if(tinyMCE.isGecko){for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;try{tinyMCE.instances[n].getDoc().designMode="off";tinyMCE.instances[n].getDoc().designMode="on";tinyMCE.instances[n].useCSS=false}catch(e){}}}return}if(inst){inst.execCommand(command,user_interface,value)}else if(tinyMCE.settings.focus_alert)alert(tinyMCELang.lang_focus_alert)},_createIFrame:function(replace_element,doc,win){var iframe,id=replace_element.getAttribute("id");var aw,ah;if(typeof(doc)=="undefined")doc=document;if(typeof(win)=="undefined")win=window;iframe=doc.createElement("iframe");aw=""+tinyMCE.settings.area_width;ah=""+tinyMCE.settings.area_height;if(aw.indexOf('%')==-1){aw=parseInt(aw);aw=(isNaN(aw)||aw<0)?300:aw;aw=aw+"px"}if(ah.indexOf('%')==-1){ah=parseInt(ah);ah=(isNaN(ah)||ah<0)?240:ah;ah=ah+"px"}iframe.setAttribute("id",id);iframe.setAttribute("name",id);iframe.setAttribute("class","mceEditorIframe");iframe.setAttribute("border","0");iframe.setAttribute("frameBorder","0");iframe.setAttribute("marginWidth","0");iframe.setAttribute("marginHeight","0");iframe.setAttribute("leftMargin","0");iframe.setAttribute("topMargin","0");iframe.setAttribute("width",aw);iframe.setAttribute("height",ah);iframe.setAttribute("allowtransparency","true");iframe.className='mceEditorIframe';if(tinyMCE.settings.auto_resize)iframe.setAttribute("scrolling","no");if(tinyMCE.isRealIE)iframe.setAttribute("src",this.settings.default_document);iframe.style.width=aw;iframe.style.height=ah;if(tinyMCE.settings.strict_loading_mode)iframe.style.marginBottom='-5px';if(tinyMCE.isRealIE)replace_element.outerHTML=iframe.outerHTML;else replace_element.parentNode.replaceChild(iframe,replace_element);if(tinyMCE.isRealIE)return win.frames[id];else return iframe},setupContent:function(editor_id){var inst=tinyMCE.instances[editor_id],i,doc=inst.getDoc(),head=doc.getElementsByTagName('head').item(0);var content=inst.startContent,contentElement,body;if(tinyMCE.settings.strict_loading_mode){content=content.replace(/</g,'<');content=content.replace(/>/g,'>');content=content.replace(/"/g,'"');content=content.replace(/&/g,'&')}tinyMCE.selectedInstance=inst;inst.switchSettings();if(!tinyMCE.isIE&&tinyMCE.getParam("setupcontent_reload",false)&&doc.title!="blank_page"){try{doc.location.href=tinyMCE.baseURL+"/blank.htm"}catch(ex){}window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",1000);return}if(!head||!doc.body){window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",10);return}tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/themes/"+inst.settings.theme+"/css/editor_content.css");tinyMCE.importCSS(inst.getDoc(),inst.settings.content_css);tinyMCE.dispatchCallback(inst,'init_instance_callback','initInstance',inst);if(tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')){inst.addShortcut('ctrl','z','lang_undo_desc','Undo');inst.addShortcut('ctrl','y','lang_redo_desc','Redo')}for(i=1;i<=6;i++)inst.addShortcut('ctrl',''+i,'','FormatBlock',false,'<h'+i+'>');inst.addShortcut('ctrl','7','','FormatBlock',false,'<p>');inst.addShortcut('ctrl','8','','FormatBlock',false,'<div>');inst.addShortcut('ctrl','9','','FormatBlock',false,'<address>');if(tinyMCE.isGecko){inst.addShortcut('ctrl','b','lang_bold_desc','Bold');inst.addShortcut('ctrl','i','lang_italic_desc','Italic');inst.addShortcut('ctrl','u','lang_underline_desc','Underline')}if(tinyMCE.getParam("convert_fonts_to_spans"))inst.getBody().setAttribute('id','mceSpanFonts');if(tinyMCE.settings.nowrap)doc.body.style.whiteSpace="nowrap";doc.body.dir=this.settings.directionality;doc.editorId=editor_id;if(!tinyMCE.isIE)doc.documentElement.editorId=editor_id;inst.setBaseHREF(tinyMCE.settings.base_href);if(tinyMCE.settings.convert_newlines_to_brs){content=tinyMCE.regexpReplace(content,"\r\n","<br />","gi");content=tinyMCE.regexpReplace(content,"\r","<br />","gi");content=tinyMCE.regexpReplace(content,"\n","<br />","gi")}content=tinyMCE.storeAwayURLs(content);content=tinyMCE._customCleanup(inst,"insert_to_editor",content);if(tinyMCE.isIE){window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["'+editor_id+'"].getDoc(), "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings.force_br_newlines)doc.styleSheets[0].addRule("p","margin: 0;");body=inst.getBody();body.editorId=editor_id}content=tinyMCE.cleanupHTMLCode(content);if(!tinyMCE.isIE){contentElement=inst.getDoc().createElement("body");doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.settings.cleanup_on_startup)tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,doc,this.settings,contentElement));else tinyMCE.setInnerHTML(inst.getBody(),content);tinyMCE.convertAllRelativeURLs(inst.getBody())}else{if(tinyMCE.settings.cleanup_on_startup){tinyMCE._setHTML(inst.getDoc(),content);try{tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,inst.contentDocument,this.settings,inst.getBody()))}catch(e){}}else tinyMCE._setHTML(inst.getDoc(),content)}tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings.visual,inst);tinyMCE.dispatchCallback(inst,'setupcontent_callback','setupContent',editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isIE)tinyMCE.addEventHandlers(inst);if(tinyMCE.isIE){tinyMCE.addEvent(inst.getBody(),"blur",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(inst.getBody(),"beforedeactivate",TinyMCE_Engine.prototype._eventPatch);if(!tinyMCE.isOpera){tinyMCE.addEvent(doc.body,"mousemove",TinyMCE_Engine.prototype.onMouseMove);tinyMCE.addEvent(doc.body,"beforepaste",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(doc.body,"drop",TinyMCE_Engine.prototype._eventPatch)}}inst.select();tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE._customCleanup(inst,"insert_to_editor_dom",inst.getBody());tinyMCE._customCleanup(inst,"setup_content_dom",inst.getBody());tinyMCE._setEventsEnabled(inst.getBody(),false);tinyMCE.cleanupAnchors(inst.getDoc());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(inst.getDoc());inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);inst.undoRedo.add({content:inst.startContent});if(tinyMCE.isGecko){tinyMCE.selectNodes(inst.getBody(),function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}if(tinyMCE.isGecko)inst.getBody().spellcheck=tinyMCE.getParam("gecko_spellcheck");tinyMCE._removeInternal(inst.getBody());inst.select();tinyMCE.triggerNodeChange(false,true)},storeAwayURLs:function(s){if(!s.match(/(mce_src|mce_href)/gi,s)){s=s.replace(new RegExp('src\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'src="$1" mce_src="$1"');s=s.replace(new RegExp('href\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'href="$1" mce_href="$1"')}return s},_removeInternal:function(n){if(tinyMCE.isGecko){tinyMCE.selectNodes(n,function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}},removeTinyMCEFormElements:function(form_obj){var i,elementId;if(!tinyMCE.getParam('hide_selects_on_submit'))return;if(typeof(form_obj)=="undefined"||form_obj==null)return;if(form_obj.nodeName!="FORM"){if(form_obj.form)form_obj=form_obj.form;else form_obj=tinyMCE.getParentElement(form_obj,"form")}if(form_obj==null)return;for(i=0;i<form_obj.elements.length;i++){elementId=form_obj.elements[i].name?form_obj.elements[i].name:form_obj.elements[i].id;if(elementId.indexOf('mce_editor_')==0)form_obj.elements[i].disabled=true}},handleEvent:function(e){var inst=tinyMCE.selectedInstance,i,elm,keys;if(typeof(tinyMCE)=="undefined")return true;if(tinyMCE.executeCallback(tinyMCE.selectedInstance,'handle_event_callback','handleEvent',e))return false;switch(e.type){case"beforedeactivate":case"blur":if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.execCommand('mceEndTyping');tinyMCE.hideMenus();return;case"drop":case"beforepaste":return;case"submit":tinyMCE.formSubmit(tinyMCE.isMSIE?window.event.srcElement:e.target);return;case"reset":var formObj=tinyMCE.isIE?window.event.srcElement:e.target;for(i=0;i<document.forms.length;i++){if(document.forms[i]==formObj)window.setTimeout('tinyMCE.resetForm('+i+');',10)}return;case"keypress":if(inst&&inst.handleShortcut(e))return false;if(e.target.editorId){tinyMCE.instances[e.target.editorId].select()}else{if(e.target.ownerDocument.editorId)tinyMCE.instances[e.target.ownerDocument.editorId].select()}if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();if((tinyMCE.isGecko||tinyMCE.isOpera||tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&e.keyCode==13&&!e.shiftKey){if(TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance,e)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if((tinyMCE.isGecko&&!tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if(tinyMCE.isIE&&tinyMCE.settings.force_br_newlines&&e.keyCode==13){if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance){var sel=tinyMCE.selectedInstance.getDoc().selection;var rng=sel.createRange();if(tinyMCE.getParentElement(rng.parentElement(),"li")!=null)return false;e.returnValue=false;e.cancelBubble=true;rng.pasteHTML("<br />");rng.collapse(false);rng.select();tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange(false);return false}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false)}return false;case"keyup":case"keydown":tinyMCE.hideMenus();tinyMCE.hasMouseMoved=false;if(inst&&inst.handleShortcut(e))return false;inst._fixRootBlocks();if(inst.settings.remove_trailing_nbsp)inst._fixTrailingNbsp();if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();inst=tinyMCE.selectedInstance;if(tinyMCE.isGecko&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");e.preventDefault();return false}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings.visual,tinyMCE.selectedInstance);if(tinyMCE.isIE&&e.type=="keydown"&&e.keyCode==13)tinyMCE.enterKeyElement=tinyMCE.selectedInstance.getFocusElement();if(tinyMCE.isIE&&e.type=="keyup"&&e.keyCode==13){elm=tinyMCE.enterKeyElement;if(elm){var re=new RegExp('^HR|IMG|BR$','g');var dre=new RegExp('^H[1-6]$','g');if(!elm.hasChildNodes()&&!re.test(elm.nodeName)){if(dre.test(elm.nodeName))elm.innerHTML=" ";else elm.innerHTML=" "}}}keys=tinyMCE.posKeyCodes;var posKey=false;for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){posKey=true;break}}if(tinyMCE.isIE&&tinyMCE.settings.custom_undo_redo){keys=[8,46];for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){if(e.type=="keyup")tinyMCE.triggerNodeChange(false)}}}if(e.keyCode==17)return true;if(tinyMCE.isGecko){if(!posKey&&e.type=="keyup"&&!e.ctrlKey||(e.ctrlKey&&(e.keyCode==86||e.keyCode==88)))tinyMCE.execCommand("mceStartTyping")}else{if(!posKey&&e.type=="keyup")tinyMCE.execCommand("mceStartTyping")}if(e.type=="keydown"&&(posKey||e.ctrlKey)&&inst)inst.undoBookmark=inst.selection.getBookmark();if(e.type=="keyup"&&(posKey||e.ctrlKey))tinyMCE.execCommand("mceEndTyping");if(posKey&&e.type=="keyup")tinyMCE.triggerNodeChange(false);if(tinyMCE.isIE&&e.ctrlKey)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);break;case"mousedown":case"mouseup":case"click":case"dblclick":case"focus":tinyMCE.hideMenus();if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.switchSettings();tinyMCE.selectedInstance.isFocused=true}var targetBody=tinyMCE.getParentElement(e.target,"html");for(var instanceName in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[instanceName]))continue;inst=tinyMCE.instances[instanceName];inst.autoResetDesignMode();if(inst.getBody().parentNode==targetBody){inst.select();tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");tinyMCE.imgElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"img");break}}if(!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark&&(e.type=="mouseup"||e.type=="dblclick"))tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark=tinyMCE.selectedInstance.selection.getBookmark();if(e.type!="focus")tinyMCE.selectedNode=null;tinyMCE.triggerNodeChange(false);tinyMCE.execCommand("mceEndTyping");if(e.type=="mouseup")tinyMCE.execCommand("mceAddUndoLevel");if(!tinyMCE.selectedInstance&&e.target.editorId)tinyMCE.instances[e.target.editorId].select();return false}},getButtonHTML:function(id,lang,img,cmd,ui,val){var h='',m,x,io='';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.isRealIE)io='onmouseover="tinyMCE.lastHover = this;"';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=this.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}else{h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceButtonNormal" target="_self">';h+='<img src="'+img+'" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}return h},getMenuButtonHTML:function(id,lang,img,mcmd,cmd,ui,val){var h='',m,x;mcmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+mcmd+'\');';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: '+x+'px 0" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}else{if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}return h},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'')},addButtonMap:function(m){var i,a=m.replace(/\s+/,'').split(',');for(i=0;i<a.length;i++)this.buttonMap[a[i]]=i},formSubmit:function(f,p){var n,inst,found=false;if(f.form)f=f.form;if(tinyMCE.getParam('save_on_tinymce_forms')){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formElement){if(f==inst.formElement.form){found=true;inst.isNotDirty=true}}}}else found=true;if(found){tinyMCE.removeTinyMCEFormElements(f);tinyMCE.triggerSave()}if(f.mceOldSubmit&&p)f.mceOldSubmit()},submitPatch:function(){tinyMCE.formSubmit(this,true)},onLoad:function(){var r,i,c,mode,trigger,elements,element,settings,elementId,elm;var selector,deselector,elementRefAr,form;if(tinyMCE.settings.strict_loading_mode&&this.loadingIndex!=-1){window.setTimeout('tinyMCE.onLoad();',1);return}if(tinyMCE.isRealIE&&window.event.type=="readystatechange"&&document.readyState!="complete")return true;if(tinyMCE.isLoaded)return true;tinyMCE.isLoaded=true;if(tinyMCE.isRealIE&&document.body&&window.location.href!=window.top.location.href){r=document.body.createTextRange();r.collapse(true);r.select()}tinyMCE.dispatchCallback(null,'onpageload','onPageLoad');for(c=0;c<tinyMCE.configs.length;c++){tinyMCE.settings=tinyMCE.configs[c];selector=tinyMCE.getParam("editor_selector");deselector=tinyMCE.getParam("editor_deselector");elementRefAr=[];if(document.forms&&tinyMCE.settings.add_form_submit_trigger&&!tinyMCE.submitTriggers){for(i=0;i<document.forms.length;i++){form=document.forms[i];tinyMCE.addEvent(form,"submit",TinyMCE_Engine.prototype.handleEvent);tinyMCE.addEvent(form,"reset",TinyMCE_Engine.prototype.handleEvent);tinyMCE.submitTriggers=true;if(tinyMCE.settings.submit_patch){try{form.mceOldSubmit=form.submit;form.submit=TinyMCE_Engine.prototype.submitPatch}catch(e){}}}}mode=tinyMCE.settings.mode;switch(mode){case"exact":elements=tinyMCE.getParam('elements','',true,',');for(i=0;i<elements.length;i++){element=tinyMCE._getElementById(elements[i]);trigger=element?element.getAttribute(tinyMCE.settings.textarea_trigger):"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(element,"class")))continue;if(trigger=="false")continue;if((tinyMCE.settings.ask||tinyMCE.settings.convert_on_click)&&element){elementRefAr[elementRefAr.length]=element;continue}if(element)tinyMCE.addMCEControl(element,elements[i])}break;case"specific_textareas":case"textareas":elements=document.getElementsByTagName("textarea");for(i=0;i<elements.length;i++){elm=elements.item(i);trigger=elm.getAttribute(tinyMCE.settings.textarea_trigger);if(selector!==''&&!new RegExp('\\b'+selector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if(selector!=='')trigger=selector!==''?"true":"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if((mode=="specific_textareas"&&trigger=="true")||(mode=="textareas"&&trigger!="false"))elementRefAr[elementRefAr.length]=elm}break}for(i=0;i<elementRefAr.length;i++){element=elementRefAr[i];elementId=element.name?element.name:element.id;if(tinyMCE.settings.ask||tinyMCE.settings.convert_on_click){if(tinyMCE.isGecko){settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});if(element.nodeName!="TEXTAREA"&&element.nodeName!="INPUT")tinyMCE.addEvent(element,"click",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});}else{settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});tinyMCE.addEvent(element,"click",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});}}else tinyMCE.addMCEControl(element,elementId)}if(tinyMCE.settings.auto_focus){window.setTimeout(function(){var inst=tinyMCE.getInstanceById(tinyMCE.settings.auto_focus);inst.selection.selectNode(inst.getBody(),true,true);inst.contentWindow.focus()},100)}tinyMCE.dispatchCallback(null,'oninit','onInit')}},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.isTinyMCE_Control},getParam:function(name,default_value,strip_whitespace,split_chr){var i,outArray,value=(typeof(this.settings[name])=="undefined")?default_value:this.settings[name];if(value=="true"||value=="false")return(value=="true");if(strip_whitespace)value=tinyMCE.regexpReplace(value,"[ \t\r\n]","");if(typeof(split_chr)!="undefined"&&split_chr!=null){value=value.split(split_chr);outArray=[];for(i=0;i<value.length;i++){if(value[i]&&value[i]!=='')outArray[outArray.length]=value[i]}value=outArray}return value},getLang:function(name,default_value,parse_entities,va){var v=(typeof(tinyMCELang[name])=="undefined")?default_value:tinyMCELang[name],n;if(parse_entities)v=tinyMCE.entityDecode(v);if(va){for(n in va)v=this.replaceVar(v,n,va[n])}return v},entityDecode:function(s){var e=document.createElement("div");e.innerHTML=s;return!e.firstChild?s:e.firstChild.nodeValue},addToLang:function(prefix,ar){var k;for(k in ar){if(typeof(ar[k])=='function')continue;tinyMCELang[(k.indexOf('lang_')==-1?'lang_':'')+(prefix!==''?(prefix+"_"):'')+k]=ar[k]}this.loadNextScript()},triggerNodeChange:function(focus,setup_content){var elm,inst,editorId,undoIndex=-1,undoLevels=-1,doc,anySelection,st;if(tinyMCE.selectedInstance){inst=tinyMCE.selectedInstance;elm=(typeof(setup_content)!="undefined"&&setup_content)?tinyMCE.selectedElement:inst.getFocusElement();editorId=inst.editorId;st=inst.selection.getSelectedText();if(tinyMCE.settings.auto_resize)inst.resizeToContent();if(setup_content&&tinyMCE.isGecko&&inst.isHidden())elm=inst.getBody();inst.switchSettings();anySelection=!inst.selection.isCollapsed();if(tinyMCE.settings.custom_undo_redo){undoIndex=inst.undoRedo.undoIndex;undoLevels=inst.undoRedo.undoLevels.length}tinyMCE.dispatchCallback(inst,'handle_node_change_callback','handleNodeChange',editorId,elm,undoIndex,undoLevels,inst.visualAid,anySelection,setup_content)}if(this.selectedInstance&&(typeof(focus)=="undefined"||focus))this.selectedInstance.contentWindow.focus()},_customCleanup:function(inst,type,content){var pl,po,i,customCleanup;customCleanup=tinyMCE.settings.cleanup_callback;if(customCleanup!='')content=tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback,window)(type,content,inst);po=tinyMCE.themes[tinyMCE.settings.theme];if(po&&po.cleanup)content=po.cleanup(type,content,inst);pl=inst.plugins;for(i=0;i<pl.length;i++){po=tinyMCE.plugins[pl[i]];if(po&&po.cleanup)content=po.cleanup(type,content,inst)}return content},setContent:function(h){if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.execCommand('mceSetContent',false,h);tinyMCE.selectedInstance.repaint()}},importThemeLanguagePack:function(name){if(typeof(name)=="undefined")name=tinyMCE.settings.theme;tinyMCE.loadScript(tinyMCE.baseURL+'/themes/'+name+'/langs/'+tinyMCE.settings.language+'.js')},importPluginLanguagePack:function(name){var b=tinyMCE.baseURL+'/plugins/'+name;if(this.plugins[name])b=this.plugins[name].baseURL;tinyMCE.loadScript(b+'/langs/'+tinyMCE.settings.language+'.js')},applyTemplate:function(h,ag){return h.replace(new RegExp('\\{\\$([a-z0-9_]+)\\}','gi'),function(m,s){if(s.indexOf('lang_')==0&&tinyMCELang[s])return tinyMCELang[s];if(ag&&ag[s])return ag[s];if(tinyMCE.settings[s])return tinyMCE.settings[s];if(m=='themeurl')return tinyMCE.themeURL;return m})},replaceVar:function(h,r,v){return h.replace(new RegExp('{\\\$'+r+'}','g'),v)},openWindow:function(template,args){var html,width,height,x,y,resizable,scrollbars,url,name,win,modal,features;args=!args?{}:args;args.mce_template_file=template.file;args.mce_width=template.width;args.mce_height=template.height;tinyMCE.windowArgs=args;html=template.html;if(!(width=parseInt(template.width)))width=320;if(!(height=parseInt(template.height)))height=200;if(tinyMCE.isIE)height+=40;else height+=20;x=parseInt(screen.width/ 2.0) - (width /2.0);y=parseInt(screen.height/ 2.0) - (height /2.0);resizable=(args&&args.resizable)?args.resizable:"no";scrollbars=(args&&args.scrollbars)?args.scrollbars:"no";if(template.file.charAt(0)!='/'&&template.file.indexOf('://')==-1)url=tinyMCE.baseURL+"/themes/"+tinyMCE.getParam("theme")+"/"+template.file;else url=template.file;for(name in args){if(typeof(args[name])=='function')continue;url=tinyMCE.replaceVar(url,name,escape(args[name]))}if(html){html=tinyMCE.replaceVar(html,"css",this.settings.popups_css);html=tinyMCE.applyTemplate(html,args);win=window.open("","mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog=yes,minimizable="+resizable+",modal=yes,width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}win.document.write(html);win.document.close();win.resizeTo(width,height);win.focus()}else{if((tinyMCE.isRealIE)&&resizable!='yes'&&tinyMCE.settings.dialog_type=="modal"){height+=10;features="resizable:"+resizable+";scroll:"+scrollbars+";status:yes;center:yes;help:no;dialogWidth:"+width+"px;dialogHeight:"+height+"px;";window.showModalDialog(url,window,features)}else{modal=(resizable=="yes")?"no":"yes";if(tinyMCE.isGecko&&tinyMCE.isMac)modal="no";if(template.close_previous!="no")try{tinyMCE.lastWindow.close()}catch(ex){}win=window.open(url,"mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog="+modal+",minimizable="+resizable+",modal="+modal+",width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}if(template.close_previous!="no")tinyMCE.lastWindow=win;try{win.resizeTo(width,height)}catch(e){}if(tinyMCE.isGecko&&win.document){if(win.document.defaultView.statusbar.visible)win.resizeBy(0,tinyMCE.isMac?10:24)}win.focus()}}},closeWindow:function(win){win.close()},getVisualAidClass:function(class_name,state){var i,classNames,ar,className,aidClass=tinyMCE.settings.visual_table_class;if(typeof(state)=="undefined")state=tinyMCE.settings.visual;classNames=[];ar=class_name.split(' ');for(i=0;i<ar.length;i++){if(ar[i]==aidClass)ar[i]="";if(ar[i]!=='')classNames[classNames.length]=ar[i]}if(state)classNames[classNames.length]=aidClass;className="";for(i=0;i<classNames.length;i++){if(i>0)className+=" ";className+=classNames[i]}return className},handleVisualAid:function(el,deep,state,inst,skip_dispatch){var i,x,y,tableElement,anchorName,oldW,oldH,bo,cn;if(!el)return;if(!skip_dispatch)tinyMCE.dispatchCallback(inst,'handle_visual_aid_callback','handleVisualAid',el,deep,state,inst);tableElement=null;switch(el.nodeName){case"TABLE":oldW=el.style.width;oldH=el.style.height;bo=tinyMCE.getAttrib(el,"border");bo=bo==''||bo=="0"?true:false;tinyMCE.setAttrib(el,"class",tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el,"class"),state&&bo));el.style.width=oldW;el.style.height=oldH;for(y=0;y<el.rows.length;y++){for(x=0;x<el.rows[y].cells.length;x++){cn=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x],"class"),state&&bo);tinyMCE.setAttrib(el.rows[y].cells[x],"class",cn)}}break;case"A":anchorName=tinyMCE.getAttrib(el,"name");if(anchorName!==''&&state){el.title=anchorName;tinyMCE.addCSSClass(el,'mceItemAnchor')}else if(anchorName!==''&&!state)el.className='';break}if(deep&&el.hasChildNodes()){for(i=0;i<el.childNodes.length;i++)tinyMCE.handleVisualAid(el.childNodes[i],deep,state,inst,true)}},fixGeckoBaseHREFBug:function(m,e,h){var xsrc,xhref;if(tinyMCE.isGecko){if(m==1){h=h.replace(/\ssrc=/gi," mce_tsrc=");h=h.replace(/\shref=/gi," mce_thref=");return h}else{if(!new RegExp('(src|href)=','g').test(h))return h;tinyMCE.selectElements(e,'A,IMG,SELECT,AREA,IFRAME,BASE,INPUT,SCRIPT,EMBED,OBJECT,LINK',function(n){xsrc=tinyMCE.getAttrib(n,"mce_tsrc");xhref=tinyMCE.getAttrib(n,"mce_thref");if(xsrc!==''){try{n.src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xsrc)}catch(e){}n.removeAttribute("mce_tsrc")}if(xhref!==''){try{n.href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xhref)}catch(e){}n.removeAttribute("mce_thref")}return false});tinyMCE.selectNodes(e,function(n){if(n.nodeType==3||n.nodeType==8){n.nodeValue=n.nodeValue.replace(/\smce_tsrc=/gi," src=");n.nodeValue=n.nodeValue.replace(/\smce_thref=/gi," href=")}return false})}}return h},_setHTML:function(doc,html_content){var i,html,paras,node;html_content=tinyMCE.cleanupHTMLCode(html_content);try{tinyMCE.setInnerHTML(doc.body,html_content)}catch(e){if(this.isMSIE)doc.body.createTextRange().pasteHTML(html_content)}if(tinyMCE.isIE&&tinyMCE.settings.fix_content_duplication){paras=doc.getElementsByTagName("P");for(i=0;i<paras.length;i++){node=paras[i];while((node=node.parentNode)!=null){if(node.nodeName=="P")node.outerHTML=node.innerHTML}}html=doc.body.innerHTML;tinyMCE.setInnerHTML(doc.body,html)}tinyMCE.cleanupAnchors(doc);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc)},getEditorId:function(form_element){var inst=this.getInstanceById(form_element);if(!inst)return null;return inst.editorId},getInstanceById:function(editor_id){var inst=this.instances[editor_id],n;if(!inst){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formTargetElementId==editor_id)return inst}}else return inst;return null},queryInstanceCommandValue:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandValue(command);return false},queryInstanceCommandState:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandState(command);return null},setWindowArg:function(n,v){this.windowArgs[n]=v},getWindowArg:function(n,d){return(typeof(this.windowArgs[n])=="undefined")?d:this.windowArgs[n]},getCSSClasses:function(editor_id,doc){var i,c,x,rule,styles,rules,csses,selectorText,inst=tinyMCE.getInstanceById(editor_id);var cssClass,addClass,p;if(!inst)inst=tinyMCE.selectedInstance;if(!inst)return[];if(!doc)doc=inst.getDoc();if(inst&&inst.cssClasses.length>0)return inst.cssClasses;if(!doc)return;styles=doc.styleSheets;if(styles&&styles.length>0){for(x=0;x<styles.length;x++){csses=null;try{csses=tinyMCE.isIE?doc.styleSheets(x).rules:styles[x].cssRules}catch(e){}if(!csses)return[];for(i=0;i<csses.length;i++){selectorText=csses[i].selectorText;if(selectorText){rules=selectorText.split(',');for(c=0;c<rules.length;c++){rule=rules[c];while(rule.indexOf(' ')==0)rule=rule.substring(1);if(rule.indexOf(' ')!=-1||rule.indexOf(':')!=-1||rule.indexOf('mceItem')!=-1)continue;if(rule.indexOf(tinyMCE.settings.visual_table_class)!=-1||rule.indexOf('mceEditable')!=-1||rule.indexOf('mceNonEditable')!=-1)continue;if(rule.indexOf('.')!=-1){cssClass=rule.substring(rule.indexOf('.')+1);addClass=true;for(p=0;p<inst.cssClasses.length&&addClass;p++){if(inst.cssClasses[p]==cssClass)addClass=false}if(addClass)inst.cssClasses[inst.cssClasses.length]=cssClass}}}}}}return inst.cssClasses},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str)},trim:function(s){return s.replace(/^\s*|\s*$/g,"")},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s},getControlHTML:function(c){var i,l,n,o,v,rtl=tinyMCE.getLang('lang_dir')=='rtl';l=tinyMCE.plugins;for(n in l){o=l[n];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+tinyMCE.replaceVar(v,"pluginurl",o.baseURL)+'</span>';return tinyMCE.replaceVar(v,"pluginurl",o.baseURL)}}o=tinyMCE.themes[tinyMCE.settings.theme];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+v+'</span>';return v}return''},evalFunc:function(f,idx,a,o){o=!o?window:o;f=typeof(f)=='function'?f:o[f];return f.apply(o,Array.prototype.slice.call(a,idx))},dispatchCallback:function(i,p,n){return this.callFunc(i,p,n,0,this.dispatchCallback.arguments)},executeCallback:function(i,p,n){return this.callFunc(i,p,n,1,this.executeCallback.arguments)},execCommandCallback:function(i,p,n){return this.callFunc(i,p,n,2,this.execCommandCallback.arguments)},callFunc:function(ins,p,n,m,a){var l,i,on,o,s,v;s=m==2;l=tinyMCE.getParam(p,'');if(l!==''&&(v=tinyMCE.evalFunc(l,3,a))==s&&m>0)return true;if(ins!=null){for(i=0,l=ins.plugins;i<l.length;i++){o=tinyMCE.plugins[l[i]];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}}l=tinyMCE.themes;for(on in l){o=l[on];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}return false},resolveDots:function(s,o){var i;if(typeof(s)=='string'){for(i=0,s=s.split('.');i<s.length;i++)o=o[s[i]]}else o=s;return o},xmlEncode:function(s){return s?(''+s).replace(this.xmlEncodeRe,function(c,b){switch(c){case'&':return'&';case'"':return'"';case'<':return'<';case'>':return'>'}return c}):s},add:function(c,m){var n;for(n in m){if(m.hasOwnProperty(n))c.prototype[n]=m[n]}},extend:function(p,np){var o={},n;o.parent=p;for(n in p){if(p.hasOwnProperty(n))o[n]=p[n]}for(n in np){if(np.hasOwnProperty(n))o[n]=np[n]}return o},hideMenus:function(){var e=tinyMCE.lastSelectedMenuBtn;if(tinyMCE.lastMenu){tinyMCE.lastMenu.hide();tinyMCE.lastMenu=null}if(e){tinyMCE.switchClass(e,tinyMCE.lastMenuBtnClass);tinyMCE.lastSelectedMenuBtn=null}}};var TinyMCE=TinyMCE_Engine;var tinyMCE=new TinyMCE_Engine();var tinyMCELang={};function TinyMCE_Control(settings){var t,i,tos,fu,p,x,fn,fu,pn,s=settings;this.undoRedoLevel=true;this.isTinyMCE_Control=true;this.enabled=true;this.settings=s;this.settings.theme=tinyMCE.getParam("theme","default");this.settings.width=tinyMCE.getParam("width",-1);this.settings.height=tinyMCE.getParam("height",-1);this.selection=new TinyMCE_Selection(this);this.undoRedo=new TinyMCE_UndoRedo(this);this.cleanup=new TinyMCE_Cleanup();this.shortcuts=[];this.hasMouseMoved=false;this.foreColor=this.backColor="#999999";this.data={};this.cssClasses=[];this.cleanup.init({valid_elements:s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,entities:s.entities,entity_encoding:s.entity_encoding,debug:s.cleanup_debug,indent:s.apply_source_formatting,invalid_elements:s.invalid_elements,verify_html:s.verify_html,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans});t=this.settings.theme;if(!tinyMCE.hasTheme(t)){fn=tinyMCE.callbacks;tos={};for(i=0;i<fn.length;i++){if((fu=window['TinyMCE_'+t+"_"+fn[i]]))tos[fn[i]]=fu}tinyMCE.addTheme(t,tos)}this.plugins=[];p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){pn=p[i];if(pn.charAt(0)=='-')pn=pn.substring(1);if(!tinyMCE.hasPlugin(pn)){fn=tinyMCE.callbacks;tos={};for(x=0;x<fn.length;x++){if((fu=window['TinyMCE_'+pn+"_"+fn[x]]))tos[fn[x]]=fu}tinyMCE.addPlugin(pn,tos)}this.plugins[this.plugins.length]=pn}}};TinyMCE_Control.prototype={selection:null,settings:null,cleanup:null,getData:function(na){var o=this.data[na];if(!o)o=this.data[na]={};return o},hasPlugin:function(n){var i;for(i=0;i<this.plugins.length;i++){if(this.plugins[i]==n)return true}return false},addPlugin:function(n,p){if(!this.hasPlugin(n)){tinyMCE.addPlugin(n,p);this.plugins[this.plugins.length]=n}},repaint:function(){var s,b,ex;if(tinyMCE.isRealIE)return;try{s=this.selection;b=s.getBookmark(true);this.getBody().style.display='none';this.getDoc().execCommand('selectall',false,null);this.getSel().collapseToStart();this.getBody().style.display='block';s.moveToBookmark(b)}catch(ex){}},switchSettings:function(){if(tinyMCE.configs.length>1&&tinyMCE.currentConfig!=this.settings.index){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings.index}},select:function(){var oldInst=tinyMCE.selectedInstance;if(oldInst!=this){if(oldInst)oldInst.execCommand('mceEndTyping');tinyMCE.dispatchCallback(this,'select_instance_callback','selectInstance',this,oldInst);tinyMCE.selectedInstance=this}},getBody:function(){return this.contentBody?this.contentBody:this.getDoc().body},getDoc:function(){return this.contentWindow.document},getWin:function(){return this.contentWindow},getContainerWin:function(){return this.containerWindow?this.containerWindow:window},getViewPort:function(){return tinyMCE.getViewPort(this.getWin())},getParentNode:function(n,f){return tinyMCE.getParentNode(n,f,this.getBody())},getParentElement:function(n,na,f){return tinyMCE.getParentElement(n,na,f,this.getBody())},getParentBlockElement:function(n){return tinyMCE.getParentBlockElement(n,this.getBody())},resizeToContent:function(){var d=this.getDoc(),b=d.body,de=d.documentElement;this.iframeElement.style.height=(tinyMCE.isRealIE)?b.scrollHeight:de.offsetHeight+'px'},addShortcut:function(m,k,d,cmd,ui,va){var n=typeof(k)=="number",ie=tinyMCE.isIE,c,sc,i,scl=this.shortcuts;if(!tinyMCE.getParam('custom_shortcuts'))return false;m=m.toLowerCase();k=ie&&!n?k.toUpperCase():k;c=n?null:k.charCodeAt(0);d=d&&d.indexOf('lang_')==0?tinyMCE.getLang(d):d;sc={alt:m.indexOf('alt')!=-1,ctrl:m.indexOf('ctrl')!=-1,shift:m.indexOf('shift')!=-1,charCode:c,keyCode:n?k:(ie?c:null),desc:d,cmd:cmd,ui:ui,val:va};for(i=0;i<scl.length;i++){if(sc.alt==scl[i].alt&&sc.ctrl==scl[i].ctrl&&sc.shift==scl[i].shift&&sc.charCode==scl[i].charCode&&sc.keyCode==scl[i].keyCode){return false}}scl[scl.length]=sc;return true},handleShortcut:function(e){var i,s,o;if(!e.altKey&&!e.ctrlKey)return false;s=this.shortcuts;for(i=0;i<s.length;i++){o=s[i];if(o.alt==e.altKey&&o.ctrl==e.ctrlKey&&(o.keyCode==e.keyCode||o.charCode==e.charCode)){if(o.cmd&&(e.type=="keydown"||(e.type=="keypress"&&!tinyMCE.isOpera)))tinyMCE.execCommand(o.cmd,o.ui,o.val);tinyMCE.cancelEvent(e);return true}}return false},autoResetDesignMode:function(){if(!tinyMCE.isIE&&this.isHidden()&&tinyMCE.getParam('auto_reset_designmode'))eval('try { this.getDoc().designMode = "On"; this.useCSS = false; } catch(e) {}')},isHidden:function(){var s;if(tinyMCE.isIE)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0)},isDirty:function(){return tinyMCE.trim(this.startContent)!=tinyMCE.trim(this.getBody().innerHTML)&&!this.isNotDirty},_mergeElements:function(scmd,pa,ch,override){var st,stc,className,n;if(scmd=="removeformat"){pa.className="";pa.style.cssText="";ch.className="";ch.style.cssText="";return}st=tinyMCE.parseStyle(tinyMCE.getAttrib(pa,"style"));stc=tinyMCE.parseStyle(tinyMCE.getAttrib(ch,"style"));className=tinyMCE.getAttrib(pa,"class");className=tinyMCE.getAttrib(ch,"class");if(override){for(n in st){if(typeof(st[n])=='function')continue;stc[n]=st[n]}}else{for(n in stc){if(typeof(stc[n])=='function')continue;st[n]=stc[n]}}tinyMCE.setAttrib(pa,"style",tinyMCE.serializeStyle(st));tinyMCE.setAttrib(pa,"class",tinyMCE.trim(className));ch.className="";ch.style.cssText="";ch.removeAttribute("class");ch.removeAttribute("style")},_fixRootBlocks:function(){var rb,b,ne,be,nx,bm;rb=tinyMCE.getParam('forced_root_block');if(!rb)return;b=this.getBody();ne=b.firstChild;while(ne){nx=ne.nextSibling;if((ne.nodeType==3&&ne.nodeValue.replace(/\s+/g,'')!='')||(ne.nodeType==1&&!tinyMCE.blockRegExp.test(ne.nodeName))){if(!bm)bm=this.selection.getBookmark();if(!be){be=this.getDoc().createElement(rb);be.appendChild(ne.cloneNode(true));b.replaceChild(be,ne)}else{be.appendChild(ne.cloneNode(true));b.removeChild(ne)}}else be=null;ne=nx}if(bm)this.selection.moveToBookmark(bm)},_fixTrailingNbsp:function(){var s=this.selection,e=s.getFocusElement(),bm,v;if(e&&tinyMCE.blockRegExp.test(e.nodeName)&&e.firstChild){v=e.firstChild.nodeValue;if(v&&v.length>1&&/(^\u00a0|\u00a0$)/.test(v)){e.firstChild.nodeValue=v.replace(/(^\u00a0|\u00a0$)/,'');s.selectNode(e.firstChild,true,false,false);}}},_setUseCSS:function(b){var d=this.getDoc();try{d.execCommand("useCSS",false,!b)}catch(ex){}try{d.execCommand("styleWithCSS",false,b)}catch(ex){}if(!tinyMCE.getParam("table_inline_editing"))try{d.execCommand('enableInlineTableEditing',false,"false")}catch(ex){}if(!tinyMCE.getParam("object_resizing"))try{d.execCommand('enableObjectResizing',false,"false")}catch(ex){}},execCommand:function(command,user_interface,value){var i,x,z,align,img,div,doc=this.getDoc(),win=this.getWin(),focusElm=this.getFocusElement();if(!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel','gi').test(command))this.undoBookmark=null;if(!tinyMCE.isIE&&!this.useCSS){this._setUseCSS(false);this.useCSS=true}this.contentDocument=doc;if(!/mceStartTyping|mceEndTyping/.test(command)){if(tinyMCE.execCommandCallback(this,'execcommand_callback','execCommand',this.editorId,this.getBody(),command,user_interface,value))return}if(focusElm&&focusElm.nodeName=="IMG"){align=focusElm.getAttribute('align');img=command=="JustifyCenter"?focusElm.cloneNode(false):focusElm;switch(command){case"JustifyLeft":if(align=='left'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','left');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyCenter":img.setAttribute('align','');img.removeAttribute('align');div=tinyMCE.getParentElement(focusElm,"div");if(div&&div.style.textAlign=="center"){if(div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div)}else{div=this.getDoc().createElement("div");div.style.textAlign='center';div.appendChild(img);focusElm.parentNode.replaceChild(div,focusElm)}this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyRight":if(align=='right'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','right');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return}}if(tinyMCE.settings.force_br_newlines){var alignValue="";if(doc.selection.type!="Control"){switch(command){case"JustifyLeft":alignValue="left";break;case"JustifyCenter":alignValue="center";break;case"JustifyFull":alignValue="justify";break;case"JustifyRight":alignValue="right";break}if(alignValue!==''){var rng=doc.selection.createRange();if((divElm=tinyMCE.getParentElement(rng.parentElement(),"div"))!=null)divElm.setAttribute("align",alignValue);else if(rng.pasteHTML&&rng.htmlText.length>0)rng.pasteHTML('<div align="'+alignValue+'">'+rng.htmlText+"</div>");tinyMCE.triggerNodeChange();return}}}switch(command){case"mceRepaint":this.repaint();return true;case"JustifyLeft":case"JustifyCenter":case"JustifyFull":case"JustifyRight":var el=tinyMCE.getParentNode(focusElm,function(n){return tinyMCE.getAttrib(n,'align')});if(el){el.setAttribute('align','');el.removeAttribute('align')}else this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();return true;case"unlink":if(tinyMCE.isGecko&&this.getSel().isCollapsed){focusElm=tinyMCE.getParentElement(focusElm,'A');if(focusElm)this.selection.selectNode(focusElm,false)}this.getDoc().execCommand(command,user_interface,value);tinyMCE.isGecko&&this.getSel().collapseToEnd();tinyMCE.triggerNodeChange();return true;case"InsertUnorderedList":case"InsertOrderedList":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"Strikethrough":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"mceSelectNode":this.selection.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case"FormatBlock":if(value==null||value==''){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");if(elm)this.execCommand("mceRemoveNode",false,elm)}else{if(!this.cleanup.isValid(value))return true;if(tinyMCE.isGecko&&new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>','gi').test(value))value=value.replace(/[^a-z]/gi,'');if(tinyMCE.isIE&&new RegExp('blockquote|code|samp','gi').test(value)){var b=this.selection.getBookmark();this.getDoc().execCommand("FormatBlock",false,'<p>');tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()),value);this.selection.moveToBookmark(b)}else this.getDoc().execCommand("FormatBlock",false,value)}tinyMCE.triggerNodeChange();break;case"mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isIE){value.outerHTML=value.innerHTML}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML))}tinyMCE.triggerNodeChange();break;case"mceSelectNodeDepth":var parentNode=this.getFocusElement();for(i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue}if(i==value){this.selection.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return}parentNode=parentNode.parentNode}break;case"mceSetStyleInfo":case"SetStyleInfo":var rng=this.getRng();var sel=this.getSel();var scmd=value.command;var sname=value.name;var svalue=value.value==null?'':value.value;var wrapper=value.wrapper?value.wrapper:"span";var parentElm=null;var invalidRe=new RegExp("^BODY|HTML$","g");var invalidParentsRe=tinyMCE.settings.merge_styles_invalid_parents!==''?new RegExp(tinyMCE.settings.merge_styles_invalid_parents,"gi"):null;if(tinyMCE.isIE){if(rng.item)parentElm=rng.item(0);else{var pelm=rng.parentElement();var prng=doc.selection.createRange();prng.moveToElementText(pelm);if(rng.htmlText==prng.htmlText||rng.boundingWidth==0){if(invalidParentsRe==null||!invalidParentsRe.test(pelm.nodeName))parentElm=pelm}}}else{var felm=this.getFocusElement();if(sel.isCollapsed||(new RegExp('td|tr|tbody|table|img','gi').test(felm.nodeName)&&sel.anchorNode==felm.parentNode))parentElm=felm}if(parentElm&&!invalidRe.test(parentElm.nodeName)){if(scmd=="setstyle")tinyMCE.setStyleAttrib(parentElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(parentElm,sname,svalue);if(scmd=="removeformat"){parentElm.style.cssText='';tinyMCE.setAttrib(parentElm,'class','')}var ch=tinyMCE.getNodeTree(parentElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==parentElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}else{this._setUseCSS(false);doc.execCommand("FontName",false,"#mce_temp_font#");var elementArray=tinyMCE.getElementsByAttributeValue(this.getBody(),"font","face","#mce_temp_font#");for(x=0;x<elementArray.length;x++){elm=elementArray[x];if(elm){var spanElm=doc.createElement(wrapper);if(scmd=="setstyle")tinyMCE.setStyleAttrib(spanElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(spanElm,sname,svalue);if(scmd=="removeformat"){spanElm.style.cssText='';tinyMCE.setAttrib(spanElm,'class','')}if(elm.hasChildNodes()){for(i=0;i<elm.childNodes.length;i++)spanElm.appendChild(elm.childNodes[i].cloneNode(true))}spanElm.setAttribute("mce_new","true");elm.parentNode.replaceChild(spanElm,elm);var ch=tinyMCE.getNodeTree(spanElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==spanElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i];var isNew=tinyMCE.getAttrib(elm,"mce_new")=="true";elm.removeAttribute("mce_new");if(elm.childNodes&&elm.childNodes.length==1&&elm.childNodes[0].nodeType==1){this._mergeElements(scmd,elm,elm.childNodes[0],isNew);continue}if(elm.parentNode.childNodes.length==1&&!invalidRe.test(elm.nodeName)&&!invalidRe.test(elm.parentNode.nodeName)){if(invalidParentsRe==null||!invalidParentsRe.test(elm.parentNode.nodeName))this._mergeElements(scmd,elm.parentNode,elm,false)}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i],isEmpty=true;var tmp=doc.createElement("body");tmp.appendChild(elm.cloneNode(false));tmp.innerHTML=tmp.innerHTML.replace(new RegExp('style=""|class=""','gi'),'');if(new RegExp('<span>','gi').test(tmp.innerHTML)){for(x=0;x<elm.childNodes.length;x++){if(elm.parentNode!=null)elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true),elm)}elm.parentNode.removeChild(elm)}}if(scmd=="removeformat")tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"FontName":if(value==null){var s=this.getSel();if(tinyMCE.isGecko&&s.isCollapsed){var f=tinyMCE.getParentElement(this.getFocusElement(),"font");if(f!=null)this.selection.selectNode(f,false)}this.getDoc().execCommand("RemoveFormat",false,null);if(f!=null&&tinyMCE.isGecko){var r=this.getRng().cloneRange();r.collapse(true);s.removeAllRanges();s.addRange(r)}}else this.getDoc().execCommand('FontName',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"FontSize":this.getDoc().execCommand('FontSize',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"forecolor":value=value==null?this.foreColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.foreColor=value;this.getDoc().execCommand('forecolor',false,value);break;case"HiliteColor":value=value==null?this.backColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.backColor=value;if(tinyMCE.isGecko||tinyMCE.isOpera){this._setUseCSS(true);this.getDoc().execCommand('hilitecolor',false,value);this._setUseCSS(false)}else this.getDoc().execCommand('BackColor',false,value);break;case"Cut":case"Copy":case"Paste":var cmdFailed=false;eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');if(tinyMCE.isOpera&&cmdFailed)alert('Currently not supported by your browser, use keyboard shortcuts instead.');if(tinyMCE.isGecko&&cmdFailed){if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');return}else tinyMCE.triggerNodeChange();break;case"mceSetContent":if(!value)value="";value=tinyMCE.storeAwayURLs(value);value=tinyMCE._customCleanup(this,"insert_to_editor",value);if(this.getBody().nodeName=='BODY')tinyMCE._setHTML(doc,value);else this.getBody().innerHTML=value;tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,doc,this.settings,this.getBody(),false,false,false,true));tinyMCE.convertAllRelativeURLs(this.getBody());tinyMCE._removeInternal(this.getBody());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();return true;case"mceCleanup":var b=this.selection.getBookmark();tinyMCE._setHTML(this.contentDocument,this.getBody().innerHTML);tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,this.contentDocument,this.settings,this.getBody(),this.visualAid));tinyMCE.convertAllRelativeURLs(doc.body);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();this.repaint();this.selection.moveToBookmark(b);tinyMCE.triggerNodeChange();break;case"mceReplaceContent":if(!value)value='';this.getWin().focus();var selectedText="";if(tinyMCE.isIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=this.getSel().toString();if(selectedText.length>0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value)}this._addBogusBR();tinyMCE.triggerNodeChange();break;case"mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value.targets)=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value.targets;var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value.name,value.value);tinyMCE.triggerNodeChange()}}break;case"mceSetCSSClass":this.execCommand("mceSetStyleInfo",false,{command:"setattrib",name:"class",value:value});break;case"mceInsertRawHTML":var key='tiny_mce_marker';this.execCommand('mceBeginUndoLevel');this.execCommand('mceInsertContent',false,key);var scrollX=this.getBody().scrollLeft+this.getDoc().documentElement.scrollLeft;var scrollY=this.getBody().scrollTop+this.getDoc().documentElement.scrollTop;var html=this.getBody().innerHTML;if((pos=html.indexOf(key))!=-1)tinyMCE.setInnerHTML(this.getBody(),html.substring(0,pos)+value+html.substring(pos+key.length));this.contentWindow.scrollTo(scrollX,scrollY);this.execCommand('mceEndUndoLevel');break;case"mceInsertContent":if(!value)value='';var insertHTMLFailed=false;if(tinyMCE.isGecko||tinyMCE.isOpera){try{if(value.indexOf('<')==-1&&!value.match(/(&| |<|>)/g)){var r=this.getRng();var n=this.getDoc().createTextNode(tinyMCE.entityDecode(value));var s=this.getSel();var r2=r.cloneRange();s.removeAllRanges();r.deleteContents();r.insertNode(n);r2.selectNode(n);r2.collapse(false);s.removeAllRanges();s.addRange(r2)}else{value=tinyMCE.fixGeckoBaseHREFBug(1,this.getDoc(),value);this.getDoc().execCommand('inserthtml',false,value);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}}catch(ex){insertHTMLFailed=true}if(!insertHTMLFailed){tinyMCE.triggerNodeChange();return}}if(!tinyMCE.isIE){var isHTML=value.indexOf('<')!=-1;var sel=this.getSel();var rng=this.getRng();if(isHTML){if(tinyMCE.isSafari){var tmpRng=this.getDoc().createRange();tmpRng.setStart(this.getBody(),0);tmpRng.setEnd(this.getBody(),0);value=tmpRng.createContextualFragment(value)}else value=rng.createContextualFragment(value)}else{value=doc.createTextNode(tinyMCE.entityDecode(value))}if(tinyMCE.isSafari&&!isHTML){this.execCommand('InsertText',false,value.nodeValue);tinyMCE.triggerNodeChange();return true}else if(tinyMCE.isSafari&&isHTML){rng.deleteContents();rng.insertNode(value);tinyMCE.triggerNodeChange();return true}rng.deleteContents();if(rng.startContainer.nodeType==3){var node=rng.startContainer.splitText(rng.startOffset);node.parentNode.insertBefore(value,node)}else rng.insertNode(value);if(!isHTML){sel.selectAllChildren(doc.body);sel.removeAllRanges();var rng=doc.createRange();rng.selectNode(value);rng.collapse(false);sel.addRange(rng)}else rng.collapse(false);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}else{var rng=doc.selection.createRange(),tmpRng=null;var c=value.indexOf('<!--')!=-1;if(c)value=tinyMCE.uniqueTag+value;if(rng.item)rng.item(0).outerHTML=value;else rng.pasteHTML(value);if(c){var e=this.getDoc().getElementById('mceTMPElement');e.parentNode.removeChild(e)}}tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange();break;case"mceStartTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex==-1){this.undoRedo.typingUndoIndex=this.undoRedo.undoIndex;tinyMCE.typingUndoIndex=tinyMCE.undoIndex;this.execCommand('mceAddUndoLevel')}break;case"mceEndTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex!=-1){this.execCommand('mceAddUndoLevel');this.undoRedo.typingUndoIndex=-1}tinyMCE.typingUndoIndex=-1;break;case"mceBeginUndoLevel":this.undoRedoLevel=false;break;case"mceEndUndoLevel":this.undoRedoLevel=true;this.execCommand('mceAddUndoLevel');break;case"mceAddUndoLevel":if(tinyMCE.settings.custom_undo_redo&&this.undoRedoLevel){if(this.undoRedo.add())tinyMCE.triggerNodeChange(false)}break;case"Undo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.undo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"Redo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.redo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"mceToggleVisualAid":this.visualAid=!this.visualAid;tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"Indent":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();if(tinyMCE.isIE){var n=tinyMCE.getParentElement(this.getFocusElement(),"blockquote");do{if(n&&n.nodeName=="BLOCKQUOTE"){n.removeAttribute("dir");n.removeAttribute("style")}}while(n!=null&&(n=n.parentNode)!=null)}break;case"RemoveFormat":case"removeformat":var text=this.selection.getSelectedText();if(tinyMCE.isOpera){this.getDoc().execCommand("RemoveFormat",false,null);return}if(tinyMCE.isIE){try{var rng=doc.selection.createRange();rng.execCommand("RemoveFormat",false,null)}catch(e){}this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}else{this.getDoc().execCommand(command,user_interface,value);this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}if(text.length==0)this.execCommand("mceSetCSSClass",false,"");tinyMCE.triggerNodeChange();break;default:this.getDoc().execCommand(command,user_interface,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);else tinyMCE.triggerNodeChange()}if(command!="mceAddUndoLevel"&&command!="Undo"&&command!="Redo"&&command!="mceStartTyping"&&command!="mceEndTyping")tinyMCE.execCommand("mceAddUndoLevel")},queryCommandValue:function(c){try{return this.getDoc().queryCommandValue(c)}catch(e){return null}},queryCommandState:function(c){return this.getDoc().queryCommandState(c)},_addBogusBR:function(){var b=this.getBody();if(tinyMCE.isGecko&&!b.hasChildNodes())b.innerHTML='<br _moz_editor_bogus_node="TRUE" />'},_onAdd:function(replace_element,form_element_name,target_document){var hc,th,tos,editorTemplate,targetDoc,deltaWidth,deltaHeight,html,rng,fragment;var dynamicIFrame,tElm,doc,parentElm;th=this.settings.theme;tos=tinyMCE.themes[th];targetDoc=target_document?target_document:document;this.targetDoc=targetDoc;tinyMCE.themeURL=tinyMCE.baseURL+"/themes/"+this.settings.theme;this.settings.themeurl=tinyMCE.themeURL;if(!replace_element){alert("Error: Could not find the target element.");return false}if(tos.getEditorTemplate)editorTemplate=tos.getEditorTemplate(this.settings,this.editorId);deltaWidth=editorTemplate.delta_width?editorTemplate.delta_width:0;deltaHeight=editorTemplate.delta_height?editorTemplate.delta_height:0;html='<span id="'+this.editorId+'_parent" class="mceEditorContainer">'+editorTemplate.html;html=tinyMCE.replaceVar(html,"editor_id",this.editorId);if(!this.settings.default_document)this.settings.default_document=tinyMCE.baseURL+"/blank.htm";this.settings.old_width=this.settings.width;this.settings.old_height=this.settings.height;if(this.settings.width==-1)this.settings.width=replace_element.offsetWidth;if(this.settings.height==-1)this.settings.height=replace_element.offsetHeight;if(this.settings.width==0)this.settings.width=replace_element.style.width;if(this.settings.height==0)this.settings.height=replace_element.style.height;if(this.settings.width==0)this.settings.width=320;if(this.settings.height==0)this.settings.height=240;this.settings.area_width=parseInt(this.settings.width);this.settings.area_height=parseInt(this.settings.height);this.settings.area_width+=deltaWidth;this.settings.area_height+=deltaHeight;this.settings.width_style=""+this.settings.width;this.settings.height_style=""+this.settings.height;if((""+this.settings.width).indexOf('%')!=-1)this.settings.area_width="100%";else this.settings.width_style+='px';if((""+this.settings.height).indexOf('%')!=-1)this.settings.area_height="100%";else this.settings.height_style+='px';if((""+replace_element.style.width).indexOf('%')!=-1){this.settings.width=replace_element.style.width;this.settings.area_width="100%";this.settings.width_style="100%"}if((""+replace_element.style.height).indexOf('%')!=-1){this.settings.height=replace_element.style.height;this.settings.area_height="100%";this.settings.height_style="100%"}html=tinyMCE.applyTemplate(html);this.settings.width=this.settings.old_width;this.settings.height=this.settings.old_height;this.visualAid=this.settings.visual;this.formTargetElementId=form_element_name;if(replace_element.nodeName=="TEXTAREA"||replace_element.nodeName=="INPUT")this.startContent=replace_element.value;else this.startContent=replace_element.innerHTML;if(replace_element.nodeName!="TEXTAREA"&&replace_element.nodeName!="INPUT"){this.oldTargetElement=replace_element;hc='<input type="hidden" id="'+form_element_name+'" name="'+form_element_name+'" />';this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";html+='</span>';if(tinyMCE.isGecko)html=hc+html;else html+=hc;if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}else{html+='</span>';this.oldTargetElement=replace_element;this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}dynamicIFrame=false;tElm=targetDoc.getElementById(this.editorId);if(!tinyMCE.isIE){if(tElm&&(tElm.nodeName=="SPAN"||tElm.nodeName=="span")){tElm=tinyMCE._createIFrame(tElm,targetDoc);dynamicIFrame=true}this.targetElement=tElm;this.iframeElement=tElm;this.contentDocument=tElm.contentDocument;this.contentWindow=tElm.contentWindow;}else{if(tElm&&tElm.nodeName=="SPAN")tElm=tinyMCE._createIFrame(tElm,targetDoc,targetDoc.parentWindow);else tElm=targetDoc.frames[this.editorId];this.targetElement=tElm;this.iframeElement=targetDoc.getElementById(this.editorId);if(tinyMCE.isOpera){this.contentDocument=this.iframeElement.contentDocument;this.contentWindow=this.iframeElement.contentWindow;dynamicIFrame=true}else{this.contentDocument=tElm.window.document;this.contentWindow=tElm.window}this.getDoc().designMode="on"}doc=this.contentDocument;if(dynamicIFrame){html=tinyMCE.getParam('doctype')+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+tinyMCE.settings.base_href+'" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';try{if(!this.isHidden())this.getDoc().designMode="on";doc.open();doc.write(html);doc.close()}catch(e){this.getDoc().location.href=tinyMCE.baseURL+"/blank.htm"}}if(tinyMCE.isIE)window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\""+this.editorId+"\"]);",1);parentElm=this.targetDoc.getElementById(this.editorId+'_parent');this.formElement=tinyMCE.isGecko?parentElm.previousSibling:parentElm.nextSibling;tinyMCE.setupContent(this.editorId,true);return true},setBaseHREF:function(u){var h,b,d,nl;d=this.getDoc();nl=d.getElementsByTagName("base");b=nl.length>0?nl[0]:null;if(!b){nl=d.getElementsByTagName("head");h=nl.length>0?nl[0]:null;b=d.createElement("base");b.setAttribute('href',u);h.appendChild(b)}else{if(u==''||u==null)b.parentNode.removeChild(b);else b.setAttribute('href',u)}},getHTML:function(r){var h,d=this.getDoc(),b=this.getBody();if(r)return b.innerHTML;h=tinyMCE._cleanupHTML(this,d,this.settings,b,false,true,false,true);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(d);return h},setHTML:function(h){this.execCommand('mceSetContent',false,h);this.repaint()},getFocusElement:function(){return this.selection.getFocusElement()},getSel:function(){return this.selection.getSel()},getRng:function(){return this.selection.getRng()},triggerSave:function(skip_cleanup,skip_callback){var e,nl=[],i,s,content,htm;if(!this.enabled)return;this.switchSettings();s=tinyMCE.settings;if(tinyMCE.isRealIE){e=this.iframeElement;do{if(e.style&&e.style.display=='none'){e.style.display='block';nl[nl.length]={elm:e,type:'style'}}if(e.style&&s.hidden_tab_class.length>0&&e.className.indexOf(s.hidden_tab_class)!=-1){e.className=s.display_tab_class;nl[nl.length]={elm:e,type:'class'}}}while((e=e.parentNode)!=null)}tinyMCE.settings.preformatted=false;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;tinyMCE._setHTML(this.getDoc(),this.getBody().innerHTML);if(this.settings.cleanup==false){tinyMCE.handleVisualAid(this.getBody(),true,false,this);tinyMCE._setEventsEnabled(this.getBody(),true)}tinyMCE._customCleanup(this,"submit_content_dom",this.contentWindow.document.body);htm=skip_cleanup?this.getBody().innerHTML:tinyMCE._cleanupHTML(this,this.getDoc(),this.settings,this.getBody(),tinyMCE.visualAid,true,true);htm=tinyMCE._customCleanup(this,"submit_content",htm);if(!skip_callback&&tinyMCE.settings.save_callback!=='')content=tinyMCE.resolveDots(tinyMCE.settings.save_callback,window)(this.formTargetElementId,htm,this.getBody());if((typeof(content)!="undefined")&&content!=null)htm=content;htm=tinyMCE.regexpReplace(htm,"(","(","gi");htm=tinyMCE.regexpReplace(htm,")",")","gi");htm=tinyMCE.regexpReplace(htm,";",";","gi");htm=tinyMCE.regexpReplace(htm,""",""","gi");htm=tinyMCE.regexpReplace(htm,"^","^","gi");if(this.formElement)this.formElement.value=htm;if(tinyMCE.isSafari&&this.formElement)this.formElement.innerText=htm;for(i=0;i<nl.length;i++){if(nl[i].type=='style')nl[i].elm.style.display='none';else nl[i].elm.className=s.hidden_tab_class}}};tinyMCE.add(TinyMCE_Engine,{cleanupHTMLCode:function(s){s=s.replace(new RegExp('<p \\/>','gi'),'<p> </p>');s=s.replace(new RegExp('<p>\\s*<\\/p>','gi'),'<p> </p>');s=s.replace(new RegExp('<br>\\s*<\\/br>','gi'),'<br />');s=s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>','gi'),'<$1$2$3></$1$2>');s=s.replace(new RegExp('\\s+></','gi'),'></');s=s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>','gi'),'<$1$2 />');if(tinyMCE.isIE)s=s.replace(new RegExp('<p><hr \\/><\\/p>','gi'),"<hr>");if(tinyMCE.isIE)s=s.replace(/<!(\s*)\/>/g,'');return s},parseStyle:function(str){var ar=[],st,i,re,pa;if(str==null)return ar;st=str.split(';');tinyMCE.clearArray(ar);for(i=0;i<st.length;i++){if(st[i]=='')continue;re=new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');pa=st[i].replace(re,'$1||$2').split('||');if(pa.length==2)ar[pa[0].toLowerCase()]=pa[1]}return ar},compressStyle:function(ar,pr,sf,res){var box=[],i,a;box[0]=ar[pr+'-top'+sf];box[1]=ar[pr+'-left'+sf];box[2]=ar[pr+'-right'+sf];box[3]=ar[pr+'-bottom'+sf];for(i=0;i<box.length;i++){if(box[i]==null)return;if(i&&box[i]!=box[i-1])return}ar[res]=box[0];ar[pr+'-top'+sf]=null;ar[pr+'-left'+sf]=null;ar[pr+'-right'+sf]=null;ar[pr+'-bottom'+sf]=null},serializeStyle:function(ar){var str="",key,val,m;tinyMCE.compressStyle(ar,"border","","border");tinyMCE.compressStyle(ar,"border","-width","border-width");tinyMCE.compressStyle(ar,"border","-color","border-color");tinyMCE.compressStyle(ar,"border","-style","border-style");tinyMCE.compressStyle(ar,"padding","","padding");tinyMCE.compressStyle(ar,"margin","","margin");for(key in ar){val=ar[key];if(typeof(val)=='function')continue;if(key.indexOf('mso-')==0)continue;if(val!=null&&val!==''){val=''+val;val=val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)",'gi'),"url('$1')");if(val.indexOf('url(')!=-1&&tinyMCE.getParam('convert_urls')){m=new RegExp("url\\('(.*?)'\\)").exec(val);if(m.length>1)val="url('"+eval(tinyMCE.getParam('urlconverter_callback')+"(m[1], null, true);")+"')"}if(tinyMCE.getParam("force_hex_style_colors"))val=tinyMCE.convertRGBToHex(val,true);val=val.replace(/\"/g,'\'');if(val!="url('')")str+=key.toLowerCase()+": "+val+"; "}}if(new RegExp('; $').test(str))str=str.substring(0,str.length-2);return str},convertRGBToHex:function(s,k){var re,rgb;if(s.toLowerCase().indexOf('rgb')!=-1){re=new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)","gi");rgb=s.replace(re,"$1,$2,$3,$4,$5").split(',');if(rgb.length==5){r=parseInt(rgb[1]).toString(16);g=parseInt(rgb[2]).toString(16);b=parseInt(rgb[3]).toString(16);r=r.length==1?'0'+r:r;g=g.length==1?'0'+g:g;b=b.length==1?'0'+b:b;s="#"+r+g+b;if(k)s=rgb[0]+s+rgb[4]}}return s},convertHexToRGB:function(s){if(s.indexOf('#')!=-1){s=s.replace(new RegExp('[^0-9A-F]','gi'),'');return"rgb("+parseInt(s.substring(0,2),16)+","+parseInt(s.substring(2,4),16)+","+parseInt(s.substring(4,6),16)+")"}return s},convertSpansToFonts:function(doc){var s,i,size,fSize,x,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){size=tinyMCE.trim(s[i].style.fontSize).toLowerCase();fSize=0;for(x=0;x<sizes.length;x++){if(sizes[x]==size){fSize=x+1;break}}if(fSize>0){tinyMCE.setAttrib(s[i],'size',fSize);s[i].style.fontSize=''}fFace=s[i].style.fontFamily;if(fFace!=null&&fFace!==''){tinyMCE.setAttrib(s[i],'face',fFace);s[i].style.fontFamily=''}fColor=s[i].style.color;if(fColor!=null&&fColor!==''){tinyMCE.setAttrib(s[i],'color',tinyMCE.convertRGBToHex(fColor));s[i].style.color=''}}},convertFontsToSpans:function(doc){var fsClasses,s,i,fSize,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');fsClasses=tinyMCE.getParam('font_size_classes');if(fsClasses!=='')fsClasses=fsClasses.replace(/\s+/,'').split(',');else fsClasses=null;s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){fSize=tinyMCE.getAttrib(s[i],'size');fFace=tinyMCE.getAttrib(s[i],'face');fColor=tinyMCE.getAttrib(s[i],'color');if(fSize!==''){fSize=parseInt(fSize);if(fSize>0&&fSize<8){if(fsClasses!=null)tinyMCE.setAttrib(s[i],'class',fsClasses[fSize-1]);else s[i].style.fontSize=sizes[fSize-1]}s[i].removeAttribute('size')}if(fFace!==''){s[i].style.fontFamily=fFace;s[i].removeAttribute('face')}if(fColor!==''){s[i].style.color=fColor;s[i].removeAttribute('color')}}},cleanupAnchors:function(doc){var i,cn,x,an=doc.getElementsByTagName("a");for(i=an.length-1;i>=0;i--){if(tinyMCE.getAttrib(an[i],"name")!==''&&tinyMCE.getAttrib(an[i],"href")==''){cn=an[i].childNodes;for(x=cn.length-1;x>=0;x--)tinyMCE.insertAfter(cn[x],an[i])}}},getContent:function(editor_id){if(typeof(editor_id)!="undefined")tinyMCE.getInstanceById(editor_id).select();if(tinyMCE.selectedInstance)return tinyMCE.selectedInstance.getHTML();return null},_fixListElements:function(d){var nl,x,a=['ol','ul'],i,n,p,r=new RegExp('^(OL|UL)$'),np;for(x=0;x<a.length;x++){nl=d.getElementsByTagName(a[x]);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=tinyMCE.prevNode(n,'LI');if(!np){np=d.createElement('li');np.innerHTML=' ';np.appendChild(n);p.insertBefore(np,p.firstChild)}else np.appendChild(n)}}}},_fixTables:function(d){var nl,i,n,p,np,x,t;nl=d.getElementsByTagName('table');for(i=0;i<nl.length;i++){n=nl[i];if((p=tinyMCE.getParentElement(n,'p,h1,h2,h3,h4,h5,h6'))!=null){np=p.cloneNode(false);np.removeAttribute('id');t=n;while((n=n.nextSibling))np.appendChild(n);tinyMCE.insertAfter(np,p);tinyMCE.insertAfter(t,p)}}},_cleanupHTML:function(inst,doc,config,elm,visual,on_save,on_submit,inn){var h,d,t1,t2,t3,t4,t5,c,s,nb;if(!tinyMCE.getParam('cleanup'))return elm.innerHTML;on_save=typeof(on_save)=='undefined'?false:on_save;c=inst.cleanup;s=inst.settings;d=c.settings.debug;if(d)t1=new Date().getTime();inst._fixRootBlocks();if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertFontsToSpans(doc);if(tinyMCE.getParam("fix_list_elements"))tinyMCE._fixListElements(doc);if(tinyMCE.getParam("fix_table_elements"))tinyMCE._fixTables(doc);tinyMCE._customCleanup(inst,on_save?"get_from_editor_dom":"insert_to_editor_dom",doc.body);if(d)t2=new Date().getTime();c.settings.on_save=on_save;c.idCount=0;c.serializationId++;c.serializedNodes=[];c.sourceIndex=-1;if(s.cleanup_serializer=="xml")h=c.serializeNodeAsXML(elm,inn);else h=c.serializeNodeAsHTML(elm,inn);if(d)t3=new Date().getTime();nb=tinyMCE.getParam('entity_encoding')=='numeric'?' ':' ';h=h.replace(/<\/?(body|head|html)[^>]*>/gi,'');h=h.replace(new RegExp(' (rowspan="1"|colspan="1")','g'),'');h=h.replace(/<p><hr \/><\/p>/g,'<hr />');h=h.replace(/<p>( | )<\/p><hr \/><p>( | )<\/p>/g,'<hr />');h=h.replace(/<td>\s*<br \/>\s*<\/td>/g,'<td>'+nb+'</td>');h=h.replace(/<p>\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<br \/>$/,'');h=h.replace(/<br \/><\/p>/g,'</p>');h=h.replace(/<p>\s*( | )\s*<br \/>\s*( | )\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*( | )\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*<br \/>\s* \s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(new RegExp('<a>(.*?)<\\/a>','g'),'$1');h=h.replace(/<p([^>]*)>\s*<\/p>/g,'<p$1>'+nb+'</p>');if(/^\s*(<br \/>|<p> <\/p>|<p> <\/p>|<p><\/p>)\s*$/.test(h))h='';if(s.preformatted){h=h.replace(/^<pre>/,'');h=h.replace(/<\/pre>$/,'');h='<pre>'+h+'</pre>'}if(tinyMCE.isGecko){h=h.replace(/<br \/>\s*<\/li>/g,'</li>');h=h.replace(/ \s*<\/(dd|dt)>/g,'</$1>');h=h.replace(/<o:p _moz-userdefined="" \/>/g,'');h=h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g,'<td$1>'+nb+'</td>')}if(s.force_br_newlines)h=h.replace(/<p>( | )<\/p>/g,'<br />');h=tinyMCE._customCleanup(inst,on_save?"get_from_editor":"insert_to_editor",h);if(on_save){h=h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|'+s.visual_table_class+')','g'),'');h=h.replace(new RegExp(' ?class=""','g'),'')}if(s.remove_linebreaks&&!c.settings.indent)h=h.replace(/\n|\r/g,' ');if(d)t4=new Date().getTime();if(on_save&&c.settings.indent)h=c.formatHTML(h);if(on_submit&&(s.encoding=="xml"||s.encoding=="html"))h=c.xmlEncode(h);if(d)t5=new Date().getTime();if(c.settings.debug)tinyMCE.debug("Cleanup in ms: Pre="+(t2-t1)+", Serialize: "+(t3-t2)+", Post: "+(t4-t3)+", Format: "+(t5-t4)+", Sum: "+(t5-t1)+".");return h}});function TinyMCE_Cleanup(){this.isIE=(navigator.appName=="Microsoft Internet Explorer");this.rules=tinyMCE.clearArray([]);this.settings={indent_elements:'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',newline_before_elements:'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',newline_after_elements:'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',newline_before_after_elements:'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',indent_char:'\t',indent_levels:1,entity_encoding:'raw',valid_elements:'*[*]',entities:'',url_converter:'',invalid_elements:'',verify_html:false};this.vElements=tinyMCE.clearArray([]);this.vElementsRe='';this.closeElementsRe=/^(IMG|BR|HR|LINK|META|BASE|INPUT|AREA)$/;this.codeElementsRe=/^(SCRIPT|STYLE)$/;this.serializationId=0;this.mceAttribs={href:'mce_href',src:'mce_src',type:'mce_type'}}TinyMCE_Cleanup.prototype={init:function(s){var n,a,i,ir,or,st;for(n in s)this.settings[n]=s[n];s=this.settings;this.inRe=this._arrayToRe(s.indent_elements.split(','),'','^<(',')[^>]*');this.ouRe=this._arrayToRe(s.indent_elements.split(','),'','^<\\/(',')[^>]*');this.nlBeforeRe=this._arrayToRe(s.newline_before_elements.split(','),'gi','<(',')([^>]*)>');this.nlAfterRe=this._arrayToRe(s.newline_after_elements.split(','),'gi','<(',')([^>]*)>');this.nlBeforeAfterRe=this._arrayToRe(s.newline_before_after_elements.split(','),'gi','<(\\/?)(',')([^>]*)>');this.serializedNodes=[];this.serializationId=0;if(s.invalid_elements!=='')this.iveRe=this._arrayToRe(s.invalid_elements.toUpperCase().split(','),'g','^(',')$');else this.iveRe=null;st='';for(i=0;i<s.indent_levels;i++)st+=s.indent_char;this.inStr=st;if(!s.verify_html){s.valid_elements='*[*]';s.extended_valid_elements=''}this.fillStr=s.entity_encoding=="named"?" ":" ";this.idCount=0;this.xmlEncodeRe=new RegExp('[\u007F-\uFFFF<>&"]','g')},addRuleStr:function(s){var r=this.parseRuleStr(s),n;for(n in r){if(r[n])this.rules[n]=r[n]}this.vElements=tinyMCE.clearArray([]);for(n in this.rules){if(this.rules[n])this.vElements[this.vElements.length]=this.rules[n].tag}this.vElementsRe=this._arrayToRe(this.vElements,'')},isValid:function(n){if(!this.rulesDone)this._setupRules();if(!n)return true;n=n.replace(/[^a-z0-9]+/gi,'').toUpperCase();return!tinyMCE.getParam('cleanup')||this.vElementsRe.test(n)},addChildRemoveRuleStr:function(s){var x,y,p,i,t,tn,ta,cl,r;if(!s)return;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r="^(";cl=this.split(/\|/,p[1]);for(i=0;i<cl.length;i++){if(cl[i]=='%istrict')r+=tinyMCE.inlineStrict;else if(cl[i]=='%itrans')r+=tinyMCE.inlineTransitional;else if(cl[i]=='%istrict_na')r+=tinyMCE.inlineStrict.substring(2);else if(cl[i]=='%itrans_na')r+=tinyMCE.inlineTransitional.substring(2);else if(cl[i]=='%btrans')r+=tinyMCE.blockElms;else if(cl[i]=='%strict')r+=tinyMCE.blockStrict;else r+=(cl[i].charAt(0)!='#'?cl[i].toUpperCase():cl[i]);r+=(i!=cl.length-1?'|':'')}r+=')$';if(this.childRules==null)this.childRules=tinyMCE.clearArray([]);this.childRules[tn[y]]=new RegExp(r);if(p.length>1)this.childRules[tn[y]].wrapTag=p[2]}}},parseRuleStr:function(s){var ta,p,r,a,i,x,px,t,tn,y,av,or=tinyMCE.clearArray([]),dv;if(s==null||s.length==0)return or;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];if(s.length==0)continue;p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r={};r.tag=tn[y];r.forceAttribs=null;r.defaultAttribs=null;r.validAttribValues=null;px=r.tag.charAt(0);r.forceOpen=px=='+';r.removeEmpty=px=='-';r.fill=px=='#';r.tag=r.tag.replace(/\+|-|#/g,'');r.oTagName=tn[0].replace(/\+|-|#/g,'').toLowerCase();r.isWild=new RegExp('\\*|\\?|\\+','g').test(r.tag);r.validRe=new RegExp(this._wildcardToRe('^'+r.tag+'$'));if(p.length>1){r.vAttribsRe='^(';a=this.split(/\|/,p[1]);for(i=0;i<a.length;i++){t=a[i];if(t.charAt(0)=='!'){a[i]=t=t.substring(1);if(!r.reqAttribsRe)r.reqAttribsRe='\\s+('+t;else r.reqAttribsRe+='|'+t}av=new RegExp('(=|:|<)(.*?)$').exec(t);t=t.replace(new RegExp('(=|:|<).*?$'),'');if(av&&av.length>0){if(av[0].charAt(0)==':'){if(!r.forceAttribs)r.forceAttribs=tinyMCE.clearArray([]);r.forceAttribs[t.toLowerCase()]=av[0].substring(1)}else if(av[0].charAt(0)=='='){if(!r.defaultAttribs)r.defaultAttribs=tinyMCE.clearArray([]);dv=av[0].substring(1);r.defaultAttribs[t.toLowerCase()]=dv==''?"mce_empty":dv}else if(av[0].charAt(0)=='<'){if(!r.validAttribValues)r.validAttribValues=tinyMCE.clearArray([]);r.validAttribValues[t.toLowerCase()]=this._arrayToRe(this.split('?',av[0].substring(1)),'i')}}r.vAttribsRe+=''+t.toLowerCase()+(i!=a.length-1?'|':'');a[i]=t.toLowerCase()}if(r.reqAttribsRe)r.reqAttribsRe=new RegExp(r.reqAttribsRe+')=\"','g');r.vAttribsRe+=')$';r.vAttribsRe=this._wildcardToRe(r.vAttribsRe);r.vAttribsReIsWild=new RegExp('\\*|\\?|\\+','g').test(r.vAttribsRe);r.vAttribsRe=new RegExp(r.vAttribsRe);r.vAttribs=a.reverse();}else{r.vAttribsRe='';r.vAttribs=tinyMCE.clearArray([]);r.vAttribsReIsWild=false}or[r.tag]=r}}return or},serializeNodeAsXML:function(n){var s,b;if(!this.xmlDoc){if(this.isIE){try{this.xmlDoc=new ActiveXObject('MSXML2.DOMDocument')}catch(e){}if(!this.xmlDoc)try{this.xmlDoc=new ActiveXObject('Microsoft.XmlDom')}catch(e){}}else this.xmlDoc=document.implementation.createDocument('','',null);if(!this.xmlDoc)alert("Error XML Parser could not be found.")}if(this.xmlDoc.firstChild)this.xmlDoc.removeChild(this.xmlDoc.firstChild);b=this.xmlDoc.createElement("html");b=this.xmlDoc.appendChild(b);this._convertToXML(n,b);if(this.isIE)return this.xmlDoc.xml;else return new XMLSerializer().serializeToString(this.xmlDoc)},_convertToXML:function(n,xn){var xd,el,i,l,cn,at,no,hc=false;if(tinyMCE.isRealIE&&this._isDuplicate(n))return;xd=this.xmlDoc;switch(n.nodeType){case 1:hc=n.hasChildNodes();el=xd.createElement(n.nodeName.toLowerCase());at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&no.nodeValue)el.setAttribute(no.nodeName.toLowerCase(),no.nodeValue)}if(!hc&&!this.closeElementsRe.test(n.nodeName))el.appendChild(xd.createTextNode(""));xn=xn.appendChild(el);break;case 3:xn.appendChild(xd.createTextNode(n.nodeValue));return;case 8:xn.appendChild(xd.createComment(n.nodeValue));return}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)this._convertToXML(cn[i],xn)}},serializeNodeAsHTML:function(n,inn){var en,no,h='',i,l,t,st,r,cn,va=false,f=false,at,hc,cr,nn;if(!this.rulesDone)this._setupRules();if(tinyMCE.isRealIE&&this._isDuplicate(n))return'';if(n.parentNode&&this.childRules!=null){cr=this.childRules[n.parentNode.nodeName];if(typeof(cr)!="undefined"&&!cr.test(n.nodeName)){st=true;t=null}}switch(n.nodeType){case 1:hc=n.hasChildNodes();if(st)break;nn=n.nodeName;if(tinyMCE.isRealIE){if(n.nodeName.indexOf('/')!=-1)break;if(n.scopeName&&n.scopeName!='HTML')nn=n.scopeName.toUpperCase()+':'+nn.toUpperCase()}else if(tinyMCE.isOpera&&nn.indexOf(':')>0)nn=nn.toUpperCase();if(this.settings.convert_fonts_to_spans){if(this.settings.on_save&&nn=='FONT')nn='SPAN';if(!this.settings.on_save&&nn=='SPAN')nn='FONT'}if(this.vElementsRe.test(nn)&&(!this.iveRe||!this.iveRe.test(nn))&&!inn){va=true;r=this.rules[nn];if(!r){at=this.rules;for(no in at){if(at[no]&&at[no].validRe.test(nn)){r=at[no];break}}}en=r.isWild?nn.toLowerCase():r.oTagName;f=r.fill;if(r.removeEmpty&&!hc)return"";t='<'+en;if(r.vAttribsReIsWild){at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&r.vAttribsRe.test(no.nodeName))t+=this._serializeAttribute(n,r,no.nodeName)}}else{for(i=r.vAttribs.length-1;i>-1;i--)t+=this._serializeAttribute(n,r,r.vAttribs[i])}if(!this.settings.on_save){at=this.mceAttribs;for(no in at){if(at[no])t+=this._serializeAttribute(n,r,at[no])}}if(r.reqAttribsRe&&!t.match(r.reqAttribsRe))t=null;if(t!=null&&this.closeElementsRe.test(nn))return t+' />';if(t!=null)h+=t+'>';if(this.isIE&&this.codeElementsRe.test(nn))h+=n.innerHTML}break;case 3:if(st)break;if(n.parentNode&&this.codeElementsRe.test(n.parentNode.nodeName))return this.isIE?'':n.nodeValue;return this.xmlEncode(n.nodeValue);case 8:if(st)break;return"<!--"+this._trimComment(n.nodeValue)+"-->"}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)h+=this.serializeNodeAsHTML(cn[i])}if(f&&!hc)h+=this.fillStr;if(t!=null&&va)h+='</'+en+'>';return h},_serializeAttribute:function(n,r,an){var av='',t,os=this.settings.on_save;if(os&&(an.indexOf('mce_')==0||an.indexOf('_moz')==0))return'';if(os&&this.mceAttribs[an])av=this._getAttrib(n,this.mceAttribs[an]);if(av.length==0)av=this._getAttrib(n,an);if(av.length==0&&r.defaultAttribs&&(t=r.defaultAttribs[an])){av=t;if(av=="mce_empty")return" "+an+'=""'}if(r.forceAttribs&&(t=r.forceAttribs[an]))av=t;if(os&&av.length!=0&&/^(src|href|longdesc)$/.test(an))av=this._urlConverter(this,n,av);if(av.length!=0&&r.validAttribValues&&r.validAttribValues[an]&&!r.validAttribValues[an].test(av))return"";if(av.length!=0&&av=="{$uid}")av="uid_"+(this.idCount++);if(av.length!=0){if(an.indexOf('on')!=0)av=this.xmlEncode(av,1);return" "+an+"="+'"'+av+'"'}return""},formatHTML:function(h){var s=this.settings,p='',i=0,li=0,o='',l;h=h.replace(/<pre([^>]*)>(.*?)<\/pre>/gi,function(a,b,c){c=c.replace(/<br\s*\/>/gi,'\n');return'<pre'+b+'>'+c+'</pre>'});h=h.replace(/\r/g,'');h='\n'+h;h=h.replace(new RegExp('\\n\\s+','gi'),'\n');h=h.replace(this.nlBeforeRe,'\n<$1$2>');h=h.replace(this.nlAfterRe,'<$1$2>\n');h=h.replace(this.nlBeforeAfterRe,'\n<$1$2$3>\n');h+='\n';while((i=h.indexOf('\n',i+1))!=-1){if((l=h.substring(li+1,i)).length!=0){if(this.ouRe.test(l)&&p.length>=s.indent_levels)p=p.substring(s.indent_levels);o+=p+l+'\n';if(this.inRe.test(l))p+=this.inStr}li=i}return o},xmlEncode:function(s){var cl=this,re=this.xmlEncodeRe;if(!this.entitiesDone)this._setupEntities();switch(this.settings.entity_encoding){case"raw":return tinyMCE.xmlEncode(s);case"named":return s.replace(re,function(c){var b=cl.entities[c.charCodeAt(0)];return b?'&'+b+';':c});case"numeric":return s.replace(re,function(c){return'&#'+c.charCodeAt(0)+';'})}return s},split:function(re,s){var i,l,o=[],c=s.split(re);for(i=0,l=c.length;i<l;i++){if(c[i]!=='')o[i]=c[i]}return o},_trimComment:function(s){s=s.replace(new RegExp('\\smce_src=\"[^\"]*\"','gi'),"");s=s.replace(new RegExp('\\smce_href=\"[^\"]*\"','gi'),"");return s},_getAttrib:function(e,n,d){var v,ex,nn;if(typeof(d)=="undefined")d="";if(!e||e.nodeType!=1)return d;try{v=e.getAttribute(n,0)}catch(ex){v=e.getAttribute(n,2)}if(n=="class"&&!v)v=e.className;if(this.isIE){if(n=="http-equiv")v=e.httpEquiv;nn=e.nodeName;if(nn=="FORM"&&n=="enctype"&&v=="application/x-www-form-urlencoded")v="";if(nn=="INPUT"&&n=="size"&&v=="20")v="";if(nn=="INPUT"&&n=="maxlength"&&v=="2147483647")v="";if(n=="width"||n=="height")v=e.getAttribute(n,2)}if(n=='style'&&v){if(!tinyMCE.isOpera)v=e.style.cssText;v=tinyMCE.serializeStyle(tinyMCE.parseStyle(v))}if(this.settings.on_save&&n.indexOf('on')!=-1&&this.settings.on_save&&v&&v!=='')v=tinyMCE.cleanupEventStr(v);return(v&&v!=='')?''+v:d},_urlConverter:function(c,n,v){if(!c.settings.on_save)return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,v);else if(tinyMCE.getParam('convert_urls')){if(!this.urlConverter)this.urlConverter=eval(tinyMCE.settings.urlconverter_callback);return this.urlConverter(v,n,true)}return v},_arrayToRe:function(a,op,be,af){var i,r;op=typeof(op)=="undefined"?"gi":op;be=typeof(be)=="undefined"?"^(":be;af=typeof(af)=="undefined"?")$":af;r=be;for(i=0;i<a.length;i++)r+=this._wildcardToRe(a[i])+(i!=a.length-1?"|":"");r+=af;return new RegExp(r,op)},_wildcardToRe:function(s){s=s.replace(/\?/g,'(\\S?)');s=s.replace(/\+/g,'(\\S+)');s=s.replace(/\*/g,'(\\S*)');return s},_setupEntities:function(){var n,a,i,s=this.settings;if(s.entity_encoding=="named"){n=tinyMCE.clearArray([]);a=this.split(',',s.entities);for(i=0;i<a.length;i+=2)n[a[i]]=a[i+1];this.entities=n}this.entitiesDone=true},_setupRules:function(){var s=this.settings;this.addRuleStr(s.valid_elements);this.addRuleStr(s.extended_valid_elements);this.addChildRemoveRuleStr(s.valid_child_elements);this.rulesDone=true},_isDuplicate:function(n){var i,l,sn;if(!this.settings.fix_content_duplication)return false;if(tinyMCE.isRealIE&&n.nodeType==1){if(n.mce_serialized==this.serializationId)return true;n.setAttribute('mce_serialized',this.serializationId)}else{sn=this.serializedNodes;for(i=0,l=sn.length;i<l;i++){if(sn[i]==n)return true}sn.push(n)}return false}};tinyMCE.add(TinyMCE_Engine,{createTagHTML:function(tn,a,h){var o='',f=tinyMCE.xmlEncode,n;o='<'+tn;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)o+=' '+f(n)+'="'+f(''+a[n])+'"'}}o+=!h?' />':'>'+h+'</'+tn+'>';return o},createTag:function(d,tn,a,h){var o=d.createElement(tn),n;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)tinyMCE.setAttrib(o,n,a[n])}}if(h)o.innerHTML=h;return o},getElementByAttributeValue:function(n,e,a,v){return(n=this.getElementsByAttributeValue(n,e,a,v)).length==0?null:n[0]},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i]}return o},isBlockElement:function(n){return n!=null&&n.nodeType==1&&this.blockRegExp.test(n.nodeName)},getParentBlockElement:function(n,r){return this.getParentNode(n,function(n){return tinyMCE.isBlockElement(n)},r);return null},insertAfter:function(n,r){if(r.nextSibling)r.parentNode.insertBefore(n,r.nextSibling);else r.parentNode.appendChild(n)},setInnerHTML:function(e,h){var i,nl,n;if(tinyMCE.isGecko){h=h.replace(/<embed([^>]*)>/gi,'<tmpembed$1>');h=h.replace(/<em([^>]*)>/gi,'<i$1>');h=h.replace(/<tmpembed([^>]*)>/gi,'<embed$1>');h=h.replace(/<strong([^>]*)>/gi,'<b$1>');h=h.replace(/<\/strong>/gi,'</b>');h=h.replace(/<\/em>/gi,'</i>')}if(tinyMCE.isRealIE){h=h.replace(/\s\/>/g,'>');h=h.replace(/<p([^>]*)>\u00A0?<\/p>/gi,'<p$1 mce_keep="true"> </p>');h=h.replace(/<p([^>]*)>\s* \s*<\/p>/gi,'<p$1 mce_keep="true"> </p>');h=h.replace(/<p([^>]*)>\s+<\/p>/gi,'<p$1 mce_keep="true"> </p>');e.innerHTML=tinyMCE.uniqueTag+h;e.firstChild.removeNode(true);nl=e.getElementsByTagName("p");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.nodeName=='P'&&!n.hasChildNodes()&&!n.mce_keep)n.parentNode.removeChild(n)}}else{h=this.fixGeckoBaseHREFBug(1,e,h);e.innerHTML=h;this.fixGeckoBaseHREFBug(2,e,h)}},getOuterHTML:function(e){var d;if(tinyMCE.isIE)return e.outerHTML;d=e.ownerDocument.createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML},setOuterHTML:function(e,h,d){var d=typeof(d)=="undefined"?e.ownerDocument:d,i,nl,t;if(tinyMCE.isIE&&e.nodeType==1)e.outerHTML=h;else{t=d.createElement("body");t.innerHTML=h;for(i=0,nl=t.childNodes;i<nl.length;i++)e.parentNode.insertBefore(nl[i].cloneNode(true),e);e.parentNode.removeChild(e)}},_getElementById:function(id,d){var e,i,j,f;if(typeof(d)=="undefined")d=document;e=d.getElementById(id);if(!e){f=d.forms;for(i=0;i<f.length;i++){for(j=0;j<f[i].elements.length;j++){if(f[i].elements[j].name==id){e=f[i].elements[j];break}}}}return e},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn)},na?na:[])},getParentElement:function(n,na,f,r){var re=na?new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$'):0,v;if(f&&typeof(f)=='string')return this.getParentElement(n,na,function(no){return tinyMCE.getAttrib(no,f)!==''});return this.getParentNode(n,function(n){return((n.nodeType==1&&!re)||(re&&re.test(n.nodeName)))&&(!f||f(n))},r)},getParentNode:function(n,f,r){while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode}return null},getAttrib:function(elm,name,dv){var v;if(typeof(dv)=="undefined")dv="";if(!elm||elm.nodeType!=1)return dv;try{v=elm.getAttribute(name,0)}catch(ex){v=elm.getAttribute(name,2)}if(name=="class"&&!v)v=elm.className;if(tinyMCE.isGecko){if(name=="src"&&elm.src!=null&&elm.src!=='')v=elm.src;if(name=="href"&&elm.href!=null&&elm.href!=='')v=elm.href}else if(tinyMCE.isIE){switch(name){case"http-equiv":v=elm.httpEquiv;break;case"width":case"height":v=elm.getAttribute(name,2);break}}if(name=="style"&&!tinyMCE.isOpera)v=elm.style.cssText;return(v&&v!=='')?v:dv},setAttrib:function(el,name,va,fix){if(typeof(va)=="number"&&va!=null)va=""+va;if(fix){if(va==null)va="";va=va.replace(/[^0-9%]/g,'')}if(name=="style")el.style.cssText=va;if(name=="class")el.className=va;if(va!=null&&va!==''&&va!=-1)el.setAttribute(name,va);else el.removeAttribute(name)},setStyleAttrib:function(e,n,v){e.style[n]=v;if(tinyMCE.isIE&&v==null||v==''){v=tinyMCE.serializeStyle(tinyMCE.parseStyle(e.style.cssText));e.style.cssText=v;e.setAttribute("style",v)}},switchClass:function(ei,c){var e;if(tinyMCE.switchClassCache[ei])e=tinyMCE.switchClassCache[ei];else e=tinyMCE.switchClassCache[ei]=document.getElementById(ei);if(e){if(tinyMCE.settings.button_tile_map&&e.className&&e.className.indexOf('mceTiledButton')==0)c='mceTiledButton '+c;e.className=c}},getAbsPosition:function(n,cn){var l=0,t=0;while(n&&n!=cn){l+=n.offsetLeft;t+=n.offsetTop;n=n.offsetParent}return{absLeft:l,absTop:t}},prevNode:function(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},nextNode:function(e,n){var a=n.split(','),i;while((e=e.nextSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a)}return a},addCSSClass:function(e,c,b){var o=this.removeCSSClass(e,c);return e.className=b?c+(o!==''?(' '+o):''):(o!==''?(o+' '):'')+c},removeCSSClass:function(e,c){c=e.className.replace(new RegExp("(^|\\s+)"+c+"(\\s+|$)"),' ');return e.className=c!=' '?c:''},hasCSSClass:function(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className)},renameElement:function(e,n,d){var ne,i,ar;d=typeof(d)=="undefined"?tinyMCE.selectedInstance.getDoc():d;if(e){ne=d.createElement(n);ar=e.attributes;for(i=ar.length-1;i>-1;i--){if(ar[i].specified&&ar[i].nodeValue)ne.setAttribute(ar[i].nodeName.toLowerCase(),ar[i].nodeValue)}ar=e.childNodes;for(i=0;i<ar.length;i++)ne.appendChild(ar[i].cloneNode(true));e.parentNode.replaceChild(ne,e)}},getViewPort:function(w){var d=w.document,m=d.compatMode=='CSS1Compat',b=d.body,de=d.documentElement;return{left:w.pageXOffset||(m?de.scrollLeft:b.scrollLeft),top:w.pageYOffset||(m?de.scrollTop:b.scrollTop),width:w.innerWidth||(m?de.clientWidth:b.clientWidth),height:w.innerHeight||(m?de.clientHeight:b.clientHeight)}},getStyle:function(n,na,d){if(!n)return false;if(tinyMCE.isGecko&&n.ownerDocument.defaultView){try{return n.ownerDocument.defaultView.getComputedStyle(n,null).getPropertyValue(na)}catch(n){return null}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase()});if(n.currentStyle)return n.currentStyle[na];return false}});tinyMCE.add(TinyMCE_Engine,{parseURL:function(url_str){var urlParts=[],i,pos,lastPos,chr;if(url_str){pos=url_str.indexOf('://');if(pos!=-1){urlParts.protocol=url_str.substring(0,pos);lastPos=pos+3}for(i=lastPos;i<url_str.length;i++){chr=url_str.charAt(i);if(chr==':')break;if(chr=='/')break}pos=i;urlParts.host=url_str.substring(lastPos,pos);urlParts.port="";lastPos=pos;if(url_str.charAt(pos)==':'){pos=url_str.indexOf('/',lastPos);urlParts.port=url_str.substring(lastPos+1,pos)}lastPos=pos;pos=url_str.indexOf('?',lastPos);if(pos==-1)pos=url_str.indexOf('#',lastPos);if(pos==-1)pos=url_str.length;urlParts.path=url_str.substring(lastPos,pos);lastPos=pos;if(url_str.charAt(pos)=='?'){pos=url_str.indexOf('#');pos=(pos==-1)?url_str.length:pos;urlParts.query=url_str.substring(lastPos+1,pos)}lastPos=pos;if(url_str.charAt(pos)=='#'){pos=url_str.length;urlParts.anchor=url_str.substring(lastPos+1,pos)}}return urlParts},serializeURL:function(up){var o="";if(up.protocol)o+=up.protocol+"://";if(up.host)o+=up.host;if(up.port)o+=":"+up.port;if(up.path)o+=up.path;if(up.query)o+="?"+up.query;if(up.anchor)o+="#"+up.anchor;return o},convertAbsoluteURLToRelativeURL:function(base_url,url_to_relative){var baseURL=this.parseURL(base_url),targetURL=this.parseURL(url_to_relative);var i,strTok1,strTok2,breakPoint=0,outPath="",forceSlash=false;var fileName,pos;if(targetURL.path=='')targetURL.path="/";else forceSlash=true;base_url=baseURL.path.substring(0,baseURL.path.lastIndexOf('/'));strTok1=base_url.split('/');strTok2=targetURL.path.split('/');if(strTok1.length>=strTok2.length){for(i=0;i<strTok1.length;i++){if(i>=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(strTok1.length<strTok2.length){for(i=0;i<strTok2.length;i++){if(i>=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(breakPoint==1)return targetURL.path;for(i=0;i<(strTok1.length-(breakPoint-1));i++)outPath+="../";for(i=breakPoint-1;i<strTok2.length;i++){if(i!=(breakPoint-1))outPath+="/"+strTok2[i];else outPath+=strTok2[i]}targetURL.protocol=null;targetURL.host=null;targetURL.port=null;targetURL.path=outPath==''&&forceSlash?"/":outPath;fileName=baseURL.path;if((pos=fileName.lastIndexOf('/'))!=-1)fileName=fileName.substring(pos+1);if(fileName==targetURL.path&&targetURL.anchor!=='')targetURL.path="";if(targetURL.path==''&&!targetURL.anchor)targetURL.path=fileName!==''?fileName:"/";return this.serializeURL(targetURL)},convertRelativeToAbsoluteURL:function(base_url,relative_url){var baseURL=this.parseURL(base_url),baseURLParts,relURLParts,newRelURLParts,numBack,relURL=this.parseURL(relative_url),i;var len,absPath,start,end,newBaseURLParts;if(relative_url==''||relative_url.indexOf('://')!=-1||/^(mailto:|javascript:|#|\/)/.test(relative_url))return relative_url;baseURLParts=baseURL.path.split('/');relURLParts=relURL.path.split('/');newBaseURLParts=[];for(i=baseURLParts.length-1;i>=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i]}baseURLParts=newBaseURLParts.reverse();newRelURLParts=[];numBack=0;for(i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue}if(numBack>0){numBack--;continue}newRelURLParts[newRelURLParts.length]=relURLParts[i]}relURLParts=newRelURLParts.reverse();len=baseURLParts.length-numBack;absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');start="";end="";relURL.protocol=baseURL.protocol;relURL.host=baseURL.host;relURL.port=baseURL.port;if(relURL.path.charAt(relURL.path.length-1)=="/")absPath+="/";relURL.path=absPath;return this.serializeURL(relURL)},convertURL:function(url,node,on_save){var dl=document.location,start,portPart,urlParts,baseUrlParts,tmpUrlParts,curl;var prot=dl.protocol,host=dl.hostname,port=dl.port;if(prot=="file:")return url;url=tinyMCE.regexpReplace(url,'(http|https):///','/');if(url.indexOf('mailto:')!=-1||url.indexOf('javascript:')!=-1||/^[ \t\r\n\+]*[#\?]/.test(url))return url;if(!tinyMCE.isIE&&!on_save&&url.indexOf("://")==-1&&url.charAt(0)!='/')return tinyMCE.settings.base_href+url;if(on_save&&tinyMCE.getParam('relative_urls')){curl=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(curl.charAt(0)=='/')curl=tinyMCE.settings.document_base_prefix+curl;urlParts=tinyMCE.parseURL(curl);tmpUrlParts=tinyMCE.parseURL(tinyMCE.settings.document_base_url);if(urlParts.host==tmpUrlParts.host&&(urlParts.port==tmpUrlParts.port))return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url,curl)}if(!tinyMCE.getParam('relative_urls')){urlParts=tinyMCE.parseURL(url);baseUrlParts=tinyMCE.parseURL(tinyMCE.settings.base_href);url=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(urlParts.anchor&&urlParts.path==baseUrlParts.path)return"#"+urlParts.anchor}if(tinyMCE.getParam('remove_script_host')){start="";portPart="";if(port!=='')portPart=":"+port;start=prot+"//"+host+portPart+"/";if(url.indexOf(start)==0)url=url.substring(start.length-1)}return url},convertAllRelativeURLs:function(body){var i,elms,src,href,mhref,msrc;elms=body.getElementsByTagName("img");for(i=0;i<elms.length;i++){src=tinyMCE.getAttrib(elms[i],'src');msrc=tinyMCE.getAttrib(elms[i],'mce_src');if(msrc!=='')src=msrc;if(src!==''){src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,src);elms[i].setAttribute("src",src)}}elms=body.getElementsByTagName("a");for(i=0;i<elms.length;i++){href=tinyMCE.getAttrib(elms[i],'href');mhref=tinyMCE.getAttrib(elms[i],'mce_href');if(mhref!=='')href=mhref;if(href&&href!==''){href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,href);elms[i].setAttribute("href",href)}}}});tinyMCE.add(TinyMCE_Engine,{clearArray:function(a){var n;for(n in a)a[n]=null;return a},explode:function(d,s){var ar=s.split(d),oar=[],i;for(i=0;i<ar.length;i++){if(ar[i]!=='')oar[oar.length]=ar[i]}return oar}});tinyMCE.add(TinyMCE_Engine,{_setEventsEnabled:function(node,state){var evs,x,y,elms,i,event;var events=['onfocus','onblur','onclick','ondblclick','onmousedown','onmouseup','onmouseover','onmousemove','onmouseout','onkeypress','onkeydown','onkeydown','onkeyup'];evs=tinyMCE.settings.event_elements.split(',');for(y=0;y<evs.length;y++){elms=node.getElementsByTagName(evs[y]);for(i=0;i<elms.length;i++){event="";for(x=0;x<events.length;x++){if((event=tinyMCE.getAttrib(elms[i],events[x]))!==''){event=tinyMCE.cleanupEventStr(""+event);if(!state)event="return true;"+event;else event=event.replace(/^return true;/gi,'');elms[i].removeAttribute(events[x]);elms[i].setAttribute(events[x],event)}}}}},_eventPatch:function(editor_id){var n,inst,win,e;if(typeof(tinyMCE)=="undefined")return true;try{if(tinyMCE.selectedInstance){win=tinyMCE.selectedInstance.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.select();win=inst.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}}catch(ex){}},findEvent:function(e){var n,inst;if(e)return e;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(tinyMCE.isInstance(inst)&&inst.getWin().event)return inst.getWin().event}return null},unloadHandler:function(){tinyMCE.triggerSave(true,true)},addEventHandlers:function(inst){this.setEventHandlers(inst,1)},setEventHandlers:function(inst,s){var doc=inst.getDoc(),ie,ot,i,f=s?tinyMCE.addEvent:tinyMCE.removeEvent;ie=['keypress','keyup','keydown','click','mouseup','mousedown','controlselect','dblclick'];ot=['keypress','keyup','keydown','click','mouseup','mousedown','focus','blur','dragdrop'];inst.switchSettings();if(tinyMCE.isIE){for(i=0;i<ie.length;i++)f(doc,ie[i],TinyMCE_Engine.prototype._eventPatch)}else{for(i=0;i<ot.length;i++)f(doc,ot[i],tinyMCE.handleEvent);try{doc.designMode="On"}catch(e){}}},onMouseMove:function(){var inst,lh;if(tinyMCE.lastHover){lh=tinyMCE.lastHover;if(lh.className.indexOf('mceMenu')!=-1)tinyMCE._menuButtonEvent('out',lh);else lh.className=lh.className;tinyMCE.lastHover=null}if(!tinyMCE.hasMouseMoved){inst=tinyMCE.selectedInstance;if(inst.isFocused){inst.undoBookmark=inst.selection.getBookmark();tinyMCE.hasMouseMoved=true}}},cancelEvent:function(e){if(!e)return false;if(tinyMCE.isIE){e.returnValue=false;e.cancelBubble=true}else{e.preventDefault();e.stopPropagation&&e.stopPropagation()}return false},addEvent:function(o,n,h){if(n!='unload'){function clean(){var ex;try{tinyMCE.removeEvent(o,n,h);tinyMCE.removeEvent(window,'unload',clean);o=n=h=null}catch(ex){}}tinyMCE.addEvent(window,'unload',clean)}if(o.attachEvent)o.attachEvent("on"+n,h);else o.addEventListener(n,h,false)},removeEvent:function(o,n,h){if(o.detachEvent)o.detachEvent("on"+n,h);else o.removeEventListener(n,h,false)},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w}return false},accessibleEventHandler:function(e){var elm,win=this._win;e=tinyMCE.isIE?win.event:e;elm=tinyMCE.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null}return true}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false}return true},_resetIframeHeight:function(){var ife;if(tinyMCE.isRealIE){ife=tinyMCE.selectedInstance.iframeElement;if(ife._oldHeight){ife.style.height=ife._oldHeight;ife.height=ife._oldHeight}}}});function TinyMCE_Selection(inst){this.instance=inst};TinyMCE_Selection.prototype={getSelectedHTML:function(){var inst=this.instance,e,r=this.getRng(),h;if(!r)return null;e=document.createElement("body");if(r.cloneContents)e.appendChild(document.importNode(r.cloneContents(),true));else if(typeof(r.item)!='undefined'||typeof(r.htmlText)!='undefined')e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();h=tinyMCE._cleanupHTML(inst,inst.contentDocument,inst.settings,e,e,false,true,false);return h},getSelectedText:function(){var inst=this.instance,d,r,s,t;if(tinyMCE.isIE){d=inst.getDoc();if(d.selection.type=="Text"){r=d.selection.createRange();t=r.text}else t=''}else{s=this.getSel();if(s&&s.toString)t=s.toString();else t=''}return t},getBookmark:function(simple){var inst=this.instance,rng=this.getRng(),doc=inst.getDoc(),b=inst.getBody();var trng,sx,sy,xx=-999999999,vp=inst.getViewPort();var sp,le,s,e,nl,i,si,ei,w;sx=vp.left;sy=vp.top;if(simple)return{rng:rng,scrollX:sx,scrollY:sy};if(tinyMCE.isRealIE){if(rng.item){e=rng.item(0);nl=b.getElementsByTagName(e.nodeName);for(i=0;i<nl.length;i++){if(e==nl[i]){sp=i;break}}return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy}}else{trng=doc.body.createTextRange();trng.moveToElementText(inst.getBody());trng.collapse(true);bp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(true);sp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(false);le=Math.abs(trng.move('character',xx))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy}}}else{s=this.getSel();e=this.getFocusElement();if(!s)return null;if(e&&e.nodeName=='IMG'){return{start:-1,end:-1,index:sp,scrollX:sx,scrollY:sy}}if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=this._getPosText(b,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+s.anchorOffset,end:e.end+s.focusOffset,scrollX:sx,scrollY:sy}}else{e=this._getPosText(b,rng.startContainer,rng.endContainer);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+rng.startOffset,end:e.end+rng.endOffset,scrollX:sx,scrollY:sy}}}return null},moveToBookmark:function(bookmark){var inst=this.instance,rng,nl,i,ex,b=inst.getBody(),sd;var doc=inst.getDoc(),win=inst.getWin(),sel=this.getSel();if(!bookmark)return false;if(tinyMCE.isSafari&&bookmark.rng){sel.setBaseAndExtent(bookmark.rng.startContainer,bookmark.rng.startOffset,bookmark.rng.endContainer,bookmark.rng.endOffset);return true}if(tinyMCE.isRealIE){if(bookmark.rng){try{bookmark.rng.select()}catch(ex){}return true}win.focus();if(bookmark.tag){rng=b.createControlRange();nl=b.getElementsByTagName(bookmark.tag);if(nl.length>bookmark.index){try{rng.addElement(nl[bookmark.index])}catch(ex){}}}else{try{if(bookmark.start<0)return true;rng=inst.getSel().createRange();rng.moveToElementText(inst.getBody());rng.collapse(true);rng.moveStart('character',bookmark.start);rng.moveEnd('character',bookmark.length)}catch(ex){return true}}rng.select();win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}if(tinyMCE.isGecko||tinyMCE.isOpera){if(!sel)return false;if(bookmark.rng){sel.removeAllRanges();sel.addRange(bookmark.rng)}if(bookmark.start!=-1&&bookmark.end!=-1){try{sd=this._getTextPos(b,bookmark.start,bookmark.end);rng=doc.createRange();rng.setStart(sd.startNode,sd.startOffset);rng.setEnd(sd.endNode,sd.endOffset);sel.removeAllRanges();sel.addRange(rng);if(!tinyMCE.isOpera)win.focus()}catch(ex){}}win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}return false},_getPosText:function(r,sn,en){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d}p+=n.nodeValue?n.nodeValue.length:0}return null},_getTextPos:function(r,sp,ep){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){p+=n.nodeValue?n.nodeValue.length:0;if(p>=sp&&!d.startNode){d.startNode=n;d.startOffset=sp-(p-n.nodeValue.length)}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-n.nodeValue.length);return d}}return null},selectNode:function(node,collapse,select_text_node,to_start){var inst=this.instance,sel,rng,nodes;if(!node)return;if(typeof(collapse)=="undefined")collapse=true;if(typeof(select_text_node)=="undefined")select_text_node=false;if(typeof(to_start)=="undefined")to_start=true;if(inst.settings.auto_resize)inst.resizeToContent();if(tinyMCE.isRealIE){rng=inst.getDoc().body.createTextRange();try{rng.moveToElementText(node);if(collapse)rng.collapse(to_start);rng.select()}catch(e){}}else{sel=this.getSel();if(!sel)return;if(tinyMCE.isSafari){sel.setBaseAndExtent(node,0,node,node.innerText.length);if(collapse){if(to_start)sel.collapseToStart();else sel.collapseToEnd()}this.scrollToNode(node);return}rng=inst.getDoc().createRange();if(select_text_node){nodes=tinyMCE.getNodeTree(node,[],3);if(nodes.length>0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node)}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length)}else rng.collapse(to_start)}sel.removeAllRanges();sel.addRange(rng)}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node},scrollToNode:function(node){var inst=this.instance,w=inst.getWin(),vp=inst.getViewPort(),pos=tinyMCE.getAbsPosition(node),cvp,p,cwin;if(pos.absLeft<vp.left||pos.absLeft>vp.left+vp.width||pos.absTop<vp.top||pos.absTop>vp.top+(vp.height-25))w.scrollTo(pos.absLeft,pos.absTop-vp.height+25);if(inst.settings.auto_resize){cwin=inst.getContainerWin();cvp=tinyMCE.getViewPort(cwin);p=this.getAbsPosition(node);if(p.absLeft<cvp.left||p.absLeft>cvp.left+cvp.width||p.absTop<cvp.top||p.absTop>cvp.top+cvp.height)cwin.scrollTo(p.absLeft,p.absTop-cvp.height+25)}},getAbsPosition:function(n){var pos=tinyMCE.getAbsPosition(n),ipos=tinyMCE.getAbsPosition(this.instance.iframeElement);return{absLeft:ipos.absLeft+pos.absLeft,absTop:ipos.absTop+pos.absTop}},getSel:function(){var inst=this.instance;if(tinyMCE.isRealIE)return inst.getDoc().selection;return inst.contentWindow.getSelection()},getRng:function(){var s=this.getSel();if(s==null)return null;if(tinyMCE.isRealIE)return s.createRange();if(tinyMCE.isSafari&&!s.getRangeAt)return''+window.getSelection();if(s.rangeCount>0)return s.getRangeAt(0);return null},isCollapsed:function(){var r=this.getRng();if(r.item)return false;return r.boundingWidth==0||this.getSel().isCollapsed},collapse:function(b){var r=this.getRng(),s=this.getSel();if(r.select){r.collapse(b);r.select()}else{if(b)s.collapseToStart();else s.collapseToEnd()}},getFocusElement:function(){var inst=this.instance,doc,rng,sel,elm;if(tinyMCE.isRealIE){doc=inst.getDoc();rng=doc.selection.createRange();elm=rng.item?rng.item(0):rng.parentElement()}else{if(!tinyMCE.isSafari&&inst.isHidden())return inst.getBody();sel=this.getSel();rng=this.getRng();if(!sel||!rng)return null;elm=rng.commonAncestorContainer;if(!rng.collapsed){if(rng.startContainer==rng.endContainer){if(rng.startOffset-rng.endOffset<2){if(rng.startContainer.hasChildNodes())elm=rng.startContainer.childNodes[rng.startOffset]}}}elm=tinyMCE.getParentElement(elm);}return elm}};function TinyMCE_UndoRedo(inst){this.instance=inst;this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.undoRedo=true};TinyMCE_UndoRedo.prototype={add:function(l){var b,customUndoLevels,newHTML,inst=this.instance,i,ul,ur;if(l){this.undoLevels[this.undoLevels.length]=l;return true}if(this.typingUndoIndex!=-1){this.undoIndex=this.typingUndoIndex;if(tinyMCE.typingUndoIndex!=-1)tinyMCE.undoIndex=tinyMCE.typingUndoIndex}newHTML=tinyMCE.trim(inst.getBody().innerHTML);if(this.undoLevels[this.undoIndex]&&newHTML!=this.undoLevels[this.undoIndex].content){inst.isNotDirty=false;tinyMCE.dispatchCallback(inst,'onchange_callback','onChange',inst);customUndoLevels=tinyMCE.settings.custom_undo_redo_levels;if(customUndoLevels!=-1&&this.undoLevels.length>customUndoLevels){for(i=0;i<this.undoLevels.length-1;i++)this.undoLevels[i]=this.undoLevels[i+1];this.undoLevels.length--;this.undoIndex--;}b=inst.undoBookmark;if(!b)b=inst.selection.getBookmark();this.undoIndex++;this.undoLevels[this.undoIndex]={content:newHTML,bookmark:b};ul=tinyMCE.undoLevels;for(i=tinyMCE.undoIndex+1;i<ul.length;i++){ur=ul[i].undoRedo;if(ur.undoIndex==ur.undoLevels.length-1)ur.undoIndex--;ur.undoLevels.length--}tinyMCE.undoLevels[tinyMCE.undoIndex++]=inst;tinyMCE.undoLevels.length=tinyMCE.undoIndex;this.undoLevels.length=this.undoIndex+1;return true}return false},undo:function(){var inst=this.instance;if(this.undoIndex>0){this.undoIndex--;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}},redo:function(){var inst=this.instance;tinyMCE.execCommand("mceEndTyping");if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}tinyMCE.triggerNodeChange()}};var TinyMCE_ForceParagraphs={_insertPara:function(inst,e){var doc=inst.getDoc(),sel=inst.getSel(),body=inst.getBody(),win=inst.contentWindow,rng=sel.getRangeAt(0);var rootElm=doc.documentElement,blockName="P",startNode,endNode,startBlock,endBlock;var rngBefore,rngAfter,direct,startNode,startOffset,endNode,endOffset,b=tinyMCE.isOpera?inst.selection.getBookmark():null;var paraBefore,paraAfter,startChop,endChop,contents,i;function isEmpty(para){var nodes;function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()==''}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;nodes=tinyMCE.getNodeTree(para,[],3);for(i=0;i<nodes.length;i++){if(!isEmptyHTML(nodes[i].nodeValue))return false}return true}rngBefore=doc.createRange();rngBefore.setStart(sel.anchorNode,sel.anchorOffset);rngBefore.collapse(true);rngAfter=doc.createRange();rngAfter.setStart(sel.focusNode,sel.focusOffset);rngAfter.collapse(true);direct=rngBefore.compareBoundaryPoints(rngBefore.START_TO_END,rngAfter)<0;startNode=direct?sel.anchorNode:sel.focusNode;startOffset=direct?sel.anchorOffset:sel.focusOffset;endNode=direct?sel.focusNode:sel.anchorNode;endOffset=direct?sel.focusOffset:sel.anchorOffset;startNode=startNode.nodeName=="HTML"?doc.body:startNode;startNode=startNode.nodeName=="BODY"?startNode.firstChild:startNode;endNode=endNode.nodeName=="BODY"?endNode.firstChild:endNode;startBlock=inst.getParentBlockElement(startNode);endBlock=inst.getParentBlockElement(endNode);if(startBlock&&(startBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(startBlock.style.position)))startBlock=null;if(endBlock&&(endBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(endBlock.style.position)))endBlock=null;if(startBlock!=null){blockName=startBlock.nodeName;if(/(TD|TABLE|TH|CAPTION)/.test(blockName)||(blockName=="DIV"&&/left|right/gi.test(startBlock.style.cssFloat)))blockName="P"}if(tinyMCE.getParentElement(startBlock,"OL,UL",null,body)!=null)return false;if((startBlock!=null&&startBlock.nodeName=="TABLE")||(endBlock!=null&&endBlock.nodeName=="TABLE"))startBlock=endBlock=null;paraBefore=(startBlock!=null&&startBlock.nodeName==blockName)?startBlock.cloneNode(false):doc.createElement(blockName);paraAfter=(endBlock!=null&&endBlock.nodeName==blockName)?endBlock.cloneNode(false):doc.createElement(blockName);if(/^(H[1-6])$/.test(blockName))paraAfter=doc.createElement("p");startChop=startNode;endChop=endNode;node=startChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;startChop=node}while((node=node.previousSibling?node.previousSibling:node.parentNode));node=endChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;endChop=node}while((node=node.nextSibling?node.nextSibling:node.parentNode));if(startChop.nodeName=="TD")startChop=startChop.firstChild;if(endChop.nodeName=="TD")endChop=endChop.lastChild;if(startBlock==null){rng.deleteContents();if(!tinyMCE.isSafari)sel.removeAllRanges();if(startChop!=rootElm&&endChop!=rootElm){rngBefore=rng.cloneRange();if(startChop==body)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);paraBefore.appendChild(rngBefore.cloneContents());if(endChop.parentNode.nodeName==blockName)endChop=endChop.parentNode;rng.setEndAfter(endChop);if(endChop.nodeName!="#text"&&endChop.nodeName!="BODY")rngBefore.setEndAfter(endChop);contents=rng.cloneContents();if(contents.firstChild&&(contents.firstChild.nodeName==blockName||contents.firstChild.nodeName=="BODY"))paraAfter.innerHTML=contents.firstChild.innerHTML;else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng.deleteContents();rngAfter.deleteContents();rngBefore.deleteContents();if(tinyMCE.isOpera){paraBefore.normalize();rngBefore.insertNode(paraBefore);paraAfter.normalize();rngBefore.insertNode(paraAfter)}else{paraAfter.normalize();rngBefore.insertNode(paraAfter);paraBefore.normalize();rngBefore.insertNode(paraBefore)}}else{body.innerHTML="<"+blockName+"> </"+blockName+"><"+blockName+"> </"+blockName+">";paraAfter=body.childNodes[1]}inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){paraAfter.innerHTML=contents.firstChild.innerHTML}else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng=doc.createRange();if(!startChop.previousSibling&&startChop.parentNode.nodeName.toUpperCase()==blockName){rng.setStartBefore(startChop.parentNode)}else{if(rngBefore.startContainer.nodeName.toUpperCase()==blockName&&rngBefore.startOffset==0)rng.setStartBefore(rngBefore.startContainer);else rng.setStart(rngBefore.startContainer,rngBefore.startOffset)}if(!endChop.nextSibling&&endChop.parentNode.nodeName.toUpperCase()==blockName)rng.setEndAfter(endChop.parentNode);else rng.setEnd(rngAfter.endContainer,rngAfter.endOffset);rng.deleteContents();if(tinyMCE.isOpera){rng.insertNode(paraBefore);rng.insertNode(paraAfter)}else{rng.insertNode(paraAfter);rng.insertNode(paraBefore)}paraAfter.normalize();paraBefore.normalize();inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true},_handleBackSpace:function(inst){var r=inst.getRng(),sn=r.startContainer,nv,s=false;if(sn&&sn.nextSibling&&sn.nextSibling.nodeName=="BR"&&sn.parentNode.nodeName!="BODY"){nv=sn.nodeValue;if(nv!=null&&r.startOffset==nv.length)sn.nextSibling.parentNode.removeChild(sn.nextSibling)}if(inst.settings.auto_resize)inst.resizeToContent();return s}};function TinyMCE_Layer(id,bm){this.id=id;this.blockerElement=null;this.events=false;this.element=null;this.blockMode=typeof(bm)!='undefined'?bm:true;this.doc=document};TinyMCE_Layer.prototype={moveRelativeTo:function(re,p){var rep=this.getAbsPosition(re),e=this.getElement(),x,y;var w=parseInt(re.offsetWidth),h=parseInt(re.offsetHeight);var ew=parseInt(e.offsetWidth),eh=parseInt(e.offsetHeight);switch(p){case"tl":x=rep.absLeft;y=rep.absTop;break;case"tr":x=rep.absLeft+w;y=rep.absTop;break;case"bl":x=rep.absLeft;y=rep.absTop+h;break;case"br":x=rep.absLeft+w;y=rep.absTop+h;break;case"cc":x=rep.absLeft+(w/ 2) - (ew /2);y=rep.absTop+(h/ 2) - (eh /2);break}this.moveTo(x,y)},moveBy:function(x,y){var e=this.getElement();this.moveTo(parseInt(e.style.left)+x,parseInt(e.style.top)+y)},moveTo:function(x,y){var e=this.getElement();e.style.left=x+"px";e.style.top=y+"px";this.updateBlocker()},resizeBy:function(w,h){var e=this.getElement();this.resizeTo(parseInt(e.style.width)+w,parseInt(e.style.height)+h)},resizeTo:function(w,h){var e=this.getElement();if(w!=null)e.style.width=w+"px";if(h!=null)e.style.height=h+"px";this.updateBlocker()},show:function(){var el=this.getElement();if(el){el.style.display='block';this.updateBlocker()}},hide:function(){var el=this.getElement();if(el){el.style.display='none';this.updateBlocker()}},isVisible:function(){return this.getElement().style.display=='block'},getElement:function(){if(!this.element)this.element=this.doc.getElementById(this.id);return this.element},setBlockMode:function(s){this.blockMode=s},updateBlocker:function(){var e,b,x,y,w,h;b=this.getBlocker();if(b){if(this.blockMode){e=this.getElement();x=this.parseInt(e.style.left);y=this.parseInt(e.style.top);w=this.parseInt(e.offsetWidth);h=this.parseInt(e.offsetHeight);b.style.left=x+'px';b.style.top=y+'px';b.style.width=w+'px';b.style.height=h+'px';b.style.display=e.style.display}else b.style.display='none'}},getBlocker:function(){var d,b;if(!this.blockerElement&&this.blockMode){d=this.doc;b=d.getElementById(this.id+"_blocker");if(!b){b=d.createElement("iframe");b.setAttribute('id',this.id+"_blocker");b.style.cssText='display: none; position: absolute; left: 0; top: 0';b.src='javascript:false;';b.frameBorder='0';b.scrolling='no';d.body.appendChild(b)}this.blockerElement=b}return this.blockerElement},getAbsPosition:function(n){var p={absLeft:0,absTop:0};while(n){p.absLeft+=n.offsetLeft;p.absTop+=n.offsetTop;n=n.offsetParent}return p},create:function(n,c,p,h){var d=this.doc,e=d.createElement(n);e.setAttribute('id',this.id);if(c)e.className=c;if(!p)p=d.body;if(h)e.innerHTML=h;p.appendChild(e);return this.element=e},exists:function(){return this.doc.getElementById(this.id)!=null},parseInt:function(s){if(s==null||s=='')return 0;return parseInt(s)},remove:function(){var e=this.getElement(),b=this.getBlocker();if(e)e.parentNode.removeChild(e);if(b)b.parentNode.removeChild(b)}};function TinyMCE_Menu(){var id;if(typeof(tinyMCE.menuCounter)=="undefined")tinyMCE.menuCounter=0;id="mc_menu_"+tinyMCE.menuCounter++;TinyMCE_Layer.call(this,id,true);this.id=id;this.items=[];this.needsUpdate=true};TinyMCE_Menu.prototype=tinyMCE.extend(TinyMCE_Layer.prototype,{init:function(s){var n;this.settings={separator_class:'mceMenuSeparator',title_class:'mceMenuTitle',disabled_class:'mceMenuDisabled',menu_class:'mceMenu',drop_menu:true};for(n in s)this.settings[n]=s[n];this.create('div',this.settings.menu_class)},clear:function(){this.items=[]},addTitle:function(t){this.add({type:'title',text:t})},addDisabled:function(t){this.add({type:'disabled',text:t})},addSeparator:function(){this.add({type:'separator'})},addItem:function(t,js){this.add({text:t,js:js})},add:function(mi){this.items[this.items.length]=mi;this.needsUpdate=true},update:function(){var e=this.getElement(),h='',i,t,m=this.items,s=this.settings;if(this.settings.drop_menu)h+='<span class="mceMenuLine"></span>';h+='<table border="0" cellpadding="0" cellspacing="0">';for(i=0;i<m.length;i++){t=tinyMCE.xmlEncode(m[i].text);c=m[i].class_name?' class="'+m[i].class_name+'"':'';switch(m[i].type){case'separator':h+='<tr class="'+s.separator_class+'"><td>';break;case'title':h+='<tr class="'+s.title_class+'"><td><span'+c+'>'+t+'</span>';break;case'disabled':h+='<tr class="'+s.disabled_class+'"><td><span'+c+'>'+t+'</span>';break;default:h+='<tr><td><a href="'+tinyMCE.xmlEncode(m[i].js)+'" onmousedown="'+tinyMCE.xmlEncode(m[i].js)+';return tinyMCE.cancelEvent(event);" onclick="return tinyMCE.cancelEvent(event);" onmouseup="return tinyMCE.cancelEvent(event);"><span'+c+'>'+t+'</span></a>'}h+='</td></tr>'}h+='</table>';e.innerHTML=h;this.needsUpdate=false;this.updateBlocker()},show:function(){var nl,i;if(tinyMCE.lastMenu==this)return;if(this.needsUpdate)this.update();if(tinyMCE.lastMenu&&tinyMCE.lastMenu!=this)tinyMCE.lastMenu.hide();TinyMCE_Layer.prototype.show.call(this);if(!tinyMCE.isOpera){}tinyMCE.lastMenu=this}});tinyMCE.add(TinyMCE_Engine,{debug:function(){var m="",a,i,l=tinyMCE.log.length;for(i=0,a=this.debug.arguments;i<a.length;i++){m+=a[i];if(i<a.length-1)m+=', '}if(l<1000)tinyMCE.log[l]="[debug] "+m}});
\ No newline at end of file
+var tinymce={majorVersion:'3',minorVersion:'0.6.2',releaseDate:'2008-04-07',_init:function(){var t=this,ua=navigator.userAgent,i,nl,n,base;t.isOpera=window.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isOldWebKit=t.isWebKit&&!window.getSelection().getRangeAt;t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(navigator.appName);t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isGecko=!t.isWebKit&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;if(window.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;return;}t.suffix='';nl=document.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(nl[i].href)base=nl[i].href;}function getBase(n){if(n.src&&/tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(n.src)){if(/_(src|dev)\.js/g.test(n.src))t.suffix='_src';t.baseURL=n.src.substring(0,n.src.lastIndexOf('/'));if(base&&t.baseURL.indexOf('://')==-1)t.baseURL=base+t.baseURL;return t.baseURL;}return null;};nl=document.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}n=document.getElementsByTagName('head')[0];if(n){nl=n.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}}return;},is:function(o,t){var n=typeof(o);if(!t)return n!='undefined';if(t=='array'&&(o instanceof Array))return true;return n==t;},each:function(o,cb,s){var n,l;if(!o)return 0;s=s||o;if(typeof(o.length)!='undefined'){for(n=0,l=o.length;n<l;n++){if(cb.call(s,o[n],n,o)===false)return 0;}}else{for(n in o){if(o.hasOwnProperty(n)){if(cb.call(s,o[n],n,o)===false)return 0;}}}return 1;},map:function(a,f){var o=[];tinymce.each(a,function(v){o.push(f(v));});return o;},grep:function(a,f){var o=[];tinymce.each(a,function(v){if(!f||f(v))o.push(v);});return o;},inArray:function(a,v){var i,l;if(a){for(i=0,l=a.length;i<l;i++){if(a[i]===v)return i;}}return-1;},extend:function(o,e){var i,a=arguments;for(i=1;i<a.length;i++){e=a[i];tinymce.each(e,function(v,n){if(typeof(v)!=='undefined')o[n]=v;});}return o;},trim:function(s){return(s?''+s:'').replace(/^\s*|\s*$/g,'');},create:function(s,p){var t=this,sp,ns,cn,scn,c,de=0;s=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);cn=s[3].match(/(^|\.)(\w+)$/i)[2];ns=t.createNS(s[3].replace(/\.\w+$/,''));if(ns[cn])return;if(s[2]=='static'){ns[cn]=p;if(this.onCreate)this.onCreate(s[2],s[3],ns[cn]);return;}if(!p[cn]){p[cn]=function(){};de=1;}ns[cn]=p[cn];t.extend(ns[cn].prototype,p);if(s[5]){sp=t.resolve(s[5]).prototype;scn=s[5].match(/\.(\w+)$/i)[1];c=ns[cn];if(de){ns[cn]=function(){return sp[scn].apply(this,arguments);};}else{ns[cn]=function(){this.parent=sp[scn];return c.apply(this,arguments);};}ns[cn].prototype[cn]=ns[cn];t.each(sp,function(f,n){ns[cn].prototype[n]=sp[n];});t.each(p,function(f,n){if(sp[n]){ns[cn].prototype[n]=function(){this.parent=sp[n];return f.apply(this,arguments);};}else{if(n!=cn)ns[cn].prototype[n]=f;}});}t.each(p['static'],function(f,n){ns[cn][n]=f;});if(this.onCreate)this.onCreate(s[2],s[3],ns[cn].prototype);},walk:function(o,f,n,s){s=s||this;if(o){if(n)o=o[n];tinymce.each(o,function(o,i){if(f.call(s,o,i,n)===false)return false;tinymce.walk(o,f,n,s);});}},createNS:function(n,o){var i,v;o=o||window;n=n.split('.');for(i=0;i<n.length;i++){v=n[i];if(!o[v])o[v]={};o=o[v];}return o;},resolve:function(n,o){var i,l;o=o||window;n=n.split('.');for(i=0,l=n.length;i<l;i++){o=o[n[i]];if(!o)break;}return o;},addUnload:function(f,s){var t=this,w=window,unload;f={func:f,scope:s||this};if(!t.unloads){unload=function(){var li=t.unloads,o,n;for(n in li){o=li[n];if(o&&o.func)o.func.call(o.scope,1);}if(w.detachEvent)w.detachEvent('onunload',unload);else if(w.removeEventListener)w.removeEventListener('unload',unload,false);o=li=w=unload=null;if(window.CollectGarbage)window.CollectGarbage();};if(w.attachEvent)w.attachEvent('onunload',unload);else if(w.addEventListener)w.addEventListener('unload',unload,false);t.unloads=[f];}else t.unloads.push(f);return f;},removeUnload:function(f){var u=this.unloads,r=null;tinymce.each(u,function(o,i){if(o&&o.func==f){u.splice(i,1);r=f;return false;}});return r;},explode:function(s,d){return tinymce.map(s.split(d||','),tinymce.trim);}};window.tinymce=tinymce;tinymce._init();tinymce.create('tinymce.util.Dispatcher',{scope:null,listeners:null,Dispatcher:function(s){this.scope=s||this;this.listeners=[];},add:function(cb,s){this.listeners.push({cb:cb,scope:s||this.scope});return cb;},addToTop:function(cb,s){this.listeners.unshift({cb:cb,scope:s||this.scope});return cb;},remove:function(cb){var l=this.listeners,o=null;tinymce.each(l,function(c,i){if(cb==c.cb){o=cb;l.splice(i,1);return false;}});return o;},dispatch:function(){var s,a=arguments,i,li=this.listeners,c;for(i=0;i<li.length;i++){c=li[i];s=c.cb.apply(c.scope,a);if(s===false)break;}return s;}});(function(){var each=tinymce.each;tinymce.create('tinymce.util.URI',{URI:function(u,s){var t=this,o,a,b;s=t.settings=s||{};if(/^(mailto|news|javascript|about):/i.test(u)||/^\s*#/.test(u)){t.source=u;return;}if(u.indexOf('/')===0&&u.indexOf('//')!==0)u=(s.base_uri?s.base_uri.protocol||'http':'http')+'://mce_host'+u;if(u.indexOf('://')===-1&&u.indexOf('//')!==0)u=(s.base_uri.protocol||'http')+'://mce_host'+t.toAbsPath(s.base_uri.path,u);u=u.replace(/@@/g,'(mce_at)');u=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(v,i){var s=u[i];if(s)s=s.replace(/\(mce_at\)/g,'@@');t[v]=s;});if(b=s.base_uri){if(!t.protocol)t.protocol=b.protocol;if(!t.userInfo)t.userInfo=b.userInfo;if(!t.port&&t.host=='mce_host')t.port=b.port;if(!t.host||t.host=='mce_host')t.host=b.host;t.source='';}},setPath:function(p){var t=this;p=/^(.*?)\/?(\w+)?$/.exec(p);t.path=p[0];t.directory=p[1];t.file=p[2];t.source='';t.getURI();},toRelative:function(u){var t=this,o;u=new tinymce.util.URI(u,{base_uri:t});if((u.host!='mce_host'&&t.host!=u.host&&u.host)||t.port!=u.port||t.protocol!=u.protocol)return u.getURI();o=t.toRelPath(t.path,u.path);if(u.query)o+='?'+u.query;if(u.anchor)o+='#'+u.anchor;return o;},toAbsolute:function(u,nh){var u=new tinymce.util.URI(u,{base_uri:this});return u.getURI(this.host==u.host?nh:0);},toRelPath:function(base,path){var items,bp=0,out='',i;base=base.substring(0,base.lastIndexOf('/'));base=base.split('/');items=path.split('/');if(base.length>=items.length){for(i=0;i<base.length;i++){if(i>=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length<items.length){for(i=0;i<items.length;i++){if(i>=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0;i<base.length-(bp-1);i++)out+="../";for(i=bp-1;i<items.length;i++){if(i!=bp-1)out+="/"+items[i];else out+=items[i];}return out;},toAbsPath:function(base,path){var i,nb=0,o=[];base=base.split('/');path=path.split('/');each(base,function(k){if(k)o.push(k);});base=o;for(i=path.length-1,o=[];i>=0;i--){if(path[i].length==0||path[i]==".")continue;if(path[i]=='..'){nb++;continue;}if(nb>0){nb--;continue;}o.push(path[i]);}i=base.length-nb;if(i<=0)return'/'+o.reverse().join('/');return'/'+base.slice(0,i).join('/')+'/'+o.reverse().join('/');},getURI:function(nh){var s,t=this;if(!t.source||nh){s='';if(!nh){if(t.protocol)s+=t.protocol+'://';if(t.userInfo)s+=t.userInfo+'@';if(t.host)s+=t.host;if(t.port)s+=':'+t.port;}if(t.path)s+=t.path;if(t.query)s+='?'+t.query;if(t.anchor)s+='#'+t.anchor;t.source=s;}return t.source;}});})();(function(){var each=tinymce.each;tinymce.create('static tinymce.util.Cookie',{getHash:function(n){var v=this.get(n),h;if(v){each(v.split('&'),function(v){v=v.split('=');h=h||{};h[unescape(v[0])]=unescape(v[1]);});}return h;},setHash:function(n,v,e,p,d,s){var o='';each(v,function(v,k){o+=(!o?'':'&')+escape(k)+'='+escape(v);});this.set(n,o,e,p,d,s);},get:function(n){var c=document.cookie,e,p=n+"=",b;if(!c)return;b=c.indexOf("; "+p);if(b==-1){b=c.indexOf(p);if(b!=0)return null;}else b+=2;e=c.indexOf(";",b);if(e==-1)e=c.length;return unescape(c.substring(b+p.length,e));},set:function(n,v,e,p,d,s){document.cookie=n+"="+escape(v)+((e)?"; expires="+e.toGMTString():"")+((p)?"; path="+escape(p):"")+((d)?"; domain="+d:"")+((s)?"; secure":"");},remove:function(n,p){var d=new Date();d.setTime(d.getTime()-1000);this.set(n,'',d,p,d);}});})();tinymce.create('static tinymce.util.JSON',{serialize:function(o){var i,v,s=tinymce.util.JSON.serialize,t;if(o==null)return'null';t=typeof o;if(t=='string'){v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'])/g,function(a,b){i=v.indexOf(b);if(i+1)return'\\'+v.charAt(i+1);a=b.charCodeAt().toString(16);return'\\u'+'0000'.substring(a.length)+a;})+'"';}if(t=='object'){if(o instanceof Array){for(i=0,v='[';i<o.length;i++)v+=(i>0?',':'')+s(o[i]);return v+']';}v='{';for(i in o)v+=typeof o[i]!='function'?(v.length>1?',"':'"')+i+'":'+s(o[i]):'';return v+'}';}return''+o;},parse:function(s){try{return eval('('+s+')');}catch(ex){}}});tinymce.create('static tinymce.util.XHR',{send:function(o){var x,t,w=window,c=0;o.scope=o.scope||this;o.success_scope=o.success_scope||o.scope;o.error_scope=o.error_scope||o.scope;o.async=o.async===false?false:true;o.data=o.data||'';function get(s){x=0;try{x=new ActiveXObject(s);}catch(ex){}return x;};x=w.XMLHttpRequest?new XMLHttpRequest():get('Microsoft.XMLHTTP')||get('Msxml2.XMLHTTP');if(x){if(x.overrideMimeType)x.overrideMimeType(o.content_type);x.open(o.type||(o.data?'POST':'GET'),o.url,o.async);if(o.content_type)x.setRequestHeader('Content-Type',o.content_type);x.send(o.data);t=w.setInterval(function(){if(x.readyState==4||c++>10000){w.clearInterval(t);if(o.success&&c<10000&&x.status==200)o.success.call(o.success_scope,''+x.responseText,x,o);else if(o.error)o.error.call(o.error_scope,c>10000?'TIMED_OUT':'GENERAL',x,o);x=null;}},10);}}});(function(){var extend=tinymce.extend,JSON=tinymce.util.JSON,XHR=tinymce.util.XHR;tinymce.create('tinymce.util.JSONRequest',{JSONRequest:function(s){this.settings=extend({},s);this.count=0;},send:function(o){var ecb=o.error,scb=o.success;o=extend(this.settings,o);o.success=function(c,x){c=JSON.parse(c);if(typeof(c)=='undefined'){c={error:'JSON Parse error.'};}if(c.error)ecb.call(o.error_scope||o.scope,c.error,x);else scb.call(o.success_scope||o.scope,c.result);};o.error=function(ty,x){ecb.call(o.error_scope||o.scope,ty,x);};o.data=JSON.serialize({id:o.id||'c'+(this.count++),method:o.method,params:o.params});o.content_type='application/json';XHR.send(o);},'static':{sendRPC:function(o){return new tinymce.util.JSONRequest().send(o);}}});}());(function(){var each=tinymce.each,is=tinymce.is;var isWebKit=tinymce.isWebKit,isIE=tinymce.isIE;tinymce.create('tinymce.dom.DOMUtils',{doc:null,root:null,files:null,listeners:{},pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,cache:{},idPattern:/^#[\w]+$/,elmPattern:/^[\w_*]+$/,elmClassPattern:/^([\w_]*)\.([\w_]+)$/,DOMUtils:function(d,s){var t=this;t.doc=d;t.win=window;t.files={};t.cssFlicker=false;t.counter=0;t.boxModel=!tinymce.isIE||d.compatMode=="CSS1Compat";t.stdMode=d.documentMode===8;this.settings=s=tinymce.extend({keep_values:false,hex_colors:1,process_html:1},s);if(tinymce.isIE6){try{d.execCommand('BackgroundImageCache',false,true);}catch(e){t.cssFlicker=true;}}tinymce.addUnload(t.destroy,t);},getRoot:function(){var t=this,s=t.settings;return(s&&t.get(s.root_element))||t.doc.body;},getViewPort:function(w){var d,b;w=!w?this.win:w;d=w.document;b=this.boxModel?d.documentElement:d.body;return{x:w.pageXOffset||b.scrollLeft,y:w.pageYOffset||b.scrollTop,w:w.innerWidth||b.clientWidth,h:w.innerHeight||b.clientHeight};},getRect:function(e){var p,t=this,w,h;e=t.get(e);p=t.getPos(e);w=t.getStyle(e,'width');h=t.getStyle(e,'height');if(w.indexOf('px')===-1)w=0;if(h.indexOf('px')===-1)h=0;return{x:p.x,y:p.y,w:parseInt(w)||e.offsetWidth||e.clientWidth,h:parseInt(h)||e.offsetHeight||e.clientHeight};},getParent:function(n,f,r){var na,se=this.settings;n=this.get(n);if(se.strict_root)r=r||this.getRoot();if(is(f,'string')){na=f.toUpperCase();f=function(n){var s=false;if(n.nodeType==1&&na==='*'){s=true;return false;}each(na.split(','),function(v){if(n.nodeType==1&&((se.strict&&n.nodeName.toUpperCase()==v)||n.nodeName==v)){s=true;return false;}});return s;};}while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode;}return null;},get:function(e){var n;if(this.doc&&typeof(e)=='string'){n=e;e=this.doc.getElementById(e);if(e&&e.id!==n)return this.doc.getElementsByName(n)[1];}return e;},select:function(pa,s){var t=this,cs,c,pl,o=[],x,i,l,n;s=t.get(s)||t.doc;if(s.querySelectorAll){if(s!=t.doc){i=s.id;s.id='_mc_tmp';pa='#_mc_tmp '+pa;}l=tinymce.grep(s.querySelectorAll(pa));s.id=i;return l;}if(t.settings.strict){function get(s,n){return s.getElementsByTagName(n.toLowerCase());};}else{function get(s,n){return s.getElementsByTagName(n);};}if(t.elmPattern.test(pa)){x=get(s,pa);for(i=0,l=x.length;i<l;i++)o.push(x[i]);return o;}if(t.elmClassPattern.test(pa)){pl=t.elmClassPattern.exec(pa);x=get(s,pl[1]||'*');c=' '+pl[2]+' ';for(i=0,l=x.length;i<l;i++){n=x[i];if(n.className&&(' '+n.className+' ').indexOf(c)!==-1)o.push(n);}return o;}function collect(n){if(!n.mce_save){n.mce_save=1;o.push(n);}};function collectIE(n){if(!n.getAttribute('mce_save')){n.setAttribute('mce_save','1');o.push(n);}};function find(n,f,r){var i,l,nl=get(r,n);for(i=0,l=nl.length;i<l;i++)f(nl[i]);};each(pa.split(','),function(v,i){v=tinymce.trim(v);if(t.elmPattern.test(v)){each(get(s,v),function(n){collect(n);});return;}if(t.elmClassPattern.test(v)){x=t.elmClassPattern.exec(v);each(get(s,x[1]),function(n){if(t.hasClass(n,x[2]))collect(n);});return;}if(!(cs=t.cache[pa])){cs='x=(function(cf, s) {';pl=v.split(' ');each(pl,function(v){var p=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i.exec(v);p[1]=p[1]||'*';cs+='find("'+p[1]+'", function(n) {';if(p[2])cs+='if (n.id !== "'+p[2]+'") return;';if(p[3]){cs+='var c = " " + n.className + " ";';cs+='if (';c='';each(p[3].split('.'),function(v){if(v)c+=(c?'||':'')+'c.indexOf(" '+v+' ") === -1';});cs+=c+') return;';}});cs+='cf(n);';for(i=pl.length-1;i>=0;i--)cs+='}, '+(i?'n':'s')+');';cs+='})';t.cache[pa]=cs=eval(cs);}cs(isIE?collectIE:collect,s);});each(o,function(n){if(isIE)n.removeAttribute('mce_save');else delete n.mce_save;});return o;},add:function(p,n,a,h,c){var t=this;return this.run(p,function(p){var e,k;e=is(n,'string')?t.doc.createElement(n):n;if(a){for(k in a){if(a.hasOwnProperty(k)&&!is(a[k],'object'))t.setAttrib(e,k,''+a[k]);}if(a.style&&!is(a.style,'string')){each(a.style,function(v,n){t.setStyle(e,n,v);});}}if(h){if(h.nodeType)e.appendChild(h);else t.setHTML(e,h);}return!c?p.appendChild(e):e;});},create:function(n,a,h){return this.add(this.doc.createElement(n),n,a,h,1);},createHTML:function(n,a,h){var o='',t=this,k;o+='<'+n;for(k in a){if(a.hasOwnProperty(k))o+=' '+k+'="'+t.encode(a[k])+'"';}if(tinymce.is(h))return o+'>'+h+'</'+n+'>';return o+' />';},remove:function(n,k){return this.run(n,function(n){var p,g;p=n.parentNode;if(!p)return null;if(k){each(n.childNodes,function(c){p.insertBefore(c.cloneNode(true),n);});}return p.removeChild(n);});},setStyle:function(n,na,v){var t=this;return t.run(n,function(e){var s,i;s=e.style;na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(t.pixelStyles.test(na)&&(tinymce.is(v,'number')||/^[\-0-9\.]+$/.test(v)))v+='px';switch(na){case'opacity':if(isIE){s.filter=v===''?'':"alpha(opacity="+(v*100)+")";if(!n.currentStyle||!n.currentStyle.hasLayout)s.display='inline-block';}s[na]=s['-moz-opacity']=s['-khtml-opacity']=v||'';break;case'float':isIE?s.styleFloat=v:s.cssFloat=v;break;default:s[na]=v||'';}if(t.settings.update_styles)t.setAttrib(e,'mce_style');});},getStyle:function(n,na,c){n=this.get(n);if(!n)return false;if(this.doc.defaultView&&c){na=na.replace(/[A-Z]/g,function(a){return'-'+a;});try{return this.doc.defaultView.getComputedStyle(n,null).getPropertyValue(na);}catch(ex){return null;}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(na=='float')na=isIE?'styleFloat':'cssFloat';if(n.currentStyle&&c)return n.currentStyle[na];return n.style[na];},setStyles:function(e,o){var t=this,s=t.settings,ol;ol=s.update_styles;s.update_styles=0;each(o,function(v,n){t.setStyle(e,n,v);});s.update_styles=ol;if(s.update_styles)t.setAttrib(e,s.cssText);},setAttrib:function(e,n,v){var t=this;if(t.settings.strict)n=n.toLowerCase();return this.run(e,function(e){var s=t.settings;switch(n){case"style":if(s.keep_values){if(v)e.setAttribute('mce_style',v,2);else e.removeAttribute('mce_style',2);}e.style.cssText=v;break;case"class":e.className=v||'';break;case"src":case"href":if(s.keep_values){if(s.url_converter)v=s.url_converter.call(s.url_converter_scope||t,v,n,e);t.setAttrib(e,'mce_'+n,v,2);}break;}if(is(v)&&v!==null&&v.length!==0)e.setAttribute(n,''+v,2);else e.removeAttribute(n,2);});},setAttribs:function(e,o){var t=this;return this.run(e,function(e){each(o,function(v,n){t.setAttrib(e,n,v);});});},getAttrib:function(e,n,dv){var v,t=this;e=t.get(e);if(!e)return false;if(!is(dv))dv="";if(/^(src|href|style|coords)$/.test(n)){v=e.getAttribute("mce_"+n);if(v)return v;}v=e.getAttribute(n,2);if(!v){switch(n){case'class':v=e.className;break;default:if(isIE&&n==='name'&&e.nodeName==='A'){v=e.name;break;}v=e.attributes[n];v=v&&is(v.nodeValue)?v.nodeValue:v;}}switch(n){case'style':v=v||e.style.cssText;if(v){v=t.serializeStyle(t.parseStyle(v));if(t.settings.keep_values)e.setAttribute('mce_style',v);}break;}if(isWebKit&&n==="class"&&v)v=v.replace(/(apple|webkit)\-[a-z\-]+/gi,'');if(isIE){switch(n){case'rowspan':case'colspan':if(v===1)v='';break;case'size':if(v==='+0')v='';break;case'hspace':if(v===-1)v='';break;case'tabindex':if(v===32768)v='';break;case'shape':v=v.toLowerCase();break;default:if(n.indexOf('on')===0&&v)v=(''+v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/,'$1');}}return(v&&v!='')?''+v:dv;},getPos:function(n){var t=this,x=0,y=0,e,d=t.doc,r;n=t.get(n);if(n&&isIE){n=n.getBoundingClientRect();e=t.boxModel?d.documentElement:d.body;x=t.getStyle(t.select('html')[0],'borderWidth');x=(x=='medium'||t.boxModel&&!t.isIE6)&&2||x;n.top+=t.win.self!=t.win.top?2:0;return{x:n.left+e.scrollLeft-x,y:n.top+e.scrollTop-x};}r=n;while(r){x+=r.offsetLeft||0;y+=r.offsetTop||0;r=r.offsetParent;}r=n;while(r){if(!/^table-row|inline.*/i.test(t.getStyle(r,"display",1))){x-=r.scrollLeft||0;y-=r.scrollTop||0;}r=r.parentNode;if(r==d.body)break;}return{x:x,y:y};},parseStyle:function(st){var t=this,s=t.settings,o={};if(!st)return o;function compress(p,s,ot){var t,r,b,l;t=o[p+'-top'+s];if(!t)return;r=o[p+'-right'+s];if(t!=r)return;b=o[p+'-bottom'+s];if(r!=b)return;l=o[p+'-left'+s];if(b!=l)return;o[ot]=l;delete o[p+'-top'+s];delete o[p+'-right'+s];delete o[p+'-bottom'+s];delete o[p+'-left'+s];};function compress2(ta,a,b,c){var t;t=o[a];if(!t)return;t=o[b];if(!t)return;t=o[c];if(!t)return;o[ta]=o[a]+' '+o[b]+' '+o[c];delete o[a];delete o[b];delete o[c];};each(st.split(';'),function(v){var sv,ur=[];if(v){v=v.replace(/url\([^\)]+\)/g,function(v){ur.push(v);return'url('+ur.length+')';});v=v.split(':');sv=tinymce.trim(v[1]);sv=sv.replace(/url\(([^\)]+)\)/g,function(a,b){return ur[parseInt(b)-1];});sv=sv.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});if(s.url_converter){sv=sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),'style',null))+')';});}o[tinymce.trim(v[0]).toLowerCase()]=sv;}});compress("border","","border");compress("border","-width","border-width");compress("border","-color","border-color");compress("border","-style","border-style");compress("padding","","padding");compress("margin","","margin");compress2('border','border-width','border-style','border-color');if(isIE){if(o.border=='medium none')o.border='';}return o;},serializeStyle:function(o){var s='';each(o,function(v,k){if(k&&v){switch(k){case'color':case'background-color':v=v.toLowerCase();break;}s+=(s?' ':'')+k+': '+v+';';}});return s;},loadCSS:function(u){var t=this,d=t.doc;if(!u)u='';each(u.split(','),function(u){if(t.files[u])return;t.files[u]=true;t.add(t.select('head')[0],'link',{rel:'stylesheet',href:u});});},addClass:function(e,c){return this.run(e,function(e){var o;if(!c)return 0;if(this.hasClass(e,c))return e.className;o=this.removeClass(e,c);return e.className=(o!=''?(o+' '):'')+c;});},removeClass:function(e,c){var t=this,re;return t.run(e,function(e){var v;if(t.hasClass(e,c)){if(!re)re=new RegExp("(^|\\s+)"+c+"(\\s+|$)","g");v=e.className.replace(re,' ');return e.className=tinymce.trim(v!=' '?v:'');}return e.className;});},hasClass:function(n,c){n=this.get(n);if(!n||!c)return false;return(' '+n.className+' ').indexOf(' '+c+' ')!==-1;},show:function(e){return this.setStyle(e,'display','block');},hide:function(e){return this.setStyle(e,'display','none');},isHidden:function(e){e=this.get(e);return e.style.display=='none'||this.getStyle(e,'display')=='none';},uniqueId:function(p){return(!p?'mce_':p)+(this.counter++);},setHTML:function(e,h){var t=this;return this.run(e,function(e){var x,i,nl,n,p,x;h=t.processHTML(h);if(isIE){function set(){try{e.innerHTML='<br />'+h;e.removeChild(e.firstChild);}catch(ex){while(e.firstChild)e.firstChild.removeNode();x=t.create('div');x.innerHTML='<br />'+h;each(x.childNodes,function(n,i){if(i)e.appendChild(n);});}};if(t.settings.fix_ie_paragraphs)h=h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 mce_keep="true"> </p>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("p");for(i=nl.length-1,x=0;i>=0;i--){n=nl[i];if(!n.hasChildNodes()){if(!n.mce_keep){x=1;break;}n.removeAttribute('mce_keep');}}}if(x){h=h.replace(/<p([^>]+)>|<p>/g,'<div$1 mce_tmp="1">');h=h.replace(/<\/p>/g,'</div>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("DIV");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.mce_tmp){p=t.doc.createElement('p');n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(a,b){var v;if(b!=='mce_tmp'){v=n.getAttribute(b);if(!v&&b==='class')v=n.className;p.setAttribute(b,v);}});for(x=0;x<n.childNodes.length;x++)p.appendChild(n.childNodes[x].cloneNode(true));n.swapNode(p);}}}}}else e.innerHTML=h;return h;});},processHTML:function(h){var t=this,s=t.settings;if(!s.process_html)return h;if(tinymce.isGecko){h=h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi,'<$1b$2>');h=h.replace(/<(\/?)em>|<em( [^>]+)>/gi,'<$1i$2>');}h=h.replace(/<a( )([^>]+)\/>|<a\/>/gi,'<a$1$2></a>');if(s.keep_values){if(h.indexOf('<script')!==-1){h=h.replace(/<script>/g,'<script type="text/javascript">');h=h.replace(/<script(|[^>]+)>(\s*<!--|\/\/\s*<\[CDATA\[)?[\r\n]*/g,'<mce:script$1><!--\n');h=h.replace(/\s*(\/\/\s*-->|\/\/\s*]]>)?<\/script>/g,'\n// --></mce:script>');h=h.replace(/<mce:script(|[^>]+)><!--\n\/\/ --><\/mce:script>/g,'<mce:script$1></mce:script>');}h=h.replace(/<([\w:]+) [^>]*(src|href|style|coords)[^>]*>/gi,function(a,n){function handle(m,b,c){var u=c;if(a.indexOf('mce_'+b)!=-1)return m;if(b=='style'){if(s.hex_colors){u=u.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});}if(s.url_converter){u=u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n))+')';});}}else if(b!='coords'){if(s.url_converter)u=t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n));}return' '+b+'="'+c+'" mce_'+b+'="'+u+'"';};a=a.replace(/ (src|href|style|coords)=[\"]([^\"]+)[\"]/gi,handle);a=a.replace(/ (src|href|style|coords)=[\']([^\']+)[\']/gi,handle);return a.replace(/ (src|href|style|coords)=([^\s\"\'>]+)/gi,handle);});}return h;},getOuterHTML:function(e){var d;e=this.get(e);if(!e)return null;if(isIE)return e.outerHTML;d=(e.ownerDocument||this.doc).createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML;},setOuterHTML:function(e,h,d){var t=this;return this.run(e,function(e){var n,tp;e=t.get(e);d=d||e.ownerDocument||t.doc;if(isIE&&e.nodeType==1)e.outerHTML=h;else{tp=d.createElement("body");tp.innerHTML=h;n=tp.lastChild;while(n){t.insertAfter(n.cloneNode(true),e);n=n.previousSibling;}t.remove(e);}});},decode:function(s){var e;if(/&[^;]+;/.test(s)){e=this.doc.createElement("div");e.innerHTML=s;return!e.firstChild?s:e.firstChild.nodeValue;}return s;},encode:function(s){return s?(''+s).replace(/[<>&\"]/g,function(c,b){switch(c){case'&':return'&';case'"':return'"';case'<':return'<';case'>':return'>';}return c;}):s;},insertAfter:function(n,r){var t=this;r=t.get(r);return this.run(n,function(n){var p,ns;p=r.parentNode;ns=r.nextSibling;if(ns)p.insertBefore(n,ns);else p.appendChild(n);return n;});},isBlock:function(n){if(n.nodeType&&n.nodeType!==1)return false;n=n.nodeName||n;return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);},replace:function(n,o,k){if(is(o,'array'))n=n.cloneNode(true);return this.run(o,function(o){if(k){each(o.childNodes,function(c){n.appendChild(c.cloneNode(true));});}if(isIE&&o.nodeType===1){o.parentNode.insertBefore(n,o);o.outerHTML='';return n;}return o.parentNode.replaceChild(n,o);});},toHex:function(s){var c=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);function hex(s){s=parseInt(s).toString(16);return s.length>1?s:'0'+s;};if(c){s='#'+hex(c[1])+hex(c[2])+hex(c[3]);return s;}return s;},getClasses:function(){var t=this,cl=[],i,lo={},f=t.settings.class_filter,ov;if(t.classes)return t.classes;function addClasses(s){each(s.imports,function(r){addClasses(r);});each(s.cssRules||s.rules,function(r){switch(r.type||1){case 1:if(r.selectorText){each(r.selectorText.split(','),function(v){v=v.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(v)||!/\.[\w\-]+$/.test(v))return;ov=v;v=v.replace(/.*\.([a-z0-9_\-]+).*/i,'$1');if(f&&!(v=f(v,ov)))return;if(!lo[v]){cl.push({'class':v});lo[v]=1;}});}break;case 3:addClasses(r.styleSheet);break;}});};try{each(t.doc.styleSheets,addClasses);}catch(ex){}if(cl.length>0)t.classes=cl;return cl;},run:function(e,f,s){var t=this,o;if(t.doc&&typeof(e)==='string')e=t.doc.getElementById(e);if(!e)return false;s=s||this;if(!e.nodeType&&(e.length||e.length===0)){o=[];each(e,function(e,i){if(e){if(typeof(e)=='string')e=t.doc.getElementById(e);o.push(f.call(s,e,i));}});return o;}return f.call(s,e);},getAttribs:function(n){var o;n=this.get(n);if(!n)return[];if(isIE){o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;}return n.attributes;},destroy:function(s){var t=this;t.win=t.doc=t.root=null;if(!s)tinymce.removeUnload(t.destroy);}});tinymce.DOM=new tinymce.dom.DOMUtils(document,{process_html:0});})();(function(){var each=tinymce.each,DOM=tinymce.DOM,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit,Event;tinymce.create('static tinymce.dom.Event',{inits:[],events:[],add:function(o,n,f,s){var cb,t=this,el=t.events,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.add(o,n,f,s));});return r;}o=DOM.get(o);if(!o)return;cb=function(e){e=e||window.event;if(e&&!e.target&&isIE)e.target=e.srcElement;if(!s)return f(e);return f.call(s,e);};if(n=='unload'){tinymce.unloads.unshift({func:cb});return cb;}if(n=='init'){if(t.domLoaded)cb();else t.inits.push(cb);return cb;}el.push({obj:o,name:n,func:f,cfunc:cb,scope:s});t._add(o,n,cb);return f;},remove:function(o,n,f){var t=this,a=t.events,s=false,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.remove(o,n,f));});return r;}o=DOM.get(o);each(a,function(e,i){if(e.obj==o&&e.name==n&&(!f||(e.func==f||e.cfunc==f))){a.splice(i,1);t._remove(o,n,e.cfunc);s=true;return false;}});return s;},clear:function(o){var t=this,a=t.events,i,e;if(o){o=DOM.get(o);for(i=a.length-1;i>=0;i--){e=a[i];if(e.obj===o){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;a.splice(i,1);}}}},cancel:function(e){if(!e)return false;this.stop(e);return this.prevent(e);},stop:function(e){if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;return false;},prevent:function(e){if(e.preventDefault)e.preventDefault();else e.returnValue=false;return false;},_unload:function(){var t=Event;each(t.events,function(e,i){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;});t.events=[];t=null;},_add:function(o,n,f){if(o.attachEvent)o.attachEvent('on'+n,f);else if(o.addEventListener)o.addEventListener(n,f,false);else o['on'+n]=f;},_remove:function(o,n,f){if(o){try{if(o.detachEvent)o.detachEvent('on'+n,f);else if(o.removeEventListener)o.removeEventListener(n,f,false);else o['on'+n]=null;}catch(ex){}}},_pageInit:function(){var e=Event;e._remove(window,'DOMContentLoaded',e._pageInit);e.domLoaded=true;each(e.inits,function(c){c();});e.inits=[];},_wait:function(){var t;if(window.tinyMCE_GZ&&tinyMCE_GZ.loaded)return;if(isIE&&document.location.protocol!='https:'){document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');DOM.get("__ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){Event._pageInit();DOM.get("__ie_onload").onreadystatechange=null;}};}else{Event._add(window,'DOMContentLoaded',Event._pageInit,Event);if(isIE||isWebKit){t=setInterval(function(){if(/loaded|complete/.test(document.readyState)){clearInterval(t);Event._pageInit();}},10);}}}});Event=tinymce.dom.Event;Event._wait();tinymce.addUnload(Event._unload);})();(function(){var each=tinymce.each;tinymce.create('tinymce.dom.Element',{Element:function(id,s){var t=this,dom,el;s=s||{};t.id=id;t.dom=dom=s.dom||tinymce.DOM;t.settings=s;if(!tinymce.isIE)el=t.dom.get(t.id);each(['getPos','getRect','getParent','add','setStyle','getStyle','setStyles','setAttrib','setAttribs','getAttrib','addClass','removeClass','hasClass','getOuterHTML','setOuterHTML','remove','show','hide','isHidden','setHTML','get'],function(k){t[k]=function(){var a=arguments,o;if(tinymce.isOpera){a=[id];each(arguments,function(v){a.push(v);});}else Array.prototype.unshift.call(a,el||id);o=dom[k].apply(dom,a);t.update(k);return o;};});},on:function(n,f,s){return tinymce.dom.Event.add(this.id,n,f,s);},getXY:function(){return{x:parseInt(this.getStyle('left')),y:parseInt(this.getStyle('top'))};},getSize:function(){var n=this.dom.get(this.id);return{w:parseInt(this.getStyle('width')||n.clientWidth),h:parseInt(this.getStyle('height')||n.clientHeight)};},moveTo:function(x,y){this.setStyles({left:x,top:y});},moveBy:function(x,y){var p=this.getXY();this.moveTo(p.x+x,p.y+y);},resizeTo:function(w,h){this.setStyles({width:w,height:h});},resizeBy:function(w,h){var s=this.getSize();this.resizeTo(s.w+w,s.h+h);},update:function(k){var t=this,b,dom=t.dom;if(tinymce.isIE6&&t.settings.blocker){k=k||'';if(k.indexOf('get')===0||k.indexOf('has')===0||k.indexOf('is')===0)return;if(k=='remove'){dom.remove(t.blocker);return;}if(!t.blocker){t.blocker=dom.uniqueId();b=dom.add(t.settings.container||dom.getRoot(),'iframe',{id:t.blocker,style:'position:absolute;',frameBorder:0,src:'javascript:""'});dom.setStyle(b,'opacity',0);}else b=dom.get(t.blocker);dom.setStyle(b,'left',t.getStyle('left',1));dom.setStyle(b,'top',t.getStyle('top',1));dom.setStyle(b,'width',t.getStyle('width',1));dom.setStyle(b,'height',t.getStyle('height',1));dom.setStyle(b,'display',t.getStyle('display',1));dom.setStyle(b,'zIndex',parseInt(t.getStyle('zIndex',1)||0)-1);}}});})();(function(){var is=tinymce.is,isIE=tinymce.isIE,each=tinymce.each;tinymce.create('tinymce.dom.Selection',{Selection:function(dom,win,serializer){var t=this;t.dom=dom;t.win=win;t.serializer=serializer;tinymce.addUnload(t.destroy,t);},getContent:function(s){var t=this,r=t.getRng(),e=t.dom.create("body"),se=t.getSel(),wb,wa,n;s=s||{};wb=wa='';s.get=true;s.format=s.format||'html';if(s.format=='text')return t.isCollapsed()?'':(r.text||(se.toString?se.toString():''));if(r.cloneContents){n=r.cloneContents();if(n)e.appendChild(n);}else if(is(r.item)||is(r.htmlText))e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();if(/^\s/.test(e.innerHTML))wb=' ';if(/\s+$/.test(e.innerHTML))wa=' ';s.getInner=true;return t.isCollapsed()?'':wb+t.serializer.serialize(e,s)+wa;},setContent:function(h,s){var t=this,r=t.getRng(),d;s=s||{format:'html'};s.set=true;h=t.dom.processHTML(h);if(r.insertNode){d=t.win.document;if(tinymce.isGecko&&h.indexOf('<')==-1){r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h+'<span id="__caret">_</span>'));t.select(t.dom.get('__caret'));t.getRng().deleteContents();return;}try{if(d.queryCommandEnabled('InsertHTML'))return d.execCommand('InsertHTML',false,h);}catch(ex){r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h));}}else{if(r.item)r.item(0).outerHTML=h;else r.pasteHTML(h);}},getStart:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(1);e=r.parentElement();if(e.nodeName=='BODY')return e.firstChild;return e;}else{e=r.startContainer;if(e.nodeName=='BODY')return e.firstChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getEnd:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(0);e=r.parentElement();if(e.nodeName=='BODY')return e.lastChild;return e;}else{e=r.endContainer;if(e.nodeName=='BODY')return e.lastChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getBookmark:function(si){var t=this,r=t.getRng(),tr,sx,sy,vp=t.dom.getViewPort(t.win),e,sp,bp,le,c=-0xFFFFFF,s,ro=t.dom.getRoot(),wb=0,wa=0,nv;sx=vp.x;sy=vp.y;if(si=='simple')return{rng:r,scrollX:sx,scrollY:sy};if(isIE){if(r.item){e=r.item(0);each(t.dom.select(e.nodeName),function(n,i){if(e==n){sp=i;return false;}});return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy};}tr=t.dom.doc.body.createTextRange();tr.moveToElementText(ro);tr.collapse(true);bp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(true);sp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(false);le=Math.abs(tr.move('character',c))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy};}e=t.getNode();s=t.getSel();if(!s)return null;if(e&&e.nodeName=='IMG'){return{scrollX:sx,scrollY:sy};}function getPos(r,sn,en){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d;}p+=tinymce.trim(n.nodeValue||'').length;}return null;};if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=getPos(ro,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};(s.anchorNode.nodeValue||'').replace(/^\s+/,function(a){wb=a.length;});return{start:Math.max(e.start+s.anchorOffset-wb,0),end:Math.max(e.end+s.focusOffset-wb,0),scrollX:sx,scrollY:sy,beg:s.anchorOffset-wb==0};}else{e=getPos(ro,r.startContainer,r.endContainer);(r.startContainer.nodeValue||'').replace(/^\s+/,function(a){wb=a.length;});(r.endContainer.nodeValue||'').replace(/^\s+/,function(a){wa=a.length;});if(!e)return{scrollX:sx,scrollY:sy};return{start:Math.max(e.start+r.startOffset-wb,0),end:Math.max(e.end+r.endOffset-wa,0),scrollX:sx,scrollY:sy,beg:r.startOffset-wb==0};}},moveToBookmark:function(b){var t=this,r=t.getRng(),s=t.getSel(),ro=t.dom.getRoot(),sd,nvl,nv;function getPos(r,sp,ep){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={},o,v,wa,wb;while((n=w.nextNode())!=null){wa=wb=0;nv=n.nodeValue||'';nv.replace(/^\s+[^\s]/,function(a){wb=a.length-1;});nv.replace(/[^\s]\s+$/,function(a){wa=a.length-1;});nvl=tinymce.trim(nv).length;p+=nvl;if(p>=sp&&!d.startNode){o=sp-(p-nvl);if(b.beg&&o>=nvl)continue;d.startNode=n;d.startOffset=o+wb;}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-nvl)+wb;return d;}}return null;};if(!b)return false;t.win.scrollTo(b.scrollX,b.scrollY);if(isIE){if(r=b.rng){try{r.select();}catch(ex){}return true;}t.win.focus();if(b.tag){r=ro.createControlRange();each(t.dom.select(b.tag),function(n,i){if(i==b.index)r.addElement(n);});}else{try{if(b.start<0)return true;r=s.createRange();r.moveToElementText(ro);r.collapse(true);r.moveStart('character',b.start);r.moveEnd('character',b.length);}catch(ex2){return true;}}try{r.select();}catch(ex){}return true;}if(!s)return false;if(b.rng){s.removeAllRanges();s.addRange(b.rng);}else{if(is(b.start)&&is(b.end)){try{sd=getPos(ro,b.start,b.end);if(sd){r=t.dom.doc.createRange();r.setStart(sd.startNode,sd.startOffset);r.setEnd(sd.endNode,sd.endOffset);s.removeAllRanges();s.addRange(r);}if(!tinymce.isOpera)t.win.focus();}catch(ex){}}}},select:function(n,c){var t=this,r=t.getRng(),s=t.getSel(),b,fn,ln,d=t.win.document;function first(n){return n?d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode():null;};function last(n){var c,o,w;if(!n)return null;w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(c=w.nextNode())o=c;return o;};if(isIE){try{b=d.body;if(/^(IMG|TABLE)$/.test(n.nodeName)){r=b.createControlRange();r.addElement(n);}else{r=b.createTextRange();r.moveToElementText(n);}r.select();}catch(ex){}}else{if(c){fn=first(n);ln=last(n);if(fn&&ln){r=d.createRange();r.setStart(fn,0);r.setEnd(ln,ln.nodeValue.length);}else r.selectNode(n);}else r.selectNode(n);t.setRng(r);}return n;},isCollapsed:function(){var t=this,r=t.getRng(),s=t.getSel();if(!r||r.item)return false;return!s||r.boundingWidth==0||s.isCollapsed;},collapse:function(b){var t=this,r=t.getRng(),n;if(r.item){n=r.item(0);r=this.win.document.body.createTextRange();r.moveToElementText(n);}r.collapse(!!b);t.setRng(r);},getSel:function(){var t=this,w=this.win;return w.getSelection?w.getSelection():w.document.selection;},getRng:function(){var t=this,s=t.getSel(),r;try{if(s)r=s.rangeCount>0?s.getRangeAt(0):(s.createRange?s.createRange():t.win.document.createRange());}catch(ex){}if(!r)r=isIE?t.win.document.body.createTextRange():t.win.document.createRange();return r;},setRng:function(r){var s;if(!isIE){s=this.getSel();if(s){s.removeAllRanges();s.addRange(r);}}else{try{r.select();}catch(ex){}}},setNode:function(n){var t=this;t.setContent(t.dom.getOuterHTML(n));return n;},getNode:function(){var t=this,r=t.getRng(),s=t.getSel(),e;if(!isIE){if(!r)return t.dom.getRoot();e=r.commonAncestorContainer;if(!r.collapsed){if(r.startContainer==r.endContainer||(tinymce.isWebKit&&r.startContainer==r.endContainer.parentNode)){if(r.startOffset-r.endOffset<2||tinymce.isWebKit){if(r.startContainer.hasChildNodes())e=r.startContainer.childNodes[r.startOffset];}}}return t.dom.getParent(e,function(n){return n.nodeType==1;});}return r.item?r.item(0):r.parentElement();},destroy:function(s){var t=this;t.win=null;if(!s)tinymce.removeUnload(t.destroy);}});})();(function(){tinymce.create('tinymce.dom.XMLWriter',{node:null,XMLWriter:function(s){function getXML(){var i=document.implementation;if(!i||!i.createDocument){try{return new ActiveXObject('MSXML2.DOMDocument');}catch(ex){}try{return new ActiveXObject('Microsoft.XmlDom');}catch(ex){}}else return i.createDocument('','',null);};this.doc=getXML();this.valid=tinymce.isOpera||tinymce.isWebKit;this.reset();},reset:function(){var t=this,d=t.doc;if(d.firstChild)d.removeChild(d.firstChild);t.node=d.appendChild(d.createElement("html"));},writeStartElement:function(n){var t=this;t.node=t.node.appendChild(t.doc.createElement(n));},writeAttribute:function(n,v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.setAttribute(n,v);},writeEndElement:function(){this.node=this.node.parentNode;},writeFullEndElement:function(){var t=this,n=t.node;n.appendChild(t.doc.createTextNode(""));t.node=n.parentNode;},writeText:function(v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.appendChild(this.doc.createTextNode(v));},writeCDATA:function(v){this.node.appendChild(this.doc.createCDATA(v));},writeComment:function(v){this.node.appendChild(this.doc.createComment(v));},getContent:function(){var h;h=this.doc.xml||new XMLSerializer().serializeToString(this.doc);h=h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,'');h=h.replace(/ ?\/>/g,' />');if(this.valid)h=h.replace(/\%MCGT%/g,'>');return h;}});})();(function(){tinymce.create('tinymce.dom.StringWriter',{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(s){this.settings=tinymce.extend({indent_char:' ',indentation:1},s);this.reset();},reset:function(){this.indent='';this.str="";this.tags=[];this.count=0;},writeStartElement:function(n){this._writeAttributesEnd();this.writeRaw('<'+n);this.tags.push(n);this.inAttr=true;this.count++;this.elementCount=this.count;},writeAttribute:function(n,v){var t=this;t.writeRaw(" "+t.encode(n)+'="'+t.encode(v)+'"');},writeEndElement:function(){var n;if(this.tags.length>0){n=this.tags.pop();if(this._writeAttributesEnd(1))this.writeRaw('</'+n+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw('</'+this.tags.pop()+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeText:function(v){this._writeAttributesEnd();this.writeRaw(this.encode(v));this.count++;},writeCDATA:function(v){this._writeAttributesEnd();this.writeRaw('<![CDATA['+v+']]>');this.count++;},writeComment:function(v){this._writeAttributesEnd();this.writeRaw('<!-- '+v+'-->');this.count++;},writeRaw:function(v){this.str+=v;},encode:function(s){return s.replace(/[<>&"]/g,function(v){switch(v){case'<':return'<';case'>':return'>';case'&':return'&';case'"':return'"';}return v;});},getContent:function(){return this.str;},_writeAttributesEnd:function(s){if(!this.inAttr)return;this.inAttr=false;if(s&&this.elementCount==this.count){this.writeRaw(' />');return false;}this.writeRaw('>');return true;}});})();(function(){var extend=tinymce.extend,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher,isIE=tinymce.isIE,isGecko=tinymce.isGecko;function getIEAtts(n){var o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;};function wildcardToRE(s){return s.replace(/([?+*])/g,'.$1');};tinymce.create('tinymce.dom.Serializer',{Serializer:function(s){var t=this;t.key=0;t.onPreProcess=new Dispatcher(t);t.onPostProcess=new Dispatcher(t);if(tinymce.relaxedDomain&&tinymce.isGecko){t.writer=new tinymce.dom.StringWriter();}else{try{t.writer=new tinymce.dom.XMLWriter();}catch(ex){t.writer=new tinymce.dom.StringWriter();}}t.settings=s=extend({dom:tinymce.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(mce_|_moz_)/,closed:/(br|hr|input|meta|img|link|param)/,entity_encoding:'named',entities:'160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',valid_elements:'*[*]',extended_valid_elements:0,valid_child_elements:0,invalid_elements:0,fix_table_elements:0,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,font_size_style_values:0,apply_source_formatting:0,indent_mode:'simple',indent_char:'\t',indent_levels:1,remove_linebreaks:1},s);t.dom=s.dom;if(s.fix_list_elements){t.onPreProcess.add(function(se,o){var nl,x,a=['ol','ul'],i,n,p,r=/^(OL|UL)$/,np;function prevNode(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e;}}return null;};for(x=0;x<a.length;x++){nl=t.dom.select(a[x],o.node);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=prevNode(n,'LI');if(!np){np=t.dom.create('li');np.innerHTML=' ';np.appendChild(n);p.insertBefore(np,p.firstChild);}else np.appendChild(n);}}}});}if(s.fix_table_elements){t.onPreProcess.add(function(se,o){each(t.dom.select('table',o.node),function(e){var pa=t.dom.getParent(e,'H1,H2,H3,H4,H5,H6,P'),pa2,n,tm,pl=[],i,ns;if(pa){pa2=pa.cloneNode(false);pl.push(e);for(n=e;n=n.parentNode;){pl.push(n);if(n==pa)break;}tm=pa2;for(i=pl.length-1;i>=0;i--){if(i==pl.length-1){while(ns=pl[i-1].nextSibling)tm.appendChild(ns.parentNode.removeChild(ns));}else{n=pl[i].cloneNode(false);if(i!=0){while(ns=pl[i-1].nextSibling)n.appendChild(ns.parentNode.removeChild(ns));}tm=tm.appendChild(n);}}e=t.dom.insertAfter(e.parentNode.removeChild(e),pa);t.dom.insertAfter(e,pa);t.dom.insertAfter(pa2,e);}});});}},setEntities:function(s){var t=this,a,i,l={},re='',v;if(t.entityLookup)return;a=s.split(',');for(i=0;i<a.length;i+=2){v=a[i];if(v==34||v==38||v==60||v==62)continue;l[String.fromCharCode(a[i])]=a[i+1];v=parseInt(a[i]).toString(16);re+='\\u'+'0000'.substring(v.length)+v;}if(!re){t.settings.entity_encoding='raw';return;}t.entitiesRE=new RegExp('['+re+']','g');t.entityLookup=l;},setValidChildRules:function(s){this.childRules=null;this.addValidChildRules(s);},addValidChildRules:function(s){var t=this,inst,intr,bloc;if(!s)return;inst='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';intr='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';bloc='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';each(s.split(','),function(s){var p=s.split(/\[|\]/),re;s='';each(p[1].split('|'),function(v){if(s)s+='|';switch(v){case'%itrans':v=intr;break;case'%itrans_na':v=intr.substring(2);break;case'%istrict':v=inst;break;case'%istrict_na':v=inst.substring(2);break;case'%btrans':v=bloc;break;case'%bstrict':v=bloc;break;}s+=v;});re=new RegExp('^('+s.toLowerCase()+')$','i');each(p[0].split('/'),function(s){t.childRules=t.childRules||{};t.childRules[s]=re;});});s='';each(t.childRules,function(v,k){if(s)s+='|';s+=k;});t.parentElementsRE=new RegExp('^('+s.toLowerCase()+')$','i');},setRules:function(s){var t=this;t._setup();t.rules={};t.wildRules=[];t.validElements={};return t.addRules(s);},addRules:function(s){var t=this,dr;if(!s)return;t._setup();each(s.split(','),function(s){var p=s.split(/\[|\]/),tn=p[0].split('/'),ra,at,wat,va=[];if(dr)at=tinymce.extend([],dr.attribs);if(p.length>1){each(p[1].split('|'),function(s){var ar={},i;at=at||[];s=s.replace(/::/g,'~');s=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s);s[2]=s[2].replace(/~/g,':');if(s[1]=='!'){ra=ra||[];ra.push(s[2]);}if(s[1]=='-'){for(i=0;i<at.length;i++){if(at[i].name==s[2]){at.splice(i,1);return;}}}switch(s[3]){case'=':ar.defaultVal=s[4]||'';break;case':':ar.forcedVal=s[4];break;case'<':ar.validVals=s[4].split('?');break;}if(/[*.?]/.test(s[2])){wat=wat||[];ar.nameRE=new RegExp('^'+wildcardToRE(s[2])+'$');wat.push(ar);}else{ar.name=s[2];at.push(ar);}va.push(s[2]);});}each(tn,function(s,i){var pr=s.charAt(0),x=1,ru={};if(dr){if(dr.noEmpty)ru.noEmpty=dr.noEmpty;if(dr.fullEnd)ru.fullEnd=dr.fullEnd;if(dr.padd)ru.padd=dr.padd;}switch(pr){case'-':ru.noEmpty=true;break;case'+':ru.fullEnd=true;break;case'#':ru.padd=true;break;default:x=0;}tn[i]=s=s.substring(x);t.validElements[s]=1;if(/[*.?]/.test(tn[0])){ru.nameRE=new RegExp('^'+wildcardToRE(tn[0])+'$');t.wildRules=t.wildRules||{};t.wildRules.push(ru);}else{ru.name=tn[0];if(tn[0]=='@')dr=ru;t.rules[s]=ru;}ru.attribs=at;if(ra)ru.requiredAttribs=ra;if(wat){s='';each(va,function(v){if(s)s+='|';s+='('+wildcardToRE(v)+')';});ru.validAttribsRE=new RegExp('^'+s.toLowerCase()+'$');ru.wildAttribs=wat;}});});s='';each(t.validElements,function(v,k){if(s)s+='|';if(k!='@')s+=k;});t.validElementsRE=new RegExp('^('+wildcardToRE(s.toLowerCase())+')$');},findRule:function(n){var t=this,rl=t.rules,i,r;t._setup();r=rl[n];if(r)return r;rl=t.wildRules;for(i=0;i<rl.length;i++){if(rl[i].nameRE.test(n))return rl[i];}return null;},findAttribRule:function(ru,n){var i,wa=ru.wildAttribs;for(i=0;i<wa.length;i++){if(wa[i].nameRE.test(n))return wa[i];}return null;},serialize:function(n,o){var h,t=this;t._setup();o=o||{};o.format=o.format||'html';t.processObj=o;n=n.cloneNode(true);t.key=''+(parseInt(t.key)+1);if(!o.no_events){o.node=n;t.onPreProcess.dispatch(t,o);}t.writer.reset();t._serializeNode(n,o.getInner);o.content=t.writer.getContent();if(!o.no_events)t.onPostProcess.dispatch(t,o);t._postProcess(o);o.node=null;return tinymce.trim(o.content);},_postProcess:function(o){var t=this,s=t.settings,h=o.content,sc=[],p,l;if(o.format=='html'){p=t._protect({content:h,patterns:[/(<script[^>]*>)(.*?)(<\/script>)/g,/(<style[^>]*>)(.*?)(<\/style>)/g,/(<pre[^>]*>)(.*?)(<\/pre>)/g]});h=p.content;if(s.entity_encoding!=='raw'){if(s.entity_encoding.indexOf('named')!=-1){t.setEntities(s.entities);l=t.entityLookup;h=h.replace(t.entitiesRE,function(a){var v;if(v=l[a])a='&'+v+';';return a;});}if(s.entity_encoding.indexOf('numeric')!=-1){h=h.replace(/[\u007E-\uFFFF]/g,function(a){return'&#'+a.charCodeAt(0)+';';});}}if(!o.set){h=h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,s.entity_encoding=='numeric'?'<p$1> </p>':'<p$1> </p>');if(s.remove_linebreaks){h=h.replace(/\r?\n|\r/g,' ');h=h.replace(/(<[^>]+>)\s+/g,'$1 ');h=h.replace(/\s+(<\/[^>]+>)/g,' $1');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,'<$1 $2>');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,'<$1>');h=h.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,'</$1>');}if(s.apply_source_formatting&&s.indent_mode=='simple'){h=h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,'\n<$1$2$3>\n');h=h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,'\n<$1$2>');h=h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,'</$1>\n');h=h.replace(/\n\n/g,'\n');}}h=t._unprotect(h,p);if(s.entity_encoding=='raw')h=h.replace(/<p> <\/p>|<p([^>]+)> <\/p>/g,'<p$1>\u00a0</p>');}o.content=h;},_serializeNode:function(n,inn){var t=this,s=t.settings,w=t.writer,hc,el,cn,i,l,a,at,no,v,nn,ru,ar,iv;if(!s.node_filter||s.node_filter(n)){switch(n.nodeType){case 1:if(n.hasAttribute?n.hasAttribute('mce_bogus'):n.getAttribute('mce_bogus'))return;iv=false;hc=n.hasChildNodes();nn=n.getAttribute('mce_name')||n.nodeName.toLowerCase();if(isIE){if(n.scopeName!=='HTML'&&n.scopeName!=='html')nn=n.scopeName+':'+nn;}if(nn.indexOf('mce:')===0)nn=nn.substring(4);if(!t.validElementsRE.test(nn)||(t.invalidElementsRE&&t.invalidElementsRE.test(nn))||inn){iv=true;break;}if(isIE){if(s.fix_content_duplication){if(n.mce_serialized==t.key)return;n.mce_serialized=t.key;}if(nn.charAt(0)=='/')nn=nn.substring(1);}else if(isGecko){if(n.nodeName==='BR'&&n.getAttribute('type')=='_moz')return;}if(t.childRules){if(t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(nn)){iv=true;break;}}t.elementName=nn;}ru=t.findRule(nn);nn=ru.name||nn;if((!hc&&ru.noEmpty)||(isIE&&!nn)){iv=true;break;}if(ru.requiredAttribs){a=ru.requiredAttribs;for(i=a.length-1;i>=0;i--){if(this.dom.getAttrib(n,a[i])!=='')break;}if(i==-1){iv=true;break;}}w.writeStartElement(nn);if(ru.attribs){for(i=0,at=ru.attribs,l=at.length;i<l;i++){a=at[i];v=t._getAttrib(n,a);if(v!==null)w.writeAttribute(a.name,v);}}if(ru.validAttribsRE){at=isIE?getIEAtts(n):n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified){a=no.nodeName.toLowerCase();if(s.invalid_attrs.test(a)||!ru.validAttribsRE.test(a))continue;ar=t.findAttribRule(ru,a);v=t._getAttrib(n,ar,a);if(v!==null)w.writeAttribute(a,v);}}}if(!hc&&ru.padd)w.writeText('\u00a0');break;case 3:if(t.childRules&&t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(n.nodeName))return;}return w.writeText(n.nodeValue);case 4:return w.writeCDATA(n.nodeValue);case 8:return w.writeComment(n.nodeValue);}}else if(n.nodeType==1)hc=n.hasChildNodes();if(hc){cn=n.firstChild;while(cn){t._serializeNode(cn);t.elementName=nn;cn=cn.nextSibling;}}if(!iv){if(hc||!s.closed.test(nn))w.writeFullEndElement();else w.writeEndElement();}},_protect:function(o){o.items=o.items||[];function enc(s){return s.replace(/[\r\n\\]/g,function(c){if(c==='\n')return'\\n';else if(c==='\\')return'\\\\';return'\\r';});};function dec(s){return s.replace(/\\[\\rn]/g,function(c){if(c==='\\n')return'\n';else if(c==='\\\\')return'\\';return'\r';});};each(o.patterns,function(p){o.content=dec(enc(o.content).replace(p,function(x,a,b,c){o.items.push(dec(b));return a+'<!--mce:'+(o.items.length-1)+'-->'+c;}));});return o;},_unprotect:function(h,o){h=h.replace(/\<!--mce:([0-9]+)--\>/g,function(a,b){return o.items[parseInt(b)];});o.items=[];return h;},_setup:function(){var t=this,s=this.settings;if(t.done)return;t.done=1;t.setRules(s.valid_elements);t.addRules(s.extended_valid_elements);t.addValidChildRules(s.valid_child_elements);if(s.invalid_elements)t.invalidElementsRE=new RegExp('^('+wildcardToRE(s.invalid_elements.replace(',','|').toLowerCase())+')$');if(s.attrib_value_filter)t.attribValueFilter=s.attribValueFilter;},_getAttrib:function(n,a,na){var i,v;na=na||a.name;if(a.forcedVal&&(v=a.forcedVal)){if(v==='{$uid}')return this.dom.uniqueId();return v;}v=this.dom.getAttrib(n,na);switch(na){case'rowspan':case'colspan':if(v=='1')v='';break;}if(this.attribValueFilter)v=this.attribValueFilter(na,v,n);if(a.validVals){for(i=a.validVals.length-1;i>=0;i--){if(v==a.validVals[i])break;}if(i==-1)return null;}if(v===''&&typeof(a.defaultVal)!='undefined'){v=a.defaultVal;if(v==='{$uid}')return this.dom.uniqueId();return v;}else{if(na=='class'&&this.processObj.get)v=v.replace(/\s?mceItem\w+\s?/g,'');}if(v==='')return null;return v;}});})();(function(){var each=tinymce.each;tinymce.create('tinymce.dom.ScriptLoader',{ScriptLoader:function(s){this.settings=s||{};this.queue=[];this.lookup={};},isDone:function(u){return this.lookup[u]?this.lookup[u].state==2:0;},markDone:function(u){this.lookup[u]={state:2,url:u};},add:function(u,cb,s,pr){var t=this,lo=t.lookup,o;if(o=lo[u]){if(cb&&o.state==2)cb.call(s||this);return o;}o={state:0,url:u,func:cb,scope:s||this};if(pr)t.queue.unshift(o);else t.queue.push(o);lo[u]=o;return o;},load:function(u,cb,s){var t=this,o;if(o=t.lookup[u]){if(cb&&o.state==2)cb.call(s||t);return o;}function loadScript(u){if(tinymce.dom.Event.domLoaded||t.settings.strict_mode){tinymce.util.XHR.send({url:u,error:t.settings.error,async:false,success:function(co){t.eval(co);}});}else document.write('<script type="text/javascript" src="'+u+'"></script>');};if(!tinymce.is(u,'string')){each(u,function(u){loadScript(u);});if(cb)cb.call(s||t);}else{loadScript(u);if(cb)cb.call(s||t);}},loadQueue:function(cb,s){var t=this;if(!t.queueLoading){t.queueLoading=1;t.queueCallbacks=[];t.loadScripts(t.queue,function(){t.queueLoading=0;if(cb)cb.call(s||t);each(t.queueCallbacks,function(o){o.func.call(o.scope);});});}else if(cb)t.queueCallbacks.push({func:cb,scope:s||t});},eval:function(co){var w=window;if(!w.execScript){try{eval.call(w,co);}catch(ex){eval(co,w);}}else w.execScript(co);},loadScripts:function(sc,cb,s){var t=this,lo=t.lookup;function done(o){o.state=2;if(o.func)o.func.call(o.scope||t);};function allDone(){var l;l=sc.length;each(sc,function(o){o=lo[o.url];if(o.state===2){done(o);l--;}else load(o);});if(l===0&&cb){cb.call(s||t);cb=0;}};function load(o){if(o.state>0)return;o.state=1;tinymce.util.XHR.send({url:o.url,error:t.settings.error,success:function(co){t.eval(co);done(o);allDone();}});};each(sc,function(o){var u=o.url;if(!lo[u]){lo[u]=o;t.queue.push(o);}else o=lo[u];if(o.state>0)return;if(!tinymce.dom.Event.domLoaded&&!t.settings.strict_mode){var ix,ol='';if(cb||o.func){o.state=1;ix=tinymce.dom.ScriptLoader._addOnLoad(function(){done(o);allDone();});if(tinymce.isIE)ol=' onreadystatechange="';else ol=' onload="';ol+='tinymce.dom.ScriptLoader._onLoad(this,\''+u+'\','+ix+');"';}document.write('<script type="text/javascript" src="'+u+'"'+ol+'></script>');if(!o.func)done(o);}else load(o);});allDone();},'static':{_addOnLoad:function(f){var t=this;t._funcs=t._funcs||[];t._funcs.push(f);return t._funcs.length-1;},_onLoad:function(e,u,ix){if(!tinymce.isIE||e.readyState=='complete')this._funcs[ix].call(this);}}});tinymce.ScriptLoader=new tinymce.dom.ScriptLoader();})();(function(){var DOM=tinymce.DOM,is=tinymce.is;tinymce.create('tinymce.ui.Control',{Control:function(id,s){this.id=id;this.settings=s=s||{};this.rendered=false;this.onRender=new tinymce.util.Dispatcher(this);this.classPrefix='';this.scope=s.scope||this;this.disabled=0;this.active=0;},setDisabled:function(s){var e;if(s!=this.disabled){e=DOM.get(this.id);if(e&&this.settings.unavailable_prefix){if(s){this.prevTitle=e.title;e.title=this.settings.unavailable_prefix+": "+e.title;}else e.title=this.prevTitle;}this.setState('Disabled',s);this.setState('Enabled',!s);this.disabled=s;}},isDisabled:function(){return this.disabled;},setActive:function(s){if(s!=this.active){this.setState('Active',s);this.active=s;}},isActive:function(){return this.active;},setState:function(c,s){var n=DOM.get(this.id);c=this.classPrefix+c;if(s)DOM.addClass(n,c);else DOM.removeClass(n,c);},isRendered:function(){return this.rendered;},renderHTML:function(){},renderTo:function(n){DOM.setHTML(n,this.renderHTML());},postRender:function(){var t=this,b;if(is(t.disabled)){b=t.disabled;t.disabled=-1;t.setDisabled(b);}if(is(t.active)){b=t.active;t.active=-1;t.setActive(b);}},remove:function(){DOM.remove(this.id);this.destroy();},destroy:function(){tinymce.dom.Event.clear(this.id);}});})();tinymce.create('tinymce.ui.Container:tinymce.ui.Control',{Container:function(id,s){this.parent(id,s);this.controls=[];this.lookup={};},add:function(c){this.lookup[c.id]=c;this.controls.push(c);return c;},get:function(n){return this.lookup[n];}});tinymce.create('tinymce.ui.Separator:tinymce.ui.Control',{Separator:function(id,s){this.parent(id,s);this.classPrefix='mceSeparator';},renderHTML:function(){return tinymce.DOM.createHTML('span',{'class':this.classPrefix});}});(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control',{MenuItem:function(id,s){this.parent(id,s);this.classPrefix='mceMenuItem';},setSelected:function(s){this.setState('Selected',s);this.selected=s;},isSelected:function(){return this.selected;},postRender:function(){var t=this;t.parent();if(is(t.selected))t.setSelected(t.selected);}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem',{Menu:function(id,s){var t=this;t.parent(id,s);t.items={};t.collapsed=false;t.menuCount=0;t.onAddItem=new tinymce.util.Dispatcher(this);},expand:function(d){var t=this;if(d){walk(t,function(o){if(o.expand)o.expand();},'items',t);}t.collapsed=false;},collapse:function(d){var t=this;if(d){walk(t,function(o){if(o.collapse)o.collapse();},'items',t);}t.collapsed=true;},isCollapsed:function(){return this.collapsed;},add:function(o){if(!o.settings)o=new tinymce.ui.MenuItem(o.id||DOM.uniqueId(),o);this.onAddItem.dispatch(this,o);return this.items[o.id]=o;},addSeparator:function(){return this.add({separator:true});},addMenu:function(o){if(!o.collapse)o=this.createMenu(o);this.menuCount++;return this.add(o);},hasMenus:function(){return this.menuCount!==0;},remove:function(o){delete this.items[o.id];},removeAll:function(){var t=this;walk(t,function(o){if(o.removeAll)o.removeAll();else o.remove();o.destroy();},'items',t);t.items={};},createMenu:function(o){var m=new tinymce.ui.Menu(o.id||DOM.uniqueId(),o);m.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return m;}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,Event=tinymce.dom.Event,Element=tinymce.dom.Element;tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu',{DropMenu:function(id,s){s=s||{};s.container=s.container||DOM.doc.body;s.offset_x=s.offset_x||0;s.offset_y=s.offset_y||0;s.vp_offset_x=s.vp_offset_x||0;s.vp_offset_y=s.vp_offset_y||0;if(is(s.icons)&&!s.icons)s['class']+=' mceNoIcons';this.parent(id,s);this.onShowMenu=new tinymce.util.Dispatcher(this);this.onHideMenu=new tinymce.util.Dispatcher(this);this.classPrefix='mceMenu';this.fixIE=tinymce.isIE&&DOM.win.top!=DOM.win;},createMenu:function(s){var t=this,cs=t.settings,m;s.container=s.container||cs.container;s.parent=t;s.constrain=s.constrain||cs.constrain;s['class']=s['class']||cs['class'];s.vp_offset_x=s.vp_offset_x||cs.vp_offset_x;s.vp_offset_y=s.vp_offset_y||cs.vp_offset_y;m=new tinymce.ui.DropMenu(s.id||DOM.uniqueId(),s);m.onAddItem.add(t.onAddItem.dispatch,t.onAddItem);return m;},update:function(){var t=this,s=t.settings,tb=DOM.get('menu_'+t.id+'_tbl'),co=DOM.get('menu_'+t.id+'_co'),tw,th;tw=s.max_width?Math.min(tb.clientWidth,s.max_width):tb.clientWidth;th=s.max_height?Math.min(tb.clientHeight,s.max_height):tb.clientHeight;if(!DOM.boxModel)t.element.setStyles({width:tw+2,height:th+2});else t.element.setStyles({width:tw,height:th});if(s.max_width)DOM.setStyle(co,'width',tw);if(s.max_height){DOM.setStyle(co,'height',th);if(tb.clientHeight<s.max_height)DOM.setStyle(co,'overflow','hidden');}},showMenu:function(x,y,px){var t=this,s=t.settings,co,vp=DOM.getViewPort(),w,h,mx,my,ot=2,dm,tb,cp=t.classPrefix;t.collapse(1);if(t.isMenuVisible)return;if(!t.rendered){co=DOM.add(t.settings.container,t.renderNode());each(t.items,function(o){o.postRender();});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});}else co=DOM.get('menu_'+t.id);if(!tinymce.isOpera)DOM.setStyles(co,{left:-0xFFFF,top:-0xFFFF});DOM.show(co);t.update();x+=s.offset_x||0;y+=s.offset_y||0;vp.w-=4;vp.h-=4;if(s.constrain){w=co.clientWidth-ot;h=co.clientHeight-ot;mx=vp.x+vp.w;my=vp.y+vp.h;if((x+s.vp_offset_x+w)>mx)x=px?px-w:Math.max(0,(mx-s.vp_offset_x)-w);if((y+s.vp_offset_y+h)>my)y=Math.max(0,(my-s.vp_offset_y)-h);}DOM.setStyles(co,{left:x,top:y});t.element.update();t.isMenuVisible=1;t.mouseClickFunc=Event.add(co,t.fixIE?'mousedown':'click',function(e){var m;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))&&!DOM.hasClass(e,cp+'ItemSub')){m=t.items[e.id];if(m.isDisabled())return;dm=t;while(dm){if(dm.hideMenu)dm.hideMenu();dm=dm.settings.parent;}if(m.settings.onclick)m.settings.onclick(e);return Event.cancel(e);}});if(t.hasMenus()){t.mouseOverFunc=Event.add(co,'mouseover',function(e){var m,r,mi;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))){m=t.items[e.id];if(t.lastMenu)t.lastMenu.collapse(1);if(m.isDisabled())return;if(e&&DOM.hasClass(e,cp+'ItemSub')){r=DOM.getRect(e);m.showMenu((r.x+r.w-ot),r.y-ot,r.x);t.lastMenu=m;DOM.addClass(DOM.get(m.id).firstChild,cp+'ItemActive');}}});}t.onShowMenu.dispatch(t);if(s.keyboard_focus){Event.add(co,'keydown',t._keyHandler,t);DOM.select('a','menu_'+t.id)[0].focus();}},hideMenu:function(c){var t=this,co=DOM.get('menu_'+t.id),e;if(!t.isMenuVisible)return;Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,t.fixIE?'mousedown':'click',t.mouseClickFunc);Event.remove(co,'keydown',t._keyHandler);DOM.hide(co);t.isMenuVisible=0;if(!c)t.collapse(1);if(t.element)t.element.hide();if(e=DOM.get(t.id))DOM.removeClass(e.firstChild,t.classPrefix+'ItemActive');t.onHideMenu.dispatch(t);},add:function(o){var t=this,co;o=t.parent(o);if(t.isRendered&&(co=DOM.get('menu_'+t.id)))t._add(DOM.select('tbody',co)[0],o);return o;},collapse:function(d){this.parent(d);this.hideMenu(1);},remove:function(o){DOM.remove(o.id);this.destroy();return this.parent(o);},destroy:function(){var t=this,co=DOM.get('menu_'+t.id);Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,'click',t.mouseClickFunc);if(t.element)t.element.remove();DOM.remove(co);},renderNode:function(){var t=this,s=t.settings,n,tb,co,w;w=DOM.create('div',{id:'menu_'+t.id,'class':s['class'],'style':'position:absolute;left:0;top:0;z-index:200000'});co=DOM.add(w,'div',{id:'menu_'+t.id+'_co','class':t.classPrefix+(s['class']?' '+s['class']:'')});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});if(s.menu_line)DOM.add(co,'span',{'class':t.classPrefix+'Line'});n=DOM.add(co,'table',{id:'menu_'+t.id+'_tbl',border:0,cellPadding:0,cellSpacing:0});tb=DOM.add(n,'tbody');each(t.items,function(o){t._add(tb,o);});t.rendered=true;return w;},_keyHandler:function(e){if(e.keyCode==27)this.hideMenu();},_add:function(tb,o){var n,s=o.settings,a,ro,it,cp=this.classPrefix;if(s.separator){ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'ItemSeparator'});DOM.add(ro,'td',{'class':cp+'ItemSeparator'});if(n=ro.previousSibling)DOM.addClass(n,'mceLast');return;}n=ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'Item '+cp+'ItemEnabled'});n=it=DOM.add(n,'td');n=a=DOM.add(n,'a',{href:'javascript:;',onclick:"return false;",onmousedown:'return false;'});DOM.addClass(it,s['class']);DOM.add(n,'span',{'class':'mceIcon'+(s.icon?' mce_'+s.icon:'')});n=DOM.add(n,s.element||'span',{'class':'mceText',title:o.settings.title},o.settings.title);if(o.settings.style)DOM.setAttrib(n,'style',o.settings.style);if(tb.childNodes.length==1)DOM.addClass(ro,'mceFirst');if((n=ro.previousSibling)&&DOM.hasClass(n,cp+'ItemSeparator'))DOM.addClass(ro,'mceFirst');if(o.collapse)DOM.addClass(ro,cp+'ItemSub');if(n=ro.previousSibling)DOM.removeClass(n,'mceLast');DOM.addClass(ro,'mceLast');}});})();(function(){var DOM=tinymce.DOM;tinymce.create('tinymce.ui.Button:tinymce.ui.Control',{Button:function(id,s){this.parent(id,s);this.classPrefix='mceButton';},renderHTML:function(){var cp=this.classPrefix,s=this.settings,h='<a id="'+this.id+'" href="javascript:;" class="'+cp+' '+cp+'Enabled '+s['class']+'" onmousedown="return false;" onclick="return false;" title="'+DOM.encode(s.title)+'">';if(s.image)h+='<img class="mceIcon" src="'+s.image+'" /></a>';else h+='<span class="mceIcon '+s['class']+'"></span></a>';return h;},postRender:function(){var t=this,s=t.settings;tinymce.dom.Event.add(t.id,'click',function(e){if(!t.isDisabled())return s.onclick.call(s.scope,e);});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control',{ListBox:function(id,s){var t=this;t.parent(id,s);t.items=[];t.onChange=new Dispatcher(t);t.onPostRender=new Dispatcher(t);t.onAdd=new Dispatcher(t);t.onRenderMenu=new tinymce.util.Dispatcher(this);t.classPrefix='mceListBox';},select:function(v){var t=this,e,fv;if(v!=t.selectedValue){e=DOM.get(t.id+'_text');t.selectedValue=v;each(t.items,function(o){if(o.value==v){DOM.setHTML(e,DOM.encode(o.title));fv=1;return false;}});if(!fv){DOM.setHTML(e,DOM.encode(t.settings.title));DOM.addClass(e,'mceTitle');e=0;return;}else DOM.removeClass(e,'mceTitle');}e=0;},add:function(n,v,o){var t=this;o=o||{};o=tinymce.extend(o,{title:n,value:v});t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return this.items.length;},renderHTML:function(){var h='',t=this,s=t.settings,cp=t.classPrefix;h='<table id="'+t.id+'" cellpadding="0" cellspacing="0" class="'+cp+' '+cp+'Enabled'+(s['class']?(' '+s['class']):'')+'"><tbody><tr>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_text',href:'javascript:;','class':'mceText',onclick:"return false;",onmousedown:'return false;'},DOM.encode(t.settings.title))+'</td>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',tabindex:-1,href:'javascript:;','class':'mceOpen',onclick:"return false;",onmousedown:'return false;'},'<span></span>')+'</td>';h+='</tr></tbody></table>';return h;},showMenu:function(){var t=this,p1,p2,e=DOM.get(this.id),m;if(t.isDisabled()||t.items.length==0)return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}p1=DOM.getPos(this.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.keyboard_focus=t._focused;if(t.oldID)m.items[t.oldID].setSelected(0);each(t.items,function(o){if(o.value===t.selectedValue){m.items[o.id].setSelected(1);t.oldID=o.id;}});m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);DOM.addClass(t.id,t.classPrefix+'Selected');},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){DOM.removeClass(t.id,t.classPrefix+'Selected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':t.classPrefix+'Menu mceNoIcons',max_width:150,max_height:150});m.onHideMenu.add(t.hideMenu,t);m.add({title:t.settings.title,'class':'mceMenuItemTitle'}).setDisabled(1);each(t.items,function(o){o.id=DOM.uniqueId();o.onclick=function(){if(t.settings.onselect(o.value)!==false)t.select(o.value);};m.add(o);});t.onRenderMenu.dispatch(t,m);t.menu=m;},postRender:function(){var t=this,cp=t.classPrefix;Event.add(t.id,'click',t.showMenu,t);Event.add(t.id+'_text','focus',function(){t._focused=1;});Event.add(t.id+'_text','blur',function(){t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.addClass(t.id,cp+'Hover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.removeClass(t.id,cp+'Hover');});}t.onPostRender.dispatch(t,DOM.get(t.id));},destroy:function(){this.parent();Event.clear(this.id+'_text');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox',{NativeListBox:function(id,s){this.parent(id,s);this.classPrefix='mceNativeListBox';},setDisabled:function(s){DOM.get(this.id).disabled=s;},isDisabled:function(){return DOM.get(this.id).disabled;},select:function(v){var e=DOM.get(this.id),ol=e.options;v=''+(v||'');e.selectedIndex=0;each(ol,function(o,i){if(o.value==v){e.selectedIndex=i;return false;}});},add:function(n,v,a){var o,t=this;a=a||{};a.value=v;if(t.isRendered())DOM.add(DOM.get(this.id),'option',a,n);o={title:n,value:v,attribs:a};t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return DOM.get(this.id).options.length-1;},renderHTML:function(){var h,t=this;h=DOM.createHTML('option',{value:''},'-- '+t.settings.title+' --');each(t.items,function(it){h+=DOM.createHTML('option',{value:it.value},it.title);});h=DOM.createHTML('select',{id:t.id,'class':'mceNativeListBox'},h);return h;},postRender:function(){var t=this,ch;t.rendered=true;function onChange(e){var v=e.target.options[e.target.selectedIndex].value;t.onChange.dispatch(t,v);if(t.settings.onselect)t.settings.onselect(v);};Event.add(t.id,'change',onChange);Event.add(t.id,'keydown',function(e){var bf;Event.remove(t.id,'change',ch);bf=Event.add(t.id,'blur',function(){Event.add(t.id,'change',onChange);Event.remove(t.id,'blur',bf);});if(e.keyCode==13||e.keyCode==32){onChange(e);return Event.cancel(e);}});t.onPostRender.dispatch(t,DOM.get(t.id));}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button',{MenuButton:function(id,s){this.parent(id,s);this.onRenderMenu=new tinymce.util.Dispatcher(this);s.menu_container=s.menu_container||DOM.doc.body;},showMenu:function(){var t=this,p1,p2,e=DOM.get(t.id),m;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}p1=DOM.getPos(t.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.vp_offset_x=p2.x;m.settings.vp_offset_y=p2.y;m.settings.keyboard_focus=t._focused;m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);t.setState('Selected',1);},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':this.classPrefix+'Menu',icons:t.settings.icons});m.onHideMenu.add(t.hideMenu,t);t.onRenderMenu.dispatch(t,m);t.menu=m;},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){t.setState('Selected',0);Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}},postRender:function(){var t=this,s=t.settings;Event.add(t.id,'click',function(){if(!t.isDisabled()){if(s.onclick)s.onclick(t.value);t.showMenu();}});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton',{SplitButton:function(id,s){this.parent(id,s);this.classPrefix='mceSplitButton';},renderHTML:function(){var h,t=this,s=t.settings,h1;h='<tbody><tr>';if(s.image)h1=DOM.createHTML('img ',{src:s.image,'class':'mceAction '+s['class']});else h1=DOM.createHTML('span',{'class':'mceAction '+s['class']},'');h+='<td>'+DOM.createHTML('a',{id:t.id+'_action',href:'javascript:;','class':'mceAction '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h1=DOM.createHTML('span',{'class':'mceOpen '+s['class']});h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',href:'javascript:;','class':'mceOpen '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h+='</tr></tbody>';return DOM.createHTML('table',{id:t.id,'class':'mceSplitButton mceSplitButtonEnabled '+s['class'],cellpadding:'0',cellspacing:'0',onmousedown:'return false;',title:s.title},h);},postRender:function(){var t=this,s=t.settings;if(s.onclick){Event.add(t.id+'_action','click',function(){if(!t.isDisabled())s.onclick(t.value);});}Event.add(t.id+'_open','click',t.showMenu,t);Event.add(t.id+'_open','focus',function(){t._focused=1;});Event.add(t.id+'_open','blur',function(){t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.addClass(t.id,'mceSplitButtonHover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.removeClass(t.id,'mceSplitButtonHover');});}},destroy:function(){this.parent();Event.clear(this.id+'_action');Event.clear(this.id+'_open');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,is=tinymce.is,each=tinymce.each;tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton',{ColorSplitButton:function(id,s){var t=this;t.parent(id,s);t.settings=s=tinymce.extend({colors:'000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',grid_width:8,default_color:'#888888'},t.settings);t.value=s.default_color;},showMenu:function(){var t=this,r,p,e,p2;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}e=DOM.get(t.id);DOM.show(t.id+'_menu');DOM.addClass(e,'mceSplitButtonSelected');p2=DOM.getPos(e);DOM.setStyles(t.id+'_menu',{left:p2.x,top:p2.y+e.clientHeight,zIndex:200000});e=0;Event.add(DOM.doc,'mousedown',t.hideMenu,t);if(t._focused){t._keyHandler=Event.add(t.id+'_menu','keydown',function(e){if(e.keyCode==27)t.hideMenu();});DOM.select('a',t.id+'_menu')[0].focus();}},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceSplitButtonMenu');})){DOM.removeClass(t.id,'mceSplitButtonSelected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);Event.remove(t.id+'_menu','keydown',t._keyHandler);DOM.hide(t.id+'_menu');}},renderMenu:function(){var t=this,m,i=0,s=t.settings,n,tb,tr,w;w=DOM.add(s.menu_container,'div',{id:t.id+'_menu','class':s['menu_class']+' '+s['class'],style:'position:absolute;left:0;top:-1000px;'});m=DOM.add(w,'div',{'class':s['class']+' mceSplitButtonMenu'});DOM.add(m,'span',{'class':'mceMenuLine'});n=DOM.add(m,'table',{'class':'mceColorSplitMenu'});tb=DOM.add(n,'tbody');i=0;each(is(s.colors,'array')?s.colors:s.colors.split(','),function(c){c=c.replace(/^#/,'');if(!i--){tr=DOM.add(tb,'tr');i=s.grid_width-1;}n=DOM.add(tr,'td');n=DOM.add(n,'a',{href:'javascript:;',style:{backgroundColor:'#'+c},mce_color:'#'+c});});if(s.more_colors_func){n=DOM.add(tb,'tr');n=DOM.add(n,'td',{colspan:s.grid_width,'class':'mceMoreColors'});n=DOM.add(n,'a',{id:t.id+'_more',href:'javascript:;',onclick:'return false;','class':'mceMoreColors'},s.more_colors_title);Event.add(n,'click',function(e){s.more_colors_func.call(s.more_colors_scope||this);return Event.cancel(e);});}DOM.addClass(m,'mceColorSplitMenu');Event.add(t.id+'_menu','click',function(e){var c;e=e.target;if(e.nodeName=='A'&&(c=e.getAttribute('mce_color')))t.setColor(c);});return w;},setColor:function(c){var t=this;DOM.setStyle(t.id+'_preview','backgroundColor',c);t.value=c;t.hideMenu();t.settings.onselect(c);},postRender:function(){var t=this,id=t.id;t.parent();DOM.add(id+'_action','div',{id:id+'_preview','class':'mceColorPreview'});},destroy:function(){this.parent();Event.clear(this.id+'_menu');Event.clear(this.id+'_more');DOM.remove(this.id+'_menu');}});})();tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container',{renderHTML:function(){var t=this,h='',c,co,dom=tinymce.DOM,s=t.settings,i,pr,nx,cl;cl=t.controls;for(i=0;i<cl.length;i++){co=cl[i];pr=cl[i-1];nx=cl[i+1];if(i===0){c='mceToolbarStart';if(co.Button)c+=' mceToolbarStartButton';else if(co.SplitButton)c+=' mceToolbarStartSplitButton';else if(co.ListBox)c+=' mceToolbarStartListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));}if(pr&&co.ListBox){if(pr.Button||pr.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarEnd'},dom.createHTML('span',null,'<!-- IE -->'));}if(dom.stdMode)h+='<td style="position: relative">'+co.renderHTML()+'</td>';else h+='<td>'+co.renderHTML()+'</td>';if(nx&&co.ListBox){if(nx.Button||nx.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarStart'},dom.createHTML('span',null,'<!-- IE -->'));}}c='mceToolbarEnd';if(co.Button)c+=' mceToolbarEndButton';else if(co.SplitButton)c+=' mceToolbarEndSplitButton';else if(co.ListBox)c+=' mceToolbarEndListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));return dom.createHTML('table',{id:t.id,'class':'mceToolbar'+(s['class']?' '+s['class']:''),cellpadding:'0',cellspacing:'0',align:t.settings.align||''},'<tbody><tr>'+h+'</tr></tbody>');}});(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each;tinymce.create('tinymce.AddOnManager',{items:[],urls:{},lookup:{},onAdd:new Dispatcher(this),get:function(n){return this.lookup[n];},requireLangPack:function(n){var u,s;if(tinymce.EditorManager.settings){u=this.urls[n]+'/langs/'+tinymce.EditorManager.settings.language+'.js';s=tinymce.EditorManager.settings;if(s){if(!tinymce.dom.Event.domLoaded&&!s.strict_mode)tinymce.ScriptLoader.load(u);else tinymce.ScriptLoader.add(u);}}},add:function(id,o){this.items.push(o);this.lookup[id]=o;this.onAdd.dispatch(this,id,o);return o;},load:function(n,u,cb,s){var t=this;if(t.urls[n])return;if(u.indexOf('/')!=0&&u.indexOf('://')==-1)u=tinymce.baseURL+'/'+u;t.urls[n]=u.substring(0,u.lastIndexOf('/'));tinymce.ScriptLoader.add(u,cb,s);}});tinymce.PluginManager=new tinymce.AddOnManager();tinymce.ThemeManager=new tinymce.AddOnManager();}());(function(){var each=tinymce.each,extend=tinymce.extend,DOM=tinymce.DOM,Event=tinymce.dom.Event,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,explode=tinymce.explode;tinymce.create('static tinymce.EditorManager',{editors:{},i18n:{},activeEditor:null,preInit:function(){var t=this,lo=window.location;tinymce.documentBaseURL=lo.href.replace(/[\?#].*$/,'').replace(/[\/\\][^\/]+$/,'');if(!/[\/\\]$/.test(tinymce.documentBaseURL))tinymce.documentBaseURL+='/';tinymce.baseURL=new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);tinymce.EditorManager.baseURI=new tinymce.util.URI(tinymce.baseURL);if(tinymce.EditorManager.baseURI.host!=lo.hostname&&lo.hostname)document.domain=tinymce.relaxedDomain=lo.hostname.replace(/.*\.(.+\..+)$/,'$1');t.onBeforeUnload=new tinymce.util.Dispatcher(t);Event.add(window,'beforeunload',function(e){t.onBeforeUnload.dispatch(t,e);});},init:function(s){var t=this,pl,sl=tinymce.ScriptLoader,c;function execCallback(se,n,s){var f=se[n];if(!f)return;if(tinymce.is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);}return f.apply(s||this,Array.prototype.slice.call(arguments,2));};s=extend({theme:"simple",language:"en",strict_loading_mode:document.contentType=='application/xhtml+xml'},s);t.settings=s;if(!Event.domLoaded&&!s.strict_loading_mode){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme&&s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');if(s.plugins){pl=explode(s.plugins);if(tinymce.inArray(pl,'compat2x')!=-1)PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');each(pl,function(v){if(v&&v.charAt(0)!='-'&&!PluginManager.urls[v]){if(!tinymce.isWebKit&&v=='safari')return;PluginManager.load(v,'plugins/'+v+'/editor_plugin'+tinymce.suffix+'.js');}});}sl.loadQueue();}Event.add(document,'init',function(){var l,co;execCallback(s,'onpageload');if(s.browsers){l=false;each(explode(s.browsers),function(v){switch(v){case'ie':case'msie':if(tinymce.isIE)l=true;break;case'gecko':if(tinymce.isGecko)l=true;break;case'safari':case'webkit':if(tinymce.isWebKit)l=true;break;case'opera':if(tinymce.isOpera)l=true;break;}});if(!l)return;}switch(s.mode){case"exact":l=s.elements||'';if(l.length>0){each(explode(l),function(v){if(DOM.get(v))new tinymce.Editor(v,s).render(1);else{c=0;each(document.forms,function(f){each(f.elements,function(e){if(e.name===v){v='mce_editor_'+c;DOM.setAttrib(e,'id',v);new tinymce.Editor(v,s).render(1);}});});}});}break;case"textareas":case"specific_textareas":function hasClass(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className);};each(DOM.select('textarea'),function(v){if(s.editor_deselector&&hasClass(v,s.editor_deselector))return;if(!s.editor_selector||hasClass(v,s.editor_selector)){v.id=v.id||v.name;if(!v.id||t.get(v.id))v.id=DOM.uniqueId();new tinymce.Editor(v.id,s).render(1);}});break;}if(s.oninit){l=co=0;each(t.editors,function(ed){co++;if(!ed.initialized){ed.onInit.add(function(){l++;if(l==co)execCallback(s,'oninit');});}else l++;if(l==co)execCallback(s,'oninit');});}});},get:function(id){return this.editors[id];},getInstanceById:function(id){return this.get(id);},add:function(e){this.editors[e.id]=e;this._setActive(e);return e;},remove:function(e){var t=this;if(!t.editors[e.id])return null;delete t.editors[e.id];if(t.activeEditor==e){each(t.editors,function(e){t._setActive(e);return false;});}e.destroy();return e;},execCommand:function(c,u,v){var t=this,ed=t.get(v),w;switch(c){case"mceFocus":ed.focus();return true;case"mceAddEditor":case"mceAddControl":new tinymce.Editor(v,t.settings).render();return true;case"mceAddFrameControl":w=v.window;w.tinyMCE=tinyMCE;w.tinymce=tinymce;tinymce.DOM.doc=w.document;tinymce.DOM.win=w;ed=new tinymce.Editor(v.element_id,v);ed.render();if(tinymce.isIE){function clr(){ed.destroy();w.detachEvent('onunload',clr);w=w.tinyMCE=w.tinymce=null;};w.attachEvent('onunload',clr);}v.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":ed.remove();return true;case'mceToggleEditor':if(!ed){t.execCommand('mceAddControl',0,v);return true;}if(ed.isHidden())ed.show();else ed.hide();return true;}if(t.activeEditor)return t.activeEditor.execCommand(c,u,v);return false;},execInstanceCommand:function(id,c,u,v){var ed=this.get(id);if(ed)return ed.execCommand(c,u,v);return false;},triggerSave:function(){each(this.editors,function(e){e.save();});},addI18n:function(p,o){var lo,i18n=this.i18n;if(!tinymce.is(p,'string')){each(p,function(o,lc){each(o,function(o,g){each(o,function(o,k){if(g==='common')i18n[lc+'.'+k]=o;else i18n[lc+'.'+g+'.'+k]=o;});});});}else{each(o,function(o,k){i18n[p+'.'+k]=o;});}},_setActive:function(e){this.selectedInstance=this.activeEditor=e;}});tinymce.EditorManager.preInit();})();var tinyMCE=window.tinyMCE=tinymce.EditorManager;(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,Dispatcher=tinymce.util.Dispatcher;var each=tinymce.each,isGecko=tinymce.isGecko,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit;var is=tinymce.is,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,EditorManager=tinymce.EditorManager;var inArray=tinymce.inArray,grep=tinymce.grep,explode=tinymce.explode;tinymce.create('tinymce.Editor',{Editor:function(id,s){var t=this;t.id=t.editorId=id;t.execCommands={};t.queryStateCommands={};t.queryValueCommands={};t.plugins={};each(['onPreInit','onBeforeRenderUI','onPostRender','onInit','onRemove','onActivate','onDeactivate','onClick','onEvent','onMouseUp','onMouseDown','onDblClick','onKeyDown','onKeyUp','onKeyPress','onContextMenu','onSubmit','onReset','onPaste','onPreProcess','onPostProcess','onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent','onLoadContent','onSaveContent','onNodeChange','onChange','onBeforeExecCommand','onExecCommand','onUndo','onRedo','onVisualAid','onSetProgressState'],function(e){t[e]=new Dispatcher(t);});t.settings=s=extend({id:id,language:'en',docs_language:'en',theme:'simple',skin:'default',delta_width:0,delta_height:0,popup_css:'',plugins:'',document_base_url:tinymce.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',visual_table_class:'mceItemTable',visual:1,inline_styles:true,convert_fonts_to_spans:true,font_size_style_values:'xx-small,x-small,small,medium,large,x-large,xx-large',apply_source_formatting:1,directionality:'ltr',forced_root_block:'p',valid_elements:'@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p[align],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote,-table[border=0|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value|_value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:'30px'},s);t.documentBaseURI=new tinymce.util.URI(s.document_base_url||tinymce.documentBaseURL,{base_uri:tinyMCE.baseURI});t.baseURI=EditorManager.baseURI;t.execCallback('setup',t);},render:function(nst){var t=this,s=t.settings,id=t.id,sl=tinymce.ScriptLoader;if(!Event.domLoaded){Event.add(document,'init',function(){t.render();});return;}if(!nst){s.strict_loading_mode=1;tinyMCE.settings=s;}if(!t.getElement())return;if(s.strict_loading_mode){sl.settings.strict_mode=s.strict_loading_mode;tinymce.DOM.settings.strict=1;}if(!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&s.hidden_input&&DOM.getParent(id,'form'))DOM.insertAfter(DOM.create('input',{type:'hidden',name:id}),id);t.windowManager=new tinymce.WindowManager(t);if(s.encoding=='xml'){t.onGetContent.add(function(ed,o){if(o.get)o.content=DOM.encode(o.content);});}if(s.add_form_submit_trigger){t.onSubmit.addToTop(function(){if(t.initialized){t.save();t.isNotDirty=1;}});}if(s.add_unload_trigger){t._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(t.initialized&&!t.destroyed)t.save({format:'raw',no_events:true});});}tinymce.addUnload(t.destroy,t);if(s.submit_patch){t.onBeforeRenderUI.add(function(){var n=t.getElement().form;if(!n)return;if(n._mceOldSubmit)return;if(!n.submit.nodeType&&!n.submit.length){t.formElement=n;n._mceOldSubmit=n.submit;n.submit=function(){EditorManager.triggerSave();t.isNotDirty=1;return this._mceOldSubmit(this);};}n=null;});}function loadScripts(){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');each(explode(s.plugins),function(p){if(p&&p.charAt(0)!='-'&&!PluginManager.urls[p]){if(!isWebKit&&p=='safari')return;PluginManager.load(p,'plugins/'+p+'/editor_plugin'+tinymce.suffix+'.js');}});sl.loadQueue(function(){if(s.ask){function ask(){t.windowManager.confirm(t.getLang('edit_confirm'),function(s){if(s)t.init();else Event.remove(t.id,'focus',ask);});};Event.add(t.id,'focus',ask);return;}if(!t.removed)t.init();});};if(s.plugins.indexOf('compat2x')!=-1){PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');sl.loadQueue(loadScripts);}else loadScripts();},init:function(){var n,t=this,s=t.settings,w,h,e=t.getElement(),o,ti,u,bi,bc,re;EditorManager.add(t);s.theme=s.theme.replace(/-/,'');o=ThemeManager.get(s.theme);t.theme=new o();if(t.theme.init&&s.init_theme)t.theme.init(t,ThemeManager.urls[s.theme]||tinymce.documentBaseURL.replace(/\/$/,''));each(explode(s.plugins.replace(/\-/g,'')),function(p){var c=PluginManager.get(p),u=PluginManager.urls[p]||tinymce.documentBaseURL.replace(/\/$/,''),po;if(c){po=new c(t,u);t.plugins[p]=po;if(po.init)po.init(t,u);}});if(s.popup_css)s.popup_css=t.documentBaseURI.toAbsolute(s.popup_css);else s.popup_css=t.baseURI.toAbsolute("themes/"+s.theme+"/skins/"+s.skin+"/dialog.css");if(s.popup_css_add)s.popup_css+=','+t.documentBaseURI.toAbsolute(s.popup_css_add);t.controlManager=new tinymce.ControlManager(t);t.undoManager=new tinymce.UndoManager(t);t.undoManager.onAdd.add(function(um,l){return t.onChange.dispatch(t,l,um);});t.undoManager.onUndo.add(function(um,l){return t.onUndo.dispatch(t,l,um);});t.undoManager.onRedo.add(function(um,l){return t.onRedo.dispatch(t,l,um);});if(s.custom_undo_redo){t.onExecCommand.add(function(ed,cmd,ui,val,a){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!a||!a.skip_undo))t.undoManager.add();});}t.onExecCommand.add(function(ed,c){if(!/^(FontName|FontSize)$/.test(c))t.nodeChanged();});if(isGecko){function repaint(a,o){if(!o||!o.initial)t.execCommand('mceRepaint');};t.onUndo.add(repaint);t.onRedo.add(repaint);t.onSetContent.add(repaint);}t.onBeforeRenderUI.dispatch(t,t.controlManager);if(s.render_ui){w=s.width||e.style.width||e.clientWidth;h=s.height||e.style.height||e.clientHeight;t.orgDisplay=e.style.display;re=/^[0-9\.]+(|px)$/i;if(re.test(''+w))w=Math.max(parseInt(w)+(o.deltaWidth||0),100);if(re.test(''+h))h=Math.max(parseInt(h)+(o.deltaHeight||0),100);o=t.theme.renderUI({targetNode:e,width:w,height:h,deltaWidth:s.delta_width,deltaHeight:s.delta_height});t.editorContainer=o.editorContainer;}DOM.setStyles(o.sizeContainer||o.editorContainer,{width:w,height:h});h=(o.iframeHeight||h)+((h+'').indexOf('%')==-1?(o.deltaHeight||0):'');if(h<100)h=100;t.iframeHTML=s.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+t.documentBaseURI.getURI()+'"></base>';t.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(tinymce.relaxedDomain)t.iframeHTML+='<script type="text/javascript">document.domain = "'+tinymce.relaxedDomain+'";</script>';bi=s.body_id||'tinymce';if(bi.indexOf('=')!=-1){bi=t.getParam('body_id','','hash');bi=bi[t.id]||bi;}bc=s.body_class||'';if(bc.indexOf('=')!=-1){bc=t.getParam('body_class','','hash');bc=bc[t.id]||'';}t.iframeHTML+='</head><body id="'+bi+'" class="mceContentBody '+bc+'"></body></html>';if(tinymce.relaxedDomain){if(isIE)u='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';else if(tinymce.isOpera)u='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()';}n=DOM.add(o.iframeContainer,'iframe',{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:'0',style:{width:'100%',height:h}});t.contentAreaContainer=o.iframeContainer;DOM.get(o.editorContainer).style.display=t.orgDisplay;DOM.get(t.id).style.display='none';if(tinymce.isOldWebKit){Event.add(n,'load',t.setupIframe,t);n.src=tinymce.baseURL+'/plugins/safari/blank.htm';}else{if(!isIE||!tinymce.relaxedDomain)t.setupIframe();e=n=o=null;}},setupIframe:function(){var t=this,s=t.settings,e=DOM.get(t.id),d=t.getDoc(),h,b;if(!isIE||!tinymce.relaxedDomain){d.open();d.write(t.iframeHTML);d.close();}if(!isIE){try{d.designMode='On';}catch(ex){}}if(isIE){b=t.getBody();DOM.hide(b);b.contentEditable=true;DOM.show(b);}t.dom=new tinymce.DOM.DOMUtils(t.getDoc(),{keep_values:true,url_converter:t.convertURL,url_converter_scope:t,hex_colors:s.force_hex_style_colors,class_filter:s.class_filter,update_styles:1,fix_ie_paragraphs:1});t.serializer=new tinymce.dom.Serializer({entity_encoding:s.entity_encoding,entities:s.entities,valid_elements:s.verify_html===false?'*[*]':s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,invalid_elements:s.invalid_elements,fix_table_elements:s.fix_table_elements,fix_list_elements:s.fix_list_elements,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans,font_size_classes:s.font_size_classes,font_size_style_values:s.font_size_style_values,apply_source_formatting:s.apply_source_formatting,remove_linebreaks:s.remove_linebreaks,dom:t.dom});t.selection=new tinymce.dom.Selection(t.dom,t.getWin(),t.serializer);t.forceBlocks=new tinymce.ForceBlocks(t,{forced_root_block:s.forced_root_block});t.editorCommands=new tinymce.EditorCommands(t);t.serializer.onPreProcess.add(function(se,o){return t.onPreProcess.dispatch(t,o,se);});t.serializer.onPostProcess.add(function(se,o){return t.onPostProcess.dispatch(t,o,se);});t.onPreInit.dispatch(t);if(!s.gecko_spellcheck)t.getBody().spellcheck=0;t._addEvents();t.controlManager.onPostRender.dispatch(t,t.controlManager);t.onPostRender.dispatch(t);if(s.directionality)t.getBody().dir=s.directionality;if(s.nowrap)t.getBody().style.whiteSpace="nowrap";if(s.auto_resize)t.onNodeChange.add(t.resizeToContent,t);if(s.custom_elements){function handleCustom(ed,o){each(explode(s.custom_elements),function(v){var n;if(v.indexOf('~')===0){v=v.substring(1);n='span';}else n='div';o.content=o.content.replace(new RegExp('<('+v+')([^>]*)>','g'),'<'+n+' mce_name="$1"$2>');o.content=o.content.replace(new RegExp('</('+v+')>','g'),'</'+n+'>');});};t.onBeforeSetContent.add(handleCustom);t.onPostProcess.add(function(ed,o){if(o.set)handleCustom(ed,o)});}if(s.handle_node_change_callback){t.onNodeChange.add(function(ed,cm,n){t.execCallback('handle_node_change_callback',t.id,n,-1,-1,true,t.selection.isCollapsed());});}if(s.save_callback){t.onSaveContent.add(function(ed,o){var h=t.execCallback('save_callback',t.id,o.content,t.getBody());if(h)o.content=h;});}if(s.onchange_callback){t.onChange.add(function(ed,l){t.execCallback('onchange_callback',t,l);});}if(s.convert_newlines_to_brs){t.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/\r?\n/g,'<br />');});}if(s.fix_nesting&&isIE){t.onBeforeSetContent.add(function(ed,o){o.content=t._fixNesting(o.content);});}if(s.preformatted){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^\s*<pre.*?>/,'');o.content=o.content.replace(/<\/pre>\s*$/,'');if(o.set)o.content='<pre class="mceItemHidden">'+o.content+'</pre>';});}if(s.verify_css_classes){t.serializer.attribValueFilter=function(n,v){var s,cl;if(n=='class'){if(!t.classesRE){cl=t.dom.getClasses();if(cl.length>0){s='';each(cl,function(o){s+=(s?'|':'')+o['class'];});t.classesRE=new RegExp('('+s+')','gi');}}return!t.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v)||t.classesRE.test(v)?v:'';}return v;};}if(s.convert_fonts_to_spans)t._convertFonts();if(s.inline_styles)t._convertInlineElements();if(s.cleanup_callback){t.onBeforeSetContent.add(function(ed,o){o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);});t.onPreProcess.add(function(ed,o){if(o.set)t.execCallback('cleanup_callback','insert_to_editor_dom',o.node,o);if(o.get)t.execCallback('cleanup_callback','get_from_editor_dom',o.node,o);});t.onPostProcess.add(function(ed,o){if(o.set)o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);if(o.get)o.content=t.execCallback('cleanup_callback','get_from_editor',o.content,o);});}if(s.save_callback){t.onGetContent.add(function(ed,o){if(o.save)o.content=t.execCallback('save_callback',t.id,o.content,t.getBody());});}if(s.handle_event_callback){t.onEvent.add(function(ed,e,o){if(t.execCallback('handle_event_callback',e,ed,o)===false)Event.cancel(e);});}t.onSetContent.add(function(){t.addVisual(t.getBody());});if(s.padd_empty_editor){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^<p>( |#160;|\s|\u00a0)<\/p>$/,'');});}if(isGecko){try{d.designMode='Off';d.designMode='On';}catch(ex){}}setTimeout(function(){if(t.removed)return;t.load({initial:true,format:(s.cleanup_on_startup?'html':'raw')});t.startContent=t.getContent({format:'raw'});t.undoManager.add({initial:true});t.initialized=true;t.onInit.dispatch(t);t.execCallback('setupcontent_callback',t.id,t.getBody(),t.getDoc());t.execCallback('init_instance_callback',t);t.focus(true);t.nodeChanged({initial:1});if(s.content_css){tinymce.each(explode(s.content_css),function(u){t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));});}if(s.auto_focus){setTimeout(function(){var ed=EditorManager.get(s.auto_focus);ed.selection.select(ed.getBody(),1);ed.selection.collapse(1);ed.getWin().focus();},100);}},1);e=null;},focus:function(sf){var oed,t=this;if(!sf){t.getWin().focus();}if(EditorManager.activeEditor!=t){if((oed=EditorManager.activeEditor)!=null)oed.onDeactivate.dispatch(oed,t);t.onActivate.dispatch(t,oed);}EditorManager._setActive(t);},execCallback:function(n){var t=this,f=t.settings[n],s;if(!f)return;if(t.callbackLookup&&(s=t.callbackLookup[n])){f=s.func;s=s.scope;}if(is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);t.callbackLookup=t.callbackLookup||{};t.callbackLookup[n]={func:f,scope:s};}return f.apply(s||t,Array.prototype.slice.call(arguments,1));},translate:function(s){var c=this.settings.language,i18n=EditorManager.i18n;if(!s)return'';return i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return i18n[c+'.'+b]||'{#'+b+'}';});},getLang:function(n,dv){return EditorManager.i18n[this.settings.language+'.'+n]||(is(dv)?dv:'{#'+n+'}');},getParam:function(n,dv,ty){var tr=tinymce.trim,v=is(this.settings[n])?this.settings[n]:dv,o;if(ty==='hash'){o={};if(is(v,'string')){each(v.indexOf('=')>0?v.split(/[;,](?![^=;,]*(?:[;,]|$))/):v.split(','),function(v){v=v.split('=');if(v.length>1)o[tr(v[0])]=tr(v[1]);else o[tr(v[0])]=tr(v);});}else o=v;return o;}return v;},nodeChanged:function(o){var t=this,s=t.selection,n=s.getNode()||t.getBody();if(t.initialized){t.onNodeChange.dispatch(t,o?o.controlManager||t.controlManager:t.controlManager,isIE&&n.ownerDocument!=t.getDoc()?t.getBody():n,s.isCollapsed(),o);}},addButton:function(n,s){var t=this;t.buttons=t.buttons||{};t.buttons[n]=s;},addCommand:function(n,f,s){this.execCommands[n]={func:f,scope:s||this};},addQueryStateHandler:function(n,f,s){this.queryStateCommands[n]={func:f,scope:s||this};},addQueryValueHandler:function(n,f,s){this.queryValueCommands[n]={func:f,scope:s||this};},addShortcut:function(pa,desc,cmd_func,sc){var t=this,c;if(!t.settings.custom_shortcuts)return false;t.shortcuts=t.shortcuts||{};if(is(cmd_func,'string')){c=cmd_func;cmd_func=function(){t.execCommand(c,false,null);};}if(is(cmd_func,'object')){c=cmd_func;cmd_func=function(){t.execCommand(c[0],c[1],c[2]);};}each(explode(pa),function(pa){var o={func:cmd_func,scope:sc||this,desc:desc,alt:false,ctrl:false,shift:false};each(explode(pa,'+'),function(v){switch(v){case'alt':case'ctrl':case'shift':o[v]=true;break;default:o.charCode=v.charCodeAt(0);o.keyCode=v.toUpperCase().charCodeAt(0);}});t.shortcuts[(o.ctrl?'ctrl':'')+','+(o.alt?'alt':'')+','+(o.shift?'shift':'')+','+o.keyCode]=o;});return true;},execCommand:function(cmd,ui,val,a){var t=this,s=0,o;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd)&&(!a||!a.skip_focus))t.focus();o={};t.onBeforeExecCommand.dispatch(t,cmd,ui,val,o);if(o.terminate)return false;if(t.execCallback('execcommand_callback',t.id,t.selection.getNode(),cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(o=t.execCommands[cmd]){s=o.func.call(o.scope,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);return s;}each(t.plugins,function(p){if(p.execCommand&&p.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);s=1;return false;}});if(s)return true;if(t.theme.execCommand&&t.theme.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(t.editorCommands.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}t.getDoc().execCommand(cmd,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);},queryCommandState:function(c){var t=this,o;if(t._isHidden())return;if(o=t.queryStateCommands[c])return o.func.call(o.scope);o=t.editorCommands.queryCommandState(c);if(o!==-1)return o;try{return this.getDoc().queryCommandState(c);}catch(ex){}},queryCommandValue:function(c){var t=this,o;if(t._isHidden())return;if(o=t.queryValueCommands[c])return o.func.call(o.scope);o=t.editorCommands.queryCommandValue(c);if(is(o))return o;try{return this.getDoc().queryCommandValue(c);}catch(ex){}},show:function(){var t=this;DOM.show(t.getContainer());DOM.hide(t.id);t.load();},hide:function(){var t=this,d=t.getDoc();if(isIE&&d)d.execCommand('SelectAll');t.save();DOM.hide(t.getContainer());DOM.setStyle(t.id,'display',t.orgDisplay);},isHidden:function(){return!DOM.isHidden(this.id);},setProgressState:function(b,ti,o){this.onSetProgressState.dispatch(this,b,ti,o);return b;},resizeToContent:function(){var t=this;DOM.setStyle(t.id+"_ifr",'height',t.getBody().scrollHeight);},load:function(o){var t=this,e=t.getElement(),h;o=o||{};o.load=true;h=t.setContent(is(e.value)?e.value:e.innerHTML,o);o.element=e;if(!o.no_events)t.onLoadContent.dispatch(t,o);o.element=e=null;return h;},save:function(o){var t=this,e=t.getElement(),h,f;if(!t.initialized)return;o=o||{};o.save=true;o.element=e;h=o.content=t.getContent(o);if(!o.no_events)t.onSaveContent.dispatch(t,o);h=o.content;if(!/TEXTAREA|INPUT/i.test(e.nodeName)){e.innerHTML=h;if(f=DOM.getParent(t.id,'form')){each(f.elements,function(e){if(e.name==t.id){e.value=h;return false;}});}}else e.value=h;o.element=e=null;return h;},setContent:function(h,o){var t=this;o=o||{};o.format=o.format||'html';o.set=true;o.content=h;if(!o.no_events)t.onBeforeSetContent.dispatch(t,o);if(!tinymce.isIE&&(h.length===0||/^\s+$/.test(h))){o.content=t.dom.setHTML(t.getBody(),'<br mce_bogus="1" />',1);o.format='raw';}o.content=t.dom.setHTML(t.getBody(),tinymce.trim(o.content));if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;o.content=t.dom.setHTML(t.getBody(),t.serializer.serialize(t.getBody(),o));}if(!o.no_events)t.onSetContent.dispatch(t,o);return o.content;},getContent:function(o){var t=this,h;o=o||{};o.format=o.format||'html';o.get=true;if(!o.no_events)t.onBeforeGetContent.dispatch(t,o);if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;h=t.serializer.serialize(t.getBody(),o);}else h=t.getBody().innerHTML;h=h.replace(/^\s*|\s*$/g,'');o={content:h};t.onGetContent.dispatch(t,o);return o.content;},isDirty:function(){var t=this;return tinymce.trim(t.startContent)!=tinymce.trim(t.getContent({format:'raw',no_events:1}))&&!t.isNotDirty;},getContainer:function(){var t=this;if(!t.container)t.container=DOM.get(t.editorContainer||t.id+'_parent');return t.container;},getContentAreaContainer:function(){return this.contentAreaContainer;},getElement:function(){return DOM.get(this.settings.content_element||this.id);},getWin:function(){var t=this,e;if(!t.contentWindow){e=DOM.get(t.id+"_ifr");if(e)t.contentWindow=e.contentWindow;}return t.contentWindow;},getDoc:function(){var t=this,w;if(!t.contentDocument){w=t.getWin();if(w)t.contentDocument=w.document;}return t.contentDocument;},getBody:function(){return this.bodyElement||this.getDoc().body;},convertURL:function(u,n,e){var t=this,s=t.settings;if(s.urlconverter_callback)return t.execCallback('urlconverter_callback',u,e,true,n);if(!s.convert_urls||(e&&e.nodeName=='LINK')||u.indexOf('file:')===0)return u;if(s.relative_urls)return t.documentBaseURI.toRelative(u);u=t.documentBaseURI.toAbsolute(u,s.remove_script_host);return u;},addVisual:function(e){var t=this,s=t.settings;e=e||t.getBody();if(!is(t.hasVisual))t.hasVisual=s.visual;each(t.dom.select('table,a',e),function(e){var v;switch(e.nodeName){case'TABLE':v=t.dom.getAttrib(e,'border');if(!v||v=='0'){if(t.hasVisual)t.dom.addClass(e,s.visual_table_class);else t.dom.removeClass(e,s.visual_table_class);}return;case'A':v=t.dom.getAttrib(e,'name');if(v){if(t.hasVisual)t.dom.addClass(e,'mceItemAnchor');else t.dom.removeClass(e,'mceItemAnchor');}return;}});t.onVisualAid.dispatch(t,e,t.hasVisual);},remove:function(){var t=this,e=t.getContainer();t.removed=1;t.hide();t.execCallback('remove_instance_callback',t);t.onRemove.dispatch(t);t.onExecCommand.listeners=[];EditorManager.remove(t);DOM.remove(e);},destroy:function(s){var t=this;if(t.destroyed)return;if(!s){tinymce.removeUnload(t.destroy);tinyMCE.onBeforeUnload.remove(t._beforeUnload);if(t.theme.destroy)t.theme.destroy();t.controlManager.destroy();t.selection.destroy();t.dom.destroy();Event.clear(t.getWin());Event.clear(t.getDoc());Event.clear(t.getBody());Event.clear(t.formElement);}if(t.formElement){t.formElement.submit=t.formElement._mceOldSubmit;t.formElement._mceOldSubmit=null;}t.contentAreaContainer=t.formElement=t.container=t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null;if(t.selection)t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null;t.destroyed=1;},_addEvents:function(){var t=this,i,s=t.settings,lo={mouseup:'onMouseUp',mousedown:'onMouseDown',click:'onClick',keyup:'onKeyUp',keydown:'onKeyDown',keypress:'onKeyPress',submit:'onSubmit',reset:'onReset',contextmenu:'onContextMenu',dblclick:'onDblClick',paste:'onPaste'};function eventHandler(e,o){var ty=e.type;if(t.removed)return;if(t.onEvent.dispatch(t,e,o)!==false){t[lo[e.fakeType||e.type]].dispatch(t,e,o);}};each(lo,function(v,k){switch(k){case'contextmenu':if(tinymce.isOpera){Event.add(t.getDoc(),'mousedown',function(e){if(e.ctrlKey){e.fakeType='contextmenu';eventHandler(e);}});}else Event.add(t.getDoc(),k,eventHandler);break;case'paste':Event.add(t.getBody(),k,function(e){var tx,h,el,r;if(e.clipboardData)tx=e.clipboardData.getData('text/plain');else if(tinymce.isIE)tx=t.getWin().clipboardData.getData('Text');eventHandler(e,{text:tx,html:h});});break;case'submit':case'reset':Event.add(t.getElement().form||DOM.getParent(t.id,'form'),k,eventHandler);break;default:Event.add(s.content_editable?t.getBody():t.getDoc(),k,eventHandler);}});Event.add(s.content_editable?t.getBody():(isGecko?t.getDoc():t.getWin()),'focus',function(e){t.focus(true);});if(tinymce.isGecko){Event.add(t.getDoc(),'DOMNodeInserted',function(e){var v;e=e.target;if(e.nodeType===1&&e.nodeName==='IMG'&&(v=e.getAttribute('mce_src')))e.src=t.documentBaseURI.toAbsolute(v);});}if(isGecko){function setOpts(){var t=this,d=t.getDoc(),s=t.settings;if(isGecko){if(t._isHidden()){try{if(!s.content_editable)d.designMode='On';}catch(ex){}}try{d.execCommand("styleWithCSS",0,false);}catch(ex){if(!t._isHidden())d.execCommand("useCSS",0,true);}if(!s.table_inline_editing)try{d.execCommand('enableInlineTableEditing',false,false);}catch(ex){}if(!s.object_resizing)try{d.execCommand('enableObjectResizing',false,false);}catch(ex){}}};t.onBeforeExecCommand.add(setOpts);t.onMouseDown.add(setOpts);}t.onMouseUp.add(t.nodeChanged);t.onClick.add(t.nodeChanged);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.keyCode==46||e.keyCode==8||e.ctrlKey)t.nodeChanged();});t.onReset.add(function(){t.setContent(t.startContent,{format:'raw'});});if(t.getParam('tab_focus')){function tabCancel(ed,e){if(e.keyCode===9)return Event.cancel(e);};function tabHandler(ed,e){var x,i,f,el,v;function find(d){f=DOM.getParent(ed.id,'form');el=f.elements;if(f){each(el,function(e,i){if(e.id==ed.id){x=i;return false;}});if(d>0){for(i=x+1;i<el.length;i++){if(el[i].type!='hidden')return el[i];}}else{for(i=x-1;i>=0;i--){if(el[i].type!='hidden')return el[i];}}}return null;};if(e.keyCode===9){v=explode(ed.getParam('tab_focus'));if(v.length==1){v[1]=v[0];v[0]=':prev';}if(e.shiftKey){if(v[0]==':prev')el=find(-1);else el=DOM.get(v[0]);}else{if(v[1]==':next')el=find(1);else el=DOM.get(v[1]);}if(el){if(ed=EditorManager.get(el.id||el.name))ed.focus();else window.setTimeout(function(){window.focus();el.focus();},10);return Event.cancel(e);}}};t.onKeyUp.add(tabCancel);if(isGecko){t.onKeyPress.add(tabHandler);t.onKeyDown.add(tabCancel);}else t.onKeyDown.add(tabHandler);}if(s.custom_shortcuts){if(s.custom_undo_redo_keyboard_shortcuts){t.addShortcut('ctrl+z',t.getLang('undo_desc'),'Undo');t.addShortcut('ctrl+y',t.getLang('redo_desc'),'Redo');}if(isGecko){t.addShortcut('ctrl+b',t.getLang('bold_desc'),'Bold');t.addShortcut('ctrl+i',t.getLang('italic_desc'),'Italic');t.addShortcut('ctrl+u',t.getLang('underline_desc'),'Underline');}for(i=1;i<=6;i++)t.addShortcut('ctrl+'+i,'',['FormatBlock',false,'<h'+i+'>']);t.addShortcut('ctrl+7','',['FormatBlock',false,'<p>']);t.addShortcut('ctrl+8','',['FormatBlock',false,'<div>']);t.addShortcut('ctrl+9','',['FormatBlock',false,'<address>']);function find(e){var v=null;if(!e.altKey&&!e.ctrlKey&&!e.metaKey)return v;each(t.shortcuts,function(o){if(o.ctrl!=e.ctrlKey&&(!tinymce.isMac||o.ctrl==e.metaKey))return;if(o.alt!=e.altKey)return;if(o.shift!=e.shiftKey)return;if(e.keyCode==o.keyCode||(e.charCode&&e.charCode==o.charCode)){v=o;return false;}});return v;};t.onKeyUp.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyPress.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyDown.add(function(ed,e){var o=find(e);if(o){o.func.call(o.scope);return Event.cancel(e);}});}if(tinymce.isIE){Event.add(t.getDoc(),'controlselect',function(e){var re=t.resizeInfo,cb;e=e.target;e.removeAttribute('mce_style');if(e.nodeName!=='IMG')return;if(re)Event.remove(re.node,re.ev,re.cb);if(!t.dom.hasClass(e,'mceItemNoResize')){ev='resizeend';cb=Event.add(e,ev,function(e){var v;e=e.target;if(v=t.dom.getStyle(e,'width')){t.dom.setAttrib(e,'width',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'width','');}if(v=t.dom.getStyle(e,'height')){t.dom.setAttrib(e,'height',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'height','');}});}else{ev='resizestart';cb=Event.add(e,'resizestart',Event.cancel,Event);}re=t.resizeInfo={node:e,ev:ev,cb:cb};});t.onKeyDown.add(function(ed,e){switch(e.keyCode){case 8:if(t.selection.getRng().item){t.selection.getRng().item(0).removeNode();return Event.cancel(e);}}});}if(tinymce.isOpera){t.onClick.add(function(ed,e){Event.prevent(e);});}if(s.custom_undo_redo){function addUndo(){t.undoManager.typing=0;t.undoManager.add();};if(tinymce.isIE){Event.add(t.getWin(),'blur',function(e){var n;if(t.selection){n=t.selection.getNode();if(!t.removed&&n.ownerDocument&&n.ownerDocument!=t.getDoc())addUndo();}});}else{Event.add(t.getDoc(),'blur',function(){if(t.selection&&!t.removed)addUndo();});}t.onMouseDown.add(addUndo);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.ctrlKey){t.undoManager.typing=0;t.undoManager.add();}});t.onKeyDown.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45){if(t.undoManager.typing){t.undoManager.add();t.undoManager.typing=0;}return;}if(!t.undoManager.typing){t.undoManager.add();t.undoManager.typing=1;}});}},_convertInlineElements:function(){var t=this,s=t.settings,dom=t.dom,v,e,na,st,sp;function convert(ed,o){if(!s.inline_styles)return;if(o.get){each(t.dom.select('table,u,strike',o.node),function(n){switch(n.nodeName){case'TABLE':if(v=dom.getAttrib(n,'height')){dom.setStyle(n,'height',v);dom.setAttrib(n,'height','');}break;case'U':case'STRIKE':sp=dom.create('span',{style:dom.getAttrib(n,'style')});sp.style.textDecoration=n.nodeName=='U'?'underline':'line-through';dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);break;}});}else if(o.set){each(t.dom.select('table,span',o.node),function(n){if(n.nodeName=='TABLE'){if(v=dom.getStyle(n,'height'))dom.setAttrib(n,'height',v.replace(/[^0-9%]+/g,''));}else{if(n.style.textDecoration=='underline')na='u';else if(n.style.textDecoration=='line-through')na='strike';else na='';if(na){n.style.textDecoration='';dom.setAttrib(n,'mce_style','');e=dom.create(na,{style:dom.getAttrib(n,'style')});dom.replace(e,n,1);}}});}};t.onPreProcess.add(convert);if(!s.cleanup_on_startup){t.onInit.add(function(){convert(t,{node:t.getBody(),set:1});});}},_convertFonts:function(){var t=this,s=t.settings,dom=t.dom,fz,fzn,sl,cl;if(!s.inline_styles)return;fz=[8,10,12,14,18,24,36];fzn=['xx-small','x-small','small','medium','large','x-large','xx-large'];if(sl=s.font_size_style_values)sl=explode(sl);if(cl=s.font_size_classes)cl=explode(cl);function convertToFonts(no){var n,f,nl,x,i,v,st;if(tinymce.isWebKit||!s.inline_styles)return;nl=t.dom.select('span',no);for(x=nl.length-1;x>=0;x--){n=nl[x];f=dom.create('font',{color:dom.toHex(dom.getStyle(n,'color')),face:dom.getStyle(n,'fontFamily'),style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});st=f.style;if(st.color||st.fontFamily){st.color=st.fontFamily='';dom.setAttrib(f,'mce_style','');}if(sl){i=inArray(sl,dom.getStyle(n,'fontSize'));if(i!=-1){dom.setAttrib(f,'size',''+(i+1||1));f.style.fontSize='';}}else if(cl){i=inArray(cl,dom.getAttrib(n,'class'));v=dom.getStyle(n,'fontSize');if(i==-1&&v.indexOf('pt')>0)i=inArray(fz,parseInt(v));if(i==-1)i=inArray(fzn,v);if(i!=-1){dom.setAttrib(f,'size',''+(i+1||1));f.style.fontSize='';}}if(f.color||f.face||f.size){f.style.fontFamily='';dom.setAttrib(f,'mce_style','');dom.replace(f,n,1);}f=n=null;}};t.onSetContent.add(function(ed,o){convertToFonts(ed.getBody());});t.onPreProcess.add(function(ed,o){var n,sp,nl,x;if(!s.inline_styles)return;if(o.get){nl=t.dom.select('font',o.node);for(x=nl.length-1;x>=0;x--){n=nl[x];sp=dom.create('span',{style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});dom.setStyles(sp,{fontFamily:dom.getAttrib(n,'face'),color:dom.getAttrib(n,'color'),backgroundColor:n.style.backgroundColor});if(n.size){if(sl)dom.setStyle(sp,'fontSize',sl[parseInt(n.size)-1]);else dom.setAttrib(sp,'class',cl[parseInt(n.size)-1]);}dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);}}});},_isHidden:function(){var s;if(!isGecko)return 0;s=this.selection.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},_fixNesting:function(s){var d=[],i;s=s.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(a,b,c){var e;if(b==='/'){if(!d.length)return'';if(c!==d[d.length-1].tag){for(i=d.length-1;i>=0;i--){if(d[i].tag===c){d[i].close=1;break;}}return'';}else{d.pop();if(d.length&&d[d.length-1].close){a=a+'</'+d[d.length-1].tag+'>';d.pop();}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(c))return a;if(/\/>$/.test(a))return a;d.push({tag:c});}return a;});for(i=d.length-1;i>=0;i--)s+='</'+d[i].tag+'>';return s;}});})();(function(){var each=tinymce.each,isIE=tinymce.isIE,isGecko=tinymce.isGecko,isOpera=tinymce.isOpera,isWebKit=tinymce.isWebKit;tinymce.create('tinymce.EditorCommands',{EditorCommands:function(ed){this.editor=ed;},execCommand:function(cmd,ui,val){var t=this,ed=t.editor,f;switch(cmd){case'Cut':case'Copy':case'Paste':try{ed.getDoc().execCommand(cmd,ui,val);}catch(ex){if(isGecko){ed.windowManager.confirm(ed.getLang('clipboard_msg'),function(s){if(s)window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');});}else ed.windowManager.alert(ed.getLang('clipboard_no_support'));}return true;case'mceResetDesignMode':case'mceBeginUndoLevel':return true;case'unlink':t.UnLink();return true;case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':t.mceJustify(cmd,cmd.substring(7).toLowerCase());return true;case'mceEndUndoLevel':case'mceAddUndoLevel':ed.undoManager.add();return true;default:f=this[cmd];if(f){f.call(this,ui,val);return true;}}return false;},Indent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){d.setStyle(e,'paddingLeft',(parseInt(e.style.paddingLeft||0)+iv)+iu);});return;}ed.getDoc().execCommand('Indent',false,null);if(isIE){d.getParent(s.getNode(),function(n){if(n.nodeName=='BLOCKQUOTE'){n.dir=n.style.cssText='';}});}},Outdent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,v,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){v=Math.max(0,parseInt(e.style.paddingLeft||0)-iv);d.setStyle(e,'paddingLeft',v?v+iu:'');});return;}ed.getDoc().execCommand('Outdent',false,null);},mceSetAttribute:function(u,v){var ed=this.editor,d=ed.dom,e;if(e=d.getParent(ed.selection.getNode(),d.isBlock))d.setAttrib(e,v.name,v.value);},mceSetContent:function(u,v){this.editor.setContent(v);},mceToggleVisualAid:function(){var ed=this.editor;ed.hasVisual=!ed.hasVisual;ed.addVisual();},mceReplaceContent:function(u,v){var s=this.editor.selection;s.setContent(v.replace(/\{\$selection\}/g,s.getContent({format:'text'})));},mceInsertLink:function(u,v){var ed=this.editor,e=ed.dom.getParent(ed.selection.getNode(),'A');if(tinymce.is(v,'string'))v={href:v};function set(e){each(v,function(v,k){ed.dom.setAttrib(e,k,v);});};if(!e){ed.execCommand('CreateLink',false,'javascript:mctmp(0);');each(ed.dom.select('a'),function(e){if(e.href=='javascript:mctmp(0);')set(e);});}else{if(v.href)set(e);else ed.dom.remove(e,1);}},UnLink:function(){var ed=this.editor,s=ed.selection;if(s.isCollapsed())s.select(s.getNode());ed.getDoc().execCommand('unlink',false,null);s.collapse(0);},FontName:function(u,v){var t=this,ed=t.editor,s=ed.selection,e;if(!v){if(s.isCollapsed())s.select(s.getNode());t.RemoveFormat();}else ed.getDoc().execCommand('FontName',false,v);},queryCommandValue:function(c){var f=this['queryValue'+c];if(f)return f.call(this,c);return false;},queryCommandState:function(cmd){var f;switch(cmd){case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':return this.queryStateJustify(cmd,cmd.substring(7).toLowerCase());default:if(f=this['queryState'+cmd])return f.call(this,cmd);}return-1;},_queryState:function(c){try{return this.editor.getDoc().queryCommandState(c);}catch(ex){}},_queryVal:function(c){try{return this.editor.getDoc().queryCommandValue(c);}catch(ex){}},queryValueFontSize:function(){var ed=this.editor,v=0,p;if(isOpera||isWebKit){if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.size;return v;}return this._queryVal('FontSize');},queryValueFontName:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.face;if(!v)v=this._queryVal('FontName');return v;},mceJustify:function(c,v){var ed=this.editor,se=ed.selection,n=se.getNode(),nn=n.nodeName,bl,nb,dom=ed.dom,rm;if(ed.settings.inline_styles&&this.queryStateJustify(c,v))rm=1;bl=dom.getParent(n,ed.dom.isBlock);if(nn=='IMG'){if(v=='full')return;if(rm){if(v=='center')dom.setStyle(n.parentNode,'textAlign','');dom.setStyle(n,'float','');this.mceRepaint();return;}if(v=='center'){if(/^(TD|TH)$/.test(bl.nodeName))bl=0;if(!bl||bl.childNodes.length>1){nb=dom.create('p');nb.appendChild(n.cloneNode(false));if(bl)dom.insertAfter(nb,bl);else dom.insertAfter(nb,n);dom.remove(n);n=nb.firstChild;bl=nb;}dom.setStyle(bl,'textAlign',v);dom.setStyle(n,'float','');}else{dom.setStyle(n,'float',v);dom.setStyle(n.parentNode,'textAlign','');}this.mceRepaint();return;}if(ed.settings.inline_styles&&ed.settings.forced_root_block){if(rm)v='';each(this._getSelectedBlocks(dom.getParent(se.getStart(),dom.isBlock),dom.getParent(se.getEnd(),dom.isBlock)),function(e){dom.setAttrib(e,'align','');dom.setStyle(e,'textAlign',v=='full'?'justify':v);});return;}else if(!rm)ed.getDoc().execCommand(c,false,null);if(ed.settings.inline_styles){if(rm){dom.getParent(ed.selection.getNode(),function(n){if(n.style&&n.style.textAlign)dom.setStyle(n,'textAlign','');});return;}each(dom.select('*'),function(n){var v=n.align;if(v){if(v=='full')v='justify';dom.setStyle(n,'textAlign',v);dom.setAttrib(n,'align','');}});}},mceSetCSSClass:function(u,v){this.mceSetStyleInfo(0,{command:'setattrib',name:'class',value:v});},getSelectedElement:function(){var t=this,ed=t.editor,dom=ed.dom,se=ed.selection,r=se.getRng(),r1,r2,sc,ec,so,eo,e,sp,ep,re;if(se.isCollapsed()||r.item)return se.getNode();re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(isIE){r1=r.duplicate();r1.collapse(true);sc=r1.parentElement();r2=r.duplicate();r2.collapse(false);ec=r2.parentElement();if(sc!=ec){r1.move('character',1);sc=r1.parentElement();}if(sc==ec){r1=r.duplicate();r1.moveToElementText(sc);if(r1.compareEndPoints('StartToStart',r)==0&&r1.compareEndPoints('EndToEnd',r)==0)return re&&re.test(sc.nodeName)?null:sc;}}else{function getParent(n){return dom.getParent(n,function(n){return n.nodeType==1;});};sc=r.startContainer;ec=r.endContainer;so=r.startOffset;eo=r.endOffset;if(!r.collapsed){if(sc==ec){if(so-eo<2){if(sc.hasChildNodes()){sp=sc.childNodes[so];return re&&re.test(sp.nodeName)?null:sp;}}}}if(sc.nodeType!=3||ec.nodeType!=3)return null;if(so==0){sp=getParent(sc);if(sp&&sp.firstChild!=sc)sp=null;}if(so==sc.nodeValue.length){e=sc.nextSibling;if(e&&e.nodeType==1)sp=sc.nextSibling;}if(eo==0){e=ec.previousSibling;if(e&&e.nodeType==1)ep=e;}if(eo==ec.nodeValue.length){ep=getParent(ec);if(ep&&ep.lastChild!=ec)ep=null;}if(sp==ep)return re&&sp&&re.test(sp.nodeName)?null:sp;}return null;},InsertHorizontalRule:function(){if(isGecko||isIE)this.editor.selection.setContent('<hr />');else this.editor.getDoc().execCommand('InsertHorizontalRule',false,'');},RemoveFormat:function(){var t=this,ed=t.editor,s=ed.selection,b;if(isWebKit)s.setContent(s.getContent({format:'raw'}).replace(/(<(span|b|i|strong|em|strike) [^>]+>|<(span|b|i|strong|em|strike)>|<\/(span|b|i|strong|em|strike)>|)/g,''),{format:'raw'});else ed.getDoc().execCommand('RemoveFormat',false,null);t.mceSetStyleInfo(0,{command:'removeformat'});ed.addVisual();},mceSetStyleInfo:function(u,v){var t=this,ed=t.editor,d=ed.getDoc(),dom=ed.dom,e,b,s=ed.selection,nn=v.wrapper||'span',b=s.getBookmark(),re;function set(n,e){if(n.nodeType==1){switch(v.command){case'setattrib':return dom.setAttrib(n,v.name,v.value);case'setstyle':return dom.setStyle(n,v.name,v.value);case'removeformat':return dom.setAttrib(n,'class','');}}};re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(e=t.getSelectedElement())set(e,1);else{d.execCommand('FontName',false,'__');each(isWebKit?dom.select('span'):dom.select('font'),function(n){var sp,e;if(dom.getAttrib(n,'face')=='__'||n.style.fontFamily==='__'){sp=dom.create(nn,{mce_new:'1'});set(sp);each(n.childNodes,function(n){sp.appendChild(n.cloneNode(true));});dom.replace(sp,n);}});}each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!dom.getAttrib(n,'mce_new')){p=dom.getParent(n,function(n){return n.nodeType==1&&dom.getAttrib(n,'mce_new');});if(p)dom.remove(n,1);}});each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!p||!dom.getAttrib(n,'mce_new'))return;if(p.nodeName==nn.toUpperCase()&&p.childNodes.length==1)return dom.remove(p,1);if(n.nodeType==1&&(!re||!re.test(p.nodeName))&&p.childNodes.length==1){set(p);dom.setAttrib(n,'class','');}});each(dom.select(nn).reverse(),function(n){if(dom.getAttrib(n,'mce_new')||(dom.getAttribs(n).length<=1&&n.className==='')){if(!dom.getAttrib(n,'class')&&!dom.getAttrib(n,'style'))return dom.remove(n,1);dom.setAttrib(n,'mce_new','');}});s.moveToBookmark(b);},queryStateJustify:function(c,v){var ed=this.editor,n=ed.selection.getNode(),dom=ed.dom;if(n&&n.nodeName=='IMG'){if(dom.getStyle(n,'float')==v)return 1;return n.parentNode.style.textAlign==v;}n=dom.getParent(ed.selection.getStart(),function(n){return n.nodeType==1&&n.style.textAlign;});if(v=='full')v='justify';if(ed.settings.inline_styles)return(n&&n.style.textAlign==v);return this._queryState(c);},HiliteColor:function(ui,val){var t=this,ed=t.editor,d=ed.getDoc();function set(s){if(!isGecko)return;try{d.execCommand("styleWithCSS",0,s);}catch(ex){d.execCommand("useCSS",0,!s);}};if(isGecko||isOpera){set(true);d.execCommand('hilitecolor',false,val);set(false);}else d.execCommand('BackColor',false,val);},Undo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.undo();ed.nodeChanged();}else ed.getDoc().execCommand('Undo',false,null);},Redo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.redo();ed.nodeChanged();}else ed.getDoc().execCommand('Redo',false,null);},FormatBlock:function(ui,val){var t=this,ed=t.editor;val=ed.settings.forced_root_block?(val||'<p>'):val;if(/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(ed.selection.getNode().nodeName))t.mceRemoveNode();if(val.indexOf('<')==-1)val='<'+val+'>';if(tinymce.isGecko)val=val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi,'$1');ed.getDoc().execCommand('FormatBlock',false,val);},mceCleanup:function(){var ed=this.editor,s=ed.selection,b=s.getBookmark();ed.setContent(ed.getContent());s.moveToBookmark(b);},mceRemoveNode:function(ui,val){var ed=this.editor,s=ed.selection,b,n=val||s.getNode();if(n==ed.getBody())return;b=s.getBookmark();ed.dom.remove(n,1);s.moveToBookmark(b);ed.nodeChanged();},mceSelectNodeDepth:function(ui,val){var ed=this.editor,s=ed.selection,c=0;ed.dom.getParent(s.getNode(),function(n){if(n.nodeType==1&&c++==val){s.select(n);ed.nodeChanged();return false;}},ed.getBody());},mceSelectNode:function(u,v){this.editor.selection.select(v);},mceInsertContent:function(ui,val){this.editor.selection.setContent(val);},mceInsertRawHTML:function(ui,val){var ed=this.editor;ed.selection.setContent('tiny_mce_marker');ed.setContent(ed.getContent().replace(/tiny_mce_marker/g,val));},mceRepaint:function(){var s,b,e=this.editor;if(tinymce.isGecko){try{s=e.selection;b=s.getBookmark(true);if(s.getSel())s.getSel().selectAllChildren(e.getBody());s.collapse(true);s.moveToBookmark(b);}catch(ex){}}},queryStateUnderline:function(){var ed=this.editor,n;if(n&&n.nodeName=='A')return false;return this._queryState('Underline');},queryStateOutdent:function(){var ed=this.editor,n;if(ed.settings.inline_styles){if((n=ed.dom.getParent(ed.selection.getStart(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;if((n=ed.dom.getParent(ed.selection.getEnd(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;}else return!!ed.dom.getParent(ed.selection.getNode(),'BLOCKQUOTE');return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList();},queryStateInsertUnorderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'UL');},queryStateInsertOrderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'OL');},queryStatemceBlockQuote:function(){return!!this.editor.dom.getParent(this.editor.selection.getStart(),function(n){return n.nodeName==='BLOCKQUOTE';});},mceBlockQuote:function(){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,sb,eb,n,bm,bq,r,bq2,i,nl;function getBQ(e){return dom.getParent(e,function(n){return n.nodeName==='BLOCKQUOTE';});};sb=dom.getParent(s.getStart(),dom.isBlock);eb=dom.getParent(s.getEnd(),dom.isBlock);if(bq=getBQ(sb)){if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();if(getBQ(eb)){bq2=bq.cloneNode(false);while(n=eb.nextSibling)bq2.appendChild(n.parentNode.removeChild(n));}if(bq2)dom.insertAfter(bq2,bq);nl=t._getSelectedBlocks(sb,eb);for(i=nl.length-1;i>=0;i--){dom.insertAfter(nl[i],bq);}if(/^\s*$/.test(bq.innerHTML))dom.remove(bq,1);if(bq2&&/^\s*$/.test(bq2.innerHTML))dom.remove(bq2,1);if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(0);if(dom.getParent(s.getStart(),dom.isBlock)!=sb){r=s.getRng();r.move('character',-1);r.select();}}}else t.editor.selection.moveToBookmark(bm);return;}if(isIE&&!sb&&!eb){t.editor.getDoc().execCommand('Indent');n=getBQ(s.getNode());n.style.margin=n.dir='';return;}if(!sb||!eb)return;if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();each(t._getSelectedBlocks(getBQ(s.getStart()),getBQ(s.getEnd())),function(e){if(e.nodeName=='BLOCKQUOTE'&&!bq){bq=e;return;}if(!bq){bq=dom.create('blockquote');e.parentNode.insertBefore(bq,e);}if(e.nodeName=='BLOCKQUOTE'&&bq){n=e.firstChild;while(n){bq.appendChild(n.cloneNode(true));n=n.nextSibling;}dom.remove(e);return;}bq.appendChild(dom.remove(e));});if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(1);}}else s.moveToBookmark(bm);},_getSelectedBlocks:function(st,en){var ed=this.editor,dom=ed.dom,s=ed.selection,sb,eb,n,bl=[];sb=dom.getParent(st||s.getStart(),dom.isBlock);eb=dom.getParent(en||s.getEnd(),dom.isBlock);if(sb)bl.push(sb);if(sb&&eb&&sb!=eb){n=sb;while((n=n.nextSibling)&&n!=eb){if(dom.isBlock(n))bl.push(n);}}if(eb&&sb!=eb)bl.push(eb);return bl;}});})();tinymce.create('tinymce.UndoManager',{index:0,data:null,typing:0,UndoManager:function(ed){var t=this,Dispatcher=tinymce.util.Dispatcher;t.editor=ed;t.data=[];t.onAdd=new Dispatcher(this);t.onUndo=new Dispatcher(this);t.onRedo=new Dispatcher(this);},add:function(l){var t=this,i,ed=t.editor,b,s=ed.settings,la;l=l||{};l.content=l.content||ed.getContent({format:'raw',no_events:1});l.content=l.content.replace(/^\s*|\s*$/g,'');la=t.data[t.index>0?t.index-1:0];if(!l.initial&&la&&l.content==la.content)return null;if(s.custom_undo_redo_levels){if(t.data.length>s.custom_undo_redo_levels){for(i=0;i<t.data.length-1;i++)t.data[i]=t.data[i+1];t.data.length--;t.index=t.data.length;}}if(s.custom_undo_redo_restore_selection&&!l.initial)l.bookmark=b=l.bookmark||ed.selection.getBookmark();if(t.index<t.data.length&&t.data[t.index].initial)t.index++;t.data.length=t.index+1;t.data[t.index++]=l;if(l.initial)t.index=0;if(t.data.length==2&&t.data[0].initial)t.data[0].bookmark=b;t.onAdd.dispatch(t,l);ed.isNotDirty=0;return l;},undo:function(){var t=this,ed=t.editor,l=l,i;if(t.typing){t.add();t.typing=0;}if(t.index>0){if(t.index==t.data.length&&t.index>1){i=t.index;t.typing=0;if(!t.add())t.index=i;--t.index;}l=t.data[--t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onUndo.dispatch(t,l);}return l;},redo:function(){var t=this,ed=t.editor,l=null;if(t.index<t.data.length-1){l=t.data[++t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onRedo.dispatch(t,l);}return l;},clear:function(){var t=this;t.data=[];t.index=0;t.typing=0;t.add({initial:true});},hasUndo:function(){return this.index!=0||this.typing;},hasRedo:function(){return this.index<this.data.length-1;}});(function(){var Event,isIE,isGecko,isOpera,each,extend;Event=tinymce.dom.Event;isIE=tinymce.isIE;isGecko=tinymce.isGecko;isOpera=tinymce.isOpera;each=tinymce.each;extend=tinymce.extend;tinymce.create('tinymce.ForceBlocks',{ForceBlocks:function(ed){var t=this,s=ed.settings,elm;t.editor=ed;t.dom=ed.dom;elm=(s.forced_root_block||'p').toLowerCase();s.element=elm.toUpperCase();ed.onPreInit.add(t.setup,t);t.reOpera=new RegExp('(\\u00a0| | )<\/'+elm+'>','gi');t.rePadd=new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR1=new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR2=new RegExp('<p( )([^>]+)>( | )<\\\/p>|<p>( | )<\\\/p>'.replace(/p/g,elm),'gi');t.reBR2Nbsp=new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');t.reTrailBr=new RegExp('\\s*<br \\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');function padd(ed,o){if(isOpera)o.content=o.content.replace(t.reOpera,'</'+elm+'>');o.content=o.content.replace(t.rePadd,'<'+elm+'$1$2$3$4$5$6>\u00a0</'+elm+'>');if(!isIE&&!isOpera&&o.set){o.content=o.content.replace(t.reNbsp2BR1,'<'+elm+'$1$2><br /></'+elm+'>');o.content=o.content.replace(t.reNbsp2BR2,'<'+elm+'$1$2><br /></'+elm+'>');}else{o.content=o.content.replace(t.reBR2Nbsp,'<'+elm+'$1$2>\u00a0</'+elm+'>');o.content=o.content.replace(t.reTrailBr,'</'+elm+'>');}};ed.onBeforeSetContent.add(padd);ed.onPostProcess.add(padd);if(s.forced_root_block){ed.onInit.add(t.forceRoots,t);ed.onSetContent.add(t.forceRoots,t);ed.onBeforeGetContent.add(t.forceRoots,t);}},setup:function(){var t=this,ed=t.editor,s=ed.settings;if(s.forced_root_block){ed.onKeyUp.add(t.forceRoots,t);ed.onPreProcess.add(t.forceRoots,t);}if(s.force_br_newlines){if(isIE){ed.onKeyPress.add(function(ed,e){var n,s=ed.selection;if(e.keyCode==13&&s.getNode().nodeName!='LI'){s.setContent('<br id="__" /> ',{format:'raw'});n=ed.dom.get('__');n.removeAttribute('id');s.select(n);s.collapse();return Event.cancel(e);}});}return;}if(!isIE&&s.force_p_newlines){ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&!e.shiftKey){if(!t.insertPara(e))Event.cancel(e);}});if(isGecko){ed.onKeyDown.add(function(ed,e){if((e.keyCode==8||e.keyCode==46)&&!e.shiftKey)t.backspaceDelete(e,e.keyCode==8);});}}function ren(rn,na){var ne=ed.dom.create(na);each(rn.attributes,function(a){if(a.specified&&a.nodeValue)ne.setAttribute(a.nodeName.toLowerCase(),a.nodeValue);});each(rn.childNodes,function(n){ne.appendChild(n.cloneNode(true));});rn.parentNode.replaceChild(ne,rn);return ne;};if(isIE&&s.element!='P'){ed.onKeyPress.add(function(ed,e){t.lastElm=ed.selection.getNode().nodeName;});ed.onKeyUp.add(function(ed,e){var bl,sel=ed.selection,n=sel.getNode(),b=ed.getBody();if(b.childNodes.length===1&&n.nodeName=='P'){n=ren(n,s.element);sel.select(n);sel.collapse();ed.nodeChanged();}else if(e.keyCode==13&&!e.shiftKey&&t.lastElm!='P'){bl=ed.dom.getParent(n,'P');if(bl){ren(bl,s.element);ed.nodeChanged();}}});}},find:function(n,t,s){var ed=this.editor,w=ed.getDoc().createTreeWalker(n,4,null,false),c=-1;while(n=w.nextNode()){c++;if(t==0&&n==s)return c;if(t==1&&c==s)return n;}return-1;},forceRoots:function(ed,e){var t=this,ed=t.editor,b=ed.getBody(),d=ed.getDoc(),se=ed.selection,s=se.getSel(),r=se.getRng(),si=-2,ei,so,eo,tr,c=-0xFFFFFF;var nx,bl,bp,sp,le,nl=b.childNodes,i;if(e&&e.keyCode==13)return true;for(i=nl.length-1;i>=0;i--){nx=nl[i];if(nx.nodeType==3||(!t.dom.isBlock(nx)&&nx.nodeType!=8)){if(!bl){if(nx.nodeType!=3||/[^\s]/g.test(nx.nodeValue)){if(si==-2&&r){if(!isIE){so=r.startOffset;eo=r.endOffset;si=t.find(b,0,r.startContainer);ei=t.find(b,0,r.endContainer);}else{tr=d.body.createTextRange();tr.moveToElementText(b);tr.collapse(1);bp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(1);sp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(0);le=(tr.move('character',c)*-1)-sp;si=sp-bp;ei=le;}}bl=ed.dom.create(ed.settings.forced_root_block);bl.appendChild(nx.cloneNode(1));nx.parentNode.replaceChild(bl,nx);}}else{if(bl.hasChildNodes())bl.insertBefore(nx,bl.firstChild);else bl.appendChild(nx);}}else bl=null;}if(si!=-2){if(!isIE){bl=d.getElementsByTagName(ed.settings.element)[0];r=d.createRange();if(si!=-1)r.setStart(t.find(b,1,si),so);else r.setStart(bl,0);if(ei!=-1)r.setEnd(t.find(b,1,ei),eo);else r.setEnd(bl,0);if(s){s.removeAllRanges();s.addRange(r);}}else{try{r=s.createRange();r.moveToElementText(b);r.collapse(1);r.moveStart('character',si);r.moveEnd('character',ei);r.select();}catch(ex){}}}},getParentBlock:function(n){var d=this.dom;return d.getParent(n,d.isBlock);},insertPara:function(e){var t=this,ed=t.editor,d=ed.getDoc(),se=ed.settings,s=ed.selection.getSel(),r=s.getRangeAt(0),b=d.body;var rb,ra,dir,sn,so,en,eo,sb,eb,bn,bef,aft,sc,ec,n,vp=ed.dom.getViewPort(ed.getWin()),y,ch;function isEmpty(n){n=n.innerHTML;n=n.replace(/<(img|hr|table)/gi,'-');n=n.replace(/<[^>]+>/g,'');return n.replace(/[ \t\r\n]+/g,'')=='';};rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(true);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(true);dir=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;sn=dir?s.anchorNode:s.focusNode;so=dir?s.anchorOffset:s.focusOffset;en=dir?s.focusNode:s.anchorNode;eo=dir?s.focusOffset:s.anchorOffset;if(sn==b&&en==b&&b.firstChild&&ed.dom.isBlock(b.firstChild)){sn=en=sn.firstChild;so=eo=0;rb=d.createRange();rb.setStart(sn,0);ra=d.createRange();ra.setStart(en,0);}sn=sn.nodeName=="HTML"?d.body:sn;sn=sn.nodeName=="BODY"?sn.firstChild:sn;en=en.nodeName=="HTML"?d.body:en;en=en.nodeName=="BODY"?en.firstChild:en;sb=t.getParentBlock(sn);eb=t.getParentBlock(en);bn=sb?sb.nodeName:se.element;if(t.dom.getParent(sb,function(n){return/OL|UL|PRE/.test(n.nodeName);}))return true;if(sb&&(sb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(sb.style.position))){bn=se.element;sb=null;}if(eb&&(eb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(eb.style.position))){bn=se.element;eb=null;}if(/(TD|TABLE|TH|CAPTION)/.test(bn)||(sb&&bn=="DIV"&&/left|right/gi.test(sb.style.cssFloat))){bn=se.element;sb=eb=null;}bef=(sb&&sb.nodeName==bn)?sb.cloneNode(0):ed.dom.create(bn);aft=(eb&&eb.nodeName==bn)?eb.cloneNode(0):ed.dom.create(bn);aft.removeAttribute('id');if(/^(H[1-6])$/.test(bn)&&sn.nodeValue&&so==sn.nodeValue.length)aft=ed.dom.create(se.element);n=sc=sn;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;sc=n;}while((n=n.previousSibling?n.previousSibling:n.parentNode));n=ec=en;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;ec=n;}while((n=n.nextSibling?n.nextSibling:n.parentNode));if(sc.nodeName==bn)rb.setStart(sc,0);else rb.setStartBefore(sc);rb.setEnd(sn,so);bef.appendChild(rb.cloneContents()||d.createTextNode(''));try{ra.setEndAfter(ec);}catch(ex){}ra.setStart(en,eo);aft.appendChild(ra.cloneContents()||d.createTextNode(''));r=d.createRange();if(!sc.previousSibling&&sc.parentNode.nodeName==bn){r.setStartBefore(sc.parentNode);}else{if(rb.startContainer.nodeName==bn&&rb.startOffset==0)r.setStartBefore(rb.startContainer);else r.setStart(rb.startContainer,rb.startOffset);}if(!ec.nextSibling&&ec.parentNode.nodeName==bn)r.setEndAfter(ec.parentNode);else r.setEnd(ra.endContainer,ra.endOffset);r.deleteContents();if(isOpera)ed.getWin().scrollTo(0,vp.y);if(bef.firstChild&&bef.firstChild.nodeName==bn)bef.innerHTML=bef.firstChild.innerHTML;if(aft.firstChild&&aft.firstChild.nodeName==bn)aft.innerHTML=aft.firstChild.innerHTML;if(isEmpty(bef))bef.innerHTML='<br />';if(isEmpty(aft))aft.innerHTML=isOpera?' ':'<br />';if(isOpera){r.insertNode(bef);r.insertNode(aft);}else{r.insertNode(aft);r.insertNode(bef);}aft.normalize();bef.normalize();r=d.createRange();r.selectNodeContents(aft);r.collapse(1);s.removeAllRanges();s.addRange(r);y=ed.dom.getPos(aft).y;ch=aft.clientHeight;if(y<vp.y||y+ch>vp.y+vp.h){ed.getWin().scrollTo(0,y<vp.y?y:y-vp.h+ch);}return false;},backspaceDelete:function(e,bs){var t=this,ed=t.editor,b=ed.getBody(),n,se=ed.selection,r=se.getRng(),sc=r.startContainer,n,w,tn;if(sc&&ed.dom.isBlock(sc)&&!/^(TD|TH)$/.test(sc.nodeName)&&bs){if(sc.childNodes.length==0||(sc.childNodes.length==1&&sc.firstChild.nodeName=='BR')){n=sc;while((n=n.previousSibling)&&!ed.dom.isBlock(n));if(n){if(sc!=b.firstChild){w=ed.dom.doc.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(tn=w.nextNode())n=tn;r=ed.getDoc().createRange();r.setStart(n,n.nodeValue?n.nodeValue.length:0);r.setEnd(n,n.nodeValue?n.nodeValue.length:0);se.setRng(r);ed.dom.remove(sc);}return Event.cancel(e);}}}function handler(e){e=e.target;if(e&&e.parentNode&&e.nodeName=='BR'&&(n=t.getParentBlock(e))){Event.remove(b,'DOMNodeInserted',handler);if(e.previousSibling||e.nextSibling)ed.dom.remove(e);}};Event._add(b,'DOMNodeInserted',handler);window.setTimeout(function(){Event._remove(b,'DOMNodeInserted',handler);},1);}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,extend=tinymce.extend;tinymce.create('tinymce.ControlManager',{ControlManager:function(ed,s){var t=this,i;s=s||{};t.editor=ed;t.controls={};t.onAdd=new tinymce.util.Dispatcher(t);t.onPostRender=new tinymce.util.Dispatcher(t);t.prefix=s.prefix||ed.id+'_';t._cls={};t.onPostRender.add(function(){each(t.controls,function(c){c.postRender();});});},get:function(id){return this.controls[this.prefix+id]||this.controls[id];},setActive:function(id,s){var c=null;if(c=this.get(id))c.setActive(s);return c;},setDisabled:function(id,s){var c=null;if(c=this.get(id))c.setDisabled(s);return c;},add:function(c){var t=this;if(c){t.controls[c.id]=c;t.onAdd.dispatch(c,t);}return c;},createControl:function(n){var c,t=this,ed=t.editor;each(ed.plugins,function(p){if(p.createControl){c=p.createControl(n,t);if(c)return false;}});switch(n){case"|":case"separator":return t.createSeparator();}if(!c&&ed.buttons&&(c=ed.buttons[n]))return t.createButton(n,c);return t.add(c);},createDropMenu:function(id,s,cc){var t=this,ed=t.editor,c,bm,v,cls;s=extend({'class':'mceDropDown',constrain:ed.settings.constrain_menus},s);s['class']=s['class']+' '+ed.getParam('skin')+'Skin';if(v=ed.getParam('skin_variant'))s['class']+=' '+ed.getParam('skin')+'Skin'+v.substring(0,1).toUpperCase()+v.substring(1);id=t.prefix+id;cls=cc||t._cls.dropmenu||tinymce.ui.DropMenu;c=t.controls[id]=new cls(id,s);c.onAddItem.add(function(c,o){var s=o.settings;s.title=ed.getLang(s.title,s.title);if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,s.value);};}});ed.onRemove.add(function(){c.destroy();});if(tinymce.isIE){c.onShowMenu.add(function(){var s=ed.selection,n=s.getNode();if(n.nodeName=='IMG')bm=s.getBookmark();else bm=0;});c.onHideMenu.add(function(){if(bm)ed.selection.moveToBookmark(bm);});}return t.add(c);},createListBox:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;if(ed.settings.use_native_selects)c=new tinymce.ui.NativeListBox(id,s);else{cls=cc||t._cls.listbox||tinymce.ui.ListBox;c=new cls(id,s);}t.controls[id]=c;if(tinymce.isWebKit){c.onPostRender.add(function(c,n){Event.add(n,'mousedown',function(){ed.bookmark=ed.selection.getBookmark('simple');});Event.add(n,'focus',function(){ed.selection.moveToBookmark(ed.bookmark);ed.bookmark=null;});});}if(c.hideMenu)ed.onMouseDown.add(c.hideMenu,c);return t.add(c);},createButton:function(id,s,cc){var t=this,ed=t.editor,o,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick&&!s.menu_button){s.onclick=function(){ed.execCommand(s.cmd,s.ui||false,s.value);};}s=extend({title:s.title,'class':'mce_'+id,unavailable_prefix:ed.getLang('unavailable',''),scope:s.scope,control_manager:t},s);id=t.prefix+id;if(s.menu_button){cls=cc||t._cls.menubutton||tinymce.ui.MenuButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);}else{cls=t._cls.button||tinymce.ui.Button;c=new cls(id,s);}return t.add(c);},createMenuButton:function(id,s){s=s||{};s.menu_button=1;return this.createButton(id,s);},createSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;cls=cc||t._cls.splitbutton||tinymce.ui.SplitButton;c=t.add(new cls(id,s));ed.onMouseDown.add(c.hideMenu,c);return c;},createColorSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,'menu_class':ed.getParam('skin')+'Skin',scope:s.scope,more_colors_title:ed.getLang('more_colors')},s);id=t.prefix+id;cls=cc||t._cls.colorsplitbutton||tinymce.ui.ColorSplitButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);ed.onRemove.add(function(){c.destroy();});return t.add(c);},createToolbar:function(id,s,cc){var c,t=this,cls;id=t.prefix+id;cls=cc||t._cls.toolbar||tinymce.ui.Toolbar;c=new cls(id,s);if(t.get(id))return null;return t.add(c);},createSeparator:function(cc){var cls=cc||this._cls.separator||tinymce.ui.Separator;return new cls();},setControlType:function(n,c){return this._cls[n.toLowerCase()]=c;},destroy:function(){each(this.controls,function(c){c.destroy();});this.controls=null;}});})();(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each,isIE=tinymce.isIE,isOpera=tinymce.isOpera;tinymce.create('tinymce.WindowManager',{WindowManager:function(ed){var t=this;t.editor=ed;t.onOpen=new Dispatcher(t);t.onClose=new Dispatcher(t);t.params={};t.features={};},open:function(s,p){var t=this,f='',x,y,mo=t.editor.settings.dialog_type=='modal',w,sw,sh,vp=tinymce.DOM.getViewPort(),u;s=s||{};p=p||{};sw=isOpera?vp.w:screen.width;sh=isOpera?vp.h:screen.height;s.name=s.name||'mc_'+new Date().getTime();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240);s.resizable=true;s.left=s.left||parseInt(sw/ 2.0) - (s.width /2.0);s.top=s.top||parseInt(sh/ 2.0) - (s.height /2.0);p.inline=false;p.mce_width=s.width;p.mce_height=s.height;p.mce_auto_focus=s.auto_focus;if(mo){if(isIE){s.center=true;s.help=false;s.dialogWidth=s.width+'px';s.dialogHeight=s.height+'px';s.scroll=s.scrollbars||false;}else s.modal=s.alwaysRaised=s.dialog=s.centerscreen=s.dependent=true;}each(s,function(v,k){if(tinymce.is(v,'boolean'))v=v?'yes':'no';if(!/^(name|url)$/.test(k)){if(isIE&&mo)f+=(f?';':'')+k+':'+v;else f+=(f?',':'')+k+'='+v;}});t.features=s;t.params=p;t.onOpen.dispatch(t,s,p);u=s.url||s.file;if(tinymce.relaxedDomain)u+=(u.indexOf('?')==-1?'?':'&')+'mce_rdomain='+tinymce.relaxedDomain;try{if(isIE&&mo){w=1;window.showModalDialog(s.url||s.file,window,f);}else w=window.open(u,s.name,f);}catch(ex){}if(!w)alert(t.editor.getLang('popup_blocked'));},close:function(w){w.close();this.onClose.dispatch(this);},createInstance:function(cl,a,b,c,d,e){var f=tinymce.resolve(cl);return new f(a,b,c,d,e);},confirm:function(t,cb,s){cb.call(s||this,confirm(this._decode(this.editor.getLang(t,t))));},alert:function(tx,cb,s){var t=this;alert(t._decode(t.editor.getLang(tx,tx)));if(cb)cb.call(s||t);},_decode:function(s){return tinymce.DOM.decode(s).replace(/\\n/g,'\n');}});}());
\ No newline at end of file
-// Some global instances, this will be filled later
-var tinyMCE = null, tinyMCELang = null;
-
-function TinyMCE_Popup() {
-};
-
-TinyMCE_Popup.prototype = {
- findWin : function(w) {
- var c;
-
- // Check parents
- c = w;
- while (c && (c = c.parent) != null) {
- if (typeof(c.tinyMCE) != "undefined")
- return c;
- }
-
- // Check openers
- c = w;
- while (c && (c = c.opener) != null) {
- if (typeof(c.tinyMCE) != "undefined")
- return c;
- }
-
- // Try top
- if (typeof(top.tinyMCE) != "undefined")
- return top;
-
- return null;
- },
-
- init : function() {
- var win = window.opener ? window.opener : window.dialogArguments, c;
- var inst, re, title, divElm;
-
- if (!win)
- win = this.findWin(window);
-
- if (!win) {
- alert("tinyMCE object reference not found from popup.");
- return;
- }
-
- window.opener = win;
- this.windowOpener = win;
- this.onLoadEval = "";
-
- // Setup parent references
- tinyMCE = win.tinyMCE;
- tinyMCELang = win.tinyMCELang;
-
- inst = tinyMCE.selectedInstance;
- this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false;
- this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true);
-
- if (this.isWindow)
- window.focus();
-
- // Store selection
- if (this.storeSelection)
- inst.selectionBookmark = inst.selection.getBookmark(true);
-
- // Setup dir
- if (tinyMCELang.lang_dir)
- document.dir = tinyMCELang.lang_dir;
-
- // Setup title
- re = new RegExp('{|\\\$|}', 'g');
- title = document.title.replace(re, "");
- if (typeof(tinyMCELang[title]) != "undefined") {
- divElm = document.createElement("div");
- divElm.innerHTML = tinyMCELang[title];
- document.title = divElm.innerHTML;
-
- if (typeof(tinyMCE.setWindowTitle) != 'undefined')
- tinyMCE.setWindowTitle(window, divElm.innerHTML);
- }
-
- // Output Popup CSS class
- document.write('<link href="' + tinyMCE.getParam("popups_css") + '" rel="stylesheet" type="text/css">');
-
- if (tinyMCE.getParam("popups_css_add")) {
- c = tinyMCE.getParam("popups_css_add");
-
- // Is relative
- if (c.indexOf('://') == -1 && c.charAt(0) != '/')
- c = tinyMCE.documentBasePath + "/" + c;
-
- document.write('<link href="' + c + '" rel="stylesheet" type="text/css">');
- }
-
- tinyMCE.addEvent(window, "load", this.onLoad);
- },
-
- onLoad : function() {
- var dir, i, elms, body = document.body;
-
- if (tinyMCE.getWindowArg('mce_replacevariables', true))
- body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs);
-
- dir = tinyMCE.selectedInstance.settings.directionality;
- if (dir == "rtl" && document.forms && document.forms.length > 0) {
- elms = document.forms[0].elements;
- for (i=0; i<elms.length; i++) {
- if ((elms[i].type == "text" || elms[i].type == "textarea") && elms[i].getAttribute("dir") != "ltr")
- elms[i].dir = dir;
- }
- }
-
- if (body.style.display == 'none')
- body.style.display = 'block';
-
- // Execute real onload (Opera fix)
- if (tinyMCEPopup.onLoadEval !== '')
- eval(tinyMCEPopup.onLoadEval);
- },
-
- executeOnLoad : function(str) {
- if (tinyMCE.isOpera && parseFloat(opera.version()) < 9.5)
- this.onLoadEval = str;
- else
- eval(str);
- },
-
- resizeToInnerSize : function() {
- var i, doc, body, oldMargin, wrapper, iframe, nodes, dx, dy;
-
- // Netscape 7.1 workaround
- if (this.isWindow && tinyMCE.isNS71) {
- window.resizeBy(0, 10);
- return;
- }
-
- if (this.isWindow) {
- doc = document;
- body = doc.body;
-
- if (body.style.display == 'none')
- body.style.display = 'block';
-
- // Remove margin
- oldMargin = body.style.margin;
- body.style.margin = '0';
-
- // Create wrapper
- wrapper = doc.createElement("div");
- wrapper.id = 'mcBodyWrapper';
- wrapper.style.display = 'none';
- wrapper.style.margin = '0';
-
- // Wrap body elements
- nodes = doc.body.childNodes;
- for (i=nodes.length-1; i>=0; i--) {
- if (wrapper.hasChildNodes())
- wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild);
- else
- wrapper.appendChild(nodes[i].cloneNode(true));
-
- nodes[i].parentNode.removeChild(nodes[i]);
- }
-
- // Add wrapper
- doc.body.appendChild(wrapper);
-
- // Create iframe
- iframe = document.createElement("iframe");
- iframe.id = "mcWinIframe";
- iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings.default_document;
- iframe.width = "100%";
- iframe.height = "100%";
- iframe.style.margin = '0';
-
- // Add iframe
- doc.body.appendChild(iframe);
-
- // Measure iframe
- iframe = document.getElementById('mcWinIframe');
- dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth;
- dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight;
-
- // Resize window
- // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy);
- window.resizeBy(dx, dy);
-
- // Hide iframe and show wrapper
- body.style.margin = oldMargin;
- iframe.style.display = 'none';
- wrapper.style.display = 'block';
- }
- },
-
- resizeToContent : function() {
- var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
- var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
- var elm, width, height, x, y, dx, dy;
-
- if (isOpera)
- return;
-
- if (isMSIE) {
- try { window.resizeTo(10, 10); } catch (e) {}
-
- elm = document.body;
- width = elm.offsetWidth;
- height = elm.offsetHeight;
- dx = (elm.scrollWidth - width) + 4;
- dy = elm.scrollHeight - height;
-
- try { window.resizeBy(dx, dy); } catch (e) {}
- } else {
- window.scrollBy(1000, 1000);
- if (window.scrollX > 0 || window.scrollY > 0) {
- window.resizeBy(window.innerWidth * 2, window.innerHeight * 2);
- window.sizeToContent();
- window.scrollTo(0, 0);
- x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0);
- y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0);
- window.moveTo(x, y);
- }
- }
- },
-
- getWindowArg : function(name, default_value) {
- return tinyMCE.getWindowArg(name, default_value);
- },
-
- restoreSelection : function() {
- var inst;
-
- if (this.storeSelection) {
- inst = tinyMCE.selectedInstance;
-
- inst.getWin().focus();
-
- if (inst.selectionBookmark)
- inst.selection.moveToBookmark(inst.selectionBookmark);
- }
- },
-
- execCommand : function(command, user_interface, value) {
- var inst = tinyMCE.selectedInstance;
-
- this.restoreSelection();
- inst.execCommand(command, user_interface, value);
-
- // Store selection
- if (this.storeSelection)
- inst.selectionBookmark = inst.selection.getBookmark(true);
- },
-
- close : function() {
- tinyMCE.closeWindow(window);
- },
-
- pickColor : function(e, element_id) {
- tinyMCE.selectedInstance.execCommand('mceColorPicker', true, {
- element_id : element_id,
- document : document,
- window : window,
- store_selection : false
- });
- },
-
- openBrowser : function(element_id, type, option) {
- var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
- var url = document.getElementById(element_id).value;
-
- tinyMCE.setWindowArg("window", window);
- tinyMCE.setWindowArg("document", document);
-
- // Call to external callback
- if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined")
- alert("Callback function: " + cb + " could not be found.");
- else
- eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);");
- },
-
- importClass : function(c) {
- var n;
-
- window[c] = function() {};
-
- for (n in window.opener[c].prototype)
- window[c].prototype[n] = window.opener[c].prototype[n];
-
- window[c].constructor = window.opener[c].constructor;
- }
-
- };
-
-// Setup global instance
-var tinyMCEPopup = new TinyMCE_Popup();
-
-tinyMCEPopup.init();
+// Some global instances\r
+var tinymce = null, tinyMCEPopup, tinyMCE;\r
+\r
+tinyMCEPopup = {\r
+ init : function() {\r
+ var t = this, w, ti, li, q, i, it;\r
+\r
+ li = ('' + document.location.search).replace(/^\?/, '').split('&');\r
+ q = {};\r
+ for (i=0; i<li.length; i++) {\r
+ it = li[i].split('=');\r
+ q[unescape(it[0])] = unescape(it[1]);\r
+ }\r
+\r
+ if (q.mce_rdomain)\r
+ document.domain = q.mce_rdomain;\r
+\r
+ // Find window & API\r
+ w = t.getWin();\r
+ tinymce = w.tinymce;\r
+ tinyMCE = w.tinyMCE;\r
+ t.editor = tinymce.EditorManager.activeEditor;\r
+ t.params = t.editor.windowManager.params;\r
+\r
+ // Setup local DOM\r
+ t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document);\r
+ t.dom.loadCSS(t.editor.settings.popup_css);\r
+\r
+ // Setup on init listeners\r
+ t.listeners = [];\r
+ t.onInit = {\r
+ add : function(f, s) {\r
+ t.listeners.push({func : f, scope : s});\r
+ }\r
+ };\r
+\r
+ t.isWindow = !t.getWindowArg('mce_inline');\r
+ t.id = t.getWindowArg('mce_window_id');\r
+ t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window);\r
+ },\r
+\r
+ getWin : function() {\r
+ return window.dialogArguments || opener || parent || top;\r
+ },\r
+\r
+ getWindowArg : function(n, dv) {\r
+ var v = this.params[n];\r
+\r
+ return tinymce.is(v) ? v : dv;\r
+ },\r
+\r
+ getParam : function(n, dv) {\r
+ return this.editor.getParam(n, dv);\r
+ },\r
+\r
+ getLang : function(n, dv) {\r
+ return this.editor.getLang(n, dv);\r
+ },\r
+\r
+ execCommand : function(cmd, ui, val, a) {\r
+ a = a || {};\r
+ a.skip_focus = 1;\r
+\r
+ this.restoreSelection();\r
+ return this.editor.execCommand(cmd, ui, val, a);\r
+ },\r
+\r
+ resizeToInnerSize : function() {\r
+ var t = this, n, b = document.body, vp = t.dom.getViewPort(window), dw, dh;\r
+\r
+ dw = t.getWindowArg('mce_width') - vp.w;\r
+ dh = t.getWindowArg('mce_height') - vp.h;\r
+\r
+ if (t.isWindow)\r
+ window.resizeBy(dw, dh);\r
+ else\r
+ t.editor.windowManager.resizeBy(dw, dh, t.id);\r
+ },\r
+\r
+ executeOnLoad : function(s) {\r
+ this.onInit.add(function() {\r
+ eval(s);\r
+ });\r
+ },\r
+\r
+ storeSelection : function() {\r
+ this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple');\r
+ },\r
+\r
+ restoreSelection : function() {\r
+ var t = tinyMCEPopup;\r
+\r
+ if (!t.isWindow && tinymce.isIE)\r
+ t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark);\r
+ },\r
+\r
+ requireLangPack : function() {\r
+ var u = this.getWindowArg('plugin_url') || this.getWindowArg('theme_url');\r
+\r
+ if (u && this.editor.settings.language) {\r
+ u += '/langs/' + this.editor.settings.language + '_dlg.js';\r
+\r
+ if (!tinymce.ScriptLoader.isDone(u)) {\r
+ document.write('<script type="text/javascript" src="' + u + '"></script>');\r
+ tinymce.ScriptLoader.markDone(u);\r
+ }\r
+ }\r
+ },\r
+\r
+ pickColor : function(e, element_id) {\r
+ this.execCommand('mceColorPicker', true, {\r
+ color : document.getElementById(element_id).value,\r
+ func : function(c) {\r
+ document.getElementById(element_id).value = c;\r
+\r
+ try {\r
+ document.getElementById(element_id).onchange();\r
+ } catch (ex) {\r
+ // Try fire event, ignore errors\r
+ }\r
+ }\r
+ });\r
+ },\r
+\r
+ openBrowser : function(element_id, type, option) {\r
+ tinyMCEPopup.restoreSelection();\r
+ this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window);\r
+ },\r
+\r
+ close : function() {\r
+ var t = this;\r
+\r
+ // To avoid domain relaxing issue in Opera\r
+ function close() {\r
+ t.editor.windowManager.close(window, t.id);\r
+ tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup\r
+ };\r
+\r
+ if (tinymce.isOpera)\r
+ t.getWin().setTimeout(close, 0);\r
+ else\r
+ close();\r
+ },\r
+\r
+ // Internal functions \r
+\r
+ _restoreSelection : function() {\r
+ var e = window.event.srcElement;\r
+\r
+ if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button'))\r
+ tinyMCEPopup.restoreSelection();\r
+ },\r
+\r
+/* _restoreSelection : function() {\r
+ var e = window.event.srcElement;\r
+\r
+ // If user focus a non text input or textarea\r
+ if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text')\r
+ tinyMCEPopup.restoreSelection();\r
+ },*/\r
+\r
+ _onDOMLoaded : function() {\r
+ var t = this, ti = document.title, bm, h;\r
+\r
+ // Translate page\r
+ h = document.body.innerHTML;\r
+\r
+ // Replace a=x with a="x" in IE\r
+ if (tinymce.isIE)\r
+ h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"')\r
+\r
+ document.dir = t.editor.getParam('directionality','');\r
+ document.body.innerHTML = t.editor.translate(h);\r
+ document.title = ti = t.editor.translate(ti);\r
+ document.body.style.display = '';\r
+\r
+ // Restore selection in IE when focus is placed on a non textarea or input element of the type text\r
+ if (tinymce.isIE)\r
+ document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection);\r
+\r
+ t.restoreSelection();\r
+ t.resizeToInnerSize();\r
+\r
+ // Set inline title\r
+ if (!t.isWindow)\r
+ t.editor.windowManager.setTitle(ti, t.id);\r
+ else\r
+ window.focus();\r
+\r
+ if (!tinymce.isIE && !t.isWindow) {\r
+ tinymce.dom.Event._add(document, 'focus', function() {\r
+ t.editor.windowManager.focus(t.id)\r
+ });\r
+ }\r
+\r
+ // Patch for accessibility\r
+ tinymce.each(t.dom.select('select'), function(e) {\r
+ e.onkeydown = tinyMCEPopup._accessHandler;\r
+ });\r
+\r
+ // Call onInit\r
+ // Init must be called before focus so the selection won't get lost by the focus call\r
+ tinymce.each(t.listeners, function(o) {\r
+ o.func.call(o.scope, t.editor);\r
+ });\r
+\r
+ // Move focus to window\r
+ if (t.getWindowArg('mce_auto_focus', true)) {\r
+ window.focus();\r
+\r
+ // Focus element with mceFocus class\r
+ tinymce.each(document.forms, function(f) {\r
+ tinymce.each(f.elements, function(e) {\r
+ if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) {\r
+ e.focus();\r
+ return false; // Break loop\r
+ }\r
+ });\r
+ });\r
+ }\r
+\r
+ document.onkeyup = tinyMCEPopup._closeWinKeyHandler;\r
+ },\r
+\r
+ _accessHandler : function(e) {\r
+ e = e || window.event;\r
+\r
+ if (e.keyCode == 13 || e.keyCode == 32) {\r
+ e = e.target || e.srcElement;\r
+\r
+ if (e.onchange)\r
+ e.onchange();\r
+\r
+ return tinymce.dom.Event.cancel(e);\r
+ }\r
+ },\r
+\r
+ _closeWinKeyHandler : function(e) {\r
+ e = e || window.event;\r
+\r
+ if (e.keyCode == 27)\r
+ tinyMCEPopup.close();\r
+ },\r
+\r
+ _wait : function() {\r
+ var t = this, ti;\r
+\r
+ if (tinymce.isIE && document.location.protocol != 'https:') {\r
+ // Fake DOMContentLoaded on IE\r
+ document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');\r
+ document.getElementById("__ie_onload").onreadystatechange = function() {\r
+ if (this.readyState == "complete") {\r
+ t._onDOMLoaded();\r
+ document.getElementById("__ie_onload").onreadystatechange = null; // Prevent leak\r
+ }\r
+ };\r
+ } else {\r
+ if (tinymce.isIE || tinymce.isWebKit) {\r
+ ti = setInterval(function() {\r
+ if (/loaded|complete/.test(document.readyState)) {\r
+ clearInterval(ti);\r
+ t._onDOMLoaded();\r
+ }\r
+ }, 10);\r
+ } else {\r
+ window.addEventListener('DOMContentLoaded', function() {\r
+ t._onDOMLoaded();\r
+ }, false);\r
+ }\r
+ }\r
+ }\r
+};\r
+\r
+tinyMCEPopup.init();\r
+tinyMCEPopup._wait(); // Wait for DOM Content Loaded\r
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Engine.class.js */
-
-function TinyMCE_Engine() {
- var ua;
-
- this.majorVersion = "2";
- this.minorVersion = "1.3";
- this.releaseDate = "2007-11-27";
-
- this.instances = [];
- this.switchClassCache = [];
- this.windowArgs = [];
- this.loadedFiles = [];
- this.pendingFiles = [];
- this.loadingIndex = 0;
- this.configs = [];
- this.currentConfig = 0;
- this.eventHandlers = [];
- this.log = [];
- this.undoLevels = [];
- this.undoIndex = 0;
- this.typingUndoIndex = -1;
- this.settings = [];
-
- // Browser check
- ua = navigator.userAgent;
- this.isMSIE = (navigator.appName == "Microsoft Internet Explorer");
- this.isMSIE5 = this.isMSIE && (ua.indexOf('MSIE 5') != -1);
- this.isMSIE5_0 = this.isMSIE && (ua.indexOf('MSIE 5.0') != -1);
- this.isMSIE7 = this.isMSIE && (ua.indexOf('MSIE 7') != -1);
- this.isGecko = ua.indexOf('Gecko') != -1; // Will also be true on Safari
- this.isSafari = ua.indexOf('Safari') != -1;
- this.isOpera = window['opera'] && opera.buildNumber ? true : false;
- this.isMac = ua.indexOf('Mac') != -1;
- this.isNS7 = ua.indexOf('Netscape/7') != -1;
- this.isNS71 = ua.indexOf('Netscape/7.1') != -1;
- this.dialogCounter = 0;
- this.plugins = [];
- this.themes = [];
- this.menus = [];
- this.loadedPlugins = [];
- this.buttonMap = [];
- this.isLoaded = false;
-
- // Fake MSIE on Opera and if Opera fakes IE, Gecko or Safari cancel those
- if (this.isOpera) {
- this.isMSIE = true;
- this.isGecko = false;
- this.isSafari = false;
- }
-
- this.isIE = this.isMSIE;
- this.isRealIE = this.isMSIE && !this.isOpera;
-
- // TinyMCE editor id instance counter
- this.idCounter = 0;
-};
-
-TinyMCE_Engine.prototype = {
- init : function(settings) {
- var theme, nl, baseHREF = "", i, cssPath, entities, h, p, src, elements = [], head;
-
- // IE 5.0x is no longer supported since 5.5, 6.0 and 7.0 now exists. We can't support old browsers forever, sorry.
- if (this.isMSIE5_0)
- return;
-
- this.settings = settings;
-
- // Check if valid browser has execcommand support
- if (typeof(document.execCommand) == 'undefined')
- return;
-
- // Get script base path
- if (!tinyMCE.baseURL) {
- // Search through head
- head = document.getElementsByTagName('head')[0];
-
- if (head) {
- for (i=0, nl = head.getElementsByTagName('script'); i<nl.length; i++)
- elements.push(nl[i]);
- }
-
- // Search through rest of document
- for (i=0, nl = document.getElementsByTagName('script'); i<nl.length; i++)
- elements.push(nl[i]);
-
- // If base element found, add that infront of baseURL
- nl = document.getElementsByTagName('base');
- for (i=0; i<nl.length; i++) {
- if (nl[i].href)
- baseHREF = nl[i].href;
- }
-
- for (i=0; i<elements.length; i++) {
- if (elements[i].src && (elements[i].src.indexOf("tiny_mce.js") != -1 || elements[i].src.indexOf("tiny_mce_dev.js") != -1 || elements[i].src.indexOf("tiny_mce_src.js") != -1 || elements[i].src.indexOf("tiny_mce_gzip") != -1)) {
- src = elements[i].src;
-
- tinyMCE.srcMode = (src.indexOf('_src') != -1 || src.indexOf('_dev') != -1) ? '_src' : '';
- tinyMCE.gzipMode = src.indexOf('_gzip') != -1;
- src = src.substring(0, src.lastIndexOf('/'));
-
- if (settings.exec_mode == "src" || settings.exec_mode == "normal")
- tinyMCE.srcMode = settings.exec_mode == "src" ? '_src' : '';
-
- // Force it absolute if page has a base href
- if (baseHREF !== '' && src.indexOf('://') == -1)
- tinyMCE.baseURL = baseHREF + src;
- else
- tinyMCE.baseURL = src;
-
- break;
- }
- }
- }
-
- // Get document base path
- this.documentBasePath = document.location.href;
- if (this.documentBasePath.indexOf('?') != -1)
- this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.indexOf('?'));
- this.documentURL = this.documentBasePath;
- this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.lastIndexOf('/'));
-
- // If not HTTP absolute
- if (tinyMCE.baseURL.indexOf('://') == -1 && tinyMCE.baseURL.charAt(0) != '/') {
- // If site absolute
- tinyMCE.baseURL = this.documentBasePath + "/" + tinyMCE.baseURL;
- }
-
- // Set default values on settings
- this._def("mode", "none");
- this._def("theme", "advanced");
- this._def("plugins", "", true);
- this._def("language", "en");
- this._def("docs_language", this.settings.language);
- this._def("elements", "");
- this._def("textarea_trigger", "mce_editable");
- this._def("editor_selector", "");
- this._def("editor_deselector", "mceNoEditor");
- this._def("valid_elements", "+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],cite[title|id|class|style|dir|lang],abbr[title|id|class|style|dir|lang],acronym[title|id|class|style|dir|lang],del[title|id|class|style|dir|lang|datetime|cite],ins[title|id|class|style|dir|lang|datetime|cite]");
- this._def("extended_valid_elements", "");
- this._def("invalid_elements", "");
- this._def("encoding", "");
- this._def("urlconverter_callback", tinyMCE.getParam("urlconvertor_callback", "TinyMCE_Engine.prototype.convertURL"));
- this._def("save_callback", "");
- this._def("force_br_newlines", false);
- this._def("force_p_newlines", true);
- this._def("add_form_submit_trigger", true);
- this._def("relative_urls", true);
- this._def("remove_script_host", true);
- this._def("focus_alert", true);
- this._def("document_base_url", this.documentURL);
- this._def("visual", true);
- this._def("visual_table_class", "mceVisualAid");
- this._def("setupcontent_callback", "");
- this._def("fix_content_duplication", true);
- this._def("custom_undo_redo", true);
- this._def("custom_undo_redo_levels", -1);
- this._def("custom_undo_redo_keyboard_shortcuts", true);
- this._def("custom_undo_redo_restore_selection", true);
- this._def("custom_undo_redo_global", false);
- this._def("verify_html", true);
- this._def("apply_source_formatting", false);
- this._def("directionality", "ltr");
- this._def("cleanup_on_startup", false);
- this._def("inline_styles", false);
- this._def("convert_newlines_to_brs", false);
- this._def("auto_reset_designmode", true);
- this._def("entities", "39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro", true);
- this._def("entity_encoding", "named");
- this._def("cleanup_callback", "");
- this._def("add_unload_trigger", true);
- this._def("ask", false);
- this._def("nowrap", false);
- this._def("auto_resize", false);
- this._def("auto_focus", false);
- this._def("cleanup", true);
- this._def("remove_linebreaks", true);
- this._def("button_tile_map", false);
- this._def("submit_patch", true);
- this._def("browsers", "msie,safari,gecko,opera", true);
- this._def("dialog_type", "window");
- this._def("accessibility_warnings", true);
- this._def("accessibility_focus", true);
- this._def("merge_styles_invalid_parents", "");
- this._def("force_hex_style_colors", true);
- this._def("trim_span_elements", true);
- this._def("convert_fonts_to_spans", false);
- this._def("doctype", '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');
- this._def("font_size_classes", '');
- this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true);
- this._def("event_elements", 'a,img', true);
- this._def("convert_urls", true);
- this._def("table_inline_editing", false);
- this._def("object_resizing", true);
- this._def("custom_shortcuts", true);
- this._def("convert_on_click", false);
- this._def("content_css", '');
- this._def("fix_list_elements", true);
- this._def("fix_table_elements", false);
- this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml');
- this._def("hidden_tab_class", '');
- this._def("display_tab_class", '');
- this._def("gecko_spellcheck", false);
- this._def("hide_selects_on_submit", true);
- this._def("forced_root_block", false);
- this._def("remove_trailing_nbsp", false);
- this._def("save_on_tinymce_forms", false);
-
- // Force strict loading mode to false on non Gecko browsers
- if (this.isMSIE && !this.isOpera)
- this.settings.strict_loading_mode = false;
-
- // Browser check IE
- if (this.isMSIE && this.settings.browsers.indexOf('msie') == -1)
- return;
-
- // Browser check Gecko
- if (this.isGecko && this.settings.browsers.indexOf('gecko') == -1)
- return;
-
- // Browser check Safari
- if (this.isSafari && this.settings.browsers.indexOf('safari') == -1)
- return;
-
- // Browser check Opera
- if (this.isOpera && this.settings.browsers.indexOf('opera') == -1)
- return;
-
- // If not super absolute make it so
- baseHREF = tinyMCE.settings.document_base_url;
- h = document.location.href;
- p = h.indexOf('://');
- if (p > 0 && document.location.protocol != "file:") {
- p = h.indexOf('/', p + 3);
- h = h.substring(0, p);
-
- if (baseHREF.indexOf('://') == -1)
- baseHREF = h + baseHREF;
-
- tinyMCE.settings.document_base_url = baseHREF;
- tinyMCE.settings.document_base_prefix = h;
- }
-
- // Trim away query part
- if (baseHREF.indexOf('?') != -1)
- baseHREF = baseHREF.substring(0, baseHREF.indexOf('?'));
-
- this.settings.base_href = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/";
-
- theme = this.settings.theme;
- this.inlineStrict = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';
- this.inlineTransitional = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';
- this.blockElms = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';
- this.blockRegExp = new RegExp("^(" + this.blockElms + ")$", "i");
- this.posKeyCodes = [13,45,36,35,33,34,37,38,39,40];
- this.uniqueURL = 'javascript:void(091039730);'; // Make unique URL non real URL
- this.uniqueTag = '<div id="mceTMPElement" style="display: none">TMP</div>';
- this.callbacks = ['onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup', 'removeInstance'];
-
- // Theme url
- this.settings.theme_href = tinyMCE.baseURL + "/themes/" + theme;
-
- if (!tinyMCE.isIE || tinyMCE.isOpera)
- this.settings.force_br_newlines = false;
-
- if (tinyMCE.getParam("popups_css", false)) {
- cssPath = tinyMCE.getParam("popups_css", "");
-
- // Is relative
- if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/')
- this.settings.popups_css = this.documentBasePath + "/" + cssPath;
- else
- this.settings.popups_css = cssPath;
- } else
- this.settings.popups_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css";
-
- if (tinyMCE.getParam("editor_css", false)) {
- cssPath = tinyMCE.getParam("editor_css", "");
-
- // Is relative
- if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/')
- this.settings.editor_css = this.documentBasePath + "/" + cssPath;
- else
- this.settings.editor_css = cssPath;
- } else {
- if (this.settings.editor_css !== '')
- this.settings.editor_css = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css";
- }
-
- // Only do this once
- if (this.configs.length == 0) {
- if (typeof(TinyMCECompressed) == "undefined") {
- tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad);
-
- if (tinyMCE.isRealIE) {
- if (document.body)
- tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad);
- else
- tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad);
- }
-
- tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad);
- tinyMCE._addUnloadEvents();
- }
- }
-
- this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings.theme + '/editor_template' + tinyMCE.srcMode + '.js');
- this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings.language + '.js');
- this.loadCSS(this.settings.editor_css);
-
- // Add plugins
- p = tinyMCE.getParam('plugins', '', true, ',');
- if (p.length > 0) {
- for (i=0; i<p.length; i++) {
- if (p[i].charAt(0) != '-')
- this.loadScript(tinyMCE.baseURL + '/plugins/' + p[i] + '/editor_plugin' + tinyMCE.srcMode + '.js');
- }
- }
-
- // Setup entities
- if (tinyMCE.getParam('entity_encoding') == 'named') {
- settings.cleanup_entities = [];
- entities = tinyMCE.getParam('entities', '', true, ',');
- for (i=0; i<entities.length; i+=2)
- settings.cleanup_entities['c' + entities[i]] = entities[i+1];
- }
-
- // Save away this config
- settings.index = this.configs.length;
- this.configs[this.configs.length] = settings;
-
- // Start loading first one in chain
- this.loadNextScript();
-
- // Force flicker free CSS backgrounds in IE
- if (this.isIE && !this.isOpera) {
- try {
- document.execCommand('BackgroundImageCache', false, true);
- } catch (e) {
- // Ignore
- }
- }
-
- // Setup XML encoding regexps
- this.xmlEncodeRe = new RegExp('[<>&"]', 'g');
- },
-
- _addUnloadEvents : function() {
- var st = tinyMCE.settings.add_unload_trigger;
-
- if (tinyMCE.isIE) {
- if (st) {
- tinyMCE.addEvent(window, "unload", TinyMCE_Engine.prototype.unloadHandler);
- tinyMCE.addEvent(window.document, "beforeunload", TinyMCE_Engine.prototype.unloadHandler);
- }
- } else {
- if (st)
- tinyMCE.addEvent(window, "unload", function () {tinyMCE.triggerSave(true, true);});
- }
- },
-
- _def : function(key, def_val, t) {
- var v = tinyMCE.getParam(key, def_val);
-
- v = t ? v.replace(/\s+/g, "") : v;
-
- this.settings[key] = v;
- },
-
- hasPlugin : function(n) {
- return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null;
- },
-
- addPlugin : function(n, p) {
- var op = this.plugins[n];
-
- // Use the previous plugin object base URL used when loading external plugins
- p.baseURL = op ? op.baseURL : tinyMCE.baseURL + "/plugins/" + n;
- this.plugins[n] = p;
-
- this.loadNextScript();
- },
-
- setPluginBaseURL : function(n, u) {
- var op = this.plugins[n];
-
- if (op)
- op.baseURL = u;
- else
- this.plugins[n] = {baseURL : u};
- },
-
- loadPlugin : function(n, u) {
- u = u.indexOf('.js') != -1 ? u.substring(0, u.lastIndexOf('/')) : u;
- u = u.charAt(u.length-1) == '/' ? u.substring(0, u.length-1) : u;
- this.plugins[n] = {baseURL : u};
- this.loadScript(u + "/editor_plugin" + (tinyMCE.srcMode ? '_src' : '') + ".js");
- },
-
- hasTheme : function(n) {
- return typeof(this.themes[n]) != "undefined" && this.themes[n] != null;
- },
-
- addTheme : function(n, t) {
- this.themes[n] = t;
-
- this.loadNextScript();
- },
-
- addMenu : function(n, m) {
- this.menus[n] = m;
- },
-
- hasMenu : function(n) {
- return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null;
- },
-
- loadScript : function(url) {
- var i;
-
- for (i=0; i<this.loadedFiles.length; i++) {
- if (this.loadedFiles[i] == url)
- return;
- }
-
- if (tinyMCE.settings.strict_loading_mode)
- this.pendingFiles[this.pendingFiles.length] = url;
- else
- document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></script>');
-
- this.loadedFiles[this.loadedFiles.length] = url;
- },
-
- loadNextScript : function() {
- var d = document, se;
-
- if (!tinyMCE.settings.strict_loading_mode)
- return;
-
- if (this.loadingIndex < this.pendingFiles.length) {
- se = d.createElementNS('http://www.w3.org/1999/xhtml', 'script');
- se.setAttribute('language', 'javascript');
- se.setAttribute('type', 'text/javascript');
- se.setAttribute('src', this.pendingFiles[this.loadingIndex++]);
-
- d.getElementsByTagName("head")[0].appendChild(se);
- } else
- this.loadingIndex = -1; // Done with loading
- },
-
- loadCSS : function(url) {
- var ar = url.replace(/\s+/, '').split(',');
- var lflen = 0, csslen = 0, skip = false;
- var x = 0, i = 0, nl, le;
-
- for (x = 0,csslen = ar.length; x<csslen; x++) {
- if (ar[x] != null && ar[x] != 'null' && ar[x].length > 0) {
- /* Make sure it doesn't exist. */
- for (i=0, lflen=this.loadedFiles.length; i<lflen; i++) {
- if (this.loadedFiles[i] == ar[x]) {
- skip = true;
- break;
- }
- }
-
- if (!skip) {
- if (tinyMCE.settings.strict_loading_mode) {
- nl = document.getElementsByTagName("head");
-
- le = document.createElement('link');
- le.setAttribute('href', ar[x]);
- le.setAttribute('rel', 'stylesheet');
- le.setAttribute('type', 'text/css');
-
- nl[0].appendChild(le);
- } else
- document.write('<link href="' + ar[x] + '" rel="stylesheet" type="text/css" />');
-
- this.loadedFiles[this.loadedFiles.length] = ar[x];
- }
- }
- }
- },
-
- importCSS : function(doc, css) {
- var css_ary = css.replace(/\s+/, '').split(',');
- var csslen, elm, headArr, x, css_file;
-
- for (x = 0, csslen = css_ary.length; x<csslen; x++) {
- css_file = css_ary[x];
-
- if (css_file != null && css_file != 'null' && css_file.length > 0) {
- // Is relative, make absolute
- if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/')
- css_file = this.documentBasePath + "/" + css_file;
-
- if (typeof(doc.createStyleSheet) == "undefined") {
- elm = doc.createElement("link");
-
- elm.rel = "stylesheet";
- elm.href = css_file;
-
- if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0)
- headArr[0].appendChild(elm);
- } else
- doc.createStyleSheet(css_file);
- }
- }
- },
-
- confirmAdd : function(e, settings) {
- var elm = tinyMCE.isIE ? event.srcElement : e.target;
- var elementId = elm.name ? elm.name : elm.id;
-
- tinyMCE.settings = settings;
-
- if (tinyMCE.settings.convert_on_click || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang.lang_edit_confirm)))
- tinyMCE.addMCEControl(elm, elementId);
-
- elm.setAttribute('mce_noask', 'true');
- },
-
- updateContent : function(form_element_name) {
- var formElement, n, inst, doc;
-
- // Find MCE instance linked to given form element and copy it's value
- formElement = document.getElementById(form_element_name);
- for (n in tinyMCE.instances) {
- inst = tinyMCE.instances[n];
-
- if (!tinyMCE.isInstance(inst))
- continue;
-
- inst.switchSettings();
-
- if (inst.formElement == formElement) {
- doc = inst.getDoc();
-
- tinyMCE._setHTML(doc, inst.formElement.value);
-
- if (!tinyMCE.isIE)
- doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid);
- }
- }
- },
-
- addMCEControl : function(replace_element, form_element_name, target_document) {
- var id = "mce_editor_" + tinyMCE.idCounter++;
- var inst = new TinyMCE_Control(tinyMCE.settings);
-
- inst.editorId = id;
- this.instances[id] = inst;
-
- inst._onAdd(replace_element, form_element_name, target_document);
- },
-
- removeInstance : function(ti) {
- var t = [], n, i;
-
- // Remove from instances
- for (n in tinyMCE.instances) {
- i = tinyMCE.instances[n];
-
- if (tinyMCE.isInstance(i) && ti != i)
- t[n] = i;
- }
-
- tinyMCE.instances = t;
-
- // Remove from global undo/redo
- n = [];
- t = tinyMCE.undoLevels;
-
- for (i=0; i<t.length; i++) {
- if (t[i] != ti)
- n.push(t[i]);
- }
-
- tinyMCE.undoLevels = n;
- tinyMCE.undoIndex = n.length;
-
- // Dispatch remove instance call
- tinyMCE.dispatchCallback(ti, 'remove_instance_callback', 'removeInstance', ti);
-
- return ti;
- },
-
- removeMCEControl : function(editor_id) {
- var inst = tinyMCE.getInstanceById(editor_id), h, re, ot, tn, n;
-
- if (inst) {
- inst.switchSettings();
-
- editor_id = inst.editorId;
- h = tinyMCE.getContent(editor_id);
-
- this.removeInstance(inst);
-
- tinyMCE.selectedElement = null;
- tinyMCE.selectedInstance = null;
-
- tinyMCE.selectedElement = null;
- tinyMCE.selectedInstance = null;
-
- // Try finding an instance
- for (n in tinyMCE.instances) {
- if (!tinyMCE.isInstance(tinyMCE.instances[n]))
- continue;
-
- tinyMCE.selectedInstance = tinyMCE.instances[n];
- break;
- }
-
- // Remove element
- re = document.getElementById(editor_id + "_parent");
- ot = inst.oldTargetElement;
- tn = ot.nodeName.toLowerCase();
-
- if (tn == "textarea" || tn == "input") {
- re.parentNode.removeChild(re);
- ot.style.display = "inline";
- ot.value = h;
- } else {
- ot.innerHTML = h;
- ot.style.display = 'block';
- re.parentNode.insertBefore(ot, re);
- re.parentNode.removeChild(re);
- }
- }
- },
-
- triggerSave : function(skip_cleanup, skip_callback) {
- var inst, n;
-
- // Default to false
- if (typeof(skip_cleanup) == "undefined")
- skip_cleanup = false;
-
- // Default to false
- if (typeof(skip_callback) == "undefined")
- skip_callback = false;
-
- // Cleanup and set all form fields
- for (n in tinyMCE.instances) {
- inst = tinyMCE.instances[n];
-
- if (!tinyMCE.isInstance(inst))
- continue;
-
- inst.triggerSave(skip_cleanup, skip_callback);
- }
- },
-
- resetForm : function(form_index) {
- var i, inst, n, formObj = document.forms[form_index];
-
- for (n in tinyMCE.instances) {
- inst = tinyMCE.instances[n];
-
- if (!tinyMCE.isInstance(inst))
- continue;
-
- inst.switchSettings();
-
- for (i=0; i<formObj.elements.length; i++) {
- if (inst.formTargetElementId == formObj.elements[i].name)
- inst.getBody().innerHTML = inst.startContent;
- }
- }
- },
-
- execInstanceCommand : function(editor_id, command, user_interface, value, focus) {
- var inst = tinyMCE.getInstanceById(editor_id), r;
-
- if (inst) {
- r = inst.selection.getRng();
-
- if (typeof(focus) == "undefined")
- focus = true;
-
- // IE bug lost focus on images in absolute divs Bug #1534575
- if (focus && (!r || !r.item))
- inst.contentWindow.focus();
-
- // Reset design mode if lost
- inst.autoResetDesignMode();
-
- this.selectedElement = inst.getFocusElement();
- inst.select();
- tinyMCE.execCommand(command, user_interface, value);
-
- // Cancel event so it doesn't call onbeforeonunlaod
- if (tinyMCE.isIE && window.event != null)
- tinyMCE.cancelEvent(window.event);
- }
- },
-
- execCommand : function(command, user_interface, value) {
- var inst = tinyMCE.selectedInstance, n, pe, te;
-
- // Default input
- user_interface = user_interface ? user_interface : false;
- value = value ? value : null;
-
- if (inst)
- inst.switchSettings();
-
- switch (command) {
- case "Undo":
- if (this.getParam('custom_undo_redo_global')) {
- if (this.undoIndex > 0) {
- tinyMCE.nextUndoRedoAction = 'Undo';
- inst = this.undoLevels[--this.undoIndex];
- inst.select();
-
- if (!tinyMCE.nextUndoRedoInstanceId)
- inst.execCommand('Undo');
- }
- } else
- inst.execCommand('Undo');
- return true;
-
- case "Redo":
- if (this.getParam('custom_undo_redo_global')) {
- if (this.undoIndex <= this.undoLevels.length - 1) {
- tinyMCE.nextUndoRedoAction = 'Redo';
- inst = this.undoLevels[this.undoIndex++];
- inst.select();
-
- if (!tinyMCE.nextUndoRedoInstanceId)
- inst.execCommand('Redo');
- }
- } else
- inst.execCommand('Redo');
-
- return true;
-
- case 'mceFocus':
- inst = tinyMCE.getInstanceById(value);
-
- if (inst)
- inst.getWin().focus();
- return;
-
- case "mceAddControl":
- case "mceAddEditor":
- tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);
- return;
-
- case "mceAddFrameControl":
- tinyMCE.addMCEControl(tinyMCE._getElementById(value.element, value.document), value.element, value.document);
- return;
-
- case "mceRemoveControl":
- case "mceRemoveEditor":
- tinyMCE.removeMCEControl(value);
- return;
-
- case "mceToggleEditor":
- inst = tinyMCE.getInstanceById(value);
-
- if (inst) {
- pe = document.getElementById(inst.editorId + '_parent');
- te = inst.oldTargetElement;
-
- if (typeof(inst.enabled) == 'undefined')
- inst.enabled = true;
-
- inst.enabled = !inst.enabled;
-
- if (!inst.enabled) {
- pe.style.display = 'none';
-
- if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT')
- te.value = inst.getHTML();
- else
- te.innerHTML = inst.getHTML();
-
- te.style.display = inst.oldTargetDisplay;
- tinyMCE.dispatchCallback(inst, 'hide_instance_callback', 'hideInstance', inst);
- } else {
- pe.style.display = 'block';
- te.style.display = 'none';
-
- if (te.nodeName == 'TEXTAREA' || te.nodeName == 'INPUT')
- inst.setHTML(te.value);
- else
- inst.setHTML(te.innerHTML);
-
- inst.useCSS = false;
- tinyMCE.dispatchCallback(inst, 'show_instance_callback', 'showInstance', inst);
- }
- } else
- tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);
-
- return;
-
- case "mceResetDesignMode":
- // Resets the designmode state of the editors in Gecko
- if (tinyMCE.isGecko) {
- for (n in tinyMCE.instances) {
- if (!tinyMCE.isInstance(tinyMCE.instances[n]))
- continue;
-
- try {
- tinyMCE.instances[n].getDoc().designMode = "off";
- tinyMCE.instances[n].getDoc().designMode = "on";
- tinyMCE.instances[n].useCSS = false;
- } catch (e) {
- // Ignore any errors
- }
- }
- }
-
- return;
- }
-
- if (inst) {
- inst.execCommand(command, user_interface, value);
- } else if (tinyMCE.settings.focus_alert)
- alert(tinyMCELang.lang_focus_alert);
- },
-
- _createIFrame : function(replace_element, doc, win) {
- var iframe, id = replace_element.getAttribute("id");
- var aw, ah;
-
- if (typeof(doc) == "undefined")
- doc = document;
-
- if (typeof(win) == "undefined")
- win = window;
-
- iframe = doc.createElement("iframe");
-
- aw = "" + tinyMCE.settings.area_width;
- ah = "" + tinyMCE.settings.area_height;
-
- if (aw.indexOf('%') == -1) {
- aw = parseInt(aw);
- aw = (isNaN(aw) || aw < 0) ? 300 : aw;
- aw = aw + "px";
- }
-
- if (ah.indexOf('%') == -1) {
- ah = parseInt(ah);
- ah = (isNaN(ah) || ah < 0) ? 240 : ah;
- ah = ah + "px";
- }
-
- iframe.setAttribute("id", id);
- iframe.setAttribute("name", id);
- iframe.setAttribute("class", "mceEditorIframe");
- iframe.setAttribute("border", "0");
- iframe.setAttribute("frameBorder", "0");
- iframe.setAttribute("marginWidth", "0");
- iframe.setAttribute("marginHeight", "0");
- iframe.setAttribute("leftMargin", "0");
- iframe.setAttribute("topMargin", "0");
- iframe.setAttribute("width", aw);
- iframe.setAttribute("height", ah);
- iframe.setAttribute("allowtransparency", "true");
- iframe.className = 'mceEditorIframe';
-
- if (tinyMCE.settings.auto_resize)
- iframe.setAttribute("scrolling", "no");
-
- // Must have a src element in MSIE HTTPs breaks aswell as absoute URLs
- if (tinyMCE.isRealIE)
- iframe.setAttribute("src", this.settings.default_document);
-
- iframe.style.width = aw;
- iframe.style.height = ah;
-
- // Ugly hack for Gecko problem in strict mode
- if (tinyMCE.settings.strict_loading_mode)
- iframe.style.marginBottom = '-5px';
-
- // MSIE 5.0 issue
- if (tinyMCE.isRealIE)
- replace_element.outerHTML = iframe.outerHTML;
- else
- replace_element.parentNode.replaceChild(iframe, replace_element);
-
- if (tinyMCE.isRealIE)
- return win.frames[id];
- else
- return iframe;
- },
-
- setupContent : function(editor_id) {
- var inst = tinyMCE.instances[editor_id], i, doc = inst.getDoc(), head = doc.getElementsByTagName('head').item(0);
- var content = inst.startContent, contentElement, body;
-
- // HTML values get XML encoded in strict mode
- if (tinyMCE.settings.strict_loading_mode) {
- content = content.replace(/</g, '<');
- content = content.replace(/>/g, '>');
- content = content.replace(/"/g, '"');
- content = content.replace(/&/g, '&');
- }
-
- tinyMCE.selectedInstance = inst;
- inst.switchSettings();
-
- // Not loaded correctly hit it again, Mozilla bug #997860
- if (!tinyMCE.isIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") {
- // This part will remove the designMode status
- // Failes first time in Firefox 1.5b2 on Mac
- try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {}
- window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000);
- return;
- }
-
- // Wait for it to load
- if (!head || !doc.body) {
- window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10);
- return;
- }
-
- // Import theme specific content CSS the user specific
- tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings.theme + "/css/editor_content.css");
- tinyMCE.importCSS(inst.getDoc(), inst.settings.content_css);
- tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst);
-
- // Setup keyboard shortcuts
- if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) {
- inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo');
- inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo');
- }
-
- // BlockFormat shortcuts keys
- for (i=1; i<=6; i++)
- inst.addShortcut('ctrl', '' + i, '', 'FormatBlock', false, '<h' + i + '>');
-
- inst.addShortcut('ctrl', '7', '', 'FormatBlock', false, '<p>');
- inst.addShortcut('ctrl', '8', '', 'FormatBlock', false, '<div>');
- inst.addShortcut('ctrl', '9', '', 'FormatBlock', false, '<address>');
-
- // Add default shortcuts for gecko
- if (tinyMCE.isGecko) {
- inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold');
- inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic');
- inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline');
- }
-
- // Setup span styles
- if (tinyMCE.getParam("convert_fonts_to_spans"))
- inst.getBody().setAttribute('id', 'mceSpanFonts');
-
- if (tinyMCE.settings.nowrap)
- doc.body.style.whiteSpace = "nowrap";
-
- doc.body.dir = this.settings.directionality;
- doc.editorId = editor_id;
-
- // Add on document element in Mozilla
- if (!tinyMCE.isIE)
- doc.documentElement.editorId = editor_id;
-
- inst.setBaseHREF(tinyMCE.settings.base_href);
-
- // Replace new line characters to BRs
- if (tinyMCE.settings.convert_newlines_to_brs) {
- content = tinyMCE.regexpReplace(content, "\r\n", "<br />", "gi");
- content = tinyMCE.regexpReplace(content, "\r", "<br />", "gi");
- content = tinyMCE.regexpReplace(content, "\n", "<br />", "gi");
- }
-
- // Open closed anchors
- // content = content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');
-
- // Call custom cleanup code
- content = tinyMCE.storeAwayURLs(content);
- content = tinyMCE._customCleanup(inst, "insert_to_editor", content);
-
- if (tinyMCE.isIE) {
- // Ugly!!!
- window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500);
-
- if (tinyMCE.settings.force_br_newlines)
- doc.styleSheets[0].addRule("p", "margin: 0;");
-
- body = inst.getBody();
- body.editorId = editor_id;
- }
-
- content = tinyMCE.cleanupHTMLCode(content);
-
- // Fix for bug #958637
- if (!tinyMCE.isIE) {
- contentElement = inst.getDoc().createElement("body");
- doc = inst.getDoc();
-
- contentElement.innerHTML = content;
-
- if (tinyMCE.settings.cleanup_on_startup)
- tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement));
- else
- tinyMCE.setInnerHTML(inst.getBody(), content);
-
- tinyMCE.convertAllRelativeURLs(inst.getBody());
- } else {
- if (tinyMCE.settings.cleanup_on_startup) {
- tinyMCE._setHTML(inst.getDoc(), content);
-
- // Produces permission denied error in MSIE 5.5
- try {
- tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));
- } catch(e) {
- // Ignore
- }
- } else
- tinyMCE._setHTML(inst.getDoc(), content);
- }
-
- // Fix for bug #957681
- //inst.getDoc().designMode = inst.getDoc().designMode;
-
- tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings.visual, inst);
- tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc());
-
- // Re-add design mode on mozilla
- if (!tinyMCE.isIE)
- tinyMCE.addEventHandlers(inst);
-
- // Add blur handler
- if (tinyMCE.isIE) {
- tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch);
- tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953
-
- // Workaround for drag drop/copy paste base href bug
- if (!tinyMCE.isOpera) {
- tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove);
- tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch);
- tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch);
- }
- }
-
- // Trigger node change, this call locks buttons for tables and so forth
- inst.select();
- tinyMCE.selectedElement = inst.contentWindow.document.body;
-
- // Call custom DOM cleanup
- tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody());
- tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody());
- tinyMCE._setEventsEnabled(inst.getBody(), false);
- tinyMCE.cleanupAnchors(inst.getDoc());
-
- if (tinyMCE.getParam("convert_fonts_to_spans"))
- tinyMCE.convertSpansToFonts(inst.getDoc());
-
- inst.startContent = tinyMCE.trim(inst.getBody().innerHTML);
- inst.undoRedo.add({ content : inst.startContent });
-
- // Cleanup any mess left from storyAwayURLs
- if (tinyMCE.isGecko) {
- // Remove mce_src from textnodes and comments
- tinyMCE.selectNodes(inst.getBody(), function(n) {
- if (n.nodeType == 3 || n.nodeType == 8)
- n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), "");
-
- return false;
- });
- }
-
- // Remove Gecko spellchecking
- if (tinyMCE.isGecko)
- inst.getBody().spellcheck = tinyMCE.getParam("gecko_spellcheck");
-
- // Cleanup any mess left from storyAwayURLs
- tinyMCE._removeInternal(inst.getBody());
-
- inst.select();
- tinyMCE.triggerNodeChange(false, true);
- },
-
- storeAwayURLs : function(s) {
- // Remove all mce_src, mce_href and replace them with new ones
- // s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');
- // s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');
-
- if (!s.match(/(mce_src|mce_href)/gi, s)) {
- s = s.replace(new RegExp('src\\s*=\\s*[\"\']([^ >\"]*)[\"\']', 'gi'), 'src="$1" mce_src="$1"');
- s = s.replace(new RegExp('href\\s*=\\s*[\"\']([^ >\"]*)[\"\']', 'gi'), 'href="$1" mce_href="$1"');
- }
-
- return s;
- },
-
- _removeInternal : function(n) {
- if (tinyMCE.isGecko) {
- // Remove mce_src from textnodes and comments
- tinyMCE.selectNodes(n, function(n) {
- if (n.nodeType == 3 || n.nodeType == 8)
- n.nodeValue = n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"', 'gi'), "");
-
- return false;
- });
- }
- },
-
- removeTinyMCEFormElements : function(form_obj) {
- var i, elementId;
-
- // Skip form element removal
- if (!tinyMCE.getParam('hide_selects_on_submit'))
- return;
-
- // Check if form is valid
- if (typeof(form_obj) == "undefined" || form_obj == null)
- return;
-
- // If not a form, find the form
- if (form_obj.nodeName != "FORM") {
- if (form_obj.form)
- form_obj = form_obj.form;
- else
- form_obj = tinyMCE.getParentElement(form_obj, "form");
- }
-
- // Still nothing
- if (form_obj == null)
- return;
-
- // Disable all UI form elements that TinyMCE created
- for (i=0; i<form_obj.elements.length; i++) {
- elementId = form_obj.elements[i].name ? form_obj.elements[i].name : form_obj.elements[i].id;
-
- if (elementId.indexOf('mce_editor_') == 0)
- form_obj.elements[i].disabled = true;
- }
- },
-
- handleEvent : function(e) {
- var inst = tinyMCE.selectedInstance, i, elm, keys;
-
- // Remove odd, error
- if (typeof(tinyMCE) == "undefined")
- return true;
-
- //tinyMCE.debug(e.type + " " + e.target.nodeName + " " + (e.relatedTarget ? e.relatedTarget.nodeName : ""));
-
- if (tinyMCE.executeCallback(tinyMCE.selectedInstance, 'handle_event_callback', 'handleEvent', e))
- return false;
-
- switch (e.type) {
- case "beforedeactivate": // Was added due to bug #1439953
- case "blur":
- if (tinyMCE.selectedInstance)
- tinyMCE.selectedInstance.execCommand('mceEndTyping');
-
- tinyMCE.hideMenus();
-
- return;
-
- // Workaround for drag drop/copy paste base href bug
- case "drop":
- case "beforepaste":
-/* if (tinyMCE.selectedInstance)
- tinyMCE.selectedInstance.setBaseHREF(null);
-
- // Fixes odd MSIE bug where drag/droping elements in a iframe with height 100% breaks
- // This logic forces the width/height to be in pixels while the user is drag/dropping
- // NOTE: This has been disabled for now since it messes up copy/paste that is far more important than image drag
- if (tinyMCE.isRealIE) {
- var ife = tinyMCE.selectedInstance.iframeElement;
-
- if (ife.style.height.indexOf('%') != -1) {
- ife._oldHeight = ife.style.height;
- ife.style.height = ife.clientHeight;
- }
- }
-
- window.setTimeout("tinyMCE.selectedInstance.setBaseHREF(tinyMCE.settings.base_href);tinyMCE._resetIframeHeight();", 1);
- */
- return;
-
- case "submit":
- tinyMCE.formSubmit(tinyMCE.isMSIE ? window.event.srcElement : e.target);
- return;
-
- case "reset":
- var formObj = tinyMCE.isIE ? window.event.srcElement : e.target;
-
- for (i=0; i<document.forms.length; i++) {
- if (document.forms[i] == formObj)
- window.setTimeout('tinyMCE.resetForm(' + i + ');', 10);
- }
-
- return;
-
- case "keypress":
- if (inst && inst.handleShortcut(e))
- return false;
-
- if (e.target.editorId) {
- tinyMCE.instances[e.target.editorId].select();
- } else {
- if (e.target.ownerDocument.editorId)
- tinyMCE.instances[e.target.ownerDocument.editorId].select();
- }
-
- if (tinyMCE.selectedInstance)
- tinyMCE.selectedInstance.switchSettings();
-
- // Insert P element
- if ((tinyMCE.isGecko || tinyMCE.isOpera || tinyMCE.isSafari) && tinyMCE.settings.force_p_newlines && e.keyCode == 13 && !e.shiftKey) {
- // Insert P element instead of BR
- if (TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance, e)) {
- // Cancel event
- tinyMCE.execCommand("mceAddUndoLevel");
- return tinyMCE.cancelEvent(e);
- }
- }
-
- // Handle backspace
- if ((tinyMCE.isGecko && !tinyMCE.isSafari) && tinyMCE.settings.force_p_newlines && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {
- // Insert P element instead of BR
- if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {
- // Cancel event
- tinyMCE.execCommand("mceAddUndoLevel");
- return tinyMCE.cancelEvent(e);
- }
- }
-
- // Return key pressed
- if (tinyMCE.isIE && tinyMCE.settings.force_br_newlines && e.keyCode == 13) {
- if (e.target.editorId)
- tinyMCE.instances[e.target.editorId].select();
-
- if (tinyMCE.selectedInstance) {
- var sel = tinyMCE.selectedInstance.getDoc().selection;
- var rng = sel.createRange();
-
- if (tinyMCE.getParentElement(rng.parentElement(), "li") != null)
- return false;
-
- // Cancel event
- e.returnValue = false;
- e.cancelBubble = true;
-
- // Insert BR element
- rng.pasteHTML("<br />");
- rng.collapse(false);
- rng.select();
-
- tinyMCE.execCommand("mceAddUndoLevel");
- tinyMCE.triggerNodeChange(false);
- return false;
- }
- }
-
- // Backspace or delete
- if (e.keyCode == 8 || e.keyCode == 46) {
- tinyMCE.selectedElement = e.target;
- tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a");
- tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img");
- tinyMCE.triggerNodeChange(false);
- }
-
- return false;
-
- case "keyup":
- case "keydown":
- tinyMCE.hideMenus();
- tinyMCE.hasMouseMoved = false;
-
- if (inst && inst.handleShortcut(e))
- return false;
-
- inst._fixRootBlocks();
-
- if (inst.settings.remove_trailing_nbsp)
- inst._fixTrailingNbsp();
-
- if (e.target.editorId)
- tinyMCE.instances[e.target.editorId].select();
-
- if (tinyMCE.selectedInstance)
- tinyMCE.selectedInstance.switchSettings();
-
- inst = tinyMCE.selectedInstance;
-
- // Handle backspace
- if (tinyMCE.isGecko && tinyMCE.settings.force_p_newlines && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {
- // Insert P element instead of BR
- if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {
- // Cancel event
- tinyMCE.execCommand("mceAddUndoLevel");
- e.preventDefault();
- return false;
- }
- }
-
- tinyMCE.selectedElement = null;
- tinyMCE.selectedNode = null;
- elm = tinyMCE.selectedInstance.getFocusElement();
- tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a");
- tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img");
- tinyMCE.selectedElement = elm;
-
- // Update visualaids on tabs
- if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9)
- tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings.visual, tinyMCE.selectedInstance);
-
- // Fix empty elements on return/enter, check where enter occured
- if (tinyMCE.isIE && e.type == "keydown" && e.keyCode == 13)
- tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement();
-
- // Fix empty elements on return/enter
- if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13) {
- elm = tinyMCE.enterKeyElement;
- if (elm) {
- var re = new RegExp('^HR|IMG|BR$','g'); // Skip these
- var dre = new RegExp('^H[1-6]$','g'); // Add double on these
-
- if (!elm.hasChildNodes() && !re.test(elm.nodeName)) {
- if (dre.test(elm.nodeName))
- elm.innerHTML = " ";
- else
- elm.innerHTML = " ";
- }
- }
- }
-
- // Check if it's a position key
- keys = tinyMCE.posKeyCodes;
- var posKey = false;
- for (i=0; i<keys.length; i++) {
- if (keys[i] == e.keyCode) {
- posKey = true;
- break;
- }
- }
-
- // MSIE custom key handling
- if (tinyMCE.isIE && tinyMCE.settings.custom_undo_redo) {
- keys = [8, 46]; // Backspace,Delete
-
- for (i=0; i<keys.length; i++) {
- if (keys[i] == e.keyCode) {
- if (e.type == "keyup")
- tinyMCE.triggerNodeChange(false);
- }
- }
- }
-
- // If Ctrl key
- if (e.keyCode == 17)
- return true;
-
- // Handle Undo/Redo when typing content
-
- if (tinyMCE.isGecko) {
- // Start typing (not a position key or ctrl key, but ctrl+x and ctrl+p is ok)
- if (!posKey && e.type == "keyup" && !e.ctrlKey || (e.ctrlKey && (e.keyCode == 86 || e.keyCode == 88)))
- tinyMCE.execCommand("mceStartTyping");
- } else {
- // IE seems to be working better with this setting
- if (!posKey && e.type == "keyup")
- tinyMCE.execCommand("mceStartTyping");
- }
-
- // Store undo bookmark
- if (e.type == "keydown" && (posKey || e.ctrlKey) && inst)
- inst.undoBookmark = inst.selection.getBookmark();
-
- // End typing (position key) or some Ctrl event
- if (e.type == "keyup" && (posKey || e.ctrlKey))
- tinyMCE.execCommand("mceEndTyping");
-
- if (posKey && e.type == "keyup")
- tinyMCE.triggerNodeChange(false);
-
- if (tinyMCE.isIE && e.ctrlKey)
- window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
- break;
-
- case "mousedown":
- case "mouseup":
- case "click":
- case "dblclick":
- case "focus":
- tinyMCE.hideMenus();
-
- if (tinyMCE.selectedInstance) {
- tinyMCE.selectedInstance.switchSettings();
- tinyMCE.selectedInstance.isFocused = true;
- }
-
- // Check instance event trigged on
- var targetBody = tinyMCE.getParentElement(e.target, "html");
- for (var instanceName in tinyMCE.instances) {
- if (!tinyMCE.isInstance(tinyMCE.instances[instanceName]))
- continue;
-
- inst = tinyMCE.instances[instanceName];
-
- // Reset design mode if lost (on everything just in case)
- inst.autoResetDesignMode();
-
- // Use HTML element since users might click outside of body element
- if (inst.getBody().parentNode == targetBody) {
- inst.select();
- tinyMCE.selectedElement = e.target;
- tinyMCE.linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");
- tinyMCE.imgElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "img");
- break;
- }
- }
-
- // Add first bookmark location
- if (!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark && (e.type == "mouseup" || e.type == "dblclick"))
- tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark = tinyMCE.selectedInstance.selection.getBookmark();
-
- // Reset selected node
- if (e.type != "focus")
- tinyMCE.selectedNode = null;
-
- tinyMCE.triggerNodeChange(false);
- tinyMCE.execCommand("mceEndTyping");
-
- if (e.type == "mouseup")
- tinyMCE.execCommand("mceAddUndoLevel");
-
- // Just in case
- if (!tinyMCE.selectedInstance && e.target.editorId)
- tinyMCE.instances[e.target.editorId].select();
-
- return false;
- }
- },
-
- getButtonHTML : function(id, lang, img, cmd, ui, val) {
- var h = '', m, x, io = '';
-
- cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
-
- if (typeof(ui) != "undefined" && ui != null)
- cmd += ',' + ui;
-
- if (typeof(val) != "undefined" && val != null)
- cmd += ",'" + val + "'";
-
- cmd += ');';
-
- // Patch for IE7 bug with hover out not restoring correctly
- if (tinyMCE.isRealIE)
- io = 'onmouseover="tinyMCE.lastHover = this;"';
-
- // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled
- if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = this.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
- // Tiled button
- x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
- h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" ' + io + ' class="mceTiledButton mceButtonNormal" target="_self">';
- h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" alt="{$'+lang+'}" title="{$' + lang + '}" />';
- h += '</a>';
- } else {
- // Normal button
- h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" ' + io + ' class="mceButtonNormal" target="_self">';
- h += '<img src="' + img + '" alt="{$'+lang+'}" title="{$' + lang + '}" />';
- h += '</a>';
- }
-
- return h;
- },
-
- getMenuButtonHTML : function(id, lang, img, mcmd, cmd, ui, val) {
- var h = '', m, x;
-
- mcmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + mcmd + '\');';
- cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
-
- if (typeof(ui) != "undefined" && ui != null)
- cmd += ',' + ui;
-
- if (typeof(val) != "undefined" && val != null)
- cmd += ",'" + val + "'";
-
- cmd += ');';
-
- // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled
- if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
- x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
-
- if (tinyMCE.isRealIE)
- h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';
- else
- h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';
-
- h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';
- h += '<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: ' + x + 'px 0" title="{$' + lang + '}" /></a>';
- h += '<a href="javascript:' + mcmd + '" onclick="' + mcmd + 'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
- h += '</a></span>';
- } else {
- if (tinyMCE.isRealIE)
- h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';
- else
- h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton">';
-
- h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';
- h += '<img src="' + img + '" title="{$' + lang + '}" /></a>';
- h += '<a href="javascript:' + mcmd + '" onclick="' + mcmd + 'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
- h += '</a></span>';
- }
-
- return h;
- },
-
- _menuButtonEvent : function(e, o) {
- if (o.className == 'mceMenuButtonFocus')
- return;
-
- if (e == 'over')
- o.className = o.className + ' mceMenuHover';
- else
- o.className = o.className.replace(/\s.*$/, '');
- },
-
- addButtonMap : function(m) {
- var i, a = m.replace(/\s+/, '').split(',');
-
- for (i=0; i<a.length; i++)
- this.buttonMap[a[i]] = i;
- },
-
- formSubmit : function(f, p) {
- var n, inst, found = false;
-
- if (f.form)
- f = f.form;
-
- // Is it a form that has a TinyMCE instance
- if (tinyMCE.getParam('save_on_tinymce_forms')) {
- for (n in tinyMCE.instances) {
- inst = tinyMCE.instances[n];
-
- if (!tinyMCE.isInstance(inst))
- continue;
-
- if (inst.formElement) {
- if (f == inst.formElement.form) {
- found = true;
- inst.isNotDirty = true;
- }
- }
- }
- } else
- found = true;
-
- // Is valid
- if (found) {
- tinyMCE.removeTinyMCEFormElements(f);
- tinyMCE.triggerSave();
- }
-
- // Is it patched
- if (f.mceOldSubmit && p)
- f.mceOldSubmit();
- },
-
- submitPatch : function() {
- tinyMCE.formSubmit(this, true);
- },
-
- onLoad : function() {
- var r, i, c, mode, trigger, elements, element, settings, elementId, elm;
- var selector, deselector, elementRefAr, form;
-
- // Wait for everything to be loaded first
- if (tinyMCE.settings.strict_loading_mode && this.loadingIndex != -1) {
- window.setTimeout('tinyMCE.onLoad();', 1);
- return;
- }
-
- if (tinyMCE.isRealIE && window.event.type == "readystatechange" && document.readyState != "complete")
- return true;
-
- if (tinyMCE.isLoaded)
- return true;
-
- tinyMCE.isLoaded = true;
-
- // IE produces JS error if TinyMCE is placed in a frame
- // It seems to have something to do with the selection not beeing
- // correctly initialized in IE so this hack solves the problem
- if (tinyMCE.isRealIE && document.body && window.location.href != window.top.location.href) {
- r = document.body.createTextRange();
- r.collapse(true);
- r.select();
- }
-
- tinyMCE.dispatchCallback(null, 'onpageload', 'onPageLoad');
-
- for (c=0; c<tinyMCE.configs.length; c++) {
- tinyMCE.settings = tinyMCE.configs[c];
-
- selector = tinyMCE.getParam("editor_selector");
- deselector = tinyMCE.getParam("editor_deselector");
- elementRefAr = [];
-
- // Add submit triggers
- if (document.forms && tinyMCE.settings.add_form_submit_trigger && !tinyMCE.submitTriggers) {
- for (i=0; i<document.forms.length; i++) {
- form = document.forms[i];
-
- tinyMCE.addEvent(form, "submit", TinyMCE_Engine.prototype.handleEvent);
- tinyMCE.addEvent(form, "reset", TinyMCE_Engine.prototype.handleEvent);
- tinyMCE.submitTriggers = true; // Do it only once
-
- // Patch the form.submit function
- if (tinyMCE.settings.submit_patch) {
- try {
- form.mceOldSubmit = form.submit;
- form.submit = TinyMCE_Engine.prototype.submitPatch;
- } catch (e) {
- // Do nothing
- }
- }
- }
- }
-
- // Add editor instances based on mode
- mode = tinyMCE.settings.mode;
- switch (mode) {
- case "exact":
- elements = tinyMCE.getParam('elements', '', true, ',');
-
- for (i=0; i<elements.length; i++) {
- element = tinyMCE._getElementById(elements[i]);
- trigger = element ? element.getAttribute(tinyMCE.settings.textarea_trigger) : "";
-
- if (new RegExp('\\b' + deselector + '\\b').test(tinyMCE.getAttrib(element, "class")))
- continue;
-
- if (trigger == "false")
- continue;
-
- if ((tinyMCE.settings.ask || tinyMCE.settings.convert_on_click) && element) {
- elementRefAr[elementRefAr.length] = element;
- continue;
- }
-
- if (element)
- tinyMCE.addMCEControl(element, elements[i]);
- }
- break;
-
- case "specific_textareas":
- case "textareas":
- elements = document.getElementsByTagName("textarea");
-
- for (i=0; i<elements.length; i++) {
- elm = elements.item(i);
- trigger = elm.getAttribute(tinyMCE.settings.textarea_trigger);
-
- if (selector !== '' && !new RegExp('\\b' + selector + '\\b').test(tinyMCE.getAttrib(elm, "class")))
- continue;
-
- if (selector !== '')
- trigger = selector !== '' ? "true" : "";
-
- if (new RegExp('\\b' + deselector + '\\b').test(tinyMCE.getAttrib(elm, "class")))
- continue;
-
- if ((mode == "specific_textareas" && trigger == "true") || (mode == "textareas" && trigger != "false"))
- elementRefAr[elementRefAr.length] = elm;
- }
- break;
- }
-
- for (i=0; i<elementRefAr.length; i++) {
- element = elementRefAr[i];
- elementId = element.name ? element.name : element.id;
-
- if (tinyMCE.settings.ask || tinyMCE.settings.convert_on_click) {
- // Focus breaks in Mozilla
- if (tinyMCE.isGecko) {
- settings = tinyMCE.settings;
-
- tinyMCE.addEvent(element, "focus", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
-
- if (element.nodeName != "TEXTAREA" && element.nodeName != "INPUT")
- tinyMCE.addEvent(element, "click", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
- // tinyMCE.addEvent(element, "mouseover", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
- } else {
- settings = tinyMCE.settings;
-
- tinyMCE.addEvent(element, "focus", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
- tinyMCE.addEvent(element, "click", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
- // tinyMCE.addEvent(element, "mouseenter", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
- }
- } else
- tinyMCE.addMCEControl(element, elementId);
- }
-
- // Handle auto focus
- if (tinyMCE.settings.auto_focus) {
- window.setTimeout(function () {
- var inst = tinyMCE.getInstanceById(tinyMCE.settings.auto_focus);
- inst.selection.selectNode(inst.getBody(), true, true);
- inst.contentWindow.focus();
- }, 100);
- }
-
- tinyMCE.dispatchCallback(null, 'oninit', 'onInit');
- }
- },
-
- isInstance : function(o) {
- return o != null && typeof(o) == "object" && o.isTinyMCE_Control;
- },
-
- getParam : function(name, default_value, strip_whitespace, split_chr) {
- var i, outArray, value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
-
- // Fix bool values
- if (value == "true" || value == "false")
- return (value == "true");
-
- if (strip_whitespace)
- value = tinyMCE.regexpReplace(value, "[ \t\r\n]", "");
-
- if (typeof(split_chr) != "undefined" && split_chr != null) {
- value = value.split(split_chr);
- outArray = [];
-
- for (i=0; i<value.length; i++) {
- if (value[i] && value[i] !== '')
- outArray[outArray.length] = value[i];
- }
-
- value = outArray;
- }
-
- return value;
- },
-
- getLang : function(name, default_value, parse_entities, va) {
- var v = (typeof(tinyMCELang[name]) == "undefined") ? default_value : tinyMCELang[name], n;
-
- if (parse_entities)
- v = tinyMCE.entityDecode(v);
-
- if (va) {
- for (n in va)
- v = this.replaceVar(v, n, va[n]);
- }
-
- return v;
- },
-
- entityDecode : function(s) {
- var e = document.createElement("div");
-
- e.innerHTML = s;
-
- return !e.firstChild ? s : e.firstChild.nodeValue;
- },
-
- addToLang : function(prefix, ar) {
- var k;
-
- for (k in ar) {
- if (typeof(ar[k]) == 'function')
- continue;
-
- tinyMCELang[(k.indexOf('lang_') == -1 ? 'lang_' : '') + (prefix !== '' ? (prefix + "_") : '') + k] = ar[k];
- }
-
- this.loadNextScript();
- },
-
- triggerNodeChange : function(focus, setup_content) {
- var elm, inst, editorId, undoIndex = -1, undoLevels = -1, doc, anySelection, st;
-
- if (tinyMCE.selectedInstance) {
- inst = tinyMCE.selectedInstance;
- elm = (typeof(setup_content) != "undefined" && setup_content) ? tinyMCE.selectedElement : inst.getFocusElement();
-
-/* if (elm == inst.lastTriggerEl)
- return;
-
- inst.lastTriggerEl = elm;*/
-
- editorId = inst.editorId;
- st = inst.selection.getSelectedText();
-
- if (tinyMCE.settings.auto_resize)
- inst.resizeToContent();
-
- if (setup_content && tinyMCE.isGecko && inst.isHidden())
- elm = inst.getBody();
-
- inst.switchSettings();
- anySelection = !inst.selection.isCollapsed();
-
- if (tinyMCE.settings.custom_undo_redo) {
- undoIndex = inst.undoRedo.undoIndex;
- undoLevels = inst.undoRedo.undoLevels.length;
- }
-
- tinyMCE.dispatchCallback(inst, 'handle_node_change_callback', 'handleNodeChange', editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content);
- }
-
- if (this.selectedInstance && (typeof(focus) == "undefined" || focus))
- this.selectedInstance.contentWindow.focus();
- },
-
- _customCleanup : function(inst, type, content) {
- var pl, po, i, customCleanup;
-
- // Call custom cleanup
- customCleanup = tinyMCE.settings.cleanup_callback;
- if (customCleanup != '')
- content = tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback, window)(type, content, inst);
-
- // Trigger theme cleanup
- po = tinyMCE.themes[tinyMCE.settings.theme];
- if (po && po.cleanup)
- content = po.cleanup(type, content, inst);
-
- // Trigger plugin cleanups
- pl = inst.plugins;
- for (i=0; i<pl.length; i++) {
- po = tinyMCE.plugins[pl[i]];
-
- if (po && po.cleanup)
- content = po.cleanup(type, content, inst);
- }
-
- return content;
- },
-
- setContent : function(h) {
- if (tinyMCE.selectedInstance) {
- tinyMCE.selectedInstance.execCommand('mceSetContent', false, h);
- tinyMCE.selectedInstance.repaint();
- }
- },
-
- importThemeLanguagePack : function(name) {
- if (typeof(name) == "undefined")
- name = tinyMCE.settings.theme;
-
- tinyMCE.loadScript(tinyMCE.baseURL + '/themes/' + name + '/langs/' + tinyMCE.settings.language + '.js');
- },
-
- importPluginLanguagePack : function(name) {
- var b = tinyMCE.baseURL + '/plugins/' + name;
-
- if (this.plugins[name])
- b = this.plugins[name].baseURL;
-
- tinyMCE.loadScript(b + '/langs/' + tinyMCE.settings.language + '.js');
- },
-
- applyTemplate : function(h, ag) {
- return h.replace(new RegExp('\\{\\$([a-z0-9_]+)\\}', 'gi'), function(m, s) {
- if (s.indexOf('lang_') == 0 && tinyMCELang[s])
- return tinyMCELang[s];
-
- if (ag && ag[s])
- return ag[s];
-
- if (tinyMCE.settings[s])
- return tinyMCE.settings[s];
-
- if (m == 'themeurl')
- return tinyMCE.themeURL;
-
- return m;
- });
- },
-
- replaceVar : function(h, r, v) {
- return h.replace(new RegExp('{\\\$' + r + '}', 'g'), v);
- },
-
- openWindow : function(template, args) {
- var html, width, height, x, y, resizable, scrollbars, url, name, win, modal, features;
-
- args = !args ? {} : args;
-
- args.mce_template_file = template.file;
- args.mce_width = template.width;
- args.mce_height = template.height;
- tinyMCE.windowArgs = args;
-
- html = template.html;
- if (!(width = parseInt(template.width)))
- width = 320;
-
- if (!(height = parseInt(template.height)))
- height = 200;
-
- // Add to height in M$ due to SP2 WHY DON'T YOU GUYS IMPLEMENT innerWidth of windows!!
- if (tinyMCE.isIE)
- height += 40;
- else
- height += 20;
-
- x = parseInt(screen.width / 2.0) - (width / 2.0);
- y = parseInt(screen.height / 2.0) - (height / 2.0);
-
- resizable = (args && args.resizable) ? args.resizable : "no";
- scrollbars = (args && args.scrollbars) ? args.scrollbars : "no";
-
- if (template.file.charAt(0) != '/' && template.file.indexOf('://') == -1)
- url = tinyMCE.baseURL + "/themes/" + tinyMCE.getParam("theme") + "/" + template.file;
- else
- url = template.file;
-
- // Replace all args as variables in URL
- for (name in args) {
- if (typeof(args[name]) == 'function')
- continue;
-
- url = tinyMCE.replaceVar(url, name, escape(args[name]));
- }
-
- if (html) {
- html = tinyMCE.replaceVar(html, "css", this.settings.popups_css);
- html = tinyMCE.applyTemplate(html, args);
-
- win = window.open("", "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=yes,minimizable=" + resizable + ",modal=yes,width=" + width + ",height=" + height + ",resizable=" + resizable);
- if (win == null) {
- alert(tinyMCELang.lang_popup_blocked);
- return;
- }
-
- win.document.write(html);
- win.document.close();
- win.resizeTo(width, height);
- win.focus();
- } else {
- if ((tinyMCE.isRealIE) && resizable != 'yes' && tinyMCE.settings.dialog_type == "modal") {
- height += 10;
-
- features = "resizable:" + resizable + ";scroll:" + scrollbars + ";status:yes;center:yes;help:no;dialogWidth:" + width + "px;dialogHeight:" + height + "px;";
-
- window.showModalDialog(url, window, features);
- } else {
- modal = (resizable == "yes") ? "no" : "yes";
-
- if (tinyMCE.isGecko && tinyMCE.isMac)
- modal = "no";
-
- if (template.close_previous != "no")
- try {tinyMCE.lastWindow.close();} catch (ex) {}
-
- win = window.open(url, "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=" + modal + ",minimizable=" + resizable + ",modal=" + modal + ",width=" + width + ",height=" + height + ",resizable=" + resizable);
- if (win == null) {
- alert(tinyMCELang.lang_popup_blocked);
- return;
- }
-
- if (template.close_previous != "no")
- tinyMCE.lastWindow = win;
-
- try {
- win.resizeTo(width, height);
- } catch(e) {
- // Ignore
- }
-
- // Make it bigger if statusbar is forced
- if (tinyMCE.isGecko && win.document) {
- if (win.document.defaultView.statusbar.visible)
- win.resizeBy(0, tinyMCE.isMac ? 10 : 24);
- }
-
- win.focus();
- }
- }
- },
-
- closeWindow : function(win) {
- win.close();
- },
-
- getVisualAidClass : function(class_name, state) {
- var i, classNames, ar, className, aidClass = tinyMCE.settings.visual_table_class;
-
- if (typeof(state) == "undefined")
- state = tinyMCE.settings.visual;
-
- // Split
- classNames = [];
- ar = class_name.split(' ');
- for (i=0; i<ar.length; i++) {
- if (ar[i] == aidClass)
- ar[i] = "";
-
- if (ar[i] !== '')
- classNames[classNames.length] = ar[i];
- }
-
- if (state)
- classNames[classNames.length] = aidClass;
-
- // Glue
- className = "";
- for (i=0; i<classNames.length; i++) {
- if (i > 0)
- className += " ";
-
- className += classNames[i];
- }
-
- return className;
- },
-
- handleVisualAid : function(el, deep, state, inst, skip_dispatch) {
- var i, x, y, tableElement, anchorName, oldW, oldH, bo, cn;
-
- if (!el)
- return;
-
- if (!skip_dispatch)
- tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst);
-
- tableElement = null;
-
- switch (el.nodeName) {
- case "TABLE":
- oldW = el.style.width;
- oldH = el.style.height;
- bo = tinyMCE.getAttrib(el, "border");
-
- bo = bo == '' || bo == "0" ? true : false;
-
- tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo));
-
- el.style.width = oldW;
- el.style.height = oldH;
-
- for (y=0; y<el.rows.length; y++) {
- for (x=0; x<el.rows[y].cells.length; x++) {
- cn = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x], "class"), state && bo);
- tinyMCE.setAttrib(el.rows[y].cells[x], "class", cn);
- }
- }
-
- break;
-
- case "A":
- anchorName = tinyMCE.getAttrib(el, "name");
-
- if (anchorName !== '' && state) {
- el.title = anchorName;
- tinyMCE.addCSSClass(el, 'mceItemAnchor');
- } else if (anchorName !== '' && !state)
- el.className = '';
-
- break;
- }
-
- if (deep && el.hasChildNodes()) {
- for (i=0; i<el.childNodes.length; i++)
- tinyMCE.handleVisualAid(el.childNodes[i], deep, state, inst, true);
- }
- },
-
- fixGeckoBaseHREFBug : function(m, e, h) {
- var xsrc, xhref;
-
- if (tinyMCE.isGecko) {
- if (m == 1) {
- h = h.replace(/\ssrc=/gi, " mce_tsrc=");
- h = h.replace(/\shref=/gi, " mce_thref=");
-
- return h;
- } else {
- // Why bother if there is no src or href broken
- if (!new RegExp('(src|href)=', 'g').test(h))
- return h;
-
- // Restore src and href that gets messed up by Gecko
- tinyMCE.selectElements(e, 'A,IMG,SELECT,AREA,IFRAME,BASE,INPUT,SCRIPT,EMBED,OBJECT,LINK', function (n) {
- xsrc = tinyMCE.getAttrib(n, "mce_tsrc");
- xhref = tinyMCE.getAttrib(n, "mce_thref");
-
- if (xsrc !== '') {
- try {
- n.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, xsrc);
- } catch (e) {
- // Ignore, Firefox cast exception if local file wasn't found
- }
-
- n.removeAttribute("mce_tsrc");
- }
-
- if (xhref !== '') {
- try {
- n.href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, xhref);
- } catch (e) {
- // Ignore, Firefox cast exception if local file wasn't found
- }
-
- n.removeAttribute("mce_thref");
- }
-
- return false;
- });
-
- // Restore text/comment nodes
- tinyMCE.selectNodes(e, function(n) {
- if (n.nodeType == 3 || n.nodeType == 8) {
- n.nodeValue = n.nodeValue.replace(/\smce_tsrc=/gi, " src=");
- n.nodeValue = n.nodeValue.replace(/\smce_thref=/gi, " href=");
- }
-
- return false;
- });
- }
- }
-
- return h;
- },
-
- _setHTML : function(doc, html_content) {
- var i, html, paras, node;
-
- // Force closed anchors open
- //html_content = html_content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');
-
- html_content = tinyMCE.cleanupHTMLCode(html_content);
-
- // Try innerHTML if it fails use pasteHTML in MSIE
- try {
- tinyMCE.setInnerHTML(doc.body, html_content);
- } catch (e) {
- if (this.isMSIE)
- doc.body.createTextRange().pasteHTML(html_content);
- }
-
- // Content duplication bug fix
- if (tinyMCE.isIE && tinyMCE.settings.fix_content_duplication) {
- // Remove P elements in P elements
- paras = doc.getElementsByTagName("P");
- for (i=0; i<paras.length; i++) {
- node = paras[i];
-
- while ((node = node.parentNode) != null) {
- if (node.nodeName == "P")
- node.outerHTML = node.innerHTML;
- }
- }
-
- // Content duplication bug fix (Seems to be word crap)
- html = doc.body.innerHTML;
-
- // Always set the htmlText output
- tinyMCE.setInnerHTML(doc.body, html);
- }
-
- tinyMCE.cleanupAnchors(doc);
-
- if (tinyMCE.getParam("convert_fonts_to_spans"))
- tinyMCE.convertSpansToFonts(doc);
- },
-
- getEditorId : function(form_element) {
- var inst = this.getInstanceById(form_element);
-
- if (!inst)
- return null;
-
- return inst.editorId;
- },
-
- getInstanceById : function(editor_id) {
- var inst = this.instances[editor_id], n;
-
- if (!inst) {
- for (n in tinyMCE.instances) {
- inst = tinyMCE.instances[n];
-
- if (!tinyMCE.isInstance(inst))
- continue;
-
- if (inst.formTargetElementId == editor_id)
- return inst;
- }
- } else
- return inst;
-
- return null;
- },
-
- queryInstanceCommandValue : function(editor_id, command) {
- var inst = tinyMCE.getInstanceById(editor_id);
-
- if (inst)
- return inst.queryCommandValue(command);
-
- return false;
- },
-
- queryInstanceCommandState : function(editor_id, command) {
- var inst = tinyMCE.getInstanceById(editor_id);
-
- if (inst)
- return inst.queryCommandState(command);
-
- return null;
- },
-
- setWindowArg : function(n, v) {
- this.windowArgs[n] = v;
- },
-
- getWindowArg : function(n, d) {
- return (typeof(this.windowArgs[n]) == "undefined") ? d : this.windowArgs[n];
- },
-
- getCSSClasses : function(editor_id, doc) {
- var i, c, x, rule, styles, rules, csses, selectorText, inst = tinyMCE.getInstanceById(editor_id);
- var cssClass, addClass, p;
-
- if (!inst)
- inst = tinyMCE.selectedInstance;
-
- if (!inst)
- return [];
-
- if (!doc)
- doc = inst.getDoc();
-
- // Is cached, use that
- if (inst && inst.cssClasses.length > 0)
- return inst.cssClasses;
-
- if (!doc)
- return;
-
- styles = doc.styleSheets;
-
- if (styles && styles.length > 0) {
- for (x=0; x<styles.length; x++) {
- csses = null;
-
- try {
- csses = tinyMCE.isIE ? doc.styleSheets(x).rules : styles[x].cssRules;
- } catch(e) {
- // Just ignore any errors I know this is ugly!!
- }
-
- if (!csses)
- return [];
-
- for (i=0; i<csses.length; i++) {
- selectorText = csses[i].selectorText;
-
- // Can be multiple rules per selector
- if (selectorText) {
- rules = selectorText.split(',');
- for (c=0; c<rules.length; c++) {
- rule = rules[c];
-
- // Strip spaces between selectors
- while (rule.indexOf(' ') == 0)
- rule = rule.substring(1);
-
- // Invalid rule
- if (rule.indexOf(' ') != -1 || rule.indexOf(':') != -1 || rule.indexOf('mceItem') != -1)
- continue;
-
- if (rule.indexOf(tinyMCE.settings.visual_table_class) != -1 || rule.indexOf('mceEditable') != -1 || rule.indexOf('mceNonEditable') != -1)
- continue;
-
- // Is class rule
- if (rule.indexOf('.') != -1) {
- cssClass = rule.substring(rule.indexOf('.') + 1);
- addClass = true;
-
- for (p=0; p<inst.cssClasses.length && addClass; p++) {
- if (inst.cssClasses[p] == cssClass)
- addClass = false;
- }
-
- if (addClass)
- inst.cssClasses[inst.cssClasses.length] = cssClass;
- }
- }
- }
- }
- }
- }
-
- return inst.cssClasses;
- },
-
- regexpReplace : function(in_str, reg_exp, replace_str, opts) {
- var re;
-
- if (in_str == null)
- return in_str;
-
- if (typeof(opts) == "undefined")
- opts = 'g';
-
- re = new RegExp(reg_exp, opts);
-
- return in_str.replace(re, replace_str);
- },
-
- trim : function(s) {
- return s.replace(/^\s*|\s*$/g, "");
- },
-
- cleanupEventStr : function(s) {
- s = "" + s;
- s = s.replace('function anonymous()\n{\n', '');
- s = s.replace('\n}', '');
- s = s.replace(/^return true;/gi, ''); // Remove event blocker
-
- return s;
- },
-
- getControlHTML : function(c) {
- var i, l, n, o, v, rtl = tinyMCE.getLang('lang_dir') == 'rtl';
-
- l = tinyMCE.plugins;
- for (n in l) {
- o = l[n];
-
- if (o.getControlHTML && (v = o.getControlHTML(c)) !== '') {
- if (rtl)
- return '<span dir="rtl">' + tinyMCE.replaceVar(v, "pluginurl", o.baseURL) + '</span>';
-
- return tinyMCE.replaceVar(v, "pluginurl", o.baseURL);
- }
- }
-
- o = tinyMCE.themes[tinyMCE.settings.theme];
- if (o.getControlHTML && (v = o.getControlHTML(c)) !== '') {
- if (rtl)
- return '<span dir="rtl">' + v + '</span>';
-
- return v;
- }
-
- return '';
- },
-
- evalFunc : function(f, idx, a, o) {
- o = !o ? window : o;
- f = typeof(f) == 'function' ? f : o[f];
-
- return f.apply(o, Array.prototype.slice.call(a, idx));
- },
-
- dispatchCallback : function(i, p, n) {
- return this.callFunc(i, p, n, 0, this.dispatchCallback.arguments);
- },
-
- executeCallback : function(i, p, n) {
- return this.callFunc(i, p, n, 1, this.executeCallback.arguments);
- },
-
- execCommandCallback : function(i, p, n) {
- return this.callFunc(i, p, n, 2, this.execCommandCallback.arguments);
- },
-
- callFunc : function(ins, p, n, m, a) {
- var l, i, on, o, s, v;
-
- s = m == 2;
-
- l = tinyMCE.getParam(p, '');
-
- if (l !== '' && (v = tinyMCE.evalFunc(l, 3, a)) == s && m > 0)
- return true;
-
- if (ins != null) {
- for (i=0, l = ins.plugins; i<l.length; i++) {
- o = tinyMCE.plugins[l[i]];
-
- if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0)
- return true;
- }
- }
-
- l = tinyMCE.themes;
- for (on in l) {
- o = l[on];
-
- if (o[n] && (v = tinyMCE.evalFunc(n, 3, a, o)) == s && m > 0)
- return true;
- }
-
- return false;
- },
-
- resolveDots : function(s, o) {
- var i;
-
- if (typeof(s) == 'string') {
- for (i=0, s=s.split('.'); i<s.length; i++)
- o = o[s[i]];
- } else
- o = s;
-
- return o;
- },
-
- xmlEncode : function(s) {
- return s ? ('' + s).replace(this.xmlEncodeRe, function (c, b) {
- switch (c) {
- case '&':
- return '&';
-
- case '"':
- return '"';
-
- case '<':
- return '<';
-
- case '>':
- return '>';
- }
-
- return c;
- }) : s;
- },
-
- add : function(c, m) {
- var n;
-
- for (n in m) {
- if (m.hasOwnProperty(n))
- c.prototype[n] = m[n];
- }
- },
-
- extend : function(p, np) {
- var o = {}, n;
-
- o.parent = p;
-
- for (n in p) {
- if (p.hasOwnProperty(n))
- o[n] = p[n];
- }
-
- for (n in np) {
- if (np.hasOwnProperty(n))
- o[n] = np[n];
- }
-
- return o;
- },
-
- hideMenus : function() {
- var e = tinyMCE.lastSelectedMenuBtn;
-
- if (tinyMCE.lastMenu) {
- tinyMCE.lastMenu.hide();
- tinyMCE.lastMenu = null;
- }
-
- if (e) {
- tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass);
- tinyMCE.lastSelectedMenuBtn = null;
- }
- }
-
- };
-
-// Global instances
-var TinyMCE = TinyMCE_Engine; // Compatiblity with gzip compressors
-var tinyMCE = new TinyMCE_Engine();
-var tinyMCELang = {};
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Control.class.js */
-
-function TinyMCE_Control(settings) {
- var t, i, tos, fu, p, x, fn, fu, pn, s = settings;
-
- this.undoRedoLevel = true;
- this.isTinyMCE_Control = true;
-
- // Default settings
- this.enabled = true;
- this.settings = s;
- this.settings.theme = tinyMCE.getParam("theme", "default");
- this.settings.width = tinyMCE.getParam("width", -1);
- this.settings.height = tinyMCE.getParam("height", -1);
- this.selection = new TinyMCE_Selection(this);
- this.undoRedo = new TinyMCE_UndoRedo(this);
- this.cleanup = new TinyMCE_Cleanup();
- this.shortcuts = [];
- this.hasMouseMoved = false;
- this.foreColor = this.backColor = "#999999";
- this.data = {};
- this.cssClasses = [];
-
- this.cleanup.init({
- valid_elements : s.valid_elements,
- extended_valid_elements : s.extended_valid_elements,
- valid_child_elements : s.valid_child_elements,
- entities : s.entities,
- entity_encoding : s.entity_encoding,
- debug : s.cleanup_debug,
- indent : s.apply_source_formatting,
- invalid_elements : s.invalid_elements,
- verify_html : s.verify_html,
- fix_content_duplication : s.fix_content_duplication,
- convert_fonts_to_spans : s.convert_fonts_to_spans
- });
-
- // Wrap old theme
- t = this.settings.theme;
- if (!tinyMCE.hasTheme(t)) {
- fn = tinyMCE.callbacks;
- tos = {};
-
- for (i=0; i<fn.length; i++) {
- if ((fu = window['TinyMCE_' + t + "_" + fn[i]]))
- tos[fn[i]] = fu;
- }
-
- tinyMCE.addTheme(t, tos);
- }
-
- // Wrap old plugins
- this.plugins = [];
- p = tinyMCE.getParam('plugins', '', true, ',');
- if (p.length > 0) {
- for (i=0; i<p.length; i++) {
- pn = p[i];
-
- if (pn.charAt(0) == '-')
- pn = pn.substring(1);
-
- if (!tinyMCE.hasPlugin(pn)) {
- fn = tinyMCE.callbacks;
- tos = {};
-
- for (x=0; x<fn.length; x++) {
- if ((fu = window['TinyMCE_' + pn + "_" + fn[x]]))
- tos[fn[x]] = fu;
- }
-
- tinyMCE.addPlugin(pn, tos);
- }
-
- this.plugins[this.plugins.length] = pn;
- }
- }
-};
-
-TinyMCE_Control.prototype = {
- selection : null,
-
- settings : null,
-
- cleanup : null,
-
- getData : function(na) {
- var o = this.data[na];
-
- if (!o)
- o = this.data[na] = {};
-
- return o;
- },
-
- hasPlugin : function(n) {
- var i;
-
- for (i=0; i<this.plugins.length; i++) {
- if (this.plugins[i] == n)
- return true;
- }
-
- return false;
- },
-
- addPlugin : function(n, p) {
- if (!this.hasPlugin(n)) {
- tinyMCE.addPlugin(n, p);
- this.plugins[this.plugins.length] = n;
- }
- },
-
- repaint : function() {
- var s, b, ex;
-
- if (tinyMCE.isRealIE)
- return;
-
- try {
- s = this.selection;
- b = s.getBookmark(true);
- this.getBody().style.display = 'none';
- this.getDoc().execCommand('selectall', false, null);
- this.getSel().collapseToStart();
- this.getBody().style.display = 'block';
- s.moveToBookmark(b);
- } catch (ex) {
- // Ignore
- }
- },
-
- switchSettings : function() {
- if (tinyMCE.configs.length > 1 && tinyMCE.currentConfig != this.settings.index) {
- tinyMCE.settings = this.settings;
- tinyMCE.currentConfig = this.settings.index;
- }
- },
-
- select : function() {
- var oldInst = tinyMCE.selectedInstance;
-
- if (oldInst != this) {
- if (oldInst)
- oldInst.execCommand('mceEndTyping');
-
- tinyMCE.dispatchCallback(this, 'select_instance_callback', 'selectInstance', this, oldInst);
- tinyMCE.selectedInstance = this;
- }
- },
-
- getBody : function() {
- return this.contentBody ? this.contentBody : this.getDoc().body;
- },
-
- getDoc : function() {
-// return this.contentDocument ? this.contentDocument : this.contentWindow.document; // Removed due to IE 5.5 ?
- return this.contentWindow.document;
- },
-
- getWin : function() {
- return this.contentWindow;
- },
-
- getContainerWin : function() {
- return this.containerWindow ? this.containerWindow : window;
- },
-
- getViewPort : function() {
- return tinyMCE.getViewPort(this.getWin());
- },
-
- getParentNode : function(n, f) {
- return tinyMCE.getParentNode(n, f, this.getBody());
- },
-
- getParentElement : function(n, na, f) {
- return tinyMCE.getParentElement(n, na, f, this.getBody());
- },
-
- getParentBlockElement : function(n) {
- return tinyMCE.getParentBlockElement(n, this.getBody());
- },
-
- resizeToContent : function() {
- var d = this.getDoc(), b = d.body, de = d.documentElement;
-
- this.iframeElement.style.height = (tinyMCE.isRealIE) ? b.scrollHeight : de.offsetHeight + 'px';
- },
-
- addShortcut : function(m, k, d, cmd, ui, va) {
- var n = typeof(k) == "number", ie = tinyMCE.isIE, c, sc, i, scl = this.shortcuts;
-
- if (!tinyMCE.getParam('custom_shortcuts'))
- return false;
-
- m = m.toLowerCase();
- k = ie && !n ? k.toUpperCase() : k;
- c = n ? null : k.charCodeAt(0);
- d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d;
-
- sc = {
- alt : m.indexOf('alt') != -1,
- ctrl : m.indexOf('ctrl') != -1,
- shift : m.indexOf('shift') != -1,
- charCode : c,
- keyCode : n ? k : (ie ? c : null),
- desc : d,
- cmd : cmd,
- ui : ui,
- val : va
- };
-
- for (i=0; i<scl.length; i++) {
- if (sc.alt == scl[i].alt && sc.ctrl == scl[i].ctrl && sc.shift == scl[i].shift
- && sc.charCode == scl[i].charCode && sc.keyCode == scl[i].keyCode) {
- return false;
- }
- }
-
- scl[scl.length] = sc;
-
- return true;
- },
-
- handleShortcut : function(e) {
- var i, s, o;
-
- // Normal key press, then ignore it
- if (!e.altKey && !e.ctrlKey)
- return false;
-
- s = this.shortcuts;
-
- for (i=0; i<s.length; i++) {
- o = s[i];
-
- if (o.alt == e.altKey && o.ctrl == e.ctrlKey && (o.keyCode == e.keyCode || o.charCode == e.charCode)) {
- if (o.cmd && (e.type == "keydown" || (e.type == "keypress" && !tinyMCE.isOpera)))
- tinyMCE.execCommand(o.cmd, o.ui, o.val);
-
- tinyMCE.cancelEvent(e);
- return true;
- }
- }
-
- return false;
- },
-
- autoResetDesignMode : function() {
- // Add fix for tab/style.display none/block problems in Gecko
- if (!tinyMCE.isIE && this.isHidden() && tinyMCE.getParam('auto_reset_designmode'))
- eval('try { this.getDoc().designMode = "On"; this.useCSS = false; } catch(e) {}');
- },
-
- isHidden : function() {
- var s;
-
- if (tinyMCE.isIE)
- return false;
-
- s = this.getSel();
-
- // Weird, wheres that cursor selection?
- return (!s || !s.rangeCount || s.rangeCount == 0);
- },
-
- isDirty : function() {
- // Is content modified and not in a submit procedure
- return tinyMCE.trim(this.startContent) != tinyMCE.trim(this.getBody().innerHTML) && !this.isNotDirty;
- },
-
- _mergeElements : function(scmd, pa, ch, override) {
- var st, stc, className, n;
-
- if (scmd == "removeformat") {
- pa.className = "";
- pa.style.cssText = "";
- ch.className = "";
- ch.style.cssText = "";
- return;
- }
-
- st = tinyMCE.parseStyle(tinyMCE.getAttrib(pa, "style"));
- stc = tinyMCE.parseStyle(tinyMCE.getAttrib(ch, "style"));
- className = tinyMCE.getAttrib(pa, "class");
-
- // Removed class adding due to bug #1478272
- className = tinyMCE.getAttrib(ch, "class");
-
- if (override) {
- for (n in st) {
- if (typeof(st[n]) == 'function')
- continue;
-
- stc[n] = st[n];
- }
- } else {
- for (n in stc) {
- if (typeof(stc[n]) == 'function')
- continue;
-
- st[n] = stc[n];
- }
- }
-
- tinyMCE.setAttrib(pa, "style", tinyMCE.serializeStyle(st));
- tinyMCE.setAttrib(pa, "class", tinyMCE.trim(className));
- ch.className = "";
- ch.style.cssText = "";
- ch.removeAttribute("class");
- ch.removeAttribute("style");
- },
-
- _fixRootBlocks : function() {
- var rb, b, ne, be, nx, bm;
-
- rb = tinyMCE.getParam('forced_root_block');
- if (!rb)
- return;
-
- b = this.getBody();
- ne = b.firstChild;
-
- while (ne) {
- nx = ne.nextSibling;
-
- // If text node or inline element wrap it in a block element
- if ((ne.nodeType == 3 && ne.nodeValue.replace(/\s+/g, '') != '') || (ne.nodeType == 1 && !tinyMCE.blockRegExp.test(ne.nodeName))) {
- if (!bm)
- bm = this.selection.getBookmark();
-
- if (!be) {
- be = this.getDoc().createElement(rb);
- be.appendChild(ne.cloneNode(true));
- b.replaceChild(be, ne);
- } else {
- be.appendChild(ne.cloneNode(true));
- b.removeChild(ne);
- }
- } else
- be = null;
-
- ne = nx;
- }
-
- if (bm)
- this.selection.moveToBookmark(bm);
- },
-
- _fixTrailingNbsp : function() {
- var s = this.selection, e = s.getFocusElement(), bm, v;
-
- if (e && tinyMCE.blockRegExp.test(e.nodeName) && e.firstChild) {
- v = e.firstChild.nodeValue;
-
- if (v && v.length > 1 && /(^\u00a0|\u00a0$)/.test(v)) {
- e.firstChild.nodeValue = v.replace(/(^\u00a0|\u00a0$)/, '');
- s.selectNode(e.firstChild, true, false, false); // Select and collapse
- }
- }
- },
-
- _setUseCSS : function(b) {
- var d = this.getDoc();
-
- try {d.execCommand("useCSS", false, !b);} catch (ex) {}
- try {d.execCommand("styleWithCSS", false, b);} catch (ex) {}
-
- if (!tinyMCE.getParam("table_inline_editing"))
- try {d.execCommand('enableInlineTableEditing', false, "false");} catch (ex) {}
-
- if (!tinyMCE.getParam("object_resizing"))
- try {d.execCommand('enableObjectResizing', false, "false");} catch (ex) {}
- },
-
- execCommand : function(command, user_interface, value) {
- var i, x, z, align, img, div, doc = this.getDoc(), win = this.getWin(), focusElm = this.getFocusElement();
-
- // Is not a undo specific command
- if (!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel', 'gi').test(command))
- this.undoBookmark = null;
-
- // Mozilla issue
- if (!tinyMCE.isIE && !this.useCSS) {
- this._setUseCSS(false);
- this.useCSS = true;
- }
-
- //debug("command: " + command + ", user_interface: " + user_interface + ", value: " + value);
- this.contentDocument = doc; // <-- Strange, unless this is applied Mozilla 1.3 breaks
-
- // Don't dispatch key commands
- if (!/mceStartTyping|mceEndTyping/.test(command)) {
- if (tinyMCE.execCommandCallback(this, 'execcommand_callback', 'execCommand', this.editorId, this.getBody(), command, user_interface, value))
- return;
- }
-
- // Fix align on images
- if (focusElm && focusElm.nodeName == "IMG") {
- align = focusElm.getAttribute('align');
- img = command == "JustifyCenter" ? focusElm.cloneNode(false) : focusElm;
-
- switch (command) {
- case "JustifyLeft":
- if (align == 'left') {
- img.setAttribute('align', ''); // Needed for IE
- img.removeAttribute('align');
- } else
- img.setAttribute('align', 'left');
-
- // Remove the div
- div = focusElm.parentNode;
- if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
- div.parentNode.replaceChild(img, div);
-
- this.selection.selectNode(img);
- this.repaint();
- tinyMCE.triggerNodeChange();
- return;
-
- case "JustifyCenter":
- img.setAttribute('align', ''); // Needed for IE
- img.removeAttribute('align');
-
- // Is centered
- div = tinyMCE.getParentElement(focusElm, "div");
- if (div && div.style.textAlign == "center") {
- // Remove div
- if (div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
- div.parentNode.replaceChild(img, div);
- } else {
- // Add div
- div = this.getDoc().createElement("div");
- div.style.textAlign = 'center';
- div.appendChild(img);
- focusElm.parentNode.replaceChild(div, focusElm);
- }
-
- this.selection.selectNode(img);
- this.repaint();
- tinyMCE.triggerNodeChange();
- return;
-
- case "JustifyRight":
- if (align == 'right') {
- img.setAttribute('align', ''); // Needed for IE
- img.removeAttribute('align');
- } else
- img.setAttribute('align', 'right');
-
- // Remove the div
- div = focusElm.parentNode;
- if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
- div.parentNode.replaceChild(img, div);
-
- this.selection.selectNode(img);
- this.repaint();
- tinyMCE.triggerNodeChange();
- return;
- }
- }
-
- if (tinyMCE.settings.force_br_newlines) {
- var alignValue = "";
-
- if (doc.selection.type != "Control") {
- switch (command) {
- case "JustifyLeft":
- alignValue = "left";
- break;
-
- case "JustifyCenter":
- alignValue = "center";
- break;
-
- case "JustifyFull":
- alignValue = "justify";
- break;
-
- case "JustifyRight":
- alignValue = "right";
- break;
- }
-
- if (alignValue !== '') {
- var rng = doc.selection.createRange();
-
- if ((divElm = tinyMCE.getParentElement(rng.parentElement(), "div")) != null)
- divElm.setAttribute("align", alignValue);
- else if (rng.pasteHTML && rng.htmlText.length > 0)
- rng.pasteHTML('<div align="' + alignValue + '">' + rng.htmlText + "</div>");
-
- tinyMCE.triggerNodeChange();
- return;
- }
- }
- }
-
- switch (command) {
- case "mceRepaint":
- this.repaint();
- return true;
-
- case "JustifyLeft":
- case "JustifyCenter":
- case "JustifyFull":
- case "JustifyRight":
- var el = tinyMCE.getParentNode(focusElm, function(n) {return tinyMCE.getAttrib(n, 'align');});
-
- if (el) {
- el.setAttribute('align', ''); // Needed for IE
- el.removeAttribute('align');
- } else
- this.getDoc().execCommand(command, user_interface, value);
-
- tinyMCE.triggerNodeChange();
-
- return true;
-
- case "unlink":
- // Unlink if caret is inside link
- if (tinyMCE.isGecko && this.getSel().isCollapsed) {
- focusElm = tinyMCE.getParentElement(focusElm, 'A');
-
- if (focusElm)
- this.selection.selectNode(focusElm, false);
- }
-
- this.getDoc().execCommand(command, user_interface, value);
-
- tinyMCE.isGecko && this.getSel().collapseToEnd();
-
- tinyMCE.triggerNodeChange();
-
- return true;
-
- case "InsertUnorderedList":
- case "InsertOrderedList":
- this.getDoc().execCommand(command, user_interface, value);
- tinyMCE.triggerNodeChange();
- break;
-
- case "Strikethrough":
- this.getDoc().execCommand(command, user_interface, value);
- tinyMCE.triggerNodeChange();
- break;
-
- case "mceSelectNode":
- this.selection.selectNode(value);
- tinyMCE.triggerNodeChange();
- tinyMCE.selectedNode = value;
- break;
-
- case "FormatBlock":
- if (value == null || value == '') {
- var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");
-
- if (elm)
- this.execCommand("mceRemoveNode", false, elm);
- } else {
- if (!this.cleanup.isValid(value))
- return true;
-
- if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value))
- value = value.replace(/[^a-z]/gi, '');
-
- if (tinyMCE.isIE && new RegExp('blockquote|code|samp', 'gi').test(value)) {
- var b = this.selection.getBookmark();
- this.getDoc().execCommand("FormatBlock", false, '<p>');
- tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value);
- this.selection.moveToBookmark(b);
- } else
- this.getDoc().execCommand("FormatBlock", false, value);
- }
-
- tinyMCE.triggerNodeChange();
-
- break;
-
- case "mceRemoveNode":
- if (!value)
- value = tinyMCE.getParentElement(this.getFocusElement());
-
- if (tinyMCE.isIE) {
- value.outerHTML = value.innerHTML;
- } else {
- var rng = value.ownerDocument.createRange();
- rng.setStartBefore(value);
- rng.setEndAfter(value);
- rng.deleteContents();
- rng.insertNode(rng.createContextualFragment(value.innerHTML));
- }
-
- tinyMCE.triggerNodeChange();
-
- break;
-
- case "mceSelectNodeDepth":
- var parentNode = this.getFocusElement();
- for (i=0; parentNode; i++) {
- if (parentNode.nodeName.toLowerCase() == "body")
- break;
-
- if (parentNode.nodeName.toLowerCase() == "#text") {
- i--;
- parentNode = parentNode.parentNode;
- continue;
- }
-
- if (i == value) {
- this.selection.selectNode(parentNode, false);
- tinyMCE.triggerNodeChange();
- tinyMCE.selectedNode = parentNode;
- return;
- }
-
- parentNode = parentNode.parentNode;
- }
-
- break;
-
- case "mceSetStyleInfo":
- case "SetStyleInfo":
- var rng = this.getRng();
- var sel = this.getSel();
- var scmd = value.command;
- var sname = value.name;
- var svalue = value.value == null ? '' : value.value;
- //var svalue = value['value'] == null ? '' : value['value'];
- var wrapper = value.wrapper ? value.wrapper : "span";
- var parentElm = null;
- var invalidRe = new RegExp("^BODY|HTML$", "g");
- var invalidParentsRe = tinyMCE.settings.merge_styles_invalid_parents !== '' ? new RegExp(tinyMCE.settings.merge_styles_invalid_parents, "gi") : null;
-
- // Whole element selected check
- if (tinyMCE.isIE) {
- // Control range
- if (rng.item)
- parentElm = rng.item(0);
- else {
- var pelm = rng.parentElement();
- var prng = doc.selection.createRange();
- prng.moveToElementText(pelm);
-
- if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) {
- if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName))
- parentElm = pelm;
- }
- }
- } else {
- var felm = this.getFocusElement();
- if (sel.isCollapsed || (new RegExp('td|tr|tbody|table|img', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode))
- parentElm = felm;
- }
-
- // Whole element selected
- if (parentElm && !invalidRe.test(parentElm.nodeName)) {
- if (scmd == "setstyle")
- tinyMCE.setStyleAttrib(parentElm, sname, svalue);
-
- if (scmd == "setattrib")
- tinyMCE.setAttrib(parentElm, sname, svalue);
-
- if (scmd == "removeformat") {
- parentElm.style.cssText = '';
- tinyMCE.setAttrib(parentElm, 'class', '');
- }
-
- // Remove style/attribs from all children
- var ch = tinyMCE.getNodeTree(parentElm, [], 1);
- for (z=0; z<ch.length; z++) {
- if (ch[z] == parentElm)
- continue;
-
- if (scmd == "setstyle")
- tinyMCE.setStyleAttrib(ch[z], sname, '');
-
- if (scmd == "setattrib")
- tinyMCE.setAttrib(ch[z], sname, '');
-
- if (scmd == "removeformat") {
- ch[z].style.cssText = '';
- tinyMCE.setAttrib(ch[z], 'class', '');
- }
- }
- } else {
- this._setUseCSS(false); // Bug in FF when running in fullscreen
- doc.execCommand("FontName", false, "#mce_temp_font#");
- var elementArray = tinyMCE.getElementsByAttributeValue(this.getBody(), "font", "face", "#mce_temp_font#");
-
- // Change them all
- for (x=0; x<elementArray.length; x++) {
- elm = elementArray[x];
- if (elm) {
- var spanElm = doc.createElement(wrapper);
-
- if (scmd == "setstyle")
- tinyMCE.setStyleAttrib(spanElm, sname, svalue);
-
- if (scmd == "setattrib")
- tinyMCE.setAttrib(spanElm, sname, svalue);
-
- if (scmd == "removeformat") {
- spanElm.style.cssText = '';
- tinyMCE.setAttrib(spanElm, 'class', '');
- }
-
- if (elm.hasChildNodes()) {
- for (i=0; i<elm.childNodes.length; i++)
- spanElm.appendChild(elm.childNodes[i].cloneNode(true));
- }
-
- spanElm.setAttribute("mce_new", "true");
- elm.parentNode.replaceChild(spanElm, elm);
-
- // Remove style/attribs from all children
- var ch = tinyMCE.getNodeTree(spanElm, [], 1);
- for (z=0; z<ch.length; z++) {
- if (ch[z] == spanElm)
- continue;
-
- if (scmd == "setstyle")
- tinyMCE.setStyleAttrib(ch[z], sname, '');
-
- if (scmd == "setattrib")
- tinyMCE.setAttrib(ch[z], sname, '');
-
- if (scmd == "removeformat") {
- ch[z].style.cssText = '';
- tinyMCE.setAttrib(ch[z], 'class', '');
- }
- }
- }
- }
- }
-
- // Cleaup wrappers
- var nodes = doc.getElementsByTagName(wrapper);
- for (i=nodes.length-1; i>=0; i--) {
- var elm = nodes[i];
- var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true";
-
- elm.removeAttribute("mce_new");
-
- // Is only child a element
- if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) {
- //tinyMCE.debug("merge1" + isNew);
- this._mergeElements(scmd, elm, elm.childNodes[0], isNew);
- continue;
- }
-
- // Is I the only child
- if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) {
- //tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName);
- if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName))
- this._mergeElements(scmd, elm.parentNode, elm, false);
- }
- }
-
- // Remove empty wrappers
- var nodes = doc.getElementsByTagName(wrapper);
- for (i=nodes.length-1; i>=0; i--) {
- var elm = nodes[i], isEmpty = true;
-
- // Check if it has any attribs
- var tmp = doc.createElement("body");
- tmp.appendChild(elm.cloneNode(false));
-
- // Is empty span, remove it
- tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), '');
- //tinyMCE.debug(tmp.innerHTML);
- if (new RegExp('<span>', 'gi').test(tmp.innerHTML)) {
- for (x=0; x<elm.childNodes.length; x++) {
- if (elm.parentNode != null)
- elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true), elm);
- }
-
- elm.parentNode.removeChild(elm);
- }
- }
-
- // Re add the visual aids
- if (scmd == "removeformat")
- tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
-
- tinyMCE.triggerNodeChange();
-
- break;
-
- case "FontName":
- if (value == null) {
- var s = this.getSel();
-
- // Find font and select it
- if (tinyMCE.isGecko && s.isCollapsed) {
- var f = tinyMCE.getParentElement(this.getFocusElement(), "font");
-
- if (f != null)
- this.selection.selectNode(f, false);
- }
-
- // Remove format
- this.getDoc().execCommand("RemoveFormat", false, null);
-
- // Collapse range if font was found
- if (f != null && tinyMCE.isGecko) {
- var r = this.getRng().cloneRange();
- r.collapse(true);
- s.removeAllRanges();
- s.addRange(r);
- }
- } else
- this.getDoc().execCommand('FontName', false, value);
-
- if (tinyMCE.isGecko)
- window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
-
- return;
-
- case "FontSize":
- this.getDoc().execCommand('FontSize', false, value);
-
- if (tinyMCE.isGecko)
- window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
-
- return;
-
- case "forecolor":
- value = value == null ? this.foreColor : value;
- value = tinyMCE.trim(value);
- value = value.charAt(0) != '#' ? (isNaN('0x' + value) ? value : '#' + value) : value;
-
- this.foreColor = value;
- this.getDoc().execCommand('forecolor', false, value);
- break;
-
- case "HiliteColor":
- value = value == null ? this.backColor : value;
- value = tinyMCE.trim(value);
- value = value.charAt(0) != '#' ? (isNaN('0x' + value) ? value : '#' + value) : value;
- this.backColor = value;
-
- if (tinyMCE.isGecko || tinyMCE.isOpera) {
- this._setUseCSS(true);
- this.getDoc().execCommand('hilitecolor', false, value);
- this._setUseCSS(false);
- } else
- this.getDoc().execCommand('BackColor', false, value);
- break;
-
- case "Cut":
- case "Copy":
- case "Paste":
- var cmdFailed = false;
-
- // Try executing command
- eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');
-
- if (tinyMCE.isOpera && cmdFailed)
- alert('Currently not supported by your browser, use keyboard shortcuts instead.');
-
- // Alert error in gecko if command failed
- if (tinyMCE.isGecko && cmdFailed) {
- // Confirm more info
- if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))
- window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', 'mceExternal');
-
- return;
- } else
- tinyMCE.triggerNodeChange();
- break;
-
- case "mceSetContent":
- if (!value)
- value = "";
-
- // Call custom cleanup code
- value = tinyMCE.storeAwayURLs(value);
- value = tinyMCE._customCleanup(this, "insert_to_editor", value);
-
- if (this.getBody().nodeName == 'BODY')
- tinyMCE._setHTML(doc, value);
- else
- this.getBody().innerHTML = value;
-
- tinyMCE.setInnerHTML(this.getBody(), tinyMCE._cleanupHTML(this, doc, this.settings, this.getBody(), false, false, false, true));
- tinyMCE.convertAllRelativeURLs(this.getBody());
-
- // Cleanup any mess left from storyAwayURLs
- tinyMCE._removeInternal(this.getBody());
-
- // When editing always use fonts internaly
- if (tinyMCE.getParam("convert_fonts_to_spans"))
- tinyMCE.convertSpansToFonts(doc);
-
- tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
- tinyMCE._setEventsEnabled(this.getBody(), false);
- this._addBogusBR();
-
- return true;
-
- case "mceCleanup":
- var b = this.selection.getBookmark();
- tinyMCE._setHTML(this.contentDocument, this.getBody().innerHTML);
- tinyMCE.setInnerHTML(this.getBody(), tinyMCE._cleanupHTML(this, this.contentDocument, this.settings, this.getBody(), this.visualAid));
- tinyMCE.convertAllRelativeURLs(doc.body);
-
- // When editing always use fonts internaly
- if (tinyMCE.getParam("convert_fonts_to_spans"))
- tinyMCE.convertSpansToFonts(doc);
-
- tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
- tinyMCE._setEventsEnabled(this.getBody(), false);
- this._addBogusBR();
- this.repaint();
- this.selection.moveToBookmark(b);
- tinyMCE.triggerNodeChange();
- break;
-
- case "mceReplaceContent":
- // Force empty string
- if (!value)
- value = '';
-
- this.getWin().focus();
-
- var selectedText = "";
-
- if (tinyMCE.isIE) {
- var rng = doc.selection.createRange();
- selectedText = rng.text;
- } else
- selectedText = this.getSel().toString();
-
- if (selectedText.length > 0) {
- value = tinyMCE.replaceVar(value, "selection", selectedText);
- tinyMCE.execCommand('mceInsertContent', false, value);
- }
-
- this._addBogusBR();
- tinyMCE.triggerNodeChange();
- break;
-
- case "mceSetAttribute":
- if (typeof(value) == 'object') {
- var targetElms = (typeof(value.targets) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value.targets;
- var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms);
-
- if (targetNode) {
- targetNode.setAttribute(value.name, value.value);
- tinyMCE.triggerNodeChange();
- }
- }
- break;
-
- case "mceSetCSSClass":
- this.execCommand("mceSetStyleInfo", false, {command : "setattrib", name : "class", value : value});
- break;
-
- case "mceInsertRawHTML":
- var key = 'tiny_mce_marker';
-
- this.execCommand('mceBeginUndoLevel');
-
- // Insert marker key
- this.execCommand('mceInsertContent', false, key);
-
- // Store away scroll pos
- var scrollX = this.getBody().scrollLeft + this.getDoc().documentElement.scrollLeft;
- var scrollY = this.getBody().scrollTop + this.getDoc().documentElement.scrollTop;
-
- // Find marker and replace with RAW HTML
- var html = this.getBody().innerHTML;
- if ((pos = html.indexOf(key)) != -1)
- tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length));
-
- // Restore scoll pos
- this.contentWindow.scrollTo(scrollX, scrollY);
-
- this.execCommand('mceEndUndoLevel');
-
- break;
-
- case "mceInsertContent":
- // Force empty string
- if (!value)
- value = '';
-
- var insertHTMLFailed = false;
-
- // Removed since it produced problems in IE
- // this.getWin().focus();
-
- if (tinyMCE.isGecko || tinyMCE.isOpera) {
- try {
- // Is plain text or HTML, &, etc will be encoded wrong in FF
- if (value.indexOf('<') == -1 && !value.match(/(&| |<|>)/g)) {
- var r = this.getRng();
- var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value));
- var s = this.getSel();
- var r2 = r.cloneRange();
-
- // Insert text at cursor position
- s.removeAllRanges();
- r.deleteContents();
- r.insertNode(n);
-
- // Move the cursor to the end of text
- r2.selectNode(n);
- r2.collapse(false);
- s.removeAllRanges();
- s.addRange(r2);
- } else {
- value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value);
- this.getDoc().execCommand('inserthtml', false, value);
- tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value);
- }
- } catch (ex) {
- insertHTMLFailed = true;
- }
-
- if (!insertHTMLFailed) {
- tinyMCE.triggerNodeChange();
- return;
- }
- }
-
- if (!tinyMCE.isIE) {
- var isHTML = value.indexOf('<') != -1;
- var sel = this.getSel();
- var rng = this.getRng();
-
- if (isHTML) {
- if (tinyMCE.isSafari) {
- var tmpRng = this.getDoc().createRange();
-
- tmpRng.setStart(this.getBody(), 0);
- tmpRng.setEnd(this.getBody(), 0);
-
- value = tmpRng.createContextualFragment(value);
- } else
- value = rng.createContextualFragment(value);
- } else {
- // Setup text node
- value = doc.createTextNode(tinyMCE.entityDecode(value));
- }
-
- // Insert plain text in Safari
- if (tinyMCE.isSafari && !isHTML) {
- this.execCommand('InsertText', false, value.nodeValue);
- tinyMCE.triggerNodeChange();
- return true;
- } else if (tinyMCE.isSafari && isHTML) {
- rng.deleteContents();
- rng.insertNode(value);
- tinyMCE.triggerNodeChange();
- return true;
- }
-
- rng.deleteContents();
-
- // If target node is text do special treatment, (Mozilla 1.3 fix)
- if (rng.startContainer.nodeType == 3) {
- var node = rng.startContainer.splitText(rng.startOffset);
- node.parentNode.insertBefore(value, node);
- } else
- rng.insertNode(value);
-
- if (!isHTML) {
- // Removes weird selection trails
- sel.selectAllChildren(doc.body);
- sel.removeAllRanges();
-
- // Move cursor to end of content
- var rng = doc.createRange();
-
- rng.selectNode(value);
- rng.collapse(false);
-
- sel.addRange(rng);
- } else
- rng.collapse(false);
-
- tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value);
- } else {
- var rng = doc.selection.createRange(), tmpRng = null;
- var c = value.indexOf('<!--') != -1;
-
- // Fix comment bug, add tag before comments
- if (c)
- value = tinyMCE.uniqueTag + value;
-
- // tmpRng = rng.duplicate(); // Store away range (Fixes Undo bookmark bug in IE)
-
- if (rng.item)
- rng.item(0).outerHTML = value;
- else
- rng.pasteHTML(value);
-
- //if (tmpRng)
- // tmpRng.select(); // Restore range (Fixes Undo bookmark bug in IE)
-
- // Remove unique tag
- if (c) {
- var e = this.getDoc().getElementById('mceTMPElement');
- e.parentNode.removeChild(e);
- }
- }
-
- tinyMCE.execCommand("mceAddUndoLevel");
- tinyMCE.triggerNodeChange();
- break;
-
- case "mceStartTyping":
- if (tinyMCE.settings.custom_undo_redo && this.undoRedo.typingUndoIndex == -1) {
- this.undoRedo.typingUndoIndex = this.undoRedo.undoIndex;
- tinyMCE.typingUndoIndex = tinyMCE.undoIndex;
- this.execCommand('mceAddUndoLevel');
- }
- break;
-
- case "mceEndTyping":
- if (tinyMCE.settings.custom_undo_redo && this.undoRedo.typingUndoIndex != -1) {
- this.execCommand('mceAddUndoLevel');
- this.undoRedo.typingUndoIndex = -1;
- }
-
- tinyMCE.typingUndoIndex = -1;
- break;
-
- case "mceBeginUndoLevel":
- this.undoRedoLevel = false;
- break;
-
- case "mceEndUndoLevel":
- this.undoRedoLevel = true;
- this.execCommand('mceAddUndoLevel');
- break;
-
- case "mceAddUndoLevel":
- if (tinyMCE.settings.custom_undo_redo && this.undoRedoLevel) {
- if (this.undoRedo.add())
- tinyMCE.triggerNodeChange(false);
- }
- break;
-
- case "Undo":
- if (tinyMCE.settings.custom_undo_redo) {
- tinyMCE.execCommand("mceEndTyping");
- this.undoRedo.undo();
- tinyMCE.triggerNodeChange();
- } else
- this.getDoc().execCommand(command, user_interface, value);
- break;
-
- case "Redo":
- if (tinyMCE.settings.custom_undo_redo) {
- tinyMCE.execCommand("mceEndTyping");
- this.undoRedo.redo();
- tinyMCE.triggerNodeChange();
- } else
- this.getDoc().execCommand(command, user_interface, value);
- break;
-
- case "mceToggleVisualAid":
- this.visualAid = !this.visualAid;
- tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
- tinyMCE.triggerNodeChange();
- break;
-
- case "Indent":
- this.getDoc().execCommand(command, user_interface, value);
- tinyMCE.triggerNodeChange();
-
- if (tinyMCE.isIE) {
- var n = tinyMCE.getParentElement(this.getFocusElement(), "blockquote");
- do {
- if (n && n.nodeName == "BLOCKQUOTE") {
- n.removeAttribute("dir");
- n.removeAttribute("style");
- }
- } while (n != null && (n = n.parentNode) != null);
- }
- break;
-
- case "RemoveFormat":
- case "removeformat":
- var text = this.selection.getSelectedText();
-
- if (tinyMCE.isOpera) {
- this.getDoc().execCommand("RemoveFormat", false, null);
- return;
- }
-
- if (tinyMCE.isIE) {
- try {
- var rng = doc.selection.createRange();
- rng.execCommand("RemoveFormat", false, null);
- } catch (e) {
- // Do nothing
- }
-
- this.execCommand("mceSetStyleInfo", false, {command : "removeformat"});
- } else {
- this.getDoc().execCommand(command, user_interface, value);
-
- this.execCommand("mceSetStyleInfo", false, {command : "removeformat"});
- }
-
- // Remove class
- if (text.length == 0)
- this.execCommand("mceSetCSSClass", false, "");
-
- tinyMCE.triggerNodeChange();
- break;
-
- default:
- this.getDoc().execCommand(command, user_interface, value);
-
- if (tinyMCE.isGecko)
- window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
- else
- tinyMCE.triggerNodeChange();
- }
-
- // Add undo level after modification
- if (command != "mceAddUndoLevel" && command != "Undo" && command != "Redo" && command != "mceStartTyping" && command != "mceEndTyping")
- tinyMCE.execCommand("mceAddUndoLevel");
- },
-
- queryCommandValue : function(c) {
- try {
- return this.getDoc().queryCommandValue(c);
- } catch (e) {
- return null;
- }
- },
-
- queryCommandState : function(c) {
- return this.getDoc().queryCommandState(c);
- },
-
- _addBogusBR : function() {
- var b = this.getBody();
-
- if (tinyMCE.isGecko && !b.hasChildNodes())
- b.innerHTML = '<br _moz_editor_bogus_node="TRUE" />';
- },
-
- _onAdd : function(replace_element, form_element_name, target_document) {
- var hc, th, tos, editorTemplate, targetDoc, deltaWidth, deltaHeight, html, rng, fragment;
- var dynamicIFrame, tElm, doc, parentElm;
-
- th = this.settings.theme;
- tos = tinyMCE.themes[th];
-
- targetDoc = target_document ? target_document : document;
-
- this.targetDoc = targetDoc;
-
- tinyMCE.themeURL = tinyMCE.baseURL + "/themes/" + this.settings.theme;
- this.settings.themeurl = tinyMCE.themeURL;
-
- if (!replace_element) {
- alert("Error: Could not find the target element.");
- return false;
- }
-
- if (tos.getEditorTemplate)
- editorTemplate = tos.getEditorTemplate(this.settings, this.editorId);
-
- deltaWidth = editorTemplate.delta_width ? editorTemplate.delta_width : 0;
- deltaHeight = editorTemplate.delta_height ? editorTemplate.delta_height : 0;
- html = '<span id="' + this.editorId + '_parent" class="mceEditorContainer">' + editorTemplate.html;
-
- html = tinyMCE.replaceVar(html, "editor_id", this.editorId);
-
- if (!this.settings.default_document)
- this.settings.default_document = tinyMCE.baseURL + "/blank.htm";
-
- this.settings.old_width = this.settings.width;
- this.settings.old_height = this.settings.height;
-
- // Set default width, height
- if (this.settings.width == -1)
- this.settings.width = replace_element.offsetWidth;
-
- if (this.settings.height == -1)
- this.settings.height = replace_element.offsetHeight;
-
- // Try the style width
- if (this.settings.width == 0)
- this.settings.width = replace_element.style.width;
-
- // Try the style height
- if (this.settings.height == 0)
- this.settings.height = replace_element.style.height;
-
- // If no width/height then default to 320x240, better than nothing
- if (this.settings.width == 0)
- this.settings.width = 320;
-
- if (this.settings.height == 0)
- this.settings.height = 240;
-
- this.settings.area_width = parseInt(this.settings.width);
- this.settings.area_height = parseInt(this.settings.height);
- this.settings.area_width += deltaWidth;
- this.settings.area_height += deltaHeight;
- this.settings.width_style = "" + this.settings.width;
- this.settings.height_style = "" + this.settings.height;
-
- // Special % handling
- if (("" + this.settings.width).indexOf('%') != -1)
- this.settings.area_width = "100%";
- else
- this.settings.width_style += 'px';
-
- if (("" + this.settings.height).indexOf('%') != -1)
- this.settings.area_height = "100%";
- else
- this.settings.height_style += 'px';
-
- if (("" + replace_element.style.width).indexOf('%') != -1) {
- this.settings.width = replace_element.style.width;
- this.settings.area_width = "100%";
- this.settings.width_style = "100%";
- }
-
- if (("" + replace_element.style.height).indexOf('%') != -1) {
- this.settings.height = replace_element.style.height;
- this.settings.area_height = "100%";
- this.settings.height_style = "100%";
- }
-
- html = tinyMCE.applyTemplate(html);
-
- this.settings.width = this.settings.old_width;
- this.settings.height = this.settings.old_height;
-
- this.visualAid = this.settings.visual;
- this.formTargetElementId = form_element_name;
-
- // Get replace_element contents
- if (replace_element.nodeName == "TEXTAREA" || replace_element.nodeName == "INPUT")
- this.startContent = replace_element.value;
- else
- this.startContent = replace_element.innerHTML;
-
- // If not text area or input
- if (replace_element.nodeName != "TEXTAREA" && replace_element.nodeName != "INPUT") {
- this.oldTargetElement = replace_element;
-
- // Debug mode
- hc = '<input type="hidden" id="' + form_element_name + '" name="' + form_element_name + '" />';
- this.oldTargetDisplay = tinyMCE.getStyle(this.oldTargetElement, 'display', 'inline');
- this.oldTargetElement.style.display = "none";
-
- html += '</span>';
-
- if (tinyMCE.isGecko)
- html = hc + html;
- else
- html += hc;
-
- // Output HTML and set editable
- if (tinyMCE.isGecko) {
- rng = replace_element.ownerDocument.createRange();
- rng.setStartBefore(replace_element);
-
- fragment = rng.createContextualFragment(html);
- tinyMCE.insertAfter(fragment, replace_element);
- } else
- replace_element.insertAdjacentHTML("beforeBegin", html);
- } else {
- html += '</span>';
-
- // Just hide the textarea element
- this.oldTargetElement = replace_element;
-
- this.oldTargetDisplay = tinyMCE.getStyle(this.oldTargetElement, 'display', 'inline');
- this.oldTargetElement.style.display = "none";
-
- // Output HTML and set editable
- if (tinyMCE.isGecko) {
- rng = replace_element.ownerDocument.createRange();
- rng.setStartBefore(replace_element);
-
- fragment = rng.createContextualFragment(html);
- tinyMCE.insertAfter(fragment, replace_element);
- } else
- replace_element.insertAdjacentHTML("beforeBegin", html);
- }
-
- // Setup iframe
- dynamicIFrame = false;
- tElm = targetDoc.getElementById(this.editorId);
-
- if (!tinyMCE.isIE) {
- // Node case is preserved in XML strict mode
- if (tElm && (tElm.nodeName == "SPAN" || tElm.nodeName == "span")) {
- tElm = tinyMCE._createIFrame(tElm, targetDoc);
- dynamicIFrame = true;
- }
-
- this.targetElement = tElm;
- this.iframeElement = tElm;
- this.contentDocument = tElm.contentDocument;
- this.contentWindow = tElm.contentWindow;
-
- //this.getDoc().designMode = "on";
- } else {
- if (tElm && tElm.nodeName == "SPAN")
- tElm = tinyMCE._createIFrame(tElm, targetDoc, targetDoc.parentWindow);
- else
- tElm = targetDoc.frames[this.editorId];
-
- this.targetElement = tElm;
- this.iframeElement = targetDoc.getElementById(this.editorId);
-
- if (tinyMCE.isOpera) {
- this.contentDocument = this.iframeElement.contentDocument;
- this.contentWindow = this.iframeElement.contentWindow;
- dynamicIFrame = true;
- } else {
- this.contentDocument = tElm.window.document;
- this.contentWindow = tElm.window;
- }
-
- this.getDoc().designMode = "on";
- }
-
- // Setup base HTML
- doc = this.contentDocument;
- if (dynamicIFrame) {
- html = tinyMCE.getParam('doctype') + '<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="' + tinyMCE.settings.base_href + '" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';
-
- try {
- if (!this.isHidden())
- this.getDoc().designMode = "on";
-
- doc.open();
- doc.write(html);
- doc.close();
- } catch (e) {
- // Failed Mozilla 1.3
- this.getDoc().location.href = tinyMCE.baseURL + "/blank.htm";
- }
- }
-
- // This timeout is needed in MSIE 5.5 for some odd reason
- // it seems that the document.frames isn't initialized yet?
- if (tinyMCE.isIE)
- window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\"" + this.editorId + "\"]);", 1);
-
- // Setup element references
- parentElm = this.targetDoc.getElementById(this.editorId + '_parent');
- this.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling;
-
- tinyMCE.setupContent(this.editorId, true);
-
- return true;
- },
-
- setBaseHREF : function(u) {
- var h, b, d, nl;
-
- d = this.getDoc();
- nl = d.getElementsByTagName("base");
- b = nl.length > 0 ? nl[0] : null;
-
- if (!b) {
- nl = d.getElementsByTagName("head");
- h = nl.length > 0 ? nl[0] : null;
-
- b = d.createElement("base");
- b.setAttribute('href', u);
- h.appendChild(b);
- } else {
- if (u == '' || u == null)
- b.parentNode.removeChild(b);
- else
- b.setAttribute('href', u);
- }
- },
-
- getHTML : function(r) {
- var h, d = this.getDoc(), b = this.getBody();
-
- if (r)
- return b.innerHTML;
-
- h = tinyMCE._cleanupHTML(this, d, this.settings, b, false, true, false, true);
-
- if (tinyMCE.getParam("convert_fonts_to_spans"))
- tinyMCE.convertSpansToFonts(d);
-
- return h;
- },
-
- setHTML : function(h) {
- this.execCommand('mceSetContent', false, h);
- this.repaint();
- },
-
- getFocusElement : function() {
- return this.selection.getFocusElement();
- },
-
- getSel : function() {
- return this.selection.getSel();
- },
-
- getRng : function() {
- return this.selection.getRng();
- },
-
- triggerSave : function(skip_cleanup, skip_callback) {
- var e, nl = [], i, s, content, htm;
-
- if (!this.enabled)
- return;
-
- this.switchSettings();
- s = tinyMCE.settings;
-
- // Force hidden tabs visible while serializing
- if (tinyMCE.isRealIE) {
- e = this.iframeElement;
-
- do {
- if (e.style && e.style.display == 'none') {
- e.style.display = 'block';
- nl[nl.length] = {elm : e, type : 'style'};
- }
-
- if (e.style && s.hidden_tab_class.length > 0 && e.className.indexOf(s.hidden_tab_class) != -1) {
- e.className = s.display_tab_class;
- nl[nl.length] = {elm : e, type : 'class'};
- }
- } while ((e = e.parentNode) != null)
- }
-
- tinyMCE.settings.preformatted = false;
-
- // Default to false
- if (typeof(skip_cleanup) == "undefined")
- skip_cleanup = false;
-
- // Default to false
- if (typeof(skip_callback) == "undefined")
- skip_callback = false;
-
- tinyMCE._setHTML(this.getDoc(), this.getBody().innerHTML);
-
- // Remove visual aids when cleanup is disabled
- if (this.settings.cleanup == false) {
- tinyMCE.handleVisualAid(this.getBody(), true, false, this);
- tinyMCE._setEventsEnabled(this.getBody(), true);
- }
-
- tinyMCE._customCleanup(this, "submit_content_dom", this.contentWindow.document.body);
- htm = skip_cleanup ? this.getBody().innerHTML : tinyMCE._cleanupHTML(this, this.getDoc(), this.settings, this.getBody(), tinyMCE.visualAid, true, true);
- htm = tinyMCE._customCleanup(this, "submit_content", htm);
-
- if (!skip_callback && tinyMCE.settings.save_callback !== '')
- content = tinyMCE.resolveDots(tinyMCE.settings.save_callback, window)(this.formTargetElementId,htm,this.getBody());
-
- // Use callback content if available
- if ((typeof(content) != "undefined") && content != null)
- htm = content;
-
- // Replace some weird entities (Bug: #1056343)
- htm = tinyMCE.regexpReplace(htm, "(", "(", "gi");
- htm = tinyMCE.regexpReplace(htm, ")", ")", "gi");
- htm = tinyMCE.regexpReplace(htm, ";", ";", "gi");
- htm = tinyMCE.regexpReplace(htm, """, """, "gi");
- htm = tinyMCE.regexpReplace(htm, "^", "^", "gi");
-
- if (this.formElement)
- this.formElement.value = htm;
-
- if (tinyMCE.isSafari && this.formElement)
- this.formElement.innerText = htm;
-
- // Hide them again (tabs in MSIE)
- for (i=0; i<nl.length; i++) {
- if (nl[i].type == 'style')
- nl[i].elm.style.display = 'none';
- else
- nl[i].elm.className = s.hidden_tab_class;
- }
- }
-
- };
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Cleanup.class.js */
-
-tinyMCE.add(TinyMCE_Engine, {
- cleanupHTMLCode : function(s) {
- s = s.replace(new RegExp('<p \\/>', 'gi'), '<p> </p>');
- s = s.replace(new RegExp('<p>\\s*<\\/p>', 'gi'), '<p> </p>');
-
- // Fix close BR elements
- s = s.replace(new RegExp('<br>\\s*<\\/br>', 'gi'), '<br />');
-
- // Open closed tags like <b/> to <b></b>
- s = s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>', 'gi'), '<$1$2$3></$1$2>');
-
- // Remove trailing space <b > to <b>
- s = s.replace(new RegExp('\\s+></', 'gi'), '></');
-
- // Close tags <img></img> to <img/>
- s = s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>', 'gi'), '<$1$2 />');
-
- // Weird MSIE bug, <p><hr /></p> breaks runtime?
- if (tinyMCE.isIE)
- s = s.replace(new RegExp('<p><hr \\/><\\/p>', 'gi'), "<hr>");
-
- // Weird tags will make IE error #bug: 1538495
- if (tinyMCE.isIE)
- s = s.replace(/<!(\s*)\/>/g, '');
-
- // Convert relative anchors to absolute URLs ex: #something to file.htm#something
- // Removed: Since local document anchors should never be forced absolute example edit.php?id=something
- //if (tinyMCE.getParam('convert_urls'))
- // s = s.replace(new RegExp('(href=\"{0,1})(\\s*#)', 'gi'), '$1' + tinyMCE.settings.document_base_url + "#");
-
- return s;
- },
-
- parseStyle : function(str) {
- var ar = [], st, i, re, pa;
-
- if (str == null)
- return ar;
-
- st = str.split(';');
-
- tinyMCE.clearArray(ar);
-
- for (i=0; i<st.length; i++) {
- if (st[i] == '')
- continue;
-
- re = new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');
- pa = st[i].replace(re, '$1||$2').split('||');
- //tinyMCE.debug(str, pa[0] + "=" + pa[1], st[i].replace(re, '$1||$2'));
- if (pa.length == 2)
- ar[pa[0].toLowerCase()] = pa[1];
- }
-
- return ar;
- },
-
- compressStyle : function(ar, pr, sf, res) {
- var box = [], i, a;
-
- box[0] = ar[pr + '-top' + sf];
- box[1] = ar[pr + '-left' + sf];
- box[2] = ar[pr + '-right' + sf];
- box[3] = ar[pr + '-bottom' + sf];
-
- for (i=0; i<box.length; i++) {
- if (box[i] == null)
- return;
-
- if (i && box[i] != box[i-1])
- return;
- }
-
- // They are all the same
- ar[res] = box[0];
- ar[pr + '-top' + sf] = null;
- ar[pr + '-left' + sf] = null;
- ar[pr + '-right' + sf] = null;
- ar[pr + '-bottom' + sf] = null;
- },
-
- serializeStyle : function(ar) {
- var str = "", key, val, m;
-
- // Compress box
- tinyMCE.compressStyle(ar, "border", "", "border");
- tinyMCE.compressStyle(ar, "border", "-width", "border-width");
- tinyMCE.compressStyle(ar, "border", "-color", "border-color");
- tinyMCE.compressStyle(ar, "border", "-style", "border-style");
- tinyMCE.compressStyle(ar, "padding", "", "padding");
- tinyMCE.compressStyle(ar, "margin", "", "margin");
-
- for (key in ar) {
- val = ar[key];
-
- if (typeof(val) == 'function')
- continue;
-
- if (key.indexOf('mso-') == 0)
- continue;
-
- if (val != null && val !== '') {
- val = '' + val; // Force string
-
- // Fix style URL
- val = val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)", 'gi'), "url('$1')");
-
- // Convert URL
- if (val.indexOf('url(') != -1 && tinyMCE.getParam('convert_urls')) {
- m = new RegExp("url\\('(.*?)'\\)").exec(val);
-
- if (m.length > 1)
- val = "url('" + eval(tinyMCE.getParam('urlconverter_callback') + "(m[1], null, true);") + "')";
- }
-
- // Force HEX colors
- if (tinyMCE.getParam("force_hex_style_colors"))
- val = tinyMCE.convertRGBToHex(val, true);
-
- val = val.replace(/\"/g, '\'');
-
- if (val != "url('')")
- str += key.toLowerCase() + ": " + val + "; ";
- }
- }
-
- if (new RegExp('; $').test(str))
- str = str.substring(0, str.length - 2);
-
- return str;
- },
-
- convertRGBToHex : function(s, k) {
- var re, rgb;
-
- if (s.toLowerCase().indexOf('rgb') != -1) {
- re = new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)", "gi");
- rgb = s.replace(re, "$1,$2,$3,$4,$5").split(',');
-
- if (rgb.length == 5) {
- r = parseInt(rgb[1]).toString(16);
- g = parseInt(rgb[2]).toString(16);
- b = parseInt(rgb[3]).toString(16);
-
- r = r.length == 1 ? '0' + r : r;
- g = g.length == 1 ? '0' + g : g;
- b = b.length == 1 ? '0' + b : b;
-
- s = "#" + r + g + b;
-
- if (k)
- s = rgb[0] + s + rgb[4];
- }
- }
-
- return s;
- },
-
- convertHexToRGB : function(s) {
- if (s.indexOf('#') != -1) {
- s = s.replace(new RegExp('[^0-9A-F]', 'gi'), '');
- return "rgb(" + parseInt(s.substring(0, 2), 16) + "," + parseInt(s.substring(2, 4), 16) + "," + parseInt(s.substring(4, 6), 16) + ")";
- }
-
- return s;
- },
-
- convertSpansToFonts : function(doc) {
- var s, i, size, fSize, x, fFace, fColor, sizes = tinyMCE.getParam('font_size_style_values').replace(/\s+/, '').split(',');
-
- s = tinyMCE.selectElements(doc, 'span,font');
- for (i=0; i<s.length; i++) {
- size = tinyMCE.trim(s[i].style.fontSize).toLowerCase();
- fSize = 0;
-
- for (x=0; x<sizes.length; x++) {
- if (sizes[x] == size) {
- fSize = x + 1;
- break;
- }
- }
-
- if (fSize > 0) {
- tinyMCE.setAttrib(s[i], 'size', fSize);
- s[i].style.fontSize = '';
- }
-
- fFace = s[i].style.fontFamily;
- if (fFace != null && fFace !== '') {
- tinyMCE.setAttrib(s[i], 'face', fFace);
- s[i].style.fontFamily = '';
- }
-
- fColor = s[i].style.color;
- if (fColor != null && fColor !== '') {
- tinyMCE.setAttrib(s[i], 'color', tinyMCE.convertRGBToHex(fColor));
- s[i].style.color = '';
- }
- }
- },
-
- convertFontsToSpans : function(doc) {
- var fsClasses, s, i, fSize, fFace, fColor, sizes = tinyMCE.getParam('font_size_style_values').replace(/\s+/, '').split(',');
-
- fsClasses = tinyMCE.getParam('font_size_classes');
- if (fsClasses !== '')
- fsClasses = fsClasses.replace(/\s+/, '').split(',');
- else
- fsClasses = null;
-
- s = tinyMCE.selectElements(doc, 'span,font');
- for (i=0; i<s.length; i++) {
- fSize = tinyMCE.getAttrib(s[i], 'size');
- fFace = tinyMCE.getAttrib(s[i], 'face');
- fColor = tinyMCE.getAttrib(s[i], 'color');
-
- if (fSize !== '') {
- fSize = parseInt(fSize);
-
- if (fSize > 0 && fSize < 8) {
- if (fsClasses != null)
- tinyMCE.setAttrib(s[i], 'class', fsClasses[fSize-1]);
- else
- s[i].style.fontSize = sizes[fSize-1];
- }
-
- s[i].removeAttribute('size');
- }
-
- if (fFace !== '') {
- s[i].style.fontFamily = fFace;
- s[i].removeAttribute('face');
- }
-
- if (fColor !== '') {
- s[i].style.color = fColor;
- s[i].removeAttribute('color');
- }
- }
- },
-
- cleanupAnchors : function(doc) {
- var i, cn, x, an = doc.getElementsByTagName("a");
-
- // Loops backwards due to bug #1467987
- for (i=an.length-1; i>=0; i--) {
- if (tinyMCE.getAttrib(an[i], "name") !== '' && tinyMCE.getAttrib(an[i], "href") == '') {
- cn = an[i].childNodes;
-
- for (x=cn.length-1; x>=0; x--)
- tinyMCE.insertAfter(cn[x], an[i]);
- }
- }
- },
-
- getContent : function(editor_id) {
- if (typeof(editor_id) != "undefined")
- tinyMCE.getInstanceById(editor_id).select();
-
- if (tinyMCE.selectedInstance)
- return tinyMCE.selectedInstance.getHTML();
-
- return null;
- },
-
- _fixListElements : function(d) {
- var nl, x, a = ['ol', 'ul'], i, n, p, r = new RegExp('^(OL|UL)$'), np;
-
- for (x=0; x<a.length; x++) {
- nl = d.getElementsByTagName(a[x]);
-
- for (i=0; i<nl.length; i++) {
- n = nl[i];
- p = n.parentNode;
-
- if (r.test(p.nodeName)) {
- np = tinyMCE.prevNode(n, 'LI');
-
- if (!np) {
- np = d.createElement('li');
- np.innerHTML = ' ';
- np.appendChild(n);
- p.insertBefore(np, p.firstChild);
- } else
- np.appendChild(n);
- }
- }
- }
- },
-
- _fixTables : function(d) {
- var nl, i, n, p, np, x, t;
-
- nl = d.getElementsByTagName('table');
- for (i=0; i<nl.length; i++) {
- n = nl[i];
-
- if ((p = tinyMCE.getParentElement(n, 'p,h1,h2,h3,h4,h5,h6')) != null) {
- np = p.cloneNode(false);
- np.removeAttribute('id');
-
- t = n;
-
- while ((n = n.nextSibling))
- np.appendChild(n);
-
- tinyMCE.insertAfter(np, p);
- tinyMCE.insertAfter(t, p);
- }
- }
- },
-
- _cleanupHTML : function(inst, doc, config, elm, visual, on_save, on_submit, inn) {
- var h, d, t1, t2, t3, t4, t5, c, s, nb;
-
- if (!tinyMCE.getParam('cleanup'))
- return elm.innerHTML;
-
- on_save = typeof(on_save) == 'undefined' ? false : on_save;
-
- c = inst.cleanup;
- s = inst.settings;
- d = c.settings.debug;
-
- if (d)
- t1 = new Date().getTime();
-
- inst._fixRootBlocks();
-
- if (tinyMCE.getParam("convert_fonts_to_spans"))
- tinyMCE.convertFontsToSpans(doc);
-
- if (tinyMCE.getParam("fix_list_elements"))
- tinyMCE._fixListElements(doc);
-
- if (tinyMCE.getParam("fix_table_elements"))
- tinyMCE._fixTables(doc);
-
- // Call custom cleanup code
- tinyMCE._customCleanup(inst, on_save ? "get_from_editor_dom" : "insert_to_editor_dom", doc.body);
-
- if (d)
- t2 = new Date().getTime();
-
- c.settings.on_save = on_save;
-
- c.idCount = 0;
- c.serializationId++; // Unique ID needed for the content duplication bug
- c.serializedNodes = [];
- c.sourceIndex = -1;
-
- if (s.cleanup_serializer == "xml")
- h = c.serializeNodeAsXML(elm, inn);
- else
- h = c.serializeNodeAsHTML(elm, inn);
-
- if (d)
- t3 = new Date().getTime();
-
- // Post processing
- nb = tinyMCE.getParam('entity_encoding') == 'numeric' ? ' ' : ' ';
- h = h.replace(/<\/?(body|head|html)[^>]*>/gi, '');
- h = h.replace(new RegExp(' (rowspan="1"|colspan="1")', 'g'), '');
- h = h.replace(/<p><hr \/><\/p>/g, '<hr />');
- h = h.replace(/<p>( | )<\/p><hr \/><p>( | )<\/p>/g, '<hr />');
- h = h.replace(/<td>\s*<br \/>\s*<\/td>/g, '<td>' + nb + '</td>');
- h = h.replace(/<p>\s*<br \/>\s*<\/p>/g, '<p>' + nb + '</p>');
- h = h.replace(/<br \/>$/, ''); // Remove last BR for Gecko
- h = h.replace(/<br \/><\/p>/g, '</p>'); // Remove last BR in P tags for Gecko
- h = h.replace(/<p>\s*( | )\s*<br \/>\s*( | )\s*<\/p>/g, '<p>' + nb + '</p>');
- h = h.replace(/<p>\s*( | )\s*<br \/>\s*<\/p>/g, '<p>' + nb + '</p>');
- h = h.replace(/<p>\s*<br \/>\s* \s*<\/p>/g, '<p>' + nb + '</p>');
- h = h.replace(new RegExp('<a>(.*?)<\\/a>', 'g'), '$1');
- h = h.replace(/<p([^>]*)>\s*<\/p>/g, '<p$1>' + nb + '</p>');
-
- // Clean body
- if (/^\s*(<br \/>|<p> <\/p>|<p> <\/p>|<p><\/p>)\s*$/.test(h))
- h = '';
-
- // If preformatted
- if (s.preformatted) {
- h = h.replace(/^<pre>/, '');
- h = h.replace(/<\/pre>$/, '');
- h = '<pre>' + h + '</pre>';
- }
-
- // Gecko specific processing
- if (tinyMCE.isGecko) {
- // Makes no sence but FF generates it!!
- h = h.replace(/<br \/>\s*<\/li>/g, '</li>');
- h = h.replace(/ \s*<\/(dd|dt)>/g, '</$1>');
- h = h.replace(/<o:p _moz-userdefined="" \/>/g, '');
- h = h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g, '<td$1>' + nb + '</td>');
- }
-
- if (s.force_br_newlines)
- h = h.replace(/<p>( | )<\/p>/g, '<br />');
-
- // Call custom cleanup code
- h = tinyMCE._customCleanup(inst, on_save ? "get_from_editor" : "insert_to_editor", h);
-
- // Remove internal classes
- if (on_save) {
- h = h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|' + s.visual_table_class + ')', 'g'), '');
- h = h.replace(new RegExp(' ?class=""', 'g'), '');
- }
-
- if (s.remove_linebreaks && !c.settings.indent)
- h = h.replace(/\n|\r/g, ' ');
-
- if (d)
- t4 = new Date().getTime();
-
- if (on_save && c.settings.indent)
- h = c.formatHTML(h);
-
- // If encoding (not recommended option)
- if (on_submit && (s.encoding == "xml" || s.encoding == "html"))
- h = c.xmlEncode(h);
-
- if (d)
- t5 = new Date().getTime();
-
- if (c.settings.debug)
- tinyMCE.debug("Cleanup in ms: Pre=" + (t2-t1) + ", Serialize: " + (t3-t2) + ", Post: " + (t4-t3) + ", Format: " + (t5-t4) + ", Sum: " + (t5-t1) + ".");
-
- return h;
- }
-});
-
-function TinyMCE_Cleanup() {
- this.isIE = (navigator.appName == "Microsoft Internet Explorer");
- this.rules = tinyMCE.clearArray([]);
-
- // Default config
- this.settings = {
- indent_elements : 'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',
- newline_before_elements : 'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',
- newline_after_elements : 'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',
- newline_before_after_elements : 'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',
- indent_char : '\t',
- indent_levels : 1,
- entity_encoding : 'raw',
- valid_elements : '*[*]',
- entities : '',
- url_converter : '',
- invalid_elements : '',
- verify_html : false
- };
-
- this.vElements = tinyMCE.clearArray([]);
- this.vElementsRe = '';
- this.closeElementsRe = /^(IMG|BR|HR|LINK|META|BASE|INPUT|AREA)$/;
- this.codeElementsRe = /^(SCRIPT|STYLE)$/;
- this.serializationId = 0;
- this.mceAttribs = {
- href : 'mce_href',
- src : 'mce_src',
- type : 'mce_type'
- };
-}
-
-TinyMCE_Cleanup.prototype = {
- init : function(s) {
- var n, a, i, ir, or, st;
-
- for (n in s)
- this.settings[n] = s[n];
-
- // Setup code formating
- s = this.settings;
-
- // Setup regexps
- this.inRe = this._arrayToRe(s.indent_elements.split(','), '', '^<(', ')[^>]*');
- this.ouRe = this._arrayToRe(s.indent_elements.split(','), '', '^<\\/(', ')[^>]*');
- this.nlBeforeRe = this._arrayToRe(s.newline_before_elements.split(','), 'gi', '<(', ')([^>]*)>');
- this.nlAfterRe = this._arrayToRe(s.newline_after_elements.split(','), 'gi', '<(', ')([^>]*)>');
- this.nlBeforeAfterRe = this._arrayToRe(s.newline_before_after_elements.split(','), 'gi', '<(\\/?)(', ')([^>]*)>');
- this.serializedNodes = [];
- this.serializationId = 0;
-
- if (s.invalid_elements !== '')
- this.iveRe = this._arrayToRe(s.invalid_elements.toUpperCase().split(','), 'g', '^(', ')$');
- else
- this.iveRe = null;
-
- // Setup separator
- st = '';
- for (i=0; i<s.indent_levels; i++)
- st += s.indent_char;
-
- this.inStr = st;
-
- // If verify_html if false force *[*]
- if (!s.verify_html) {
- s.valid_elements = '*[*]';
- s.extended_valid_elements = '';
- }
-
- this.fillStr = s.entity_encoding == "named" ? " " : " ";
- this.idCount = 0;
- this.xmlEncodeRe = new RegExp('[\u007F-\uFFFF<>&"]', 'g');
- },
-
- addRuleStr : function(s) {
- var r = this.parseRuleStr(s), n;
-
- for (n in r) {
- if (r[n])
- this.rules[n] = r[n];
- }
-
- this.vElements = tinyMCE.clearArray([]);
-
- for (n in this.rules) {
- if (this.rules[n])
- this.vElements[this.vElements.length] = this.rules[n].tag;
- }
-
- this.vElementsRe = this._arrayToRe(this.vElements, '');
- },
-
- isValid : function(n) {
- if (!this.rulesDone)
- this._setupRules(); // Will initialize cleanup rules
-
- // Empty is true since it removes formatting
- if (!n)
- return true;
-
- // Clean the name up a bit
- n = n.replace(/[^a-z0-9]+/gi, '').toUpperCase();
-
- return !tinyMCE.getParam('cleanup') || this.vElementsRe.test(n);
- },
-
- addChildRemoveRuleStr : function(s) {
- var x, y, p, i, t, tn, ta, cl, r;
-
- if (!s)
- return;
-
- ta = s.split(',');
- for (x=0; x<ta.length; x++) {
- s = ta[x];
-
- // Split tag/children
- p = this.split(/\[|\]/, s);
- if (p == null || p.length < 1)
- t = s.toUpperCase();
- else
- t = p[0].toUpperCase();
-
- // Handle all tag names
- tn = this.split('/', t);
- for (y=0; y<tn.length; y++) {
- r = "^(";
-
- // Build regex
- cl = this.split(/\|/, p[1]);
- for (i=0; i<cl.length; i++) {
- if (cl[i] == '%istrict')
- r += tinyMCE.inlineStrict;
- else if (cl[i] == '%itrans')
- r += tinyMCE.inlineTransitional;
- else if (cl[i] == '%istrict_na')
- r += tinyMCE.inlineStrict.substring(2);
- else if (cl[i] == '%itrans_na')
- r += tinyMCE.inlineTransitional.substring(2);
- else if (cl[i] == '%btrans')
- r += tinyMCE.blockElms;
- else if (cl[i] == '%strict')
- r += tinyMCE.blockStrict;
- else
- r += (cl[i].charAt(0) != '#' ? cl[i].toUpperCase() : cl[i]);
-
- r += (i != cl.length - 1 ? '|' : '');
- }
-
- r += ')$';
-
- if (this.childRules == null)
- this.childRules = tinyMCE.clearArray([]);
-
- this.childRules[tn[y]] = new RegExp(r);
-
- if (p.length > 1)
- this.childRules[tn[y]].wrapTag = p[2];
- }
- }
- },
-
- parseRuleStr : function(s) {
- var ta, p, r, a, i, x, px, t, tn, y, av, or = tinyMCE.clearArray([]), dv;
-
- if (s == null || s.length == 0)
- return or;
-
- ta = s.split(',');
- for (x=0; x<ta.length; x++) {
- s = ta[x];
- if (s.length == 0)
- continue;
-
- // Split tag/attrs
- p = this.split(/\[|\]/, s);
- if (p == null || p.length < 1)
- t = s.toUpperCase();
- else
- t = p[0].toUpperCase();
-
- // Handle all tag names
- tn = this.split('/', t);
- for (y=0; y<tn.length; y++) {
- r = {};
-
- r.tag = tn[y];
- r.forceAttribs = null;
- r.defaultAttribs = null;
- r.validAttribValues = null;
-
- // Handle prefixes
- px = r.tag.charAt(0);
- r.forceOpen = px == '+';
- r.removeEmpty = px == '-';
- r.fill = px == '#';
- r.tag = r.tag.replace(/\+|-|#/g, '');
- r.oTagName = tn[0].replace(/\+|-|#/g, '').toLowerCase();
- r.isWild = new RegExp('\\*|\\?|\\+', 'g').test(r.tag);
- r.validRe = new RegExp(this._wildcardToRe('^' + r.tag + '$'));
-
- // Setup valid attributes
- if (p.length > 1) {
- r.vAttribsRe = '^(';
- a = this.split(/\|/, p[1]);
-
- for (i=0; i<a.length; i++) {
- t = a[i];
-
- if (t.charAt(0) == '!') {
- a[i] = t = t.substring(1);
-
- if (!r.reqAttribsRe)
- r.reqAttribsRe = '\\s+(' + t;
- else
- r.reqAttribsRe += '|' + t;
- }
-
- av = new RegExp('(=|:|<)(.*?)$').exec(t);
- t = t.replace(new RegExp('(=|:|<).*?$'), '');
- if (av && av.length > 0) {
- if (av[0].charAt(0) == ':') {
- if (!r.forceAttribs)
- r.forceAttribs = tinyMCE.clearArray([]);
-
- r.forceAttribs[t.toLowerCase()] = av[0].substring(1);
- } else if (av[0].charAt(0) == '=') {
- if (!r.defaultAttribs)
- r.defaultAttribs = tinyMCE.clearArray([]);
-
- dv = av[0].substring(1);
-
- r.defaultAttribs[t.toLowerCase()] = dv == '' ? "mce_empty" : dv;
- } else if (av[0].charAt(0) == '<') {
- if (!r.validAttribValues)
- r.validAttribValues = tinyMCE.clearArray([]);
-
- r.validAttribValues[t.toLowerCase()] = this._arrayToRe(this.split('?', av[0].substring(1)), 'i');
- }
- }
-
- r.vAttribsRe += '' + t.toLowerCase() + (i != a.length - 1 ? '|' : '');
-
- a[i] = t.toLowerCase();
- }
-
- if (r.reqAttribsRe)
- r.reqAttribsRe = new RegExp(r.reqAttribsRe + ')=\"', 'g');
-
- r.vAttribsRe += ')$';
- r.vAttribsRe = this._wildcardToRe(r.vAttribsRe);
- r.vAttribsReIsWild = new RegExp('\\*|\\?|\\+', 'g').test(r.vAttribsRe);
- r.vAttribsRe = new RegExp(r.vAttribsRe);
- r.vAttribs = a.reverse();
-
- //tinyMCE.debug(r.tag, r.oTagName, r.vAttribsRe, r.vAttribsReWC);
- } else {
- r.vAttribsRe = '';
- r.vAttribs = tinyMCE.clearArray([]);
- r.vAttribsReIsWild = false;
- }
-
- or[r.tag] = r;
- }
- }
-
- return or;
- },
-
- serializeNodeAsXML : function(n) {
- var s, b;
-
- if (!this.xmlDoc) {
- if (this.isIE) {
- try {this.xmlDoc = new ActiveXObject('MSXML2.DOMDocument');} catch (e) {}
-
- if (!this.xmlDoc)
- try {this.xmlDoc = new ActiveXObject('Microsoft.XmlDom');} catch (e) {}
- } else
- this.xmlDoc = document.implementation.createDocument('', '', null);
-
- if (!this.xmlDoc)
- alert("Error XML Parser could not be found.");
- }
-
- if (this.xmlDoc.firstChild)
- this.xmlDoc.removeChild(this.xmlDoc.firstChild);
-
- b = this.xmlDoc.createElement("html");
- b = this.xmlDoc.appendChild(b);
-
- this._convertToXML(n, b);
-
- if (this.isIE)
- return this.xmlDoc.xml;
- else
- return new XMLSerializer().serializeToString(this.xmlDoc);
- },
-
- _convertToXML : function(n, xn) {
- var xd, el, i, l, cn, at, no, hc = false;
-
- if (tinyMCE.isRealIE && this._isDuplicate(n))
- return;
-
- xd = this.xmlDoc;
-
- switch (n.nodeType) {
- case 1: // Element
- hc = n.hasChildNodes();
-
- el = xd.createElement(n.nodeName.toLowerCase());
-
- at = n.attributes;
- for (i=at.length-1; i>-1; i--) {
- no = at[i];
-
- if (no.specified && no.nodeValue)
- el.setAttribute(no.nodeName.toLowerCase(), no.nodeValue);
- }
-
- if (!hc && !this.closeElementsRe.test(n.nodeName))
- el.appendChild(xd.createTextNode(""));
-
- xn = xn.appendChild(el);
- break;
-
- case 3: // Text
- xn.appendChild(xd.createTextNode(n.nodeValue));
- return;
-
- case 8: // Comment
- xn.appendChild(xd.createComment(n.nodeValue));
- return;
- }
-
- if (hc) {
- cn = n.childNodes;
-
- for (i=0, l=cn.length; i<l; i++)
- this._convertToXML(cn[i], xn);
- }
- },
-
- serializeNodeAsHTML : function(n, inn) {
- var en, no, h = '', i, l, t, st, r, cn, va = false, f = false, at, hc, cr, nn;
-
- if (!this.rulesDone)
- this._setupRules(); // Will initialize cleanup rules
-
- if (tinyMCE.isRealIE && this._isDuplicate(n))
- return '';
-
- // Skip non valid child elements
- if (n.parentNode && this.childRules != null) {
- cr = this.childRules[n.parentNode.nodeName];
-
- if (typeof(cr) != "undefined" && !cr.test(n.nodeName)) {
- st = true;
- t = null;
- }
- }
-
- switch (n.nodeType) {
- case 1: // Element
- hc = n.hasChildNodes();
-
- if (st)
- break;
-
- nn = n.nodeName;
-
- if (tinyMCE.isRealIE) {
- // MSIE sometimes produces <//tag>
- if (n.nodeName.indexOf('/') != -1)
- break;
-
- // MSIE has it's NS in a separate attrib
- if (n.scopeName && n.scopeName != 'HTML')
- nn = n.scopeName.toUpperCase() + ':' + nn.toUpperCase();
- } else if (tinyMCE.isOpera && nn.indexOf(':') > 0)
- nn = nn.toUpperCase();
-
- // Convert fonts to spans
- if (this.settings.convert_fonts_to_spans) {
- // On get content FONT -> SPAN
- if (this.settings.on_save && nn == 'FONT')
- nn = 'SPAN';
-
- // On insert content SPAN -> FONT
- if (!this.settings.on_save && nn == 'SPAN')
- nn = 'FONT';
- }
-
- if (this.vElementsRe.test(nn) && (!this.iveRe || !this.iveRe.test(nn)) && !inn) {
- va = true;
-
- r = this.rules[nn];
- if (!r) {
- at = this.rules;
- for (no in at) {
- if (at[no] && at[no].validRe.test(nn)) {
- r = at[no];
- break;
- }
- }
- }
-
- en = r.isWild ? nn.toLowerCase() : r.oTagName;
- f = r.fill;
-
- if (r.removeEmpty && !hc)
- return "";
-
- t = '<' + en;
-
- if (r.vAttribsReIsWild) {
- // Serialize wildcard attributes
- at = n.attributes;
- for (i=at.length-1; i>-1; i--) {
- no = at[i];
- if (no.specified && r.vAttribsRe.test(no.nodeName))
- t += this._serializeAttribute(n, r, no.nodeName);
- }
- } else {
- // Serialize specific attributes
- for (i=r.vAttribs.length-1; i>-1; i--)
- t += this._serializeAttribute(n, r, r.vAttribs[i]);
- }
-
- // Serialize mce_ atts
- if (!this.settings.on_save) {
- at = this.mceAttribs;
-
- for (no in at) {
- if (at[no])
- t += this._serializeAttribute(n, r, at[no]);
- }
- }
-
- // Check for required attribs
- if (r.reqAttribsRe && !t.match(r.reqAttribsRe))
- t = null;
-
- // Close these
- if (t != null && this.closeElementsRe.test(nn))
- return t + ' />';
-
- if (t != null)
- h += t + '>';
-
- if (this.isIE && this.codeElementsRe.test(nn))
- h += n.innerHTML;
- }
- break;
-
- case 3: // Text
- if (st)
- break;
-
- if (n.parentNode && this.codeElementsRe.test(n.parentNode.nodeName))
- return this.isIE ? '' : n.nodeValue;
-
- return this.xmlEncode(n.nodeValue);
-
- case 8: // Comment
- if (st)
- break;
-
- return "<!--" + this._trimComment(n.nodeValue) + "-->";
- }
-
- if (hc) {
- cn = n.childNodes;
-
- for (i=0, l=cn.length; i<l; i++)
- h += this.serializeNodeAsHTML(cn[i]);
- }
-
- // Fill empty nodes
- if (f && !hc)
- h += this.fillStr;
-
- // End element
- if (t != null && va)
- h += '</' + en + '>';
-
- return h;
- },
-
- _serializeAttribute : function(n, r, an) {
- var av = '', t, os = this.settings.on_save;
-
- if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0))
- return '';
-
- if (os && this.mceAttribs[an])
- av = this._getAttrib(n, this.mceAttribs[an]);
-
- if (av.length == 0)
- av = this._getAttrib(n, an);
-
- if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) {
- av = t;
-
- if (av == "mce_empty")
- return " " + an + '=""';
- }
-
- if (r.forceAttribs && (t = r.forceAttribs[an]))
- av = t;
-
- if (os && av.length != 0 && /^(src|href|longdesc)$/.test(an))
- av = this._urlConverter(this, n, av);
-
- if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av))
- return "";
-
- if (av.length != 0 && av == "{$uid}")
- av = "uid_" + (this.idCount++);
-
- if (av.length != 0) {
- if (an.indexOf('on') != 0)
- av = this.xmlEncode(av, 1);
-
- return " " + an + "=" + '"' + av + '"';
- }
-
- return "";
- },
-
- formatHTML : function(h) {
- var s = this.settings, p = '', i = 0, li = 0, o = '', l;
-
- // Replace BR in pre elements to \n
- h = h.replace(/<pre([^>]*)>(.*?)<\/pre>/gi, function (a, b, c) {
- c = c.replace(/<br\s*\/>/gi, '\n');
- return '<pre' + b + '>' + c + '</pre>';
- });
-
- h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :)
- h = '\n' + h;
- h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting
- h = h.replace(this.nlBeforeRe, '\n<$1$2>');
- h = h.replace(this.nlAfterRe, '<$1$2>\n');
- h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n');
- h += '\n';
-
- //tinyMCE.debug(h);
-
- while ((i = h.indexOf('\n', i + 1)) != -1) {
- if ((l = h.substring(li + 1, i)).length != 0) {
- if (this.ouRe.test(l) && p.length >= s.indent_levels)
- p = p.substring(s.indent_levels);
-
- o += p + l + '\n';
-
- if (this.inRe.test(l))
- p += this.inStr;
- }
-
- li = i;
- }
-
- //tinyMCE.debug(h);
-
- return o;
- },
-
- xmlEncode : function(s) {
- var cl = this, re = this.xmlEncodeRe;
-
- if (!this.entitiesDone)
- this._setupEntities(); // Will intialize lookup table
-
- switch (this.settings.entity_encoding) {
- case "raw":
- return tinyMCE.xmlEncode(s);
-
- case "named":
- return s.replace(re, function (c) {
- var b = cl.entities[c.charCodeAt(0)];
-
- return b ? '&' + b + ';' : c;
- });
-
- case "numeric":
- return s.replace(re, function (c) {
- return '&#' + c.charCodeAt(0) + ';';
- });
- }
-
- return s;
- },
-
- split : function(re, s) {
- var i, l, o = [], c = s.split(re);
-
- for (i=0, l=c.length; i<l; i++) {
- if (c[i] !== '')
- o[i] = c[i];
- }
-
- return o;
- },
-
- _trimComment : function(s) {
- // Remove mce_src, mce_href
- s = s.replace(new RegExp('\\smce_src=\"[^\"]*\"', 'gi'), "");
- s = s.replace(new RegExp('\\smce_href=\"[^\"]*\"', 'gi'), "");
-
- return s;
- },
-
- _getAttrib : function(e, n, d) {
- var v, ex, nn;
-
- if (typeof(d) == "undefined")
- d = "";
-
- if (!e || e.nodeType != 1)
- return d;
-
- try {
- v = e.getAttribute(n, 0);
- } catch (ex) {
- // IE 7 may cast exception on invalid attributes
- v = e.getAttribute(n, 2);
- }
-
- if (n == "class" && !v)
- v = e.className;
-
- if (this.isIE) {
- if (n == "http-equiv")
- v = e.httpEquiv;
-
- nn = e.nodeName;
-
- // Skip the default values that IE returns
- if (nn == "FORM" && n == "enctype" && v == "application/x-www-form-urlencoded")
- v = "";
-
- if (nn == "INPUT" && n == "size" && v == "20")
- v = "";
-
- if (nn == "INPUT" && n == "maxlength" && v == "2147483647")
- v = "";
-
- // Images
- if (n == "width" || n == "height")
- v = e.getAttribute(n, 2);
- }
-
- if (n == 'style' && v) {
- if (!tinyMCE.isOpera)
- v = e.style.cssText;
-
- v = tinyMCE.serializeStyle(tinyMCE.parseStyle(v));
- }
-
- if (this.settings.on_save && n.indexOf('on') != -1 && this.settings.on_save && v && v !== '')
- v = tinyMCE.cleanupEventStr(v);
-
- return (v && v !== '') ? '' + v : d;
- },
-
- _urlConverter : function(c, n, v) {
- if (!c.settings.on_save)
- return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, v);
- else if (tinyMCE.getParam('convert_urls')) {
- if (!this.urlConverter)
- this.urlConverter = eval(tinyMCE.settings.urlconverter_callback);
-
- return this.urlConverter(v, n, true);
- }
-
- return v;
- },
-
- _arrayToRe : function(a, op, be, af) {
- var i, r;
-
- op = typeof(op) == "undefined" ? "gi" : op;
- be = typeof(be) == "undefined" ? "^(" : be;
- af = typeof(af) == "undefined" ? ")$" : af;
-
- r = be;
-
- for (i=0; i<a.length; i++)
- r += this._wildcardToRe(a[i]) + (i != a.length-1 ? "|" : "");
-
- r += af;
-
- return new RegExp(r, op);
- },
-
- _wildcardToRe : function(s) {
- s = s.replace(/\?/g, '(\\S?)');
- s = s.replace(/\+/g, '(\\S+)');
- s = s.replace(/\*/g, '(\\S*)');
-
- return s;
- },
-
- _setupEntities : function() {
- var n, a, i, s = this.settings;
-
- // Setup entities
- if (s.entity_encoding == "named") {
- n = tinyMCE.clearArray([]);
- a = this.split(',', s.entities);
- for (i=0; i<a.length; i+=2)
- n[a[i]] = a[i+1];
-
- this.entities = n;
- }
-
- this.entitiesDone = true;
- },
-
- _setupRules : function() {
- var s = this.settings;
-
- // Setup default rule
- this.addRuleStr(s.valid_elements);
- this.addRuleStr(s.extended_valid_elements);
- this.addChildRemoveRuleStr(s.valid_child_elements);
-
- this.rulesDone = true;
- },
-
- _isDuplicate : function(n) {
- var i, l, sn;
-
- if (!this.settings.fix_content_duplication)
- return false;
-
- if (tinyMCE.isRealIE && n.nodeType == 1) {
- // Mark elements
- if (n.mce_serialized == this.serializationId)
- return true;
-
- n.setAttribute('mce_serialized', this.serializationId);
- } else {
- sn = this.serializedNodes;
-
- // Search lookup table for text nodes and comments
- for (i=0, l = sn.length; i<l; i++) {
- if (sn[i] == n)
- return true;
- }
-
- sn.push(n);
- }
-
- return false;
- }
-
- };
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_DOMUtils.class.js */
-
-tinyMCE.add(TinyMCE_Engine, {
- createTagHTML : function(tn, a, h) {
- var o = '', f = tinyMCE.xmlEncode, n;
-
- o = '<' + tn;
-
- if (a) {
- for (n in a) {
- if (typeof(a[n]) != 'function' && a[n] != null)
- o += ' ' + f(n) + '="' + f('' + a[n]) + '"';
- }
- }
-
- o += !h ? ' />' : '>' + h + '</' + tn + '>';
-
- return o;
- },
-
- createTag : function(d, tn, a, h) {
- var o = d.createElement(tn), n;
-
- if (a) {
- for (n in a) {
- if (typeof(a[n]) != 'function' && a[n] != null)
- tinyMCE.setAttrib(o, n, a[n]);
- }
- }
-
- if (h)
- o.innerHTML = h;
-
- return o;
- },
-
- getElementByAttributeValue : function(n, e, a, v) {
- return (n = this.getElementsByAttributeValue(n, e, a, v)).length == 0 ? null : n[0];
- },
-
- getElementsByAttributeValue : function(n, e, a, v) {
- var i, nl = n.getElementsByTagName(e), o = [];
-
- for (i=0; i<nl.length; i++) {
- if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)
- o[o.length] = nl[i];
- }
-
- return o;
- },
-
- isBlockElement : function(n) {
- return n != null && n.nodeType == 1 && this.blockRegExp.test(n.nodeName);
- },
-
- getParentBlockElement : function(n, r) {
- return this.getParentNode(n, function(n) {
- return tinyMCE.isBlockElement(n);
- }, r);
-
- return null;
- },
-
- insertAfter : function(n, r){
- if (r.nextSibling)
- r.parentNode.insertBefore(n, r.nextSibling);
- else
- r.parentNode.appendChild(n);
- },
-
- setInnerHTML : function(e, h) {
- var i, nl, n;
-
- // Convert all strong/em to b/i in Gecko
- if (tinyMCE.isGecko) {
- h = h.replace(/<embed([^>]*)>/gi, '<tmpembed$1>');
- h = h.replace(/<em([^>]*)>/gi, '<i$1>');
- h = h.replace(/<tmpembed([^>]*)>/gi, '<embed$1>');
- h = h.replace(/<strong([^>]*)>/gi, '<b$1>');
- h = h.replace(/<\/strong>/gi, '</b>');
- h = h.replace(/<\/em>/gi, '</i>');
- }
-
- if (tinyMCE.isRealIE) {
- // Since MSIE handles invalid HTML better that valid XHTML we
- // need to make some things invalid. <hr /> gets converted to <hr>.
- h = h.replace(/\s\/>/g, '>');
-
- // Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones
- h = h.replace(/<p([^>]*)>\u00A0?<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs
- h = h.replace(/<p([^>]*)>\s* \s*<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs
- h = h.replace(/<p([^>]*)>\s+<\/p>/gi, '<p$1 mce_keep="true"> </p>'); // Keep empty paragraphs
-
- // Remove first comment
- e.innerHTML = tinyMCE.uniqueTag + h;
- e.firstChild.removeNode(true);
-
- // Remove weird auto generated empty paragraphs unless it's supposed to be there
- nl = e.getElementsByTagName("p");
- for (i=nl.length-1; i>=0; i--) {
- n = nl[i];
-
- if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep)
- n.parentNode.removeChild(n);
- }
- } else {
- h = this.fixGeckoBaseHREFBug(1, e, h);
- e.innerHTML = h;
- this.fixGeckoBaseHREFBug(2, e, h);
- }
- },
-
- getOuterHTML : function(e) {
- var d;
-
- if (tinyMCE.isIE)
- return e.outerHTML;
-
- d = e.ownerDocument.createElement("body");
- d.appendChild(e.cloneNode(true));
-
- return d.innerHTML;
- },
-
- setOuterHTML : function(e, h, d) {
- var d = typeof(d) == "undefined" ? e.ownerDocument : d, i, nl, t;
-
- if (tinyMCE.isIE && e.nodeType == 1)
- e.outerHTML = h;
- else {
- t = d.createElement("body");
- t.innerHTML = h;
-
- for (i=0, nl=t.childNodes; i<nl.length; i++)
- e.parentNode.insertBefore(nl[i].cloneNode(true), e);
-
- e.parentNode.removeChild(e);
- }
- },
-
- _getElementById : function(id, d) {
- var e, i, j, f;
-
- if (typeof(d) == "undefined")
- d = document;
-
- e = d.getElementById(id);
- if (!e) {
- f = d.forms;
-
- for (i=0; i<f.length; i++) {
- for (j=0; j<f[i].elements.length; j++) {
- if (f[i].elements[j].name == id) {
- e = f[i].elements[j];
- break;
- }
- }
- }
- }
-
- return e;
- },
-
- getNodeTree : function(n, na, t, nn) {
- return this.selectNodes(n, function(n) {
- return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);
- }, na ? na : []);
- },
-
- getParentElement : function(n, na, f, r) {
- var re = na ? new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$') : 0, v;
-
- // Compatiblity with old scripts where f param was a attribute string
- if (f && typeof(f) == 'string')
- return this.getParentElement(n, na, function(no) {return tinyMCE.getAttrib(no, f) !== '';});
-
- return this.getParentNode(n, function(n) {
- return ((n.nodeType == 1 && !re) || (re && re.test(n.nodeName))) && (!f || f(n));
- }, r);
- },
-
- getParentNode : function(n, f, r) {
- while (n) {
- if (n == r)
- return null;
-
- if (f(n))
- return n;
-
- n = n.parentNode;
- }
-
- return null;
- },
-
- getAttrib : function(elm, name, dv) {
- var v;
-
- if (typeof(dv) == "undefined")
- dv = "";
-
- // Not a element
- if (!elm || elm.nodeType != 1)
- return dv;
-
- try {
- v = elm.getAttribute(name, 0);
- } catch (ex) {
- // IE 7 may cast exception on invalid attributes
- v = elm.getAttribute(name, 2);
- }
-
- // Try className for class attrib
- if (name == "class" && !v)
- v = elm.className;
-
- // Workaround for a issue with Firefox 1.5rc2+
- if (tinyMCE.isGecko) {
- if (name == "src" && elm.src != null && elm.src !== '')
- v = elm.src;
-
- // Workaround for a issue with Firefox 1.5rc2+
- if (name == "href" && elm.href != null && elm.href !== '')
- v = elm.href;
- } else if (tinyMCE.isIE) {
- switch (name) {
- case "http-equiv":
- v = elm.httpEquiv;
- break;
-
- case "width":
- case "height":
- v = elm.getAttribute(name, 2);
- break;
- }
- }
-
- if (name == "style" && !tinyMCE.isOpera)
- v = elm.style.cssText;
-
- return (v && v !== '') ? v : dv;
- },
-
- setAttrib : function(el, name, va, fix) {
- if (typeof(va) == "number" && va != null)
- va = "" + va;
-
- if (fix) {
- if (va == null)
- va = "";
-
- va = va.replace(/[^0-9%]/g, '');
- }
-
- if (name == "style")
- el.style.cssText = va;
-
- if (name == "class")
- el.className = va;
-
- if (va != null && va !== '' && va != -1)
- el.setAttribute(name, va);
- else
- el.removeAttribute(name);
- },
-
- setStyleAttrib : function(e, n, v) {
- e.style[n] = v;
-
- // Style attrib deleted in IE
- if (tinyMCE.isIE && v == null || v == '') {
- v = tinyMCE.serializeStyle(tinyMCE.parseStyle(e.style.cssText));
- e.style.cssText = v;
- e.setAttribute("style", v);
- }
- },
-
- switchClass : function(ei, c) {
- var e;
-
- if (tinyMCE.switchClassCache[ei])
- e = tinyMCE.switchClassCache[ei];
- else
- e = tinyMCE.switchClassCache[ei] = document.getElementById(ei);
-
- if (e) {
- // Keep tile mode
- if (tinyMCE.settings.button_tile_map && e.className && e.className.indexOf('mceTiledButton') == 0)
- c = 'mceTiledButton ' + c;
-
- e.className = c;
- }
- },
-
- getAbsPosition : function(n, cn) {
- var l = 0, t = 0;
-
- while (n && n != cn) {
- l += n.offsetLeft;
- t += n.offsetTop;
- n = n.offsetParent;
- }
-
- return {absLeft : l, absTop : t};
- },
-
- prevNode : function(e, n) {
- var a = n.split(','), i;
-
- while ((e = e.previousSibling) != null) {
- for (i=0; i<a.length; i++) {
- if (e.nodeName == a[i])
- return e;
- }
- }
-
- return null;
- },
-
- nextNode : function(e, n) {
- var a = n.split(','), i;
-
- while ((e = e.nextSibling) != null) {
- for (i=0; i<a.length; i++) {
- if (e.nodeName == a[i])
- return e;
- }
- }
-
- return null;
- },
-
- selectElements : function(n, na, f) {
- var i, a = [], nl, x;
-
- for (x=0, na = na.split(','); x<na.length; x++)
- for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)
- (!f || f(nl[i])) && a.push(nl[i]);
-
- return a;
- },
-
- selectNodes : function(n, f, a) {
- var i;
-
- if (!a)
- a = [];
-
- if (f(n))
- a[a.length] = n;
-
- if (n.hasChildNodes()) {
- for (i=0; i<n.childNodes.length; i++)
- tinyMCE.selectNodes(n.childNodes[i], f, a);
- }
-
- return a;
- },
-
- addCSSClass : function(e, c, b) {
- var o = this.removeCSSClass(e, c);
- return e.className = b ? c + (o !== '' ? (' ' + o) : '') : (o !== '' ? (o + ' ') : '') + c;
- },
-
- removeCSSClass : function(e, c) {
- c = e.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
- return e.className = c != ' ' ? c : '';
- },
-
- hasCSSClass : function(n, c) {
- return new RegExp('\\b' + c + '\\b', 'g').test(n.className);
- },
-
- renameElement : function(e, n, d) {
- var ne, i, ar;
-
- d = typeof(d) == "undefined" ? tinyMCE.selectedInstance.getDoc() : d;
-
- if (e) {
- ne = d.createElement(n);
-
- ar = e.attributes;
- for (i=ar.length-1; i>-1; i--) {
- if (ar[i].specified && ar[i].nodeValue)
- ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue);
- }
-
- ar = e.childNodes;
- for (i=0; i<ar.length; i++)
- ne.appendChild(ar[i].cloneNode(true));
-
- e.parentNode.replaceChild(ne, e);
- }
- },
-
- getViewPort : function(w) {
- var d = w.document, m = d.compatMode == 'CSS1Compat', b = d.body, de = d.documentElement;
-
- return {
- left : w.pageXOffset || (m ? de.scrollLeft : b.scrollLeft),
- top : w.pageYOffset || (m ? de.scrollTop : b.scrollTop),
- width : w.innerWidth || (m ? de.clientWidth : b.clientWidth),
- height : w.innerHeight || (m ? de.clientHeight : b.clientHeight)
- };
- },
-
- getStyle : function(n, na, d) {
- if (!n)
- return false;
-
- // Gecko
- if (tinyMCE.isGecko && n.ownerDocument.defaultView) {
- try {
- return n.ownerDocument.defaultView.getComputedStyle(n, null).getPropertyValue(na);
- } catch (n) {
- // Old safari might fail
- return null;
- }
- }
-
- // Camelcase it, if needed
- na = na.replace(/-(\D)/g, function(a, b){
- return b.toUpperCase();
- });
-
- // IE & Opera
- if (n.currentStyle)
- return n.currentStyle[na];
-
- return false;
- }
-
- });
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_URL.class.js */
-
-tinyMCE.add(TinyMCE_Engine, {
- parseURL : function(url_str) {
- var urlParts = [], i, pos, lastPos, chr;
-
- if (url_str) {
- // Parse protocol part
- pos = url_str.indexOf('://');
- if (pos != -1) {
- urlParts.protocol = url_str.substring(0, pos);
- lastPos = pos + 3;
- }
-
- // Find port or path start
- for (i=lastPos; i<url_str.length; i++) {
- chr = url_str.charAt(i);
-
- if (chr == ':')
- break;
-
- if (chr == '/')
- break;
- }
- pos = i;
-
- // Get host
- urlParts.host = url_str.substring(lastPos, pos);
-
- // Get port
- urlParts.port = "";
- lastPos = pos;
- if (url_str.charAt(pos) == ':') {
- pos = url_str.indexOf('/', lastPos);
- urlParts.port = url_str.substring(lastPos+1, pos);
- }
-
- // Get path
- lastPos = pos;
- pos = url_str.indexOf('?', lastPos);
-
- if (pos == -1)
- pos = url_str.indexOf('#', lastPos);
-
- if (pos == -1)
- pos = url_str.length;
-
- urlParts.path = url_str.substring(lastPos, pos);
-
- // Get query
- lastPos = pos;
- if (url_str.charAt(pos) == '?') {
- pos = url_str.indexOf('#');
- pos = (pos == -1) ? url_str.length : pos;
- urlParts.query = url_str.substring(lastPos+1, pos);
- }
-
- // Get anchor
- lastPos = pos;
- if (url_str.charAt(pos) == '#') {
- pos = url_str.length;
- urlParts.anchor = url_str.substring(lastPos+1, pos);
- }
- }
-
- return urlParts;
- },
-
- serializeURL : function(up) {
- var o = "";
-
- if (up.protocol)
- o += up.protocol + "://";
-
- if (up.host)
- o += up.host;
-
- if (up.port)
- o += ":" + up.port;
-
- if (up.path)
- o += up.path;
-
- if (up.query)
- o += "?" + up.query;
-
- if (up.anchor)
- o += "#" + up.anchor;
-
- return o;
- },
-
- convertAbsoluteURLToRelativeURL : function(base_url, url_to_relative) {
- var baseURL = this.parseURL(base_url), targetURL = this.parseURL(url_to_relative);
- var i, strTok1, strTok2, breakPoint = 0, outPath = "", forceSlash = false;
- var fileName, pos;
-
- if (targetURL.path == '')
- targetURL.path = "/";
- else
- forceSlash = true;
-
- // Crop away last path part
- base_url = baseURL.path.substring(0, baseURL.path.lastIndexOf('/'));
- strTok1 = base_url.split('/');
- strTok2 = targetURL.path.split('/');
-
- if (strTok1.length >= strTok2.length) {
- for (i=0; i<strTok1.length; i++) {
- if (i >= strTok2.length || strTok1[i] != strTok2[i]) {
- breakPoint = i + 1;
- break;
- }
- }
- }
-
- if (strTok1.length < strTok2.length) {
- for (i=0; i<strTok2.length; i++) {
- if (i >= strTok1.length || strTok1[i] != strTok2[i]) {
- breakPoint = i + 1;
- break;
- }
- }
- }
-
- if (breakPoint == 1)
- return targetURL.path;
-
- for (i=0; i<(strTok1.length-(breakPoint-1)); i++)
- outPath += "../";
-
- for (i=breakPoint-1; i<strTok2.length; i++) {
- if (i != (breakPoint-1))
- outPath += "/" + strTok2[i];
- else
- outPath += strTok2[i];
- }
-
- targetURL.protocol = null;
- targetURL.host = null;
- targetURL.port = null;
- targetURL.path = outPath == '' && forceSlash ? "/" : outPath;
-
- // Remove document prefix from local anchors
- fileName = baseURL.path;
-
- if ((pos = fileName.lastIndexOf('/')) != -1)
- fileName = fileName.substring(pos + 1);
-
- // Is local anchor
- if (fileName == targetURL.path && targetURL.anchor !== '')
- targetURL.path = "";
-
- // If empty and not local anchor force filename or slash
- if (targetURL.path == '' && !targetURL.anchor)
- targetURL.path = fileName !== '' ? fileName : "/";
-
- return this.serializeURL(targetURL);
- },
-
- convertRelativeToAbsoluteURL : function(base_url, relative_url) {
- var baseURL = this.parseURL(base_url), baseURLParts, relURLParts, newRelURLParts, numBack, relURL = this.parseURL(relative_url), i;
- var len, absPath, start, end, newBaseURLParts;
-
- if (relative_url == '' || relative_url.indexOf('://') != -1 || /^(mailto:|javascript:|#|\/)/.test(relative_url))
- return relative_url;
-
- // Split parts
- baseURLParts = baseURL.path.split('/');
- relURLParts = relURL.path.split('/');
-
- // Remove empty chunks
- newBaseURLParts = [];
- for (i=baseURLParts.length-1; i>=0; i--) {
- if (baseURLParts[i].length == 0)
- continue;
-
- newBaseURLParts[newBaseURLParts.length] = baseURLParts[i];
- }
- baseURLParts = newBaseURLParts.reverse();
-
- // Merge relURLParts chunks
- newRelURLParts = [];
- numBack = 0;
- for (i=relURLParts.length-1; i>=0; i--) {
- if (relURLParts[i].length == 0 || relURLParts[i] == ".")
- continue;
-
- if (relURLParts[i] == '..') {
- numBack++;
- continue;
- }
-
- if (numBack > 0) {
- numBack--;
- continue;
- }
-
- newRelURLParts[newRelURLParts.length] = relURLParts[i];
- }
-
- relURLParts = newRelURLParts.reverse();
-
- // Remove end from absolute path
- len = baseURLParts.length-numBack;
- absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/');
- start = "";
- end = "";
-
- // Build output URL
- relURL.protocol = baseURL.protocol;
- relURL.host = baseURL.host;
- relURL.port = baseURL.port;
-
- // Re-add trailing slash if it's removed
- if (relURL.path.charAt(relURL.path.length-1) == "/")
- absPath += "/";
-
- relURL.path = absPath;
-
- return this.serializeURL(relURL);
- },
-
- convertURL : function(url, node, on_save) {
- var dl = document.location, start, portPart, urlParts, baseUrlParts, tmpUrlParts, curl;
- var prot = dl.protocol, host = dl.hostname, port = dl.port;
-
- // Pass through file protocol
- if (prot == "file:")
- return url;
-
- // Something is wrong, remove weirdness
- url = tinyMCE.regexpReplace(url, '(http|https):///', '/');
-
- // Mailto link or anchor (Pass through)
- if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || /^[ \t\r\n\+]*[#\?]/.test(url))
- return url;
-
- // Fix relative/Mozilla
- if (!tinyMCE.isIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/')
- return tinyMCE.settings.base_href + url;
-
- // Handle relative URLs
- if (on_save && tinyMCE.getParam('relative_urls')) {
- curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url);
- if (curl.charAt(0) == '/')
- curl = tinyMCE.settings.document_base_prefix + curl;
-
- urlParts = tinyMCE.parseURL(curl);
- tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings.document_base_url);
-
- // Force relative
- if (urlParts.host == tmpUrlParts.host && (urlParts.port == tmpUrlParts.port))
- return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url, curl);
- }
-
- // Handle absolute URLs
- if (!tinyMCE.getParam('relative_urls')) {
- urlParts = tinyMCE.parseURL(url);
- baseUrlParts = tinyMCE.parseURL(tinyMCE.settings.base_href);
-
- // Force absolute URLs from relative URLs
- url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, url);
-
- // If anchor and path is the same page
- if (urlParts.anchor && urlParts.path == baseUrlParts.path)
- return "#" + urlParts.anchor;
- }
-
- // Remove current domain
- if (tinyMCE.getParam('remove_script_host')) {
- start = "";
- portPart = "";
-
- if (port !== '')
- portPart = ":" + port;
-
- start = prot + "//" + host + portPart + "/";
-
- if (url.indexOf(start) == 0)
- url = url.substring(start.length-1);
- }
-
- return url;
- },
-
- convertAllRelativeURLs : function(body) {
- var i, elms, src, href, mhref, msrc;
-
- // Convert all image URL:s to absolute URL
- elms = body.getElementsByTagName("img");
- for (i=0; i<elms.length; i++) {
- src = tinyMCE.getAttrib(elms[i], 'src');
-
- msrc = tinyMCE.getAttrib(elms[i], 'mce_src');
- if (msrc !== '')
- src = msrc;
-
- if (src !== '') {
- src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, src);
- elms[i].setAttribute("src", src);
- }
- }
-
- // Convert all link URL:s to absolute URL
- elms = body.getElementsByTagName("a");
- for (i=0; i<elms.length; i++) {
- href = tinyMCE.getAttrib(elms[i], 'href');
-
- mhref = tinyMCE.getAttrib(elms[i], 'mce_href');
- if (mhref !== '')
- href = mhref;
-
- if (href && href !== '') {
- href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, href);
- elms[i].setAttribute("href", href);
- }
- }
- }
-
- });
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Array.class.js */
-
-tinyMCE.add(TinyMCE_Engine, {
- clearArray : function(a) {
- var n;
-
- for (n in a)
- a[n] = null;
-
- return a;
- },
-
- explode : function(d, s) {
- var ar = s.split(d), oar = [], i;
-
- for (i = 0; i<ar.length; i++) {
- if (ar[i] !== '')
- oar[oar.length] = ar[i];
- }
-
- return oar;
- }
-});
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Event.class.js */
-
-tinyMCE.add(TinyMCE_Engine, {
- _setEventsEnabled : function(node, state) {
- var evs, x, y, elms, i, event;
- var events = ['onfocus','onblur','onclick','ondblclick',
- 'onmousedown','onmouseup','onmouseover','onmousemove',
- 'onmouseout','onkeypress','onkeydown','onkeydown','onkeyup'];
-
- evs = tinyMCE.settings.event_elements.split(',');
- for (y=0; y<evs.length; y++){
- elms = node.getElementsByTagName(evs[y]);
- for (i=0; i<elms.length; i++) {
- event = "";
-
- for (x=0; x<events.length; x++) {
- if ((event = tinyMCE.getAttrib(elms[i], events[x])) !== '') {
- event = tinyMCE.cleanupEventStr("" + event);
-
- if (!state)
- event = "return true;" + event;
- else
- event = event.replace(/^return true;/gi, '');
-
- elms[i].removeAttribute(events[x]);
- elms[i].setAttribute(events[x], event);
- }
- }
- }
- }
- },
-
- _eventPatch : function(editor_id) {
- var n, inst, win, e;
-
- // Remove odd, error
- if (typeof(tinyMCE) == "undefined")
- return true;
-
- try {
- // Try selected instance first
- if (tinyMCE.selectedInstance) {
- win = tinyMCE.selectedInstance.getWin();
-
- if (win && win.event) {
- e = win.event;
-
- if (!e.target)
- e.target = e.srcElement;
-
- TinyMCE_Engine.prototype.handleEvent(e);
- return;
- }
- }
-
- // Search for it
- for (n in tinyMCE.instances) {
- inst = tinyMCE.instances[n];
-
- if (!tinyMCE.isInstance(inst))
- continue;
-
- inst.select();
- win = inst.getWin();
-
- if (win && win.event) {
- e = win.event;
-
- if (!e.target)
- e.target = e.srcElement;
-
- TinyMCE_Engine.prototype.handleEvent(e);
- return;
- }
- }
- } catch (ex) {
- // Ignore error if iframe is pointing to external URL
- }
- },
-
- findEvent : function(e) {
- var n, inst;
-
- if (e)
- return e;
-
- for (n in tinyMCE.instances) {
- inst = tinyMCE.instances[n];
-
- if (tinyMCE.isInstance(inst) && inst.getWin().event)
- return inst.getWin().event;
- }
-
- return null;
- },
-
- unloadHandler : function() {
- tinyMCE.triggerSave(true, true);
- },
-
- addEventHandlers : function(inst) {
- this.setEventHandlers(inst, 1);
- },
-
- setEventHandlers : function(inst, s) {
- var doc = inst.getDoc(), ie, ot, i, f = s ? tinyMCE.addEvent : tinyMCE.removeEvent;
-
- ie = ['keypress', 'keyup', 'keydown', 'click', 'mouseup', 'mousedown', 'controlselect', 'dblclick'];
- ot = ['keypress', 'keyup', 'keydown', 'click', 'mouseup', 'mousedown', 'focus', 'blur', 'dragdrop'];
-
- inst.switchSettings();
-
- if (tinyMCE.isIE) {
- for (i=0; i<ie.length; i++)
- f(doc, ie[i], TinyMCE_Engine.prototype._eventPatch);
- } else {
- for (i=0; i<ot.length; i++)
- f(doc, ot[i], tinyMCE.handleEvent);
-
- // Force designmode
- try {
- doc.designMode = "On";
- } catch (e) {
- // Ignore
- }
- }
- },
-
- onMouseMove : function() {
- var inst, lh;
-
- // Fix for IE7 bug where it's not restoring hover on anchors correctly
- if (tinyMCE.lastHover) {
- lh = tinyMCE.lastHover;
-
- // Call out on menus and refresh class on normal buttons
- if (lh.className.indexOf('mceMenu') != -1)
- tinyMCE._menuButtonEvent('out', lh);
- else
- lh.className = lh.className;
-
- tinyMCE.lastHover = null;
- }
-
- if (!tinyMCE.hasMouseMoved) {
- inst = tinyMCE.selectedInstance;
-
- // Workaround for bug #1437457 (Odd MSIE bug)
- if (inst.isFocused) {
- inst.undoBookmark = inst.selection.getBookmark();
- tinyMCE.hasMouseMoved = true;
- }
- }
-
- // tinyMCE.cancelEvent(inst.getWin().event);
- // return false;
- },
-
- cancelEvent : function(e) {
- if (!e)
- return false;
-
- if (tinyMCE.isIE) {
- e.returnValue = false;
- e.cancelBubble = true;
- } else {
- e.preventDefault();
- e.stopPropagation && e.stopPropagation();
- }
-
- return false;
- },
-
- addEvent : function(o, n, h) {
- // Add cleanup for all non unload events
- if (n != 'unload') {
- function clean() {
- var ex;
-
- try {
- tinyMCE.removeEvent(o, n, h);
- tinyMCE.removeEvent(window, 'unload', clean);
- o = n = h = null;
- } catch (ex) {
- // IE may produce access denied exception on unload
- }
- }
-
- // Add memory cleaner
- tinyMCE.addEvent(window, 'unload', clean);
- }
-
- if (o.attachEvent)
- o.attachEvent("on" + n, h);
- else
- o.addEventListener(n, h, false);
- },
-
- removeEvent : function(o, n, h) {
- if (o.detachEvent)
- o.detachEvent("on" + n, h);
- else
- o.removeEventListener(n, h, false);
- },
-
- addSelectAccessibility : function(e, s, w) {
- // Add event handlers
- if (!s._isAccessible) {
- s.onkeydown = tinyMCE.accessibleEventHandler;
- s.onblur = tinyMCE.accessibleEventHandler;
- s._isAccessible = true;
- s._win = w;
- }
-
- return false;
- },
-
- accessibleEventHandler : function(e) {
- var elm, win = this._win;
-
- e = tinyMCE.isIE ? win.event : e;
- elm = tinyMCE.isIE ? e.srcElement : e.target;
-
- // Unpiggyback onchange on blur
- if (e.type == "blur") {
- if (elm.oldonchange) {
- elm.onchange = elm.oldonchange;
- elm.oldonchange = null;
- }
-
- return true;
- }
-
- // Piggyback onchange
- if (elm.nodeName == "SELECT" && !elm.oldonchange) {
- elm.oldonchange = elm.onchange;
- elm.onchange = null;
- }
-
- // Execute onchange and remove piggyback
- if (e.keyCode == 13 || e.keyCode == 32) {
- elm.onchange = elm.oldonchange;
- elm.onchange();
- elm.oldonchange = null;
-
- tinyMCE.cancelEvent(e);
- return false;
- }
-
- return true;
- },
-
- _resetIframeHeight : function() {
- var ife;
-
- if (tinyMCE.isRealIE) {
- ife = tinyMCE.selectedInstance.iframeElement;
-
- /* if (ife._oldWidth) {
- ife.style.width = ife._oldWidth;
- ife.width = ife._oldWidth;
- }*/
-
- if (ife._oldHeight) {
- ife.style.height = ife._oldHeight;
- ife.height = ife._oldHeight;
- }
- }
- }
-
- });
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Selection.class.js */
-
-function TinyMCE_Selection(inst) {
- this.instance = inst;
-};
-
-TinyMCE_Selection.prototype = {
- getSelectedHTML : function() {
- var inst = this.instance, e, r = this.getRng(), h;
-
- if (!r)
- return null;
-
- e = document.createElement("body");
-
- if (r.cloneContents)
- e.appendChild(document.importNode(r.cloneContents(), true));
- else if (typeof(r.item) != 'undefined' || typeof(r.htmlText) != 'undefined')
- e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;
- else
- e.innerHTML = r.toString(); // Failed, use text for now
-
- h = tinyMCE._cleanupHTML(inst, inst.contentDocument, inst.settings, e, e, false, true, false);
-
- // When editing always use fonts internaly
- //if (tinyMCE.getParam("convert_fonts_to_spans"))
- // tinyMCE.convertSpansToFonts(inst.getDoc());
-
- return h;
- },
-
- getSelectedText : function() {
- var inst = this.instance, d, r, s, t;
-
- if (tinyMCE.isIE) {
- d = inst.getDoc();
-
- if (d.selection.type == "Text") {
- r = d.selection.createRange();
- t = r.text;
- } else
- t = '';
- } else {
- s = this.getSel();
-
- if (s && s.toString)
- t = s.toString();
- else
- t = '';
- }
-
- return t;
- },
-
- getBookmark : function(simple) {
- var inst = this.instance, rng = this.getRng(), doc = inst.getDoc(), b = inst.getBody();
- var trng, sx, sy, xx = -999999999, vp = inst.getViewPort();
- var sp, le, s, e, nl, i, si, ei, w;
-
- sx = vp.left;
- sy = vp.top;
-
- if (simple)
- return {rng : rng, scrollX : sx, scrollY : sy};
-
- if (tinyMCE.isRealIE) {
- if (rng.item) {
- e = rng.item(0);
-
- nl = b.getElementsByTagName(e.nodeName);
- for (i=0; i<nl.length; i++) {
- if (e == nl[i]) {
- sp = i;
- break;
- }
- }
-
- return {
- tag : e.nodeName,
- index : sp,
- scrollX : sx,
- scrollY : sy
- };
- } else {
- trng = doc.body.createTextRange();
- trng.moveToElementText(inst.getBody());
- trng.collapse(true);
- bp = Math.abs(trng.move('character', xx));
-
- trng = rng.duplicate();
- trng.collapse(true);
- sp = Math.abs(trng.move('character', xx));
-
- trng = rng.duplicate();
- trng.collapse(false);
- le = Math.abs(trng.move('character', xx)) - sp;
-
- return {
- start : sp - bp,
- length : le,
- scrollX : sx,
- scrollY : sy
- };
- }
- } else {
- s = this.getSel();
- e = this.getFocusElement();
-
- if (!s)
- return null;
-
- if (e && e.nodeName == 'IMG') {
- /*nl = b.getElementsByTagName('IMG');
- for (i=0; i<nl.length; i++) {
- if (e == nl[i]) {
- sp = i;
- break;
- }
- }*/
-
- return {
- start : -1,
- end : -1,
- index : sp,
- scrollX : sx,
- scrollY : sy
- };
- }
-
- // Caret or selection
- if (s.anchorNode == s.focusNode && s.anchorOffset == s.focusOffset) {
- e = this._getPosText(b, s.anchorNode, s.focusNode);
-
- if (!e)
- return {scrollX : sx, scrollY : sy};
-
- return {
- start : e.start + s.anchorOffset,
- end : e.end + s.focusOffset,
- scrollX : sx,
- scrollY : sy
- };
- } else {
- e = this._getPosText(b, rng.startContainer, rng.endContainer);
-
- if (!e)
- return {scrollX : sx, scrollY : sy};
-
- return {
- start : e.start + rng.startOffset,
- end : e.end + rng.endOffset,
- scrollX : sx,
- scrollY : sy
- };
- }
- }
-
- return null;
- },
-
- moveToBookmark : function(bookmark) {
- var inst = this.instance, rng, nl, i, ex, b = inst.getBody(), sd;
- var doc = inst.getDoc(), win = inst.getWin(), sel = this.getSel();
-
- if (!bookmark)
- return false;
-
- if (tinyMCE.isSafari && bookmark.rng) {
- sel.setBaseAndExtent(bookmark.rng.startContainer, bookmark.rng.startOffset, bookmark.rng.endContainer, bookmark.rng.endOffset);
- return true;
- }
-
- if (tinyMCE.isRealIE) {
- if (bookmark.rng) {
- try {
- bookmark.rng.select();
- } catch (ex) {
- // Ignore
- }
-
- return true;
- }
-
- win.focus();
-
- if (bookmark.tag) {
- rng = b.createControlRange();
-
- nl = b.getElementsByTagName(bookmark.tag);
-
- if (nl.length > bookmark.index) {
- try {
- rng.addElement(nl[bookmark.index]);
- } catch (ex) {
- // Might be thrown if the node no longer exists
- }
- }
- } else {
- // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs
- try {
- // Incorrect bookmark
- if (bookmark.start < 0)
- return true;
-
- rng = inst.getSel().createRange();
- rng.moveToElementText(inst.getBody());
- rng.collapse(true);
- rng.moveStart('character', bookmark.start);
- rng.moveEnd('character', bookmark.length);
- } catch (ex) {
- return true;
- }
- }
-
- rng.select();
-
- win.scrollTo(bookmark.scrollX, bookmark.scrollY);
- return true;
- }
-
- if (tinyMCE.isGecko || tinyMCE.isOpera) {
- if (!sel)
- return false;
-
- if (bookmark.rng) {
- sel.removeAllRanges();
- sel.addRange(bookmark.rng);
- }
-
- if (bookmark.start != -1 && bookmark.end != -1) {
- try {
- sd = this._getTextPos(b, bookmark.start, bookmark.end);
- rng = doc.createRange();
- rng.setStart(sd.startNode, sd.startOffset);
- rng.setEnd(sd.endNode, sd.endOffset);
- sel.removeAllRanges();
- sel.addRange(rng);
-
- if (!tinyMCE.isOpera)
- win.focus();
- } catch (ex) {
- // Ignore
- }
- }
-
- /*
- if (typeof(bookmark.index) != 'undefined') {
- tinyMCE.selectElements(b, 'IMG', function (n) {
- if (bookmark.index-- == 0) {
- // Select image in Gecko here
- }
-
- return false;
- });
- }
- */
-
- win.scrollTo(bookmark.scrollX, bookmark.scrollY);
- return true;
- }
-
- return false;
- },
-
- _getPosText : function(r, sn, en) {
- var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};
-
- while ((n = w.nextNode()) != null) {
- if (n == sn)
- d.start = p;
-
- if (n == en) {
- d.end = p;
- return d;
- }
-
- p += n.nodeValue ? n.nodeValue.length : 0;
- }
-
- return null;
- },
-
- _getTextPos : function(r, sp, ep) {
- var w = document.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};
-
- while ((n = w.nextNode()) != null) {
- p += n.nodeValue ? n.nodeValue.length : 0;
-
- if (p >= sp && !d.startNode) {
- d.startNode = n;
- d.startOffset = sp - (p - n.nodeValue.length);
- }
-
- if (p >= ep) {
- d.endNode = n;
- d.endOffset = ep - (p - n.nodeValue.length);
-
- return d;
- }
- }
-
- return null;
- },
-
- selectNode : function(node, collapse, select_text_node, to_start) {
- var inst = this.instance, sel, rng, nodes;
-
- if (!node)
- return;
-
- if (typeof(collapse) == "undefined")
- collapse = true;
-
- if (typeof(select_text_node) == "undefined")
- select_text_node = false;
-
- if (typeof(to_start) == "undefined")
- to_start = true;
-
- if (inst.settings.auto_resize)
- inst.resizeToContent();
-
- if (tinyMCE.isRealIE) {
- rng = inst.getDoc().body.createTextRange();
-
- try {
- rng.moveToElementText(node);
-
- if (collapse)
- rng.collapse(to_start);
-
- rng.select();
- } catch (e) {
- // Throws illigal agrument in MSIE some times
- }
- } else {
- sel = this.getSel();
-
- if (!sel)
- return;
-
- if (tinyMCE.isSafari) {
- sel.setBaseAndExtent(node, 0, node, node.innerText.length);
-
- if (collapse) {
- if (to_start)
- sel.collapseToStart();
- else
- sel.collapseToEnd();
- }
-
- this.scrollToNode(node);
-
- return;
- }
-
- rng = inst.getDoc().createRange();
-
- if (select_text_node) {
- // Find first textnode in tree
- nodes = tinyMCE.getNodeTree(node, [], 3);
- if (nodes.length > 0)
- rng.selectNodeContents(nodes[0]);
- else
- rng.selectNodeContents(node);
- } else
- rng.selectNode(node);
-
- if (collapse) {
- // Special treatment of textnode collapse
- if (!to_start && node.nodeType == 3) {
- rng.setStart(node, node.nodeValue.length);
- rng.setEnd(node, node.nodeValue.length);
- } else
- rng.collapse(to_start);
- }
-
- sel.removeAllRanges();
- sel.addRange(rng);
- }
-
- this.scrollToNode(node);
-
- // Set selected element
- tinyMCE.selectedElement = null;
- if (node.nodeType == 1)
- tinyMCE.selectedElement = node;
- },
-
- scrollToNode : function(node) {
- var inst = this.instance, w = inst.getWin(), vp = inst.getViewPort(), pos = tinyMCE.getAbsPosition(node), cvp, p, cwin;
-
- // Only scroll if out of visible area
- if (pos.absLeft < vp.left || pos.absLeft > vp.left + vp.width || pos.absTop < vp.top || pos.absTop > vp.top + (vp.height-25))
- w.scrollTo(pos.absLeft, pos.absTop - vp.height + 25);
-
- // Scroll container window
- if (inst.settings.auto_resize) {
- cwin = inst.getContainerWin();
- cvp = tinyMCE.getViewPort(cwin);
- p = this.getAbsPosition(node);
-
- if (p.absLeft < cvp.left || p.absLeft > cvp.left + cvp.width || p.absTop < cvp.top || p.absTop > cvp.top + cvp.height)
- cwin.scrollTo(p.absLeft, p.absTop - cvp.height + 25);
- }
- },
-
- getAbsPosition : function(n) {
- var pos = tinyMCE.getAbsPosition(n), ipos = tinyMCE.getAbsPosition(this.instance.iframeElement);
-
- return {
- absLeft : ipos.absLeft + pos.absLeft,
- absTop : ipos.absTop + pos.absTop
- };
- },
-
- getSel : function() {
- var inst = this.instance;
-
- if (tinyMCE.isRealIE)
- return inst.getDoc().selection;
-
- return inst.contentWindow.getSelection();
- },
-
- getRng : function() {
- var s = this.getSel();
-
- if (s == null)
- return null;
-
- if (tinyMCE.isRealIE)
- return s.createRange();
-
- if (tinyMCE.isSafari && !s.getRangeAt)
- return '' + window.getSelection();
-
- if (s.rangeCount > 0)
- return s.getRangeAt(0);
-
- return null;
- },
-
- isCollapsed : function() {
- var r = this.getRng();
-
- if (r.item)
- return false;
-
- return r.boundingWidth == 0 || this.getSel().isCollapsed;
- },
-
- collapse : function(b) {
- var r = this.getRng(), s = this.getSel();
-
- if (r.select) {
- r.collapse(b);
- r.select();
- } else {
- if (b)
- s.collapseToStart();
- else
- s.collapseToEnd();
- }
- },
-
- getFocusElement : function() {
- var inst = this.instance, doc, rng, sel, elm;
-
- if (tinyMCE.isRealIE) {
- doc = inst.getDoc();
- rng = doc.selection.createRange();
-
- // if (rng.collapse)
- // rng.collapse(true);
-
- elm = rng.item ? rng.item(0) : rng.parentElement();
- } else {
- if (!tinyMCE.isSafari && inst.isHidden())
- return inst.getBody();
-
- sel = this.getSel();
- rng = this.getRng();
-
- if (!sel || !rng)
- return null;
-
- elm = rng.commonAncestorContainer;
- //elm = (sel && sel.anchorNode) ? sel.anchorNode : null;
-
- // Handle selection a image or other control like element such as anchors
- if (!rng.collapsed) {
- // Is selection small
- if (rng.startContainer == rng.endContainer) {
- if (rng.startOffset - rng.endOffset < 2) {
- if (rng.startContainer.hasChildNodes())
- elm = rng.startContainer.childNodes[rng.startOffset];
- }
- }
- }
-
- // Get the element parent of the node
- elm = tinyMCE.getParentElement(elm);
-
- //if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img")
- // elm = tinyMCE.selectedElement;
- }
-
- return elm;
- }
-
- };
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_UndoRedo.class.js */
-
-function TinyMCE_UndoRedo(inst) {
- this.instance = inst;
- this.undoLevels = [];
- this.undoIndex = 0;
- this.typingUndoIndex = -1;
- this.undoRedo = true;
-};
-
-TinyMCE_UndoRedo.prototype = {
- add : function(l) {
- var b, customUndoLevels, newHTML, inst = this.instance, i, ul, ur;
-
- if (l) {
- this.undoLevels[this.undoLevels.length] = l;
- return true;
- }
-
- if (this.typingUndoIndex != -1) {
- this.undoIndex = this.typingUndoIndex;
-
- if (tinyMCE.typingUndoIndex != -1)
- tinyMCE.undoIndex = tinyMCE.typingUndoIndex;
- }
-
- newHTML = tinyMCE.trim(inst.getBody().innerHTML);
- if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) {
- //tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex].content);
-
- // Is dirty again
- inst.isNotDirty = false;
-
- tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst);
-
- // Time to compress
- customUndoLevels = tinyMCE.settings.custom_undo_redo_levels;
- if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) {
- for (i=0; i<this.undoLevels.length-1; i++)
- this.undoLevels[i] = this.undoLevels[i+1];
-
- this.undoLevels.length--;
- this.undoIndex--;
-
- // Todo: Implement global undo/redo logic here
- }
-
- b = inst.undoBookmark;
-
- if (!b)
- b = inst.selection.getBookmark();
-
- this.undoIndex++;
- this.undoLevels[this.undoIndex] = {
- content : newHTML,
- bookmark : b
- };
-
- // Remove all above from global undo/redo
- ul = tinyMCE.undoLevels;
- for (i=tinyMCE.undoIndex + 1; i<ul.length; i++) {
- ur = ul[i].undoRedo;
-
- if (ur.undoIndex == ur.undoLevels.length -1)
- ur.undoIndex--;
-
- ur.undoLevels.length--;
- }
-
- // Add global undo level
- tinyMCE.undoLevels[tinyMCE.undoIndex++] = inst;
- tinyMCE.undoLevels.length = tinyMCE.undoIndex;
-
- this.undoLevels.length = this.undoIndex + 1;
-
- return true;
- }
-
- return false;
- },
-
- undo : function() {
- var inst = this.instance;
-
- // Do undo
- if (this.undoIndex > 0) {
- this.undoIndex--;
-
- tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content);
- inst.repaint();
-
- if (inst.settings.custom_undo_redo_restore_selection)
- inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);
- }
- },
-
- redo : function() {
- var inst = this.instance;
-
- tinyMCE.execCommand("mceEndTyping");
-
- if (this.undoIndex < (this.undoLevels.length-1)) {
- this.undoIndex++;
-
- tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content);
- inst.repaint();
-
- if (inst.settings.custom_undo_redo_restore_selection)
- inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);
- }
-
- tinyMCE.triggerNodeChange();
- }
-
- };
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_ForceParagraphs.class.js */
-
-var TinyMCE_ForceParagraphs = {
- _insertPara : function(inst, e) {
- var doc = inst.getDoc(), sel = inst.getSel(), body = inst.getBody(), win = inst.contentWindow, rng = sel.getRangeAt(0);
- var rootElm = doc.documentElement, blockName = "P", startNode, endNode, startBlock, endBlock;
- var rngBefore, rngAfter, direct, startNode, startOffset, endNode, endOffset, b = tinyMCE.isOpera ? inst.selection.getBookmark() : null;
- var paraBefore, paraAfter, startChop, endChop, contents, i;
-
- function isEmpty(para) {
- var nodes;
-
- function isEmptyHTML(html) {
- return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == '';
- }
-
- // Check for images
- if (para.getElementsByTagName("img").length > 0)
- return false;
-
- // Check for tables
- if (para.getElementsByTagName("table").length > 0)
- return false;
-
- // Check for HRs
- if (para.getElementsByTagName("hr").length > 0)
- return false;
-
- // Check all textnodes
- nodes = tinyMCE.getNodeTree(para, [], 3);
- for (i=0; i<nodes.length; i++) {
- if (!isEmptyHTML(nodes[i].nodeValue))
- return false;
- }
-
- // No images, no tables, no hrs, no text content then it's empty
- return true;
- }
-
- // tinyMCE.debug(body.innerHTML);
-
- // debug(e.target, sel.anchorNode.nodeName, sel.focusNode.nodeName, rng.startContainer, rng.endContainer, rng.commonAncestorContainer, sel.anchorOffset, sel.focusOffset, rng.toString());
-
- // Setup before range
- rngBefore = doc.createRange();
- rngBefore.setStart(sel.anchorNode, sel.anchorOffset);
- rngBefore.collapse(true);
-
- // Setup after range
- rngAfter = doc.createRange();
- rngAfter.setStart(sel.focusNode, sel.focusOffset);
- rngAfter.collapse(true);
-
- // Setup start/end points
- direct = rngBefore.compareBoundaryPoints(rngBefore.START_TO_END, rngAfter) < 0;
- startNode = direct ? sel.anchorNode : sel.focusNode;
- startOffset = direct ? sel.anchorOffset : sel.focusOffset;
- endNode = direct ? sel.focusNode : sel.anchorNode;
- endOffset = direct ? sel.focusOffset : sel.anchorOffset;
-
- startNode = startNode.nodeName == "HTML" ? doc.body : startNode; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes
- startNode = startNode.nodeName == "BODY" ? startNode.firstChild : startNode;
- endNode = endNode.nodeName == "BODY" ? endNode.firstChild : endNode;
-
- // Get block elements
- startBlock = inst.getParentBlockElement(startNode);
- endBlock = inst.getParentBlockElement(endNode);
-
- // If absolute force paragraph generation within
- if (startBlock && (startBlock.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(startBlock.style.position)))
- startBlock = null;
-
- if (endBlock && (endBlock.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(endBlock.style.position)))
- endBlock = null;
-
- // Use current block name
- if (startBlock != null) {
- blockName = startBlock.nodeName;
-
- // Use P instead
- if (/(TD|TABLE|TH|CAPTION)/.test(blockName) || (blockName == "DIV" && /left|right/gi.test(startBlock.style.cssFloat)))
- blockName = "P";
- }
-
- // Within a list use normal behaviour
- if (tinyMCE.getParentElement(startBlock, "OL,UL", null, body) != null)
- return false;
-
- // Within a table create new paragraphs
- if ((startBlock != null && startBlock.nodeName == "TABLE") || (endBlock != null && endBlock.nodeName == "TABLE"))
- startBlock = endBlock = null;
-
- // Setup new paragraphs
- paraBefore = (startBlock != null && startBlock.nodeName == blockName) ? startBlock.cloneNode(false) : doc.createElement(blockName);
- paraAfter = (endBlock != null && endBlock.nodeName == blockName) ? endBlock.cloneNode(false) : doc.createElement(blockName);
-
- // Is header, then force paragraph under
- if (/^(H[1-6])$/.test(blockName))
- paraAfter = doc.createElement("p");
-
- // Setup chop nodes
- startChop = startNode;
- endChop = endNode;
-
- // Get startChop node
- node = startChop;
- do {
- if (node == body || node.nodeType == 9 || tinyMCE.isBlockElement(node))
- break;
-
- startChop = node;
- } while ((node = node.previousSibling ? node.previousSibling : node.parentNode));
-
- // Get endChop node
- node = endChop;
- do {
- if (node == body || node.nodeType == 9 || tinyMCE.isBlockElement(node))
- break;
-
- endChop = node;
- } while ((node = node.nextSibling ? node.nextSibling : node.parentNode));
-
- // Fix when only a image is within the TD
- if (startChop.nodeName == "TD")
- startChop = startChop.firstChild;
-
- if (endChop.nodeName == "TD")
- endChop = endChop.lastChild;
-
- // If not in a block element
- if (startBlock == null) {
- // Delete selection
- rng.deleteContents();
-
- if (!tinyMCE.isSafari)
- sel.removeAllRanges();
-
- if (startChop != rootElm && endChop != rootElm) {
- // Insert paragraph before
- rngBefore = rng.cloneRange();
-
- if (startChop == body)
- rngBefore.setStart(startChop, 0);
- else
- rngBefore.setStartBefore(startChop);
-
- paraBefore.appendChild(rngBefore.cloneContents());
-
- // Insert paragraph after
- if (endChop.parentNode.nodeName == blockName)
- endChop = endChop.parentNode;
-
- // If not after image
- //if (rng.startContainer.nodeName != "BODY" && rng.endContainer.nodeName != "BODY")
- rng.setEndAfter(endChop);
-
- if (endChop.nodeName != "#text" && endChop.nodeName != "BODY")
- rngBefore.setEndAfter(endChop);
-
- contents = rng.cloneContents();
- if (contents.firstChild && (contents.firstChild.nodeName == blockName || contents.firstChild.nodeName == "BODY"))
- paraAfter.innerHTML = contents.firstChild.innerHTML;
- else
- paraAfter.appendChild(contents);
-
- // Check if it's a empty paragraph
- if (isEmpty(paraBefore))
- paraBefore.innerHTML = " ";
-
- // Check if it's a empty paragraph
- if (isEmpty(paraAfter))
- paraAfter.innerHTML = " ";
-
- // Delete old contents
- rng.deleteContents();
- rngAfter.deleteContents();
- rngBefore.deleteContents();
-
- // Insert new paragraphs
- if (tinyMCE.isOpera) {
- paraBefore.normalize();
- rngBefore.insertNode(paraBefore);
- paraAfter.normalize();
- rngBefore.insertNode(paraAfter);
- } else {
- paraAfter.normalize();
- rngBefore.insertNode(paraAfter);
- paraBefore.normalize();
- rngBefore.insertNode(paraBefore);
- }
-
- //tinyMCE.debug("1: ", paraBefore.innerHTML, paraAfter.innerHTML);
- } else {
- body.innerHTML = "<" + blockName + "> </" + blockName + "><" + blockName + "> </" + blockName + ">";
- paraAfter = body.childNodes[1];
- }
-
- inst.selection.moveToBookmark(b);
- inst.selection.selectNode(paraAfter, true, true);
-
- return true;
- }
-
- // Place first part within new paragraph
- if (startChop.nodeName == blockName)
- rngBefore.setStart(startChop, 0);
- else
- rngBefore.setStartBefore(startChop);
-
- rngBefore.setEnd(startNode, startOffset);
- paraBefore.appendChild(rngBefore.cloneContents());
-
- // Place secound part within new paragraph
- rngAfter.setEndAfter(endChop);
- rngAfter.setStart(endNode, endOffset);
- contents = rngAfter.cloneContents();
-
- if (contents.firstChild && contents.firstChild.nodeName == blockName) {
- /* var nodes = contents.firstChild.childNodes;
- for (i=0; i<nodes.length; i++) {
- //tinyMCE.debug(nodes[i].nodeName);
- if (nodes[i].nodeName != "BODY")
- paraAfter.appendChild(nodes[i]);
- }
- */
- paraAfter.innerHTML = contents.firstChild.innerHTML;
- } else
- paraAfter.appendChild(contents);
-
- // Check if it's a empty paragraph
- if (isEmpty(paraBefore))
- paraBefore.innerHTML = " ";
-
- // Check if it's a empty paragraph
- if (isEmpty(paraAfter))
- paraAfter.innerHTML = " ";
-
- // Create a range around everything
- rng = doc.createRange();
-
- if (!startChop.previousSibling && startChop.parentNode.nodeName.toUpperCase() == blockName) {
- rng.setStartBefore(startChop.parentNode);
- } else {
- if (rngBefore.startContainer.nodeName.toUpperCase() == blockName && rngBefore.startOffset == 0)
- rng.setStartBefore(rngBefore.startContainer);
- else
- rng.setStart(rngBefore.startContainer, rngBefore.startOffset);
- }
-
- if (!endChop.nextSibling && endChop.parentNode.nodeName.toUpperCase() == blockName)
- rng.setEndAfter(endChop.parentNode);
- else
- rng.setEnd(rngAfter.endContainer, rngAfter.endOffset);
-
- // Delete all contents and insert new paragraphs
- rng.deleteContents();
-
- if (tinyMCE.isOpera) {
- rng.insertNode(paraBefore);
- rng.insertNode(paraAfter);
- } else {
- rng.insertNode(paraAfter);
- rng.insertNode(paraBefore);
- }
-
- //tinyMCE.debug("2", paraBefore.innerHTML, paraAfter.innerHTML);
-
- // Normalize
- paraAfter.normalize();
- paraBefore.normalize();
-
- inst.selection.moveToBookmark(b);
- inst.selection.selectNode(paraAfter, true, true);
-
- return true;
- },
-
- _handleBackSpace : function(inst) {
- var r = inst.getRng(), sn = r.startContainer, nv, s = false;
-
- // Added body check for bug #1527787
- if (sn && sn.nextSibling && sn.nextSibling.nodeName == "BR" && sn.parentNode.nodeName != "BODY") {
- nv = sn.nodeValue;
-
- // Handle if a backspace is pressed after a space character #bug 1466054 removed since fix for #1527787
- /*if (nv != null && nv.length >= r.startOffset && nv.charAt(r.startOffset - 1) == ' ')
- s = true;*/
-
- // Only remove BRs if we are at the end of line #bug 1464152
- if (nv != null && r.startOffset == nv.length)
- sn.nextSibling.parentNode.removeChild(sn.nextSibling);
- }
-
- if (inst.settings.auto_resize)
- inst.resizeToContent();
-
- return s;
- }
-
- };
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Layer.class.js */
-
-function TinyMCE_Layer(id, bm) {
- this.id = id;
- this.blockerElement = null;
- this.events = false;
- this.element = null;
- this.blockMode = typeof(bm) != 'undefined' ? bm : true;
- this.doc = document;
-};
-
-TinyMCE_Layer.prototype = {
- moveRelativeTo : function(re, p) {
- var rep = this.getAbsPosition(re), e = this.getElement(), x, y;
- var w = parseInt(re.offsetWidth), h = parseInt(re.offsetHeight);
- var ew = parseInt(e.offsetWidth), eh = parseInt(e.offsetHeight);
-
- switch (p) {
- case "tl":
- x = rep.absLeft;
- y = rep.absTop;
- break;
-
- case "tr":
- x = rep.absLeft + w;
- y = rep.absTop;
- break;
-
- case "bl":
- x = rep.absLeft;
- y = rep.absTop + h;
- break;
-
- case "br":
- x = rep.absLeft + w;
- y = rep.absTop + h;
- break;
-
- case "cc":
- x = rep.absLeft + (w / 2) - (ew / 2);
- y = rep.absTop + (h / 2) - (eh / 2);
- break;
- }
-
- this.moveTo(x, y);
- },
-
- moveBy : function(x, y) {
- var e = this.getElement();
- this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y);
- },
-
- moveTo : function(x, y) {
- var e = this.getElement();
-
- e.style.left = x + "px";
- e.style.top = y + "px";
-
- this.updateBlocker();
- },
-
- resizeBy : function(w, h) {
- var e = this.getElement();
- this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h);
- },
-
- resizeTo : function(w, h) {
- var e = this.getElement();
-
- if (w != null)
- e.style.width = w + "px";
-
- if (h != null)
- e.style.height = h + "px";
-
- this.updateBlocker();
- },
-
- show : function() {
- var el = this.getElement();
-
- if (el) {
- el.style.display = 'block';
- this.updateBlocker();
- }
- },
-
- hide : function() {
- var el = this.getElement();
-
- if (el) {
- el.style.display = 'none';
- this.updateBlocker();
- }
- },
-
- isVisible : function() {
- return this.getElement().style.display == 'block';
- },
-
- getElement : function() {
- if (!this.element)
- this.element = this.doc.getElementById(this.id);
-
- return this.element;
- },
-
- setBlockMode : function(s) {
- this.blockMode = s;
- },
-
- updateBlocker : function() {
- var e, b, x, y, w, h;
-
- b = this.getBlocker();
- if (b) {
- if (this.blockMode) {
- e = this.getElement();
- x = this.parseInt(e.style.left);
- y = this.parseInt(e.style.top);
- w = this.parseInt(e.offsetWidth);
- h = this.parseInt(e.offsetHeight);
-
- b.style.left = x + 'px';
- b.style.top = y + 'px';
- b.style.width = w + 'px';
- b.style.height = h + 'px';
- b.style.display = e.style.display;
- } else
- b.style.display = 'none';
- }
- },
-
- getBlocker : function() {
- var d, b;
-
- if (!this.blockerElement && this.blockMode) {
- d = this.doc;
- b = d.getElementById(this.id + "_blocker");
-
- if (!b) {
- b = d.createElement("iframe");
-
- b.setAttribute('id', this.id + "_blocker");
- b.style.cssText = 'display: none; position: absolute; left: 0; top: 0';
- b.src = 'javascript:false;';
- b.frameBorder = '0';
- b.scrolling = 'no';
-
- d.body.appendChild(b);
- }
-
- this.blockerElement = b;
- }
-
- return this.blockerElement;
- },
-
- getAbsPosition : function(n) {
- var p = {absLeft : 0, absTop : 0};
-
- while (n) {
- p.absLeft += n.offsetLeft;
- p.absTop += n.offsetTop;
- n = n.offsetParent;
- }
-
- return p;
- },
-
- create : function(n, c, p, h) {
- var d = this.doc, e = d.createElement(n);
-
- e.setAttribute('id', this.id);
-
- if (c)
- e.className = c;
-
- if (!p)
- p = d.body;
-
- if (h)
- e.innerHTML = h;
-
- p.appendChild(e);
-
- return this.element = e;
- },
-
- exists : function() {
- return this.doc.getElementById(this.id) != null;
- },
-
- parseInt : function(s) {
- if (s == null || s == '')
- return 0;
-
- return parseInt(s);
- },
-
- remove : function() {
- var e = this.getElement(), b = this.getBlocker();
-
- if (e)
- e.parentNode.removeChild(e);
-
- if (b)
- b.parentNode.removeChild(b);
- }
-
- };
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Menu.class.js */
-
-function TinyMCE_Menu() {
- var id;
-
- if (typeof(tinyMCE.menuCounter) == "undefined")
- tinyMCE.menuCounter = 0;
-
- id = "mc_menu_" + tinyMCE.menuCounter++;
-
- TinyMCE_Layer.call(this, id, true);
-
- this.id = id;
- this.items = [];
- this.needsUpdate = true;
-};
-
-TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, {
- init : function(s) {
- var n;
-
- // Default params
- this.settings = {
- separator_class : 'mceMenuSeparator',
- title_class : 'mceMenuTitle',
- disabled_class : 'mceMenuDisabled',
- menu_class : 'mceMenu',
- drop_menu : true
- };
-
- for (n in s)
- this.settings[n] = s[n];
-
- this.create('div', this.settings.menu_class);
- },
-
- clear : function() {
- this.items = [];
- },
-
- addTitle : function(t) {
- this.add({type : 'title', text : t});
- },
-
- addDisabled : function(t) {
- this.add({type : 'disabled', text : t});
- },
-
- addSeparator : function() {
- this.add({type : 'separator'});
- },
-
- addItem : function(t, js) {
- this.add({text : t, js : js});
- },
-
- add : function(mi) {
- this.items[this.items.length] = mi;
- this.needsUpdate = true;
- },
-
- update : function() {
- var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings;
-
- if (this.settings.drop_menu)
- h += '<span class="mceMenuLine"></span>';
-
- h += '<table border="0" cellpadding="0" cellspacing="0">';
-
- for (i=0; i<m.length; i++) {
- t = tinyMCE.xmlEncode(m[i].text);
- c = m[i].class_name ? ' class="' + m[i].class_name + '"' : '';
-
- switch (m[i].type) {
- case 'separator':
- h += '<tr class="' + s.separator_class + '"><td>';
- break;
-
- case 'title':
- h += '<tr class="' + s.title_class + '"><td><span' + c +'>' + t + '</span>';
- break;
-
- case 'disabled':
- h += '<tr class="' + s.disabled_class + '"><td><span' + c +'>' + t + '</span>';
- break;
-
- default:
- h += '<tr><td><a href="' + tinyMCE.xmlEncode(m[i].js) + '" onmousedown="' + tinyMCE.xmlEncode(m[i].js) + ';return tinyMCE.cancelEvent(event);" onclick="return tinyMCE.cancelEvent(event);" onmouseup="return tinyMCE.cancelEvent(event);"><span' + c +'>' + t + '</span></a>';
- }
-
- h += '</td></tr>';
- }
-
- h += '</table>';
-
- e.innerHTML = h;
-
- this.needsUpdate = false;
- this.updateBlocker();
- },
-
- show : function() {
- var nl, i;
-
- if (tinyMCE.lastMenu == this)
- return;
-
- if (this.needsUpdate)
- this.update();
-
- if (tinyMCE.lastMenu && tinyMCE.lastMenu != this)
- tinyMCE.lastMenu.hide();
-
- TinyMCE_Layer.prototype.show.call(this);
-
- if (!tinyMCE.isOpera) {
- // Accessibility stuff
-/* nl = this.getElement().getElementsByTagName("a");
- if (nl.length > 0)
- nl[0].focus();*/
- }
-
- tinyMCE.lastMenu = this;
- }
-
- });
-
-/* file:jscripts/tiny_mce/classes/TinyMCE_Debug.class.js */
-
-tinyMCE.add(TinyMCE_Engine, {
- debug : function() {
- var m = "", a, i, l = tinyMCE.log.length;
-
- for (i=0, a = this.debug.arguments; i<a.length; i++) {
- m += a[i];
-
- if (i<a.length-1)
- m += ', ';
- }
-
- if (l < 1000)
- tinyMCE.log[l] = "[debug] " + m;
- }
-
- });
-
+\r
+/* file:jscripts/tiny_mce/classes/tinymce.js */\r
+\r
+var tinymce = {\r
+ majorVersion : '3',\r
+ minorVersion : '0.6.2',\r
+ releaseDate : '2008-04-07',\r
+\r
+ _init : function() {\r
+ var t = this, ua = navigator.userAgent, i, nl, n, base;\r
+\r
+ // Browser checks\r
+ t.isOpera = window.opera && opera.buildNumber;\r
+ t.isWebKit = /WebKit/.test(ua);\r
+ t.isOldWebKit = t.isWebKit && !window.getSelection().getRangeAt;\r
+ t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(navigator.appName);\r
+ t.isIE6 = t.isIE && /MSIE [56]/.test(ua);\r
+ t.isGecko = !t.isWebKit && /Gecko/.test(ua);\r
+ t.isMac = ua.indexOf('Mac') != -1;\r
+\r
+ // TinyMCE .NET webcontrol might be setting the values for TinyMCE\r
+ if (window.tinyMCEPreInit) {\r
+ t.suffix = tinyMCEPreInit.suffix;\r
+ t.baseURL = tinyMCEPreInit.base;\r
+ return;\r
+ }\r
+\r
+ // Get suffix and base\r
+ t.suffix = '';\r
+\r
+ // If base element found, add that infront of baseURL\r
+ nl = document.getElementsByTagName('base');\r
+ for (i=0; i<nl.length; i++) {\r
+ if (nl[i].href)\r
+ base = nl[i].href;\r
+ }\r
+\r
+ function getBase(n) {\r
+ if (n.src && /tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(n.src)) {\r
+ if (/_(src|dev)\.js/g.test(n.src))\r
+ t.suffix = '_src';\r
+\r
+ t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));\r
+\r
+ // If path to script is relative and a base href was found add that one infront\r
+ if (base && t.baseURL.indexOf('://') == -1)\r
+ t.baseURL = base + t.baseURL;\r
+\r
+ return t.baseURL;\r
+ }\r
+\r
+ return null;\r
+ };\r
+\r
+ // Check document\r
+ nl = document.getElementsByTagName('script');\r
+ for (i=0; i<nl.length; i++) {\r
+ if (getBase(nl[i]))\r
+ return;\r
+ }\r
+\r
+ // Check head\r
+ n = document.getElementsByTagName('head')[0];\r
+ if (n) {\r
+ nl = n.getElementsByTagName('script');\r
+ for (i=0; i<nl.length; i++) {\r
+ if (getBase(nl[i]))\r
+ return;\r
+ }\r
+ }\r
+\r
+ return;\r
+ },\r
+\r
+ is : function(o, t) {\r
+ var n = typeof(o);\r
+\r
+ if (!t)\r
+ return n != 'undefined';\r
+\r
+ if (t == 'array' && (o instanceof Array))\r
+ return true;\r
+\r
+ return n == t;\r
+ },\r
+\r
+ // #if !jquery\r
+\r
+ each : function(o, cb, s) {\r
+ var n, l;\r
+\r
+ if (!o)\r
+ return 0;\r
+\r
+ s = s || o;\r
+\r
+ if (typeof(o.length) != 'undefined') {\r
+ // Indexed arrays, needed for Safari\r
+ for (n=0, l = o.length; n<l; n++) {\r
+ if (cb.call(s, o[n], n, o) === false)\r
+ return 0;\r
+ }\r
+ } else {\r
+ // Hashtables\r
+ for (n in o) {\r
+ if (o.hasOwnProperty(n)) {\r
+ if (cb.call(s, o[n], n, o) === false)\r
+ return 0;\r
+ }\r
+ }\r
+ }\r
+\r
+ return 1;\r
+ },\r
+\r
+ map : function(a, f) {\r
+ var o = [];\r
+\r
+ tinymce.each(a, function(v) {\r
+ o.push(f(v));\r
+ });\r
+\r
+ return o;\r
+ },\r
+\r
+ grep : function(a, f) {\r
+ var o = [];\r
+\r
+ tinymce.each(a, function(v) {\r
+ if (!f || f(v))\r
+ o.push(v);\r
+ });\r
+\r
+ return o;\r
+ },\r
+\r
+ inArray : function(a, v) {\r
+ var i, l;\r
+\r
+ if (a) {\r
+ for (i = 0, l = a.length; i < l; i++) {\r
+ if (a[i] === v)\r
+ return i;\r
+ }\r
+ }\r
+\r
+ return -1;\r
+ },\r
+\r
+ extend : function(o, e) {\r
+ var i, a = arguments;\r
+\r
+ for (i=1; i<a.length; i++) {\r
+ e = a[i];\r
+\r
+ tinymce.each(e, function(v, n) {\r
+ if (typeof(v) !== 'undefined')\r
+ o[n] = v;\r
+ });\r
+ }\r
+\r
+ return o;\r
+ },\r
+\r
+ trim : function(s) {\r
+ return (s ? '' + s : '').replace(/^\s*|\s*$/g, '');\r
+ },\r
+\r
+ // #endif\r
+\r
+ create : function(s, p) {\r
+ var t = this, sp, ns, cn, scn, c, de = 0;\r
+\r
+ // Parse : <prefix> <class>:<super class>\r
+ s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);\r
+ cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name\r
+\r
+ // Create namespace for new class\r
+ ns = t.createNS(s[3].replace(/\.\w+$/, ''));\r
+\r
+ // Class already exists\r
+ if (ns[cn])\r
+ return;\r
+\r
+ // Make pure static class\r
+ if (s[2] == 'static') {\r
+ ns[cn] = p;\r
+\r
+ if (this.onCreate)\r
+ this.onCreate(s[2], s[3], ns[cn]);\r
+\r
+ return;\r
+ }\r
+\r
+ // Create default constructor\r
+ if (!p[cn]) {\r
+ p[cn] = function() {};\r
+ de = 1;\r
+ }\r
+\r
+ // Add constructor and methods\r
+ ns[cn] = p[cn];\r
+ t.extend(ns[cn].prototype, p);\r
+\r
+ // Extend\r
+ if (s[5]) {\r
+ sp = t.resolve(s[5]).prototype;\r
+ scn = s[5].match(/\.(\w+)$/i)[1]; // Class name\r
+\r
+ // Extend constructor\r
+ c = ns[cn];\r
+ if (de) {\r
+ // Add passthrough constructor\r
+ ns[cn] = function() {\r
+ return sp[scn].apply(this, arguments);\r
+ };\r
+ } else {\r
+ // Add inherit constructor\r
+ ns[cn] = function() {\r
+ this.parent = sp[scn];\r
+ return c.apply(this, arguments);\r
+ };\r
+ }\r
+ ns[cn].prototype[cn] = ns[cn];\r
+\r
+ // Add super methods\r
+ t.each(sp, function(f, n) {\r
+ ns[cn].prototype[n] = sp[n];\r
+ });\r
+\r
+ // Add overridden methods\r
+ t.each(p, function(f, n) {\r
+ // Extend methods if needed\r
+ if (sp[n]) {\r
+ ns[cn].prototype[n] = function() {\r
+ this.parent = sp[n];\r
+ return f.apply(this, arguments);\r
+ };\r
+ } else {\r
+ if (n != cn)\r
+ ns[cn].prototype[n] = f;\r
+ }\r
+ });\r
+ }\r
+\r
+ // Add static methods\r
+ t.each(p['static'], function(f, n) {\r
+ ns[cn][n] = f;\r
+ });\r
+\r
+ if (this.onCreate)\r
+ this.onCreate(s[2], s[3], ns[cn].prototype);\r
+ },\r
+\r
+ walk : function(o, f, n, s) {\r
+ s = s || this;\r
+\r
+ if (o) {\r
+ if (n)\r
+ o = o[n];\r
+\r
+ tinymce.each(o, function(o, i) {\r
+ if (f.call(s, o, i, n) === false)\r
+ return false;\r
+\r
+ tinymce.walk(o, f, n, s);\r
+ });\r
+ }\r
+ },\r
+\r
+ createNS : function(n, o) {\r
+ var i, v;\r
+\r
+ o = o || window;\r
+\r
+ n = n.split('.');\r
+ for (i=0; i<n.length; i++) {\r
+ v = n[i];\r
+\r
+ if (!o[v])\r
+ o[v] = {};\r
+\r
+ o = o[v];\r
+ }\r
+\r
+ return o;\r
+ },\r
+\r
+ resolve : function(n, o) {\r
+ var i, l;\r
+\r
+ o = o || window;\r
+\r
+ n = n.split('.');\r
+ for (i=0, l = n.length; i<l; i++) {\r
+ o = o[n[i]];\r
+\r
+ if (!o)\r
+ break;\r
+ }\r
+\r
+ return o;\r
+ },\r
+\r
+ addUnload : function(f, s) {\r
+ var t = this, w = window, unload;\r
+\r
+ f = {func : f, scope : s || this};\r
+\r
+ if (!t.unloads) {\r
+ unload = function() {\r
+ var li = t.unloads, o, n;\r
+\r
+ // Call unload handlers\r
+ for (n in li) {\r
+ o = li[n];\r
+\r
+ if (o && o.func)\r
+ o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy\r
+ }\r
+\r
+ // Detach unload function\r
+ if (w.detachEvent)\r
+ w.detachEvent('onunload', unload);\r
+ else if (w.removeEventListener)\r
+ w.removeEventListener('unload', unload, false);\r
+\r
+ // Destroy references\r
+ o = li = w = unload = null;\r
+\r
+ // Run garbarge collector on IE\r
+ if (window.CollectGarbage)\r
+ window.CollectGarbage();\r
+ };\r
+\r
+ // Attach unload handler\r
+ if (w.attachEvent)\r
+ w.attachEvent('onunload', unload);\r
+ else if (w.addEventListener)\r
+ w.addEventListener('unload', unload, false);\r
+\r
+ // Setup initial unload handler array\r
+ t.unloads = [f];\r
+ } else\r
+ t.unloads.push(f);\r
+\r
+ return f;\r
+ },\r
+\r
+ removeUnload : function(f) {\r
+ var u = this.unloads, r = null;\r
+\r
+ tinymce.each(u, function(o, i) {\r
+ if (o && o.func == f) {\r
+ u.splice(i, 1);\r
+ r = f;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ return r;\r
+ },\r
+\r
+ explode : function(s, d) {\r
+ return tinymce.map(s.split(d || ','), tinymce.trim);\r
+ }\r
+\r
+ };\r
+\r
+// Required for GZip AJAX loading\r
+window.tinymce = tinymce;\r
+\r
+// Initialize the API\r
+tinymce._init();\r
+\r
+/* file:jscripts/tiny_mce/classes/adapter/jquery/adapter.js */\r
+\r
+\r
+/* file:jscripts/tiny_mce/classes/adapter/prototype/adapter.js */\r
+\r
+\r
+/* file:jscripts/tiny_mce/classes/util/Dispatcher.js */\r
+\r
+tinymce.create('tinymce.util.Dispatcher', {\r
+ scope : null,\r
+ listeners : null,\r
+\r
+ Dispatcher : function(s) {\r
+ this.scope = s || this;\r
+ this.listeners = [];\r
+ },\r
+\r
+ add : function(cb, s) {\r
+ this.listeners.push({cb : cb, scope : s || this.scope});\r
+\r
+ return cb;\r
+ },\r
+\r
+ addToTop : function(cb, s) {\r
+ this.listeners.unshift({cb : cb, scope : s || this.scope});\r
+\r
+ return cb;\r
+ },\r
+\r
+ remove : function(cb) {\r
+ var l = this.listeners, o = null;\r
+\r
+ tinymce.each(l, function(c, i) {\r
+ if (cb == c.cb) {\r
+ o = cb;\r
+ l.splice(i, 1);\r
+ return false;\r
+ }\r
+ });\r
+\r
+ return o;\r
+ },\r
+\r
+ dispatch : function() {\r
+ var s, a = arguments, i, li = this.listeners, c;\r
+\r
+ // Needs to be a real loop since the listener count might change while looping\r
+ // And this is also more efficient\r
+ for (i = 0; i<li.length; i++) {\r
+ c = li[i];\r
+ s = c.cb.apply(c.scope, a);\r
+\r
+ if (s === false)\r
+ break;\r
+ }\r
+\r
+ return s;\r
+ }\r
+\r
+ });\r
+\r
+/* file:jscripts/tiny_mce/classes/util/URI.js */\r
+\r
+(function() {\r
+ var each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.util.URI', {\r
+ URI : function(u, s) {\r
+ var t = this, o, a, b;\r
+\r
+ // Default settings\r
+ s = t.settings = s || {};\r
+\r
+ // Strange app protocol or local anchor\r
+ if (/^(mailto|news|javascript|about):/i.test(u) || /^\s*#/.test(u)) {\r
+ t.source = u;\r
+ return;\r
+ }\r
+\r
+ // Absolute path with no host, fake host and protocol\r
+ if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)\r
+ u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;\r
+\r
+ // Relative path\r
+ if (u.indexOf('://') === -1 && u.indexOf('//') !== 0)\r
+ u = (s.base_uri.protocol || 'http') + '://mce_host' + t.toAbsPath(s.base_uri.path, u);\r
+\r
+ // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)\r
+ u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something\r
+ u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);\r
+ each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) {\r
+ var s = u[i];\r
+\r
+ // Zope 3 workaround, they use @@something\r
+ if (s)\r
+ s = s.replace(/\(mce_at\)/g, '@@');\r
+\r
+ t[v] = s;\r
+ });\r
+\r
+ if (b = s.base_uri) {\r
+ if (!t.protocol)\r
+ t.protocol = b.protocol;\r
+\r
+ if (!t.userInfo)\r
+ t.userInfo = b.userInfo;\r
+\r
+ if (!t.port && t.host == 'mce_host')\r
+ t.port = b.port;\r
+\r
+ if (!t.host || t.host == 'mce_host')\r
+ t.host = b.host;\r
+\r
+ t.source = '';\r
+ }\r
+\r
+ //t.path = t.path || '/';\r
+ },\r
+\r
+ setPath : function(p) {\r
+ var t = this;\r
+\r
+ p = /^(.*?)\/?(\w+)?$/.exec(p);\r
+\r
+ // Update path parts\r
+ t.path = p[0];\r
+ t.directory = p[1];\r
+ t.file = p[2];\r
+\r
+ // Rebuild source\r
+ t.source = '';\r
+ t.getURI();\r
+ },\r
+\r
+ toRelative : function(u) {\r
+ var t = this, o;\r
+\r
+ u = new tinymce.util.URI(u, {base_uri : t});\r
+\r
+ // Not on same domain/port or protocol\r
+ if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol)\r
+ return u.getURI();\r
+\r
+ o = t.toRelPath(t.path, u.path);\r
+\r
+ // Add query\r
+ if (u.query)\r
+ o += '?' + u.query;\r
+\r
+ // Add anchor\r
+ if (u.anchor)\r
+ o += '#' + u.anchor;\r
+\r
+ return o;\r
+ },\r
+ \r
+ toAbsolute : function(u, nh) {\r
+ var u = new tinymce.util.URI(u, {base_uri : this});\r
+\r
+ return u.getURI(this.host == u.host ? nh : 0);\r
+ },\r
+\r
+ toRelPath : function(base, path) {\r
+ var items, bp = 0, out = '', i;\r
+\r
+ // Split the paths\r
+ base = base.substring(0, base.lastIndexOf('/'));\r
+ base = base.split('/');\r
+ items = path.split('/');\r
+\r
+ if (base.length >= items.length) {\r
+ for (i = 0; i < base.length; i++) {\r
+ if (i >= items.length || base[i] != items[i]) {\r
+ bp = i + 1;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (base.length < items.length) {\r
+ for (i = 0; i < items.length; i++) {\r
+ if (i >= base.length || base[i] != items[i]) {\r
+ bp = i + 1;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (bp == 1)\r
+ return path;\r
+\r
+ for (i = 0; i < base.length - (bp - 1); i++)\r
+ out += "../";\r
+\r
+ for (i = bp - 1; i < items.length; i++) {\r
+ if (i != bp - 1)\r
+ out += "/" + items[i];\r
+ else\r
+ out += items[i];\r
+ }\r
+\r
+ return out;\r
+ },\r
+\r
+ toAbsPath : function(base, path) {\r
+ var i, nb = 0, o = [];\r
+\r
+ // Split paths\r
+ base = base.split('/');\r
+ path = path.split('/');\r
+\r
+ // Remove empty chunks\r
+ each(base, function(k) {\r
+ if (k)\r
+ o.push(k);\r
+ });\r
+\r
+ base = o;\r
+\r
+ // Merge relURLParts chunks\r
+ for (i = path.length - 1, o = []; i >= 0; i--) {\r
+ // Ignore empty or .\r
+ if (path[i].length == 0 || path[i] == ".")\r
+ continue;\r
+\r
+ // Is parent\r
+ if (path[i] == '..') {\r
+ nb++;\r
+ continue;\r
+ }\r
+\r
+ // Move up\r
+ if (nb > 0) {\r
+ nb--;\r
+ continue;\r
+ }\r
+\r
+ o.push(path[i]);\r
+ }\r
+\r
+ i = base.length - nb;\r
+\r
+ // If /a/b/c or /\r
+ if (i <= 0)\r
+ return '/' + o.reverse().join('/');\r
+\r
+ return '/' + base.slice(0, i).join('/') + '/' + o.reverse().join('/');\r
+ },\r
+\r
+ getURI : function(nh) {\r
+ var s, t = this;\r
+\r
+ // Rebuild source\r
+ if (!t.source || nh) {\r
+ s = '';\r
+\r
+ if (!nh) {\r
+ if (t.protocol)\r
+ s += t.protocol + '://';\r
+\r
+ if (t.userInfo)\r
+ s += t.userInfo + '@';\r
+\r
+ if (t.host)\r
+ s += t.host;\r
+\r
+ if (t.port)\r
+ s += ':' + t.port;\r
+ }\r
+\r
+ if (t.path)\r
+ s += t.path;\r
+\r
+ if (t.query)\r
+ s += '?' + t.query;\r
+\r
+ if (t.anchor)\r
+ s += '#' + t.anchor;\r
+\r
+ t.source = s;\r
+ }\r
+\r
+ return t.source;\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/util/Cookie.js */\r
+\r
+(function() {\r
+ var each = tinymce.each;\r
+\r
+ tinymce.create('static tinymce.util.Cookie', {\r
+ getHash : function(n) {\r
+ var v = this.get(n), h;\r
+\r
+ if (v) {\r
+ each(v.split('&'), function(v) {\r
+ v = v.split('=');\r
+ h = h || {};\r
+ h[unescape(v[0])] = unescape(v[1]);\r
+ });\r
+ }\r
+\r
+ return h;\r
+ },\r
+\r
+ setHash : function(n, v, e, p, d, s) {\r
+ var o = '';\r
+\r
+ each(v, function(v, k) {\r
+ o += (!o ? '' : '&') + escape(k) + '=' + escape(v);\r
+ });\r
+\r
+ this.set(n, o, e, p, d, s);\r
+ },\r
+\r
+ get : function(n) {\r
+ var c = document.cookie, e, p = n + "=", b;\r
+\r
+ // Strict mode\r
+ if (!c)\r
+ return;\r
+\r
+ b = c.indexOf("; " + p);\r
+\r
+ if (b == -1) {\r
+ b = c.indexOf(p);\r
+\r
+ if (b != 0)\r
+ return null;\r
+ } else\r
+ b += 2;\r
+\r
+ e = c.indexOf(";", b);\r
+\r
+ if (e == -1)\r
+ e = c.length;\r
+\r
+ return unescape(c.substring(b + p.length, e));\r
+ },\r
+\r
+ set : function(n, v, e, p, d, s) {\r
+ document.cookie = n + "=" + escape(v) +\r
+ ((e) ? "; expires=" + e.toGMTString() : "") +\r
+ ((p) ? "; path=" + escape(p) : "") +\r
+ ((d) ? "; domain=" + d : "") +\r
+ ((s) ? "; secure" : "");\r
+ },\r
+\r
+ remove : function(n, p) {\r
+ var d = new Date();\r
+\r
+ d.setTime(d.getTime() - 1000);\r
+\r
+ this.set(n, '', d, p, d);\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/util/JSON.js */\r
+\r
+tinymce.create('static tinymce.util.JSON', {\r
+ serialize : function(o) {\r
+ var i, v, s = tinymce.util.JSON.serialize, t;\r
+\r
+ if (o == null)\r
+ return 'null';\r
+\r
+ t = typeof o;\r
+\r
+ if (t == 'string') {\r
+ v = '\bb\tt\nn\ff\rr\""\'\'\\\\';\r
+\r
+ return '"' + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'])/g, function(a, b) {\r
+ i = v.indexOf(b);\r
+\r
+ if (i + 1)\r
+ return '\\' + v.charAt(i + 1);\r
+\r
+ a = b.charCodeAt().toString(16);\r
+\r
+ return '\\u' + '0000'.substring(a.length) + a;\r
+ }) + '"';\r
+ }\r
+\r
+ if (t == 'object') {\r
+ if (o instanceof Array) {\r
+ for (i=0, v = '['; i<o.length; i++)\r
+ v += (i > 0 ? ',' : '') + s(o[i]);\r
+\r
+ return v + ']';\r
+ }\r
+\r
+ v = '{';\r
+\r
+ for (i in o)\r
+ v += typeof o[i] != 'function' ? (v.length > 1 ? ',"' : '"') + i + '":' + s(o[i]) : '';\r
+\r
+ return v + '}';\r
+ }\r
+\r
+ return '' + o;\r
+ },\r
+\r
+ parse : function(s) {\r
+ try {\r
+ return eval('(' + s + ')');\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+ }\r
+\r
+ });\r
+\r
+/* file:jscripts/tiny_mce/classes/util/XHR.js */\r
+\r
+tinymce.create('static tinymce.util.XHR', {\r
+ send : function(o) {\r
+ var x, t, w = window, c = 0;\r
+\r
+ // Default settings\r
+ o.scope = o.scope || this;\r
+ o.success_scope = o.success_scope || o.scope;\r
+ o.error_scope = o.error_scope || o.scope;\r
+ o.async = o.async === false ? false : true;\r
+ o.data = o.data || '';\r
+\r
+ function get(s) {\r
+ x = 0;\r
+\r
+ try {\r
+ x = new ActiveXObject(s);\r
+ } catch (ex) {\r
+ }\r
+\r
+ return x;\r
+ };\r
+\r
+ x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP');\r
+\r
+ if (x) {\r
+ if (x.overrideMimeType)\r
+ x.overrideMimeType(o.content_type);\r
+\r
+ x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async);\r
+\r
+ if (o.content_type)\r
+ x.setRequestHeader('Content-Type', o.content_type);\r
+\r
+ x.send(o.data);\r
+\r
+ // Wait for response, onReadyStateChange can not be used since it leaks memory in IE\r
+ t = w.setInterval(function() {\r
+ if (x.readyState == 4 || c++ > 10000) {\r
+ w.clearInterval(t);\r
+\r
+ if (o.success && c < 10000 && x.status == 200)\r
+ o.success.call(o.success_scope, '' + x.responseText, x, o);\r
+ else if (o.error)\r
+ o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o);\r
+\r
+ x = null;\r
+ }\r
+ }, 10);\r
+ }\r
+\r
+ }\r
+});\r
+\r
+/* file:jscripts/tiny_mce/classes/util/JSONRequest.js */\r
+\r
+(function() {\r
+ var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR;\r
+\r
+ tinymce.create('tinymce.util.JSONRequest', {\r
+ JSONRequest : function(s) {\r
+ this.settings = extend({\r
+ }, s);\r
+ this.count = 0;\r
+ },\r
+\r
+ send : function(o) {\r
+ var ecb = o.error, scb = o.success;\r
+\r
+ o = extend(this.settings, o);\r
+\r
+ o.success = function(c, x) {\r
+ c = JSON.parse(c);\r
+\r
+ if (typeof(c) == 'undefined') {\r
+ c = {\r
+ error : 'JSON Parse error.'\r
+ };\r
+ }\r
+\r
+ if (c.error)\r
+ ecb.call(o.error_scope || o.scope, c.error, x);\r
+ else\r
+ scb.call(o.success_scope || o.scope, c.result);\r
+ };\r
+\r
+ o.error = function(ty, x) {\r
+ ecb.call(o.error_scope || o.scope, ty, x);\r
+ };\r
+\r
+ o.data = JSON.serialize({\r
+ id : o.id || 'c' + (this.count++),\r
+ method : o.method,\r
+ params : o.params\r
+ });\r
+\r
+ // JSON content type for Ruby on rails. Bug: #1883287\r
+ o.content_type = 'application/json';\r
+\r
+ XHR.send(o);\r
+ },\r
+\r
+ 'static' : {\r
+ sendRPC : function(o) {\r
+ return new tinymce.util.JSONRequest().send(o);\r
+ }\r
+ }\r
+\r
+ });\r
+}());\r
+/* file:jscripts/tiny_mce/classes/dom/DOMUtils.js */\r
+\r
+(function() {\r
+ // Shorten names\r
+ var each = tinymce.each, is = tinymce.is;\r
+ var isWebKit = tinymce.isWebKit, isIE = tinymce.isIE;\r
+\r
+ tinymce.create('tinymce.dom.DOMUtils', {\r
+ doc : null,\r
+ root : null,\r
+ files : null,\r
+ listeners : {},\r
+ pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/,\r
+ cache : {},\r
+ idPattern : /^#[\w]+$/,\r
+ elmPattern : /^[\w_*]+$/,\r
+ elmClassPattern : /^([\w_]*)\.([\w_]+)$/,\r
+\r
+ DOMUtils : function(d, s) {\r
+ var t = this;\r
+\r
+ t.doc = d;\r
+ t.win = window;\r
+ t.files = {};\r
+ t.cssFlicker = false;\r
+ t.counter = 0;\r
+ t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat"; \r
+ t.stdMode = d.documentMode === 8;\r
+\r
+ this.settings = s = tinymce.extend({\r
+ keep_values : false,\r
+ hex_colors : 1,\r
+ process_html : 1\r
+ }, s);\r
+\r
+ // Fix IE6SP2 flicker and check it failed for pre SP2\r
+ if (tinymce.isIE6) {\r
+ try {\r
+ d.execCommand('BackgroundImageCache', false, true);\r
+ } catch (e) {\r
+ t.cssFlicker = true;\r
+ }\r
+ }\r
+\r
+ tinymce.addUnload(t.destroy, t);\r
+ },\r
+\r
+ getRoot : function() {\r
+ var t = this, s = t.settings;\r
+\r
+ return (s && t.get(s.root_element)) || t.doc.body;\r
+ },\r
+\r
+ getViewPort : function(w) {\r
+ var d, b;\r
+\r
+ w = !w ? this.win : w;\r
+ d = w.document;\r
+ b = this.boxModel ? d.documentElement : d.body;\r
+\r
+ // Returns viewport size excluding scrollbars\r
+ return {\r
+ x : w.pageXOffset || b.scrollLeft,\r
+ y : w.pageYOffset || b.scrollTop,\r
+ w : w.innerWidth || b.clientWidth,\r
+ h : w.innerHeight || b.clientHeight\r
+ };\r
+ },\r
+\r
+ getRect : function(e) {\r
+ var p, t = this, w, h;\r
+\r
+ e = t.get(e);\r
+ p = t.getPos(e);\r
+ w = t.getStyle(e, 'width');\r
+ h = t.getStyle(e, 'height');\r
+\r
+ // Non pixel value, then force offset/clientWidth\r
+ if (w.indexOf('px') === -1)\r
+ w = 0;\r
+\r
+ // Non pixel value, then force offset/clientWidth\r
+ if (h.indexOf('px') === -1)\r
+ h = 0;\r
+\r
+ return {\r
+ x : p.x,\r
+ y : p.y,\r
+ w : parseInt(w) || e.offsetWidth || e.clientWidth,\r
+ h : parseInt(h) || e.offsetHeight || e.clientHeight\r
+ };\r
+ },\r
+\r
+ getParent : function(n, f, r) {\r
+ var na, se = this.settings;\r
+\r
+ n = this.get(n);\r
+\r
+ if (se.strict_root)\r
+ r = r || this.getRoot();\r
+\r
+ // Wrap node name as func\r
+ if (is(f, 'string')) {\r
+ na = f.toUpperCase();\r
+\r
+ f = function(n) {\r
+ var s = false;\r
+\r
+ // Any element\r
+ if (n.nodeType == 1 && na === '*') {\r
+ s = true;\r
+ return false;\r
+ }\r
+\r
+ each(na.split(','), function(v) {\r
+ if (n.nodeType == 1 && ((se.strict && n.nodeName.toUpperCase() == v) || n.nodeName == v)) {\r
+ s = true;\r
+ return false; // Break loop\r
+ }\r
+ });\r
+\r
+ return s;\r
+ };\r
+ }\r
+\r
+ while (n) {\r
+ if (n == r)\r
+ return null;\r
+\r
+ if (f(n))\r
+ return n;\r
+\r
+ n = n.parentNode;\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
+ get : function(e) {\r
+ var n;\r
+\r
+ if (this.doc && typeof(e) == 'string') {\r
+ n = e;\r
+ e = this.doc.getElementById(e);\r
+\r
+ // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick\r
+ if (e && e.id !== n)\r
+ return this.doc.getElementsByName(n)[1];\r
+ }\r
+\r
+ return e;\r
+ },\r
+\r
+ // #if !jquery\r
+\r
+ select : function(pa, s) {\r
+ var t = this, cs, c, pl, o = [], x, i, l, n;\r
+\r
+ s = t.get(s) || t.doc;\r
+\r
+ // Look for native support and use that if it's found\r
+ if (s.querySelectorAll) {\r
+ // Element scope then use temp id\r
+ // We need to do this to be compatible with other implementations\r
+ // See bug report: http://bugs.webkit.org/show_bug.cgi?id=17461\r
+ if (s != t.doc) {\r
+ i = s.id;\r
+ s.id = '_mc_tmp';\r
+ pa = '#_mc_tmp ' + pa;\r
+ }\r
+\r
+ // Select elements\r
+ l = tinymce.grep(s.querySelectorAll(pa));\r
+\r
+ // Restore old id\r
+ s.id = i;\r
+\r
+ return l;\r
+ }\r
+\r
+ if (t.settings.strict) {\r
+ function get(s, n) {\r
+ return s.getElementsByTagName(n.toLowerCase());\r
+ };\r
+ } else {\r
+ function get(s, n) {\r
+ return s.getElementsByTagName(n);\r
+ };\r
+ }\r
+\r
+ // Simple element pattern. For example: "p" or "*"\r
+ if (t.elmPattern.test(pa)) {\r
+ x = get(s, pa);\r
+\r
+ for (i = 0, l = x.length; i<l; i++)\r
+ o.push(x[i]);\r
+\r
+ return o;\r
+ }\r
+\r
+ // Simple class pattern. For example: "p.class" or ".class"\r
+ if (t.elmClassPattern.test(pa)) {\r
+ pl = t.elmClassPattern.exec(pa);\r
+ x = get(s, pl[1] || '*');\r
+ c = ' ' + pl[2] + ' ';\r
+\r
+ for (i = 0, l = x.length; i<l; i++) {\r
+ n = x[i];\r
+\r
+ if (n.className && (' ' + n.className + ' ').indexOf(c) !== -1)\r
+ o.push(n);\r
+ }\r
+\r
+ return o;\r
+ }\r
+\r
+ function collect(n) {\r
+ if (!n.mce_save) {\r
+ n.mce_save = 1;\r
+ o.push(n);\r
+ }\r
+ };\r
+\r
+ function collectIE(n) {\r
+ if (!n.getAttribute('mce_save')) {\r
+ n.setAttribute('mce_save', '1');\r
+ o.push(n);\r
+ }\r
+ };\r
+\r
+ function find(n, f, r) {\r
+ var i, l, nl = get(r, n);\r
+\r
+ for (i = 0, l = nl.length; i < l; i++)\r
+ f(nl[i]);\r
+ };\r
+\r
+ each(pa.split(','), function(v, i) {\r
+ v = tinymce.trim(v);\r
+\r
+ // Simple element pattern, most common in TinyMCE\r
+ if (t.elmPattern.test(v)) {\r
+ each(get(s, v), function(n) {\r
+ collect(n);\r
+ });\r
+\r
+ return;\r
+ }\r
+\r
+ // Simple element pattern with class, fairly common in TinyMCE\r
+ if (t.elmClassPattern.test(v)) {\r
+ x = t.elmClassPattern.exec(v);\r
+\r
+ each(get(s, x[1]), function(n) {\r
+ if (t.hasClass(n, x[2]))\r
+ collect(n);\r
+ });\r
+\r
+ return;\r
+ }\r
+\r
+ if (!(cs = t.cache[pa])) {\r
+ cs = 'x=(function(cf, s) {';\r
+ pl = v.split(' ');\r
+\r
+ each(pl, function(v) {\r
+ var p = /^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i.exec(v);\r
+\r
+ // Find elements\r
+ p[1] = p[1] || '*';\r
+ cs += 'find("' + p[1] + '", function(n) {';\r
+\r
+ // Check id\r
+ if (p[2])\r
+ cs += 'if (n.id !== "' + p[2] + '") return;';\r
+\r
+ // Check classes\r
+ if (p[3]) {\r
+ cs += 'var c = " " + n.className + " ";';\r
+ cs += 'if (';\r
+ c = '';\r
+ each(p[3].split('.'), function(v) {\r
+ if (v)\r
+ c += (c ? '||' : '') + 'c.indexOf(" ' + v + ' ") === -1';\r
+ });\r
+ cs += c + ') return;';\r
+ }\r
+ });\r
+\r
+ cs += 'cf(n);';\r
+\r
+ for (i = pl.length - 1; i >= 0; i--)\r
+ cs += '}, ' + (i ? 'n' : 's') + ');';\r
+\r
+ cs += '})';\r
+\r
+ // Compile CSS pattern function\r
+ t.cache[pa] = cs = eval(cs);\r
+ }\r
+\r
+ // Run selector function\r
+ cs(isIE ? collectIE : collect, s);\r
+ });\r
+\r
+ // Cleanup\r
+ each(o, function(n) {\r
+ if (isIE)\r
+ n.removeAttribute('mce_save');\r
+ else\r
+ delete n.mce_save;\r
+ });\r
+\r
+ return o;\r
+ },\r
+\r
+ // #endif\r
+\r
+ add : function(p, n, a, h, c) {\r
+ var t = this;\r
+\r
+ return this.run(p, function(p) {\r
+ var e, k;\r
+\r
+ e = is(n, 'string') ? t.doc.createElement(n) : n;\r
+\r
+ if (a) {\r
+ for (k in a) {\r
+ if (a.hasOwnProperty(k) && !is(a[k], 'object'))\r
+ t.setAttrib(e, k, '' + a[k]);\r
+ }\r
+\r
+ if (a.style && !is(a.style, 'string')) {\r
+ each(a.style, function(v, n) {\r
+ t.setStyle(e, n, v);\r
+ });\r
+ }\r
+ }\r
+\r
+ if (h) {\r
+ if (h.nodeType)\r
+ e.appendChild(h);\r
+ else\r
+ t.setHTML(e, h);\r
+ }\r
+\r
+ return !c ? p.appendChild(e) : e;\r
+ });\r
+ },\r
+\r
+ create : function(n, a, h) {\r
+ return this.add(this.doc.createElement(n), n, a, h, 1);\r
+ },\r
+\r
+ createHTML : function(n, a, h) {\r
+ var o = '', t = this, k;\r
+\r
+ o += '<' + n;\r
+\r
+ for (k in a) {\r
+ if (a.hasOwnProperty(k))\r
+ o += ' ' + k + '="' + t.encode(a[k]) + '"';\r
+ }\r
+\r
+ if (tinymce.is(h))\r
+ return o + '>' + h + '</' + n + '>';\r
+\r
+ return o + ' />';\r
+ },\r
+\r
+ remove : function(n, k) {\r
+ return this.run(n, function(n) {\r
+ var p, g;\r
+\r
+ p = n.parentNode;\r
+\r
+ if (!p)\r
+ return null;\r
+\r
+ if (k) {\r
+ each (n.childNodes, function(c) {\r
+ p.insertBefore(c.cloneNode(true), n);\r
+ });\r
+ }\r
+\r
+ // Fix IE psuedo leak\r
+ /* if (isIE) {\r
+ p = n.cloneNode(true);\r
+ n.outerHTML = '';\r
+\r
+ return p;\r
+ }*/\r
+\r
+ return p.removeChild(n);\r
+ });\r
+ },\r
+\r
+ // #if !jquery\r
+\r
+ setStyle : function(n, na, v) {\r
+ var t = this;\r
+\r
+ return t.run(n, function(e) {\r
+ var s, i;\r
+\r
+ s = e.style;\r
+\r
+ // Camelcase it, if needed\r
+ na = na.replace(/-(\D)/g, function(a, b){\r
+ return b.toUpperCase();\r
+ });\r
+\r
+ // Default px suffix on these\r
+ if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v)))\r
+ v += 'px';\r
+\r
+ switch (na) {\r
+ case 'opacity':\r
+ // IE specific opacity\r
+ if (isIE) {\r
+ s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")";\r
+\r
+ if (!n.currentStyle || !n.currentStyle.hasLayout)\r
+ s.display = 'inline-block';\r
+ }\r
+\r
+ // Fix for older browsers\r
+ s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || '';\r
+ break;\r
+\r
+ case 'float':\r
+ isIE ? s.styleFloat = v : s.cssFloat = v;\r
+ break;\r
+ \r
+ default:\r
+ s[na] = v || '';\r
+ }\r
+\r
+ // Force update of the style data\r
+ if (t.settings.update_styles)\r
+ t.setAttrib(e, 'mce_style');\r
+ });\r
+ },\r
+\r
+ getStyle : function(n, na, c) {\r
+ n = this.get(n);\r
+\r
+ if (!n)\r
+ return false;\r
+\r
+ // Gecko\r
+ if (this.doc.defaultView && c) {\r
+ // Remove camelcase\r
+ na = na.replace(/[A-Z]/g, function(a){\r
+ return '-' + a;\r
+ });\r
+\r
+ try {\r
+ return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na);\r
+ } catch (ex) {\r
+ // Old safari might fail\r
+ return null;\r
+ }\r
+ }\r
+\r
+ // Camelcase it, if needed\r
+ na = na.replace(/-(\D)/g, function(a, b){\r
+ return b.toUpperCase();\r
+ });\r
+\r
+ if (na == 'float')\r
+ na = isIE ? 'styleFloat' : 'cssFloat';\r
+\r
+ // IE & Opera\r
+ if (n.currentStyle && c)\r
+ return n.currentStyle[na];\r
+\r
+ return n.style[na];\r
+ },\r
+\r
+ setStyles : function(e, o) {\r
+ var t = this, s = t.settings, ol;\r
+\r
+ ol = s.update_styles;\r
+ s.update_styles = 0;\r
+\r
+ each(o, function(v, n) {\r
+ t.setStyle(e, n, v);\r
+ });\r
+\r
+ // Update style info\r
+ s.update_styles = ol;\r
+ if (s.update_styles)\r
+ t.setAttrib(e, s.cssText);\r
+ },\r
+\r
+ setAttrib : function(e, n, v) {\r
+ var t = this;\r
+\r
+ // Strict XML mode\r
+ if (t.settings.strict)\r
+ n = n.toLowerCase();\r
+\r
+ return this.run(e, function(e) {\r
+ var s = t.settings;\r
+\r
+ switch (n) {\r
+ case "style":\r
+ if (s.keep_values) {\r
+ if (v)\r
+ e.setAttribute('mce_style', v, 2);\r
+ else\r
+ e.removeAttribute('mce_style', 2);\r
+ }\r
+\r
+ e.style.cssText = v;\r
+ break;\r
+\r
+ case "class":\r
+ e.className = v || ''; // Fix IE null bug\r
+ break;\r
+\r
+ case "src":\r
+ case "href":\r
+ if (s.keep_values) {\r
+ if (s.url_converter)\r
+ v = s.url_converter.call(s.url_converter_scope || t, v, n, e);\r
+\r
+ t.setAttrib(e, 'mce_' + n, v, 2);\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ if (is(v) && v !== null && v.length !== 0)\r
+ e.setAttribute(n, '' + v, 2);\r
+ else\r
+ e.removeAttribute(n, 2);\r
+ });\r
+ },\r
+\r
+ setAttribs : function(e, o) {\r
+ var t = this;\r
+\r
+ return this.run(e, function(e) {\r
+ each(o, function(v, n) {\r
+ t.setAttrib(e, n, v);\r
+ });\r
+ });\r
+ },\r
+\r
+ // #endif\r
+\r
+ getAttrib : function(e, n, dv) {\r
+ var v, t = this;\r
+\r
+ e = t.get(e);\r
+\r
+ if (!e)\r
+ return false;\r
+\r
+ if (!is(dv))\r
+ dv = "";\r
+\r
+ // Try the mce variant for these\r
+ if (/^(src|href|style|coords)$/.test(n)) {\r
+ v = e.getAttribute("mce_" + n);\r
+\r
+ if (v)\r
+ return v;\r
+ }\r
+\r
+ v = e.getAttribute(n, 2);\r
+\r
+ if (!v) {\r
+ switch (n) {\r
+ case 'class':\r
+ v = e.className;\r
+ break;\r
+\r
+ default:\r
+ // Fix for IE crash Bug: #1884376 probably due to invalid DOM structure\r
+ if (isIE && n === 'name' && e.nodeName === 'A') {\r
+ v = e.name;\r
+ break;\r
+ }\r
+\r
+ v = e.attributes[n];\r
+ v = v && is(v.nodeValue) ? v.nodeValue : v;\r
+ }\r
+ }\r
+\r
+ switch (n) {\r
+ case 'style':\r
+ v = v || e.style.cssText;\r
+\r
+ if (v) {\r
+ v = t.serializeStyle(t.parseStyle(v));\r
+\r
+ if (t.settings.keep_values)\r
+ e.setAttribute('mce_style', v);\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ // Remove Apple and WebKit stuff\r
+ if (isWebKit && n === "class" && v)\r
+ v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, '');\r
+\r
+ // Handle IE issues\r
+ if (isIE) {\r
+ switch (n) {\r
+ case 'rowspan':\r
+ case 'colspan':\r
+ // IE returns 1 as default value\r
+ if (v === 1)\r
+ v = '';\r
+\r
+ break;\r
+\r
+ case 'size':\r
+ // IE returns +0 as default value for size\r
+ if (v === '+0')\r
+ v = '';\r
+\r
+ break;\r
+\r
+ case 'hspace':\r
+ // IE returns -1 as default value\r
+ if (v === -1)\r
+ v = '';\r
+\r
+ break;\r
+\r
+ case 'tabindex':\r
+ // IE returns 32768 as default value\r
+ if (v === 32768)\r
+ v = '';\r
+\r
+ break;\r
+\r
+ case 'shape':\r
+ v = v.toLowerCase();\r
+ break;\r
+\r
+ default:\r
+ // IE has odd anonymous function for event attributes\r
+ if (n.indexOf('on') === 0 && v)\r
+ v = ('' + v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/, '$1');\r
+ }\r
+ }\r
+\r
+ return (v && v != '') ? '' + v : dv;\r
+ },\r
+\r
+ getPos : function(n) {\r
+ var t = this, x = 0, y = 0, e, d = t.doc, r;\r
+\r
+ n = t.get(n);\r
+\r
+ // Use getBoundingClientRect on IE, Opera has it but it's not perfect\r
+ if (n && isIE) {\r
+ n = n.getBoundingClientRect();\r
+ e = t.boxModel ? d.documentElement : d.body;\r
+ x = t.getStyle(t.select('html')[0], 'borderWidth'); // Remove border\r
+ x = (x == 'medium' || t.boxModel && !t.isIE6) && 2 || x;\r
+ n.top += t.win.self != t.win.top ? 2 : 0; // IE adds some strange extra cord if used in a frameset\r
+\r
+ return {x : n.left + e.scrollLeft - x, y : n.top + e.scrollTop - x};\r
+ }\r
+\r
+ r = n;\r
+ while (r) {\r
+ x += r.offsetLeft || 0;\r
+ y += r.offsetTop || 0;\r
+ r = r.offsetParent;\r
+ }\r
+\r
+ r = n;\r
+ while (r) {\r
+ // Opera 9.25 bug fix, fixed in 9.50\r
+ if (!/^table-row|inline.*/i.test(t.getStyle(r, "display", 1))) {\r
+ x -= r.scrollLeft || 0;\r
+ y -= r.scrollTop || 0;\r
+ }\r
+\r
+ r = r.parentNode;\r
+\r
+ if (r == d.body)\r
+ break;\r
+ }\r
+\r
+ return {x : x, y : y};\r
+ },\r
+\r
+ parseStyle : function(st) {\r
+ var t = this, s = t.settings, o = {};\r
+\r
+ if (!st)\r
+ return o;\r
+\r
+ function compress(p, s, ot) {\r
+ var t, r, b, l;\r
+\r
+ // Get values and check it it needs compressing\r
+ t = o[p + '-top' + s];\r
+ if (!t)\r
+ return;\r
+\r
+ r = o[p + '-right' + s];\r
+ if (t != r)\r
+ return;\r
+\r
+ b = o[p + '-bottom' + s];\r
+ if (r != b)\r
+ return;\r
+\r
+ l = o[p + '-left' + s];\r
+ if (b != l)\r
+ return;\r
+\r
+ // Compress\r
+ o[ot] = l;\r
+ delete o[p + '-top' + s];\r
+ delete o[p + '-right' + s];\r
+ delete o[p + '-bottom' + s];\r
+ delete o[p + '-left' + s];\r
+ };\r
+\r
+ function compress2(ta, a, b, c) {\r
+ var t;\r
+\r
+ t = o[a];\r
+ if (!t)\r
+ return;\r
+\r
+ t = o[b];\r
+ if (!t)\r
+ return;\r
+\r
+ t = o[c];\r
+ if (!t)\r
+ return;\r
+\r
+ // Compress\r
+ o[ta] = o[a] + ' ' + o[b] + ' ' + o[c];\r
+ delete o[a];\r
+ delete o[b];\r
+ delete o[c];\r
+ };\r
+\r
+ each(st.split(';'), function(v) {\r
+ var sv, ur = [];\r
+\r
+ if (v) {\r
+ v = v.replace(/url\([^\)]+\)/g, function(v) {ur.push(v);return 'url(' + ur.length + ')';});\r
+ v = v.split(':');\r
+ sv = tinymce.trim(v[1]);\r
+ sv = sv.replace(/url\(([^\)]+)\)/g, function(a, b) {return ur[parseInt(b) - 1];});\r
+\r
+ sv = sv.replace(/rgb\([^\)]+\)/g, function(v) {\r
+ return t.toHex(v);\r
+ });\r
+\r
+ if (s.url_converter) {\r
+ sv = sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g, function(x, c) {\r
+ return 'url(' + t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), 'style', null)) + ')';\r
+ });\r
+ }\r
+\r
+ o[tinymce.trim(v[0]).toLowerCase()] = sv;\r
+ }\r
+ });\r
+\r
+ compress("border", "", "border");\r
+ compress("border", "-width", "border-width");\r
+ compress("border", "-color", "border-color");\r
+ compress("border", "-style", "border-style");\r
+ compress("padding", "", "padding");\r
+ compress("margin", "", "margin");\r
+ compress2('border', 'border-width', 'border-style', 'border-color');\r
+\r
+ if (isIE) {\r
+ // Remove pointless border\r
+ if (o.border == 'medium none')\r
+ o.border = '';\r
+ }\r
+\r
+ return o;\r
+ },\r
+\r
+ serializeStyle : function(o) {\r
+ var s = '';\r
+\r
+ each(o, function(v, k) {\r
+ if (k && v) {\r
+ switch (k) {\r
+ case 'color':\r
+ case 'background-color':\r
+ v = v.toLowerCase();\r
+ break;\r
+ }\r
+\r
+ s += (s ? ' ' : '') + k + ': ' + v + ';';\r
+ }\r
+ });\r
+\r
+ return s;\r
+ },\r
+\r
+ loadCSS : function(u) {\r
+ var t = this, d = t.doc;\r
+\r
+ if (!u)\r
+ u = '';\r
+\r
+ each(u.split(','), function(u) {\r
+ if (t.files[u])\r
+ return;\r
+\r
+ t.files[u] = true;\r
+ t.add(t.select('head')[0], 'link', {rel : 'stylesheet', href : u});\r
+ });\r
+ },\r
+\r
+ // #if !jquery\r
+\r
+ addClass : function(e, c) {\r
+ return this.run(e, function(e) {\r
+ var o;\r
+\r
+ if (!c)\r
+ return 0;\r
+\r
+ if (this.hasClass(e, c))\r
+ return e.className;\r
+\r
+ o = this.removeClass(e, c);\r
+\r
+ return e.className = (o != '' ? (o + ' ') : '') + c;\r
+ });\r
+ },\r
+\r
+ removeClass : function(e, c) {\r
+ var t = this, re;\r
+\r
+ return t.run(e, function(e) {\r
+ var v;\r
+\r
+ if (t.hasClass(e, c)) {\r
+ if (!re)\r
+ re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g");\r
+\r
+ v = e.className.replace(re, ' ');\r
+\r
+ return e.className = tinymce.trim(v != ' ' ? v : '');\r
+ }\r
+\r
+ return e.className;\r
+ });\r
+ },\r
+\r
+ hasClass : function(n, c) {\r
+ n = this.get(n);\r
+\r
+ if (!n || !c)\r
+ return false;\r
+\r
+ return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1;\r
+ },\r
+\r
+ show : function(e) {\r
+ return this.setStyle(e, 'display', 'block');\r
+ },\r
+\r
+ hide : function(e) {\r
+ return this.setStyle(e, 'display', 'none');\r
+ },\r
+\r
+ isHidden : function(e) {\r
+ e = this.get(e);\r
+\r
+ return e.style.display == 'none' || this.getStyle(e, 'display') == 'none';\r
+ },\r
+\r
+ // #endif\r
+\r
+ uniqueId : function(p) {\r
+ return (!p ? 'mce_' : p) + (this.counter++);\r
+ },\r
+\r
+ setHTML : function(e, h) {\r
+ var t = this;\r
+\r
+ return this.run(e, function(e) {\r
+ var x, i, nl, n, p, x;\r
+\r
+ h = t.processHTML(h);\r
+\r
+ if (isIE) {\r
+ function set() {\r
+ try {\r
+ // IE will remove comments from the beginning\r
+ // unless you padd the contents with something\r
+ e.innerHTML = '<br />' + h;\r
+ e.removeChild(e.firstChild);\r
+ } catch (ex) {\r
+ // IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p\r
+ // This seems to fix this problem\r
+\r
+ // Remove all child nodes\r
+ while (e.firstChild)\r
+ e.firstChild.removeNode();\r
+\r
+ // Create new div with HTML contents and a BR infront to keep comments\r
+ x = t.create('div');\r
+ x.innerHTML = '<br />' + h;\r
+\r
+ // Add all children from div to target\r
+ each (x.childNodes, function(n, i) {\r
+ // Skip br element\r
+ if (i)\r
+ e.appendChild(n);\r
+ });\r
+ }\r
+ };\r
+\r
+ // IE has a serious bug when it comes to paragraphs it can produce an invalid\r
+ // DOM tree if contents like this <p><ul><li>Item 1</li></ul></p> is inserted\r
+ // It seems to be that IE doesn't like a root block element placed inside another root block element\r
+ if (t.settings.fix_ie_paragraphs)\r
+ h = h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi, '<p$1 mce_keep="true"> </p>');\r
+\r
+ set();\r
+\r
+ if (t.settings.fix_ie_paragraphs) {\r
+ // Check for odd paragraphs this is a sign of a broken DOM\r
+ nl = e.getElementsByTagName("p");\r
+ for (i = nl.length - 1, x = 0; i >= 0; i--) {\r
+ n = nl[i];\r
+\r
+ if (!n.hasChildNodes()) {\r
+ if (!n.mce_keep) {\r
+ x = 1; // Is broken\r
+ break;\r
+ }\r
+\r
+ n.removeAttribute('mce_keep');\r
+ }\r
+ }\r
+ }\r
+\r
+ // Time to fix the madness IE left us\r
+ if (x) {\r
+ // So if we replace the p elements with divs and mark them and then replace them back to paragraphs\r
+ // after we use innerHTML we can fix the DOM tree\r
+ h = h.replace(/<p([^>]+)>|<p>/g, '<div$1 mce_tmp="1">');\r
+ h = h.replace(/<\/p>/g, '</div>');\r
+\r
+ // Set the new HTML with DIVs\r
+ set();\r
+\r
+ // Replace all DIV elements with he mce_tmp attibute back to paragraphs\r
+ // This is needed since IE has a annoying bug see above for details\r
+ // This is a slow process but it has to be done. :(\r
+ if (t.settings.fix_ie_paragraphs) {\r
+ nl = e.getElementsByTagName("DIV");\r
+ for (i = nl.length - 1; i >= 0; i--) {\r
+ n = nl[i];\r
+\r
+ // Is it a temp div\r
+ if (n.mce_tmp) {\r
+ // Create new paragraph\r
+ p = t.doc.createElement('p');\r
+\r
+ // Copy all attributes\r
+ n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi, function(a, b) {\r
+ var v;\r
+\r
+ if (b !== 'mce_tmp') {\r
+ v = n.getAttribute(b);\r
+\r
+ if (!v && b === 'class')\r
+ v = n.className;\r
+\r
+ p.setAttribute(b, v);\r
+ }\r
+ });\r
+\r
+ // Append all children to new paragraph\r
+ for (x = 0; x<n.childNodes.length; x++)\r
+ p.appendChild(n.childNodes[x].cloneNode(true));\r
+\r
+ // Replace div with new paragraph\r
+ n.swapNode(p);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } else\r
+ e.innerHTML = h;\r
+\r
+ return h;\r
+ });\r
+ },\r
+\r
+ processHTML : function(h) {\r
+ var t = this, s = t.settings;\r
+\r
+ if (!s.process_html)\r
+ return h;\r
+\r
+ // Convert strong and em to b and i in FF since it can't handle them\r
+ if (tinymce.isGecko) {\r
+ h = h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi, '<$1b$2>');\r
+ h = h.replace(/<(\/?)em>|<em( [^>]+)>/gi, '<$1i$2>');\r
+ }\r
+\r
+ // Fix some issues\r
+ h = h.replace(/<a( )([^>]+)\/>|<a\/>/gi, '<a$1$2></a>'); // Force open\r
+\r
+ // Store away src and href in mce_src and mce_href since browsers mess them up\r
+ if (s.keep_values) {\r
+ // Wrap scripts in comments for serialization purposes\r
+ if (h.indexOf('<script') !== -1) {\r
+ h = h.replace(/<script>/g, '<script type="text/javascript">');\r
+ h = h.replace(/<script(|[^>]+)>(\s*<!--|\/\/\s*<\[CDATA\[)?[\r\n]*/g, '<mce:script$1><!--\n');\r
+ h = h.replace(/\s*(\/\/\s*-->|\/\/\s*]]>)?<\/script>/g, '\n// --></mce:script>');\r
+ h = h.replace(/<mce:script(|[^>]+)><!--\n\/\/ --><\/mce:script>/g, '<mce:script$1></mce:script>');\r
+ }\r
+\r
+ // Process all tags with src, href or style\r
+ h = h.replace(/<([\w:]+) [^>]*(src|href|style|coords)[^>]*>/gi, function(a, n) {\r
+ function handle(m, b, c) {\r
+ var u = c;\r
+\r
+ // Tag already got a mce_ version\r
+ if (a.indexOf('mce_' + b) != -1)\r
+ return m;\r
+\r
+ if (b == 'style') {\r
+ // Why did I need this one?\r
+ //if (isIE)\r
+ // u = t.serializeStyle(t.parseStyle(u));\r
+\r
+ if (s.hex_colors) {\r
+ u = u.replace(/rgb\([^\)]+\)/g, function(v) {\r
+ return t.toHex(v);\r
+ });\r
+ }\r
+\r
+ if (s.url_converter) {\r
+ u = u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g, function(x, c) {\r
+ return 'url(' + t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), b, n)) + ')';\r
+ });\r
+ }\r
+ } else if (b != 'coords') {\r
+ if (s.url_converter)\r
+ u = t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), b, n));\r
+ }\r
+\r
+ return ' ' + b + '="' + c + '" mce_' + b + '="' + u + '"';\r
+ };\r
+\r
+ a = a.replace(/ (src|href|style|coords)=[\"]([^\"]+)[\"]/gi, handle); // W3C\r
+ a = a.replace(/ (src|href|style|coords)=[\']([^\']+)[\']/gi, handle); // W3C\r
+\r
+ return a.replace(/ (src|href|style|coords)=([^\s\"\'>]+)/gi, handle); // IE\r
+ });\r
+ }\r
+\r
+ return h;\r
+ },\r
+\r
+ getOuterHTML : function(e) {\r
+ var d;\r
+\r
+ e = this.get(e);\r
+\r
+ if (!e)\r
+ return null;\r
+\r
+ if (isIE)\r
+ return e.outerHTML;\r
+\r
+ d = (e.ownerDocument || this.doc).createElement("body");\r
+ d.appendChild(e.cloneNode(true));\r
+\r
+ return d.innerHTML;\r
+ },\r
+\r
+ setOuterHTML : function(e, h, d) {\r
+ var t = this;\r
+\r
+ return this.run(e, function(e) {\r
+ var n, tp;\r
+\r
+ e = t.get(e);\r
+ d = d || e.ownerDocument || t.doc;\r
+\r
+ if (isIE && e.nodeType == 1)\r
+ e.outerHTML = h;\r
+ else {\r
+ tp = d.createElement("body");\r
+ tp.innerHTML = h;\r
+\r
+ n = tp.lastChild;\r
+ while (n) {\r
+ t.insertAfter(n.cloneNode(true), e);\r
+ n = n.previousSibling;\r
+ }\r
+\r
+ t.remove(e);\r
+ }\r
+ });\r
+ },\r
+\r
+ decode : function(s) {\r
+ var e;\r
+\r
+ // Look for entities to decode\r
+ if (/&[^;]+;/.test(s)) {\r
+ // Decode the entities using a div element not super efficient but less code\r
+ e = this.doc.createElement("div");\r
+ e.innerHTML = s;\r
+\r
+ return !e.firstChild ? s : e.firstChild.nodeValue;\r
+ }\r
+\r
+ return s;\r
+ },\r
+\r
+ encode : function(s) {\r
+ return s ? ('' + s).replace(/[<>&\"]/g, function (c, b) {\r
+ switch (c) {\r
+ case '&':\r
+ return '&';\r
+\r
+ case '"':\r
+ return '"';\r
+\r
+ case '<':\r
+ return '<';\r
+\r
+ case '>':\r
+ return '>';\r
+ }\r
+\r
+ return c;\r
+ }) : s;\r
+ },\r
+\r
+ // #if !jquery\r
+\r
+ insertAfter : function(n, r) {\r
+ var t = this;\r
+\r
+ r = t.get(r);\r
+\r
+ return this.run(n, function(n) {\r
+ var p, ns;\r
+\r
+ p = r.parentNode;\r
+ ns = r.nextSibling;\r
+\r
+ if (ns)\r
+ p.insertBefore(n, ns);\r
+ else\r
+ p.appendChild(n);\r
+\r
+ return n;\r
+ });\r
+ },\r
+\r
+ // #endif\r
+\r
+ isBlock : function(n) {\r
+ if (n.nodeType && n.nodeType !== 1)\r
+ return false;\r
+\r
+ n = n.nodeName || n;\r
+\r
+ return /^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);\r
+ },\r
+\r
+ // #if !jquery\r
+\r
+ replace : function(n, o, k) {\r
+ if (is(o, 'array'))\r
+ n = n.cloneNode(true);\r
+\r
+ return this.run(o, function(o) {\r
+ if (k) {\r
+ each(o.childNodes, function(c) {\r
+ n.appendChild(c.cloneNode(true));\r
+ });\r
+ }\r
+\r
+ // Fix IE psuedo leak for elements since replacing elements if fairly common\r
+ if (isIE && o.nodeType === 1) {\r
+ o.parentNode.insertBefore(n, o);\r
+ o.outerHTML = '';\r
+ return n;\r
+ }\r
+\r
+ return o.parentNode.replaceChild(n, o);\r
+ });\r
+ },\r
+\r
+ // #endif\r
+\r
+ toHex : function(s) {\r
+ var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);\r
+\r
+ function hex(s) {\r
+ s = parseInt(s).toString(16);\r
+\r
+ return s.length > 1 ? s : '0' + s; // 0 -> 00\r
+ };\r
+\r
+ if (c) {\r
+ s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]);\r
+\r
+ return s;\r
+ }\r
+\r
+ return s;\r
+ },\r
+\r
+ getClasses : function() {\r
+ var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov;\r
+\r
+ if (t.classes)\r
+ return t.classes;\r
+\r
+ function addClasses(s) {\r
+ // IE style imports\r
+ each(s.imports, function(r) {\r
+ addClasses(r);\r
+ });\r
+\r
+ each(s.cssRules || s.rules, function(r) {\r
+ // Real type or fake it on IE\r
+ switch (r.type || 1) {\r
+ // Rule\r
+ case 1:\r
+ if (r.selectorText) {\r
+ each(r.selectorText.split(','), function(v) {\r
+ v = v.replace(/^\s*|\s*$|^\s\./g, "");\r
+\r
+ // Is internal or it doesn't contain a class\r
+ if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v))\r
+ return;\r
+\r
+ // Remove everything but class name\r
+ ov = v;\r
+ v = v.replace(/.*\.([a-z0-9_\-]+).*/i, '$1');\r
+\r
+ // Filter classes\r
+ if (f && !(v = f(v, ov)))\r
+ return;\r
+\r
+ if (!lo[v]) {\r
+ cl.push({'class' : v});\r
+ lo[v] = 1;\r
+ }\r
+ });\r
+ }\r
+ break;\r
+\r
+ // Import\r
+ case 3:\r
+ addClasses(r.styleSheet);\r
+ break;\r
+ }\r
+ });\r
+ };\r
+\r
+ try {\r
+ each(t.doc.styleSheets, addClasses);\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+\r
+ if (cl.length > 0)\r
+ t.classes = cl;\r
+\r
+ return cl;\r
+ },\r
+\r
+ run : function(e, f, s) {\r
+ var t = this, o;\r
+\r
+ if (t.doc && typeof(e) === 'string')\r
+ e = t.doc.getElementById(e);\r
+\r
+ if (!e)\r
+ return false;\r
+\r
+ s = s || this;\r
+ if (!e.nodeType && (e.length || e.length === 0)) {\r
+ o = [];\r
+\r
+ each(e, function(e, i) {\r
+ if (e) {\r
+ if (typeof(e) == 'string')\r
+ e = t.doc.getElementById(e);\r
+\r
+ o.push(f.call(s, e, i));\r
+ }\r
+ });\r
+\r
+ return o;\r
+ }\r
+\r
+ return f.call(s, e);\r
+ },\r
+\r
+ getAttribs : function(n) {\r
+ var o;\r
+\r
+ n = this.get(n);\r
+\r
+ if (!n)\r
+ return [];\r
+\r
+ if (isIE) {\r
+ o = [];\r
+\r
+ // Object will throw exception in IE\r
+ if (n.nodeName == 'OBJECT')\r
+ return n.attributes;\r
+\r
+ // It's crazy that this is faster in IE but it's because it returns all attributes all the time\r
+ n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi, function(a, b) {\r
+ o.push({specified : 1, nodeName : b});\r
+ });\r
+\r
+ return o;\r
+ }\r
+\r
+ return n.attributes;\r
+ },\r
+\r
+ destroy : function(s) {\r
+ var t = this;\r
+\r
+ t.win = t.doc = t.root = null;\r
+\r
+ // Manual destroy then remove unload handler\r
+ if (!s)\r
+ tinymce.removeUnload(t.destroy);\r
+ }\r
+\r
+ /*\r
+ walk : function(n, f, s) {\r
+ var d = this.doc, w;\r
+\r
+ if (d.createTreeWalker) {\r
+ w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
+\r
+ while ((n = w.nextNode()) != null)\r
+ f.call(s || this, n);\r
+ } else\r
+ tinymce.walk(n, f, 'childNodes', s);\r
+ }\r
+ */\r
+\r
+ /*\r
+ toRGB : function(s) {\r
+ var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s);\r
+\r
+ if (c) {\r
+ // #FFF -> #FFFFFF\r
+ if (!is(c[3]))\r
+ c[3] = c[2] = c[1];\r
+\r
+ return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")";\r
+ }\r
+\r
+ return s;\r
+ }\r
+ */\r
+\r
+ });\r
+\r
+ // Setup page DOM\r
+ tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/dom/Event.js */\r
+\r
+(function() {\r
+ // Shorten names\r
+ var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;\r
+\r
+ tinymce.create('static tinymce.dom.Event', {\r
+ inits : [],\r
+ events : [],\r
+\r
+ // #if !jquery\r
+\r
+ add : function(o, n, f, s) {\r
+ var cb, t = this, el = t.events, r;\r
+\r
+ // Handle array\r
+ if (o && o instanceof Array) {\r
+ r = [];\r
+\r
+ each(o, function(o) {\r
+ o = DOM.get(o);\r
+ r.push(t.add(o, n, f, s));\r
+ });\r
+\r
+ return r;\r
+ }\r
+\r
+ o = DOM.get(o);\r
+\r
+ if (!o)\r
+ return;\r
+\r
+ // Setup event callback\r
+ cb = function(e) {\r
+ e = e || window.event;\r
+\r
+ // Patch in target in IE it's W3C valid\r
+ if (e && !e.target && isIE)\r
+ e.target = e.srcElement;\r
+\r
+ if (!s)\r
+ return f(e);\r
+\r
+ return f.call(s, e);\r
+ };\r
+\r
+ if (n == 'unload') {\r
+ tinymce.unloads.unshift({func : cb});\r
+ return cb;\r
+ }\r
+\r
+ if (n == 'init') {\r
+ if (t.domLoaded)\r
+ cb();\r
+ else\r
+ t.inits.push(cb);\r
+\r
+ return cb;\r
+ }\r
+\r
+ // Store away listener reference\r
+ el.push({\r
+ obj : o,\r
+ name : n,\r
+ func : f,\r
+ cfunc : cb,\r
+ scope : s\r
+ });\r
+\r
+ t._add(o, n, cb);\r
+\r
+ return f;\r
+ },\r
+\r
+ remove : function(o, n, f) {\r
+ var t = this, a = t.events, s = false, r;\r
+\r
+ // Handle array\r
+ if (o && o instanceof Array) {\r
+ r = [];\r
+\r
+ each(o, function(o) {\r
+ o = DOM.get(o);\r
+ r.push(t.remove(o, n, f));\r
+ });\r
+\r
+ return r;\r
+ }\r
+\r
+ o = DOM.get(o);\r
+\r
+ each(a, function(e, i) {\r
+ if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {\r
+ a.splice(i, 1);\r
+ t._remove(o, n, e.cfunc);\r
+ s = true;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ return s;\r
+ },\r
+\r
+ clear : function(o) {\r
+ var t = this, a = t.events, i, e;\r
+\r
+ if (o) {\r
+ o = DOM.get(o);\r
+\r
+ for (i = a.length - 1; i >= 0; i--) {\r
+ e = a[i];\r
+\r
+ if (e.obj === o) {\r
+ t._remove(e.obj, e.name, e.cfunc);\r
+ e.obj = e.cfunc = null;\r
+ a.splice(i, 1);\r
+ }\r
+ }\r
+ }\r
+ },\r
+\r
+ // #endif\r
+\r
+ cancel : function(e) {\r
+ if (!e)\r
+ return false;\r
+\r
+ this.stop(e);\r
+ return this.prevent(e);\r
+ },\r
+\r
+ stop : function(e) {\r
+ if (e.stopPropagation)\r
+ e.stopPropagation();\r
+ else\r
+ e.cancelBubble = true;\r
+\r
+ return false;\r
+ },\r
+\r
+ prevent : function(e) {\r
+ if (e.preventDefault)\r
+ e.preventDefault();\r
+ else\r
+ e.returnValue = false;\r
+\r
+ return false;\r
+ },\r
+\r
+ _unload : function() {\r
+ var t = Event;\r
+\r
+ each(t.events, function(e, i) {\r
+ t._remove(e.obj, e.name, e.cfunc);\r
+ e.obj = e.cfunc = null;\r
+ });\r
+\r
+ t.events = [];\r
+ t = null;\r
+ },\r
+\r
+ _add : function(o, n, f) {\r
+ if (o.attachEvent)\r
+ o.attachEvent('on' + n, f);\r
+ else if (o.addEventListener)\r
+ o.addEventListener(n, f, false);\r
+ else\r
+ o['on' + n] = f;\r
+ },\r
+\r
+ _remove : function(o, n, f) {\r
+ if (o) {\r
+ try {\r
+ if (o.detachEvent)\r
+ o.detachEvent('on' + n, f);\r
+ else if (o.removeEventListener)\r
+ o.removeEventListener(n, f, false);\r
+ else\r
+ o['on' + n] = null;\r
+ } catch (ex) {\r
+ // Might fail with permission denined on IE so we just ignore that\r
+ }\r
+ }\r
+ },\r
+\r
+ _pageInit : function() {\r
+ var e = Event;\r
+\r
+ e._remove(window, 'DOMContentLoaded', e._pageInit);\r
+ e.domLoaded = true;\r
+\r
+ each(e.inits, function(c) {\r
+ c();\r
+ });\r
+\r
+ e.inits = [];\r
+ },\r
+\r
+ _wait : function() {\r
+ var t;\r
+\r
+ // No need since the document is already loaded\r
+ if (window.tinyMCE_GZ && tinyMCE_GZ.loaded)\r
+ return;\r
+\r
+ if (isIE && document.location.protocol != 'https:') {\r
+ // Fake DOMContentLoaded on IE\r
+ document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');\r
+ DOM.get("__ie_onload").onreadystatechange = function() {\r
+ if (this.readyState == "complete") {\r
+ Event._pageInit();\r
+ DOM.get("__ie_onload").onreadystatechange = null; // Prevent leak\r
+ }\r
+ };\r
+ } else {\r
+ Event._add(window, 'DOMContentLoaded', Event._pageInit, Event);\r
+\r
+ if (isIE || isWebKit) {\r
+ t = setInterval(function() {\r
+ if (/loaded|complete/.test(document.readyState)) {\r
+ clearInterval(t);\r
+ Event._pageInit();\r
+ }\r
+ }, 10);\r
+ }\r
+ }\r
+ }\r
+\r
+ });\r
+\r
+ // Shorten name\r
+ Event = tinymce.dom.Event;\r
+\r
+ // Dispatch DOM content loaded event for IE and Safari\r
+ Event._wait();\r
+ tinymce.addUnload(Event._unload);\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/dom/Element.js */\r
+\r
+(function() {\r
+ var each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.dom.Element', {\r
+ Element : function(id, s) {\r
+ var t = this, dom, el;\r
+\r
+ s = s || {};\r
+ t.id = id;\r
+ t.dom = dom = s.dom || tinymce.DOM;\r
+ t.settings = s;\r
+\r
+ // Only IE leaks DOM references, this is a lot faster\r
+ if (!tinymce.isIE)\r
+ el = t.dom.get(t.id);\r
+\r
+ each([\r
+ 'getPos',\r
+ 'getRect',\r
+ 'getParent',\r
+ 'add',\r
+ 'setStyle',\r
+ 'getStyle',\r
+ 'setStyles',\r
+ 'setAttrib',\r
+ 'setAttribs',\r
+ 'getAttrib',\r
+ 'addClass',\r
+ 'removeClass',\r
+ 'hasClass',\r
+ 'getOuterHTML',\r
+ 'setOuterHTML',\r
+ 'remove',\r
+ 'show',\r
+ 'hide',\r
+ 'isHidden',\r
+ 'setHTML',\r
+ 'get'\r
+ ], function(k) {\r
+ t[k] = function() {\r
+ var a = arguments, o;\r
+\r
+ // Opera fails\r
+ if (tinymce.isOpera) {\r
+ a = [id];\r
+\r
+ each(arguments, function(v) {\r
+ a.push(v);\r
+ });\r
+ } else\r
+ Array.prototype.unshift.call(a, el || id);\r
+\r
+ o = dom[k].apply(dom, a);\r
+ t.update(k);\r
+\r
+ return o;\r
+ };\r
+ });\r
+ },\r
+\r
+ on : function(n, f, s) {\r
+ return tinymce.dom.Event.add(this.id, n, f, s);\r
+ },\r
+\r
+ getXY : function() {\r
+ return {\r
+ x : parseInt(this.getStyle('left')),\r
+ y : parseInt(this.getStyle('top'))\r
+ };\r
+ },\r
+\r
+ getSize : function() {\r
+ var n = this.dom.get(this.id);\r
+\r
+ return {\r
+ w : parseInt(this.getStyle('width') || n.clientWidth),\r
+ h : parseInt(this.getStyle('height') || n.clientHeight)\r
+ };\r
+ },\r
+\r
+ moveTo : function(x, y) {\r
+ this.setStyles({left : x, top : y});\r
+ },\r
+\r
+ moveBy : function(x, y) {\r
+ var p = this.getXY();\r
+\r
+ this.moveTo(p.x + x, p.y + y);\r
+ },\r
+\r
+ resizeTo : function(w, h) {\r
+ this.setStyles({width : w, height : h});\r
+ },\r
+\r
+ resizeBy : function(w, h) {\r
+ var s = this.getSize();\r
+\r
+ this.resizeTo(s.w + w, s.h + h);\r
+ },\r
+\r
+ update : function(k) {\r
+ var t = this, b, dom = t.dom;\r
+\r
+ if (tinymce.isIE6 && t.settings.blocker) {\r
+ k = k || '';\r
+\r
+ // Ignore getters\r
+ if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)\r
+ return;\r
+\r
+ // Remove blocker on remove\r
+ if (k == 'remove') {\r
+ dom.remove(t.blocker);\r
+ return;\r
+ }\r
+\r
+ if (!t.blocker) {\r
+ t.blocker = dom.uniqueId();\r
+ b = dom.add(t.settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});\r
+ dom.setStyle(b, 'opacity', 0);\r
+ } else\r
+ b = dom.get(t.blocker);\r
+\r
+ dom.setStyle(b, 'left', t.getStyle('left', 1));\r
+ dom.setStyle(b, 'top', t.getStyle('top', 1));\r
+ dom.setStyle(b, 'width', t.getStyle('width', 1));\r
+ dom.setStyle(b, 'height', t.getStyle('height', 1));\r
+ dom.setStyle(b, 'display', t.getStyle('display', 1));\r
+ dom.setStyle(b, 'zIndex', parseInt(t.getStyle('zIndex', 1) || 0) - 1);\r
+ }\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/dom/Selection.js */\r
+\r
+(function() {\r
+ // Shorten names\r
+ var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.dom.Selection', {\r
+ Selection : function(dom, win, serializer) {\r
+ var t = this;\r
+\r
+ t.dom = dom;\r
+ t.win = win;\r
+ t.serializer = serializer;\r
+\r
+ // Prevent leaks\r
+ tinymce.addUnload(t.destroy, t);\r
+ },\r
+\r
+ getContent : function(s) {\r
+ var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;\r
+\r
+ s = s || {};\r
+ wb = wa = '';\r
+ s.get = true;\r
+ s.format = s.format || 'html';\r
+\r
+ if (s.format == 'text')\r
+ return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));\r
+\r
+ if (r.cloneContents) {\r
+ n = r.cloneContents();\r
+\r
+ if (n)\r
+ e.appendChild(n);\r
+ } else if (is(r.item) || is(r.htmlText))\r
+ e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;\r
+ else\r
+ e.innerHTML = r.toString();\r
+\r
+ // Keep whitespace before and after\r
+ if (/^\s/.test(e.innerHTML))\r
+ wb = ' ';\r
+\r
+ if (/\s+$/.test(e.innerHTML))\r
+ wa = ' ';\r
+\r
+ s.getInner = true;\r
+\r
+ return t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;\r
+ },\r
+\r
+ setContent : function(h, s) {\r
+ var t = this, r = t.getRng(), d;\r
+\r
+ s = s || {format : 'html'};\r
+ s.set = true;\r
+ h = t.dom.processHTML(h);\r
+\r
+ if (r.insertNode) {\r
+ d = t.win.document;\r
+\r
+ // Gecko has a bug where if you insert using InsertHTML it will insert a space instead\r
+ // So we simply check if the input is HTML or text and then insert text using the insertNode method\r
+ if (tinymce.isGecko && h.indexOf('<') == -1) {\r
+ r.deleteContents();\r
+ r.insertNode(t.getRng().createContextualFragment(h + '<span id="__caret">_</span>'));\r
+ t.select(t.dom.get('__caret'));\r
+ t.getRng().deleteContents();\r
+ return;\r
+ }\r
+\r
+ // Use insert HTML if it exists (places cursor after content)\r
+ try {\r
+ // This might fail with an exception see bug #1893736\r
+ if (d.queryCommandEnabled('InsertHTML'))\r
+ return d.execCommand('InsertHTML', false, h);\r
+ } catch (ex) {\r
+ // Use old school method\r
+ r.deleteContents();\r
+ r.insertNode(t.getRng().createContextualFragment(h));\r
+ }\r
+ } else {\r
+ if (r.item)\r
+ r.item(0).outerHTML = h;\r
+ else\r
+ r.pasteHTML(h);\r
+ }\r
+ },\r
+\r
+ getStart : function() {\r
+ var t = this, r = t.getRng(), e;\r
+\r
+ if (isIE) {\r
+ if (r.item)\r
+ return r.item(0);\r
+\r
+ r = r.duplicate();\r
+ r.collapse(1);\r
+ e = r.parentElement();\r
+\r
+ if (e.nodeName == 'BODY')\r
+ return e.firstChild;\r
+\r
+ return e;\r
+ } else {\r
+ e = r.startContainer;\r
+\r
+ if (e.nodeName == 'BODY')\r
+ return e.firstChild;\r
+\r
+ return t.dom.getParent(e, function(n) {return n.nodeType == 1;});\r
+ }\r
+ },\r
+\r
+ getEnd : function() {\r
+ var t = this, r = t.getRng(), e;\r
+\r
+ if (isIE) {\r
+ if (r.item)\r
+ return r.item(0);\r
+\r
+ r = r.duplicate();\r
+ r.collapse(0);\r
+ e = r.parentElement();\r
+\r
+ if (e.nodeName == 'BODY')\r
+ return e.lastChild;\r
+\r
+ return e;\r
+ } else {\r
+ e = r.endContainer;\r
+\r
+ if (e.nodeName == 'BODY')\r
+ return e.lastChild;\r
+\r
+ return t.dom.getParent(e, function(n) {return n.nodeType == 1;});\r
+ }\r
+ },\r
+\r
+ getBookmark : function(si) {\r
+ var t = this, r = t.getRng(), tr, sx, sy, vp = t.dom.getViewPort(t.win), e, sp, bp, le, c = -0xFFFFFF, s, ro = t.dom.getRoot(), wb = 0, wa = 0, nv;\r
+ sx = vp.x;\r
+ sy = vp.y;\r
+\r
+ // Simple bookmark fast but not as persistent\r
+ if (si == 'simple')\r
+ return {rng : r, scrollX : sx, scrollY : sy};\r
+\r
+ // Handle IE\r
+ if (isIE) {\r
+ // Control selection\r
+ if (r.item) {\r
+ e = r.item(0);\r
+\r
+ each(t.dom.select(e.nodeName), function(n, i) {\r
+ if (e == n) {\r
+ sp = i;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ return {\r
+ tag : e.nodeName,\r
+ index : sp,\r
+ scrollX : sx,\r
+ scrollY : sy\r
+ };\r
+ }\r
+\r
+ // Text selection\r
+ tr = t.dom.doc.body.createTextRange();\r
+ tr.moveToElementText(ro);\r
+ tr.collapse(true);\r
+ bp = Math.abs(tr.move('character', c));\r
+\r
+ tr = r.duplicate();\r
+ tr.collapse(true);\r
+ sp = Math.abs(tr.move('character', c));\r
+\r
+ tr = r.duplicate();\r
+ tr.collapse(false);\r
+ le = Math.abs(tr.move('character', c)) - sp;\r
+\r
+ return {\r
+ start : sp - bp,\r
+ length : le,\r
+ scrollX : sx,\r
+ scrollY : sy\r
+ };\r
+ }\r
+\r
+ // Handle W3C\r
+ e = t.getNode();\r
+ s = t.getSel();\r
+\r
+ if (!s)\r
+ return null;\r
+\r
+ // Image selection\r
+ if (e && e.nodeName == 'IMG') {\r
+ return {\r
+ scrollX : sx,\r
+ scrollY : sy\r
+ };\r
+ }\r
+\r
+ // Text selection\r
+\r
+ function getPos(r, sn, en) {\r
+ var w = t.dom.doc.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};\r
+\r
+ while ((n = w.nextNode()) != null) {\r
+ if (n == sn)\r
+ d.start = p;\r
+\r
+ if (n == en) {\r
+ d.end = p;\r
+ return d;\r
+ }\r
+\r
+ p += tinymce.trim(n.nodeValue || '').length;\r
+ }\r
+\r
+ return null;\r
+ };\r
+\r
+ // Caret or selection\r
+ if (s.anchorNode == s.focusNode && s.anchorOffset == s.focusOffset) {\r
+ e = getPos(ro, s.anchorNode, s.focusNode);\r
+\r
+ if (!e)\r
+ return {scrollX : sx, scrollY : sy};\r
+\r
+ // Count whitespace before\r
+ (s.anchorNode.nodeValue || '').replace(/^\s+/, function(a) {wb = a.length;});\r
+\r
+ return {\r
+ start : Math.max(e.start + s.anchorOffset - wb, 0),\r
+ end : Math.max(e.end + s.focusOffset - wb, 0),\r
+ scrollX : sx,\r
+ scrollY : sy,\r
+ beg : s.anchorOffset - wb == 0\r
+ };\r
+ } else {\r
+ e = getPos(ro, r.startContainer, r.endContainer);\r
+\r
+ // Count whitespace before start and end container\r
+ (r.startContainer.nodeValue || '').replace(/^\s+/, function(a) {wb = a.length;});\r
+ (r.endContainer.nodeValue || '').replace(/^\s+/, function(a) {wa = a.length;});\r
+\r
+ if (!e)\r
+ return {scrollX : sx, scrollY : sy};\r
+\r
+ return {\r
+ start : Math.max(e.start + r.startOffset - wb, 0),\r
+ end : Math.max(e.end + r.endOffset - wa, 0),\r
+ scrollX : sx,\r
+ scrollY : sy,\r
+ beg : r.startOffset - wb == 0\r
+ };\r
+ }\r
+ },\r
+\r
+ moveToBookmark : function(b) {\r
+ var t = this, r = t.getRng(), s = t.getSel(), ro = t.dom.getRoot(), sd, nvl, nv;\r
+\r
+ function getPos(r, sp, ep) {\r
+ var w = t.dom.doc.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}, o, v, wa, wb;\r
+\r
+ while ((n = w.nextNode()) != null) {\r
+ wa = wb = 0;\r
+\r
+ nv = n.nodeValue || '';\r
+ nv.replace(/^\s+[^\s]/, function(a) {wb = a.length - 1;});\r
+ nv.replace(/[^\s]\s+$/, function(a) {wa = a.length - 1;});\r
+\r
+ nvl = tinymce.trim(nv).length;\r
+ p += nvl;\r
+\r
+ if (p >= sp && !d.startNode) {\r
+ o = sp - (p - nvl);\r
+\r
+ // Fix for odd quirk in FF\r
+ if (b.beg && o >= nvl)\r
+ continue;\r
+\r
+ d.startNode = n;\r
+ d.startOffset = o + wb;\r
+ }\r
+\r
+ if (p >= ep) {\r
+ d.endNode = n;\r
+ d.endOffset = ep - (p - nvl) + wb;\r
+ return d;\r
+ }\r
+ }\r
+\r
+ return null;\r
+ };\r
+\r
+ if (!b)\r
+ return false;\r
+\r
+ t.win.scrollTo(b.scrollX, b.scrollY);\r
+\r
+ // Handle explorer\r
+ if (isIE) {\r
+ // Handle simple\r
+ if (r = b.rng) {\r
+ try {\r
+ r.select();\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ t.win.focus();\r
+\r
+ // Handle control bookmark\r
+ if (b.tag) {\r
+ r = ro.createControlRange();\r
+\r
+ each(t.dom.select(b.tag), function(n, i) {\r
+ if (i == b.index)\r
+ r.addElement(n);\r
+ });\r
+ } else {\r
+ // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs\r
+ try {\r
+ // Incorrect bookmark\r
+ if (b.start < 0)\r
+ return true;\r
+\r
+ r = s.createRange();\r
+ r.moveToElementText(ro);\r
+ r.collapse(true);\r
+ r.moveStart('character', b.start);\r
+ r.moveEnd('character', b.length);\r
+ } catch (ex2) {\r
+ return true;\r
+ }\r
+ }\r
+\r
+ try {\r
+ r.select();\r
+ } catch (ex) {\r
+ // Needed for some odd IE bug #1843306\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ // Handle W3C\r
+ if (!s)\r
+ return false;\r
+\r
+ // Handle simple\r
+ if (b.rng) {\r
+ s.removeAllRanges();\r
+ s.addRange(b.rng);\r
+ } else {\r
+ if (is(b.start) && is(b.end)) {\r
+ try {\r
+ sd = getPos(ro, b.start, b.end);\r
+\r
+ if (sd) {\r
+ r = t.dom.doc.createRange();\r
+ r.setStart(sd.startNode, sd.startOffset);\r
+ r.setEnd(sd.endNode, sd.endOffset);\r
+ s.removeAllRanges();\r
+ s.addRange(r);\r
+ }\r
+\r
+ if (!tinymce.isOpera)\r
+ t.win.focus();\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+ }\r
+ }\r
+ },\r
+\r
+ select : function(n, c) {\r
+ var t = this, r = t.getRng(), s = t.getSel(), b, fn, ln, d = t.win.document;\r
+\r
+ function first(n) {\r
+ return n ? d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false).nextNode() : null;\r
+ };\r
+\r
+ function last(n) {\r
+ var c, o, w;\r
+\r
+ if (!n)\r
+ return null;\r
+\r
+ w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
+ while (c = w.nextNode())\r
+ o = c;\r
+\r
+ return o;\r
+ };\r
+\r
+ if (isIE) {\r
+ try {\r
+ b = d.body;\r
+\r
+ if (/^(IMG|TABLE)$/.test(n.nodeName)) {\r
+ r = b.createControlRange();\r
+ r.addElement(n);\r
+ } else {\r
+ r = b.createTextRange();\r
+ r.moveToElementText(n);\r
+ }\r
+\r
+ r.select();\r
+ } catch (ex) {\r
+ // Throws illigal agrument in IE some times\r
+ }\r
+ } else {\r
+ if (c) {\r
+ fn = first(n);\r
+ ln = last(n);\r
+\r
+ if (fn && ln) {\r
+ //console.debug(fn, ln);\r
+ r = d.createRange();\r
+ r.setStart(fn, 0);\r
+ r.setEnd(ln, ln.nodeValue.length);\r
+ } else\r
+ r.selectNode(n);\r
+ } else\r
+ r.selectNode(n);\r
+\r
+ t.setRng(r);\r
+ }\r
+\r
+ return n;\r
+ },\r
+\r
+ isCollapsed : function() {\r
+ var t = this, r = t.getRng(), s = t.getSel();\r
+\r
+ if (!r || r.item)\r
+ return false;\r
+\r
+ return !s || r.boundingWidth == 0 || s.isCollapsed;\r
+ },\r
+\r
+ collapse : function(b) {\r
+ var t = this, r = t.getRng(), n;\r
+\r
+ // Control range on IE\r
+ if (r.item) {\r
+ n = r.item(0);\r
+ r = this.win.document.body.createTextRange();\r
+ r.moveToElementText(n);\r
+ }\r
+\r
+ r.collapse(!!b);\r
+ t.setRng(r);\r
+ },\r
+\r
+ getSel : function() {\r
+ var t = this, w = this.win;\r
+\r
+ return w.getSelection ? w.getSelection() : w.document.selection;\r
+ },\r
+\r
+ getRng : function() {\r
+ var t = this, s = t.getSel(), r;\r
+\r
+ try {\r
+ if (s)\r
+ r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : t.win.document.createRange());\r
+ } catch (ex) {\r
+ // IE throws unspecified error here if TinyMCE is placed in a frame/iframe\r
+ }\r
+\r
+ // No range found then create an empty one\r
+ // This can occur when the editor is placed in a hidden container element on Gecko\r
+ // Or on IE when there was an exception\r
+ if (!r)\r
+ r = isIE ? t.win.document.body.createTextRange() : t.win.document.createRange();\r
+\r
+ return r;\r
+ },\r
+\r
+ setRng : function(r) {\r
+ var s;\r
+\r
+ if (!isIE) {\r
+ s = this.getSel();\r
+\r
+ if (s) {\r
+ s.removeAllRanges();\r
+ s.addRange(r);\r
+ }\r
+ } else {\r
+ try {\r
+ r.select();\r
+ } catch (ex) {\r
+ // Needed for some odd IE bug #1843306\r
+ }\r
+ }\r
+ },\r
+\r
+ setNode : function(n) {\r
+ var t = this;\r
+\r
+ t.setContent(t.dom.getOuterHTML(n));\r
+\r
+ return n;\r
+ },\r
+\r
+ getNode : function() {\r
+ var t = this, r = t.getRng(), s = t.getSel(), e;\r
+\r
+ if (!isIE) {\r
+ // Range maybe lost after the editor is made visible again\r
+ if (!r)\r
+ return t.dom.getRoot();\r
+\r
+ e = r.commonAncestorContainer;\r
+\r
+ // Handle selection a image or other control like element such as anchors\r
+ if (!r.collapsed) {\r
+ if (r.startContainer == r.endContainer || (tinymce.isWebKit && r.startContainer == r.endContainer.parentNode)) {\r
+ if (r.startOffset - r.endOffset < 2 || tinymce.isWebKit) {\r
+ if (r.startContainer.hasChildNodes())\r
+ e = r.startContainer.childNodes[r.startOffset];\r
+ }\r
+ }\r
+ }\r
+\r
+ return t.dom.getParent(e, function(n) {\r
+ return n.nodeType == 1;\r
+ });\r
+ }\r
+\r
+ return r.item ? r.item(0) : r.parentElement();\r
+ },\r
+\r
+ destroy : function(s) {\r
+ var t = this;\r
+\r
+ t.win = null;\r
+\r
+ // Manual destroy then remove unload handler\r
+ if (!s)\r
+ tinymce.removeUnload(t.destroy);\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/dom/XMLWriter.js */\r
+\r
+(function() {\r
+ tinymce.create('tinymce.dom.XMLWriter', {\r
+ node : null,\r
+\r
+ XMLWriter : function(s) {\r
+ // Get XML document\r
+ function getXML() {\r
+ var i = document.implementation;\r
+\r
+ if (!i || !i.createDocument) {\r
+ // Try IE objects\r
+ try {return new ActiveXObject('MSXML2.DOMDocument');} catch (ex) {}\r
+ try {return new ActiveXObject('Microsoft.XmlDom');} catch (ex) {}\r
+ } else\r
+ return i.createDocument('', '', null);\r
+ };\r
+\r
+ this.doc = getXML();\r
+ \r
+ // Since Opera and WebKit doesn't escape > into > we need to do it our self to normalize the output for all browsers\r
+ this.valid = tinymce.isOpera || tinymce.isWebKit;\r
+\r
+ this.reset();\r
+ },\r
+\r
+ reset : function() {\r
+ var t = this, d = t.doc;\r
+\r
+ if (d.firstChild)\r
+ d.removeChild(d.firstChild);\r
+\r
+ t.node = d.appendChild(d.createElement("html"));\r
+ },\r
+\r
+ writeStartElement : function(n) {\r
+ var t = this;\r
+\r
+ t.node = t.node.appendChild(t.doc.createElement(n));\r
+ },\r
+\r
+ writeAttribute : function(n, v) {\r
+ if (this.valid)\r
+ v = v.replace(/>/g, '%MCGT%');\r
+\r
+ this.node.setAttribute(n, v);\r
+ },\r
+\r
+ writeEndElement : function() {\r
+ this.node = this.node.parentNode;\r
+ },\r
+\r
+ writeFullEndElement : function() {\r
+ var t = this, n = t.node;\r
+\r
+ n.appendChild(t.doc.createTextNode(""));\r
+ t.node = n.parentNode;\r
+ },\r
+\r
+ writeText : function(v) {\r
+ if (this.valid)\r
+ v = v.replace(/>/g, '%MCGT%');\r
+\r
+ this.node.appendChild(this.doc.createTextNode(v));\r
+ },\r
+\r
+ writeCDATA : function(v) {\r
+ this.node.appendChild(this.doc.createCDATA(v));\r
+ },\r
+\r
+ writeComment : function(v) {\r
+ this.node.appendChild(this.doc.createComment(v));\r
+ },\r
+\r
+ getContent : function() {\r
+ var h;\r
+\r
+ h = this.doc.xml || new XMLSerializer().serializeToString(this.doc);\r
+ h = h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g, '');\r
+ h = h.replace(/ ?\/>/g, ' />');\r
+\r
+ if (this.valid)\r
+ h = h.replace(/\%MCGT%/g, '>');\r
+\r
+ return h;\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/dom/StringWriter.js */\r
+\r
+(function() {\r
+ tinymce.create('tinymce.dom.StringWriter', {\r
+ str : null,\r
+ tags : null,\r
+ count : 0,\r
+ settings : null,\r
+ indent : null,\r
+\r
+ StringWriter : function(s) {\r
+ this.settings = tinymce.extend({\r
+ indent_char : ' ',\r
+ indentation : 1\r
+ }, s);\r
+\r
+ this.reset();\r
+ },\r
+\r
+ reset : function() {\r
+ this.indent = '';\r
+ this.str = "";\r
+ this.tags = [];\r
+ this.count = 0;\r
+ },\r
+\r
+ writeStartElement : function(n) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw('<' + n);\r
+ this.tags.push(n);\r
+ this.inAttr = true;\r
+ this.count++;\r
+ this.elementCount = this.count;\r
+ },\r
+\r
+ writeAttribute : function(n, v) {\r
+ var t = this;\r
+\r
+ t.writeRaw(" " + t.encode(n) + '="' + t.encode(v) + '"');\r
+ },\r
+\r
+ writeEndElement : function() {\r
+ var n;\r
+\r
+ if (this.tags.length > 0) {\r
+ n = this.tags.pop();\r
+\r
+ if (this._writeAttributesEnd(1))\r
+ this.writeRaw('</' + n + '>');\r
+\r
+ if (this.settings.indentation > 0)\r
+ this.writeRaw('\n');\r
+ }\r
+ },\r
+\r
+ writeFullEndElement : function() {\r
+ if (this.tags.length > 0) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw('</' + this.tags.pop() + '>');\r
+\r
+ if (this.settings.indentation > 0)\r
+ this.writeRaw('\n');\r
+ }\r
+ },\r
+\r
+ writeText : function(v) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw(this.encode(v));\r
+ this.count++;\r
+ },\r
+\r
+ writeCDATA : function(v) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw('<![CDATA[' + v + ']]>');\r
+ this.count++;\r
+ },\r
+\r
+ writeComment : function(v) {\r
+ this._writeAttributesEnd();\r
+ this.writeRaw('<!-- ' + v + '-->');\r
+ this.count++;\r
+ },\r
+\r
+ writeRaw : function(v) {\r
+ this.str += v;\r
+ },\r
+\r
+ encode : function(s) {\r
+ return s.replace(/[<>&"]/g, function(v) {\r
+ switch (v) {\r
+ case '<':\r
+ return '<';\r
+\r
+ case '>':\r
+ return '>';\r
+\r
+ case '&':\r
+ return '&';\r
+\r
+ case '"':\r
+ return '"';\r
+ }\r
+\r
+ return v;\r
+ });\r
+ },\r
+\r
+ getContent : function() {\r
+ return this.str;\r
+ },\r
+\r
+ _writeAttributesEnd : function(s) {\r
+ if (!this.inAttr)\r
+ return;\r
+\r
+ this.inAttr = false;\r
+\r
+ if (s && this.elementCount == this.count) {\r
+ this.writeRaw(' />');\r
+ return false;\r
+ }\r
+\r
+ this.writeRaw('>');\r
+\r
+ return true;\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/dom/Serializer.js */\r
+\r
+(function() {\r
+ // Shorten names\r
+ var extend = tinymce.extend, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, isIE = tinymce.isIE, isGecko = tinymce.isGecko;\r
+\r
+ // Returns only attribites that have values not all attributes in IE\r
+ function getIEAtts(n) {\r
+ var o = [];\r
+\r
+ // Object will throw exception in IE\r
+ if (n.nodeName == 'OBJECT')\r
+ return n.attributes;\r
+\r
+ n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi, function(a, b) {\r
+ o.push({specified : 1, nodeName : b});\r
+ });\r
+\r
+ return o;\r
+ };\r
+\r
+ function wildcardToRE(s) {\r
+ return s.replace(/([?+*])/g, '.$1');\r
+ };\r
+\r
+ tinymce.create('tinymce.dom.Serializer', {\r
+ Serializer : function(s) {\r
+ var t = this;\r
+\r
+ t.key = 0;\r
+ t.onPreProcess = new Dispatcher(t);\r
+ t.onPostProcess = new Dispatcher(t);\r
+\r
+ if (tinymce.relaxedDomain && tinymce.isGecko) {\r
+ // Gecko has a bug where we can't create a new XML document if domain relaxing is used\r
+ t.writer = new tinymce.dom.StringWriter();\r
+ } else {\r
+ try {\r
+ t.writer = new tinymce.dom.XMLWriter();\r
+ } catch (ex) {\r
+ // IE might throw exception if ActiveX is disabled so we then switch to the slightly slower StringWriter\r
+ t.writer = new tinymce.dom.StringWriter();\r
+ }\r
+ }\r
+\r
+ // Default settings\r
+ t.settings = s = extend({\r
+ dom : tinymce.DOM,\r
+ valid_nodes : 0,\r
+ node_filter : 0,\r
+ attr_filter : 0,\r
+ invalid_attrs : /^(mce_|_moz_)/,\r
+ closed : /(br|hr|input|meta|img|link|param)/,\r
+ entity_encoding : 'named',\r
+ entities : '160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',\r
+ valid_elements : '*[*]',\r
+ extended_valid_elements : 0,\r
+ valid_child_elements : 0,\r
+ invalid_elements : 0,\r
+ fix_table_elements : 0,\r
+ fix_list_elements : true,\r
+ fix_content_duplication : true,\r
+ convert_fonts_to_spans : false,\r
+ font_size_classes : 0,\r
+ font_size_style_values : 0,\r
+ apply_source_formatting : 0,\r
+ indent_mode : 'simple',\r
+ indent_char : '\t',\r
+ indent_levels : 1,\r
+ remove_linebreaks : 1\r
+ }, s);\r
+\r
+ t.dom = s.dom;\r
+\r
+ if (s.fix_list_elements) {\r
+ t.onPreProcess.add(function(se, o) {\r
+ var nl, x, a = ['ol', 'ul'], i, n, p, r = /^(OL|UL)$/, np;\r
+\r
+ function prevNode(e, n) {\r
+ var a = n.split(','), i;\r
+\r
+ while ((e = e.previousSibling) != null) {\r
+ for (i=0; i<a.length; i++) {\r
+ if (e.nodeName == a[i])\r
+ return e;\r
+ }\r
+ }\r
+\r
+ return null;\r
+ };\r
+\r
+ for (x=0; x<a.length; x++) {\r
+ nl = t.dom.select(a[x], o.node);\r
+\r
+ for (i=0; i<nl.length; i++) {\r
+ n = nl[i];\r
+ p = n.parentNode;\r
+\r
+ if (r.test(p.nodeName)) {\r
+ np = prevNode(n, 'LI');\r
+\r
+ if (!np) {\r
+ np = t.dom.create('li');\r
+ np.innerHTML = ' ';\r
+ np.appendChild(n);\r
+ p.insertBefore(np, p.firstChild);\r
+ } else\r
+ np.appendChild(n);\r
+ }\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ if (s.fix_table_elements) {\r
+ t.onPreProcess.add(function(se, o) {\r
+ each(t.dom.select('table', o.node), function(e) {\r
+ var pa = t.dom.getParent(e, 'H1,H2,H3,H4,H5,H6,P'), pa2, n, tm, pl = [], i, ns;\r
+\r
+ if (pa) {\r
+ pa2 = pa.cloneNode(false);\r
+\r
+ pl.push(e);\r
+ for (n = e; n = n.parentNode;) {\r
+ pl.push(n);\r
+\r
+ if (n == pa)\r
+ break;\r
+ }\r
+\r
+ tm = pa2;\r
+ for (i = pl.length - 1; i >= 0; i--) {\r
+ if (i == pl.length - 1) {\r
+ while (ns = pl[i - 1].nextSibling)\r
+ tm.appendChild(ns.parentNode.removeChild(ns));\r
+ } else {\r
+ n = pl[i].cloneNode(false);\r
+\r
+ if (i != 0) {\r
+ while (ns = pl[i - 1].nextSibling)\r
+ n.appendChild(ns.parentNode.removeChild(ns));\r
+ }\r
+\r
+ tm = tm.appendChild(n);\r
+ }\r
+ }\r
+\r
+ e = t.dom.insertAfter(e.parentNode.removeChild(e), pa);\r
+ t.dom.insertAfter(e, pa);\r
+ t.dom.insertAfter(pa2, e);\r
+ }\r
+ });\r
+ });\r
+ }\r
+ },\r
+\r
+ setEntities : function(s) {\r
+ var t = this, a, i, l = {}, re = '', v;\r
+\r
+ // No need to setup more than once\r
+ if (t.entityLookup)\r
+ return;\r
+\r
+ // Build regex and lookup array\r
+ a = s.split(',');\r
+ for (i = 0; i < a.length; i += 2) {\r
+ v = a[i];\r
+\r
+ // Don't add default & " etc.\r
+ if (v == 34 || v == 38 || v == 60 || v == 62)\r
+ continue;\r
+\r
+ l[String.fromCharCode(a[i])] = a[i + 1];\r
+\r
+ v = parseInt(a[i]).toString(16);\r
+ re += '\\u' + '0000'.substring(v.length) + v;\r
+ }\r
+\r
+ if (!re) {\r
+ t.settings.entity_encoding = 'raw';\r
+ return;\r
+ }\r
+\r
+ t.entitiesRE = new RegExp('[' + re + ']', 'g');\r
+ t.entityLookup = l;\r
+ },\r
+\r
+ setValidChildRules : function(s) {\r
+ this.childRules = null;\r
+ this.addValidChildRules(s);\r
+ },\r
+\r
+ addValidChildRules : function(s) {\r
+ var t = this, inst, intr, bloc;\r
+\r
+ if (!s)\r
+ return;\r
+\r
+ inst = 'A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';\r
+ intr = 'A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';\r
+ bloc = 'H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';\r
+\r
+ each(s.split(','), function(s) {\r
+ var p = s.split(/\[|\]/), re;\r
+\r
+ s = '';\r
+ each(p[1].split('|'), function(v) {\r
+ if (s)\r
+ s += '|';\r
+\r
+ switch (v) {\r
+ case '%itrans':\r
+ v = intr;\r
+ break;\r
+\r
+ case '%itrans_na':\r
+ v = intr.substring(2);\r
+ break;\r
+\r
+ case '%istrict':\r
+ v = inst;\r
+ break;\r
+\r
+ case '%istrict_na':\r
+ v = inst.substring(2);\r
+ break;\r
+\r
+ case '%btrans':\r
+ v = bloc;\r
+ break;\r
+\r
+ case '%bstrict':\r
+ v = bloc;\r
+ break;\r
+ }\r
+\r
+ s += v;\r
+ });\r
+ re = new RegExp('^(' + s.toLowerCase() + ')$', 'i');\r
+\r
+ each(p[0].split('/'), function(s) {\r
+ t.childRules = t.childRules || {};\r
+ t.childRules[s] = re;\r
+ });\r
+ });\r
+\r
+ // Build regex\r
+ s = '';\r
+ each(t.childRules, function(v, k) {\r
+ if (s)\r
+ s += '|';\r
+\r
+ s += k;\r
+ });\r
+\r
+ t.parentElementsRE = new RegExp('^(' + s.toLowerCase() + ')$', 'i');\r
+\r
+ /*console.debug(t.parentElementsRE.toString());\r
+ each(t.childRules, function(v) {\r
+ console.debug(v.toString());\r
+ });*/\r
+ },\r
+\r
+ setRules : function(s) {\r
+ var t = this;\r
+\r
+ t._setup();\r
+ t.rules = {};\r
+ t.wildRules = [];\r
+ t.validElements = {};\r
+\r
+ return t.addRules(s);\r
+ },\r
+\r
+ addRules : function(s) {\r
+ var t = this, dr;\r
+\r
+ if (!s)\r
+ return;\r
+\r
+ t._setup();\r
+\r
+ each(s.split(','), function(s) {\r
+ var p = s.split(/\[|\]/), tn = p[0].split('/'), ra, at, wat, va = [];\r
+\r
+ // Extend with default rules\r
+ if (dr)\r
+ at = tinymce.extend([], dr.attribs);\r
+\r
+ // Parse attributes\r
+ if (p.length > 1) {\r
+ each(p[1].split('|'), function(s) {\r
+ var ar = {}, i;\r
+\r
+ at = at || [];\r
+\r
+ // Parse attribute rule\r
+ s = s.replace(/::/g, '~');\r
+ s = /^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s);\r
+ s[2] = s[2].replace(/~/g, ':');\r
+\r
+ // Add required attributes\r
+ if (s[1] == '!') {\r
+ ra = ra || [];\r
+ ra.push(s[2]);\r
+ }\r
+\r
+ // Remove inherited attributes\r
+ if (s[1] == '-') {\r
+ for (i = 0; i <at.length; i++) {\r
+ if (at[i].name == s[2]) {\r
+ at.splice(i, 1);\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+ switch (s[3]) {\r
+ // Add default attrib values\r
+ case '=':\r
+ ar.defaultVal = s[4] || '';\r
+ break;\r
+\r
+ // Add forced attrib values\r
+ case ':':\r
+ ar.forcedVal = s[4];\r
+ break;\r
+\r
+ // Add validation values\r
+ case '<':\r
+ ar.validVals = s[4].split('?');\r
+ break;\r
+ }\r
+\r
+ if (/[*.?]/.test(s[2])) {\r
+ wat = wat || [];\r
+ ar.nameRE = new RegExp('^' + wildcardToRE(s[2]) + '$');\r
+ wat.push(ar);\r
+ } else {\r
+ ar.name = s[2];\r
+ at.push(ar);\r
+ }\r
+\r
+ va.push(s[2]);\r
+ });\r
+ }\r
+\r
+ // Handle element names\r
+ each(tn, function(s, i) {\r
+ var pr = s.charAt(0), x = 1, ru = {};\r
+\r
+ // Extend with default rule data\r
+ if (dr) {\r
+ if (dr.noEmpty)\r
+ ru.noEmpty = dr.noEmpty;\r
+\r
+ if (dr.fullEnd)\r
+ ru.fullEnd = dr.fullEnd;\r
+\r
+ if (dr.padd)\r
+ ru.padd = dr.padd;\r
+ }\r
+\r
+ // Handle prefixes\r
+ switch (pr) {\r
+ case '-':\r
+ ru.noEmpty = true;\r
+ break;\r
+\r
+ case '+':\r
+ ru.fullEnd = true;\r
+ break;\r
+\r
+ case '#':\r
+ ru.padd = true;\r
+ break;\r
+\r
+ default:\r
+ x = 0;\r
+ }\r
+\r
+ tn[i] = s = s.substring(x);\r
+ t.validElements[s] = 1;\r
+\r
+ // Add element name or element regex\r
+ if (/[*.?]/.test(tn[0])) {\r
+ ru.nameRE = new RegExp('^' + wildcardToRE(tn[0]) + '$');\r
+ t.wildRules = t.wildRules || {};\r
+ t.wildRules.push(ru);\r
+ } else {\r
+ ru.name = tn[0];\r
+\r
+ // Store away default rule\r
+ if (tn[0] == '@')\r
+ dr = ru;\r
+\r
+ t.rules[s] = ru;\r
+ }\r
+\r
+ ru.attribs = at;\r
+\r
+ if (ra)\r
+ ru.requiredAttribs = ra;\r
+\r
+ if (wat) {\r
+ // Build valid attributes regexp\r
+ s = '';\r
+ each(va, function(v) {\r
+ if (s)\r
+ s += '|';\r
+\r
+ s += '(' + wildcardToRE(v) + ')';\r
+ });\r
+ ru.validAttribsRE = new RegExp('^' + s.toLowerCase() + '$');\r
+ ru.wildAttribs = wat;\r
+ }\r
+ });\r
+ });\r
+\r
+ // Build valid elements regexp\r
+ s = '';\r
+ each(t.validElements, function(v, k) {\r
+ if (s)\r
+ s += '|';\r
+\r
+ if (k != '@')\r
+ s += k;\r
+ });\r
+ t.validElementsRE = new RegExp('^(' + wildcardToRE(s.toLowerCase()) + ')$');\r
+\r
+ //console.debug(t.validElementsRE.toString());\r
+ //console.dir(t.rules);\r
+ //console.dir(t.wildRules);\r
+ },\r
+\r
+ findRule : function(n) {\r
+ var t = this, rl = t.rules, i, r;\r
+\r
+ t._setup();\r
+\r
+ // Exact match\r
+ r = rl[n];\r
+ if (r)\r
+ return r;\r
+\r
+ // Try wildcards\r
+ rl = t.wildRules;\r
+ for (i = 0; i < rl.length; i++) {\r
+ if (rl[i].nameRE.test(n))\r
+ return rl[i];\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
+ findAttribRule : function(ru, n) {\r
+ var i, wa = ru.wildAttribs;\r
+\r
+ for (i = 0; i < wa.length; i++) {\r
+ if (wa[i].nameRE.test(n))\r
+ return wa[i];\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
+ serialize : function(n, o) {\r
+ var h, t = this;\r
+\r
+ t._setup();\r
+ o = o || {};\r
+ o.format = o.format || 'html';\r
+ t.processObj = o;\r
+ n = n.cloneNode(true);\r
+ t.key = '' + (parseInt(t.key) + 1);\r
+\r
+ // Pre process\r
+ if (!o.no_events) {\r
+ o.node = n;\r
+ t.onPreProcess.dispatch(t, o);\r
+ }\r
+\r
+ // Serialize HTML DOM into a string\r
+ t.writer.reset();\r
+ t._serializeNode(n, o.getInner);\r
+\r
+ // Post process\r
+ o.content = t.writer.getContent();\r
+\r
+ if (!o.no_events)\r
+ t.onPostProcess.dispatch(t, o);\r
+\r
+ t._postProcess(o);\r
+ o.node = null;\r
+\r
+ return tinymce.trim(o.content);\r
+ },\r
+\r
+ // Internal functions\r
+\r
+ _postProcess : function(o) {\r
+ var t = this, s = t.settings, h = o.content, sc = [], p, l;\r
+\r
+ if (o.format == 'html') {\r
+ // Protect some elements\r
+ p = t._protect({\r
+ content : h,\r
+ patterns : [\r
+ /(<script[^>]*>)(.*?)(<\/script>)/g,\r
+ /(<style[^>]*>)(.*?)(<\/style>)/g,\r
+ /(<pre[^>]*>)(.*?)(<\/pre>)/g\r
+ ]\r
+ });\r
+\r
+ h = p.content;\r
+\r
+ // Entity encode\r
+ if (s.entity_encoding !== 'raw') {\r
+ if (s.entity_encoding.indexOf('named') != -1) {\r
+ t.setEntities(s.entities);\r
+ l = t.entityLookup;\r
+\r
+ h = h.replace(t.entitiesRE, function(a) {\r
+ var v;\r
+\r
+ if (v = l[a])\r
+ a = '&' + v + ';';\r
+\r
+ return a;\r
+ });\r
+ }\r
+\r
+ if (s.entity_encoding.indexOf('numeric') != -1) {\r
+ h = h.replace(/[\u007E-\uFFFF]/g, function(a) {\r
+ return '&#' + a.charCodeAt(0) + ';';\r
+ });\r
+ }\r
+ }\r
+\r
+ // Use BR instead of padded P elements inside editor and use <p> </p> outside editor\r
+/* if (o.set)\r
+ h = h.replace(/<p>\s+( | |\u00a0|<br \/>)\s+<\/p>/g, '<p><br /></p>');\r
+ else\r
+ h = h.replace(/<p>\s+( | |\u00a0|<br \/>)\s+<\/p>/g, '<p>$1</p>');*/\r
+\r
+ // Since Gecko and Safari keeps whitespace in the DOM we need to\r
+ // remove it inorder to match other browsers. But I think Gecko and Safari is right.\r
+ // This process is only done when getting contents out from the editor.\r
+ if (!o.set) {\r
+ // We need to replace paragraph whitespace with an nbsp before indentation to keep the \u00a0 char\r
+ h = h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g, s.entity_encoding == 'numeric' ? '<p$1> </p>' : '<p$1> </p>');\r
+\r
+ if (s.remove_linebreaks) {\r
+ h = h.replace(/\r?\n|\r/g, ' ');\r
+ h = h.replace(/(<[^>]+>)\s+/g, '$1 ');\r
+ h = h.replace(/\s+(<\/[^>]+>)/g, ' $1');\r
+ h = h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g, '<$1 $2>'); // Trim block start\r
+ h = h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g, '<$1>'); // Trim block start\r
+ h = h.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g, '</$1>'); // Trim block end\r
+ }\r
+\r
+ // Simple indentation\r
+ if (s.apply_source_formatting && s.indent_mode == 'simple') {\r
+ // Add line breaks before and after block elements\r
+ h = h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g, '\n<$1$2$3>\n');\r
+ h = h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g, '\n<$1$2>');\r
+ h = h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g, '</$1>\n');\r
+ h = h.replace(/\n\n/g, '\n');\r
+ }\r
+ }\r
+\r
+ h = t._unprotect(h, p);\r
+\r
+ // Restore the \u00a0 character if raw mode is enabled\r
+ if (s.entity_encoding == 'raw')\r
+ h = h.replace(/<p> <\/p>|<p([^>]+)> <\/p>/g, '<p$1>\u00a0</p>');\r
+ }\r
+\r
+ o.content = h;\r
+ },\r
+\r
+ _serializeNode : function(n, inn) {\r
+ var t = this, s = t.settings, w = t.writer, hc, el, cn, i, l, a, at, no, v, nn, ru, ar, iv;\r
+\r
+ if (!s.node_filter || s.node_filter(n)) {\r
+ switch (n.nodeType) {\r
+ case 1: // Element\r
+ if (n.hasAttribute ? n.hasAttribute('mce_bogus') : n.getAttribute('mce_bogus'))\r
+ return;\r
+\r
+ iv = false;\r
+ hc = n.hasChildNodes();\r
+ nn = n.getAttribute('mce_name') || n.nodeName.toLowerCase();\r
+\r
+ // Add correct prefix on IE\r
+ if (isIE) {\r
+ if (n.scopeName !== 'HTML' && n.scopeName !== 'html')\r
+ nn = n.scopeName + ':' + nn;\r
+ }\r
+\r
+ // Remove mce prefix on IE needed for the abbr element\r
+ if (nn.indexOf('mce:') === 0)\r
+ nn = nn.substring(4);\r
+\r
+ // Check if valid\r
+ if (!t.validElementsRE.test(nn) || (t.invalidElementsRE && t.invalidElementsRE.test(nn)) || inn) {\r
+ iv = true;\r
+ break;\r
+ }\r
+\r
+ if (isIE) {\r
+ // Fix IE content duplication (DOM can have multiple copies of the same node)\r
+ if (s.fix_content_duplication) {\r
+ if (n.mce_serialized == t.key)\r
+ return;\r
+\r
+ n.mce_serialized = t.key;\r
+ }\r
+\r
+ // IE sometimes adds a / infront of the node name\r
+ if (nn.charAt(0) == '/')\r
+ nn = nn.substring(1);\r
+ } else if (isGecko) {\r
+ // Ignore br elements\r
+ if (n.nodeName === 'BR' && n.getAttribute('type') == '_moz')\r
+ return;\r
+ }\r
+\r
+ // Check if valid child\r
+ if (t.childRules) {\r
+ if (t.parentElementsRE.test(t.elementName)) {\r
+ if (!t.childRules[t.elementName].test(nn)) {\r
+ iv = true;\r
+ break;\r
+ }\r
+ }\r
+\r
+ t.elementName = nn;\r
+ }\r
+\r
+ ru = t.findRule(nn);\r
+ nn = ru.name || nn;\r
+\r
+ // Skip empty nodes or empty node name in IE\r
+ if ((!hc && ru.noEmpty) || (isIE && !nn)) {\r
+ iv = true;\r
+ break;\r
+ }\r
+\r
+ // Check required\r
+ if (ru.requiredAttribs) {\r
+ a = ru.requiredAttribs;\r
+\r
+ for (i = a.length - 1; i >= 0; i--) {\r
+ if (this.dom.getAttrib(n, a[i]) !== '')\r
+ break;\r
+ }\r
+\r
+ // None of the required was there\r
+ if (i == -1) {\r
+ iv = true;\r
+ break;\r
+ }\r
+ }\r
+\r
+ w.writeStartElement(nn);\r
+\r
+ // Add ordered attributes\r
+ if (ru.attribs) {\r
+ for (i=0, at = ru.attribs, l = at.length; i<l; i++) {\r
+ a = at[i];\r
+ v = t._getAttrib(n, a);\r
+\r
+ if (v !== null)\r
+ w.writeAttribute(a.name, v);\r
+ }\r
+ }\r
+\r
+ // Add wild attributes\r
+ if (ru.validAttribsRE) {\r
+ at = isIE ? getIEAtts(n) : n.attributes;\r
+ for (i=at.length-1; i>-1; i--) {\r
+ no = at[i];\r
+\r
+ if (no.specified) {\r
+ a = no.nodeName.toLowerCase();\r
+\r
+ if (s.invalid_attrs.test(a) || !ru.validAttribsRE.test(a))\r
+ continue;\r
+\r
+ ar = t.findAttribRule(ru, a);\r
+ v = t._getAttrib(n, ar, a);\r
+\r
+ if (v !== null)\r
+ w.writeAttribute(a, v);\r
+ }\r
+ }\r
+ }\r
+\r
+ // Padd empty nodes with a \r
+ if (!hc && ru.padd)\r
+ w.writeText('\u00a0');\r
+\r
+ break;\r
+\r
+ case 3: // Text\r
+ // Check if valid child\r
+ if (t.childRules && t.parentElementsRE.test(t.elementName)) {\r
+ if (!t.childRules[t.elementName].test(n.nodeName))\r
+ return;\r
+ }\r
+\r
+ return w.writeText(n.nodeValue);\r
+\r
+ case 4: // CDATA\r
+ return w.writeCDATA(n.nodeValue);\r
+\r
+ case 8: // Comment\r
+ return w.writeComment(n.nodeValue);\r
+ }\r
+ } else if (n.nodeType == 1)\r
+ hc = n.hasChildNodes();\r
+\r
+ if (hc) {\r
+ cn = n.firstChild;\r
+\r
+ while (cn) {\r
+ t._serializeNode(cn);\r
+ t.elementName = nn;\r
+ cn = cn.nextSibling;\r
+ }\r
+ }\r
+\r
+ // Write element end\r
+ if (!iv) {\r
+ if (hc || !s.closed.test(nn))\r
+ w.writeFullEndElement();\r
+ else\r
+ w.writeEndElement();\r
+ }\r
+ },\r
+\r
+ _protect : function(o) {\r
+ o.items = o.items || [];\r
+\r
+ function enc(s) {\r
+ return s.replace(/[\r\n\\]/g, function(c) {\r
+ if (c === '\n')\r
+ return '\\n';\r
+ else if (c === '\\')\r
+ return '\\\\';\r
+\r
+ return '\\r';\r
+ });\r
+ };\r
+\r
+ function dec(s) {\r
+ return s.replace(/\\[\\rn]/g, function(c) {\r
+ if (c === '\\n')\r
+ return '\n';\r
+ else if (c === '\\\\')\r
+ return '\\';\r
+\r
+ return '\r';\r
+ });\r
+ };\r
+\r
+ each(o.patterns, function(p) {\r
+ o.content = dec(enc(o.content).replace(p, function(x, a, b, c) {\r
+ o.items.push(dec(b));\r
+ return a + '<!--mce:' + (o.items.length - 1) + '-->' + c;\r
+ }));\r
+ });\r
+\r
+ return o;\r
+ },\r
+\r
+ _unprotect : function(h, o) {\r
+ h = h.replace(/\<!--mce:([0-9]+)--\>/g, function(a, b) {\r
+ return o.items[parseInt(b)];\r
+ });\r
+\r
+ o.items = [];\r
+\r
+ return h;\r
+ },\r
+\r
+ _setup : function() {\r
+ var t = this, s = this.settings;\r
+\r
+ if (t.done)\r
+ return;\r
+\r
+ t.done = 1;\r
+\r
+ t.setRules(s.valid_elements);\r
+ t.addRules(s.extended_valid_elements);\r
+ t.addValidChildRules(s.valid_child_elements);\r
+\r
+ if (s.invalid_elements)\r
+ t.invalidElementsRE = new RegExp('^(' + wildcardToRE(s.invalid_elements.replace(',', '|').toLowerCase()) + ')$');\r
+\r
+ if (s.attrib_value_filter)\r
+ t.attribValueFilter = s.attribValueFilter;\r
+ },\r
+\r
+ _getAttrib : function(n, a, na) {\r
+ var i, v;\r
+\r
+ na = na || a.name;\r
+\r
+ if (a.forcedVal && (v = a.forcedVal)) {\r
+ if (v === '{$uid}')\r
+ return this.dom.uniqueId();\r
+\r
+ return v;\r
+ }\r
+\r
+ v = this.dom.getAttrib(n, na);\r
+\r
+ switch (na) {\r
+ case 'rowspan':\r
+ case 'colspan':\r
+ // Whats the point? Remove usless attribute value\r
+ if (v == '1')\r
+ v = '';\r
+\r
+ break;\r
+ }\r
+\r
+ if (this.attribValueFilter)\r
+ v = this.attribValueFilter(na, v, n);\r
+\r
+ if (a.validVals) {\r
+ for (i = a.validVals.length - 1; i >= 0; i--) {\r
+ if (v == a.validVals[i])\r
+ break;\r
+ }\r
+\r
+ if (i == -1)\r
+ return null;\r
+ }\r
+\r
+ if (v === '' && typeof(a.defaultVal) != 'undefined') {\r
+ v = a.defaultVal;\r
+\r
+ if (v === '{$uid}')\r
+ return this.dom.uniqueId();\r
+\r
+ return v;\r
+ } else {\r
+ // Remove internal mceItemXX classes when content is extracted from editor\r
+ if (na == 'class' && this.processObj.get)\r
+ v = v.replace(/\s?mceItem\w+\s?/g, '');\r
+ }\r
+\r
+ if (v === '')\r
+ return null;\r
+\r
+\r
+ return v;\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/dom/ScriptLoader.js */\r
+\r
+(function() {\r
+ var each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.dom.ScriptLoader', {\r
+ ScriptLoader : function(s) {\r
+ this.settings = s || {};\r
+ this.queue = [];\r
+ this.lookup = {};\r
+ },\r
+\r
+ isDone : function(u) {\r
+ return this.lookup[u] ? this.lookup[u].state == 2 : 0;\r
+ },\r
+\r
+ markDone : function(u) {\r
+ this.lookup[u] = {state : 2, url : u};\r
+ },\r
+\r
+ add : function(u, cb, s, pr) {\r
+ var t = this, lo = t.lookup, o;\r
+\r
+ if (o = lo[u]) {\r
+ // Is loaded fire callback\r
+ if (cb && o.state == 2)\r
+ cb.call(s || this);\r
+\r
+ return o;\r
+ }\r
+\r
+ o = {state : 0, url : u, func : cb, scope : s || this};\r
+\r
+ if (pr)\r
+ t.queue.unshift(o);\r
+ else\r
+ t.queue.push(o);\r
+\r
+ lo[u] = o;\r
+\r
+ return o;\r
+ },\r
+\r
+ load : function(u, cb, s) {\r
+ var t = this, o;\r
+\r
+ if (o = t.lookup[u]) {\r
+ // Is loaded fire callback\r
+ if (cb && o.state == 2)\r
+ cb.call(s || t);\r
+\r
+ return o;\r
+ }\r
+\r
+ function loadScript(u) {\r
+ if (tinymce.dom.Event.domLoaded || t.settings.strict_mode) {\r
+ tinymce.util.XHR.send({\r
+ url : u,\r
+ error : t.settings.error,\r
+ async : false,\r
+ success : function(co) {\r
+ t.eval(co);\r
+ }\r
+ });\r
+ } else\r
+ document.write('<script type="text/javascript" src="' + u + '"></script>');\r
+ };\r
+\r
+ if (!tinymce.is(u, 'string')) {\r
+ each(u, function(u) {\r
+ loadScript(u);\r
+ });\r
+\r
+ if (cb)\r
+ cb.call(s || t);\r
+ } else {\r
+ loadScript(u);\r
+\r
+ if (cb)\r
+ cb.call(s || t);\r
+ }\r
+ },\r
+\r
+ loadQueue : function(cb, s) {\r
+ var t = this;\r
+\r
+ if (!t.queueLoading) {\r
+ t.queueLoading = 1;\r
+ t.queueCallbacks = [];\r
+\r
+ t.loadScripts(t.queue, function() {\r
+ t.queueLoading = 0;\r
+\r
+ if (cb)\r
+ cb.call(s || t);\r
+\r
+ each(t.queueCallbacks, function(o) {\r
+ o.func.call(o.scope);\r
+ });\r
+ });\r
+ } else if (cb)\r
+ t.queueCallbacks.push({func : cb, scope : s || t});\r
+ },\r
+\r
+ eval : function(co) {\r
+ var w = window;\r
+\r
+ // Evaluate script\r
+ if (!w.execScript) {\r
+ try {\r
+ eval.call(w, co);\r
+ } catch (ex) {\r
+ eval(co, w); // Firefox 3.0a8\r
+ }\r
+ } else\r
+ w.execScript(co); // IE\r
+ },\r
+\r
+ loadScripts : function(sc, cb, s) {\r
+ var t = this, lo = t.lookup;\r
+\r
+ function done(o) {\r
+ o.state = 2; // Has been loaded\r
+\r
+ // Run callback\r
+ if (o.func)\r
+ o.func.call(o.scope || t);\r
+ };\r
+\r
+ function allDone() {\r
+ var l;\r
+\r
+ // Check if all files are loaded\r
+ l = sc.length;\r
+ each(sc, function(o) {\r
+ o = lo[o.url];\r
+\r
+ if (o.state === 2) {// It has finished loading\r
+ done(o);\r
+ l--;\r
+ } else\r
+ load(o);\r
+ });\r
+\r
+ // They are all loaded\r
+ if (l === 0 && cb) {\r
+ cb.call(s || t);\r
+ cb = 0;\r
+ }\r
+ };\r
+\r
+ function load(o) {\r
+ if (o.state > 0)\r
+ return;\r
+\r
+ o.state = 1; // Is loading\r
+\r
+ tinymce.util.XHR.send({\r
+ url : o.url,\r
+ error : t.settings.error,\r
+ success : function(co) {\r
+ t.eval(co);\r
+ done(o);\r
+ allDone();\r
+ }\r
+ });\r
+ };\r
+\r
+ each(sc, function(o) {\r
+ var u = o.url;\r
+\r
+ // Add to queue if needed\r
+ if (!lo[u]) {\r
+ lo[u] = o;\r
+ t.queue.push(o);\r
+ } else\r
+ o = lo[u];\r
+\r
+ // Is already loading or has been loaded\r
+ if (o.state > 0)\r
+ return;\r
+\r
+ if (!tinymce.dom.Event.domLoaded && !t.settings.strict_mode) {\r
+ var ix, ol = '';\r
+\r
+ // Add onload events\r
+ if (cb || o.func) {\r
+ o.state = 1; // Is loading\r
+\r
+ ix = tinymce.dom.ScriptLoader._addOnLoad(function() {\r
+ done(o);\r
+ allDone();\r
+ });\r
+\r
+ if (tinymce.isIE)\r
+ ol = ' onreadystatechange="';\r
+ else\r
+ ol = ' onload="';\r
+\r
+ ol += 'tinymce.dom.ScriptLoader._onLoad(this,\'' + u + '\',' + ix + ');"';\r
+ }\r
+\r
+ document.write('<script type="text/javascript" src="' + u + '"' + ol + '></script>');\r
+\r
+ if (!o.func)\r
+ done(o);\r
+ } else\r
+ load(o);\r
+ });\r
+\r
+ allDone();\r
+ },\r
+\r
+ // Static methods\r
+ 'static' : {\r
+ _addOnLoad : function(f) {\r
+ var t = this;\r
+\r
+ t._funcs = t._funcs || [];\r
+ t._funcs.push(f);\r
+\r
+ return t._funcs.length - 1;\r
+ },\r
+\r
+ _onLoad : function(e, u, ix) {\r
+ if (!tinymce.isIE || e.readyState == 'complete')\r
+ this._funcs[ix].call(this);\r
+ }\r
+ }\r
+\r
+ });\r
+\r
+ // Global script loader\r
+ tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/ui/Control.js */\r
+\r
+(function() {\r
+ // Shorten class names\r
+ var DOM = tinymce.DOM, is = tinymce.is;\r
+\r
+ tinymce.create('tinymce.ui.Control', {\r
+ Control : function(id, s) {\r
+ this.id = id;\r
+ this.settings = s = s || {};\r
+ this.rendered = false;\r
+ this.onRender = new tinymce.util.Dispatcher(this);\r
+ this.classPrefix = '';\r
+ this.scope = s.scope || this;\r
+ this.disabled = 0;\r
+ this.active = 0;\r
+ },\r
+\r
+ setDisabled : function(s) {\r
+ var e;\r
+\r
+ if (s != this.disabled) {\r
+ e = DOM.get(this.id);\r
+\r
+ // Add accessibility title for unavailable actions\r
+ if (e && this.settings.unavailable_prefix) {\r
+ if (s) {\r
+ this.prevTitle = e.title;\r
+ e.title = this.settings.unavailable_prefix + ": " + e.title;\r
+ } else\r
+ e.title = this.prevTitle;\r
+ }\r
+\r
+ this.setState('Disabled', s);\r
+ this.setState('Enabled', !s);\r
+ this.disabled = s;\r
+ }\r
+ },\r
+\r
+ isDisabled : function() {\r
+ return this.disabled;\r
+ },\r
+\r
+ setActive : function(s) {\r
+ if (s != this.active) {\r
+ this.setState('Active', s);\r
+ this.active = s;\r
+ }\r
+ },\r
+\r
+ isActive : function() {\r
+ return this.active;\r
+ },\r
+\r
+ setState : function(c, s) {\r
+ var n = DOM.get(this.id);\r
+\r
+ c = this.classPrefix + c;\r
+\r
+ if (s)\r
+ DOM.addClass(n, c);\r
+ else\r
+ DOM.removeClass(n, c);\r
+ },\r
+\r
+ isRendered : function() {\r
+ return this.rendered;\r
+ },\r
+\r
+ renderHTML : function() {\r
+ },\r
+\r
+ renderTo : function(n) {\r
+ DOM.setHTML(n, this.renderHTML());\r
+ },\r
+\r
+ postRender : function() {\r
+ var t = this, b;\r
+\r
+ // Set pending states\r
+ if (is(t.disabled)) {\r
+ b = t.disabled;\r
+ t.disabled = -1;\r
+ t.setDisabled(b);\r
+ }\r
+\r
+ if (is(t.active)) {\r
+ b = t.active;\r
+ t.active = -1;\r
+ t.setActive(b);\r
+ }\r
+ },\r
+\r
+ remove : function() {\r
+ DOM.remove(this.id);\r
+ this.destroy();\r
+ },\r
+\r
+ destroy : function() {\r
+ tinymce.dom.Event.clear(this.id);\r
+ }\r
+\r
+ });\r
+})();\r
+/* file:jscripts/tiny_mce/classes/ui/Container.js */\r
+\r
+tinymce.create('tinymce.ui.Container:tinymce.ui.Control', {\r
+ Container : function(id, s) {\r
+ this.parent(id, s);\r
+ this.controls = [];\r
+ this.lookup = {};\r
+ },\r
+\r
+ add : function(c) {\r
+ this.lookup[c.id] = c;\r
+ this.controls.push(c);\r
+\r
+ return c;\r
+ },\r
+\r
+ get : function(n) {\r
+ return this.lookup[n];\r
+ }\r
+\r
+ });\r
+\r
+\r
+/* file:jscripts/tiny_mce/classes/ui/Separator.js */\r
+\r
+tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {\r
+ Separator : function(id, s) {\r
+ this.parent(id, s);\r
+ this.classPrefix = 'mceSeparator';\r
+ },\r
+\r
+ renderHTML : function() {\r
+ return tinymce.DOM.createHTML('span', {'class' : this.classPrefix});\r
+ }\r
+\r
+ });\r
+\r
+/* file:jscripts/tiny_mce/classes/ui/MenuItem.js */\r
+\r
+(function() {\r
+ var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;\r
+\r
+ tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', {\r
+ MenuItem : function(id, s) {\r
+ this.parent(id, s);\r
+ this.classPrefix = 'mceMenuItem';\r
+ },\r
+\r
+ setSelected : function(s) {\r
+ this.setState('Selected', s);\r
+ this.selected = s;\r
+ },\r
+\r
+ isSelected : function() {\r
+ return this.selected;\r
+ },\r
+\r
+ postRender : function() {\r
+ var t = this;\r
+ \r
+ t.parent();\r
+\r
+ // Set pending state\r
+ if (is(t.selected))\r
+ t.setSelected(t.selected);\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/ui/Menu.js */\r
+\r
+(function() {\r
+ var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;\r
+\r
+ tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', {\r
+ Menu : function(id, s) {\r
+ var t = this;\r
+\r
+ t.parent(id, s);\r
+ t.items = {};\r
+ t.collapsed = false;\r
+ t.menuCount = 0;\r
+ t.onAddItem = new tinymce.util.Dispatcher(this);\r
+ },\r
+\r
+ expand : function(d) {\r
+ var t = this;\r
+\r
+ if (d) {\r
+ walk(t, function(o) {\r
+ if (o.expand)\r
+ o.expand();\r
+ }, 'items', t);\r
+ }\r
+\r
+ t.collapsed = false;\r
+ },\r
+\r
+ collapse : function(d) {\r
+ var t = this;\r
+\r
+ if (d) {\r
+ walk(t, function(o) {\r
+ if (o.collapse)\r
+ o.collapse();\r
+ }, 'items', t);\r
+ }\r
+\r
+ t.collapsed = true;\r
+ },\r
+\r
+ isCollapsed : function() {\r
+ return this.collapsed;\r
+ },\r
+\r
+ add : function(o) {\r
+ if (!o.settings)\r
+ o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o);\r
+\r
+ this.onAddItem.dispatch(this, o);\r
+\r
+ return this.items[o.id] = o;\r
+ },\r
+\r
+ addSeparator : function() {\r
+ return this.add({separator : true});\r
+ },\r
+\r
+ addMenu : function(o) {\r
+ if (!o.collapse)\r
+ o = this.createMenu(o);\r
+\r
+ this.menuCount++;\r
+\r
+ return this.add(o);\r
+ },\r
+\r
+ hasMenus : function() {\r
+ return this.menuCount !== 0;\r
+ },\r
+\r
+ remove : function(o) {\r
+ delete this.items[o.id];\r
+ },\r
+\r
+ removeAll : function() {\r
+ var t = this;\r
+\r
+ walk(t, function(o) {\r
+ if (o.removeAll)\r
+ o.removeAll();\r
+ else\r
+ o.remove();\r
+\r
+ o.destroy();\r
+ }, 'items', t);\r
+\r
+ t.items = {};\r
+ },\r
+\r
+ createMenu : function(o) {\r
+ var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o);\r
+\r
+ m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem);\r
+\r
+ return m;\r
+ }\r
+\r
+ });\r
+})();\r
+/* file:jscripts/tiny_mce/classes/ui/DropMenu.js */\r
+\r
+(function() {\r
+ var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element;\r
+\r
+ tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', {\r
+ DropMenu : function(id, s) {\r
+ s = s || {};\r
+ s.container = s.container || DOM.doc.body;\r
+ s.offset_x = s.offset_x || 0;\r
+ s.offset_y = s.offset_y || 0;\r
+ s.vp_offset_x = s.vp_offset_x || 0;\r
+ s.vp_offset_y = s.vp_offset_y || 0;\r
+\r
+ if (is(s.icons) && !s.icons)\r
+ s['class'] += ' mceNoIcons';\r
+\r
+ this.parent(id, s);\r
+ this.onShowMenu = new tinymce.util.Dispatcher(this);\r
+ this.onHideMenu = new tinymce.util.Dispatcher(this);\r
+ this.classPrefix = 'mceMenu';\r
+\r
+ // Fix for odd IE bug: #1903622\r
+ this.fixIE = tinymce.isIE && DOM.win.top != DOM.win;\r
+ },\r
+\r
+ createMenu : function(s) {\r
+ var t = this, cs = t.settings, m;\r
+\r
+ s.container = s.container || cs.container;\r
+ s.parent = t;\r
+ s.constrain = s.constrain || cs.constrain;\r
+ s['class'] = s['class'] || cs['class'];\r
+ s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x;\r
+ s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y;\r
+ m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s);\r
+\r
+ m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem);\r
+\r
+ return m;\r
+ },\r
+\r
+ update : function() {\r
+ var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th;\r
+\r
+ tw = s.max_width ? Math.min(tb.clientWidth, s.max_width) : tb.clientWidth;\r
+ th = s.max_height ? Math.min(tb.clientHeight, s.max_height) : tb.clientHeight;\r
+\r
+ if (!DOM.boxModel)\r
+ t.element.setStyles({width : tw + 2, height : th + 2});\r
+ else\r
+ t.element.setStyles({width : tw, height : th});\r
+\r
+ if (s.max_width)\r
+ DOM.setStyle(co, 'width', tw);\r
+\r
+ if (s.max_height) {\r
+ DOM.setStyle(co, 'height', th);\r
+\r
+ if (tb.clientHeight < s.max_height)\r
+ DOM.setStyle(co, 'overflow', 'hidden');\r
+ }\r
+ },\r
+\r
+ showMenu : function(x, y, px) {\r
+ var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix;\r
+\r
+ t.collapse(1);\r
+\r
+ if (t.isMenuVisible)\r
+ return;\r
+\r
+ if (!t.rendered) {\r
+ co = DOM.add(t.settings.container, t.renderNode());\r
+\r
+ each(t.items, function(o) {\r
+ o.postRender();\r
+ });\r
+\r
+ t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});\r
+ } else\r
+ co = DOM.get('menu_' + t.id);\r
+\r
+ // Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug\r
+ if (!tinymce.isOpera)\r
+ DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF});\r
+\r
+ DOM.show(co);\r
+ t.update();\r
+\r
+ x += s.offset_x || 0;\r
+ y += s.offset_y || 0;\r
+ vp.w -= 4;\r
+ vp.h -= 4;\r
+\r
+ // Move inside viewport if not submenu\r
+ if (s.constrain) {\r
+ w = co.clientWidth - ot;\r
+ h = co.clientHeight - ot;\r
+ mx = vp.x + vp.w;\r
+ my = vp.y + vp.h;\r
+\r
+ if ((x + s.vp_offset_x + w) > mx)\r
+ x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w);\r
+\r
+ if ((y + s.vp_offset_y + h) > my)\r
+ y = Math.max(0, (my - s.vp_offset_y) - h);\r
+ }\r
+\r
+ DOM.setStyles(co, {left : x , top : y});\r
+ t.element.update();\r
+\r
+ t.isMenuVisible = 1;\r
+ t.mouseClickFunc = Event.add(co, t.fixIE ? 'mousedown' : 'click', function(e) {\r
+ var m;\r
+\r
+ e = e.target;\r
+\r
+ if (e && (e = DOM.getParent(e, 'TR')) && !DOM.hasClass(e, cp + 'ItemSub')) {\r
+ m = t.items[e.id];\r
+\r
+ if (m.isDisabled())\r
+ return;\r
+\r
+ dm = t;\r
+\r
+ while (dm) {\r
+ if (dm.hideMenu)\r
+ dm.hideMenu();\r
+\r
+ dm = dm.settings.parent;\r
+ }\r
+\r
+ if (m.settings.onclick)\r
+ m.settings.onclick(e);\r
+\r
+ return Event.cancel(e); // Cancel to fix onbeforeunload problem\r
+ }\r
+ });\r
+\r
+ if (t.hasMenus()) {\r
+ t.mouseOverFunc = Event.add(co, 'mouseover', function(e) {\r
+ var m, r, mi;\r
+\r
+ e = e.target;\r
+ if (e && (e = DOM.getParent(e, 'TR'))) {\r
+ m = t.items[e.id];\r
+\r
+ if (t.lastMenu)\r
+ t.lastMenu.collapse(1);\r
+\r
+ if (m.isDisabled())\r
+ return;\r
+\r
+ if (e && DOM.hasClass(e, cp + 'ItemSub')) {\r
+ //p = DOM.getPos(s.container);\r
+ r = DOM.getRect(e);\r
+ m.showMenu((r.x + r.w - ot), r.y - ot, r.x);\r
+ t.lastMenu = m;\r
+ DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive');\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ t.onShowMenu.dispatch(t);\r
+\r
+ if (s.keyboard_focus) {\r
+ Event.add(co, 'keydown', t._keyHandler, t);\r
+ DOM.select('a', 'menu_' + t.id)[0].focus(); // Select first link\r
+ }\r
+ },\r
+\r
+ hideMenu : function(c) {\r
+ var t = this, co = DOM.get('menu_' + t.id), e;\r
+\r
+ if (!t.isMenuVisible)\r
+ return;\r
+\r
+ Event.remove(co, 'mouseover', t.mouseOverFunc);\r
+ Event.remove(co, t.fixIE ? 'mousedown' : 'click', t.mouseClickFunc);\r
+ Event.remove(co, 'keydown', t._keyHandler);\r
+ DOM.hide(co);\r
+ t.isMenuVisible = 0;\r
+\r
+ if (!c)\r
+ t.collapse(1);\r
+\r
+ if (t.element)\r
+ t.element.hide();\r
+\r
+ if (e = DOM.get(t.id))\r
+ DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive');\r
+\r
+ t.onHideMenu.dispatch(t);\r
+ },\r
+\r
+ add : function(o) {\r
+ var t = this, co;\r
+\r
+ o = t.parent(o);\r
+\r
+ if (t.isRendered && (co = DOM.get('menu_' + t.id)))\r
+ t._add(DOM.select('tbody', co)[0], o);\r
+\r
+ return o;\r
+ },\r
+\r
+ collapse : function(d) {\r
+ this.parent(d);\r
+ this.hideMenu(1);\r
+ },\r
+\r
+ remove : function(o) {\r
+ DOM.remove(o.id);\r
+ this.destroy();\r
+\r
+ return this.parent(o);\r
+ },\r
+\r
+ destroy : function() {\r
+ var t = this, co = DOM.get('menu_' + t.id);\r
+\r
+ Event.remove(co, 'mouseover', t.mouseOverFunc);\r
+ Event.remove(co, 'click', t.mouseClickFunc);\r
+\r
+ if (t.element)\r
+ t.element.remove();\r
+\r
+ DOM.remove(co);\r
+ },\r
+\r
+ renderNode : function() {\r
+ var t = this, s = t.settings, n, tb, co, w;\r
+\r
+ w = DOM.create('div', {id : 'menu_' + t.id, 'class' : s['class'], 'style' : 'position:absolute;left:0;top:0;z-index:200000'});\r
+ co = DOM.add(w, 'div', {id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')});\r
+ t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});\r
+\r
+ if (s.menu_line)\r
+ DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'});\r
+\r
+// n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'});\r
+ n = DOM.add(co, 'table', {id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0});\r
+ tb = DOM.add(n, 'tbody');\r
+\r
+ each(t.items, function(o) {\r
+ t._add(tb, o);\r
+ });\r
+\r
+ t.rendered = true;\r
+\r
+ return w;\r
+ },\r
+\r
+ // Internal functions\r
+\r
+ _keyHandler : function(e) {\r
+ // Accessibility feature\r
+ if (e.keyCode == 27)\r
+ this.hideMenu();\r
+ },\r
+\r
+ _add : function(tb, o) {\r
+ var n, s = o.settings, a, ro, it, cp = this.classPrefix;\r
+\r
+ if (s.separator) {\r
+ ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'});\r
+ DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'});\r
+\r
+ if (n = ro.previousSibling)\r
+ DOM.addClass(n, 'mceLast');\r
+\r
+ return;\r
+ }\r
+\r
+ n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'});\r
+ n = it = DOM.add(n, 'td');\r
+ n = a = DOM.add(n, 'a', {href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'});\r
+\r
+ DOM.addClass(it, s['class']);\r
+// n = DOM.add(n, 'span', {'class' : 'item'});\r
+ DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')});\r
+ n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title);\r
+\r
+ if (o.settings.style)\r
+ DOM.setAttrib(n, 'style', o.settings.style);\r
+\r
+ if (tb.childNodes.length == 1)\r
+ DOM.addClass(ro, 'mceFirst');\r
+\r
+ if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator'))\r
+ DOM.addClass(ro, 'mceFirst');\r
+\r
+ if (o.collapse)\r
+ DOM.addClass(ro, cp + 'ItemSub');\r
+\r
+ if (n = ro.previousSibling)\r
+ DOM.removeClass(n, 'mceLast');\r
+\r
+ DOM.addClass(ro, 'mceLast');\r
+ }\r
+\r
+ });\r
+})();\r
+/* file:jscripts/tiny_mce/classes/ui/Button.js */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM;\r
+\r
+ tinymce.create('tinymce.ui.Button:tinymce.ui.Control', {\r
+ Button : function(id, s) {\r
+ this.parent(id, s);\r
+ this.classPrefix = 'mceButton';\r
+ },\r
+\r
+ renderHTML : function() {\r
+ var cp = this.classPrefix, s = this.settings, h = '<a id="' + this.id + '" href="javascript:;" class="' + cp + ' ' + cp + 'Enabled ' + s['class'] + '" onmousedown="return false;" onclick="return false;" title="' + DOM.encode(s.title) + '">';\r
+\r
+ if (s.image)\r
+ h += '<img class="mceIcon" src="' + s.image + '" /></a>';\r
+ else\r
+ h += '<span class="mceIcon ' + s['class'] + '"></span></a>';\r
+\r
+ return h;\r
+ },\r
+\r
+ postRender : function() {\r
+ var t = this, s = t.settings;\r
+\r
+ tinymce.dom.Event.add(t.id, 'click', function(e) {\r
+ if (!t.isDisabled())\r
+ return s.onclick.call(s.scope, e);\r
+ });\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/ui/ListBox.js */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;\r
+\r
+ tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {\r
+ ListBox : function(id, s) {\r
+ var t = this;\r
+\r
+ t.parent(id, s);\r
+ t.items = [];\r
+ t.onChange = new Dispatcher(t);\r
+ t.onPostRender = new Dispatcher(t);\r
+ t.onAdd = new Dispatcher(t);\r
+ t.onRenderMenu = new tinymce.util.Dispatcher(this);\r
+ t.classPrefix = 'mceListBox';\r
+ },\r
+\r
+ select : function(v) {\r
+ var t = this, e, fv;\r
+\r
+ // Do we need to do something?\r
+ if (v != t.selectedValue) {\r
+ e = DOM.get(t.id + '_text');\r
+ t.selectedValue = v;\r
+\r
+ // Find item\r
+ each(t.items, function(o) {\r
+ if (o.value == v) {\r
+ DOM.setHTML(e, DOM.encode(o.title));\r
+ fv = 1;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ // If no item was found then present title\r
+ if (!fv) {\r
+ DOM.setHTML(e, DOM.encode(t.settings.title));\r
+ DOM.addClass(e, 'mceTitle');\r
+ e = 0;\r
+ return;\r
+ } else\r
+ DOM.removeClass(e, 'mceTitle');\r
+ }\r
+\r
+ e = 0;\r
+ },\r
+\r
+ add : function(n, v, o) {\r
+ var t = this;\r
+\r
+ o = o || {};\r
+ o = tinymce.extend(o, {\r
+ title : n,\r
+ value : v\r
+ });\r
+\r
+ t.items.push(o);\r
+ t.onAdd.dispatch(t, o);\r
+ },\r
+\r
+ getLength : function() {\r
+ return this.items.length;\r
+ },\r
+\r
+ renderHTML : function() {\r
+ var h = '', t = this, s = t.settings, cp = t.classPrefix;\r
+\r
+ h = '<table id="' + t.id + '" cellpadding="0" cellspacing="0" class="' + cp + ' ' + cp + 'Enabled' + (s['class'] ? (' ' + s['class']) : '') + '"><tbody><tr>';\r
+ h += '<td>' + DOM.createHTML('a', {id : t.id + '_text', href : 'javascript:;', 'class' : 'mceText', onclick : "return false;", onmousedown : 'return false;'}, DOM.encode(t.settings.title)) + '</td>';\r
+ h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', tabindex : -1, href : 'javascript:;', 'class' : 'mceOpen', onclick : "return false;", onmousedown : 'return false;'}, '<span></span>') + '</td>';\r
+ h += '</tr></tbody></table>';\r
+\r
+ return h;\r
+ },\r
+\r
+ showMenu : function() {\r
+ var t = this, p1, p2, e = DOM.get(this.id), m;\r
+\r
+ if (t.isDisabled() || t.items.length == 0)\r
+ return;\r
+\r
+ if (!t.isMenuRendered) {\r
+ t.renderMenu();\r
+ t.isMenuRendered = true;\r
+ }\r
+\r
+ p1 = DOM.getPos(this.settings.menu_container);\r
+ p2 = DOM.getPos(e);\r
+\r
+ m = t.menu;\r
+ m.settings.offset_x = p2.x;\r
+ m.settings.offset_y = p2.y;\r
+ m.settings.keyboard_focus = t._focused;\r
+\r
+ // Select in menu\r
+ if (t.oldID)\r
+ m.items[t.oldID].setSelected(0);\r
+\r
+ each(t.items, function(o) {\r
+ if (o.value === t.selectedValue) {\r
+ m.items[o.id].setSelected(1);\r
+ t.oldID = o.id;\r
+ }\r
+ });\r
+\r
+ m.showMenu(0, e.clientHeight);\r
+\r
+ Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
+ DOM.addClass(t.id, t.classPrefix + 'Selected');\r
+ },\r
+\r
+ hideMenu : function(e) {\r
+ var t = this;\r
+\r
+ if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceMenu');})) {\r
+ DOM.removeClass(t.id, t.classPrefix + 'Selected');\r
+ Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
+\r
+ if (t.menu)\r
+ t.menu.hideMenu();\r
+ }\r
+ },\r
+\r
+ renderMenu : function() {\r
+ var t = this, m;\r
+\r
+ m = t.settings.control_manager.createDropMenu(t.id + '_menu', {\r
+ menu_line : 1,\r
+ 'class' : t.classPrefix + 'Menu mceNoIcons',\r
+ max_width : 150,\r
+ max_height : 150\r
+ });\r
+\r
+ m.onHideMenu.add(t.hideMenu, t);\r
+\r
+ m.add({\r
+ title : t.settings.title,\r
+ 'class' : 'mceMenuItemTitle'\r
+ }).setDisabled(1);\r
+\r
+ each(t.items, function(o) {\r
+ o.id = DOM.uniqueId();\r
+ o.onclick = function() {\r
+ if (t.settings.onselect(o.value) !== false)\r
+ t.select(o.value); // Must be runned after\r
+ };\r
+\r
+ m.add(o);\r
+ });\r
+\r
+ t.onRenderMenu.dispatch(t, m);\r
+ t.menu = m;\r
+ },\r
+\r
+ postRender : function() {\r
+ var t = this, cp = t.classPrefix;\r
+\r
+ Event.add(t.id, 'click', t.showMenu, t);\r
+ Event.add(t.id + '_text', 'focus', function() {t._focused = 1;});\r
+ Event.add(t.id + '_text', 'blur', function() {t._focused = 0;});\r
+\r
+ // Old IE doesn't have hover on all elements\r
+ if (tinymce.isIE6 || !DOM.boxModel) {\r
+ Event.add(t.id, 'mouseover', function() {\r
+ if (!DOM.hasClass(t.id, cp + 'Disabled'))\r
+ DOM.addClass(t.id, cp + 'Hover');\r
+ });\r
+\r
+ Event.add(t.id, 'mouseout', function() {\r
+ if (!DOM.hasClass(t.id, cp + 'Disabled'))\r
+ DOM.removeClass(t.id, cp + 'Hover');\r
+ });\r
+ }\r
+\r
+ t.onPostRender.dispatch(t, DOM.get(t.id));\r
+ },\r
+\r
+ destroy : function() {\r
+ this.parent();\r
+\r
+ Event.clear(this.id + '_text');\r
+ }\r
+\r
+ });\r
+})();\r
+/* file:jscripts/tiny_mce/classes/ui/NativeListBox.js */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;\r
+\r
+ tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {\r
+ NativeListBox : function(id, s) {\r
+ this.parent(id, s);\r
+ this.classPrefix = 'mceNativeListBox';\r
+ },\r
+\r
+ setDisabled : function(s) {\r
+ DOM.get(this.id).disabled = s;\r
+ },\r
+\r
+ isDisabled : function() {\r
+ return DOM.get(this.id).disabled;\r
+ },\r
+\r
+ select : function(v) {\r
+ var e = DOM.get(this.id), ol = e.options;\r
+\r
+ v = '' + (v || '');\r
+\r
+ e.selectedIndex = 0;\r
+ each(ol, function(o, i) {\r
+ if (o.value == v) {\r
+ e.selectedIndex = i;\r
+ return false;\r
+ }\r
+ });\r
+ },\r
+\r
+ add : function(n, v, a) {\r
+ var o, t = this;\r
+\r
+ a = a || {};\r
+ a.value = v;\r
+\r
+ if (t.isRendered())\r
+ DOM.add(DOM.get(this.id), 'option', a, n);\r
+\r
+ o = {\r
+ title : n,\r
+ value : v,\r
+ attribs : a\r
+ };\r
+\r
+ t.items.push(o);\r
+ t.onAdd.dispatch(t, o);\r
+ },\r
+\r
+ getLength : function() {\r
+ return DOM.get(this.id).options.length - 1;\r
+ },\r
+\r
+ renderHTML : function() {\r
+ var h, t = this;\r
+\r
+ h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --');\r
+\r
+ each(t.items, function(it) {\r
+ h += DOM.createHTML('option', {value : it.value}, it.title);\r
+ });\r
+\r
+ h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox'}, h);\r
+\r
+ return h;\r
+ },\r
+\r
+ postRender : function() {\r
+ var t = this, ch;\r
+\r
+ t.rendered = true;\r
+\r
+ function onChange(e) {\r
+ var v = e.target.options[e.target.selectedIndex].value;\r
+\r
+ t.onChange.dispatch(t, v);\r
+\r
+ if (t.settings.onselect)\r
+ t.settings.onselect(v);\r
+ };\r
+\r
+ Event.add(t.id, 'change', onChange);\r
+\r
+ // Accessibility keyhandler\r
+ Event.add(t.id, 'keydown', function(e) {\r
+ var bf;\r
+\r
+ Event.remove(t.id, 'change', ch);\r
+\r
+ bf = Event.add(t.id, 'blur', function() {\r
+ Event.add(t.id, 'change', onChange);\r
+ Event.remove(t.id, 'blur', bf);\r
+ });\r
+\r
+ if (e.keyCode == 13 || e.keyCode == 32) {\r
+ onChange(e);\r
+ return Event.cancel(e);\r
+ }\r
+ });\r
+\r
+ t.onPostRender.dispatch(t, DOM.get(t.id));\r
+ }\r
+\r
+ });\r
+})();\r
+/* file:jscripts/tiny_mce/classes/ui/MenuButton.js */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', {\r
+ MenuButton : function(id, s) {\r
+ this.parent(id, s);\r
+ this.onRenderMenu = new tinymce.util.Dispatcher(this);\r
+ s.menu_container = s.menu_container || DOM.doc.body;\r
+ },\r
+\r
+ showMenu : function() {\r
+ var t = this, p1, p2, e = DOM.get(t.id), m;\r
+\r
+ if (t.isDisabled())\r
+ return;\r
+\r
+ if (!t.isMenuRendered) {\r
+ t.renderMenu();\r
+ t.isMenuRendered = true;\r
+ }\r
+\r
+ p1 = DOM.getPos(t.settings.menu_container);\r
+ p2 = DOM.getPos(e);\r
+\r
+ m = t.menu;\r
+ m.settings.offset_x = p2.x;\r
+ m.settings.offset_y = p2.y;\r
+ m.settings.vp_offset_x = p2.x;\r
+ m.settings.vp_offset_y = p2.y;\r
+ m.settings.keyboard_focus = t._focused;\r
+ m.showMenu(0, e.clientHeight);\r
+\r
+ Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
+ t.setState('Selected', 1);\r
+ },\r
+\r
+ renderMenu : function() {\r
+ var t = this, m;\r
+\r
+ m = t.settings.control_manager.createDropMenu(t.id + '_menu', {\r
+ menu_line : 1,\r
+ 'class' : this.classPrefix + 'Menu',\r
+ icons : t.settings.icons\r
+ });\r
+\r
+ m.onHideMenu.add(t.hideMenu, t);\r
+\r
+ t.onRenderMenu.dispatch(t, m);\r
+ t.menu = m;\r
+ },\r
+\r
+ hideMenu : function(e) {\r
+ var t = this;\r
+\r
+ if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceMenu');})) {\r
+ t.setState('Selected', 0);\r
+ Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
+ if (t.menu)\r
+ t.menu.hideMenu();\r
+ }\r
+ },\r
+\r
+ postRender : function() {\r
+ var t = this, s = t.settings;\r
+\r
+ Event.add(t.id, 'click', function() {\r
+ if (!t.isDisabled()) {\r
+ if (s.onclick)\r
+ s.onclick(t.value);\r
+\r
+ t.showMenu();\r
+ }\r
+ });\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/ui/SplitButton.js */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', {\r
+ SplitButton : function(id, s) {\r
+ this.parent(id, s);\r
+ this.classPrefix = 'mceSplitButton';\r
+ },\r
+\r
+ renderHTML : function() {\r
+ var h, t = this, s = t.settings, h1;\r
+\r
+ h = '<tbody><tr>';\r
+\r
+ if (s.image)\r
+ h1 = DOM.createHTML('img ', {src : s.image, 'class' : 'mceAction ' + s['class']});\r
+ else\r
+ h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, '');\r
+\r
+ h += '<td>' + DOM.createHTML('a', {id : t.id + '_action', href : 'javascript:;', 'class' : 'mceAction ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';\r
+ \r
+ h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']});\r
+ h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', href : 'javascript:;', 'class' : 'mceOpen ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';\r
+\r
+ h += '</tr></tbody>';\r
+\r
+ return DOM.createHTML('table', {id : t.id, 'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', onmousedown : 'return false;', title : s.title}, h);\r
+ },\r
+\r
+ postRender : function() {\r
+ var t = this, s = t.settings;\r
+\r
+ if (s.onclick) {\r
+ Event.add(t.id + '_action', 'click', function() {\r
+ if (!t.isDisabled())\r
+ s.onclick(t.value);\r
+ });\r
+ }\r
+\r
+ Event.add(t.id + '_open', 'click', t.showMenu, t);\r
+ Event.add(t.id + '_open', 'focus', function() {t._focused = 1;});\r
+ Event.add(t.id + '_open', 'blur', function() {t._focused = 0;});\r
+\r
+ // Old IE doesn't have hover on all elements\r
+ if (tinymce.isIE6 || !DOM.boxModel) {\r
+ Event.add(t.id, 'mouseover', function() {\r
+ if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))\r
+ DOM.addClass(t.id, 'mceSplitButtonHover');\r
+ });\r
+\r
+ Event.add(t.id, 'mouseout', function() {\r
+ if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))\r
+ DOM.removeClass(t.id, 'mceSplitButtonHover');\r
+ });\r
+ }\r
+ },\r
+\r
+ destroy : function() {\r
+ this.parent();\r
+\r
+ Event.clear(this.id + '_action');\r
+ Event.clear(this.id + '_open');\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/ui/ColorSplitButton.js */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', {\r
+ ColorSplitButton : function(id, s) {\r
+ var t = this;\r
+\r
+ t.parent(id, s);\r
+\r
+ t.settings = s = tinymce.extend({\r
+ colors : '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',\r
+ grid_width : 8,\r
+ default_color : '#888888'\r
+ }, t.settings);\r
+\r
+ t.value = s.default_color;\r
+ },\r
+\r
+ showMenu : function() {\r
+ var t = this, r, p, e, p2;\r
+\r
+ if (t.isDisabled())\r
+ return;\r
+\r
+ if (!t.isMenuRendered) {\r
+ t.renderMenu();\r
+ t.isMenuRendered = true;\r
+ }\r
+\r
+ e = DOM.get(t.id);\r
+ DOM.show(t.id + '_menu');\r
+ DOM.addClass(e, 'mceSplitButtonSelected');\r
+ p2 = DOM.getPos(e);\r
+ DOM.setStyles(t.id + '_menu', {\r
+ left : p2.x,\r
+ top : p2.y + e.clientHeight,\r
+ zIndex : 200000\r
+ });\r
+ e = 0;\r
+\r
+ Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
+\r
+ if (t._focused) {\r
+ t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) {\r
+ if (e.keyCode == 27)\r
+ t.hideMenu();\r
+ });\r
+\r
+ DOM.select('a', t.id + '_menu')[0].focus(); // Select first link\r
+ }\r
+ },\r
+\r
+ hideMenu : function(e) {\r
+ var t = this;\r
+\r
+ if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceSplitButtonMenu');})) {\r
+ DOM.removeClass(t.id, 'mceSplitButtonSelected');\r
+ Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
+ Event.remove(t.id + '_menu', 'keydown', t._keyHandler);\r
+ DOM.hide(t.id + '_menu');\r
+ }\r
+ },\r
+\r
+ renderMenu : function() {\r
+ var t = this, m, i = 0, s = t.settings, n, tb, tr, w;\r
+\r
+ w = DOM.add(s.menu_container, 'div', {id : t.id + '_menu', 'class' : s['menu_class'] + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'});\r
+ m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'});\r
+ DOM.add(m, 'span', {'class' : 'mceMenuLine'});\r
+\r
+ n = DOM.add(m, 'table', {'class' : 'mceColorSplitMenu'});\r
+ tb = DOM.add(n, 'tbody');\r
+\r
+ // Generate color grid\r
+ i = 0;\r
+ each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) {\r
+ c = c.replace(/^#/, '');\r
+\r
+ if (!i--) {\r
+ tr = DOM.add(tb, 'tr');\r
+ i = s.grid_width - 1;\r
+ }\r
+\r
+ n = DOM.add(tr, 'td');\r
+\r
+ n = DOM.add(n, 'a', {\r
+ href : 'javascript:;',\r
+ style : {\r
+ backgroundColor : '#' + c\r
+ },\r
+ mce_color : '#' + c\r
+ });\r
+ });\r
+\r
+ if (s.more_colors_func) {\r
+ n = DOM.add(tb, 'tr');\r
+ n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'});\r
+ n = DOM.add(n, 'a', {id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title);\r
+\r
+ Event.add(n, 'click', function(e) {\r
+ s.more_colors_func.call(s.more_colors_scope || this);\r
+ return Event.cancel(e); // Cancel to fix onbeforeunload problem\r
+ });\r
+ }\r
+\r
+ DOM.addClass(m, 'mceColorSplitMenu');\r
+\r
+ Event.add(t.id + '_menu', 'click', function(e) {\r
+ var c;\r
+\r
+ e = e.target;\r
+\r
+ if (e.nodeName == 'A' && (c = e.getAttribute('mce_color')))\r
+ t.setColor(c);\r
+ });\r
+\r
+ return w;\r
+ },\r
+\r
+ setColor : function(c) {\r
+ var t = this;\r
+\r
+ DOM.setStyle(t.id + '_preview', 'backgroundColor', c);\r
+\r
+ t.value = c;\r
+ t.hideMenu();\r
+ t.settings.onselect(c);\r
+ },\r
+\r
+ postRender : function() {\r
+ var t = this, id = t.id;\r
+\r
+ t.parent();\r
+ DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'});\r
+ },\r
+\r
+ destroy : function() {\r
+ this.parent();\r
+\r
+ Event.clear(this.id + '_menu');\r
+ Event.clear(this.id + '_more');\r
+ DOM.remove(this.id + '_menu');\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/ui/Toolbar.js */\r
+\r
+tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {\r
+ renderHTML : function() {\r
+ var t = this, h = '', c, co, dom = tinymce.DOM, s = t.settings, i, pr, nx, cl;\r
+\r
+ cl = t.controls;\r
+ for (i=0; i<cl.length; i++) {\r
+ // Get current control, prev control, next control and if the control is a list box or not\r
+ co = cl[i];\r
+ pr = cl[i - 1];\r
+ nx = cl[i + 1];\r
+\r
+ // Add toolbar start\r
+ if (i === 0) {\r
+ c = 'mceToolbarStart';\r
+\r
+ if (co.Button)\r
+ c += ' mceToolbarStartButton';\r
+ else if (co.SplitButton)\r
+ c += ' mceToolbarStartSplitButton';\r
+ else if (co.ListBox)\r
+ c += ' mceToolbarStartListBox';\r
+\r
+ h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));\r
+ }\r
+\r
+ // Add toolbar end before list box and after the previous button\r
+ // This is to fix the o2k7 editor skins\r
+ if (pr && co.ListBox) {\r
+ if (pr.Button || pr.SplitButton)\r
+ h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '<!-- IE -->'));\r
+ }\r
+\r
+ // Render control HTML\r
+\r
+ // IE 8 quick fix, needed to propertly generate a hit area for anchors\r
+ if (dom.stdMode)\r
+ h += '<td style="position: relative">' + co.renderHTML() + '</td>';\r
+ else\r
+ h += '<td>' + co.renderHTML() + '</td>';\r
+\r
+ // Add toolbar start after list box and before the next button\r
+ // This is to fix the o2k7 editor skins\r
+ if (nx && co.ListBox) {\r
+ if (nx.Button || nx.SplitButton)\r
+ h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '<!-- IE -->'));\r
+ }\r
+ }\r
+\r
+ c = 'mceToolbarEnd';\r
+\r
+ if (co.Button)\r
+ c += ' mceToolbarEndButton';\r
+ else if (co.SplitButton)\r
+ c += ' mceToolbarEndSplitButton';\r
+ else if (co.ListBox)\r
+ c += ' mceToolbarEndListBox';\r
+\r
+ h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));\r
+\r
+ return dom.createHTML('table', {id : t.id, 'class' : 'mceToolbar' + (s['class'] ? ' ' + s['class'] : ''), cellpadding : '0', cellspacing : '0', align : t.settings.align || ''}, '<tbody><tr>' + h + '</tr></tbody>');\r
+ }\r
+\r
+ });\r
+\r
+/* file:jscripts/tiny_mce/classes/AddOnManager.js */\r
+\r
+(function() {\r
+ var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each;\r
+\r
+ tinymce.create('tinymce.AddOnManager', {\r
+ items : [],\r
+ urls : {},\r
+ lookup : {},\r
+ onAdd : new Dispatcher(this),\r
+\r
+ get : function(n) {\r
+ return this.lookup[n];\r
+ },\r
+\r
+ requireLangPack : function(n) {\r
+ var u, s;\r
+\r
+ if (tinymce.EditorManager.settings) {\r
+ u = this.urls[n] + '/langs/' + tinymce.EditorManager.settings.language + '.js';\r
+ s = tinymce.EditorManager.settings;\r
+\r
+ if (s) {\r
+ if (!tinymce.dom.Event.domLoaded && !s.strict_mode)\r
+ tinymce.ScriptLoader.load(u);\r
+ else\r
+ tinymce.ScriptLoader.add(u);\r
+ }\r
+ }\r
+ },\r
+\r
+ add : function(id, o) {\r
+ this.items.push(o);\r
+ this.lookup[id] = o;\r
+ this.onAdd.dispatch(this, id, o);\r
+\r
+ return o;\r
+ },\r
+\r
+ load : function(n, u, cb, s) {\r
+ var t = this;\r
+\r
+ if (t.urls[n])\r
+ return;\r
+\r
+ if (u.indexOf('/') != 0 && u.indexOf('://') == -1)\r
+ u = tinymce.baseURL + '/' + u;\r
+\r
+ t.urls[n] = u.substring(0, u.lastIndexOf('/'));\r
+ tinymce.ScriptLoader.add(u, cb, s);\r
+ }\r
+\r
+ });\r
+\r
+ // Create plugin and theme managers\r
+ tinymce.PluginManager = new tinymce.AddOnManager();\r
+ tinymce.ThemeManager = new tinymce.AddOnManager();\r
+}());\r
+/* file:jscripts/tiny_mce/classes/EditorManager.js */\r
+\r
+(function() {\r
+ // Shorten names\r
+ var each = tinymce.each, extend = tinymce.extend, DOM = tinymce.DOM, Event = tinymce.dom.Event, ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, explode = tinymce.explode;\r
+\r
+ tinymce.create('static tinymce.EditorManager', {\r
+ editors : {},\r
+ i18n : {},\r
+ activeEditor : null,\r
+\r
+ preInit : function() {\r
+ var t = this, lo = window.location;\r
+\r
+ // Setup some URLs where the editor API is located and where the document is\r
+ tinymce.documentBaseURL = lo.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');\r
+ if (!/[\/\\]$/.test(tinymce.documentBaseURL))\r
+ tinymce.documentBaseURL += '/';\r
+\r
+ tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);\r
+ tinymce.EditorManager.baseURI = new tinymce.util.URI(tinymce.baseURL);\r
+\r
+ // Setup document domain\r
+ if (tinymce.EditorManager.baseURI.host != lo.hostname && lo.hostname)\r
+ document.domain = tinymce.relaxedDomain = lo.hostname.replace(/.*\.(.+\..+)$/, '$1');\r
+\r
+ // Add before unload listener\r
+ // This was required since IE was leaking memory if you added and removed beforeunload listeners\r
+ // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event\r
+ t.onBeforeUnload = new tinymce.util.Dispatcher(t);\r
+\r
+ // Must be on window or IE will leak if the editor is placed in frame or iframe\r
+ Event.add(window, 'beforeunload', function(e) {\r
+ t.onBeforeUnload.dispatch(t, e);\r
+ });\r
+ },\r
+\r
+ init : function(s) {\r
+ var t = this, pl, sl = tinymce.ScriptLoader, c;\r
+\r
+ function execCallback(se, n, s) {\r
+ var f = se[n];\r
+\r
+ if (!f)\r
+ return;\r
+\r
+ if (tinymce.is(f, 'string')) {\r
+ s = f.replace(/\.\w+$/, '');\r
+ s = s ? tinymce.resolve(s) : 0;\r
+ f = tinymce.resolve(f);\r
+ }\r
+\r
+ return f.apply(s || this, Array.prototype.slice.call(arguments, 2));\r
+ };\r
+\r
+ s = extend({\r
+ theme : "simple",\r
+ language : "en",\r
+ strict_loading_mode : document.contentType == 'application/xhtml+xml'\r
+ }, s);\r
+\r
+ t.settings = s;\r
+\r
+ // If page not loaded and strict mode isn't enabled then load them\r
+ if (!Event.domLoaded && !s.strict_loading_mode) {\r
+ // Load language\r
+ if (s.language)\r
+ sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');\r
+\r
+ // Load theme\r
+ if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])\r
+ ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');\r
+\r
+ // Load plugins\r
+ if (s.plugins) {\r
+ pl = explode(s.plugins);\r
+\r
+ // Load compat2x first\r
+ if (tinymce.inArray(pl, 'compat2x') != -1)\r
+ PluginManager.load('compat2x', 'plugins/compat2x/editor_plugin' + tinymce.suffix + '.js');\r
+\r
+ // Load rest if plugins\r
+ each(pl, function(v) {\r
+ if (v && v.charAt(0) != '-' && !PluginManager.urls[v]) {\r
+ // Skip safari plugin for other browsers\r
+ if (!tinymce.isWebKit && v == 'safari')\r
+ return;\r
+\r
+ PluginManager.load(v, 'plugins/' + v + '/editor_plugin' + tinymce.suffix + '.js');\r
+ }\r
+ });\r
+ }\r
+\r
+ sl.loadQueue();\r
+ }\r
+\r
+ // Legacy call\r
+ Event.add(document, 'init', function() {\r
+ var l, co;\r
+\r
+ execCallback(s, 'onpageload');\r
+\r
+ // Verify that it's a valid browser\r
+ if (s.browsers) {\r
+ l = false;\r
+\r
+ each(explode(s.browsers), function(v) {\r
+ switch (v) {\r
+ case 'ie':\r
+ case 'msie':\r
+ if (tinymce.isIE)\r
+ l = true;\r
+ break;\r
+\r
+ case 'gecko':\r
+ if (tinymce.isGecko)\r
+ l = true;\r
+ break;\r
+\r
+ case 'safari':\r
+ case 'webkit':\r
+ if (tinymce.isWebKit)\r
+ l = true;\r
+ break;\r
+\r
+ case 'opera':\r
+ if (tinymce.isOpera)\r
+ l = true;\r
+\r
+ break;\r
+ }\r
+ });\r
+\r
+ // Not a valid one\r
+ if (!l)\r
+ return;\r
+ }\r
+\r
+ switch (s.mode) {\r
+ case "exact":\r
+ l = s.elements || '';\r
+\r
+ if(l.length > 0) {\r
+ each(explode(l), function(v) {\r
+ if (DOM.get(v))\r
+ new tinymce.Editor(v, s).render(1);\r
+ else {\r
+ c = 0;\r
+\r
+ each(document.forms, function(f) {\r
+ each(f.elements, function(e) {\r
+ if (e.name === v) {\r
+ v = 'mce_editor_' + c;\r
+ DOM.setAttrib(e, 'id', v);\r
+ new tinymce.Editor(v, s).render(1);\r
+ }\r
+ });\r
+ });\r
+ }\r
+ });\r
+ }\r
+ break;\r
+\r
+ case "textareas":\r
+ case "specific_textareas":\r
+ function hasClass(n, c) {\r
+ return new RegExp('\\b' + c + '\\b', 'g').test(n.className);\r
+ };\r
+\r
+ each(DOM.select('textarea'), function(v) {\r
+ if (s.editor_deselector && hasClass(v, s.editor_deselector))\r
+ return;\r
+\r
+ if (!s.editor_selector || hasClass(v, s.editor_selector)) {\r
+ v.id = v.id || v.name;\r
+\r
+ // Generate unique name if missing or already exists\r
+ if (!v.id || t.get(v.id))\r
+ v.id = DOM.uniqueId();\r
+\r
+ new tinymce.Editor(v.id, s).render(1);\r
+ }\r
+ });\r
+ break;\r
+ }\r
+\r
+ // Call onInit when all editors are initialized\r
+ if (s.oninit) {\r
+ l = co = 0;\r
+\r
+ each (t.editors, function(ed) {\r
+ co++;\r
+\r
+ if (!ed.initialized) {\r
+ // Wait for it\r
+ ed.onInit.add(function() {\r
+ l++;\r
+\r
+ // All done\r
+ if (l == co)\r
+ execCallback(s, 'oninit');\r
+ });\r
+ } else\r
+ l++;\r
+\r
+ // All done\r
+ if (l == co)\r
+ execCallback(s, 'oninit'); \r
+ });\r
+ }\r
+ });\r
+ },\r
+\r
+ get : function(id) {\r
+ return this.editors[id];\r
+ },\r
+\r
+ getInstanceById : function(id) {\r
+ return this.get(id);\r
+ },\r
+\r
+ add : function(e) {\r
+ this.editors[e.id] = e;\r
+ this._setActive(e);\r
+\r
+ return e;\r
+ },\r
+\r
+ remove : function(e) {\r
+ var t = this;\r
+\r
+ // Not in the collection\r
+ if (!t.editors[e.id])\r
+ return null;\r
+\r
+ delete t.editors[e.id];\r
+\r
+ // Select another editor since the active one was removed\r
+ if (t.activeEditor == e) {\r
+ each(t.editors, function(e) {\r
+ t._setActive(e);\r
+ return false; // Break\r
+ });\r
+ }\r
+\r
+ e.destroy();\r
+\r
+ return e;\r
+ },\r
+\r
+ execCommand : function(c, u, v) {\r
+ var t = this, ed = t.get(v), w;\r
+\r
+ // Manager commands\r
+ switch (c) {\r
+ case "mceFocus":\r
+ ed.focus();\r
+ return true;\r
+\r
+ case "mceAddEditor":\r
+ case "mceAddControl":\r
+ new tinymce.Editor(v, t.settings).render();\r
+ return true;\r
+\r
+ case "mceAddFrameControl":\r
+ w = v.window;\r
+\r
+ // Add tinyMCE global instance and tinymce namespace to specified window\r
+ w.tinyMCE = tinyMCE;\r
+ w.tinymce = tinymce;\r
+\r
+ tinymce.DOM.doc = w.document;\r
+ tinymce.DOM.win = w;\r
+\r
+ ed = new tinymce.Editor(v.element_id, v);\r
+ ed.render();\r
+\r
+ // Fix IE memory leaks\r
+ if (tinymce.isIE) {\r
+ function clr() {\r
+ ed.destroy();\r
+ w.detachEvent('onunload', clr);\r
+ w = w.tinyMCE = w.tinymce = null; // IE leak\r
+ };\r
+\r
+ w.attachEvent('onunload', clr);\r
+ }\r
+\r
+ v.page_window = null;\r
+\r
+ return true;\r
+\r
+ case "mceRemoveEditor":\r
+ case "mceRemoveControl":\r
+ ed.remove();\r
+ return true;\r
+\r
+ case 'mceToggleEditor':\r
+ if (!ed) {\r
+ t.execCommand('mceAddControl', 0, v);\r
+ return true;\r
+ }\r
+\r
+ if (ed.isHidden())\r
+ ed.show();\r
+ else\r
+ ed.hide();\r
+\r
+ return true;\r
+ }\r
+\r
+ // Run command on active editor\r
+ if (t.activeEditor)\r
+ return t.activeEditor.execCommand(c, u, v);\r
+\r
+ return false;\r
+ },\r
+\r
+ execInstanceCommand : function(id, c, u, v) {\r
+ var ed = this.get(id);\r
+\r
+ if (ed)\r
+ return ed.execCommand(c, u, v);\r
+\r
+ return false;\r
+ },\r
+\r
+ triggerSave : function() {\r
+ each(this.editors, function(e) {\r
+ e.save();\r
+ });\r
+ },\r
+\r
+ addI18n : function(p, o) {\r
+ var lo, i18n = this.i18n;\r
+\r
+ if (!tinymce.is(p, 'string')) {\r
+ each(p, function(o, lc) {\r
+ each(o, function(o, g) {\r
+ each(o, function(o, k) {\r
+ if (g === 'common')\r
+ i18n[lc + '.' + k] = o;\r
+ else\r
+ i18n[lc + '.' + g + '.' + k] = o;\r
+ });\r
+ });\r
+ });\r
+ } else {\r
+ each(o, function(o, k) {\r
+ i18n[p + '.' + k] = o;\r
+ });\r
+ }\r
+ },\r
+\r
+ // Private methods\r
+\r
+ _setActive : function(e) {\r
+ this.selectedInstance = this.activeEditor = e;\r
+ }\r
+\r
+ });\r
+\r
+ tinymce.EditorManager.preInit();\r
+})();\r
+\r
+// Short for editor manager window.tinyMCE is needed when TinyMCE gets loaded though a XHR call\r
+var tinyMCE = window.tinyMCE = tinymce.EditorManager;\r
+\r
+/* file:jscripts/tiny_mce/classes/Editor.js */\r
+\r
+(function() {\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, Dispatcher = tinymce.util.Dispatcher;\r
+ var each = tinymce.each, isGecko = tinymce.isGecko, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit;\r
+ var is = tinymce.is, ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, EditorManager = tinymce.EditorManager;\r
+ var inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode;\r
+\r
+ tinymce.create('tinymce.Editor', {\r
+ Editor : function(id, s) {\r
+ var t = this;\r
+\r
+ t.id = t.editorId = id;\r
+ t.execCommands = {};\r
+ t.queryStateCommands = {};\r
+ t.queryValueCommands = {};\r
+ t.plugins = {};\r
+\r
+ // Add events to the editor\r
+ each([\r
+ 'onPreInit',\r
+ 'onBeforeRenderUI',\r
+ 'onPostRender',\r
+ 'onInit',\r
+ 'onRemove',\r
+ 'onActivate',\r
+ 'onDeactivate',\r
+ 'onClick',\r
+ 'onEvent',\r
+ 'onMouseUp',\r
+ 'onMouseDown',\r
+ 'onDblClick',\r
+ 'onKeyDown',\r
+ 'onKeyUp',\r
+ 'onKeyPress',\r
+ 'onContextMenu',\r
+ 'onSubmit',\r
+ 'onReset',\r
+ 'onPaste',\r
+ 'onPreProcess',\r
+ 'onPostProcess',\r
+ 'onBeforeSetContent',\r
+ 'onBeforeGetContent',\r
+ 'onSetContent',\r
+ 'onGetContent',\r
+ 'onLoadContent',\r
+ 'onSaveContent',\r
+ 'onNodeChange',\r
+ 'onChange',\r
+ 'onBeforeExecCommand',\r
+ 'onExecCommand',\r
+ 'onUndo',\r
+ 'onRedo',\r
+ 'onVisualAid',\r
+ 'onSetProgressState'\r
+ ], function(e) {\r
+ t[e] = new Dispatcher(t);\r
+ });\r
+\r
+ // Default editor config\r
+ t.settings = s = extend({\r
+ id : id,\r
+ language : 'en',\r
+ docs_language : 'en',\r
+ theme : 'simple',\r
+ skin : 'default',\r
+ delta_width : 0,\r
+ delta_height : 0,\r
+ popup_css : '',\r
+ plugins : '',\r
+ document_base_url : tinymce.documentBaseURL,\r
+ add_form_submit_trigger : 1,\r
+ submit_patch : 1,\r
+ add_unload_trigger : 1,\r
+ convert_urls : 1,\r
+ relative_urls : 1,\r
+ remove_script_host : 1,\r
+ table_inline_editing : 0,\r
+ object_resizing : 1,\r
+ cleanup : 1,\r
+ accessibility_focus : 1,\r
+ custom_shortcuts : 1,\r
+ custom_undo_redo_keyboard_shortcuts : 1,\r
+ custom_undo_redo_restore_selection : 1,\r
+ custom_undo_redo : 1,\r
+ doctype : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',\r
+ visual_table_class : 'mceItemTable',\r
+ visual : 1,\r
+ inline_styles : true,\r
+ convert_fonts_to_spans : true,\r
+ font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',\r
+ apply_source_formatting : 1,\r
+ directionality : 'ltr',\r
+ forced_root_block : 'p',\r
+ valid_elements : '@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p[align],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote,-table[border=0|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value|_value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',\r
+ hidden_input : 1,\r
+ padd_empty_editor : 1,\r
+ render_ui : 1,\r
+ init_theme : 1,\r
+ force_p_newlines : 1,\r
+ indentation : '30px'\r
+ }, s);\r
+\r
+ // Setup URIs\r
+ t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {\r
+ base_uri : tinyMCE.baseURI\r
+ });\r
+ t.baseURI = EditorManager.baseURI;\r
+\r
+ // Call setup\r
+ t.execCallback('setup', t);\r
+ },\r
+\r
+ render : function(nst) {\r
+ var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader;\r
+\r
+ // Page is not loaded yet, wait for it\r
+ if (!Event.domLoaded) {\r
+ Event.add(document, 'init', function() {\r
+ t.render();\r
+ });\r
+ return;\r
+ }\r
+\r
+ // Force strict loading mode if render us called by user and not internally\r
+ if (!nst) {\r
+ s.strict_loading_mode = 1;\r
+ tinyMCE.settings = s;\r
+ }\r
+\r
+ // Element not found, then skip initialization\r
+ if (!t.getElement())\r
+ return;\r
+\r
+ if (s.strict_loading_mode) {\r
+ sl.settings.strict_mode = s.strict_loading_mode;\r
+ tinymce.DOM.settings.strict = 1;\r
+ }\r
+\r
+ // Add hidden input for non input elements inside form elements\r
+ if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form'))\r
+ DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id);\r
+\r
+ t.windowManager = new tinymce.WindowManager(t);\r
+\r
+ if (s.encoding == 'xml') {\r
+ t.onGetContent.add(function(ed, o) {\r
+ if (o.get)\r
+ o.content = DOM.encode(o.content);\r
+ });\r
+ }\r
+\r
+ if (s.add_form_submit_trigger) {\r
+ t.onSubmit.addToTop(function() {\r
+ if (t.initialized) {\r
+ t.save();\r
+ t.isNotDirty = 1;\r
+ }\r
+ });\r
+ }\r
+\r
+ if (s.add_unload_trigger) {\r
+ t._beforeUnload = tinyMCE.onBeforeUnload.add(function() {\r
+ if (t.initialized && !t.destroyed)\r
+ t.save({format : 'raw', no_events : true});\r
+ });\r
+ }\r
+\r
+ tinymce.addUnload(t.destroy, t);\r
+\r
+ if (s.submit_patch) {\r
+ t.onBeforeRenderUI.add(function() {\r
+ var n = t.getElement().form;\r
+\r
+ if (!n)\r
+ return;\r
+\r
+ // Already patched\r
+ if (n._mceOldSubmit)\r
+ return;\r
+\r
+ // Check page uses id="submit" or name="submit" for it's submit button\r
+ if (!n.submit.nodeType && !n.submit.length) {\r
+ t.formElement = n;\r
+ n._mceOldSubmit = n.submit;\r
+ n.submit = function() {\r
+ // Save all instances\r
+ EditorManager.triggerSave();\r
+ t.isNotDirty = 1;\r
+\r
+ return this._mceOldSubmit(this);\r
+ };\r
+ }\r
+\r
+ n = null;\r
+ });\r
+ }\r
+\r
+ // Load scripts\r
+ function loadScripts() {\r
+ if (s.language)\r
+ sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');\r
+\r
+ if (s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])\r
+ ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');\r
+\r
+ each(explode(s.plugins), function(p) {\r
+ if (p && p.charAt(0) != '-' && !PluginManager.urls[p]) {\r
+ // Skip safari plugin for other browsers\r
+ if (!isWebKit && p == 'safari')\r
+ return;\r
+\r
+ PluginManager.load(p, 'plugins/' + p + '/editor_plugin' + tinymce.suffix + '.js');\r
+ }\r
+ });\r
+\r
+ // Init when que is loaded\r
+ sl.loadQueue(function() {\r
+ if (s.ask) {\r
+ function ask() {\r
+ t.windowManager.confirm(t.getLang('edit_confirm'), function(s) {\r
+ if (s)\r
+ t.init();\r
+ else\r
+ Event.remove(t.id, 'focus', ask);\r
+ });\r
+ };\r
+\r
+ Event.add(t.id, 'focus', ask);\r
+ return;\r
+ }\r
+\r
+ if (!t.removed)\r
+ t.init();\r
+ });\r
+ };\r
+\r
+ // Load compat2x first\r
+ if (s.plugins.indexOf('compat2x') != -1) {\r
+ PluginManager.load('compat2x', 'plugins/compat2x/editor_plugin' + tinymce.suffix + '.js');\r
+ sl.loadQueue(loadScripts);\r
+ } else\r
+ loadScripts();\r
+ },\r
+\r
+ init : function() {\r
+ var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re;\r
+\r
+ EditorManager.add(t);\r
+\r
+ // Create theme\r
+ s.theme = s.theme.replace(/-/, '');\r
+ o = ThemeManager.get(s.theme);\r
+ t.theme = new o();\r
+\r
+ if (t.theme.init && s.init_theme)\r
+ t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));\r
+\r
+ // Create all plugins\r
+ each(explode(s.plugins.replace(/\-/g, '')), function(p) {\r
+ var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po;\r
+\r
+ if (c) {\r
+ po = new c(t, u);\r
+\r
+ t.plugins[p] = po;\r
+\r
+ if (po.init)\r
+ po.init(t, u);\r
+ }\r
+ });\r
+\r
+ // Setup popup CSS path(s)\r
+ if (s.popup_css)\r
+ s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css);\r
+ else\r
+ s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css");\r
+\r
+ if (s.popup_css_add)\r
+ s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add);\r
+\r
+ // Setup control factory\r
+ t.controlManager = new tinymce.ControlManager(t);\r
+ t.undoManager = new tinymce.UndoManager(t);\r
+\r
+ // Pass through\r
+ t.undoManager.onAdd.add(function(um, l) {\r
+ return t.onChange.dispatch(t, l, um);\r
+ });\r
+\r
+ t.undoManager.onUndo.add(function(um, l) {\r
+ return t.onUndo.dispatch(t, l, um);\r
+ });\r
+\r
+ t.undoManager.onRedo.add(function(um, l) {\r
+ return t.onRedo.dispatch(t, l, um);\r
+ });\r
+\r
+ if (s.custom_undo_redo) {\r
+ t.onExecCommand.add(function(ed, cmd, ui, val, a) {\r
+ if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))\r
+ t.undoManager.add();\r
+ });\r
+ }\r
+\r
+ t.onExecCommand.add(function(ed, c) {\r
+ // Don't refresh the select lists until caret move\r
+ if (!/^(FontName|FontSize)$/.test(c))\r
+ t.nodeChanged();\r
+ });\r
+\r
+ // Remove ghost selections on images and tables in Gecko\r
+ if (isGecko) {\r
+ function repaint(a, o) {\r
+ if (!o || !o.initial)\r
+ t.execCommand('mceRepaint');\r
+ };\r
+\r
+ t.onUndo.add(repaint);\r
+ t.onRedo.add(repaint);\r
+ t.onSetContent.add(repaint);\r
+ }\r
+\r
+ // Enables users to override the control factory\r
+ t.onBeforeRenderUI.dispatch(t, t.controlManager);\r
+\r
+ // Measure box\r
+ if (s.render_ui) {\r
+ w = s.width || e.style.width || e.clientWidth;\r
+ h = s.height || e.style.height || e.clientHeight;\r
+ t.orgDisplay = e.style.display;\r
+ re = /^[0-9\.]+(|px)$/i;\r
+\r
+ if (re.test('' + w))\r
+ w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100);\r
+\r
+ if (re.test('' + h))\r
+ h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100);\r
+\r
+ // Render UI\r
+ o = t.theme.renderUI({\r
+ targetNode : e,\r
+ width : w,\r
+ height : h,\r
+ deltaWidth : s.delta_width,\r
+ deltaHeight : s.delta_height\r
+ });\r
+\r
+ t.editorContainer = o.editorContainer;\r
+ }\r
+\r
+ \r
+ // Resize editor\r
+ DOM.setStyles(o.sizeContainer || o.editorContainer, {\r
+ width : w,\r
+ height : h\r
+ });\r
+\r
+ h = (o.iframeHeight || h) + ((h + '').indexOf('%') == -1 ? (o.deltaHeight || 0) : '');\r
+ if (h < 100)\r
+ h = 100;\r
+\r
+ t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="' + t.documentBaseURI.getURI() + '"></base>';\r
+ t.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';\r
+\r
+ if (tinymce.relaxedDomain)\r
+ t.iframeHTML += '<script type="text/javascript">document.domain = "' + tinymce.relaxedDomain + '";</script>';\r
+\r
+ bi = s.body_id || 'tinymce';\r
+ if (bi.indexOf('=') != -1) {\r
+ bi = t.getParam('body_id', '', 'hash');\r
+ bi = bi[t.id] || bi;\r
+ }\r
+\r
+ bc = s.body_class || '';\r
+ if (bc.indexOf('=') != -1) {\r
+ bc = t.getParam('body_class', '', 'hash');\r
+ bc = bc[t.id] || '';\r
+ }\r
+\r
+ t.iframeHTML += '</head><body id="' + bi + '" class="mceContentBody ' + bc + '"></body></html>';\r
+\r
+ // Domain relaxing enabled, then set document domain\r
+ if (tinymce.relaxedDomain) {\r
+ // We need to write the contents here in IE since multiple writes messes up refresh button and back button\r
+ if (isIE)\r
+ u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';\r
+ else if (tinymce.isOpera)\r
+ u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.close();ed.setupIframe();})()'; \r
+ }\r
+\r
+ // Create iframe\r
+ n = DOM.add(o.iframeContainer, 'iframe', {\r
+ id : t.id + "_ifr",\r
+ src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7\r
+ frameBorder : '0',\r
+ style : {\r
+ width : '100%',\r
+ height : h\r
+ }\r
+ });\r
+\r
+ t.contentAreaContainer = o.iframeContainer;\r
+ DOM.get(o.editorContainer).style.display = t.orgDisplay;\r
+ DOM.get(t.id).style.display = 'none';\r
+\r
+ // Safari 2.x requires us to wait for the load event and load a real HTML doc\r
+ if (tinymce.isOldWebKit) {\r
+ Event.add(n, 'load', t.setupIframe, t);\r
+ n.src = tinymce.baseURL + '/plugins/safari/blank.htm';\r
+ } else {\r
+ if (!isIE || !tinymce.relaxedDomain)\r
+ t.setupIframe();\r
+\r
+ e = n = o = null; // Cleanup\r
+ }\r
+ },\r
+\r
+ setupIframe : function() {\r
+ var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b;\r
+\r
+ // Setup iframe body\r
+ if (!isIE || !tinymce.relaxedDomain) {\r
+ d.open();\r
+ d.write(t.iframeHTML);\r
+ d.close();\r
+ }\r
+\r
+ // Design mode needs to be added here Ctrl+A will fail otherwise\r
+ if (!isIE) {\r
+ try {\r
+ d.designMode = 'On';\r
+ } catch (ex) {\r
+ // Will fail on Gecko if the editor is placed in an hidden container element\r
+ // The design mode will be set ones the editor is focused\r
+ }\r
+ }\r
+\r
+ // IE needs to use contentEditable or it will display non secure items for HTTPS\r
+ if (isIE) {\r
+ // It will not steal focus if we hide it while setting contentEditable\r
+ b = t.getBody();\r
+ DOM.hide(b);\r
+ b.contentEditable = true;\r
+ DOM.show(b);\r
+ }\r
+\r
+ // Setup objects\r
+ t.dom = new tinymce.DOM.DOMUtils(t.getDoc(), {\r
+ keep_values : true,\r
+ url_converter : t.convertURL,\r
+ url_converter_scope : t,\r
+ hex_colors : s.force_hex_style_colors,\r
+ class_filter : s.class_filter,\r
+ update_styles : 1,\r
+ fix_ie_paragraphs : 1\r
+ });\r
+\r
+ t.serializer = new tinymce.dom.Serializer({\r
+ entity_encoding : s.entity_encoding,\r
+ entities : s.entities,\r
+ valid_elements : s.verify_html === false ? '*[*]' : s.valid_elements,\r
+ extended_valid_elements : s.extended_valid_elements,\r
+ valid_child_elements : s.valid_child_elements,\r
+ invalid_elements : s.invalid_elements,\r
+ fix_table_elements : s.fix_table_elements,\r
+ fix_list_elements : s.fix_list_elements,\r
+ fix_content_duplication : s.fix_content_duplication,\r
+ convert_fonts_to_spans : s.convert_fonts_to_spans,\r
+ font_size_classes : s.font_size_classes,\r
+ font_size_style_values : s.font_size_style_values,\r
+ apply_source_formatting : s.apply_source_formatting,\r
+ remove_linebreaks : s.remove_linebreaks,\r
+ dom : t.dom\r
+ });\r
+\r
+ t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);\r
+ t.forceBlocks = new tinymce.ForceBlocks(t, {\r
+ forced_root_block : s.forced_root_block\r
+ });\r
+ t.editorCommands = new tinymce.EditorCommands(t);\r
+\r
+ // Pass through\r
+ t.serializer.onPreProcess.add(function(se, o) {\r
+ return t.onPreProcess.dispatch(t, o, se);\r
+ });\r
+\r
+ t.serializer.onPostProcess.add(function(se, o) {\r
+ return t.onPostProcess.dispatch(t, o, se);\r
+ });\r
+\r
+ t.onPreInit.dispatch(t);\r
+\r
+ if (!s.gecko_spellcheck)\r
+ t.getBody().spellcheck = 0;\r
+\r
+ t._addEvents();\r
+\r
+ t.controlManager.onPostRender.dispatch(t, t.controlManager);\r
+ t.onPostRender.dispatch(t);\r
+\r
+ if (s.directionality)\r
+ t.getBody().dir = s.directionality;\r
+\r
+ if (s.nowrap)\r
+ t.getBody().style.whiteSpace = "nowrap";\r
+\r
+ if (s.auto_resize)\r
+ t.onNodeChange.add(t.resizeToContent, t);\r
+\r
+ if (s.custom_elements) {\r
+ function handleCustom(ed, o) {\r
+ each(explode(s.custom_elements), function(v) {\r
+ var n;\r
+\r
+ if (v.indexOf('~') === 0) {\r
+ v = v.substring(1);\r
+ n = 'span';\r
+ } else\r
+ n = 'div';\r
+\r
+ o.content = o.content.replace(new RegExp('<(' + v + ')([^>]*)>', 'g'), '<' + n + ' mce_name="$1"$2>');\r
+ o.content = o.content.replace(new RegExp('</(' + v + ')>', 'g'), '</' + n + '>');\r
+ });\r
+ };\r
+\r
+ t.onBeforeSetContent.add(handleCustom);\r
+ t.onPostProcess.add(function(ed, o) {\r
+ if (o.set)\r
+ handleCustom(ed, o)\r
+ });\r
+ }\r
+\r
+ if (s.handle_node_change_callback) {\r
+ t.onNodeChange.add(function(ed, cm, n) {\r
+ t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed());\r
+ });\r
+ }\r
+\r
+ if (s.save_callback) {\r
+ t.onSaveContent.add(function(ed, o) {\r
+ var h = t.execCallback('save_callback', t.id, o.content, t.getBody());\r
+\r
+ if (h)\r
+ o.content = h;\r
+ });\r
+ }\r
+\r
+ if (s.onchange_callback) {\r
+ t.onChange.add(function(ed, l) {\r
+ t.execCallback('onchange_callback', t, l);\r
+ });\r
+ }\r
+\r
+ if (s.convert_newlines_to_brs) {\r
+ t.onBeforeSetContent.add(function(ed, o) {\r
+ if (o.initial)\r
+ o.content = o.content.replace(/\r?\n/g, '<br />');\r
+ });\r
+ }\r
+\r
+ if (s.fix_nesting && isIE) {\r
+ t.onBeforeSetContent.add(function(ed, o) {\r
+ o.content = t._fixNesting(o.content);\r
+ });\r
+ }\r
+\r
+ if (s.preformatted) {\r
+ t.onPostProcess.add(function(ed, o) {\r
+ o.content = o.content.replace(/^\s*<pre.*?>/, '');\r
+ o.content = o.content.replace(/<\/pre>\s*$/, '');\r
+\r
+ if (o.set)\r
+ o.content = '<pre class="mceItemHidden">' + o.content + '</pre>';\r
+ });\r
+ }\r
+\r
+ if (s.verify_css_classes) {\r
+ t.serializer.attribValueFilter = function(n, v) {\r
+ var s, cl;\r
+\r
+ if (n == 'class') {\r
+ // Build regexp for classes\r
+ if (!t.classesRE) {\r
+ cl = t.dom.getClasses();\r
+\r
+ if (cl.length > 0) {\r
+ s = '';\r
+\r
+ each (cl, function(o) {\r
+ s += (s ? '|' : '') + o['class'];\r
+ });\r
+\r
+ t.classesRE = new RegExp('(' + s + ')', 'gi');\r
+ }\r
+ }\r
+\r
+ return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : '';\r
+ }\r
+\r
+ return v;\r
+ };\r
+ }\r
+\r
+ if (s.convert_fonts_to_spans)\r
+ t._convertFonts();\r
+\r
+ if (s.inline_styles)\r
+ t._convertInlineElements();\r
+\r
+ if (s.cleanup_callback) {\r
+ t.onBeforeSetContent.add(function(ed, o) {\r
+ o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);\r
+ });\r
+\r
+ t.onPreProcess.add(function(ed, o) {\r
+ if (o.set)\r
+ t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);\r
+\r
+ if (o.get)\r
+ t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);\r
+ });\r
+\r
+ t.onPostProcess.add(function(ed, o) {\r
+ if (o.set)\r
+ o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);\r
+\r
+ if (o.get) \r
+ o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o);\r
+ });\r
+ }\r
+\r
+ if (s.save_callback) {\r
+ t.onGetContent.add(function(ed, o) {\r
+ if (o.save)\r
+ o.content = t.execCallback('save_callback', t.id, o.content, t.getBody());\r
+ });\r
+ }\r
+\r
+ if (s.handle_event_callback) {\r
+ t.onEvent.add(function(ed, e, o) {\r
+ if (t.execCallback('handle_event_callback', e, ed, o) === false)\r
+ Event.cancel(e);\r
+ });\r
+ }\r
+\r
+ t.onSetContent.add(function() {\r
+ // Safari needs some time, it will crash the browser when a link is created otherwise\r
+ // I think this crash issue is resolved in the latest 3.0.4\r
+ //window.setTimeout(function() {\r
+ t.addVisual(t.getBody());\r
+ //}, 1);\r
+ });\r
+\r
+ // Remove empty contents\r
+ if (s.padd_empty_editor) {\r
+ t.onPostProcess.add(function(ed, o) {\r
+ o.content = o.content.replace(/^<p>( |#160;|\s|\u00a0)<\/p>$/, '');\r
+ });\r
+ }\r
+\r
+ if (isGecko) {\r
+ try {\r
+ // Design mode must be set here once again to fix a bug where\r
+ // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again\r
+ d.designMode = 'Off';\r
+ d.designMode = 'On';\r
+ } catch (ex) {\r
+ // Will fail on Gecko if the editor is placed in an hidden container element\r
+ // The design mode will be set ones the editor is focused\r
+ }\r
+ }\r
+\r
+ // A small timeout was needed since firefox will remove. Bug: #1838304\r
+ setTimeout(function () {\r
+ if (t.removed)\r
+ return;\r
+\r
+ t.load({initial : true, format : (s.cleanup_on_startup ? 'html' : 'raw')});\r
+ t.startContent = t.getContent({format : 'raw'});\r
+ t.undoManager.add({initial : true});\r
+ t.initialized = true;\r
+\r
+ t.onInit.dispatch(t);\r
+ t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc());\r
+ t.execCallback('init_instance_callback', t);\r
+ t.focus(true);\r
+ t.nodeChanged({initial : 1});\r
+\r
+ // Load specified content CSS last\r
+ if (s.content_css) {\r
+ tinymce.each(explode(s.content_css), function(u) {\r
+ t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));\r
+ });\r
+ }\r
+\r
+ // Handle auto focus\r
+ if (s.auto_focus) {\r
+ setTimeout(function () {\r
+ var ed = EditorManager.get(s.auto_focus);\r
+\r
+ ed.selection.select(ed.getBody(), 1);\r
+ ed.selection.collapse(1);\r
+ ed.getWin().focus();\r
+ }, 100);\r
+ }\r
+ }, 1);\r
+ \r
+ e = null;\r
+ },\r
+\r
+ \r
+ focus : function(sf) {\r
+ var oed, t = this;\r
+\r
+ if (!sf) {\r
+ t.getWin().focus();\r
+\r
+ }\r
+\r
+ if (EditorManager.activeEditor != t) {\r
+ if ((oed = EditorManager.activeEditor) != null)\r
+ oed.onDeactivate.dispatch(oed, t);\r
+\r
+ t.onActivate.dispatch(t, oed);\r
+ }\r
+\r
+ EditorManager._setActive(t);\r
+ },\r
+\r
+ execCallback : function(n) {\r
+ var t = this, f = t.settings[n], s;\r
+\r
+ if (!f)\r
+ return;\r
+\r
+ // Look through lookup\r
+ if (t.callbackLookup && (s = t.callbackLookup[n])) {\r
+ f = s.func;\r
+ s = s.scope;\r
+ }\r
+\r
+ if (is(f, 'string')) {\r
+ s = f.replace(/\.\w+$/, '');\r
+ s = s ? tinymce.resolve(s) : 0;\r
+ f = tinymce.resolve(f);\r
+ t.callbackLookup = t.callbackLookup || {};\r
+ t.callbackLookup[n] = {func : f, scope : s};\r
+ }\r
+\r
+ return f.apply(s || t, Array.prototype.slice.call(arguments, 1));\r
+ },\r
+\r
+ translate : function(s) {\r
+ var c = this.settings.language, i18n = EditorManager.i18n;\r
+\r
+ if (!s)\r
+ return '';\r
+\r
+ return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {\r
+ return i18n[c + '.' + b] || '{#' + b + '}';\r
+ });\r
+ },\r
+\r
+ getLang : function(n, dv) {\r
+ return EditorManager.i18n[this.settings.language + '.' + n] || (is(dv) ? dv : '{#' + n + '}');\r
+ },\r
+\r
+ getParam : function(n, dv, ty) {\r
+ var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o;\r
+\r
+ if (ty === 'hash') {\r
+ o = {};\r
+\r
+ if (is(v, 'string')) {\r
+ each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) {\r
+ v = v.split('=');\r
+\r
+ if (v.length > 1)\r
+ o[tr(v[0])] = tr(v[1]);\r
+ else\r
+ o[tr(v[0])] = tr(v);\r
+ });\r
+ } else\r
+ o = v;\r
+\r
+ return o;\r
+ }\r
+\r
+ return v;\r
+ },\r
+\r
+ nodeChanged : function(o) {\r
+ var t = this, s = t.selection, n = s.getNode() || t.getBody();\r
+\r
+ // Fix for bug #1896577 it seems that this can not be fired while the editor is loading\r
+ if (t.initialized) {\r
+ t.onNodeChange.dispatch(\r
+ t,\r
+ o ? o.controlManager || t.controlManager : t.controlManager,\r
+ isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n, // Fix for IE initial state\r
+ s.isCollapsed(),\r
+ o\r
+ );\r
+ }\r
+ },\r
+\r
+ addButton : function(n, s) {\r
+ var t = this;\r
+\r
+ t.buttons = t.buttons || {};\r
+ t.buttons[n] = s;\r
+ },\r
+\r
+ addCommand : function(n, f, s) {\r
+ this.execCommands[n] = {func : f, scope : s || this};\r
+ },\r
+\r
+ addQueryStateHandler : function(n, f, s) {\r
+ this.queryStateCommands[n] = {func : f, scope : s || this};\r
+ },\r
+\r
+ addQueryValueHandler : function(n, f, s) {\r
+ this.queryValueCommands[n] = {func : f, scope : s || this};\r
+ },\r
+\r
+ addShortcut : function(pa, desc, cmd_func, sc) {\r
+ var t = this, c;\r
+\r
+ if (!t.settings.custom_shortcuts)\r
+ return false;\r
+\r
+ t.shortcuts = t.shortcuts || {};\r
+\r
+ if (is(cmd_func, 'string')) {\r
+ c = cmd_func;\r
+\r
+ cmd_func = function() {\r
+ t.execCommand(c, false, null);\r
+ };\r
+ }\r
+\r
+ if (is(cmd_func, 'object')) {\r
+ c = cmd_func;\r
+\r
+ cmd_func = function() {\r
+ t.execCommand(c[0], c[1], c[2]);\r
+ };\r
+ }\r
+\r
+ each(explode(pa), function(pa) {\r
+ var o = {\r
+ func : cmd_func,\r
+ scope : sc || this,\r
+ desc : desc,\r
+ alt : false,\r
+ ctrl : false,\r
+ shift : false\r
+ };\r
+\r
+ each(explode(pa, '+'), function(v) {\r
+ switch (v) {\r
+ case 'alt':\r
+ case 'ctrl':\r
+ case 'shift':\r
+ o[v] = true;\r
+ break;\r
+\r
+ default:\r
+ o.charCode = v.charCodeAt(0);\r
+ o.keyCode = v.toUpperCase().charCodeAt(0);\r
+ }\r
+ });\r
+\r
+ t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o;\r
+ });\r
+\r
+ return true;\r
+ },\r
+\r
+ execCommand : function(cmd, ui, val, a) {\r
+ var t = this, s = 0, o;\r
+\r
+ if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus))\r
+ t.focus();\r
+\r
+ o = {};\r
+ t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o);\r
+ if (o.terminate)\r
+ return false;\r
+\r
+ // Comamnd callback\r
+ if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) {\r
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+ return true;\r
+ }\r
+\r
+ // Registred commands\r
+ if (o = t.execCommands[cmd]) {\r
+ s = o.func.call(o.scope, ui, val);\r
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+ return s;\r
+ }\r
+\r
+ // Plugin commands\r
+ each(t.plugins, function(p) {\r
+ if (p.execCommand && p.execCommand(cmd, ui, val)) {\r
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+ s = 1;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ if (s)\r
+ return true;\r
+\r
+ // Theme commands\r
+ if (t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {\r
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+ return true;\r
+ }\r
+\r
+ // Editor commands\r
+ if (t.editorCommands.execCommand(cmd, ui, val)) {\r
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+ return true;\r
+ }\r
+\r
+ // Browser commands\r
+ t.getDoc().execCommand(cmd, ui, val);\r
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+ },\r
+\r
+ queryCommandState : function(c) {\r
+ var t = this, o;\r
+\r
+ // Is hidden then return undefined\r
+ if (t._isHidden())\r
+ return;\r
+\r
+ // Registred commands\r
+ if (o = t.queryStateCommands[c])\r
+ return o.func.call(o.scope);\r
+\r
+ // Registred commands\r
+ o = t.editorCommands.queryCommandState(c);\r
+ if (o !== -1)\r
+ return o;\r
+\r
+ // Browser commands\r
+ try {\r
+ return this.getDoc().queryCommandState(c);\r
+ } catch (ex) {\r
+ // Fails sometimes see bug: 1896577\r
+ }\r
+ },\r
+\r
+ queryCommandValue : function(c) {\r
+ var t = this, o;\r
+\r
+ // Is hidden then return undefined\r
+ if (t._isHidden())\r
+ return;\r
+\r
+ // Registred commands\r
+ if (o = t.queryValueCommands[c])\r
+ return o.func.call(o.scope);\r
+\r
+ // Registred commands\r
+ o = t.editorCommands.queryCommandValue(c);\r
+ if (is(o))\r
+ return o;\r
+\r
+ // Browser commands\r
+ try {\r
+ return this.getDoc().queryCommandValue(c);\r
+ } catch (ex) {\r
+ // Fails sometimes see bug: 1896577\r
+ }\r
+ },\r
+\r
+ show : function() {\r
+ var t = this;\r
+\r
+ DOM.show(t.getContainer());\r
+ DOM.hide(t.id);\r
+ t.load();\r
+ },\r
+\r
+ hide : function() {\r
+ var t = this, d = t.getDoc();\r
+\r
+ // Fixed bug where IE has a blinking cursor left from the editor\r
+ if (isIE && d)\r
+ d.execCommand('SelectAll');\r
+\r
+ // We must save before we hide so Safari doesn't crash\r
+ t.save();\r
+ DOM.hide(t.getContainer());\r
+ DOM.setStyle(t.id, 'display', t.orgDisplay);\r
+ },\r
+\r
+ isHidden : function() {\r
+ return !DOM.isHidden(this.id);\r
+ },\r
+\r
+ setProgressState : function(b, ti, o) {\r
+ this.onSetProgressState.dispatch(this, b, ti, o);\r
+\r
+ return b;\r
+ },\r
+\r
+ resizeToContent : function() {\r
+ var t = this;\r
+\r
+ DOM.setStyle(t.id + "_ifr", 'height', t.getBody().scrollHeight);\r
+ },\r
+\r
+ load : function(o) {\r
+ var t = this, e = t.getElement(), h;\r
+\r
+ o = o || {};\r
+ o.load = true;\r
+\r
+ h = t.setContent(is(e.value) ? e.value : e.innerHTML, o);\r
+ o.element = e;\r
+\r
+ if (!o.no_events)\r
+ t.onLoadContent.dispatch(t, o);\r
+\r
+ o.element = e = null;\r
+\r
+ return h;\r
+ },\r
+\r
+ save : function(o) {\r
+ var t = this, e = t.getElement(), h, f;\r
+\r
+ if (!t.initialized)\r
+ return;\r
+\r
+ o = o || {};\r
+ o.save = true;\r
+\r
+ o.element = e;\r
+ h = o.content = t.getContent(o);\r
+\r
+ if (!o.no_events)\r
+ t.onSaveContent.dispatch(t, o);\r
+\r
+ h = o.content;\r
+\r
+ if (!/TEXTAREA|INPUT/i.test(e.nodeName)) {\r
+ e.innerHTML = h;\r
+\r
+ // Update hidden form element\r
+ if (f = DOM.getParent(t.id, 'form')) {\r
+ each(f.elements, function(e) {\r
+ if (e.name == t.id) {\r
+ e.value = h;\r
+ return false;\r
+ }\r
+ });\r
+ }\r
+ } else\r
+ e.value = h;\r
+\r
+ o.element = e = null;\r
+\r
+ return h;\r
+ },\r
+\r
+ setContent : function(h, o) {\r
+ var t = this;\r
+\r
+ o = o || {};\r
+ o.format = o.format || 'html';\r
+ o.set = true;\r
+ o.content = h;\r
+\r
+ if (!o.no_events)\r
+ t.onBeforeSetContent.dispatch(t, o);\r
+\r
+ // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content\r
+ // It will also be impossible to place the caret in the editor unless there is a BR element present\r
+ if (!tinymce.isIE && (h.length === 0 || /^\s+$/.test(h))) {\r
+ o.content = t.dom.setHTML(t.getBody(), '<br mce_bogus="1" />', 1);\r
+ o.format = 'raw';\r
+ }\r
+\r
+ o.content = t.dom.setHTML(t.getBody(), tinymce.trim(o.content));\r
+\r
+ if (o.format != 'raw' && t.settings.cleanup) {\r
+ o.getInner = true;\r
+ o.content = t.dom.setHTML(t.getBody(), t.serializer.serialize(t.getBody(), o));\r
+ }\r
+\r
+ if (!o.no_events)\r
+ t.onSetContent.dispatch(t, o);\r
+\r
+ return o.content;\r
+ },\r
+\r
+ getContent : function(o) {\r
+ var t = this, h;\r
+\r
+ o = o || {};\r
+ o.format = o.format || 'html';\r
+ o.get = true;\r
+\r
+ if (!o.no_events)\r
+ t.onBeforeGetContent.dispatch(t, o);\r
+\r
+ if (o.format != 'raw' && t.settings.cleanup) {\r
+ o.getInner = true;\r
+ h = t.serializer.serialize(t.getBody(), o);\r
+ } else\r
+ h = t.getBody().innerHTML;\r
+\r
+ h = h.replace(/^\s*|\s*$/g, '');\r
+ o = {content : h};\r
+ t.onGetContent.dispatch(t, o);\r
+\r
+ return o.content;\r
+ },\r
+\r
+ isDirty : function() {\r
+ var t = this;\r
+\r
+ return tinymce.trim(t.startContent) != tinymce.trim(t.getContent({format : 'raw', no_events : 1})) && !t.isNotDirty;\r
+ },\r
+\r
+ getContainer : function() {\r
+ var t = this;\r
+\r
+ if (!t.container)\r
+ t.container = DOM.get(t.editorContainer || t.id + '_parent');\r
+\r
+ return t.container;\r
+ },\r
+\r
+ getContentAreaContainer : function() {\r
+ return this.contentAreaContainer;\r
+ },\r
+\r
+ getElement : function() {\r
+ return DOM.get(this.settings.content_element || this.id);\r
+ },\r
+\r
+ getWin : function() {\r
+ var t = this, e;\r
+\r
+ if (!t.contentWindow) {\r
+ e = DOM.get(t.id + "_ifr");\r
+\r
+ if (e)\r
+ t.contentWindow = e.contentWindow;\r
+ }\r
+\r
+ return t.contentWindow;\r
+ },\r
+\r
+ getDoc : function() {\r
+ var t = this, w;\r
+\r
+ if (!t.contentDocument) {\r
+ w = t.getWin();\r
+\r
+ if (w)\r
+ t.contentDocument = w.document;\r
+ }\r
+\r
+ return t.contentDocument;\r
+ },\r
+\r
+ getBody : function() {\r
+ return this.bodyElement || this.getDoc().body;\r
+ },\r
+\r
+ convertURL : function(u, n, e) {\r
+ var t = this, s = t.settings;\r
+\r
+ // Use callback instead\r
+ if (s.urlconverter_callback)\r
+ return t.execCallback('urlconverter_callback', u, e, true, n);\r
+\r
+ // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs\r
+ if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0)\r
+ return u;\r
+\r
+ // Convert to relative\r
+ if (s.relative_urls)\r
+ return t.documentBaseURI.toRelative(u);\r
+\r
+ // Convert to absolute\r
+ u = t.documentBaseURI.toAbsolute(u, s.remove_script_host);\r
+\r
+ return u;\r
+ },\r
+\r
+ addVisual : function(e) {\r
+ var t = this, s = t.settings;\r
+\r
+ e = e || t.getBody();\r
+\r
+ if (!is(t.hasVisual))\r
+ t.hasVisual = s.visual;\r
+\r
+ each(t.dom.select('table,a', e), function(e) {\r
+ var v;\r
+\r
+ switch (e.nodeName) {\r
+ case 'TABLE':\r
+ v = t.dom.getAttrib(e, 'border');\r
+\r
+ if (!v || v == '0') {\r
+ if (t.hasVisual)\r
+ t.dom.addClass(e, s.visual_table_class);\r
+ else\r
+ t.dom.removeClass(e, s.visual_table_class);\r
+ }\r
+\r
+ return;\r
+\r
+ case 'A':\r
+ v = t.dom.getAttrib(e, 'name');\r
+\r
+ if (v) {\r
+ if (t.hasVisual)\r
+ t.dom.addClass(e, 'mceItemAnchor');\r
+ else\r
+ t.dom.removeClass(e, 'mceItemAnchor');\r
+ }\r
+\r
+ return;\r
+ }\r
+ });\r
+\r
+ t.onVisualAid.dispatch(t, e, t.hasVisual);\r
+ },\r
+\r
+ remove : function() {\r
+ var t = this, e = t.getContainer();\r
+\r
+ t.removed = 1; // Cancels post remove event execution\r
+ t.hide();\r
+\r
+ t.execCallback('remove_instance_callback', t);\r
+ t.onRemove.dispatch(t);\r
+\r
+ // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command\r
+ t.onExecCommand.listeners = [];\r
+\r
+ EditorManager.remove(t);\r
+ DOM.remove(e);\r
+ },\r
+\r
+ destroy : function(s) {\r
+ var t = this;\r
+\r
+ // One time is enough\r
+ if (t.destroyed)\r
+ return;\r
+\r
+ if (!s) {\r
+ tinymce.removeUnload(t.destroy);\r
+ tinyMCE.onBeforeUnload.remove(t._beforeUnload);\r
+\r
+ // Manual destroy\r
+ if (t.theme.destroy)\r
+ t.theme.destroy();\r
+\r
+ // Destroy controls, selection and dom\r
+ t.controlManager.destroy();\r
+ t.selection.destroy();\r
+ t.dom.destroy();\r
+\r
+ // Remove all events\r
+ Event.clear(t.getWin());\r
+ Event.clear(t.getDoc());\r
+ Event.clear(t.getBody());\r
+ Event.clear(t.formElement);\r
+ }\r
+\r
+ if (t.formElement) {\r
+ t.formElement.submit = t.formElement._mceOldSubmit;\r
+ t.formElement._mceOldSubmit = null;\r
+ }\r
+\r
+ t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null;\r
+\r
+ if (t.selection)\r
+ t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null;\r
+\r
+ t.destroyed = 1;\r
+ },\r
+\r
+ // Internal functions\r
+\r
+ _addEvents : function() {\r
+ // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset\r
+ var t = this, i, s = t.settings, lo = {\r
+ mouseup : 'onMouseUp',\r
+ mousedown : 'onMouseDown',\r
+ click : 'onClick',\r
+ keyup : 'onKeyUp',\r
+ keydown : 'onKeyDown',\r
+ keypress : 'onKeyPress',\r
+ submit : 'onSubmit',\r
+ reset : 'onReset',\r
+ contextmenu : 'onContextMenu',\r
+ dblclick : 'onDblClick',\r
+ paste : 'onPaste' // Doesn't work in all browsers yet\r
+ };\r
+\r
+ function eventHandler(e, o) {\r
+ var ty = e.type;\r
+\r
+ // Don't fire events when it's removed\r
+ if (t.removed)\r
+ return;\r
+\r
+ // Generic event handler\r
+ if (t.onEvent.dispatch(t, e, o) !== false) {\r
+ // Specific event handler\r
+ t[lo[e.fakeType || e.type]].dispatch(t, e, o);\r
+ }\r
+ };\r
+\r
+ // Add DOM events\r
+ each(lo, function(v, k) {\r
+ switch (k) {\r
+ case 'contextmenu':\r
+ if (tinymce.isOpera) {\r
+ // Fake contextmenu on Opera\r
+ Event.add(t.getDoc(), 'mousedown', function(e) {\r
+ if (e.ctrlKey) {\r
+ e.fakeType = 'contextmenu';\r
+ eventHandler(e);\r
+ }\r
+ });\r
+ } else\r
+ Event.add(t.getDoc(), k, eventHandler);\r
+ break;\r
+\r
+ case 'paste':\r
+ Event.add(t.getBody(), k, function(e) {\r
+ var tx, h, el, r;\r
+\r
+ // Get plain text data\r
+ if (e.clipboardData)\r
+ tx = e.clipboardData.getData('text/plain');\r
+ else if (tinymce.isIE)\r
+ tx = t.getWin().clipboardData.getData('Text');\r
+\r
+ // Get HTML data\r
+ /*if (tinymce.isIE) {\r
+ el = DOM.add(DOM.doc.body, 'div', {style : 'visibility:hidden;overflow:hidden;position:absolute;width:1px;height:1px'});\r
+ r = DOM.doc.body.createTextRange();\r
+ r.moveToElementText(el);\r
+ r.execCommand('Paste');\r
+ h = el.innerHTML;\r
+ DOM.remove(el);\r
+ }*/\r
+\r
+ eventHandler(e, {text : tx, html : h});\r
+ });\r
+ break;\r
+\r
+ case 'submit':\r
+ case 'reset':\r
+ Event.add(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);\r
+ break;\r
+\r
+ default:\r
+ Event.add(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);\r
+ }\r
+ });\r
+\r
+ Event.add(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {\r
+ t.focus(true);\r
+ });\r
+\r
+ \r
+ // Fixes bug where a specified document_base_uri could result in broken images\r
+ // This will also fix drag drop of images in Gecko\r
+ if (tinymce.isGecko) {\r
+ // Convert all images to absolute URLs\r
+/* t.onSetContent.add(function(ed, o) {\r
+ each(ed.dom.select('img'), function(e) {\r
+ var v;\r
+\r
+ if (v = e.getAttribute('mce_src'))\r
+ e.src = t.documentBaseURI.toAbsolute(v);\r
+ })\r
+ });*/\r
+\r
+ Event.add(t.getDoc(), 'DOMNodeInserted', function(e) {\r
+ var v;\r
+\r
+ e = e.target;\r
+\r
+ if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('mce_src')))\r
+ e.src = t.documentBaseURI.toAbsolute(v);\r
+ });\r
+ }\r
+\r
+ // Set various midas options in Gecko\r
+ if (isGecko) {\r
+ function setOpts() {\r
+ var t = this, d = t.getDoc(), s = t.settings;\r
+\r
+ if (isGecko) {\r
+ if (t._isHidden()) {\r
+ try {\r
+ if (!s.content_editable)\r
+ d.designMode = 'On';\r
+ } catch (ex) {\r
+ // Fails if it's hidden\r
+ }\r
+ }\r
+\r
+ try {\r
+ // Try new Gecko method\r
+ d.execCommand("styleWithCSS", 0, false);\r
+ } catch (ex) {\r
+ // Use old method\r
+ if (!t._isHidden())\r
+ d.execCommand("useCSS", 0, true);\r
+ }\r
+\r
+ if (!s.table_inline_editing)\r
+ try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {}\r
+\r
+ if (!s.object_resizing)\r
+ try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {}\r
+ }\r
+ };\r
+\r
+ t.onBeforeExecCommand.add(setOpts);\r
+ t.onMouseDown.add(setOpts);\r
+ }\r
+\r
+ // Add node change handlers\r
+ t.onMouseUp.add(t.nodeChanged);\r
+ t.onClick.add(t.nodeChanged);\r
+ t.onKeyUp.add(function(ed, e) {\r
+ if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.keyCode == 46 || e.keyCode == 8 || e.ctrlKey)\r
+ t.nodeChanged();\r
+ });\r
+\r
+ // Add reset handler\r
+ t.onReset.add(function() {\r
+ t.setContent(t.startContent, {format : 'raw'});\r
+ });\r
+\r
+ if (t.getParam('tab_focus')) {\r
+ function tabCancel(ed, e) {\r
+ if (e.keyCode === 9)\r
+ return Event.cancel(e);\r
+ };\r
+\r
+ function tabHandler(ed, e) {\r
+ var x, i, f, el, v;\r
+\r
+ function find(d) {\r
+ f = DOM.getParent(ed.id, 'form');\r
+ el = f.elements;\r
+\r
+ if (f) {\r
+ each(el, function(e, i) {\r
+ if (e.id == ed.id) {\r
+ x = i;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ if (d > 0) {\r
+ for (i = x + 1; i < el.length; i++) {\r
+ if (el[i].type != 'hidden')\r
+ return el[i];\r
+ }\r
+ } else {\r
+ for (i = x - 1; i >= 0; i--) {\r
+ if (el[i].type != 'hidden')\r
+ return el[i];\r
+ }\r
+ }\r
+ }\r
+\r
+ return null;\r
+ };\r
+\r
+ if (e.keyCode === 9) {\r
+ v = explode(ed.getParam('tab_focus'));\r
+\r
+ if (v.length == 1) {\r
+ v[1] = v[0];\r
+ v[0] = ':prev';\r
+ }\r
+\r
+ // Find element to focus\r
+ if (e.shiftKey) {\r
+ if (v[0] == ':prev')\r
+ el = find(-1);\r
+ else\r
+ el = DOM.get(v[0]);\r
+ } else {\r
+ if (v[1] == ':next')\r
+ el = find(1);\r
+ else\r
+ el = DOM.get(v[1]);\r
+ }\r
+\r
+ if (el) {\r
+ if (ed = EditorManager.get(el.id || el.name))\r
+ ed.focus();\r
+ else\r
+ window.setTimeout(function() {window.focus();el.focus();}, 10);\r
+\r
+ return Event.cancel(e);\r
+ }\r
+ }\r
+ };\r
+\r
+ t.onKeyUp.add(tabCancel);\r
+\r
+ if (isGecko) {\r
+ t.onKeyPress.add(tabHandler);\r
+ t.onKeyDown.add(tabCancel);\r
+ } else\r
+ t.onKeyDown.add(tabHandler);\r
+ }\r
+\r
+ // Add shortcuts\r
+ if (s.custom_shortcuts) {\r
+ if (s.custom_undo_redo_keyboard_shortcuts) {\r
+ t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo');\r
+ t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo');\r
+ }\r
+\r
+ // Add default shortcuts for gecko\r
+ if (isGecko) {\r
+ t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');\r
+ t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');\r
+ t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');\r
+ }\r
+\r
+ // BlockFormat shortcuts keys\r
+ for (i=1; i<=6; i++)\r
+ t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, '<h' + i + '>']);\r
+\r
+ t.addShortcut('ctrl+7', '', ['FormatBlock', false, '<p>']);\r
+ t.addShortcut('ctrl+8', '', ['FormatBlock', false, '<div>']);\r
+ t.addShortcut('ctrl+9', '', ['FormatBlock', false, '<address>']);\r
+\r
+ function find(e) {\r
+ var v = null;\r
+\r
+ if (!e.altKey && !e.ctrlKey && !e.metaKey)\r
+ return v;\r
+\r
+ each(t.shortcuts, function(o) {\r
+ if (o.ctrl != e.ctrlKey && (!tinymce.isMac || o.ctrl == e.metaKey))\r
+ return;\r
+\r
+ if (o.alt != e.altKey)\r
+ return;\r
+\r
+ if (o.shift != e.shiftKey)\r
+ return;\r
+\r
+ if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) {\r
+ v = o;\r
+ return false;\r
+ }\r
+ });\r
+\r
+ return v;\r
+ };\r
+\r
+ t.onKeyUp.add(function(ed, e) {\r
+ var o = find(e);\r
+\r
+ if (o)\r
+ return Event.cancel(e);\r
+ });\r
+\r
+ t.onKeyPress.add(function(ed, e) {\r
+ var o = find(e);\r
+\r
+ if (o)\r
+ return Event.cancel(e);\r
+ });\r
+\r
+ t.onKeyDown.add(function(ed, e) {\r
+ var o = find(e);\r
+\r
+ if (o) {\r
+ o.func.call(o.scope);\r
+ return Event.cancel(e);\r
+ }\r
+ });\r
+ }\r
+\r
+ if (tinymce.isIE) {\r
+ // Fix so resize will only update the width and height attributes not the styles of an image\r
+ // It will also block mceItemNoResize items\r
+ Event.add(t.getDoc(), 'controlselect', function(e) {\r
+ var re = t.resizeInfo, cb;\r
+\r
+ e = e.target;\r
+ e.removeAttribute('mce_style'); // Remove this one since it might change\r
+\r
+ // Don't do this action for non image elements\r
+ if (e.nodeName !== 'IMG')\r
+ return;\r
+\r
+ if (re)\r
+ Event.remove(re.node, re.ev, re.cb);\r
+\r
+ if (!t.dom.hasClass(e, 'mceItemNoResize')) {\r
+ ev = 'resizeend';\r
+ cb = Event.add(e, ev, function(e) {\r
+ var v;\r
+\r
+ e = e.target;\r
+\r
+ if (v = t.dom.getStyle(e, 'width')) {\r
+ t.dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));\r
+ t.dom.setStyle(e, 'width', '');\r
+ }\r
+\r
+ if (v = t.dom.getStyle(e, 'height')) {\r
+ t.dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));\r
+ t.dom.setStyle(e, 'height', '');\r
+ }\r
+ });\r
+ } else {\r
+ ev = 'resizestart';\r
+ cb = Event.add(e, 'resizestart', Event.cancel, Event);\r
+ }\r
+\r
+ re = t.resizeInfo = {\r
+ node : e,\r
+ ev : ev,\r
+ cb : cb\r
+ };\r
+ });\r
+\r
+ t.onKeyDown.add(function(ed, e) {\r
+ switch (e.keyCode) {\r
+ case 8:\r
+ // Fix IE control + backspace browser bug\r
+ if (t.selection.getRng().item) {\r
+ t.selection.getRng().item(0).removeNode();\r
+ return Event.cancel(e);\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ if (tinymce.isOpera) {\r
+ t.onClick.add(function(ed, e) {\r
+ Event.prevent(e);\r
+ });\r
+ }\r
+\r
+ // Add custom undo/redo handlers\r
+ if (s.custom_undo_redo) {\r
+ function addUndo() {\r
+ t.undoManager.typing = 0;\r
+ t.undoManager.add();\r
+ };\r
+\r
+ // Add undo level on editor blur\r
+ if (tinymce.isIE) {\r
+ Event.add(t.getWin(), 'blur', function(e) {\r
+ var n;\r
+\r
+ // Check added for fullscreen bug\r
+ if (t.selection) {\r
+ n = t.selection.getNode();\r
+\r
+ // Add undo level is selection was lost to another document\r
+ if (!t.removed && n.ownerDocument && n.ownerDocument != t.getDoc())\r
+ addUndo();\r
+ }\r
+ });\r
+ } else {\r
+ Event.add(t.getDoc(), 'blur', function() {\r
+ if (t.selection && !t.removed)\r
+ addUndo();\r
+ });\r
+ }\r
+\r
+ t.onMouseDown.add(addUndo);\r
+\r
+ t.onKeyUp.add(function(ed, e) {\r
+ if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.ctrlKey) {\r
+ t.undoManager.typing = 0;\r
+ t.undoManager.add();\r
+ }\r
+ });\r
+\r
+ t.onKeyDown.add(function(ed, e) {\r
+ // Is caracter positon keys\r
+ if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45) {\r
+ if (t.undoManager.typing) {\r
+ t.undoManager.add();\r
+ t.undoManager.typing = 0;\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ if (!t.undoManager.typing) {\r
+ t.undoManager.add();\r
+ t.undoManager.typing = 1;\r
+ }\r
+ });\r
+ }\r
+ },\r
+\r
+ _convertInlineElements : function() {\r
+ var t = this, s = t.settings, dom = t.dom, v, e, na, st, sp;\r
+\r
+ function convert(ed, o) {\r
+ if (!s.inline_styles)\r
+ return;\r
+\r
+ if (o.get) {\r
+ each(t.dom.select('table,u,strike', o.node), function(n) {\r
+ switch (n.nodeName) {\r
+ case 'TABLE':\r
+ if (v = dom.getAttrib(n, 'height')) {\r
+ dom.setStyle(n, 'height', v);\r
+ dom.setAttrib(n, 'height', '');\r
+ }\r
+ break;\r
+\r
+ case 'U':\r
+ case 'STRIKE':\r
+ sp = dom.create('span', {style : dom.getAttrib(n, 'style')});\r
+ sp.style.textDecoration = n.nodeName == 'U' ? 'underline' : 'line-through';\r
+ dom.setAttrib(sp, 'mce_style', '');\r
+ dom.replace(sp, n, 1);\r
+ break;\r
+ }\r
+ });\r
+ } else if (o.set) {\r
+ each(t.dom.select('table,span', o.node), function(n) {\r
+ if (n.nodeName == 'TABLE') {\r
+ if (v = dom.getStyle(n, 'height'))\r
+ dom.setAttrib(n, 'height', v.replace(/[^0-9%]+/g, ''));\r
+ } else {\r
+ // Convert spans to elements\r
+ if (n.style.textDecoration == 'underline')\r
+ na = 'u';\r
+ else if (n.style.textDecoration == 'line-through')\r
+ na = 'strike';\r
+ else\r
+ na = '';\r
+\r
+ if (na) {\r
+ n.style.textDecoration = '';\r
+ dom.setAttrib(n, 'mce_style', '');\r
+\r
+ e = dom.create(na, {\r
+ style : dom.getAttrib(n, 'style')\r
+ });\r
+\r
+ dom.replace(e, n, 1);\r
+ }\r
+ }\r
+ });\r
+ }\r
+ };\r
+\r
+ t.onPreProcess.add(convert);\r
+\r
+ if (!s.cleanup_on_startup) {\r
+ t.onInit.add(function() {\r
+ convert(t, {node : t.getBody(), set : 1});\r
+ });\r
+ }\r
+ },\r
+\r
+ _convertFonts : function() {\r
+ var t = this, s = t.settings, dom = t.dom, fz, fzn, sl, cl;\r
+\r
+ // No need\r
+ if (!s.inline_styles)\r
+ return;\r
+\r
+ // Font pt values and font size names\r
+ fz = [8, 10, 12, 14, 18, 24, 36];\r
+ fzn = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large'];\r
+\r
+ if (sl = s.font_size_style_values)\r
+ sl = explode(sl);\r
+\r
+ if (cl = s.font_size_classes)\r
+ cl = explode(cl);\r
+\r
+ function convertToFonts(no) {\r
+ var n, f, nl, x, i, v, st;\r
+\r
+ // Convert spans to fonts on non WebKit browsers\r
+ if (tinymce.isWebKit || !s.inline_styles)\r
+ return;\r
+\r
+ nl = t.dom.select('span', no);\r
+ for (x = nl.length - 1; x >= 0; x--) {\r
+ n = nl[x];\r
+\r
+ f = dom.create('font', {\r
+ color : dom.toHex(dom.getStyle(n, 'color')),\r
+ face : dom.getStyle(n, 'fontFamily'),\r
+ style : dom.getAttrib(n, 'style'),\r
+ 'class' : dom.getAttrib(n, 'class')\r
+ });\r
+\r
+ // Clear color and font family\r
+ st = f.style;\r
+ if (st.color || st.fontFamily) {\r
+ st.color = st.fontFamily = '';\r
+ dom.setAttrib(f, 'mce_style', ''); // Remove cached style data\r
+ }\r
+\r
+ if (sl) {\r
+ i = inArray(sl, dom.getStyle(n, 'fontSize'));\r
+\r
+ if (i != -1) {\r
+ dom.setAttrib(f, 'size', '' + (i + 1 || 1));\r
+ f.style.fontSize = '';\r
+ }\r
+ } else if (cl) {\r
+ i = inArray(cl, dom.getAttrib(n, 'class'));\r
+ v = dom.getStyle(n, 'fontSize');\r
+\r
+ if (i == -1 && v.indexOf('pt') > 0)\r
+ i = inArray(fz, parseInt(v));\r
+\r
+ if (i == -1)\r
+ i = inArray(fzn, v);\r
+\r
+ if (i != -1) {\r
+ dom.setAttrib(f, 'size', '' + (i + 1 || 1));\r
+ f.style.fontSize = '';\r
+ }\r
+ }\r
+\r
+ if (f.color || f.face || f.size) {\r
+ f.style.fontFamily = '';\r
+ dom.setAttrib(f, 'mce_style', '');\r
+ dom.replace(f, n, 1);\r
+ }\r
+\r
+ f = n = null;\r
+ }\r
+ };\r
+\r
+ // Run on setup\r
+ t.onSetContent.add(function(ed, o) {\r
+ convertToFonts(ed.getBody());\r
+ });\r
+\r
+ // Run on cleanup\r
+ t.onPreProcess.add(function(ed, o) {\r
+ var n, sp, nl, x;\r
+\r
+ // Keep unit tests happy\r
+ if (!s.inline_styles)\r
+ return;\r
+\r
+ if (o.get) {\r
+ nl = t.dom.select('font', o.node);\r
+ for (x = nl.length - 1; x >= 0; x--) {\r
+ n = nl[x];\r
+\r
+ sp = dom.create('span', {\r
+ style : dom.getAttrib(n, 'style'),\r
+ 'class' : dom.getAttrib(n, 'class')\r
+ });\r
+\r
+ dom.setStyles(sp, {\r
+ fontFamily : dom.getAttrib(n, 'face'),\r
+ color : dom.getAttrib(n, 'color'),\r
+ backgroundColor : n.style.backgroundColor\r
+ });\r
+\r
+ if (n.size) {\r
+ if (sl)\r
+ dom.setStyle(sp, 'fontSize', sl[parseInt(n.size) - 1]);\r
+ else\r
+ dom.setAttrib(sp, 'class', cl[parseInt(n.size) - 1]);\r
+ }\r
+\r
+ dom.setAttrib(sp, 'mce_style', '');\r
+ dom.replace(sp, n, 1);\r
+ }\r
+ }\r
+ });\r
+ },\r
+\r
+ _isHidden : function() {\r
+ var s;\r
+\r
+ if (!isGecko)\r
+ return 0;\r
+\r
+ // Weird, wheres that cursor selection?\r
+ s = this.selection.getSel();\r
+ return (!s || !s.rangeCount || s.rangeCount == 0);\r
+ },\r
+\r
+ // Fix for bug #1867292\r
+ _fixNesting : function(s) {\r
+ var d = [], i;\r
+\r
+ s = s.replace(/<(\/)?([^\s>]+)[^>]*?>/g, function(a, b, c) {\r
+ var e;\r
+\r
+ // Handle end element\r
+ if (b === '/') {\r
+ if (!d.length)\r
+ return '';\r
+\r
+ if (c !== d[d.length - 1].tag) {\r
+ for (i=d.length - 1; i>=0; i--) {\r
+ if (d[i].tag === c) {\r
+ d[i].close = 1;\r
+ break;\r
+ }\r
+ }\r
+\r
+ return '';\r
+ } else {\r
+ d.pop();\r
+\r
+ if (d.length && d[d.length - 1].close) {\r
+ a = a + '</' + d[d.length - 1].tag + '>';\r
+ d.pop();\r
+ }\r
+ }\r
+ } else {\r
+ // Ignore these\r
+ if (/^(br|hr|input|meta|img|link|param)$/i.test(c))\r
+ return a;\r
+\r
+ // Ignore closed ones\r
+ if (/\/>$/.test(a))\r
+ return a;\r
+\r
+ d.push({tag : c}); // Push start element\r
+ }\r
+\r
+ return a;\r
+ });\r
+\r
+ // End all open tags\r
+ for (i=d.length - 1; i>=0; i--)\r
+ s += '</' + d[i].tag + '>';\r
+\r
+ return s;\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/EditorCommands.js */\r
+\r
+(function() {\r
+ var each = tinymce.each, isIE = tinymce.isIE, isGecko = tinymce.isGecko, isOpera = tinymce.isOpera, isWebKit = tinymce.isWebKit;\r
+\r
+ tinymce.create('tinymce.EditorCommands', {\r
+ EditorCommands : function(ed) {\r
+ this.editor = ed;\r
+ },\r
+\r
+ execCommand : function(cmd, ui, val) {\r
+ var t = this, ed = t.editor, f;\r
+\r
+ switch (cmd) {\r
+ case 'Cut':\r
+ case 'Copy':\r
+ case 'Paste':\r
+ try {\r
+ ed.getDoc().execCommand(cmd, ui, val);\r
+ } catch (ex) {\r
+ if (isGecko) {\r
+ ed.windowManager.confirm(ed.getLang('clipboard_msg'), function(s) {\r
+ if (s)\r
+ window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', 'mceExternal');\r
+ });\r
+ } else\r
+ ed.windowManager.alert(ed.getLang('clipboard_no_support'));\r
+ }\r
+\r
+ return true;\r
+\r
+ // Ignore these\r
+ case 'mceResetDesignMode':\r
+ case 'mceBeginUndoLevel':\r
+ return true;\r
+\r
+ // Ignore these\r
+ case 'unlink':\r
+ t.UnLink();\r
+ return true;\r
+\r
+ // Bundle these together\r
+ case 'JustifyLeft':\r
+ case 'JustifyCenter':\r
+ case 'JustifyRight':\r
+ case 'JustifyFull':\r
+ t.mceJustify(cmd, cmd.substring(7).toLowerCase());\r
+ return true;\r
+\r
+ case 'mceEndUndoLevel':\r
+ case 'mceAddUndoLevel':\r
+ ed.undoManager.add();\r
+ return true;\r
+\r
+ default:\r
+ f = this[cmd];\r
+\r
+ if (f) {\r
+ f.call(this, ui, val);\r
+ return true;\r
+ }\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ Indent : function() {\r
+ var ed = this.editor, d = ed.dom, s = ed.selection, e, iv, iu;\r
+\r
+ // Setup indent level\r
+ iv = ed.settings.indentation;\r
+ iu = /[a-z%]+$/i.exec(iv);\r
+ iv = parseInt(iv);\r
+\r
+ if (ed.settings.inline_styles && (!this.queryStateInsertUnorderedList() && !this.queryStateInsertOrderedList())) {\r
+ each(this._getSelectedBlocks(), function(e) {\r
+ d.setStyle(e, 'paddingLeft', (parseInt(e.style.paddingLeft || 0) + iv) + iu);\r
+ });\r
+\r
+ return;\r
+ }\r
+\r
+ ed.getDoc().execCommand('Indent', false, null);\r
+\r
+ if (isIE) {\r
+ d.getParent(s.getNode(), function(n) {\r
+ if (n.nodeName == 'BLOCKQUOTE') {\r
+ n.dir = n.style.cssText = '';\r
+ }\r
+ });\r
+ }\r
+ },\r
+\r
+ Outdent : function() {\r
+ var ed = this.editor, d = ed.dom, s = ed.selection, e, v, iv, iu;\r
+\r
+ // Setup indent level\r
+ iv = ed.settings.indentation;\r
+ iu = /[a-z%]+$/i.exec(iv);\r
+ iv = parseInt(iv);\r
+\r
+ if (ed.settings.inline_styles && (!this.queryStateInsertUnorderedList() && !this.queryStateInsertOrderedList())) {\r
+ each(this._getSelectedBlocks(), function(e) {\r
+ v = Math.max(0, parseInt(e.style.paddingLeft || 0) - iv);\r
+ d.setStyle(e, 'paddingLeft', v ? v + iu : '');\r
+ });\r
+\r
+ return;\r
+ }\r
+\r
+ ed.getDoc().execCommand('Outdent', false, null);\r
+ },\r
+\r
+ mceSetAttribute : function(u, v) {\r
+ var ed = this.editor, d = ed.dom, e;\r
+\r
+ if (e = d.getParent(ed.selection.getNode(), d.isBlock))\r
+ d.setAttrib(e, v.name, v.value);\r
+ },\r
+\r
+ mceSetContent : function(u, v) {\r
+ this.editor.setContent(v);\r
+ },\r
+\r
+ mceToggleVisualAid : function() {\r
+ var ed = this.editor;\r
+\r
+ ed.hasVisual = !ed.hasVisual;\r
+ ed.addVisual();\r
+ },\r
+\r
+ mceReplaceContent : function(u, v) {\r
+ var s = this.editor.selection;\r
+\r
+ s.setContent(v.replace(/\{\$selection\}/g, s.getContent({format : 'text'})));\r
+ },\r
+\r
+ mceInsertLink : function(u, v) {\r
+ var ed = this.editor, e = ed.dom.getParent(ed.selection.getNode(), 'A');\r
+\r
+ if (tinymce.is(v, 'string'))\r
+ v = {href : v};\r
+\r
+ function set(e) {\r
+ each(v, function(v, k) {\r
+ ed.dom.setAttrib(e, k, v);\r
+ });\r
+ };\r
+\r
+ if (!e) {\r
+ ed.execCommand('CreateLink', false, 'javascript:mctmp(0);');\r
+ each(ed.dom.select('a'), function(e) {\r
+ if (e.href == 'javascript:mctmp(0);')\r
+ set(e);\r
+ });\r
+ } else {\r
+ if (v.href)\r
+ set(e);\r
+ else\r
+ ed.dom.remove(e, 1);\r
+ }\r
+ },\r
+\r
+ UnLink : function() {\r
+ var ed = this.editor, s = ed.selection;\r
+\r
+ if (s.isCollapsed())\r
+ s.select(s.getNode());\r
+\r
+ ed.getDoc().execCommand('unlink', false, null);\r
+ s.collapse(0);\r
+ },\r
+\r
+ FontName : function(u, v) {\r
+ var t = this, ed = t.editor, s = ed.selection, e;\r
+\r
+ if (!v) {\r
+ if (s.isCollapsed())\r
+ s.select(s.getNode());\r
+\r
+ t.RemoveFormat();\r
+ } else\r
+ ed.getDoc().execCommand('FontName', false, v);\r
+ },\r
+\r
+ queryCommandValue : function(c) {\r
+ var f = this['queryValue' + c];\r
+\r
+ if (f)\r
+ return f.call(this, c);\r
+\r
+ return false;\r
+ },\r
+\r
+ queryCommandState : function(cmd) {\r
+ var f;\r
+\r
+ switch (cmd) {\r
+ // Bundle these together\r
+ case 'JustifyLeft':\r
+ case 'JustifyCenter':\r
+ case 'JustifyRight':\r
+ case 'JustifyFull':\r
+ return this.queryStateJustify(cmd, cmd.substring(7).toLowerCase());\r
+\r
+ default:\r
+ if (f = this['queryState' + cmd])\r
+ return f.call(this, cmd);\r
+ }\r
+\r
+ return -1;\r
+ },\r
+\r
+ _queryState : function(c) {\r
+ try {\r
+ return this.editor.getDoc().queryCommandState(c);\r
+ } catch (ex) {\r
+ // Ignore exception\r
+ }\r
+ },\r
+\r
+ _queryVal : function(c) {\r
+ try {\r
+ return this.editor.getDoc().queryCommandValue(c);\r
+ } catch (ex) {\r
+ // Ignore exception\r
+ }\r
+ },\r
+\r
+ queryValueFontSize : function() {\r
+ var ed = this.editor, v = 0, p;\r
+\r
+ if (isOpera || isWebKit) {\r
+ if (p = ed.dom.getParent(ed.selection.getNode(), 'FONT'))\r
+ v = p.size;\r
+\r
+ return v;\r
+ }\r
+\r
+ return this._queryVal('FontSize');\r
+ },\r
+\r
+ queryValueFontName : function() {\r
+ var ed = this.editor, v = 0, p;\r
+\r
+ if (p = ed.dom.getParent(ed.selection.getNode(), 'FONT'))\r
+ v = p.face;\r
+\r
+ if (!v)\r
+ v = this._queryVal('FontName');\r
+\r
+ return v;\r
+ },\r
+\r
+ mceJustify : function(c, v) {\r
+ var ed = this.editor, se = ed.selection, n = se.getNode(), nn = n.nodeName, bl, nb, dom = ed.dom, rm;\r
+\r
+ if (ed.settings.inline_styles && this.queryStateJustify(c, v))\r
+ rm = 1;\r
+\r
+ bl = dom.getParent(n, ed.dom.isBlock);\r
+\r
+ if (nn == 'IMG') {\r
+ if (v == 'full')\r
+ return;\r
+\r
+ if (rm) {\r
+ if (v == 'center')\r
+ dom.setStyle(n.parentNode, 'textAlign', '');\r
+\r
+ dom.setStyle(n, 'float', '');\r
+ this.mceRepaint();\r
+ return;\r
+ }\r
+\r
+ if (v == 'center') {\r
+ // Do not change table elements\r
+ if (/^(TD|TH)$/.test(bl.nodeName))\r
+ bl = 0;\r
+\r
+ if (!bl || bl.childNodes.length > 1) {\r
+ nb = dom.create('p');\r
+ nb.appendChild(n.cloneNode(false));\r
+\r
+ if (bl)\r
+ dom.insertAfter(nb, bl);\r
+ else\r
+ dom.insertAfter(nb, n);\r
+\r
+ dom.remove(n);\r
+ n = nb.firstChild;\r
+ bl = nb;\r
+ }\r
+\r
+ dom.setStyle(bl, 'textAlign', v);\r
+ dom.setStyle(n, 'float', '');\r
+ } else {\r
+ dom.setStyle(n, 'float', v);\r
+ dom.setStyle(n.parentNode, 'textAlign', '');\r
+ }\r
+\r
+ this.mceRepaint();\r
+ return;\r
+ }\r
+\r
+ // Handle the alignment outselfs, less quirks in all browsers\r
+ if (ed.settings.inline_styles && ed.settings.forced_root_block) {\r
+ if (rm)\r
+ v = '';\r
+\r
+ each(this._getSelectedBlocks(dom.getParent(se.getStart(), dom.isBlock), dom.getParent(se.getEnd(), dom.isBlock)), function(e) {\r
+ dom.setAttrib(e, 'align', '');\r
+ dom.setStyle(e, 'textAlign', v == 'full' ? 'justify' : v);\r
+ });\r
+\r
+ return;\r
+ } else if (!rm)\r
+ ed.getDoc().execCommand(c, false, null);\r
+\r
+ if (ed.settings.inline_styles) {\r
+ if (rm) {\r
+ dom.getParent(ed.selection.getNode(), function(n) {\r
+ if (n.style && n.style.textAlign)\r
+ dom.setStyle(n, 'textAlign', '');\r
+ });\r
+\r
+ return;\r
+ }\r
+\r
+ each(dom.select('*'), function(n) {\r
+ var v = n.align;\r
+\r
+ if (v) {\r
+ if (v == 'full')\r
+ v = 'justify';\r
+\r
+ dom.setStyle(n, 'textAlign', v);\r
+ dom.setAttrib(n, 'align', '');\r
+ }\r
+ });\r
+ }\r
+ },\r
+\r
+ mceSetCSSClass : function(u, v) {\r
+ this.mceSetStyleInfo(0, {command : 'setattrib', name : 'class', value : v});\r
+ },\r
+\r
+ getSelectedElement : function() {\r
+ var t = this, ed = t.editor, dom = ed.dom, se = ed.selection, r = se.getRng(), r1, r2, sc, ec, so, eo, e, sp, ep, re;\r
+\r
+ if (se.isCollapsed() || r.item)\r
+ return se.getNode();\r
+\r
+ // Setup regexp\r
+ re = ed.settings.merge_styles_invalid_parents;\r
+ if (tinymce.is(re, 'string'))\r
+ re = new RegExp(re, 'i');\r
+\r
+ if (isIE) {\r
+ r1 = r.duplicate();\r
+ r1.collapse(true);\r
+ sc = r1.parentElement();\r
+\r
+ r2 = r.duplicate();\r
+ r2.collapse(false);\r
+ ec = r2.parentElement();\r
+\r
+ if (sc != ec) {\r
+ r1.move('character', 1);\r
+ sc = r1.parentElement();\r
+ }\r
+\r
+ if (sc == ec) {\r
+ r1 = r.duplicate();\r
+ r1.moveToElementText(sc);\r
+\r
+ if (r1.compareEndPoints('StartToStart', r) == 0 && r1.compareEndPoints('EndToEnd', r) == 0)\r
+ return re && re.test(sc.nodeName) ? null : sc;\r
+ }\r
+ } else {\r
+ function getParent(n) {\r
+ return dom.getParent(n, function(n) {return n.nodeType == 1;});\r
+ };\r
+\r
+ sc = r.startContainer;\r
+ ec = r.endContainer;\r
+ so = r.startOffset;\r
+ eo = r.endOffset;\r
+\r
+ if (!r.collapsed) {\r
+ if (sc == ec) {\r
+ if (so - eo < 2) {\r
+ if (sc.hasChildNodes()) {\r
+ sp = sc.childNodes[so];\r
+ return re && re.test(sp.nodeName) ? null : sp;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ if (sc.nodeType != 3 || ec.nodeType != 3)\r
+ return null;\r
+\r
+ if (so == 0) {\r
+ sp = getParent(sc);\r
+\r
+ if (sp && sp.firstChild != sc)\r
+ sp = null;\r
+ }\r
+\r
+ if (so == sc.nodeValue.length) {\r
+ e = sc.nextSibling;\r
+\r
+ if (e && e.nodeType == 1)\r
+ sp = sc.nextSibling;\r
+ }\r
+\r
+ if (eo == 0) {\r
+ e = ec.previousSibling;\r
+\r
+ if (e && e.nodeType == 1)\r
+ ep = e;\r
+ }\r
+\r
+ if (eo == ec.nodeValue.length) {\r
+ ep = getParent(ec);\r
+\r
+ if (ep && ep.lastChild != ec)\r
+ ep = null;\r
+ }\r
+\r
+ // Same element\r
+ if (sp == ep)\r
+ return re && sp && re.test(sp.nodeName) ? null : sp;\r
+ }\r
+\r
+ return null;\r
+ },\r
+\r
+ InsertHorizontalRule : function() {\r
+ // Fix for Gecko <hr size="1" /> issue and IE bug rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");\r
+ if (isGecko || isIE)\r
+ this.editor.selection.setContent('<hr />');\r
+ else\r
+ this.editor.getDoc().execCommand('InsertHorizontalRule', false, '');\r
+ },\r
+\r
+ RemoveFormat : function() {\r
+ var t = this, ed = t.editor, s = ed.selection, b;\r
+\r
+ // Safari breaks tables\r
+ if (isWebKit)\r
+ s.setContent(s.getContent({format : 'raw'}).replace(/(<(span|b|i|strong|em|strike) [^>]+>|<(span|b|i|strong|em|strike)>|<\/(span|b|i|strong|em|strike)>|)/g, ''), {format : 'raw'});\r
+ else\r
+ ed.getDoc().execCommand('RemoveFormat', false, null);\r
+\r
+ t.mceSetStyleInfo(0, {command : 'removeformat'});\r
+ ed.addVisual();\r
+ },\r
+\r
+ mceSetStyleInfo : function(u, v) {\r
+ var t = this, ed = t.editor, d = ed.getDoc(), dom = ed.dom, e, b, s = ed.selection, nn = v.wrapper || 'span', b = s.getBookmark(), re;\r
+\r
+ function set(n, e) {\r
+ if (n.nodeType == 1) {\r
+ switch (v.command) {\r
+ case 'setattrib':\r
+ return dom.setAttrib(n, v.name, v.value);\r
+\r
+ case 'setstyle':\r
+ return dom.setStyle(n, v.name, v.value);\r
+\r
+ case 'removeformat':\r
+ return dom.setAttrib(n, 'class', '');\r
+ }\r
+ }\r
+ };\r
+\r
+ // Setup regexp\r
+ re = ed.settings.merge_styles_invalid_parents;\r
+ if (tinymce.is(re, 'string'))\r
+ re = new RegExp(re, 'i');\r
+\r
+ // Set style info on selected element\r
+ if (e = t.getSelectedElement())\r
+ set(e, 1);\r
+ else {\r
+ // Generate wrappers and set styles on them\r
+ d.execCommand('FontName', false, '__');\r
+ each(isWebKit ? dom.select('span') : dom.select('font'), function(n) {\r
+ var sp, e;\r
+\r
+ if (dom.getAttrib(n, 'face') == '__' || n.style.fontFamily === '__') {\r
+ sp = dom.create(nn, {mce_new : '1'});\r
+\r
+ set(sp);\r
+\r
+ each (n.childNodes, function(n) {\r
+ sp.appendChild(n.cloneNode(true));\r
+ });\r
+\r
+ dom.replace(sp, n);\r
+ }\r
+ });\r
+ }\r
+\r
+ // Remove wrappers inside new ones\r
+ each(dom.select(nn).reverse(), function(n) {\r
+ var p = n.parentNode;\r
+\r
+ // Check if it's an old span in a new wrapper\r
+ if (!dom.getAttrib(n, 'mce_new')) {\r
+ // Find new wrapper\r
+ p = dom.getParent(n, function(n) {\r
+ return n.nodeType == 1 && dom.getAttrib(n, 'mce_new');\r
+ });\r
+\r
+ if (p)\r
+ dom.remove(n, 1);\r
+ }\r
+ });\r
+\r
+ // Merge wrappers with parent wrappers\r
+ each(dom.select(nn).reverse(), function(n) {\r
+ var p = n.parentNode;\r
+\r
+ if (!p || !dom.getAttrib(n, 'mce_new'))\r
+ return;\r
+\r
+ // Has parent of the same type and only child\r
+ if (p.nodeName == nn.toUpperCase() && p.childNodes.length == 1)\r
+ return dom.remove(p, 1);\r
+\r
+ // Has parent that is more suitable to have the class and only child\r
+ if (n.nodeType == 1 && (!re || !re.test(p.nodeName)) && p.childNodes.length == 1) {\r
+ set(p); // Set style info on parent instead\r
+ dom.setAttrib(n, 'class', '');\r
+ }\r
+ });\r
+\r
+ // Remove empty wrappers\r
+ each(dom.select(nn).reverse(), function(n) {\r
+ if (dom.getAttrib(n, 'mce_new') || (dom.getAttribs(n).length <= 1 && n.className === '')) {\r
+ if (!dom.getAttrib(n, 'class') && !dom.getAttrib(n, 'style'))\r
+ return dom.remove(n, 1);\r
+\r
+ dom.setAttrib(n, 'mce_new', ''); // Remove mce_new marker\r
+ }\r
+ });\r
+\r
+ s.moveToBookmark(b);\r
+ },\r
+\r
+ queryStateJustify : function(c, v) {\r
+ var ed = this.editor, n = ed.selection.getNode(), dom = ed.dom;\r
+\r
+ if (n && n.nodeName == 'IMG') {\r
+ if (dom.getStyle(n, 'float') == v)\r
+ return 1;\r
+\r
+ return n.parentNode.style.textAlign == v;\r
+ }\r
+\r
+ n = dom.getParent(ed.selection.getStart(), function(n) {\r
+ return n.nodeType == 1 && n.style.textAlign;\r
+ });\r
+\r
+ if (v == 'full')\r
+ v = 'justify';\r
+\r
+ if (ed.settings.inline_styles)\r
+ return (n && n.style.textAlign == v);\r
+\r
+ return this._queryState(c);\r
+ },\r
+\r
+ HiliteColor : function(ui, val) {\r
+ var t = this, ed = t.editor, d = ed.getDoc();\r
+\r
+ function set(s) {\r
+ if (!isGecko)\r
+ return;\r
+\r
+ try {\r
+ // Try new Gecko method\r
+ d.execCommand("styleWithCSS", 0, s);\r
+ } catch (ex) {\r
+ // Use old\r
+ d.execCommand("useCSS", 0, !s);\r
+ }\r
+ };\r
+\r
+ if (isGecko || isOpera) {\r
+ set(true);\r
+ d.execCommand('hilitecolor', false, val);\r
+ set(false);\r
+ } else\r
+ d.execCommand('BackColor', false, val);\r
+ },\r
+\r
+ Undo : function() {\r
+ var ed = this.editor;\r
+\r
+ if (ed.settings.custom_undo_redo) {\r
+ ed.undoManager.undo();\r
+ ed.nodeChanged();\r
+ } else\r
+ ed.getDoc().execCommand('Undo', false, null);\r
+ },\r
+\r
+ Redo : function() {\r
+ var ed = this.editor;\r
+\r
+ if (ed.settings.custom_undo_redo) {\r
+ ed.undoManager.redo();\r
+ ed.nodeChanged();\r
+ } else\r
+ ed.getDoc().execCommand('Redo', false, null);\r
+ },\r
+\r
+ FormatBlock : function(ui, val) {\r
+ var t = this, ed = t.editor;\r
+\r
+ val = ed.settings.forced_root_block ? (val || '<p>') : val;\r
+\r
+ if (/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(ed.selection.getNode().nodeName))\r
+ t.mceRemoveNode();\r
+\r
+ if (val.indexOf('<') == -1)\r
+ val = '<' + val + '>';\r
+\r
+ if (tinymce.isGecko)\r
+ val = val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi, '$1');\r
+\r
+ ed.getDoc().execCommand('FormatBlock', false, val);\r
+ },\r
+\r
+ mceCleanup : function() {\r
+ var ed = this.editor, s = ed.selection, b = s.getBookmark();\r
+ ed.setContent(ed.getContent());\r
+ s.moveToBookmark(b);\r
+ },\r
+\r
+ mceRemoveNode : function(ui, val) {\r
+ var ed = this.editor, s = ed.selection, b, n = val || s.getNode();\r
+\r
+ // Make sure that the body node isn't removed\r
+ if (n == ed.getBody())\r
+ return;\r
+\r
+ b = s.getBookmark();\r
+ ed.dom.remove(n, 1);\r
+ s.moveToBookmark(b);\r
+ ed.nodeChanged();\r
+ },\r
+\r
+ mceSelectNodeDepth : function(ui, val) {\r
+ var ed = this.editor, s = ed.selection, c = 0;\r
+\r
+ ed.dom.getParent(s.getNode(), function(n) {\r
+ if (n.nodeType == 1 && c++ == val) {\r
+ s.select(n);\r
+ ed.nodeChanged();\r
+ return false;\r
+ }\r
+ }, ed.getBody());\r
+ },\r
+\r
+ mceSelectNode : function(u, v) {\r
+ this.editor.selection.select(v);\r
+ },\r
+\r
+ mceInsertContent : function(ui, val) {\r
+ this.editor.selection.setContent(val);\r
+ },\r
+\r
+ mceInsertRawHTML : function(ui, val) {\r
+ var ed = this.editor;\r
+\r
+ ed.selection.setContent('tiny_mce_marker');\r
+ ed.setContent(ed.getContent().replace(/tiny_mce_marker/g, val));\r
+ },\r
+\r
+ mceRepaint : function() {\r
+ var s, b, e = this.editor;\r
+\r
+ if (tinymce.isGecko) {\r
+ try {\r
+ s = e.selection;\r
+ b = s.getBookmark(true);\r
+\r
+ if (s.getSel())\r
+ s.getSel().selectAllChildren(e.getBody());\r
+\r
+ s.collapse(true);\r
+ s.moveToBookmark(b);\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+ }\r
+ },\r
+\r
+ queryStateUnderline : function() {\r
+ var ed = this.editor, n;\r
+\r
+ if (n && n.nodeName == 'A')\r
+ return false;\r
+\r
+ return this._queryState('Underline');\r
+ },\r
+\r
+ queryStateOutdent : function() {\r
+ var ed = this.editor, n;\r
+\r
+ if (ed.settings.inline_styles) {\r
+ if ((n = ed.dom.getParent(ed.selection.getStart(), ed.dom.isBlock)) && parseInt(n.style.paddingLeft) > 0)\r
+ return true;\r
+\r
+ if ((n = ed.dom.getParent(ed.selection.getEnd(), ed.dom.isBlock)) && parseInt(n.style.paddingLeft) > 0)\r
+ return true;\r
+ } else\r
+ return !!ed.dom.getParent(ed.selection.getNode(), 'BLOCKQUOTE');\r
+\r
+ return this.queryStateInsertUnorderedList() || this.queryStateInsertOrderedList();\r
+ },\r
+\r
+ queryStateInsertUnorderedList : function() {\r
+ return this.editor.dom.getParent(this.editor.selection.getNode(), 'UL');\r
+ },\r
+\r
+ queryStateInsertOrderedList : function() {\r
+ return this.editor.dom.getParent(this.editor.selection.getNode(), 'OL');\r
+ },\r
+\r
+ queryStatemceBlockQuote : function() {\r
+ return !!this.editor.dom.getParent(this.editor.selection.getStart(), function(n) {return n.nodeName === 'BLOCKQUOTE';});\r
+ },\r
+\r
+ mceBlockQuote : function() {\r
+ var t = this, ed = t.editor, s = ed.selection, dom = ed.dom, sb, eb, n, bm, bq, r, bq2, i, nl;\r
+\r
+ function getBQ(e) {\r
+ return dom.getParent(e, function(n) {return n.nodeName === 'BLOCKQUOTE';});\r
+ };\r
+\r
+ // Get start/end block\r
+ sb = dom.getParent(s.getStart(), dom.isBlock);\r
+ eb = dom.getParent(s.getEnd(), dom.isBlock);\r
+\r
+ // Remove blockquote(s)\r
+ if (bq = getBQ(sb)) {\r
+ if (sb != eb || sb.childNodes.length > 1 || (sb.childNodes.length == 1 && sb.firstChild.nodeName != 'BR'))\r
+ bm = s.getBookmark();\r
+\r
+ // Move all elements after the end block into new bq\r
+ if (getBQ(eb)) {\r
+ bq2 = bq.cloneNode(false);\r
+\r
+ while (n = eb.nextSibling)\r
+ bq2.appendChild(n.parentNode.removeChild(n));\r
+ }\r
+\r
+ // Add new bq after\r
+ if (bq2)\r
+ dom.insertAfter(bq2, bq);\r
+\r
+ // Move all selected blocks after the current bq\r
+ nl = t._getSelectedBlocks(sb, eb);\r
+ for (i = nl.length - 1; i >= 0; i--) {\r
+ dom.insertAfter(nl[i], bq);\r
+ }\r
+\r
+ // Empty bq, then remove it\r
+ if (/^\s*$/.test(bq.innerHTML))\r
+ dom.remove(bq, 1); // Keep children so boomark restoration works correctly\r
+\r
+ // Empty bq, then remote it\r
+ if (bq2 && /^\s*$/.test(bq2.innerHTML))\r
+ dom.remove(bq2, 1); // Keep children so boomark restoration works correctly\r
+\r
+ if (!bm) {\r
+ // Move caret inside empty block element\r
+ if (!isIE) {\r
+ r = ed.getDoc().createRange();\r
+ r.setStart(sb, 0);\r
+ r.setEnd(sb, 0);\r
+ s.setRng(r);\r
+ } else {\r
+ s.select(sb);\r
+ s.collapse(0);\r
+\r
+ // IE misses the empty block some times element so we must move back the caret\r
+ if (dom.getParent(s.getStart(), dom.isBlock) != sb) {\r
+ r = s.getRng();\r
+ r.move('character', -1);\r
+ r.select();\r
+ }\r
+ }\r
+ } else\r
+ t.editor.selection.moveToBookmark(bm);\r
+\r
+ return;\r
+ }\r
+\r
+ // Since IE can start with a totally empty document we need to add the first bq and paragraph\r
+ if (isIE && !sb && !eb) {\r
+ t.editor.getDoc().execCommand('Indent');\r
+ n = getBQ(s.getNode());\r
+ n.style.margin = n.dir = ''; // IE adds margin and dir to bq\r
+ return;\r
+ }\r
+\r
+ if (!sb || !eb)\r
+ return;\r
+\r
+ // If empty paragraph node then do not use bookmark\r
+ if (sb != eb || sb.childNodes.length > 1 || (sb.childNodes.length == 1 && sb.firstChild.nodeName != 'BR'))\r
+ bm = s.getBookmark();\r
+\r
+ // Move selected block elements into a bq\r
+ each(t._getSelectedBlocks(getBQ(s.getStart()), getBQ(s.getEnd())), function(e) {\r
+ // Found existing BQ add to this one\r
+ if (e.nodeName == 'BLOCKQUOTE' && !bq) {\r
+ bq = e;\r
+ return;\r
+ }\r
+\r
+ // No BQ found, create one\r
+ if (!bq) {\r
+ bq = dom.create('blockquote');\r
+ e.parentNode.insertBefore(bq, e);\r
+ }\r
+\r
+ // Add children from existing BQ\r
+ if (e.nodeName == 'BLOCKQUOTE' && bq) {\r
+ n = e.firstChild;\r
+\r
+ while (n) {\r
+ bq.appendChild(n.cloneNode(true));\r
+ n = n.nextSibling;\r
+ }\r
+\r
+ dom.remove(e);\r
+ return;\r
+ }\r
+\r
+ // Add non BQ element to BQ\r
+ bq.appendChild(dom.remove(e));\r
+ });\r
+\r
+ if (!bm) {\r
+ // Move caret inside empty block element\r
+ if (!isIE) {\r
+ r = ed.getDoc().createRange();\r
+ r.setStart(sb, 0);\r
+ r.setEnd(sb, 0);\r
+ s.setRng(r);\r
+ } else {\r
+ s.select(sb);\r
+ s.collapse(1);\r
+ }\r
+ } else\r
+ s.moveToBookmark(bm);\r
+ },\r
+/*\r
+ _mceBlockQuote : function() {\r
+ var t = this, s = t.editor.selection, b = s.getBookmark(), bq, dom = t.editor.dom;\r
+\r
+ function findBQ(e) {\r
+ return dom.getParent(e, function(n) {return n.nodeName === 'BLOCKQUOTE';});\r
+ };\r
+\r
+ // Remove blockquote(s)\r
+ if (findBQ(s.getStart())) {\r
+ each(t._getSelectedBlocks(findBQ(s.getStart()), findBQ(s.getEnd())), function(e) {\r
+ // Found BQ lets remove it\r
+ if (e.nodeName == 'BLOCKQUOTE')\r
+ dom.remove(e, 1);\r
+ });\r
+\r
+ t.editor.selection.moveToBookmark(b);\r
+ return;\r
+ }\r
+\r
+ each(t._getSelectedBlocks(findBQ(s.getStart()), findBQ(s.getEnd())), function(e) {\r
+ var n;\r
+\r
+ // Found existing BQ add to this one\r
+ if (e.nodeName == 'BLOCKQUOTE' && !bq) {\r
+ bq = e;\r
+ return;\r
+ }\r
+\r
+ // No BQ found, create one\r
+ if (!bq) {\r
+ bq = dom.create('blockquote');\r
+ e.parentNode.insertBefore(bq, e);\r
+ }\r
+\r
+ // Add children from existing BQ\r
+ if (e.nodeName == 'BLOCKQUOTE' && bq) {\r
+ n = e.firstChild;\r
+\r
+ while (n) {\r
+ bq.appendChild(n.cloneNode(true));\r
+ n = n.nextSibling;\r
+ }\r
+\r
+ dom.remove(e);\r
+\r
+ return;\r
+ }\r
+\r
+ // Add non BQ element to BQ\r
+ bq.appendChild(dom.remove(e));\r
+ });\r
+\r
+ t.editor.selection.moveToBookmark(b);\r
+ },\r
+*/\r
+ _getSelectedBlocks : function(st, en) {\r
+ var ed = this.editor, dom = ed.dom, s = ed.selection, sb, eb, n, bl = [];\r
+\r
+ sb = dom.getParent(st || s.getStart(), dom.isBlock);\r
+ eb = dom.getParent(en || s.getEnd(), dom.isBlock);\r
+\r
+ if (sb)\r
+ bl.push(sb);\r
+\r
+ if (sb && eb && sb != eb) {\r
+ n = sb;\r
+\r
+ while ((n = n.nextSibling) && n != eb) {\r
+ if (dom.isBlock(n))\r
+ bl.push(n);\r
+ }\r
+ }\r
+\r
+ if (eb && sb != eb)\r
+ bl.push(eb);\r
+\r
+ return bl;\r
+ }\r
+ });\r
+})();\r
+\r
+\r
+/* file:jscripts/tiny_mce/classes/UndoManager.js */\r
+\r
+tinymce.create('tinymce.UndoManager', {\r
+ index : 0,\r
+ data : null,\r
+ typing : 0,\r
+\r
+ UndoManager : function(ed) {\r
+ var t = this, Dispatcher = tinymce.util.Dispatcher;\r
+\r
+ t.editor = ed;\r
+ t.data = [];\r
+ t.onAdd = new Dispatcher(this);\r
+ t.onUndo = new Dispatcher(this);\r
+ t.onRedo = new Dispatcher(this);\r
+ },\r
+\r
+ add : function(l) {\r
+ var t = this, i, ed = t.editor, b, s = ed.settings, la;\r
+\r
+ l = l || {};\r
+ l.content = l.content || ed.getContent({format : 'raw', no_events : 1});\r
+\r
+ // Add undo level if needed\r
+ l.content = l.content.replace(/^\s*|\s*$/g, '');\r
+ la = t.data[t.index > 0 ? t.index - 1 : 0];\r
+ if (!l.initial && la && l.content == la.content)\r
+ return null;\r
+\r
+ // Time to compress\r
+ if (s.custom_undo_redo_levels) {\r
+ if (t.data.length > s.custom_undo_redo_levels) {\r
+ for (i = 0; i < t.data.length - 1; i++)\r
+ t.data[i] = t.data[i + 1];\r
+\r
+ t.data.length--;\r
+ t.index = t.data.length;\r
+ }\r
+ }\r
+\r
+ if (s.custom_undo_redo_restore_selection && !l.initial)\r
+ l.bookmark = b = l.bookmark || ed.selection.getBookmark();\r
+\r
+ if (t.index < t.data.length && t.data[t.index].initial)\r
+ t.index++;\r
+\r
+ // Add level\r
+ t.data.length = t.index + 1;\r
+ t.data[t.index++] = l;\r
+\r
+ if (l.initial)\r
+ t.index = 0;\r
+\r
+ // Set initial bookmark use first real undo level\r
+ if (t.data.length == 2 && t.data[0].initial)\r
+ t.data[0].bookmark = b;\r
+\r
+ t.onAdd.dispatch(t, l);\r
+ ed.isNotDirty = 0;\r
+\r
+ //console.dir(t.data);\r
+\r
+ return l;\r
+ },\r
+\r
+ undo : function() {\r
+ var t = this, ed = t.editor, l = l, i;\r
+\r
+ if (t.typing) {\r
+ t.add();\r
+ t.typing = 0;\r
+ }\r
+\r
+ if (t.index > 0) {\r
+ // If undo on last index then take snapshot\r
+ if (t.index == t.data.length && t.index > 1) {\r
+ i = t.index;\r
+ t.typing = 0;\r
+\r
+ if (!t.add())\r
+ t.index = i;\r
+\r
+ --t.index;\r
+ }\r
+\r
+ l = t.data[--t.index];\r
+ ed.setContent(l.content, {format : 'raw'});\r
+ ed.selection.moveToBookmark(l.bookmark);\r
+\r
+ t.onUndo.dispatch(t, l);\r
+ }\r
+\r
+ return l;\r
+ },\r
+\r
+ redo : function() {\r
+ var t = this, ed = t.editor, l = null;\r
+\r
+ if (t.index < t.data.length - 1) {\r
+ l = t.data[++t.index];\r
+ ed.setContent(l.content, {format : 'raw'});\r
+ ed.selection.moveToBookmark(l.bookmark);\r
+\r
+ t.onRedo.dispatch(t, l);\r
+ }\r
+\r
+ return l;\r
+ },\r
+\r
+ clear : function() {\r
+ var t = this;\r
+\r
+ t.data = [];\r
+ t.index = 0;\r
+ t.typing = 0;\r
+ t.add({initial : true});\r
+ },\r
+\r
+ hasUndo : function() {\r
+ return this.index != 0 || this.typing;\r
+ },\r
+\r
+ hasRedo : function() {\r
+ return this.index < this.data.length - 1;\r
+ }\r
+\r
+ });\r
+/* file:jscripts/tiny_mce/classes/ForceBlocks.js */\r
+\r
+(function() {\r
+ // Shorten names\r
+ var Event, isIE, isGecko, isOpera, each, extend;\r
+\r
+ Event = tinymce.dom.Event;\r
+ isIE = tinymce.isIE;\r
+ isGecko = tinymce.isGecko;\r
+ isOpera = tinymce.isOpera;\r
+ each = tinymce.each;\r
+ extend = tinymce.extend;\r
+\r
+ tinymce.create('tinymce.ForceBlocks', {\r
+ ForceBlocks : function(ed) {\r
+ var t = this, s = ed.settings, elm;\r
+\r
+ t.editor = ed;\r
+ t.dom = ed.dom;\r
+ elm = (s.forced_root_block || 'p').toLowerCase();\r
+ s.element = elm.toUpperCase();\r
+\r
+ ed.onPreInit.add(t.setup, t);\r
+\r
+ t.reOpera = new RegExp('(\\u00a0| | )<\/' + elm + '>', 'gi');\r
+ t.rePadd = new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g, elm), 'gi');\r
+ t.reNbsp2BR1 = new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g, elm), 'gi');\r
+ t.reNbsp2BR2 = new RegExp('<p( )([^>]+)>( | )<\\\/p>|<p>( | )<\\\/p>'.replace(/p/g, elm), 'gi');\r
+ t.reBR2Nbsp = new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi');\r
+ t.reTrailBr = new RegExp('\\s*<br \\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi');\r
+\r
+ function padd(ed, o) {\r
+ if (isOpera)\r
+ o.content = o.content.replace(t.reOpera, '</' + elm + '>');\r
+\r
+ o.content = o.content.replace(t.rePadd, '<' + elm + '$1$2$3$4$5$6>\u00a0</' + elm + '>');\r
+\r
+ if (!isIE && !isOpera && o.set) {\r
+ // Use instead of BR in padded paragraphs\r
+ o.content = o.content.replace(t.reNbsp2BR1, '<' + elm + '$1$2><br /></' + elm + '>');\r
+ o.content = o.content.replace(t.reNbsp2BR2, '<' + elm + '$1$2><br /></' + elm + '>');\r
+ } else {\r
+ o.content = o.content.replace(t.reBR2Nbsp, '<' + elm + '$1$2>\u00a0</' + elm + '>');\r
+ o.content = o.content.replace(t.reTrailBr, '</' + elm + '>');\r
+ }\r
+ };\r
+\r
+ ed.onBeforeSetContent.add(padd);\r
+ ed.onPostProcess.add(padd);\r
+\r
+ if (s.forced_root_block) {\r
+ ed.onInit.add(t.forceRoots, t);\r
+ ed.onSetContent.add(t.forceRoots, t);\r
+ ed.onBeforeGetContent.add(t.forceRoots, t);\r
+ }\r
+ },\r
+\r
+ setup : function() {\r
+ var t = this, ed = t.editor, s = ed.settings;\r
+\r
+ // Force root blocks when typing and when getting output\r
+ if (s.forced_root_block) {\r
+ ed.onKeyUp.add(t.forceRoots, t);\r
+ ed.onPreProcess.add(t.forceRoots, t);\r
+ }\r
+\r
+ if (s.force_br_newlines) {\r
+ // Force IE to produce BRs on enter\r
+ if (isIE) {\r
+ ed.onKeyPress.add(function(ed, e) {\r
+ var n, s = ed.selection;\r
+\r
+ if (e.keyCode == 13 && s.getNode().nodeName != 'LI') {\r
+ s.setContent('<br id="__" /> ', {format : 'raw'});\r
+ n = ed.dom.get('__');\r
+ n.removeAttribute('id');\r
+ s.select(n);\r
+ s.collapse();\r
+ return Event.cancel(e);\r
+ }\r
+ });\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ if (!isIE && s.force_p_newlines) {\r
+/* ed.onPreProcess.add(function(ed, o) {\r
+ each(ed.dom.select('br', o.node), function(n) {\r
+ var p = n.parentNode;\r
+\r
+ // Replace <p><br /></p> with <p> </p>\r
+ if (p && p.nodeName == 'p' && (p.childNodes.length == 1 || p.lastChild == n)) {\r
+ p.replaceChild(ed.getDoc().createTextNode('\u00a0'), n);\r
+ }\r
+ });\r
+ });*/\r
+\r
+ ed.onKeyPress.add(function(ed, e) {\r
+ if (e.keyCode == 13 && !e.shiftKey) {\r
+ if (!t.insertPara(e))\r
+ Event.cancel(e);\r
+ }\r
+ });\r
+\r
+ if (isGecko) {\r
+ ed.onKeyDown.add(function(ed, e) {\r
+ if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)\r
+ t.backspaceDelete(e, e.keyCode == 8);\r
+ });\r
+ }\r
+ }\r
+\r
+ function ren(rn, na) {\r
+ var ne = ed.dom.create(na);\r
+\r
+ each(rn.attributes, function(a) {\r
+ if (a.specified && a.nodeValue)\r
+ ne.setAttribute(a.nodeName.toLowerCase(), a.nodeValue);\r
+ });\r
+\r
+ each(rn.childNodes, function(n) {\r
+ ne.appendChild(n.cloneNode(true));\r
+ });\r
+\r
+ rn.parentNode.replaceChild(ne, rn);\r
+\r
+ return ne;\r
+ };\r
+\r
+ // Replaces IE:s auto generated paragraphs with the specified element name\r
+ if (isIE && s.element != 'P') {\r
+ ed.onKeyPress.add(function(ed, e) {\r
+ t.lastElm = ed.selection.getNode().nodeName;\r
+ });\r
+\r
+ ed.onKeyUp.add(function(ed, e) {\r
+ var bl, sel = ed.selection, n = sel.getNode(), b = ed.getBody();\r
+\r
+ if (b.childNodes.length === 1 && n.nodeName == 'P') {\r
+ n = ren(n, s.element);\r
+ sel.select(n);\r
+ sel.collapse();\r
+ ed.nodeChanged();\r
+ } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {\r
+ bl = ed.dom.getParent(n, 'P');\r
+\r
+ if (bl) {\r
+ ren(bl, s.element);\r
+ ed.nodeChanged();\r
+ }\r
+ }\r
+ });\r
+ }\r
+ },\r
+\r
+ find : function(n, t, s) {\r
+ var ed = this.editor, w = ed.getDoc().createTreeWalker(n, 4, null, false), c = -1;\r
+\r
+ while (n = w.nextNode()) {\r
+ c++;\r
+\r
+ // Index by node\r
+ if (t == 0 && n == s)\r
+ return c;\r
+\r
+ // Node by index\r
+ if (t == 1 && c == s)\r
+ return n;\r
+ }\r
+\r
+ return -1;\r
+ },\r
+\r
+ forceRoots : function(ed, e) {\r
+ var t = this, ed = t.editor, b = ed.getBody(), d = ed.getDoc(), se = ed.selection, s = se.getSel(), r = se.getRng(), si = -2, ei, so, eo, tr, c = -0xFFFFFF;\r
+ var nx, bl, bp, sp, le, nl = b.childNodes, i;\r
+\r
+ // Fix for bug #1863847\r
+ if (e && e.keyCode == 13)\r
+ return true;\r
+\r
+ // Wrap non blocks into blocks\r
+ for (i = nl.length - 1; i >= 0; i--) {\r
+ nx = nl[i];\r
+\r
+ // Is text or non block element\r
+ if (nx.nodeType == 3 || (!t.dom.isBlock(nx) && nx.nodeType != 8)) {\r
+ if (!bl) {\r
+ // Create new block but ignore whitespace\r
+ if (nx.nodeType != 3 || /[^\s]/g.test(nx.nodeValue)) {\r
+ // Store selection\r
+ if (si == -2 && r) {\r
+ if (!isIE) {\r
+ so = r.startOffset;\r
+ eo = r.endOffset;\r
+ si = t.find(b, 0, r.startContainer);\r
+ ei = t.find(b, 0, r.endContainer);\r
+ } else {\r
+ tr = d.body.createTextRange();\r
+ tr.moveToElementText(b);\r
+ tr.collapse(1);\r
+ bp = tr.move('character', c) * -1;\r
+\r
+ tr = r.duplicate();\r
+ tr.collapse(1);\r
+ sp = tr.move('character', c) * -1;\r
+\r
+ tr = r.duplicate();\r
+ tr.collapse(0);\r
+ le = (tr.move('character', c) * -1) - sp;\r
+\r
+ si = sp - bp;\r
+ ei = le;\r
+ }\r
+ }\r
+\r
+ bl = ed.dom.create(ed.settings.forced_root_block);\r
+ bl.appendChild(nx.cloneNode(1));\r
+ nx.parentNode.replaceChild(bl, nx);\r
+ }\r
+ } else {\r
+ if (bl.hasChildNodes())\r
+ bl.insertBefore(nx, bl.firstChild);\r
+ else\r
+ bl.appendChild(nx);\r
+ }\r
+ } else\r
+ bl = null; // Time to create new block\r
+ }\r
+\r
+ // Restore selection\r
+ if (si != -2) {\r
+ if (!isIE) {\r
+ bl = d.getElementsByTagName(ed.settings.element)[0];\r
+ r = d.createRange();\r
+\r
+ // Select last location or generated block\r
+ if (si != -1)\r
+ r.setStart(t.find(b, 1, si), so);\r
+ else\r
+ r.setStart(bl, 0);\r
+\r
+ // Select last location or generated block\r
+ if (ei != -1)\r
+ r.setEnd(t.find(b, 1, ei), eo);\r
+ else\r
+ r.setEnd(bl, 0);\r
+\r
+ if (s) {\r
+ s.removeAllRanges();\r
+ s.addRange(r);\r
+ }\r
+ } else {\r
+ try {\r
+ r = s.createRange();\r
+ r.moveToElementText(b);\r
+ r.collapse(1);\r
+ r.moveStart('character', si);\r
+ r.moveEnd('character', ei);\r
+ r.select();\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+ }\r
+ }\r
+ },\r
+\r
+ getParentBlock : function(n) {\r
+ var d = this.dom;\r
+\r
+ return d.getParent(n, d.isBlock);\r
+ },\r
+\r
+ insertPara : function(e) {\r
+ var t = this, ed = t.editor, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body;\r
+ var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = ed.dom.getViewPort(ed.getWin()), y, ch;\r
+\r
+ function isEmpty(n) {\r
+ n = n.innerHTML;\r
+ n = n.replace(/<(img|hr|table)/gi, '-'); // Keep these convert them to - chars\r
+ n = n.replace(/<[^>]+>/g, ''); // Remove all tags\r
+\r
+ return n.replace(/[ \t\r\n]+/g, '') == '';\r
+ };\r
+\r
+ // If root blocks are forced then use Operas default behavior since it's really good\r
+// Removed due to bug: #1853816\r
+// if (se.forced_root_block && isOpera)\r
+// return true;\r
+\r
+ // Setup before range\r
+ rb = d.createRange();\r
+\r
+ // If is before the first block element and in body, then move it into first block element\r
+ rb.setStart(s.anchorNode, s.anchorOffset);\r
+ rb.collapse(true);\r
+\r
+ // Setup after range\r
+ ra = d.createRange();\r
+\r
+ // If is before the first block element and in body, then move it into first block element\r
+ ra.setStart(s.focusNode, s.focusOffset);\r
+ ra.collapse(true);\r
+\r
+ // Setup start/end points\r
+ dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;\r
+ sn = dir ? s.anchorNode : s.focusNode;\r
+ so = dir ? s.anchorOffset : s.focusOffset;\r
+ en = dir ? s.focusNode : s.anchorNode;\r
+ eo = dir ? s.focusOffset : s.anchorOffset;\r
+\r
+ // If the caret is in an invalid location in FF we need to move it into the first block\r
+ if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {\r
+ sn = en = sn.firstChild;\r
+ so = eo = 0;\r
+ rb = d.createRange();\r
+ rb.setStart(sn, 0);\r
+ ra = d.createRange();\r
+ ra.setStart(en, 0);\r
+ }\r
+\r
+ // Never use body as start or end node\r
+ sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
+ sn = sn.nodeName == "BODY" ? sn.firstChild : sn;\r
+ en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
+ en = en.nodeName == "BODY" ? en.firstChild : en;\r
+\r
+ // Get start and end blocks\r
+ sb = t.getParentBlock(sn);\r
+ eb = t.getParentBlock(en);\r
+ bn = sb ? sb.nodeName : se.element; // Get block name to create\r
+\r
+ // Return inside list use default browser behavior\r
+ if (t.dom.getParent(sb, function(n) { return /OL|UL|PRE/.test(n.nodeName); }))\r
+ return true;\r
+\r
+ // If caption or absolute layers then always generate new blocks within\r
+ if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(sb.style.position))) {\r
+ bn = se.element;\r
+ sb = null;\r
+ }\r
+\r
+ // If caption or absolute layers then always generate new blocks within\r
+ if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(eb.style.position))) {\r
+ bn = se.element;\r
+ eb = null;\r
+ }\r
+\r
+ // Use P instead\r
+ if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(sb.style.cssFloat))) {\r
+ bn = se.element;\r
+ sb = eb = null;\r
+ }\r
+\r
+ // Setup new before and after blocks\r
+ bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);\r
+ aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);\r
+\r
+ // Remove id from after clone\r
+ aft.removeAttribute('id');\r
+\r
+ // Is header and cursor is at the end, then force paragraph under\r
+ if (/^(H[1-6])$/.test(bn) && sn.nodeValue && so == sn.nodeValue.length)\r
+ aft = ed.dom.create(se.element);\r
+\r
+ // Find start chop node\r
+ n = sc = sn;\r
+ do {\r
+ if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
+ break;\r
+\r
+ sc = n;\r
+ } while ((n = n.previousSibling ? n.previousSibling : n.parentNode));\r
+\r
+ // Find end chop node\r
+ n = ec = en;\r
+ do {\r
+ if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
+ break;\r
+\r
+ ec = n;\r
+ } while ((n = n.nextSibling ? n.nextSibling : n.parentNode));\r
+\r
+ // Place first chop part into before block element\r
+ if (sc.nodeName == bn)\r
+ rb.setStart(sc, 0);\r
+ else\r
+ rb.setStartBefore(sc);\r
+\r
+ rb.setEnd(sn, so);\r
+ bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
+\r
+ // Place secnd chop part within new block element\r
+ try {\r
+ ra.setEndAfter(ec);\r
+ } catch(ex) {\r
+ //console.debug(s.focusNode, s.focusOffset);\r
+ }\r
+\r
+ ra.setStart(en, eo);\r
+ aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
+\r
+ // Create range around everything\r
+ r = d.createRange();\r
+ if (!sc.previousSibling && sc.parentNode.nodeName == bn) {\r
+ r.setStartBefore(sc.parentNode);\r
+ } else {\r
+ if (rb.startContainer.nodeName == bn && rb.startOffset == 0)\r
+ r.setStartBefore(rb.startContainer);\r
+ else\r
+ r.setStart(rb.startContainer, rb.startOffset);\r
+ }\r
+\r
+ if (!ec.nextSibling && ec.parentNode.nodeName == bn)\r
+ r.setEndAfter(ec.parentNode);\r
+ else\r
+ r.setEnd(ra.endContainer, ra.endOffset);\r
+\r
+ // Delete and replace it with new block elements\r
+ r.deleteContents();\r
+\r
+ if (isOpera)\r
+ ed.getWin().scrollTo(0, vp.y);\r
+\r
+ // Never wrap blocks in blocks\r
+ if (bef.firstChild && bef.firstChild.nodeName == bn)\r
+ bef.innerHTML = bef.firstChild.innerHTML;\r
+\r
+ if (aft.firstChild && aft.firstChild.nodeName == bn)\r
+ aft.innerHTML = aft.firstChild.innerHTML;\r
+\r
+ // Padd empty blocks\r
+ if (isEmpty(bef))\r
+ bef.innerHTML = '<br />';\r
+\r
+ if (isEmpty(aft))\r
+ aft.innerHTML = isOpera ? ' ' : '<br />'; // Extra space for Opera so that the caret can move there\r
+\r
+ // Opera needs this one backwards\r
+ if (isOpera) {\r
+ r.insertNode(bef);\r
+ r.insertNode(aft);\r
+ } else {\r
+ r.insertNode(aft);\r
+ r.insertNode(bef);\r
+ }\r
+\r
+ // Normalize\r
+ aft.normalize();\r
+ bef.normalize();\r
+\r
+ // Move cursor and scroll into view\r
+ r = d.createRange();\r
+ r.selectNodeContents(aft);\r
+ r.collapse(1);\r
+ s.removeAllRanges();\r
+ s.addRange(r);\r
+\r
+ // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs\r
+ y = ed.dom.getPos(aft).y;\r
+ ch = aft.clientHeight;\r
+\r
+ // Is element within viewport\r
+ if (y < vp.y || y + ch > vp.y + vp.h) {\r
+ ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + ch);\r
+ //console.debug('SCROLL!', 'vp.y: ' + vp.y, 'y' + y, 'vp.h' + vp.h, 'clientHeight' + aft.clientHeight, 'yyy: ' + (y < vp.y ? y : y - vp.h + aft.clientHeight));\r
+ }\r
+\r
+ return false;\r
+ },\r
+\r
+ backspaceDelete : function(e, bs) {\r
+ var t = this, ed = t.editor, b = ed.getBody(), n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn;\r
+\r
+ // The caret sometimes gets stuck in Gecko if you delete empty paragraphs\r
+ // This workaround removes the element by hand and moves the caret to the previous element\r
+ if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {\r
+ if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {\r
+ // Find previous block element\r
+ n = sc;\r
+ while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;\r
+\r
+ if (n) {\r
+ if (sc != b.firstChild) {\r
+ // Find last text node\r
+ w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
+ while (tn = w.nextNode())\r
+ n = tn;\r
+\r
+ // Place caret at the end of last text node\r
+ r = ed.getDoc().createRange();\r
+ r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);\r
+ r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);\r
+ se.setRng(r);\r
+\r
+ // Remove the target container\r
+ ed.dom.remove(sc);\r
+ }\r
+\r
+ return Event.cancel(e);\r
+ }\r
+ }\r
+ }\r
+\r
+ // Gecko generates BR elements here and there, we don't like those so lets remove them\r
+ function handler(e) {\r
+ e = e.target;\r
+\r
+ // A new BR was created in a block element, remove it\r
+ if (e && e.parentNode && e.nodeName == 'BR' && (n = t.getParentBlock(e))) {\r
+ Event.remove(b, 'DOMNodeInserted', handler);\r
+\r
+ // Only remove BR elements that got inserted in the middle of the text\r
+ if (e.previousSibling || e.nextSibling)\r
+ ed.dom.remove(e);\r
+ }\r
+ };\r
+\r
+ // Listen for new nodes\r
+ Event._add(b, 'DOMNodeInserted', handler);\r
+\r
+ // Remove listener\r
+ window.setTimeout(function() {\r
+ Event._remove(b, 'DOMNodeInserted', handler);\r
+ }, 1);\r
+ }\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/ControlManager.js */\r
+\r
+(function() {\r
+ // Shorten names\r
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;\r
+\r
+ tinymce.create('tinymce.ControlManager', {\r
+ ControlManager : function(ed, s) {\r
+ var t = this, i;\r
+\r
+ s = s || {};\r
+ t.editor = ed;\r
+ t.controls = {};\r
+ t.onAdd = new tinymce.util.Dispatcher(t);\r
+ t.onPostRender = new tinymce.util.Dispatcher(t);\r
+ t.prefix = s.prefix || ed.id + '_';\r
+ t._cls = {};\r
+\r
+ t.onPostRender.add(function() {\r
+ each(t.controls, function(c) {\r
+ c.postRender();\r
+ });\r
+ });\r
+ },\r
+\r
+ get : function(id) {\r
+ return this.controls[this.prefix + id] || this.controls[id];\r
+ },\r
+\r
+ setActive : function(id, s) {\r
+ var c = null;\r
+\r
+ if (c = this.get(id))\r
+ c.setActive(s);\r
+\r
+ return c;\r
+ },\r
+\r
+ setDisabled : function(id, s) {\r
+ var c = null;\r
+\r
+ if (c = this.get(id))\r
+ c.setDisabled(s);\r
+\r
+ return c;\r
+ },\r
+\r
+ add : function(c) {\r
+ var t = this;\r
+\r
+ if (c) {\r
+ t.controls[c.id] = c;\r
+ t.onAdd.dispatch(c, t);\r
+ }\r
+\r
+ return c;\r
+ },\r
+\r
+ createControl : function(n) {\r
+ var c, t = this, ed = t.editor;\r
+\r
+ each(ed.plugins, function(p) {\r
+ if (p.createControl) {\r
+ c = p.createControl(n, t);\r
+\r
+ if (c)\r
+ return false;\r
+ }\r
+ });\r
+\r
+ switch (n) {\r
+ case "|":\r
+ case "separator":\r
+ return t.createSeparator();\r
+ }\r
+\r
+ if (!c && ed.buttons && (c = ed.buttons[n]))\r
+ return t.createButton(n, c);\r
+\r
+ return t.add(c);\r
+ },\r
+\r
+ createDropMenu : function(id, s, cc) {\r
+ var t = this, ed = t.editor, c, bm, v, cls;\r
+\r
+ s = extend({\r
+ 'class' : 'mceDropDown',\r
+ constrain : ed.settings.constrain_menus\r
+ }, s);\r
+\r
+ s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';\r
+ if (v = ed.getParam('skin_variant'))\r
+ s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);\r
+\r
+ id = t.prefix + id;\r
+ cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;\r
+ c = t.controls[id] = new cls(id, s);\r
+ c.onAddItem.add(function(c, o) {\r
+ var s = o.settings;\r
+\r
+ s.title = ed.getLang(s.title, s.title);\r
+\r
+ if (!s.onclick) {\r
+ s.onclick = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, s.value);\r
+ };\r
+ }\r
+ });\r
+\r
+ ed.onRemove.add(function() {\r
+ c.destroy();\r
+ });\r
+\r
+ // Fix for bug #1897785, #1898007\r
+ if (tinymce.isIE) {\r
+ c.onShowMenu.add(function() {\r
+ var s = ed.selection, n = s.getNode();\r
+\r
+ if (n.nodeName == 'IMG')\r
+ bm = s.getBookmark();\r
+ else\r
+ bm = 0;\r
+ });\r
+\r
+ c.onHideMenu.add(function() {\r
+ if (bm)\r
+ ed.selection.moveToBookmark(bm);\r
+ });\r
+ }\r
+\r
+ return t.add(c);\r
+ },\r
+\r
+ createListBox : function(id, s, cc) {\r
+ var t = this, ed = t.editor, cmd, c, cls;\r
+\r
+ if (t.get(id))\r
+ return null;\r
+\r
+ s.title = ed.translate(s.title);\r
+ s.scope = s.scope || ed;\r
+\r
+ if (!s.onselect) {\r
+ s.onselect = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
+\r
+ s = extend({\r
+ title : s.title,\r
+ 'class' : 'mce_' + id,\r
+ scope : s.scope,\r
+ control_manager : t\r
+ }, s);\r
+\r
+ id = t.prefix + id;\r
+\r
+ if (ed.settings.use_native_selects)\r
+ c = new tinymce.ui.NativeListBox(id, s);\r
+ else {\r
+ cls = cc || t._cls.listbox || tinymce.ui.ListBox;\r
+ c = new cls(id, s);\r
+ }\r
+\r
+ t.controls[id] = c;\r
+\r
+ // Fix focus problem in Safari\r
+ if (tinymce.isWebKit) {\r
+ c.onPostRender.add(function(c, n) {\r
+ // Store bookmark on mousedown\r
+ Event.add(n, 'mousedown', function() {\r
+ ed.bookmark = ed.selection.getBookmark('simple');\r
+ });\r
+\r
+ // Restore on focus, since it might be lost\r
+ Event.add(n, 'focus', function() {\r
+ ed.selection.moveToBookmark(ed.bookmark);\r
+ ed.bookmark = null;\r
+ });\r
+ });\r
+ }\r
+\r
+ if (c.hideMenu)\r
+ ed.onMouseDown.add(c.hideMenu, c);\r
+\r
+ return t.add(c);\r
+ },\r
+\r
+ createButton : function(id, s, cc) {\r
+ var t = this, ed = t.editor, o, c, cls;\r
+\r
+ if (t.get(id))\r
+ return null;\r
+\r
+ s.title = ed.translate(s.title);\r
+ s.scope = s.scope || ed;\r
+\r
+ if (!s.onclick && !s.menu_button) {\r
+ s.onclick = function() {\r
+ ed.execCommand(s.cmd, s.ui || false, s.value);\r
+ };\r
+ }\r
+\r
+ s = extend({\r
+ title : s.title,\r
+ 'class' : 'mce_' + id,\r
+ unavailable_prefix : ed.getLang('unavailable', ''),\r
+ scope : s.scope,\r
+ control_manager : t\r
+ }, s);\r
+\r
+ id = t.prefix + id;\r
+\r
+ if (s.menu_button) {\r
+ cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;\r
+ c = new cls(id, s);\r
+ ed.onMouseDown.add(c.hideMenu, c);\r
+ } else {\r
+ cls = t._cls.button || tinymce.ui.Button;\r
+ c = new cls(id, s);\r
+ }\r
+\r
+ return t.add(c);\r
+ },\r
+\r
+ createMenuButton : function(id, s) {\r
+ s = s || {};\r
+ s.menu_button = 1;\r
+\r
+ return this.createButton(id, s);\r
+ },\r
+\r
+ createSplitButton : function(id, s, cc) {\r
+ var t = this, ed = t.editor, cmd, c, cls;\r
+\r
+ if (t.get(id))\r
+ return null;\r
+\r
+ s.title = ed.translate(s.title);\r
+ s.scope = s.scope || ed;\r
+\r
+ if (!s.onclick) {\r
+ s.onclick = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
+\r
+ if (!s.onselect) {\r
+ s.onselect = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
+\r
+ s = extend({\r
+ title : s.title,\r
+ 'class' : 'mce_' + id,\r
+ scope : s.scope,\r
+ control_manager : t\r
+ }, s);\r
+\r
+ id = t.prefix + id;\r
+ cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;\r
+ c = t.add(new cls(id, s));\r
+ ed.onMouseDown.add(c.hideMenu, c);\r
+\r
+ return c;\r
+ },\r
+\r
+ createColorSplitButton : function(id, s, cc) {\r
+ var t = this, ed = t.editor, cmd, c, cls;\r
+\r
+ if (t.get(id))\r
+ return null;\r
+\r
+ s.title = ed.translate(s.title);\r
+ s.scope = s.scope || ed;\r
+\r
+ if (!s.onclick) {\r
+ s.onclick = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
+\r
+ if (!s.onselect) {\r
+ s.onselect = function(v) {\r
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+ };\r
+ }\r
+\r
+ s = extend({\r
+ title : s.title,\r
+ 'class' : 'mce_' + id,\r
+ 'menu_class' : ed.getParam('skin') + 'Skin',\r
+ scope : s.scope,\r
+ more_colors_title : ed.getLang('more_colors')\r
+ }, s);\r
+\r
+ id = t.prefix + id;\r
+ cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;\r
+ c = new cls(id, s);\r
+ ed.onMouseDown.add(c.hideMenu, c);\r
+\r
+ // Remove the menu element when the editor is removed\r
+ ed.onRemove.add(function() {\r
+ c.destroy();\r
+ });\r
+\r
+ return t.add(c);\r
+ },\r
+\r
+ createToolbar : function(id, s, cc) {\r
+ var c, t = this, cls;\r
+\r
+ id = t.prefix + id;\r
+ cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;\r
+ c = new cls(id, s);\r
+\r
+ if (t.get(id))\r
+ return null;\r
+\r
+ return t.add(c);\r
+ },\r
+\r
+ createSeparator : function(cc) {\r
+ var cls = cc || this._cls.separator || tinymce.ui.Separator;\r
+\r
+ return new cls();\r
+ },\r
+\r
+ setControlType : function(n, c) {\r
+ return this._cls[n.toLowerCase()] = c;\r
+ },\r
+\r
+ destroy : function() {\r
+ each(this.controls, function(c) {\r
+ c.destroy();\r
+ });\r
+\r
+ this.controls = null;\r
+ }\r
+\r
+ });\r
+})();\r
+\r
+/* file:jscripts/tiny_mce/classes/WindowManager.js */\r
+\r
+(function() {\r
+ var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;\r
+\r
+ tinymce.create('tinymce.WindowManager', {\r
+ WindowManager : function(ed) {\r
+ var t = this;\r
+\r
+ t.editor = ed;\r
+ t.onOpen = new Dispatcher(t);\r
+ t.onClose = new Dispatcher(t);\r
+ t.params = {};\r
+ t.features = {};\r
+ },\r
+\r
+ open : function(s, p) {\r
+ var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;\r
+\r
+ // Default some options\r
+ s = s || {};\r
+ p = p || {};\r
+ sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window\r
+ sh = isOpera ? vp.h : screen.height;\r
+ s.name = s.name || 'mc_' + new Date().getTime();\r
+ s.width = parseInt(s.width || 320);\r
+ s.height = parseInt(s.height || 240);\r
+ s.resizable = true;\r
+ s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);\r
+ s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);\r
+ p.inline = false;\r
+ p.mce_width = s.width;\r
+ p.mce_height = s.height;\r
+ p.mce_auto_focus = s.auto_focus;\r
+\r
+ if (mo) {\r
+ if (isIE) {\r
+ s.center = true;\r
+ s.help = false;\r
+ s.dialogWidth = s.width + 'px';\r
+ s.dialogHeight = s.height + 'px';\r
+ s.scroll = s.scrollbars || false;\r
+ } else\r
+ s.modal = s.alwaysRaised = s.dialog = s.centerscreen = s.dependent = true;\r
+ }\r
+\r
+ // Build features string\r
+ each(s, function(v, k) {\r
+ if (tinymce.is(v, 'boolean'))\r
+ v = v ? 'yes' : 'no';\r
+\r
+ if (!/^(name|url)$/.test(k)) {\r
+ if (isIE && mo)\r
+ f += (f ? ';' : '') + k + ':' + v;\r
+ else\r
+ f += (f ? ',' : '') + k + '=' + v;\r
+ }\r
+ });\r
+\r
+ t.features = s;\r
+ t.params = p;\r
+ t.onOpen.dispatch(t, s, p);\r
+\r
+ u = s.url || s.file;\r
+ if (tinymce.relaxedDomain)\r
+ u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain;\r
+\r
+ try {\r
+ if (isIE && mo) {\r
+ w = 1;\r
+ window.showModalDialog(s.url || s.file, window, f);\r
+ } else\r
+ w = window.open(u, s.name, f);\r
+ } catch (ex) {\r
+ // Ignore\r
+ }\r
+\r
+ if (!w)\r
+ alert(t.editor.getLang('popup_blocked'));\r
+ },\r
+\r
+ close : function(w) {\r
+ w.close();\r
+ this.onClose.dispatch(this);\r
+ },\r
+\r
+ createInstance : function(cl, a, b, c, d, e) {\r
+ var f = tinymce.resolve(cl);\r
+\r
+ return new f(a, b, c, d, e);\r
+ },\r
+\r
+ confirm : function(t, cb, s) {\r
+ cb.call(s || this, confirm(this._decode(this.editor.getLang(t, t))));\r
+ },\r
+\r
+ alert : function(tx, cb, s) {\r
+ var t = this;\r
+ \r
+ alert(t._decode(t.editor.getLang(tx, tx)));\r
+\r
+ if (cb)\r
+ cb.call(s || t);\r
+ },\r
+\r
+ // Internal functions\r
+\r
+ _decode : function(s) {\r
+ return tinymce.DOM.decode(s).replace(/\\n/g, '\n');\r
+ }\r
+\r
+ });\r
+}());
\ No newline at end of file
-/**
- * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Makes select boxes editable.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-var TinyMCE_EditableSelects = {
- editSelectElm : null,
-
- init : function() {
- var nl = document.getElementsByTagName("select"), i, d = document, o;
-
- for (i=0; i<nl.length; i++) {
- if (nl[i].className.indexOf('mceEditableSelect') != -1) {
- o = new Option('(value)', '__mce_add_custom__');
-
- o.className = 'mceAddSelectValue';
-
- nl[i].options[nl[i].options.length] = o;
- nl[i].setAttribute('onchange', 'TinyMCE_EditableSelects.onChangeEditableSelect(this);');
- }
- }
- },
-
- onChangeEditableSelect : function(se) {
- var d = document, ne;
-
- if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
- ne = d.createElement("input");
- ne.id = se.id + "_custom";
- ne.name = se.name + "_custom";
- ne.type = "text";
-
- ne.style.width = se.clientWidth;
- se.parentNode.insertBefore(ne, se);
- se.style.display = 'none';
- ne.focus();
- ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
- TinyMCE_EditableSelects.editSelectElm = se;
- }
- },
-
- onBlurEditableSelectInput : function() {
- var se = TinyMCE_EditableSelects.editSelectElm;
-
- if (se) {
- if (se.previousSibling.value != '') {
- addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
- selectByValue(document.forms[0], se.id, se.previousSibling.value);
- } else
- selectByValue(document.forms[0], se.id, '');
-
- se.style.display = 'inline';
- se.parentNode.removeChild(se.previousSibling);
- TinyMCE_EditableSelects.editSelectElm = null;
- }
- }
-};
+/**\r
+ * $Id: editable_selects.js 520 2008-01-07 16:30:32Z spocke $\r
+ *\r
+ * Makes select boxes editable.\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+var TinyMCE_EditableSelects = {\r
+ editSelectElm : null,\r
+\r
+ init : function() {\r
+ var nl = document.getElementsByTagName("select"), i, d = document, o;\r
+\r
+ for (i=0; i<nl.length; i++) {\r
+ if (nl[i].className.indexOf('mceEditableSelect') != -1) {\r
+ o = new Option('(value)', '__mce_add_custom__');\r
+\r
+ o.className = 'mceAddSelectValue';\r
+\r
+ nl[i].options[nl[i].options.length] = o;\r
+ nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;\r
+ }\r
+ }\r
+ },\r
+\r
+ onChangeEditableSelect : function(e) {\r
+ var d = document, ne, se = window.event ? window.event.srcElement : e.target;\r
+\r
+ if (se.options[se.selectedIndex].value == '__mce_add_custom__') {\r
+ ne = d.createElement("input");\r
+ ne.id = se.id + "_custom";\r
+ ne.name = se.name + "_custom";\r
+ ne.type = "text";\r
+\r
+ ne.style.width = se.offsetWidth + 'px';\r
+ se.parentNode.insertBefore(ne, se);\r
+ se.style.display = 'none';\r
+ ne.focus();\r
+ ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;\r
+ TinyMCE_EditableSelects.editSelectElm = se;\r
+ }\r
+ },\r
+\r
+ onBlurEditableSelectInput : function() {\r
+ var se = TinyMCE_EditableSelects.editSelectElm;\r
+\r
+ if (se) {\r
+ if (se.previousSibling.value != '') {\r
+ addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);\r
+ selectByValue(document.forms[0], se.id, se.previousSibling.value);\r
+ } else\r
+ selectByValue(document.forms[0], se.id, '');\r
+\r
+ se.style.display = 'inline';\r
+ se.parentNode.removeChild(se.previousSibling);\r
+ TinyMCE_EditableSelects.editSelectElm = null;\r
+ }\r
+ }\r
+};\r
-/**
- * $Id: form_utils.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Various form utilitiy functions.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-var themeBaseURL = tinyMCE.baseURL + '/themes/' + tinyMCE.getParam("theme");
-
-function getColorPickerHTML(id, target_form_element) {
- var h = "";
-
- h += '<a id="' + id + '_link" href="javascript:void(0);" onkeydown="pickColor(event,\'' + target_form_element +'\');" onmousedown="pickColor(event,\'' + target_form_element +'\');return false;">';
- h += '<img id="' + id + '" src="' + themeBaseURL + '/images/color.gif"';
- h += ' onmouseover="this.className=\'mceButtonOver\'"';
- h += ' onmouseout="this.className=\'mceButtonNormal\'"';
- h += ' onmousedown="this.className=\'mceButtonDown\'"';
- h += ' width="20" height="16" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';
- h += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';
-
- return h;
-}
-
-function pickColor(e, target_form_element) {
- if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown")
- tinyMCEPopup.pickColor(e, target_form_element);
-}
-
-function updateColor(img_id, form_element_id) {
- document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
-}
-
-function setBrowserDisabled(id, state) {
- var img = document.getElementById(id);
- var lnk = document.getElementById(id + "_link");
-
- if (lnk) {
- if (state) {
- lnk.setAttribute("realhref", lnk.getAttribute("href"));
- lnk.removeAttribute("href");
- tinyMCE.switchClass(img, 'mceButtonDisabled', true);
- } else {
- lnk.setAttribute("href", lnk.getAttribute("realhref"));
- tinyMCE.switchClass(img, 'mceButtonNormal', false);
- }
- }
-}
-
-function getBrowserHTML(id, target_form_element, type, prefix) {
- var option = prefix + "_" + type + "_browser_callback";
- var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
- if (cb == null)
- return "";
-
- var html = "";
-
- html += '<a id="' + id + '_link" href="javascript:openBrower(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;">';
- html += '<img id="' + id + '" src="' + themeBaseURL + '/images/browse.gif"';
- html += ' onmouseover="this.className=\'mceButtonOver\';"';
- html += ' onmouseout="this.className=\'mceButtonNormal\';"';
- html += ' onmousedown="this.className=\'mceButtonDown\';"';
- html += ' width="20" height="18" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';
- html += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';
-
- return html;
-}
-
-function openBrower(img_id, target_form_element, type, option) {
- var img = document.getElementById(img_id);
-
- if (img.className != "mceButtonDisabled")
- tinyMCEPopup.openBrowser(target_form_element, type, option);
-}
-
-function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
- if (!form_obj || !form_obj.elements[field_name])
- return;
-
- var sel = form_obj.elements[field_name];
-
- var found = false;
- for (var i=0; i<sel.options.length; i++) {
- var option = sel.options[i];
-
- if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
- option.selected = true;
- found = true;
- } else
- option.selected = false;
- }
-
- if (!found && add_custom && value != '') {
- var option = new Option(value, value);
- option.selected = true;
- sel.options[sel.options.length] = option;
- sel.selectedIndex = sel.options.length - 1;
- }
-
- return found;
-}
-
-function getSelectValue(form_obj, field_name) {
- var elm = form_obj.elements[field_name];
-
- if (elm == null || elm.options == null)
- return "";
-
- return elm.options[elm.selectedIndex].value;
-}
-
-function addSelectValue(form_obj, field_name, name, value) {
- var s = form_obj.elements[field_name];
- var o = new Option(name, value);
- s.options[s.options.length] = o;
-}
-
-function addClassesToList(list_id, specific_option) {
- // Setup class droplist
- var styleSelectElm = document.getElementById(list_id);
- var styles = tinyMCE.getParam('theme_advanced_styles', false);
- styles = tinyMCE.getParam(specific_option, styles);
-
- if (styles) {
- var stylesAr = styles.split(';');
-
- for (var i=0; i<stylesAr.length; i++) {
- if (stylesAr != "") {
- var key, value;
-
- key = stylesAr[i].split('=')[0];
- value = stylesAr[i].split('=')[1];
-
- styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
- }
- }
- } else {
- // Use auto impored classes
- var csses = tinyMCE.getCSSClasses(tinyMCE.getWindowArg('editor_id'));
- for (var i=0; i<csses.length; i++)
- styleSelectElm.options[styleSelectElm.length] = new Option(csses[i], csses[i]);
- }
-}
-
-function isVisible(element_id) {
- var elm = document.getElementById(element_id);
-
- return elm && elm.style.display != "none";
-}
-
-function convertRGBToHex(col) {
- var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
-
- var rgb = col.replace(re, "$1,$2,$3").split(',');
- if (rgb.length == 3) {
- r = parseInt(rgb[0]).toString(16);
- g = parseInt(rgb[1]).toString(16);
- b = parseInt(rgb[2]).toString(16);
-
- r = r.length == 1 ? '0' + r : r;
- g = g.length == 1 ? '0' + g : g;
- b = b.length == 1 ? '0' + b : b;
-
- return "#" + r + g + b;
- }
-
- return col;
-}
-
-function convertHexToRGB(col) {
- if (col.indexOf('#') != -1) {
- col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
-
- r = parseInt(col.substring(0, 2), 16);
- g = parseInt(col.substring(2, 4), 16);
- b = parseInt(col.substring(4, 6), 16);
-
- return "rgb(" + r + "," + g + "," + b + ")";
- }
-
- return col;
-}
-
-function trimSize(size) {
- return size.replace(new RegExp('[^0-9%]', 'gi'), '');
-}
-
-function getCSSSize(size) {
- size = trimSize(size);
-
- if (size == "")
- return "";
-
- return size.indexOf('%') != -1 ? size : size + "px";
-}
-
-function getStyle(elm, attrib, style) {
- var val = tinyMCE.getAttrib(elm, attrib);
-
- if (val != '')
- return '' + val;
-
- if (typeof(style) == 'undefined')
- style = attrib;
-
- val = eval('elm.style.' + style);
-
- return val == null ? '' : '' + val;
-}
+/**\r
+ * $Id: form_utils.js 673 2008-03-06 13:26:20Z spocke $\r
+ *\r
+ * Various form utilitiy functions.\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));\r
+\r
+function getColorPickerHTML(id, target_form_element) {\r
+ var h = "";\r
+\r
+ h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';\r
+ h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>';\r
+\r
+ return h;\r
+}\r
+\r
+function updateColor(img_id, form_element_id) {\r
+ document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;\r
+}\r
+\r
+function setBrowserDisabled(id, state) {\r
+ var img = document.getElementById(id);\r
+ var lnk = document.getElementById(id + "_link");\r
+\r
+ if (lnk) {\r
+ if (state) {\r
+ lnk.setAttribute("realhref", lnk.getAttribute("href"));\r
+ lnk.removeAttribute("href");\r
+ tinyMCEPopup.dom.addClass(img, 'disabled');\r
+ } else {\r
+ if (lnk.getAttribute("realhref"))\r
+ lnk.setAttribute("href", lnk.getAttribute("realhref"));\r
+\r
+ tinyMCEPopup.dom.removeClass(img, 'disabled');\r
+ }\r
+ }\r
+}\r
+\r
+function getBrowserHTML(id, target_form_element, type, prefix) {\r
+ var option = prefix + "_" + type + "_browser_callback", cb, html;\r
+\r
+ cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));\r
+\r
+ if (!cb)\r
+ return "";\r
+\r
+ html = "";\r
+ html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';\r
+ html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>';\r
+\r
+ return html;\r
+}\r
+\r
+function openBrowser(img_id, target_form_element, type, option) {\r
+ var img = document.getElementById(img_id);\r
+\r
+ if (img.className != "mceButtonDisabled")\r
+ tinyMCEPopup.openBrowser(target_form_element, type, option);\r
+}\r
+\r
+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {\r
+ if (!form_obj || !form_obj.elements[field_name])\r
+ return;\r
+\r
+ var sel = form_obj.elements[field_name];\r
+\r
+ var found = false;\r
+ for (var i=0; i<sel.options.length; i++) {\r
+ var option = sel.options[i];\r
+\r
+ if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {\r
+ option.selected = true;\r
+ found = true;\r
+ } else\r
+ option.selected = false;\r
+ }\r
+\r
+ if (!found && add_custom && value != '') {\r
+ var option = new Option(value, value);\r
+ option.selected = true;\r
+ sel.options[sel.options.length] = option;\r
+ sel.selectedIndex = sel.options.length - 1;\r
+ }\r
+\r
+ return found;\r
+}\r
+\r
+function getSelectValue(form_obj, field_name) {\r
+ var elm = form_obj.elements[field_name];\r
+\r
+ if (elm == null || elm.options == null)\r
+ return "";\r
+\r
+ return elm.options[elm.selectedIndex].value;\r
+}\r
+\r
+function addSelectValue(form_obj, field_name, name, value) {\r
+ var s = form_obj.elements[field_name];\r
+ var o = new Option(name, value);\r
+ s.options[s.options.length] = o;\r
+}\r
+\r
+function addClassesToList(list_id, specific_option) {\r
+ // Setup class droplist\r
+ var styleSelectElm = document.getElementById(list_id);\r
+ var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);\r
+ styles = tinyMCEPopup.getParam(specific_option, styles);\r
+\r
+ if (styles) {\r
+ var stylesAr = styles.split(';');\r
+\r
+ for (var i=0; i<stylesAr.length; i++) {\r
+ if (stylesAr != "") {\r
+ var key, value;\r
+\r
+ key = stylesAr[i].split('=')[0];\r
+ value = stylesAr[i].split('=')[1];\r
+\r
+ styleSelectElm.options[styleSelectElm.length] = new Option(key, value);\r
+ }\r
+ }\r
+ } else {\r
+ tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {\r
+ styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);\r
+ });\r
+ }\r
+}\r
+\r
+function isVisible(element_id) {\r
+ var elm = document.getElementById(element_id);\r
+\r
+ return elm && elm.style.display != "none";\r
+}\r
+\r
+function convertRGBToHex(col) {\r
+ var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");\r
+\r
+ var rgb = col.replace(re, "$1,$2,$3").split(',');\r
+ if (rgb.length == 3) {\r
+ r = parseInt(rgb[0]).toString(16);\r
+ g = parseInt(rgb[1]).toString(16);\r
+ b = parseInt(rgb[2]).toString(16);\r
+\r
+ r = r.length == 1 ? '0' + r : r;\r
+ g = g.length == 1 ? '0' + g : g;\r
+ b = b.length == 1 ? '0' + b : b;\r
+\r
+ return "#" + r + g + b;\r
+ }\r
+\r
+ return col;\r
+}\r
+\r
+function convertHexToRGB(col) {\r
+ if (col.indexOf('#') != -1) {\r
+ col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
+\r
+ r = parseInt(col.substring(0, 2), 16);\r
+ g = parseInt(col.substring(2, 4), 16);\r
+ b = parseInt(col.substring(4, 6), 16);\r
+\r
+ return "rgb(" + r + "," + g + "," + b + ")";\r
+ }\r
+\r
+ return col;\r
+}\r
+\r
+function trimSize(size) {\r
+ return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');\r
+}\r
+\r
+function getCSSSize(size) {\r
+ size = trimSize(size);\r
+\r
+ if (size == "")\r
+ return "";\r
+\r
+ // Add px\r
+ if (/^[0-9]+$/.test(size))\r
+ size += 'px';\r
+\r
+ return size;\r
+}\r
+\r
+function getStyle(elm, attrib, style) {\r
+ var val = tinyMCEPopup.dom.getAttrib(elm, attrib);\r
+\r
+ if (val != '')\r
+ return '' + val;\r
+\r
+ if (typeof(style) == 'undefined')\r
+ style = attrib;\r
+\r
+ return tinyMCEPopup.dom.getStyle(elm, style);\r
+}\r
+++ /dev/null
-/**
- * $Id: mclayer.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Moxiecode floating layer script.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-function MCLayer(id) {
- this.id = id;
- this.settings = new Array();
- this.blockerElement = null;
- this.isMSIE = navigator.appName == "Microsoft Internet Explorer";
- this.events = false;
- this.autoHideCallback = null;
-}
-
-MCLayer.prototype = {
- moveRelativeTo : function(re, p, a) {
- var rep = this.getAbsPosition(re);
- var w = parseInt(re.offsetWidth);
- var h = parseInt(re.offsetHeight);
- var x, y;
-
- switch (p) {
- case "tl":
- break;
-
- case "tr":
- x = rep.absLeft + w;
- y = rep.absTop;
- break;
-
- case "bl":
- break;
-
- case "br":
- break;
- }
-
- this.moveTo(x, y);
- },
-
- moveBy : function(dx, dy) {
- var e = this.getElement();
- var x = parseInt(e.style.left);
- var y = parseInt(e.style.top);
-
- e.style.left = (x + dx) + "px";
- e.style.top = (y + dy) + "px";
-
- this.updateBlocker();
- },
-
- moveTo : function(x, y) {
- var e = this.getElement();
-
- e.style.left = x + "px";
- e.style.top = y + "px";
-
- this.updateBlocker();
- },
-
- show : function() {
- MCLayer.visibleLayer = this;
-
- this.getElement().style.display = 'block';
- this.updateBlocker();
- },
-
- hide : function() {
- this.getElement().style.display = 'none';
- this.updateBlocker();
- },
-
- setAutoHide : function(s, cb) {
- this.autoHideCallback = cb;
- this.registerEventHandlers();
- },
-
- getElement : function() {
- return document.getElementById(this.id);
- },
-
- updateBlocker : function() {
- if (!this.isMSIE)
- return;
-
- var e = this.getElement();
- var b = this.getBlocker();
- var x = this.parseInt(e.style.left);
- var y = this.parseInt(e.style.top);
- var w = this.parseInt(e.offsetWidth);
- var h = this.parseInt(e.offsetHeight);
-
- b.style.left = x + 'px';
- b.style.top = y + 'px';
- b.style.width = w + 'px';
- b.style.height = h + 'px';
- b.style.display = e.style.display;
- },
-
- getBlocker : function() {
- if (!this.blockerElement) {
- var d = document, b = d.createElement("iframe");
-
- b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0';
- b.src = 'javascript:false;';
- b.frameBorder = '0';
- b.scrolling = 'no';
-
- d.body.appendChild(b);
- this.blockerElement = b;
- }
-
- return this.blockerElement;
- },
-
- getAbsPosition : function(n) {
- var p = {absLeft : 0, absTop : 0};
-
- while (n) {
- p.absLeft += n.offsetLeft;
- p.absTop += n.offsetTop;
- n = n.offsetParent;
- }
-
- return p;
- },
-
- registerEventHandlers : function() {
- if (!this.events) {
- var d = document;
-
- this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown);
-
- this.events = true;
- }
- },
-
- addEvent : function(o, n, h) {
- if (o.attachEvent)
- o.attachEvent("on" + n, h);
- else
- o.addEventListener(n, h, false);
- },
-
- onMouseDown : function(e) {
- e = typeof(e) == "undefined" ? window.event : e;
- var b = document.body;
- var l = MCLayer.visibleLayer;
-
- if (l) {
- var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX;
- var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY;
- var el = l.getElement();
- var x = parseInt(el.style.left);
- var y = parseInt(el.style.top);
- var w = parseInt(el.offsetWidth);
- var h = parseInt(el.offsetHeight);
-
- if (!(mx > x && mx < x + w && my > y && my < y + h)) {
- MCLayer.visibleLayer = null;
-
- if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my))
- return true;
-
- l.hide();
- }
- }
- },
-
- addCSSClass : function(e, c) {
- this.removeCSSClass(e, c);
- var a = this.explode(' ', e.className);
- a[a.length] = c;
- e.className = a.join(' ');
- },
-
- removeCSSClass : function(e, c) {
- var a = this.explode(' ', e.className), i;
-
- for (i=0; i<a.length; i++) {
- if (a[i] == c)
- a[i] = '';
- }
-
- e.className = a.join(' ');
- },
-
- explode : function(d, s) {
- var ar = s.split(d);
- var oar = new Array();
-
- for (var i = 0; i<ar.length; i++) {
- if (ar[i] != "")
- oar[oar.length] = ar[i];
- }
-
- return oar;
- },
-
- parseInt : function(s) {
- if (s == null || s == '')
- return 0;
-
- return parseInt(s);
- }
-}
-/**
- * $Id: mctabs.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Moxiecode DHTML Tabs script.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-function MCTabs() {
- this.settings = new Array();
-};
-
-MCTabs.prototype.init = function(settings) {
- this.settings = settings;
-};
-
-MCTabs.prototype.getParam = function(name, default_value) {
- var value = null;
-
- value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
-
- // Fix bool values
- if (value == "true" || value == "false")
- return (value == "true");
-
- return value;
-};
-
-MCTabs.prototype.displayTab = function(tab_id, panel_id) {
- var panelElm = document.getElementById(panel_id);
- var panelContainerElm = panelElm ? panelElm.parentNode : null;
- var tabElm = document.getElementById(tab_id);
- var tabContainerElm = tabElm ? tabElm.parentNode : null;
- var selectionClass = this.getParam('selection_class', 'current');
-
- if (tabElm && tabContainerElm) {
- var nodes = tabContainerElm.childNodes;
-
- // Hide all other tabs
- for (var i=0; i<nodes.length; i++) {
- if (nodes[i].nodeName == "LI")
- nodes[i].className = '';
- }
-
- // Show selected tab
- tabElm.className = 'current';
- }
-
- if (panelElm && panelContainerElm) {
- var nodes = panelContainerElm.childNodes;
-
- // Hide all other panels
- for (var i=0; i<nodes.length; i++) {
- if (nodes[i].nodeName == "DIV")
- nodes[i].className = 'panel';
- }
-
- // Show selected panel
- panelElm.className = 'current';
- }
-};
-
-MCTabs.prototype.getAnchor = function() {
- var pos, url = document.location.href;
-
- if ((pos = url.lastIndexOf('#')) != -1)
- return url.substring(pos + 1);
-
- return "";
-};
-
-// Global instance
-var mcTabs = new MCTabs();
+/**\r
+ * $Id: mctabs.js 758 2008-03-30 13:53:29Z spocke $\r
+ *\r
+ * Moxiecode DHTML Tabs script.\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+function MCTabs() {\r
+ this.settings = [];\r
+};\r
+\r
+MCTabs.prototype.init = function(settings) {\r
+ this.settings = settings;\r
+};\r
+\r
+MCTabs.prototype.getParam = function(name, default_value) {\r
+ var value = null;\r
+\r
+ value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];\r
+\r
+ // Fix bool values\r
+ if (value == "true" || value == "false")\r
+ return (value == "true");\r
+\r
+ return value;\r
+};\r
+\r
+MCTabs.prototype.displayTab = function(tab_id, panel_id) {\r
+ var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i;\r
+\r
+ panelElm= document.getElementById(panel_id);\r
+ panelContainerElm = panelElm ? panelElm.parentNode : null;\r
+ tabElm = document.getElementById(tab_id);\r
+ tabContainerElm = tabElm ? tabElm.parentNode : null;\r
+ selectionClass = this.getParam('selection_class', 'current');\r
+\r
+ if (tabElm && tabContainerElm) {\r
+ nodes = tabContainerElm.childNodes;\r
+\r
+ // Hide all other tabs\r
+ for (i = 0; i < nodes.length; i++) {\r
+ if (nodes[i].nodeName == "LI")\r
+ nodes[i].className = '';\r
+ }\r
+\r
+ // Show selected tab\r
+ tabElm.className = 'current';\r
+ }\r
+\r
+ if (panelElm && panelContainerElm) {\r
+ nodes = panelContainerElm.childNodes;\r
+\r
+ // Hide all other panels\r
+ for (i = 0; i < nodes.length; i++) {\r
+ if (nodes[i].nodeName == "DIV")\r
+ nodes[i].className = 'panel';\r
+ }\r
+\r
+ // Show selected panel\r
+ panelElm.className = 'current';\r
+ }\r
+};\r
+\r
+MCTabs.prototype.getAnchor = function() {\r
+ var pos, url = document.location.href;\r
+\r
+ if ((pos = url.lastIndexOf('#')) != -1)\r
+ return url.substring(pos + 1);\r
+\r
+ return "";\r
+};\r
+\r
+// Global instance\r
+var mcTabs = new MCTabs();\r
-/**
- * $Id: validate.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Various form validation methods.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-/**
- // String validation:
-
- if (!Validator.isEmail('myemail'))
- alert('Invalid email.');
-
- // Form validation:
-
- var f = document.forms['myform'];
-
- if (!Validator.isEmail(f.myemail))
- alert('Invalid email.');
-*/
-
-var Validator = {
- isEmail : function(s) {
- return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
- },
-
- isAbsUrl : function(s) {
- return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
- },
-
- isSize : function(s) {
- return this.test(s, '^[0-9]+(px|%)?$');
- },
-
- isId : function(s) {
- return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
- },
-
- isEmpty : function(s) {
- var nl, i;
-
- if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
- return true;
-
- if (s.type == 'checkbox' && !s.checked)
- return true;
-
- if (s.type == 'radio') {
- for (i=0, nl = s.form.elements; i<nl.length; i++) {
- if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
- return false;
- }
-
- return true;
- }
-
- return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
- },
-
- isNumber : function(s, d) {
- return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
- },
-
- test : function(s, p) {
- s = s.nodeType == 1 ? s.value : s;
-
- return s == '' || new RegExp(p).test(s);
- }
-};
-
-var AutoValidator = {
- settings : {
- id_cls : 'id',
- int_cls : 'int',
- url_cls : 'url',
- number_cls : 'number',
- email_cls : 'email',
- size_cls : 'size',
- required_cls : 'required',
- invalid_cls : 'invalid',
- min_cls : 'min',
- max_cls : 'max'
- },
-
- init : function(s) {
- var n;
-
- for (n in s)
- this.settings[n] = s[n];
- },
-
- validate : function(f) {
- var i, nl, s = this.settings, c = 0;
-
- nl = this.tags(f, 'label');
- for (i=0; i<nl.length; i++)
- this.removeClass(nl[i], s.invalid_cls);
-
- c += this.validateElms(f, 'input');
- c += this.validateElms(f, 'select');
- c += this.validateElms(f, 'textarea');
-
- return c == 3;
- },
-
- invalidate : function(n) {
- this.mark(n.form, n);
- },
-
- reset : function(e) {
- var t = new Array('label', 'input', 'select', 'textarea');
- var i, j, nl, s = this.settings;
-
- if (e == null)
- return;
-
- for (i=0; i<t.length; i++) {
- nl = this.tags(e.form ? e.form : e, t[i]);
- for (j=0; j<nl.length; j++)
- this.removeClass(nl[j], s.invalid_cls);
- }
- },
-
- validateElms : function(f, e) {
- var nl, i, n, s = this.settings, st = true, va = Validator, v;
-
- nl = this.tags(f, e);
- for (i=0; i<nl.length; i++) {
- n = nl[i];
-
- this.removeClass(n, s.invalid_cls);
-
- if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.size_cls) && !va.isSize(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.id_cls) && !va.isId(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.min_cls, true)) {
- v = this.getNum(n, s.min_cls);
-
- if (isNaN(v) || parseInt(n.value) < parseInt(v))
- st = this.mark(f, n);
- }
-
- if (this.hasClass(n, s.max_cls, true)) {
- v = this.getNum(n, s.max_cls);
-
- if (isNaN(v) || parseInt(n.value) > parseInt(v))
- st = this.mark(f, n);
- }
- }
-
- return st;
- },
-
- hasClass : function(n, c, d) {
- return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
- },
-
- getNum : function(n, c) {
- c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
- c = c.replace(/[^0-9]/g, '');
-
- return c;
- },
-
- addClass : function(n, c, b) {
- var o = this.removeClass(n, c);
- n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
- },
-
- removeClass : function(n, c) {
- c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
- return n.className = c != ' ' ? c : '';
- },
-
- tags : function(f, s) {
- return f.getElementsByTagName(s);
- },
-
- mark : function(f, n) {
- var s = this.settings;
-
- this.addClass(n, s.invalid_cls);
- this.markLabels(f, n, s.invalid_cls);
-
- return false;
- },
-
- markLabels : function(f, n, ic) {
- var nl, i;
-
- nl = this.tags(f, "label");
- for (i=0; i<nl.length; i++) {
- if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
- this.addClass(nl[i], ic);
- }
-
- return null;
- }
-};
+/**\r
+ * $Id: validate.js 758 2008-03-30 13:53:29Z spocke $\r
+ *\r
+ * Various form validation methods.\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+/**\r
+ // String validation:\r
+\r
+ if (!Validator.isEmail('myemail'))\r
+ alert('Invalid email.');\r
+\r
+ // Form validation:\r
+\r
+ var f = document.forms['myform'];\r
+\r
+ if (!Validator.isEmail(f.myemail))\r
+ alert('Invalid email.');\r
+*/\r
+\r
+var Validator = {\r
+ isEmail : function(s) {\r
+ return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');\r
+ },\r
+\r
+ isAbsUrl : function(s) {\r
+ return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');\r
+ },\r
+\r
+ isSize : function(s) {\r
+ return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');\r
+ },\r
+\r
+ isId : function(s) {\r
+ return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');\r
+ },\r
+\r
+ isEmpty : function(s) {\r
+ var nl, i;\r
+\r
+ if (s.nodeName == 'SELECT' && s.selectedIndex < 1)\r
+ return true;\r
+\r
+ if (s.type == 'checkbox' && !s.checked)\r
+ return true;\r
+\r
+ if (s.type == 'radio') {\r
+ for (i=0, nl = s.form.elements; i<nl.length; i++) {\r
+ if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);\r
+ },\r
+\r
+ isNumber : function(s, d) {\r
+ return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));\r
+ },\r
+\r
+ test : function(s, p) {\r
+ s = s.nodeType == 1 ? s.value : s;\r
+\r
+ return s == '' || new RegExp(p).test(s);\r
+ }\r
+};\r
+\r
+var AutoValidator = {\r
+ settings : {\r
+ id_cls : 'id',\r
+ int_cls : 'int',\r
+ url_cls : 'url',\r
+ number_cls : 'number',\r
+ email_cls : 'email',\r
+ size_cls : 'size',\r
+ required_cls : 'required',\r
+ invalid_cls : 'invalid',\r
+ min_cls : 'min',\r
+ max_cls : 'max'\r
+ },\r
+\r
+ init : function(s) {\r
+ var n;\r
+\r
+ for (n in s)\r
+ this.settings[n] = s[n];\r
+ },\r
+\r
+ validate : function(f) {\r
+ var i, nl, s = this.settings, c = 0;\r
+\r
+ nl = this.tags(f, 'label');\r
+ for (i=0; i<nl.length; i++)\r
+ this.removeClass(nl[i], s.invalid_cls);\r
+\r
+ c += this.validateElms(f, 'input');\r
+ c += this.validateElms(f, 'select');\r
+ c += this.validateElms(f, 'textarea');\r
+\r
+ return c == 3;\r
+ },\r
+\r
+ invalidate : function(n) {\r
+ this.mark(n.form, n);\r
+ },\r
+\r
+ reset : function(e) {\r
+ var t = ['label', 'input', 'select', 'textarea'];\r
+ var i, j, nl, s = this.settings;\r
+\r
+ if (e == null)\r
+ return;\r
+\r
+ for (i=0; i<t.length; i++) {\r
+ nl = this.tags(e.form ? e.form : e, t[i]);\r
+ for (j=0; j<nl.length; j++)\r
+ this.removeClass(nl[j], s.invalid_cls);\r
+ }\r
+ },\r
+\r
+ validateElms : function(f, e) {\r
+ var nl, i, n, s = this.settings, st = true, va = Validator, v;\r
+\r
+ nl = this.tags(f, e);\r
+ for (i=0; i<nl.length; i++) {\r
+ n = nl[i];\r
+\r
+ this.removeClass(n, s.invalid_cls);\r
+\r
+ if (this.hasClass(n, s.required_cls) && va.isEmpty(n))\r
+ st = this.mark(f, n);\r
+\r
+ if (this.hasClass(n, s.number_cls) && !va.isNumber(n))\r
+ st = this.mark(f, n);\r
+\r
+ if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))\r
+ st = this.mark(f, n);\r
+\r
+ if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))\r
+ st = this.mark(f, n);\r
+\r
+ if (this.hasClass(n, s.email_cls) && !va.isEmail(n))\r
+ st = this.mark(f, n);\r
+\r
+ if (this.hasClass(n, s.size_cls) && !va.isSize(n))\r
+ st = this.mark(f, n);\r
+\r
+ if (this.hasClass(n, s.id_cls) && !va.isId(n))\r
+ st = this.mark(f, n);\r
+\r
+ if (this.hasClass(n, s.min_cls, true)) {\r
+ v = this.getNum(n, s.min_cls);\r
+\r
+ if (isNaN(v) || parseInt(n.value) < parseInt(v))\r
+ st = this.mark(f, n);\r
+ }\r
+\r
+ if (this.hasClass(n, s.max_cls, true)) {\r
+ v = this.getNum(n, s.max_cls);\r
+\r
+ if (isNaN(v) || parseInt(n.value) > parseInt(v))\r
+ st = this.mark(f, n);\r
+ }\r
+ }\r
+\r
+ return st;\r
+ },\r
+\r
+ hasClass : function(n, c, d) {\r
+ return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);\r
+ },\r
+\r
+ getNum : function(n, c) {\r
+ c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];\r
+ c = c.replace(/[^0-9]/g, '');\r
+\r
+ return c;\r
+ },\r
+\r
+ addClass : function(n, c, b) {\r
+ var o = this.removeClass(n, c);\r
+ n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;\r
+ },\r
+\r
+ removeClass : function(n, c) {\r
+ c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');\r
+ return n.className = c != ' ' ? c : '';\r
+ },\r
+\r
+ tags : function(f, s) {\r
+ return f.getElementsByTagName(s);\r
+ },\r
+\r
+ mark : function(f, n) {\r
+ var s = this.settings;\r
+\r
+ this.addClass(n, s.invalid_cls);\r
+ this.markLabels(f, n, s.invalid_cls);\r
+\r
+ return false;\r
+ },\r
+\r
+ markLabels : function(f, n, ic) {\r
+ var nl, i;\r
+\r
+ nl = this.tags(f, "label");\r
+ for (i=0; i<nl.length; i++) {\r
+ if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)\r
+ this.addClass(nl[i], ic);\r
+ }\r
+\r
+ return null;\r
+ }\r
+};\r
+++ /dev/null
-<?php
-
-/*************************************************************************
-* *
-* class.html2text.inc *
-* *
-*************************************************************************
-* *
-* Converts HTML to formatted plain text *
-* *
-* Copyright (c) 2005 Jon Abernathy <jon@chuggnutt.com> *
-* All rights reserved. *
-* *
-* This script is free software; you can redistribute it and/or modify *
-* it under the terms of the GNU General Public License as published by *
-* the Free Software Foundation; either version 2 of the License, or *
-* (at your option) any later version. *
-* *
-* The GNU General Public License can be found at *
-* http://www.gnu.org/copyleft/gpl.html. *
-* *
-* This script is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU General Public License for more details. *
-* *
-* Author(s): Jon Abernathy <jon@chuggnutt.com> *
-* *
-* Last modified: 04/06/05 *
-* Modified: 2004/05/19 (tbr) *
-* *
-*************************************************************************/
-
-
-/**
-* Takes HTML and converts it to formatted, plain text.
-*
-* Thanks to Alexander Krug (http://www.krugar.de/) to pointing out and
-* correcting an error in the regexp search array. Fixed 7/30/03.
-*
-* Updated set_html() function's file reading mechanism, 9/25/03.
-*
-* Thanks to Joss Sanglier (http://www.dancingbear.co.uk/) for adding
-* several more HTML entity codes to the $search and $replace arrays.
-* Updated 11/7/03.
-*
-* Thanks to Darius Kasperavicius (http://www.dar.dar.lt/) for
-* suggesting the addition of $allowed_tags and its supporting function
-* (which I slightly modified). Updated 3/12/04.
-*
-* Thanks to Justin Dearing for pointing out that a replacement for the
-* <TH> tag was missing, and suggesting an appropriate fix.
-* Updated 8/25/04.
-*
-* Thanks to Mathieu Collas (http://www.myefarm.com/) for finding a
-* display/formatting bug in the _build_link_list() function: email
-* readers would show the left bracket and number ("[1") as part of the
-* rendered email address.
-* Updated 12/16/04.
-*
-* Thanks to Wojciech Bajon (http://histeria.pl/) for submitting code
-* to handle relative links, which I hadn't considered. I modified his
-* code a bit to handle normal HTTP links and MAILTO links. Also for
-* suggesting three additional HTML entity codes to search for.
-* Updated 03/02/05.
-*
-* Thanks to Jacob Chandler for pointing out another link condition
-* for the _build_link_list() function: "https".
-* Updated 04/06/05.
-*
-* @author Jon Abernathy <jon@chuggnutt.com>
-* @version 0.6.1
-* @since PHP 4.0.2
-*/
-class html2text
-{
-
- /**
- * Contains the HTML content to convert.
- *
- * @var string $html
- * @access public
- */
- var $html;
-
- /**
- * Contains the converted, formatted text.
- *
- * @var string $text
- * @access public
- */
- var $text;
-
- /**
- * Maximum width of the formatted text, in columns.
- *
- * @var integer $width
- * @access public
- */
- var $width = 70;
-
- /**
- * List of preg* regular expression patterns to search for,
- * used in conjunction with $replace.
- *
- * @var array $search
- * @access public
- * @see $replace
- */
- var $search = array(
- "/\r/", // Non-legal carriage return
- "/[\n\t]+/", // Newlines and tabs
- '/<script[^>]*>.*?<\/script>/i', // <script>s -- which strip_tags supposedly has problems with
- //'/<!-- .* -->/', // Comments -- which strip_tags might have problem a with
- '/<a [^>]*href=("|\')([^"\']+)\1[^>]*>(.+?)<\/a>/ie', // <a href="">
- '/<h[123][^>]*>(.+?)<\/h[123]>/ie', // H1 - H3
- '/<h[456][^>]*>(.+?)<\/h[456]>/ie', // H4 - H6
- '/<p[^>]*>/i', // <P>
- '/<br[^>]*>/i', // <br>
- '/<b[^>]*>(.+?)<\/b>/ie', // <b>
- '/<i[^>]*>(.+?)<\/i>/i', // <i>
- '/(<ul[^>]*>|<\/ul>)/i', // <ul> and </ul>
- '/(<ol[^>]*>|<\/ol>)/i', // <ol> and </ol>
- '/<li[^>]*>/i', // <li>
- '/<hr[^>]*>/i', // <hr>
- '/(<table[^>]*>|<\/table>)/i', // <table> and </table>
- '/(<tr[^>]*>|<\/tr>)/i', // <tr> and </tr>
- '/<td[^>]*>(.+?)<\/td>/i', // <td> and </td>
- '/<th[^>]*>(.+?)<\/th>/ie', // <th> and </th>
- '/ /i',
- '/"/i',
- '/>/i',
- '/</i',
- '/&(amp|#38);/i',
- '/©/i',
- '/™/i',
- '/“/',
- '/”/',
- '/–/',
- '/&#(8217|39);/',
- '/©/',
- '/™/',
- '/—/',
- '/“/',
- '/”/',
- '/•/',
- '/®/i',
- '/•/i',
- '/&[&;]+;/i'
- );
-
- /**
- * List of pattern replacements corresponding to patterns searched.
- *
- * @var array $replace
- * @access public
- * @see $search
- */
- var $replace = array(
- '', // Non-legal carriage return
- ' ', // Newlines and tabs
- '', // <script>s -- which strip_tags supposedly has problems with
- //'', // Comments -- which strip_tags might have problem a with
- '$this->_build_link_list("\\2", "\\3")', // <a href="">
- "strtoupper(\"\n\n\\1\n\n\")", // H1 - H3
- "ucwords(\"\n\n\\1\n\")", // H4 - H6
- "\n\n", // <P>
- "\n", // <br>
- 'strtoupper("\\1")', // <b>
- '_\\1_', // <i>
- "\n\n", // <ul> and </ul>
- "\n\n", // <ol> and </ol>
- "\t*", // <li>
- "\n-------------------------\n", // <hr>
- "\n\n", // <table> and </table>
- "\n", // <tr> and </tr>
- "\t\t\\1\n", // <td> and </td>
- "strtoupper(\"\t\t\\1\n\")", // <th> and </th>
- ' ',
- '"',
- '>',
- '<',
- '&',
- '(c)',
- '(tm)',
- '"',
- '"',
- '-',
- "'",
- '(c)',
- '(tm)',
- '--',
- '"',
- '"',
- '*',
- '(R)',
- '*',
- ''
- );
-
- /**
- * Contains a list of HTML tags to allow in the resulting text.
- *
- * @var string $allowed_tags
- * @access public
- * @see set_allowed_tags()
- */
- var $allowed_tags = '';
-
- /**
- * Contains the base URL that relative links should resolve to.
- *
- * @var string $url
- * @access public
- */
- var $url;
-
- /**
- * Indicates whether content in the $html variable has been converted yet.
- *
- * @var boolean $converted
- * @access private
- * @see $html, $text
- */
- var $_converted = false;
-
- /**
- * Contains URL addresses from links to be rendered in plain text.
- *
- * @var string $link_list
- * @access private
- * @see _build_link_list()
- */
- var $_link_list = array();
-
- /**
- * Boolean flag, true if a table of link URLs should be listed after the text.
- *
- * @var boolean $_do_links
- * @access private
- * @see html2text()
- */
- var $_do_links = true;
-
- /**
- * Constructor.
- *
- * If the HTML source string (or file) is supplied, the class
- * will instantiate with that source propagated, all that has
- * to be done it to call get_text().
- *
- * @param string $source HTML content
- * @param boolean $from_file Indicates $source is a file to pull content from
- * @param boolean $do_link_table indicate whether a table of link URLs is desired
- * @access public
- * @return void
- */
- function html2text( $source = '', $from_file = false, $produce_link_table = true )
- {
- if ( !empty($source) ) {
- $this->set_html($source, $from_file);
- }
- $this->set_base_url();
- $this->_do_links = $produce_link_table;
- }
-
- /**
- * Loads source HTML into memory, either from $source string or a file.
- *
- * @param string $source HTML content
- * @param boolean $from_file Indicates $source is a file to pull content from
- * @access public
- * @return void
- */
- function set_html( $source, $from_file = false )
- {
- $this->html = $source;
-
- if ( $from_file && file_exists($source) ) {
- $fp = fopen($source, 'r');
- $this->html = fread($fp, filesize($source));
- fclose($fp);
- }
-
- $this->_converted = false;
- }
-
- /**
- * Returns the text, converted from HTML.
- *
- * @access public
- * @return string
- */
- function get_text()
- {
- if ( !$this->_converted ) {
- $this->_convert();
- }
-
- return $this->text;
- }
-
- /**
- * Prints the text, converted from HTML.
- *
- * @access public
- * @return void
- */
- function print_text()
- {
- print $this->get_text();
- }
-
- /**
- * Alias to print_text(), operates identically.
- *
- * @access public
- * @return void
- * @see print_text()
- */
- function p()
- {
- print $this->get_text();
- }
-
- /**
- * Sets the allowed HTML tags to pass through to the resulting text.
- *
- * Tags should be in the form "<p>", with no corresponding closing tag.
- *
- * @access public
- * @return void
- */
- function set_allowed_tags( $allowed_tags = '' )
- {
- if ( !empty($allowed_tags) ) {
- $this->allowed_tags = $allowed_tags;
- }
- }
-
- /**
- * Sets a base URL to handle relative links.
- *
- * @access public
- * @return void
- */
- function set_base_url( $url = '' )
- {
- if ( empty($url) ) {
- $this->url = 'http://' . $_SERVER['HTTP_HOST'];
- } else {
- // Strip any trailing slashes for consistency (relative
- // URLs may already start with a slash like "/file.html")
- if ( substr($url, -1) == '/' ) {
- $url = substr($url, 0, -1);
- }
- $this->url = $url;
- }
- }
-
- /**
- * Workhorse function that does actual conversion.
- *
- * First performs custom tag replacement specified by $search and
- * $replace arrays. Then strips any remaining HTML tags, reduces whitespace
- * and newlines to a readable format, and word wraps the text to
- * $width characters.
- *
- * @access private
- * @return void
- */
- function _convert()
- {
- // Variables used for building the link list
- //$link_count = 1;
- //$this->_link_list = '';
-
- $text = trim(stripslashes($this->html));
-
- // Run our defined search-and-replace
- $text = preg_replace($this->search, $this->replace, $text);
-
- // Strip any other HTML tags
- $text = strip_tags($text, $this->allowed_tags);
-
- // Bring down number of empty lines to 2 max
- $text = preg_replace("/\n\s+\n/", "\n", $text);
- $text = preg_replace("/[\n]{3,}/", "\n\n", $text);
-
- // Add link list
- if ( sizeof($this->_link_list) ) {
- $text .= "\n\nLinks:\n------\n";
- foreach ($this->_link_list as $id => $link) {
- $text .= '[' . ($id+1) . '] ' . $link . "\n";
- }
- }
-
- // Wrap the text to a readable format
- // for PHP versions >= 4.0.2. Default width is 75
- $text = wordwrap($text, $this->width);
-
- $this->text = $text;
-
- $this->_converted = true;
- }
-
- /**
- * Helper function called by preg_replace() on link replacement.
- *
- * Maintains an internal list of links to be displayed at the end of the
- * text, with numeric indices to the original point in the text they
- * appeared. Also makes an effort at identifying and handling absolute
- * and relative links.
- *
- * @param integer $link_count Counter tracking current link number
- * @param string $link URL of the link
- * @param string $display Part of the text to associate number with
- * @access private
- * @return string
- */
- function _build_link_list($link, $display)
- {
- if (! $this->_do_links) return $display;
-
- $link_lc = strtolower($link);
-
- if (substr($link_lc, 0, 7) == 'http://' || substr($link_lc, 0, 8) == 'https://' || substr($link_lc, 0, 7) == 'mailto:')
- {
- $url = $link;
- }
- else
- {
- $url = $this->url;
- if ($link{0} != '/') {
- $url .= '/';
- }
- $url .= $link;
- }
-
- $index = array_search($url, $this->_link_list);
- if ($index===FALSE)
- {
- $index = sizeof($this->_link_list);
- $this->_link_list[$index] = $url;
- }
-
- return $display . ' [' . ($index+1) . ']';
- }
-}
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*************************************************************************
+* *
+* class.html2text.inc *
+* *
+*************************************************************************
+* *
+* Converts HTML to formatted plain text *
+* *
+* Copyright (c) 2005 Jon Abernathy <jon@chuggnutt.com> *
+* All rights reserved. *
+* *
+* This script is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+* The GNU General Public License can be found at *
+* http://www.gnu.org/copyleft/gpl.html. *
+* *
+* This script is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU General Public License for more details. *
+* *
+* Author(s): Jon Abernathy <jon@chuggnutt.com> *
+* *
+* Last modified: 04/06/05 *
+* Modified: 2004/05/19 (tbr) *
+* *
+*************************************************************************/
+
+
+/**
+* Takes HTML and converts it to formatted, plain text.
+*
+* Thanks to Alexander Krug (http://www.krugar.de/) to pointing out and
+* correcting an error in the regexp search array. Fixed 7/30/03.
+*
+* Updated set_html() function's file reading mechanism, 9/25/03.
+*
+* Thanks to Joss Sanglier (http://www.dancingbear.co.uk/) for adding
+* several more HTML entity codes to the $search and $replace arrays.
+* Updated 11/7/03.
+*
+* Thanks to Darius Kasperavicius (http://www.dar.dar.lt/) for
+* suggesting the addition of $allowed_tags and its supporting function
+* (which I slightly modified). Updated 3/12/04.
+*
+* Thanks to Justin Dearing for pointing out that a replacement for the
+* <TH> tag was missing, and suggesting an appropriate fix.
+* Updated 8/25/04.
+*
+* Thanks to Mathieu Collas (http://www.myefarm.com/) for finding a
+* display/formatting bug in the _build_link_list() function: email
+* readers would show the left bracket and number ("[1") as part of the
+* rendered email address.
+* Updated 12/16/04.
+*
+* Thanks to Wojciech Bajon (http://histeria.pl/) for submitting code
+* to handle relative links, which I hadn't considered. I modified his
+* code a bit to handle normal HTTP links and MAILTO links. Also for
+* suggesting three additional HTML entity codes to search for.
+* Updated 03/02/05.
+*
+* Thanks to Jacob Chandler for pointing out another link condition
+* for the _build_link_list() function: "https".
+* Updated 04/06/05.
+*
+* @author Jon Abernathy <jon@chuggnutt.com>
+* @version 0.6.1
+* @since PHP 4.0.2
+*/
+class html2text
+{
+
+ /**
+ * Contains the HTML content to convert.
+ *
+ * @var string $html
+ * @access public
+ */
+ var $html;
+
+ /**
+ * Contains the converted, formatted text.
+ *
+ * @var string $text
+ * @access public
+ */
+ var $text;
+
+ /**
+ * Maximum width of the formatted text, in columns.
+ *
+ * @var integer $width
+ * @access public
+ */
+ var $width = 70;
+
+ /**
+ * List of preg* regular expression patterns to search for,
+ * used in conjunction with $replace.
+ *
+ * @var array $search
+ * @access public
+ * @see $replace
+ */
+ var $search = array(
+ "/\r/", // Non-legal carriage return
+ "/[\n\t]+/", // Newlines and tabs
+ '/<script[^>]*>.*?<\/script>/i', // <script>s -- which strip_tags supposedly has problems with
+ //'/<!-- .* -->/', // Comments -- which strip_tags might have problem a with
+ '/<a [^>]*href=("|\')([^"\']+)\1[^>]*>(.+?)<\/a>/ie', // <a href="">
+ '/<h[123][^>]*>(.+?)<\/h[123]>/ie', // H1 - H3
+ '/<h[456][^>]*>(.+?)<\/h[456]>/ie', // H4 - H6
+ '/<p[^>]*>/i', // <P>
+ '/<br[^>]*>/i', // <br>
+ '/<b[^>]*>(.+?)<\/b>/ie', // <b>
+ '/<i[^>]*>(.+?)<\/i>/i', // <i>
+ '/(<ul[^>]*>|<\/ul>)/i', // <ul> and </ul>
+ '/(<ol[^>]*>|<\/ol>)/i', // <ol> and </ol>
+ '/<li[^>]*>/i', // <li>
+ '/<hr[^>]*>/i', // <hr>
+ '/(<table[^>]*>|<\/table>)/i', // <table> and </table>
+ '/(<tr[^>]*>|<\/tr>)/i', // <tr> and </tr>
+ '/<td[^>]*>(.+?)<\/td>/i', // <td> and </td>
+ '/<th[^>]*>(.+?)<\/th>/ie', // <th> and </th>
+ '/ /i',
+ '/"/i',
+ '/>/i',
+ '/</i',
+ '/&(amp|#38);/i',
+ '/©/i',
+ '/™/i',
+ '/“/',
+ '/”/',
+ '/–/',
+ '/&#(8217|39);/',
+ '/©/',
+ '/™/',
+ '/—/',
+ '/“/',
+ '/”/',
+ '/•/',
+ '/®/i',
+ '/•/i',
+ '/&[&;]+;/i'
+ );
+
+ /**
+ * List of pattern replacements corresponding to patterns searched.
+ *
+ * @var array $replace
+ * @access public
+ * @see $search
+ */
+ var $replace = array(
+ '', // Non-legal carriage return
+ ' ', // Newlines and tabs
+ '', // <script>s -- which strip_tags supposedly has problems with
+ //'', // Comments -- which strip_tags might have problem a with
+ '$this->_build_link_list("\\2", "\\3")', // <a href="">
+ "strtoupper(\"\n\n\\1\n\n\")", // H1 - H3
+ "ucwords(\"\n\n\\1\n\")", // H4 - H6
+ "\n\n", // <P>
+ "\n", // <br>
+ 'strtoupper("\\1")', // <b>
+ '_\\1_', // <i>
+ "\n\n", // <ul> and </ul>
+ "\n\n", // <ol> and </ol>
+ "\t*", // <li>
+ "\n-------------------------\n", // <hr>
+ "\n\n", // <table> and </table>
+ "\n", // <tr> and </tr>
+ "\t\t\\1\n", // <td> and </td>
+ "strtoupper(\"\t\t\\1\n\")", // <th> and </th>
+ ' ',
+ '"',
+ '>',
+ '<',
+ '&',
+ '(c)',
+ '(tm)',
+ '"',
+ '"',
+ '-',
+ "'",
+ '(c)',
+ '(tm)',
+ '--',
+ '"',
+ '"',
+ '*',
+ '(R)',
+ '*',
+ ''
+ );
+
+ /**
+ * Contains a list of HTML tags to allow in the resulting text.
+ *
+ * @var string $allowed_tags
+ * @access public
+ * @see set_allowed_tags()
+ */
+ var $allowed_tags = '';
+
+ /**
+ * Contains the base URL that relative links should resolve to.
+ *
+ * @var string $url
+ * @access public
+ */
+ var $url;
+
+ /**
+ * Indicates whether content in the $html variable has been converted yet.
+ *
+ * @var boolean $converted
+ * @access private
+ * @see $html, $text
+ */
+ var $_converted = false;
+
+ /**
+ * Contains URL addresses from links to be rendered in plain text.
+ *
+ * @var string $link_list
+ * @access private
+ * @see _build_link_list()
+ */
+ var $_link_list = array();
+
+ /**
+ * Boolean flag, true if a table of link URLs should be listed after the text.
+ *
+ * @var boolean $_do_links
+ * @access private
+ * @see html2text()
+ */
+ var $_do_links = true;
+
+ /**
+ * Constructor.
+ *
+ * If the HTML source string (or file) is supplied, the class
+ * will instantiate with that source propagated, all that has
+ * to be done it to call get_text().
+ *
+ * @param string $source HTML content
+ * @param boolean $from_file Indicates $source is a file to pull content from
+ * @param boolean $do_link_table indicate whether a table of link URLs is desired
+ * @access public
+ * @return void
+ */
+ function html2text( $source = '', $from_file = false, $produce_link_table = true )
+ {
+ if ( !empty($source) ) {
+ $this->set_html($source, $from_file);
+ }
+ $this->set_base_url();
+ $this->_do_links = $produce_link_table;
+ }
+
+ /**
+ * Loads source HTML into memory, either from $source string or a file.
+ *
+ * @param string $source HTML content
+ * @param boolean $from_file Indicates $source is a file to pull content from
+ * @access public
+ * @return void
+ */
+ function set_html( $source, $from_file = false )
+ {
+ $this->html = $source;
+
+ if ( $from_file && file_exists($source) ) {
+ $fp = fopen($source, 'r');
+ $this->html = fread($fp, filesize($source));
+ fclose($fp);
+ }
+
+ $this->_converted = false;
+ }
+
+ /**
+ * Returns the text, converted from HTML.
+ *
+ * @access public
+ * @return string
+ */
+ function get_text()
+ {
+ if ( !$this->_converted ) {
+ $this->_convert();
+ }
+
+ return $this->text;
+ }
+
+ /**
+ * Prints the text, converted from HTML.
+ *
+ * @access public
+ * @return void
+ */
+ function print_text()
+ {
+ print $this->get_text();
+ }
+
+ /**
+ * Alias to print_text(), operates identically.
+ *
+ * @access public
+ * @return void
+ * @see print_text()
+ */
+ function p()
+ {
+ print $this->get_text();
+ }
+
+ /**
+ * Sets the allowed HTML tags to pass through to the resulting text.
+ *
+ * Tags should be in the form "<p>", with no corresponding closing tag.
+ *
+ * @access public
+ * @return void
+ */
+ function set_allowed_tags( $allowed_tags = '' )
+ {
+ if ( !empty($allowed_tags) ) {
+ $this->allowed_tags = $allowed_tags;
+ }
+ }
+
+ /**
+ * Sets a base URL to handle relative links.
+ *
+ * @access public
+ * @return void
+ */
+ function set_base_url( $url = '' )
+ {
+ if ( empty($url) ) {
+ $this->url = 'http://' . $_SERVER['HTTP_HOST'];
+ } else {
+ // Strip any trailing slashes for consistency (relative
+ // URLs may already start with a slash like "/file.html")
+ if ( substr($url, -1) == '/' ) {
+ $url = substr($url, 0, -1);
+ }
+ $this->url = $url;
+ }
+ }
+
+ /**
+ * Workhorse function that does actual conversion.
+ *
+ * First performs custom tag replacement specified by $search and
+ * $replace arrays. Then strips any remaining HTML tags, reduces whitespace
+ * and newlines to a readable format, and word wraps the text to
+ * $width characters.
+ *
+ * @access private
+ * @return void
+ */
+ function _convert()
+ {
+ // Variables used for building the link list
+ //$link_count = 1;
+ //$this->_link_list = '';
+
+ $text = trim(stripslashes($this->html));
+
+ // Run our defined search-and-replace
+ $text = preg_replace($this->search, $this->replace, $text);
+
+ // Strip any other HTML tags
+ $text = strip_tags($text, $this->allowed_tags);
+
+ // Bring down number of empty lines to 2 max
+ $text = preg_replace("/\n\s+\n/", "\n", $text);
+ $text = preg_replace("/[\n]{3,}/", "\n\n", $text);
+
+ // Add link list
+ if ( sizeof($this->_link_list) ) {
+ $text .= "\n\nLinks:\n------\n";
+ foreach ($this->_link_list as $id => $link) {
+ $text .= '[' . ($id+1) . '] ' . $link . "\n";
+ }
+ }
+
+ // Wrap the text to a readable format
+ // for PHP versions >= 4.0.2. Default width is 75
+ $text = wordwrap($text, $this->width);
+
+ $this->text = $text;
+
+ $this->_converted = true;
+ }
+
+ /**
+ * Helper function called by preg_replace() on link replacement.
+ *
+ * Maintains an internal list of links to be displayed at the end of the
+ * text, with numeric indices to the original point in the text they
+ * appeared. Also makes an effort at identifying and handling absolute
+ * and relative links.
+ *
+ * @param integer $link_count Counter tracking current link number
+ * @param string $link URL of the link
+ * @param string $display Part of the text to associate number with
+ * @access private
+ * @return string
+ */
+ function _build_link_list($link, $display)
+ {
+ if (! $this->_do_links) return $display;
+
+ $link_lc = strtolower($link);
+
+ if (substr($link_lc, 0, 7) == 'http://' || substr($link_lc, 0, 8) == 'https://' || substr($link_lc, 0, 7) == 'mailto:')
+ {
+ $url = $link;
+ }
+ else
+ {
+ $url = $this->url;
+ if ($link{0} != '/') {
+ $url .= '/';
+ }
+ $url .= $link;
+ }
+
+ $index = array_search($url, $this->_link_list);
+ if ($index===FALSE)
+ {
+ $index = sizeof($this->_link_list);
+ $this->_link_list[$index] = $url;
+ }
+
+ return $display . ' [' . ($index+1) . ']';
+ }
+}
+
+?>
\ No newline at end of file
- Abort do-loop on socket errors (fgets returns false)
- $ICL_SSL is not boolean anymore but contains the connection schema (ssl or tls)
- Removed some debuggers (echo ...)
+ File altered by Aleksander Machniak <alec@alec.pl>
+ - RFC3501 [7.1] don't call CAPABILITY if was returned in server
+ optional resposne in iil_Connect()
+ - trim(chop()) replaced by trim()
+ - added iil_Escape() with support for " and \ in folder names
+ - support \ character in username in iil_C_Login()
+ - fixed iil_MultLine(): use iil_ReadBytes() instead of iil_ReadLine()
+ - fixed iil_C_FetchStructureString() to handle many literal strings in response
+ - removed hardcoded data size in iil_ReadLine()
+ - added iil_PutLine() wrapper for fputs()
+ - code cleanup and identation fixes
********************************************************/
var $mid;
}
-
function iil_xor($string, $string2) {
- $result = '';
- $size = strlen($string);
- for ($i=0; $i<$size; $i++) {
- $result .= chr(ord($string[$i]) ^ ord($string2[$i]));
- }
- return $result;
+ $result = '';
+ $size = strlen($string);
+ for ($i=0; $i<$size; $i++) {
+ $result .= chr(ord($string[$i]) ^ ord($string2[$i]));
+ }
+ return $result;
+}
+
+function iil_PutLine($fp, $string, $endln=true) {
+// console('C: '. $string);
+ return fputs($fp, $string . ($endln ? "\r\n" : ''));
}
function iil_ReadLine($fp, $size) {
- $line = '';
- if (!$fp) {
- return $line;
- }
- do {
- // FIXME: hardcode size?
- $buffer = fgets($fp, 2048);
- if ($buffer === false) {
- break;
- }
- $line .= $buffer;
- } while ($buffer[strlen($buffer)-1] != "\n");
- return $line;
+ $line = '';
+
+ if (!$fp) {
+ return $line;
+ }
+
+ if (!$size) {
+ $size = 1024;
+ }
+
+ do {
+ $buffer = fgets($fp, $size);
+ if ($buffer === false) {
+ break;
+ }
+// console('S: '. chop($buffer));
+ $line .= $buffer;
+ } while ($buffer[strlen($buffer)-1] != "\n");
+
+ return $line;
}
function iil_MultLine($fp, $line) {
preg_match_all('/(.*)\{([0-9]+)\}$/', $line, $a);
$bytes = $a[2][0];
while (strlen($out) < $bytes) {
- $line = iil_ReadLine($fp, 1024);
- $out .= chop($line);
+ $line = iil_ReadBytes($fp, $bytes);
+ $out .= $line;
}
$line = $a[1][0] . "\"$out\"";
+// console('[...] '. $out);
}
return $line;
}
function iil_ReadBytes($fp, $bytes) {
- $data = '';
- $len = 0;
- do {
- $data .= fread($fp, $bytes-$len);
- if ($len == strlen($data)) {
- break; //nothing was read -> exit to avoid apache lockups
- }
- $len = strlen($data);
- } while ($len < $bytes);
- return $data;
+ $data = '';
+ $len = 0;
+ do {
+ $data .= fread($fp, $bytes-$len);
+ if ($len == strlen($data)) {
+ break; //nothing was read -> exit to avoid apache lockups
+ }
+ $len = strlen($data);
+ } while ($len < $bytes);
+
+ return $data;
}
function iil_ReadReply($fp) {
do {
- $line = chop(trim(iil_ReadLine($fp, 1024)));
+ $line = trim(iil_ReadLine($fp, 1024));
} while ($line[0] == '*');
return $line;
$a=explode(' ', $string);
if (count($a) > 2) {
if (strcasecmp($a[1], 'OK') == 0) {
- return 0;
+ return 0;
} else if (strcasecmp($a[1], 'NO') == 0) {
- return -1;
+ return -1;
} else if (strcasecmp($a[1], 'BAD') == 0) {
- return -2;
- }
+ return -2;
+ }
}
- return -3;
+ return -3;
}
// check if $string starts with $match
function iil_StartsWith($string, $match) {
$len = strlen($match);
if ($len == 0) {
- return false;
- }
+ return false;
+ }
if (strncmp($string, $match, $len) == 0) {
- return true;
- }
+ return true;
+ }
return false;
}
function iil_StartsWithI($string, $match) {
$len = strlen($match);
if ($len == 0) {
- return false;
- }
+ return false;
+ }
if (strncasecmp($string, $match, $len) == 0) {
- return true;
- }
+ return true;
+ }
return false;
}
+function iil_Escape($string)
+{
+ return strtr($string, array('"'=>'\\"', '\\' => '\\\\'));
+}
function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge) {
$ipad .= chr(0x36);
$opad .= chr(0x5C);
}
+
// pad $pass so it's 64 bytes
$padLen = 64 - strlen($pass);
for ($i=0;$i<$padLen;$i++) {
$reply = base64_encode('"' . $user . '" "' . $hash . '"');
// send result, get reply
- fputs($conn->fp, $reply . "\r\n");
+ iil_PutLine($conn->fp, $reply);
$line = iil_ReadLine($conn->fp, 1024);
// process result
function iil_C_Login(&$conn, $user, $password) {
- $password = strtr($password, array('"'=>'\\"', '\\' => '\\\\'));
- fputs($conn->fp, "a001 LOGIN $user \"$password\"\r\n");
+ iil_PutLine($conn->fp, 'a001 LOGIN "'.iil_Escape($user).'" "'.iil_Escape($password).'"');
do {
$line = iil_ReadReply($conn->fp);
function iil_ParseNamespace2($str, &$i, $len=0, $l) {
if (!$l) {
$str = str_replace('NIL', '()', $str);
- }
+ }
if (!$len) {
$len = strlen($str);
- }
+ }
$data = array();
$in_quotes = false;
$elem = 0;
$data[$elem] = iil_ParseNamespace2($str, $i, $len, $l++);
$elem++;
} else if ($c == ')' && !$in_quotes) {
- return $data;
- } else if ($c == '\\') {
+ return $data;
+ } else if ($c == '\\') {
$i++;
if ($in_quotes) {
- $data[$elem] .= $c.$str[$i];
- }
+ $data[$elem] .= $c.$str[$i];
+ }
} else if ($c == '"') {
$in_quotes = !$in_quotes;
if (!$in_quotes) {
- $elem++;
- }
+ $elem++;
+ }
} else if ($in_quotes) {
$data[$elem].=$c;
}
return true;
}
- fputs($conn->fp, "ns1 NAMESPACE\r\n");
+ iil_PutLine($conn->fp, "ns1 NAMESPACE");
do {
$line = iil_ReadLine($conn->fp, 1024);
if (iil_StartsWith($line, '* NAMESPACE')) {
$my_prefs["rootdir"] = substr($conn->rootdir, 0, -1);
return true;
-
}
function iil_Connect($host, $user, $password) {
- global $iil_error, $iil_errornum;
+ global $iil_error, $iil_errornum;
global $ICL_SSL, $ICL_PORT;
global $IMAP_NO_CACHE;
global $my_prefs, $IMAP_USE_INTERNAL_DATE;
if (func_num_args() >= 4) {
$auth_array = func_get_arg(3);
if (is_array($auth_array)) {
- $auth_method = $auth_array['imap'];
- }
+ $auth_method = $auth_array['imap'];
+ }
if (empty($auth_method)) {
- $auth_method = "plain";
- }
+ $auth_method = "plain";
+ }
}
$message = "INITIAL: $auth_method\n";
$conn->cache_dirty = array();
if ($my_prefs['sort_field'] == 'INTERNALDATE') {
- $IMAP_USE_INTERNAL_DATE = true;
- } else if ($my_prefs['sort_field'] == 'DATE') {
- $IMAP_USE_INTERNAL_DATE = false;
- }
+ $IMAP_USE_INTERNAL_DATE = true;
+ } else if ($my_prefs['sort_field'] == 'DATE') {
+ $IMAP_USE_INTERNAL_DATE = false;
+ }
//echo '<!-- conn sort_field: '.$my_prefs['sort_field'].' //-->';
//check input
if (empty($host)) {
- $iil_error .= "Invalid host\n";
- }
+ $iil_error .= "Invalid host\n";
+ }
if (empty($user)) {
- $iil_error .= "Invalid user\n";
- }
+ $iil_error .= "Invalid user\n";
+ }
if (empty($password)) {
- $iil_error .= "Invalid password\n";
- }
+ $iil_error .= "Invalid password\n";
+ }
if (!empty($iil_error)) {
- return false;
- }
+ return false;
+ }
if (!$ICL_PORT) {
- $ICL_PORT = 143;
+ $ICL_PORT = 143;
}
//check for SSL
//open socket connection
$conn->fp = fsockopen($host, $ICL_PORT, $errno, $errstr, 10);
if (!$conn->fp) {
- $iil_error = "Could not connect to $host at port $ICL_PORT: $errstr";
- $iil_errornum = -1;
+ $iil_error = "Could not connect to $host at port $ICL_PORT: $errstr";
+ $iil_errornum = -1;
return false;
}
$iil_error .= "Socket connection established\r\n";
- $line = iil_ReadLine($conn->fp, 300);
-
- if (strcasecmp($auth_method, "check") == 0) {
- //check for supported auth methods
-
- //default to plain text auth
- $auth_method = 'plain';
-
- //check for CRAM-MD5
- fputs($conn->fp, "cp01 CAPABILITY\r\n");
+ $line = iil_ReadLine($conn->fp, 1024);
+
+ // RFC3501 [7.1] optional CAPABILITY response
+ // commented out, because it's not working always as should
+// if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) {
+// $conn->capability = explode(' ', $matches[1]);
+// } else {
+ iil_PutLine($conn->fp, "cp01 CAPABILITY");
do {
- $line = trim(chop(iil_ReadLine($conn->fp, 100)));
+ $line = trim(iil_ReadLine($conn->fp, 1024));
- $conn->message .= "$line\n";
+ $conn->message .= "$line\n";
$a = explode(' ', $line);
if ($line[0] == '*') {
while (list($k, $w) = each($a)) {
- if ($w != '*' && $w != 'CAPABILITY') {
+ if ($w != '*' && $w != 'CAPABILITY')
$conn->capability[] = $w;
- }
- if ((strcasecmp($w, "AUTH=CRAM_MD5") == 0)||
- (strcasecmp($w, "AUTH=CRAM-MD5") == 0)) {
- $auth_method = "auth";
- }
}
}
} while ($a[0] != 'cp01');
+// }
+
+ if (strcasecmp($auth_method, "check") == 0) {
+ //check for supported auth methods
+
+ //default to plain text auth
+ $auth_method = 'plain';
+
+ //check for CRAM-MD5
+ foreach ($conn->capability as $c)
+ if (strcasecmp($c, 'AUTH=CRAM_MD5') == 0 ||
+ strcasecmp($c, 'AUTH=CRAM-MD5') == 0) {
+ $auth_method = 'auth';
+ break;
+ }
}
if (strcasecmp($auth_method, 'auth') == 0) {
$conn->message .= "Trying CRAM-MD5\n";
//do CRAM-MD5 authentication
- fputs($conn->fp, "a000 AUTHENTICATE CRAM-MD5\r\n");
- $line = trim(chop(iil_ReadLine($conn->fp, 1024)));
+ iil_PutLine($conn->fp, "a000 AUTHENTICATE CRAM-MD5");
+ $line = trim(iil_ReadLine($conn->fp, 1024));
$conn->message .= "$line\n";
$conn->message .= "Tried CRAM-MD5: $result \n";
} else {
$conn->message .='No challenge ('.htmlspecialchars($line)."), try plain\n";
-
- $auth = 'plain';
+ $auth = 'plain';
}
}
function iil_Close(&$conn) {
iil_C_WriteCache($conn);
- if (fputs($conn->fp, "I LOGOUT\r\n")) {
+ if (iil_PutLine($conn->fp, "I LOGOUT")) {
fgets($conn->fp, 1024);
fclose($conn->fp);
$conn->fp = false;
function iil_ClearCache($user, $host) {
}
-
function iil_C_WriteCache(&$conn) {
//echo "<!-- doing iil_C_WriteCache //-->\n";
if (!$conn->do_cache) return false;
function iil_C_ExpireCachedItems(&$conn, $folder, $message_set) {
if (!$conn->do_cache) {
- return; //caching disabled
+ return; //caching disabled
}
- if (!is_array($conn->cache[$folder])) {
- return; //cache not initialized|empty
+ if (!is_array($conn->cache[$folder])) {
+ return; //cache not initialized|empty
+ }
+ if (count($conn->cache[$folder]) == 0) {
+ return; //cache not initialized|empty
}
- if (count($conn->cache[$folder]) == 0) {
- return; //cache not initialized|empty
- }
$uids = iil_C_FetchHeaderIndex($conn, $folder, $message_set, 'UID');
$num_removed = 0;
while ( list($key, $val) = each($quotes)) {
if (($key % 2) == 1) {
$quotes[$key] = str_replace($delimiter, "_!@!_", $quotes[$key]);
- }
- }
+ }
+ }
$string=implode('"', $quotes);
$result=explode($delimiter, $string);
function iil_CheckForRecent($host, $user, $password, $mailbox) {
if (empty($mailbox)) {
- $mailbox = 'INBOX';
+ $mailbox = 'INBOX';
}
$conn = iil_Connect($host, $user, $password, 'plain');
$fp = $conn->fp;
if ($fp) {
- fputs($fp, "a002 EXAMINE \"$mailbox\"\r\n");
+ iil_PutLine($fp, "a002 EXAMINE \"".iil_Escape($mailbox)."\"");
do {
$line=chop(iil_ReadLine($fp, 300));
$a=explode(' ', $line);
}
} while (!iil_StartsWith($a[0], 'a002'));
- fputs($fp, "a003 LOGOUT\r\n");
+ iil_PutLine($fp, "a003 LOGOUT");
fclose($fp);
} else {
$result = -2;
}
function iil_C_Select(&$conn, $mailbox) {
- $fp = $conn->fp;
-
+
if (empty($mailbox)) {
- return false;
+ return false;
}
- if (strcmp($conn->selected, $mailbox) == 0) {
- return true;
+ if (strcmp($conn->selected, $mailbox) == 0) {
+ return true;
}
iil_C_LoadCache($conn, $mailbox);
- if (fputs($fp, "sel1 SELECT \"$mailbox\"\r\n")) {
+ if (iil_PutLine($conn->fp, "sel1 SELECT \"".iil_Escape($mailbox).'"')) {
do {
- $line=chop(iil_ReadLine($fp, 300));
- $a=explode(' ', $line);
+ $line = chop(iil_ReadLine($conn->fp, 300));
+ $a = explode(' ', $line);
if (count($a) == 3) {
if (strcasecmp($a[2], 'EXISTS') == 0) {
- $conn->exists = (int) $a[1];
+ $conn->exists = (int) $a[1];
}
- if (strcasecmp($a[2], 'RECENT') == 0) {
- $conn->recent = (int) $a[1];
- }
+ if (strcasecmp($a[2], 'RECENT') == 0) {
+ $conn->recent = (int) $a[1];
+ }
}
} while (!iil_StartsWith($line, 'sel1'));
- $a=explode(' ', $line);
+ $a = explode(' ', $line);
if (strcasecmp($a[1], 'OK') == 0) {
$conn->selected = $mailbox;
return true;
}
}
- return false;
+ return false;
}
function iil_C_CheckForRecent(&$conn, $mailbox) {
if (empty($mailbox)) {
- $mailbox = 'INBOX';
+ $mailbox = 'INBOX';
}
iil_C_Select($conn, $mailbox);
if ($conn->selected == $mailbox) {
- return $conn->recent;
+ return $conn->recent;
}
- return false;
+ return false;
}
function iil_C_CountMessages(&$conn, $mailbox, $refresh = false) {
if ($refresh) {
$conn->selected= '';
}
+
iil_C_Select($conn, $mailbox);
if ($conn->selected == $mailbox) {
return $conn->exists;
$res[1] = trim(substr($string, $pos+1));
return $res;
}
- return $string;
+ return $string;
}
function iil_StrToTime($str) {
$IMAP_MONTHS = $GLOBALS['IMAP_MONTHS'];
- $IMAP_SERVER_TZ = $GLOBALS['IMAP_SERVER_TR'];
+ $IMAP_SERVER_TZ = $GLOBALS['IMAP_SERVER_TR'];
if ($str) {
- $time1 = strtotime($str);
- }
+ $time1 = strtotime($str);
+ }
if ($time1 && $time1 != -1) {
return $time1-$IMAP_SERVER_TZ;
}
$pos = strpos($str, ' ');
if (!is_numeric(substr($str, 0, $pos))) {
$str = substr($str, $pos+1);
- }
+ }
//explode, take good parts
$a = explode(' ', $str);
$field = strtoupper($field);
if ($field == 'INTERNALDATE') {
$field = 'ARRIVAL';
- }
+ }
+
$fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1,
'FROM' => 1, 'SIZE' => 1, 'SUBJECT' => 1, 'TO' => 1);
if (!empty($add)) {
$add = " $add";
- }
+ }
$fp = $conn->fp;
$command = 's ' . $is_uid . 'SORT (' . $field . ') ';
- $command .= $encoding . ' ALL' . "$add\r\n";
+ $command .= $encoding . ' ALL' . $add;
$line = $data = '';
- if (!fputs($fp, $command)) {
+ if (!iil_PutLine($fp, $command)) {
return false;
- }
+ }
do {
$line = chop(iil_ReadLine($fp, 1024));
if (iil_StartsWith($line, '* SORT')) {
- $data .= ($data?' ':'') . substr($line, 7);
- }
+ $data .= ($data?' ':'') . substr($line, 7);
+ }
} while ($line[0]!='s');
if (empty($data)) {
if (empty($index_field)) {
$index_field = 'DATE';
- }
+ }
$index_field = strtoupper($index_field);
list($from_idx, $to_idx) = explode(':', $message_set);
if (empty($message_set) || (isset($to_idx)
- && (int)$from_idx > (int)$to_idx)) {
+ && (int)$from_idx > (int)$to_idx)) {
return false;
- }
+ }
//$fields_a['DATE'] = ($IMAP_USE_INTERNAL_DATE?6:1);
$fields_a['DATE'] = 1;
/* Do "SELECT" command */
if (!iil_C_Select($conn, $mailbox)) {
return false;
- }
+ }
/* FETCH date,from,subject headers */
if ($mode == 1) {
$key = 'fhi' . ($c++);
- $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])\r\n";
- if (!fputs($fp, $request)) {
+ $request = $key . " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)])";
+ if (!iil_PutLine($fp, $request)) {
return false;
- }
+ }
do {
$line=chop(iil_ReadLine($fp, 200));
$a=explode(' ', $line);
if (($line[0] == '*') && ($a[2] == 'FETCH')
- && ($line[strlen($line)-1] != ')')) {
+ && ($line[strlen($line)-1] != ')')) {
$id=$a[1];
$str=$line=chop(iil_ReadLine($fp, 300));
$result[$id] = str_replace('"', '', $string);
if ($normalize) {
$result[$id] = strtoupper($result[$id]);
- }
+ }
}
$str=$line;
}
$line = chop($line);
if ($received>$bytes) {
- break;
+ break;
} else if (!$line) {
- continue;
+ continue;
}
list($field, $string) = explode(': ', $line);
$result[$id] = iil_StrToTime($string);
} else if ($index_field != 'DATE') {
$result[$id]=strtoupper(str_replace('"', '', $string));
- }
+ }
} while ($line[0] != ')');
} else {
//one line response, not expected so ignore
}else if ($mode == 6) {
$key = 'fhi' . ($c++);
- $request = $key . " FETCH $message_set (INTERNALDATE)\r\n";
- if (!fputs($fp, $request)) {
+ $request = $key . " FETCH $message_set (INTERNALDATE)";
+ if (!iil_PutLine($fp, $request)) {
return false;
- }
+ }
do {
$line=chop(iil_ReadLine($fp, 200));
if ($line[0] == '*') {
$field_name = 'RFC822.SIZE';
} else {
$field_name = $index_field;
- }
+ }
/* FETCH uid, size, flags */
$key = 'fhi' .($c++);
- $request = $key . " FETCH $message_set ($field_name)\r\n";
+ $request = $key . " FETCH $message_set ($field_name)";
- if (!fputs($fp, $request)) {
+ if (!iil_PutLine($fp, $request)) {
return false;
- }
+ }
do {
$line=chop(iil_ReadLine($fp, 200));
$a = explode(' ', $line);
if (isset($result[$id])) {
continue; //if we already got the data, skip forward
}
- if ($a[3]!=$field_name) {
- continue; //make sure it's returning what we requested
- }
+ if ($a[3]!=$field_name) {
+ continue; //make sure it's returning what we requested
+ }
/* Caution, bad assumptions, next several lines */
if ($mode == 2) {
//if we have less, try and fill in the "gaps"
if (count($result) < $should_have) {
for ($i=$start_mid; $i<=$end_mid; $i++) {
- if (!isset($result[$i])) {
- $result[$i] = '';
- }
- }
+ if (!isset($result[$i])) {
+ $result[$i] = '';
+ }
+ }
}
}
return $result;
} else {
$result[] = $start . ':' . $prev; //push sequence as start_id:end_id
}
- $start = $id; //start of new sequence
+ $start = $id; //start of new sequence
}
$prev = $id;
}
+
//handle the last sequence/id
if ($start==$prev) {
$result[] = $prev;
- } else {
- $result[] = $start.':'.$prev;
- }
+ } else {
+ $result[] = $start.':'.$prev;
+ }
//return as comma separated string
return implode(',', $result);
function iil_C_UIDsToMIDs(&$conn, $mailbox, $uids) {
if (!is_array($uids) || count($uids) == 0) {
return array();
- }
+ }
return iil_C_Search($conn, $mailbox, 'UID ' . implode(',', $uids));
}
if (count($result) == 1) {
return $result[0];
}
- return false;
+ return false;
}
function iil_C_FetchUIDs(&$conn,$mailbox) {
$num = iil_C_CountMessages($conn, $mailbox);
if ($num == 0) {
return array();
- }
+ }
$message_set = '1' . ($num>1?':' . $num:'');
//if cache not enabled, just call iil_C_FetchHeaderIndex on 'UID' field
$temp = iil_C_Search($conn, $mailbox, 'UID ' . $data['d'][$num]);
if (!$temp || !is_array($temp) || $temp[0] != $num) {
$cache_good = -3;
- }
+ }
}
//if cached data's good, return it
if (empty($message_set) || (isset($to_idx)
&& (int)$from_idx > (int)$to_idx)) {
return false;
- }
+ }
$result = array();
$uids = iil_C_FetchUIDs($conn, $mailbox);
$result[$uid]->id = $id;
} else {
$needed_set .= ($needed_set ? ',' : '') . $id;
- }
+ }
}
if ($needed_set) {
$message_set = $needed_set;
} else {
$message_set = '';
- }
+ }
}
}
$message_set = iil_CompressMessageSet($message_set);
$key = 'fh';
$fp = $conn->fp;
$request = $key . " FETCH $message_set ";
- $request .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])\r\n";
+ $request .= "(BODY.PEEK[HEADER.FIELDS (SUBJECT MESSAGE-ID IN-REPLY-TO)])";
$mid_to_id = array();
- if (!fputs($fp, $request)) {
+ if (!iil_PutLine($fp, $request)) {
return false;
- }
+ }
do {
$line = chop(iil_ReadLine($fp, 1024));
if ($debug) {
echo $line . "\n";
- }
+ }
if (ereg('\{[0-9]+\}$', $line)) {
$a = explode(' ', $line);
$new = array();
do {
$line = chop(iil_ReadLine($fp, 1024), "\r\n");
if (iil_StartsWithI($line, 'Message-ID:')
- || (iil_StartsWithI($line,'In-Reply-To:'))
- || (iil_StartsWithI($line,'SUBJECT:'))) {
+ || (iil_StartsWithI($line,'In-Reply-To:'))
+ || (iil_StartsWithI($line,'SUBJECT:'))) {
$pos = strpos($line, ':');
$field_name = substr($line, 0, $pos);
if ($conn->do_cache) {
if (count($result)!=count($cached)) {
cache_write($conn->user, $conn->host, $mailbox . '.thhd', $result);
- }
+ }
}
//echo 'iil_FetchThreadHeaders:'."\n";
list($from_idx, $to_idx) = explode(':', $message_set);
if (empty($message_set) || (isset($to_idx)
- && (int)$from_idx > (int)$to_idx)) {
+ && (int)$from_idx > (int)$to_idx)) {
return false;
}
/* Do "SELECT" command */
if (!iil_C_Select($conn, $mailbox)) {
return false;
- }
+ }
/* FETCH date,from,subject headers */
$mid_to_id = array();
// 'IN-REPLY-TO'=>$header['r'], 'SUBJECT'=>$header['s']);
$id = $header->id;
$new = array('id' => $id, 'MESSAGE-ID' => $header->mid,
- 'IN-REPLY-TO' => $header->irt, 'SUBJECT' => $header->sbj);
+ 'IN-REPLY-TO' => $header->irt, 'SUBJECT' => $header->sbj);
/* add to message-id -> mid lookup table */
$mid_to_id[$new['MESSAGE-ID']] = $id;
if (eregi($sbj_filter_pat, $new['SUBJECT'])) {
$has_re = true;
}
- if ($has_re||$new['IN-REPLY-TO']) {
- $sbj_pre = 'RE:';
+ if ($has_re||$new['IN-REPLY-TO']) {
+ $sbj_pre = 'RE:';
}
/* strip out 're:', 'fw:' etc */
} else {
$sbj = $new['SUBJECT'];
}
- $new['SUBJECT'] = $sbj_pre.$sbj;
+ $new['SUBJECT'] = $sbj_pre.$sbj;
/* if subject not a known thread-root, add to list */
if ($debug) {
echo $id . ' ' . $new['SUBJECT'] . "\t" . $new['MESSAGE-ID'] . "\n";
}
- $root_id = $roots[$sbj];
+ $root_id = $roots[$sbj];
if ($root_id && ($has_re || !$root_in_root[$root_id])) {
if ($debug) {
echo "\tfound root: $root_id\n";
}
- $sub_mids[$new['MESSAGE-ID']] = $root_id;
+ $sub_mids[$new['MESSAGE-ID']] = $root_id;
$result[$root_id][] = $id;
- }else if (!isset($roots[$sbj]) || (!$has_re && $root_in_root[$root_id])) {
+ } else if (!isset($roots[$sbj]) || (!$has_re && $root_in_root[$root_id])) {
/* try to use In-Reply-To header to find root
unless subject contains 'Re:' */
if ($has_re&&$new['IN-REPLY-TO']) {
if ($debug) {
echo "\tfound parent: ".$new['SUBJECT']."\n";
}
- $result[$temp][] = $id;
+ $result[$temp][] = $id;
$sub_mids[$new['MESSAGE-ID']] = $temp;
$sbj = '';
} else {
if ($debug) {
echo "\t added to root\n";
}
- $roots[$sbj] = $id;
+ $roots[$sbj] = $id;
$root_in_root[$id] = !$has_re;
$sub_mids[$new['MESSAGE-ID']] = $id;
$result[$id] = array($id);
}
if ($debug) {
echo $new['MESSAGE-ID'] . "\t" . $sbj . "\n";
- }
+ }
}
-
}
//now that we've gone through all the messages,
if (!$root_id || $root_id==$id) {
continue;
}
- $result[$root_id] = array_merge($result[$root_id],$result[$id]);
+ $result[$root_id] = array_merge($result[$root_id],$result[$id]);
unset($result[$id]);
}
}
if ($debug) {
print_r($roots);
}
- //print_r($result);
+
return $result;
}
-
function iil_SortThreads(&$tree, $index, $sort_order = 'ASC') {
if (!is_array($tree) || !is_array($index)) {
return false;
- }
+ }
//create an id to position lookup table
$i = 0;
}
}
-
//sort by key, this basically sorts all threads
ksort($itree);
$i = 0;
$i++;
}
- //return
return $out;
}
$request .= " FETCH $message_set (BODY.PEEK[HEADER.FIELDS ";
$request .= "(DATE FROM TO SUBJECT REPLY-TO IN-REPLY-TO CC BCC ";
$request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID ";
- $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])\r\n";
+ $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY)])";
- if (!fputs($fp, $request)) {
+ if (!iil_PutLine($fp, $request)) {
return false;
}
do {
do {
$line = chop(iil_ReadLine($fp, 300), "\r\n");
if (ord($line[0])<=32) {
- $lines[$i] .= (empty($lines[$i])?'':"\n").trim(chop($line));
+ $lines[$i] .= (empty($lines[$i])?'':"\n").trim($line);
} else {
$i++;
- $lines[$i] = trim(chop($line));
+ $lines[$i] = trim($line);
}
/*
The preg_match below works around communigate imap, which outputs " UID <number>)".
*/
$command_key = 'fh' . ($c++);
$request = $command_key . $prefix;
- $request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)\r\n";
+ $request .= " FETCH $message_set (UID RFC822.SIZE FLAGS INTERNALDATE)";
- if (!fputs($fp, $request)) {
+ if (!iil_PutLine($fp, $request)) {
return false;
}
- do {
+ do {
$line = chop(iil_ReadLine($fp, 200));
//$a = explode(' ', $line);
//if (($line[0]=="*") && ($a[2]=="FETCH")) {
$result[$id]->answered = true;
} else if (strcasecmp($val, "\$MDNSent") == 0) {
$result[$id]->mdn_sent = true;
- }
+ }
}
$result[$id]->flags = $flags_a;
}
return false;
}
-
function iil_SortHeaders($a, $field, $flag) {
if (empty($field)) {
$field = 'uid';
- }
+ }
$field = strtolower($field);
if ($field == 'date' || $field == 'internaldate') {
$field = 'timestamp';
- }
+ }
if (empty($flag)) {
$flag = 'ASC';
- }
+ }
$flag = strtoupper($flag);
$stripArr = ($field=='subject') ? array('Re: ','Fwd: ','Fw: ','"') : array('"');
$data = @strtotime($val->date);
if ($data == false) {
$data = $val->timestamp;
- }
+ }
} else {
$data = $val->$field;
if (is_string($data)) {
$data=strtoupper(str_replace($stripArr, '', $data));
- }
+ }
}
$index[$key]=$data;
}
// sort index
$i = 0;
if ($flag == 'ASC') {
- asort($index);
- } else {
- arsort($index);
+ asort($index);
+ } else {
+ arsort($index);
}
// form new array based on index
}
function iil_C_Expunge(&$conn, $mailbox) {
- $fp = $conn->fp;
+
if (iil_C_Select($conn, $mailbox)) {
$c = 0;
- fputs($fp, "exp1 EXPUNGE\r\n");
+ iil_PutLine($conn->fp, "exp1 EXPUNGE");
do {
- $line=chop(iil_ReadLine($fp, 100));
+ $line=chop(iil_ReadLine($conn->fp, 100));
if ($line[0] == '*') {
- $c++;
- }
+ $c++;
+ }
} while (!iil_StartsWith($line, 'exp1'));
if (iil_ParseResult($line) == 0) {
if (iil_C_Select($conn, $mailbox)) {
$c = 0;
- fputs($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")\r\n");
+ iil_PutLine($fp, "flg STORE $messages " . $mod . "FLAGS (" . $flag . ")");
do {
$line=chop(iil_ReadLine($fp, 100));
if ($line[0] == '*') {
$c++;
- }
+ }
} while (!iil_StartsWith($line, 'flg'));
if (iil_ParseResult($line) == 0) {
return iil_C_ModFlag($conn, $mailbox, $messages, 'DELETED', '-');
}
-
function iil_C_Unseen(&$conn, $mailbox, $messages) {
return iil_C_ModFlag($conn, $mailbox, $messages, 'SEEN', '-');
}
-
function iil_C_Copy(&$conn, $messages, $from, $to) {
$fp = $conn->fp;
if (empty($from) || empty($to)) {
return -1;
- }
+ }
if (iil_C_Select($conn, $from)) {
$c=0;
- fputs($fp, "cpy1 COPY $messages \"$to\"\r\n");
+ iil_PutLine($fp, "cpy1 COPY $messages \"".iil_Escape($to)."\"");
$line=iil_ReadReply($fp);
return iil_ParseResult($line);
} else {
function iil_FormatSearchDate($month, $day, $year) {
$month = (int) $month;
- $months = $GLOBALS['IMAP_MONTHS'];
+ $months = $GLOBALS['IMAP_MONTHS'];
return $day . '-' . $months[$month] . '-' . $year;
}
$str = implode(',', $index);
if (empty($str)) {
return false;
- }
+ }
return count($index);
}
- return false;
+ return false;
}
function iil_C_UID2ID(&$conn, $folder, $uid) {
$count = count($id_a);
if ($count > 1) {
return false;
- }
+ }
return $id_a[0];
}
}
$fp = $conn->fp;
if ($id == 0) {
return -1;
- }
- $result = -1;
+ }
+ $result = -1;
if (iil_C_Select($conn, $folder)) {
$key = 'FUID';
- if (fputs($fp, "$key FETCH $id (UID)\r\n")) {
+ if (iil_PutLine($fp, "$key FETCH $id (UID)")) {
do {
$line=chop(iil_ReadLine($fp, 1024));
if (eregi("^\* $id FETCH \(UID (.*)\)", $line, $r)) {
if (iil_C_Select($conn, $folder)) {
$c = 0;
- $query = 'srch1 SEARCH ' . chop($criteria) . "\r\n";
- fputs($fp, $query);
+ $query = 'srch1 SEARCH ' . chop($criteria);
+ iil_PutLine($fp, $query);
do {
- $line=trim(chop(iil_ReadLine($fp, 10000)));
+ $line=trim(iil_ReadLine($fp, 10000));
if (eregi("^\* SEARCH", $line)) {
$str = trim(substr($line, 8));
$messages = explode(' ', $str);
return $messages;
}
$conn->error = 'iil_C_Search: ' . $line . "\n";
- return false;
-
+ return false;
}
$conn->error = "iil_C_Search: Couldn't select \"$folder\"\n";
return false;
}
function iil_C_Move(&$conn, $messages, $from, $to) {
- $fp = $conn->fp;
-
- if (!$from || !$to) {
- return -1;
- }
-
- $r = iil_C_Copy($conn, $messages, $from,$to);
- if ($r==0) {
- return iil_C_Delete($conn, $from, $messages);
- }
+ $fp = $conn->fp;
+
+ if (!$from || !$to) {
+ return -1;
+ }
+ $r = iil_C_Copy($conn, $messages, $from,$to);
+ if ($r==0) {
+ return iil_C_Delete($conn, $from, $messages);
+ }
return $r;
}
$delimiter = false;
//try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8)
- if (!fputs($fp, 'ghd LIST "" ""' . "\r\n")) {
+ if (!iil_PutLine($fp, 'ghd LIST "" ""')) {
return false;
- }
+ }
do {
$line=iil_ReadLine($fp, 500);
$a=iil_ExplodeQuotedString(' ', $line);
if ($a[0] == '*') {
$delimiter = str_replace('"', '', $a[count($a)-2]);
- }
+ }
}
} while (!iil_StartsWith($line, 'ghd'));
//if that fails, try namespace extension
//try to fetch namespace data
- fputs($conn->fp, "ns1 NAMESPACE\r\n");
+ iil_PutLine($conn->fp, "ns1 NAMESPACE");
do {
$line = iil_ReadLine($conn->fp, 1024);
if (iil_StartsWith($line, '* NAMESPACE')) {
$first_userspace = $user_space_data[0];
if (!is_array($first_userspace)) {
return false;
- }
+ }
//extract delimiter
$delimiter = $first_userspace[1];
$ignore = $IGNORE_FOLDERS[strtolower($conn->host)];
$fp = $conn->fp;
+
if (empty($mailbox)) {
$mailbox = '*';
- }
+ }
+
if (empty($ref) && $conn->rootdir) {
$ref = $conn->rootdir;
}
- // send command
- if (!fputs($fp, "lmb LIST \"".$ref."\" \"$mailbox\"\r\n")) {
+ // send command
+ if (!iil_PutLine($fp, "lmb LIST \"".$ref."\" \"".iil_Escape($mailbox)."\"")) {
return false;
- }
+ }
$i = 0;
- // get folder list
+ // get folder list
do {
$line = iil_ReadLine($fp, 500);
$line = iil_MultLine($fp, $line);
$a = explode(' ', $line);
if (($line[0] == '*') && ($a[1] == 'LIST')) {
$line = rtrim($line);
- // split one line
+ // split one line
$a = iil_ExplodeQuotedString(' ', $line);
+ // last string is folder name
+ $folder = trim($a[count($a)-1], '"');
- // last string is folder name
- $folder = str_replace('"', '', $a[count($a)-1]);
+ if (empty($ignore) || (!empty($ignore)
+ && !eregi($ignore, $folder))) {
+ $folders[$i] = $folder;
+ }
- if (empty($ignore) || (!empty($ignore)
- && !eregi($ignore, $folder))) {
- $folders[$i] = $folder;
- }
-
- // second from last is delimiter
- $delim = str_replace('"', '', $a[count($a)-2]);
- // is it a container?
- $i++;
+ // second from last is delimiter
+ $delim = trim($a[count($a)-2], '"');
+ // is it a container?
+ $i++;
}
} while (!iil_StartsWith($line, 'lmb'));
if (is_array($folders)) {
- if (!empty($ref)) {
- // if rootdir was specified, make sure it's the first element
- // some IMAP servers (i.e. Courier) won't return it
- if ($ref[strlen($ref)-1]==$delim) $ref = substr($ref, 0, strlen($ref)-1);
- if ($folders[0]!=$ref) array_unshift($folders, $ref);
- }
- return $folders;
- }else if (iil_ParseResult($line) == 0) {
+ if (!empty($ref)) {
+ // if rootdir was specified, make sure it's the first element
+ // some IMAP servers (i.e. Courier) won't return it
+ if ($ref[strlen($ref)-1]==$delim)
+ $ref = substr($ref, 0, strlen($ref)-1);
+ if ($folders[0]!=$ref)
+ array_unshift($folders, $ref);
+ }
+ return $folders;
+ } else if (iil_ParseResult($line) == 0) {
return array('INBOX');
} else {
$conn->error = $line;
}
}
-
function iil_C_ListSubscribed(&$conn, $ref, $mailbox) {
global $IGNORE_FOLDERS;
}
$folders = array();
- // send command
- if (!fputs($fp, 'lsb LSUB "' . $ref . '" "' . $mailbox.'"' . "\r\n")) {
+ // send command
+ if (!iil_PutLine($fp, 'lsb LSUB "' . $ref . '" "' . iil_Escape($mailbox).'"')) {
$conn->error = "Couldn't send LSUB command\n";
return false;
}
$i = 0;
- // get folder list
+ // get folder list
do {
$line = iil_ReadLine($fp, 500);
$line = iil_MultLine($fp, $line);
if (($line[0] == '*') && ($a[1] == 'LSUB' || $a[1] == 'LIST')) {
$line = rtrim($line);
- // split one line
+ // split one line
$a = iil_ExplodeQuotedString(' ', $line);
- // last string is folder name
- //$folder = UTF7DecodeString(str_replace('"', '', $a[count($a)-1]));
- $folder = str_replace('"', '', $a[count($a)-1]);
+ // last string is folder name
+ //$folder = UTF7DecodeString(str_replace('"', '', $a[count($a)-1]));
+ $folder = trim($a[count($a)-1], '"');
if ((!in_array($folder, $folders)) && (empty($ignore)
- || (!empty($ignore) && !eregi($ignore, $folder)))) {
+ || (!empty($ignore) && !eregi($ignore, $folder)))) {
$folders[$i] = $folder;
- }
+ }
- // second from last is delimiter
- $delim = str_replace('"', '', $a[count($a)-2]);
+ // second from last is delimiter
+ $delim = trim($a[count($a)-2], '"');
- // is it a container?
- $i++;
+ // is it a container?
+ $i++;
}
} while (!iil_StartsWith($line, 'lsb'));
if (is_array($folders)) {
- if (!empty($ref)) {
- // if rootdir was specified, make sure it's the first element
- // some IMAP servers (i.e. Courier) won't return it
- if ($ref[strlen($ref)-1]==$delim) {
- $ref = substr($ref, 0, strlen($ref)-1);
- }
- if ($folders[0]!=$ref) {
- array_unshift($folders, $ref);
- }
- }
- return $folders;
+ if (!empty($ref)) {
+ // if rootdir was specified, make sure it's the first element
+ // some IMAP servers (i.e. Courier) won't return it
+ if ($ref[strlen($ref)-1]==$delim) {
+ $ref = substr($ref, 0, strlen($ref)-1);
+ }
+ if ($folders[0]!=$ref) {
+ array_unshift($folders, $ref);
+ }
+ }
+ return $folders;
}
$conn->error = $line;
return false;
}
-
function iil_C_Subscribe(&$conn, $folder) {
$fp = $conn->fp;
- $query = 'sub1 SUBSCRIBE "' . $folder. '"' . "\r\n";
- fputs($fp, $query);
+ $query = 'sub1 SUBSCRIBE "' . iil_Escape($folder). '"';
+ iil_PutLine($fp, $query);
- $line = trim(chop(iil_ReadLine($fp, 10000)));
+ $line = trim(iil_ReadLine($fp, 10000));
return iil_ParseResult($line);
}
-
function iil_C_UnSubscribe(&$conn, $folder) {
$fp = $conn->fp;
- $query = 'usub1 UNSUBSCRIBE "' . $folder . '"' . "\r\n";
- fputs($fp, $query);
+ $query = 'usub1 UNSUBSCRIBE "' . iil_Escape($folder) . '"';
+ iil_PutLine($fp, $query);
- $line = trim(chop(iil_ReadLine($fp, 10000)));
+ $line = trim(iil_ReadLine($fp, 10000));
return iil_ParseResult($line);
}
-
function iil_C_FetchPartHeader(&$conn, $mailbox, $id, $part) {
$fp = $conn->fp;
$result = false;
if (($part == 0) || (empty($part))) {
$part = 'HEADER';
- } else {
- $part .= '.MIME';
+ } else {
+ $part .= '.MIME';
}
if (iil_C_Select($conn, $mailbox)) {
$key = 'fh' . ($c++);
- $request = $key . " FETCH $id (BODY.PEEK[$part])\r\n";
- if (!fputs($fp, $request)) return false;
+ $request = $key . " FETCH $id (BODY.PEEK[$part])";
+ if (!iil_PutLine($fp, $request)) return false;
do {
$line = chop(iil_ReadLine($fp, 200));
$a = explode(' ', $line);
if (($line[0] == '*') && ($a[2] == 'FETCH')
&& ($line[strlen($line)-1] != ')')) {
$line=iil_ReadLine($fp, 300);
- while (chop($line) != ')') {
+ while (trim($line) != ')') {
$result .= $line;
$line=iil_ReadLine($fp, 300);
}
return $result;
}
-
function iil_C_HandlePartBody(&$conn, $mailbox, $id, $part, $mode) {
- /* modes:
+ /* modes:
1: return string
2: print
3: base64 and print
- */
+ */
+
$fp = $conn->fp;
$result = false;
if (($part == 0) || empty($part)) {
}
if (iil_C_Select($conn, $mailbox)) {
- $reply_key = '* ' . $id;
+ $reply_key = '* ' . $id;
- // format request
+ // format request
$key = 'ftch' . ($c++) . ' ';
- $request = $key . "FETCH $id (BODY.PEEK[$part])\r\n";
- // send request
- if (!fputs($fp, $request)) {
+ $request = $key . "FETCH $id (BODY.PEEK[$part])";
+ // send request
+ if (!iil_PutLine($fp, $request)) {
return false;
- }
+ }
- // receive reply line
- do {
- $line = chop(iil_ReadLine($fp, 1000));
- $a = explode(' ', $line);
- } while ($a[2] != 'FETCH');
- $len = strlen($line);
- if ($line[$len-1] == ')') {
- //one line response, get everything between first and last quotes
- $from = strpos($line, '"') + 1;
- $to = strrpos($line, '"');
- $len = $to - $from;
- if ($mode == 1) {
- $result = substr($line, $from, $len);
- } else if ($mode == 2) {
- echo substr($line, $from, $len);
- } else if ($mode == 3) {
- echo base64_decode(substr($line, $from, $len));
- }
- }else if ($line[$len-1] == '}') {
- //multi-line request, find sizes of content and receive that many bytes
- $from = strpos($line, '{') + 1;
- $to = strrpos($line, '}');
- $len = $to - $from;
- $sizeStr = substr($line, $from, $len);
- $bytes = (int)$sizeStr;
- $received = 0;
- while ($received < $bytes) {
- $remaining = $bytes - $received;
- $line = iil_ReadLine($fp, 1024);
- $len = strlen($line);
+ // receive reply line
+ do {
+ $line = chop(iil_ReadLine($fp, 1000));
+ $a = explode(' ', $line);
+ } while ($a[2] != 'FETCH');
+ $len = strlen($line);
+
+ if ($line[$len-1] == ')') {
+ // one line response, get everything between first and last quotes
+ if (substr($line, -4, 3) == 'NIL') {
+ // NIL response
+ $result = '';
+ } else {
+ $from = strpos($line, '"') + 1;
+ $to = strrpos($line, '"');
+ $len = $to - $from;
+ $result = substr($line, $from, $len);
+ }
+
+ if ($mode == 2) {
+ echo $result;
+ } else if ($mode == 3) {
+ echo base64_decode($result);
+ }
+ } else if ($line[$len-1] == '}') {
+ //multi-line request, find sizes of content and receive that many bytes
+ $from = strpos($line, '{') + 1;
+ $to = strrpos($line, '}');
+ $len = $to - $from;
+ $sizeStr = substr($line, $from, $len);
+ $bytes = (int)$sizeStr;
+ $received = 0;
+
+ while ($received < $bytes) {
+ $remaining = $bytes - $received;
+ $line = iil_ReadLine($fp, 1024);
+ $len = strlen($line);
- if ($len > $remaining) {
- $line = substr($line, 0, $remaining);
- }
- $received += strlen($line);
- if ($mode == 1) {
- $result .= chop($line) . "\n";
- } else if ($mode == 2) {
- echo chop($line) . "\n"; flush();
- } else if ($mode == 3) {
- echo base64_decode($line); flush();
- }
- }
- }
- // read in anything up until 'til last line
+ if ($len > $remaining) {
+ $line = substr($line, 0, $remaining);
+ }
+ $received += strlen($line);
+ if ($mode == 1) {
+ $result .= rtrim($line, "\t\r\n\0\x0B") . "\n";
+ } else if ($mode == 2) {
+ echo rtrim($line, "\t\r\n\0\x0B") . "\n"; flush();
+ } else if ($mode == 3) {
+ echo base64_decode($line); flush();
+ }
+ }
+ }
+ // read in anything up until 'til last line
do {
- $line = iil_ReadLine($fp, 1024);
+ $line = iil_ReadLine($fp, 1024);
} while (!iil_StartsWith($line, $key));
- if ($result) {
- $result = chop($result);
- return $result; // substr($result, 0, strlen($result)-1);
- }
- return false;
+ if ($result) {
+ $result = rtrim($result, "\t\r\n\0\x0B");
+ return $result; // substr($result, 0, strlen($result)-1);
+ }
+
+ return false;
} else {
echo 'Select failed.';
}
- if ($mode==1) {
- return $result;
- }
- return $received;
+ if ($mode==1) {
+ return $result;
+ }
+ return $received;
}
function iil_C_FetchPartBody(&$conn, $mailbox, $id, $part) {
- return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1);
+ return iil_C_HandlePartBody($conn, $mailbox, $id, $part, 1);
}
function iil_C_PrintPartBody(&$conn, $mailbox, $id, $part) {
- iil_C_HandlePartBody($conn, $mailbox, $id, $part, 2);
+ iil_C_HandlePartBody($conn, $mailbox, $id, $part, 2);
}
function iil_C_PrintBase64Body(&$conn, $mailbox, $id, $part) {
- iil_C_HandlePartBody($conn, $mailbox, $id, $part, 3);
+ iil_C_HandlePartBody($conn, $mailbox, $id, $part, 3);
}
function iil_C_CreateFolder(&$conn, $folder) {
$fp = $conn->fp;
- if (fputs($fp, 'c CREATE "' . $folder . '"' . "\r\n")) {
+ if (iil_PutLine($fp, 'c CREATE "' . iil_Escape($folder) . '"')) {
do {
$line=iil_ReadLine($fp, 300);
} while ($line[0] != 'c');
function iil_C_RenameFolder(&$conn, $from, $to) {
$fp = $conn->fp;
- if (fputs($fp, 'r RENAME "' . $from . '" "' . $to . '"' . "\r\n")) {
+ if (iil_PutLine($fp, 'r RENAME "' . iil_Escape($from) . '" "' . iil_Escape($to) . '"')) {
do {
$line = iil_ReadLine($fp, 300);
} while ($line[0] != 'r');
return (iil_ParseResult($line) == 0);
}
- return false;
+ return false;
}
function iil_C_DeleteFolder(&$conn, $folder) {
$fp = $conn->fp;
- if (fputs($fp, 'd DELETE "' . $folder. '"' . "\r\n")) {
+ if (iil_PutLine($fp, 'd DELETE "' . iil_Escape($folder). '"')) {
do {
$line=iil_ReadLine($fp, 300);
} while ($line[0] != 'd');
return (iil_ParseResult($line) == 0);
}
- $conn->error = "Couldn't send command\n";
+ $conn->error = "Couldn't send command\n";
return false;
}
function iil_C_Append(&$conn, $folder, &$message) {
if (!$folder) {
- return false;
- }
+ return false;
+ }
$fp = $conn->fp;
$message = str_replace("\r", '', $message);
$len = strlen($message);
if (!$len) {
- return false;
+ return false;
}
- $request = 'A APPEND "' . $folder .'" (\\Seen) {' . $len . "}\r\n";
+
+ $request = 'A APPEND "' . iil_Escape($folder) .'" (\\Seen) {' . $len . '}';
- if (fputs($fp, $request)) {
+ if (iil_PutLine($fp, $request)) {
$line=iil_ReadLine($fp, 100);
$sent = fwrite($fp, $message."\r\n");
do {
$result = (iil_ParseResult($line) == 0);
if (!$result) {
$conn->error .= $line . "\n";
- }
+ }
return $result;
-
}
+
$conn->error .= "Couldn't send command \"$request\"\n";
- return false;
+ return false;
}
-
function iil_C_AppendFromFile(&$conn, $folder, $path) {
if (!$folder) {
return false;
//open message file
$in_fp = false;
if (file_exists(realpath($path))) {
- $in_fp = fopen($path, 'r');
- }
+ $in_fp = fopen($path, 'r');
+ }
if (!$in_fp) {
$conn->error .= "Couldn't open $path for reading\n";
return false;
$fp = $conn->fp;
$len = filesize($path);
if (!$len) {
- return false;
+ return false;
}
//send APPEND command
- $request = 'A APPEND "' . $folder . '" (\\Seen) {' . $len . "}\r\n";
+ $request = 'A APPEND "' . iil_Escape($folder) . '" (\\Seen) {' . $len . '}';
$bytes_sent = 0;
- if (fputs($fp, $request)) {
+ if (iil_PutLine($fp, $request)) {
$line = iil_ReadLine($fp, 100);
//send file
while (!feof($in_fp)) {
$buffer = fgets($in_fp, 4096);
$bytes_sent += strlen($buffer);
- fputs($fp, $buffer);
+ iil_PutLine($fp, $buffer, false);
}
fclose($in_fp);
- fputs($fp, "\r\n");
+ iil_PutLine($fp, '');
//read response
do {
if (!$result) {
$conn->error .= $line . "\n";
}
- return $result;
-
+
+ return $result;
}
+
$conn->error .= "Couldn't send command \"$request\"\n";
return false;
}
-
function iil_C_FetchStructureString(&$conn, $folder, $id) {
$fp = $conn->fp;
$result = false;
+
if (iil_C_Select($conn, $folder)) {
$key = 'F1247';
- if (fputs($fp, "$key FETCH $id (BODYSTRUCTURE)\r\n")) {
+ if (iil_PutLine($fp, "$key FETCH $id (BODYSTRUCTURE)")) {
do {
- $line=chop(iil_ReadLine($fp, 5000));
- if ($line[0] == '*') {
- if (ereg("\}$", $line)) {
- preg_match('/(.+)\{([0-9]+)\}/', $line, $match);
- $result = $match[1];
- do {
- $line = chop(iil_ReadLine($fp, 100));
- if (!preg_match("/^$key/", $line)) {
- $result .= $line;
- } else {
- $done = true;
- }
- } while (!$done);
- } else {
- $result = $line;
- }
- list($pre, $post) = explode('BODYSTRUCTURE ', $result);
-
- //truncate last ')' and return
- $result = substr($post, 0, strlen($post)-1);
- }
+ $line = iil_ReadLine($fp, 5000);
+ $line = iil_MultLine($fp, $line);
+ $result .= $line;
} while (!preg_match("/^$key/", $line));
+
+ $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -(strlen($result)-strrpos($result, $key)+1)));
}
}
return $result;
$quota_line = '';
//get line containing quota info
- if (fputs($fp, 'QUOT1 GETQUOTAROOT "INBOX"' . "\r\n")) {
+ if (iil_PutLine($fp, 'QUOT1 GETQUOTAROOT "INBOX"')) {
do {
$line=chop(iil_ReadLine($fp, 5000));
if (iil_StartsWith($line, '* QUOTA ')) {
- $quota_line = $line;
- }
+ $quota_line = $line;
+ }
} while (!iil_StartsWith($line, 'QUOT1'));
}
return $result;
}
-
function iil_C_ClearFolder(&$conn, $folder) {
$num_in_trash = iil_C_CountMessages($conn, $folder);
if ($num_in_trash > 0) {
- iil_C_Delete($conn, $folder, '1:' . $num_in_trash);
- }
+ iil_C_Delete($conn, $folder, '1:' . $num_in_trash);
+ }
return (iil_C_Expunge($conn, $folder) >= 0);
}
+
?>
+++ /dev/null
-# Magic
-# Magic data for file(1) command.
-# Machine-generated from src/cmd/file/magdir/*; edit there only!
-# Format is described in magic(files), where:
-# files is 5 on V7 and BSD, 4 on SV, and ?? in the SVID.
-
-#------------------------------------------------------------------------------
-# Localstuff: file(1) magic for locally observed files
-#
-# $Id: Localstuff,v 1.4 2003/03/23 04:17:27 christos Exp $
-# Add any locally observed files here. Remember:
-# text if readable, executable if runnable binary, data if unreadable.
-
-#------------------------------------------------------------------------------
-# zyxel: file(1) magic for ZyXEL modems
-#
-# From <rob@pe1chl.ampr.org>
-# These are the /etc/magic entries to decode datafiles as used for the
-# ZyXEL U-1496E DATA/FAX/VOICE modems. (This header conforms to a
-# ZyXEL-defined standard)
-
-0 string ZyXEL\002 ZyXEL voice data
->10 byte 0 - CELP encoding
->10 byte&0x0B 1 - ADPCM2 encoding
->10 byte&0x0B 2 - ADPCM3 encoding
->10 byte&0x0B 3 - ADPCM4 encoding
->10 byte&0x0B 8 - New ADPCM3 encoding
->10 byte&0x04 4 with resync
-
-#------------------------------------------------------------------------------
-# file(1) magic(5) data for xdelta Josh MacDonald <jmacd@CS.Berkeley.EDU>
-#
-0 string %XDELTA% XDelta binary patch file 0.14
-0 string %XDZ000% XDelta binary patch file 0.18
-0 string %XDZ001% XDelta binary patch file 0.20
-0 string %XDZ002% XDelta binary patch file 1.0
-0 string %XDZ003% XDelta binary patch file 1.0.4
-0 string %XDZ004% XDelta binary patch file 1.1
-#------------------------------------------------------------------------
-# sysex: file(1) magic for MIDI sysex files
-#
-#
-0 byte 0xF0 SysEx File -
-
-# North American Group
->1 byte 0x01 Sequential
->1 byte 0x02 IDP
->1 byte 0x03 OctavePlateau
->1 byte 0x04 Moog
->1 byte 0x05 Passport
->1 byte 0x06 Lexicon
->1 byte 0x07 Kurzweil
->1 byte 0x08 Fender
->1 byte 0x09 Gulbransen
->1 byte 0x0a AKG
->1 byte 0x0b Voyce
->1 byte 0x0c Waveframe
->1 byte 0x0d ADA
->1 byte 0x0e Garfield
->1 byte 0x0f Ensoniq
->1 byte 0x10 Oberheim
->1 byte 0x11 Apple
->1 byte 0x12 GreyMatter
->1 byte 0x14 PalmTree
->1 byte 0x15 JLCooper
->1 byte 0x16 Lowrey
->1 byte 0x17 AdamsSmith
->1 byte 0x18 E-mu
->1 byte 0x19 Harmony
->1 byte 0x1a ART
->1 byte 0x1b Baldwin
->1 byte 0x1c Eventide
->1 byte 0x1d Inventronics
->1 byte 0x1f Clarity
-
-# European Group
->1 byte 0x21 SIEL
->1 byte 0x22 Synthaxe
->1 byte 0x24 Hohner
->1 byte 0x25 Twister
->1 byte 0x26 Solton
->1 byte 0x27 Jellinghaus
->1 byte 0x28 Southworth
->1 byte 0x29 PPG
->1 byte 0x2a JEN
->1 byte 0x2b SSL
->1 byte 0x2c AudioVertrieb
-
->1 byte 0x2f ELKA
->>3 byte 0x09 EK-44
-
->1 byte 0x30 Dynacord
->1 byte 0x33 Clavia
->1 byte 0x39 Soundcraft
-
->1 byte 0x3e Waldorf
->>3 byte 0x7f Microwave I
-
-# Japanese Group
->1 byte 0x40 Kawai
->>3 byte 0x20 K1
->>3 byte 0x22 K4
-
->1 byte 0x41 Roland
->>3 byte 0x14 D-50
->>3 byte 0x2b U-220
->>3 byte 0x02 TR-707
-
->1 byte 0x42 Korg
->>3 byte 0x19 M1
-
->1 byte 0x43 Yamaha
->1 byte 0x44 Casio
->1 byte 0x46 Kamiya
->1 byte 0x47 Akai
->1 byte 0x48 Victor
->1 byte 0x49 Mesosha
->1 byte 0x4b Fujitsu
->1 byte 0x4c Sony
->1 byte 0x4e Teac
->1 byte 0x50 Matsushita
->1 byte 0x51 Fostex
->1 byte 0x52 Zoom
->1 byte 0x54 Matsushita
->1 byte 0x57 Acoustic tech. lab.
-
->1 belong&0xffffff00 0x00007400 Ta Horng
->1 belong&0xffffff00 0x00007500 e-Tek
->1 belong&0xffffff00 0x00007600 E-Voice
->1 belong&0xffffff00 0x00007700 Midisoft
->1 belong&0xffffff00 0x00007800 Q-Sound
->1 belong&0xffffff00 0x00007900 Westrex
->1 belong&0xffffff00 0x00007a00 Nvidia*
->1 belong&0xffffff00 0x00007b00 ESS
->1 belong&0xffffff00 0x00007c00 Mediatrix
->1 belong&0xffffff00 0x00007d00 Brooktree
->1 belong&0xffffff00 0x00007e00 Otari
->1 belong&0xffffff00 0x00007f00 Key Electronics
->1 belong&0xffffff00 0x00010000 Shure
->1 belong&0xffffff00 0x00010100 AuraSound
->1 belong&0xffffff00 0x00010200 Crystal
->1 belong&0xffffff00 0x00010300 Rockwell
->1 belong&0xffffff00 0x00010400 Silicon Graphics
->1 belong&0xffffff00 0x00010500 Midiman
->1 belong&0xffffff00 0x00010600 PreSonus
->1 belong&0xffffff00 0x00010800 Topaz
->1 belong&0xffffff00 0x00010900 Cast Lightning
->1 belong&0xffffff00 0x00010a00 Microsoft
->1 belong&0xffffff00 0x00010b00 Sonic Foundry
->1 belong&0xffffff00 0x00010c00 Line 6
->1 belong&0xffffff00 0x00010d00 Beatnik Inc.
->1 belong&0xffffff00 0x00010e00 Van Koerving
->1 belong&0xffffff00 0x00010f00 Altech Systems
->1 belong&0xffffff00 0x00011000 S & S Research
->1 belong&0xffffff00 0x00011100 VLSI Technology
->1 belong&0xffffff00 0x00011200 Chromatic
->1 belong&0xffffff00 0x00011300 Sapphire
->1 belong&0xffffff00 0x00011400 IDRC
->1 belong&0xffffff00 0x00011500 Justonic Tuning
->1 belong&0xffffff00 0x00011600 TorComp
->1 belong&0xffffff00 0x00011700 Newtek Inc.
->1 belong&0xffffff00 0x00011800 Sound Sculpture
->1 belong&0xffffff00 0x00011900 Walker Technical
->1 belong&0xffffff00 0x00011a00 Digital Harmony
->1 belong&0xffffff00 0x00011b00 InVision
->1 belong&0xffffff00 0x00011c00 T-Square
->1 belong&0xffffff00 0x00011d00 Nemesys
->1 belong&0xffffff00 0x00011e00 DBX
->1 belong&0xffffff00 0x00011f00 Syndyne
->1 belong&0xffffff00 0x00012000 Bitheadz
->1 belong&0xffffff00 0x00012100 Cakewalk
->1 belong&0xffffff00 0x00012200 Staccato
->1 belong&0xffffff00 0x00012300 National Semicon.
->1 belong&0xffffff00 0x00012400 Boom Theory
->1 belong&0xffffff00 0x00012500 Virtual DSP Corp
->1 belong&0xffffff00 0x00012600 Antares
->1 belong&0xffffff00 0x00012700 Angel Software
->1 belong&0xffffff00 0x00012800 St Louis Music
->1 belong&0xffffff00 0x00012900 Lyrrus dba G-VOX
->1 belong&0xffffff00 0x00012a00 Ashley Audio
->1 belong&0xffffff00 0x00012b00 Vari-Lite
->1 belong&0xffffff00 0x00012c00 Summit Audio
->1 belong&0xffffff00 0x00012d00 Aureal Semicon.
->1 belong&0xffffff00 0x00012e00 SeaSound
->1 belong&0xffffff00 0x00012f00 U.S. Robotics
->1 belong&0xffffff00 0x00013000 Aurisis
->1 belong&0xffffff00 0x00013100 Nearfield Multimedia
->1 belong&0xffffff00 0x00013200 FM7 Inc.
->1 belong&0xffffff00 0x00013300 Swivel Systems
->1 belong&0xffffff00 0x00013400 Hyperactive
->1 belong&0xffffff00 0x00013500 MidiLite
->1 belong&0xffffff00 0x00013600 Radical
->1 belong&0xffffff00 0x00013700 Roger Linn
->1 belong&0xffffff00 0x00013800 Helicon
->1 belong&0xffffff00 0x00013900 Event
->1 belong&0xffffff00 0x00013a00 Sonic Network
->1 belong&0xffffff00 0x00013b00 Realtime Music
->1 belong&0xffffff00 0x00013c00 Apogee Digital
-
->1 belong&0xffffff00 0x00202b00 Medeli Electronics
->1 belong&0xffffff00 0x00202c00 Charlie Lab
->1 belong&0xffffff00 0x00202d00 Blue Chip Music
->1 belong&0xffffff00 0x00202e00 BEE OH Corp
->1 belong&0xffffff00 0x00202f00 LG Semicon America
->1 belong&0xffffff00 0x00203000 TESI
->1 belong&0xffffff00 0x00203100 EMAGIC
->1 belong&0xffffff00 0x00203200 Behringer
->1 belong&0xffffff00 0x00203300 Access Music
->1 belong&0xffffff00 0x00203400 Synoptic
->1 belong&0xffffff00 0x00203500 Hanmesoft Corp
->1 belong&0xffffff00 0x00203600 Terratec
->1 belong&0xffffff00 0x00203700 Proel SpA
->1 belong&0xffffff00 0x00203800 IBK MIDI
->1 belong&0xffffff00 0x00203900 IRCAM
->1 belong&0xffffff00 0x00203a00 Propellerhead Software
->1 belong&0xffffff00 0x00203b00 Red Sound Systems
->1 belong&0xffffff00 0x00203c00 Electron ESI AB
->1 belong&0xffffff00 0x00203d00 Sintefex Audio
->1 belong&0xffffff00 0x00203e00 Music and More
->1 belong&0xffffff00 0x00203f00 Amsaro
->1 belong&0xffffff00 0x00204000 CDS Advanced Technology
->1 belong&0xffffff00 0x00204100 Touched by Sound
->1 belong&0xffffff00 0x00204200 DSP Arts
->1 belong&0xffffff00 0x00204300 Phil Rees Music
->1 belong&0xffffff00 0x00204400 Stamer Musikanlagen GmbH
->1 belong&0xffffff00 0x00204500 Soundart
->1 belong&0xffffff00 0x00204600 C-Mexx Software
->1 belong&0xffffff00 0x00204700 Klavis Tech.
->1 belong&0xffffff00 0x00204800 Noteheads AB
-
-0 string T707 Roland TR-707 Data
-
-#------------------------------------------------------------------------------
-# sccs: file(1) magic for SCCS archives
-#
-# SCCS archive structure:
-# \001h01207
-# \001s 00276/00000/00000
-# \001d D 1.1 87/09/23 08:09:20 ian 1 0
-# \001c date and time created 87/09/23 08:09:20 by ian
-# \001e
-# \001u
-# \001U
-# ... etc.
-# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550).
-# *Sigh*. And these both came from various parts of the USG.
-# Maybe we should just switch everybody from SCCS to RCS!
-# Further, you can't just say '\001h0', because the five-digit number
-# is a checksum that could (presumably) have any leading digit,
-# and we don't have regular expression matching yet.
-# Hence the following official kludge:
-8 string \001s\ SCCS archive data
-#------------------------------------------------------------------------------
-# allegro: file(1) magic for Allegro datafiles
-# Toby Deshane <hac@shoelace.digivill.net>
-#
-0 belong 0x736C6821 Allegro datafile (packed)
-0 belong 0x736C682E Allegro datafile (not packed/autodetect)
-0 belong 0x736C682B Allegro datafile (appended exe data)
-#------------------------------------------------------------------------------
-# file(1) magic for cvs(1) files
-# From Hendrik Scholz <hendrik@scholz.net>
-
-0 string /1\ :pserver: cvs password text file
-
-
-#------------------------------------------------------------------------------
-# vicar: file(1) magic for VICAR files.
-#
-# From: Ossama Othman <othman@astrosun.tn.cornell.edu
-# VICAR is JPL's in-house spacecraft image processing program
-# VICAR image
-0 string LBLSIZE= VICAR image data
->32 string BYTE \b, 8 bits = VAX byte
->32 string HALF \b, 16 bits = VAX word = Fortran INTEGER*2
->32 string FULL \b, 32 bits = VAX longword = Fortran INTEGER*4
->32 string REAL \b, 32 bits = VAX longword = Fortran REAL*4
->32 string DOUB \b, 64 bits = VAX quadword = Fortran REAL*8
->32 string COMPLEX \b, 64 bits = VAX quadword = Fortran COMPLEX*8
-# VICAR label file
-43 string SFDU_LABEL VICAR label file
-
-#------------------------------------------------------------------------------
-# varied.out: file(1) magic for various USG systems
-#
-# Herewith many of the object file formats used by USG systems.
-# Most have been moved to files for a particular processor,
-# and deleted if they duplicate other entries.
-#
-0 short 0610 Perkin-Elmer executable
-# AMD 29K
-0 beshort 0572 amd 29k coff noprebar executable
-0 beshort 01572 amd 29k coff prebar executable
-0 beshort 0160007 amd 29k coff archive
-# Cray
-6 beshort 0407 unicos (cray) executable
-# Ultrix 4.3
-596 string \130\337\377\377 Ultrix core file
->600 string >\0 from '%s'
-# BeOS and MAcOS PEF executables
-# From: hplus@zilker.net (Jon Watte)
-0 string Joy!peffpwpc header for PowerPC PEF executable
-#
-# ava assembler/linker Uros Platise <uros.platise@ijs.si>
-0 string avaobj AVR assembler object code
->7 string >\0 version '%s'
-# gnu gmon magic From: Eugen Dedu <dedu@ese-metz.fr>
-0 string gmon GNU prof performance data
->4 long x - version %ld
-# From: Dave Pearson <davep@davep.org>
-# Harbour <URL:http://www.harbour-project.org/> HRB files.
-0 string \xc0HRB Harbour HRB file
->4 short x version %d
-
-# From: "Stefan A. Haubenthal" <polluks@web.de>
-0 belong 0x000001EB Plan 9 executable
-
-#------------------------------------------------------------------------------
-# c64: file(1) magic for various commodore 64 related files
-#
-# From <doj@cubic.org>
-
-0x16500 belong 0x12014100 D64 Image
-0x16500 belong 0x12014180 D71 Image
-0x61800 belong 0x28034400 D81 Image
-0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image
-0 belong 0x43154164 X64 Image
-
-0 string GCR-1541 GCR Image
->8 byte x version: $i
->9 byte x tracks: %i
-
-9 string PSUR ARC archive (c64)
-2 string -LH1- LHA archive (c64)
-
-0 string C64File PC64 Emulator file
->8 string >\0 "%s"
-0 string C64Image PC64 Freezer Image
-
-0 beshort 0x38CD C64 PCLink Image
-0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot
-
-0 belong 0xFF424CFF WRAptor packer (c64)
-#------------------------------------------------------------------------------
-# games: file(1) for games
-
-# Thomas M. Ott (ThMO)
-1 string =WAD DOOM data,
->0 string =I main wad
->0 string =P patch wad
->0 byte x unknown junk
-
-# Fabio Bonelli <fabiobonelli@libero.it>
-# Quake II - III data files
-0 string IDP2 Quake II 3D Model file,
->20 long x %lu skin(s),
->8 long x (%lu x
->12 long x %lu),
->40 long x %lu frame(s),
->16 long x Frame size %lu bytes,
->24 long x %lu vertices/frame,
->28 long x %lu texture coordinates,
->32 long x %lu triangles/frame
-
-0 string IBSP Quake
->4 long 0x26 II Map file (BSP)
->4 long 0x2E III Map file (BSP)
-
-0 string IDS2 Quake II SP2 sprite file
-
-#---------------------------------------------------------------------------
-# Doom and Quake
-# submitted by Nicolas Patrois
-
-# DOOM
-
-0 string IWAD DOOM or DOOM ][ world
-0 string PWAD DOOM or DOOM ][ extension world
-
-0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo
-# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01
-
-24 string LxD\ 203 Linuxdoom save
->0 string x , name=%s
->44 string x , world=%s
-
-# Quake
-
-0 string PACK Quake I or II world or extension
-
-#0 string -1\x0a Quake I demo
-#>30 string x version %.4s
-#>61 string x level %s
-
-#0 string 5\x0a Quake I save
-
-# The levels
-
-# Quake 1
-
-0 string 5\x0aIntroduction Quake I save: start Introduction
-0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex
-0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned
-0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis
-0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto
-0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret)
-0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep
-0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon
-0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon
-0 string 5\x0athe_Installation Quake I save: e2m1 The installation
-0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel
-0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!)
-0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret)
-0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress
-0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse
-0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette
-0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central
-0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin
-0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror
-0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight
-0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret)
-0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels
-0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment
-0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system
-0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair
-0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine
-0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate
-0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium
-0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret)
-0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze
-0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony
-0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit
-
-# Quake DeathMatch levels
-
-0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths
-0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis
-0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base
-0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place
-0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern
-0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone
-
-# Scourge of Armagon
-
-0 string 5\x0aCommand_HQ Quake I save: start Command HQ
-0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station
-0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility
-0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret)
-0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine
-0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility
-0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms
-0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret)
-0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral
-0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs
-0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt
-0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep
-0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment
-0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium
-0 string 5\x0aLimbo Quake I save: hip3m3 Limbo
-0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret)
-0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet
-0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair
-
-# Malice
-
-0 string 5\x0aThe_Academy Quake I save: start The academy
-0 string 5\x0aThe_Lab Quake I save: d1 The lab
-0 string 5\x0aArea_33 Quake I save: d1b Area 33
-0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions
-0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret)
-0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)
-0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice
-0 string 5\x0aArea44 Quake I save: d1c Area 44
-0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers
-0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life
-0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood
-0 string 5\x0aThe_Flood Quake I save: d5 The flood
-0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant
-0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant
-0 string 5\x0aThe_Foundry Quake I save: d7b The foundry
-0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base
-0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base
-0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories
-0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive
-0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ
-0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown!
-
-# Malice DeathMatch levels
-
-0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct
-0 string 5\x0aSub_Station Quake I save: ddm2 Sub station
-0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights!
-0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa
-0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse
-0 string 5\x0aDOMINO Quake I save: ddm6 Domino
-0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder
-
-
-0 string MComprHD MAME CHD compressed hard disk image,
->12 belong x version %lu
-#------------------------------------------------------------------------------
-# Mavroyanopoulos Nikos <nmav@hellug.gr>
-# mcrypt: file(1) magic for mcrypt 2.2.x;
-0 string \0m\3 mcrypt 2.5 encrypted data,
->4 string >\0 algorithm: %s,
->>&1 leshort >0 keysize: %d bytes,
->>>&0 string >\0 mode: %s,
-
-0 string \0m\2 mcrypt 2.2 encrypted data,
->3 byte 0 algorithm: blowfish-448,
->3 byte 1 algorithm: DES,
->3 byte 2 algorithm: 3DES,
->3 byte 3 algorithm: 3-WAY,
->3 byte 4 algorithm: GOST,
->3 byte 6 algorithm: SAFER-SK64,
->3 byte 7 algorithm: SAFER-SK128,
->3 byte 8 algorithm: CAST-128,
->3 byte 9 algorithm: xTEA,
->3 byte 10 algorithm: TWOFISH-128,
->3 byte 11 algorithm: RC2,
->3 byte 12 algorithm: TWOFISH-192,
->3 byte 13 algorithm: TWOFISH-256,
->3 byte 14 algorithm: blowfish-128,
->3 byte 15 algorithm: blowfish-192,
->3 byte 16 algorithm: blowfish-256,
->3 byte 100 algorithm: RC6,
->3 byte 101 algorithm: IDEA,
->4 byte 0 mode: CBC,
->4 byte 1 mode: ECB,
->4 byte 2 mode: CFB,
->4 byte 3 mode: OFB,
->4 byte 4 mode: nOFB,
->5 byte 0 keymode: 8bit
->5 byte 1 keymode: 4bit
->5 byte 2 keymode: SHA-1 hash
->5 byte 3 keymode: MD5 hash
-
-#------------------------------------------------------------------------------
-# archive: file(1) magic for archive formats (see also "msdos" for self-
-# extracting compressed archives)
-#
-# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
-# pre-POSIX "tar" archives are handled in the C code.
-
-# POSIX tar archives
-257 string ustar\0 POSIX tar archive
-257 string ustar\040\040\0 GNU tar archive
-
-# cpio archives
-#
-# Yes, the top two "cpio archive" formats *are* supposed to just be "short".
-# The idea is to indicate archives produced on machines with the same
-# byte order as the machine running "file" with "cpio archive", and
-# to indicate archives produced on machines with the opposite byte order
-# from the machine running "file" with "byte-swapped cpio archive".
-#
-# The SVR4 "cpio(4)" hints that there are additional formats, but they
-# are defined as "short"s; I think all the new formats are
-# character-header formats and thus are strings, not numbers.
-0 short 070707 cpio archive
-0 short 0143561 byte-swapped cpio archive
-0 string 070707 ASCII cpio archive (pre-SVR4 or odc)
-0 string 070701 ASCII cpio archive (SVR4 with no CRC)
-0 string 070702 ASCII cpio archive (SVR4 with CRC)
-
-# Debian package (needs to go before regular portable archives)
-#
-0 string !<arch>\ndebian
->8 string debian-split part of multipart Debian package
->8 string debian-binary Debian binary package
->68 string >\0 (format %s)
->81 string bz2 \b, uses bzip2 compression
->84 string gz \b, uses gzip compression
-#>136 ledate x created: %s
-
-# other archives
-0 long 0177555 very old archive
-0 short 0177555 very old PDP-11 archive
-0 long 0177545 old archive
-0 short 0177545 old PDP-11 archive
-0 long 0100554 apl workspace
-0 string =<ar> archive
-
-# MIPS archive (needs to go before regular portable archives)
-#
-0 string !<arch>\n__________E MIPS archive
->20 string U with MIPS Ucode members
->21 string L with MIPSEL members
->21 string B with MIPSEB members
->19 string L and an EL hash table
->19 string B and an EB hash table
->22 string X -- out of date
-
-0 string -h- Software Tools format archive text
-
-#
-# XXX - why are there multiple <ar> thingies? Note that 0x213c6172 is
-# "!<ar", so, for new-style (4.xBSD/SVR2andup) archives, we have:
-#
-# 0 string !<arch> current ar archive
-# 0 long 0x213c6172 archive file
-#
-# and for SVR1 archives, we have:
-#
-# 0 string \<ar> System V Release 1 ar archive
-# 0 string =<ar> archive
-#
-# XXX - did Aegis really store shared libraries, breakpointed modules,
-# and absolute code program modules in the same format as new-style
-# "ar" archives?
-#
-0 string !<arch> current ar archive
->8 string __.SYMDEF random library
->0 belong =65538 - pre SR9.5
->0 belong =65539 - post SR9.5
->0 beshort 2 - object archive
->0 beshort 3 - shared library module
->0 beshort 4 - debug break-pointed module
->0 beshort 5 - absolute code program module
-0 string \<ar> System V Release 1 ar archive
-0 string =<ar> archive
-#
-# XXX - from "vax", which appears to collect a bunch of byte-swapped
-# thingies, to help you recognize VAX files on big-endian machines;
-# with "leshort", "lelong", and "string", that's no longer necessary....
-#
-0 belong 0x65ff0000 VAX 3.0 archive
-0 belong 0x3c61723e VAX 5.0 archive
-#
-0 long 0x213c6172 archive file
-0 lelong 0177555 very old VAX archive
-0 leshort 0177555 very old PDP-11 archive
-#
-# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus
-# be a random library (it said 0xff65 rather than 0177545).
-#
-0 lelong 0177545 old VAX archive
->8 string __.SYMDEF random library
-0 leshort 0177545 old PDP-11 archive
->8 string __.SYMDEF random library
-#
-# From "pdp" (but why a 4-byte quantity?)
-#
-0 lelong 0x39bed PDP-11 old archive
-0 lelong 0x39bee PDP-11 4.0 archive
-
-# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)
-#
-# The first byte is the magic (0x1a), byte 2 is the compression type for
-# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
-# filename of the first file (null terminated). Since some types collide
-# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
-# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo.
-0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW
-0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed
-0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed
-0 lelong&0x8080ffff 0x0000031a ARC archive data, packed
-0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed
-0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched
-
-# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)
-# I can't create either SPARK or ArcFS archives so I have not tested this stuff
-# [GRR: the original entries collide with ARC, above; replaced with combined
-# version (not tested)]
-#0 byte 0x1a RISC OS archive
-#>1 string archive (ArcFS format)
-#0 string \032archive RISC OS archive (ArcFS format)
-0 string \032 RISC OS archive (spark format)
-0 string Archive\000 RISC OS archive (ArcFS format)
-
-# ARJ archiver (jason@jarthur.Claremont.EDU)
-0 leshort 0xea60 ARJ archive data
->5 byte x \b, v%d,
->8 byte &0x04 multi-volume,
->8 byte &0x10 slash-switched,
->8 byte &0x20 backup,
->34 string x original name: %s,
->7 byte 0 os: MS-DOS
->7 byte 1 os: PRIMOS
->7 byte 2 os: Unix
->7 byte 3 os: Amiga
->7 byte 4 os: Macintosh
->7 byte 5 os: OS/2
->7 byte 6 os: Apple ][ GS
->7 byte 7 os: Atari ST
->7 byte 8 os: NeXT
->7 byte 9 os: VAX/VMS
->3 byte >0 %d]
-
-# HA archiver (Greg Roelofs, newt@uchicago.edu)
-# This is a really bad format. A file containing HAWAII will match this...
-#0 string HA HA archive data,
-#>2 leshort =1 1 file,
-#>2 leshort >1 %u files,
-#>4 byte&0x0f =0 first is type CPY
-#>4 byte&0x0f =1 first is type ASC
-#>4 byte&0x0f =2 first is type HSC
-#>4 byte&0x0f =0x0e first is type DIR
-#>4 byte&0x0f =0x0f first is type SPECIAL
-
-# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)
-0 string HPAK HPACK archive data
-
-# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net
-0 string \351,\001JAM\ JAM archive,
->7 string >\0 version %.4s
->0x26 byte =0x27 -
->>0x2b string >\0 label %.11s,
->>0x27 lelong x serial %08x,
->>0x36 string >\0 fstype %.8s
-
-# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
-2 string -lh0- LHarc 1.x archive data [lh0]
-2 string -lh1- LHarc 1.x archive data [lh1]
-2 string -lz4- LHarc 1.x archive data [lz4]
-2 string -lz5- LHarc 1.x archive data [lz5]
-# [never seen any but the last; -lh4- reported in comp.compression:]
-2 string -lzs- LHa 2.x? archive data [lzs]
-2 string -lh\40- LHa 2.x? archive data [lh ]
-2 string -lhd- LHa 2.x? archive data [lhd]
-2 string -lh2- LHa 2.x? archive data [lh2]
-2 string -lh3- LHa 2.x? archive data [lh3]
-2 string -lh4- LHa (2.x) archive data [lh4]
-2 string -lh5- LHa (2.x) archive data [lh5]
-2 string -lh6- LHa (2.x) archive data [lh6]
-2 string -lh7- LHa (2.x) archive data [lh7]
->20 byte x - header level %d
-
-# RAR archiver (Greg Roelofs, newt@uchicago.edu)
-0 string Rar! RAR archive data,
->44 byte x v%0x,
->35 byte 0 os: MS-DOS
->35 byte 1 os: OS/2
->35 byte 2 os: Win32
->35 byte 3 os: Unix
-
-# SQUISH archiver (Greg Roelofs, newt@uchicago.edu)
-0 string SQSH squished archive data (Acorn RISCOS)
-
-# UC2 archiver (Greg Roelofs, newt@uchicago.edu)
-# I can't figure out the self-extracting form of these buggers...
-0 string UC2\x1a UC2 archive data
-
-# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
-0 string PK\003\004 Zip archive data
->4 byte 0x09 \b, at least v0.9 to extract
->4 byte 0x0a \b, at least v1.0 to extract
->4 byte 0x0b \b, at least v1.1 to extract
->4 byte 0x14 \b, at least v2.0 to extract
-
-# Zoo archiver
-20 lelong 0xfdc4a7dc Zoo archive data
->4 byte >48 \b, v%c.
->>6 byte >47 \b%c
->>>7 byte >47 \b%c
->32 byte >0 \b, modify: v%d
->>33 byte x \b.%d+
->42 lelong 0xfdc4a7dc \b,
->>70 byte >0 extract: v%d
->>>71 byte x \b.%d+
-
-# Shell archives
-10 string #\ This\ is\ a\ shell\ archive shell archive text
-
-#
-# LBR. NB: May conflict with the questionable
-# "binary Computer Graphics Metafile" format.
-#
-0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data
-#
-# PMA (CP/M derivative of LHA)
-#
-2 string -pm0- PMarc archive data [pm0]
-2 string -pm1- PMarc archive data [pm1]
-2 string -pm2- PMarc archive data [pm2]
-2 string -pms- PMarc SFX archive (CP/M, DOS)
-5 string -pc1- PopCom compressed executable (CP/M)
-
-# From Rafael Laboissiere <rafael@laboissiere.net>
-# The Project Revision Control System (see
-# http://prcs.sourceforge.net) generates a packaged project
-# file which is recognized by the following entry:
-0 leshort 0xeb81 PRCS packaged project
-
-# Microsoft cabinets
-# by David Necas (Yeti) <yeti@physics.muni.cz>
-#0 string MSCF\0\0\0\0 Microsoft cabinet file data,
-#>25 byte x v%d
-#>24 byte x \b.%d
-# MPi: All CABs have version 1.3, so this is pointless.
-# Better magic in debian-additions.
-
-# GTKtalog catalogs
-# by David Necas (Yeti) <yeti@physics.muni.cz>
-4 string gtktalog\ GTKtalog catalog data,
->13 string 3 version 3
->>14 beshort 0x677a (gzipped)
->>14 beshort !0x677a (not gzipped)
->13 string >3 version %s
-
-############################################################################
-# Parity archive reconstruction file, the 'par' file format now used on Usenet.
-0 string PAR\0 PARity archive data
->48 leshort =0 - Index file
->48 leshort >0 - file number %d
-
-# Felix von Leitner <felix-file@fefe.de>
-0 string d8:announce BitTorrent file
-
-# Atari MSA archive - Teemu Hukkanen <tjhukkan@iki.fi>
-0 beshort 0x0e0f Atari MSA archive data
->2 beshort x \b, %d sectors per track
->4 beshort 0 \b, 1 sided
->4 beshort 1 \b, 2 sided
->6 beshort x \b, starting track: %d
->8 beshort x \b, ending track: %d
-
-# Alternate ZIP string (amc@arwen.cs.berkeley.edu)
-0 string PK00PK\003\004 Zip archive data
-
-# ACE archive (from http://www.wotsit.org/download.asp?f=ace)
-# by Stefan `Sec` Zehl <sec@42.org>
-7 string **ACE** ACE compressed archive
->15 byte >0 version %d
->16 byte =0x00 \b, from MS-DOS
->16 byte =0x01 \b, from OS/2
->16 byte =0x02 \b, from Win/32
->16 byte =0x03 \b, from Unix
->16 byte =0x04 \b, from MacOS
->16 byte =0x05 \b, from WinNT
->16 byte =0x06 \b, from Primos
->16 byte =0x07 \b, from AppleGS
->16 byte =0x08 \b, from Atari
->16 byte =0x09 \b, from Vax/VMS
->16 byte =0x0A \b, from Amiga
->16 byte =0x0B \b, from Next
->14 byte x \b, version %d to extract
->5 leshort &0x0080 \b, multiple volumes,
->>17 byte x \b (part %d),
->5 leshort &0x0002 \b, contains comment
->5 leshort &0x0200 \b, sfx
->5 leshort &0x0400 \b, small dictionary
->5 leshort &0x0800 \b, multi-volume
->5 leshort &0x1000 \b, contains AV-String
->>30 string\x16*UNREGISTERED\x20VERSION* (unregistered)
->5 leshort &0x2000 \b, with recovery record
->5 leshort &0x4000 \b, locked
->5 leshort &0x8000 \b, solid
-# Date in MS-DOS format (whatever that is)
-#>18 lelong x Created on
-
-# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann
-# <doj@cubic.org>
-0x1A string sfArk sfArk compressed Soundfont
->0x15 string 2
->>0x1 string >\0 Version %s
->>0x2A string >\0 : %s
-
-#------------------------------------------------------------------------------
-# citrus locale declaration
-#
-
-0 string RuneCT Citrus locale declaration for LC_CTYPE
-
-
-#------------------------------------------------------------------------------
-# compress: file(1) magic for pure-compression formats (no archives)
-#
-# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
-#
-# Formats for various forms of compressed data
-# Formats for "compress" proper have been moved into "compress.c",
-# because it tries to uncompress it to figure out what's inside.
-
-# standard unix compress
-0 string \037\235 compress'd data
->2 byte&0x80 >0 block compressed
->2 byte&0x1f x %d bits
-
-# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
-# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
-# * Original filename is only at offset 10 if "extra field" absent
-# * Produce shorter output - notably, only report compression methods
-# other than 8 ("deflate", the only method defined in RFC 1952).
-0 string \037\213 gzip compressed data
->2 byte <8 \b, reserved method
->2 byte >8 \b, unknown method
->3 byte &0x01 \b, ASCII
->3 byte &0x02 \b, continuation
->3 byte &0x04 \b, extra field
->3 byte&0xC =0x08
->>10 string x \b, was "%s"
->9 byte =0x00 \b, from MS-DOS
->9 byte =0x01 \b, from Amiga
->9 byte =0x02 \b, from VMS
->9 byte =0x03 \b, from Unix
->9 byte =0x05 \b, from Atari
->9 byte =0x06 \b, from OS/2
->9 byte =0x07 \b, from MacOS
->9 byte =0x0A \b, from Tops/20
->9 byte =0x0B \b, from Win/32
->3 byte &0x10 \b, comment
->3 byte &0x20 \b, encrypted
-### >4 ledate x last modified: %s,
->8 byte 2 \b, max compression
->8 byte 4 \b, max speed
-
-# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
-0 string \037\036 packed data
->2 belong >1 \b, %d characters originally
->2 belong =1 \b, %d character originally
-#
-# This magic number is byte-order-independent.
-0 short 0x1f1f old packed data
-
-# XXX - why *two* entries for "compacted data", one of which is
-# byte-order independent, and one of which is byte-order dependent?
-#
-0 short 0x1fff compacted data
-# This string is valid for SunOS (BE) and a matching "short" is listed
-# in the Ultrix (LE) magic file.
-0 string \377\037 compacted data
-0 short 0145405 huf output
-
-# bzip2
-0 string BZh bzip2 compressed data
->3 byte >47 \b, block size = %c00k
-
-# squeeze and crunch
-# Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
-0 beshort 0x76FF squeezed data,
->4 string x original name %s
-0 beshort 0x76FE crunched data,
->2 string x original name %s
-0 beshort 0x76FD LZH compressed data,
->2 string x original name %s
-
-# Freeze
-0 string \037\237 frozen file 2.1
-0 string \037\236 frozen file 1.0 (or gzip 0.5)
-
-# SCO compress -H (LZH)
-0 string \037\240 SCO compress -H (LZH) data
-
-# European GSM 06.10 is a provisional standard for full-rate speech
-# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
-# excitation/long term prediction) coding at 13 kbit/s.
-#
-# There's only a magic nibble (4 bits); that nibble repeats every 33
-# bytes. This isn't suited for use, but maybe we can use it someday.
-#
-# This will cause very short GSM files to be declared as data and
-# mismatches to be declared as data too!
-#0 byte&0xF0 0xd0 data
-#>33 byte&0xF0 0xd0
-#>66 byte&0xF0 0xd0
-#>99 byte&0xF0 0xd0
-#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio
-
-# bzip a block-sorting file compressor
-# by Julian Seward <sewardj@cs.man.ac.uk> and others
-#
-0 string BZ bzip compressed data
->2 byte x \b, version: %c
->3 string =1 \b, compression block size 100k
->3 string =2 \b, compression block size 200k
->3 string =3 \b, compression block size 300k
->3 string =4 \b, compression block size 400k
->3 string =5 \b, compression block size 500k
->3 string =6 \b, compression block size 600k
->3 string =7 \b, compression block size 700k
->3 string =8 \b, compression block size 800k
->3 string =9 \b, compression block size 900k
-
-# lzop from <markus.oberhumer@jk.uni-linz.ac.at>
-0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data
->9 beshort <0x0940
->>9 byte&0xf0 =0x00 - version 0.
->>9 beshort&0x0fff x \b%03x,
->>13 byte 1 LZO1X-1,
->>13 byte 2 LZO1X-1(15),
->>13 byte 3 LZO1X-999,
-## >>22 bedate >0 last modified: %s,
->>14 byte =0x00 os: MS-DOS
->>14 byte =0x01 os: Amiga
->>14 byte =0x02 os: VMS
->>14 byte =0x03 os: Unix
->>14 byte =0x05 os: Atari
->>14 byte =0x06 os: OS/2
->>14 byte =0x07 os: MacOS
->>14 byte =0x0A os: Tops/20
->>14 byte =0x0B os: WinNT
->>14 byte =0x0E os: Win32
->9 beshort >0x0939
->>9 byte&0xf0 =0x00 - version 0.
->>9 byte&0xf0 =0x10 - version 1.
->>9 byte&0xf0 =0x20 - version 2.
->>9 beshort&0x0fff x \b%03x,
->>15 byte 1 LZO1X-1,
->>15 byte 2 LZO1X-1(15),
->>15 byte 3 LZO1X-999,
-## >>25 bedate >0 last modified: %s,
->>17 byte =0x00 os: MS-DOS
->>17 byte =0x01 os: Amiga
->>17 byte =0x02 os: VMS
->>17 byte =0x03 os: Unix
->>17 byte =0x05 os: Atari
->>17 byte =0x06 os: OS/2
->>17 byte =0x07 os: MacOS
->>17 byte =0x0A os: Tops/20
->>17 byte =0x0B os: WinNT
->>17 byte =0x0E os: Win32
-
-# 4.3BSD-Quasijarus Strong Compression
-# http://minnie.tuhs.org/Quasijarus/compress.html
-0 string \037\241 Quasijarus strong compressed data
-
-# From: Cory Dikkers <cdikkers@swbell.net>
-0 string XPKF Amiga xpkf.library compressed data
-0 string PP11 Power Packer 1.1 compressed data
-0 string PP20 Power Packer 2.0 compressed data,
->4 belong 0x09090909 fast compression
->4 belong 0x090A0A0A mediocre compression
->4 belong 0x090A0B0B good compression
->4 belong 0x090A0C0C very good compression
->4 belong 0x090A0C0D best compression
-
-# 7z archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at)
-# http://www.7-zip.org or DOC/7zFormat.txt
-#
-0 string 7z\274\257\047\034 7z archive data,
->6 byte x version %d
->7 byte x \b.%d
-
-# AFX compressed files (Wolfram Kleff)
-2 string -afx- AFX compressed file data
-
-#------------------------------------------------------------------------------
-# fsav: file(1) magic for datafellows fsav virus definition files
-# Anthon van der Neut (anthon@mnt.org)
-0 beshort 0x1575 fsav (linux) macro virus
->8 leshort >0 (%d-
->11 byte >0 \b%02d-
->10 byte >0 \b%02d)
-
-# comment this out for now because it regognizes every file where
-# the eighth character is \n
-#8 byte 0x0a
-#>12 byte 0x07
-#>11 leshort >0 fsav (linux) virus (%d-
-#>10 byte 0 \b01-
-#>10 byte 1 \b02-
-#>10 byte 2 \b03-
-#>10 byte 3 \b04-
-#>10 byte 4 \b05-
-#>10 byte 5 \b06-
-#>10 byte 6 \b07-
-#>10 byte 7 \b08-
-#>10 byte 8 \b08-
-#>10 byte 9 \b10-
-#>10 byte 10 \b11-
-#>10 byte 11 \b12-
-#>9 byte >0 \b%02d)
-
-#------------------------------------------------------------------------------
-# GEOS files (Vidar Madsen, vidar@gimp.org)
-# semi-commonly used in embedded and handheld systems.
-0 belong 0xc745c153 GEOS
->40 byte 1 executable
->40 byte 2 VMFile
->40 byte 3 binary
->40 byte 4 directory label
->40 byte <1 unknown
->40 byte >4 unknown
->4 string >\0 \b, name "%s"
-#>44 short x \b, version %d
-#>46 short x \b.%d
-#>48 short x \b, rev %d
-#>50 short x \b.%d
-#>52 short x \b, proto %d
-#>54 short x \br%d
-#>168 string >\0 \b, copyright "%s"
-#------------------------------------------------------------
-# Java ByteCode
-# From Larry Schwimmer (schwim@cs.stanford.edu)
-0 belong 0xcafebabe compiled Java class data,
->6 beshort x version %d.
->4 beshort x \b%d
-#------------------------------------------------------------
-# Java serialization
-# From Martin Pool (m.pool@pharos.com.au)
-0 beshort 0xaced Java serialization data
->2 beshort >0x0004 \b, version %d
-
-#------------------------------------------------------------------------------
-# mlssa: file(1) magic for MLSSA datafiles
-#
-0 lelong 0xffffabcd MLSSA datafile,
->4 leshort x algorithm %d,
->10 lelong x %d samples
-
-#------------------------------------------------------------------------------
-# mmdf: file(1) magic for MMDF mail files
-#
-0 string \001\001\001\001 MMDF mailbox
-
-#------------------------------------------------------------------------------
-# msdos: file(1) magic for MS-DOS files
-#
-
-# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
-0 string/c @echo\ off MS-DOS batch file text
-
-# XXX - according to Microsoft's spec, at an offset of 0x3c in a
-# PE-format executable is the offset in the file of the PE header;
-# unfortunately, that's a little-endian offset, and there's no way
-# to specify an indirect offset with a specified byte order.
-# So, for now, we assume the standard MS-DOS stub, which puts the
-# PE header at 0x80 = 128.
-#
-# Required OS version and subsystem version were 4.0 on some NT 3.51
-# executables built with Visual C++ 4.0, so it's not clear that
-# they're interesting. The user version was 0.0, but there's
-# probably some linker directive to set it. The linker version was
-# 3.0, except for one ".exe" which had it as 4.20 (same damn linker!).
-#
-128 string PE\0\0 MS Windows PE
->150 leshort&0x0100 >0 32-bit
->132 leshort 0x0 unknown processor
->132 leshort 0x14c Intel 80386
->132 leshort 0x166 MIPS R4000
->132 leshort 0x184 Alpha
->132 leshort 0x268 Motorola 68000
->132 leshort 0x1f0 PowerPC
->132 leshort 0x290 PA-RISC
->148 leshort >27
->>220 leshort 0 unknown subsystem
->>220 leshort 1 native
->>220 leshort 2 GUI
->>220 leshort 3 console
->>220 leshort 7 POSIX
->150 leshort&0x2000 =0 executable
-#>>136 ledate x stamp %s,
->>150 leshort&0x0001 >0 not relocatable
-#>>150 leshort&0x0004 =0 with line numbers,
-#>>150 leshort&0x0008 =0 with local symbols,
-#>>150 leshort&0x0200 =0 with debug symbols,
->>150 leshort&0x1000 >0 system file
-#>>148 leshort >0
-#>>>154 byte x linker %d
-#>>>155 byte x \b.%d,
-#>>148 leshort >27
-#>>>192 leshort x requires OS %d
-#>>>194 leshort x \b.%d,
-#>>>196 leshort x user version %d
-#>>>198 leshort x \b.%d,
-#>>>200 leshort x subsystem version %d
-#>>>202 leshort x \b.%d,
->150 leshort&0x2000 >0 DLL
-#>>136 ledate x stamp %s,
->>150 leshort&0x0001 >0 not relocatable
-#>>150 leshort&0x0004 =0 with line numbers,
-#>>150 leshort&0x0008 =0 with local symbols,
-#>>150 leshort&0x0200 =0 with debug symbols,
->>150 leshort&0x1000 >0 system file
-#>>148 leshort >0
-#>>>154 byte x linker %d
-#>>>155 byte x \b.%d,
-#>>148 leshort >27
-#>>>192 leshort x requires OS %d
-#>>>194 leshort x \b.%d,
-#>>>196 leshort x user version %d
-#>>>198 leshort x \b.%d,
-#>>>200 leshort x subsystem version %d
-#>>>202 leshort x \b.%d,
-0 leshort 0x14c MS Windows COFF Intel 80386 object file
-#>4 ledate x stamp %s
-0 leshort 0x166 MS Windows COFF MIPS R4000 object file
-#>4 ledate x stamp %s
-0 leshort 0x184 MS Windows COFF Alpha object file
-#>4 ledate x stamp %s
-0 leshort 0x268 MS Windows COFF Motorola 68000 object file
-#>4 ledate x stamp %s
-0 leshort 0x1f0 MS Windows COFF PowerPC object file
-#>4 ledate x stamp %s
-0 leshort 0x290 MS Windows COFF PA-RISC object file
-#>4 ledate x stamp %s
-
-# .EXE formats (Greg Roelofs, newt@uchicago.edu)
-#
-0 string MZ MS-DOS executable (EXE)
->24 string @ \b, OS/2 or MS Windows
->>0xe7 string LH/2\ Self-Extract \b, %s
->>0xe9 string PKSFX2 \b, %s
->>122 string Windows\ self-extracting\ ZIP \b, %s
->0x1c string RJSX\xff\xff \b, ARJ SFX
->0x1c string diet\xf9\x9c \b, diet compressed
->0x1c string LZ09 \b, LZEXE v0.90 compressed
->0x1c string LZ91 \b, LZEXE v0.91 compressed
->0x1e string Copyright\ 1989-1990\ PKWARE\ Inc. \b, PKSFX
-# JM: 0x1e "PKLITE Copr. 1990-92 PKWARE Inc. All Rights Reserved\7\0\0\0"
->0x1e string PKLITE\ Copr. \b, %.6s compressed
->0x24 string LHa's\ SFX \b, %.15s
->0x24 string LHA's\ SFX \b, %.15s
->1638 string -lh5- \b, LHa SFX archive v2.13S
->7195 string Rar! \b, RAR self-extracting archive
-#
-# [GRR 950118: file 3.15 has a buffer-size limitation; offsets bigger than
-# 8161 bytes are ignored. To make the following entries work, increase
-# HOWMANY in file.h to 32K at least, and maybe to 70K or more for OS/2,
-# NT/Win32 and VMS.]
-# [GRR: some company sells a self-extractor/displayer for image data(!)]
-#
->11696 string PK\003\004 \b, PKZIP SFX archive v1.1
->13297 string PK\003\004 \b, PKZIP SFX archive v1.93a
->15588 string PK\003\004 \b, PKZIP2 SFX archive v1.09
->15770 string PK\003\004 \b, PKZIP SFX archive v2.04g
->28374 string PK\003\004 \b, PKZIP2 SFX archive v1.02
-#
-# Info-ZIP self-extractors
-# these are the DOS versions:
->25115 string PK\003\004 \b, Info-ZIP SFX archive v5.12
->26331 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
-# these are the OS/2 versions (OS/2 is flagged above):
->47031 string PK\003\004 \b, Info-ZIP SFX archive v5.12
->49845 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
-# this is the NT/Win32 version:
->69120 string PK\003\004 \b, Info-ZIP NT SFX archive v5.12 w/decryption
-#
-# TELVOX Teleinformatica CODEC self-extractor for OS/2:
->49801 string \x79\xff\x80\xff\x76\xff \b, CODEC archive v3.21
->>49824 leshort =1 \b, 1 file
->>49824 leshort >1 \b, %u files
-
-# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com)
-# Uncommenting only the first two lines will cover about 2/3 of COM files,
-# but it isn't feasible to match all COM files since there must be at least
-# two dozen different one-byte "magics".
-#0 byte 0xe9 MS-DOS executable (COM)
-#>6 string SFX\ of\ LHarc (%s)
-#0 byte 0x8c MS-DOS executable (COM)
-# 0xeb conflicts with "sequent" magic
-#0 byte 0xeb MS-DOS executable (COM)
-#0 byte 0xb8 MS-DOS executable (COM)
-
-# miscellaneous formats
-0 string LZ MS-DOS executable (built-in)
-#0 byte 0xf0 MS-DOS program library data
-#
-
-#
-# Windows Registry files.
-#
-0 string regf Windows NT registry file
-0 string CREG Windows 95 registry file
-
-
-# AAF files:
-# <stuartc@rd.bbc.co.uk> Stuart Cunningham
-0 string \320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377 AAF legacy file using MS Structured Storage
->30 byte 9 (512B sectors)
->30 byte 12 (4kB sectors)
-0 string \320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001 AAF file using MS Structured Storage
->30 byte 9 (512B sectors)
->30 byte 12 (4kB sectors)
-
-# Popular applications
-2080 string Microsoft\ Word\ 6.0\ Document %s
-2080 string Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
-# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)
-2112 string MSWordDoc Microsoft Word document data
-#
-0 belong 0x31be0000 Microsoft Word Document
-#
-0 string PO^Q` Microsoft Word 6.0 Document
-#
-0 string \376\067\0\043 Microsoft Office Document
-0 string \320\317\021\340\241\261\032\341 Microsoft Office Document
-0 string \333\245-\0\0\0 Microsoft Office Document
-#
-2080 string Microsoft\ Excel\ 5.0\ Worksheet %s
-2080 string Foglio\ di\ lavoro\ Microsoft\ Exce %s
-#
-# Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Excel)
-2114 string Biff5 Microsoft Excel 5.0 Worksheet
-# Italian MS-Excel
-2121 string Biff5 Microsoft Excel 5.0 Worksheet
-0 string \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet
-#
-0 belong 0x00001a00 Lotus 1-2-3
->4 belong 0x00100400 wk3 document data
->4 belong 0x02100400 wk4 document data
->4 belong 0x07800100 fm3 or fmb document data
->4 belong 0x07800000 fm3 or fmb document data
-#
-0 belong 0x00000200 Lotus 1-2-3
->4 belong 0x06040600 wk1 document data
->4 belong 0x06800200 fmt document data
-
-# Help files
-0 string ?_\3\0 MS Windows Help Data
-
-# DeIsL1.isu what this is I don't know
-0 string \161\250\000\000\001\002 DeIsL1.isu whatever that is
-
-# Winamp .avs
-#0 string Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
-0 string Nullsoft\ AVS\ Preset\ Winamp plug in
-
-# Hyper terminal:
-0 string HyperTerminal\ hyperterm
->15 string 1.0\ --\ HyperTerminal\ data\ file MS-windows Hyperterminal
-
-# Windows Metafont .WMF
-0 string \327\315\306\232\000\000\000\000\000\000 ms-windows metafont .wmf
-
-#tz3 files whatever that is (MS Works files)
-0 string \003\001\001\004\070\001\000\000 tz3 ms-works file
-0 string \003\002\001\004\070\001\000\000 tz3 ms-works file
-0 string \003\003\001\004\070\001\000\000 tz3 ms-works file
-
-# PGP sig files .sig
-#0 string \211\000\077\003\005\000\063\237\127 065 to \027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
-
-# windows zips files .dmf
-0 string MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 Ms-windows special zipped file
-
-
-# Windows help file FTG FTS
-0 string \164\146\115\122\012\000\000\000\001\000\000\000 ms-windows help cache
-
-# grp old windows 3.1 group files
-0 string \120\115\103\103 Ms-windows 3.1 group files
-
-
-# lnk files windows symlinks
-0 string \114\000\000\000\001\024\002\000\000\000\000\000\300\000\000\000\000\000\000\106 ms-Windows shortcut
-
-#ico files
-0 string \102\101\050\000\000\000\056\000\000\000\000\000\000\000 Icon for ms-windows
-
-# Windows icons (Ian Springer <ips@fpk.hp.com>)
-0 string \000\000\001\000 ms-windows icon resource
->4 byte 1 - 1 icon
->4 byte >1 - %d icons
->>6 byte >0 \b, %dx
->>>7 byte >0 \b%d
->>8 byte 0 \b, 256-colors
->>8 byte >0 \b, %d-colors
-
-
-# .chr files
-0 string PK\010\010BGI Borland font
->4 string >\0 %s
-# then there is a copyright notice
-
-
-# .bgi files
-0 string pk\010\010BGI Borland device
->4 string >\0 %s
-# then there is a copyright notice
-
-
-# recycled/info the windows trash bin index
-9 string \000\000\000\030\001\000\000\000 ms-windows recycled bin info
-
-
-##### put in Either Magic/font or Magic/news
-# Acroread or something files wrongly identified as G3 .pfm
-# these have the form \000 \001 any? \002 \000 \000
-# or \000 \001 any? \022 \000 \000
-#0 string \000\001 pfm?
-#>3 string \022\000\000Copyright\ yes
-#>3 string \002\000\000Copyright\ yes
-#>3 string >\0 oops, not a font file. Cancel that.
-#it clashes with ttf files so put it lower down.
-
-# From Doug Lee via a FreeBSD pr
-9 string GERBILDOC First Choice document
-9 string GERBILDB First Choice database
-9 string GERBILCLIP First Choice database
-0 string GERBIL First Choice device file
-9 string RABBITGRAPH RabbitGraph file
-0 string DCU1 Borland Delphi .DCU file
-0 string !<spell> MKS Spell hash list (old format)
-0 string !<spell2> MKS Spell hash list
-# Too simple - MPi
-#0 string AH Halo(TM) bitmapped font file
-0 lelong 0x08086b70 TurboC BGI file
-0 lelong 0x08084b50 TurboC Font file
-
-# WARNING: below line conflicts with Infocom game data Z-machine 3
-0 byte 0x03 DBase 3 data file
->0x04 lelong 0 (no records)
->0x04 lelong >0 (%ld records)
-0 byte 0x83 DBase 3 data file with memo(s)
->0x04 lelong 0 (no records)
->0x04 lelong >0 (%ld records)
-0 leshort 0x0006 DBase 3 index file
-0 string PMCC Windows 3.x .GRP file
-1 string RDC-meg MegaDots
->8 byte >0x2F version %c
->9 byte >0x2F \b.%c file
-0 lelong 0x4C
->4 lelong 0x00021401 Windows shortcut file
-
-# DOS EPS Binary File Header
-# From: Ed Sznyter <ews@Black.Market.NET>
-0 belong 0xC5D0D3C6 DOS EPS Binary File
->4 long >0 Postscript starts at byte %d
->>8 long >0 length %d
->>>12 long >0 Metafile starts at byte %d
->>>>16 long >0 length %d
->>>20 long >0 TIFF starts at byte %d
->>>>24 long >0 length %d
-
-# TNEF magic From "Joomy" <joomy@se-ed.net>
-0 leshort 0x223e9f78 TNEF
-
-# HtmlHelp files (.chm)
-0 string ITSF\003\000\000\000\x60\000\000\000\001\000\000\000 MS Windows HtmlHelp Data
-
-# GFA-BASIC (Wolfram Kleff)
-2 string GFA-BASIC3 GFA-BASIC 3 data
-
-# DJGPP compiled files
-# v >2, uses DPMI & small(2k) stub (Robert vd Boon, rjvdboon@europe.com)
-0x200 string go32stub DOS-executable compiled w/DJGPP
->0x20c string >0 (stub v%.4s)
->>0x8b2 string djp [compressed w/%s
->>>&1 string >\0 %.4s]
->>0x8ad string UPX [compressed w/%s
->>>&1 string >\0 %.4s]
->>0x1c string pmodedj stubbed with %s
-
-# QDOS
-4 belong 0x4AFB QDOS executable
->9 pstring x '%s'
-0 beshort 0xFB01 QDOS object
->2 pstring x '%s'
-
-#------------------------------------------------------------------------------
-# From Stuart Caie <kyzer@4u.net> (developer of cabextract)
-# Microsoft Cabinet files
-0 string MSCF\0\0\0\0 Microsoft Cabinet file
->8 lelong x \b, %u bytes
->28 leshort 1 \b, 1 file
->28 leshort >1 \b, %u files
-
-# InstallShield Cabinet files
-0 string ISc( InstallShield Cabinet file
->5 byte&0xf0 =0x60 version 6,
->5 byte&0xf0 !0x60 version 4/5,
->(12.l+40) lelong x %u files
-
-# Windows CE package files
-0 string MSCE\0\0\0\0 Microsoft WinCE install header
->20 lelong 0 \b, architecture-independent
->20 lelong 103 \b, Hitachi SH3
->20 lelong 104 \b, Hitachi SH4
->20 lelong 0xA11 \b, StrongARM
->20 lelong 4000 \b, MIPS R4000
->20 lelong 10003 \b, Hitachi SH3
->20 lelong 10004 \b, Hitachi SH3E
->20 lelong 10005 \b, Hitachi SH4
->20 lelong 70001 \b, ARM 7TDMI
->52 leshort 1 \b, 1 file
->52 leshort >1 \b, %u files
->56 leshort 1 \b, 1 registry entry
->56 leshort >1 \b, %u registry entries
-
-# Outlook Personal Folders
-0 lelong 0x4E444221 Microsoft Outlook binary email folder
-
-# From: Dirk Jagdmann <doj@cubic.org>
-0 lelong 0x00035f3f Windows 3.x help file
-
-# Christophe Monniez
-0 string Client\ UrlCache\ MMF Microsoft Internet Explorer Cache File
->20 string >\0 Version %s
-0 string \xCF\xAD\x12\xFE Microsoft Outlook Express DBX File
->4 byte =0xC5 Message database
->4 byte =0xC6 Folder database
->4 byte =0xC7 Accounts informations
->4 byte =0x30 Offline database
-
-
-# Windows Enhanced Metafile (EMF)
-# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
-# for further information. Note that "0 lelong 1" should be true i.e.
-# the first double word in the file should be 1. With the extended
-# syntax available by some file commands you could write:
-# 0 lelong 1
-# &40 ulelong 0x464D4520 Windows Enhanced Metafile (EMF) image data
-40 ulelong 0x464D4520 Windows Enhanced Metafile (EMF) image data
->44 ulelong x version 0x%x.
-# If the description has a length greater than zero, it exists and is
-# found at offset (*64).
->64 ulelong >0 Description available at offset 0x%x
->>60 ulelong >0 (length 0x%x)
-# Note it would be better to print out the description, which is found
-# as below. Unfortunately the following only prints out the first couple
-# of characters instead of all the "description length"
-# number of characters -- indicated by the ulelong at offset 60.
->>(64.l) lestring16 >0 Description: %15.15s
-#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
-0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable text
->15 byte 0 Optimized for Intel
->15 byte 1 Optimized for Non-Intel
-1 string WPC (Corel/WP)
->8 short 257 WordPerfect macro
->8 short 258 WordPerfect help file
->8 short 259 WordPerfect keyboard file
->8 short 266 WordPerfect document
->8 short 267 WordPerfect dictionary
->8 short 268 WordPerfect thesaurus
->8 short 269 WordPerfect block
->8 short 270 WordPerfect rectangular block
->8 short 271 WordPerfect column block
->8 short 272 WordPerfect printer data
->8 short 275 WordPerfect printer data
->8 short 276 WordPerfect driver resource data
->8 short 279 WordPerfect hyphenation code
->8 short 280 WordPerfect hyphenation data
->8 short 281 WordPerfect macro resource data
->8 short 283 WordPerfect hyphenation lex
->8 short 285 WordPerfect wordlist
->8 short 286 WordPerfect equation resource data
->8 short 289 WordPerfect spell rules
->8 short 290 WordPerfect dictionary rules
->8 short 295 WordPerfect spell rules (Microlytics)
->8 short 299 WordPerfect settings file
->8 short 301 WordPerfect 4.2 document
->8 short 325 WordPerfect dialog file
->8 short 332 WordPerfect button bar
->8 short 513 Shell macro
->8 short 522 Shell definition
->8 short 769 Notebook macro
->8 short 770 Notebook help file
->8 short 771 Notebook keyboard file
->8 short 778 Notebook definition
->8 short 1026 Calculator help file
->8 short 1538 Calendar help file
->8 short 1546 Calendar data file
->8 short 1793 Editor macro
->8 short 1794 Editor help file
->8 short 1795 Editor keyboard file
->8 short 1817 Editor macro resource file
->8 short 2049 Macro editor macro
->8 short 2050 Macro editor help file
->8 short 2051 Macro editor keyboard file
->8 short 2305 PlanPerfect macro
->8 short 2306 PlanPerfect help file
->8 short 2307 PlanPerfect keyboard file
->8 short 2314 PlanPerfect worksheet
->8 short 2319 PlanPerfect printer definition
->8 short 2322 PlanPerfect graphic definition
->8 short 2323 PlanPerfect data
->8 short 2324 PlanPerfect temporary printer
->8 short 2329 PlanPerfect macro resource data
->8 byte 11 Mail
->8 short 2818 help file
->8 short 2821 distribution list
->8 short 2826 out box
->8 short 2827 in box
->8 short 2836 users archived mailbox
->8 short 2837 archived message database
->8 short 2838 archived attachments
->8 short 3083 Printer temporary file
->8 short 3330 Scheduler help file
->8 short 3338 Scheduler in file
->8 short 3339 Scheduler out file
->8 short 3594 GroupWise settings file
->8 short 3601 GroupWise directory services
->8 short 3627 GroupWise settings file
->8 short 4362 Terminal resource data
->8 short 4363 Terminal resource data
->8 short 4395 Terminal resource data
->8 short 4619 GUI loadable text
->8 short 4620 graphics resource data
->8 short 4621 printer settings file
->8 short 4622 port definition file
->8 short 4623 print queue parameters
->8 short 4624 compressed file
->8 short 5130 Network service msg file
->8 short 5131 Network service msg file
->8 short 5132 Async gateway login msg
->8 short 5134 GroupWise message file
->8 short 7956 GroupWise admin domain database
->8 short 7957 GroupWise admin host database
->8 short 7959 GroupWise admin remote host database
->8 short 7960 GroupWise admin ADS deferment data file
->8 short 8458 IntelliTAG (SGML) compiled DTD
->8 long 18219264 WordPerfect graphic image (1.0)
->8 long 18219520 WordPerfect graphic image (2.0)
-#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
-
-#------------------------------------------------------------------------------
-# rtf: file(1) magic for Rich Text Format (RTF)
-#
-# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk
-#
-0 string {\\rtf Rich Text Format data,
->5 byte x version %c,
->6 string \\ansi ANSI
->6 string \\mac Apple Macintosh
->6 string \\pc IBM PC, code page 437
->6 string \\pca IBM PS/2, code page 850
-
-#------------------------------------------------------------------------------
-# animation: file(1) magic for animation/movie formats
-#
-# animation formats
-# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)
-# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)
-
-# MPEG sequences
-# Scans for all common MPEG header start codes
-0 belong&0xFFFFFF00 0x00000100 MPEG sequence
->3 byte 0xBA
->>4 byte &0x40 \b, v2, program multiplex
->>4 byte ^0x40 \b, v1, system multiplex
->3 byte 0xBB \b, v1/2, multiplex (missing pack header)
->3 byte 0xB0 \b, v4
->>5 belong 0x000001B5
->>>9 byte &0x80
->>>>10 byte&0xF0 16 \b, video
->>>>10 byte&0xF0 32 \b, still texture
->>>>10 byte&0xF0 48 \b, mesh
->>>>10 byte&0xF0 64 \b, face
->>>9 byte ^0x80
->>>>9 byte&0xF8 8 \b, video
->>>>9 byte&0xF8 16 \b, still texture
->>>>9 byte&0xF8 24 \b, mesh
->>>>9 byte&0xF8 32 \b, face
->>4 byte 1 \b, simple @ L1
->>4 byte 2 \b, simple @ L2
->>4 byte 3 \b, simple @ L3
->>4 byte 4 \b, simple @ L0
->>4 byte 17 \b, simple scalable @ L1
->>4 byte 18 \b, simple scalable @ L2
->>4 byte 33 \b, core @ L1
->>4 byte 34 \b, core @ L2
->>4 byte 50 \b, main @ L2
->>4 byte 51 \b, main @ L3
->>4 byte 53 \b, main @ L4
->>4 byte 66 \b, n-bit @ L2
->>4 byte 81 \b, scalable texture @ L1
->>4 byte 97 \b, simple face animation @ L1
->>4 byte 98 \b, simple face animation @ L2
->>4 byte 99 \b, simple face basic animation @ L1
->>4 byte 100 \b, simple face basic animation @ L2
->>4 byte 113 \b, basic animation text @ L1
->>4 byte 114 \b, basic animation text @ L2
->>4 byte 129 \b, hybrid @ L1
->>4 byte 130 \b, hybrid @ L2
->>4 byte 145 \b, advanced RT simple @ L!
->>4 byte 146 \b, advanced RT simple @ L2
->>4 byte 147 \b, advanced RT simple @ L3
->>4 byte 148 \b, advanced RT simple @ L4
->>4 byte 161 \b, core scalable @ L1
->>4 byte 162 \b, core scalable @ L2
->>4 byte 163 \b, core scalable @ L3
->>4 byte 177 \b, advanced coding efficiency @ L1
->>4 byte 178 \b, advanced coding efficiency @ L2
->>4 byte 179 \b, advanced coding efficiency @ L3
->>4 byte 180 \b, advanced coding efficiency @ L4
->>4 byte 193 \b, advanced core @ L1
->>4 byte 194 \b, advanced core @ L2
->>4 byte 209 \b, advanced scalable texture @ L1
->>4 byte 210 \b, advanced scalable texture @ L2
->>4 byte 211 \b, advanced scalable texture @ L3
->>4 byte 225 \b, simple studio @ L1
->>4 byte 226 \b, simple studio @ L2
->>4 byte 227 \b, simple studio @ L3
->>4 byte 228 \b, simple studio @ L4
->>4 byte 229 \b, core studio @ L1
->>4 byte 230 \b, core studio @ L2
->>4 byte 231 \b, core studio @ L3
->>4 byte 232 \b, core studio @ L4
->>4 byte 240 \b, advanced simple @ L0
->>4 byte 241 \b, advanced simple @ L1
->>4 byte 242 \b, advanced simple @ L2
->>4 byte 243 \b, advanced simple @ L3
->>4 byte 244 \b, advanced simple @ L4
->>4 byte 245 \b, advanced simple @ L5
->>4 byte 247 \b, advanced simple @ L3b
->>4 byte 248 \b, FGS @ L0
->>4 byte 249 \b, FGS @ L1
->>4 byte 250 \b, FGS @ L2
->>4 byte 251 \b, FGS @ L3
->>4 byte 252 \b, FGS @ L4
->>4 byte 253 \b, FGS @ L5
->3 byte 0xB5 \b, v4
->>4 byte &0x80
->>>5 byte&0xF0 16 \b, video (missing profile header)
->>>5 byte&0xF0 32 \b, still texture (missing profile header)
->>>5 byte&0xF0 48 \b, mesh (missing profile header)
->>>5 byte&0xF0 64 \b, face (missing profile header)
->>4 byte ^0x80
->>>4 byte&0xF8 8 \b, video (missing profile header)
->>>4 byte&0xF8 16 \b, still texture (missing profile header)
->>>4 byte&0xF8 24 \b, mesh (missing profile header)
->>>4 byte&0xF8 32 \b, face (missing profile header)
->3 byte 0xB3
->>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
->>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
->>12 belong 0x000001B5 \b, v2,
->>>16 byte&0x0F 1 \b HP
->>>16 byte&0x0F 2 \b Spt
->>>16 byte&0x0F 3 \b SNR
->>>16 byte&0x0F 4 \b MP
->>>16 byte&0x0F 5 \b SP
->>>17 byte&0xF0 64 \b@HL
->>>17 byte&0xF0 96 \b@H-14
->>>17 byte&0xF0 128 \b@ML
->>>17 byte&0xF0 160 \b@LL
->>>17 byte &0x08 \b progressive
->>>17 byte ^0x08 \b interlaced
->>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video
->>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video
->>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video
->>11 byte &0x02
->>>75 byte &0x01
->>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
->>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
->>>>140 belong 0x000001B5 \b, v2,
->>>>>144 byte&0x0F 1 \b HP
->>>>>144 byte&0x0F 2 \b Spt
->>>>>144 byte&0x0F 3 \b SNR
->>>>>144 byte&0x0F 4 \b MP
->>>>>144 byte&0x0F 5 \b SP
->>>>>145 byte&0xF0 64 \b@HL
->>>>>145 byte&0xF0 96 \b@H-14
->>>>>145 byte&0xF0 128 \b@ML
->>>>>145 byte&0xF0 160 \b@LL
->>>>>145 byte &0x08 \b progressive
->>>>>145 byte ^0x08 \b interlaced
->>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video
->>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video
->>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video
->>>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
->>>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
->>>76 belong 0x000001B5 \b, v2,
->>>80 byte&0x0F 1 \b HP
->>>80 byte&0x0F 2 \b Spt
->>>80 byte&0x0F 3 \b SNR
->>>80 byte&0x0F 4 \b MP
->>>80 byte&0x0F 5 \b SP
->>>81 byte&0xF0 64 \b@HL
->>>81 byte&0xF0 96 \b@H-14
->>>81 byte&0xF0 128 \b@ML
->>>81 byte&0xF0 160 \b@LL
->>>81 byte &0x08 \b progressive
->>>81 byte ^0x08 \b interlaced
->>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video
->>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video
->>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video
->>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P
->>>7 byte&0xF0 0x10 \b, 16:9
->>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I
->>>7 byte&0xF0 0x10 \b, 16:9
->>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture
->>>7 byte&0xF0 0x10 \b, 4:3
->>4 beshort&0xFFF0 0x2C00 \b, 4CIF
->>>5 beshort&0x0FFF 0x01E0 \b NTSC
->>>5 beshort&0x0FFF 0x0240 \b PAL
->>>7 byte&0xF0 0x20 \b, 4:3
->>>7 byte&0xF0 0x30 \b, 16:9
->>>7 byte&0xF0 0x40 \b, 11:5
->>>7 byte&0xF0 0x80 \b, PAL 4:3
->>>7 byte&0xF0 0xC0 \b, NTSC 4:3
->>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P
->>>7 byte&0xF0 0x10 \b, 4:3
->>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240
->>>7 byte&0xF0 0x10 \b, 4:3
->>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160
->>>7 byte&0xF0 0x10 \b, 4:3
->>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120
->>>7 byte&0xF0 0x10 \b, 4:3
->>4 beshort&0xFFF0 0x1600 \b, CIF
->>>5 beshort&0x0FFF 0x00F0 \b NTSC
->>>5 beshort&0x0FFF 0x0120 \b PAL
->>>7 byte&0xF0 0x20 \b, 4:3
->>>7 byte&0xF0 0x30 \b, 16:9
->>>7 byte&0xF0 0x40 \b, 11:5
->>>7 byte&0xF0 0x80 \b, PAL 4:3
->>>7 byte&0xF0 0xC0 \b, NTSC 4:3
->>>5 beshort&0x0FFF 0x0240 \b PAL 625
->>>>7 byte&0xF0 0x20 \b, 4:3
->>>>7 byte&0xF0 0x30 \b, 16:9
->>>>7 byte&0xF0 0x40 \b, 11:5
->>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU
->>>5 beshort&0x0FFF 0x01E0 \b NTSC 525
->>>5 beshort&0x0FFF 0x0240 \b PAL 625
->>>7 byte&0xF0 0x20 \b, 4:3
->>>7 byte&0xF0 0x30 \b, 16:9
->>>7 byte&0xF0 0x40 \b, 11:5
->>4 beshort&0xFFF0 0x1E00 \b, SVCD
->>>5 beshort&0x0FFF 0x01E0 \b NTSC 525
->>>5 beshort&0x0FFF 0x0240 \b PAL 625
->>>7 byte&0xF0 0x20 \b, 4:3
->>>7 byte&0xF0 0x30 \b, 16:9
->>>7 byte&0xF0 0x40 \b, 11:5
->>7 byte&0x0F 1 \b, 23.976 fps
->>7 byte&0x0F 2 \b, 24 fps
->>7 byte&0x0F 3 \b, 25 fps
->>7 byte&0x0F 4 \b, 29.97 fps
->>7 byte&0x0F 5 \b, 30 fps
->>7 byte&0x0F 6 \b, 50 fps
->>7 byte&0x0F 7 \b, 59.94 fps
->>7 byte&0x0F 8 \b, 60 fps
->>11 byte &0x04 \b, Constrained
-
-# MPEG ADTS Audio (*.mpx/mxa/aac)
-# from dreesen@math.fu-berlin.de
-# modified to fully support MPEG ADTS
-
-# MP3, M1A
-0 beshort&0xFFFE 0xFFFA MPEG ADTS, layer III, v1
-# rates
->2 byte&0xF0 0x10 \b, 32 kBits
->2 byte&0xF0 0x20 \b, 40 kBits
->2 byte&0xF0 0x30 \b, 48 kBits
->2 byte&0xF0 0x40 \b, 56 kBits
->2 byte&0xF0 0x50 \b, 64 kBits
->2 byte&0xF0 0x60 \b, 80 kBits
->2 byte&0xF0 0x70 \b, 96 kBits
->2 byte&0xF0 0x80 \b, 112 kBits
->2 byte&0xF0 0x90 \b, 128 kBits
->2 byte&0xF0 0xA0 \b, 160 kBits
->2 byte&0xF0 0xB0 \b, 192 kBits
->2 byte&0xF0 0xC0 \b, 224 kBits
->2 byte&0xF0 0xD0 \b, 256 kBits
->2 byte&0xF0 0xE0 \b, 320 kBits
-# timing
->2 byte&0x0C 0x00 \b, 44.1 kHz
->2 byte&0x0C 0x04 \b, 48 kHz
->2 byte&0x0C 0x08 \b, 32 kHz
-# channels/options
->3 byte&0xC0 0x00 \b, Stereo
->3 byte&0xC0 0x40 \b, JntStereo
->3 byte&0xC0 0x80 \b, 2x Monaural
->3 byte&0xC0 0xC0 \b, Monaural
-#>1 byte ^0x01 \b, Data Verify
-#>2 byte &0x02 \b, Packet Pad
-#>2 byte &0x01 \b, Custom Flag
-#>3 byte &0x08 \b, Copyrighted
-#>3 byte &0x04 \b, Original Source
-#>3 byte&0x03 1 \b, NR: 50/15 ms
-#>3 byte&0x03 3 \b, NR: CCIT J.17
-
-# MP2, M1A
-0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1
-# rates
->2 byte&0xF0 0x10 \b, 32 kBits
->2 byte&0xF0 0x20 \b, 48 kBits
->2 byte&0xF0 0x30 \b, 56 kBits
->2 byte&0xF0 0x40 \b, 64 kBits
->2 byte&0xF0 0x50 \b, 80 kBits
->2 byte&0xF0 0x60 \b, 96 kBits
->2 byte&0xF0 0x70 \b, 112 kBits
->2 byte&0xF0 0x80 \b, 128 kBits
->2 byte&0xF0 0x90 \b, 160 kBits
->2 byte&0xF0 0xA0 \b, 192 kBits
->2 byte&0xF0 0xB0 \b, 224 kBits
->2 byte&0xF0 0xC0 \b, 256 kBits
->2 byte&0xF0 0xD0 \b, 320 kBits
->2 byte&0xF0 0xE0 \b, 384 kBits
-# timing
->2 byte&0x0C 0x00 \b, 44.1 kHz
->2 byte&0x0C 0x04 \b, 48 kHz
->2 byte&0x0C 0x08 \b, 32 kHz
-# channels/options
->3 byte&0xC0 0x00 \b, Stereo
->3 byte&0xC0 0x40 \b, JntStereo
->3 byte&0xC0 0x80 \b, 2x Monaural
->3 byte&0xC0 0xC0 \b, Monaural
-#>1 byte ^0x01 \b, Data Verify
-#>2 byte &0x02 \b, Packet Pad
-#>2 byte &0x01 \b, Custom Flag
-#>3 byte &0x08 \b, Copyrighted
-#>3 byte &0x04 \b, Original Source
-#>3 byte&0x03 1 \b, NR: 50/15 ms
-#>3 byte&0x03 3 \b, NR: CCIT J.17
-
-# MPA, M1A
-0 beshort&0xFFFE 0xFFFE MPEG ADTS, layer I, v1
-# rate
->2 byte&0xF0 0x10 \b, 32 kBits
->2 byte&0xF0 0x20 \b, 64 kBits
->2 byte&0xF0 0x30 \b, 96 kBits
->2 byte&0xF0 0x40 \b, 128 kBits
->2 byte&0xF0 0x50 \b, 160 kBits
->2 byte&0xF0 0x60 \b, 192 kBits
->2 byte&0xF0 0x70 \b, 224 kBits
->2 byte&0xF0 0x80 \b, 256 kBits
->2 byte&0xF0 0x90 \b, 288 kBits
->2 byte&0xF0 0xA0 \b, 320 kBits
->2 byte&0xF0 0xB0 \b, 352 kBits
->2 byte&0xF0 0xC0 \b, 384 kBits
->2 byte&0xF0 0xD0 \b, 416 kBits
->2 byte&0xF0 0xE0 \b, 448 kBits
-# timing
->2 byte&0x0C 0x00 \b, 44.1 kHz
->2 byte&0x0C 0x04 \b, 48 kHz
->2 byte&0x0C 0x08 \b, 32 kHz
-# channels/options
->3 byte&0xC0 0x00 \b, Stereo
->3 byte&0xC0 0x40 \b, JntStereo
->3 byte&0xC0 0x80 \b, 2x Monaural
->3 byte&0xC0 0xC0 \b, Monaural
-#>1 byte ^0x01 \b, Data Verify
-#>2 byte &0x02 \b, Packet Pad
-#>2 byte &0x01 \b, Custom Flag
-#>3 byte &0x08 \b, Copyrighted
-#>3 byte &0x04 \b, Original Source
-#>3 byte&0x03 1 \b, NR: 50/15 ms
-#>3 byte&0x03 3 \b, NR: CCIT J.17
-
-# MP3, M2A
-0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2
-# rate
->2 byte&0xF0 0x10 \b, 8 kBits
->2 byte&0xF0 0x20 \b, 16 kBits
->2 byte&0xF0 0x30 \b, 24 kBits
->2 byte&0xF0 0x40 \b, 32 kBits
->2 byte&0xF0 0x50 \b, 40 kBits
->2 byte&0xF0 0x60 \b, 48 kBits
->2 byte&0xF0 0x70 \b, 56 kBits
->2 byte&0xF0 0x80 \b, 64 kBits
->2 byte&0xF0 0x90 \b, 80 kBits
->2 byte&0xF0 0xA0 \b, 96 kBits
->2 byte&0xF0 0xB0 \b, 112 kBits
->2 byte&0xF0 0xC0 \b, 128 kBits
->2 byte&0xF0 0xD0 \b, 144 kBits
->2 byte&0xF0 0xE0 \b, 160 kBits
-# timing
->2 byte&0x0C 0x00 \b, 22.05 kHz
->2 byte&0x0C 0x04 \b, 24 kHz
->2 byte&0x0C 0x08 \b, 16 kHz
-# channels/options
->3 byte&0xC0 0x00 \b, Stereo
->3 byte&0xC0 0x40 \b, JntStereo
->3 byte&0xC0 0x80 \b, 2x Monaural
->3 byte&0xC0 0xC0 \b, Monaural
-#>1 byte ^0x01 \b, Data Verify
-#>2 byte &0x02 \b, Packet Pad
-#>2 byte &0x01 \b, Custom Flag
-#>3 byte &0x08 \b, Copyrighted
-#>3 byte &0x04 \b, Original Source
-#>3 byte&0x03 1 \b, NR: 50/15 ms
-#>3 byte&0x03 3 \b, NR: CCIT J.17
-
-# MP2, M2A
-0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2
-# rate
->2 byte&0xF0 0x10 \b, 8 kBits
->2 byte&0xF0 0x20 \b, 16 kBits
->2 byte&0xF0 0x30 \b, 24 kBits
->2 byte&0xF0 0x40 \b, 32 kBits
->2 byte&0xF0 0x50 \b, 40 kBits
->2 byte&0xF0 0x60 \b, 48 kBits
->2 byte&0xF0 0x70 \b, 56 kBits
->2 byte&0xF0 0x80 \b, 64 kBits
->2 byte&0xF0 0x90 \b, 80 kBits
->2 byte&0xF0 0xA0 \b, 96 kBits
->2 byte&0xF0 0xB0 \b, 112 kBits
->2 byte&0xF0 0xC0 \b, 128 kBits
->2 byte&0xF0 0xD0 \b, 144 kBits
->2 byte&0xF0 0xE0 \b, 160 kBits
-# timing
->2 byte&0x0C 0x00 \b, 22.05 kHz
->2 byte&0x0C 0x04 \b, 24 kHz
->2 byte&0x0C 0x08 \b, 16 kHz
-# channels/options
->3 byte&0xC0 0x00 \b, Stereo
->3 byte&0xC0 0x40 \b, JntStereo
->3 byte&0xC0 0x80 \b, 2x Monaural
->3 byte&0xC0 0xC0 \b, Monaural
-#>1 byte ^0x01 \b, Data Verify
-#>2 byte &0x02 \b, Packet Pad
-#>2 byte &0x01 \b, Custom Flag
-#>3 byte &0x08 \b, Copyrighted
-#>3 byte &0x04 \b, Original Source
-#>3 byte&0x03 1 \b, NR: 50/15 ms
-#>3 byte&0x03 3 \b, NR: CCIT J.17
-
-# MPA, M2A
-0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2
-# rate
->2 byte&0xF0 0x10 \b, 32 kBits
->2 byte&0xF0 0x20 \b, 48 kBits
->2 byte&0xF0 0x30 \b, 56 kBits
->2 byte&0xF0 0x40 \b, 64 kBits
->2 byte&0xF0 0x50 \b, 80 kBits
->2 byte&0xF0 0x60 \b, 96 kBits
->2 byte&0xF0 0x70 \b, 112 kBits
->2 byte&0xF0 0x80 \b, 128 kBits
->2 byte&0xF0 0x90 \b, 144 kBits
->2 byte&0xF0 0xA0 \b, 160 kBits
->2 byte&0xF0 0xB0 \b, 176 kBits
->2 byte&0xF0 0xC0 \b, 192 kBits
->2 byte&0xF0 0xD0 \b, 224 kBits
->2 byte&0xF0 0xE0 \b, 256 kBits
-# timing
->2 byte&0x0C 0x00 \b, 22.05 kHz
->2 byte&0x0C 0x04 \b, 24 kHz
->2 byte&0x0C 0x08 \b, 16 kHz
-# channels/options
->3 byte&0xC0 0x00 \b, Stereo
->3 byte&0xC0 0x40 \b, JntStereo
->3 byte&0xC0 0x80 \b, 2x Monaural
->3 byte&0xC0 0xC0 \b, Monaural
-#>1 byte ^0x01 \b, Data Verify
-#>2 byte &0x02 \b, Packet Pad
-#>2 byte &0x01 \b, Custom Flag
-#>3 byte &0x08 \b, Copyrighted
-#>3 byte &0x04 \b, Original Source
-#>3 byte&0x03 1 \b, NR: 50/15 ms
-#>3 byte&0x03 3 \b, NR: CCIT J.17
-
-# MP3, M25A
-0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5
-# rate
->2 byte&0xF0 0x10 \b, 8 kBits
->2 byte&0xF0 0x20 \b, 16 kBits
->2 byte&0xF0 0x30 \b, 24 kBits
->2 byte&0xF0 0x40 \b, 32 kBits
->2 byte&0xF0 0x50 \b, 40 kBits
->2 byte&0xF0 0x60 \b, 48 kBits
->2 byte&0xF0 0x70 \b, 56 kBits
->2 byte&0xF0 0x80 \b, 64 kBits
->2 byte&0xF0 0x90 \b, 80 kBits
->2 byte&0xF0 0xA0 \b, 96 kBits
->2 byte&0xF0 0xB0 \b, 112 kBits
->2 byte&0xF0 0xC0 \b, 128 kBits
->2 byte&0xF0 0xD0 \b, 144 kBits
->2 byte&0xF0 0xE0 \b, 160 kBits
-# timing
->2 byte&0x0C 0x00 \b, 11.025 kHz
->2 byte&0x0C 0x04 \b, 12 kHz
->2 byte&0x0C 0x08 \b, 8 kHz
-# channels/options
->3 byte&0xC0 0x00 \b, Stereo
->3 byte&0xC0 0x40 \b, JntStereo
->3 byte&0xC0 0x80 \b, 2x Monaural
->3 byte&0xC0 0xC0 \b, Monaural
-#>1 byte ^0x01 \b, Data Verify
-#>2 byte &0x02 \b, Packet Pad
-#>2 byte &0x01 \b, Custom Flag
-#>3 byte &0x08 \b, Copyrighted
-#>3 byte &0x04 \b, Original Source
-#>3 byte&0x03 1 \b, NR: 50/15 ms
-#>3 byte&0x03 3 \b, NR: CCIT J.17
-
-# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio
-
-# Stored AAC streams (instead of the MP4 format)
-0 string ADIF MPEG ADIF, AAC
->4 byte &0x80
->>13 byte &0x10 \b, VBR
->>13 byte ^0x10 \b, CBR
->>16 byte&0x1E 0x02 \b, single stream
->>16 byte&0x1E 0x04 \b, 2 streams
->>16 byte&0x1E 0x06 \b, 3 streams
->>16 byte &0x08 \b, 4 or more streams
->>16 byte &0x10 \b, 8 or more streams
->>4 byte &0x80 \b, Copyrighted
->>13 byte &0x40 \b, Original Source
->>13 byte &0x20 \b, Home Flag
->4 byte ^0x80
->>4 byte &0x10 \b, VBR
->>4 byte ^0x10 \b, CBR
->>7 byte&0x1E 0x02 \b, single stream
->>7 byte&0x1E 0x04 \b, 2 streams
->>7 byte&0x1E 0x06 \b, 3 streams
->>7 byte &0x08 \b, 4 or more streams
->>7 byte &0x10 \b, 8 or more streams
->>4 byte &0x40 \b, Original Stream(s)
->>4 byte &0x20 \b, Home Source
-
-# Live or stored single AAC stream (used with MPEG-2 systems)
-0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC
->1 byte ^0x08 \b, v2
->1 byte &0x08 \b, v4
-# profile
->>2 byte &0xC0 \b LTP
->2 byte&0xc0 0x00 \b, Main
->2 byte&0xc0 0x40 \b, LC
->2 byte&0xc0 0x80 \b, SSR
-# timing
->2 byte&0x3c 0x00 \b, 96 kHz
->2 byte&0x3c 0x04 \b, 88.2 kHz
->2 byte&0x3c 0x08 \b, 64 kHz
->2 byte&0x3c 0x0c \b, 48 kHz
->2 byte&0x3c 0x10 \b, 44.1 kHz
->2 byte&0x3c 0x14 \b, 32 kHz
->2 byte&0x3c 0x18 \b, 24 kHz
->2 byte&0x3c 0x1c \b, 22.05 kHz
->2 byte&0x3c 0x20 \b, 16 kHz
->2 byte&0x3c 0x24 \b, 12 kHz
->2 byte&0x3c 0x28 \b, 11.025 kHz
->2 byte&0x3c 0x2c \b, 8 kHz
-# channels/options
->2 beshort&0x01c0 0x0040 \b, monaural
->2 beshort&0x01c0 0x0080 \b, stereo
->2 beshort&0x01c0 0x00c0 \b, stereo + center
->2 beshort&0x01c0 0x0100 \b, stereo+center+LFE
->2 beshort&0x01c0 0x0140 \b, surround
->2 beshort&0x01c0 0x0180 \b, surround + LFE
->2 beshort &0x01C0 \b, surround + side
-#>1 byte ^0x01 \b, Data Verify
-#>2 byte &0x02 \b, Custom Flag
-#>3 byte &0x20 \b, Original Stream
-#>3 byte &0x10 \b, Home Source
-#>3 byte &0x08 \b, Copyrighted
-
-# Live MPEG-4 audio streams (instead of RTP FlexMux)
-0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS
-#>1 beshort&0x1FFF x \b, %u byte packet
->3 byte&0xE0 0x40
->>4 byte&0x3C 0x04 \b, single stream
->>4 byte&0x3C 0x08 \b, 2 streams
->>4 byte&0x3C 0x0C \b, 3 streams
->>4 byte &0x08 \b, 4 or more streams
->>4 byte &0x20 \b, 8 or more streams
->3 byte&0xC0 0
->>4 byte&0x78 0x08 \b, single stream
->>4 byte&0x78 0x10 \b, 2 streams
->>4 byte&0x78 0x18 \b, 3 streams
->>4 byte &0x20 \b, 4 or more streams
->>4 byte &0x40 \b, 8 or more streams
-0 beshort 0x4DE1 MPEG-4 LO-EP audio stream
-
-# FLI animation format
-4 leshort 0xAF11 FLI file
->6 leshort x - %d frames,
->8 leshort x width=%d pixels,
->10 leshort x height=%d pixels,
->12 leshort x depth=%d,
->16 leshort x ticks/frame=%d
-# FLC animation format
-4 leshort 0xAF12 FLC file
->6 leshort x - %d frames
->8 leshort x width=%d pixels,
->10 leshort x height=%d pixels,
->12 leshort x depth=%d,
->16 leshort x ticks/frame=%d
-
-# DL animation format
-# XXX - collision with most `mips' magic
-#
-# I couldn't find a real magic number for these, however, this
-# -appears- to work. Note that it might catch other files, too, so be
-# careful!
-#
-# Note that title and author appear in the two 20-byte chunks
-# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
-# 255 (hex FF)! The DL format is really bad.
-#
-#0 byte 1 DL version 1, medium format (160x100, 4 images/screen)
-#>42 byte x - %d screens,
-#>43 byte x %d commands
-#0 byte 2 DL version 2
-#>1 byte 1 - large format (320x200,1 image/screen),
-#>1 byte 2 - medium format (160x100,4 images/screen),
-#>1 byte >2 - unknown format,
-#>42 byte x %d screens,
-#>43 byte x %d commands
-# Based on empirical evidence, DL version 3 have several nulls following the
-# \003. Most of them start with non-null values at hex offset 0x34 or so.
-#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3
-
-# SGI formats
-0 string MOVI Silicon Graphics movie file
-
-# Apple Quicktime and ISO types
-4 string moov Apple QuickTime
->12 string mvhd \b movie (fast start)
->12 string mdra \b URL
->12 string cmov \b movie (fast start, compressed header)
->12 string rmra \b multiple URLs
-4 string mdat Apple QuickTime movie (unoptimized)
-4 string wide Apple QuickTime movie (unoptimized)
-4 string skip Apple QuickTime movie (modified)
-4 string free Apple QuickTime movie (modified)
-4 string idsc Apple QuickTime image (fast start)
-4 string idat Apple QuickTime image (unoptimized)
-4 string pckg Apple QuickTime compressed archive
-4 string/B jP JPEG 2000 image
-4 string ftyp ISO Media
->8 string isom \b, MPEG v4 system
->8 string mp41 \b, MPEG v4 system, version 1
->8 string mp42 \b, MPEG v4 system, version 2
->8 string/B jp2 \b, JPEG 2000 image
->8 string 3gp \b, MPEG v4 system, 3GPP (H.263/AMR)
->8 string mmp4 \b, MPEG v4 system, Mobile
->8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC
->8 string/B M4P \b, MPEG v4 system, ISMA encrypted AAC-LC
->8 string/B M4B \b, MPEG v4 system, iTunes AAC-LC/AMR
->8 string/B qt \b, Apple QuickTime movie
-
-# iso 13818 transport stream
-#
-# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 (ISO 13818.1)
-# (the following is a little bit restrictive and works fine for a stream
-# that starts with PAT properly. it won't work for stream data, that is
-# cut from an input device data right in the middle, but this shouldn't
-# disturb)
-# syncbyte 8 bit 0x47
-# error_ind 1 bit -
-# payload_start 1 bit 1
-# priority 1 bit -
-# PID 13 bit 0x0000
-# scrambling 2 bit -
-# adaptfld_ctrl 2 bit 1 or 3
-# conti_count 4 bit 0
-0 belong&0xFF5FFF1F 0x47400010 MPEG transport stream data
->188 byte !0x47 CORRUPTED
-
-# DIF digital video file format <mpruett@sgi.com>
-0 belong&0xffffff00 0x1f070000 DIF
->4 byte &0x01 (DVCPRO) movie file
->4 byte ^0x01 (DV) movie file
->3 byte &0x80 (PAL)
->3 byte ^0x80 (NTSC)
-
-# Microsoft Advanced Streaming Format (ASF) <mpruett@sgi.com>
-0 belong 0x3026b275 Microsoft ASF
-
-# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
-0 string \x8aMNG MNG video data,
->4 belong !0x0d0a1a0a CORRUPTED,
->4 belong 0x0d0a1a0a
->>16 belong x %ld x
->>20 belong x %ld
-
-# JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
-0 string \x8bJNG JNG video data,
->4 belong !0x0d0a1a0a CORRUPTED,
->4 belong 0x0d0a1a0a
->>16 belong x %ld x
->>20 belong x %ld
-
-# Vivo video (Wolfram Kleff)
-3 string \x0D\x0AVersion:Vivo Vivo video data
-
-# VRML (Virtual Reality Modelling Language)
-0 string/b #VRML\ V1.0\ ascii VRML 1 file
-0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file
-
-#---------------------------------------------------------------------------
-# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube
-# From Mark Sheppard <msheppard@climax.co.uk>, 2002-10-03
-#
-0 string HVQM4 %s
->6 string >\0 v%s
->0 byte x GameCube movie,
->0x34 ubeshort x %d x
->0x36 ubeshort x %d,
->0x26 ubeshort x %dµs,
->0x42 ubeshort 0 no audio
->0x42 ubeshort >0 %dHz audio
-
-#------------------------------------------------------------------------------
-# chi: file(1) magic for ChiWriter files
-#
-0 string \\1cw\ ChiWriter file
->5 string >\0 version %s
-0 string \\1cw ChiWriter file
-
-#------------------------------------------------------------------------------
-# claris: file(1) magic for claris
-# "H. Nanosecond" <aldomel@ix.netcom.com>
-# Claris Works a word processor, etc.
-# Version 3.0
-
-# .pct claris works clip art files
-#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
-#*
-#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000
-#null to byte 1000 octal
-514 string \377\377\377\377\000 Claris clip art?
->0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes.
-514 string \377\377\377\377\001 Claris clip art?
->0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes.
-
-# Claris works files
-# .cwk
-0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document
-# .plt
-0 string \020\341\000\000\010\010 Claris Works pallete files .plt
-
-# .msp a dictionary file I am not sure about this I have only one .msp file
-0 string \002\271\262\000\040\002\000\164 Claris works dictionary
-
-# .usp are user dictionary bits
-# I am not sure about a magic header:
-#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151
-# soh S p f 8 U D sp ^ S cr nl p o d i
-#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043
-# a t r i s t sp ^ S cr nl d i v sp #
-
-# .mth Thesaurus
-# starts with \0 but no magic header
-
-# .chy Hyphenation file
-# I am not sure: 000 210 034 000 000
-
-# other claris files
-#./windows/claris/useng.ndx: data
-#./windows/claris/xtndtran.l32: data
-#./windows/claris/xtndtran.lst: data
-#./windows/claris/clworks.lbl: data
-#./windows/claris/clworks.prf: data
-#./windows/claris/userd.spl: data
-
-#------------------------------------------------------------------------------
-# fonts: file(1) magic for font data
-#
-0 string FONT ASCII vfont text
-0 short 0436 Berkeley vfont data
-0 short 017001 byte-swapped Berkeley vfont data
-
-# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com
-0 string %!PS-AdobeFont-1. PostScript Type 1 font text
->20 string >\0 (%s)
-6 string %!PS-AdobeFont-1. PostScript Type 1 font program data
-
-# X11 font files in SNF (Server Natural Format) format
-0 belong 00000004 X11 SNF font data, MSB first
-0 lelong 00000004 X11 SNF font data, LSB first
-
-# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com)
-0 string STARTFONT\040 X11 BDF font text
-
-# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com)
-# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
-0 string \001fcp X11 Portable Compiled Font data
->12 byte 0x02 \b, LSB first
->12 byte 0x0a \b, MSB first
-0 string D1.0\015 X11 Speedo font data
-
-#------------------------------------------------------------------------------
-# FIGlet fonts and controlfiles
-# From figmagic supplied with Figlet version 2.2
-# "David E. O'Brien" <obrien@FreeBSD.ORG>
-0 string flf FIGlet font
->3 string >2a version %-2.2s
-0 string flc FIGlet controlfile
->3 string >2a version %-2.2s
-
-# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu)
-# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++
-0 belong 0x14025919 libGrx font data,
->8 leshort x %dx
->10 leshort x \b%d
->40 string x %s
-# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu)
-0 belong 0xff464f4e DOS code page font data collection
-7 belong 0x00454741 DOS code page font data
-7 belong 0x00564944 DOS code page font data (from Linux?)
-4098 string DOSFONT DOSFONT2 encrypted font data
-
-# downloadable fonts for browser (prints type) anthon@mnt.org
-0 string PFR1 PFR1 font
->102 string >0 \b: %s
-
-# True Type fonts
-0 string \000\001\000\000\000 TrueType font data
-
-0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
-0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
-
-# Opentype font data from Avi Bercovich
-0 string OTTO OpenType font data
-
-
-#------------------------------------------------------------------------------
-# macintosh description
-#
-# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
-# Daniel Quinlan, quinlan@yggdrasil.com
-11 string must\ be\ converted\ with\ BinHex BinHex binary text
->41 string x \b, version %.3s
-
-# Stuffit archives are the de facto standard of compression for Macintosh
-# files obtained from most archives. (franklsm@tuns.ca)
-0 string SIT! StuffIt Archive (data)
->2 string x : %s
-0 string SITD StuffIt Deluxe (data)
->2 string x : %s
-0 string Seg StuffIt Deluxe Segment (data)
->2 string x : %s
-
-# Newer StuffIt archives (grant@netbsd.org)
-0 string StuffIt StuffIt Archive
->162 string >0 : %s
-
-# Macintosh Applications and Installation binaries (franklsm@tuns.ca)
-0 string APPL Macintosh Application (data)
->2 string x \b: %s
-
-# Macintosh System files (franklsm@tuns.ca)
-0 string zsys Macintosh System File (data)
-0 string FNDR Macintosh Finder (data)
-0 string libr Macintosh Library (data)
->2 string x : %s
-0 string shlb Macintosh Shared Library (data)
->2 string x : %s
-0 string cdev Macintosh Control Panel (data)
->2 string x : %s
-0 string INIT Macintosh Extension (data)
->2 string x : %s
-0 string FFIL Macintosh Truetype Font (data)
->2 string x : %s
-0 string LWFN Macintosh Postscript Font (data)
->2 string x : %s
-
-# Additional Macintosh Files (franklsm@tuns.ca)
-0 string PACT Macintosh Compact Pro Archive (data)
->2 string x : %s
-0 string ttro Macintosh TeachText File (data)
->2 string x : %s
-0 string TEXT Macintosh TeachText File (data)
->2 string x : %s
-0 string PDF Macintosh PDF File (data)
->2 string x : %s
-
-# MacBinary format (Eric Fischer, enf@pobox.com)
-#
-# Unfortunately MacBinary doesn't really have a magic number prior
-# to the MacBinary III format. The checksum is really the way to
-# do it, but the magic file format isn't up to the challenge.
-#
-# 0 byte 0
-# 1 byte # filename length
-# 2 string # filename
-# 65 string # file type
-# 69 string # file creator
-# 73 byte # Finder flags
-# 74 byte 0
-# 75 beshort # vertical posn in window
-# 77 beshort # horiz posn in window
-# 79 beshort # window or folder ID
-# 81 byte # protected?
-# 82 byte 0
-# 83 belong # length of data segment
-# 87 belong # length of resource segment
-# 91 belong # file creation date
-# 95 belong # file modification date
-# 99 beshort # length of comment after resource
-# 101 byte # new Finder flags
-# 102 string mBIN # (only in MacBinary III)
-# 106 byte # char. code of file name
-# 107 byte # still more Finder flags
-# 116 belong # total file length
-# 120 beshort # length of add'l header
-# 122 byte 129 # for MacBinary II
-# 122 byte 130 # for MacBinary III
-# 123 byte 129 # minimum version that can read fmt
-# 124 beshort # checksum
-#
-# This attempts to use the version numbers as a magic number, requiring
-# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second
-# be 0x81. This works for the files I have, but maybe not for everyone's.
-
-# Unfortunately, this magic is quite weak - MPi
-#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data
-
-# MacBinary I doesn't have the version number field at all, but MacBinary II
-# has been in use since 1987 so I hope there aren't many really old files
-# floating around that this will miss. The original spec calls for using
-# the nulls in 0, 74, and 82 as the magic number.
-#
-# Another possibility, that would also work for MacBinary I, is to use
-# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will
-# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset,
-# and that 74 will be 0. So something like
-#
-# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data
-#
-# >73 byte&0x01 0x01 \b, inited
-# >73 byte&0x02 0x02 \b, changed
-# >73 byte&0x04 0x04 \b, busy
-# >73 byte&0x08 0x08 \b, bozo
-# >73 byte&0x10 0x10 \b, system
-# >73 byte&0x10 0x20 \b, bundle
-# >73 byte&0x10 0x40 \b, invisible
-# >73 byte&0x10 0x80 \b, locked
-
-#>65 string x \b, type "%4.4s"
-
-#>65 string 8BIM (PhotoShop)
-#>65 string ALB3 (PageMaker 3)
-#>65 string ALB4 (PageMaker 4)
-#>65 string ALT3 (PageMaker 3)
-#>65 string APPL (application)
-#>65 string AWWP (AppleWorks word processor)
-#>65 string CIRC (simulated circuit)
-#>65 string DRWG (MacDraw)
-#>65 string EPSF (Encapsulated PostScript)
-#>65 string FFIL (font suitcase)
-#>65 string FKEY (function key)
-#>65 string FNDR (Macintosh Finder)
-#>65 string GIFf (GIF image)
-#>65 string Gzip (GNU gzip)
-#>65 string INIT (system extension)
-#>65 string LIB\ (library)
-#>65 string LWFN (PostScript font)
-#>65 string MSBC (Microsoft BASIC)
-#>65 string PACT (Compact Pro archive)
-#>65 string PDF\ (Portable Document Format)
-#>65 string PICT (picture)
-#>65 string PNTG (MacPaint picture)
-#>65 string PREF (preferences)
-#>65 string PROJ (Think C project)
-#>65 string QPRJ (Think Pascal project)
-#>65 string SCFL (Defender scores)
-#>65 string SCRN (startup screen)
-#>65 string SITD (StuffIt Deluxe)
-#>65 string SPn3 (SuperPaint)
-#>65 string STAK (HyperCard stack)
-#>65 string Seg\ (StuffIt segment)
-#>65 string TARF (Unix tar archive)
-#>65 string TEXT (ASCII)
-#>65 string TIFF (TIFF image)
-#>65 string TOVF (Eudora table of contents)
-#>65 string WDBN (Microsoft Word word processor)
-#>65 string WORD (MacWrite word processor)
-#>65 string XLS\ (Microsoft Excel)
-#>65 string ZIVM (compress (.Z))
-#>65 string ZSYS (Pre-System 7 system file)
-#>65 string acf3 (Aldus FreeHand)
-#>65 string cdev (control panel)
-#>65 string dfil (Desk Acessory suitcase)
-#>65 string libr (library)
-#>65 string nX^d (WriteNow word processor)
-#>65 string nX^w (WriteNow dictionary)
-#>65 string rsrc (resource)
-#>65 string scbk (Scrapbook)
-#>65 string shlb (shared library)
-#>65 string ttro (SimpleText read-only)
-#>65 string zsys (system file)
-
-#>69 string x \b, creator "%4.4s"
-
-# Somewhere, Apple has a repository of registered Creator IDs. These are
-# just the ones that I happened to have files from and was able to identify.
-
-#>69 string 8BIM (Adobe Photoshop)
-#>69 string ALD3 (PageMaker 3)
-#>69 string ALD4 (PageMaker 4)
-#>69 string ALFA (Alpha editor)
-#>69 string APLS (Apple Scanner)
-#>69 string APSC (Apple Scanner)
-#>69 string BRKL (Brickles)
-#>69 string BTFT (BitFont)
-#>69 string CCL2 (Common Lisp 2)
-#>69 string CCL\ (Common Lisp)
-#>69 string CDmo (The Talking Moose)
-#>69 string CPCT (Compact Pro)
-#>69 string CSOm (Eudora)
-#>69 string DMOV (Font/DA Mover)
-#>69 string DSIM (DigSim)
-#>69 string EDIT (Macintosh Edit)
-#>69 string ERIK (Macintosh Finder)
-#>69 string EXTR (self-extracting archive)
-#>69 string Gzip (GNU gzip)
-#>69 string KAHL (Think C)
-#>69 string LWFU (LaserWriter Utility)
-#>69 string LZIV (compress)
-#>69 string MACA (MacWrite)
-#>69 string MACS (Macintosh operating system)
-#>69 string MAcK (MacKnowledge terminal emulator)
-#>69 string MLND (Defender)
-#>69 string MPNT (MacPaint)
-#>69 string MSBB (Microsoft BASIC (binary))
-#>69 string MSWD (Microsoft Word)
-#>69 string NCSA (NCSA Telnet)
-#>69 string PJMM (Think Pascal)
-#>69 string PSAL (Hunt the Wumpus)
-#>69 string PSI2 (Apple File Exchange)
-#>69 string R*ch (BBEdit)
-#>69 string RMKR (Resource Maker)
-#>69 string RSED (Resource Editor)
-#>69 string Rich (BBEdit)
-#>69 string SIT! (StuffIt)
-#>69 string SPNT (SuperPaint)
-#>69 string Unix (NeXT Mac filesystem)
-#>69 string VIM! (Vim editor)
-#>69 string WILD (HyperCard)
-#>69 string XCEL (Microsoft Excel)
-#>69 string aCa2 (Fontographer)
-#>69 string aca3 (Aldus FreeHand)
-#>69 string dosa (Macintosh MS-DOS file system)
-#>69 string movr (Font/DA Mover)
-#>69 string nX^n (WriteNow)
-#>69 string pdos (Apple ProDOS file system)
-#>69 string scbk (Scrapbook)
-#>69 string ttxt (SimpleText)
-#>69 string ufox (Foreign File Access)
-
-# Just in case...
-
-102 string mBIN MacBinary III data with surprising version number
-
-# sas magic from Bruce Foster (bef@nwu.edu)
-#
-#0 string SAS SAS
-#>8 string x %s
-0 string SAS SAS
->24 string DATA data file
->24 string CATALOG catalog
->24 string INDEX data file index
->24 string VIEW data view
-# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com)
-#
-0x54 string SAS SAS 7+
->0x9C string DATA data file
->0x9C string CATALOG catalog
->0x9C string INDEX data file index
->0x9C string VIEW data view
-
-# spss magic for SPSS system and portable files,
-# from Bruce Foster (bef@nwu.edu).
-
-0 long 0xc1e2c3c9 SPSS Portable File
->40 string x %s
-
-0 string $FL2 SPSS System File
->24 string x %s
-
-# Macintosh filesystem data
-# From "Tom N Harris" <telliamed@mac.com>
-# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson@alaska.net>
-# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these
-# entries depend on the data arithmetic added after v.35
-# There's also some Pascal strings in here, ditto...
-
-# The boot block signature, according to IM:Files, is
-# "for HFS volumes, this field always contains the value 0x4C4B."
-# But if this is true for MFS or HFS+ volumes, I don't know.
-# Alternatively, the boot block is supposed to be zeroed if it's
-# unused, so a simply >0 should suffice.
-
-0x400 beshort 0xD2D7 Macintosh MFS data
->0 beshort 0x4C4B (bootable)
->0x40a beshort &0x8000 (locked)
->0x402 beldate-0x7C25B080 x created: %s,
->0x406 beldate-0x7C25B080 >0 last backup: %s,
->0x414 belong x block size: %d,
->0x412 beshort x number of blocks: %d,
->0x424 pstring x volume name: %s
-
-# "BD" is has many false positives
-#0x400 beshort 0x4244 Macintosh HFS data
-#>0 beshort 0x4C4B (bootable)
-#>0x40a beshort &0x8000 (locked)
-#>0x40a beshort ^0x0100 (mounted)
-#>0x40a beshort &0x0200 (spared blocks)
-#>0x40a beshort &0x0800 (unclean)
-#>0x47C beshort 0x482B (Embedded HFS+ Volume)
-#>0x402 beldate-0x7C25B080 x created: %s,
-#>0x406 beldate-0x7C25B080 x last modified: %s,
-#>0x440 beldate-0x7C25B080 >0 last backup: %s,
-#>0x414 belong x block size: %d,
-#>0x412 beshort x number of blocks: %d,
-#>0x424 pstring x volume name: %s
-
-0x400 beshort 0x482B Macintosh HFS Extended
->&0 beshort x version %d data
->0 beshort 0x4C4B (bootable)
->0x404 belong ^0x00000100 (mounted)
->&2 belong &0x00000200 (spared blocks)
->&2 belong &0x00000800 (unclean)
->&2 belong &0x00008000 (locked)
->&6 string x last mounted by: '%.4s',
-# really, that should be treated as a belong and we print a string
-# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1"
->&14 beldate-0x7C25B080 x created: %s,
-# only the creation date is local time, all other timestamps in HFS+ are UTC.
->&18 bedate-0x7C25B080 x last modified: %s,
->&22 bedate-0x7C25B080 >0 last backup: %s,
->&26 bedate-0x7C25B080 >0 last checked: %s,
->&38 belong x block size: %d,
->&42 belong x number of blocks: %d,
->&46 belong x free blocks: %d
-
-# I don't think this is really necessary since it doesn't do much and
-# anything with a valid driver descriptor will also have a valid
-# partition map
-#0 beshort 0x4552 Apple Device Driver data
-#>&24 beshort =1 \b, MacOS
-
-# Is that the partition type a cstring or a pstring? Well, IM says "strings
-# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a
-# cstring. Of course, partitions can contain more than four entries, but
-# what're you gonna do?
-0x200 beshort 0x504D Apple Partition data
->0x2 beshort x block size: %d,
->0x230 string x first type: %s,
->0x210 string x name: %s,
->0x254 belong x number of blocks: %d,
->0x400 beshort 0x504D
->>0x430 string x second type: %s,
->>0x410 string x name: %s,
->>0x454 belong x number of blocks: %d,
->>0x800 beshort 0x504D
->>>0x830 string x third type: %s,
->>>0x810 string x name: %s,
->>>0x854 belong x number of blocks: %d,
->>>0xa00 beshort 0x504D
->>>>0xa30 string x fourth type: %s,
->>>>0xa10 string x name: %s,
->>>>0xa54 belong x number of blocks: %d
-# AFAIK, only the signature is different
-0x200 beshort 0x5453 Apple Old Partition data
->0x2 beshort x block size: %d,
->0x230 string x first type: %s,
->0x210 string x name: %s,
->0x254 belong x number of blocks: %d,
->0x400 beshort 0x504D
->>0x430 string x second type: %s,
->>0x410 string x name: %s,
->>0x454 belong x number of blocks: %d,
->>0x800 beshort 0x504D
->>>0x830 string x third type: %s,
->>>0x810 string x name: %s,
->>>0x854 belong x number of blocks: %d,
->>>0xa00 beshort 0x504D
->>>>0xa30 string x fourth type: %s,
->>>>0xa10 string x name: %s,
->>>>0xa54 belong x number of blocks: %d
-
-# From: Remi Mommsen <mommsen@slac.stanford.edu>
-0 string BOMStore Mac OS X bill of materials (BOM) fil
-
-#------------------------------------------------------------------------------
-# mathematica: file(1) magic for mathematica files
-# "H. Nanosecond" <aldomel@ix.netcom.com>
-# Mathematica a multi-purpose math program
-# versions 2.2 and 3.0
-
-#mathematica .mb
-0 string \064\024\012\000\035\000\000\000 Mathematica version 2 notebook
-0 string \064\024\011\000\035\000\000\000 Mathematica version 2 notebook
-
-# .ma
-# multiple possibilites:
-
-0 string (*^\n\n::[\011frontEndVersion\ =\ Mathematica notebook
-#>41 string >\0 %s
-
-#0 string (*^\n\n::[\011palette Mathematica notebook version 2.x
-
-#0 string (*^\n\n::[\011Information Mathematica notebook version 2.x
-#>675 string >\0 %s #doesn't work well
-
-# there may be 'cr' instread of 'nl' in some does this matter?
-
-# generic:
-0 string (*^\r\r::[\011 Mathematica notebook version 2.x
-0 string \(\*\^\r\n\r\n\:\:\[\011 Mathematica notebook version 2.x
-0 string (*^\015 Mathematica notebook version 2.x
-0 string (*^\n\r\n\r::[\011 Mathematica notebook version 2.x
-0 string (*^\r::[\011 Mathematica notebook version 2.x
-0 string (*^\r\n::[\011 Mathematica notebook version 2.x
-0 string (*^\n\n::[\011 Mathematica notebook version 2.x
-0 string (*^\n::[\011 Mathematica notebook version 2.x
-
-
-# Mathematica .mx files
-
-#0 string (*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*) Mathematica binary file
-0 string (*This\ is\ a\ Mathematica\ binary\ Mathematica binary file
-#>71 string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000
-# >71... is optional
->88 string >\0 from %s
-
-
-# Mathematica files PBF:
-# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000
-0 string MMAPBF\000\001\000\000\000\203\000\001\000 Mathematica PBF (fonts I think)
-
-# .ml files These are menu resources I think
-# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\
-# how to put that into a magic rule?
-4 string \ A~ MAthematica .ml file
-
-# .nb files
-#too long 0 string (***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook Mathematica 3.0 notebook
-0 string (*********************** Mathematica 3.0 notebook
-
-# other (* matches it is a comment start in these langs
-0 string (* Mathematica, or Pascal, Modula-2 or 3 code text
-
-#########################
-# MatLab v5
-0 string MATLAB Matlab v5 mat-file
->126 short 0x494d (big endian)
->>124 beshort x version 0x%04x
->126 short 0x4d49 (little endian)
->>124 leshort x version 0x%04x
-
-#------------------------------------------------------------------------------
-# teapot: file(1) magic for "teapot" spreadsheet
-#
-0 string #!teapot\012xdr teapot work sheet (XDR format)
-
-#------------------------------------------------------------------------------
-# psion: file(1) magic for Psion handhelds data
-# from: Peter Breitenlohner <peb@mppmu.mpg.de>
-#
-0 lelong 0x10000037 Psion Series 5
->4 lelong 0x10000039 font file
->4 lelong 0x1000003A printer driver
->4 lelong 0x1000003B clipboard
->4 lelong 0x10000042 multi-bitmap image
->4 lelong 0x1000006A application infomation file
->4 lelong 0x1000006D
->>8 lelong 0x1000007D sketch image
->>8 lelong 0x1000007E voice note
->>8 lelong 0x1000007F word file
->>8 lelong 0x10000085 OPL program
->>8 lelong 0x10000088 sheet file
->>8 lelong 0x100001C4 EasyFax initialisation file
->4 lelong 0x10000073 OPO module
->4 lelong 0x10000074 OPL application
->4 lelong 0x1000008A exported multi-bitmap image
-
-0 lelong 0x10000041 Psion Series 5 ROM multi-bitmap image
-
-0 lelong 0x10000050 Psion Series 5
->4 lelong 0x1000006D database
->4 lelong 0x100000E4 ini file
-
-0 lelong 0x10000079 Psion Series 5 binary:
->4 lelong 0x00000000 DLL
->4 lelong 0x10000049 comms hardware library
->4 lelong 0x1000004A comms protocol library
->4 lelong 0x1000005D OPX
->4 lelong 0x1000006C application
->4 lelong 0x1000008D DLL
->4 lelong 0x100000AC logical device driver
->4 lelong 0x100000AD physical device driver
->4 lelong 0x100000E5 file transfer protocol
->4 lelong 0x100000E5 file transfer protocol
->4 lelong 0x10000140 printer defintion
->4 lelong 0x10000141 printer defintion
-
-0 lelong 0x1000007A Psion Series 5 executable
-
-#------------------------------------------------------------------------------
-# diff: file(1) magic for diff(1) output
-#
-0 string diff\ 'diff' output text
-0 string ***\ 'diff' output text
-0 string Only\ in\ 'diff' output text
-0 string Common\ subdirectories:\ 'diff' output text
-
-#------------------------------------------------------------------------------
-# ESRI Shapefile format (.shp .shx .dbf=DBaseIII)
-# Based on info from
-# <URL:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf>
-0 belong 9994 ESRI Shapefile
->4 belong =0
->8 belong =0
->12 belong =0
->16 belong =0
->20 belong =0
->28 lelong x version %d
->24 belong x length %d
->32 lelong =0 type Null Shape
->32 lelong =1 type Point
->32 lelong =3 type PolyLine
->32 lelong =5 type Polygon
->32 lelong =8 type MultiPoint
->32 lelong =11 type PointZ
->32 lelong =13 type PolyLineZ
->32 lelong =15 type PolygonZ
->32 lelong =18 type MultiPointZ
->32 lelong =21 type PointM
->32 lelong =23 type PolyLineM
->32 lelong =25 type PolygonM
->32 lelong =28 type MultiPointM
->32 lelong =31 type MultiPatch
-#------------------------------------------------------------------------------
-# GIMP Gradient: file(1) magic for the GIMP's gradient data files
-# by Federico Mena <federico@nuclecu.unam.mx>
-
-0 string GIMP\ Gradient GIMP gradient data
-
-#------------------------------------------------------------------------------
-# XCF: file(1) magic for the XCF image format used in the GIMP developed
-# by Spencer Kimball and Peter Mattis
-# ('Bucky' LaDieu, nega@vt.edu)
-
-0 string gimp\ xcf GIMP XCF image data,
->9 string file version 0,
->9 string v version
->>10 string >\0 %s,
->14 belong x %lu x
->18 belong x %lu,
->22 belong 0 RGB Color
->22 belong 1 Greyscale
->22 belong 2 Indexed Color
->22 belong >2 Unknown Image Type.
-
-#------------------------------------------------------------------------------
-# XCF: file(1) magic for the patterns used in the GIMP, developed
-# by Spencer Kimball and Peter Mattis
-# ('Bucky' LaDieu, nega@vt.edu)
-
-20 string GPAT GIMP pattern data,
->24 string x %s
-
-#------------------------------------------------------------------------------
-# XCF: file(1) magic for the brushes used in the GIMP, developed
-# by Spencer Kimball and Peter Mattis
-# ('Bucky' LaDieu, nega@vt.edu)
-
-20 string GIMP GIMP brush data
-
-#------------------------------------------------------------------------------
-# adi: file(1) magic for ADi's objects
-# From Gregory McGarry <g.mcgarry@ieee.org>
-#
-0 leshort 0x521c COFF DSP21k
->18 lelong &02 executable,
->18 lelong ^02
->>18 lelong &01 static object,
->>18 lelong ^01 relocatable object,
->18 lelong &010 stripped
->18 lelong ^010 not stripped
-
-#------------------------------------------------------------------------------
-# autocad: file(1) magic for cad files
-#
-
-# AutoCAD DWG versions R13/R14 (www.autodesk.com)
-# Written December 01, 2003 by Lester Hightower
-# Based on the DWG File Format Specifications at http://www.opendwg.org/
-0 string \101\103\061\060\061 AutoCAD
->5 string \062\000\000\000\000 DWG ver. R13
->5 string \064\000\000\000\000 DWG ver. R14
-
-# Microstation DGN/CIT Files (www.bentley.com)
-# Written October 30, 2003 by Lester Hightower
-# DGN is the default file extension of Microstation/Intergraph CAD files.
-# CIT is the proprietary raster format (similar to TIFF) used to attach
-# raster underlays to Microstation DGN (vector) drawings.
-#
-# http://www.wotsit.org/search.asp
-# http://filext.com/detaillist.php?extdetail=DGN
-# http://filext.com/detaillist.php?extdetail=CIT
-#
-# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2
-# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928
-# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682
-# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F
-0 string \010\011\376 Microstation
->3 string \002
->>30 string \372\104 DGN File
->>30 string \172\104 DGN File
->>30 string \026\105 DGN File
->4 string \030\000\000 CIT File
-
-# AutoCad, from Nahuel Greco
-0 string AC1012 AutoCad (release 12)
-0 string AC1014 AutoCad (release 14)
-
-#------------------------------------------------------------------------------
-# T602 editor documents
-# by David Necas <yeti@physics.muni.cz>
-0 string @CT\ T602 document data,
->4 string 0 Kamenicky
->4 string 1 CP 852
->4 string 2 KOI8-CS
->4 string >2 unknown encoding
-
-# Vi IMproved Encrypted file
-# by David Necas <yeti@physics.muni.cz>
-0 string VimCrypt~ Vim encrypted file data
-
-#------------------------------------------------------------------------------
-# tex: file(1) magic for TeX files
-#
-# From <conklin@talisman.kaleida.com>
-
-# Although we may know the offset of certain text fields in TeX DVI
-# and font files, we can't use them reliably because they are not
-# zero terminated. [but we do anyway, christos]
-0 string \367\002 TeX DVI file
->16 string >\0 (%s)
-0 string \367\203 TeX generic font data
-0 string \367\131 TeX packed font data
->3 string >\0 (%s)
-0 string \367\312 TeX virtual font data
-0 string This\ is\ TeX, TeX transcript text
-0 string This\ is\ METAFONT, METAFONT transcript text
-
-# There is no way to detect TeX Font Metric (*.tfm) files without
-# breaking them apart and reading the data. The following patterns
-# match most *.tfm files generated by METAFONT or afm2tfm.
-2 string \000\021 TeX font metric data
->33 string >\0 (%s)
-2 string \000\022 TeX font metric data
->33 string >\0 (%s)
-
-# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
-0 string \\input\ texinfo Texinfo source text
-0 string This\ is\ Info\ file GNU Info text
-
-# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com)
-0 string \\input TeX document text
-0 string \\section LaTeX document text
-0 string \\setlength LaTeX document text
-0 string \\documentstyle LaTeX document text
-0 string \\chapter LaTeX document text
-0 string \\documentclass LaTeX 2e document text
-0 string \\relax LaTeX auxiliary file
-0 string \\contentsline LaTeX table of contents
-0 string %\ -*-latex-*- LaTeX document text
-
-# Tex document, from Hendrik Scholz <hendrik@scholz.net>
-0 string \\ifx TeX document text
-
-# Index and glossary files
-0 string \\indexentry LaTeX raw index file
-0 string \\begin{theindex} LaTeX sorted index
-0 string \\glossaryentry LaTeX raw glossary
-0 string \\begin{theglossary} LaTeX sorted glossary
-0 string This\ is\ makeindex Makeindex log file
-
-# End of TeX
-
-#------------------------------------------------------------------------------
-# file(1) magic for BibTex text files
-# From Hendrik Scholz <hendrik@scholz.net>
-
-0 string/c @article{ BibTeX text file
-0 string/c @book{ BibTeX text file
-0 string/c @inbook{ BibTeX text file
-0 string/c @incollection{ BibTeX text file
-0 string/c @inproceedings{ BibTeX text file
-0 string/c @manual{ BibTeX text file
-0 string/c @misc{ BibTeX text file
-0 string/c @preamble{ BibTeX text file
-0 string/c @phdthesis{ BibTeX text file
-0 string/c @techreport{ BibTeX text file
-0 string/c @unpublished{ BibTeX text file
-
-73 string %%%\ \ BibTeX-file{ BibTex text file (with full header)
-
-73 string %%%\ \ @BibTeX-style-file{ BibTeX style text file (with full header)
-
-0 string %\ BibTeX\ standard\ bibliography\ BibTeX standard bibliography style text file
-
-0 string %\ BibTeX\ ` BibTeX custom bibliography style text file
-
-0 string @c\ @mapfile{ TeX font aliases text file
-
-
-#------------------------------------------------------------------------------
-# psdbms: file(1) magic for psdatabase
-#
-0 belong&0xff00ffff 0x56000000 ps database
->1 string >\0 version %s
->4 string >\0 from kernel %s
-#------------------------------------------------------------------------------
-# convex: file(1) magic for Convex boxes
-#
-# Convexes are big-endian.
-#
-# /*\
-# * Below are the magic numbers and tests added for Convex.
-# * Added at beginning, because they are expected to be used most.
-# \*/
-0 belong 0507 Convex old-style object
->16 belong >0 not stripped
-0 belong 0513 Convex old-style demand paged executable
->16 belong >0 not stripped
-0 belong 0515 Convex old-style pre-paged executable
->16 belong >0 not stripped
-0 belong 0517 Convex old-style pre-paged, non-swapped executable
->16 belong >0 not stripped
-0 belong 0x011257 Core file
-#
-# The following are a series of dump format magic numbers. Each one
-# corresponds to a drastically different dump format. The first on is
-# the original dump format on a 4.1 BSD or earlier file system. The
-# second marks the change between the 4.1 file system and the 4.2 file
-# system. The Third marks the changing of the block size from 1K
-# to 2K to be compatible with an IDC file system. The fourth indicates
-# a dump that is dependent on Convex Storage Manager, because data in
-# secondary storage is not physically contained within the dump.
-# The restore program uses these number to determine how the data is
-# to be extracted.
-#
-24 belong =60011 dump format, 4.1 BSD or earlier
-24 belong =60012 dump format, 4.2 or 4.3 BSD without IDC
-24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible)
-24 belong =60014 dump format, Convex Storage Manager by-reference dump
-#
-# what follows is a bunch of bit-mask checks on the flags field of the opthdr.
-# If there is no `=' sign, assume just checking for whether the bit is set?
-#
-0 belong 0601 Convex SOFF
->88 belong&0x000f0000 =0x00000000 c1
->88 belong &0x00010000 c2
->88 belong &0x00020000 c2mp
->88 belong &0x00040000 parallel
->88 belong &0x00080000 intrinsic
->88 belong &0x00000001 demand paged
->88 belong &0x00000002 pre-paged
->88 belong &0x00000004 non-swapped
->88 belong &0x00000008 POSIX
-#
->84 belong &0x80000000 executable
->84 belong &0x40000000 object
->84 belong&0x20000000 =0 not stripped
->84 belong&0x18000000 =0x00000000 native fpmode
->84 belong&0x18000000 =0x10000000 ieee fpmode
->84 belong&0x18000000 =0x18000000 undefined fpmode
-#
-0 belong 0605 Convex SOFF core
-#
-0 belong 0607 Convex SOFF checkpoint
->88 belong&0x000f0000 =0x00000000 c1
->88 belong &0x00010000 c2
->88 belong &0x00020000 c2mp
->88 belong &0x00040000 parallel
->88 belong &0x00080000 intrinsic
->88 belong &0x00000008 POSIX
-#
->84 belong&0x18000000 =0x00000000 native fpmode
->84 belong&0x18000000 =0x10000000 ieee fpmode
->84 belong&0x18000000 =0x18000000 undefined fpmode
-
-#------------------------------------------------------------------------------
-# freebsd: file(1) magic for FreeBSD objects
-#
-# All new-style FreeBSD magic numbers are in host byte order (i.e.,
-# little-endian on x86).
-#
-# XXX - this comes from the file "freebsd" in a recent FreeBSD version of
-# "file"; it, and the NetBSD stuff in "netbsd", appear to use different
-# schemes for distinguishing between executable images, shared libraries,
-# and object files.
-#
-# FreeBSD says:
-#
-# Regardless of whether it's pure, demand-paged, or none of the
-# above:
-#
-# if the entry point is < 4096, then it's a shared library if
-# the "has run-time loader information" bit is set, and is
-# position-independent if the "is position-independent" bit
-# is set;
-#
-# if the entry point is >= 4096 (or >4095, same thing), then it's
-# an executable, and is dynamically-linked if the "has run-time
-# loader information" bit is set.
-#
-# On x86, NetBSD says:
-#
-# If it's neither pure nor demand-paged:
-#
-# if it has the "has run-time loader information" bit set, it's
-# a dynamically-linked executable;
-#
-# if it doesn't have that bit set, then:
-#
-# if it has the "is position-independent" bit set, it's
-# position-independent;
-#
-# if the entry point is non-zero, it's an executable, otherwise
-# it's an object file.
-#
-# If it's pure:
-#
-# if it has the "has run-time loader information" bit set, it's
-# a dynamically-linked executable, otherwise it's just an
-# executable.
-#
-# If it's demand-paged:
-#
-# if it has the "has run-time loader information" bit set,
-# then:
-#
-# if the entry point is < 4096, it's a shared library;
-#
-# if the entry point is = 4096 or > 4096 (i.e., >= 4096),
-# it's a dynamically-linked executable);
-#
-# if it doesn't have the "has run-time loader information" bit
-# set, then it's just an executable.
-#
-# (On non-x86, NetBSD does much the same thing, except that it uses
-# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K
-# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's
-# had 8K pages; dunno about MIPS.)
-#
-# I suspect the two will differ only in perverse and uninteresting cases
-# ("shared" libraries that aren't demand-paged and whose pages probably
-# won't actually be shared, executables with entry points <4096).
-#
-# I leave it to those more familiar with FreeBSD and NetBSD to figure out
-# what the right answer is (although using ">4095", FreeBSD-style, is
-# probably better than separately checking for "=4096" and ">4096",
-# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged
-# executables using the NetBSD technique.)
-#
-0 lelong&0377777777 041400407 FreeBSD/i386
->20 lelong <4096
->>3 byte&0xC0 &0x80 shared library
->>3 byte&0xC0 0x40 PIC object
->>3 byte&0xC0 0x00 object
->20 lelong >4095
->>3 byte&0x80 0x80 dynamically linked executable
->>3 byte&0x80 0x00 executable
->16 lelong >0 not stripped
-
-0 lelong&0377777777 041400410 FreeBSD/i386 pure
->20 lelong <4096
->>3 byte&0xC0 &0x80 shared library
->>3 byte&0xC0 0x40 PIC object
->>3 byte&0xC0 0x00 object
->20 lelong >4095
->>3 byte&0x80 0x80 dynamically linked executable
->>3 byte&0x80 0x00 executable
->16 lelong >0 not stripped
-
-0 lelong&0377777777 041400413 FreeBSD/i386 demand paged
->20 lelong <4096
->>3 byte&0xC0 &0x80 shared library
->>3 byte&0xC0 0x40 PIC object
->>3 byte&0xC0 0x00 object
->20 lelong >4095
->>3 byte&0x80 0x80 dynamically linked executable
->>3 byte&0x80 0x00 executable
->16 lelong >0 not stripped
-
-0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged
->20 lelong <4096
->>3 byte&0xC0 &0x80 shared library
->>3 byte&0xC0 0x40 PIC object
->>3 byte&0xC0 0x00 object
->20 lelong >4095
->>3 byte&0x80 0x80 dynamically linked executable
->>3 byte&0x80 0x00 executable
->16 lelong >0 not stripped
-
-# XXX gross hack to identify core files
-# cores start with a struct tss; we take advantage of the following:
-# byte 7: highest byte of the kernel stack pointer, always 0xfe
-# 8/9: kernel (ring 0) ss value, always 0x0010
-# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0
-# 28: low order byte of the current PTD entry, always 0 since the
-# PTD is page-aligned
-#
-7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file
->1039 string >\0 from '%s'
-
-# /var/run/ld.so.hints
-# What are you laughing about?
-0 lelong 011421044151 ld.so hints file (Little Endian
->4 lelong >0 \b, version %d)
->4 belong <=0 \b)
-0 belong 011421044151 ld.so hints file (Big Endian
->4 belong >0 \b, version %d)
->4 belong <=0 \b)
-
-#
-# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities
-#
-0 string SCRSHOT_ scrshot(1) screenshot,
->8 byte x version %d,
->9 byte 2 %d bytes in header,
->>10 byte x %d chars wide by
->>11 byte x %d chars high
-
-#------------------------------------------------------------------------------
-# gcc: file(1) magic for GCC special files
-#
-0 string gpch GCC precompiled header
-
-# The version field is annoying. It's 3 characters, not zero-terminated.
->5 byte x (version %c
->6 byte x \b%c
->7 byte x \b%c)
-
-# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'
->4 byte 67 for C
->4 byte 111 for Objective C
->4 byte 43 for C++
->4 byte 79 for Objective C++
-
-#-----------------------------------------------------------------------------
-# natinst: file(1) magic for National Instruments Code Files
-
-#
-# From <egamez@fcfm.buap.mx> Enrique Gámez-Flores
-# version 1
-# Many formats still missing, we use, for the moment LabVIEW
-# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing
-#
-0 string RSRC National Instruments,
-# Check if it's a LabVIEW File
->8 string LV LabVIEW File,
-# Check wich kind of file is
->>10 string SB Code Resource File, data
->>10 string IN Virtual Instrument Program, data
->>10 string AR VI Library, data
-# This is for Menu Libraries
->8 string LMNULBVW Portable File Names, data
-# This is for General Resources
->8 string rsc Resources File, data
-# This is for VXI Package
-0 string VMAP National Instruments, VXI File, data
-#------------------------------------------------------------------------------
-# nitpicker: file(1) magic for Flowfiles.
-# From: Christian Jachmann <C.Jachmann@gmx.net> http://www.nitpicker.de
-0 string NPFF NItpicker Flow File
->4 byte x V%d.
->5 byte x %d
->6 bedate x started: %s
->10 bedate x stopped: %s
->14 belong x Bytes: %u
->18 belong x Bytes1: %u
->22 belong x Flows: %u
->26 belong x Pkts: %u
-
-#------------------------------------------------------------------------------
-# typeset: file(1) magic for other typesetting
-#
-0 string Interpress/Xerox Xerox InterPress data
->16 string / (version
->>17 string >\0 %s)
-
-#------------------------------------------------------------------------------
-# commands: file(1) magic for various shells and interpreters
-#
-0 string : shell archive or script for antique kernel text
-0 string/b #!\ /bin/sh Bourne shell script text executable
-0 string/b #!\ /bin/csh C shell script text executable
-# korn shell magic, sent by George Wu, gwu@clyde.att.com
-0 string/b #!\ /bin/ksh Korn shell script text executable
-0 string/b #!\ /bin/tcsh Tenex C shell script text executable
-0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable
-0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable
-
-#
-# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)
-0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable
-0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable
-0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable
-0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable
-0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable
-0 string/b #!\ /bin/nawk new awk script text executable
-0 string/b #!\ /usr/bin/nawk new awk script text executable
-0 string/b #!\ /usr/local/bin/nawk new awk script text executable
-0 string/b #!\ /bin/gawk GNU awk script text executable
-0 string/b #!\ /usr/bin/gawk GNU awk script text executable
-0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable
-#
-0 string/b #!\ /bin/awk awk script text executable
-0 string/b #!\ /usr/bin/awk awk script text executable
-0 string BEGIN awk script text
-
-# AT&T Bell Labs' Plan 9 shell
-0 string/b #!\ /bin/rc Plan 9 rc shell script text executable
-
-# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)
-0 string/b #!\ /bin/bash Bourne-Again shell script text executable
-0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable
-
-# using env
-0 string #!/usr/bin/env a
->15 string >\0 %s script text executable
-0 string #!\ /usr/bin/env a
->16 string >\0 %s script text executable
-
-# PHP scripts
-# Ulf Harnhammar <ulfh@update.uu.se>
-0 string/c =<?php PHP script text
-0 string =<?\n PHP script text
-0 string =<?\r PHP script text
-0 string/b #!\ /usr/local/bin/php PHP script text executable
-0 string/b #!\ /usr/bin/php PHP script text executable
-
-0 string Zend\x00 PHP script Zend Optimizer data
-
-#------------------------------------------------------------------------------
-# encore: file(1) magic for Encore machines
-#
-# XXX - needs to have the byte order specified (NS32K was little-endian,
-# dunno whether they run the 88K in little-endian mode or not).
-#
-0 short 0x154 Encore
->20 short 0x107 executable
->20 short 0x108 pure executable
->20 short 0x10b demand-paged executable
->20 short 0x10f unsupported executable
->12 long >0 not stripped
->22 short >0 - version %ld
->22 short 0 -
-#>4 date x stamp %s
-0 short 0x155 Encore unsupported executable
->12 long >0 not stripped
->22 short >0 - version %ld
->22 short 0 -
-#>4 date x stamp %s
-
-#------------------------------------------------------------------------------
-# filesystems: file(1) magic for different filesystems
-#
-0 string \366\366\366\366 PC formatted floppy with no filesystem
-# Sun disk labels
-# From /usr/include/sun/dklabel.h:
-0774 beshort 0xdabe Sun disk label
->0 string x '%s
->>31 string >\0 \b%s
->>>63 string >\0 \b%s
->>>>95 string >\0 \b%s
->0 string x \b'
->0734 short >0 %d rpm,
->0736 short >0 %d phys cys,
->0740 short >0 %d alts/cyl,
->0746 short >0 %d interleave,
->0750 short >0 %d data cyls,
->0752 short >0 %d alt cyls,
->0754 short >0 %d heads/partition,
->0756 short >0 %d sectors/track,
->0764 long >0 start cyl %ld,
->0770 long x %ld blocks
-# Is there a boot block written 1 sector in?
->512 belong&077777777 0600407 \b, boot block present
-0x1FE leshort 0xAA55 x86 boot sector
->2 string OSBS \b, OS/BS MBR
-# J\xf6rg Jenderek <joerg.jenderek@gmx.net>
->0x8C string Invalid\ partition\ table \b, MS-DOS MBR
->0x9D string Invalid\ partition\ table \b, DR-DOS MBR, version 7.01 to 7.03
->0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222
->0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950
->0x145 string Default:\ F \b, FREE-DOS MBR
->0 string \0\0\0\0 \b, extended partition table
-# JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90
-# older drives may use E9 xx xx
->0 lelong&0x009000EB 0x009000EB
->0 lelong&0x000000E9 0x000000E9
->>1 ubyte >37 \b, code offset 0x%x
-# mtools-3.9.8/msdos.h
-# usual values are marked with comments to get only informations of strange FAT systems
-# valid sectorsize are from 32 to 2048
->>>11 uleshort <2049
->>>>11 uleshort >31
->>>>>3 string >\0 \b, OEM-ID "%8.8s"
->>>>>11 uleshort >512 \b, Bytes/sector %u
-#>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual)
->>>>>11 uleshort <512 \b, Bytes/sector %u
->>>>>13 ubyte >1 \b, sectors/cluster %u
-#>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies)
->>>>>14 uleshort >32 \b, reserved sectors %u
-#>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32)
-#>>>>>14 uleshort >1 \b, reserved sectors %u
-#>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16)
->>>>>14 uleshort <1 \b, reserved sectors %u
->>>>>16 ubyte >2 \b, FATs %u
-#>>>>>16 ubyte =2 \b, FATs %u (usual)
->>>>>16 ubyte =1 \b, FAT %u
->>>>>16 ubyte >0
->>>>>17 uleshort >0 \b, root entries %u
-#>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32)
->>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB)
-#>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32)
->>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x
-#>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy)
->>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x
->>>>>22 uleshort >0 \b, sectors/FAT %u
-#>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32)
->>>>>26 ubyte >2 \b, heads %u
-#>>>>>26 ubyte =2 \b, heads %u (usual floppy)
->>>>>26 ubyte =1 \b, heads %u
->>>>>28 ulelong >0 \b, hidden sectors %u
-#>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy)
->>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB)
-#>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB)
-# FAT<32 specific
-# NOT le FAT3=NOT 3TAF=0xCCABBEB9
->>>>>82 ulelong&0xCCABBEB9 >0
->>>>>>36 ubyte >0x80 \b, physical drive 0x%x
-#>>>>>>36 ubyte =0x80 \b, physical drive 0x%x=0x80 (usual harddisk)
->>>>>>36 ubyte&0x7F >0 \b, physical drive 0x%x
-#>>>>>>36 ubyte =0 \b, physical drive 0x%x=0 (usual floppy)
->>>>>>37 ubyte >0 \b, reserved 0x%x
-#>>>>>>37 ubyte =0 \b, reserved 0x%x
->>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x)
->>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x)
->>>>>>38 ubyte =0x29
->>>>>>>39 ulelong x \b, serial number 0x%x
->>>>>>>43 string <NO\ NAME \b, label: "%11.11s"
->>>>>>>43 string >NO\ NAME \b, label: "%11.11s"
->>>>>>>43 string =NO\ NAME \b, unlabeled
->>>>>>54 string FAT1 \b, FAT
->>>>>>>54 string FAT12 \b (12 bit)
->>>>>>>54 string FAT16 \b (16 bit)
-# FAT32 specific
->>>>>82 string FAT32 \b, FAT (32 bit)
->>>>>>36 ulelong x \b, sectors/FAT %u
->>>>>>40 uleshort >0 \b, extension flags %u
-#>>>>>>40 uleshort =0 \b, extension flags %u
->>>>>>42 uleshort >0 \b, fsVersion %u
-#>>>>>>42 uleshort =0 \b, fsVersion %u (usual)
->>>>>>44 ulelong >2 \b, rootdir cluster %u
-#>>>>>>44 ulelong =2 \b, rootdir cluster %u
-#>>>>>>44 ulelong =1 \b, rootdir cluster %u
->>>>>>48 uleshort >1 \b, infoSector %u
-#>>>>>>48 uleshort =1 \b, infoSector %u (usual)
->>>>>>48 uleshort <1 \b, infoSector %u
->>>>>>50 uleshort >6 \b, Backup boot sector %u
-#>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual)
->>>>>>50 uleshort <6 \b, Backup boot sector %u
->>>>>>54 ulelong >0 \b, reserved1 0x%x
->>>>>>58 ulelong >0 \b, reserved2 0x%x
->>>>>>62 ulelong >0 \b, reserved3 0x%x
-# same structure as FAT1X
->>>>>>64 ubyte >0x80 \b, physical drive 0x%x
-#>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk)
->>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x
-#>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy)
->>>>>>65 ubyte >0 \b, reserved 0x%x
->>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x)
->>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x)
->>>>>>66 ubyte =0x29
->>>>>>>67 ulelong x \b, serial number 0x%x
->>>>>>>71 string <NO\ NAME \b, label: "%11.11s"
->>>>>>71 string >NO\ NAME \b, label: "%11.11s"
->>>>>>71 string =NO\ NAME \b, unlabeled
-### FATs end
->0x200 lelong 0x82564557 \b, BSD disklabel
-# FATX
-0 string FATX FATX filesystem data
-
-
-# Minix filesystems - Juan Cespedes <cespedes@debian.org>
-0x410 leshort 0x137f Minix filesystem
-0x410 beshort 0x137f Minix filesystem (big endian),
->0x402 beshort !0 \b, %d zones
->0x1e string minix \b, bootable
-0x410 leshort 0x138f Minix filesystem, 30 char names
-0x410 leshort 0x2468 Minix filesystem, version 2
-0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names
-
-# romfs filesystems - Juan Cespedes <cespedes@debian.org>
-0 string -rom1fs-\0 romfs filesystem, version 1
->8 belong x %d bytes,
->16 string x named %s.
-
-# netboot image - Juan Cespedes <cespedes@debian.org>
-0 lelong 0x1b031336L Netboot image,
->4 lelong&0xFFFFFF00 0
->>4 lelong&0x100 0x000 mode 2
->>4 lelong&0x100 0x100 mode 3
->4 lelong&0xFFFFFF00 !0 unknown mode
-
-0x18b string OS/2 OS/2 Boot Manager
-
-9564 lelong 0x00011954 Unix Fast File system (little-endian),
->8404 string x last mounted on %s,
-#>9504 ledate x last checked at %s,
->8224 ledate x last written at %s,
->8401 byte x clean flag %d,
->8228 lelong x number of blocks %d,
->8232 lelong x number of data blocks %d,
->8236 lelong x number of cylinder groups %d,
->8240 lelong x block size %d,
->8244 lelong x fragment size %d,
->8252 lelong x minimum percentage of free blocks %d,
->8256 lelong x rotational delay %dms,
->8260 lelong x disk rotational speed %drps,
->8320 lelong 0 TIME optimization
->8320 lelong 1 SPACE optimization
-
-9564 belong 0x00011954 Unix Fast File system (big-endian),
->7168 long 0x4c41424c Apple UFS Volume
->>7186 string x named %s,
->>7176 belong x volume label version %d,
->>7180 bedate x created on %s,
->8404 string x last mounted on %s,
-#>9504 bedate x last checked at %s,
->8224 bedate x last written at %s,
->8401 byte x clean flag %d,
->8228 belong x number of blocks %d,
->8232 belong x number of data blocks %d,
->8236 belong x number of cylinder groups %d,
->8240 belong x block size %d,
->8244 belong x fragment size %d,
->8252 belong x minimum percentage of free blocks %d,
->8256 belong x rotational delay %dms,
->8260 belong x disk rotational speed %drps,
->8320 belong 0 TIME optimization
->8320 belong 1 SPACE optimization
-
-# ext2/ext3 filesystems - Andreas Dilger <adilger@turbolabs.com>
-0x438 leshort 0xEF53 Linux
->0x44c lelong x rev %d
->0x43e leshort x \b.%d
->0x45c lelong ^0x0000004 ext2 filesystem data
->>0x43a leshort ^0x0000001 (mounted or unclean)
->0x45c lelong &0x0000004 ext3 filesystem data
->>0x460 lelong &0x0000004 (needs journal recovery)
->0x43a leshort &0x0000002 (errors)
->0x460 lelong &0x0000001 (compressed)
-#>0x460 lelong &0x0000002 (filetype)
-#>0x464 lelong &0x0000001 (sparse_super)
->0x464 lelong &0x0000002 (large files)
-
-# SGI disk labels - Nathan Scott <nathans@debian.org>
-0 belong 0x0BE5A941 SGI disk label (volume header)
-
-# SGI XFS filesystem - Nathan Scott <nathans@debian.org>
-0 belong 0x58465342 SGI XFS filesystem data
->0x4 belong x (blksz %d,
->0x68 beshort x inosz %d,
->0x64 beshort ^0x2004 v1 dirs)
->0x64 beshort &0x2004 v2 dirs)
-
-############################################################################
-# Minix-ST kernel floppy
-0x800 belong 0x46fc2700 Atari-ST Minix kernel image
->19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy
->19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy
-
-############################################################################
-# Hmmm, is this a better way of detecting _standard_ floppy images ?
-19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k
->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
-19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k
->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
-19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k
->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
-
-19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM
->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
-19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs
->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
-
-19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k
-19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k
-
-# Valid media descriptor bytes for MS-DOS:
-#
-# Byte Capacity Media Size and Type
-# -------------------------------------------------
-#
-# F0 2.88 MB 3.5-inch, 2-sided, 36-sector
-# F0 1.44 MB 3.5-inch, 2-sided, 18-sector
-# F9 720K 3.5-inch, 2-sided, 9-sector
-# F9 1.2 MB 5.25-inch, 2-sided, 15-sector
-# FD 360K 5.25-inch, 2-sided, 9-sector
-# FF 320K 5.25-inch, 2-sided, 8-sector
-# FC 180K 5.25-inch, 1-sided, 9-sector
-# FE 160K 5.25-inch, 1-sided, 8-sector
-# FE 250K 8-inch, 1-sided, single-density
-# FD 500K 8-inch, 2-sided, single-density
-# FE 1.2 MB 8-inch, 2-sided, double-density
-# F8 ----- Fixed disk
-#
-# FC xxxK Apricot 70x1x9 boot disk.
-#
-# Originally a bitmap:
-# xxxxxxx0 Not two sided
-# xxxxxxx1 Double sided
-# xxxxxx0x Not 8 SPT
-# xxxxxx1x 8 SPT
-# xxxxx0xx Not Removable drive
-# xxxxx1xx Removable drive
-# 11111xxx Must be one.
-#
-# But now it's rather random:
-# 111111xx Low density disk
-# 00 SS, Not 8 SPT
-# 01 DS, Not 8 SPT
-# 10 SS, 8 SPT
-# 11 DS, 8 SPT
-#
-# 11111001 Double density 3½ floppy disk, high density 5¼
-# 11110000 High density 3½ floppy disk
-# 11111000 Hard disk any format
-#
-
-# CDROM Filesystems
-32769 string CD001 ISO 9660 CD-ROM filesystem data
-# "application id" which appears to be used as a volume label
->32808 string >\0 '%s'
->34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable)
-37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
-32776 string CDROM High Sierra CD-ROM filesystem data
-
-# cramfs filesystem - russell@coker.com.au
-0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian
->4 lelong x size %d
->8 lelong &1 version #2
->8 lelong &2 sorted_dirs
->8 lelong &4 hole_support
->32 lelong x CRC 0x%x,
->36 lelong x edition %d,
->40 lelong x %d blocks,
->44 lelong x %d files
-
-0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian
->4 belong x size %d
->8 belong &1 version #2
->8 belong &2 sorted_dirs
->8 belong &4 hole_support
->32 belong x CRC 0x%x,
->36 belong x edition %d,
->40 belong x %d blocks,
->44 belong x %d files
-
-# reiserfs - russell@coker.com.au
-0x10034 string ReIsErFs ReiserFS V3.5
-0x10034 string ReIsEr2Fs ReiserFS V3.6
->0x1002c leshort x block size %d
->0x10032 leshort &2 (mounted or unclean)
->0x10000 lelong x num blocks %d
->0x10040 lelong 1 tea hash
->0x10040 lelong 2 yura hash
->0x10040 lelong 3 r5 hash
-
-# JFFS - russell@coker.com.au
-0 lelong 0x34383931 Linux Journalled Flash File system, little endian
-0 belong 0x34383931 Linux Journalled Flash File system, big endian
-
-# EST flat binary format (which isn't, but anyway)
-# From: Mark Brown <broonie@sirena.org.uk>
-0 string ESTFBINR EST flat binary
-
-# Aculab VoIP firmware
-# From: Mark Brown <broonie@sirena.org.uk>
-0 string VoIP\ Startup\ and Aculab VoIP firmware
->35 string x format %s
-
-# PPCBoot image file
-# From: Mark Brown <broonie@sirena.org.uk>
-0 belong 0x27051956 PPCBoot image
->4 string PPCBoot
->>12 string x version %s
-
-# JFFS2 file system
-0 leshort 0x1984 Linux old jffs2 filesystem data little endian
-0 lelong 0xe0011985 Linux jffs2 filesystem data little endian
-
-#------------------------------------------------------------------------------
-# hp: file(1) magic for Hewlett Packard machines (see also "printer")
-#
-# XXX - somebody should figure out whether any byte order needs to be
-# applied to the "TML" stuff; I'm assuming the Apollo stuff is
-# big-endian as it was mostly 68K-based.
-#
-# I think the 500 series was the old stack-based machines, running a
-# UNIX environment atop the "SUN kernel"; dunno whether it was
-# big-endian or little-endian.
-#
-# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based;
-# hp300 are 68020+68881 based; hp400 are also 68k. The following basic
-# HP magic is useful for reference, but using "long" magic is a better
-# practice in order to avoid collisions.
-#
-# Guy Harris (guy@netapp.com): some additions to this list came from
-# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1,
-# 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0
-# "/etc/magic", though, except for the "archive file relocatable library"
-# stuff, and the 68030 and 68040 stuff isn't there at all - are they not
-# used in executables, or have they just not yet updated "/etc/magic"
-# completely?
-#
-# 0 beshort 200 hp200 (68010) BSD binary
-# 0 beshort 300 hp300 (68020+68881) BSD binary
-# 0 beshort 0x20c hp200/300 HP-UX binary
-# 0 beshort 0x20d hp400 (68030) HP-UX binary
-# 0 beshort 0x20e hp400 (68040?) HP-UX binary
-# 0 beshort 0x20b PA-RISC1.0 HP-UX binary
-# 0 beshort 0x210 PA-RISC1.1 HP-UX binary
-# 0 beshort 0x211 PA-RISC1.2 HP-UX binary
-# 0 beshort 0x214 PA-RISC2.0 HP-UX binary
-
-#
-# The "misc" stuff needs a byte order; the archives look suspiciously
-# like the old 177545 archives (0xff65 = 0177545).
-#
-#### Old Apollo stuff
-0 beshort 0627 Apollo m68k COFF executable
->18 beshort ^040000 not stripped
->22 beshort >0 - version %ld
-0 beshort 0624 apollo a88k COFF executable
->18 beshort ^040000 not stripped
->22 beshort >0 - version %ld
-0 long 01203604016 TML 0123 byte-order format
-0 long 01702407010 TML 1032 byte-order format
-0 long 01003405017 TML 2301 byte-order format
-0 long 01602007412 TML 3210 byte-order format
-#### PA-RISC 1.1
-0 belong 0x02100106 PA-RISC1.1 relocatable object
-0 belong 0x02100107 PA-RISC1.1 executable
->168 belong &0x00000004 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x02100108 PA-RISC1.1 shared executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x0210010b PA-RISC1.1 demand-load executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x0210010e PA-RISC1.1 shared library
->96 belong >0 - not stripped
-
-0 belong 0x0210010d PA-RISC1.1 dynamic load library
->96 belong >0 - not stripped
-
-#### PA-RISC 2.0
-0 belong 0x02140106 PA-RISC2.0 relocatable object
-
-0 belong 0x02140107 PA-RISC2.0 executable
->168 belong &0x00000004 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x02140108 PA-RISC2.0 shared executable
->168 belong &0x00000004 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x0214010b PA-RISC2.0 demand-load executable
->168 belong &0x00000004 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x0214010e PA-RISC2.0 shared library
->96 belong >0 - not stripped
-
-0 belong 0x0214010d PA-RISC2.0 dynamic load library
->96 belong >0 - not stripped
-
-#### 800
-0 belong 0x020b0106 PA-RISC1.0 relocatable object
-
-0 belong 0x020b0107 PA-RISC1.0 executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x020b0108 PA-RISC1.0 shared executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x020b010b PA-RISC1.0 demand-load executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x020b010e PA-RISC1.0 shared library
->96 belong >0 - not stripped
-
-0 belong 0x020b010d PA-RISC1.0 dynamic load library
->96 belong >0 - not stripped
-
-0 belong 0x213c6172 archive file
->68 belong 0x020b0619 - PA-RISC1.0 relocatable library
->68 belong 0x02100619 - PA-RISC1.1 relocatable library
->68 belong 0x02110619 - PA-RISC1.2 relocatable library
->68 belong 0x02140619 - PA-RISC2.0 relocatable library
-
-#### 500
-0 long 0x02080106 HP s500 relocatable executable
->16 long >0 - version %ld
-
-0 long 0x02080107 HP s500 executable
->16 long >0 - version %ld
-
-0 long 0x02080108 HP s500 pure executable
->16 long >0 - version %ld
-
-#### 200
-0 belong 0x020c0108 HP s200 pure executable
->4 beshort >0 - version %ld
->8 belong &0x80000000 save fp regs
->8 belong &0x40000000 dynamically linked
->8 belong &0x20000000 debuggable
->36 belong >0 not stripped
-
-0 belong 0x020c0107 HP s200 executable
->4 beshort >0 - version %ld
->8 belong &0x80000000 save fp regs
->8 belong &0x40000000 dynamically linked
->8 belong &0x20000000 debuggable
->36 belong >0 not stripped
-
-0 belong 0x020c010b HP s200 demand-load executable
->4 beshort >0 - version %ld
->8 belong &0x80000000 save fp regs
->8 belong &0x40000000 dynamically linked
->8 belong &0x20000000 debuggable
->36 belong >0 not stripped
-
-0 belong 0x020c0106 HP s200 relocatable executable
->4 beshort >0 - version %ld
->6 beshort >0 - highwater %d
->8 belong &0x80000000 save fp regs
->8 belong &0x20000000 debuggable
->8 belong &0x10000000 PIC
-
-0 belong 0x020a0108 HP s200 (2.x release) pure executable
->4 beshort >0 - version %ld
->36 belong >0 not stripped
-
-0 belong 0x020a0107 HP s200 (2.x release) executable
->4 beshort >0 - version %ld
->36 belong >0 not stripped
-
-0 belong 0x020c010e HP s200 shared library
->4 beshort >0 - version %ld
->6 beshort >0 - highwater %d
->36 belong >0 not stripped
-
-0 belong 0x020c010d HP s200 dynamic load library
->4 beshort >0 - version %ld
->6 beshort >0 - highwater %d
->36 belong >0 not stripped
-
-#### MISC
-0 long 0x0000ff65 HP old archive
-0 long 0x020aff65 HP s200 old archive
-0 long 0x020cff65 HP s200 old archive
-0 long 0x0208ff65 HP s500 old archive
-
-0 long 0x015821a6 HP core file
-
-0 long 0x4da7eee8 HP-WINDOWS font
->8 byte >0 - version %ld
-0 string Bitmapfile HP Bitmapfile
-
-0 string IMGfile CIS compimg HP Bitmapfile
-# XXX - see "lif"
-#0 short 0x8000 lif file
-0 long 0x020c010c compiled Lisp
-
-0 string msgcat01 HP NLS message catalog,
->8 long >0 %d messages
-
-# addendum to /etc/magic with HP-48sx file-types by phk@data.fls.dk 1jan92
-0 string HPHP48- HP48 binary
->7 byte >0 - Rev %c
->8 beshort 0x1129 (ADR)
->8 beshort 0x3329 (REAL)
->8 beshort 0x5529 (LREAL)
->8 beshort 0x7729 (COMPLX)
->8 beshort 0x9d29 (LCOMPLX)
->8 beshort 0xbf29 (CHAR)
->8 beshort 0xe829 (ARRAY)
->8 beshort 0x0a2a (LNKARRAY)
->8 beshort 0x2c2a (STRING)
->8 beshort 0x4e2a (HXS)
->8 beshort 0x742a (LIST)
->8 beshort 0x962a (DIR)
->8 beshort 0xb82a (ALG)
->8 beshort 0xda2a (UNIT)
->8 beshort 0xfc2a (TAGGED)
->8 beshort 0x1e2b (GROB)
->8 beshort 0x402b (LIB)
->8 beshort 0x622b (BACKUP)
->8 beshort 0x882b (LIBDATA)
->8 beshort 0x9d2d (PROG)
->8 beshort 0xcc2d (CODE)
->8 beshort 0x482e (GNAME)
->8 beshort 0x6d2e (LNAME)
->8 beshort 0x922e (XLIB)
-0 string %%HP: HP48 text
->6 string T(0) - T(0)
->6 string T(1) - T(1)
->6 string T(2) - T(2)
->6 string T(3) - T(3)
->10 string A(D) A(D)
->10 string A(R) A(R)
->10 string A(G) A(G)
->14 string F(.) F(.);
->14 string F(,) F(,);
-
-# hpBSD magic numbers
-0 beshort 200 hp200 (68010) BSD
->2 beshort 0407 impure binary
->2 beshort 0410 read-only binary
->2 beshort 0413 demand paged binary
-0 beshort 300 hp300 (68020+68881) BSD
->2 beshort 0407 impure binary
->2 beshort 0410 read-only binary
->2 beshort 0413 demand paged binary
-#
-# From David Gero <dgero@nortelnetworks.com>
-# HP-UX 10.20 core file format from /usr/include/sys/core.h
-# Unfortunately, HP-UX uses corehead blocks without specifying the order
-# There are four we care about:
-# CORE_KERNEL, which starts with the string "HP-UX"
-# CORE_EXEC, which contains the name of the command
-# CORE_PROC, which contains the signal number that caused the core dump
-# CORE_FORMAT, which contains the version of the core file format (== 1)
-# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC
-# but we include all 6 variations of the order of the first 3, and
-# assume that PROC will always be last
-# Order 1: KERNEL, EXEC, FORMAT, PROC
-0x10 string HP-UX
->0 belong 2
->>0xC belong 0x3C
->>>0x4C belong 0x100
->>>>0x58 belong 0x44
->>>>>0xA0 belong 1
->>>>>>0xAC belong 4
->>>>>>>0xB0 belong 1
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0x90 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 2: KERNEL, FORMAT, EXEC, PROC
->>>0x4C belong 1
->>>>0x58 belong 4
->>>>>0x5C belong 1
->>>>>>0x60 belong 0x100
->>>>>>>0x6C belong 0x44
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0xA4 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 3: FORMAT, KERNEL, EXEC, PROC
-0x24 string HP-UX
->0 belong 1
->>0xC belong 4
->>>0x10 belong 1
->>>>0x14 belong 2
->>>>>0x20 belong 0x3C
->>>>>>0x60 belong 0x100
->>>>>>>0x6C belong 0x44
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0xA4 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 4: EXEC, KERNEL, FORMAT, PROC
-0x64 string HP-UX
->0 belong 0x100
->>0xC belong 0x44
->>>0x54 belong 2
->>>>0x60 belong 0x3C
->>>>>0xA0 belong 1
->>>>>>0xAC belong 4
->>>>>>>0xB0 belong 1
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0x44 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 5: FORMAT, EXEC, KERNEL, PROC
-0x78 string HP-UX
->0 belong 1
->>0xC belong 4
->>>0x10 belong 1
->>>>0x14 belong 0x100
->>>>>0x20 belong 0x44
->>>>>>0x68 belong 2
->>>>>>>0x74 belong 0x3C
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0x58 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 6: EXEC, FORMAT, KERNEL, PROC
->0 belong 0x100
->>0xC belong 0x44
->>>0x54 belong 1
->>>>0x60 belong 4
->>>>>0x64 belong 1
->>>>>>0x68 belong 2
->>>>>>>0x74 belong 0x2C
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0x44 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-
-# From: AMAKAWA Shuhei <sa264@cam.ac.uk>
-0 string HPHP49- HP49 binary
-
-
-#------------------------------------------------------------------------------
-# JPEG images
-# SunOS 5.5.1 had
-#
-# 0 string \377\330\377\340 JPEG file
-# 0 string \377\330\377\356 JPG file
-#
-# both of which turn into "JPEG image data" here.
-#
-0 beshort 0xffd8 JPEG image data
->6 string JFIF \b, JFIF standard
-# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
-# in a vain attempt to add image size reporting for JFIF. Note that these
-# tests are not fool-proof since some perfectly valid JPEGs are currently
-# impossible to specify in magic(4) format.
-# First, a little JFIF version info:
->>11 byte x \b %d.
->>12 byte x \b%02d
-# Next, the resolution or aspect ratio of the image:
-#>>13 byte 0 \b, aspect ratio
-#>>13 byte 1 \b, resolution (DPI)
-#>>13 byte 2 \b, resolution (DPCM)
-#>>4 beshort x \b, segment length %d
-# Next, show thumbnail info, if it exists:
->>18 byte !0 \b, thumbnail %dx
->>>19 byte x \b%d
-
-# EXIF moved down here to avoid reporting a bogus version number,
-# and EXIF version number printing added.
-# - Patrik R=E5dman <patrik+file-magic@iki.fi>
->6 string Exif \b, EXIF standard
-# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD.
-# All possible combinations of entries have to be enumerated, since no looping
-# is possible. And both endians are possible...
-# The combinations included below are from real-world JPEGs.
-# Little-endian
->>12 string II
-# IFD 0 Entry #5:
->>>70 leshort 0x8769
-# EXIF IFD Entry #1:
->>>>(78.l+14) leshort 0x9000
->>>>>(78.l+23) byte x %c
->>>>>(78.l+24) byte x \b.%c
->>>>>(78.l+25) byte !0x30 \b%c
-# IFD 0 Entry #9:
->>>118 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(126.l+38) leshort 0x9000
->>>>>(126.l+47) byte x %c
->>>>>(126.l+48) byte x \b.%c
->>>>>(126.l+49) byte !0x30 \b%c
-# IFD 0 Entry #10
->>>130 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(138.l+38) leshort 0x9000
->>>>>(138.l+47) byte x %c
->>>>>(138.l+48) byte x \b.%c
->>>>>(138.l+49) byte !0x30 \b%c
-# EXIF IFD Entry #4:
->>>>(138.l+50) leshort 0x9000
->>>>>(138.l+59) byte x %c
->>>>>(138.l+60) byte x \b.%c
->>>>>(138.l+61) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(138.l+62) leshort 0x9000
->>>>>(138.l+71) byte x %c
->>>>>(138.l+72) byte x \b.%c
->>>>>(138.l+73) byte !0x30 \b%c
-# IFD 0 Entry #11
->>>142 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(150.l+38) leshort 0x9000
->>>>>(150.l+47) byte x %c
->>>>>(150.l+48) byte x \b.%c
->>>>>(150.l+49) byte !0x30 \b%c
-# EXIF IFD Entry #4:
->>>>(150.l+50) leshort 0x9000
->>>>>(150.l+59) byte x %c
->>>>>(150.l+60) byte x \b.%c
->>>>>(150.l+61) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(150.l+62) leshort 0x9000
->>>>>(150.l+71) byte x %c
->>>>>(150.l+72) byte x \b.%c
->>>>>(150.l+73) byte !0x30 \b%c
-# Big-endian
->>12 string MM
-# IFD 0 Entry #9:
->>>118 beshort 0x8769
-# EXIF IFD Entry #1:
->>>>(126.L+14) beshort 0x9000
->>>>>(126.L+23) byte x %c
->>>>>(126.L+24) byte x \b.%c
->>>>>(126.L+25) byte !0x30 \b%c
-# EXIF IFD Entry #3:
->>>>(126.L+38) beshort 0x9000
->>>>>(126.L+47) byte x %c
->>>>>(126.L+48) byte x \b.%c
->>>>>(126.L+49) byte !0x30 \b%c
-# IFD 0 Entry #10
->>>130 beshort 0x8769
-# EXIF IFD Entry #3:
->>>>(138.L+38) beshort 0x9000
->>>>>(138.L+47) byte x %c
->>>>>(138.L+48) byte x \b.%c
->>>>>(138.L+49) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(138.L+62) beshort 0x9000
->>>>>(138.L+71) byte x %c
->>>>>(138.L+72) byte x \b.%c
->>>>>(138.L+73) byte !0x30 \b%c
-# IFD 0 Entry #11
->>>142 beshort 0x8769
-# EXIF IFD Entry #4:
->>>>(150.L+50) beshort 0x9000
->>>>>(150.L+59) byte x %c
->>>>>(150.L+60) byte x \b.%c
->>>>>(150.L+61) byte !0x30 \b%c
-# Here things get sticky. We can do ONE MORE marker segment with
-# indirect addressing, and that's all. It would be great if we could
-# do pointer arithemetic like in an assembler language. Christos?
-# And if there was some sort of looping construct to do searches, plus a few
-# named accumulators, it would be even more effective...
-# At least we can show a comment if no other segments got inserted before:
->(4.S+5) byte 0xFE
->>(4.S+8) string >\0 \b, comment: "%s"
-#>(4.S+5) byte 0xFE \b, comment
-#>>(4.S+6) beshort x \b length=%d
-#>>(4.S+8) string >\0 \b, "%s"
-# Or, we can show the encoding type (I've included only the three most common)
-# and image dimensions if we are lucky and the SOFn (image segment) is here:
->(4.S+5) byte 0xC0 \b, baseline
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
->(4.S+5) byte 0xC1 \b, extended sequential
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
->(4.S+5) byte 0xC2 \b, progressive
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
-# I've commented-out quantisation table reporting. I doubt anyone cares yet.
-#>(4.S+5) byte 0xDB \b, quantisation table
-#>>(4.S+6) beshort x \b length=%d
-#>14 beshort x \b, %d x
-#>16 beshort x \b %d
-
-# HSI is Handmade Software's proprietary JPEG encoding scheme
-0 string hsi1 JPEG image data, HSI proprietary
-
-# From: David Santinoli <david@santinoli.com>
-0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000 image data
-
-#------------------------------------------------------------------------------
-# sinclair: file(1) sinclair QL
-
-# additions to /etc/magic by Thomas M. Ott (ThMO)
-
-# Sinclair QL floppy disk formats (ThMO)
-0 string =QL5 QL disk dump data,
->3 string =A 720 KB,
->3 string =B 1.44 MB,
->3 string =C 3.2 MB,
->4 string >\0 label:%.10s
-
-# Sinclair QL OS dump (ThMO)
-# (NOTE: if `file' would be able to use indirect references in a endian format
-# differing from the natural host format, this could be written more
-# reliably and faster...)
-#
-# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more
-# than the first 8K of a file... #-(
-#
-#0 belong =0x30000
-#>49124 belong <47104
-#>>49128 belong <47104
-#>>>49132 belong <47104
-#>>>>49136 belong <47104 QL OS dump data,
-#>>>>>49148 string >\0 type %.3s,
-#>>>>>49142 string >\0 version %.4s
-
-# Sinclair QL firmware executables (ThMO)
-0 string NqNqNq`\004 QL firmware executable (BCPL)
-
-# Sinclair QL libraries (was ThMO)
-0 beshort 0xFB01 QDOS object
->2 pstring x '%s'
-
-# Sinclair QL executables (was ThMO)
-4 belong 0x4AFB QDOS executable
->9 pstring x '%s'
-
-# Sinclair QL ROM (ThMO)
-0 belong =0x4AFB0001 QL plugin-ROM data,
->9 pstring =\0 un-named
->9 pstring >\0 named: %s
-#------------------------------------------------------------------------------
-# acorn: file(1) magic for files found on Acorn systems
-#
-
-# RISC OS Chunk File Format
-# From RISC OS Programmer's Reference Manual, Appendix D
-# We guess the file type from the type of the first chunk.
-0 lelong 0xc3cbc6c5 RISC OS Chunk data
->12 string OBJ_ \b, AOF object
->12 string LIB_ \b, ALF library
-
-# RISC OS AIF, contains "SWI OS_Exit" at offset 16.
-16 lelong 0xef000011 RISC OS AIF executable
-
-# RISC OS Draw files
-# From RISC OS Programmer's Reference Manual, Appendix E
-0 string Draw RISC OS Draw file data
-
-# RISC OS new format font files
-# From RISC OS Programmer's Reference Manual, Appendix E
-0 string FONT\0 RISC OS outline font data,
->5 byte x version %d
-0 string FONT\1 RISC OS 1bpp font data,
->5 byte x version %d
-0 string FONT\4 RISC OS 4bpp font data
->5 byte x version %d
-
-# RISC OS Music files
-# From RISC OS Programmer's Reference Manual, Appendix E
-0 string Maestro\r RISC OS music file
->8 byte x version %d
-
-
-#------------------------------------------------------------------------------
-# iff: file(1) magic for Interchange File Format (see also "audio" & "images")
-#
-# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic
-# Arts for file interchange. It has also been used by Apple, SGI, and
-# especially Commodore-Amiga.
-#
-# IFF files begin with an 8 byte FORM header, followed by a 4 character
-# FORM type, which is followed by the first chunk in the FORM.
-
-0 string FORM IFF data
-#>4 belong x \b, FORM is %d bytes long
-# audio formats
->8 string AIFF \b, AIFF audio
->8 string AIFC \b, AIFF-C compressed audio
->8 string 8SVX \b, 8SVX 8-bit sampled sound voice
->8 string SAMP \b, SAMP sampled audio
->8 string DTYP \b, DTYP datatype description
->8 string PTCH \b, PTCH binary patch
-# image formats
->8 string ILBMBMHD \b, ILBM interleaved image
->>20 beshort x \b, %d x
->>22 beshort x %d
->8 string RGBN \b, RGBN 12-bit RGB image
->8 string RGB8 \b, RGB8 24-bit RGB image
->8 string DR2D \b, DR2D 2-D object
->8 string TDDD \b, TDDD 3-D rendering
-# other formats
->8 string FTXT \b, FTXT formatted text
->8 string CTLG \b, CTLG message catalog
->8 string PREF \b, PREF preferences
-
-#------------------------------------------------------------------------------
-# lif: file(1) magic for lif
-#
-# (Daniel Quinlan <quinlan@yggdrasil.com>)
-#
-0 beshort 0x8000 lif file
-
-#------------------------------------------------------------------------------
-# mirage: file(1) magic for Mirage executables
-#
-# XXX - byte order?
-#
-0 long 31415 Mirage Assembler m.out executable
-
-#------------------------------------------------------------------------------
-# netscape: file(1) magic for Netscape files
-# "H. Nanosecond" <aldomel@ix.netcom.com>
-# version 3 and 4 I think
-#
-
-# Netscape Address book .nab
-0 string \000\017\102\104\000\000\000\000\000\000\001\000\000\000\000\002\000\000\000\002\000\000\004\000 Netscape Address book
-
-# Netscape Communicator address book
-0 string \000\017\102\111 Netscape Communicator address book
-
-# .snm Caches
-0 string #\ Netscape\ folder\ cache Netscape folder cache
-0 string \000\036\204\220\000 Netscape folder cache
-# .n2p
-# Net 2 Phone
-#0 string 123\130\071\066\061\071\071\071\060\070\061\060\061\063\060
-0 string SX961999 Net2phone
-
-#
-#This is files ending in .art, FIXME add more rules
-0 string JG\004\016\0\0\0\0 ART
-
-#------------------------------------------------------------------------------
-# olf: file(1) magic for OLF executables
-#
-# We have to check the byte order flag to see what byte order all the
-# other stuff in the header is in.
-#
-# MIPS R3000 may also be for MIPS R2000.
-# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
-#
-# Created by Erik Theisen <etheisen@openbsd.org>
-# Based on elf from Daniel Quinlan <quinlan@yggdrasil.com>
-0 string \177OLF OLF
->4 byte 0 invalid class
->4 byte 1 32-bit
->4 byte 2 64-bit
->7 byte 0 invalid os
->7 byte 1 OpenBSD
->7 byte 2 NetBSD
->7 byte 3 FreeBSD
->7 byte 4 4.4BSD
->7 byte 5 Linux
->7 byte 6 SVR4
->7 byte 7 esix
->7 byte 8 Solaris
->7 byte 9 Irix
->7 byte 10 SCO
->7 byte 11 Dell
->7 byte 12 NCR
->5 byte 0 invalid byte order
->5 byte 1 LSB
->>16 leshort 0 no file type,
->>16 leshort 1 relocatable,
->>16 leshort 2 executable,
->>16 leshort 3 shared object,
-# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
-# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
->>16 leshort 4 core file
->>>(0x38+0xcc) string >\0 of '%s'
->>>(0x38+0x10) lelong >0 (signal %d),
->>16 leshort &0xff00 processor-specific,
->>18 leshort 0 no machine,
->>18 leshort 1 AT&T WE32100 - invalid byte order,
->>18 leshort 2 SPARC - invalid byte order,
->>18 leshort 3 Intel 80386,
->>18 leshort 4 Motorola 68000 - invalid byte order,
->>18 leshort 5 Motorola 88000 - invalid byte order,
->>18 leshort 6 Intel 80486,
->>18 leshort 7 Intel 80860,
->>18 leshort 8 MIPS R3000_BE - invalid byte order,
->>18 leshort 9 Amdahl - invalid byte order,
->>18 leshort 10 MIPS R3000_LE,
->>18 leshort 11 RS6000 - invalid byte order,
->>18 leshort 15 PA-RISC - invalid byte order,
->>18 leshort 16 nCUBE,
->>18 leshort 17 VPP500,
->>18 leshort 18 SPARC32PLUS,
->>18 leshort 20 PowerPC,
->>18 leshort 0x9026 Alpha,
->>20 lelong 0 invalid version
->>20 lelong 1 version 1
->>36 lelong 1 MathCoPro/FPU/MAU Required
->8 string >\0 (%s)
->5 byte 2 MSB
->>16 beshort 0 no file type,
->>16 beshort 1 relocatable,
->>16 beshort 2 executable,
->>16 beshort 3 shared object,
->>16 beshort 4 core file,
->>>(0x38+0xcc) string >\0 of '%s'
->>>(0x38+0x10) belong >0 (signal %d),
->>16 beshort &0xff00 processor-specific,
->>18 beshort 0 no machine,
->>18 beshort 1 AT&T WE32100,
->>18 beshort 2 SPARC,
->>18 beshort 3 Intel 80386 - invalid byte order,
->>18 beshort 4 Motorola 68000,
->>18 beshort 5 Motorola 88000,
->>18 beshort 6 Intel 80486 - invalid byte order,
->>18 beshort 7 Intel 80860,
->>18 beshort 8 MIPS R3000_BE,
->>18 beshort 9 Amdahl,
->>18 beshort 10 MIPS R3000_LE - invalid byte order,
->>18 beshort 11 RS6000,
->>18 beshort 15 PA-RISC,
->>18 beshort 16 nCUBE,
->>18 beshort 17 VPP500,
->>18 beshort 18 SPARC32PLUS,
->>18 beshort 20 PowerPC or cisco 4500,
->>18 beshort 21 cisco 7500,
->>18 beshort 24 cisco SVIP,
->>18 beshort 25 cisco 7200,
->>18 beshort 36 cisco 12000,
->>18 beshort 0x9026 Alpha,
->>20 belong 0 invalid version
->>20 belong 1 version 1
->>36 belong 1 MathCoPro/FPU/MAU Required
-
-#------------------------------------------------------------------------------
-# VXL: file(1) magic for VXL binary IO data files
-#
-# from Ian Scott <scottim@sf.net>
-#
-# VXL is a collection of C++ libraries for Computer Vision.
-# See the vsl chapter in the VXL Book for more info
-# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html
-# http:/vxl.sf.net
-
-2 lelong 0x472b2c4e VXL data file,
->0 leshort >0 schema version no %d
-
-#------------------------------------------------------------------------------
-# unknown: file(1) magic for unknown machines
-#
-# XXX - this probably should be pruned, as it'll match PDP-11 and
-# VAX image formats.
-#
-# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure,
-# respectively).
-#
-# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't
-# have the "version %ld", which may be a bogus COFFism (I don't think
-# there ever was COFF for the PDP-11).
-#
-# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
-# long, as it would be on a VAX.
-#
-# 0x10C is 0414 and 0x10E is 416; those *are* unknown.
-#
-0 short 0x107 unknown machine executable
->8 short >0 not stripped
->15 byte >0 - version %ld
-0 short 0x108 unknown pure executable
->8 short >0 not stripped
->15 byte >0 - version %ld
-0 short 0x109 PDP-11 separate I&D
->8 short >0 not stripped
->15 byte >0 - version %ld
-0 short 0x10b unknown pure executable
->8 short >0 not stripped
->15 byte >0 - version %ld
-0 long 0x10c unknown demand paged pure executable
->16 long >0 not stripped
-0 long 0x10e unknown readable demand paged pure executable
-
-#------------------------------------------------------------------------------
-# Hierarchical Data Format, used to facilitate scientific data exchange
-# specifications at http://hdf.ncsa.uiuc.edu/
-
-0 belong 0x0e031301 Hierarchical Data Format (version 4) data
-0 string \211HDF\r\n\032 Hierarchical Data Format (version 5) data
-
-#------------------------------------------------------------------------------
-# mail.news: file(1) magic for mail and news
-#
-# Unfortunately, saved netnews also has From line added in some news software.
-#0 string From mail text
-# There are tests to ascmagic.c to cope with mail and news.
-0 string Relay-Version: old news text
-0 string #!\ rnews batched news text
-0 string N#!\ rnews mailed, batched news text
-0 string Forward\ to mail forwarding text
-0 string Pipe\ to mail piping text
-0 string Return-Path: smtp mail text
-0 string Path: news text
-0 string Xref: news text
-0 string From: news or mail text
-0 string Article saved news text
-0 string BABYL Emacs RMAIL text
-0 string Received: RFC 822 mail text
-0 string MIME-Version: MIME entity text
-#0 string Content- MIME entity text
-
-# TNEF files...
-0 lelong 0x223E9F78 Transport Neutral Encapsulation Format
-
-# From: Kevin Sullivan <ksulliva@psc.edu>
-0 string *mbx* MBX mail folder
-
-# From: Simon Matter <simon.matter@invoca.ch>
-0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB
-
-# JAM(mbp) Fidonet message area databases
-# JHR file
-0 string JAM\0 JAM message area header file
->12 leshort >0 (%d messages)
-
-# Squish Fidonet message area databases
-# SQD file (requires at least one message in the area)
-256 leshort 0xAFAE4453 Squish message area data file
->4 leshort >0 (%d messages)
-#------------------------------------------------------------------------------
-# modem: file(1) magic for modem programs
-#
-# From: Florian La Roche <florian@knorke.saar.de>
-4 string Research, Digifax-G3-File
->29 byte 1 , fine resolution
->29 byte 0 , normal resolution
-
-0 short 0x0100 raw G3 data, byte-padded
-0 short 0x1400 raw G3 data
-#
-# Magic data for vgetty voice formats
-# (Martin Seine & Marc Eberhard)
-
-#
-# raw modem data version 1
-#
-0 string RMD1 raw modem data
->4 string >\0 (%s /
->20 short >0 compression type 0x%04x)
-
-#
-# portable voice format 1
-#
-0 string PVF1\n portable voice format
->5 string >\0 (binary %s)
-
-#
-# portable voice format 2
-#
-0 string PVF2\n portable voice format
->5 string >\0 (ascii %s)
-
-
-#------------------------------------------------------------------------------
-# xwindows: file(1) magic for various X/Window system file formats.
-
-# Compiled X Keymap
-# XKM (compiled X keymap) files (including version and byte ordering)
-1 string mkx Compiled XKB Keymap: lsb,
->0 byte >0 version %d
->0 byte =0 obsolete
-0 string xkm Compiled XKB Keymap: msb,
->3 byte >0 version %d
->0 byte =0 obsolete
-
-# xfsdump archive
-0 string xFSdump0 xfsdump archive
->8 long x (version %d)
-
-# Jaleo XFS files
-0 long 395726 Jaleo XFS file
->4 long x - version %ld
->8 long x - [%ld -
->20 long x \b%ldx
->24 long x \b%ldx
->28 long 1008 \bYUV422]
->28 long 1000 \bRGB24]
-
-#------------------------------------------------------------------------------
-# wordprocessors: file(1) magic fo word processors.
-#
-####### PWP file format used on Smith Corona Personal Word Processors:
-2 string \040\040\040\040\040\040\040\040\040\040\040ML4D\040\'92 Smith Corona PWP
->24 byte 2 \b, single spaced
->24 byte 3 \b, 1.5 spaced
->24 byte 4 \b, double spaced
->25 byte 0x42 \b, letter
->25 byte 0x54 \b, legal
->26 byte 0x46 \b, A4
-
-#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
-0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable text
->15 byte 0 Optimized for Intel
->15 byte 1 Optimized for Non-Intel
-1 string WPC (Corel/WP)
->8 short 257 WordPerfect macro
->8 short 258 WordPerfect help file
->8 short 259 WordPerfect keyboard file
->8 short 266 WordPerfect document
->8 short 267 WordPerfect dictionary
->8 short 268 WordPerfect thesaurus
->8 short 269 WordPerfect block
->8 short 270 WordPerfect rectangular block
->8 short 271 WordPerfect column block
->8 short 272 WordPerfect printer data
->8 short 275 WordPerfect printer data
->8 short 276 WordPerfect driver resource data
->8 short 279 WordPerfect hyphenation code
->8 short 280 WordPerfect hyphenation data
->8 short 281 WordPerfect macro resource data
->8 short 283 WordPerfect hyphenation lex
->8 short 285 WordPerfect wordlist
->8 short 286 WordPerfect equation resource data
->8 short 289 WordPerfect spell rules
->8 short 290 WordPerfect dictionary rules
->8 short 295 WordPerfect spell rules (Microlytics)
->8 short 299 WordPerfect settings file
->8 short 301 WordPerfect 4.2 document
->8 short 325 WordPerfect dialog file
->8 short 332 WordPerfect button bar
->8 short 513 Shell macro
->8 short 522 Shell definition
->8 short 769 Notebook macro
->8 short 770 Notebook help file
->8 short 771 Notebook keyboard file
->8 short 778 Notebook definition
->8 short 1026 Calculator help file
->8 short 1538 Calendar help file
->8 short 1546 Calendar data file
->8 short 1793 Editor macro
->8 short 1794 Editor help file
->8 short 1795 Editor keyboard file
->8 short 1817 Editor macro resource file
->8 short 2049 Macro editor macro
->8 short 2050 Macro editor help file
->8 short 2051 Macro editor keyboard file
->8 short 2305 PlanPerfect macro
->8 short 2306 PlanPerfect help file
->8 short 2307 PlanPerfect keyboard file
->8 short 2314 PlanPerfect worksheet
->8 short 2319 PlanPerfect printer definition
->8 short 2322 PlanPerfect graphic definition
->8 short 2323 PlanPerfect data
->8 short 2324 PlanPerfect temporary printer
->8 short 2329 PlanPerfect macro resource data
->8 byte 11 Mail
->8 short 2818 help file
->8 short 2821 distribution list
->8 short 2826 out box
->8 short 2827 in box
->8 short 2836 users archived mailbox
->8 short 2837 archived message database
->8 short 2838 archived attachments
->8 short 3083 Printer temporary file
->8 short 3330 Scheduler help file
->8 short 3338 Scheduler in file
->8 short 3339 Scheduler out file
->8 short 3594 GroupWise settings file
->8 short 3601 GroupWise directory services
->8 short 3627 GroupWise settings file
->8 short 4362 Terminal resource data
->8 short 4363 Terminal resource data
->8 short 4395 Terminal resource data
->8 short 4619 GUI loadable text
->8 short 4620 graphics resource data
->8 short 4621 printer settings file
->8 short 4622 port definition file
->8 short 4623 print queue parameters
->8 short 4624 compressed file
->8 short 5130 Network service msg file
->8 short 5131 Network service msg file
->8 short 5132 Async gateway login msg
->8 short 5134 GroupWise message file
->8 short 7956 GroupWise admin domain database
->8 short 7957 GroupWise admin host database
->8 short 7959 GroupWise admin remote host database
->8 short 7960 GroupWise admin ADS deferment data file
->8 short 8458 IntelliTAG (SGML) compiled DTD
->8 long 18219264 WordPerfect graphic image (1.0)
->8 long 18219520 WordPerfect graphic image (2.0)
-#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
-
-# Hangul (Korean) Word Processor File
-0 string HWP\ Document\ File Hangul (Korean) Word Processor File
-
-# CosmicBook, from Benoît Rouits
-0 string CSBK Ted Neslson's CosmicBook hypertext file
-
-
-#------------------------------------------------------------------------------
-# sun: file(1) magic for Sun machines
-#
-# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
-# releases. (5.x uses ELF.)
-#
-0 belong&077777777 0600413 sparc demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&077777777 0600410 sparc pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&077777777 0600407 sparc
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0400413 mc68020 demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->16 belong >0 not stripped
-0 belong&077777777 0400410 mc68020 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&077777777 0400407 mc68020
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0200413 mc68010 demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->16 belong >0 not stripped
-0 belong&077777777 0200410 mc68010 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&077777777 0200407 mc68010
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-# reworked these to avoid anything beginning with zero becoming "old sun-2"
-0 belong 0407 old sun-2 executable
->16 belong >0 not stripped
-0 belong 0410 old sun-2 pure executable
->16 belong >0 not stripped
-0 belong 0413 old sun-2 demand paged executable
->16 belong >0 not stripped
-
-#
-# Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
-# binary executed in compatibility mode under SunOS 5.x".
-#
-0 belong 0x080456 SunOS core file
->4 belong 432 (SPARC)
->>132 string >\0 from '%s'
->>116 belong =3 (quit)
->>116 belong =4 (illegal instruction)
->>116 belong =5 (trace trap)
->>116 belong =6 (abort)
->>116 belong =7 (emulator trap)
->>116 belong =8 (arithmetic exception)
->>116 belong =9 (kill)
->>116 belong =10 (bus error)
->>116 belong =11 (segmentation violation)
->>116 belong =12 (bad argument to system call)
->>116 belong =29 (resource lost)
->>120 belong x (T=%dK,
->>124 belong x D=%dK,
->>128 belong x S=%dK)
->4 belong 826 (68K)
->>128 string >\0 from '%s'
->4 belong 456 (SPARC 4.x BCP)
->>152 string >\0 from '%s'
-# Sun SunPC
-0 long 0xfa33c08e SunPC 4.0 Hard Disk
-0 string #SUNPC_CONFIG SunPC 4.0 Properties Values
-# Sun snoop (see RFC 1761, which describes the capture file format).
-#
-0 string snoop Snoop capture file
->8 belong >0 - version %ld
->12 belong 0 (IEEE 802.3)
->12 belong 1 (IEEE 802.4)
->12 belong 2 (IEEE 802.5)
->12 belong 3 (IEEE 802.6)
->12 belong 4 (Ethernet)
->12 belong 5 (HDLC)
->12 belong 6 (Character synchronous)
->12 belong 7 (IBM channel-to-channel adapter)
->12 belong 8 (FDDI)
->12 belong 9 (Unknown)
-
-# Microsoft ICM color profile
-36 string acspMSFT Microsoft ICM Color Profile
-# Sun KCMS
-36 string acsp Kodak Color Management System, ICC Profile
-
-#---------------------------------------------------------------------------
-# The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
-# lead Sun/Cobalt developer) who agrees that they are good and worthy of
-# inclusion.
-
-# Boot ROM images for Sun/Cobalt Linux server appliances
-0 string Cobalt\ Networks\ Inc.\nFirmware\ v Paged COBALT boot rom
->38 string x V%.4s
-
-# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
-# at the very end where file(1) can't get it.
-0 string CRfs COBALT boot rom data (Flat boot rom or file system)
-
-
-
-#------------------------------------------------------------------------------
-# Sketch Drawings: http://sketch.sourceforge.net/
-# From: Edwin Mons <e@ik.nu>
-0 string ##Sketch Sketch document text
-#------------------------------------------------------------------------------
-# bFLT: file(1) magic for BFLT uclinux binary files
-#
-# From Philippe De Muyter <phdm@macqel.be>
-#
-0 string bFLT BFLT executable
->4 belong x - version %ld
->4 belong 4
->>36 belong&0x1 0x1 ram
->>36 belong&0x2 0x2 gotpic
->>36 belong&0x4 0x4 gzip
->>36 belong&0x8 0x8 gzdata
-#
-# i80960 b.out objects and archives
-#
-0 long 0x10d i960 b.out relocatable object
->16 long >0 not stripped
-#
-# b.out archive (hp-rt on i960)
-0 string !<bout> b.out archive
->8 string __.SYMDEF random library
-
-#------------------------------------------------------------------------------
-# hitach-sh: file(1) magic for Hitachi Super-H
-#
-# Super-H COFF
-#
-0 beshort 0x0500 Hitachi SH big-endian COFF
->18 beshort&0x0002 =0x0000 object
->18 beshort&0x0002 =0x0002 executable
->18 beshort&0x0008 =0x0008 \b, stripped
->18 beshort&0x0008 =0x0000 \b, not stripped
-#
-0 leshort 0x0550 Hitachi SH little-endian COFF
->18 leshort&0x0002 =0x0000 object
->18 leshort&0x0002 =0x0002 executable
->18 leshort&0x0008 =0x0008 \b, stripped
->18 leshort&0x0008 =0x0000 \b, not stripped
-
-
-#------------------------------------------------------------------------------
-# matroska: file(1) magic for Matroska files
-#
-# See http://www.matroska.org/
-#
-
-# EBML id:
-0 belong 0x1a45dfa3
-# DocType id:
->5 beshort 0x4282
-# DocType contents:
->>8 string matroska Matroska data
-
-
-#------------------------------------------------------------------------------
-# ocaml: file(1) magic for Objective Caml files.
-0 string Caml1999 Objective caml
->8 string X exec file
->8 string I interface file (.cmi)
->8 string O object file (.cmo)
->8 string A library file (.cma)
->8 string Y native object file (.cmx)
->8 string Z native library file (.cmxa)
->8 string M abstract syntax tree implementation file
->8 string N abstract syntax tree interface file
->9 string >\0 (Version %3.3s).
-
-#------------------------------------------------------------------------------
-# vax: file(1) magic for VAX executable/object and APL workspace
-#
-0 lelong 0101557 VAX single precision APL workspace
-0 lelong 0101556 VAX double precision APL workspace
-
-#
-# VAX a.out (32V, BSD)
-#
-0 lelong 0407 VAX executable
->16 lelong >0 not stripped
-
-0 lelong 0410 VAX pure executable
->16 lelong >0 not stripped
-
-0 lelong 0413 VAX demand paged pure executable
->16 lelong >0 not stripped
-
-0 lelong 0420 VAX demand paged (first page unmapped) pure executable
->16 lelong >0 not stripped
-
-#
-# VAX COFF
-#
-# The `versions' should be un-commented if they work for you.
-# (Was the problem just one of endianness?)
-#
-0 leshort 0570 VAX COFF executable
->12 lelong >0 not stripped
->22 leshort >0 - version %ld
-0 leshort 0575 VAX COFF pure executable
->12 lelong >0 not stripped
->22 leshort >0 - version %ld
-
-#------------------------------------------------------------------------------
-# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper.
-#
-# XXX - what byte order does the Clipper use?
-#
-# XXX - what's the "!" stuff:
-#
-# >18 short !074000,000000 C1 R1
-# >18 short !074000,004000 C2 R1
-# >18 short !074000,010000 C3 R1
-# >18 short !074000,074000 TEST
-#
-# I shall assume it's ANDing the field with the first value and
-# comparing it with the second, and rewrite it as:
-#
-# >18 short&074000 000000 C1 R1
-# >18 short&074000 004000 C2 R1
-# >18 short&074000 010000 C3 R1
-# >18 short&074000 074000 TEST
-#
-# as SVR3.1's "file" doesn't support anything of the "!074000,000000"
-# sort, nor does SunOS 4.x, so either it's something Intergraph added
-# in CLIX, or something AT&T added in SVR3.2 or later, or something
-# somebody else thought was a good idea; it's not documented in the
-# man page for this version of "magic", nor does it appear to be
-# implemented (at least not after I blew off the bogus code to turn
-# old-style "&"s into new-style "&"s, which just didn't work at all).
-#
-0 short 0575 CLIPPER COFF executable (VAX #)
->20 short 0407 (impure)
->20 short 0410 (5.2 compatible)
->20 short 0411 (pure)
->20 short 0413 (demand paged)
->20 short 0443 (target shared library)
->12 long >0 not stripped
->22 short >0 - version %ld
-0 short 0577 CLIPPER COFF executable
->18 short&074000 000000 C1 R1
->18 short&074000 004000 C2 R1
->18 short&074000 010000 C3 R1
->18 short&074000 074000 TEST
->20 short 0407 (impure)
->20 short 0410 (pure)
->20 short 0411 (separate I&D)
->20 short 0413 (paged)
->20 short 0443 (target shared library)
->12 long >0 not stripped
->22 short >0 - version %ld
->48 long&01 01 alignment trap enabled
->52 byte 1 -Ctnc
->52 byte 2 -Ctsw
->52 byte 3 -Ctpw
->52 byte 4 -Ctcb
->53 byte 1 -Cdnc
->53 byte 2 -Cdsw
->53 byte 3 -Cdpw
->53 byte 4 -Cdcb
->54 byte 1 -Csnc
->54 byte 2 -Cssw
->54 byte 3 -Cspw
->54 byte 4 -Cscb
-4 string pipe CLIPPER instruction trace
-4 string prof CLIPPER instruction profile
-
-#------------------------------------------------------------------------------
-# frame: file(1) magic for FrameMaker files
-#
-# This stuff came on a FrameMaker demo tape, most of which is
-# copyright, but this file is "published" as witness the following:
-#
-0 string \<MakerFile FrameMaker document
->11 string 5.5 (5.5
->11 string 5.0 (5.0
->11 string 4.0 (4.0
->11 string 3.0 (3.0
->11 string 2.0 (2.0
->11 string 1.0 (1.0
->14 byte x %c)
-0 string \<MIFFile FrameMaker MIF (ASCII) file
->9 string 4.0 (4.0)
->9 string 3.0 (3.0)
->9 string 2.0 (2.0)
->9 string 1.0 (1.x)
-0 string \<MakerDictionary FrameMaker Dictionary text
->17 string 3.0 (3.0)
->17 string 2.0 (2.0)
->17 string 1.0 (1.x)
-0 string \<MakerScreenFont FrameMaker Font file
->17 string 1.01 (%s)
-0 string \<MML FrameMaker MML file
-0 string \<BookFile FrameMaker Book file
->10 string 3.0 (3.0
->10 string 2.0 (2.0
->10 string 1.0 (1.0
->13 byte x %c)
-# XXX - this book entry should be verified, if you find one, uncomment this
-#0 string \<Book\ FrameMaker Book (ASCII) file
-#>6 string 3.0 (3.0)
-#>6 string 2.0 (2.0)
-#>6 string 1.0 (1.0)
-0 string \<Maker Intermediate Print File FrameMaker IPL file
-
-#------------------------------------------------------------------------------
-# magic: file(1) magic for magic files
-#
-0 string #\ Magic magic text file for file(1) cmd
-0 lelong 0xF11E041C magic binary file for file(1) cmd
->4 lelong x (version %d) (little endian)
-0 belong 0xF11E041C magic binary file for file(1) cmd
->4 belong x (version %d) (big endian)
-
-#------------------------------------------------------------------------------
-# sql: file(1) magic for SQL files
-#
-# From: "Marty Leisner" <mleisner@eng.mc.xerox.com>
-# Recognize some MySQL files.
-#
-0 beshort 0xfe01 MySQL table definition file
->2 byte x Version %d
-0 belong&0xffffff00 0xfefe0300 MySQL MISAM index file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0700 MySQL MISAM compressed data file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0500 MySQL ISAM index file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0600 MySQL ISAM compressed data file
->3 byte x Version %d
-0 string \376bin MySQL replication log
-
-#------------------------------------------------------------------------------
-# dact: file(1) magic for DACT compressed files
-#
-0 long 0x444354C3 DACT compressed data
->4 byte >-1 (version %i.
->5 byte >-1 $BS%i.
->6 byte >-1 $BS%i)
->7 long >0 $BS, original size: %i bytes
->15 long >30 $BS, block size: %i bytes
-#
-# GNU nlsutils message catalog file format
-#
-0 string \336\22\4\225 GNU message catalog (little endian),
->4 lelong x revision %d,
->8 lelong x %d messages
-0 string \225\4\22\336 GNU message catalog (big endian),
->4 belong x revision %d,
->8 belong x %d messages
-# message catalogs, from Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>
-0 string *nazgul* Nazgul style compiled message catalog
->8 lelong >0 \b, version %ld
-# GnuPG
-# The format is very similar to pgp
-0 string \001gpg GPG key trust database
->4 byte x version %d
-0 beshort 0x9901 GPG key public ring
-# This magic is not particularly good, as the keyrings don't have true
-# magic. Nevertheless, it covers many keyrings.
-
-# Gnumeric spreadsheet
-# This entry is only semi-helpful, as Gnumeric compresses its files, so
-# they will ordinarily reported as "compressed", but at least -z helps
-39 string =<gmr:Workbook Gnumeric spreadsheet
-
-#------------------------------------------------------------------------------
-# ibm6000: file(1) magic for RS/6000 and the RT PC.
-#
-0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module
->12 belong >0 not stripped
-# Breaks sun4 statically linked execs.
-#0 beshort 0x0103 executable (RT Version 2) or obj module
-#>2 byte 0x50 pure
-#>28 belong >0 not stripped
-#>6 beshort >0 - version %ld
-0 beshort 0x0104 shared library
-0 beshort 0x0105 ctab data
-0 beshort 0xfe04 structured file
-0 string 0xabcdef AIX message catalog
-0 belong 0x000001f9 AIX compiled message catalog
-0 string \<aiaff> archive
-0 string \<bigaf> archive (big format)
-
-
-#------------------------------------------------------------------------------
-# os2: file(1) magic for OS/2 files
-#
-
-# Provided 1998/08/22 by
-# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
-1 string InternetShortcut MS Windows 95 Internet shortcut text
->24 string >\ (URL=<%s>)
-
-# OS/2 URL objects
-# Provided 1998/08/22 by
-# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
-#0 string http: OS/2 URL object text
-#>5 string >\ (WWW) <http:%s>
-#0 string mailto: OS/2 URL object text
-#>7 string >\ (email) <%s>
-#0 string news: OS/2 URL object text
-#>5 string >\ (Usenet) <%s>
-#0 string ftp: OS/2 URL object text
-#>4 string >\ (FTP) <ftp:%s>
-#0 string file: OS/2 URL object text
-#>5 string >\ (Local file) <%s>
-
-# >>>>> OS/2 INF/HLP <<<<< (source: Daniel Dissett ddissett@netcom.com)
-# Carl Hauser (chauser.parc@xerox.com) and
-# Marcus Groeber (marcusg@ph-cip.uni-koeln.de)
-# list the following header format in inf02a.doc:
-#
-# int16 ID; // ID magic word (5348h = "HS")
-# int8 unknown1; // unknown purpose, could be third letter of ID
-# int8 flags; // probably a flag word...
-# // bit 0: set if INF style file
-# // bit 4: set if HLP style file
-# // patching this byte allows reading HLP files
-# // using the VIEW command, while help files
-# // seem to work with INF settings here as well.
-# int16 hdrsize; // total size of header
-# int16 unknown2; // unknown purpose
-#
-0 string HSP\x01\x9b\x00 OS/2 INF
->107 string >0 (%s)
-0 string HSP\x10\x9b\x00 OS/2 HLP
->107 string >0 (%s)
-
-# OS/2 INI (this is a guess)
-0 string \xff\xff\xff\xff\x14\0\0\0 OS/2 INI
-#------------------------------------------------------------------------------
-#
-# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com)
-#
-0 beshort 0xedab
->2 beshort 0xeedb RPM
->>4 byte x v%d
->>6 beshort 0 bin
->>6 beshort 1 src
->>8 beshort 1 i386
->>8 beshort 2 Alpha
->>8 beshort 3 Sparc
->>8 beshort 4 MIPS
->>8 beshort 5 PowerPC
->>8 beshort 6 68000
->>8 beshort 7 SGI
->>8 beshort 8 RS6000
->>8 beshort 9 IA64
->>8 beshort 10 Sparc64
->>8 beshort 11 MIPSel
->>8 beshort 12 ARM
->>10 string x %s
-#-----------------------------------------------------------------------------
-# misctools: file(1) magic for miscelanous UNIX tools.
-#
-0 string %%!! X-Post-It-Note text
-0 string BEGIN:VCALENDAR vCalendar calendar file
-
-#------------------------------------------------------------------------------
-# motorola: file(1) magic for Motorola 68K and 88K binaries
-#
-# 68K
-#
-0 beshort 0520 mc68k COFF
->18 beshort ^00000020 object
->18 beshort &00000020 executable
->12 belong >0 not stripped
->168 string .lowmem Apple toolbox
->20 beshort 0407 (impure)
->20 beshort 0410 (pure)
->20 beshort 0413 (demand paged)
->20 beshort 0421 (standalone)
-0 beshort 0521 mc68k executable (shared)
->12 belong >0 not stripped
-0 beshort 0522 mc68k executable (shared demand paged)
->12 belong >0 not stripped
-#
-# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
-#
-0 beshort 0554 68K BCS executable
-#
-# 88K
-#
-# Motorola/88Open BCS
-#
-0 beshort 0555 88K BCS executable
-#
-# Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
-0 string S0 Motorola S-Record; binary data in text format
-
-# ATARI ST relocatable PRG
-#
-# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001
-# (according to Roland Waldi, Oct 21, 1987)
-# besides the magic 0x601a, the text segment size is checked to be
-# not larger than 1 MB (which is a lot on ST).
-# The additional 0x601b distinction I took from Doug Lee's magic.
-0 belong&0xFFFFFFF0 0x601A0000 Atari ST M68K contiguous executable
->2 belong x (txt=%ld,
->6 belong x dat=%ld,
->10 belong x bss=%ld,
->14 belong x sym=%ld)
-0 belong&0xFFFFFFF0 0x601B0000 Atari ST M68K non-contig executable
->2 belong x (txt=%ld,
->6 belong x dat=%ld,
->10 belong x bss=%ld,
->14 belong x sym=%ld)
-
-# Atari ST/TT... program format (sent by Wolfram Kleff <kleff@cs.uni-bonn.de>)
-0 beshort 0x601A Atari 68xxx executable,
->2 belong x text len %lu,
->6 belong x data len %lu,
->10 belong x BSS len %lu,
->14 belong x symboltab len %lu,
->18 belong 0
->22 belong &0x01 fastload flag,
->22 belong &0x02 may be loaded to alternate RAM,
->22 belong &0x04 malloc may be from alternate RAM,
->22 belong x flags: 0x%lX,
->26 beshort 0 no relocation tab
->26 beshort !0 + relocation tab
->30 string SFX [Self-Extracting LZH SFX archive]
->38 string SFX [Self-Extracting LZH SFX archive]
->44 string ZIP! [Self-Extracting ZIP SFX archive]
-
-0 beshort 0x0064 Atari 68xxx CPX file
->8 beshort x (version %04lx)
-#
-# Mach magic number info
-#
-0 long 0xefbe OSF/Rose object
-# I386 magic number info
-#
-0 short 0565 i386 COFF object
-
-#------------------------------------------------------------------------------
-# perl: file(1) magic for Larry Wall's perl language.
-#
-# The ``eval'' line recognizes an outrageously clever hack for USG systems.
-# Keith Waclena <keith@cerberus.uchicago.edu>
-# Send additions to <perl5-porters@perl.org>
-0 string/b #!\ /bin/perl perl script text executable
-0 string eval\ "exec\ /bin/perl perl script text
-0 string/b #!\ /usr/bin/perl perl script text executable
-0 string eval\ "exec\ /usr/bin/perl perl script text
-0 string/b #!\ /usr/local/bin/perl perl script text
-0 string eval\ "exec\ /usr/local/bin/perl perl script text executable
-0 string eval\ '(exit\ $?0)'\ &&\ eval\ 'exec perl script text
-
-# a couple more, by me
-# XXX: christos matches
-#0 regex package Perl5 module source text (via regex)
-0 string package Perl5 module source text
-
-# Perl Storable data files.
-0 string perl-store perl Storable(v0.6) data
->4 byte >0 (net-order %d)
->>4 byte &01 (network-ordered)
->>4 byte =3 (major 1)
->>4 byte =2 (major 1)
-
-0 string pst0 perl Storable(v0.7) data
->4 byte >0
->>4 byte &01 (network-ordered)
->>4 byte =5 (major 2)
->>4 byte =4 (major 2)
->>5 byte >0 (minor %d)
-
-#------------------------------------------------------------------------------
-# xenix: file(1) magic for Microsoft Xenix
-#
-# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
-# model" lifted from "magic.xenix", with comment "derived empirically;
-# treat as folklore until proven"
-#
-# "small model", "large model", "huge model" stuff lifted from XXX
-#
-# XXX - "x.out" collides with PDP-11 archives
-#
-0 string core core file (Xenix)
-0 byte 0x80 8086 relocatable (Microsoft)
-0 leshort 0xff65 x.out
->2 string __.SYMDEF randomized
->0 byte x archive
-0 leshort 0x206 Microsoft a.out
->8 leshort 1 Middle model
->0x1e leshort &0x10 overlay
->0x1e leshort &0x2 separate
->0x1e leshort &0x4 pure
->0x1e leshort &0x800 segmented
->0x1e leshort &0x400 standalone
->0x1e leshort &0x8 fixed-stack
->0x1c byte &0x80 byte-swapped
->0x1c byte &0x40 word-swapped
->0x10 lelong >0 not-stripped
->0x1e leshort ^0xc000 pre-SysV
->0x1e leshort &0x4000 V2.3
->0x1e leshort &0x8000 V3.0
->0x1c byte &0x4 86
->0x1c byte &0xb 186
->0x1c byte &0x9 286
->0x1c byte &0xa 386
->0x1f byte <0x040 small model
->0x1f byte =0x048 large model
->0x1f byte =0x049 huge model
->0x1e leshort &0x1 executable
->0x1e leshort ^0x1 object file
->0x1e leshort &0x40 Large Text
->0x1e leshort &0x20 Large Data
->0x1e leshort &0x120 Huge Objects Enabled
->0x10 lelong >0 not stripped
-
-0 leshort 0x140 old Microsoft 8086 x.out
->0x3 byte &0x4 separate
->0x3 byte &0x2 pure
->0 byte &0x1 executable
->0 byte ^0x1 relocatable
->0x14 lelong >0 not stripped
-
-0 lelong 0x206 b.out
->0x1e leshort &0x10 overlay
->0x1e leshort &0x2 separate
->0x1e leshort &0x4 pure
->0x1e leshort &0x800 segmented
->0x1e leshort &0x400 standalone
->0x1e leshort &0x1 executable
->0x1e leshort ^0x1 object file
->0x1e leshort &0x4000 V2.3
->0x1e leshort &0x8000 V3.0
->0x1c byte &0x4 86
->0x1c byte &0xb 186
->0x1c byte &0x9 286
->0x1c byte &0x29 286
->0x1c byte &0xa 386
->0x1e leshort &0x4 Large Text
->0x1e leshort &0x2 Large Data
->0x1e leshort &0x102 Huge Objects Enabled
-
-0 leshort 0x580 XENIX 8086 relocatable or 80286 small model
-#------------------------------------------------------------------------------
-# file(1) magic for tgif(1) files
-# From Hendrik Scholz <hendrik@scholz.net>
-
-0 string %TGIF\ 4 tgif version 4 object file
-
-
-#------------------------------------------------------------------------------
-# sc: file(1) magic for "sc" spreadsheet
-#
-38 string Spreadsheet sc spreadsheet file
-
-#------------------------------------------------------------------------------
-# pyramid: file(1) magic for Pyramids
-#
-# XXX - byte order?
-#
-0 long 0x50900107 Pyramid 90x family executable
-0 long 0x50900108 Pyramid 90x family pure executable
->16 long >0 not stripped
-0 long 0x5090010b Pyramid 90x family demand paged pure executable
->16 long >0 not stripped
-
-#------------------------------------------------------------------------------
-# adventure: file(1) magic for Adventure game files
-#
-# from Allen Garvin <earendil@faeryland.tamu-commerce.edu>
-# Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998
-# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
-#
-# ALAN
-# I assume there are other, lower versions, but these are the only ones I
-# saw in the archive.
-0 beshort 0x0206 ALAN game data
->2 byte <10 version 2.6%d
-
-# Conflicts with too much other stuff!
-# Infocom
-# (Note: to avoid false matches Z-machine version 1 and 2 are not
-# recognized since only the oldest Zork I and II used them. Similarly
-# there are 4 Infocom games that use version 4 that are not recognized.)
-#0 byte 3 Infocom game data (Z-machine 3,
-#>2 beshort <0x7fff Release %3d,
-#>26 beshort >0 Size %d*2
-#>18 string >\0 Serial %.6s)
-#0 byte 5 Infocom game data (Z-machine 5,
-#>2 beshort <0x7fff Release %3d,
-#>26 beshort >0 Size %d*4
-#>18 string >\0 Serial %.6s)
-#0 byte 6 Infocom game data (Z-machine 6,
-#>2 beshort <0x7fff Release %3d,
-#>26 beshort >0 Size %d*8
-#>18 string >\0 Serial %.6s)
-#0 byte 8 Infocom game data (Z-machine 8,
-#>2 beshort <0x7fff Release %3d,
-#>26 beshort >0 Size %d*8
-#>18 string >\0 Serial %.6s)
-
-# TADS (Text Adventure Development System)
-# All files are machine-independent (games compile to byte-code) and are tagged
-# with a version string of the form "V2.<digit>.<digit>\0" (but TADS 3 is
-# on the way).
-# Game files start with "TADS2 bin\n\r\032\0" then the compiler version.
-0 string TADS2\ bin TADS
->9 belong !0x0A0D1A00 game data, CORRUPTED
->9 belong 0x0A0D1A00
->>13 string >\0 %s game data
-# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
-0 string TADS2\ rsc TADS
->9 belong !0x0A0D1A00 resource data, CORRUPTED
->9 belong 0x0A0D1A00
->>13 string >\0 %s resource data
-# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
-# 2-byte length N, the N-char name of the game file *without* a NUL (darn!),
-# "TADS2 save\n\r\032\0" and the interpreter version.
-0 string TADS2\ save/g TADS
->12 belong !0x0A0D1A00 saved game data, CORRUPTED
->12 belong 0x0A0D1A00
->>(16.s+32) string >\0 %s saved game data
-# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
-# version.
-0 string TADS2\ save TADS
->10 belong !0x0A0D1A00 saved game data, CORRUPTED
->10 belong 0x0A0D1A00
->>14 string >\0 %s saved game data
-
-#------------------------------------------------------------------------------
-# att3b: file(1) magic for AT&T 3B machines
-#
-# The `versions' should be un-commented if they work for you.
-# (Was the problem just one of endianness?)
-#
-# 3B20
-#
-# The 3B20 conflicts with SCCS.
-#0 beshort 0550 3b20 COFF executable
-#>12 belong >0 not stripped
-#>22 beshort >0 - version %ld
-#0 beshort 0551 3b20 COFF executable (TV)
-#>12 belong >0 not stripped
-#>22 beshort >0 - version %ld
-#
-# WE32K
-#
-0 beshort 0560 WE32000 COFF
->18 beshort ^00000020 object
->18 beshort &00000020 executable
->12 belong >0 not stripped
->18 beshort ^00010000 N/A on 3b2/300 w/paging
->18 beshort &00020000 32100 required
->18 beshort &00040000 and MAU hardware required
->20 beshort 0407 (impure)
->20 beshort 0410 (pure)
->20 beshort 0413 (demand paged)
->20 beshort 0443 (target shared library)
->22 beshort >0 - version %ld
-0 beshort 0561 WE32000 COFF executable (TV)
->12 belong >0 not stripped
-#>18 beshort &00020000 - 32100 required
-#>18 beshort &00040000 and MAU hardware required
-#>22 beshort >0 - version %ld
-#
-# core file for 3b2
-0 string \000\004\036\212\200 3b2 core file
->364 string >\0 of '%s'
-
-#------------------------------------------------------------------------------
-# flash: file(1) magic for Macromedia Flash file format
-#
-# See
-#
-# http://www.macromedia.com/software/flash/open/
-#
-0 string FWS Macromedia Flash data,
->3 byte x version %d
-0 string CWS Macromedia Flash data (compressed),
->3 byte x version %d
-#
-# From Dave Wilson
-0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document
-
-#------------------------------------------------------------------------------
-# karma: file(1) magic for Karma data files
-#
-# From <rgooch@atnf.csiro.au>
-
-0 string KarmaRHD Version Karma Data Structure Version
->16 belong x %lu
-#------------------------------------------------------------------------------
-# octave binary data file(1) magic, from Dirk Eddelbuettel <edd@debian.org>
-0 string Octave-1-L Octave binary data (little endian)
-0 string Octave-1-B Octave binary data (big endian)
-
-#------------------------------------------------------------------------------
-#
-# Parix COFF executables
-# From: Ignatios Souvatzis <ignatios@cs.uni-bonn.de>
-#
-0 beshort&0xfff 0xACE PARIX
->0 byte&0xf0 0x80 T800
->0 byte&0xf0 0x90 T9000
->19 byte&0x02 0x02 executable
->19 byte&0x02 0x00 object
->19 byte&0x0c 0x00 not stripped
-
-#------------------------------------------------------------------------------
-# plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables
-# From: "Stefan A. Haubenthal" <polluks@web.de>
-#
-0 belong 0x00000107 Plan 9 executable, Motorola 68k
-0 belong 0x000001EB Plan 9 executable, Intel 386
-0 belong 0x00000247 Plan 9 executable, Intel 960
-0 belong 0x000002AB Plan 9 executable, SPARC
-0 belong 0x00000407 Plan 9 executable, MIPS R3000
-0 belong 0x0000048B Plan 9 executable, AT&T DSP 3210
-0 belong 0x00000517 Plan 9 executable, MIPS R4000 BE
-0 belong 0x000005AB Plan 9 executable, AMD 29000
-0 belong 0x00000647 Plan 9 executable, ARM 7-something
-0 belong 0x000006EB Plan 9 executable, PowerPC
-0 belong 0x00000797 Plan 9 executable, MIPS R4000 LE
-0 belong 0x0000084B Plan 9 executable, DEC Alpha
-
-#------------------------------------------------------------------------------
-# troff: file(1) magic for *roff
-#
-# updated by Daniel Quinlan (quinlan@yggdrasil.com)
-
-# troff input
-0 string .\\" troff or preprocessor input text
-0 string '\\" troff or preprocessor input text
-0 string '.\\" troff or preprocessor input text
-0 string \\" troff or preprocessor input text
-0 string ''' troff or preprocessor input text
-
-# ditroff intermediate output text
-0 string x\ T ditroff output text
->4 string cat for the C/A/T phototypesetter
->4 string ps for PostScript
->4 string dvi for DVI
->4 string ascii for ASCII
->4 string lj4 for LaserJet 4
->4 string latin1 for ISO 8859-1 (Latin 1)
->4 string X75 for xditview at 75dpi
->>7 string -12 (12pt)
->4 string X100 for xditview at 100dpi
->>8 string -12 (12pt)
-
-# output data formats
-0 string \100\357 very old (C/A/T) troff output data
-
-#------------------------------------------------------------------------------
-# spectrum: file(1) magic for Spectrum emulator files.
-#
-# John Elliott <jce@seasip.demon.co.uk>
-
-#
-# Spectrum +3DOS header
-#
-0 string PLUS3DOS\032 Spectrum +3 data
->15 byte 0 - BASIC program
->15 byte 1 - number array
->15 byte 2 - character array
->15 byte 3 - memory block
->>16 belong 0x001B0040 (screen)
->15 byte 4 - Tasword document
->15 string TAPEFILE - ZXT tapefile
-#
-# Tape file. This assumes the .TAP starts with a Spectrum-format header,
-# which nearly all will.
-#
-0 string \023\000\000 Spectrum .TAP data
->4 string x "%-10.10s"
->3 byte 0 - BASIC program
->3 byte 1 - number array
->3 byte 2 - character array
->3 byte 3 - memory block
->>14 belong 0x001B0040 (screen)
-
-# The following three blocks are from pak21-spectrum@srcf.ucam.org
-# TZX tape images
-0 string ZXTape!\x1a Spectrum .TZX data
->8 byte x version %d
->9 byte x .%d
-
-# RZX input recording files
-0 string RZX! Spectrum .RZX data
->4 byte x version %d
->5 byte x .%d
-
-# And three sorts of disk image
-0 string MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data
-0 string MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data
-0 string EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data
-
-#------------------------------------------------------------------------------
-# softquad: file(1) magic for SoftQuad Publishing Software
-#
-# Author/Editor and RulesBuilder
-#
-# XXX - byte order?
-#
-0 string \<!SQ\ DTD> Compiled SGML rules file
->9 string >\0 Type %s
-0 string \<!SQ\ A/E> A/E SGML Document binary
->9 string >\0 Type %s
-0 string \<!SQ\ STS> A/E SGML binary styles file
->9 string >\0 Type %s
-0 short 0xc0de Compiled PSI (v1) data
-0 short 0xc0da Compiled PSI (v2) data
->3 string >\0 (%s)
-# Binary sqtroff font/desc files...
-0 short 0125252 SoftQuad DESC or font file binary
->2 short >0 - version %d
-# Bitmaps...
-0 string SQ\ BITMAP1 SoftQuad Raster Format text
-#0 string SQ\ BITMAP2 SoftQuad Raster Format data
-# sqtroff intermediate language (replacement for ditroff int. lang.)
-0 string X\ SoftQuad troff Context intermediate
->2 string 495 for AT&T 495 laser printer
->2 string hp for Hewlett-Packard LaserJet
->2 string impr for IMAGEN imPRESS
->2 string ps for PostScript
-
-#------------------------------------------------------------------------------
-# Dyadic: file(1) magic for Dyalog APL.
-#
-0 byte 0xaa
->1 byte <4 Dyalog APL
->>1 byte 0x00 incomplete workspace
->>1 byte 0x01 component file
->>1 byte 0x02 external variable
->>1 byte 0x03 workspace
->>2 byte x version %d
->>3 byte x .%d
-
-#------------------------------------------------------------------------------
-# palm: file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks
-#
-# Brian Lalor <blalor@hcirisc.cs.binghamton.edu>
-
-# appl
-60 belong 0x6170706c PalmOS application
->0 string >\0 "%s"
-# TEXt
-60 belong 0x54455874 AportisDoc file
->0 string >\0 "%s"
-# HACK
-60 belong 0x4841434b HackMaster hack
->0 string >\0 "%s"
-
-# Variety of PalmOS document types
-# Michael-John Turner <mj@debian.org>
-# Thanks to Hasan Umit Ezerce <humit@tr-net.net.tr> for his DocType
-60 string BVokBDIC BDicty PalmOS document
->0 string >\0 "%s"
-60 string DB99DBOS DB PalmOS document
->0 string >\0 "%s"
-60 string vIMGView FireViewer/ImageViewer PalmOS document
->0 string >\0 "%s"
-60 string PmDBPmDB HanDBase PalmOS document
->0 string >\0 "%s"
-60 string InfoINDB InfoView PalmOS document
->0 string >\0 "%s"
-60 string ToGoToGo iSilo PalmOS document
->0 string >\0 "%s"
-60 string JfDbJBas JFile PalmOS document
->0 string >\0 "%s"
-60 string JfDbJFil JFile Pro PalmOS document
->0 string >\0 "%s"
-60 string DATALSdb List PalmOS document
->0 string >\0 "%s"
-60 string Mdb1Mdb1 MobileDB PalmOS document
->0 string >\0 "%s"
-60 string PNRdPPrs PeanutPress PalmOS document
->0 string >\0 "%s"
-60 string DataPlkr Plucker PalmOS document
->0 string >\0 "%s"
-60 string DataSprd QuickSheet PalmOS document
->0 string >\0 "%s"
-60 string SM01SMem SuperMemo PalmOS document
->0 string >\0 "%s"
-60 string DataTlPt TealDoc PalmOS document
->0 string >\0 "%s"
-60 string InfoTlIf TealInfo PalmOS document
->0 string >\0 "%s"
-60 string DataTlMl TealMeal PalmOS document
->0 string >\0 "%s"
-60 string DataTlPt TealPaint PalmOS document
->0 string >\0 "%s"
-60 string dataTDBP ThinkDB PalmOS document
->0 string >\0 "%s"
-60 string TdatTide Tides PalmOS document
->0 string >\0 "%s"
-60 string ToRaTRPW TomeRaider PalmOS document
->0 string >\0 "%s"
-
-# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net)
-# For version 1.xx zTXTs, outputs version and numbers of bookmarks and
-# annotations.
-# For other versions, just outputs version.
-#
-60 string zTXT A GutenPalm zTXT e-book
->0 string >\0 "%s"
->(0x4E.L) byte 0
->>(0x4E.L+1) byte x (v0.%02d)
->(0x4E.L) byte 1
->>(0x4E.L+1) byte x (v1.%02d)
->>>(0x4E.L+10) beshort >0
->>>>(0x4E.L+10) beshort <2 - 1 bookmark
->>>>(0x4E.L+10) beshort >1 - %d bookmarks
->>>(0x4E.L+14) beshort >0
->>>>(0x4E.L+14) beshort <2 - 1 annotation
->>>>(0x4E.L+14) beshort >1 - %d annotations
->(0x4E.L) byte >1 (v%d.
->>(0x4E.L+1) byte x %02d)
-
-# Palm OS .prc file types
-60 string libr Palm OS dynamic library data
->0 string >\0 "%s"
-60 string ptch Palm OS operating system patch data
->0 string >\0 "%s"
-
-# Mobipocket (www.mobipocket.com), donated by Carl Witty
-60 string BOOKMOBI Mobipocket E-book
->0 string >\0 "%s"
-#------------------------------------------------------------------------------
-# pdf: file(1) magic for Portable Document Format
-#
-
-0 string %PDF- PDF document
->5 byte x \b, version %c
->7 byte x \b.%c
-
-#------------------------------------------------------------------------------
-# vorbis: file(1) magic for Ogg/Vorbis files
-#
-# From Felix von Leitner <leitner@fefe.de>
-# Extended by Beni Cherniavsky <cben@crosswinds.net>
-# Further extended by Greg Wooledge <greg@wooledge.org>
-#
-# Most (everything but the number of channels and bitrate) is commented
-# out with `##' as it's not interesting to the average user. The most
-# probable things advanced users would want to uncomment are probably
-# the number of comments and the encoder version.
-#
-# --- Ogg Framing ---
-0 string OggS Ogg data
->4 byte !0 UNKNOWN REVISION %u
-##>4 byte 0 revision 0
->4 byte 0
-##>>14 lelong x (Serial %lX)
-# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
->>28 string fLaC \b, FLAC audio
-# non-Vorbis content: Theora
->>28 string \x80theora \b, Theora video
-# non-Vorbis content: Speex
->>28 string Speex\ \ \ \b, Speex audio
-# non-Vorbis content: OGM
->>28 string \x01video\0\0\0 \b, OGM video
->>>37 string/c div3 (DivX 3)
->>>37 string/c divx (DivX 4)
->>>37 string/c dx50 (DivX 5)
->>>37 string/c xvid (XviD)
-# --- First vorbis packet - general header ---
->>28 string \x01vorbis \b, Vorbis audio,
->>>35 lelong !0 UNKNOWN VERSION %lu,
-##>>>35 lelong 0 version 0,
->>>35 lelong 0
->>>>39 ubyte 1 mono,
->>>>39 ubyte 2 stereo,
->>>>39 ubyte >2 %u channels,
->>>>40 lelong x %lu Hz
-# Minimal, nominal and maximal bitrates specified when encoding
->>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b,
-# The above tests if at least one of these is specified:
->>>>>52 lelong !-1
-# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
-# instead of -1.
-# Vorbis 1.0 uses 0 instead of -1.
->>>>>>52 lelong !0
->>>>>>>52 lelong !-1000
->>>>>>>>52 lelong x <%lu
->>>>>48 lelong !-1
->>>>>>48 lelong x ~%lu
->>>>>44 lelong !-1
->>>>>>44 lelong !-1000
->>>>>>>44 lelong !0
->>>>>>>>44 lelong x >%lu
->>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps
-# -- Second vorbis header packet - the comments
-# A kludge to read the vendor string. It's a counted string, not a
-# zero-terminated one, so file(1) can't read it in a generic way.
-# libVorbis is the only one existing currently, so I detect specifically
-# it. The interesting value is the cvs date (8 digits decimal).
-# Post-RC1 Ogg files have the second header packet (and thus the version)
-# in a different place, so we must use an indirect offset.
->>>(84.b+85) string \x03vorbis
->>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I
->>>>>(84.b+120) string >00000000
-# Map to beta version numbers:
->>>>>>(84.b+120) string <20000508 (<beta1, prepublic)
->>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2)
->>>>>>(84.b+120) string >20000508
->>>>>>>(84.b+120) string <20001031 (beta2-3)
->>>>>>(84.b+120) string 20001031 (1.0 beta 3)
->>>>>>(84.b+120) string >20001031
->>>>>>>(84.b+120) string <20010225 (beta3-4)
->>>>>>(84.b+120) string 20010225 (1.0 beta 4)
->>>>>>(84.b+120) string >20010225
->>>>>>>(84.b+120) string <20010615 (beta4-RC1)
->>>>>>(84.b+120) string 20010615 (1.0 RC1)
->>>>>>(84.b+120) string 20010813 (1.0 RC2)
->>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1)
->>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2)
->>>>>>(84.b+120) string 20011217 (1.0 RC3)
->>>>>>(84.b+120) string 20011231 (1.0 RC3)
-# Some pre-1.0 CVS snapshots still had "Xiphphorus"...
->>>>>>(84.b+120) string >20011231 (pre-1.0 CVS)
-# For the 1.0 release, Xiphophorus is replaced by Xiph.Org
->>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I
->>>>>(84.b+117) string >00000000
->>>>>>(84.b+117) string <20020717 (pre-1.0 CVS)
->>>>>>(84.b+117) string 20020717 (1.0)
->>>>>>(84.b+117) string 20030909 (1.0.1)
->>>>>>(84.b+117) string 20040629 (1.1.0 RC1)
-
-#-----------------------------------------------
-# GNU Smalltalk image, starting at version 1.6.2
-# From: catull_us@yahoo.com
-#
-0 string GSTIm\0\0 GNU SmallTalk
-# little-endian
->7 byte&1 =0 LE image version
->>10 byte x %d.
->>9 byte x \b%d.
->>8 byte x \b%d
-#>>12 lelong x , data: %ld
-#>>16 lelong x , table: %ld
-#>>20 lelong x , memory: %ld
-# big-endian
->7 byte&1 =1 BE image version
->>8 byte x %d.
->>9 byte x \b%d.
->>10 byte x \b%d
-#>>12 belong x , data: %ld
-#>>16 belong x , table: %ld
-#>>20 belong x , memory: %ld
-
-
-
-#------------------------------------------------------------------------------
-# sgml: file(1) magic for Standard Generalized Markup Language
-# HyperText Markup Language (HTML) is an SGML document type,
-# from Daniel Quinlan (quinlan@yggdrasil.com)
-# adapted to string extenstions by Anthon van der Neut <anthon@mnt.org)
-0 string/cB \<!DOCTYPE\ html HTML document text
-0 string/cb \<head HTML document text
-0 string/cb \<title HTML document text
-0 string/cb \<html HTML document text
-
-# Extensible markup language (XML), a subset of SGML
-# from Marc Prud'hommeaux (marc@apocalypse.org)
-0 string/cb \<?xml XML document text
-0 string \<?xml\ version " XML
-0 string \<?xml\ version=" XML
->15 string >\0 %.3s document text
->>23 string \<xsl:stylesheet (XSL stylesheet)
->>24 string \<xsl:stylesheet (XSL stylesheet)
-0 string/b \<?xml XML document text
-0 string/cb \<?xml broken XML document text
-
-
-# SGML, mostly from rph@sq
-0 string/cb \<!doctype exported SGML document text
-0 string/cb \<!subdoc exported SGML subdocument text
-0 string/cb \<!-- exported SGML document text
-
-# Web browser cookie files
-# (Mozilla, Galeon, Netscape 4, Konqueror..)
-# Ulf Harnhammar <ulfh@update.uu.se>
-0 string #\ HTTP\ Cookie\ File Web browser cookie text
-0 string #\ Netscape\ HTTP\ Cookie\ File Netscape cookie text
-0 string #\ KDE\ Cookie\ File Konqueror cookie text
-
-#------------------------------------------------------------------------------
-# msvc: file(1) magic for msvc
-# "H. Nanosecond" <aldomel@ix.netcom.com>
-# Microsoft visual C
-#
-# I have version 1.0
-
-# .aps
-0 string HWB\000\377\001\000\000\000 Microsoft Visual C .APS file
-
-# .ide
-#too long 0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157\152\145\143\164\040\106\151\154\145\012\000\032\000\002\000\262\000\272\276\372\316 MSVC .ide
-0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157 MSVC .ide
-
-# .res
-0 string \000\000\000\000\040\000\000\000\377 MSVC .res
-0 string \377\003\000\377\001\000\020\020\350 MSVC .res
-0 string \377\003\000\377\001\000\060\020\350 MSVC .res
-
-#.lib
-0 string \360\015\000\000 Microsoft Visual C library
-0 string \360\075\000\000 Microsoft Visual C library
-0 string \360\175\000\000 Microsoft Visual C library
-
-#.pch
-0 string DTJPCH0\000\022\103\006\200 Microsoft Visual C .pch
-
-# .pdb
-# too long 0 string Microsoft\ C/C++\ program\ database\
-0 string Microsoft\ C/C++\ MSVC program database
->18 string program\ database\
->33 string >\0 ver %s
-
-#.sbr
-0 string \000\002\000\007\000 MSVC .sbr
->5 string >\0 %s
-
-#.bsc
-0 string \002\000\002\001 MSVC .bsc
-
-#.wsp
-0 string 1.00\ .0000.0000\000\003 MSVC .wsp version 1.0000.0000
-# these seem to start with the version and contain menus
-
-#------------------------------------------------------------------------------
-# news: file(1) magic for SunOS NeWS fonts (not "news" as in "netnews")
-#
-0 string StartFontMetrics ASCII font metrics
-0 string StartFont ASCII font bits
-0 belong 0x137A2944 NeWS bitmap font
-0 belong 0x137A2947 NeWS font family
-0 belong 0x137A2950 scalable OpenFont binary
-0 belong 0x137A2951 encrypted scalable OpenFont binary
-8 belong 0x137A2B45 X11/NeWS bitmap font
-8 belong 0x137A2B48 X11/NeWS font family
-
-# -----------------------------------------------------------
-# VMware specific files (deducted from version 1.1 and log file entries)
-# Anthon van der Neut (anthon@mnt.org)
-0 belong 0x4d52564e VMware nvram
-0 belong 0x434f5744 VMware
->4 byte 3 virtual disk
->>32 lelong x (%d/
->>36 lelong x \b%d/
->>40 lelong x \b%d)
->4 byte 2 undoable disk
->>32 string >\0 (%s)
-
-#------------------------------------------------------------------------------
-# diamond: file(1) magic for Diamond system
-#
-# ... diamond is a multi-media mail and electronic conferencing system....
-#
-# XXX - I think it was either renamed Slate, or replaced by Slate....
-#
-# The full deal is too long...
-#0 string <list>\n<protocol\ bbn-multimedia-format> Diamond Multimedia Document
-0 string =<list>\n<protocol\ bbn-m Diamond Multimedia Document
-
-#------------------------------------------------------------------------------
-# dump: file(1) magic for dump file format--for new and old dump filesystems
-#
-# We specify both byte orders in order to recognize byte-swapped dumps.
-#
-24 belong 60012 new-fs dump file (big endian),
->4 bedate x Previous dump %s,
->8 bedate x This dump %s,
->12 belong >0 Volume %ld,
->692 belong 0 Level zero, type:
->692 belong >0 Level %d, type:
->0 belong 1 tape header,
->0 belong 2 beginning of file record,
->0 belong 3 map of inodes on tape,
->0 belong 4 continuation of file record,
->0 belong 5 end of volume,
->0 belong 6 map of inodes deleted,
->0 belong 7 end of medium (for floppy),
->676 string >\0 Label %s,
->696 string >\0 Filesystem %s,
->760 string >\0 Device %s,
->824 string >\0 Host %s,
->888 belong >0 Flags %x
-
-24 belong 60011 old-fs dump file (big endian),
-#>4 bedate x Previous dump %s,
-#>8 bedate x This dump %s,
->12 belong >0 Volume %ld,
->692 belong 0 Level zero, type:
->692 belong >0 Level %d, type:
->0 belong 1 tape header,
->0 belong 2 beginning of file record,
->0 belong 3 map of inodes on tape,
->0 belong 4 continuation of file record,
->0 belong 5 end of volume,
->0 belong 6 map of inodes deleted,
->0 belong 7 end of medium (for floppy),
->676 string >\0 Label %s,
->696 string >\0 Filesystem %s,
->760 string >\0 Device %s,
->824 string >\0 Host %s,
->888 belong >0 Flags %x
-
-24 lelong 60012 new-fs dump file (little endian),
->4 ledate x This dump %s,
->8 ledate x Previous dump %s,
->12 lelong >0 Volume %ld,
->692 lelong 0 Level zero, type:
->692 lelong >0 Level %d, type:
->0 lelong 1 tape header,
->0 lelong 2 beginning of file record,
->0 lelong 3 map of inodes on tape,
->0 lelong 4 continuation of file record,
->0 lelong 5 end of volume,
->0 lelong 6 map of inodes deleted,
->0 lelong 7 end of medium (for floppy),
->676 string >\0 Label %s,
->696 string >\0 Filesystem %s,
->760 string >\0 Device %s,
->824 string >\0 Host %s,
->888 lelong >0 Flags %x
-
-24 lelong 60011 old-fs dump file (little endian),
-#>4 ledate x Previous dump %s,
-#>8 ledate x This dump %s,
->12 lelong >0 Volume %ld,
->692 lelong 0 Level zero, type:
->692 lelong >0 Level %d, type:
->0 lelong 1 tape header,
->0 lelong 2 beginning of file record,
->0 lelong 3 map of inodes on tape,
->0 lelong 4 continuation of file record,
->0 lelong 5 end of volume,
->0 lelong 6 map of inodes deleted,
->0 lelong 7 end of medium (for floppy),
->676 string >\0 Label %s,
->696 string >\0 Filesystem %s,
->760 string >\0 Device %s,
->824 string >\0 Host %s,
->888 lelong >0 Flags %x
-
-#------------------------------------------------------------------------------
-# linux: file(1) magic for Linux files
-#
-# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
-# The following basic Linux magic is useful for reference, but using
-# "long" magic is a better practice in order to avoid collisions.
-#
-# 2 leshort 100 Linux/i386
-# >0 leshort 0407 impure executable (OMAGIC)
-# >0 leshort 0410 pure executable (NMAGIC)
-# >0 leshort 0413 demand-paged executable (ZMAGIC)
-# >0 leshort 0314 demand-paged executable (QMAGIC)
-#
-0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC)
->16 lelong 0 \b, stripped
-0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC)
->16 lelong 0 \b, stripped
-0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC)
->16 lelong 0 \b, stripped
-0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC)
->16 lelong 0 \b, stripped
-#
-0 string \007\001\000 Linux/i386 object file
->20 lelong >0x1020 \b, DLL library
-# Linux-8086 stuff:
-0 string \01\03\020\04 Linux-8086 impure executable
->28 long !0 not stripped
-0 string \01\03\040\04 Linux-8086 executable
->28 long !0 not stripped
-#
-0 string \243\206\001\0 Linux-8086 object file
-#
-0 string \01\03\020\20 Minix-386 impure executable
->28 long !0 not stripped
-0 string \01\03\040\20 Minix-386 executable
->28 long !0 not stripped
-# core dump file, from Bill Reynolds <bill@goshawk.lanl.gov>
-216 lelong 0421 Linux/i386 core file
->220 string >\0 of '%s'
->200 lelong >0 (signal %d)
-#
-# LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com>
-# this can be overridden by the DOS executable (COM) entry
-2 string LILO Linux/i386 LILO boot/chain loader
-#
-# PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com>
-0 leshort 0x0436 Linux/i386 PC Screen Font data,
->2 byte 0 256 characters, no directory,
->2 byte 1 512 characters, no directory,
->2 byte 2 256 characters, Unicode directory,
->2 byte 3 512 characters, Unicode directory,
->3 byte >0 8x%d
-# Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com>
-4086 string SWAP-SPACE Linux/i386 swap file
-# according to man page of mkswap (8) March 1999
-4086 string SWAPSPACE2 Linux/i386 swap file (new style)
->0x400 long x %d (4K pages)
->0x404 long x size %d pages
-# ECOFF magic for OSF/1 and Linux (only tested under Linux though)
-#
-# from Erik Troan (ewt@redhat.com) examining od dumps, so this
-# could be wrong
-# updated by David Mosberger (davidm@azstarnet.com) based on
-# GNU BFD and MIPS info found below.
-#
-0 leshort 0x0183 ECOFF alpha
->24 leshort 0407 executable
->24 leshort 0410 pure
->24 leshort 0413 demand paged
->8 long >0 not stripped
->8 long 0 stripped
->23 leshort >0 - version %ld.
-#
-# Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu>
-# and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de>
-# and Nicolás Lichtmaier <nick@debian.org>
-# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
-# Linux kernel boot images (i386 arch) (Wolfram Kleff)
-514 string HdrS Linux kernel
->510 leshort 0xAA55 x86 boot executable
->>518 leshort >=3D0x200
->>529 byte 0 zImage,
->>>529 byte 1 bzImage,
->>>(526.s+0x200) string >\0 version %s,
->>498 leshort 1 RO-rootFS,
->>498 leshort 0 RW-rootFS,
->>508 leshort >0 root_dev 0x%X,
->>502 leshort >0 swap_dev 0x%X,
->>504 leshort >0 RAMdisksize %u KB,
->>506 leshort 0xFFFF Normal VGA
->>506 leshort 0xFFFE Extended VGA
->>506 leshort 0xFFFD Prompt for Videomode
->>506 leshort >0 Video mode %d
-# This also matches new kernels, which were caught above by "HdrS".
-0 belong 0xb8c0078e Linux kernel
->0x1e3 string Loading version 1.3.79 or older
->0x1e9 string Loading from prehistoric times
-
-# System.map files - Nicolás Lichtmaier <nick@debian.org>
-8 string \ A\ _text Linux kernel symbol map text
-
-# LSM entries - Nicolás Lichtmaier <nick@debian.org>
-0 string Begin3 Linux Software Map entry text
-0 string Begin4 Linux Software Map entry text (new format)
-
-# From Matt Zimmerman
-0 belong 0x4f4f4f4d User-mode Linux COW file
->4 belong x \b, version %d
->8 string >\0 \b, backing file %s
-
-############################################################################
-# Linux kernel versions
-
-0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux
->497 leshort 0 x86 boot sector
->>514 belong 0x8e of a kernel from the dawn of time!
->>514 belong 0x908ed8b4 version 0.99-1.1.42
->>514 belong 0x908ed8b8 for memtest86
-
->497 leshort !0 x86 kernel
->>504 leshort >0 RAMdisksize=%u KB
->>502 leshort >0 swap=0x%X
->>508 leshort >0 root=0x%X
->>>498 leshort 1 \b-ro
->>>498 leshort 0 \b-rw
->>506 leshort 0xFFFF vga=normal
->>506 leshort 0xFFFE vga=extended
->>506 leshort 0xFFFD vga=ask
->>506 leshort >0 vga=%d
->>514 belong 0x908ed881 version 1.1.43-1.1.45
->>514 belong 0x15b281cd
->>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0
->>>0xa99 belong 0x55AA5a5a version 1.3.1,2
->>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30
->>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41
->>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45
->>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72
->>514 string HdrS
->>>518 leshort >0x1FF
->>>>529 byte 0 \b, zImage
->>>>529 byte 1 \b, bzImage
->>>>(526.s+0x200) string >\0 \b, version %s
-
-# Linux boot sector thefts.
-0 belong 0xb8c0078e Linux
->0x1e6 belong 0x454c4b53 ELKS Kernel
->0x1e6 belong !0x454c4b53 style boot sector
-
-############################################################################
-# Linux 8086 executable
-0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless
->5 string .
->>4 string >\0 \b, libc version %s
-
-0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable
->2 byte&0x01 !0 \b, unmapped zero page
->2 byte&0x20 0 \b, impure
->2 byte&0x20 !0
->>2 byte&0x10 !0 \b, A_EXEC
->2 byte&0x02 !0 \b, A_PAL
->2 byte&0x04 !0 \b, A_NSYM
->2 byte&0x08 !0 \b, A_STAND
->2 byte&0x40 !0 \b, A_PURE
->2 byte&0x80 !0 \b, A_TOVLY
->28 long !0 \b, not stripped
->37 string .
->>36 string >\0 \b, libc version %s
-
-# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable
-# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable
-# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable
-# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable
-
-# SYSLINUX boot logo files (from 'ppmtolss16' sources)
-# http://syslinux.zytor.com/
-#
-0 lelong =0x1413f33d SYSLINUX' LSS16 image data
->4 leshort x \b, width %d
->6 leshort x \b, height %d
-#------------------------------------------------------------------------------
-# mime: file(1) magic for MIME encoded files
-#
-0 string Content-Type:\
->14 string >\0 %s
-0 string Content-Type:
->13 string >\0 %s
-
-#------------------------------------------------------------------------------
-# zilog: file(1) magic for Zilog Z8000.
-#
-# Was it big-endian or little-endian? My Product Specification doesn't
-# say.
-#
-0 long 0xe807 object file (z8000 a.out)
-0 long 0xe808 pure object file (z8000 a.out)
-0 long 0xe809 separate object file (z8000 a.out)
-0 long 0xe805 overlay object file (z8000 a.out)
-
-#------------------------------------------------------------------------------
-# sgi: file(1) magic for Silicon Graphics applications
-
-#
-#
-# Performance Co-Pilot file types
-0 string PmNs PCP compiled namespace (V.0)
-0 string PmN PCP compiled namespace
->3 string >\0 (V.%1.1s)
-3 lelong 0x84500526 PCP archive
->7 byte x (V.%d)
->20 lelong -2 temporal index
->20 lelong -1 metadata
->20 lelong 0 log volume #0
->20 lelong >0 log volume #%ld
->24 string >\0 host: %s
-0 string PCPFolio PCP
->9 string Version: Archive Folio
->18 string >\0 (V.%s)
-0 string #pmchart PCP pmchart view
->9 string Version
->17 string >\0 (V%-3.3s)
-0 string pmview PCP pmview config
->7 string Version
->15 string >\0 (V%-3.3s)
-0 string #pmlogger PCP pmlogger config
->10 string Version
->18 string >\0 (V%1.1s)
-0 string PcPh PCP Help
->4 string 1 Index
->4 string 2 Text
->5 string >\0 (V.%1.1s)
-0 string #pmieconf-rules PCP pmieconf rules
->16 string >\0 (V.%1.1s)
-3 string pmieconf-pmie PCP pmie config
->17 string >\0 (V.%1.1s)
-
-# SpeedShop data files
-0 lelong 0x13130303 SpeedShop data file
-
-# mdbm files
-0 lelong 0x01023962 mdbm file, version 0 (obsolete)
-0 string mdbm mdbm file,
->5 byte x version %d,
->6 byte x 2^%d pages,
->7 byte x pagesize 2^%d,
->17 byte x hash %d,
->11 byte x dataformat %d
-
-# Alias|Wavefront Maya files
-0 string //Maya ASCII Alias|Wavefront Maya Ascii File,
->13 string >\0 version %s
-8 string MAYAFOR4 Alias|Wavefront Maya Binary File,
->32 string >\0 version %s scene
-8 string MayaFOR4 Alias|Wavefront Maya Binary File,
->32 string >\0 version %s scene
-8 string CIMG Alias|Wavefront Maya Image File
-8 string DEEP Alias|Wavefront Maya Image File
-
-#------------------------------------------------------------------------------
-# sequent: file(1) magic for Sequent machines
-#
-# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
-# For Sequent's multiprocessor systems (incomplete).
-0 lelong 0x00ea BALANCE NS32000 .o
->16 lelong >0 not stripped
->124 lelong >0 version %ld
-0 lelong 0x10ea BALANCE NS32000 executable (0 @ 0)
->16 lelong >0 not stripped
->124 lelong >0 version %ld
-0 lelong 0x20ea BALANCE NS32000 executable (invalid @ 0)
->16 lelong >0 not stripped
->124 lelong >0 version %ld
-0 lelong 0x30ea BALANCE NS32000 standalone executable
->16 lelong >0 not stripped
->124 lelong >0 version %ld
-#
-# Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>.
-# Symmetry magic nums will not be reached if DOS COM comes before them;
-# byte 0xeb is matched before these get a chance.
-0 leshort 0x12eb SYMMETRY i386 .o
->16 lelong >0 not stripped
->124 lelong >0 version %ld
-0 leshort 0x22eb SYMMETRY i386 executable (0 @ 0)
->16 lelong >0 not stripped
->124 lelong >0 version %ld
-0 leshort 0x32eb SYMMETRY i386 executable (invalid @ 0)
->16 lelong >0 not stripped
->124 lelong >0 version %ld
-0 leshort 0x42eb SYMMETRY i386 standalone executable
->16 lelong >0 not stripped
->124 lelong >0 version %ld
-
-#------------------------------------------------------------------------------
-# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine
-#
-# Note that this 0407 conflicts with several other a.out formats...
-#
-# XXX - should this be redone with "be" and "le", so that it works on
-# little-endian machines as well? If so, what's the deal with
-# "VAX-order" and "VAX-order2"?
-#
-#0 long 0407 68K Blit (standalone) executable
-#0 short 0407 VAX-order2 68K Blit (standalone) executable
-0 short 03401 VAX-order 68K Blit (standalone) executable
-0 long 0406 68k Blit mpx/mux executable
-0 short 0406 VAX-order2 68k Blit mpx/mux executable
-0 short 03001 VAX-order 68k Blit mpx/mux executable
-# Need more values for WE32 DMD executables.
-# Note that 0520 is the same as COFF
-#0 short 0520 tty630 layers executable
-#------------------------------------------------------------------------------
-# impulse tracker: file(1) magic for Impulse Tracker data files
-#
-# From <collver1@attbi.com>
-# These are the /etc/magic entries to decode modules, instruments, and
-# samples in Impulse Tracker's native format.
-
-0 string IMPS Impulse Tracker Sample
->18 byte &2 16 bit
->18 byte ^2 8 bit
->18 byte &4 stereo
->18 byte ^4 mono
-0 string IMPI Impulse Tracker Instrument
->28 leshort !0 ITv%x
->30 byte !0 %d samples
-0 string IMPM Impulse Tracker Module
->40 leshort !0 compatible w/ITv%x
->42 leshort !0 created w/ITv%x
-
-#------------------------------------------------------------------------------
-# island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1
-# "/etc/magic":
-# From: guy@netapp.com (Guy Harris)
-#
-4 string pgscriptver IslandWrite document
-13 string DrawFile IslandDraw document
-
-
-#------------------------------------------------------------------------------
-# maple: file(1) magic for maple files
-# "H. Nanosecond" <aldomel@ix.netcom.com>
-# Maple V release 4, a multi-purpose math program
-#
-
-# maple library .lib
-0 string \000MVR4\nI MapleVr4 library
-
-# .ind
-# no magic for these :-(
-# they are compiled indexes for maple files
-
-# .hdb
-0 string \000\004\000\000 Maple help database
-
-# .mhp
-# this has the form <PACKAGE=name>
-0 string \<PACKAGE= Maple help file
-0 string \<HELP\ NAME= Maple help file
-0 string \n\<HELP\ NAME= Maple help file with extra carriage return at start (yuck)
-#0 string #\ Newton Maple help file, old style
-0 string #\ daub Maple help file, old style
-#0 string #=========== Maple help file, old style
-
-# .mws
-0 string \000\000\001\044\000\221 Maple worksheet
-#this is anomalous
-0 string WriteNow\000\002\000\001\000\000\000\000\100\000\000\000\000\000 Maple worksheet, but weird
-# this has the form {VERSION 2 3 "IBM INTEL NT" "2.3" }\n
-# that is {VERSION major_version miunor_version computer_type version_string}
-0 string {VERSION\ Maple worksheet
->9 string >\0 version %.1s.
->>10 string
->>>11 string >\0 %.1s
-
-# .mps
-0 string \0\0\001$ Maple something
-# from byte 4 it is either 'nul E' or 'soh R'
-# I think 'nul E' means a file that was saved as a different name
-# a sort of revision marking
-# 'soh R' means new
->4 string \000\105 An old revision
->4 string \001\122 The latest save
-
-# .mpl
-# some of these are the same as .mps above
-#0000000 000 000 001 044 000 105 same as .mps
-#0000000 000 000 001 044 001 122 same as .mps
-
-0 string #\n##\ <SHAREFILE= Maple something
-0 string \n#\n##\ <SHAREFILE= Maple something
-0 string ##\ <SHAREFILE= Maple something
-0 string #\r##\ <SHAREFILE= Maple something
-0 string \r#\r##\ <SHAREFILE= Maple something
-0 string #\ \r##\ <DESCRIBE> Maple something anomalous.
-#
-# Copyright (c) 1996 Ignatios Souvatzis. 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. All advertising materials mentioning features or use of this software
-# must display the following acknowledgement:
-# This product includes software developed by Ignatios Souvatzis for
-# the NetBSD project.
-# 4. The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission.
-#
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-#
-#
-#
-# OS9/6809 module descriptions:
-#
-0 beshort 0x87CD OS9/6809 module:
-#
->6 byte&0x0f 0x00 non-executable
->6 byte&0x0f 0x01 machine language
->6 byte&0x0f 0x02 BASIC I-code
->6 byte&0x0f 0x03 Pascal P-code
->6 byte&0x0f 0x04 C I-code
->6 byte&0x0f 0x05 COBOL I-code
->6 byte&0x0f 0x06 Fortran I-code
-#
->6 byte&0xf0 0x10 program executable
->6 byte&0xf0 0x20 subroutine
->6 byte&0xf0 0x30 multi-module
->6 byte&0xf0 0x40 data module
-#
->6 byte&0xf0 0xC0 system module
->6 byte&0xf0 0xD0 file manager
->6 byte&0xf0 0xE0 device driver
->6 byte&0xf0 0xF0 device descriptor
-#
-# OS9/m68k stuff (to be continued)
-#
-0 beshort 0x4AFC OS9/68K module:
-#
-# attr
->0x14 byte&0x80 0x80 re-entrant
->0x14 byte&0x40 0x40 ghost
->0x14 byte&0x20 0x20 system-state
-#
-# lang:
-#
->0x13 byte 1 machine language
->0x13 byte 2 BASIC I-code
->0x13 byte 3 Pascal P-code
->0x13 byte 4 C I-code
->0x13 byte 5 COBOL I-code
->0x13 byte 6 Fortran I-code
-#
-#
-# type:
-#
->0x12 byte 1 program executable
->0x12 byte 2 subroutine
->0x12 byte 3 multi-module
->0x12 byte 4 data module
->0x12 byte 11 trap library
->0x12 byte 12 system module
->0x12 byte 13 file manager
->0x12 byte 14 device driver
->0x12 byte 15 device descriptor
-
-#------------------------------------------------------------------------------
-# pkgadd: file(1) magic for SysV R4 PKG Datastreams
-#
-0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4)
-
-#------------------------------------------------------------------------------
-# xo65 object files
-# From: "Ullrich von Bassewitz" <uz@cc65.org>
-#
-0 string \x55\x7A\x6E\x61 xo65 object,
->4 leshort x version %d,
->6 leshort&0x0001 =0x0001 with debug info
->6 leshort&0x0001 =0x0000 no debug info
-
-# xo65 library files
-0 string \x6E\x61\x55\x7A xo65 library,
->4 leshort x version %d
-
-# o65 object files
-0 string \x01\x00\x6F\x36\x35 o65
->6 leshort&0x1000 =0x0000 executable,
->6 leshort&0x1000 =0x1000 object,
->5 byte x version %d,
->6 leshort&0x8000 =0x8000 65816,
->6 leshort&0x8000 =0x0000 6502,
->6 leshort&0x2000 =0x2000 32 bit,
->6 leshort&0x2000 =0x0000 16 bit,
->6 leshort&0x4000 =0x4000 page reloc,
->6 leshort&0x4000 =0x0000 byte reloc,
->6 leshort&0x0003 =0x0000 alignment 1
->6 leshort&0x0003 =0x0001 alignment 2
->6 leshort&0x0003 =0x0002 alignment 4
->6 leshort&0x0003 =0x0003 alignment 256
-#------------------------------------------------------------------------------
-# Virtutech Compressed Random Access File Format
-#
-# From <gustav@virtutech.com>
-0 string \211\277\036\203 Virtutech CRAFF
->4 belong x v%d
->20 belong 0 uncompressed
->20 belong 1 bzipp2ed
->20 belong 2 gzipped
->24 belong 0 not clean
-
-#------------------------------------------------------------------------------
-# uuencode: file(1) magic for ASCII-encoded files
-#
-
-# GRR: the first line of xxencoded files is identical to that in uuencoded
-# files, but the first character in most subsequent lines is 'h' instead of
-# 'M'. (xxencoding uses lowercase letters in place of most of uuencode's
-# punctuation and survives BITNET gateways better.) If regular expressions
-# were supported, this entry could possibly be split into two with
-# "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs).
-0 string begin\040 uuencoded or xxencoded text
-
-# btoa(1) is an alternative to uuencode that requires less space.
-0 string xbtoa\ Begin btoa'd text
-
-# ship(1) is another, much cooler alternative to uuencode.
-# Greg Roelofs, newt@uchicago.edu
-0 string $\012ship ship'd binary text
-
-# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)
-# Greg Roelofs, newt@uchicago.edu
-0 string Decode\ the\ following\ with\ bdeco bencoded News text
-
-# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
-# Daniel Quinlan, quinlan@yggdrasil.com
-11 string must\ be\ converted\ with\ BinHex BinHex binary text
->41 string x \b, version %.3s
-
-# GRR: is MIME BASE64 encoding handled somewhere?
-#------------------------------------------------------------------------------
-# amanda: file(1) magic for amanda file format
-#
-0 string AMANDA:\ AMANDA
->8 string TAPESTART\ DATE tape header file,
->>23 string X
->>>25 string >\ Unused %s
->>23 string >\ DATE %s
->8 string FILE\ dump file,
->>13 string >\ DATE %s
-
-#------------------------------------------------------------------------------
-# audio: file(1) magic for sound formats (see also "iff")
-#
-# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
-# and others
-#
-
-# Sun/NeXT audio data
-0 string .snd Sun/NeXT audio data:
->12 belong 1 8-bit ISDN mu-law,
->12 belong 2 8-bit linear PCM [REF-PCM],
->12 belong 3 16-bit linear PCM,
->12 belong 4 24-bit linear PCM,
->12 belong 5 32-bit linear PCM,
->12 belong 6 32-bit IEEE floating point,
->12 belong 7 64-bit IEEE floating point,
->12 belong 8 Fragmented sample data,
->12 belong 10 DSP program,
->12 belong 11 8-bit fixed point,
->12 belong 12 16-bit fixed point,
->12 belong 13 24-bit fixed point,
->12 belong 14 32-bit fixed point,
->12 belong 18 16-bit linear with emphasis,
->12 belong 19 16-bit linear compressed,
->12 belong 20 16-bit linear with emphasis and compression,
->12 belong 21 Music kit DSP commands,
->12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice data encoding),
->12 belong 24 compressed (8-bit CCITT G.722 ADPCM)
->12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM),
->12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM),
->12 belong 27 8-bit A-law (CCITT G.711),
->20 belong 1 mono,
->20 belong 2 stereo,
->20 belong 4 quad,
->16 belong >0 %d Hz
-
-# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
-# that uses little-endian encoding and has a different magic number
-0 lelong 0x0064732E DEC audio data:
->12 lelong 1 8-bit ISDN mu-law,
->12 lelong 2 8-bit linear PCM [REF-PCM],
->12 lelong 3 16-bit linear PCM,
->12 lelong 4 24-bit linear PCM,
->12 lelong 5 32-bit linear PCM,
->12 lelong 6 32-bit IEEE floating point,
->12 lelong 7 64-bit IEEE floating point,
->12 belong 8 Fragmented sample data,
->12 belong 10 DSP program,
->12 belong 11 8-bit fixed point,
->12 belong 12 16-bit fixed point,
->12 belong 13 24-bit fixed point,
->12 belong 14 32-bit fixed point,
->12 belong 18 16-bit linear with emphasis,
->12 belong 19 16-bit linear compressed,
->12 belong 20 16-bit linear with emphasis and compression,
->12 belong 21 Music kit DSP commands,
->12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice data encoding),
->12 belong 24 compressed (8-bit CCITT G.722 ADPCM)
->12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM),
->12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM),
->12 belong 27 8-bit A-law (CCITT G.711),
->20 lelong 1 mono,
->20 lelong 2 stereo,
->20 lelong 4 quad,
->16 lelong >0 %d Hz
-
-# Creative Labs AUDIO stuff
-0 string MThd Standard MIDI data
->8 beshort x (format %d)
->10 beshort x using %d track
->10 beshort >1 \bs
->12 beshort&0x7fff x at 1/%d
->12 beshort&0x8000 >0 SMPTE
-
-0 string CTMF Creative Music (CMF) data
-0 string SBI SoundBlaster instrument data
-0 string Creative\ Voice\ File Creative Labs voice data
-# is this next line right? it came this way...
->19 byte 0x1A
->23 byte >0 - version %d
->22 byte >0 \b.%d
-
-# first entry is also the string "NTRK"
-0 belong 0x4e54524b MultiTrack sound data
->4 belong x - version %ld
-
-# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED
-# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi]
-0 string EMOD Extended MOD sound data,
->4 byte&0xf0 x version %d
->4 byte&0x0f x \b.%d,
->45 byte x %d instruments
->83 byte 0 (module)
->83 byte 1 (song)
-
-# Real Audio (Magic .ra\0375)
-0 belong 0x2e7261fd RealAudio sound file
-0 string .RMF RealMedia file
-
-# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]
-# Oct 31, 1995
-# fixed by <doj@cubic.org> 2003-06-24
-# Too short...
-#0 string MTM MultiTracker Module sound file
-#0 string if Composer 669 Module sound data
-#0 string JN Composer 669 Module sound data (extended format)
-0 string MAS_U ULT(imate) Module sound data
-
-#0 string FAR Module sound data
-#>4 string >\15 Title: "%s"
-
-0x2c string SCRM ScreamTracker III Module sound data
->0 string >\0 Title: "%s"
-
-# Gravis UltraSound patches
-# From <ache@nagual.ru>
-
-0 string GF1PATCH110\0ID#000002\0 GUS patch
-0 string GF1PATCH100\0ID#000002\0 Old GUS patch
-
-#
-# Taken from loader code from mikmod version 2.14
-# by Steve McIntyre (stevem@chiark.greenend.org.uk)
-# <doj@cubic.org> added title printing on 2003-06-24
-0 string MAS_UTrack_V00
->14 string >/0 ultratracker V1.%.1s module sound data
-
-0 string UN05 MikMod UNI format module sound data
-
-0 string Extended\ Module: Fasttracker II module sound data
->17 string >\0 Title: "%s"
-
-21 string/c !SCREAM! Screamtracker 2 module sound data
-21 string BMOD2STM Screamtracker 2 module sound data
-1080 string M.K. 4-channel Protracker module sound data
->0 string >\0 Title: "%s"
-1080 string M!K! 4-channel Protracker module sound data
->0 string >\0 Title: "%s"
-1080 string FLT4 4-channel Startracker module sound data
->0 string >\0 Title: "%s"
-1080 string FLT8 8-channel Startracker module sound data
->0 string >\0 Title: "%s"
-1080 string 4CHN 4-channel Fasttracker module sound data
->0 string >\0 Title: "%s"
-1080 string 6CHN 6-channel Fasttracker module sound data
->0 string >\0 Title: "%s"
-1080 string 8CHN 8-channel Fasttracker module sound data
->0 string >\0 Title: "%s"
-1080 string CD81 8-channel Octalyser module sound data
->0 string >\0 Title: "%s"
-1080 string OKTA 8-channel Oktalyzer module sound data
->0 string >\0 Title: "%s"
-# Not good enough.
-#1082 string CH
-#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data
-1080 string 16CN 16-channel Taketracker module sound data
->0 string >\0 Title: "%s"
-1080 string 32CN 32-channel Taketracker module sound data
->0 string >\0 Title: "%s"
-
-# TOC sound files -Trevor Johnson <trevor@jpj.net>
-#
-0 string TOC TOC sound file
-
-# sidfiles <pooka@iki.fi>
-# added name,author,(c) and new RSID type by <doj@cubic.org> 2003-06-24
-0 string SIDPLAY\ INFOFILE Sidplay info file
-
-0 string PSID PlaySID v2.2+ (AMIGA) sidtune
->4 beshort >0 w/ header v%d,
->14 beshort =1 single song,
->14 beshort >1 %d songs,
->16 beshort >0 default song: %d
->0x16 string >\0 name: "%s"
->0x36 string >\0 author: "%s"
->0x56 string >\0 copyright: "%s"
-
-0 string RSID RSID sidtune PlaySID compatible
->4 beshort >0 w/ header v%d,
->14 beshort =1 single song,
->14 beshort >1 %d songs,
->16 beshort >0 default song: %d
->0x16 string >\0 name: "%s"
->0x36 string >\0 author: "%s"
->0x56 string >\0 copyright: "%s"
-
-# IRCAM <mpruett@sgi.com>
-# VAX and MIPS files are little-endian; Sun and NeXT are big-endian
-0 belong 0x64a30100 IRCAM file (VAX)
-0 belong 0x64a30200 IRCAM file (Sun)
-0 belong 0x64a30300 IRCAM file (MIPS little-endian)
-0 belong 0x64a30400 IRCAM file (NeXT)
-
-# NIST SPHERE <mpruett@sgi.com>
-0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file
-
-# Sample Vision <mpruett@sgi.com>
-0 string SOUND\ SAMPLE\ DATA\ Sample Vision file
-
-# Audio Visual Research <tonigonenstein@users.sourceforge.net>
-0 string 2BIT Audio Visual Research file,
->12 beshort =0 mono,
->12 beshort =-1 stereo,
->14 beshort x %d bits
->16 beshort =0 unsigned,
->16 beshort =-1 signed,
->22 belong&0x00ffffff x %d Hz,
->18 beshort =0 no loop,
->18 beshort =-1 loop,
->21 ubyte <=127 note %d,
->22 byte =0 replay 5.485 KHz
->22 byte =1 replay 8.084 KHz
->22 byte =2 replay 10.971 Khz
->22 byte =3 replay 16.168 Khz
->22 byte =4 replay 21.942 KHz
->22 byte =5 replay 32.336 KHz
->22 byte =6 replay 43.885 KHz
->22 byte =7 replay 47.261 KHz
-
-# SGI SoundTrack <mpruett@sgi.com>
-0 string _SGI_SoundTrack SGI SoundTrack project file
-# ID3 version 2 tags <waschk@informatik.uni-rostock.de>
-0 string ID3 MP3 file with ID3 version 2.
->3 ubyte <0xff \b%d.
->4 ubyte <0xff \b%d tag
-
-# NSF (NES sound file) magic
-0 string NESM\x1a NES Sound File
->14 string >\0 ("%s" by
->46 string >\0 %s, copyright
->78 string >\0 %s),
->5 byte x version %d,
->6 byte x %d tracks,
->122 byte&0x2 =1 dual PAL/NTSC
->122 byte&0x1 =1 PAL
->122 byte&0x1 =0 NTSC
-
-# Impuse tracker module (audio/x-it)
-0 string IMPM Impulse Tracker module sound data -
->4 string >\0 "%s"
->40 leshort !0 compatible w/ITv%x
->42 leshort !0 created w/ITv%x
-
-# Imago Orpheus module (audio/x-imf)
-60 string IM10 Imago Orpheus module sound data -
->0 string >\0 "%s"
-
-# From <collver1@attbi.com>
-# These are the /etc/magic entries to decode modules, instruments, and
-# samples in Impulse Tracker's native format.
-
-0 string IMPS Impulse Tracker Sample
->18 byte &2 16 bit
->18 byte ^2 8 bit
->18 byte &4 stereo
->18 byte ^4 mono
-0 string IMPI Impulse Tracker Instrument
->28 leshort !0 ITv%x
->30 byte !0 %d samples
-
-# Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files
-# From <collver1@attbi.com>
-0 string LM8953 Yamaha TX Wave
->22 byte 0x49 looped
->22 byte 0xC9 non-looped
->23 byte 1 33kHz
->23 byte 2 50kHz
->23 byte 3 16kHz
-
-# scream tracker: file(1) magic for Scream Tracker sample files
-#
-# From <collver1@attbi.com>
-76 string SCRS Scream Tracker Sample
->0 byte 1 sample
->0 byte 2 adlib melody
->0 byte >2 adlib drum
->31 byte &2 stereo
->31 byte ^2 mono
->31 byte &4 16bit little endian
->31 byte ^4 8bit
->30 byte 0 unpacked
->30 byte 1 packed
-
-# audio
-# From: Cory Dikkers <cdikkers@swbell.net>
-0 string MMD0 MED music file, version 0
-0 string MMD1 OctaMED Pro music file, version 1
-0 string MMD3 OctaMED Soundstudio music file, version 3
-0 string OctaMEDCmpr OctaMED Soundstudio compressed file
-0 string MED MED_Song
-0 string SymM Symphonie SymMOD music file
-#
-0 string THX AHX version
->3 byte =0 1 module data
->3 byte =1 2 module data
-#
-0 string OKTASONG Oktalyzer module data
-#
-0 string DIGI\ Booster\ module\0 %s
->20 byte >0 %c
->>21 byte >0 \b%c
->>>22 byte >0 \b%c
->>>>23 byte >0 \b%c
->610 string >\0 \b, "%s"
-#
-0 string DBM0 DIGI Booster Pro Module
->4 byte >0 V%X.
->>5 byte x \b%02X
->16 string >\0 \b, "%s"
-#
-0 string FTMN FaceTheMusic module
->16 string >\0d \b, "%s"
-
-# From: <doj@cubic.org> 2003-06-24
-0 string AMShdr\32 Velvet Studio AMS Module v2.2
-0 string Extreme Extreme Tracker AMS Module v1.3
-0 string DDMF Xtracker DMF Module
->4 byte x v%i
->0xD string >\0 Title: "%s"
->0x2B string >\0 Composer: "%s"
-0 string DSM\32 Dynamic Studio Module DSM
-0 string SONG DigiTrekker DTM Module
-0 string DMDL DigiTrakker MDL Module
-0 string PSM\32 Protracker Studio PSM Module
-44 string PTMF Poly Tracker PTM Module
->0 string >\32 Title: "%s"
-0 string MT20 MadTracker 2.0 Module MT2
-0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD
-0 string RTMM RTM Module
-0x426 string MaDoKaN96 XMS Adlib Module
->0 string >\0 Composer: "%s"
-0 string AMF AMF Module
->4 string >\0 Title: "%s"
-0 string MODINFO1 Open Cubic Player Module Inforation MDZ
-0 string Extended\40Instrument: Fast Tracker II Instrument
-
-# From: Takeshi Hamasaki <hma@syd.odn.ne.jp>
-# NOA Nancy Codec file
-0 string \210NOA\015\012\032 NOA Nancy Codec Movie file
-# Yamaha SMAF format
-0 string MMMD Yamaha SMAF file
-# Sharp Jisaku Melody format for PDC
-0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody
->20 string Ver01.00 Ver. 1.00
->>32 byte x , %d tracks
-
-# Free lossless audio codec <http://flac.sourceforge.net>
-# From: Przemyslaw Augustyniak <silvathraec@rpg.pl>
-0 string fLaC FLAC audio bitstream data
->4 byte&0x7f >0 \b, unknown version
->4 byte&0x7f 0 \b
-# some common bits/sample values
->>20 beshort&0x1f0 0x030 \b, 4 bit
->>20 beshort&0x1f0 0x050 \b, 6 bit
->>20 beshort&0x1f0 0x070 \b, 8 bit
->>20 beshort&0x1f0 0x0b0 \b, 12 bit
->>20 beshort&0x1f0 0x0f0 \b, 16 bit
->>20 beshort&0x1f0 0x170 \b, 24 bit
->>20 byte&0xe 0x0 \b, mono
->>20 byte&0xe 0x2 \b, stereo
->>20 byte&0xe 0x4 \b, 3 channels
->>20 byte&0xe 0x6 \b, 4 channels
->>20 byte&0xe 0x8 \b, 5 channels
->>20 byte&0xe 0xa \b, 6 channels
->>20 byte&0xe 0xc \b, 7 channels
->>20 byte&0xe 0xe \b, 8 channels
-# some common sample rates
->>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz
->>17 belong&0xfffff0 0x0bb800 \b, 48 kHz
->>17 belong&0xfffff0 0x07d000 \b, 32 kHz
->>17 belong&0xfffff0 0x056220 \b, 22.05 kHz
->>17 belong&0xfffff0 0x05dc00 \b, 24 kHz
->>17 belong&0xfffff0 0x03e800 \b, 16 kHz
->>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz
->>17 belong&0xfffff0 0x02ee00 \b, 12 kHz
->>17 belong&0xfffff0 0x01f400 \b, 8 kHz
->>17 belong&0xfffff0 0x177000 \b, 96 kHz
->>17 belong&0xfffff0 0x0fa000 \b, 64 kHz
->>21 byte&0xf >0 \b, >4G samples
->>21 byte&0xf 0 \b
->>>22 belong >0 \b, %u samples
->>>22 belong 0 \b, length unknown
-
-# (ISDN) VBOX voice message file (Wolfram Kleff)
-0 string VBOX VBOX voice message data
-
-# ReBorn Song Files (.rbs)
-# David J. Singer <doc@deadvirgins.org.uk>
-8 string RB40 RBS Song file
->29 string ReBorn created by ReBorn
->37 string Propellerhead created by ReBirth
-
-# Synthesizer Generator and Kimwitu share their file format
-0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data
-# Kimwitu++ uses a slightly different magic
-0 string A#S#C#S#S#L#HUB Kimwitu++ data
-
-# From "Simon Hosie
-0 string TFMX-SONG TFMX module sound data
-
-# From danny.milo@gmx.net (Danny Milosavljevic)
-# monkeysaudio for magic.mime
-0 string MAC\ X/Monkey audio,
->4 leshort >0 version %d,
->6 leshort >0 compression level %d,
->8 leshort >0 flags %x,
->10 leshort >0 channels %d,
->12 lelong >0 samplerate %d,
->24 lelong >0 frames %d
-
-#------------------------------------------------------------------------------
-# bsdi: file(1) magic for BSD/OS (from BSDI) objects
-#
-
-0 lelong 0314 386 compact demand paged pure executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses shared libs)
-
-0 lelong 0407 386 executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses shared libs)
-
-0 lelong 0410 386 pure executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses shared libs)
-
-0 lelong 0413 386 demand paged pure executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses shared libs)
-
-# same as in SunOS 4.x, except for static shared libraries
-0 belong&077777777 0600413 sparc demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
->36 belong 0xb4100001 (uses shared libs)
-
-0 belong&077777777 0600410 sparc pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
->36 belong 0xb4100001 (uses shared libs)
-
-0 belong&077777777 0600407 sparc
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
->36 belong 0xb4100001 (uses shared libs)
-
-#------------------------------------------------------------------------------
-# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files
-# From Roger Leigh <roger@whinlatter.uklinux.net>
-0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0
-0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0
-0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0
-
-
-#------------------------------------------------------------------------------
-# intel: file(1) magic for x86 Unix
-#
-# Various flavors of x86 UNIX executable/object (other than Xenix, which
-# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do
-# Windows as well.
-#
-# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
-# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere
-# as well, if, as, and when IBM makes it portable.
-#
-# The `versions' should be un-commented if they work for you.
-# (Was the problem just one of endianness?)
-#
-0 leshort 0502 basic-16 executable
->12 lelong >0 not stripped
-#>22 leshort >0 - version %ld
-0 leshort 0503 basic-16 executable (TV)
->12 lelong >0 not stripped
-#>22 leshort >0 - version %ld
-0 leshort 0510 x86 executable
->12 lelong >0 not stripped
-0 leshort 0511 x86 executable (TV)
->12 lelong >0 not stripped
-0 leshort =0512 iAPX 286 executable small model (COFF)
->12 lelong >0 not stripped
-#>22 leshort >0 - version %ld
-0 leshort =0522 iAPX 286 executable large model (COFF)
->12 lelong >0 not stripped
-#>22 leshort >0 - version %ld
-# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
-0 leshort =0514 80386 COFF executable
->12 lelong >0 not stripped
->22 leshort >0 - version %ld
-
-# rom: file(1) magic for BIOS ROM Extensions found in intel machines
-# mapped into memory between 0xC0000 and 0xFFFFF
-# From Gürkan Sengün <gurkan@linuks.mine.nu>, www.linuks.mine.nu
-0 beshort 0x55AA BIOS (ia32) ROM Ext.
->5 string USB USB
->7 string LDR UNDI image
->30 string IBM IBM comp. Video
->26 string Adaptec Adaptec
->28 string Adaptec Adaptec
->42 string PROMISE Promise
->2 byte x (%d*512)
-
-#------------------------------------------------------------------------------
-# netbsd: file(1) magic for NetBSD objects
-#
-# All new-style magic numbers are in network byte order.
-#
-
-0 lelong 000000407 a.out NetBSD little-endian object file
->16 lelong >0 not stripped
-0 belong 000000407 a.out NetBSD big-endian object file
->16 belong >0 not stripped
-
-0 belong&0377777777 041400413 a.out NetBSD/i386 demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 041400410 a.out NetBSD/i386 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 041400407 a.out NetBSD/i386
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 041400507 a.out NetBSD/i386 core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 041600413 a.out NetBSD/m68k demand paged
->0 byte &0x80
->>20 belong <8192 shared library
->>20 belong =8192 dynamically linked executable
->>20 belong >8192 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 041600410 a.out NetBSD/m68k pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 041600407 a.out NetBSD/m68k
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 belong !0 executable
->>20 belong =0 object file
->16 belong >0 not stripped
-0 belong&0377777777 041600507 a.out NetBSD/m68k core
->12 string >\0 from '%s'
->32 belong !0 (signal %d)
-
-0 belong&0377777777 042000413 a.out NetBSD/m68k4k demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 042000410 a.out NetBSD/m68k4k pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 042000407 a.out NetBSD/m68k4k
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 belong !0 executable
->>20 belong =0 object file
->16 belong >0 not stripped
-0 belong&0377777777 042000507 a.out NetBSD/m68k4k core
->12 string >\0 from '%s'
->32 belong !0 (signal %d)
-
-0 belong&0377777777 042200413 a.out NetBSD/ns32532 demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 042200410 a.out NetBSD/ns32532 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 042200407 a.out NetBSD/ns32532
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 042200507 a.out NetBSD/ns32532 core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 045200507 a.out NetBSD/powerpc core
->12 string >\0 from '%s'
-
-0 belong&0377777777 042400413 a.out NetBSD/sparc demand paged
->0 byte &0x80
->>20 belong <8192 shared library
->>20 belong =8192 dynamically linked executable
->>20 belong >8192 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 042400410 a.out NetBSD/sparc pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 042400407 a.out NetBSD/sparc
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 belong !0 executable
->>20 belong =0 object file
->16 belong >0 not stripped
-0 belong&0377777777 042400507 a.out NetBSD/sparc core
->12 string >\0 from '%s'
->32 belong !0 (signal %d)
-
-0 belong&0377777777 042600413 a.out NetBSD/pmax demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 042600410 a.out NetBSD/pmax pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 042600407 a.out NetBSD/pmax
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 042600507 a.out NetBSD/pmax core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 043000413 a.out NetBSD/vax 1k demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 043000410 a.out NetBSD/vax 1k pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 043000407 a.out NetBSD/vax 1k
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 043000507 a.out NetBSD/vax 1k core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 045400413 a.out NetBSD/vax 4k demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 045400410 a.out NetBSD/vax 4k pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 045400407 a.out NetBSD/vax 4k
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 045400507 a.out NetBSD/vax 4k core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-# NetBSD/alpha does not support (and has never supported) a.out objects,
-# so no rules are provided for them. NetBSD/alpha ELF objects are
-# dealt with in "elf".
-0 lelong 0x00070185 ECOFF NetBSD/alpha binary
->10 leshort 0x0001 not stripped
->10 leshort 0x0000 stripped
-0 belong&0377777777 043200507 a.out NetBSD/alpha core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 043400413 a.out NetBSD/mips demand paged
->0 byte &0x80
->>20 belong <8192 shared library
->>20 belong =8192 dynamically linked executable
->>20 belong >8192 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 043400410 a.out NetBSD/mips pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 043400407 a.out NetBSD/mips
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 belong !0 executable
->>20 belong =0 object file
->16 belong >0 not stripped
-0 belong&0377777777 043400507 a.out NetBSD/mips core
->12 string >\0 from '%s'
->32 belong !0 (signal %d)
-
-0 belong&0377777777 043600413 a.out NetBSD/arm32 demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 043600410 a.out NetBSD/arm32 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 043600407 a.out NetBSD/arm32
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-# NetBSD/arm26 has always used ELF objects, but it shares a core file
-# format with NetBSD/arm32.
-0 belong&0377777777 043600507 a.out NetBSD/arm core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-#------------------------------------------------------------------------------
-# riff: file(1) magic for RIFF format
-# See
-#
-# http://www.seanet.com/users/matts/riffmci/riffmci.htm
-#
-# AVI section extended by Patrik Rådman <patrik+file-magic@iki.fi>
-#
-0 string RIFF RIFF (little-endian) data
-# RIFF Palette format
->8 string PAL \b, palette
->>16 leshort x \b, version %d
->>18 leshort x \b, %d entries
-# RIFF Device Independent Bitmap format
->8 string RDIB \b, device-independent bitmap
->>16 string BM
->>>30 leshort 12 \b, OS/2 1.x format
->>>>34 leshort x \b, %d x
->>>>36 leshort x %d
->>>30 leshort 64 \b, OS/2 2.x format
->>>>34 leshort x \b, %d x
->>>>36 leshort x %d
->>>30 leshort 40 \b, Windows 3.x format
->>>>34 lelong x \b, %d x
->>>>38 lelong x %d x
->>>>44 leshort x %d
-# RIFF MIDI format
->8 string RMID \b, MIDI
-# RIFF Multimedia Movie File format
->8 string RMMP \b, multimedia movie
-# Microsoft WAVE format (*.wav)
->8 string WAVE \b, WAVE audio
->>20 leshort 1 \b, Microsoft PCM
->>>34 leshort >0 \b, %d bit
->>20 leshort 2 \b, Microsoft ADPCM
->>20 leshort 6 \b, ITU G.711 A-law
->>20 leshort 7 \b, ITU G.711 mu-law
->>20 leshort 17 \b, IMA ADPCM
->>20 leshort 20 \b, ITU G.723 ADPCM (Yamaha)
->>20 leshort 49 \b, GSM 6.10
->>20 leshort 64 \b, ITU G.721 ADPCM
->>20 leshort 80 \b, MPEG
->>20 leshort 85 \b, MPEG Layer 3
->>22 leshort =1 \b, mono
->>22 leshort =2 \b, stereo
->>22 leshort >2 \b, %d channels
->>24 lelong >0 %d Hz
-# Corel Draw Picture
->8 string CDRA \b, Corel Draw Picture
-# AVI == Audio Video Interleave
->8 string AVI\040 \b, AVI
->>12 string LIST
->>>20 string hdrlavih
->>>>&36 lelong x \b, %lu x
->>>>&40 lelong x %lu,
->>>>&4 lelong >1000000 <1 fps,
->>>>&4 lelong 1000000 1.00 fps,
->>>>&4 lelong 500000 2.00 fps,
->>>>&4 lelong 333333 3.00 fps,
->>>>&4 lelong 250000 4.00 fps,
->>>>&4 lelong 200000 5.00 fps,
->>>>&4 lelong 166667 6.00 fps,
->>>>&4 lelong 142857 7.00 fps,
->>>>&4 lelong 125000 8.00 fps,
->>>>&4 lelong 111111 9.00 fps,
->>>>&4 lelong 100000 10.00 fps,
-# ]9.9,10.1[
->>>>&4 lelong <101010
->>>>>&-4 lelong >99010
->>>>>>&-4 lelong !100000 ~10 fps,
->>>>&4 lelong 83333 12.00 fps,
-# ]11.9,12.1[
->>>>&4 lelong <84034
->>>>>&-4 lelong >82645
->>>>>>&-4 lelong !83333 ~12 fps,
->>>>&4 lelong 66667 15.00 fps,
-# ]14.9,15.1[
->>>>&4 lelong <67114
->>>>>&-4 lelong >66225
->>>>>>&-4 lelong !66667 ~15 fps,
->>>>&4 lelong 50000 20.00 fps,
->>>>&4 lelong 41708 23.98 fps,
->>>>&4 lelong 41667 24.00 fps,
-# ]23.9,24.1[
->>>>&4 lelong <41841
->>>>>&-4 lelong >41494
->>>>>>&-4 lelong !41708
->>>>>>>&-4 lelong !41667 ~24 fps,
->>>>&4 lelong 40000 25.00 fps,
-# ]24.9,25.1[
->>>>&4 lelong <40161
->>>>>&-4 lelong >39841
->>>>>>&-4 lelong !40000 ~25 fps,
->>>>&4 lelong 33367 29.97 fps,
->>>>&4 lelong 33333 30.00 fps,
-# ]29.9,30.1[
->>>>&4 lelong <33445
->>>>>&-4 lelong >33223
->>>>>>&-4 lelong !33367
->>>>>>>&-4 lelong !33333 ~30 fps,
->>>>&4 lelong <32224 >30 fps,
-##>>>>&4 lelong x (%lu)
-##>>>>&20 lelong x %lu frames,
-# Note: The tests below assume that the AVI has 1 or 2 streams,
-# "vids" optionally followed by "auds".
-# (Should cover 99.9% of all AVIs.)
-# assuming avih length = 56
->>>88 string LIST
->>>>96 string strlstrh
->>>>>108 string vids video:
->>>>>>&0 lelong 0 uncompressed
-# skip past vids strh
->>>>>>(104.l+108) string strf
->>>>>>>(104.l+132) lelong 1 RLE 8bpp
->>>>>>>(104.l+132) string/c cvid Cinepak
->>>>>>>(104.l+132) string/c i263 Intel I.263
->>>>>>>(104.l+132) string/c iv32 Indeo 3.2
->>>>>>>(104.l+132) string/c iv41 Indeo 4.1
->>>>>>>(104.l+132) string/c iv50 Indeo 5.0
->>>>>>>(104.l+132) string/c mp42 Microsoft MPEG-4 v2
->>>>>>>(104.l+132) string/c mp43 Microsoft MPEG-4 v3
->>>>>>>(104.l+132) string/c mjpg Motion JPEG
->>>>>>>(104.l+132) string/c div3 DivX 3
->>>>>>>>112 string/c div3 Low-Motion
->>>>>>>>112 string/c div4 Fast-Motion
->>>>>>>(104.l+132) string/c divx DivX 4
->>>>>>>(104.l+132) string/c dx50 DivX 5
->>>>>>>(104.l+132) string/c xvid XviD
->>>>>>>(104.l+132) lelong 0
-##>>>>>>>(104.l+132) string x (%.4s)
-# skip past first (video) LIST
->>>>(92.l+96) string LIST
->>>>>(92.l+104) string strlstrh
->>>>>>(92.l+116) string auds \b, audio:
-# auds strh length = 56:
->>>>>>>(92.l+172) string strf
->>>>>>>>(92.l+180) leshort 0x0001 uncompressed PCM
->>>>>>>>(92.l+180) leshort 0x0002 ADPCM
->>>>>>>>(92.l+180) leshort 0x0055 MPEG-1 Layer 3
->>>>>>>>(92.l+180) leshort 0x2000 Dolby AC3
->>>>>>>>(92.l+180) leshort 0x0161 DivX
-##>>>>>>>>(92.l+180) leshort x (0x%.4x)
->>>>>>>>(92.l+182) leshort 1 (mono,
->>>>>>>>(92.l+182) leshort 2 (stereo,
->>>>>>>>(92.l+182) leshort >2 (%d channels,
->>>>>>>>(92.l+184) lelong x %d Hz)
-# auds strh length = 64:
->>>>>>>(92.l+180) string strf
->>>>>>>>(92.l+188) leshort 0x0001 uncompressed PCM
->>>>>>>>(92.l+188) leshort 0x0002 ADPCM
->>>>>>>>(92.l+188) leshort 0x0055 MPEG-1 Layer 3
->>>>>>>>(92.l+188) leshort 0x2000 Dolby AC3
->>>>>>>>(92.l+188) leshort 0x0161 DivX
-##>>>>>>>>(92.l+188) leshort x (0x%.4x)
->>>>>>>>(92.l+190) leshort 1 (mono,
->>>>>>>>(92.l+190) leshort 2 (stereo,
->>>>>>>>(92.l+190) leshort >2 (%d channels,
->>>>>>>>(92.l+192) lelong x %d Hz)
-# Animated Cursor format
->8 string ACON \b, animated cursor
-# SoundFont 2 <mpruett@sgi.com>
->8 string sfbk SoundFont/Bank
-# MPEG-1 wrapped in a RIFF, apparently
->8 string CDXA \b, wrapped MPEG-1 (CDXA)
->8 string 4XMV \b, 4X Movie file
-
-#
-# XXX - some of the below may only appear in little-endian form.
-#
-# Also "MV93" appears to be for one form of Macromedia Director
-# files, and "GDMF" appears to be another multimedia format.
-#
-0 string RIFX RIFF (big-endian) data
-# RIFF Palette format
->8 string PAL \b, palette
->>16 beshort x \b, version %d
->>18 beshort x \b, %d entries
-# RIFF Device Independent Bitmap format
->8 string RDIB \b, device-independent bitmap
->>16 string BM
->>>30 beshort 12 \b, OS/2 1.x format
->>>>34 beshort x \b, %d x
->>>>36 beshort x %d
->>>30 beshort 64 \b, OS/2 2.x format
->>>>34 beshort x \b, %d x
->>>>36 beshort x %d
->>>30 beshort 40 \b, Windows 3.x format
->>>>34 belong x \b, %d x
->>>>38 belong x %d x
->>>>44 beshort x %d
-# RIFF MIDI format
->8 string RMID \b, MIDI
-# RIFF Multimedia Movie File format
->8 string RMMP \b, multimedia movie
-# Microsoft WAVE format (*.wav)
->8 string WAVE \b, WAVE audio
->>20 leshort 1 \b, Microsoft PCM
->>>34 leshort >0 \b, %d bit
->>22 beshort =1 \b, mono
->>22 beshort =2 \b, stereo
->>22 beshort >2 \b, %d channels
->>24 belong >0 %d Hz
-# Corel Draw Picture
->8 string CDRA \b, Corel Draw Picture
-# AVI == Audio Video Interleave
->8 string AVI\040 \b, AVI
-# Animated Cursor format
->8 string ACON \b, animated cursor
-# Notation Interchange File Format (big-endian only)
->8 string NIFF \b, Notation Interchange File Format
-# SoundFont 2 <mpruett@sgi.com>
->8 string sfbk SoundFont/Bank
-#------------------------------------------------------------------------------
-# Console game magic
-# Toby Deshane <hac@shoelace.digivill.net>
-# ines: file(1) magic for Marat's iNES Nintendo Entertainment System
-# ROM dump format
-
-0 string NES\032 iNES ROM dump,
->4 byte x %dx16k PRG
->5 byte x \b, %dx8k CHR
->6 byte&0x01 =0x1 \b, [Vert.]
->6 byte&0x01 =0x0 \b, [Horiz.]
->6 byte&0x02 =0x2 \b, [SRAM]
->6 byte&0x04 =0x4 \b, [Trainer]
->6 byte&0x04 =0x8 \b, [4-Scr]
-
-#------------------------------------------------------------------------------
-# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format
-#
-0x104 belong 0xCEED6666 Gameboy ROM:
->0x134 string >\0 "%.16s"
->0x146 byte 0x03 \b,[SGB]
->0x147 byte 0x00 \b, [ROM ONLY]
->0x147 byte 0x01 \b, [ROM+MBC1]
->0x147 byte 0x02 \b, [ROM+MBC1+RAM]
->0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT]
->0x147 byte 0x05 \b, [ROM+MBC2]
->0x147 byte 0x06 \b, [ROM+MBC2+BATTERY]
->0x147 byte 0x08 \b, [ROM+RAM]
->0x147 byte 0x09 \b, [ROM+RAM+BATTERY]
->0x147 byte 0x0B \b, [ROM+MMM01]
->0x147 byte 0x0C \b, [ROM+MMM01+SRAM]
->0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT]
->0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT]
->0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT]
->0x147 byte 0x11 \b, [ROM+MBC3]
->0x147 byte 0x12 \b, [ROM+MBC3+RAM]
->0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT]
->0x147 byte 0x19 \b, [ROM+MBC5]
->0x147 byte 0x1A \b, [ROM+MBC5+RAM]
->0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT]
->0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE]
->0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM]
->0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT]
->0x147 byte 0x1F \b, [Pocket Camera]
->0x147 byte 0xFD \b, [Bandai TAMA5]
->0x147 byte 0xFE \b, [Hudson HuC-3]
->0x147 byte 0xFF \b, [Hudson HuC-1]
-
->0x148 byte 0 \b, ROM: 256Kbit
->0x148 byte 1 \b, ROM: 512Kbit
->0x148 byte 2 \b, ROM: 1Mbit
->0x148 byte 3 \b, ROM: 2Mbit
->0x148 byte 4 \b, ROM: 4Mbit
->0x148 byte 5 \b, ROM: 8Mbit
->0x148 byte 6 \b, ROM: 16Mbit
->0x148 byte 0x52 \b, ROM: 9Mbit
->0x148 byte 0x53 \b, ROM: 10Mbit
->0x148 byte 0x54 \b, ROM: 12Mbit
-
->0x149 byte 1 \b, RAM: 16Kbit
->0x149 byte 2 \b, RAM: 64Kbit
->0x149 byte 3 \b, RAM: 128Kbit
->0x149 byte 4 \b, RAM: 1Mbit
-
-#>0x14e long x \b, CRC: %x
-
-#------------------------------------------------------------------------------
-# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format
-#
-0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump
->0x120 string >\0 Name: "%.16s"
->0x110 string >\0 %.16s
->0x1B0 string RA with SRAM
-
-#------------------------------------------------------------------------------
-# genesis: file(1) magic for the Super MegaDrive ROM dump format
-#
-0x280 string EAGN Super MagicDrive ROM dump
->0 byte x %dx16k blocks
->2 byte 0 \b, last in series or standalone
->2 byte >0 \b, split ROM
->8 byte 0xAA
->9 byte 0xBB
-
-#------------------------------------------------------------------------------
-# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format
-#
-0x280 string EAMG Super MagicDrive ROM dump
->0 byte x %dx16k blocks
->2 byte x \b, last in series or standalone
->8 byte 0xAA
->9 byte 0xBB
-
-#------------------------------------------------------------------------------
-# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps
-#
-# Does not detect all images. Very preliminary guesswork. Need more data
-# on format.
-#
-# FIXME: need a little more info...;P
-#
-#0 byte 0xF3
-#>1 byte 0xED Sega Master System/Game Gear ROM dump
-#>1 byte 0x31 Sega Master System/Game Gear ROM dump
-#>1 byte 0xDB Sega Master System/Game Gear ROM dump
-#>1 byte 0xAF Sega Master System/Game Gear ROM dump
-#>1 byte 0xC3 Sega Master System/Game Gear ROM dump
-
-#------------------------------------------------------------------------------
-# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format
-#
-0 belong 0x21068028 Sega Dreamcast VMU game image
-0 string LCDi Dream Animator file
-
-#------------------------------------------------------------------------------
-# v64: file(1) uncertain magic for the V64 format N64 ROM dumps
-#
-0 belong 0x37804012 V64 Nintendo 64 ROM dump
-
-#------------------------------------------------------------------------------
-# msx: file(1) magic for MSX game cartridge dumps
-# Too simple - MPi
-#0 beshort 0x4142 MSX game cartridge dump
-
-#------------------------------------------------------------------------------
-# Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :
-0 string PS-X\ EXE Sony Playstation executable
-# Area:
->113 string x (%s)
-
-#------------------------------------------------------------------------------
-# Microsoft Xbox executables .xbe (Esa Hyytiä <ehyytia@cc.hut.fi>)
-0 string XBEH XBE, Microsoft Xbox executable
-# probabilistic checks whether signed or not
->0x0004 ulelong =0x0
->>&2 ulelong =0x0
->>>&2 ulelong =0x0 \b, not signed
->0x0004 ulelong >0
->>&2 ulelong >0
->>>&2 ulelong >0 \b, signed
-# expect base address of 0x10000
->0x0104 ulelong =0x10000
->>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions
->>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007
->>>(0x0118-0x0FF60) ulelong >0 (regions:
->>>>(0x0118-0x0FF60) ulelong &0x00000001 NA
->>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan
->>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World
->>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer
->>>(0x0118-0x0FF60) ulelong >0 \b)
-
-# --------------------------------
-# Microsoft Xbox data file formats
-0 string XIP0 XIP, Microsoft Xbox data
-0 string XTF0 XTF, Microsoft Xbox data
-
-# Atari Lynx cartridge dump (EXE/BLL header)
-# From: "Stefan A. Haubenthal" <polluks@web.de>
-
-0 beshort 0x8008 Lynx cartridge,
->2 beshort x RAM start $%04x
->6 string BS93
-
-#------------------------------------------------------------------------------
-# Z-machine: file(1) magic for Z-machine binaries.
-#
-# This will match ${TEX_BASE}/texmf/omega/ocp/char2uni/inbig5.ocp which
-# appears to be a version-0 Z-machine binary.
-#
-# The (false match) message is to correct that behavior. Perhaps it is
-# not needed.
-#
->16 belong&0xfe00f0f0 0x3030 Infocom game data
->0 ubyte 0 (false match)
->0 ubyte >0 (Z-machine %d,
->>2 ubeshort x Release %d /
->>18 string >\0 Serial %.6s)
-
-#------------------------------------------------------------------------------
-# Glulx: file(1) magic for Glulx binaries.
-#
-# I haven't checked for false matches yet.
-#
-0 string Glul Glulx game data
-
-
-
-# These go at the end of the iff rules
-#
-# I don't see why these might collide with anything else.
-#
-# Interactive Fiction related formats
-#
->8 string IFRS \b, Blorb Interactive Fiction
->>24 string Exec with executable chunk
->8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal)
-
-#------------------------------------------------------------------------------
-# DEC SRC Virtual Paper: Lectern files
-# Karl M. Hegbloom <karlheg@inetarena.com>
-0 string lect DEC SRC Virtual Paper Lectern file
-
-#------------------------------------------------------------------------------
-# visx: file(1) magic for Visx format files
-#
-0 short 0x5555 VISX image file
->2 byte 0 (zero)
->2 byte 1 (unsigned char)
->2 byte 2 (short integer)
->2 byte 3 (float 32)
->2 byte 4 (float 64)
->2 byte 5 (signed char)
->2 byte 6 (bit-plane)
->2 byte 7 (classes)
->2 byte 8 (statistics)
->2 byte 10 (ascii text)
->2 byte 15 (image segments)
->2 byte 100 (image set)
->2 byte 101 (unsigned char vector)
->2 byte 102 (short integer vector)
->2 byte 103 (float 32 vector)
->2 byte 104 (float 64 vector)
->2 byte 105 (signed char vector)
->2 byte 106 (bit plane vector)
->2 byte 121 (feature vector)
->2 byte 122 (feature vector library)
->2 byte 124 (chain code)
->2 byte 126 (bit vector)
->2 byte 130 (graph)
->2 byte 131 (adjacency graph)
->2 byte 132 (adjacency graph library)
->2 string .VISIX (ascii text)
-#------------------------------------------------------------------------------
-# varied.script: file(1) magic for various interpreter scripts
-
-0 string #!\ / a
->3 string >\0 %s script text executable
-0 string #!\ / a
->3 string >\0 %s script text executable
-0 string #!/ a
->2 string >\0 %s script text executable
-0 string #!\ script text executable
->3 string >\0 for %s
-
-# ------------------------------------------------------------------------
-# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators.
-#
-# From: Ryan McGuire (rmcguire@freenet.columbus.oh.us).
-#
-# Update: Romain Lievin (roms@lpg.ticalc.org).
-#
-# NOTE: This list is not complete.
-# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the
-# program/group magic numbers in here because I cannot find any.
-0 string **TI80** TI-80 Graphing Calculator File.
-0 string **TI81** TI-81 Graphing Calculator File.
-#
-# Magic Numbers for the TI-73
-#
-0 string **TI73** TI-73 Graphing Calculator
->0x00003B byte 0x00 (real number)
->0x00003B byte 0x01 (list)
->0x00003B byte 0x02 (matrix)
->0x00003B byte 0x03 (equation)
->0x00003B byte 0x04 (string)
->0x00003B byte 0x05 (program)
->0x00003B byte 0x06 (assembly program)
->0x00003B byte 0x07 (picture)
->0x00003B byte 0x08 (gdb)
->0x00003B byte 0x0C (complex number)
->0x00003B byte 0x0F (window settings)
->0x00003B byte 0x10 (zoom)
->0x00003B byte 0x11 (table setup)
->0x00003B byte 0x13 (backup)
-
-# Magic Numbers for the TI-82
-#
-0 string **TI82** TI-82 Graphing Calculator
->0x00003B byte 0x00 (real)
->0x00003B byte 0x01 (list)
->0x00003B byte 0x02 (matrix)
->0x00003B byte 0x03 (Y-variable)
->0x00003B byte 0x05 (program)
->0x00003B byte 0x06 (protected prgm)
->0x00003B byte 0x07 (picture)
->0x00003B byte 0x08 (gdb)
->0x00003B byte 0x0B (window settings)
->0x00003B byte 0x0C (window settings)
->0x00003B byte 0x0D (table setup)
->0x00003B byte 0x0E (screenshot)
->0x00003B byte 0x0F (backup)
-#
-# Magic Numbers for the TI-83
-#
-0 string **TI83** TI-83 Graphing Calculator
->0x00003B byte 0x00 (real)
->0x00003B byte 0x01 (list)
->0x00003B byte 0x02 (matrix)
->0x00003B byte 0x03 (Y-variable)
->0x00003B byte 0x04 (string)
->0x00003B byte 0x05 (program)
->0x00003B byte 0x06 (protected prgm)
->0x00003B byte 0x07 (picture)
->0x00003B byte 0x08 (gdb)
->0x00003B byte 0x0B (window settings)
->0x00003B byte 0x0C (window settings)
->0x00003B byte 0x0D (table setup)
->0x00003B byte 0x0E (screenshot)
->0x00003B byte 0x13 (backup)
-#
-# Magic Numbers for the TI-83+
-#
-0 string **TI83F* TI-83+ Graphing Calculator
->0x00003B byte 0x00 (real number)
->0x00003B byte 0x01 (list)
->0x00003B byte 0x02 (matrix)
->0x00003B byte 0x03 (equation)
->0x00003B byte 0x04 (string)
->0x00003B byte 0x05 (program)
->0x00003B byte 0x06 (assembly program)
->0x00003B byte 0x07 (picture)
->0x00003B byte 0x08 (gdb)
->0x00003B byte 0x0C (complex number)
->0x00003B byte 0x0F (window settings)
->0x00003B byte 0x10 (zoom)
->0x00003B byte 0x11 (table setup)
->0x00003B byte 0x13 (backup)
->0x00003B byte 0x15 (application variable)
->0x00003B byte 0x17 (group of variable)
-
-#
-# Magic Numbers for the TI-85
-#
-0 string **TI85** TI-85 Graphing Calculator
->0x00003B byte 0x00 (real number)
->0x00003B byte 0x01 (complex number)
->0x00003B byte 0x02 (real vector)
->0x00003B byte 0x03 (complex vector)
->0x00003B byte 0x04 (real list)
->0x00003B byte 0x05 (complex list)
->0x00003B byte 0x06 (real matrix)
->0x00003B byte 0x07 (complex matrix)
->0x00003B byte 0x08 (real constant)
->0x00003B byte 0x09 (complex constant)
->0x00003B byte 0x0A (equation)
->0x00003B byte 0x0C (string)
->0x00003B byte 0x0D (function GDB)
->0x00003B byte 0x0E (polar GDB)
->0x00003B byte 0x0F (parametric GDB)
->0x00003B byte 0x10 (diffeq GDB)
->0x00003B byte 0x11 (picture)
->0x00003B byte 0x12 (program)
->0x00003B byte 0x13 (range)
->0x00003B byte 0x17 (window settings)
->0x00003B byte 0x18 (window settings)
->0x00003B byte 0x19 (window settings)
->0x00003B byte 0x1A (window settings)
->0x00003B byte 0x1B (zoom)
->0x00003B byte 0x1D (backup)
->0x00003B byte 0x1E (unknown)
->0x00003B byte 0x2A (equation)
->0x000032 string ZS4 - ZShell Version 4 File.
->0x000032 string ZS3 - ZShell Version 3 File.
-#
-# Magic Numbers for the TI-86
-#
-0 string **TI86** TI-86 Graphing Calculator
->0x00003B byte 0x00 (real number)
->0x00003B byte 0x01 (complex number)
->0x00003B byte 0x02 (real vector)
->0x00003B byte 0x03 (complex vector)
->0x00003B byte 0x04 (real list)
->0x00003B byte 0x05 (complex list)
->0x00003B byte 0x06 (real matrix)
->0x00003B byte 0x07 (complex matrix)
->0x00003B byte 0x08 (real constant)
->0x00003B byte 0x09 (complex constant)
->0x00003B byte 0x0A (equation)
->0x00003B byte 0x0C (string)
->0x00003B byte 0x0D (function GDB)
->0x00003B byte 0x0E (polar GDB)
->0x00003B byte 0x0F (parametric GDB)
->0x00003B byte 0x10 (diffeq GDB)
->0x00003B byte 0x11 (picture)
->0x00003B byte 0x12 (program)
->0x00003B byte 0x13 (range)
->0x00003B byte 0x17 (window settings)
->0x00003B byte 0x18 (window settings)
->0x00003B byte 0x19 (window settings)
->0x00003B byte 0x1A (window settings)
->0x00003B byte 0x1B (zoom)
->0x00003B byte 0x1D (backup)
->0x00003B byte 0x1E (unknown)
->0x00003B byte 0x2A (equation)
-#
-# Magic Numbers for the TI-89
-#
-0 string **TI89** TI-89 Graphing Calculator
->0x000048 byte 0x00 (expression)
->0x000048 byte 0x04 (list)
->0x000048 byte 0x06 (matrix)
->0x000048 byte 0x0A (data)
->0x000048 byte 0x0B (text)
->0x000048 byte 0x0C (string)
->0x000048 byte 0x0D (graphic data base)
->0x000048 byte 0x0E (figure)
->0x000048 byte 0x10 (picture)
->0x000048 byte 0x12 (program)
->0x000048 byte 0x13 (function)
->0x000048 byte 0x14 (macro)
->0x000048 byte 0x1C (zipped)
->0x000048 byte 0x21 (assembler)
-#
-# Magic Numbers for the TI-92
-#
-0 string **TI92** TI-92 Graphing Calculator
->0x000048 byte 0x00 (expression)
->0x000048 byte 0x04 (list)
->0x000048 byte 0x06 (matrix)
->0x000048 byte 0x0A (data)
->0x000048 byte 0x0B (text)
->0x000048 byte 0x0C (string)
->0x000048 byte 0x0D (graphic data base)
->0x000048 byte 0x0E (figure)
->0x000048 byte 0x10 (picture)
->0x000048 byte 0x12 (program)
->0x000048 byte 0x13 (function)
->0x000048 byte 0x14 (macro)
->0x000048 byte 0x1D (backup)
-#
-# Magic Numbers for the TI-92+/V200
-#
-0 string **TI92P* TI-92+/V200 Graphing Calculator
->0x000048 byte 0x00 (expression)
->0x000048 byte 0x04 (list)
->0x000048 byte 0x06 (matrix)
->0x000048 byte 0x0A (data)
->0x000048 byte 0x0B (text)
->0x000048 byte 0x0C (string)
->0x000048 byte 0x0D (graphic data base)
->0x000048 byte 0x0E (figure)
->0x000048 byte 0x10 (picture)
->0x000048 byte 0x12 (program)
->0x000048 byte 0x13 (function)
->0x000048 byte 0x14 (macro)
->0x000048 byte 0x1C (zipped)
->0x000048 byte 0x21 (assembler)
-#
-# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades
-#
-0x0000016 string Advanced TI-XX Graphing Calculator (FLASH)
-0 string **TIFL** TI-XX Graphing Calculator (FLASH)
->8 byte >0 - Revision %d
->>9 byte x \b.%d,
->12 byte >0 Revision date %02x
->>13 byte x \b/%02x
->>14 beshort x \b/%04x,
->17 string >/0 name: '%s',
->48 byte 0x74 device: TI-73,
->48 byte 0x73 device: TI-83+,
->48 byte 0x98 device: TI-89,
->48 byte 0x88 device: TI-92+,
->49 byte 0x23 type: OS upgrade,
->49 byte 0x24 type: application,
->49 byte 0x25 type: certificate,
->49 byte 0x3e type: license,
->74 lelong >0 size: %ld bytes
-
-# VTi & TiEmu skins (TI Graphing Calculators).
-# From: Romain Lievin (roms@lpg.ticalc.org).
-# Magic Numbers for the VTi skins
-0 string VTI Virtual TI skin
->3 string v - Version
->>4 byte >0 \b %c
->>6 byte x \b.%c
-# Magic Numbers for the TiEmu skins
-0 string TiEmu TiEmu skin
->6 string v - Version
->>7 byte >0 \b %c
->>9 byte x \b.%c
->>10 byte x \b%c
-
-#------------------------------------------------------------------------------
-# c-lang: file(1) magic for C programs (or REXX)
-#
-
-# XPM icons (Greg Roelofs, newt@uchicago.edu)
-# if you uncomment "/*" for C/REXX below, also uncomment this entry
-#0 string /*\ XPM\ */ X pixmap image data
-
-# this first will upset you if you're a PL/1 shop...
-# in which case rm it; ascmagic will catch real C programs
-#0 string /* C or REXX program text
-#0 string // C++ program text
-
-# From: Mikhail Teterin <mi@aldan.algebra.com>
-0 string cscope cscope reference data
->7 string x version %.2s
-# We skip the path here, because it is often long (so file will
-# truncate it) and mostly redundant.
-# The inverted index functionality was added some time betwen
-# versions 11 and 15, so look for -q if version is above 14:
->7 string >14
->>10 regex .+\ -q\ with inverted index
->10 regex .+\ -c\ text (non-compressed)
-# Digital UNIX - Info
-#
-0 string !<arch>\n________64E Alpha archive
->22 string X -- out of date
-#
-# Alpha COFF Based Executables
-# The stripped stuff really needs to be an 8 byte (64 bit) compare,
-# but this works
-0 leshort 0x183 COFF format alpha
->22 leshort&020000 &010000 sharable library,
->22 leshort&020000 ^010000 dynamically linked,
->24 leshort 0410 pure
->24 leshort 0413 demand paged
->8 lelong >0 executable or object module, not stripped
->8 lelong 0
->>12 lelong 0 executable or object module, stripped
->>12 lelong >0 executable or object module, not stripped
->27 byte >0 - version %d.
->26 byte >0 %d-
->28 leshort >0 %d
-#
-# The next is incomplete, we could tell more about this format,
-# but its not worth it.
-0 leshort 0x188 Alpha compressed COFF
-0 leshort 0x18f Alpha u-code object
-#
-#
-# Some other interesting Digital formats,
-0 string \377\377\177 ddis/ddif
-0 string \377\377\174 ddis/dots archive
-0 string \377\377\176 ddis/dtif table data
-0 string \033c\033 LN03 output
-0 long 04553207 X image
-#
-0 string !<PDF>!\n profiling data file
-#
-# Locale data tables (MIPS and Alpha).
-#
-0 short 0x0501 locale data table
->6 short 0x24 for MIPS
->6 short 0x40 for Alpha
-# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka@gmx.at>
-# from http://www.atsc.org/standards/a_52a.pdf
-# corrections, additions, etc. are always welcome!
-#
-# syncword
-0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream,
-# fscod
->4 byte&0xc0 0x00 48 kHz,
->4 byte&0xc0 0x40 44.1 kHz,
->4 byte&0xc0 0x80 32 kHz,
-# is this one used for 96 kHz?
->4 byte&0xc0 0xc0 reserved frequency,
-#
->5 byte&7 = 0 \b, complete main (CM)
->5 byte&7 = 1 \b, music and effects (ME)
->5 byte&7 = 2 \b, visually impaired (VI)
->5 byte&7 = 3 \b, hearing impaired (HI)
->5 byte&7 = 4 \b, dialogue (D)
->5 byte&7 = 5 \b, commentary (C)
->5 byte&7 = 6 \b, emergency (E)
-# acmod
->6 byte&0xe0 0x00 1+1 front,
->6 byte&0xe0 0x20 1 front/0 rear,
->6 byte&0xe0 0x40 2 front/0 rear,
->6 byte&0xe0 0x60 3 front/0 rear,
->6 byte&0xe0 0x80 2 front/1 rear,
->6 byte&0xe0 0xa0 3 front/1 rear,
->6 byte&0xe0 0xc0 2 front/2 rear,
->6 byte&0xe0 0xe0 3 front/2 rear,
-# lfeon (these may be incorrect)
->7 byte&0x40 0x00 LFE off,
->7 byte&0x40 0x40 LFE on,
-#
->4 byte&0x3e = 0x00 \b, 32 kbit/s
->4 byte&0x3e = 0x02 \b, 40 kbit/s
->4 byte&0x3e = 0x04 \b, 48 kbit/s
->4 byte&0x3e = 0x06 \b, 56 kbit/s
->4 byte&0x3e = 0x08 \b, 64 kbit/s
->4 byte&0x3e = 0x0a \b, 80 kbit/s
->4 byte&0x3e = 0x0c \b, 96 kbit/s
->4 byte&0x3e = 0x0e \b, 112 kbit/s
->4 byte&0x3e = 0x10 \b, 128 kbit/s
->4 byte&0x3e = 0x12 \b, 160 kbit/s
->4 byte&0x3e = 0x14 \b, 192 kbit/s
->4 byte&0x3e = 0x16 \b, 224 kbit/s
->4 byte&0x3e = 0x18 \b, 256 kbit/s
->4 byte&0x3e = 0x1a \b, 320 kbit/s
->4 byte&0x3e = 0x1c \b, 384 kbit/s
->4 byte&0x3e = 0x1e \b, 448 kbit/s
->4 byte&0x3e = 0x20 \b, 512 kbit/s
->4 byte&0x3e = 0x22 \b, 576 kbit/s
->4 byte&0x3e = 0x24 \b, 640 kbit/s
-# dsurmod (these may be incorrect)
->6 beshort&0x0180 0x0000 Dolby Surround not indicated
->6 beshort&0x0180 0x0080 not Dolby Surround encoded
->6 beshort&0x0180 0x0100 Dolby Surround encoded
->6 beshort&0x0180 0x0180 reserved Dolby Surround mode
-
-#------------------------------------------------------------------------------
-# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
-#
-# ACE/gr binary
-0 string \000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003 old ACE/gr binary file
->39 byte >0 - version %c
-# ACE/gr ascii
-0 string #\ xvgr\ parameter\ file ACE/gr ascii file
-0 string #\ xmgr\ parameter\ file ACE/gr ascii file
-0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file
-# Grace projects
-0 string #\ Grace\ project\ file Grace project file
->23 string @version\ (version
->>32 byte >0 %c
->>33 string >\0 \b.%.2s
->>35 string >\0 \b.%.2s)
-# ACE/gr fit description files
-0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file
-# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
-
-#------------------------------------------------------------------------------
-# ibm370: file(1) magic for IBM 370 and compatibles.
-#
-# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
-# What the heck *is* "USS/370"?
-# AIX 4.1's "/etc/magic" has
-#
-# 0 short 0535 370 sysV executable
-# >12 long >0 not stripped
-# >22 short >0 - version %d
-# >30 long >0 - 5.2 format
-# 0 short 0530 370 sysV pure executable
-# >12 long >0 not stripped
-# >22 short >0 - version %d
-# >30 long >0 - 5.2 format
-#
-# instead of the "USS/370" versions of the same magic numbers.
-#
-0 beshort 0537 370 XA sysV executable
->12 belong >0 not stripped
->22 beshort >0 - version %d
->30 belong >0 - 5.2 format
-0 beshort 0532 370 XA sysV pure executable
->12 belong >0 not stripped
->22 beshort >0 - version %d
->30 belong >0 - 5.2 format
-0 beshort 054001 370 sysV pure executable
->12 belong >0 not stripped
-0 beshort 055001 370 XA sysV pure executable
->12 belong >0 not stripped
-0 beshort 056401 370 sysV executable
->12 belong >0 not stripped
-0 beshort 057401 370 XA sysV executable
->12 belong >0 not stripped
-0 beshort 0531 SVR2 executable (Amdahl-UTS)
->12 belong >0 not stripped
->24 belong >0 - version %ld
-0 beshort 0534 SVR2 pure executable (Amdahl-UTS)
->12 belong >0 not stripped
->24 belong >0 - version %ld
-0 beshort 0530 SVR2 pure executable (USS/370)
->12 belong >0 not stripped
->24 belong >0 - version %ld
-0 beshort 0535 SVR2 executable (USS/370)
->12 belong >0 not stripped
->24 belong >0 - version %ld
-
-#------------------------------------------------------------------------------
-# images: file(1) magic for image formats (see also "iff")
-#
-# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
-# additions by janl@ifi.uio.no as well as others. Jan also suggested
-# merging several one- and two-line files into here.
-#
-# little magic: PCX (first byte is 0x0a)
-
-# Targa - matches `povray', `ppmtotga' and `xv' outputs
-# by Philippe De Muyter <phdm@macqel.be>
-# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
-# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
-# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
-# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
-# `tgatoppm' recognizes a superset (Index may be anything)
-1 belong&0xfff7ffff 0x01010000 Targa image data - Map
->2 byte&8 8 - RLE
->12 leshort >0 %hd x
->14 leshort >0 %hd
-1 belong&0xfff7ffff 0x00020000 Targa image data - RGB
->2 byte&8 8 - RLE
->12 leshort >0 %hd x
->14 leshort >0 %hd
-1 belong&0xfff7ffff 0x00030000 Targa image data - Mono
->2 byte&8 8 - RLE
->12 leshort >0 %hd x
->14 leshort >0 %hd
-
-# PBMPLUS images
-# The next byte following the magic is always whitespace.
-0 string P1 Netpbm PBM image text
-0 string P2 Netpbm PGM image text
-0 string P3 Netpbm PPM image text
-0 string P4 Netpbm PBM "rawbits" image data
-0 string P5 Netpbm PGM "rawbits" image data
-0 string P6 Netpbm PPM "rawbits" image data
-0 string P7 Netpbm PAM image file
-
-# From: bryanh@giraffe-data.com (Bryan Henderson)
-0 string \117\072 Solitaire Image Recorder format
->4 string \013 MGI Type 11
->4 string \021 MGI Type 17
-0 string .MDA MicroDesign data
->21 byte 48 version 2
->21 byte 51 version 3
-0 string .MDP MicroDesign page data
->21 byte 48 version 2
->21 byte 51 version 3
-
-# NIFF (Navy Interchange File Format, a modification of TIFF) images
-0 string IIN1 NIFF image data
-
-# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
-# The second word of TIFF files is the TIFF version number, 42, which has
-# never changed. The TIFF specification recommends testing for it.
-0 string MM\x00\x2a TIFF image data, big-endian
-0 string II\x2a\x00 TIFF image data, little-endian
-
-# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
-# (Greg Roelofs, newt@uchicago.edu)
-# (Albert Cahalan, acahalan@cs.uml.edu)
-#
-# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
-#
-0 string \x89PNG PNG image data,
->4 belong !0x0d0a1a0a CORRUPTED,
->4 belong 0x0d0a1a0a
->>16 belong x %ld x
->>20 belong x %ld,
->>24 byte x %d-bit
->>25 byte 0 grayscale,
->>25 byte 2 \b/color RGB,
->>25 byte 3 colormap,
->>25 byte 4 gray+alpha,
->>25 byte 6 \b/color RGBA,
-#>>26 byte 0 deflate/32K,
->>28 byte 0 non-interlaced
->>28 byte 1 interlaced
-1 string PNG PNG image data, CORRUPTED
-
-# GIF
-0 string GIF8 GIF image data
->4 string 7a \b, version 8%s,
->4 string 9a \b, version 8%s,
->6 leshort >0 %hd x
->8 leshort >0 %hd
-#>10 byte &0x80 color mapped,
-#>10 byte&0x07 =0x00 2 colors
-#>10 byte&0x07 =0x01 4 colors
-#>10 byte&0x07 =0x02 8 colors
-#>10 byte&0x07 =0x03 16 colors
-#>10 byte&0x07 =0x04 32 colors
-#>10 byte&0x07 =0x05 64 colors
-#>10 byte&0x07 =0x06 128 colors
-#>10 byte&0x07 =0x07 256 colors
-
-# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster,
-# 1 plane, no encoding.
-0 string \361\0\100\273 CMU window manager raster image data
->4 lelong >0 %d x
->8 lelong >0 %d,
->12 lelong >0 %d-bit
-
-# Magick Image File Format
-0 string id=ImageMagick MIFF image data
-
-# Artisan
-0 long 1123028772 Artisan image data
->4 long 1 \b, rectangular 24-bit
->4 long 2 \b, rectangular 8-bit with colormap
->4 long 3 \b, rectangular 32-bit (24-bit with matte)
-
-# FIG (Facility for Interactive Generation of figures), an object-based format
-0 string #FIG FIG image text
->5 string x \b, version %.3s
-
-# PHIGS
-0 string ARF_BEGARF PHIGS clear text archive
-0 string @(#)SunPHIGS SunPHIGS
-# version number follows, in the form m.n
->40 string SunBin binary
->32 string archive archive
-
-# GKS (Graphics Kernel System)
-0 string GKSM GKS Metafile
->24 string SunGKS \b, SunGKS
-
-# CGM image files
-0 string BEGMF clear text Computer Graphics Metafile
-# XXX - questionable magic
-0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile
-0 beshort 0x3020 character Computer Graphics Metafile
-
-# MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
-0 string yz MGR bitmap, modern format, 8-bit aligned
-0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned
-0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned
-0 string yx MGR bitmap, modern format, squeezed
-
-# Fuzzy Bitmap (FBM) images
-0 string %bitmap\0 FBM image data
->30 long 0x31 \b, mono
->30 long 0x33 \b, color
-
-# facsimile data
-1 string PC\ Research,\ Inc group 3 fax data
->29 byte 0 \b, normal resolution (204x98 DPI)
->29 byte 1 \b, fine resolution (204x196 DPI)
-# From: Herbert Rosmanith <herp@wildsau.idv.uni.linz.at>
-0 string Sfff structured fax file
-
-
-# PC bitmaps (OS/2, Windoze BMP files) (Greg Roelofs, newt@uchicago.edu)
-0 string BM PC bitmap data
->14 leshort 12 \b, OS/2 1.x format
->>18 leshort x \b, %d x
->>20 leshort x %d
->14 leshort 64 \b, OS/2 2.x format
->>18 leshort x \b, %d x
->>20 leshort x %d
->14 leshort 40 \b, Windows 3.x format
->>18 lelong x \b, %d x
->>22 lelong x %d x
->>28 leshort x %d
-# Too simple - MPi
-#0 string IC PC icon data
-#0 string PI PC pointer image data
-#0 string CI PC color icon data
-#0 string CP PC color pointer image data
-# Conflicts with other entries [BABYL]
-#0 string BA PC bitmap array data
-
-# XPM icons (Greg Roelofs, newt@uchicago.edu)
-# note possible collision with C/REXX entry in c-lang; currently commented out
-0 string /*\ XPM\ */ X pixmap image text
-
-# Utah Raster Toolkit RLE images (janl@ifi.uio.no)
-0 leshort 0xcc52 RLE image data,
->6 leshort x %d x
->8 leshort x %d
->2 leshort >0 \b, lower left corner: %d
->4 leshort >0 \b, lower right corner: %d
->10 byte&0x1 =0x1 \b, clear first
->10 byte&0x2 =0x2 \b, no background
->10 byte&0x4 =0x4 \b, alpha channel
->10 byte&0x8 =0x8 \b, comment
->11 byte >0 \b, %d color channels
->12 byte >0 \b, %d bits per pixel
->13 byte >0 \b, %d color map channels
-
-# image file format (Robert Potter, potter@cs.rochester.edu)
-0 string Imagefile\ version- iff image data
-# this adds the whole header (inc. version number), informative but longish
->10 string >\0 %s
-
-# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)
-0 belong 0x59a66a95 Sun raster image data
->4 belong >0 \b, %d x
->8 belong >0 %d,
->12 belong >0 %d-bit,
-#>16 belong >0 %d bytes long,
->20 belong 0 old format,
-#>20 belong 1 standard,
->20 belong 2 compressed,
->20 belong 3 RGB,
->20 belong 4 TIFF,
->20 belong 5 IFF,
->20 belong 0xffff reserved for testing,
->24 belong 0 no colormap
->24 belong 1 RGB colormap
->24 belong 2 raw colormap
-#>28 belong >0 colormap is %d bytes long
-
-# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)
-#
-# See
-# http://reality.sgi.com/grafica/sgiimage.html
-#
-0 beshort 474 SGI image data
-#>2 byte 0 \b, verbatim
->2 byte 1 \b, RLE
-#>3 byte 1 \b, normal precision
->3 byte 2 \b, high precision
->4 beshort x \b, %d-D
->6 beshort x \b, %d x
->8 beshort x %d
->10 beshort x \b, %d channel
->10 beshort !1 \bs
->80 string >0 \b, "%s"
-
-0 string IT01 FIT image data
->4 belong x \b, %d x
->8 belong x %d x
->12 belong x %d
-#
-0 string IT02 FIT image data
->4 belong x \b, %d x
->8 belong x %d x
->12 belong x %d
-#
-2048 string PCD_IPI Kodak Photo CD image pack file
->0xe02 byte&0x03 0x00 , landscape mode
->0xe02 byte&0x03 0x01 , portrait mode
->0xe02 byte&0x03 0x02 , landscape mode
->0xe02 byte&0x03 0x03 , portrait mode
-0 string PCD_OPA Kodak Photo CD overview pack file
-
-# FITS format. Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>
-# FITS is the Flexible Image Transport System, the de facto standard for
-# data and image transfer, storage, etc., for the astronomical community.
-# (FITS floating point formats are big-endian.)
-0 string SIMPLE\ \ = FITS image data
->109 string 8 \b, 8-bit, character or unsigned binary integer
->108 string 16 \b, 16-bit, two's complement binary integer
->107 string \ 32 \b, 32-bit, two's complement binary integer
->107 string -32 \b, 32-bit, floating point, single precision
->107 string -64 \b, 64-bit, floating point, double precision
-
-# other images
-0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file
-0 string !! Bennet Yee's "face" format
-
-# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
-# stuff.
-#
-0 beshort 0x1010 PEX Binary Archive
-
-# Visio drawings
-03000 string Visio\ (TM)\ Drawing %s
-
-# Tgif files
-0 string \%TGIF\ x Tgif file version %s
-
-# DICOM medical imaging data
-128 string DICM DICOM medical imaging data
-
-# XWD - X Window Dump file.
-# As described in /usr/X11R6/include/X11/XWDFile.h
-# used by the xwd program.
-# Bradford Castalia, idaeim, 1/01
-4 belong 7 XWD X Window Dump image data
->100 string >\0 \b, "%s"
->16 belong x \b, %dx
->20 belong x \b%dx
->12 belong x \b%d
-
-# PDS - Planetary Data System
-# These files use Parameter Value Language in the header section.
-# Unfortunately, there is no certain magic, but the following
-# strings have been found to be most likely.
-0 string NJPL1I00 PDS (JPL) image data
-2 string NJPL1I PDS (JPL) image data
-0 string CCSD3ZF PDS (CCSD) image data
-2 string CCSD3Z PDS (CCSD) image data
-0 string PDS_ PDS image data
-0 string LBLSIZE= PDS (VICAR) image data
-
-# pM8x: ATARI STAD compressed bitmap format
-#
-# from Oskar Schirmer <schirmer@scara.com> Feb 2, 2001
-# p M 8 5/6 xx yy zz data...
-# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.
-# bytes either run horizontally (pM85) or vertically (pM86). yy is the
-# most frequent byte, xx and zz are runlength escape codes, where xx is
-# used for runs of yy.
-#
-0 string pM85 Atari ST STAD bitmap image data (hor)
->5 byte 0x00 (white background)
->5 byte 0xFF (black background)
-0 string pM86 Atari ST STAD bitmap image data (vert)
->5 byte 0x00 (white background)
->5 byte 0xFF (black background)
-
-# XXX:
-# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
-# magic.
-# SGI RICE image file <mpruett@sgi.com>
-#0 beshort 0x5249 RICE image
-#>2 beshort x v%d
-#>4 beshort x (%d x
-#>6 beshort x %d)
-#>8 beshort 0 8 bit
-#>8 beshort 1 10 bit
-#>8 beshort 2 12 bit
-#>8 beshort 3 13 bit
-#>10 beshort 0 4:2:2
-#>10 beshort 1 4:2:2:4
-#>10 beshort 2 4:4:4
-#>10 beshort 3 4:4:4:4
-#>12 beshort 1 RGB
-#>12 beshort 2 CCIR601
-#>12 beshort 3 RP175
-#>12 beshort 4 YUV
-
-#------------------------------------------------------------------------------
-#
-# Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image file format
-# for the EPOC operating system, which is used with PDAs like those from Psion
-#
-# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description
-# of various EPOC file formats
-
-0 string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file
-
-# PCX image files
-# From: Dan Fandrich <dan@coneharvesters.com>
-0 beshort 0x0a00 PCX ver. 2.5 image data
-0 beshort 0x0a02 PCX ver. 2.8 image data, with palette
-0 beshort 0x0a03 PCX ver. 2.8 image data, without palette
-0 beshort 0x0a04 PCX for Windows image data
-0 beshort 0x0a05 PCX ver. 3.0 image data
->4 leshort x bounding box [%hd,
->6 leshort x %hd] -
->8 leshort x [%hd,
->10 leshort x %hd],
->65 byte >1 %d planes each of
->3 byte x %hhd-bit
->68 byte 0 image,
->68 byte 1 colour,
->68 byte 2 grayscale,
->68 byte >2 image,
->68 byte <0 image,
->12 leshort >0 %hd x
->>14 leshort x %hd dpi,
->2 byte 0 uncompressed
->2 byte 1 RLE compressed
-
-# Adobe Photoshop
-0 string 8BPS Adobe Photoshop Image
-
-# XV thumbnail indicator (ThMO)
-0 string P7\ 332 XV thumbnail image data
-
-# NITF is defined by United States MIL-STD-2500A
-0 string NITF National Imagery Transmission Format
->25 string >\0 dated %.14s
-
-# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
-0 belong 0x00010008 GEM Image data
->12 beshort x %d x
->14 beshort x %d,
->4 beshort x %d planes,
->8 beshort x %d x
->10 beshort x %d pixelsize
-
-# GEM Metafile (Wolfram Kleff)
-0 lelong 0x0018FFFF GEM Metafile data
->4 leshort x version %d
-
-#
-# SMJPEG. A custom Motion JPEG format used by Loki Entertainment
-# Software Torbjorn Andersson <d91tan@Update.UU.SE>.
-#
-0 string \0\nSMJPEG SMJPEG
->8 belong x %d.x data
-# According to the specification you could find any number of _TXT
-# headers here, but I can't think of any way of handling that. None of
-# the SMJPEG files I tried it on used this feature. Even if such a
-# file is encountered the output should still be reasonable.
->16 string _SND \b,
->>24 beshort >0 %d Hz
->>26 byte 8 8-bit
->>26 byte 16 16-bit
->>28 string NONE uncompressed
-# >>28 string APCM ADPCM compressed
->>27 byte 1 mono
->>28 byte 2 stereo
-# Help! Isn't there any way to avoid writing this part twice?
->>32 string _VID \b,
-# >>>48 string JFIF JPEG
->>>40 belong >0 %d frames
->>>44 beshort >0 (%d x
->>>46 beshort >0 %d)
->16 string _VID \b,
-# >>32 string JFIF JPEG
->>24 belong >0 %d frames
->>28 beshort >0 (%d x
->>30 beshort >0 %d)
-
-0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File
-
-# "thumbnail file" (icon)
-# descended from "xv", but in use by other applications as well (Wolfram Kleff)
-0 string P7\ 332 XV "thumbnail file" (icon) data
-
-# taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)
-0 string KiSS KISS/GS
->4 byte 16 color
->>5 byte x %d bit
->>8 leshort x %d colors
->>10 leshort x %d groups
->4 byte 32 cell
->>5 byte x %d bit
->>8 leshort x %d x
->>10 leshort x %d
->>12 leshort x +%d
->>14 leshort x +%d
-
-# Webshots (www.webshots.com), by John Harrison
-0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file
-
-# Hercules DASD image files
-# From Jan Jaeger <jj@septa.nl>
-0 string CKD_P370 Hercules CKD DASD image file
->8 long x \b, %d heads per cylinder
->12 long x \b, track size %d bytes
->16 byte x \b, device type 33%2.2X
-
-0 string CKD_C370 Hercules compressed CKD DASD image file
->8 long x \b, %d heads per cylinder
->12 long x \b, track size %d bytes
->16 byte x \b, device type 33%2.2X
-
-0 string CKD_S370 Hercules CKD DASD shadow file
->8 long x \b, %d heads per cylinder
->12 long x \b, track size %d bytes
->16 byte x \b, device type 33%2.2X
-
-# Squeak images and - etoffi@softhome.net
-0 string \146\031\0\0 Squeak image data
-0 string 'From\040Squeak Squeak program text
-
-# partimage: file(1) magic for PartImage files (experimental, incomplete)
-# Author: Hans-Joachim Baader <hjb@pro-linux.de>
-0 string PaRtImAgE-VoLuMe PartImage
->0x0020 string 0.6.1 file version %s
->>0x0060 lelong >-1 volume %ld
-#>>0x0064 8 byte identifier
-#>>0x007c reserved
->>0x0200 string >\0 type %s
->>0x1400 string >\0 device %s,
->>0x1600 string >\0 original filename %s,
-# Some fields omitted
->>0x2744 lelong 0 not compressed
->>0x2744 lelong 1 gzip compressed
->>0x2744 lelong 2 bzip2 compressed
->>0x2744 lelong >2 compressed with unknown algorithm
->0x0020 string >0.6.1 file version %s
->0x0020 string <0.6.1 file version %s
-
-# DCX is multi-page PCX, using a simple header of up to 1024
-# offsets for the respective PCX components.
-# From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
-0 lelong 987654321 DCX multi-page PCX image data
-
-# Simon Walton <simonw@matteworld.com>
-# Kodak Cineon format for scanned negatives
-# http://www.kodak.com/US/en/motion/support/dlad/
-0 lelong 0xd75f2a80 Cineon image data
->200 belong >0 \b, %ld x
->204 belong >0 %ld
-
-
-# Bio-Rad .PIC is an image format used by microscope control systems
-# and related image processing software used by biologists.
-# From: Vebjorn Ljosa <vebjorn@ljosa.com>
-54 leshort 12345 Bio-Rad .PIC Image File
->0 leshort >0 %hd x
->2 leshort >0 %hd,
->4 leshort =1 1 image in file
->4 leshort >1 %hd images in file
-
-# From Jan "Yenya" Kasprzak <kas@fi.muni.cz>
-# The description of *.mrw format can be found at
-# http://www.dalibor.cz/minolta/raw_file_format.htm
-0 string \000MRM Minolta Dimage camera raw image data
-
-# From: stephane.loeuillet@tiscali.f
-# http://www.djvuzone.org/
-0 string AT&TFORM DjVu Image file
-
-# From: Jason Bacon <bacon@smithers.neuro.mcw.edu>
-0 beshort 0x3020 character Computer Graphics Metafile
-
-
-
-# From: Tom Hilinski <tom.hilinski@comcast.net>
-# http://www.unidata.ucar.edu/packages/netcdf/
-0 string CDF\001 netcdf file
-#
-#------------------------------------------------------------------------------
-# tuxedo: file(1) magic for BEA TUXEDO data files
-#
-# from Ian Springer <ispringer@hotmail.com>
-#
-0 string \0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0 BEA TUXEDO DES mask data
-
-#------------------------------------------------------------------------------
-# timezone: file(1) magic for timezone data
-#
-# from Daniel Quinlan (quinlan@yggdrasil.com)
-# this should work on Linux, SunOS, and maybe others
-# Added new official magic number for recent versions of the Olson code
-0 string TZif timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0 old timezone data
-
-#------------------------------------------------------------------------------
-# project: file(1) magic for Project management
-#
-# Magic strings for ftnchek project files. Alexander Mai
-0 string FTNCHEK_\ P project file for ftnchek
->10 string 1 version 2.7
->10 string 2 version 2.8 to 2.10
->10 string 3 version 2.11 or later
-#------------------------------------------------------------------------------
-# cisco: file(1) magic for cisco Systems routers
-#
-# Most cisco file-formats are covered by the generic elf code
-#
-# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.
-0 belong&0xffffff00 0x85011400 cisco IOS microcode
->7 string >\0 for '%s'
-0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode
->7 string >\0 for '%s'
-#------------------------------------------------------------------------------
-# mach file description
-#
-0 belong 0xcafebabe Mach-O fat file
->4 belong 1 with 1 architecture
->4 belong >1
->>4 belong x with %ld architectures
-#
-0 belong 0xfeedface Mach-O
->12 belong 1 object
->12 belong 2 executable
->12 belong 3 shared library
->12 belong 4 core
->12 belong 5 preload executable
->12 belong 6 dynamically linked shared library
->12 belong 7 dynamic linker
->12 belong 8 bundle
->12 belong >8
->>12 belong x filetype=%ld
->4 belong <0
->>4 belong x architecture=%ld
->4 belong 1 vax
->4 belong 2 romp
->4 belong 3 architecture=3
->4 belong 4 ns32032
->4 belong 5 ns32332
->4 belong 6 for m68k architecture
-# from NeXTstep 3.0 <mach/machine.h>
-# i.e. mc680x0_all, ignore
-# >>8 belong 1 (mc68030)
->>8 belong 2 (mc68040)
->>8 belong 3 (mc68030 only)
->4 belong 7 i386
->4 belong 8 mips
->4 belong 9 ns32532
->4 belong 10 architecture=10
->4 belong 11 hp pa-risc
->4 belong 12 acorn
->4 belong 13 m88k
->4 belong 14 sparc
->4 belong 15 i860-big
->4 belong 16 i860
->4 belong 17 rs6000
->4 belong 18 ppc
->4 belong >18
->>4 belong x architecture=%ld
-
-#------------------------------------------------------------------------------
-# mkid: file(1) magic for mkid(1) databases
-#
-# ID is the binary tags database produced by mkid(1).
-#
-# XXX - byte order?
-#
-0 string \311\304 ID tags data
->2 short >0 version %d
-
-#------------------------------------------------------------------------------
-# pgp: file(1) magic for Pretty Good Privacy
-#
-0 beshort 0x9900 PGP key public ring
-0 beshort 0x9501 PGP key security ring
-0 beshort 0x9500 PGP key security ring
-0 beshort 0xa600 PGP encrypted data
-0 string -----BEGIN\040PGP PGP armored data
->15 string PUBLIC\040KEY\040BLOCK- public key block
->15 string MESSAGE- message
->15 string SIGNED\040MESSAGE- signed message
->15 string PGP\040SIGNATURE- signature
-
-#------------------------------------------------------------------------------
-# terminfo: file(1) magic for terminfo
-#
-# XXX - byte order for screen images?
-#
-0 string \032\001 Compiled terminfo entry
-0 short 0433 Curses screen image
-0 short 0434 Curses screen image
-
-#------------------------------------------------------------------------------
-# printer: file(1) magic for printer-formatted files
-#
-
-# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com)
-0 string %! PostScript document text
->2 string PS-Adobe- conforming
->>11 string >\0 at level %.3s
->>>15 string EPS - type %s
->>>15 string Query - type %s
->>>15 string ExitServer - type %s
-# Some PCs have the annoying habit of adding a ^D as a document separator
-0 string \004%! PostScript document text
->3 string PS-Adobe- conforming
->>12 string >\0 at level %.3s
->>>16 string EPS - type %s
->>>16 string Query - type %s
->>>16 string ExitServer - type %s
-0 string \033%-12345X%!PS PostScript document
-
-
-# DOS EPS Binary File Header
-# From: Ed Sznyter <ews@Black.Market.NET>
-0 belong 0xC5D0D3C6 DOS EPS Binary File
->4 long >0 Postscript starts at byte %d
->>8 long >0 length %d
->>>12 long >0 Metafile starts at byte %d
->>>>16 long >0 length %d
->>>20 long >0 TIFF starts at byte %d
->>>>24 long >0 length %d
-
-# Adobe's PostScript Printer Description (PPD) files
-# Yves Arrouye <arrouye@marin.fdn.fr>
-#
-0 string *PPD-Adobe: PPD file
->13 string x \b, ve
-
-# HP Printer Job Language
-0 string \033%-12345X@PJL HP Printer Job Language data
-# HP Printer Job Language
-# The header found on Win95 HP plot files is the "Silliest Thing possible"
-# (TM)
-# Every driver puts the language at some random position, with random case
-# (LANGUAGE and Language)
-# For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10
-# From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
-#
-0 string \033%-12345X@PJL HP Printer Job Language data
->&0 string >\0 %s
->>&0 string >\0 %s
->>>&0 string >\0 %s
->>>>&0 string >\0 %s
-#>15 string \ ENTER\ LANGUAGE\ =
-#>31 string PostScript PostScript
-
-# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com)
-0 string \033E\033 HP PCL printer data
->3 string \&l0A - default page size
->3 string \&l1A - US executive page size
->3 string \&l2A - US letter page size
->3 string \&l3A - US legal page size
->3 string \&l26A - A4 page size
->3 string \&l80A - Monarch envelope size
->3 string \&l81A - No. 10 envelope size
->3 string \&l90A - Intl. DL envelope size
->3 string \&l91A - Intl. C5 envelope size
->3 string \&l100A - Intl. B5 envelope size
->3 string \&l-81A - No. 10 envelope size (landscape)
->3 string \&l-90A - Intl. DL envelope size (landscape)
-
-# IMAGEN printer-ready files:
-0 string @document( Imagen printer
-# this only works if "language xxx" is first item in Imagen header.
->10 string language\ impress (imPRESS data)
->10 string language\ daisy (daisywheel text)
->10 string language\ diablo (daisywheel text)
->10 string language\ printer (line printer emulation)
->10 string language\ tektronix (Tektronix 4014 emulation)
-# Add any other languages that your Imagen uses - remember
-# to keep the word `text' if the file is human-readable.
-# [GRR 950115: missing "postscript" or "ultrascript" (whatever it was called)]
-#
-# Now magic for IMAGEN font files...
-0 string Rast RST-format raster font data
->45 string >0 face %s
-# From Jukka Ukkonen
-0 string \033[K\002\0\0\017\033(a\001\0\001\033(g Canon Bubble Jet BJC formatted data
-
-# From <mike@flyn.org>
-# These are the /etc/magic entries to decode data sent to an Epson printer.
-0 string \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P Epson Stylus Color 460 data
-
-
-#------------------------------------------------------------------------------
-# zenographics: file(1) magic for Zenographics ZjStream printer data
-# Rick Richardson rickr@mn.rr.com
-0 string JZJZ
->0x12 string ZZ Zenographics ZjStream printer data (big-endian)
-0 string ZJZJ
->0x12 string ZZ Zenographics ZjStream printer data (little-endian)
-
-
-#------------------------------------------------------------------------------
-# Oak Technologies printer stream
-# Rick Richardson <rickr@mn.rr.com>
-0 string OAK
->0x07 byte 0
->0x0b byte 0 Oak Technologies printer stream
-
-# This would otherwise be recognized as PostScript - nick@debian.org
-0 string %!VMF SunClock's Vector Map Format data
-
-#------------------------------------------------------------------------------
-# HP LaserJet 1000 series downloadable firmware file
-0 string \xbe\xefABCDEFGH HP LaserJet 1000 series downloadable firmware
-
-#------------------------------------------------------------------------------
-# apple: file(1) magic for Apple file formats
-#
-0 string FiLeStArTfIlEsTaRt binscii (apple ][) text
-0 string \x0aGL Binary II (apple ][) data
-0 string \x76\xff Squeezed (apple ][) data
-0 string NuFile NuFile archive (apple ][) data
-0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data
-0 belong 0x00051600 AppleSingle encoded Macintosh file
-0 belong 0x00051607 AppleDouble encoded Macintosh file
-
-# magic for Newton PDA package formats
-# from Ruda Moura <ruda@helllabs.org>
-0 string package0 Newton package, NOS 1.x,
->12 belong &0x80000000 AutoRemove,
->12 belong &0x40000000 CopyProtect,
->12 belong &0x10000000 NoCompression,
->12 belong &0x04000000 Relocation,
->12 belong &0x02000000 UseFasterCompression,
->16 belong x version %d
-
-0 string package1 Newton package, NOS 2.x,
->12 belong &0x80000000 AutoRemove,
->12 belong &0x40000000 CopyProtect,
->12 belong &0x10000000 NoCompression,
->12 belong &0x04000000 Relocation,
->12 belong &0x02000000 UseFasterCompression,
->16 belong x version %d
-
-0 string package4 Newton package,
->8 byte 8 NOS 1.x,
->8 byte 9 NOS 2.x,
->12 belong &0x80000000 AutoRemove,
->12 belong &0x40000000 CopyProtect,
->12 belong &0x10000000 NoCompression,
-
-# The following entries for the Apple II are for files that have
-# been transferred as raw binary data from an Apple, without having
-# been encapsulated by any of the above archivers.
-#
-# In general, Apple II formats are hard to identify because Apple DOS
-# and especially Apple ProDOS have strong typing in the file system and
-# therefore programmers never felt much need to include type information
-# in the files themselves.
-#
-# Eric Fischer <enf@pobox.com>
-
-# AppleWorks word processor:
-#
-# This matches the standard tab stops for an AppleWorks file, but if
-# a file has a tab stop set in the first four columns this will fail.
-#
-# The "O" is really the magic number, but that's so common that it's
-# necessary to check the tab stops that follow it to avoid false positives.
-
-4 string O==== AppleWorks word processor data
->85 byte&0x01 >0 \b, zoomed
->90 byte&0x01 >0 \b, paginated
->92 byte&0x01 >0 \b, with mail merge
-#>91 byte x \b, left margin %d
-
-# AppleWorks database:
-#
-# This isn't really a magic number, but it's the closest thing to one
-# that I could find. The 1 and 2 really mean "order in which you defined
-# categories" and "left to right, top to bottom," respectively; the D and R
-# mean that the cursor should move either down or right when you press Return.
-
-#30 string \x01D AppleWorks database data
-#30 string \x02D AppleWorks database data
-#30 string \x01R AppleWorks database data
-#30 string \x02R AppleWorks database data
-
-# AppleWorks spreadsheet:
-#
-# Likewise, this isn't really meant as a magic number. The R or C means
-# row- or column-order recalculation; the A or M means automatic or manual
-# recalculation.
-
-#131 string RA AppleWorks spreadsheet data
-#131 string RM AppleWorks spreadsheet data
-#131 string CA AppleWorks spreadsheet data
-#131 string CM AppleWorks spreadsheet data
-
-# Applesoft BASIC:
-#
-# This is incredibly sloppy, but will be true if the program was
-# written at its usual memory location of 2048 and its first line
-# number is less than 256. Yuck.
-
-0 belong&0xff00ff 0x80000 Applesoft BASIC program data
-#>2 leshort x \b, first line number %d
-
-# ORCA/EZ assembler:
-#
-# This will not identify ORCA/M source files, since those have
-# some sort of date code instead of the two zero bytes at 6 and 7
-# XXX Conflicts with ELF
-#4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data
-#>5 byte x \b, build number %d
-
-# Broderbund Fantavision
-#
-# I don't know what these values really mean, but they seem to recur.
-# Will they cause too many conflicts?
-
-# Probably :-)
-#2 belong&0xFF00FF 0x040008 Fantavision movie data
-
-# Some attempts at images.
-#
-# These are actually just bit-for-bit dumps of the frame buffer, so
-# there's really no reasonably way to distinguish them except for their
-# address (if preserved) -- 8192 or 16384 -- and their length -- 8192
-# or, occasionally, 8184.
-#
-# Nevertheless this will manage to catch a lot of images that happen
-# to have a solid-colored line at the bottom of the screen.
-
-8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background
-8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background
-8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background
-8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background
-8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background
-
-# Beagle Bros. Apple Mechanic fonts
-
-0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font
-
-# Apple Universal Disk Image Format (UDIF) - dmg files.
-# From Johan Gade.
-# These entries are disabled for now until we fix the following issues.
-#
-# Note there might be some problems with the "VAX COFF executable"
-# entry. Note this entry should be placed before the mac filesystem section,
-# particularly the "Apple Partition data" entry.
-#
-# The intended meaning of these tests is, that the file is only of the
-# specified type if both of the lines are correct - i.e. if the first
-# line matches and the second doesn't then it is not of that type.
-#
-#0 long 0x7801730d
-#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO)
-#
-# Note that this entry is recognized correctly by the "Apple Partition
-# data" entry - however since this entry is more specific - this
-# information seems to be more useful.
-#0 long 0x45520200
-#>0x410 string disk\ image UDIF read/write image (UDRW)
-
-#------------------------------------------------------------------------------
-# applix: file(1) magic for Applixware
-# From: Peter Soos <sp@osb.hu>
-#
-0 string *BEGIN Applixware
->7 string WORDS Words Document
->7 string GRAPHICS Graphic
->7 string RASTER Bitmap
->7 string SPREADSHEETS Spreadsheet
->7 string MACRO Macro
->7 string BUILDER Builder Object
-
-#------------------------------------------------------------------------------
-# interleaf: file(1) magic for InterLeaf TPS:
-#
-0 string =\210OPS Interleaf saved data
-0 string =<!OPS Interleaf document text
->5 string ,\ Version\ = \b, version
->>17 string >\0 %.3s
-
-#------------------------------------------------------------------------------
-# lisp: file(1) magic for lisp programs
-#
-# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
-
-# This is a guess, but a good one.
-0 string ;; Lisp/Scheme program text
-
-# Emacs 18 - this is always correct, but not very magical.
-0 string \012( Emacs v18 byte-compiled Lisp data
-# Emacs 19+ - ver. recognition added by Ian Springer
-# Also applies to XEmacs 19+ .elc files; could tell them apart if we had regexp
-# support or similar - Chris Chittleborough <cchittleborough@yahoo.com.au>
-0 string ;ELC
->4 byte >19
->4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data
-
-# Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr>
-0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program text
-0 long 0x70768BD2 CLISP memory image data
-0 long 0xD28B7670 CLISP memory image data, other endian
-
-# Files produced by GNU gettext
-0 long 0xDE120495 GNU-format message catalog data
-0 long 0x950412DE GNU-format message catalog data
-
-#.com and .bin for MIT scheme
-0 string \372\372\372\372 MIT scheme (library?)
-
-# From: David Allouche <david@allouche.net>
-0 string \<TeXmacs| TeXmacs document text
-
-#------------------------------------------------------------------------------
-# spec: file(1) magic for SPEC raw results (*.raw, *.rsf)
-#
-# Cloyce D. Spradling <cloyce@headgear.org>
-
-0 string spec SPEC
->4 string .cpu CPU
->>8 string <: \b%.4s
->>12 string . raw result text
-
-17 string version=SPECjbb SPECjbb
->32 string <: \b%.4s
->>37 string <: v%.4s raw result text
-
-0 string BEGIN\040SPECWEB SPECweb
->13 string <: \b%.2s
->>15 string _SSL \b_SSL
->>>20 string <: v%.4s raw result text
->>16 string <: v%.4s raw result text
-
-#------------------------------------------------------------------------------
-# sniffer: file(1) magic for packet capture files
-#
-# From: guy@alum.mit.edu (Guy Harris)
-#
-
-#
-# Microsoft Network Monitor 1.x capture files.
-#
-0 string RTSS NetMon capture file
->5 byte x - version %d
->4 byte x \b.%d
->6 leshort 0 (Unknown)
->6 leshort 1 (Ethernet)
->6 leshort 2 (Token Ring)
->6 leshort 3 (FDDI)
->6 leshort 4 (ATM)
-
-#
-# Microsoft Network Monitor 2.x capture files.
-#
-0 string GMBU NetMon capture file
->5 byte x - version %d
->4 byte x \b.%d
->6 leshort 0 (Unknown)
->6 leshort 1 (Ethernet)
->6 leshort 2 (Token Ring)
->6 leshort 3 (FDDI)
->6 leshort 4 (ATM)
-
-#
-# Network General Sniffer capture files.
-# Sorry, make that "Network Associates Sniffer capture files."
-# Sorry, make that "Network General old DOS Sniffer capture files."
-#
-0 string TRSNIFF\ data\ \ \ \ \032 Sniffer capture file
->33 byte 2 (compressed)
->23 leshort x - version %d
->25 leshort x \b.%d
->32 byte 0 (Token Ring)
->32 byte 1 (Ethernet)
->32 byte 2 (ARCNET)
->32 byte 3 (StarLAN)
->32 byte 4 (PC Network broadband)
->32 byte 5 (LocalTalk)
->32 byte 6 (Znet)
->32 byte 7 (Internetwork Analyzer)
->32 byte 9 (FDDI)
->32 byte 10 (ATM)
-
-#
-# Cinco Networks NetXRay capture files.
-# Sorry, make that "Network General Sniffer Basic capture files."
-# Sorry, make that "Network Associates Sniffer Basic capture files."
-# Sorry, make that "Network Associates Sniffer Basic, and Windows
-# Sniffer Pro", capture files."
-# Sorry, make that "Network General Sniffer capture files."
-#
-0 string XCP\0 NetXRay capture file
->4 string >\0 - version %s
->44 leshort 0 (Ethernet)
->44 leshort 1 (Token Ring)
->44 leshort 2 (FDDI)
->44 leshort 3 (WAN)
->44 leshort 8 (ATM)
->44 leshort 9 (802.11)
-
-#
-# "libpcap" capture files.
-# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
-# the main program that uses that format, but there are other programs
-# that use "libpcap", or that use the same capture file format.)
-#
-0 ubelong 0xa1b2c3d4 tcpdump capture file (big-endian)
->4 beshort x - version %d
->6 beshort x \b.%d
->20 belong 0 (No link-layer encapsulation
->20 belong 1 (Ethernet
->20 belong 2 (3Mb Ethernet
->20 belong 3 (AX.25
->20 belong 4 (ProNET
->20 belong 5 (CHAOS
->20 belong 6 (Token Ring
->20 belong 7 (BSD ARCNET
->20 belong 8 (SLIP
->20 belong 9 (PPP
->20 belong 10 (FDDI
->20 belong 11 (RFC 1483 ATM
->20 belong 12 (raw IP
->20 belong 13 (BSD/OS SLIP
->20 belong 14 (BSD/OS PPP
->20 belong 19 (Linux ATM Classical IP
->20 belong 50 (PPP or Cisco HDLC
->20 belong 51 (PPP-over-Ethernet
->20 belong 99 (Symantec Enterprise Firewall
->20 belong 100 (RFC 1483 ATM
->20 belong 101 (raw IP
->20 belong 102 (BSD/OS SLIP
->20 belong 103 (BSD/OS PPP
->20 belong 104 (BSD/OS Cisco HDLC
->20 belong 105 (802.11
->20 belong 106 (Linux Classical IP over ATM
->20 belong 107 (Frame Relay
->20 belong 108 (OpenBSD loopback
->20 belong 109 (OpenBSD IPsec encrypted
->20 belong 112 (Cisco HDLC
->20 belong 113 (Linux "cooked"
->20 belong 114 (LocalTalk
->20 belong 117 (OpenBSD PFLOG
->20 belong 119 (802.11 with Prism header
->20 belong 122 (RFC 2625 IP over Fibre Channel
->20 belong 123 (SunATM
->20 belong 127 (802.11 with radiotap header
->20 belong 129 (Linux ARCNET
->20 belong 138 (Apple IP over IEEE 1394
->20 belong 140 (MTP2
->20 belong 141 (MTP3
->20 belong 143 (DOCSIS
->20 belong 144 (IrDA
->20 belong 147 (Private use 0
->20 belong 148 (Private use 1
->20 belong 149 (Private use 2
->20 belong 150 (Private use 3
->20 belong 151 (Private use 4
->20 belong 152 (Private use 5
->20 belong 153 (Private use 6
->20 belong 154 (Private use 7
->20 belong 155 (Private use 8
->20 belong 156 (Private use 9
->20 belong 157 (Private use 10
->20 belong 158 (Private use 11
->20 belong 159 (Private use 12
->20 belong 160 (Private use 13
->20 belong 161 (Private use 14
->20 belong 162 (Private use 15
->20 belong 163 (802.11 with AVS header
->16 belong x \b, capture length %d)
-0 ulelong 0xa1b2c3d4 tcpdump capture file (little-endian)
->4 leshort x - version %d
->6 leshort x \b.%d
->20 lelong 0 (No link-layer encapsulation
->20 lelong 1 (Ethernet
->20 lelong 2 (3Mb Ethernet
->20 lelong 3 (AX.25
->20 lelong 4 (ProNET
->20 lelong 5 (CHAOS
->20 lelong 6 (Token Ring
->20 lelong 7 (ARCNET
->20 lelong 8 (SLIP
->20 lelong 9 (PPP
->20 lelong 10 (FDDI
->20 lelong 11 (RFC 1483 ATM
->20 lelong 12 (raw IP
->20 lelong 13 (BSD/OS SLIP
->20 lelong 14 (BSD/OS PPP
->20 lelong 19 (Linux ATM Classical IP
->20 lelong 50 (PPP or Cisco HDLC
->20 lelong 51 (PPP-over-Ethernet
->20 lelong 99 (Symantec Enterprise Firewall
->20 lelong 100 (RFC 1483 ATM
->20 lelong 101 (raw IP
->20 lelong 102 (BSD/OS SLIP
->20 lelong 103 (BSD/OS PPP
->20 lelong 104 (BSD/OS Cisco HDLC
->20 lelong 105 (802.11
->20 lelong 106 (Linux Classical IP over ATM
->20 lelong 107 (Frame Relay
->20 lelong 108 (OpenBSD loopback
->20 lelong 109 (OpenBSD IPsec encrypted
->20 lelong 112 (Cisco HDLC
->20 lelong 113 (Linux "cooked"
->20 lelong 114 (LocalTalk
->20 lelong 117 (OpenBSD PFLOG
->20 lelong 119 (802.11 with Prism header
->20 lelong 122 (RFC 2625 IP over Fibre Channel
->20 lelong 123 (SunATM
->20 lelong 127 (802.11 with radiotap header
->20 lelong 129 (Linux ARCNET
->20 lelong 138 (Apple IP over IEEE 1394
->20 lelong 140 (MTP2
->20 lelong 141 (MTP3
->20 lelong 143 (DOCSIS
->20 lelong 144 (IrDA
->20 lelong 147 (Private use 0
->20 lelong 148 (Private use 1
->20 lelong 149 (Private use 2
->20 lelong 150 (Private use 3
->20 lelong 151 (Private use 4
->20 lelong 152 (Private use 5
->20 lelong 153 (Private use 6
->20 lelong 154 (Private use 7
->20 lelong 155 (Private use 8
->20 lelong 156 (Private use 9
->20 lelong 157 (Private use 10
->20 lelong 158 (Private use 11
->20 lelong 159 (Private use 12
->20 lelong 160 (Private use 13
->20 lelong 161 (Private use 14
->20 lelong 162 (Private use 15
->20 lelong 163 (802.11 with AVS header
->16 lelong x \b, capture length %d)
-
-#
-# "libpcap"-with-Alexey-Kuznetsov's-patches capture files.
-# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
-# the main program that uses that format, but there are other programs
-# that use "libpcap", or that use the same capture file format.)
-#
-0 ubelong 0xa1b2cd34 extended tcpdump capture file (big-endian)
->4 beshort x - version %d
->6 beshort x \b.%d
->20 belong 0 (No link-layer encapsulation
->20 belong 1 (Ethernet
->20 belong 2 (3Mb Ethernet
->20 belong 3 (AX.25
->20 belong 4 (ProNET
->20 belong 5 (CHAOS
->20 belong 6 (Token Ring
->20 belong 7 (ARCNET
->20 belong 8 (SLIP
->20 belong 9 (PPP
->20 belong 10 (FDDI
->20 belong 11 (RFC 1483 ATM
->20 belong 12 (raw IP
->20 belong 13 (BSD/OS SLIP
->20 belong 14 (BSD/OS PPP
->16 belong x \b, capture length %d)
-0 ulelong 0xa1b2cd34 extended tcpdump capture file (little-endian)
->4 leshort x - version %d
->6 leshort x \b.%d
->20 lelong 0 (No link-layer encapsulation
->20 lelong 1 (Ethernet
->20 lelong 2 (3Mb Ethernet
->20 lelong 3 (AX.25
->20 lelong 4 (ProNET
->20 lelong 5 (CHAOS
->20 lelong 6 (Token Ring
->20 lelong 7 (ARCNET
->20 lelong 8 (SLIP
->20 lelong 9 (PPP
->20 lelong 10 (FDDI
->20 lelong 11 (RFC 1483 ATM
->20 lelong 12 (raw IP
->20 lelong 13 (BSD/OS SLIP
->20 lelong 14 (BSD/OS PPP
->16 lelong x \b, capture length %d)
-
-#
-# AIX "iptrace" capture files.
-#
-0 string iptrace\ 1.0 "iptrace" capture file
-0 string iptrace\ 2.0 "iptrace" capture file
-
-#
-# Novell LANalyzer capture files.
-#
-0 leshort 0x1001 LANalyzer capture file
-0 leshort 0x1007 LANalyzer capture file
-
-#
-# HP-UX "nettl" capture files.
-#
-0 string \x54\x52\x00\x64\x00 "nettl" capture file
-
-#
-# RADCOM WAN/LAN Analyzer capture files.
-#
-0 string \x42\xd2\x00\x34\x12\x66\x22\x88 RADCOM WAN/LAN Analyzer capture file
-
-#
-# NetStumbler log files. Not really packets, per se, but about as
-# close as you can get. These are log files from NetStumbler, a
-# Windows program, that scans for 802.11b networks.
-#
-0 string NetS NetStumbler log file
->8 lelong x \b, %d stations found
-
-#
-# EtherPeek/AiroPeek "version 9" capture files.
-#
-0 string \177ver EtherPeek/AiroPeek capture file
-
-#
-# Visual Networks traffic capture files.
-#
-0 string \x05VNF Visual Networks traffic capture file
-
-#
-# Network Instruments Observer capture files.
-#
-0 string ObserverPktBuffe Network Instruments Observer capture file
-
-#
-# Files from Accellent Group's 5View products.
-#
-0 string \xaa\xaa\xaa\xaa 5View capture file
-
-#------------------------------------------------------------------------------
-# file(1) magic for revision control files
-# From Hendrik Scholz <hendrik@scholz.net>
-0 string /1\ :pserver: cvs password text file
-#------------------------------------------------------------------------------
-# amigaos: file(1) magic for AmigaOS binary formats:
-
-#
-# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis)
-#
-0 belong 0x000003fa AmigaOS shared library
-0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary
-0 belong 0x000003e7 AmigaOS object/library data
-#
-0 beshort 0xe310 Amiga Workbench
->2 beshort 1
->>48 byte 1 disk icon
->>48 byte 2 drawer icon
->>48 byte 3 tool icon
->>48 byte 4 project icon
->>48 byte 5 garbage icon
->>48 byte 6 device icon
->>48 byte 7 kickstart icon
->>48 byte 8 workbench application icon
->2 beshort >1 icon, vers. %d
-#
-# various sound formats from the Amiga
-# G=F6tz Waschk <waschk@informatik.uni-rostock.de>
-#
-0 string FC14 Future Composer 1.4 Module sound file
-0 string SMOD Future Composer 1.3 Module sound file
-0 string AON4artofnoise Art Of Noise Module sound file
-1 string MUGICIAN/SOFTEYES Mugician Module sound file
-58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file
-0 string Synth4.0 Synthesis Module sound file
-0 string ARP. The Holy Noise Module sound file
-0 string BeEp\0 JamCracker Module sound file
-0 string COSO\0 Hippel-COSO Module sound file
-# Too simple (short, pure ASCII, deep), MPi
-#26 string V.3 Brian Postma's Soundmon Module sound file v3
-#26 string BPSM Brian Postma's Soundmon Module sound file v3
-#26 string V.2 Brian Postma's Soundmon Module sound file v2
-
-# The following are from: "Stefan A. Haubenthal" <polluks@web.de>
-0 beshort 0x0f00 AmigaOS bitmap font
-0 beshort 0x0f03 AmigaOS outline font
-0 belong 0x80001001 AmigaOS outline tag
-0 string ##\ version catalog translation
-
-# Amiga disk types
-#
-0 string RDSK Rigid Disk Block
->160 string x on %.24s
-0 string DOS\0 Amiga DOS disk
-0 string DOS\1 Amiga FFS disk
-0 string DOS\2 Amiga Inter DOS disk
-0 string DOS\3 Amiga Inter FFS disk
-0 string DOS\4 Amiga Fastdir DOS disk
-0 string DOS\5 Amiga Fastdir FFS disk
-0 string KICK Kickstart disk
-
-#------------------------------------------------------------------------------
-# database: file(1) magic for various databases
-#
-# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
-#
-#
-# GDBM magic numbers
-# Will be maintained as part of the GDBM distribution in the future.
-# <downsj@teeny.org>
-0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian
-0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian
-0 string GDBM GNU dbm 2.x database
-#
-# Berkeley DB
-#
-# Ian Darwin's file /etc/magic files: big/little-endian version.
-#
-# Hash 1.85/1.86 databases store metadata in network byte order.
-# Btree 1.85/1.86 databases store the metadata in host byte order.
-# Hash and Btree 2.X and later databases store the metadata in host byte order.
-
-0 long 0x00061561 Berkeley DB
->8 belong 4321
->>4 belong >2 1.86
->>4 belong <3 1.85
->>4 belong >0 (Hash, version %d, native byte-order)
->8 belong 1234
->>4 belong >2 1.86
->>4 belong <3 1.85
->>4 belong >0 (Hash, version %d, little-endian)
-
-0 belong 0x00061561 Berkeley DB
->8 belong 4321
->>4 belong >2 1.86
->>4 belong <3 1.85
->>4 belong >0 (Hash, version %d, big-endian)
->8 belong 1234
->>4 belong >2 1.86
->>4 belong <3 1.85
->>4 belong >0 (Hash, version %d, native byte-order)
-
-0 long 0x00053162 Berkeley DB 1.85/1.86
->4 long >0 (Btree, version %d, native byte-order)
-0 belong 0x00053162 Berkeley DB 1.85/1.86
->4 belong >0 (Btree, version %d, big-endian)
-0 lelong 0x00053162 Berkeley DB 1.85/1.86
->4 lelong >0 (Btree, version %d, little-endian)
-
-12 long 0x00061561 Berkeley DB
->16 long >0 (Hash, version %d, native byte-order)
-12 belong 0x00061561 Berkeley DB
->16 belong >0 (Hash, version %d, big-endian)
-12 lelong 0x00061561 Berkeley DB
->16 lelong >0 (Hash, version %d, little-endian)
-
-12 long 0x00053162 Berkeley DB
->16 long >0 (Btree, version %d, native byte-order)
-12 belong 0x00053162 Berkeley DB
->16 belong >0 (Btree, version %d, big-endian)
-12 lelong 0x00053162 Berkeley DB
->16 lelong >0 (Btree, version %d, little-endian)
-
-12 long 0x00042253 Berkeley DB
->16 long >0 (Queue, version %d, native byte-order)
-12 belong 0x00042253 Berkeley DB
->16 belong >0 (Queue, version %d, big-endian)
-12 lelong 0x00042253 Berkeley DB
->16 lelong >0 (Queue, version %d, little-endian)
-#
-#
-# Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch>
-0 string RRD RRDTool DB
->4 string x version %s
-#----------------------------------------------------------------------
-# ROOT: file(1) magic for ROOT databases
-#
-0 string root\0 ROOT file
->4 belong x Version %d
->33 belong x (Compression: %d)
-
-# XXX: Weak magic.
-# Alex Ott <ott@jet.msk.su>
-## Paradox file formats
-#2 leshort 0x0800 Paradox
-#>0x39 byte 3 v. 3.0
-#>0x39 byte 4 v. 3.5
-#>0x39 byte 9 v. 4.x
-#>0x39 byte 10 v. 5.x
-#>0x39 byte 11 v. 5.x
-#>0x39 byte 12 v. 7.x
-#>>0x04 byte 0 indexed .DB data file
-#>>0x04 byte 1 primary index .PX file
-#>>0x04 byte 2 non-indexed .DB data file
-#>>0x04 byte 3 non-incrementing secondary index .Xnn file
-#>>0x04 byte 4 secondary index .Ynn file
-#>>0x04 byte 5 incrementing secondary index .Xnn file
-#>>0x04 byte 6 non-incrementing secondary index .XGn file
-#>>0x04 byte 7 secondary index .YGn file
-#>>>0x04 byte 8 incrementing secondary index .XGn file
-## XBase database files
-#0 byte 0x02
-#>8 leshort >0
-#>>12 leshort 0 FoxBase
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x03
-#>8 leshort >0
-#>>12 leshort 0 FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x04
-#>8 leshort >0
-#>>12 leshort 0 dBASE IV no memo file
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x05
-#>8 leshort >0
-#>>12 leshort 0 dBASE V no memo file
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x30
-#>8 leshort >0
-#>>12 leshort 0 Visual FoxPro
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x43
-#>8 leshort >0
-#>>12 leshort 0 FlagShip with memo var size
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x7b
-#>8 leshort >0
-#>>12 leshort 0 dBASEIV with memo
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x83
-#>8 leshort >0
-#>>12 leshort 0 FoxBase+, dBaseIII+ with memo
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x8b
-#>8 leshort >0
-#>>12 leshort 0 dBaseIV with memo
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0x8e
-#>8 leshort >0
-#>>12 leshort 0 dBaseIV with SQL Table
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0xb3
-#>8 leshort >0
-#>>12 leshort 0 FlagShip with .dbt memo
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 byte 0xf5
-#>8 leshort >0
-#>>12 leshort 0 FoxPro with memo
-#>>>0x04 lelong 0 (no records)
-#>>>0x04 lelong >0 (%ld records)
-#
-#0 leshort 0x0006 DBase 3 index file
-
-# MS Access database
-4 string Standard\ Jet\ DB Microsoft Access Database
-
-# TDB database from Samba et al - Martin Pool <mbp@samba.org>
-0 string TDB\ file TDB database
->32 lelong 0x2601196D version 6, little-endian
->>36 lelong x hash size %d bytes
-
-# SE Linux policy database
-0 lelong 0xf97cff8c SE Linux policy
->16 lelong x v%d
->20 lelong 1 MLS
->24 lelong x %d symbols
->28 lelong x %d ocons
-
-# ICE authority file data (Wolfram Kleff)
-2 string ICE ICE authority data
-
-# X11 Xauthority file (Wolfram Kleff)
-10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-
-#------------------------------------------------------------------------------
-# gringotts: file(1) magic for Gringotts
-# http://devel.pluto.linux.it/projects/Gringotts/
-# author: Germano Rizzo <mano@pluto.linux.it>
-#GRG3????Y
-0 string GRG Gringotts data file
-#file format 1
->3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9
-#file format 2
->3 string 2 v.2, MCRYPT S2K,
->>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
->>8 byte&0x70 0x10 SERPENT crypt,
->>8 byte&0x70 0x20 TWOFISH crypt,
->>8 byte&0x70 0x30 CAST-256 crypt,
->>8 byte&0x70 0x40 SAFER+ crypt,
->>8 byte&0x70 0x50 LOKI97 crypt,
->>8 byte&0x70 0x60 3DES crypt,
->>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
->>8 byte&0x08 0x00 SHA1 hash,
->>8 byte&0x08 0x08 RIPEMD-160 hash,
->>8 byte&0x04 0x00 ZLib
->>8 byte&0x04 0x04 BZip2
->>8 byte&0x03 0x00 lvl.0
->>8 byte&0x03 0x01 lvl.3
->>8 byte&0x03 0x02 lvl.6
->>8 byte&0x03 0x03 lvl.9
-#file format 3
->3 string 3 v.3, OpenPGP S2K,
->>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
->>8 byte&0x70 0x10 SERPENT crypt,
->>8 byte&0x70 0x20 TWOFISH crypt,
->>8 byte&0x70 0x30 CAST-256 crypt,
->>8 byte&0x70 0x40 SAFER+ crypt,
->>8 byte&0x70 0x50 LOKI97 crypt,
->>8 byte&0x70 0x60 3DES crypt,
->>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
->>8 byte&0x08 0x00 SHA1 hash,
->>8 byte&0x08 0x08 RIPEMD-160 hash,
->>8 byte&0x04 0x00 ZLib
->>8 byte&0x04 0x04 BZip2
->>8 byte&0x03 0x00 lvl.0
->>8 byte&0x03 0x01 lvl.3
->>8 byte&0x03 0x02 lvl.6
->>8 byte&0x03 0x03 lvl.9
-#file format >3
->3 string >3 v.%.1s (unknown details)
-
-#------------------------------------------------------------------------------
-# pbm: file(1) magic for Portable Bitmap files
-#
-# XXX - byte order?
-#
-0 short 0x2a17 "compact bitmap" format (Poskanzer)
-
-#------------------------------------------------------------------------------
-# plus5: file(1) magic for Plus Five's UNIX MUMPS
-#
-# XXX - byte order? Paging Hokey....
-#
-0 short 0x259 mumps avl global
->2 byte >0 (V%d)
->6 byte >0 with %d byte name
->7 byte >0 and %d byte data cells
-0 short 0x25a mumps blt global
->2 byte >0 (V%d)
->8 short >0 - %d byte blocks
->15 byte 0x00 - P/D format
->15 byte 0x01 - P/K/D format
->15 byte 0x02 - K/D format
->15 byte >0x02 - Bad Flags
-
-#------------------------------------------------------------------------------
-# vms: file(1) magic for VMS executables (experimental)
-#
-# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu)
-
-# GRR 950122: I'm just guessing on these, based on inspection of the headers
-# of three executables each for Alpha and VAX architectures. The VAX files
-# all had headers similar to this:
-#
-# 00000 b0 00 30 00 44 00 60 00 00 00 00 00 30 32 30 35 ..0.D.`.....0205
-# 00010 01 01 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 ................
-#
-0 string \xb0\0\x30\0 VMS VAX executable
->44032 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
-#
-# The AXP files all looked like this, except that the byte at offset 0x22
-# was 06 in some of them and 07 in others:
-#
-# 00000 03 00 00 00 00 00 00 00 ec 02 00 00 10 01 00 00 ................
-# 00010 68 00 00 00 98 00 00 00 b8 00 00 00 00 00 00 00 h...............
-# 00020 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
-# 00030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................
-# 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................
-#
-0 belong 0x03000000 VMS Alpha executable
->75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
-
-#------------------------------------------------------------------------------
-# python: file(1) magic for python
-#
-# From: David Necas <yeti@physics.muni.cz>
-# often the module starts with a multiline string
-0 string """ a python script text executable
-# MAGIC as specified in Python/import.c (1.5 to 2.3.0a)
-# 20121 ( YEAR - 1995 ) + MONTH + DAY (little endian followed by "\r\n"
-0 belong 0x994e0d0a python 1.5/1.6 byte-compiled
-0 belong 0x87c60d0a python 2.0 byte-compiled
-0 belong 0x2aeb0d0a python 2.1 byte-compiled
-0 belong 0x2ded0d0a python 2.2 byte-compiled
-0 belong 0x3bf20d0a python 2.3 byte-compiled
-
-#------------------------------------------------------------------------------
-# chord: file(1) magic for Chord music sheet typesetting utility input files
-#
-# From Philippe De Muyter <phdm@macqel.be>
-# File format is actually free, but many distributed files begin with `{title'
-#
-0 string {title Chord text file
-
-
-# ----------------------------------------------------------------------------
-# ctags: file (1) magic for Exuberant Ctags files
-# From: Alexander Mai <mai@migdal.ikp.physik.tu-darmstadt.de>
-0 string !_TAG Exuberant Ctags tag file text
-
-#------------------------------------------------------------------------------
-# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats
-# Magic too short!
-#0 string HU Human68k
-#>68 string LZX LZX compressed
-#>>72 string >\0 (version %s)
-#>(8.L+74) string LZX LZX compressed
-#>>(8.L+78) string >\0 (version %s)
-#>60 belong >0 binded
-#>(8.L+66) string #HUPAIR hupair
-#>0 string HU X executable
-#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1
-#>4 belong >0 - base address 0x%x
-#>28 belong >0 not stripped
-#>32 belong >0 with debug information
-#0 beshort 0x601a Human68k Z executable
-#0 beshort 0x6000 Human68k object file
-#0 belong 0xd1000000 Human68k ar binary archive
-#0 belong 0xd1010000 Human68k ar ascii archive
-#0 beshort 0x0068 Human68k lib archive
-#4 string LZX Human68k LZX compressed
-#>8 string >\0 (version %s)
-#>4 string LZX R executable
-#2 string #HUPAIR Human68k hupair R executable
-
-#------------------------------------------------------------------------------
-# pdp: file(1) magic for PDP-11 executable/object and APL workspace
-#
-0 lelong 0101555 PDP-11 single precision APL workspace
-0 lelong 0101554 PDP-11 double precision APL workspace
-#
-# PDP-11 a.out
-#
-0 leshort 0407 PDP-11 executable
->8 leshort >0 not stripped
->15 byte >0 - version %ld
-
-0 leshort 0401 PDP-11 UNIX/RT ldp
-0 leshort 0405 PDP-11 old overlay
-
-0 leshort 0410 PDP-11 pure executable
->8 leshort >0 not stripped
->15 byte >0 - version %ld
-
-0 leshort 0411 PDP-11 separate I&D executable
->8 leshort >0 not stripped
->15 byte >0 - version %ld
-
-0 leshort 0437 PDP-11 kernel overlay
-
-# These last three are derived from 2.11BSD file(1)
-0 leshort 0413 PDP-11 demand-paged pure executable
->8 leshort >0 not stripped
-
-0 leshort 0430 PDP-11 overlaid pure executable
->8 leshort >0 not stripped
-
-0 leshort 0431 PDP-11 overlaid separate executable
->8 leshort >0 not stripped
-
-#------------------------------------------------------------------------
-# file(1) magic for sharc files
-#
-# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by
-# FutureGroove Music (dsp@futuregroove.de)
-
-#------------------------------------------------------------------------
-0 string Draw RiscOS Drawfile
-0 string PACK RiscOS PackdDir archive
-
-#------------------------------------------------------------------------
-# SHARC DSP stuff (based on the FGM SHARC DSP SDK)
-
-0 string ! Assembler source
-0 string Analog ADi asm listing file
-0 string .SYSTEM SHARC architecture file
-0 string .system SHARC architecture file
-
-0 leshort 0x521C SHARC COFF binary
->2 leshort >1 , %hd sections
->>12 lelong >0 , not stripped
-
-#------------------------------------------------------------------------------
-# pulsar: file(1) magic for Pulsar POP3 daemon binary files
-#
-# http://pulsar.sourceforge.net
-# mailto:rok.papez@lugos.si
-#
-
-0 belong 0x1ee7f11e Pulsar POP3 daemon mailbox cache file.
->4 ubelong x Version: %d.
->8 ubelong x \b%d
-
-
-#------------------------------------------------------------------------------
-# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL
-# workspaces)
-#
-0 long 0100554 APL workspace (Ken's original?)
-
-#----------------------------------------------------------------------------
-# communication
-
-# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3.
-# It is used for conformance testing of communication protocols.
-# Added by W. Borgert <debacle@debian.org>.
-0 string $Suite TTCN Abstract Test Suite
->&1 string $SuiteId
->>&1 string >\n %s
->&2 string $SuiteId
->>&1 string >\n %s
->&3 string $SuiteId
->>&1 string >\n %s
-
-# MSC (message sequence charts) are a formal description technique,
-# described in ITU-T Z.120, mainly used for communication protocols.
-# Added by W. Borgert <debacle@debian.org>.
-0 string mscdocument Message Sequence Chart (document)
-0 string msc Message Sequence Chart (chart)
-0 string submsc Message Sequence Chart (subchart)
-
-#------------------------------------------------------------------------------
-# ncr: file(1) magic for NCR Tower objects
-#
-# contributed by
-# Michael R. Wayne *** TMC & Associates *** INTERNET: wayne@ford-vax.arpa
-# uucp: {philabs | pyramid} !fmsrl7!wayne OR wayne@fmsrl7.UUCP
-#
-0 beshort 000610 Tower/XP rel 2 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %ld
-0 beshort 000615 Tower/XP rel 2 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %ld
-0 beshort 000620 Tower/XP rel 3 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %ld
-0 beshort 000625 Tower/XP rel 3 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %ld
-0 beshort 000630 Tower32/600/400 68020 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %ld
-0 beshort 000640 Tower32/800 68020
->18 beshort &020000 w/68881 object
->18 beshort &040000 compatible object
->18 beshort &~060000 object
->20 beshort 0407 executable
->20 beshort 0413 pure executable
->12 belong >0 not stripped
->22 beshort >0 - version %ld
-0 beshort 000645 Tower32/800 68010
->18 beshort &040000 compatible object
->18 beshort &~060000 object
->20 beshort 0407 executable
->20 beshort 0413 pure executable
->12 belong >0 not stripped
->22 beshort >0 - version %ld
-#------------------------------------------------------------------------------
-# alpha architecture description
-#
-
-0 leshort 0603 COFF format alpha
->22 leshort&030000 !020000 executable
->24 leshort 0410 pure
->24 leshort 0413 paged
->22 leshort&020000 !0 dynamically linked
->16 lelong !0 not stripped
->16 lelong 0 stripped
->22 leshort&030000 020000 shared library
->24 leshort 0407 object
->27 byte x - version %d
->26 byte x \b.%d
->28 byte x \b-%d
-
-# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>
-#
-# The actual magic number is just "Core", followed by a 2-byte version
-# number; however, treating any file that begins with "Core" as a Digital
-# UNIX core dump file may produce too many false hits, so we include one
-# byte of the version number as well; DU 5.0 appears only to be up to
-# version 2.
-#
-0 string Core\001 Alpha COFF format core dump (Digital UNIX)
->24 string >\0 \b, from '%s'
-0 string Core\002 Alpha COFF format core dump (Digital UNIX)
->24 string >\0 \b, from '%s'
-
-
-#------------------------------------------------------------------------------
-# asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character
-# strings as "long" - we assume they're just strings:
-# From: guy@netapp.com (Guy Harris)
-#
-0 string *STA Aster*x
->7 string WORD Words Document
->7 string GRAP Graphic
->7 string SPRE Spreadsheet
->7 string MACR Macro
-0 string 2278 Aster*x Version 2
->29 byte 0x36 Words Document
->29 byte 0x35 Graphic
->29 byte 0x32 Spreadsheet
->29 byte 0x38 Macro
-
-#------------------------------------------------------------------------------
-# blender: file(1) magic for Blender 3D data files
-#
-# Coded by Guillermo S. Romero <gsromero@alumnos.euitt.upm.es> using the
-# data from Ton Roosendaal <ton@blender.nl>. Ton or his company do not
-# support the rule, so mail GSR if problems with it. Rule version: 1.1.
-# You can get latest version with comments and details about the format
-# at http://acd.asoc.euitt.upm.es/~gsromero/3d/blender/magic.blender
-
-0 string =BLENDER Blender3D,
->7 string =_ saved as 32-bits
->7 string =- saved as 64-bits
->8 string =v little endian
->8 string =V big endian
->9 byte x with version %c.
->10 byte x \b%c
->11 byte x \b%c
-
-#------------------------------------------------------------------------------
-# sendmail: file(1) magic for sendmail config files
-#
-# XXX - byte order?
-#
-0 byte 046 Sendmail frozen configuration
->16 string >\0 - version %s
-0 short 0x271c Sendmail frozen configuration
->16 string >\0 - version %s
-
-#------------------------------------------------------------------------------
-# sendmail: file(1) magic for sendmail m4(1) files
-#
-# From Hendrik Scholz <hendrik@scholz.net>
-# i.e. files in /usr/share/sendmail/cf/
-#
-0 string divert(-1)\n sendmail m4 text file
-
-
-#------------------------------------------------------------------------------
-# alliant: file(1) magic for Alliant FX series a.out files
-#
-# If the FX series is the one that had a processor with a 68K-derived
-# instruction set, the "short" should probably become "beshort" and the
-# "long" should probably become "belong".
-# If it's the i860-based one, they should probably become either the
-# big-endian or little-endian versions, depending on the mode they ran
-# the 860 in....
-#
-0 short 0420 0420 Alliant virtual executable
->2 short &0x0020 common library
->16 long >0 not stripped
-0 short 0421 0421 Alliant compact executable
->2 short &0x0020 common library
->16 long >0 not stripped
-
-#------------------------------------------------------------------------------
-# CDDB: file(1) magic for CDDB(tm) format CD text data files
-#
-# From <steve@gracenote.com>
-#
-# This is the /etc/magic entry to decode datafiles as used by
-# CDDB-enabled CD player applications.
-#
-
-0 string/b #\040xmcd CDDB(tm) format CD text data
-
-#------------------------------------------------------------------------------
-# elf: file(1) magic for ELF executables
-#
-# We have to check the byte order flag to see what byte order all the
-# other stuff in the header is in.
-#
-# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
-#
-# updated by Daniel Quinlan (quinlan@yggdrasil.com)
-0 string \177ELF ELF
->4 byte 0 invalid class
->4 byte 1 32-bit
-# only for MIPS - in the future, the ABI field of e_flags should be used.
->>18 leshort 8
->>>36 lelong &0x20 N32
->>18 leshort 10
->>>36 lelong &0x20 N32
->>18 beshort 8
->>>36 belong &0x20 N32
->>18 beshort 10
->>>36 belong &0x20 N32
->4 byte 2 64-bit
->5 byte 0 invalid byte order
->5 byte 1 LSB
-# The official e_machine number for MIPS is now #8, regardless of endianness.
-# The second number (#10) will be deprecated later. For now, we still
-# say something if #10 is encountered, but only gory details for #8.
->>18 leshort 8
-# only for 32-bit
->>>4 byte 1
->>>>36 lelong&0xf0000000 0x00000000 MIPS-I
->>>>36 lelong&0xf0000000 0x10000000 MIPS-II
->>>>36 lelong&0xf0000000 0x20000000 MIPS-III
->>>>36 lelong&0xf0000000 0x30000000 MIPS-IV
->>>>36 lelong&0xf0000000 0x40000000 MIPS-V
->>>>36 lelong&0xf0000000 0x60000000 MIPS32
->>>>36 lelong&0xf0000000 0x70000000 MIPS64
->>>>36 lelong&0xf0000000 0x80000000 MIPS32 rel2
->>>>36 lelong&0xf0000000 0x90000000 MIPS64 rel2
-# only for 64-bit
->>>4 byte 2
->>>>48 lelong&0xf0000000 0x00000000 MIPS-I
->>>>48 lelong&0xf0000000 0x10000000 MIPS-II
->>>>48 lelong&0xf0000000 0x20000000 MIPS-III
->>>>48 lelong&0xf0000000 0x30000000 MIPS-IV
->>>>48 lelong&0xf0000000 0x40000000 MIPS-V
->>>>48 lelong&0xf0000000 0x60000000 MIPS32
->>>>48 lelong&0xf0000000 0x70000000 MIPS64
->>>>48 lelong&0xf0000000 0x80000000 MIPS32 rel2
->>>>48 lelong&0xf0000000 0x90000000 MIPS64 rel2
->>16 leshort 0 no file type,
->>16 leshort 1 relocatable,
->>16 leshort 2 executable,
->>16 leshort 3 shared object,
-# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
-# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
->>16 leshort 4 core file
-# Core file detection is not reliable.
-#>>>(0x38+0xcc) string >\0 of '%s'
-#>>>(0x38+0x10) lelong >0 (signal %d),
->>16 leshort &0xff00 processor-specific,
->>18 leshort 0 no machine,
->>18 leshort 1 AT&T WE32100 - invalid byte order,
->>18 leshort 2 SPARC - invalid byte order,
->>18 leshort 3 Intel 80386,
->>18 leshort 4 Motorola
->>>36 lelong &0x01000000 68000 - invalid byte order,
->>>36 lelong &0x00810000 CPU32 - invalid byte order,
->>>36 lelong 0 68020 - invalid byte order,
->>18 leshort 5 Motorola 88000 - invalid byte order,
->>18 leshort 6 Intel 80486,
->>18 leshort 7 Intel 80860,
->>18 leshort 8 MIPS,
->>18 leshort 9 Amdahl - invalid byte order,
->>18 leshort 10 MIPS (deprecated),
->>18 leshort 11 RS6000 - invalid byte order,
->>18 leshort 15 PA-RISC - invalid byte order,
->>>50 leshort 0x0214 2.0
->>>48 leshort &0x0008 (LP64),
->>18 leshort 16 nCUBE,
->>18 leshort 17 Fujitsu VPP500,
->>18 leshort 18 SPARC32PLUS,
->>18 leshort 20 PowerPC,
->>18 leshort 22 IBM S/390,
->>18 leshort 36 NEC V800,
->>18 leshort 37 Fujitsu FR20,
->>18 leshort 38 TRW RH-32,
->>18 leshort 39 Motorola RCE,
->>18 leshort 40 ARM,
->>18 leshort 41 Alpha,
->>18 leshort 0xa390 IBM S/390 (obsolete),
->>18 leshort 42 Hitachi SH,
->>18 leshort 43 SPARC V9 - invalid byte order,
->>18 leshort 44 Siemens Tricore Embedded Processor,
->>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc.,
->>18 leshort 46 Hitachi H8/300,
->>18 leshort 47 Hitachi H8/300H,
->>18 leshort 48 Hitachi H8S,
->>18 leshort 49 Hitachi H8/500,
->>18 leshort 50 IA-64 (Intel 64 bit architecture)
->>18 leshort 51 Stanford MIPS-X,
->>18 leshort 52 Motorola Coldfire,
->>18 leshort 53 Motorola M68HC12,
->>18 leshort 62 AMD x86-64,
->>18 leshort 75 Digital VAX,
->>18 leshort 88 Renesas M32R,
->>18 leshort 97 NatSemi 32k,
->>18 leshort 0x9026 Alpha (unofficial),
->>20 lelong 0 invalid version
->>20 lelong 1 version 1
->>36 lelong 1 MathCoPro/FPU/MAU Required
->5 byte 2 MSB
-# only for MIPS - see comment in little-endian section above.
->>18 beshort 8
-# only for 32-bit
->>>4 byte 1
->>>>36 belong&0xf0000000 0x00000000 MIPS-I
->>>>36 belong&0xf0000000 0x10000000 MIPS-II
->>>>36 belong&0xf0000000 0x20000000 MIPS-III
->>>>36 belong&0xf0000000 0x30000000 MIPS-IV
->>>>36 belong&0xf0000000 0x40000000 MIPS-V
->>>>36 belong&0xf0000000 0x60000000 MIPS32
->>>>36 belong&0xf0000000 0x70000000 MIPS64
->>>>36 belong&0xf0000000 0x80000000 MIPS32 rel2
->>>>36 belong&0xf0000000 0x90000000 MIPS64 rel2
-# only for 64-bit
->>>4 byte 2
->>>>48 belong&0xf0000000 0x00000000 MIPS-I
->>>>48 belong&0xf0000000 0x10000000 MIPS-II
->>>>48 belong&0xf0000000 0x20000000 MIPS-III
->>>>48 belong&0xf0000000 0x30000000 MIPS-IV
->>>>48 belong&0xf0000000 0x40000000 MIPS-V
->>>>48 belong&0xf0000000 0x60000000 MIPS32
->>>>48 belong&0xf0000000 0x70000000 MIPS64
->>>>48 belong&0xf0000000 0x80000000 MIPS32 rel2
->>>>48 belong&0xf0000000 0x90000000 MIPS64 rel2
->>16 beshort 0 no file type,
->>16 beshort 1 relocatable,
->>16 beshort 2 executable,
->>16 beshort 3 shared object,
->>16 beshort 4 core file,
-#>>>(0x38+0xcc) string >\0 of '%s'
-#>>>(0x38+0x10) belong >0 (signal %d),
->>16 beshort &0xff00 processor-specific,
->>18 beshort 0 no machine,
->>18 beshort 1 AT&T WE32100,
->>18 beshort 2 SPARC,
->>18 beshort 3 Intel 80386 - invalid byte order,
->>18 beshort 4 Motorola
->>>36 belong &0x01000000 68000,
->>>36 belong &0x00810000 CPU32,
->>>36 belong 0 68020,
->>18 beshort 5 Motorola 88000,
->>18 beshort 6 Intel 80486 - invalid byte order,
->>18 beshort 7 Intel 80860,
->>18 beshort 8 MIPS,
->>18 beshort 9 Amdahl,
->>18 beshort 10 MIPS (deprecated),
->>18 beshort 11 RS6000,
->>18 beshort 15 PA-RISC
->>>50 beshort 0x0214 2.0
->>>48 beshort &0x0008 (LP64)
->>18 beshort 16 nCUBE,
->>18 beshort 17 Fujitsu VPP500,
->>18 beshort 18 SPARC32PLUS,
->>>36 belong&0xffff00 &0x000100 V8+ Required,
->>>36 belong&0xffff00 &0x000200 Sun UltraSPARC1 Extensions Required,
->>>36 belong&0xffff00 &0x000400 HaL R1 Extensions Required,
->>>36 belong&0xffff00 &0x000800 Sun UltraSPARC3 Extensions Required,
->>18 beshort 20 PowerPC or cisco 4500,
->>18 beshort 21 cisco 7500,
->>18 beshort 22 IBM S/390,
->>18 beshort 24 cisco SVIP,
->>18 beshort 25 cisco 7200,
->>18 beshort 36 NEC V800 or cisco 12000,
->>18 beshort 37 Fujitsu FR20,
->>18 beshort 38 TRW RH-32,
->>18 beshort 39 Motorola RCE,
->>18 beshort 40 ARM,
->>18 beshort 41 Alpha,
->>18 beshort 42 Hitachi SH,
->>18 beshort 43 SPARC V9,
->>18 beshort 44 Siemens Tricore Embedded Processor,
->>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc.,
->>18 beshort 46 Hitachi H8/300,
->>18 beshort 47 Hitachi H8/300H,
->>18 beshort 48 Hitachi H8S,
->>18 beshort 49 Hitachi H8/500,
->>18 beshort 50 Intel Merced Processor,
->>18 beshort 51 Stanford MIPS-X,
->>18 beshort 52 Motorola Coldfire,
->>18 beshort 53 Motorola M68HC12,
->>18 beshort 73 Cray NV1,
->>18 beshort 75 Digital VAX,
->>18 beshort 88 Renesas M32R,
->>18 beshort 97 NatSemi 32k,
->>18 beshort 0x9026 Alpha (unofficial),
->>18 beshort 0xa390 IBM S/390 (obsolete),
->>20 belong 0 invalid version
->>20 belong 1 version 1
->>36 belong 1 MathCoPro/FPU/MAU Required
-# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed
-# like proper ELF, but extracting the string had bad results.
->4 byte <0x80
->>8 string >\0 (%s)
->8 string \0
->>7 byte 0 (SYSV)
->>7 byte 1 (HP-UX)
->>7 byte 2 (NetBSD)
->>7 byte 3 (GNU/Linux)
->>7 byte 4 (GNU/Hurd)
->>7 byte 5 (86Open)
->>7 byte 6 (Solaris)
->>7 byte 7 (Monterey)
->>7 byte 8 (IRIX)
->>7 byte 9 (FreeBSD)
->>7 byte 10 (Tru64)
->>7 byte 11 (Novell Modesto)
->>7 byte 12 (OpenBSD)
->>7 byte 97 (ARM)
->>7 byte 255 (embedded)
-
-#------------------------------------------------------------------------------
-# Epoc 32 : file(1) magic for Epoc Documents [psion/osaris
-# Stefan Praszalowicz (hpicollo@worldnet.fr)
-#0 lelong 0x10000037 Epoc32
->4 lelong 0x1000006D
->>8 lelong 0x1000007F Word
->>8 lelong 0x10000088 Sheet
->>8 lelong 0x1000007D Sketch
->>8 lelong 0x10000085 TextEd
-
-#------------------------------------------------------------------------------
-# ispell: file(1) magic for ispell
-#
-# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic
-# will match 0x9600 through 0x9603 in *both* little endian and big endian.
-# (No other current magic entries collide.)
-#
-# Updated by Daniel Quinlan (quinlan@yggdrasil.com)
-#
-0 leshort&0xFFFC 0x9600 little endian ispell
->0 byte 0 hash file (?),
->0 byte 1 3.0 hash file,
->0 byte 2 3.1 hash file,
->0 byte 3 hash file (?),
->2 leshort 0x00 8-bit, no capitalization, 26 flags
->2 leshort 0x01 7-bit, no capitalization, 26 flags
->2 leshort 0x02 8-bit, capitalization, 26 flags
->2 leshort 0x03 7-bit, capitalization, 26 flags
->2 leshort 0x04 8-bit, no capitalization, 52 flags
->2 leshort 0x05 7-bit, no capitalization, 52 flags
->2 leshort 0x06 8-bit, capitalization, 52 flags
->2 leshort 0x07 7-bit, capitalization, 52 flags
->2 leshort 0x08 8-bit, no capitalization, 128 flags
->2 leshort 0x09 7-bit, no capitalization, 128 flags
->2 leshort 0x0A 8-bit, capitalization, 128 flags
->2 leshort 0x0B 7-bit, capitalization, 128 flags
->2 leshort 0x0C 8-bit, no capitalization, 256 flags
->2 leshort 0x0D 7-bit, no capitalization, 256 flags
->2 leshort 0x0E 8-bit, capitalization, 256 flags
->2 leshort 0x0F 7-bit, capitalization, 256 flags
->4 leshort >0 and %d string characters
-0 beshort&0xFFFC 0x9600 big endian ispell
->1 byte 0 hash file (?),
->1 byte 1 3.0 hash file,
->1 byte 2 3.1 hash file,
->1 byte 3 hash file (?),
->2 beshort 0x00 8-bit, no capitalization, 26 flags
->2 beshort 0x01 7-bit, no capitalization, 26 flags
->2 beshort 0x02 8-bit, capitalization, 26 flags
->2 beshort 0x03 7-bit, capitalization, 26 flags
->2 beshort 0x04 8-bit, no capitalization, 52 flags
->2 beshort 0x05 7-bit, no capitalization, 52 flags
->2 beshort 0x06 8-bit, capitalization, 52 flags
->2 beshort 0x07 7-bit, capitalization, 52 flags
->2 beshort 0x08 8-bit, no capitalization, 128 flags
->2 beshort 0x09 7-bit, no capitalization, 128 flags
->2 beshort 0x0A 8-bit, capitalization, 128 flags
->2 beshort 0x0B 7-bit, capitalization, 128 flags
->2 beshort 0x0C 8-bit, no capitalization, 256 flags
->2 beshort 0x0D 7-bit, no capitalization, 256 flags
->2 beshort 0x0E 8-bit, capitalization, 256 flags
->2 beshort 0x0F 7-bit, capitalization, 256 flags
->4 beshort >0 and %d string characters
-# ispell 4.0 hash files kromJx <kromJx@crosswinds.net>
-# Ispell 4.0
-0 string ISPL ispell
->4 long x hash file version %d,
->8 long x lexletters %d,
->12 long x lexsize %d,
->16 long x hashsize %d,
->20 long x stblsize %d
-
-#------------------------------------------------------------------------------
-# lex: file(1) magic for lex
-#
-# derived empirically, your offsets may vary!
-53 string yyprevious C program text (from lex)
->3 string >\0 for %s
-# C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com>
-21 string generated\ by\ flex C program text (from flex)
-# lex description file, from Daniel Quinlan <quinlan@yggdrasil.com>
-0 string %{ lex description text
-
-#------------------------------------------------------------------------------
-# mips: file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.)
-# Dec Ultrix (MIPS)
-# all of SGI's *current* machines and OSes run in big-endian mode on the
-# MIPS machines, as far as I know.
-#
-# XXX - what is the blank "-" line?
-#
-# kbd file definitions
-0 string kbd!map kbd map file
->8 byte >0 Ver %d:
->10 short >0 with %d table(s)
-0 belong 0407 old SGI 68020 executable
-0 belong 0410 old SGI 68020 pure executable
-0 beshort 0x8765 disk quotas file
-0 beshort 0x0506 IRIS Showcase file
->2 byte 0x49 -
->3 byte x - version %ld
-0 beshort 0x0226 IRIS Showcase template
->2 byte 0x63 -
->3 byte x - version %ld
-0 belong 0x5343464d IRIS Showcase file
->4 byte x - version %ld
-0 belong 0x5443464d IRIS Showcase template
->4 byte x - version %ld
-0 belong 0xdeadbabe IRIX Parallel Arena
->8 belong >0 - version %ld
-#
-0 beshort 0x0160 MIPSEB ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %ld
->23 byte x \b.%ld
-#
-0 beshort 0x0162 MIPSEL-BE ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%ld
-#
-0 beshort 0x6001 MIPSEB-LE ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%ld
-#
-0 beshort 0x6201 MIPSEL ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %ld
->22 byte x \b.%ld
-#
-# MIPS 2 additions
-#
-0 beshort 0x0163 MIPSEB MIPS-II ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %ld
->23 byte x \b.%ld
-#
-0 beshort 0x0166 MIPSEL-BE MIPS-II ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %ld
->23 byte x \b.%ld
-#
-0 beshort 0x6301 MIPSEB-LE MIPS-II ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %ld
->22 byte x \b.%ld
-#
-0 beshort 0x6601 MIPSEL MIPS-II ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %ld
->22 byte x \b.%ld
-#
-# MIPS 3 additions
-#
-0 beshort 0x0140 MIPSEB MIPS-III ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %ld
->23 byte x \b.%ld
-#
-0 beshort 0x0142 MIPSEL-BE MIPS-III ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %ld
->23 byte x \b.%ld
-#
-0 beshort 0x4001 MIPSEB-LE MIPS-III ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %ld
->22 byte x \b.%ld
-#
-0 beshort 0x4201 MIPSEL MIPS-III ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %ld
->22 byte x \b.%ld
-#
-0 beshort 0x180 MIPSEB Ucode
-0 beshort 0x182 MIPSEL-BE Ucode
-# 32bit core file
-0 belong 0xdeadadb0 IRIX core dump
->4 belong 1 of
->16 string >\0 '%s'
-# 64bit core file
-0 belong 0xdeadad40 IRIX 64-bit core dump
->4 belong 1 of
->16 string >\0 '%s'
-# N32bit core file
-0 belong 0xbabec0bb IRIX N32 core dump
->4 belong 1 of
->16 string >\0 '%s'
-# New style crash dump file
-0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of
->36 string >\0 '%s'
-# Trusted IRIX info
-0 string SGIAUDIT SGI Audit file
->8 byte x - version %d
->9 byte x \b.%ld
-#
-0 string WNGZWZSC Wingz compiled script
-0 string WNGZWZSS Wingz spreadsheet
-0 string WNGZWZHP Wingz help file
-#
-0 string \#Inventor V IRIS Inventor 1.0 file
-0 string \#Inventor V2 Open Inventor 2.0 file
-# GLF is OpenGL stream encoding
-0 string glfHeadMagic(); GLF_TEXT
-4 belong 0x7d000000 GLF_BINARY_LSB_FIRST
-4 belong 0x0000007d GLF_BINARY_MSB_FIRST
-# GLS is OpenGL stream encoding; GLS is the successor of GLF
-0 string glsBeginGLS( GLS_TEXT
-4 belong 0x10000000 GLS_BINARY_LSB_FIRST
-4 belong 0x00000010 GLS_BINARY_MSB_FIRST
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/lib/rc_mime.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Extend PEAR:Mail_mime class and override encodeHeaders method |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- $Id: sendmail.inc 506 2007-03-14 00:39:51Z thomasb $
-
-*/
-
-// require Mail_mime class 1.4.0
-require_once('Mail/mime.php');
-
-
-class rc_mail_mime extends Mail_mime
-{
- /**
- * Set build parameters
- */
- function setParam($param)
- {
- if (is_array($param))
- $this->_build_params = array_merge($this->_build_params, $param);
- }
-
- /**
- * Adds an image to the list of embedded images.
- *
- * @param string $file The image file name OR image data itself
- * @param string $c_type The content type
- * @param string $name The filename of the image.
- * Only use if $file is the image data
- * @param bool $isfilename Whether $file is a filename or not
- * Defaults to true
- * @param string $contentid Desired Content-ID of MIME part
- * Defaults to generated unique ID
- * @return mixed true on success or PEAR_Error object
- * @access public
- */
- function addHTMLImage($file, $c_type='application/octet-stream', $name = '', $isfilename = true, $contentid = '')
- {
- $filedata = ($isfilename === true) ? $this->_file2str($file) : $file;
- if ($isfilename === true)
- $filename = ($name == '' ? $file : $name);
- else
- $filename = $name;
-
- if (PEAR::isError($filedata))
- return $filedata;
-
- if ($contentid == '')
- $contentid = md5(uniqid(time()));
-
- $this->_html_images[] = array(
- 'body' => $filedata,
- 'name' => $filename,
- 'c_type' => $c_type,
- 'cid' => $contentid
- );
-
- return true;
- }
-
-
- /**
- * returns the HTML body portion of the message
- * @return string HTML body of the message
- * @access public
- */
- function getHTMLBody()
- {
- return $this->_htmlbody;
- }
-
-
- /**
- * Creates a new mimePart object, using multipart/mixed as
- * the initial content-type and returns it during the
- * build process.
- *
- * @return object The multipart/mixed mimePart object
- * @access private
- */
- function &_addMixedPart()
- {
- $params['content_type'] = $this->_headers['Content-Type'] ? $this->_headers['Content-Type'] : 'multipart/mixed';
- $ret = new Mail_mimePart('', $params);
- return $ret;
- }
-
-
- /**
- * Encodes a header as per RFC2047
- *
- * @param array $input The header data to encode
- * @param array $params Extra build parameters
- * @return array Encoded data
- * @access private
- * @override
- */
- function _encodeHeaders($input, $params = array())
- {
- $maxlen = 73;
- $params += $this->_build_params;
-
- foreach ($input as $hdr_name => $hdr_value)
- {
- // if header contains e-mail addresses
- if (preg_match('/\s<.+@[a-z0-9\-\.]+\.[a-z]+>/U', $hdr_value))
- $chunks = $this->_explode_quoted_string(',', $hdr_value);
- else
- $chunks = array($hdr_value);
-
- $hdr_value = '';
- $line_len = 0;
-
- foreach ($chunks as $i => $value)
- {
- $value = trim($value);
-
- //This header contains non ASCII chars and should be encoded.
- if (preg_match('#[\x80-\xFF]{1}#', $value))
- {
- $suffix = '';
- // Don't encode e-mail address
- if (preg_match('/(.+)\s(<.+@[a-z0-9\-\.]+>)$/Ui', $value, $matches))
- {
- $value = $matches[1];
- $suffix = ' '.$matches[2];
- }
-
- switch ($params['head_encoding'])
- {
- case 'base64':
- // Base64 encoding has been selected.
- $mode = 'B';
- $encoded = base64_encode($value);
- break;
-
- case 'quoted-printable':
- default:
- // quoted-printable encoding has been selected
- $mode = 'Q';
- $encoded = preg_replace('/([\x2C\x3F\x80-\xFF])/e', "'='.sprintf('%02X', ord('\\1'))", $value);
- // replace spaces with _
- $encoded = str_replace(' ', '_', $encoded);
- }
-
- $value = '=?' . $params['head_charset'] . '?' . $mode . '?' . $encoded . '?=' . $suffix;
- }
-
- // add chunk to output string by regarding the header maxlen
- $len = strlen($value);
- if ($i == 0 || $line_len + $len < $maxlen)
- {
- $hdr_value .= ($i>0?', ':'') . $value;
- $line_len += $len + ($i>0?2:0);
- }
- else
- {
- $hdr_value .= ($i>0?', ':'') . "\n " . $value;
- $line_len = $len;
- }
- }
-
- $input[$hdr_name] = $hdr_value;
- }
-
- return $input;
- }
-
-
- function _explode_quoted_string($delimiter, $string)
- {
- $result = array();
- $strlen = strlen($string);
- for ($q=$p=$i=0; $i < $strlen; $i++)
- {
- if ($string{$i} == "\"" && $string{$i-1} != "\\")
- $q = $q ? false : true;
- else if (!$q && $string{$i} == $delimiter)
- {
- $result[] = substr($string, $p, $i - $p);
- $p = $i + 1;
- }
- }
-
- $result[] = substr($string, $p);
- return $result;
- }
-
-}
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+/* Washtml, a HTML sanityzer.
+ *
+ * Copyright (c) 2007 Frederic Motte <fmotte@ubixis.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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+/* Please send me your comments about this code if you have some, thanks, Fred. */
+
+/* OVERVIEW:
+ *
+ * Wahstml take an untrusted HTML and return a safe html string.
+ *
+ * SYNOPSIS:
+ *
+ * washtml::wash($html, $config, $full);
+ * It return a sanityzed string of the $html parameter without html and head tags.
+ * $html is a string containing the html code to wash.
+ * $config is an array containing options:
+ * $config['allow_remote'] is a boolean to allow link to remote images.
+ * $config['blocked_src'] string with image-src to be used for blocked remote images
+ * $config['show_washed'] is a boolean to include washed out attributes as x-washed
+ * $config['cid_map'] is an array where cid urls index urls to replace them.
+ * $config['charset'] is a string containing the charset of the HTML document if it is not defined in it.
+ * $full is a reference to a boolean that is set to true if no remote images are removed. (FE: show remote images link)
+ *
+ * INTERNALS:
+ *
+ * Only tags and attributes in the globals $html_elements and $html_attributes
+ * are kept, inline styles are also filtered: all style identifiers matching
+ * /[a-z\-]/i are allowed. Values matching colors, sizes, /[a-z\-]/i and safe
+ * urls if allowed and cid urls if mapped are kept.
+ *
+ * BUGS: It MUST be safe !
+ * - Check regexp
+ * - urlencode URLs instead of htmlspecials
+ * - Check is a 3 bytes utf8 first char can eat '">'
+ * - Update PCRE: CVE-2007-1659 - CVE-2007-1660 - CVE-2007-1661 - CVE-2007-1662
+ * CVE-2007-4766 - CVE-2007-4767 - CVE-2007-4768
+ * http://lists.debian.org/debian-security-announce/debian-security-announce-2007/msg00177.html
+ * - ...
+ *
+ * MISSING:
+ * - relative links, can be implemented by prefixing an absolute path, ask me
+ * if you need it...
+ * - ...
+ *
+ * Dont be a fool:
+ * - Dont alter data on a GET: '<img src="http://yourhost/mail?action=delete&uid=3267" />'
+ * - ...
+ */
+
+class washtml
+{
+
+ /* Allowed HTML elements */
+ static $html_elements = array('a', 'abbr', 'acronym', 'address', 'area', 'b', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', 'font', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'ins', 'label', 'legend', 'li', 'map', 'menu', 'ol', 'p', 'pre', 'q', 's', 'samp', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'title', 'tr', 'tt', 'u', 'ul', 'var', 'img');
+
+ /* Allowed HTML attributes */
+ static $html_attribs = array('name', 'class', 'title', 'alt', 'width', 'height', 'align', 'nowrap', 'col', 'row', 'id', 'rowspan', 'colspan', 'cellspacing', 'cellpadding', 'valign', 'bgcolor', 'color', 'border', 'bordercolorlight', 'bordercolordark', 'face', 'marginwidth', 'marginheight', 'axis', 'border', 'abbr', 'char', 'charoff', 'clear', 'compact', 'coords', 'vspace', 'hspace', 'cellborder', 'size', 'lang', 'dir');
+
+ /* Check CSS style */
+ static function wash_style($style, $config, &$full) {
+ $s = '';
+
+ foreach(explode(';', $style) as $declaration) {
+ if(preg_match('/^\s*([a-z\-]+)\s*:\s*(.*)\s*$/i', $declaration, $match)) {
+ $cssid = $match[1];
+ $str = $match[2];
+ $value = '';
+ while(sizeof($str) > 0 &&
+ preg_match('/^(url\(\s*[\'"]?([^\'"\)]*)[\'"]?\s*\)'./*1,2*/
+ '|rgb\(\s*[0-9]+\s*,\s*[0-9]+\s*,\s*[0-9]+\s*\)'.
+ '|-?[0-9.]+\s*(em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)?'.
+ '|#[0-9a-f]{3,6}|[a-z0-9\-]+'.
+ ')\s*/i', $str, $match)) {
+ if($match[2]) {
+ if(preg_match('/^(http|https|ftp):.*$/i', $match[2], $url)) {
+ if($config['allow_remote'])
+ $value .= ' url(\''.htmlspecialchars($url[0], ENT_QUOTES).'\')';
+ else
+ $full = false;
+ } else if(preg_match('/^cid:(.*)$/i', $match[2], $cid))
+ $value .= ' url(\''.htmlspecialchars($config['cid_map']['cid:'.$cid[1]], ENT_QUOTES) . '\')';
+ } else if($match[0] != 'url' && $match[0] != 'rbg')//whitelist ?
+ $value .= ' ' . $match[0];
+ $str = substr($str, strlen($match[0]));
+ }
+ if($value)
+ $s .= ($s?' ':'') . $cssid . ':' . $value . ';';
+ }
+ }
+ return $s;
+ }
+
+ /* Take a node and return allowed attributes and check values */
+ static function wash_attribs($node, $config, &$full) {
+ $t = '';
+ $washed;
+
+ foreach($node->attributes as $key => $plop) {
+ $key = strtolower($key);
+ $value = $node->getAttribute($key);
+ if((in_array($key, self::$html_attribs)) ||
+ ($key == 'href' && preg_match('/^(http|https|ftp|mailto):.*/i', $value)))
+ $t .= ' ' . $key . '="' . htmlspecialchars($value, ENT_QUOTES) . '"';
+ else if($key == 'style' && ($style = self::wash_style($value, $config, $full)))
+ $t .= ' style="' . $style . '"';
+ else if($key == 'src' && strtolower($node->tagName) == 'img') { //check tagName anyway
+ if(preg_match('/^(http|https|ftp):.*/i', $value)) {
+ if($config['allow_remote'])
+ $t .= ' ' . $key . '="' . htmlspecialchars($value, ENT_QUOTES) . '"';
+ else {
+ $full = false;
+ if ($config['blocked_src'])
+ $t .= ' src="' . htmlspecialchars($config['blocked_src'], ENT_QUOTES) . '"';
+ }
+ } else if(preg_match('/^cid:(.*)$/i', $value, $cid))
+ $t .= ' ' . $key . '="' . htmlspecialchars($config['cid_map']['cid:'.$cid[1]], ENT_QUOTES) . '"';
+ } else
+ $washed .= ($washed?' ':'') . $key;
+ }
+ return $t . ($washed && $config['show_washed']?' x-washed="'.$washed.'"':'');
+ }
+
+ /* The main loop that recurse on a node tree.
+ * It output only allowed tags with allowed attributes
+ * and allowed inline styles */
+ static function dumpHtml($node, $config, &$full) {
+ if(!$node->hasChildNodes())
+ return '';
+
+ $node = $node->firstChild;
+ $dump = '';
+
+ do {
+ switch($node->nodeType) {
+ case XML_ELEMENT_NODE: //Check element
+ $tagName = strtolower($node->tagName);
+ if(in_array($tagName, self::$html_elements)) {
+ $content = self::dumpHtml($node, $config, $full);
+ $dump .= '<' . $tagName . self::wash_attribs($node, $config, $full) .
+ ($content?">$content</$tagName>":' />');
+ } else if($tagName == 'html' || $tagName == 'body') {
+ $dump .= self::dumpHtml($node, $config, $full); //Just ignored
+ } else
+ $dump .= '<!-- ' . htmlspecialchars($tagName, ENT_QUOTES) . ' not allowed -->';
+ break;
+ case XML_TEXT_NODE:
+ $dump .= htmlspecialchars($node->nodeValue);
+ break;
+ case XML_HTML_DOCUMENT_NODE:
+ $dump .= self::dumpHtml($node, $config, $full);
+ break;
+ case XML_DOCUMENT_TYPE_NODE: break;
+ default:
+ }
+ } while($node = $node->nextSibling);
+
+ return $dump;
+ }
+
+ /* Main function, give it untrusted HTML, tell it if you allow loading
+ * remote images and give it a map to convert "cid:" urls. */
+ static function wash($html, $config=array(), &$full=true) {
+ $config += array('show_washed'=>true, 'allow_remote'=>false, 'cid_map'=>array());
+ //Charset seems to be ignored (probably if defined in the HTML document)
+ $node = new DOMDocument('1.0', $config['charset']);
+ $full = true;
+ @$node->loadHTML($html);
+ return self::dumpHtml($node, $config, $full);
+ }
+
+}
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/am/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Vahan Yerkanian <vahan@arminco.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Բարի գալուստ $product';
-$labels['username'] = 'Օգտվող';
-$labels['password'] = 'Գաղտնաբառ';
-$labels['server'] = 'Սերվեր';
-$labels['login'] = 'Մուտք';
-$labels['logout'] = 'Ելք';
-$labels['mail'] = 'Էլ–փոստ';
-$labels['settings'] = 'Նախասիրություններ';
-$labels['addressbook'] = 'Հասցեներ';
-$labels['inbox'] = 'Փոստարկղ';
-$labels['drafts'] = 'Սևագրեր';
-$labels['sent'] = 'Ուղարկված';
-$labels['trash'] = 'Աղբարկղ';
-$labels['junk'] = 'Թափոն';
-$labels['subject'] = 'Վերնագիր';
-$labels['from'] = 'Ուղարկող';
-$labels['to'] = 'Ստացող';
-$labels['cc'] = 'Cc';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Reply-To';
-$labels['date'] = 'Ամսաթիվ';
-$labels['size'] = 'Չափ';
-$labels['priority'] = 'Առավելություն';
-$labels['organization'] = 'Կազմակերպություն';
-$labels['reply-to'] = 'Reply-To';
-$labels['mailboxlist'] = 'Դարակներ';
-$labels['messagesfromto'] = 'Նամակներ $from–ից $to–ը եղած $count–ից';
-$labels['messagenrof'] = 'Նամակ $nr եղած $count–ից';
-$labels['moveto'] = 'Տեղափոխել...';
-$labels['download'] = 'Քաշել';
-$labels['filename'] = 'Ֆայլի անուն';
-$labels['filesize'] = 'Ֆայլի չափ';
-$labels['preferhtml'] = 'Գերադասել HTML';
-$labels['htmlmessage'] = 'HTML նամակ';
-$labels['prettydate'] = 'Պարզ ամսաթվեր';
-$labels['addtoaddressbook'] = 'Հիշել հասցեն';
-$labels['sun'] = 'Կիր';
-$labels['mon'] = 'Երկ';
-$labels['tue'] = 'Երք';
-$labels['wed'] = 'Չրք';
-$labels['thu'] = 'Հնգ';
-$labels['fri'] = 'Ուրբ';
-$labels['sat'] = 'Շբթ';
-$labels['sunday'] = 'Կիրակի';
-$labels['monday'] = 'Երկուշաբթի';
-$labels['tuesday'] = 'Երեքշաբթի';
-$labels['wednesday'] = 'Չորեքշաբթի';
-$labels['thursday'] = 'Հինգշաբթի';
-$labels['friday'] = 'Ուրբաթ';
-$labels['saturday'] = 'Շաբաթ';
-$labels['today'] = 'Այսօր';
-$labels['checkmail'] = 'Ստուգել նոր նամակները';
-$labels['writenewmessage'] = 'Նոր նամակ';
-$labels['replytomessage'] = 'Պատասխանել նամակին';
-$labels['replytoallmessage'] = 'Պատասխանել բոլորին';
-$labels['forwardmessage'] = 'Փոխանցել նամակը';
-$labels['deletemessage'] = 'Ջնջել նամակը';
-$labels['movemessagetotrash'] = 'Գցել աղբարկղը';
-$labels['printmessage'] = 'Տպել';
-$labels['previousmessage'] = 'Ցուցադրել նախորդ նամակը';
-$labels['previousmessages'] = 'Ցուցադրել նախորդ նամակները';
-$labels['firstmessage'] = 'Ցուցադրել առաջին նամակը';
-$labels['firstmessages'] = 'Ցուցադրել առաջին էջը';
-$labels['nextmessage'] = 'Ցուցադրել հաջորդ նամակը';
-$labels['nextmessages'] = 'Ցուցադրել հաջորդ նամակները';
-$labels['lastmessage'] = 'Ցուցադրել վերջին նամակը';
-$labels['lastmessages'] = 'Ցուցադրել վերջին էջը';
-$labels['backtolist'] = 'Վերադառնալ նամակների ցուցակ';
-$labels['viewsource'] = 'Ցուցադրել նամակի կոդը';
-$labels['markmessages'] = 'Նշել նամակները';
-$labels['markread'] = 'որպես կարդացած';
-$labels['markunread'] = 'որպես չկարդացած';
-$labels['select'] = 'Նշել';
-$labels['all'] = 'Բոլորը';
-$labels['none'] = 'Չնշել';
-$labels['unread'] = 'Չկարդացածը';
-$labels['compact'] = 'Սեղմել';
-$labels['empty'] = 'Դատարկել';
-$labels['purge'] = 'Մաքրել';
-$labels['quota'] = 'Դիսկային տարածք';
-$labels['unknown'] = 'անհայտ';
-$labels['unlimited'] = 'անսահմանափակ';
-$labels['quicksearch'] = 'Արագ որոնում';
-$labels['resetsearch'] = 'Վերսկսել որոնումը';
-$labels['compose'] = 'Գրել նամակ';
-$labels['savemessage'] = 'Հիշել որպես սևագիր';
-$labels['sendmessage'] = 'Ուղարկել';
-$labels['addattachment'] = 'Կցել ֆայլ';
-$labels['charset'] = 'Տառաշար';
-$labels['editortype'] = 'Խմբագրի տիպը';
-$labels['returnreceipt'] = 'Ստացման հավաստագիր';
-$labels['checkspelling'] = 'Ստուգել ուղագրությունը';
-$labels['resumeediting'] = 'Շարունակել խմբագրումը';
-$labels['revertto'] = 'Վերականգնել';
-$labels['attachments'] = 'Կցումներ';
-$labels['upload'] = 'Բեռնել';
-$labels['close'] = 'Փակել';
-$labels['low'] = 'Ցածր';
-$labels['lowest'] = 'Նվազագույն';
-$labels['normal'] = 'Նորմալ';
-$labels['high'] = 'Կարևոր';
-$labels['highest'] = 'Կարևորագույն';
-$labels['nosubject'] = '(առանց վերնագրի)';
-$labels['showimages'] = 'Ցուցադրել նկարները';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Պարզ տեքստ';
-$labels['addcc'] = 'Ավելացնել Cc';
-$labels['addbcc'] = 'Ավելացնել Bcc';
-$labels['addreplyto'] = 'Ավելացնել Reply-To';
-$labels['mdnrequest'] = 'Նամակի հեղինակը խնդրել է նամակը կարդալուն պես տեղեկացնել իրեն։ Ցանկանում էք Տեղեկացնե՞լ։';
-$labels['receiptread'] = 'Նամակի ընթերցման ծանուցագիր';
-$labels['yourmessage'] = 'Սա Ձեր նամակի ընթերցման ծանուցագիրն է';
-$labels['receiptnote'] = 'Նշում՝ Այս ծանուցագիրը ընդամենը տեղեկացնում է, որ նամակը ցուցադրվել է հասցեատիրոջ համակարչով։ Չկա որևիցե երաշխիք, որ հասցեատերը իսկապես կարդացել է նամակը։';
-$labels['name'] = 'Մականուն';
-$labels['firstname'] = 'Անուն';
-$labels['surname'] = 'Ազգանուն';
-$labels['email'] = 'Էկ–փոստ';
-$labels['addcontact'] = 'Գրանցել նշած հասցեն';
-$labels['editcontact'] = 'Խմբագրել հասցեն';
-$labels['edit'] = 'Խմբագրել';
-$labels['cancel'] = 'Թարգել';
-$labels['save'] = 'Հիշել';
-$labels['delete'] = 'Ջնջել';
-$labels['newcontact'] = 'Ստեղծել նոր հասցեքարտ';
-$labels['deletecontact'] = 'Ջնջել նշած նամակները';
-$labels['composeto'] = 'Գրել նամակ';
-$labels['contactsfromto'] = 'Հասցեներ $from–ից $to–ը եղած $count–ից';
-$labels['print'] = 'Տպել';
-$labels['export'] = 'Արտահանել';
-$labels['previouspage'] = 'Ցուցադրել նախորդ էջը';
-$labels['firstpage'] = 'Ցուցադրել առաջին էջը';
-$labels['nextpage'] = 'Ցուցադրել հաջորդ էջը';
-$labels['lastpage'] = 'Ցուցադրել վերջին էջը';
-$labels['groups'] = 'Խմբեր';
-$labels['personaladrbook'] = 'Անձնական հասցեներ';
-$labels['settingsfor'] = 'Նախասիրություններ';
-$labels['preferences'] = 'Ընդհանուր';
-$labels['userpreferences'] = 'Օգտվողի նախասիրություններ';
-$labels['editpreferences'] = 'Խմբագրել օգտվողի նախասիրությունները';
-$labels['identities'] = 'Անձիք';
-$labels['manageidentities'] = 'Կարգավորել անձանց';
-$labels['newidentity'] = 'Նոր անձ';
-$labels['newitem'] = 'Նոր իր';
-$labels['edititem'] = 'Խմբագրել իրը';
-$labels['setdefault'] = 'Հիմնական';
-$labels['language'] = 'Լեզու';
-$labels['timezone'] = 'Ժամային գոտի';
-$labels['pagesize'] = 'Տողեր առ էջ';
-$labels['signature'] = 'Ստորագրություն';
-$labels['dstactive'] = 'Ամառային ժամանակ';
-$labels['htmleditor'] = 'Ստեղծել HTML նամակներ';
-$labels['htmlsignature'] = 'HTML ստորագրություն';
-$labels['previewpane'] = 'Ցուցադրել պատուհանը';
-$labels['autosavedraft'] = 'Սևագրի ավտոմատ գրանցում';
-$labels['everynminutes'] = 'ամեն $n րոպեն';
-$labels['never'] = 'երբեք';
-$labels['folder'] = 'Դարակ';
-$labels['folders'] = 'Դարակներ';
-$labels['foldername'] = 'Դարակի անուն';
-$labels['subscribed'] = 'Բաժանորդագրված';
-$labels['messagecount'] = 'Նամակներ';
-$labels['create'] = 'Ստեղծել';
-$labels['createfolder'] = 'Բացել նոր դարակ';
-$labels['rename'] = 'Վերանվանել';
-$labels['renamefolder'] = 'Վերանվանել դարակը';
-$labels['deletefolder'] = 'Ջնջել դարակը';
-$labels['managefolders'] = 'Կարգավորել դարակները';
-$labels['sortby'] = 'Դասավորել';
-$labels['sortasc'] = 'ըստ աճման';
-$labels['sortdesc'] = 'ըստ նվազման';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/am/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Vahan Yerkanian <vahan@arminco.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Մուտքը ձախողվեց';
-$messages['cookiesdisabled'] = 'Сookies–ների ապահովվումը բացակայում է';
-$messages['sessionerror'] = 'Անվավեր կամ ժամկետանց սեսիա';
-$messages['imaperror'] = 'IMAP սերվերի հետ կապը ձախողվեց';
-$messages['nomessagesfound'] = 'Այս փոստարկղում նամակներ չկան';
-$messages['loggedout'] = 'Դուք բարեհաջող ավարտեցիք աշխատանքը։ Ցտեսություն…';
-$messages['mailboxempty'] = 'Փոստարկղը դատարկ է';
-$messages['loading'] = 'Բեռնավորում…';
-$messages['loadingdata'] = 'Տվյալների բեռնավորում…';
-$messages['checkingmail'] = 'Նոր նամակների ստուգում…';
-$messages['sendingmessage'] = 'Նամակի ուղարկում…';
-$messages['messagesent'] = 'Նամակն ուղարկված է';
-$messages['savingmessage'] = 'Նամակի գրանցում…';
-$messages['messagesaved'] = 'Նամակը գրանցվեց որպես սևագիր';
-$messages['successfullysaved'] = 'Գրանցված է';
-$messages['addedsuccessfully'] = 'Հասցեն ավելացված է';
-$messages['contactexists'] = 'Այս հասցեով անձը արդեն գրանցված է';
-$messages['blockedimages'] = 'Ձեր անվտանգության համար, այս նամակի արտաքին նկարներն բեռնված չեն';
-$messages['encryptedmessage'] = 'Ներողություն, այս նամակը կոդավորված է';
-$messages['nocontactsfound'] = 'Հասցեներ չկան';
-$messages['contactnotfound'] = 'Որոնվող հասցեն չգտնվեց';
-$messages['sendingfailed'] = 'Նամակի ուղարկումը ձախողվեց';
-$messages['errorsaving'] = 'Գրանցման սխալ';
-$messages['errormoving'] = 'Նամակի տեղափոխման ձախողում';
-$messages['errordeleting'] = 'Նամակի ջնջման ձախողում';
-$messages['deletecontactconfirm'] = 'Ուզու՞մ էք ջնջել նշված անձերին';
-$messages['deletemessagesconfirm'] = 'Ուզու՞մ էք ջնջել նշված նամակները';
-$messages['deletefolderconfirm'] = 'Ուզու՞մ էք ջնջել այս դարակը';
-$messages['purgefolderconfirm'] = 'Ուզու՞մ էք ջնջել այս դարակի բոլոր նամակները';
-$messages['formincomplete'] = 'Ձևը թերի է լրացված';
-$messages['noemailwarning'] = 'Մուտքագրեք ճիշտ էլ. հասցե';
-$messages['nonamewarning'] = 'Մուտքագրեք անուն';
-$messages['nopagesizewarning'] = 'Մուտքագրեք էջի չափս';
-$messages['norecipientwarning'] = 'Մուտքագրեք նվազագույնը մեկ հասցեատեր';
-$messages['nosubjectwarning'] = 'Վերնագիր բացակայում է, ցանկանո՞ւմ եք լրացնել';
-$messages['nobodywarning'] = 'Ուղարկե՞լ այս նամակը դատարկ';
-$messages['notsentwarning'] = 'Նամակն ուղարկված չէ։ Ջնջե՞լ Ձեր նամակը';
-$messages['noldapserver'] = 'Ընտրեք ldap սերվեր որոնման համար';
-$messages['nocontactsreturned'] = 'Հասցեներ չեն գտնվել';
-$messages['nosearchname'] = 'Մուտքագրեք հասցեատեր կամ էլ. հասցե';
-$messages['searchsuccessful'] = 'Գտնվեց $nr նամակ';
-$messages['searchnomatch'] = 'Համապատասխան նամակներ չգտնվեցին';
-$messages['searching'] = 'Որոնում...';
-$messages['checking'] = 'Ստուգում…';
-$messages['nospellerrors'] = 'Ուղագրական սխալներ չկան';
-$messages['folderdeleted'] = 'Դարակը ջնջվեց';
-$messages['deletedsuccessfully'] = 'Ջնջված է';
-$messages['converting'] = 'Նամակի ձևավորման հեռացում…';
-$messages['messageopenerror'] = 'Նամակի բեռնվումը սերվերից ձախողվեց';
-$messages['fileuploaderror'] = 'Ֆայլի կցումն ձախողվեց';
-$messages['filesizeerror'] = 'Ֆայլի չափը գերազանցում է մաքսիմալը՝ $size';
-$messages['copysuccess'] = '$nr հասցեների կրկնօրինակումը ավարտված է';
-$messages['copyerror'] = 'Հասցեների կրկնօրինակումը ձախողվեց';
-$messages['sourceisreadonly'] = 'Այս հասցեն պաշտպանված է';
-$messages['errorsavingcontact'] = 'Հասցեի գրանցումն ձախողվեց';
-$messages['movingmessage'] = 'Նամակը տեղափոխվում է…';
-$messages['receiptsent'] = 'Նամակի ընթերցման ծանուցագիրն ուղարկված է';
-$messages['errorsendingreceipt'] = 'Ծանուցագրի ուղարկումը ձախողվեց';
-$messages['nodeletelastidentity'] = 'Անհնար է ջնջել վերջին տարբերակը';
-$messages['addsubfolderhint'] = 'Այս դարակը կստեղծվի որպես նշվածի ենթադարակ';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ar/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Ossama Khayat <okhayat@yahoo.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'مرحباً بكم في $product';
-$labels['username'] = 'اسم المستخدم';
-$labels['password'] = 'كلمة المرور';
-$labels['server'] = 'الخادم';
-$labels['login'] = 'تسجيل الدخول';
-$labels['logout'] = 'تسجيل الخروج';
-$labels['mail'] = 'البريد';
-$labels['settings'] = 'الإعدادات الشخصية';
-$labels['addressbook'] = 'دفتر العناوين';
-$labels['inbox'] = 'الوارد';
-$labels['drafts'] = 'المسودات';
-$labels['sent'] = 'المرسل';
-$labels['trash'] = 'المهملات';
-$labels['junk'] = 'غير المرغوب';
-$labels['subject'] = 'الموضوع';
-$labels['from'] = 'المرسل';
-$labels['to'] = 'المستقبل';
-$labels['cc'] = 'نسخة';
-$labels['bcc'] = 'نسخة مخفية';
-$labels['replyto'] = 'الرد إلى';
-$labels['date'] = 'التاريخ';
-$labels['size'] = 'الحجم';
-$labels['priority'] = 'الأولوية';
-$labels['organization'] = 'المنظمة';
-$labels['reply-to'] = 'الرد إلى';
-$labels['mailboxlist'] = 'المجلدات';
-$labels['messagesfromto'] = 'الرسالة $from إلى $to من $count';
-$labels['messagenrof'] = 'الرسالة $nr من $count';
-$labels['moveto'] = 'نقل إلى...';
-$labels['download'] = 'تنزيل';
-$labels['filename'] = 'اسم الملف';
-$labels['filesize'] = 'حجم الملف';
-$labels['preferhtml'] = 'تفضيل صيغة HTML';
-$labels['htmlmessage'] = 'رسالة بنسق HTML';
-$labels['prettydate'] = 'تواريخ منمقة';
-$labels['addtoaddressbook'] = 'إضافة إلى دفتر العناوين';
-$labels['sun'] = 'أح';
-$labels['mon'] = 'إث';
-$labels['tue'] = 'ثل';
-$labels['wed'] = 'أر';
-$labels['thu'] = 'خم';
-$labels['fri'] = 'جم';
-$labels['sat'] = 'سب';
-$labels['sunday'] = 'الأحد';
-$labels['monday'] = 'الإثنين';
-$labels['tuesday'] = 'الثلاثاء';
-$labels['wednesday'] = 'الأربعاء';
-$labels['thursday'] = 'الخميس';
-$labels['friday'] = 'الجمعة';
-$labels['saturday'] = 'السبت';
-$labels['today'] = 'اليوم';
-$labels['checkmail'] = 'التحقق من وجود رسائل جديدة';
-$labels['writenewmessage'] = 'إنشاء رسالة جديدة';
-$labels['replytomessage'] = 'الرد على الرسالة';
-$labels['replytoallmessage'] = 'الرد على المرسل وجميع مستقبلي الرسالة';
-$labels['forwardmessage'] = 'تمرير الرسالة';
-$labels['deletemessage'] = 'حذف الرسالة إلى المهملات';
-$labels['movemessagetotrash'] = 'انقل الرسالة إلى سلة المهملات';
-$labels['printmessage'] = 'طباعة هذه الرسالة';
-$labels['previousmessage'] = 'عرض الرسالة السابقة';
-$labels['previousmessages'] = 'عرض المجموعة السابقة من الرسائل';
-$labels['firstmessage'] = 'عرض الرسالة الأولى';
-$labels['firstmessages'] = 'عرض مجموعة الرسائل الأولى';
-$labels['nextmessage'] = 'عرض الرسالة التالية';
-$labels['nextmessages'] = 'عرض المجموعة التالية من الرسائل';
-$labels['lastmessage'] = 'عرض الرسالة الأخيرة';
-$labels['lastmessages'] = 'عرض مجموعة الرسائل الأخيرة';
-$labels['backtolist'] = 'العودة إلى لائحة الرسائل';
-$labels['viewsource'] = 'إظهار المصدر';
-$labels['markmessages'] = 'وسم الرسالة';
-$labels['markread'] = 'كمقروءة';
-$labels['markunread'] = 'كغير مقروءة';
-$labels['select'] = 'تحديد';
-$labels['all'] = 'الكل';
-$labels['none'] = 'لا شيء';
-$labels['unread'] = 'غير المقروءة';
-$labels['compact'] = 'ضغط';
-$labels['empty'] = 'تفريغ';
-$labels['purge'] = 'إزالة';
-$labels['quota'] = 'المساحة المستخدمة';
-$labels['unknown'] = 'مجهول';
-$labels['unlimited'] = 'غير محدود';
-$labels['quicksearch'] = 'البحث السريع';
-$labels['resetsearch'] = 'استعادة البحث للافتراضي';
-$labels['compose'] = 'إنشاء رسالة';
-$labels['savemessage'] = 'حفظ هذه المسودة';
-$labels['sendmessage'] = 'إرسال الرسالة الآن';
-$labels['addattachment'] = 'إرفاق ملف';
-$labels['charset'] = 'مجموعة المحارف';
-$labels['editortype'] = 'نوع المُحرّر';
-$labels['returnreceipt'] = 'ايصال استلام';
-$labels['checkspelling'] = 'التدقيق الإملائي';
-$labels['resumeediting'] = 'متابعة التحرير';
-$labels['revertto'] = 'استعادة إلى';
-$labels['attachments'] = 'مرفقات';
-$labels['upload'] = 'تحميل';
-$labels['close'] = 'إغلاق';
-$labels['low'] = 'منخض';
-$labels['lowest'] = 'الأقل';
-$labels['normal'] = 'عادي';
-$labels['high'] = 'مرتفع';
-$labels['highest'] = 'الأعلى';
-$labels['nosubject'] = '(دون موضوع)';
-$labels['showimages'] = 'إظهار الصور';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'نص مجرد';
-$labels['addcc'] = 'أضف CC';
-$labels['addbcc'] = 'أضف BCC';
-$labels['addreplyto'] = 'أضيف Reply-To';
-$labels['mdnrequest'] = 'طلب المرسل إعلامه عند قراءتك لرسالته. هل تود إعلام المرسل؟';
-$labels['receiptread'] = 'إيصال الاستلام )بالقراءة)';
-$labels['yourmessage'] = 'هذا إيصال بقراءة رسالتك';
-$labels['receiptnote'] = 'ملاحظة: يُعلمك هذا الإيصال بأن رسالتك قد ظهرت على جهاز المستقبِل. ليست هناك أية ضمانات أن المستقبل قد قرأ أو فهم محتويات الرسالة.';
-$labels['name'] = 'اسم العرض';
-$labels['firstname'] = 'الإسم الأول';
-$labels['surname'] = 'الإسم الأخير';
-$labels['email'] = 'البريد الإلكتروني';
-$labels['addcontact'] = 'إضافة المراسل المحدد إلى دفتر عناويني';
-$labels['editcontact'] = 'تحرير بيانات المراسل';
-$labels['edit'] = 'تحرير';
-$labels['cancel'] = 'إلغاء';
-$labels['save'] = 'حفظ';
-$labels['delete'] = 'حذف';
-$labels['newcontact'] = 'إنشاء بطاقة مراسل جديدة';
-$labels['deletecontact'] = 'حذف المراسلين المحددين';
-$labels['composeto'] = 'إنشاء رسالة إليه';
-$labels['contactsfromto'] = 'المراسلون $from إلى $to من $count';
-$labels['print'] = 'طباعة';
-$labels['export'] = 'تصدير';
-$labels['previouspage'] = 'عرض المجموعة السابقة';
-$labels['firstpage'] = 'عرض المجموعة الأولى';
-$labels['nextpage'] = 'عرض المجموعة التالية';
-$labels['lastpage'] = 'عرض المجموعة الأخيرة';
-$labels['groups'] = 'المجموعات';
-$labels['personaladrbook'] = 'العناوين الشخصية';
-$labels['settingsfor'] = 'إعدادات';
-$labels['preferences'] = 'التفضيلات';
-$labels['userpreferences'] = 'تفضيلات المستخدم';
-$labels['editpreferences'] = 'تحرير تفضيلات المستخدم';
-$labels['identities'] = 'الهويات';
-$labels['manageidentities'] = 'إدارة هويات هذا الحساب';
-$labels['newidentity'] = 'هوية جديدة';
-$labels['newitem'] = 'عنصر جديد';
-$labels['edititem'] = 'تحرير عنصر';
-$labels['setdefault'] = 'تعيين كإفتراضي';
-$labels['language'] = 'اللغة';
-$labels['timezone'] = 'المنطقة الزمنية';
-$labels['pagesize'] = 'أسطر في الصفحة';
-$labels['signature'] = 'التوقيع';
-$labels['dstactive'] = 'التوقيت الصيفي';
-$labels['htmleditor'] = 'إنشاء رسائل بنسق HTML';
-$labels['htmlsignature'] = 'توقيع HTML';
-$labels['previewpane'] = 'إظهار قسم المعاينة';
-$labels['autosavedraft'] = 'حفظ المسودة تلقائياً';
-$labels['everynminutes'] = 'كل $n دقيقة';
-$labels['never'] = 'أبداً';
-$labels['folder'] = 'مجلد';
-$labels['folders'] = 'مجلدات';
-$labels['foldername'] = 'اسم المجلد';
-$labels['subscribed'] = 'مشترك';
-$labels['messagecount'] = 'الرسائل';
-$labels['create'] = 'إنشاء';
-$labels['createfolder'] = 'إنشاء مجلد جديد';
-$labels['rename'] = 'إعادة التسمية';
-$labels['renamefolder'] = 'إعادة تسمية المجلد';
-$labels['deletefolder'] = 'حذف المجلد';
-$labels['managefolders'] = 'إدارة المجلدات';
-$labels['sortby'] = 'ترتيب بحسب';
-$labels['sortasc'] = 'ترتيب تصاعدي';
-$labels['sortdesc'] = 'ترتيب تنازلي';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ar/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Ossama Khayat <okhayat@yahoo.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'فشل تسجيل الدخول';
-$messages['cookiesdisabled'] = 'المتصفح الخاص بك لا يقبل الكوكيز';
-$messages['sessionerror'] = 'انتهت صلاحية الجلسة الحالية أو أنها غير صالحة';
-$messages['imaperror'] = 'فشل الاتصال بخادم IMAP';
-$messages['nomessagesfound'] = 'لم يعثر على أية رسائل في صندوق البريد هذا';
-$messages['loggedout'] = 'لقد قمت بإنهاء هذه الجلسة بنجاح. إلى اللقاء!';
-$messages['mailboxempty'] = 'صندوق البريد فارغ';
-$messages['loading'] = 'جاري العمل...';
-$messages['loadingdata'] = 'تحميل البيانات...';
-$messages['checkingmail'] = 'التحقق من وجود رسائل جديدة...';
-$messages['sendingmessage'] = 'إرسال الرسالة...';
-$messages['messagesent'] = 'تم إرسال الرسالة بنجاح';
-$messages['savingmessage'] = 'حفظ الرسالة...';
-$messages['messagesaved'] = 'تم حفظ الرسالة في المسودات';
-$messages['successfullysaved'] = 'تم الحفظ بنجاح';
-$messages['addedsuccessfully'] = 'تمت إضافة المراسل إلى دفتر العناوين بنجاح';
-$messages['contactexists'] = 'هناك مراسل له نفس هذا البريد الالكتروني موجود مسبقاً';
-$messages['blockedimages'] = 'لحماية خصوصيتك، تم حجب الصور الغير مضمنة (البعيدة) في هذه الرسالة.';
-$messages['encryptedmessage'] = 'هذه الرسالة مشفرة ولا يمكن عرضها. عذراً!';
-$messages['nocontactsfound'] = 'لم يعثر على أي مراسل';
-$messages['contactnotfound'] = 'تعذر العثور على المراسل المطلوب';
-$messages['sendingfailed'] = 'فشل إرسال الرسالة';
-$messages['errorsaving'] = 'حدث خطأ أثناء الحفظ';
-$messages['errormoving'] = 'تعذر نقل هذه الرسالة';
-$messages['errordeleting'] = 'تعذر حذف هذه الرسالة';
-$messages['deletecontactconfirm'] = 'هل تريد حقاً حذف المراسلـ(ين) المحدد(ين)؟';
-$messages['deletemessagesconfirm'] = 'هل تريد حذف الرسائل المحددة؟';
-$messages['deletefolderconfirm'] = 'هل تريد حقاً حذف هذا المجلد؟';
-$messages['purgefolderconfirm'] = 'هل تريد حقاً حذف جميع الرسائل في هذا المجلد؟';
-$messages['formincomplete'] = 'لم يتم تعبئة بيانات الاستمارة بالكامل';
-$messages['noemailwarning'] = 'الرجاء إدخال عنوان بريد إلكتروني صالح';
-$messages['nonamewarning'] = 'الرجاء إدخال اسم';
-$messages['nopagesizewarning'] = 'الرجاء إدخال حجم الصفحة';
-$messages['norecipientwarning'] = 'الرجاء إدخال اسم مستقبل واحد على الأقل';
-$messages['nosubjectwarning'] = 'حقل "الموضوع" فارغ. هل تريد كتابة موضوع للرسالة؟';
-$messages['nobodywarning'] = 'إرسال هذه الرسالة دون نص؟';
-$messages['notsentwarning'] = 'لم يتم إرسال الرسالة. هل تريد تجاهل الرسالة؟';
-$messages['noldapserver'] = 'الرجاء اختيار خادم ldap للبحث فيه';
-$messages['nocontactsreturned'] = 'لم يعثر على أي مراسلين';
-$messages['nosearchname'] = 'الرجاء إدخال اسم مراسل أو عنوان بريد إلكتروني';
-$messages['searchsuccessful'] = 'عثر على $nr رسائل';
-$messages['searchnomatch'] = 'لم يعثر على شيء';
-$messages['searching'] = 'جاري البحث...';
-$messages['checking'] = 'جاري التحقق...';
-$messages['nospellerrors'] = 'لم يعثر على أية أخطاء إملائية';
-$messages['folderdeleted'] = 'تم حذف المجلد بنجاح';
-$messages['deletedsuccessfully'] = 'تم الحذف بنجاح';
-$messages['converting'] = 'إزالة التنسيق من الرسالة...';
-$messages['messageopenerror'] = 'تعذرت قراءة الرسالة من الخادم';
-$messages['fileuploaderror'] = 'فشل رفع الملف';
-$messages['filesizeerror'] = 'حجم الملف الذي تحاول رفعه أكبر من الحجم الأقصى $size';
-$messages['copysuccess'] = 'تم نسخ $nr رسائل بنجاح';
-$messages['copyerror'] = 'لم يمكن نسخ أية عناوين';
-$messages['sourceisreadonly'] = 'لا يمكن تعديل مصدر العنوان هذا';
-$messages['errorsavingcontact'] = 'تعذر حفظ عنوان المراسل';
-$messages['movingmessage'] = 'جاري نقل الرسالة...';
-$messages['receiptsent'] = 'أرسل إيصال الاستلام بنجاح';
-$messages['errorsendingreceipt'] = 'تعذر إرسال إيصال الاستلام';
-$messages['nodeletelastidentity'] = 'لا يمكن حذف هذا السجل حيث أنه الوحيد المتبقي.';
-$messages['addsubfolderhint'] = 'سيتم إنشاء هذا المجلد كمجلد فرعي للمحدد.';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/ar/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Ossama Khayat <okhayat@yahoo.com> |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 1474 2008-06-05 06:55:51Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'مرحباً بكم في $product';
+$labels['username'] = 'اسم المستخدم';
+$labels['password'] = 'كلمة المرور';
+$labels['server'] = 'الخادم';
+$labels['login'] = 'تسجيل الدخول';
+$labels['logout'] = 'تسجيل الخروج';
+$labels['mail'] = 'البريد';
+$labels['settings'] = 'الإعدادات الشخصية';
+$labels['addressbook'] = 'دفتر العناوين';
+$labels['inbox'] = 'الوارد';
+$labels['drafts'] = 'المسودات';
+$labels['sent'] = 'المرسل';
+$labels['trash'] = 'المهملات';
+$labels['junk'] = 'غير المرغوب';
+$labels['subject'] = 'الموضوع';
+$labels['from'] = 'المرسل';
+$labels['to'] = 'المستقبل';
+$labels['cc'] = 'نسخة';
+$labels['bcc'] = 'نسخة مخفية';
+$labels['replyto'] = 'الرد إلى';
+$labels['date'] = 'التاريخ';
+$labels['size'] = 'الحجم';
+$labels['priority'] = 'الأولوية';
+$labels['organization'] = 'المنظمة';
+$labels['reply-to'] = 'الرد إلى';
+$labels['mailboxlist'] = 'المجلدات';
+$labels['messagesfromto'] = 'الرسالة $from إلى $to من $count';
+$labels['messagenrof'] = 'الرسالة $nr من $count';
+$labels['moveto'] = 'نقل إلى...';
+$labels['download'] = 'تنزيل';
+$labels['filename'] = 'اسم الملف';
+$labels['filesize'] = 'حجم الملف';
+$labels['preferhtml'] = 'تفضيل صيغة HTML';
+$labels['htmlmessage'] = 'رسالة بنسق HTML';
+$labels['prettydate'] = 'تواريخ منمقة';
+$labels['addtoaddressbook'] = 'إضافة إلى دفتر العناوين';
+$labels['sun'] = 'أح';
+$labels['mon'] = 'إث';
+$labels['tue'] = 'ثل';
+$labels['wed'] = 'أر';
+$labels['thu'] = 'خم';
+$labels['fri'] = 'جم';
+$labels['sat'] = 'سب';
+$labels['sunday'] = 'الأحد';
+$labels['monday'] = 'الإثنين';
+$labels['tuesday'] = 'الثلاثاء';
+$labels['wednesday'] = 'الأربعاء';
+$labels['thursday'] = 'الخميس';
+$labels['friday'] = 'الجمعة';
+$labels['saturday'] = 'السبت';
+$labels['jan'] = 'ينا';
+$labels['feb'] = 'فبر';
+$labels['mar'] = 'مار';
+$labels['apr'] = 'أبر';
+$labels['may'] = 'ماي';
+$labels['jun'] = 'يون';
+$labels['jul'] = 'يول';
+$labels['aug'] = 'أغس';
+$labels['sep'] = 'سبت';
+$labels['oct'] = 'أكت';
+$labels['nov'] = 'نوف';
+$labels['dec'] = 'ديس';
+$labels['longjan'] = 'يناير';
+$labels['longfeb'] = 'فبراير';
+$labels['longmar'] = 'مارس';
+$labels['longapr'] = 'أبريل';
+$labels['longmay'] = 'مايو';
+$labels['longjun'] = 'يونيو';
+$labels['longjul'] = 'يوليو';
+$labels['longaug'] = 'أغسطس';
+$labels['longsep'] = 'سبتمبر';
+$labels['longoct'] = 'أكتوبر';
+$labels['longnov'] = 'نوفمبر';
+$labels['longdec'] = 'ديسمبر';
+$labels['today'] = 'اليوم';
+$labels['checkmail'] = 'التحقق من وجود رسائل جديدة';
+$labels['writenewmessage'] = 'إنشاء رسالة جديدة';
+$labels['replytomessage'] = 'الرد على الرسالة';
+$labels['replytoallmessage'] = 'الرد على المرسل وجميع مستقبلي الرسالة';
+$labels['forwardmessage'] = 'تمرير الرسالة';
+$labels['deletemessage'] = 'حذف الرسالة إلى المهملات';
+$labels['movemessagetotrash'] = 'انقل الرسالة إلى سلة المهملات';
+$labels['printmessage'] = 'طباعة هذه الرسالة';
+$labels['previousmessage'] = 'عرض الرسالة السابقة';
+$labels['previousmessages'] = 'عرض المجموعة السابقة من الرسائل';
+$labels['firstmessage'] = 'عرض الرسالة الأولى';
+$labels['firstmessages'] = 'عرض مجموعة الرسائل الأولى';
+$labels['nextmessage'] = 'عرض الرسالة التالية';
+$labels['nextmessages'] = 'عرض المجموعة التالية من الرسائل';
+$labels['lastmessage'] = 'عرض الرسالة الأخيرة';
+$labels['lastmessages'] = 'عرض مجموعة الرسائل الأخيرة';
+$labels['backtolist'] = 'العودة إلى لائحة الرسائل';
+$labels['viewsource'] = 'إظهار المصدر';
+$labels['markmessages'] = 'وسم الرسالة';
+$labels['markread'] = 'كمقروءة';
+$labels['markunread'] = 'كغير مقروءة';
+$labels['select'] = 'تحديد';
+$labels['all'] = 'الكل';
+$labels['none'] = 'لا شيء';
+$labels['unread'] = 'غير المقروءة';
+$labels['compact'] = 'ضغط';
+$labels['empty'] = 'تفريغ';
+$labels['purge'] = 'إزالة';
+$labels['quota'] = 'المساحة المستخدمة';
+$labels['unknown'] = 'مجهول';
+$labels['unlimited'] = 'غير محدود';
+$labels['quicksearch'] = 'البحث السريع';
+$labels['resetsearch'] = 'استعادة البحث للافتراضي';
+$labels['compose'] = 'إنشاء رسالة';
+$labels['savemessage'] = 'حفظ هذه المسودة';
+$labels['sendmessage'] = 'إرسال الرسالة الآن';
+$labels['addattachment'] = 'إرفاق ملف';
+$labels['charset'] = 'مجموعة المحارف';
+$labels['editortype'] = 'نوع المُحرّر';
+$labels['returnreceipt'] = 'ايصال استلام';
+$labels['checkspelling'] = 'التدقيق الإملائي';
+$labels['resumeediting'] = 'متابعة التحرير';
+$labels['revertto'] = 'استعادة إلى';
+$labels['attachments'] = 'مرفقات';
+$labels['upload'] = 'تحميل';
+$labels['close'] = 'إغلاق';
+$labels['low'] = 'منخض';
+$labels['lowest'] = 'الأقل';
+$labels['normal'] = 'عادي';
+$labels['high'] = 'مرتفع';
+$labels['highest'] = 'الأعلى';
+$labels['nosubject'] = '(دون موضوع)';
+$labels['showimages'] = 'إظهار الصور';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'نص مجرد';
+$labels['addcc'] = 'أضف CC';
+$labels['addbcc'] = 'أضف BCC';
+$labels['addreplyto'] = 'أضيف Reply-To';
+$labels['mdnrequest'] = 'طلب المرسل إعلامه عند قراءتك لرسالته. هل تود إعلام المرسل؟';
+$labels['receiptread'] = 'إيصال الاستلام )بالقراءة)';
+$labels['yourmessage'] = 'هذا إيصال بقراءة رسالتك';
+$labels['receiptnote'] = 'ملاحظة: يُعلمك هذا الإيصال بأن رسالتك قد ظهرت على جهاز المستقبِل. ليست هناك أية ضمانات أن المستقبل قد قرأ أو فهم محتويات الرسالة.';
+$labels['name'] = 'اسم العرض';
+$labels['firstname'] = 'الإسم الأول';
+$labels['surname'] = 'الإسم الأخير';
+$labels['email'] = 'البريد الإلكتروني';
+$labels['addcontact'] = 'إضافة المراسل المحدد إلى دفتر عناويني';
+$labels['editcontact'] = 'تحرير بيانات المراسل';
+$labels['edit'] = 'تحرير';
+$labels['cancel'] = 'إلغاء';
+$labels['save'] = 'حفظ';
+$labels['delete'] = 'حذف';
+$labels['newcontact'] = 'إنشاء بطاقة مراسل جديدة';
+$labels['deletecontact'] = 'حذف المراسلين المحددين';
+$labels['composeto'] = 'إنشاء رسالة إليه';
+$labels['contactsfromto'] = 'المراسلون $from إلى $to من $count';
+$labels['print'] = 'طباعة';
+$labels['export'] = 'تصدير';
+$labels['previouspage'] = 'عرض المجموعة السابقة';
+$labels['firstpage'] = 'عرض المجموعة الأولى';
+$labels['nextpage'] = 'عرض المجموعة التالية';
+$labels['lastpage'] = 'عرض المجموعة الأخيرة';
+$labels['groups'] = 'المجموعات';
+$labels['personaladrbook'] = 'العناوين الشخصية';
+$labels['settingsfor'] = 'إعدادات';
+$labels['preferences'] = 'التفضيلات';
+$labels['userpreferences'] = 'تفضيلات المستخدم';
+$labels['editpreferences'] = 'تحرير تفضيلات المستخدم';
+$labels['identities'] = 'الهويات';
+$labels['manageidentities'] = 'إدارة هويات هذا الحساب';
+$labels['newidentity'] = 'هوية جديدة';
+$labels['newitem'] = 'عنصر جديد';
+$labels['edititem'] = 'تحرير عنصر';
+$labels['setdefault'] = 'تعيين كإفتراضي';
+$labels['language'] = 'اللغة';
+$labels['timezone'] = 'المنطقة الزمنية';
+$labels['pagesize'] = 'أسطر في الصفحة';
+$labels['signature'] = 'التوقيع';
+$labels['dstactive'] = 'التوقيت الصيفي';
+$labels['htmleditor'] = 'إنشاء رسائل بنسق HTML';
+$labels['htmlsignature'] = 'توقيع HTML';
+$labels['previewpane'] = 'إظهار قسم المعاينة';
+$labels['logoutclear'] = 'أفرغ المحذوفات عند الخروج';
+$labels['logoutcompact'] = 'اضغط الوارد عن الخروج';
+$labels['uisettings'] = 'واجهة المستخدم';
+$labels['serversettings'] = 'إعدادات الخادم';
+$labels['mailboxview'] = 'مظهر صندوق البريد';
+$labels['mdnrequests'] = 'تنويهات المُرسِل';
+$labels['askuser'] = 'اسأل المستخدم';
+$labels['autosend'] = 'أأرسلها تلقائياً';
+$labels['ignore'] = 'تجاهلها';
+$labels['readwhendeleted'] = 'حدد الرسالة كمقروءة عند حذفها';
+$labels['flagfordeletion'] = 'ضع علامة على الرسالة لحذفها بدلاً من حذفها';
+$labels['autosavedraft'] = 'حفظ المسودة تلقائياً';
+$labels['everynminutes'] = 'كل $n دقيقة';
+$labels['never'] = 'أبداً';
+$labels['folder'] = 'مجلد';
+$labels['folders'] = 'مجلدات';
+$labels['foldername'] = 'اسم المجلد';
+$labels['subscribed'] = 'مشترك';
+$labels['messagecount'] = 'الرسائل';
+$labels['create'] = 'إنشاء';
+$labels['createfolder'] = 'إنشاء مجلد جديد';
+$labels['rename'] = 'إعادة التسمية';
+$labels['renamefolder'] = 'إعادة تسمية المجلد';
+$labels['deletefolder'] = 'حذف المجلد';
+$labels['managefolders'] = 'إدارة المجلدات';
+$labels['sortby'] = 'ترتيب بحسب';
+$labels['sortasc'] = 'ترتيب تصاعدي';
+$labels['sortdesc'] = 'ترتيب تنازلي';
+
+?>
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/ar/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Ossama Khayat <okhayat@yahoo.com> |
++-----------------------------------------------------------------------+
+
+@version $Id: messages.inc 1474 2008-06-05 06:55:51Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'فشل تسجيل الدخول';
+$messages['cookiesdisabled'] = 'المتصفح الخاص بك لا يقبل الكوكيز';
+$messages['sessionerror'] = 'انتهت صلاحية الجلسة الحالية أو أنها غير صالحة';
+$messages['imaperror'] = 'فشل الاتصال بخادم IMAP';
+$messages['nomessagesfound'] = 'لم يعثر على أية رسائل في صندوق البريد هذا';
+$messages['loggedout'] = 'لقد قمت بإنهاء هذه الجلسة بنجاح. إلى اللقاء!';
+$messages['mailboxempty'] = 'صندوق البريد فارغ';
+$messages['loading'] = 'جاري العمل...';
+$messages['loadingdata'] = 'تحميل البيانات...';
+$messages['checkingmail'] = 'التحقق من وجود رسائل جديدة...';
+$messages['sendingmessage'] = 'إرسال الرسالة...';
+$messages['messagesent'] = 'تم إرسال الرسالة بنجاح';
+$messages['savingmessage'] = 'حفظ الرسالة...';
+$messages['messagesaved'] = 'تم حفظ الرسالة في المسودات';
+$messages['successfullysaved'] = 'تم الحفظ بنجاح';
+$messages['addedsuccessfully'] = 'تمت إضافة المراسل إلى دفتر العناوين بنجاح';
+$messages['contactexists'] = 'هناك مراسل له نفس هذا البريد الالكتروني موجود مسبقاً';
+$messages['blockedimages'] = 'لحماية خصوصيتك، تم حجب الصور الغير مضمنة (البعيدة) في هذه الرسالة.';
+$messages['encryptedmessage'] = 'هذه الرسالة مشفرة ولا يمكن عرضها. عذراً!';
+$messages['nocontactsfound'] = 'لم يعثر على أي مراسل';
+$messages['contactnotfound'] = 'تعذر العثور على المراسل المطلوب';
+$messages['sendingfailed'] = 'فشل إرسال الرسالة';
+$messages['errorsaving'] = 'حدث خطأ أثناء الحفظ';
+$messages['errormoving'] = 'تعذر نقل هذه الرسالة';
+$messages['errordeleting'] = 'تعذر حذف هذه الرسالة';
+$messages['deletecontactconfirm'] = 'هل تريد حقاً حذف المراسلـ(ين) المحدد(ين)؟';
+$messages['deletemessagesconfirm'] = 'هل تريد حذف الرسائل المحددة؟';
+$messages['deletefolderconfirm'] = 'هل تريد حقاً حذف هذا المجلد؟';
+$messages['purgefolderconfirm'] = 'هل تريد حقاً حذف جميع الرسائل في هذا المجلد؟';
+$messages['formincomplete'] = 'لم يتم تعبئة بيانات الاستمارة بالكامل';
+$messages['noemailwarning'] = 'الرجاء إدخال عنوان بريد إلكتروني صالح';
+$messages['nonamewarning'] = 'الرجاء إدخال اسم';
+$messages['nopagesizewarning'] = 'الرجاء إدخال حجم الصفحة';
+$messages['norecipientwarning'] = 'الرجاء إدخال اسم مستقبل واحد على الأقل';
+$messages['nosubjectwarning'] = 'حقل \"الموضوع\" فارغ. هل تريد كتابة موضوع للرسالة؟';
+$messages['nobodywarning'] = 'إرسال هذه الرسالة دون نص؟';
+$messages['notsentwarning'] = 'لم يتم إرسال الرسالة. هل تريد تجاهل الرسالة؟';
+$messages['noldapserver'] = 'الرجاء اختيار خادم ldap للبحث فيه';
+$messages['nocontactsreturned'] = 'لم يعثر على أي مراسلين';
+$messages['nosearchname'] = 'الرجاء إدخال اسم مراسل أو عنوان بريد إلكتروني';
+$messages['searchsuccessful'] = 'عثر على $nr رسائل';
+$messages['searchnomatch'] = 'لم يعثر على شيء';
+$messages['searching'] = 'جاري البحث...';
+$messages['checking'] = 'جاري التحقق...';
+$messages['nospellerrors'] = 'لم يعثر على أية أخطاء إملائية';
+$messages['folderdeleted'] = 'تم حذف المجلد بنجاح';
+$messages['deletedsuccessfully'] = 'تم الحذف بنجاح';
+$messages['converting'] = 'إزالة التنسيق من الرسالة...';
+$messages['messageopenerror'] = 'تعذرت قراءة الرسالة من الخادم';
+$messages['fileuploaderror'] = 'فشل رفع الملف';
+$messages['filesizeerror'] = 'حجم الملف الذي تحاول رفعه أكبر من الحجم الأقصى $size';
+$messages['copysuccess'] = 'تم نسخ $nr رسائل بنجاح';
+$messages['copyerror'] = 'لم يمكن نسخ أية عناوين';
+$messages['sourceisreadonly'] = 'لا يمكن تعديل مصدر العنوان هذا';
+$messages['errorsavingcontact'] = 'تعذر حفظ عنوان المراسل';
+$messages['movingmessage'] = 'جاري نقل الرسالة...';
+$messages['receiptsent'] = 'أرسل إيصال الاستلام بنجاح';
+$messages['errorsendingreceipt'] = 'تعذر إرسال إيصال الاستلام';
+$messages['nodeletelastidentity'] = 'لا يمكن حذف هذا السجل حيث أنه الوحيد المتبقي.';
+$messages['addsubfolderhint'] = 'سيتم إنشاء هذا المجلد كمجلد فرعي للمحدد.';
+$messages['forbiddencharacter'] = 'اسم المجلّد يحتوي حروفاً ممنوعة';
+
+?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/bg/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Todor Dragnev <todor.dragnev@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Добре дошли в $product';
-$labels['username'] = 'Потребител';
-$labels['password'] = 'Парола';
-$labels['server'] = 'Сървър';
-$labels['login'] = 'Вход';
-$labels['logout'] = 'Изход';
-$labels['mail'] = 'Кутия';
-$labels['settings'] = 'Настройки';
-$labels['addressbook'] = 'Адреси';
-$labels['inbox'] = 'Входящи';
-$labels['drafts'] = 'Чернови';
-$labels['sent'] = 'Изпратени';
-$labels['trash'] = 'Кошче';
-$labels['junk'] = 'Спам';
-$labels['subject'] = 'Заглавие';
-$labels['from'] = 'От';
-$labels['to'] = 'Получател';
-$labels['cc'] = 'Копие до';
-$labels['bcc'] = 'Скрито копие до';
-$labels['replyto'] = 'Отговор на';
-$labels['date'] = 'Дата';
-$labels['size'] = 'Размер';
-$labels['priority'] = 'Приоритет';
-$labels['organization'] = 'Организация';
-$labels['reply-to'] = 'Отговор на';
-$labels['mailboxlist'] = 'Папки';
-$labels['messagesfromto'] = 'Съобщения $from до $to от $count';
-$labels['messagenrof'] = 'Съобщение $nr от $count';
-$labels['moveto'] = 'премести в...';
-$labels['download'] = 'изтегли';
-$labels['filename'] = 'Име на файла';
-$labels['filesize'] = 'Размер на файла';
-$labels['preferhtml'] = 'Показвай първо HTML версия';
-$labels['htmlmessage'] = 'HTML съобщение';
-$labels['prettydate'] = 'Кратки дати';
-$labels['addtoaddressbook'] = 'Добави в адресната книга';
-$labels['sun'] = 'Нед';
-$labels['mon'] = 'Пон';
-$labels['tue'] = 'Вто';
-$labels['wed'] = 'Сря';
-$labels['thu'] = 'Чет';
-$labels['fri'] = 'Пет';
-$labels['sat'] = 'Съб';
-$labels['sunday'] = 'Неделя';
-$labels['monday'] = 'Понеделник';
-$labels['tuesday'] = 'Вторник';
-$labels['wednesday'] = 'Сряда';
-$labels['thursday'] = 'Четвъртък';
-$labels['friday'] = 'Петък';
-$labels['saturday'] = 'Събота';
-$labels['today'] = 'Днес';
-$labels['checkmail'] = 'Провери за нови писма';
-$labels['writenewmessage'] = 'Създай ново писмо';
-$labels['replytomessage'] = 'Отговори на писмото';
-$labels['replytoallmessage'] = 'Отговори до всички получатели';
-$labels['forwardmessage'] = 'Препрати писмото';
-$labels['deletemessage'] = 'Изтрий писмото';
-$labels['movemessagetotrash'] = 'Премести писмото в кошчето';
-$labels['printmessage'] = 'Разпечатай писмото';
-$labels['previousmessage'] = 'Предно писмо';
-$labels['previousmessages'] = 'Предна страница';
-$labels['firstmessage'] = 'Първо писмо';
-$labels['firstmessages'] = 'Първа страница';
-$labels['nextmessage'] = 'Следващо писмо';
-$labels['nextmessages'] = 'Следваща страница';
-$labels['lastmessage'] = 'Последно писмо';
-$labels['lastmessages'] = 'Последна страница';
-$labels['backtolist'] = 'Обратно към списъка';
-$labels['viewsource'] = 'Виж кода';
-$labels['markmessages'] = 'Маркирай писмата';
-$labels['markread'] = 'Като прочетени';
-$labels['markunread'] = 'Като нови';
-$labels['select'] = 'Избери';
-$labels['all'] = 'Всички';
-$labels['none'] = 'Нищо';
-$labels['unread'] = 'Нови';
-$labels['compact'] = 'Свий';
-$labels['empty'] = 'Изпразни';
-$labels['purge'] = 'Изчисти';
-$labels['quota'] = 'Използвано място';
-$labels['unknown'] = 'няма информация';
-$labels['unlimited'] = 'няма ограничение';
-$labels['quicksearch'] = 'Бързо търсене';
-$labels['resetsearch'] = 'Изчисти търсенето и покажи всички писма';
-$labels['compose'] = 'Ново писмо';
-$labels['savemessage'] = 'Запиши в Чернови';
-$labels['sendmessage'] = 'Изпрати писмото';
-$labels['addattachment'] = 'Прикачи файл';
-$labels['charset'] = 'Кодировка';
-$labels['editortype'] = 'Вид редактор';
-$labels['returnreceipt'] = 'Обратна разписка';
-$labels['checkspelling'] = 'Провери правописа';
-$labels['resumeediting'] = 'Продължи черновата';
-$labels['revertto'] = 'Върни се към';
-$labels['attachments'] = 'Прикачени файлове';
-$labels['upload'] = 'Качи';
-$labels['close'] = 'Затвори';
-$labels['low'] = '**';
-$labels['lowest'] = '*';
-$labels['normal'] = '***';
-$labels['high'] = '****';
-$labels['highest'] = '*****';
-$labels['nosubject'] = '(няма заглавие)';
-$labels['showimages'] = 'Виж изображенията';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'текстов';
-$labels['addcc'] = 'Копие до';
-$labels['addbcc'] = 'Скрито копие до';
-$labels['addreplyto'] = 'Отговор на';
-$labels['mdnrequest'] = 'Подателят на писмото е пожелал да бъде уведомен, че сте го прочели. Желаете ли да изпратите обратна разписка?';
-$labels['receiptread'] = 'Обратна разписка (прочетено)';
-$labels['yourmessage'] = 'Това е обратна разписка за писмото Ви';
-$labels['receiptnote'] = 'Забележка: Тази разписка потвърждава само, че писмото е било показано на компютъра на получателят. Няма никаква гаранция, че получателят е прочел и/или разбрал съдържанието на писмото.';
-$labels['name'] = 'Кратко име';
-$labels['firstname'] = 'Име';
-$labels['surname'] = 'Фамилия';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Добави';
-$labels['editcontact'] = 'Редактирай';
-$labels['edit'] = 'Редактирай';
-$labels['cancel'] = 'Отказ';
-$labels['save'] = 'Запиши';
-$labels['delete'] = 'Изтрий';
-$labels['newcontact'] = 'Нов контакт';
-$labels['deletecontact'] = 'Изтрий маркираните контакти';
-$labels['composeto'] = 'Напиши писмо до';
-$labels['contactsfromto'] = 'Контакти $from до $to от $count';
-$labels['print'] = 'Разпечатай';
-$labels['export'] = 'Експортиране';
-$labels['previouspage'] = 'Предна страница';
-$labels['firstpage'] = 'Първа страница';
-$labels['nextpage'] = 'Следваща страница';
-$labels['lastpage'] = 'Последна страница';
-$labels['groups'] = 'Групи';
-$labels['personaladrbook'] = 'Лични адреси';
-$labels['settingsfor'] = 'Настройки за';
-$labels['preferences'] = 'Настройки';
-$labels['userpreferences'] = 'Потребителски настройки';
-$labels['editpreferences'] = 'Редактирай потребителските настройки';
-$labels['identities'] = 'Самоличност';
-$labels['manageidentities'] = 'Промяна на самоличностите за този акаунт';
-$labels['newidentity'] = 'Нова самоличност';
-$labels['newitem'] = 'Нова самоличност';
-$labels['edititem'] = 'Редактиране на самоличност';
-$labels['setdefault'] = 'По подразбиране';
-$labels['language'] = 'Език';
-$labels['timezone'] = 'Часова зона';
-$labels['pagesize'] = 'Редове на страница';
-$labels['signature'] = 'Подпис';
-$labels['dstactive'] = 'Маркирай при лятно време';
-$labels['htmleditor'] = 'Писане на HTML съобщения';
-$labels['htmlsignature'] = 'HTML подпис';
-$labels['previewpane'] = 'Панел за преглед';
-$labels['autosavedraft'] = 'Автоматично записвай чернова';
-$labels['everynminutes'] = 'всеки $n минути';
-$labels['never'] = 'никога';
-$labels['folder'] = 'Папка';
-$labels['folders'] = 'Папки';
-$labels['foldername'] = 'Име на папката';
-$labels['subscribed'] = 'Използвай';
-$labels['messagecount'] = 'Писма';
-$labels['create'] = 'Създай';
-$labels['createfolder'] = 'Направи нова папка';
-$labels['rename'] = 'Преименувай';
-$labels['renamefolder'] = 'Преименувай папката';
-$labels['deletefolder'] = 'Изтрий';
-$labels['managefolders'] = 'Настройки на папките';
-$labels['sortby'] = 'Сортирай по';
-$labels['sortasc'] = 'Сортирай възходящо';
-$labels['sortdesc'] = 'Сортирай низходящо';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/bg/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Todor Dragnev <todor.dragnev@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Вход неуспешен';
-$messages['cookiesdisabled'] = 'Вашият браузър не приема cookies';
-$messages['sessionerror'] = 'Невалидна или изтекла сесия';
-$messages['imaperror'] = 'Неуспешно свързване към IMAP сървъра';
-$messages['nomessagesfound'] = 'Няма съобщения';
-$messages['loggedout'] = 'Довиждане!';
-$messages['mailboxempty'] = 'Папката е празна';
-$messages['loading'] = 'Зареждане...';
-$messages['loadingdata'] = 'Зареждане на данни...';
-$messages['checkingmail'] = 'Проверка за нови писма...';
-$messages['sendingmessage'] = 'Изпращане на писмото...';
-$messages['messagesent'] = 'Писмото е изпратено успешно';
-$messages['savingmessage'] = 'Записване на писмото...';
-$messages['messagesaved'] = 'Писмото е записано в Чернови';
-$messages['successfullysaved'] = 'Записано';
-$messages['addedsuccessfully'] = 'Контакта е добавен в адресната книга';
-$messages['contactexists'] = 'Контакт с този e-mail адрес вече същестува';
-$messages['blockedimages'] = 'С оглед на Вашата сигурност, изображенията в това писмо са блокирани.';
-$messages['encryptedmessage'] = 'Това е кодирано писмо и не може да бъде показано. Съжаляваме!';
-$messages['nocontactsfound'] = 'Няма контакти';
-$messages['contactnotfound'] = 'Исканият контакт не е намерен';
-$messages['sendingfailed'] = 'Изпращането неуспешно';
-$messages['errorsaving'] = 'Възникна грешка при записването';
-$messages['errormoving'] = 'Писмото не може да бъде преместено';
-$messages['errordeleting'] = 'Писмото не може да бъде изтрито';
-$messages['deletecontactconfirm'] = 'Искате ли да изтриете маркираните контакти?';
-$messages['deletemessagesconfirm'] = 'Искате ли да изтриете маркираните съобщения?';
-$messages['deletefolderconfirm'] = 'Искате ли да изтриете тази папка?';
-$messages['purgefolderconfirm'] = 'Искате ли да изтриете всички писма в тази папка?';
-$messages['formincomplete'] = 'Не сте попълнили всички полета';
-$messages['noemailwarning'] = 'Моля, въведете валиден e-mail адрес';
-$messages['nonamewarning'] = 'Моля, въведете име';
-$messages['nopagesizewarning'] = 'Въведете брой редове на страница';
-$messages['norecipientwarning'] = 'Въведете поне един получател';
-$messages['nosubjectwarning'] = 'Полето "Заглавие" е празно. Искате ли да въведете заглавие?';
-$messages['nobodywarning'] = 'Изпрати това писмо без текст?';
-$messages['notsentwarning'] = 'Писмото не е изпратено. Искате ли да бъде унищожено?';
-$messages['noldapserver'] = 'Изберете LDAP сървър за търсене';
-$messages['nocontactsreturned'] = 'Не са намерени контакти';
-$messages['nosearchname'] = 'Моля, въведете Име на контакта или e-mail адрес';
-$messages['searchsuccessful'] = '$nr намерени писма';
-$messages['searchnomatch'] = 'Търсенето не откри съвпадения';
-$messages['searching'] = 'Търсене...';
-$messages['checking'] = 'Проверка...';
-$messages['nospellerrors'] = 'Не са открити правописни грешки';
-$messages['folderdeleted'] = 'Папката е изтрита';
-$messages['deletedsuccessfully'] = 'Изтриването е успешно';
-$messages['converting'] = 'Премахване форматирането на писмото...';
-$messages['messageopenerror'] = 'Писмото не може да бъде заредено от сървъра';
-$messages['fileuploaderror'] = 'Грешка при прикачването на файла';
-$messages['filesizeerror'] = 'Прикаченият файл надвишава лимита от $size';
-$messages['copysuccess'] = 'Успешно копирани $nr адреса';
-$messages['copyerror'] = 'Грешка при копирането на адресите';
-$messages['sourceisreadonly'] = 'Този източник на адреси е само за четене';
-$messages['errorsavingcontact'] = 'Грешка при записването на адреса';
-$messages['movingmessage'] = 'Преместване на писмото...';
-$messages['receiptsent'] = 'Обратната разписка е изпратена.';
-$messages['errorsendingreceipt'] = 'Грешка при изпращането на обратна разписка.';
-$messages['nodeletelastidentity'] = 'Не можете да изтриете тази самоличност, трябва да имате поне една.';
-$messages['addsubfolderhint'] = 'Тази папка ще бъде създадена като подпапка на текущо избраната';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/bg/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Todor Dragnev <todor.dragnev@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Добре дошли в $product';
+$labels['username'] = 'Потребител';
+$labels['password'] = 'Парола';
+$labels['server'] = 'Сървър';
+$labels['login'] = 'Вход';
+$labels['logout'] = 'Изход';
+$labels['mail'] = 'Кутия';
+$labels['settings'] = 'Настройки';
+$labels['addressbook'] = 'Адреси';
+$labels['inbox'] = 'Входящи';
+$labels['drafts'] = 'Чернови';
+$labels['sent'] = 'Изпратени';
+$labels['trash'] = 'Кошче';
+$labels['junk'] = 'Спам';
+$labels['subject'] = 'Заглавие';
+$labels['from'] = 'От';
+$labels['to'] = 'Получател';
+$labels['cc'] = 'Копие до';
+$labels['bcc'] = 'Скрито копие до';
+$labels['replyto'] = 'Отговор на';
+$labels['date'] = 'Дата';
+$labels['size'] = 'Размер';
+$labels['priority'] = 'Приоритет';
+$labels['organization'] = 'Организация';
+$labels['reply-to'] = 'Отговор на';
+$labels['mailboxlist'] = 'Папки';
+$labels['messagesfromto'] = 'Съобщения $from до $to от $count';
+$labels['messagenrof'] = 'Съобщение $nr от $count';
+$labels['moveto'] = 'премести в...';
+$labels['download'] = 'изтегли';
+$labels['filename'] = 'Име на файла';
+$labels['filesize'] = 'Размер на файла';
+$labels['preferhtml'] = 'Показвай първо HTML версия';
+$labels['htmlmessage'] = 'HTML съобщение';
+$labels['prettydate'] = 'Кратки дати';
+$labels['addtoaddressbook'] = 'Добави в адресната книга';
+$labels['sun'] = 'Нед';
+$labels['mon'] = 'Пон';
+$labels['tue'] = 'Вто';
+$labels['wed'] = 'Сря';
+$labels['thu'] = 'Чет';
+$labels['fri'] = 'Пет';
+$labels['sat'] = 'Съб';
+$labels['sunday'] = 'Неделя';
+$labels['monday'] = 'Понеделник';
+$labels['tuesday'] = 'Вторник';
+$labels['wednesday'] = 'Сряда';
+$labels['thursday'] = 'Четвъртък';
+$labels['friday'] = 'Петък';
+$labels['saturday'] = 'Събота';
+$labels['today'] = 'Днес';
+$labels['checkmail'] = 'Провери за нови писма';
+$labels['writenewmessage'] = 'Създай ново писмо';
+$labels['replytomessage'] = 'Отговори на писмото';
+$labels['replytoallmessage'] = 'Отговори до всички получатели';
+$labels['forwardmessage'] = 'Препрати писмото';
+$labels['deletemessage'] = 'Изтрий писмото';
+$labels['movemessagetotrash'] = 'Премести писмото в кошчето';
+$labels['printmessage'] = 'Разпечатай писмото';
+$labels['previousmessage'] = 'Предно писмо';
+$labels['previousmessages'] = 'Предна страница';
+$labels['firstmessage'] = 'Първо писмо';
+$labels['firstmessages'] = 'Първа страница';
+$labels['nextmessage'] = 'Следващо писмо';
+$labels['nextmessages'] = 'Следваща страница';
+$labels['lastmessage'] = 'Последно писмо';
+$labels['lastmessages'] = 'Последна страница';
+$labels['backtolist'] = 'Обратно към списъка';
+$labels['viewsource'] = 'Виж кода';
+$labels['markmessages'] = 'Маркирай писмата';
+$labels['markread'] = 'Като прочетени';
+$labels['markunread'] = 'Като нови';
+$labels['select'] = 'Избери';
+$labels['all'] = 'Всички';
+$labels['none'] = 'Нищо';
+$labels['unread'] = 'Нови';
+$labels['compact'] = 'Свий';
+$labels['empty'] = 'Изпразни';
+$labels['purge'] = 'Изчисти';
+$labels['quota'] = 'Използвано място';
+$labels['unknown'] = 'няма информация';
+$labels['unlimited'] = 'няма ограничение';
+$labels['quicksearch'] = 'Бързо търсене';
+$labels['resetsearch'] = 'Изчисти търсенето и покажи всички писма';
+$labels['compose'] = 'Ново писмо';
+$labels['savemessage'] = 'Запиши в Чернови';
+$labels['sendmessage'] = 'Изпрати писмото';
+$labels['addattachment'] = 'Прикачи файл';
+$labels['charset'] = 'Кодировка';
+$labels['editortype'] = 'Вид редактор';
+$labels['returnreceipt'] = 'Обратна разписка';
+$labels['checkspelling'] = 'Провери правописа';
+$labels['resumeediting'] = 'Продължи черновата';
+$labels['revertto'] = 'Върни се към';
+$labels['attachments'] = 'Прикачени файлове';
+$labels['upload'] = 'Качи';
+$labels['close'] = 'Затвори';
+$labels['low'] = '**';
+$labels['lowest'] = '*';
+$labels['normal'] = '***';
+$labels['high'] = '****';
+$labels['highest'] = '*****';
+$labels['nosubject'] = '(няма заглавие)';
+$labels['showimages'] = 'Виж изображенията';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'текстов';
+$labels['addcc'] = 'Копие до';
+$labels['addbcc'] = 'Скрито копие до';
+$labels['addreplyto'] = 'Отговор на';
+$labels['mdnrequest'] = 'Подателят на писмото е пожелал да бъде уведомен, че сте го прочели. Желаете ли да изпратите обратна разписка?';
+$labels['receiptread'] = 'Обратна разписка (прочетено)';
+$labels['yourmessage'] = 'Това е обратна разписка за писмото Ви';
+$labels['receiptnote'] = 'Забележка: Тази разписка потвърждава само, че писмото е било показано на компютъра на получателят. Няма никаква гаранция, че получателят е прочел и/или разбрал съдържанието на писмото.';
+$labels['name'] = 'Кратко име';
+$labels['firstname'] = 'Име';
+$labels['surname'] = 'Фамилия';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Добави';
+$labels['editcontact'] = 'Редактирай';
+$labels['edit'] = 'Редактирай';
+$labels['cancel'] = 'Отказ';
+$labels['save'] = 'Запиши';
+$labels['delete'] = 'Изтрий';
+$labels['newcontact'] = 'Нов контакт';
+$labels['deletecontact'] = 'Изтрий маркираните контакти';
+$labels['composeto'] = 'Напиши писмо до';
+$labels['contactsfromto'] = 'Контакти $from до $to от $count';
+$labels['print'] = 'Разпечатай';
+$labels['export'] = 'Експортиране';
+$labels['previouspage'] = 'Предна страница';
+$labels['firstpage'] = 'Първа страница';
+$labels['nextpage'] = 'Следваща страница';
+$labels['lastpage'] = 'Последна страница';
+$labels['groups'] = 'Групи';
+$labels['personaladrbook'] = 'Лични адреси';
+$labels['settingsfor'] = 'Настройки за';
+$labels['preferences'] = 'Настройки';
+$labels['userpreferences'] = 'Потребителски настройки';
+$labels['editpreferences'] = 'Редактирай потребителските настройки';
+$labels['identities'] = 'Самоличност';
+$labels['manageidentities'] = 'Промяна на самоличностите за този акаунт';
+$labels['newidentity'] = 'Нова самоличност';
+$labels['newitem'] = 'Нова самоличност';
+$labels['edititem'] = 'Редактиране на самоличност';
+$labels['setdefault'] = 'По подразбиране';
+$labels['language'] = 'Език';
+$labels['timezone'] = 'Часова зона';
+$labels['pagesize'] = 'Редове на страница';
+$labels['signature'] = 'Подпис';
+$labels['dstactive'] = 'Маркирай при лятно време';
+$labels['htmleditor'] = 'Писане на HTML съобщения';
+$labels['htmlsignature'] = 'HTML подпис';
+$labels['previewpane'] = 'Панел за преглед';
+$labels['autosavedraft'] = 'Автоматично записвай чернова';
+$labels['everynminutes'] = 'всеки $n минути';
+$labels['never'] = 'никога';
+$labels['folder'] = 'Папка';
+$labels['folders'] = 'Папки';
+$labels['foldername'] = 'Име на папката';
+$labels['subscribed'] = 'Използвай';
+$labels['messagecount'] = 'Писма';
+$labels['create'] = 'Създай';
+$labels['createfolder'] = 'Направи нова папка';
+$labels['rename'] = 'Преименувай';
+$labels['renamefolder'] = 'Преименувай папката';
+$labels['deletefolder'] = 'Изтрий';
+$labels['managefolders'] = 'Настройки на папките';
+$labels['sortby'] = 'Сортирай по';
+$labels['sortasc'] = 'Сортирай възходящо';
+$labels['sortdesc'] = 'Сортирай низходящо';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/bg/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Todor Dragnev <todor.dragnev@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Вход неуспешен';
+$messages['cookiesdisabled'] = 'Вашият браузър не приема cookies';
+$messages['sessionerror'] = 'Невалидна или изтекла сесия';
+$messages['imaperror'] = 'Неуспешно свързване към IMAP сървъра';
+$messages['nomessagesfound'] = 'Няма съобщения';
+$messages['loggedout'] = 'Довиждане!';
+$messages['mailboxempty'] = 'Папката е празна';
+$messages['loading'] = 'Зареждане...';
+$messages['loadingdata'] = 'Зареждане на данни...';
+$messages['checkingmail'] = 'Проверка за нови писма...';
+$messages['sendingmessage'] = 'Изпращане на писмото...';
+$messages['messagesent'] = 'Писмото е изпратено успешно';
+$messages['savingmessage'] = 'Записване на писмото...';
+$messages['messagesaved'] = 'Писмото е записано в Чернови';
+$messages['successfullysaved'] = 'Записано';
+$messages['addedsuccessfully'] = 'Контакта е добавен в адресната книга';
+$messages['contactexists'] = 'Контакт с този e-mail адрес вече същестува';
+$messages['blockedimages'] = 'С оглед на Вашата сигурност, изображенията в това писмо са блокирани.';
+$messages['encryptedmessage'] = 'Това е кодирано писмо и не може да бъде показано. Съжаляваме!';
+$messages['nocontactsfound'] = 'Няма контакти';
+$messages['contactnotfound'] = 'Исканият контакт не е намерен';
+$messages['sendingfailed'] = 'Изпращането неуспешно';
+$messages['errorsaving'] = 'Възникна грешка при записването';
+$messages['errormoving'] = 'Писмото не може да бъде преместено';
+$messages['errordeleting'] = 'Писмото не може да бъде изтрито';
+$messages['deletecontactconfirm'] = 'Искате ли да изтриете маркираните контакти?';
+$messages['deletemessagesconfirm'] = 'Искате ли да изтриете маркираните съобщения?';
+$messages['deletefolderconfirm'] = 'Искате ли да изтриете тази папка?';
+$messages['purgefolderconfirm'] = 'Искате ли да изтриете всички писма в тази папка?';
+$messages['formincomplete'] = 'Не сте попълнили всички полета';
+$messages['noemailwarning'] = 'Моля, въведете валиден e-mail адрес';
+$messages['nonamewarning'] = 'Моля, въведете име';
+$messages['nopagesizewarning'] = 'Въведете брой редове на страница';
+$messages['norecipientwarning'] = 'Въведете поне един получател';
+$messages['nosubjectwarning'] = 'Полето "Заглавие" е празно. Искате ли да въведете заглавие?';
+$messages['nobodywarning'] = 'Изпрати това писмо без текст?';
+$messages['notsentwarning'] = 'Писмото не е изпратено. Искате ли да бъде унищожено?';
+$messages['noldapserver'] = 'Изберете LDAP сървър за търсене';
+$messages['nocontactsreturned'] = 'Не са намерени контакти';
+$messages['nosearchname'] = 'Моля, въведете Име на контакта или e-mail адрес';
+$messages['searchsuccessful'] = '$nr намерени писма';
+$messages['searchnomatch'] = 'Търсенето не откри съвпадения';
+$messages['searching'] = 'Търсене...';
+$messages['checking'] = 'Проверка...';
+$messages['nospellerrors'] = 'Не са открити правописни грешки';
+$messages['folderdeleted'] = 'Папката е изтрита';
+$messages['deletedsuccessfully'] = 'Изтриването е успешно';
+$messages['converting'] = 'Премахване форматирането на писмото...';
+$messages['messageopenerror'] = 'Писмото не може да бъде заредено от сървъра';
+$messages['fileuploaderror'] = 'Грешка при прикачването на файла';
+$messages['filesizeerror'] = 'Прикаченият файл надвишава лимита от $size';
+$messages['copysuccess'] = 'Успешно копирани $nr адреса';
+$messages['copyerror'] = 'Грешка при копирането на адресите';
+$messages['sourceisreadonly'] = 'Този източник на адреси е само за четене';
+$messages['errorsavingcontact'] = 'Грешка при записването на адреса';
+$messages['movingmessage'] = 'Преместване на писмото...';
+$messages['receiptsent'] = 'Обратната разписка е изпратена.';
+$messages['errorsendingreceipt'] = 'Грешка при изпращането на обратна разписка.';
+$messages['nodeletelastidentity'] = 'Не можете да изтриете тази самоличност, трябва да имате поне една.';
+$messages['addsubfolderhint'] = 'Тази папка ще бъде създадена като подпапка на текущо избраната';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ca/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Miguel Canteras i Cañizares <miguel@canteras.org> |
- | Simo <sim6@graciasensefils.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1143 2008-02-26 20:50:10Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Benvingut a $product';
-$labels['username'] = 'Nom d\'usuari';
-$labels['password'] = 'Contrasenya';
-$labels['server'] = 'Servidor';
-$labels['login'] = 'Entrar';
-$labels['logout'] = 'Tancar sessió';
-$labels['mail'] = 'E-Mail';
-$labels['settings'] = 'Configuració';
-$labels['addressbook'] = 'Contactes';
-$labels['inbox'] = 'Entrada';
-$labels['drafts'] = 'Esborranys';
-$labels['sent'] = 'Enviats';
-$labels['trash'] = 'Paperera';
-$labels['junk'] = 'Correu brossa';
-$labels['subject'] = 'Assumpte';
-$labels['from'] = 'Remitent';
-$labels['to'] = 'Destinatari';
-$labels['cc'] = 'CC';
-$labels['bcc'] = 'BCC';
-$labels['replyto'] = 'Respondre a';
-$labels['date'] = 'Data';
-$labels['size'] = 'Grandària';
-$labels['priority'] = 'Prioritat';
-$labels['organization'] = 'Organització';
-$labels['reply-to'] = 'Respondre a';
-$labels['mailboxlist'] = 'Carpetes';
-$labels['messagesfromto'] = 'Missatges des de $from a $to de $count';
-$labels['messagenrof'] = 'Missatge $nr de $count';
-$labels['moveto'] = 'moure a...';
-$labels['download'] = 'descarregar';
-$labels['filename'] = 'Nom del fitxer';
-$labels['filesize'] = 'Grandaria de fitxer';
-$labels['preferhtml'] = 'Preferisc HTML';
-$labels['htmlmessage'] = 'Missatge HTML';
-$labels['prettydate'] = 'Dates curtes';
-$labels['addtoaddressbook'] = 'Afegir a contactes';
-$labels['sun'] = 'DM';
-$labels['mon'] = 'DL';
-$labels['tue'] = 'DM';
-$labels['wed'] = 'DC';
-$labels['thu'] = 'DJ';
-$labels['fri'] = 'DV';
-$labels['sat'] = 'DS';
-$labels['sunday'] = 'Diumenge';
-$labels['monday'] = 'Dilluns';
-$labels['tuesday'] = 'Dimarts';
-$labels['wednesday'] = 'Dimecres';
-$labels['thursday'] = 'Dijous';
-$labels['friday'] = 'Divendres';
-$labels['saturday'] = 'Dissabte';
-$labels['today'] = 'Avui';
-$labels['checkmail'] = 'Recupera missatges nous';
-$labels['writenewmessage'] = 'Crear nou missatge';
-$labels['replytomessage'] = 'Respondre al missatge';
-$labels['replytoallmessage'] = 'Respondre al remitent i a tots els destinataris';
-$labels['forwardmessage'] = 'Reenviar missatge';
-$labels['deletemessage'] = 'Eliminar missatge';
-$labels['movemessagetotrash'] = 'Moure missatge a la paperera';
-$labels['printmessage'] = 'Imprimir aquest missatge';
-$labels['previousmessage'] = 'Mostrar el missatge anterior';
-$labels['previousmessages'] = 'Mostrar missatges anteriors';
-$labels['firstmessage'] = 'Mostrar el primer missatge';
-$labels['firstmessages'] = 'Mostrar els primers missatges';
-$labels['nextmessage'] = 'Mostrar el missatge següent';
-$labels['nextmessages'] = 'Mostrar missatges següents';
-$labels['lastmessage'] = 'Mostrar l\'últim missatge';
-$labels['lastmessages'] = 'Mostrar els últims missatges';
-$labels['backtolist'] = 'Tornar a la llista de missatges';
-$labels['viewsource'] = 'Visualitza el codi font';
-$labels['markmessages'] = 'Marca missatges';
-$labels['markread'] = 'Com a llegits';
-$labels['markunread'] = 'Com a no llegits';
-$labels['select'] = 'Seleccionar';
-$labels['all'] = 'Tots';
-$labels['none'] = 'Cap';
-$labels['unread'] = 'No llegits';
-$labels['compact'] = 'Compacta';
-$labels['empty'] = 'Buida';
-$labels['purge'] = 'Purga';
-$labels['quota'] = 'Utilització de disc';
-$labels['unknown'] = 'desconegut';
-$labels['unlimited'] = 'il·limitat';
-$labels['quicksearch'] = 'Cerca ràpida';
-$labels['resetsearch'] = 'Neteja cerca';
-$labels['compose'] = 'Escriure un missatge';
-$labels['savemessage'] = 'Desa aquest esborrany';
-$labels['sendmessage'] = 'Enviar ara el missatge';
-$labels['addattachment'] = 'Afegir un fitxer';
-$labels['charset'] = 'Codificació de caràcters';
-$labels['editortype'] = 'Tipus d\'editor';
-$labels['returnreceipt'] = 'Confirmació de recepció';
-$labels['checkspelling'] = 'Comprova l\'ortografia';
-$labels['resumeediting'] = 'Continua l\'edició';
-$labels['revertto'] = 'Tornar a';
-$labels['attachments'] = 'Adjunts';
-$labels['upload'] = 'Afegir';
-$labels['close'] = 'Cancel·lar';
-$labels['low'] = 'Baixa';
-$labels['lowest'] = 'Molt baixa';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'Alta';
-$labels['highest'] = 'Molt alta';
-$labels['nosubject'] = '(sense assumpte)';
-$labels['showimages'] = 'Mostra imatges';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Text pla';
-$labels['addcc'] = 'Afegir Cc';
-$labels['addbcc'] = 'Afegir Bcc';
-$labels['addreplyto'] = 'Afegir Reply-To';
-$labels['mdnrequest'] = 'El remitent d\'aquest missatge ha demanat ser notificat quan llegeixis aquest missatge. Vols notificar al remitent?';
-$labels['receiptread'] = 'Confirmació de recepció';
-$labels['yourmessage'] = 'Aquesta és una confirmació de recepció per al teu missatge';
-$labels['receiptnote'] = 'Nota: Aquesta confirmació solament indica que el missatge ha estat mostrat en l\'ordinador del destinatari. No hi ha garantia que el destinatari hagi llegit o entès el contingut del missatge.';
-$labels['name'] = 'Nom a mostrar';
-$labels['firstname'] = 'Nom';
-$labels['surname'] = 'Cognom';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Afegir nou contacte';
-$labels['editcontact'] = 'Editar contacte';
-$labels['edit'] = 'Editar';
-$labels['cancel'] = 'Cancel·lar';
-$labels['save'] = 'Desar';
-$labels['delete'] = 'Suprimir';
-$labels['newcontact'] = 'Crear nou contacte';
-$labels['deletecontact'] = 'Suprimir contactes seleccionats';
-$labels['composeto'] = 'Redactar correu per a';
-$labels['contactsfromto'] = 'Contactes $from a $to de $count';
-$labels['print'] = 'Imprimeix';
-$labels['export'] = 'Exportar';
-$labels['previouspage'] = 'Mostrar anteriors';
-$labels['firstpage'] = 'Mostrar primers';
-$labels['nextpage'] = 'Mostrar següents';
-$labels['lastpage'] = 'Mostrar últims';
-$labels['groups'] = 'Grups';
-$labels['personaladrbook'] = 'Llibreta d\'adreces';
-$labels['settingsfor'] = 'Configuració per a';
-$labels['preferences'] = 'Preferències';
-$labels['userpreferences'] = 'Preferències d\'usuari';
-$labels['editpreferences'] = 'Editar preferències d\'usuari';
-$labels['identities'] = 'Identitats';
-$labels['manageidentities'] = 'Gestionar identitats per a aquest compte';
-$labels['newidentity'] = 'Nova identitat';
-$labels['newitem'] = 'Nou';
-$labels['edititem'] = 'Editar';
-$labels['setdefault'] = 'Seleccionar opció per defecte';
-$labels['language'] = 'Idioma';
-$labels['timezone'] = 'Zona horària';
-$labels['pagesize'] = 'Files per pàgina';
-$labels['signature'] = 'Signatura';
-$labels['dstactive'] = 'Horari d\'estiu';
-$labels['htmleditor'] = 'Escriure missatges HTML';
-$labels['htmlsignature'] = 'Signatura HTML';
-$labels['previewpane'] = 'Mostrar el panell de previsualització';
-$labels['autosavedraft'] = 'Desar esborrany automàticament';
-$labels['everynminutes'] = 'cada $n minuts';
-$labels['never'] = 'mai';
-$labels['folder'] = 'Carpeta';
-$labels['folders'] = 'Carpetes';
-$labels['foldername'] = 'Nom de carpeta';
-$labels['subscribed'] = 'Subscriure\'s';
-$labels['messagecount'] = 'Missatges';
-$labels['create'] = 'Crear';
-$labels['createfolder'] = 'Crear nova carpeta';
-$labels['rename'] = 'Canvia el nom';
-$labels['renamefolder'] = 'Canvia el nom de la carpeta';
-$labels['deletefolder'] = 'Suprimir carpeta';
-$labels['managefolders'] = 'Gestionar carpetes';
-$labels['sortby'] = 'Ordena per';
-$labels['sortasc'] = 'Ordena ascendentment';
-$labels['sortdesc'] = 'Ordena descendentment';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ca/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Miguel Canteras i Cañizares <miguel@canteras.org> |
- | Simo <sim6@graciasensefils.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Contrasenya incorrecta';
-$messages['cookiesdisabled'] = 'El seu navegador no accepta cookies';
-$messages['sessionerror'] = 'La seva sessió no existeix o ha expirat';
-$messages['imaperror'] = 'Error de conexió amb el servidor IMAP';
-$messages['nomessagesfound'] = 'No s\'han trobat missatges en aquesta bústia';
-$messages['loggedout'] = 'Ha tancat la sessió. Fins aviat!';
-$messages['mailboxempty'] = 'La bústia està buida';
-$messages['loading'] = 'Carregant...';
-$messages['loadingdata'] = 'Carregant dades...';
-$messages['checkingmail'] = 'Cercant nous missatges...';
-$messages['sendingmessage'] = 'Enviant missatge...';
-$messages['messagesent'] = 'Missatge enviat correctament';
-$messages['savingmessage'] = 'Desant missatge...';
-$messages['messagesaved'] = 'Missatge desat a Esborranys';
-$messages['successfullysaved'] = 'Desat correctament';
-$messages['addedsuccessfully'] = 'Contacte afegit correctament a la llibreta d\'adreces';
-$messages['contactexists'] = 'Ja hi ha un contacte amb aquesta adreça de correu';
-$messages['blockedimages'] = 'Per a protegir la seva privacitat, les imatges remotes han sigut bloquejades en aquest missatge';
-$messages['encryptedmessage'] = 'Aquest és un missatge xifrat i no pot ser mostrat. Ho sento!';
-$messages['nocontactsfound'] = 'No hi ha contactes';
-$messages['contactnotfound'] = 'No s\'ha trobat el contacte solicitat';
-$messages['sendingfailed'] = 'Error enviant missatge';
-$messages['errorsaving'] = 'Va ocórrer un error mentres es desava';
-$messages['errormoving'] = 'No s\'ha pogut moure el missatge';
-$messages['errordeleting'] = 'No s\'ha pogut eliminar el missatge';
-$messages['deletecontactconfirm'] = 'Realment vol suprimir el(s) contacte(s) selecionat(s)?';
-$messages['deletemessagesconfirm'] = 'Realment vol suprimir el(s) missatge(s) selecionat(s)?';
-$messages['deletefolderconfirm'] = 'Realment vol suprimir aquesta carpeta?';
-$messages['purgefolderconfirm'] = 'Realment vol suprimir tots els missatges d\'aquesta carpeta?';
-$messages['formincomplete'] = 'El formulari no ha sigut emplenat totalment';
-$messages['noemailwarning'] = 'Introdueixi una direcció email vàlida';
-$messages['nonamewarning'] = 'Introdueixi un nom';
-$messages['nopagesizewarning'] = 'Introdueixi un tamany de pàgina';
-$messages['norecipientwarning'] = 'Introdueixi al menys un destinatari';
-$messages['nosubjectwarning'] = 'El camp "Assumpte" eatà buit. Vol introduir un ara?';
-$messages['nobodywarning'] = 'Vol enviar aquest missatge sense text?';
-$messages['notsentwarning'] = 'El missatge no s\'ha enviat. Vol descartar el seu missatge?';
-$messages['noldapserver'] = 'Seleccioni un servidor ldap per a cercar';
-$messages['nocontactsreturned'] = 'No s\'han trobat contactes';
-$messages['nosearchname'] = 'Introdueixi un nom de contacte o una direcció email';
-$messages['searchsuccessful'] = '$nr missatges trobats';
-$messages['searchnomatch'] = 'No s\'ha trobat cap coincidència';
-$messages['searching'] = 'Cercant...';
-$messages['checking'] = 'Comprovant...';
-$messages['nospellerrors'] = 'No s\'han trobat errors d\'ortografia';
-$messages['folderdeleted'] = 'Carpeta eliminada correctament';
-$messages['deletedsuccessfully'] = 'Eliminat correctament';
-$messages['converting'] = 'Treient format del missatge...';
-$messages['messageopenerror'] = 'No s\'ha pogut carregar el missatge del servidor';
-$messages['fileuploaderror'] = 'Pujada de fitxer fallida';
-$messages['filesizeerror'] = 'El fitxer pujat excedeix la grandària màxima de $size';
-$messages['copysuccess'] = 'S\'ha copiat $nr adreces correctament';
-$messages['copyerror'] = 'No s\'ha pogut copiar cap adreça';
-$messages['sourceisreadonly'] = 'Aquesta adreça és només de lectura.';
-$messages['errorsavingcontact'] = 'No s\'ha pogut guardar l\'adreça de contacte';
-$messages['movingmessage'] = 'Movent el missatge...';
-$messages['receiptsent'] = 'Confirmació de lectura enviada satisfactòriament';
-$messages['errorsendingreceipt'] = 'No es pot enviar la confirmació';
-$messages['nodeletelastidentity'] = 'No pots eliminar aquesta identitat, és l\'última.';
-$messages['addsubfolderhint'] = 'Aquesta carpeta serà creada com a subcarpeta de la seleccionada actualment';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/ca_ES/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Miguel Canteras i Cañizares <miguel@canteras.org> |
+| Simo <sim6@graciasensefils.net> |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 1486 2008-06-07 11:47:46Z thomasb $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Benvingut a $product';
+$labels['username'] = 'Nom d\'usuari';
+$labels['password'] = 'Contrasenya';
+$labels['server'] = 'Servidor';
+$labels['login'] = 'Entrar';
+$labels['logout'] = 'Tancar sessió';
+$labels['mail'] = 'E-Mail';
+$labels['settings'] = 'Configuració';
+$labels['addressbook'] = 'Contactes';
+$labels['inbox'] = 'Entrada';
+$labels['drafts'] = 'Esborranys';
+$labels['sent'] = 'Enviats';
+$labels['trash'] = 'Paperera';
+$labels['junk'] = 'Correu brossa';
+$labels['subject'] = 'Assumpte';
+$labels['from'] = 'Remitent';
+$labels['to'] = 'Destinatari';
+$labels['cc'] = 'CC';
+$labels['bcc'] = 'BCC';
+$labels['replyto'] = 'Respondre a';
+$labels['date'] = 'Data';
+$labels['size'] = 'Grandària';
+$labels['priority'] = 'Prioritat';
+$labels['organization'] = 'Organització';
+$labels['reply-to'] = 'Respondre a';
+$labels['mailboxlist'] = 'Carpetes';
+$labels['messagesfromto'] = 'Missatges des de $from a $to de $count';
+$labels['messagenrof'] = 'Missatge $nr de $count';
+$labels['moveto'] = 'moure a...';
+$labels['download'] = 'descarregar';
+$labels['filename'] = 'Nom del fitxer';
+$labels['filesize'] = 'Grandaria de fitxer';
+$labels['preferhtml'] = 'Preferisc HTML';
+$labels['htmlmessage'] = 'Missatge HTML';
+$labels['prettydate'] = 'Dates curtes';
+$labels['addtoaddressbook'] = 'Afegir a contactes';
+$labels['sun'] = 'DM';
+$labels['mon'] = 'DL';
+$labels['tue'] = 'DM';
+$labels['wed'] = 'DC';
+$labels['thu'] = 'DJ';
+$labels['fri'] = 'DV';
+$labels['sat'] = 'DS';
+$labels['sunday'] = 'Diumenge';
+$labels['monday'] = 'Dilluns';
+$labels['tuesday'] = 'Dimarts';
+$labels['wednesday'] = 'Dimecres';
+$labels['thursday'] = 'Dijous';
+$labels['friday'] = 'Divendres';
+$labels['saturday'] = 'Dissabte';
+$labels['jan'] = 'gen';
+$labels['feb'] = 'feb';
+$labels['mar'] = 'mar';
+$labels['apr'] = 'abr';
+$labels['may'] = 'mai';
+$labels['jun'] = 'jun';
+$labels['jul'] = 'jul';
+$labels['aug'] = 'ago';
+$labels['sep'] = 'set';
+$labels['oct'] = 'oct';
+$labels['nov'] = 'nov';
+$labels['dec'] = 'des';
+$labels['longjan'] = 'gener';
+$labels['longfeb'] = 'febrer';
+$labels['longmar'] = 'març';
+$labels['longapr'] = 'abril';
+$labels['longmay'] = 'maig';
+$labels['longjun'] = 'juny';
+$labels['longjul'] = 'juliol';
+$labels['longaug'] = 'agost';
+$labels['longsep'] = 'setembre';
+$labels['longoct'] = 'octubre';
+$labels['longnov'] = 'novembre';
+$labels['longdec'] = 'desembre';
+$labels['today'] = 'Avui';
+$labels['checkmail'] = 'Recupera missatges nous';
+$labels['writenewmessage'] = 'Crear nou missatge';
+$labels['replytomessage'] = 'Respondre al missatge';
+$labels['replytoallmessage'] = 'Respondre al remitent i a tots els destinataris';
+$labels['forwardmessage'] = 'Reenviar missatge';
+$labels['deletemessage'] = 'Eliminar missatge';
+$labels['movemessagetotrash'] = 'Moure missatge a la paperera';
+$labels['printmessage'] = 'Imprimir aquest missatge';
+$labels['previousmessage'] = 'Mostrar el missatge anterior';
+$labels['previousmessages'] = 'Mostrar missatges anteriors';
+$labels['firstmessage'] = 'Mostrar el primer missatge';
+$labels['firstmessages'] = 'Mostrar els primers missatges';
+$labels['nextmessage'] = 'Mostrar el missatge següent';
+$labels['nextmessages'] = 'Mostrar missatges següents';
+$labels['lastmessage'] = 'Mostrar l\'últim missatge';
+$labels['lastmessages'] = 'Mostrar els últims missatges';
+$labels['backtolist'] = 'Tornar a la llista de missatges';
+$labels['viewsource'] = 'Visualitza el codi font';
+$labels['markmessages'] = 'Marca missatges';
+$labels['markread'] = 'Com a llegits';
+$labels['markunread'] = 'Com a no llegits';
+$labels['select'] = 'Seleccionar';
+$labels['all'] = 'Tots';
+$labels['none'] = 'Cap';
+$labels['unread'] = 'No llegits';
+$labels['compact'] = 'Compacta';
+$labels['empty'] = 'Buida';
+$labels['purge'] = 'Purga';
+$labels['quota'] = 'Utilització de disc';
+$labels['unknown'] = 'desconegut';
+$labels['unlimited'] = 'il·limitat';
+$labels['quicksearch'] = 'Cerca ràpida';
+$labels['resetsearch'] = 'Neteja cerca';
+$labels['compose'] = 'Escriure un missatge';
+$labels['savemessage'] = 'Desa aquest esborrany';
+$labels['sendmessage'] = 'Enviar ara el missatge';
+$labels['addattachment'] = 'Afegir un fitxer';
+$labels['charset'] = 'Codificació de caràcters';
+$labels['editortype'] = 'Tipus d\'editor';
+$labels['returnreceipt'] = 'Confirmació de recepció';
+$labels['checkspelling'] = 'Comprova l\'ortografia';
+$labels['resumeediting'] = 'Continua l\'edició';
+$labels['revertto'] = 'Tornar a';
+$labels['attachments'] = 'Adjunts';
+$labels['upload'] = 'Afegir';
+$labels['close'] = 'Cancel·lar';
+$labels['low'] = 'Baixa';
+$labels['lowest'] = 'Molt baixa';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Alta';
+$labels['highest'] = 'Molt alta';
+$labels['nosubject'] = '(sense assumpte)';
+$labels['showimages'] = 'Mostra imatges';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Text pla';
+$labels['addcc'] = 'Afegir Cc';
+$labels['addbcc'] = 'Afegir Bcc';
+$labels['addreplyto'] = 'Afegir Reply-To';
+$labels['mdnrequest'] = 'El remitent d\'aquest missatge ha demanat ser notificat quan llegeixis aquest missatge. Vols notificar al remitent?';
+$labels['receiptread'] = 'Confirmació de recepció';
+$labels['yourmessage'] = 'Aquesta és una confirmació de recepció per al teu missatge';
+$labels['receiptnote'] = 'Nota: Aquesta confirmació solament indica que el missatge ha estat mostrat en l\'ordinador del destinatari. No hi ha garantia que el destinatari hagi llegit o entès el contingut del missatge.';
+$labels['name'] = 'Nom a mostrar';
+$labels['firstname'] = 'Nom';
+$labels['surname'] = 'Cognom';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Afegir nou contacte';
+$labels['editcontact'] = 'Editar contacte';
+$labels['edit'] = 'Editar';
+$labels['cancel'] = 'Cancel·lar';
+$labels['save'] = 'Desar';
+$labels['delete'] = 'Suprimir';
+$labels['newcontact'] = 'Crear nou contacte';
+$labels['deletecontact'] = 'Suprimir contactes seleccionats';
+$labels['composeto'] = 'Redactar correu per a';
+$labels['contactsfromto'] = 'Contactes $from a $to de $count';
+$labels['print'] = 'Imprimeix';
+$labels['export'] = 'Exportar';
+$labels['previouspage'] = 'Mostrar anteriors';
+$labels['firstpage'] = 'Mostrar primers';
+$labels['nextpage'] = 'Mostrar següents';
+$labels['lastpage'] = 'Mostrar últims';
+$labels['groups'] = 'Grups';
+$labels['personaladrbook'] = 'Llibreta d\'adreces';
+$labels['settingsfor'] = 'Configuració per a';
+$labels['preferences'] = 'Preferències';
+$labels['userpreferences'] = 'Preferències d\'usuari';
+$labels['editpreferences'] = 'Editar preferències d\'usuari';
+$labels['identities'] = 'Identitats';
+$labels['manageidentities'] = 'Gestionar identitats per a aquest compte';
+$labels['newidentity'] = 'Nova identitat';
+$labels['newitem'] = 'Nou';
+$labels['edititem'] = 'Editar';
+$labels['setdefault'] = 'Seleccionar opció per defecte';
+$labels['language'] = 'Idioma';
+$labels['timezone'] = 'Zona horària';
+$labels['pagesize'] = 'Files per pàgina';
+$labels['signature'] = 'Signatura';
+$labels['dstactive'] = 'Horari d\'estiu';
+$labels['htmleditor'] = 'Escriure missatges HTML';
+$labels['htmlsignature'] = 'Signatura HTML';
+$labels['previewpane'] = 'Mostrar el panell de previsualització';
+$labels['logoutclear'] = 'Esborrar la paperera al tancar sessió';
+$labels['logoutcompact'] = 'Compactar la safata d\'entrada al tancar sessió';
+$labels['uisettings'] = 'Interfície d\'usuari';
+$labels['serversettings'] = 'Configuració del servidor';
+$labels['mailboxview'] = 'Vista de la bústia';
+$labels['mdnrequests'] = 'Notificacions de recepció';
+$labels['askuser'] = 'Pregunta-ho a l\'usuari';
+$labels['autosend'] = 'Envia-les automàticament';
+$labels['ignore'] = 'Ignora-les';
+$labels['readwhendeleted'] = 'Marca el missatge com a llegit quan s\'esborri';
+$labels['flagfordeletion'] = 'Afegeix marca d\'esborrat en comptes d\'esborrar-lo';
+$labels['autosavedraft'] = 'Desar esborrany automàticament';
+$labels['everynminutes'] = 'cada $n minuts';
+$labels['never'] = 'mai';
+$labels['folder'] = 'Carpeta';
+$labels['folders'] = 'Carpetes';
+$labels['foldername'] = 'Nom de carpeta';
+$labels['subscribed'] = 'Subscriure\'s';
+$labels['messagecount'] = 'Missatges';
+$labels['create'] = 'Crear';
+$labels['createfolder'] = 'Crear nova carpeta';
+$labels['rename'] = 'Canvia el nom';
+$labels['renamefolder'] = 'Canvia el nom de la carpeta';
+$labels['deletefolder'] = 'Suprimir carpeta';
+$labels['managefolders'] = 'Gestionar carpetes';
+$labels['sortby'] = 'Ordena per';
+$labels['sortasc'] = 'Ordena ascendentment';
+$labels['sortdesc'] = 'Ordena descendentment';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/ca_ES/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Miguel Canteras i Cañizares <miguel@canteras.org> |
+| Simo <sim6@graciasensefils.net> |
++-----------------------------------------------------------------------+
+
+@version $Id: messages.inc 1486 2008-06-07 11:47:46Z thomasb $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Contrasenya incorrecta';
+$messages['cookiesdisabled'] = 'El seu navegador no accepta cookies';
+$messages['sessionerror'] = 'La seva sessió no existeix o ha expirat';
+$messages['imaperror'] = 'Error de conexió amb el servidor IMAP';
+$messages['nomessagesfound'] = 'No s\'han trobat missatges en aquesta bústia';
+$messages['loggedout'] = 'Ha tancat la sessió. Fins aviat!';
+$messages['mailboxempty'] = 'La bústia està buida';
+$messages['loading'] = 'Carregant...';
+$messages['loadingdata'] = 'Carregant dades...';
+$messages['checkingmail'] = 'Cercant nous missatges...';
+$messages['sendingmessage'] = 'Enviant missatge...';
+$messages['messagesent'] = 'Missatge enviat correctament';
+$messages['savingmessage'] = 'Desant missatge...';
+$messages['messagesaved'] = 'Missatge desat a Esborranys';
+$messages['successfullysaved'] = 'Desat correctament';
+$messages['addedsuccessfully'] = 'Contacte afegit correctament a la llibreta d\'adreces';
+$messages['contactexists'] = 'Ja hi ha un contacte amb aquesta adreça de correu';
+$messages['blockedimages'] = 'Per a protegir la seva privacitat, les imatges remotes han sigut bloquejades en aquest missatge';
+$messages['encryptedmessage'] = 'Aquest és un missatge xifrat i no pot ser mostrat. Ho sento!';
+$messages['nocontactsfound'] = 'No hi ha contactes';
+$messages['contactnotfound'] = 'No s\'ha trobat el contacte solicitat';
+$messages['sendingfailed'] = 'Error enviant missatge';
+$messages['errorsaving'] = 'Va ocórrer un error mentres es desava';
+$messages['errormoving'] = 'No s\'ha pogut moure el missatge';
+$messages['errordeleting'] = 'No s\'ha pogut eliminar el missatge';
+$messages['deletecontactconfirm'] = 'Realment vol suprimir el(s) contacte(s) selecionat(s)?';
+$messages['deletemessagesconfirm'] = 'Realment vol suprimir el(s) missatge(s) selecionat(s)?';
+$messages['deletefolderconfirm'] = 'Realment vol suprimir aquesta carpeta?';
+$messages['purgefolderconfirm'] = 'Realment vol suprimir tots els missatges d\'aquesta carpeta?';
+$messages['formincomplete'] = 'El formulari no ha sigut emplenat totalment';
+$messages['noemailwarning'] = 'Introdueixi una direcció email vàlida';
+$messages['nonamewarning'] = 'Introdueixi un nom';
+$messages['nopagesizewarning'] = 'Introdueixi un tamany de pàgina';
+$messages['norecipientwarning'] = 'Introdueixi al menys un destinatari';
+$messages['nosubjectwarning'] = 'El camp "Assumpte" eatà buit. Vol introduir un ara?';
+$messages['nobodywarning'] = 'Vol enviar aquest missatge sense text?';
+$messages['notsentwarning'] = 'El missatge no s\'ha enviat. Vol descartar el seu missatge?';
+$messages['noldapserver'] = 'Seleccioni un servidor ldap per a cercar';
+$messages['nocontactsreturned'] = 'No s\'han trobat contactes';
+$messages['nosearchname'] = 'Introdueixi un nom de contacte o una direcció email';
+$messages['searchsuccessful'] = '$nr missatges trobats';
+$messages['searchnomatch'] = 'No s\'ha trobat cap coincidència';
+$messages['searching'] = 'Cercant...';
+$messages['checking'] = 'Comprovant...';
+$messages['nospellerrors'] = 'No s\'han trobat errors d\'ortografia';
+$messages['folderdeleted'] = 'Carpeta eliminada correctament';
+$messages['deletedsuccessfully'] = 'Eliminat correctament';
+$messages['converting'] = 'Treient format del missatge...';
+$messages['messageopenerror'] = 'No s\'ha pogut carregar el missatge del servidor';
+$messages['fileuploaderror'] = 'Pujada de fitxer fallida';
+$messages['filesizeerror'] = 'El fitxer pujat excedeix la grandària màxima de $size';
+$messages['copysuccess'] = 'S\'ha copiat $nr adreces correctament';
+$messages['copyerror'] = 'No s\'ha pogut copiar cap adreça';
+$messages['sourceisreadonly'] = 'Aquesta adreça és només de lectura.';
+$messages['errorsavingcontact'] = 'No s\'ha pogut guardar l\'adreça de contacte';
+$messages['movingmessage'] = 'Movent el missatge...';
+$messages['receiptsent'] = 'Confirmació de lectura enviada satisfactòriament';
+$messages['errorsendingreceipt'] = 'No es pot enviar la confirmació';
+$messages['nodeletelastidentity'] = 'No pots eliminar aquesta identitat, és l\'última.';
+$messages['addsubfolderhint'] = 'Aquesta carpeta serà creada com a subcarpeta de la seleccionada actualment';
+$messages['forbiddencharacter'] = 'El nom de carpeta conté un caràcter prohibit';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/cz/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Martin Mrajca <martin@moonlake.cz> |
+ | joe <joe@humlak.cz> |
+ | Jiri Kaderavek <jiri.kaderavek@webstep.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Vítejte v $product';
+$labels['username'] = 'Uživatel';
+$labels['password'] = 'Heslo';
+$labels['server'] = 'Server';
+$labels['login'] = 'Přihlásit';
+$labels['logout'] = 'Odhlásit';
+$labels['mail'] = 'E-mail';
+$labels['settings'] = 'Osobní nastavení';
+$labels['addressbook'] = 'Adresář';
+$labels['inbox'] = 'Příchozí pošta';
+$labels['drafts'] = 'Rozepsané';
+$labels['sent'] = 'Odeslané';
+$labels['trash'] = 'Koš';
+$labels['junk'] = 'Nevyžádaná pošta';
+$labels['subject'] = 'Předmět';
+$labels['from'] = 'Odesílatel';
+$labels['to'] = 'Adresát';
+$labels['cc'] = 'Kopie';
+$labels['bcc'] = 'Slepá';
+$labels['replyto'] = 'Odpověď na';
+$labels['date'] = 'Datum';
+$labels['size'] = 'Velikost';
+$labels['priority'] = 'Priorita';
+$labels['organization'] = 'Organizace';
+$labels['reply-to'] = 'Odpověď na';
+$labels['mailboxlist'] = 'Složky';
+$labels['messagesfromto'] = 'Zprávy $from až $to z celkem $count';
+$labels['messagenrof'] = 'Zpráva $nr z $count';
+$labels['moveto'] = 'přesunout do...';
+$labels['download'] = 'stáhnout';
+$labels['filename'] = 'Jméno přílohy';
+$labels['filesize'] = 'Velikost přílohy';
+$labels['preferhtml'] = 'Upřednostňovat HTML zobrazení';
+$labels['htmlmessage'] = 'HTML zpráva';
+$labels['prettydate'] = 'Hezčí datum';
+$labels['addtoaddressbook'] = 'Přidat do adresáře';
+$labels['sun'] = 'Ne';
+$labels['mon'] = 'Po';
+$labels['tue'] = 'Út';
+$labels['wed'] = 'St';
+$labels['thu'] = 'Čt';
+$labels['fri'] = 'Pá';
+$labels['sat'] = 'So';
+$labels['sunday'] = 'Neděle';
+$labels['monday'] = 'Pondělí';
+$labels['tuesday'] = 'Úterý';
+$labels['wednesday'] = 'Středa';
+$labels['thursday'] = 'Čtvrtek';
+$labels['friday'] = 'Pátek';
+$labels['saturday'] = 'Sobota';
+$labels['today'] = 'Dnes';
+$labels['checkmail'] = 'Zkontrolovat nové zprávy';
+$labels['writenewmessage'] = 'Vytvořit novou zprávu';
+$labels['replytomessage'] = 'Odpovědět odesílateli';
+$labels['replytoallmessage'] = 'Odpovědět všem';
+$labels['forwardmessage'] = 'Předat zprávu';
+$labels['deletemessage'] = 'Přesunout do koše';
+$labels['movemessagetotrash'] = 'Přesunout zprávu do koše';
+$labels['printmessage'] = 'Vytisknout zprávu';
+$labels['previousmessage'] = 'Zobrazit předchozí zprávu';
+$labels['previousmessages'] = 'Zobrazit předchozí zprávy';
+$labels['firstmessage'] = 'Zobrazit první zprávu';
+$labels['firstmessages'] = 'Zobrazit první zprávy';
+$labels['nextmessage'] = 'Zobrazit další zprávu';
+$labels['nextmessages'] = 'Zobrazit další zprávy';
+$labels['lastmessage'] = 'Zobrazit poslední zprávu';
+$labels['lastmessages'] = 'Zobrazit poslední zprávy';
+$labels['backtolist'] = 'Zpět do seznamu zpráv';
+$labels['viewsource'] = 'Zobrazit zdroj';
+$labels['markmessages'] = 'Označ zprávy';
+$labels['markread'] = 'Jako přečtené';
+$labels['markunread'] = 'Jako nepřečtené';
+$labels['select'] = 'Vybrat';
+$labels['all'] = 'Vše';
+$labels['none'] = 'Nic';
+$labels['unread'] = 'Nepřečtené';
+$labels['compact'] = 'Kompaktní';
+$labels['empty'] = 'Prázdný';
+$labels['purge'] = 'Vyprázdnit';
+$labels['quota'] = 'Využití schránky';
+$labels['unknown'] = 'neznámý';
+$labels['unlimited'] = 'neomezený';
+$labels['quicksearch'] = 'Rychlé vyhledávání';
+$labels['resetsearch'] = 'Zrušit vyhledávání';
+$labels['compose'] = 'Napsat zprávu';
+$labels['savemessage'] = 'Uložit do rozepsaných';
+$labels['sendmessage'] = 'Odeslat zprávu nyní';
+$labels['addattachment'] = 'Přidat přílohu';
+$labels['charset'] = 'Znaková sada';
+$labels['editortype'] = 'Typ editoru zpráv';
+$labels['returnreceipt'] = 'Doručenka';
+$labels['checkspelling'] = 'Zkontrolovat pravopis';
+$labels['resumeediting'] = 'Pokračovat v úpravách';
+$labels['revertto'] = 'Přejít na';
+$labels['attachments'] = 'Přílohy';
+$labels['upload'] = 'Nahrát';
+$labels['close'] = 'Zavřít';
+$labels['low'] = 'Nízká';
+$labels['lowest'] = 'Nejnižší';
+$labels['normal'] = 'Normální';
+$labels['high'] = 'Vysoká';
+$labels['highest'] = 'Nejvyšší';
+$labels['nosubject'] = '(bez predmetu)';
+$labels['showimages'] = 'Zobrazit obrázky';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Prostý text';
+$labels['addcc'] = 'Přidat pole "Kopie"';
+$labels['addbcc'] = 'Přidat pole "Skrytá Kopie"';
+$labels['addreplyto'] = 'Přidat pole "Odpověď"';
+$labels['mdnrequest'] = 'Odesílatel této zprávy si přeje být upozorněn na to, že jste zprávu obdrželi. Chcete přijetí zprávy potvrdit?';
+$labels['receiptread'] = 'Potvrzení o přijetí zprávy';
+$labels['yourmessage'] = 'Toto je potvrzení o přijetí Vaší zprávy';
+$labels['receiptnote'] = 'Poznámka: Toto potvrzení negarantuje, že zpráva byla příjemce přečtena a že porozuměl jejímu obsahu.';
+$labels['name'] = 'Zobrazit jméno';
+$labels['firstname'] = 'Jméno';
+$labels['surname'] = 'Příjmení';
+$labels['email'] = 'E-mail';
+$labels['addcontact'] = 'Přidat kontakt';
+$labels['editcontact'] = 'Upravit kontakt';
+$labels['edit'] = 'Upravit';
+$labels['cancel'] = 'Konec';
+$labels['save'] = 'Uložit';
+$labels['delete'] = 'Smazat';
+$labels['newcontact'] = 'Vytvořit nový kontakt';
+$labels['deletecontact'] = 'Smazat vybrané kontakty';
+$labels['composeto'] = 'Poslat e-mail';
+$labels['contactsfromto'] = 'Kontakty $from až $to z celkem $count';
+$labels['print'] = 'Tisk';
+$labels['export'] = 'Export';
+$labels['previouspage'] = 'Předchozí';
+$labels['firstpage'] = 'Zobrazit první zprávy';
+$labels['nextpage'] = 'Další';
+$labels['lastpage'] = 'Zobrazit poslední zprávy';
+$labels['groups'] = 'Skupiny';
+$labels['personaladrbook'] = 'Osobní kontakty';
+$labels['settingsfor'] = 'Nastavení pro';
+$labels['preferences'] = 'Vlastnosti';
+$labels['userpreferences'] = 'Vlastnosti uživatele';
+$labels['editpreferences'] = 'Upravit vlastnosti uživatele';
+$labels['identities'] = 'Profily';
+$labels['manageidentities'] = 'Spravovat profily u tohoto účtu';
+$labels['newidentity'] = 'Nový profil';
+$labels['newitem'] = 'Nová položka';
+$labels['edititem'] = 'Upravit položku';
+$labels['setdefault'] = 'Nastavit výchozí';
+$labels['language'] = 'Jazyk';
+$labels['timezone'] = 'Časová zóna';
+$labels['pagesize'] = 'Řádků na stránku';
+$labels['signature'] = 'Podpis';
+$labels['dstactive'] = 'Letní čas';
+$labels['htmleditor'] = 'Vytvářet HTML zprávy';
+$labels['htmlsignature'] = 'HTML podpis';
+$labels['previewpane'] = 'Zobrazit panel náhledu';
+$labels['autosavedraft'] = 'Automaticky uložit rozepsané zprávy';
+$labels['everynminutes'] = 'každých $n minut';
+$labels['never'] = 'nikdy';
+$labels['folder'] = 'Složka';
+$labels['folders'] = 'Složky';
+$labels['foldername'] = 'Jméno složky';
+$labels['subscribed'] = 'Vybráno';
+$labels['messagecount'] = 'Počet zpráv';
+$labels['create'] = 'Vytvořit';
+$labels['createfolder'] = 'Vytvořit novou složku';
+$labels['rename'] = 'Přejmenovat';
+$labels['renamefolder'] = 'Přejmenovat složku';
+$labels['deletefolder'] = 'Smazat složku';
+$labels['managefolders'] = 'Spravovat složky';
+$labels['sortby'] = 'Seřadit podle';
+$labels['sortasc'] = 'Seřadit vzestupně';
+$labels['sortdesc'] = 'Seřadit sestupně';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/cz/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Martin Mrajca <martin@moonlake.cz> |
+ | joe <joe@humlak.cz> |
+ | Jiri Kaderavek <jiri.kaderavek@webstep.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Přihlášení selhalo';
+$messages['cookiesdisabled'] = 'Váš prohlížeč nepodporuje cookies, které jsou pro přihlášení nezbytné';
+$messages['sessionerror'] = 'Vaše přihlášení je neplatné nebo vypršelo';
+$messages['imaperror'] = 'Připojení na IMAP server selhalo';
+$messages['nomessagesfound'] = 'Ve schránce nebyla nalezena žádná zpráva';
+$messages['loggedout'] = 'Byli jste úspěšně odhlášeni. Nashledanou!';
+$messages['mailboxempty'] = 'Schránka je prázdná';
+$messages['loading'] = 'Načítám...';
+$messages['loadingdata'] = 'Načítám data...';
+$messages['checkingmail'] = 'Kontroluji nové zprávy...';
+$messages['sendingmessage'] = 'Odesílám zprávu...';
+$messages['messagesent'] = 'Zpráva byla odeslána';
+$messages['savingmessage'] = 'Ukládám zprávu...';
+$messages['messagesaved'] = 'Zpráva uložena do Rozepsané';
+$messages['successfullysaved'] = 'Uloženo';
+$messages['addedsuccessfully'] = 'Kontakt byl úspěšně přidán do adresáře';
+$messages['contactexists'] = 'Kontakt se zadanou e-mailovou adresou již existuje';
+$messages['blockedimages'] = 'Z bezpečnostních důvodů byly zablokovány obrázky ve zprávě.';
+$messages['encryptedmessage'] = 'Tato zpráva je zašifrovaná a nelze ji zobrazit.';
+$messages['nocontactsfound'] = 'Nemáte žádné kontakty';
+$messages['contactnotfound'] = 'Požadovaný kontakt nebyl nalezen.';
+$messages['sendingfailed'] = 'Odesílání zprávy selhalo';
+$messages['errorsaving'] = 'Vyskytla se chyba při ukládání';
+$messages['errormoving'] = 'Nemohu přesunout zprávu';
+$messages['errordeleting'] = 'Nemohu smazat zprávu';
+$messages['deletecontactconfirm'] = 'Opravdu chcete smazat označené kontakty?';
+$messages['deletemessagesconfirm'] = 'Opravdu chcete smazat označené zprávy?';
+$messages['deletefolderconfirm'] = 'Chcete opravdu smazat tento adresář?';
+$messages['purgefolderconfirm'] = 'Opravdu chcete smazat všechny zprávy v této složce?';
+$messages['formincomplete'] = 'Formulář nebyl korektně vyplněn';
+$messages['noemailwarning'] = 'Zadejte, prosím, platnou adresu';
+$messages['nonamewarning'] = 'Zadejte, prosím, jméno';
+$messages['nopagesizewarning'] = 'Zadejte, prosím, velikost stránky';
+$messages['norecipientwarning'] = 'Zadejte, prosím, alespoň jednoho příjemce';
+$messages['nosubjectwarning'] = 'Předmět nebyl vyplňen. Přejete si jej zadat nyní?';
+$messages['nobodywarning'] = 'Opravdu chtete odeslat prázdnou zprávu?';
+$messages['notsentwarning'] = 'Zpráva nebyla odeslána. Přejete si zprávu zahodit?';
+$messages['noldapserver'] = 'Zvolte, prosím, LDAP server k hledání';
+$messages['nocontactsreturned'] = 'Nebyly nalezeny žádné kontakty';
+$messages['nosearchname'] = 'Zadejte, prosím, jméno nebo e-mail kontaktu';
+$messages['searchsuccessful'] = '$nr zpráv nalezeno';
+$messages['searchnomatch'] = 'Nenalezena žádná zpráva';
+$messages['searching'] = 'Vyhledávám...';
+$messages['checking'] = 'Kontroluji...';
+$messages['nospellerrors'] = 'Nebyly nalezeny žádné chyby';
+$messages['folderdeleted'] = 'Složka byla úspěšně vymazána';
+$messages['deletedsuccessfully'] = 'Úspěšně smazáno';
+$messages['converting'] = 'Odstranuji formátování ze zprávy...';
+$messages['messageopenerror'] = 'Nemohu načíst zprávu ze serveru';
+$messages['fileuploaderror'] = 'Nahrávání souboru selhalo';
+$messages['filesizeerror'] = 'Soubor přesáhl maximální velikost $size';
+$messages['copysuccess'] = 'Úspěšně zkopírováno $nr adres';
+$messages['copyerror'] = 'Nemohu zkopírovat žádnou adresu';
+$messages['sourceisreadonly'] = 'Tento zdroj adres je pouze pro čtení';
+$messages['errorsavingcontact'] = 'Nemohu uložit adresu kontaktu';
+$messages['movingmessage'] = 'Přesouvám zprávu...';
+$messages['receiptsent'] = 'Potvrzení o přřijetí zprávy odesláno';
+$messages['errorsendingreceipt'] = 'Potvrzení o přijetí zprávy nebylo možné odeslat';
+$messages['nodeletelastidentity'] = 'Alespoň jedna identita musí být ponechána. Identitu nelze odstranit.';
+$messages['addsubfolderhint'] = 'Tato složka bude vytvořena jako podsložka aktuálně zvolené složky';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/cz/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Martin Mrajca <martin@moonlake.cz> |
- | joe <joe@humlak.cz> |
- | Jiri Kaderavek <jiri.kaderavek@webstep.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Vítejte v $product';
-$labels['username'] = 'Uživatel';
-$labels['password'] = 'Heslo';
-$labels['server'] = 'Server';
-$labels['login'] = 'Přihlásit';
-$labels['logout'] = 'Odhlásit';
-$labels['mail'] = 'E-mail';
-$labels['settings'] = 'Osobní nastavení';
-$labels['addressbook'] = 'Adresář';
-$labels['inbox'] = 'Příchozí pošta';
-$labels['drafts'] = 'Rozepsané';
-$labels['sent'] = 'Odeslané';
-$labels['trash'] = 'Koš';
-$labels['junk'] = 'Nevyžádaná pošta';
-$labels['subject'] = 'Předmět';
-$labels['from'] = 'Odesílatel';
-$labels['to'] = 'Adresát';
-$labels['cc'] = 'Kopie';
-$labels['bcc'] = 'Slepá';
-$labels['replyto'] = 'Odpověď na';
-$labels['date'] = 'Datum';
-$labels['size'] = 'Velikost';
-$labels['priority'] = 'Priorita';
-$labels['organization'] = 'Organizace';
-$labels['reply-to'] = 'Odpověď na';
-$labels['mailboxlist'] = 'Složky';
-$labels['messagesfromto'] = 'Zprávy $from až $to z celkem $count';
-$labels['messagenrof'] = 'Zpráva $nr z $count';
-$labels['moveto'] = 'přesunout do...';
-$labels['download'] = 'stáhnout';
-$labels['filename'] = 'Jméno přílohy';
-$labels['filesize'] = 'Velikost přílohy';
-$labels['preferhtml'] = 'Upřednostňovat HTML zobrazení';
-$labels['htmlmessage'] = 'HTML zpráva';
-$labels['prettydate'] = 'Hezčí datum';
-$labels['addtoaddressbook'] = 'Přidat do adresáře';
-$labels['sun'] = 'Ne';
-$labels['mon'] = 'Po';
-$labels['tue'] = 'Út';
-$labels['wed'] = 'St';
-$labels['thu'] = 'Čt';
-$labels['fri'] = 'Pá';
-$labels['sat'] = 'So';
-$labels['sunday'] = 'Neděle';
-$labels['monday'] = 'Pondělí';
-$labels['tuesday'] = 'Úterý';
-$labels['wednesday'] = 'Středa';
-$labels['thursday'] = 'Čtvrtek';
-$labels['friday'] = 'Pátek';
-$labels['saturday'] = 'Sobota';
-$labels['today'] = 'Dnes';
-$labels['checkmail'] = 'Zkontrolovat nové zprávy';
-$labels['writenewmessage'] = 'Vytvořit novou zprávu';
-$labels['replytomessage'] = 'Odpovědět odesílateli';
-$labels['replytoallmessage'] = 'Odpovědět všem';
-$labels['forwardmessage'] = 'Předat zprávu';
-$labels['deletemessage'] = 'Přesunout do koše';
-$labels['movemessagetotrash'] = 'Přesunout zprávu do koše';
-$labels['printmessage'] = 'Vytisknout zprávu';
-$labels['previousmessage'] = 'Zobrazit předchozí zprávu';
-$labels['previousmessages'] = 'Zobrazit předchozí zprávy';
-$labels['firstmessage'] = 'Zobrazit první zprávu';
-$labels['firstmessages'] = 'Zobrazit první zprávy';
-$labels['nextmessage'] = 'Zobrazit další zprávu';
-$labels['nextmessages'] = 'Zobrazit další zprávy';
-$labels['lastmessage'] = 'Zobrazit poslední zprávu';
-$labels['lastmessages'] = 'Zobrazit poslední zprávy';
-$labels['backtolist'] = 'Zpět do seznamu zpráv';
-$labels['viewsource'] = 'Zobrazit zdroj';
-$labels['markmessages'] = 'Označ zprávy';
-$labels['markread'] = 'Jako přečtené';
-$labels['markunread'] = 'Jako nepřečtené';
-$labels['select'] = 'Vybrat';
-$labels['all'] = 'Vše';
-$labels['none'] = 'Nic';
-$labels['unread'] = 'Nepřečtené';
-$labels['compact'] = 'Kompaktní';
-$labels['empty'] = 'Prázdný';
-$labels['purge'] = 'Vyprázdnit';
-$labels['quota'] = 'Využití schránky';
-$labels['unknown'] = 'neznámý';
-$labels['unlimited'] = 'neomezený';
-$labels['quicksearch'] = 'Rychlé vyhledávání';
-$labels['resetsearch'] = 'Zrušit vyhledávání';
-$labels['compose'] = 'Napsat zprávu';
-$labels['savemessage'] = 'Uložit do rozepsaných';
-$labels['sendmessage'] = 'Odeslat zprávu nyní';
-$labels['addattachment'] = 'Přidat přílohu';
-$labels['charset'] = 'Znaková sada';
-$labels['editortype'] = 'Typ editoru zpráv';
-$labels['returnreceipt'] = 'Doručenka';
-$labels['checkspelling'] = 'Zkontrolovat pravopis';
-$labels['resumeediting'] = 'Pokračovat v úpravách';
-$labels['revertto'] = 'Přejít na';
-$labels['attachments'] = 'Přílohy';
-$labels['upload'] = 'Nahrát';
-$labels['close'] = 'Zavřít';
-$labels['low'] = 'Nízká';
-$labels['lowest'] = 'Nejnižší';
-$labels['normal'] = 'Normální';
-$labels['high'] = 'Vysoká';
-$labels['highest'] = 'Nejvyšší';
-$labels['nosubject'] = '(bez predmetu)';
-$labels['showimages'] = 'Zobrazit obrázky';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Prostý text';
-$labels['addcc'] = 'Přidat pole "Kopie"';
-$labels['addbcc'] = 'Přidat pole "Skrytá Kopie"';
-$labels['addreplyto'] = 'Přidat pole "Odpověď"';
-$labels['mdnrequest'] = 'Odesílatel této zprávy si přeje být upozorněn na to, že jste zprávu obdrželi. Chcete přijetí zprávy potvrdit?';
-$labels['receiptread'] = 'Potvrzení o přijetí zprávy';
-$labels['yourmessage'] = 'Toto je potvrzení o přijetí Vaší zprávy';
-$labels['receiptnote'] = 'Poznámka: Toto potvrzení negarantuje, že zpráva byla příjemce přečtena a že porozuměl jejímu obsahu.';
-$labels['name'] = 'Zobrazit jméno';
-$labels['firstname'] = 'Jméno';
-$labels['surname'] = 'Příjmení';
-$labels['email'] = 'E-mail';
-$labels['addcontact'] = 'Přidat kontakt';
-$labels['editcontact'] = 'Upravit kontakt';
-$labels['edit'] = 'Upravit';
-$labels['cancel'] = 'Konec';
-$labels['save'] = 'Uložit';
-$labels['delete'] = 'Smazat';
-$labels['newcontact'] = 'Vytvořit nový kontakt';
-$labels['deletecontact'] = 'Smazat vybrané kontakty';
-$labels['composeto'] = 'Poslat e-mail';
-$labels['contactsfromto'] = 'Kontakty $from až $to z celkem $count';
-$labels['print'] = 'Tisk';
-$labels['export'] = 'Export';
-$labels['previouspage'] = 'Předchozí';
-$labels['firstpage'] = 'Zobrazit první zprávy';
-$labels['nextpage'] = 'Další';
-$labels['lastpage'] = 'Zobrazit poslední zprávy';
-$labels['groups'] = 'Skupiny';
-$labels['personaladrbook'] = 'Osobní kontakty';
-$labels['settingsfor'] = 'Nastavení pro';
-$labels['preferences'] = 'Vlastnosti';
-$labels['userpreferences'] = 'Vlastnosti uživatele';
-$labels['editpreferences'] = 'Upravit vlastnosti uživatele';
-$labels['identities'] = 'Profily';
-$labels['manageidentities'] = 'Spravovat profily u tohoto účtu';
-$labels['newidentity'] = 'Nový profil';
-$labels['newitem'] = 'Nová položka';
-$labels['edititem'] = 'Upravit položku';
-$labels['setdefault'] = 'Nastavit výchozí';
-$labels['language'] = 'Jazyk';
-$labels['timezone'] = 'Časová zóna';
-$labels['pagesize'] = 'Řádků na stránku';
-$labels['signature'] = 'Podpis';
-$labels['dstactive'] = 'Letní čas';
-$labels['htmleditor'] = 'Vytvářet HTML zprávy';
-$labels['htmlsignature'] = 'HTML podpis';
-$labels['previewpane'] = 'Zobrazit panel náhledu';
-$labels['autosavedraft'] = 'Automaticky uložit rozepsané zprávy';
-$labels['everynminutes'] = 'každých $n minut';
-$labels['never'] = 'nikdy';
-$labels['folder'] = 'Složka';
-$labels['folders'] = 'Složky';
-$labels['foldername'] = 'Jméno složky';
-$labels['subscribed'] = 'Vybráno';
-$labels['messagecount'] = 'Počet zpráv';
-$labels['create'] = 'Vytvořit';
-$labels['createfolder'] = 'Vytvořit novou složku';
-$labels['rename'] = 'Přejmenovat';
-$labels['renamefolder'] = 'Přejmenovat složku';
-$labels['deletefolder'] = 'Smazat složku';
-$labels['managefolders'] = 'Spravovat složky';
-$labels['sortby'] = 'Seřadit podle';
-$labels['sortasc'] = 'Seřadit vzestupně';
-$labels['sortdesc'] = 'Seřadit sestupně';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/cz/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Martin Mrajca <martin@moonlake.cz> |
- | joe <joe@humlak.cz> |
- | Jiri Kaderavek <jiri.kaderavek@webstep.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Přihlášení selhalo';
-$messages['cookiesdisabled'] = 'Váš prohlížeč nepodporuje cookies, které jsou pro přihlášení nezbytné';
-$messages['sessionerror'] = 'Vaše přihlášení je neplatné nebo vypršelo';
-$messages['imaperror'] = 'Připojení na IMAP server selhalo';
-$messages['nomessagesfound'] = 'Ve schránce nebyla nalezena žádná zpráva';
-$messages['loggedout'] = 'Byli jste úspěšně odhlášeni. Nashledanou!';
-$messages['mailboxempty'] = 'Schránka je prázdná';
-$messages['loading'] = 'Načítám...';
-$messages['loadingdata'] = 'Načítám data...';
-$messages['checkingmail'] = 'Kontroluji nové zprávy...';
-$messages['sendingmessage'] = 'Odesílám zprávu...';
-$messages['messagesent'] = 'Zpráva byla odeslána';
-$messages['savingmessage'] = 'Ukládám zprávu...';
-$messages['messagesaved'] = 'Zpráva uložena do Rozepsané';
-$messages['successfullysaved'] = 'Uloženo';
-$messages['addedsuccessfully'] = 'Kontakt byl úspěšně přidán do adresáře';
-$messages['contactexists'] = 'Kontakt se zadanou e-mailovou adresou již existuje';
-$messages['blockedimages'] = 'Z bezpečnostních důvodů byly zablokovány obrázky ve zprávě.';
-$messages['encryptedmessage'] = 'Tato zpráva je zašifrovaná a nelze ji zobrazit.';
-$messages['nocontactsfound'] = 'Nemáte žádné kontakty';
-$messages['contactnotfound'] = 'Požadovaný kontakt nebyl nalezen.';
-$messages['sendingfailed'] = 'Odesílání zprávy selhalo';
-$messages['errorsaving'] = 'Vyskytla se chyba při ukládání';
-$messages['errormoving'] = 'Nemohu přesunout zprávu';
-$messages['errordeleting'] = 'Nemohu smazat zprávu';
-$messages['deletecontactconfirm'] = 'Opravdu chcete smazat označené kontakty?';
-$messages['deletemessagesconfirm'] = 'Opravdu chcete smazat označené zprávy?';
-$messages['deletefolderconfirm'] = 'Chcete opravdu smazat tento adresář?';
-$messages['purgefolderconfirm'] = 'Opravdu chcete smazat všechny zprávy v této složce?';
-$messages['formincomplete'] = 'Formulář nebyl korektně vyplněn';
-$messages['noemailwarning'] = 'Zadejte, prosím, platnou adresu';
-$messages['nonamewarning'] = 'Zadejte, prosím, jméno';
-$messages['nopagesizewarning'] = 'Zadejte, prosím, velikost stránky';
-$messages['norecipientwarning'] = 'Zadejte, prosím, alespoň jednoho příjemce';
-$messages['nosubjectwarning'] = 'Předmět nebyl vyplňen. Přejete si jej zadat nyní?';
-$messages['nobodywarning'] = 'Opravdu chtete odeslat prázdnou zprávu?';
-$messages['notsentwarning'] = 'Zpráva nebyla odeslána. Přejete si zprávu zahodit?';
-$messages['noldapserver'] = 'Zvolte, prosím, LDAP server k hledání';
-$messages['nocontactsreturned'] = 'Nebyly nalezeny žádné kontakty';
-$messages['nosearchname'] = 'Zadejte, prosím, jméno nebo e-mail kontaktu';
-$messages['searchsuccessful'] = '$nr zpráv nalezeno';
-$messages['searchnomatch'] = 'Nenalezena žádná zpráva';
-$messages['searching'] = 'Vyhledávám...';
-$messages['checking'] = 'Kontroluji...';
-$messages['nospellerrors'] = 'Nebyly nalezeny žádné chyby';
-$messages['folderdeleted'] = 'Složka byla úspěšně vymazána';
-$messages['deletedsuccessfully'] = 'Úspěšně smazáno';
-$messages['converting'] = 'Odstranuji formátování ze zprávy...';
-$messages['messageopenerror'] = 'Nemohu načíst zprávu ze serveru';
-$messages['fileuploaderror'] = 'Nahrávání souboru selhalo';
-$messages['filesizeerror'] = 'Soubor přesáhl maximální velikost $size';
-$messages['copysuccess'] = 'Úspěšně zkopírováno $nr adres';
-$messages['copyerror'] = 'Nemohu zkopírovat žádnou adresu';
-$messages['sourceisreadonly'] = 'Tento zdroj adres je pouze pro čtení';
-$messages['errorsavingcontact'] = 'Nemohu uložit adresu kontaktu';
-$messages['movingmessage'] = 'Přesouvám zprávu...';
-$messages['receiptsent'] = 'Potvrzení o přřijetí zprávy odesláno';
-$messages['errorsendingreceipt'] = 'Potvrzení o přijetí zprávy nebylo možné odeslat';
-$messages['nodeletelastidentity'] = 'Alespoň jedna identita musí být ponechána. Identitu nelze odstranit.';
-$messages['addsubfolderhint'] = 'Tato složka bude vytvořena jako podsložka aktuálně zvolené složky';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/da/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Martin Moeller <martin@liga.dk> |
- | Jesper R. Meyer <jrm@upthere.dk> |
- | Søren Aggeboe <soren@aggeboe.dk> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Velkommen til $product';
-$labels['username'] = 'Brugernavn';
-$labels['password'] = 'Adgangskode';
-$labels['server'] = 'Server';
-$labels['login'] = 'Log på';
-$labels['logout'] = 'Log af';
-$labels['mail'] = 'E-mail';
-$labels['settings'] = 'Personlige indstillinger';
-$labels['addressbook'] = 'Adressebog';
-$labels['inbox'] = 'Indbakke';
-$labels['drafts'] = 'Kladder';
-$labels['sent'] = 'Sendt post';
-$labels['trash'] = 'Skrald';
-$labels['junk'] = 'Ragelse';
-$labels['subject'] = 'Emne';
-$labels['from'] = 'Afsender';
-$labels['to'] = 'Modtager';
-$labels['cc'] = 'Kopi til';
-$labels['bcc'] = 'BCC';
-$labels['replyto'] = 'Svar til';
-$labels['date'] = 'Dato';
-$labels['size'] = 'Størrelse';
-$labels['priority'] = 'Prioritet';
-$labels['organization'] = 'Organisation';
-$labels['reply-to'] = 'Svar til';
-$labels['mailboxlist'] = 'Mapper';
-$labels['messagesfromto'] = 'Beskeder $from til $to af $count';
-$labels['messagenrof'] = 'Besked $nr af $count';
-$labels['moveto'] = 'flyt til...';
-$labels['download'] = 'download';
-$labels['filename'] = 'Filnavn';
-$labels['filesize'] = 'Filstørrelse';
-$labels['preferhtml'] = 'Foretræk HTML';
-$labels['htmlmessage'] = 'HTML-besked';
-$labels['prettydate'] = 'Pæn datovisning';
-$labels['addtoaddressbook'] = 'Tilføj til adressebogen';
-$labels['sun'] = 'Søn';
-$labels['mon'] = 'Man';
-$labels['tue'] = 'Tir';
-$labels['wed'] = 'Ons';
-$labels['thu'] = 'Tor';
-$labels['fri'] = 'Fre';
-$labels['sat'] = 'Lør';
-$labels['sunday'] = 'Søndag';
-$labels['monday'] = 'Mandag';
-$labels['tuesday'] = 'Tirsdag';
-$labels['wednesday'] = 'Onsdag';
-$labels['thursday'] = 'Torsdag';
-$labels['friday'] = 'Fredag';
-$labels['saturday'] = 'Lørdag';
-$labels['today'] = 'I dag';
-$labels['checkmail'] = 'Se efter nye beskeder';
-$labels['writenewmessage'] = 'Skriv en ny besked';
-$labels['replytomessage'] = 'Svar på denne besked';
-$labels['replytoallmessage'] = 'Svar til alle modtagere';
-$labels['forwardmessage'] = 'Videresend denne besked';
-$labels['deletemessage'] = 'Slet besked';
-$labels['movemessagetotrash'] = 'Flyt besked til skrald';
-$labels['printmessage'] = 'Udskriv denne besked';
-$labels['previousmessage'] = 'Vis forrige besked';
-$labels['previousmessages'] = 'Vis forrige sæt beskeder';
-$labels['firstmessage'] = 'Vis første besked';
-$labels['firstmessages'] = 'Vis første sæt beskeder';
-$labels['nextmessage'] = 'Vis næste besked';
-$labels['nextmessages'] = 'Vis næste sæt beskeder';
-$labels['lastmessage'] = 'Vis sidste besked';
-$labels['lastmessages'] = 'Vis sidste sæt beskeder';
-$labels['backtolist'] = 'Tilbage til beskedlisten';
-$labels['viewsource'] = 'Vis rå besked';
-$labels['markmessages'] = 'Markér beskeder';
-$labels['markread'] = 'Som læst';
-$labels['markunread'] = 'Som ulæst';
-$labels['select'] = 'Vælg';
-$labels['all'] = 'Alle';
-$labels['none'] = 'Ingen';
-$labels['unread'] = 'Ulæste';
-$labels['compact'] = 'Ryd op';
-$labels['empty'] = 'Tøm';
-$labels['purge'] = 'Udrens';
-$labels['quota'] = 'Disk forbrug';
-$labels['unknown'] = 'ukendt';
-$labels['unlimited'] = 'ubegrænset';
-$labels['quicksearch'] = 'Hurtigsøgning';
-$labels['resetsearch'] = 'Nulstil søgning';
-$labels['compose'] = 'Forfat en besked';
-$labels['savemessage'] = 'Gem denne kladde';
-$labels['sendmessage'] = 'Send beskeden nu';
-$labels['addattachment'] = 'Vedhæft en fil';
-$labels['charset'] = 'Tegnsæt';
-$labels['editortype'] = 'Tekstbehandler';
-$labels['returnreceipt'] = 'Anmod om kvittering';
-$labels['checkspelling'] = 'Stavekontrol';
-$labels['resumeediting'] = 'Genoptag redigering';
-$labels['revertto'] = 'Vend tilbage til';
-$labels['attachments'] = 'Vedhæftninger';
-$labels['upload'] = 'Upload';
-$labels['close'] = 'Luk';
-$labels['low'] = 'Lav';
-$labels['lowest'] = 'Lavest';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'Høj';
-$labels['highest'] = 'Højest';
-$labels['nosubject'] = '(intet emne)';
-$labels['showimages'] = 'Vis billeder';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Almindelig tekst';
-$labels['addcc'] = 'Tilføj Cc';
-$labels['addbcc'] = 'Tilføj Bcc';
-$labels['addreplyto'] = 'Tilføj Svar-Til adresse';
-$labels['mdnrequest'] = 'Afsenderen af denne besked har bedt om at modtage en bekræftelse når du læser beskeden. Vil du sende kvittering for læsning?';
-$labels['receiptread'] = 'Send kvittering for læsning';
-$labels['yourmessage'] = 'Dette er en kvittering for at din besked er blevet vist';
-$labels['receiptnote'] = 'Bemærk: Denne kvittering bekræfter udelukkende at beskeden blev vist på modtagerens computer. Der er ingen garanti for at modtageren har læst eller forstået beskedens indhold.';
-$labels['name'] = 'Vist navn';
-$labels['firstname'] = 'Fornavn';
-$labels['surname'] = 'Efternavn';
-$labels['email'] = 'E-mail';
-$labels['addcontact'] = 'Tilføj en ny kontakt';
-$labels['editcontact'] = 'Redigér kontakt';
-$labels['edit'] = 'Redigér';
-$labels['cancel'] = 'Afbryd';
-$labels['save'] = 'Gem';
-$labels['delete'] = 'Slet';
-$labels['newcontact'] = 'Opret nyt kontaktkort';
-$labels['deletecontact'] = 'Slet valgte kontakter';
-$labels['composeto'] = 'Skriv brev til';
-$labels['contactsfromto'] = 'Kontakter $from til $to af $count';
-$labels['print'] = 'Print';
-$labels['export'] = 'Eksport';
-$labels['previouspage'] = 'Vis forrige sæt';
-$labels['firstpage'] = 'Vis første sæt';
-$labels['nextpage'] = 'Vis næste sæt';
-$labels['lastpage'] = 'Vis sidste sæt';
-$labels['groups'] = 'Grupper';
-$labels['personaladrbook'] = 'Personlige Adresser';
-$labels['settingsfor'] = 'Indstillinger for';
-$labels['preferences'] = 'Præferencer';
-$labels['userpreferences'] = 'Brugerpræferencer';
-$labels['editpreferences'] = 'Redigér brugerpræferencer';
-$labels['identities'] = 'Identiteter';
-$labels['manageidentities'] = 'Styr identiteterne for denne konto';
-$labels['newidentity'] = 'Ny identitet';
-$labels['newitem'] = 'Nyt punkt';
-$labels['edititem'] = 'Redigér punkt';
-$labels['setdefault'] = 'Sæt standard';
-$labels['language'] = 'Sprog';
-$labels['timezone'] = 'Tidszone';
-$labels['pagesize'] = 'Rækker per side';
-$labels['signature'] = 'Signatur';
-$labels['dstactive'] = 'Sommertid';
-$labels['htmleditor'] = 'Skriv HTML-besked';
-$labels['htmlsignature'] = 'HTML-signatur';
-$labels['previewpane'] = 'Forhåndsvisning';
-$labels['autosavedraft'] = 'Gem kladde automatisk';
-$labels['everynminutes'] = 'hver $n. minut';
-$labels['never'] = 'aldrig';
-$labels['folder'] = 'Mappe';
-$labels['folders'] = 'Mapper';
-$labels['foldername'] = 'Mappenavn';
-$labels['subscribed'] = 'Abonneret';
-$labels['messagecount'] = 'Beskeder';
-$labels['create'] = 'Opret';
-$labels['createfolder'] = 'Opret ny mappe';
-$labels['rename'] = 'Omdøb';
-$labels['renamefolder'] = 'Omdøb mappe';
-$labels['deletefolder'] = 'Slet mappe';
-$labels['managefolders'] = 'Administrér mapper';
-$labels['sortby'] = 'Sortér efter';
-$labels['sortasc'] = 'Ældste først';
-$labels['sortdesc'] = 'Nyeste først';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/da/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author : Martin Moeller <martin@liga.dk> |
- | Jesper R. Meyer <jesper@upthere.dk> |
- | Søren Aggeboe <soren@aggeboe.dk> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Det lykkedes ikke at logge på';
-$messages['cookiesdisabled'] = 'Din browser accepterer ikke cookies';
-$messages['sessionerror'] = 'Din session er ugyldig eller udløbet';
-$messages['imaperror'] = 'Forbindelse til IMAP serveren fejlede';
-$messages['nomessagesfound'] = 'Der blev ikke fundet nogen beskeder i denne postkasse';
-$messages['loggedout'] = 'Du er nu logget af webmail. Farvel så længe!';
-$messages['mailboxempty'] = 'Postkassen er tom!';
-$messages['loading'] = 'Indlæser...';
-$messages['loadingdata'] = 'Indlæser data...';
-$messages['checkingmail'] = 'Tjekker for nye beskeder...';
-$messages['sendingmessage'] = 'Sender besked...';
-$messages['messagesent'] = 'Beskeden blev sendt korrekt';
-$messages['savingmessage'] = 'Gemmer besked...';
-$messages['messagesaved'] = 'Beskeden er gemt i kladdemappen';
-$messages['successfullysaved'] = 'Det lykkedes at gemme';
-$messages['addedsuccessfully'] = 'Kontakten blev tilføjet adressebogen';
-$messages['contactexists'] = 'Der er allerede en kontakt med denne e-mail adresse';
-$messages['blockedimages'] = 'For at beskytte dit privatliv er billeder fra internetservere blokeret i denne besked.';
-$messages['encryptedmessage'] = 'Beskeden er krypteret og kan ikke vises. Beklager!';
-$messages['nocontactsfound'] = 'Ingen kontakter blev fundet';
-$messages['contactnotfound'] = 'Den søgte kontakt blev ikke fundet';
-$messages['sendingfailed'] = 'Beskeden kunne ikke sendes';
-$messages['errorsaving'] = 'Der opstod en fejl ved lagring af data';
-$messages['errormoving'] = 'Beskeden kunne ikke flyttes';
-$messages['errordeleting'] = 'Beskeden kunne ikke slettes';
-$messages['deletecontactconfirm'] = 'Vil du virkelig slette den/de valgte kontakt(er)?';
-$messages['deletemessagesconfirm'] = 'Vil du virkelig slette den/de valgte besked(er)?';
-$messages['deletefolderconfirm'] = 'Vil du virkelig slette den valgte mappe';
-$messages['purgefolderconfirm'] = 'Vil du virkelig slette alle beskeder i denne mappe?';
-$messages['formincomplete'] = 'Formularen var ikke fuldstændig fyldt ud';
-$messages['noemailwarning'] = 'Indtast venligst en gyldig e-mail adresse';
-$messages['nonamewarning'] = 'Angiv venligst et navn';
-$messages['nopagesizewarning'] = 'Angiv sidestørrelsen';
-$messages['norecipientwarning'] = 'Indtast mindst én modtager';
-$messages['nosubjectwarning'] = '\'Emne\'-feltet er tomt. Kunne du tænke dig at skrive et nu?';
-$messages['nobodywarning'] = 'Send denne besked uden tekst?';
-$messages['notsentwarning'] = 'Beskeden er ikke blevet sendt. Vil du kassere din besked?';
-$messages['noldapserver'] = 'Vælg venligst hvilken LDAP-server der skal søges i';
-$messages['nocontactsreturned'] = 'Ingen kontakter blev fundet';
-$messages['nosearchname'] = 'Indtast venligst en kontakts navn eller e-mail adresse';
-$messages['searchsuccessful'] = 'Fandt $nr beskeder';
-$messages['searchnomatch'] = 'Søgningen fandt ingen beskeder';
-$messages['searching'] = 'Søger...';
-$messages['checking'] = 'Tjekker...';
-$messages['nospellerrors'] = 'Ingen stavefejl fundet';
-$messages['folderdeleted'] = 'Mappen er slettet';
-$messages['deletedsuccessfully'] = 'Slettet';
-$messages['converting'] = 'Fjerner formatering fra besked...';
-$messages['messageopenerror'] = 'Beskeden kunne ikke hentes fra serveren';
-$messages['fileuploaderror'] = 'Den indsatte fil fejlede';
-$messages['filesizeerror'] = 'Den indsatte fil fylder mere end det maksimale på $size';
-$messages['copysuccess'] = 'Det lykkedes at kopiere $nr adresser';
-$messages['copyerror'] = 'Kunne ikke kopiere adresserne';
-$messages['sourceisreadonly'] = 'Denne adressekilde er kun til læsning';
-$messages['errorsavingcontact'] = 'Kunne ikke gemme kontakt adressen';
-$messages['movingmessage'] = 'Flytter besked...';
-$messages['receiptsent'] = 'Kvittering for læsning er sendt';
-$messages['errorsendingreceipt'] = 'Kvitteringen kunne ikke sendes';
-$messages['nodeletelastidentity'] = 'Du kan ikke slette denne identitet, da det er den eneste der er tilbage.';
-$messages['addsubfolderhint'] = 'Denne mappe vil blive oprettet som en undermappe af den der er valgt i øjeblikket.';
-
-?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/da/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Martin Moeller <martin@liga.dk> |
+ | Jesper R. Meyer <jrm@upthere.dk> |
+ | Søren Aggeboe <soren@aggeboe.dk> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Velkommen til $product';
+$labels['username'] = 'Brugernavn';
+$labels['password'] = 'Adgangskode';
+$labels['server'] = 'Server';
+$labels['login'] = 'Log på';
+$labels['logout'] = 'Log af';
+$labels['mail'] = 'E-mail';
+$labels['settings'] = 'Personlige indstillinger';
+$labels['addressbook'] = 'Adressebog';
+$labels['inbox'] = 'Indbakke';
+$labels['drafts'] = 'Kladder';
+$labels['sent'] = 'Sendt post';
+$labels['trash'] = 'Skrald';
+$labels['junk'] = 'Ragelse';
+$labels['subject'] = 'Emne';
+$labels['from'] = 'Afsender';
+$labels['to'] = 'Modtager';
+$labels['cc'] = 'Kopi til';
+$labels['bcc'] = 'BCC';
+$labels['replyto'] = 'Svar til';
+$labels['date'] = 'Dato';
+$labels['size'] = 'Størrelse';
+$labels['priority'] = 'Prioritet';
+$labels['organization'] = 'Organisation';
+$labels['reply-to'] = 'Svar til';
+$labels['mailboxlist'] = 'Mapper';
+$labels['messagesfromto'] = 'Beskeder $from til $to af $count';
+$labels['messagenrof'] = 'Besked $nr af $count';
+$labels['moveto'] = 'flyt til...';
+$labels['download'] = 'download';
+$labels['filename'] = 'Filnavn';
+$labels['filesize'] = 'Filstørrelse';
+$labels['preferhtml'] = 'Foretræk HTML';
+$labels['htmlmessage'] = 'HTML-besked';
+$labels['prettydate'] = 'Pæn datovisning';
+$labels['addtoaddressbook'] = 'Tilføj til adressebogen';
+$labels['sun'] = 'Søn';
+$labels['mon'] = 'Man';
+$labels['tue'] = 'Tir';
+$labels['wed'] = 'Ons';
+$labels['thu'] = 'Tor';
+$labels['fri'] = 'Fre';
+$labels['sat'] = 'Lør';
+$labels['sunday'] = 'Søndag';
+$labels['monday'] = 'Mandag';
+$labels['tuesday'] = 'Tirsdag';
+$labels['wednesday'] = 'Onsdag';
+$labels['thursday'] = 'Torsdag';
+$labels['friday'] = 'Fredag';
+$labels['saturday'] = 'Lørdag';
+$labels['today'] = 'I dag';
+$labels['checkmail'] = 'Se efter nye beskeder';
+$labels['writenewmessage'] = 'Skriv en ny besked';
+$labels['replytomessage'] = 'Svar på denne besked';
+$labels['replytoallmessage'] = 'Svar til alle modtagere';
+$labels['forwardmessage'] = 'Videresend denne besked';
+$labels['deletemessage'] = 'Slet besked';
+$labels['movemessagetotrash'] = 'Flyt besked til skrald';
+$labels['printmessage'] = 'Udskriv denne besked';
+$labels['previousmessage'] = 'Vis forrige besked';
+$labels['previousmessages'] = 'Vis forrige sæt beskeder';
+$labels['firstmessage'] = 'Vis første besked';
+$labels['firstmessages'] = 'Vis første sæt beskeder';
+$labels['nextmessage'] = 'Vis næste besked';
+$labels['nextmessages'] = 'Vis næste sæt beskeder';
+$labels['lastmessage'] = 'Vis sidste besked';
+$labels['lastmessages'] = 'Vis sidste sæt beskeder';
+$labels['backtolist'] = 'Tilbage til beskedlisten';
+$labels['viewsource'] = 'Vis rå besked';
+$labels['markmessages'] = 'Markér beskeder';
+$labels['markread'] = 'Som læst';
+$labels['markunread'] = 'Som ulæst';
+$labels['select'] = 'Vælg';
+$labels['all'] = 'Alle';
+$labels['none'] = 'Ingen';
+$labels['unread'] = 'Ulæste';
+$labels['compact'] = 'Ryd op';
+$labels['empty'] = 'Tøm';
+$labels['purge'] = 'Udrens';
+$labels['quota'] = 'Disk forbrug';
+$labels['unknown'] = 'ukendt';
+$labels['unlimited'] = 'ubegrænset';
+$labels['quicksearch'] = 'Hurtigsøgning';
+$labels['resetsearch'] = 'Nulstil søgning';
+$labels['compose'] = 'Forfat en besked';
+$labels['savemessage'] = 'Gem denne kladde';
+$labels['sendmessage'] = 'Send beskeden nu';
+$labels['addattachment'] = 'Vedhæft en fil';
+$labels['charset'] = 'Tegnsæt';
+$labels['editortype'] = 'Tekstbehandler';
+$labels['returnreceipt'] = 'Anmod om kvittering';
+$labels['checkspelling'] = 'Stavekontrol';
+$labels['resumeediting'] = 'Genoptag redigering';
+$labels['revertto'] = 'Vend tilbage til';
+$labels['attachments'] = 'Vedhæftninger';
+$labels['upload'] = 'Upload';
+$labels['close'] = 'Luk';
+$labels['low'] = 'Lav';
+$labels['lowest'] = 'Lavest';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Høj';
+$labels['highest'] = 'Højest';
+$labels['nosubject'] = '(intet emne)';
+$labels['showimages'] = 'Vis billeder';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Almindelig tekst';
+$labels['addcc'] = 'Tilføj Cc';
+$labels['addbcc'] = 'Tilføj Bcc';
+$labels['addreplyto'] = 'Tilføj Svar-Til adresse';
+$labels['mdnrequest'] = 'Afsenderen af denne besked har bedt om at modtage en bekræftelse når du læser beskeden. Vil du sende kvittering for læsning?';
+$labels['receiptread'] = 'Send kvittering for læsning';
+$labels['yourmessage'] = 'Dette er en kvittering for at din besked er blevet vist';
+$labels['receiptnote'] = 'Bemærk: Denne kvittering bekræfter udelukkende at beskeden blev vist på modtagerens computer. Der er ingen garanti for at modtageren har læst eller forstået beskedens indhold.';
+$labels['name'] = 'Vist navn';
+$labels['firstname'] = 'Fornavn';
+$labels['surname'] = 'Efternavn';
+$labels['email'] = 'E-mail';
+$labels['addcontact'] = 'Tilføj en ny kontakt';
+$labels['editcontact'] = 'Redigér kontakt';
+$labels['edit'] = 'Redigér';
+$labels['cancel'] = 'Afbryd';
+$labels['save'] = 'Gem';
+$labels['delete'] = 'Slet';
+$labels['newcontact'] = 'Opret nyt kontaktkort';
+$labels['deletecontact'] = 'Slet valgte kontakter';
+$labels['composeto'] = 'Skriv brev til';
+$labels['contactsfromto'] = 'Kontakter $from til $to af $count';
+$labels['print'] = 'Print';
+$labels['export'] = 'Eksport';
+$labels['previouspage'] = 'Vis forrige sæt';
+$labels['firstpage'] = 'Vis første sæt';
+$labels['nextpage'] = 'Vis næste sæt';
+$labels['lastpage'] = 'Vis sidste sæt';
+$labels['groups'] = 'Grupper';
+$labels['personaladrbook'] = 'Personlige Adresser';
+$labels['settingsfor'] = 'Indstillinger for';
+$labels['preferences'] = 'Præferencer';
+$labels['userpreferences'] = 'Brugerpræferencer';
+$labels['editpreferences'] = 'Redigér brugerpræferencer';
+$labels['identities'] = 'Identiteter';
+$labels['manageidentities'] = 'Styr identiteterne for denne konto';
+$labels['newidentity'] = 'Ny identitet';
+$labels['newitem'] = 'Nyt punkt';
+$labels['edititem'] = 'Redigér punkt';
+$labels['setdefault'] = 'Sæt standard';
+$labels['language'] = 'Sprog';
+$labels['timezone'] = 'Tidszone';
+$labels['pagesize'] = 'Rækker per side';
+$labels['signature'] = 'Signatur';
+$labels['dstactive'] = 'Sommertid';
+$labels['htmleditor'] = 'Skriv HTML-besked';
+$labels['htmlsignature'] = 'HTML-signatur';
+$labels['previewpane'] = 'Forhåndsvisning';
+$labels['autosavedraft'] = 'Gem kladde automatisk';
+$labels['everynminutes'] = 'hver $n. minut';
+$labels['never'] = 'aldrig';
+$labels['folder'] = 'Mappe';
+$labels['folders'] = 'Mapper';
+$labels['foldername'] = 'Mappenavn';
+$labels['subscribed'] = 'Abonneret';
+$labels['messagecount'] = 'Beskeder';
+$labels['create'] = 'Opret';
+$labels['createfolder'] = 'Opret ny mappe';
+$labels['rename'] = 'Omdøb';
+$labels['renamefolder'] = 'Omdøb mappe';
+$labels['deletefolder'] = 'Slet mappe';
+$labels['managefolders'] = 'Administrér mapper';
+$labels['sortby'] = 'Sortér efter';
+$labels['sortasc'] = 'Ældste først';
+$labels['sortdesc'] = 'Nyeste først';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/da/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author : Martin Moeller <martin@liga.dk> |
+ | Jesper R. Meyer <jesper@upthere.dk> |
+ | Søren Aggeboe <soren@aggeboe.dk> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Det lykkedes ikke at logge på';
+$messages['cookiesdisabled'] = 'Din browser accepterer ikke cookies';
+$messages['sessionerror'] = 'Din session er ugyldig eller udløbet';
+$messages['imaperror'] = 'Forbindelse til IMAP serveren fejlede';
+$messages['nomessagesfound'] = 'Der blev ikke fundet nogen beskeder i denne postkasse';
+$messages['loggedout'] = 'Du er nu logget af webmail. Farvel så længe!';
+$messages['mailboxempty'] = 'Postkassen er tom!';
+$messages['loading'] = 'Indlæser...';
+$messages['loadingdata'] = 'Indlæser data...';
+$messages['checkingmail'] = 'Tjekker for nye beskeder...';
+$messages['sendingmessage'] = 'Sender besked...';
+$messages['messagesent'] = 'Beskeden blev sendt korrekt';
+$messages['savingmessage'] = 'Gemmer besked...';
+$messages['messagesaved'] = 'Beskeden er gemt i kladdemappen';
+$messages['successfullysaved'] = 'Det lykkedes at gemme';
+$messages['addedsuccessfully'] = 'Kontakten blev tilføjet adressebogen';
+$messages['contactexists'] = 'Der er allerede en kontakt med denne e-mail adresse';
+$messages['blockedimages'] = 'For at beskytte dit privatliv er billeder fra internetservere blokeret i denne besked.';
+$messages['encryptedmessage'] = 'Beskeden er krypteret og kan ikke vises. Beklager!';
+$messages['nocontactsfound'] = 'Ingen kontakter blev fundet';
+$messages['contactnotfound'] = 'Den søgte kontakt blev ikke fundet';
+$messages['sendingfailed'] = 'Beskeden kunne ikke sendes';
+$messages['errorsaving'] = 'Der opstod en fejl ved lagring af data';
+$messages['errormoving'] = 'Beskeden kunne ikke flyttes';
+$messages['errordeleting'] = 'Beskeden kunne ikke slettes';
+$messages['deletecontactconfirm'] = 'Vil du virkelig slette den/de valgte kontakt(er)?';
+$messages['deletemessagesconfirm'] = 'Vil du virkelig slette den/de valgte besked(er)?';
+$messages['deletefolderconfirm'] = 'Vil du virkelig slette den valgte mappe';
+$messages['purgefolderconfirm'] = 'Vil du virkelig slette alle beskeder i denne mappe?';
+$messages['formincomplete'] = 'Formularen var ikke fuldstændig fyldt ud';
+$messages['noemailwarning'] = 'Indtast venligst en gyldig e-mail adresse';
+$messages['nonamewarning'] = 'Angiv venligst et navn';
+$messages['nopagesizewarning'] = 'Angiv sidestørrelsen';
+$messages['norecipientwarning'] = 'Indtast mindst én modtager';
+$messages['nosubjectwarning'] = '\'Emne\'-feltet er tomt. Kunne du tænke dig at skrive et nu?';
+$messages['nobodywarning'] = 'Send denne besked uden tekst?';
+$messages['notsentwarning'] = 'Beskeden er ikke blevet sendt. Vil du kassere din besked?';
+$messages['noldapserver'] = 'Vælg venligst hvilken LDAP-server der skal søges i';
+$messages['nocontactsreturned'] = 'Ingen kontakter blev fundet';
+$messages['nosearchname'] = 'Indtast venligst en kontakts navn eller e-mail adresse';
+$messages['searchsuccessful'] = 'Fandt $nr beskeder';
+$messages['searchnomatch'] = 'Søgningen fandt ingen beskeder';
+$messages['searching'] = 'Søger...';
+$messages['checking'] = 'Tjekker...';
+$messages['nospellerrors'] = 'Ingen stavefejl fundet';
+$messages['folderdeleted'] = 'Mappen er slettet';
+$messages['deletedsuccessfully'] = 'Slettet';
+$messages['converting'] = 'Fjerner formatering fra besked...';
+$messages['messageopenerror'] = 'Beskeden kunne ikke hentes fra serveren';
+$messages['fileuploaderror'] = 'Den indsatte fil fejlede';
+$messages['filesizeerror'] = 'Den indsatte fil fylder mere end det maksimale på $size';
+$messages['copysuccess'] = 'Det lykkedes at kopiere $nr adresser';
+$messages['copyerror'] = 'Kunne ikke kopiere adresserne';
+$messages['sourceisreadonly'] = 'Denne adressekilde er kun til læsning';
+$messages['errorsavingcontact'] = 'Kunne ikke gemme kontakt adressen';
+$messages['movingmessage'] = 'Flytter besked...';
+$messages['receiptsent'] = 'Kvittering for læsning er sendt';
+$messages['errorsendingreceipt'] = 'Kvitteringen kunne ikke sendes';
+$messages['nodeletelastidentity'] = 'Du kan ikke slette denne identitet, da det er den eneste der er tilbage.';
+$messages['addsubfolderhint'] = 'Denne mappe vil blive oprettet som en undermappe af den der er valgt i øjeblikket.';
+
+?>
| Corrections: Alexander Stiebing <ja.stiebing[NOSPAM]@web.de> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1075 2008-02-13 23:43:04Z thomasb $
+ @version $Id: labels.inc 1446 2008-05-28 21:36:42Z thomasb $
*/
$labels['friday'] = 'Freitag';
$labels['saturday'] = 'Samstag';
+// months short
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mär';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'Mai';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Aug';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Okt';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dez';
+
+// months long
+$labels['longjan'] = 'Januar';
+$labels['longfeb'] = 'Februar';
+$labels['longmar'] = 'März';
+$labels['longapr'] = 'April';
+$labels['longmay'] = 'Mai';
+$labels['longjun'] = 'Juni';
+$labels['longjul'] = 'Juli';
+$labels['longaug'] = 'August';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Oktober';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'Dezember';
+
$labels['today'] = 'Heute';
// toolbar buttons // Symbolleisten-Tipps
$labels['checkmail'] = 'Überprüfung auf neue Anzeigen';
$labels['writenewmessage'] = 'Neue Nachricht schreiben';
$labels['replytomessage'] = 'Antwort verfassen';
-$labels['replytoallmessage'] = 'Antwort an Absender und alle Empfänger';
+$labels['replytoallmessage'] = 'Antwort an Absender und alle Empfänger verfassen';
$labels['forwardmessage'] = 'Nachricht weiterleiten';
$labels['deletemessage'] = 'Nachricht löschen';
$labels['movemessagetotrash'] = 'Nachricht in den Papierkorb verschieben';
$labels['htmlsignature'] = 'HTML-Signatur';
$labels['previewpane'] = 'Nachrichtenvorschau anzeigen';
+$labels['logoutclear'] = 'Papierkorb beim Abmelden leeren';
+$labels['logoutcompact'] = 'Posteingang beim Abmleden packen';
+$labels['uisettings'] = 'Benutzeroberfläche';
+$labels['serversettings'] = 'Server-Einstellungen';
+$labels['mailboxview'] = 'Mailbox-Ansicht';
+$labels['mdnrequests'] = 'Lesebestätigung senden';
+$labels['askuser'] = 'immer fragen';
+$labels['autosend'] = 'automatisch senden';
+$labels['ignore'] = 'ignorieren';
+$labels['readwhendeleted'] = 'Beim Löschen als gelesen markieren';
+$labels['flagfordeletion'] = 'Als gelöscht markieren wenn kein Papierkorb';
+
$labels['autosavedraft'] = 'Entwurf autom. speichern';
$labels['everynminutes'] = 'alle $n Minuten';
$labels['never'] = 'nie';
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1075 2008-02-13 23:43:04Z thomasb $
+ @version $Id: messages.inc 1456 2008-05-30 13:27:13Z thomasb $
*/
$messages['nodeletelastidentity'] = 'Sie können diesen Absender nicht löschen';
$messages['addsubfolderhint'] = 'Wird als Unterdornder des aktuell selektieren Ordners erstellt';
+$messages['forbiddencharacter'] = 'Der Ordnername enthält ein ungültiges Zeichen';
?>
\ No newline at end of file
| Author: Marcel Schlesinger <info@marcel-schlesinger.de> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1107 2008-02-17 18:32:46Z thomasb $
+ @version $Id: labels.inc 1446 2008-05-28 21:36:42Z thomasb $
*/
$labels['thursday'] = 'Donnerstag';
$labels['friday'] = 'Freitag';
$labels['saturday'] = 'Samstag';
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mär';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'Mai';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Aug';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Okt';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dez';
+$labels['longjan'] = 'Januar';
+$labels['longfeb'] = 'Februar';
+$labels['longmar'] = 'März';
+$labels['longapr'] = 'April';
+$labels['longmay'] = 'Mai';
+$labels['longjun'] = 'Juni';
+$labels['longjul'] = 'Juli';
+$labels['longaug'] = 'August';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Oktober';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'Dezember';
$labels['today'] = 'Heute';
$labels['checkmail'] = 'Auf neue Nachrichten überprüfen';
$labels['writenewmessage'] = 'Neue Nachricht schreiben';
$labels['replytomessage'] = 'Antwort verfassen';
-$labels['replytoallmessage'] = 'Antwort an Absender und alle Empfänger';
+$labels['replytoallmessage'] = 'Antwort an Absender und alle Empfänger verfassen';
$labels['forwardmessage'] = 'Nachricht weiterleiten';
$labels['deletemessage'] = 'Nachricht löschen';
$labels['movemessagetotrash'] = 'Nachricht in den Papierkorb verschieben';
$labels['htmleditor'] = 'HTML-Nachrichten erstellen';
$labels['htmlsignature'] = 'HTML-Signatur';
$labels['previewpane'] = 'Vorschaufenster anzeigen';
+$labels['logoutclear'] = 'Papierkorb beim Abmelden leeren';
+$labels['logoutcompact'] = 'Posteingang beim Abmleden packen';
+$labels['uisettings'] = 'Benutzeroberfläche';
+$labels['serversettings'] = 'Server-Einstellungen';
+$labels['mailboxview'] = 'Mailbox-Ansicht';
+$labels['mdnrequests'] = 'Lesebestätigung senden';
+$labels['askuser'] = 'immer fragen';
+$labels['autosend'] = 'automatisch senden';
+$labels['ignore'] = 'ignorieren';
+$labels['readwhendeleted'] = 'Beim Löschen als gelesen markieren';
+$labels['flagfordeletion'] = 'Als gelöscht markieren wenn kein Papierkorb';
$labels['autosavedraft'] = 'Entwurf automatisch speichern';
$labels['everynminutes'] = 'alle $n Minuten';
$labels['never'] = 'nie';
| Author: Marcel Schlesinger <info@marcel-schlesinger.de> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1107 2008-02-17 18:32:46Z thomasb $
+ @version $Id: messages.inc 1456 2008-05-30 13:27:13Z thomasb $
*/
$messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden';
$messages['nodeletelastidentity'] = 'Diese Identität kann nicht gelöscht werden, da dies die letzte ist.';
$messages['addsubfolderhint'] = 'Wird als Unterordner des aktuell selektieren Ordners erstellt';
+$messages['forbiddencharacter'] = 'Der Ordnername enthält ein ungültiges Zeichen';
?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/el/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Jim Deves <jim@cobaltblue.gr> |
- | John Economou <hsoc@irc.gr> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Καλώς ήρθατε στο $product';
-$labels['username'] = 'Όνομα Χρήστη';
-$labels['password'] = 'Κωδικός Πρόσβασης';
-$labels['server'] = 'Διακομιστής';
-$labels['login'] = 'Είσοδος';
-$labels['logout'] = 'Έξοδος';
-$labels['mail'] = 'E-Mail';
-$labels['settings'] = 'Προσωπικές Ρυθμίσεις';
-$labels['addressbook'] = 'Βιβλίο Διευθύνσεων';
-$labels['inbox'] = 'Εισερχόμενα';
-$labels['drafts'] = 'Πρόχειρα';
-$labels['sent'] = 'Απεσταλμένα';
-$labels['trash'] = 'Κάδος';
-$labels['junk'] = 'Junk';
-$labels['subject'] = 'Θέμα';
-$labels['from'] = 'Αποστολέας';
-$labels['to'] = 'Παραλήπτης';
-$labels['cc'] = 'Αντίγραφο';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Απάντηση σε';
-$labels['date'] = 'Ημ/νία';
-$labels['size'] = 'Μέγεθος';
-$labels['priority'] = 'Πρoτεραιότητα';
-$labels['organization'] = 'Οργανισμός';
-$labels['reply-to'] = 'Απάντηση σε';
-$labels['mailboxlist'] = 'Φάκελοι';
-$labels['messagesfromto'] = 'Μηνύματα $from από $to έως $count';
-$labels['messagenrof'] = 'Μήνυμα $nr από $count';
-$labels['moveto'] = 'μετακίνηση σε...';
-$labels['download'] = 'κατέβασμα';
-$labels['filename'] = 'Όνομα αρχείου';
-$labels['filesize'] = 'Μέγεθος αρχείου';
-$labels['preferhtml'] = 'Προτίμηση HTML';
-$labels['htmlmessage'] = 'Μήνυμα HTML';
-$labels['prettydate'] = 'Όμορφη ημ/νία';
-$labels['addtoaddressbook'] = 'Προσθήκη στο Βιβλίο Διευθύνσεων';
-$labels['sun'] = 'Κυρ';
-$labels['mon'] = 'Δευτ';
-$labels['tue'] = 'Τρι';
-$labels['wed'] = 'Τετ';
-$labels['thu'] = 'Πεμ';
-$labels['fri'] = 'Παρ';
-$labels['sat'] = 'Σαβ';
-$labels['sunday'] = 'Κυριακή';
-$labels['monday'] = 'Δευτέρα';
-$labels['tuesday'] = 'Τρίτη';
-$labels['wednesday'] = 'Τετάρτη';
-$labels['thursday'] = 'Πέμπτη';
-$labels['friday'] = 'Παρασκευή';
-$labels['saturday'] = 'Σάββατο';
-$labels['today'] = 'Σήμερα';
-$labels['checkmail'] = 'Έλεγχος για νέα μηνύματα';
-$labels['writenewmessage'] = 'Δημιουργία νέου μηνύματος';
-$labels['replytomessage'] = 'Απάντηση';
-$labels['replytoallmessage'] = 'Απάντηση στον αποστολέα και όλους τους παραλήπτες';
-$labels['forwardmessage'] = 'Προώθηση μηνύματος';
-$labels['deletemessage'] = 'Διαγραφή μηνύματος';
-$labels['movemessagetotrash'] = 'Μετακίνηση μηνύματος στον Κάδο';
-$labels['printmessage'] = 'Εκτύπωση';
-$labels['previousmessage'] = 'Εμφάνιση προηγούμενου μηνύματος';
-$labels['previousmessages'] = 'Εμφάνιση προηγούμενης ομάδας μηνυμάτων';
-$labels['firstmessage'] = 'Εμφάνιση πρώτου μυνήματος';
-$labels['firstmessages'] = 'Εμφάνιση πρώτης ομάδας μηνυμάτων';
-$labels['nextmessage'] = 'Εμφάνιση επόμενου μηνύματος';
-$labels['nextmessages'] = 'Εμφάνιση επόμενης ομάδας μηνυμάτων';
-$labels['lastmessage'] = 'Εμφάνιση τελευταίου μηνύματος';
-$labels['lastmessages'] = 'Εμφάνιση τελευταίας ομάδας μηνυμάτων';
-$labels['backtolist'] = 'Επιστροφή στη λίστα μηνυμάτων';
-$labels['viewsource'] = 'Προβολή πηγαίου κώδικα';
-$labels['markmessages'] = 'Σήμανση μηνυμάτων';
-$labels['markread'] = 'ως αναγνωσμένα';
-$labels['markunread'] = 'ως μη-αναγνωσμένα';
-$labels['select'] = 'Επιλογή';
-$labels['all'] = 'Όλα';
-$labels['none'] = 'Κανένα';
-$labels['unread'] = 'Μη αναγνωσμένα';
-$labels['compact'] = 'Συμπίεση';
-$labels['empty'] = '’δειασμα';
-$labels['purge'] = 'Καθάρισμα';
-$labels['quota'] = 'Χρήση δίσκου';
-$labels['unknown'] = 'άγνωστο';
-$labels['unlimited'] = 'απεριόριστο';
-$labels['quicksearch'] = 'Γρήγορη Εύρεση';
-$labels['resetsearch'] = 'Επαναφορά Εύρεσης';
-$labels['compose'] = 'Συγγραφή μηνύματος';
-$labels['savemessage'] = 'Αποθήκευση ως πρόχειρου';
-$labels['sendmessage'] = 'Αποστολή μηνύματος τώρα';
-$labels['addattachment'] = 'Επισύναψη αρχείου';
-$labels['charset'] = 'Charset';
-$labels['editortype'] = 'Είδος επεξεργαστή κειμένου';
-$labels['returnreceipt'] = 'Αναφορά Παράδοσης';
-$labels['checkspelling'] = 'Έλεγχος ορθογραφίας';
-$labels['resumeediting'] = 'Συνέχιση επεξεργασίας';
-$labels['revertto'] = 'Επαναφορά σε';
-$labels['attachments'] = 'Επισυνημένα';
-$labels['upload'] = 'Ανέβασμα';
-$labels['close'] = 'Κλείσιμο';
-$labels['low'] = 'Χαμηλή';
-$labels['lowest'] = 'Χαμηλότερη';
-$labels['normal'] = 'Κανονική';
-$labels['high'] = 'Υψηλή';
-$labels['highest'] = 'Υψηλότερη';
-$labels['nosubject'] = '(κανένα θέμα)';
-$labels['showimages'] = 'Εμφάνιση εικόνων';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Απλό κείμενο';
-$labels['addcc'] = 'Προσθήκη Cc';
-$labels['addbcc'] = 'Προσθήκη Bcc';
-$labels['addreplyto'] = 'Προσθήκη Απάντηση-Σε';
-$labels['mdnrequest'] = 'Ο αποστολέας του μηνύματος έχει ζητήσει να ενημερωθεί όταν διαβάσετε αυτό το μήνυμα. Επιθυμείτε να ενημερώστε τον αποστολέα;';
-$labels['receiptread'] = 'Αναφορά (ανάγνωσης)';
-$labels['yourmessage'] = 'Αυτό είναι μια Αναφορά για το μήνυμά σας';
-$labels['receiptnote'] = 'Σημείωση: Αυτή η αναφορά επιβεβαιώνει μόνο ότι το μήνυμα εμφανίστηκε μόνο στον υπολογιστή του παραλήπτη. Δεν επιβεβαιώνει ότι ο παραλήπτης έχει διαβάσει ή έχει κατανοήσει το περιεχόμενο του μηνύματος.';
-$labels['name'] = 'Εμφανιζόμενο όνομα';
-$labels['firstname'] = 'Όνομα';
-$labels['surname'] = 'Επώνυμο';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Προσθήκη επιλεγμένης επαφής στο Βιβλίο Διευθύνσεων';
-$labels['editcontact'] = 'Επεξεργασία επαφής';
-$labels['edit'] = 'Επεξεργασία';
-$labels['cancel'] = 'Ακύρωση';
-$labels['save'] = 'Αποθήκευση';
-$labels['delete'] = 'Διαγραφή';
-$labels['newcontact'] = 'Δημιουργία νέας καρτέλας επαφής';
-$labels['deletecontact'] = 'Διαγραφή επιλεγμένων επαφών';
-$labels['composeto'] = 'Σύνθεση μηνύματος προς';
-$labels['contactsfromto'] = 'Επαφή $from από $to έως $count';
-$labels['print'] = 'Εκτύπωση';
-$labels['export'] = 'Εξαγωγή';
-$labels['previouspage'] = 'Εμφάνιση προηγούμενης σελίδας';
-$labels['firstpage'] = 'Εμφάνιση πρώτης σελίδας';
-$labels['nextpage'] = 'Εμφάνιση επόμενης σελίδας';
-$labels['lastpage'] = 'Εμφάνιση τελευταίας σελίδας';
-$labels['groups'] = 'Ομάδες';
-$labels['personaladrbook'] = 'Προσωπικό Βιβλίο Διευθύνσεων';
-$labels['settingsfor'] = 'Ρυθμίσεις για';
-$labels['preferences'] = 'Προτιμήσεις';
-$labels['userpreferences'] = 'Προτιμήσεις χρήστη';
-$labels['editpreferences'] = 'Επεξεργασία προτιμήσεων χρήστη';
-$labels['identities'] = 'Ταυτότητες';
-$labels['manageidentities'] = 'Διαχείριση ταυτοτήτων για το λογαριασμό αυτό';
-$labels['newidentity'] = 'Νέα ταυτότητα';
-$labels['newitem'] = 'Νέο αντικείμενο';
-$labels['edititem'] = 'Επεξεργασία αντικειμένου';
-$labels['setdefault'] = 'Ορισμός ως προεπιλογή';
-$labels['language'] = 'Γλώσσα';
-$labels['timezone'] = 'Περιοχή ώρας';
-$labels['pagesize'] = 'Γραμμές ανά σελίδα';
-$labels['signature'] = 'Υπογραφή';
-$labels['dstactive'] = 'Daylight savings';
-$labels['htmleditor'] = 'Σύνθεση HTML μηνύματος';
-$labels['htmlsignature'] = 'Υπογραφή HTML';
-$labels['previewpane'] = 'Εμφάνιση προηγούμενου παραθύρου';
-$labels['autosavedraft'] = 'Αυτόματη προχείρου';
-$labels['everynminutes'] = 'κάθε $n λεπτά';
-$labels['never'] = 'ποτέ';
-$labels['folder'] = 'Φάκελος';
-$labels['folders'] = 'Φάκελοι';
-$labels['foldername'] = 'Όνομα φακέλου';
-$labels['subscribed'] = 'Εγγραφή';
-$labels['messagecount'] = 'Μηνύματα';
-$labels['create'] = 'Δημιουργία';
-$labels['createfolder'] = 'Δημιουργία νέου φακέλου';
-$labels['rename'] = 'Μετονομασία';
-$labels['renamefolder'] = 'Μετονομασία φακέλου';
-$labels['deletefolder'] = 'Διαγραφή φακέλου';
-$labels['managefolders'] = 'Διαχείριση φακέλων';
-$labels['sortby'] = 'Ταξινόμηση κατά';
-$labels['sortasc'] = 'Αύξουσα ταξινόμηση';
-$labels['sortdesc'] = 'Φθίνουσα ταξινόμηση';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/el/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Jim Deves <jim@cobaltblue.gr> |
- | John Economou <hsoc@irc.gr> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Είσοδος Απέτυχε';
-$messages['cookiesdisabled'] = 'Ο περιηγητής σας (browser) δεν αποδέχεται cookies';
-$messages['sessionerror'] = 'Η συνεδρία σας είναι άκυρη ή έχει λήξη';
-$messages['imaperror'] = 'Η σύνδεση με το διακομιστή IMAP απέτυχε';
-$messages['nomessagesfound'] = 'Δε βρέθηκαν μηνύματα σε αυτή τη θυρίδα';
-$messages['loggedout'] = 'Έχετε τερματίσει επιτυχώς τη συνεδρία. Αντίο!';
-$messages['mailboxempty'] = 'Η θυρίδα είναι άδεια';
-$messages['loading'] = 'Φόρτωση...';
-$messages['loadingdata'] = 'Φόρτωση δεδομένων...';
-$messages['checkingmail'] = 'Έλεγχος για νέα μηνύματα...';
-$messages['sendingmessage'] = 'Αποστολή μηνύματος...';
-$messages['messagesent'] = 'Μήνυμα εστάλη επιτυχώς';
-$messages['savingmessage'] = 'Αποθήκευση μηνύματος...';
-$messages['messagesaved'] = 'Μήνυμα αποθηκεύτηκε στα Πρόχειρα';
-$messages['successfullysaved'] = 'Αποθηκεύτηκε επιτυχώς';
-$messages['addedsuccessfully'] = 'Η επαφή προστέθηκε επιτυχώς στο Βιβλίο Διευθύνσεων';
-$messages['contactexists'] = 'Υπάρχει ήδη επαφή με αυτή τη διεύθυνση e-mail';
-$messages['blockedimages'] = 'Για να προστατευτεί το απόρρητο σας, οι απομακρυσμένες εικόνες έχουν απενεργοποιηθεί σε αυτό το μήνυμα.';
-$messages['encryptedmessage'] = 'Αυτό το μήνυμα είναι κρυπτογραφημένο και δε μπορεί να προβληθεί. Συγνώμη!';
-$messages['nocontactsfound'] = 'Δε βρέθηκαν επαφές';
-$messages['contactnotfound'] = 'Η ζητούμενη επαφή δεν βρέθηκε';
-$messages['sendingfailed'] = 'Αποστολή μηνύματος απέτυχε';
-$messages['errorsaving'] = 'Παρουσιάστηκε σφάλμα κατά την αποθήκευση';
-$messages['errormoving'] = 'Το μήνυμα δε μπορούσε να μετακινηθεί';
-$messages['errordeleting'] = 'Το μήνυμα δε μπορούσε να διαγραφεί';
-$messages['deletecontactconfirm'] = 'Θέλετε να διαγράψετε τη συγκεκριμένη επαφή/ές;';
-$messages['deletemessagesconfirm'] = 'Θέλετε να διαγράψετε το συγκεκριμένο μήνυμα/τα;';
-$messages['deletefolderconfirm'] = 'Θέλετε να διαγράψετε το συγκεκριμένο φάκελο;';
-$messages['purgefolderconfirm'] = 'Θέλετε να διαγράψετε όλα τα μηνύματα στο συγκεκριμένο φάκελο;';
-$messages['formincomplete'] = 'Η φόρμα δεν έχει συμπληρωθεί πλήρως';
-$messages['noemailwarning'] = 'Παρακαλώ εισάγεται έγκυρη διεύθυνση email';
-$messages['nonamewarning'] = 'Παρακαλώ εισάγεται όνομα';
-$messages['nopagesizewarning'] = 'Παρακαλώ εισάγεται μέγεθος σελίδας';
-$messages['norecipientwarning'] = 'Παρακαλώ εισάγεται τουλάχιστον έναν παραλήπτη';
-$messages['nosubjectwarning'] = 'Το πεδίο "Θέμα" είναι άδειο. Θέλετε να εισάγεται ένα τώρα;';
-$messages['nobodywarning'] = 'Αποστολή μηνύματος χωρίς κείμενο;';
-$messages['notsentwarning'] = 'Το μήνυμα δεν έχει σταλεί. Θέλετε να το απορρίψετε;';
-$messages['noldapserver'] = 'Παρακαλώ επιλέξτε έναν LDAP διακομιστή για αναζήτηση';
-$messages['nocontactsreturned'] = 'Δε βρέθηκαν επαφές';
-$messages['nosearchname'] = 'Παρακαλώ εισάγεται όνομα επαφής ή διεύθυνση email';
-$messages['searchsuccessful'] = '$nr μηνύματα βρέθηκαν';
-$messages['searchnomatch'] = 'Η Εύρεση δεν επέστρεψε αποτελέσματα';
-$messages['searching'] = 'Εύρεση...';
-$messages['checking'] = 'Έλεγχος...';
-$messages['nospellerrors'] = 'Δε βρέθηκαν ορθογραφικά λάθη';
-$messages['folderdeleted'] = 'Ο φάκελος διαγράφηκε επιτυχώς';
-$messages['deletedsuccessfully'] = 'Διαγραφή Επιτυχώς';
-$messages['converting'] = 'Μετακίνηση διαμορφώσεων κειμένου...';
-$messages['messageopenerror'] = 'Φόρτωση μηνυμάτων από τον διακομιστή απέτυχε';
-$messages['fileuploaderror'] = 'Ανέβασμα αρχείου απέτυχε';
-$messages['filesizeerror'] = 'Το ανεβασμένο αρχείο ξεπερνάει το μέγιστο μέγεθος των $size';
-$messages['copysuccess'] = 'Επιτυχή αντιγραφή $nr διευθύνσεων';
-$messages['copyerror'] = 'Αποτυχία αντιγραφής διευθύνσεων';
-$messages['sourceisreadonly'] = 'Η διεύθυνση έχει μόνο δικαίωμα ανάγνωσης';
-$messages['errorsavingcontact'] = 'Σώσιμο επαφής απέτυχε';
-$messages['movingmessage'] = 'Μετακίνηση μηνύματος...';
-$messages['receiptsent'] = 'Επιτυχής αποστολή αναφοράς ανάγνωσης';
-$messages['errorsendingreceipt'] = 'Αποστολή αναφοράς απέτυχε';
-$messages['nodeletelastidentity'] = 'Δε μπορείτε να διαγράψετε αυτήν την ταυτότητα, είναι η τελευταία.';
-$messages['addsubfolderhint'] = 'Αυτός ο φάκελος θα δημιουργηθεί ως υποφάκελος του επιλεγμένου';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/el/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Jim Deves <jim@cobaltblue.gr> |
+ | John Economou <hsoc@irc.gr> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Καλώς ήρθατε στο $product';
+$labels['username'] = 'Όνομα Χρήστη';
+$labels['password'] = 'Κωδικός Πρόσβασης';
+$labels['server'] = 'Διακομιστής';
+$labels['login'] = 'Είσοδος';
+$labels['logout'] = 'Έξοδος';
+$labels['mail'] = 'E-Mail';
+$labels['settings'] = 'Προσωπικές Ρυθμίσεις';
+$labels['addressbook'] = 'Βιβλίο Διευθύνσεων';
+$labels['inbox'] = 'Εισερχόμενα';
+$labels['drafts'] = 'Πρόχειρα';
+$labels['sent'] = 'Απεσταλμένα';
+$labels['trash'] = 'Κάδος';
+$labels['junk'] = 'Junk';
+$labels['subject'] = 'Θέμα';
+$labels['from'] = 'Αποστολέας';
+$labels['to'] = 'Παραλήπτης';
+$labels['cc'] = 'Αντίγραφο';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Απάντηση σε';
+$labels['date'] = 'Ημ/νία';
+$labels['size'] = 'Μέγεθος';
+$labels['priority'] = 'Πρoτεραιότητα';
+$labels['organization'] = 'Οργανισμός';
+$labels['reply-to'] = 'Απάντηση σε';
+$labels['mailboxlist'] = 'Φάκελοι';
+$labels['messagesfromto'] = 'Μηνύματα $from από $to έως $count';
+$labels['messagenrof'] = 'Μήνυμα $nr από $count';
+$labels['moveto'] = 'μετακίνηση σε...';
+$labels['download'] = 'κατέβασμα';
+$labels['filename'] = 'Όνομα αρχείου';
+$labels['filesize'] = 'Μέγεθος αρχείου';
+$labels['preferhtml'] = 'Προτίμηση HTML';
+$labels['htmlmessage'] = 'Μήνυμα HTML';
+$labels['prettydate'] = 'Όμορφη ημ/νία';
+$labels['addtoaddressbook'] = 'Προσθήκη στο Βιβλίο Διευθύνσεων';
+$labels['sun'] = 'Κυρ';
+$labels['mon'] = 'Δευτ';
+$labels['tue'] = 'Τρι';
+$labels['wed'] = 'Τετ';
+$labels['thu'] = 'Πεμ';
+$labels['fri'] = 'Παρ';
+$labels['sat'] = 'Σαβ';
+$labels['sunday'] = 'Κυριακή';
+$labels['monday'] = 'Δευτέρα';
+$labels['tuesday'] = 'Τρίτη';
+$labels['wednesday'] = 'Τετάρτη';
+$labels['thursday'] = 'Πέμπτη';
+$labels['friday'] = 'Παρασκευή';
+$labels['saturday'] = 'Σάββατο';
+$labels['today'] = 'Σήμερα';
+$labels['checkmail'] = 'Έλεγχος για νέα μηνύματα';
+$labels['writenewmessage'] = 'Δημιουργία νέου μηνύματος';
+$labels['replytomessage'] = 'Απάντηση';
+$labels['replytoallmessage'] = 'Απάντηση στον αποστολέα και όλους τους παραλήπτες';
+$labels['forwardmessage'] = 'Προώθηση μηνύματος';
+$labels['deletemessage'] = 'Διαγραφή μηνύματος';
+$labels['movemessagetotrash'] = 'Μετακίνηση μηνύματος στον Κάδο';
+$labels['printmessage'] = 'Εκτύπωση';
+$labels['previousmessage'] = 'Εμφάνιση προηγούμενου μηνύματος';
+$labels['previousmessages'] = 'Εμφάνιση προηγούμενης ομάδας μηνυμάτων';
+$labels['firstmessage'] = 'Εμφάνιση πρώτου μυνήματος';
+$labels['firstmessages'] = 'Εμφάνιση πρώτης ομάδας μηνυμάτων';
+$labels['nextmessage'] = 'Εμφάνιση επόμενου μηνύματος';
+$labels['nextmessages'] = 'Εμφάνιση επόμενης ομάδας μηνυμάτων';
+$labels['lastmessage'] = 'Εμφάνιση τελευταίου μηνύματος';
+$labels['lastmessages'] = 'Εμφάνιση τελευταίας ομάδας μηνυμάτων';
+$labels['backtolist'] = 'Επιστροφή στη λίστα μηνυμάτων';
+$labels['viewsource'] = 'Προβολή πηγαίου κώδικα';
+$labels['markmessages'] = 'Σήμανση μηνυμάτων';
+$labels['markread'] = 'ως αναγνωσμένα';
+$labels['markunread'] = 'ως μη-αναγνωσμένα';
+$labels['select'] = 'Επιλογή';
+$labels['all'] = 'Όλα';
+$labels['none'] = 'Κανένα';
+$labels['unread'] = 'Μη αναγνωσμένα';
+$labels['compact'] = 'Συμπίεση';
+$labels['empty'] = '’δειασμα';
+$labels['purge'] = 'Καθάρισμα';
+$labels['quota'] = 'Χρήση δίσκου';
+$labels['unknown'] = 'άγνωστο';
+$labels['unlimited'] = 'απεριόριστο';
+$labels['quicksearch'] = 'Γρήγορη Εύρεση';
+$labels['resetsearch'] = 'Επαναφορά Εύρεσης';
+$labels['compose'] = 'Συγγραφή μηνύματος';
+$labels['savemessage'] = 'Αποθήκευση ως πρόχειρου';
+$labels['sendmessage'] = 'Αποστολή μηνύματος τώρα';
+$labels['addattachment'] = 'Επισύναψη αρχείου';
+$labels['charset'] = 'Charset';
+$labels['editortype'] = 'Είδος επεξεργαστή κειμένου';
+$labels['returnreceipt'] = 'Αναφορά Παράδοσης';
+$labels['checkspelling'] = 'Έλεγχος ορθογραφίας';
+$labels['resumeediting'] = 'Συνέχιση επεξεργασίας';
+$labels['revertto'] = 'Επαναφορά σε';
+$labels['attachments'] = 'Επισυνημένα';
+$labels['upload'] = 'Ανέβασμα';
+$labels['close'] = 'Κλείσιμο';
+$labels['low'] = 'Χαμηλή';
+$labels['lowest'] = 'Χαμηλότερη';
+$labels['normal'] = 'Κανονική';
+$labels['high'] = 'Υψηλή';
+$labels['highest'] = 'Υψηλότερη';
+$labels['nosubject'] = '(κανένα θέμα)';
+$labels['showimages'] = 'Εμφάνιση εικόνων';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Απλό κείμενο';
+$labels['addcc'] = 'Προσθήκη Cc';
+$labels['addbcc'] = 'Προσθήκη Bcc';
+$labels['addreplyto'] = 'Προσθήκη Απάντηση-Σε';
+$labels['mdnrequest'] = 'Ο αποστολέας του μηνύματος έχει ζητήσει να ενημερωθεί όταν διαβάσετε αυτό το μήνυμα. Επιθυμείτε να ενημερώστε τον αποστολέα;';
+$labels['receiptread'] = 'Αναφορά (ανάγνωσης)';
+$labels['yourmessage'] = 'Αυτό είναι μια Αναφορά για το μήνυμά σας';
+$labels['receiptnote'] = 'Σημείωση: Αυτή η αναφορά επιβεβαιώνει μόνο ότι το μήνυμα εμφανίστηκε μόνο στον υπολογιστή του παραλήπτη. Δεν επιβεβαιώνει ότι ο παραλήπτης έχει διαβάσει ή έχει κατανοήσει το περιεχόμενο του μηνύματος.';
+$labels['name'] = 'Εμφανιζόμενο όνομα';
+$labels['firstname'] = 'Όνομα';
+$labels['surname'] = 'Επώνυμο';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Προσθήκη επιλεγμένης επαφής στο Βιβλίο Διευθύνσεων';
+$labels['editcontact'] = 'Επεξεργασία επαφής';
+$labels['edit'] = 'Επεξεργασία';
+$labels['cancel'] = 'Ακύρωση';
+$labels['save'] = 'Αποθήκευση';
+$labels['delete'] = 'Διαγραφή';
+$labels['newcontact'] = 'Δημιουργία νέας καρτέλας επαφής';
+$labels['deletecontact'] = 'Διαγραφή επιλεγμένων επαφών';
+$labels['composeto'] = 'Σύνθεση μηνύματος προς';
+$labels['contactsfromto'] = 'Επαφή $from από $to έως $count';
+$labels['print'] = 'Εκτύπωση';
+$labels['export'] = 'Εξαγωγή';
+$labels['previouspage'] = 'Εμφάνιση προηγούμενης σελίδας';
+$labels['firstpage'] = 'Εμφάνιση πρώτης σελίδας';
+$labels['nextpage'] = 'Εμφάνιση επόμενης σελίδας';
+$labels['lastpage'] = 'Εμφάνιση τελευταίας σελίδας';
+$labels['groups'] = 'Ομάδες';
+$labels['personaladrbook'] = 'Προσωπικό Βιβλίο Διευθύνσεων';
+$labels['settingsfor'] = 'Ρυθμίσεις για';
+$labels['preferences'] = 'Προτιμήσεις';
+$labels['userpreferences'] = 'Προτιμήσεις χρήστη';
+$labels['editpreferences'] = 'Επεξεργασία προτιμήσεων χρήστη';
+$labels['identities'] = 'Ταυτότητες';
+$labels['manageidentities'] = 'Διαχείριση ταυτοτήτων για το λογαριασμό αυτό';
+$labels['newidentity'] = 'Νέα ταυτότητα';
+$labels['newitem'] = 'Νέο αντικείμενο';
+$labels['edititem'] = 'Επεξεργασία αντικειμένου';
+$labels['setdefault'] = 'Ορισμός ως προεπιλογή';
+$labels['language'] = 'Γλώσσα';
+$labels['timezone'] = 'Περιοχή ώρας';
+$labels['pagesize'] = 'Γραμμές ανά σελίδα';
+$labels['signature'] = 'Υπογραφή';
+$labels['dstactive'] = 'Daylight savings';
+$labels['htmleditor'] = 'Σύνθεση HTML μηνύματος';
+$labels['htmlsignature'] = 'Υπογραφή HTML';
+$labels['previewpane'] = 'Εμφάνιση προηγούμενου παραθύρου';
+$labels['autosavedraft'] = 'Αυτόματη προχείρου';
+$labels['everynminutes'] = 'κάθε $n λεπτά';
+$labels['never'] = 'ποτέ';
+$labels['folder'] = 'Φάκελος';
+$labels['folders'] = 'Φάκελοι';
+$labels['foldername'] = 'Όνομα φακέλου';
+$labels['subscribed'] = 'Εγγραφή';
+$labels['messagecount'] = 'Μηνύματα';
+$labels['create'] = 'Δημιουργία';
+$labels['createfolder'] = 'Δημιουργία νέου φακέλου';
+$labels['rename'] = 'Μετονομασία';
+$labels['renamefolder'] = 'Μετονομασία φακέλου';
+$labels['deletefolder'] = 'Διαγραφή φακέλου';
+$labels['managefolders'] = 'Διαχείριση φακέλων';
+$labels['sortby'] = 'Ταξινόμηση κατά';
+$labels['sortasc'] = 'Αύξουσα ταξινόμηση';
+$labels['sortdesc'] = 'Φθίνουσα ταξινόμηση';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/el/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Jim Deves <jim@cobaltblue.gr> |
+ | John Economou <hsoc@irc.gr> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Είσοδος Απέτυχε';
+$messages['cookiesdisabled'] = 'Ο περιηγητής σας (browser) δεν αποδέχεται cookies';
+$messages['sessionerror'] = 'Η συνεδρία σας είναι άκυρη ή έχει λήξη';
+$messages['imaperror'] = 'Η σύνδεση με το διακομιστή IMAP απέτυχε';
+$messages['nomessagesfound'] = 'Δε βρέθηκαν μηνύματα σε αυτή τη θυρίδα';
+$messages['loggedout'] = 'Έχετε τερματίσει επιτυχώς τη συνεδρία. Αντίο!';
+$messages['mailboxempty'] = 'Η θυρίδα είναι άδεια';
+$messages['loading'] = 'Φόρτωση...';
+$messages['loadingdata'] = 'Φόρτωση δεδομένων...';
+$messages['checkingmail'] = 'Έλεγχος για νέα μηνύματα...';
+$messages['sendingmessage'] = 'Αποστολή μηνύματος...';
+$messages['messagesent'] = 'Μήνυμα εστάλη επιτυχώς';
+$messages['savingmessage'] = 'Αποθήκευση μηνύματος...';
+$messages['messagesaved'] = 'Μήνυμα αποθηκεύτηκε στα Πρόχειρα';
+$messages['successfullysaved'] = 'Αποθηκεύτηκε επιτυχώς';
+$messages['addedsuccessfully'] = 'Η επαφή προστέθηκε επιτυχώς στο Βιβλίο Διευθύνσεων';
+$messages['contactexists'] = 'Υπάρχει ήδη επαφή με αυτή τη διεύθυνση e-mail';
+$messages['blockedimages'] = 'Για να προστατευτεί το απόρρητο σας, οι απομακρυσμένες εικόνες έχουν απενεργοποιηθεί σε αυτό το μήνυμα.';
+$messages['encryptedmessage'] = 'Αυτό το μήνυμα είναι κρυπτογραφημένο και δε μπορεί να προβληθεί. Συγνώμη!';
+$messages['nocontactsfound'] = 'Δε βρέθηκαν επαφές';
+$messages['contactnotfound'] = 'Η ζητούμενη επαφή δεν βρέθηκε';
+$messages['sendingfailed'] = 'Αποστολή μηνύματος απέτυχε';
+$messages['errorsaving'] = 'Παρουσιάστηκε σφάλμα κατά την αποθήκευση';
+$messages['errormoving'] = 'Το μήνυμα δε μπορούσε να μετακινηθεί';
+$messages['errordeleting'] = 'Το μήνυμα δε μπορούσε να διαγραφεί';
+$messages['deletecontactconfirm'] = 'Θέλετε να διαγράψετε τη συγκεκριμένη επαφή/ές;';
+$messages['deletemessagesconfirm'] = 'Θέλετε να διαγράψετε το συγκεκριμένο μήνυμα/τα;';
+$messages['deletefolderconfirm'] = 'Θέλετε να διαγράψετε το συγκεκριμένο φάκελο;';
+$messages['purgefolderconfirm'] = 'Θέλετε να διαγράψετε όλα τα μηνύματα στο συγκεκριμένο φάκελο;';
+$messages['formincomplete'] = 'Η φόρμα δεν έχει συμπληρωθεί πλήρως';
+$messages['noemailwarning'] = 'Παρακαλώ εισάγεται έγκυρη διεύθυνση email';
+$messages['nonamewarning'] = 'Παρακαλώ εισάγεται όνομα';
+$messages['nopagesizewarning'] = 'Παρακαλώ εισάγεται μέγεθος σελίδας';
+$messages['norecipientwarning'] = 'Παρακαλώ εισάγεται τουλάχιστον έναν παραλήπτη';
+$messages['nosubjectwarning'] = 'Το πεδίο "Θέμα" είναι άδειο. Θέλετε να εισάγεται ένα τώρα;';
+$messages['nobodywarning'] = 'Αποστολή μηνύματος χωρίς κείμενο;';
+$messages['notsentwarning'] = 'Το μήνυμα δεν έχει σταλεί. Θέλετε να το απορρίψετε;';
+$messages['noldapserver'] = 'Παρακαλώ επιλέξτε έναν LDAP διακομιστή για αναζήτηση';
+$messages['nocontactsreturned'] = 'Δε βρέθηκαν επαφές';
+$messages['nosearchname'] = 'Παρακαλώ εισάγεται όνομα επαφής ή διεύθυνση email';
+$messages['searchsuccessful'] = '$nr μηνύματα βρέθηκαν';
+$messages['searchnomatch'] = 'Η Εύρεση δεν επέστρεψε αποτελέσματα';
+$messages['searching'] = 'Εύρεση...';
+$messages['checking'] = 'Έλεγχος...';
+$messages['nospellerrors'] = 'Δε βρέθηκαν ορθογραφικά λάθη';
+$messages['folderdeleted'] = 'Ο φάκελος διαγράφηκε επιτυχώς';
+$messages['deletedsuccessfully'] = 'Διαγραφή Επιτυχώς';
+$messages['converting'] = 'Μετακίνηση διαμορφώσεων κειμένου...';
+$messages['messageopenerror'] = 'Φόρτωση μηνυμάτων από τον διακομιστή απέτυχε';
+$messages['fileuploaderror'] = 'Ανέβασμα αρχείου απέτυχε';
+$messages['filesizeerror'] = 'Το ανεβασμένο αρχείο ξεπερνάει το μέγιστο μέγεθος των $size';
+$messages['copysuccess'] = 'Επιτυχή αντιγραφή $nr διευθύνσεων';
+$messages['copyerror'] = 'Αποτυχία αντιγραφής διευθύνσεων';
+$messages['sourceisreadonly'] = 'Η διεύθυνση έχει μόνο δικαίωμα ανάγνωσης';
+$messages['errorsavingcontact'] = 'Σώσιμο επαφής απέτυχε';
+$messages['movingmessage'] = 'Μετακίνηση μηνύματος...';
+$messages['receiptsent'] = 'Επιτυχής αποστολή αναφοράς ανάγνωσης';
+$messages['errorsendingreceipt'] = 'Αποστολή αναφοράς απέτυχε';
+$messages['nodeletelastidentity'] = 'Δε μπορείτε να διαγράψετε αυτήν την ταυτότητα, είναι η τελευταία.';
+$messages['addsubfolderhint'] = 'Αυτός ο φάκελος θα δημιουργηθεί ως υποφάκελος του επιλεγμένου';
+
+?>
\ No newline at end of file
| Author: Weiran Zhang (weiran@weiran.co.uk) |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $
+ @version $Id: labels.inc 1373 2008-05-10 14:48:18Z alec $
*/
$labels['thursday'] = 'Thursday';
$labels['friday'] = 'Friday';
$labels['saturday'] = 'Saturday';
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'May';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Aug';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Oct';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dec';
+$labels['longjan'] = 'January';
+$labels['longfeb'] = 'February';
+$labels['longmar'] = 'March';
+$labels['longapr'] = 'April';
+$labels['longmay'] = 'May';
+$labels['longjun'] = 'June';
+$labels['longjul'] = 'July';
+$labels['longaug'] = 'August';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'October';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'December';
$labels['today'] = 'Today';
$labels['checkmail'] = 'Check for new messages';
$labels['writenewmessage'] = 'Create a new message';
-$labels['replytomessage'] = 'Reply to the message';
+$labels['replytomessage'] = 'Reply to sender';
$labels['replytoallmessage'] = 'Reply to sender and all recipients';
$labels['forwardmessage'] = 'Forward the message';
$labels['deletemessage'] = 'Delete message';
$labels['htmleditor'] = 'Compose HTML messages';
$labels['htmlsignature'] = 'HTML signature';
$labels['previewpane'] = 'Show preview pane';
+$labels['logoutclear'] = 'Clear Trash on logout';
+$labels['logoutcompact'] = 'Compact Inbox on logout';
+$labels['uisettings'] = 'User Interface';
+$labels['serversettings'] = 'Server Settings';
$labels['autosavedraft'] = 'Automatically save draft';
$labels['everynminutes'] = 'every $n minutes';
$labels['never'] = 'never';
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $
+ @version $Id: labels.inc 1403 2008-05-19 08:09:38Z alec $
*/
$labels['friday'] = 'Friday';
$labels['saturday'] = 'Saturday';
+// months short
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'May';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Aug';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Oct';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dec';
+
+// months long
+$labels['longjan'] = 'January';
+$labels['longfeb'] = 'February';
+$labels['longmar'] = 'March';
+$labels['longapr'] = 'April';
+$labels['longmay'] = 'May';
+$labels['longjun'] = 'June';
+$labels['longjul'] = 'July';
+$labels['longaug'] = 'August';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'October';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'December';
+
$labels['today'] = 'Today';
// toolbar buttons
$labels['checkmail'] = 'Check for new messages';
$labels['writenewmessage'] = 'Create a new message';
-$labels['replytomessage'] = 'Reply to the message';
+$labels['replytomessage'] = 'Reply to sender';
$labels['replytoallmessage'] = 'Reply to sender and all recipients';
$labels['forwardmessage'] = 'Forward the message';
$labels['deletemessage'] = 'Delete message';
$labels['htmleditor'] = 'Compose HTML messages';
$labels['htmlsignature'] = 'HTML signature';
$labels['previewpane'] = 'Show preview pane';
+$labels['logoutclear'] = 'Clear Trash on logout';
+$labels['logoutcompact'] = 'Compact Inbox on logout';
+$labels['uisettings'] = 'User Interface';
+$labels['serversettings'] = 'Server Settings';
+$labels['mailboxview'] = 'Mailbox View';
+$labels['mdnrequests'] = 'Sender notifications';
+$labels['askuser'] = 'ask the user';
+$labels['autosend'] = 'send automatically';
+$labels['ignore'] = 'ignore';
+$labels['readwhendeleted'] = 'Mark the message as read on delete';
+$labels['flagfordeletion'] = 'Flag the message for deletion instead of delete';
$labels['autosavedraft'] = 'Automatically save draft';
$labels['everynminutes'] = 'every $n minutes';
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1052 2008-02-12 18:41:53Z thomasb $
+ @version $Id: messages.inc 1456 2008-05-30 13:27:13Z thomasb $
*/
$messages['errorsendingreceipt'] = 'Could not send the receipt';
$messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.';
$messages['addsubfolderhint'] = 'This folder will be created as subfolder of the currently selected one';
+$messages['forbiddencharacter'] = 'Folder name contains a forbidden character';
?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/es/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Javier Smaldone <javier@smaldone.com.ar> |
- | http://www.smaldone.com.ar |
- | David Grajal Blanco <dgrabla@gmail.com> |
- | http://david.grajal.net |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1079 2008-02-14 07:47:11Z tomekp $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Bienvenido a $product';
-$labels['username'] = 'Nombre de usuario';
-$labels['password'] = 'Contraseña';
-$labels['server'] = 'Servidor';
-$labels['login'] = 'Entrar';
-$labels['logout'] = 'Cerrar sesión';
-$labels['mail'] = 'Correo';
-$labels['settings'] = 'Configuración';
-$labels['addressbook'] = 'Contactos';
-$labels['inbox'] = 'Entrada';
-$labels['drafts'] = 'Borradores';
-$labels['sent'] = 'Enviados';
-$labels['trash'] = 'Papelera';
-$labels['junk'] = 'Basura';
-$labels['subject'] = 'Asunto';
-$labels['from'] = 'Remitente';
-$labels['to'] = 'Destinatario';
-$labels['cc'] = 'Copia';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Respuesta a';
-$labels['date'] = 'Fecha';
-$labels['size'] = 'Tamaño';
-$labels['priority'] = 'Prioridad';
-$labels['organization'] = 'Organización';
-$labels['reply-to'] = 'Respuesta a';
-$labels['mailboxlist'] = 'Bandejas';
-$labels['messagesfromto'] = 'Mensajes $from a $to de $count';
-$labels['messagenrof'] = 'Mensaje $nr de $count';
-$labels['moveto'] = 'mover a...';
-$labels['download'] = 'descargar';
-$labels['filename'] = 'Nombre del archivo';
-$labels['filesize'] = 'Tamaño del archivo';
-$labels['preferhtml'] = 'Prefiero HTML';
-$labels['htmlmessage'] = 'Mensaje HTML';
-$labels['prettydate'] = 'Fecha detallada';
-$labels['addtoaddressbook'] = 'Añadir a contactos';
-$labels['sun'] = 'Dom';
-$labels['mon'] = 'Lun';
-$labels['tue'] = 'Mar';
-$labels['wed'] = 'Mié';
-$labels['thu'] = 'Jue';
-$labels['fri'] = 'Vie';
-$labels['sat'] = 'Sáb';
-$labels['sunday'] = 'Domingo';
-$labels['monday'] = 'Lunes';
-$labels['tuesday'] = 'Martes';
-$labels['wednesday'] = 'Miércoles';
-$labels['thursday'] = 'Jueves';
-$labels['friday'] = 'Viernes';
-$labels['saturday'] = 'Sábado';
-$labels['today'] = 'Hoy';
-$labels['checkmail'] = 'Revisar si hay nuevos mensajes';
-$labels['writenewmessage'] = 'Crear nuevo mensaje';
-$labels['replytomessage'] = 'Responder mensaje';
-$labels['replytoallmessage'] = 'Responder al emisor y a todos los destinatarios';
-$labels['forwardmessage'] = 'Reenviar mensaje';
-$labels['deletemessage'] = 'Eliminar mensaje';
-$labels['movemessagetotrash'] = 'Mover mensaje a la papelera';
-$labels['printmessage'] = 'Imprimir este mensaje';
-$labels['previousmessage'] = 'Mostrar mensaje anterior';
-$labels['previousmessages'] = 'Mostrar grupo anterior de mensajes';
-$labels['firstmessage'] = 'Mostrar primer mensaje';
-$labels['firstmessages'] = 'Mostrar primer grupo de mensajes';
-$labels['nextmessage'] = 'Mostrar siguente mensaje';
-$labels['nextmessages'] = 'Mostrar siguente grupo de mensajes';
-$labels['lastmessage'] = 'Mostrar último mensaje';
-$labels['lastmessages'] = 'Mostrar último grupo de mensajes';
-$labels['backtolist'] = 'Volver a la lista de mensajes';
-$labels['viewsource'] = 'Mostrar código';
-$labels['markmessages'] = 'Marcar mensajes';
-$labels['markread'] = 'Como leído';
-$labels['markunread'] = 'Como no leído';
-$labels['select'] = 'Elija';
-$labels['all'] = 'Todos';
-$labels['none'] = 'Ninguno';
-$labels['unread'] = 'Sin leer';
-$labels['compact'] = 'Compacta';
-$labels['empty'] = 'Vacia';
-$labels['purge'] = 'Eliminar';
-$labels['quota'] = 'Uso de disco';
-$labels['unknown'] = 'desconocido';
-$labels['unlimited'] = 'sin límite';
-$labels['quicksearch'] = 'Búsqueda rápida';
-$labels['resetsearch'] = 'Reajustar la búsqueda';
-$labels['compose'] = 'Escribir un mensaje';
-$labels['savemessage'] = 'Guardar como borrador';
-$labels['sendmessage'] = 'Enviar ahora el mensaje';
-$labels['addattachment'] = 'Añadir un archivo';
-$labels['charset'] = 'Codificación';
-$labels['editortype'] = 'Tipo de editor';
-$labels['returnreceipt'] = 'Acuse de recibo';
-$labels['checkspelling'] = 'Revisar ortografía';
-$labels['resumeediting'] = 'Continuar edición';
-$labels['revertto'] = 'Revertir a';
-$labels['attachments'] = 'Adjuntos';
-$labels['upload'] = 'Subir';
-$labels['close'] = 'Cerrar';
-$labels['low'] = 'Bajo';
-$labels['lowest'] = 'Bajísimo';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'Alto';
-$labels['highest'] = 'Altísimo';
-$labels['nosubject'] = '(sin asunto)';
-$labels['showimages'] = 'Mostrar imágenes';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Texto';
-$labels['addcc'] = 'Añadir Cc';
-$labels['addbcc'] = 'Añadir Bcc';
-$labels['addreplyto'] = 'Añadir Respuesta a';
-$labels['mdnrequest'] = 'El emisor de este mensaje desea ser notificado cuando usted lo lea. ¿Quiere enviar esta notificación?';
-$labels['receiptread'] = 'Notificación de lectura';
-$labels['yourmessage'] = 'Esta es una notificación de lectura de su mensaje';
-$labels['receiptnote'] = 'Nota: Esta notificación sólo significa que su mensaje fue mostrado en la computadora del receptor. No hay garantía de que el receptor haya leído o entendido el contenido del mensaje.';
-$labels['name'] = 'Nombre completo';
-$labels['firstname'] = 'Nombre';
-$labels['surname'] = 'Apellido';
-$labels['email'] = 'Correo';
-$labels['addcontact'] = 'Añadir nuevo contacto';
-$labels['editcontact'] = 'Editar contacto';
-$labels['edit'] = 'Editar';
-$labels['cancel'] = 'Cancelar';
-$labels['save'] = 'Guardar';
-$labels['delete'] = 'Eliminar';
-$labels['newcontact'] = 'Crear nuevo contacto';
-$labels['deletecontact'] = 'Eliminar contactos seleccionados';
-$labels['composeto'] = 'Enviar mensaje a';
-$labels['contactsfromto'] = 'Contactos $from a $to de $count';
-$labels['print'] = 'Imprimir';
-$labels['export'] = 'Exportar';
-$labels['previouspage'] = 'Mostrar grupo anterior';
-$labels['firstpage'] = 'Mostrar primer grupo';
-$labels['nextpage'] = 'Mostrar grupo siguiente';
-$labels['lastpage'] = 'Mostrar último grupo';
-$labels['groups'] = 'Grupos';
-$labels['personaladrbook'] = 'Direcciones personales';
-$labels['settingsfor'] = 'Configuración para';
-$labels['preferences'] = 'Preferencias';
-$labels['userpreferences'] = 'Preferencias de usuario';
-$labels['editpreferences'] = 'Editar preferencias de usuario';
-$labels['identities'] = 'Identidades';
-$labels['manageidentities'] = 'Gestionar identidades para esta cuenta';
-$labels['newidentity'] = 'Nueva identidad';
-$labels['newitem'] = 'Nuevo';
-$labels['edititem'] = 'Editar';
-$labels['setdefault'] = 'Seleccionar opción por defecto';
-$labels['language'] = 'Idioma';
-$labels['timezone'] = 'Zona horaria';
-$labels['pagesize'] = 'Filas por página';
-$labels['signature'] = 'Firma';
-$labels['dstactive'] = 'Cambio de horario';
-$labels['htmleditor'] = 'Componer mensaje en HTML';
-$labels['htmlsignature'] = 'Firma HTML';
-$labels['previewpane'] = 'Mostrar vista preliminar';
-$labels['autosavedraft'] = 'Guardar borrador automáticamente';
-$labels['everynminutes'] = 'cada $n minutos';
-$labels['never'] = 'nunca';
-$labels['folder'] = 'Bandeja';
-$labels['folders'] = 'Bandejas';
-$labels['foldername'] = 'Nombre de bandeja';
-$labels['subscribed'] = 'Suscrita';
-$labels['messagecount'] = 'Mensajes';
-$labels['create'] = 'Crear';
-$labels['createfolder'] = 'Crear nueva bandeja';
-$labels['rename'] = 'Renombrar';
-$labels['renamefolder'] = 'Renombrar bandeja';
-$labels['deletefolder'] = 'Eliminar bandeja';
-$labels['managefolders'] = 'Administrar bandejas';
-$labels['sortby'] = 'Ordenar por';
-$labels['sortasc'] = 'Orden ascendente';
-$labels['sortdesc'] = 'Orden descendente';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/es/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Javier Smaldone <javier@smaldone.com.ar> |
- | David Grajal Blanco <dgrabla@gmail.com> |
- | Lito Jornero <jornero@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1079 2008-02-14 07:47:11Z tomekp $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Contraseña incorrecta';
-$messages['cookiesdisabled'] = 'Su navegador no acepta cookies';
-$messages['sessionerror'] = 'Su sesión no existe o ha expirado';
-$messages['imaperror'] = 'Error de conexión con el servidor IMAP';
-$messages['nomessagesfound'] = 'No se han encontrado mensajes en esta casilla';
-$messages['loggedout'] = 'Ha cerrado la sesión. ¡Hasta pronto!';
-$messages['mailboxempty'] = 'La casilla está vacía';
-$messages['loading'] = 'Cargando...';
-$messages['loadingdata'] = 'Cargando datos...';
-$messages['checkingmail'] = 'Verificando si hay nuevos mensajes...';
-$messages['sendingmessage'] = 'Enviando mensaje...';
-$messages['messagesent'] = 'Mensaje enviado correctamente';
-$messages['savingmessage'] = 'Guardar mensaje...';
-$messages['messagesaved'] = 'Mensaje guardado en borradores';
-$messages['successfullysaved'] = 'Guardado correctamente';
-$messages['addedsuccessfully'] = 'Contacto añadido correctamente a la libreta de direcciones';
-$messages['contactexists'] = 'Ya existe un contacto con esta dirección de correo';
-$messages['blockedimages'] = 'Para proteger su privacidad, las imágenes externas han sido bloqueadas en este mensaje';
-$messages['encryptedmessage'] = 'Este es un mensaje cifrado y no puede ser mostrado. ¡Lo siento!';
-$messages['nocontactsfound'] = 'No hay contactos';
-$messages['contactnotfound'] = 'El contacto solicitado no existe';
-$messages['sendingfailed'] = 'Error al enviar mensaje';
-$messages['errorsaving'] = 'Ocurrió un error mientras se guardaba';
-$messages['errormoving'] = 'No se ha podido mover el mensaje';
-$messages['errordeleting'] = 'No se ha podido eliminar el mensaje';
-$messages['deletecontactconfirm'] = '¿Realmente quiere eliminar los contactos seleccionados?';
-$messages['deletemessagesconfirm'] = '¿Realmente quiere eliminar los mensajes seleccionados?';
-$messages['deletefolderconfirm'] = '¿Está seguro de que quiere eliminar esta carpeta?';
-$messages['purgefolderconfirm'] = '¿Está seguro de que quiere eliminar todos los mensajes de esta carpeta?';
-$messages['formincomplete'] = 'No se han llenado todos los campos del formulario';
-$messages['noemailwarning'] = 'Por favor, introduzca un e-mail válido';
-$messages['nonamewarning'] = 'Por favor, introduzca su nombre';
-$messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página';
-$messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario';
-$messages['nosubjectwarning'] = 'El campo "Asunto" esta vacío. ¿Desea completarlo en este momento?';
-$messages['nobodywarning'] = '¿Quiere enviar este mensaje sin texto?';
-$messages['notsentwarning'] = 'El mensaje no ha sido enviado. ¿Desea descartar su mensaje?';
-$messages['noldapserver'] = 'Por favor, seleccione un servidor LDAP para buscar';
-$messages['nocontactsreturned'] = 'No se han encontrado contactos';
-$messages['nosearchname'] = 'Por favor, introduzca un nombre o la dirección de e-mail';
-$messages['searchsuccessful'] = 'Se encontraron $nr mensajes';
-$messages['searchnomatch'] = 'La búsqueda no obtuvo resultados';
-$messages['searching'] = 'Buscando...';
-$messages['checking'] = 'Revisando...';
-$messages['nospellerrors'] = 'No se encontraron errores ortográficos';
-$messages['folderdeleted'] = 'Carpeta eliminada exitosamente';
-$messages['deletedsuccessfully'] = 'Eliminado exitosamente';
-$messages['converting'] = 'Removiendo el formato del mensaje...';
-$messages['messageopenerror'] = 'No puedo descargar el mensaje del servidor';
-$messages['fileuploaderror'] = 'Fallo en la subida de archivos';
-$messages['filesizeerror'] = 'El archivo excede el tamaño maximo ($size)';
-$messages['copysuccess'] = '$nr direcciones copiadas con éxito';
-$messages['copyerror'] = 'No se pudo copiar ninguna dirección';
-$messages['sourceisreadonly'] = 'Esta dirección es de sólo-lectura';
-$messages['errorsavingcontact'] = 'No se pudo guardar la dirección de contacto';
-$messages['movingmessage'] = 'Moviendo mensaje...';
-$messages['receiptsent'] = 'La notificación de lectura se ha enviado con éxito.';
-$messages['errorsendingreceipt'] = 'No se ha podido enviar la notificación de lectura.';
-$messages['nodeletelastidentity'] = 'No se puede borrar esta identidad puesto que es la última.';
-$messages['addsubfolderhint'] = 'Esta carpeta se creará como una subcarpeta dentro de la carpeta seleccionada';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/es/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Javier Smaldone <javier@smaldone.com.ar> |
+| http://www.smaldone.com.ar |
+| David Grajal Blanco <dgrabla@gmail.com> |
+| http://david.grajal.net |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 1417 2008-05-22 06:54:28Z alec $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Bienvenido a $product';
+$labels['username'] = 'Nombre de usuario';
+$labels['password'] = 'Contraseña';
+$labels['server'] = 'Servidor';
+$labels['login'] = 'Entrar';
+$labels['logout'] = 'Cerrar sesión';
+$labels['mail'] = 'Correo';
+$labels['settings'] = 'Configuración';
+$labels['addressbook'] = 'Contactos';
+$labels['inbox'] = 'Entrada';
+$labels['drafts'] = 'Borradores';
+$labels['sent'] = 'Enviados';
+$labels['trash'] = 'Papelera';
+$labels['junk'] = 'Basura';
+$labels['subject'] = 'Asunto';
+$labels['from'] = 'Remitente';
+$labels['to'] = 'Destinatario';
+$labels['cc'] = 'Copia';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Respuesta a';
+$labels['date'] = 'Fecha';
+$labels['size'] = 'Tamaño';
+$labels['priority'] = 'Prioridad';
+$labels['organization'] = 'Organización';
+$labels['reply-to'] = 'Respuesta a';
+$labels['mailboxlist'] = 'Bandejas';
+$labels['messagesfromto'] = 'Mensajes $from a $to de $count';
+$labels['messagenrof'] = 'Mensaje $nr de $count';
+$labels['moveto'] = 'mover a...';
+$labels['download'] = 'descargar';
+$labels['filename'] = 'Nombre del archivo';
+$labels['filesize'] = 'Tamaño del archivo';
+$labels['preferhtml'] = 'Prefiero HTML';
+$labels['htmlmessage'] = 'Mensaje HTML';
+$labels['prettydate'] = 'Fecha detallada';
+$labels['addtoaddressbook'] = 'Añadir a contactos';
+$labels['sun'] = 'Dom';
+$labels['mon'] = 'Lun';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mié';
+$labels['thu'] = 'Jue';
+$labels['fri'] = 'Vie';
+$labels['sat'] = 'Sáb';
+$labels['sunday'] = 'Domingo';
+$labels['monday'] = 'Lunes';
+$labels['tuesday'] = 'Martes';
+$labels['wednesday'] = 'Miércoles';
+$labels['thursday'] = 'Jueves';
+$labels['friday'] = 'Viernes';
+$labels['saturday'] = 'Sábado';
+$labels['jan'] = 'Ene';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Abr';
+$labels['may'] = 'May';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Ago';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Oct';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Duc';
+$labels['longjan'] = 'Enero';
+$labels['longfeb'] = 'Febrero';
+$labels['longmar'] = 'Marzo';
+$labels['longapr'] = 'Abril';
+$labels['longmay'] = 'Mayo';
+$labels['longjun'] = 'Junio';
+$labels['longjul'] = 'Julio';
+$labels['longaug'] = 'Agosto';
+$labels['longsep'] = 'Septiembre';
+$labels['longoct'] = 'Octubre';
+$labels['longnov'] = 'Noviembre';
+$labels['longdec'] = 'Diciembre';
+$labels['today'] = 'Hoy';
+$labels['checkmail'] = 'Revisar si hay nuevos mensajes';
+$labels['writenewmessage'] = 'Crear nuevo mensaje';
+$labels['replytomessage'] = 'Responder mensaje';
+$labels['replytoallmessage'] = 'Responder al emisor y a todos los destinatarios';
+$labels['forwardmessage'] = 'Reenviar mensaje';
+$labels['deletemessage'] = 'Eliminar mensaje';
+$labels['movemessagetotrash'] = 'Mover mensaje a la papelera';
+$labels['printmessage'] = 'Imprimir este mensaje';
+$labels['previousmessage'] = 'Mostrar mensaje anterior';
+$labels['previousmessages'] = 'Mostrar grupo anterior de mensajes';
+$labels['firstmessage'] = 'Mostrar primer mensaje';
+$labels['firstmessages'] = 'Mostrar primer grupo de mensajes';
+$labels['nextmessage'] = 'Mostrar siguente mensaje';
+$labels['nextmessages'] = 'Mostrar siguente grupo de mensajes';
+$labels['lastmessage'] = 'Mostrar último mensaje';
+$labels['lastmessages'] = 'Mostrar último grupo de mensajes';
+$labels['backtolist'] = 'Volver a la lista de mensajes';
+$labels['viewsource'] = 'Mostrar código';
+$labels['markmessages'] = 'Marcar mensajes';
+$labels['markread'] = 'Como leído';
+$labels['markunread'] = 'Como no leído';
+$labels['select'] = 'Elija';
+$labels['all'] = 'Todos';
+$labels['none'] = 'Ninguno';
+$labels['unread'] = 'Sin leer';
+$labels['compact'] = 'Compacta';
+$labels['empty'] = 'Vacia';
+$labels['purge'] = 'Eliminar';
+$labels['quota'] = 'Uso de disco';
+$labels['unknown'] = 'desconocido';
+$labels['unlimited'] = 'sin límite';
+$labels['quicksearch'] = 'Búsqueda rápida';
+$labels['resetsearch'] = 'Reajustar la búsqueda';
+$labels['compose'] = 'Escribir un mensaje';
+$labels['savemessage'] = 'Guardar como borrador';
+$labels['sendmessage'] = 'Enviar ahora el mensaje';
+$labels['addattachment'] = 'Añadir un archivo';
+$labels['charset'] = 'Codificación';
+$labels['editortype'] = 'Tipo de editor';
+$labels['returnreceipt'] = 'Acuse de recibo';
+$labels['checkspelling'] = 'Revisar ortografía';
+$labels['resumeediting'] = 'Continuar edición';
+$labels['revertto'] = 'Revertir a';
+$labels['attachments'] = 'Adjuntos';
+$labels['upload'] = 'Subir';
+$labels['close'] = 'Cerrar';
+$labels['low'] = 'Bajo';
+$labels['lowest'] = 'Bajísimo';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Alto';
+$labels['highest'] = 'Altísimo';
+$labels['nosubject'] = '(sin asunto)';
+$labels['showimages'] = 'Mostrar imágenes';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Texto';
+$labels['addcc'] = 'Añadir Cc';
+$labels['addbcc'] = 'Añadir Bcc';
+$labels['addreplyto'] = 'Añadir Respuesta a';
+$labels['mdnrequest'] = 'El emisor de este mensaje desea ser notificado cuando usted lo lea. ¿Quiere enviar esta notificación?';
+$labels['receiptread'] = 'Notificación de lectura';
+$labels['yourmessage'] = 'Esta es una notificación de lectura de su mensaje';
+$labels['receiptnote'] = 'Nota: Esta notificación sólo significa que su mensaje fue mostrado en la computadora del receptor. No hay garantía de que el receptor haya leído o entendido el contenido del mensaje.';
+$labels['name'] = 'Nombre completo';
+$labels['firstname'] = 'Nombre';
+$labels['surname'] = 'Apellido';
+$labels['email'] = 'Correo';
+$labels['addcontact'] = 'Añadir nuevo contacto';
+$labels['editcontact'] = 'Editar contacto';
+$labels['edit'] = 'Editar';
+$labels['cancel'] = 'Cancelar';
+$labels['save'] = 'Guardar';
+$labels['delete'] = 'Eliminar';
+$labels['newcontact'] = 'Crear nuevo contacto';
+$labels['deletecontact'] = 'Eliminar contactos seleccionados';
+$labels['composeto'] = 'Enviar mensaje a';
+$labels['contactsfromto'] = 'Contactos $from a $to de $count';
+$labels['print'] = 'Imprimir';
+$labels['export'] = 'Exportar';
+$labels['previouspage'] = 'Mostrar grupo anterior';
+$labels['firstpage'] = 'Mostrar primer grupo';
+$labels['nextpage'] = 'Mostrar grupo siguiente';
+$labels['lastpage'] = 'Mostrar último grupo';
+$labels['groups'] = 'Grupos';
+$labels['personaladrbook'] = 'Direcciones personales';
+$labels['settingsfor'] = 'Configuración para';
+$labels['preferences'] = 'Preferencias';
+$labels['userpreferences'] = 'Preferencias de usuario';
+$labels['editpreferences'] = 'Editar preferencias de usuario';
+$labels['identities'] = 'Identidades';
+$labels['manageidentities'] = 'Gestionar identidades para esta cuenta';
+$labels['newidentity'] = 'Nueva identidad';
+$labels['newitem'] = 'Nuevo';
+$labels['edititem'] = 'Editar';
+$labels['setdefault'] = 'Seleccionar opción por defecto';
+$labels['language'] = 'Idioma';
+$labels['timezone'] = 'Zona horaria';
+$labels['pagesize'] = 'Filas por página';
+$labels['signature'] = 'Firma';
+$labels['dstactive'] = 'Cambio de horario';
+$labels['htmleditor'] = 'Componer mensaje en HTML';
+$labels['htmlsignature'] = 'Firma HTML';
+$labels['previewpane'] = 'Mostrar vista preliminar';
+$labels['logoutclear'] = 'Vaciar papelera al cerrar sesión';
+$labels['logoutcompact'] = 'Compactar la bandeja de entrada al cerrar sesión';
+$labels['uisettings'] = 'Interfaz de usuario';
+$labels['serversettings'] = 'Configuracion del servidor';
+$labels['mailboxview'] = 'Vista de buzón';
+$labels['mdnrequests'] = 'Notificaciones de envio';
+$labels['askuser'] = 'preguntar al usuario';
+$labels['autosend'] = 'enviar automáticamente';
+$labels['ignore'] = 'ignorar';
+$labels['readwhendeleted'] = 'Marcar el mensage como leido al borrarlo';
+$labels['flagfordeletion'] = 'Marcar el mensage para borrarse en vez de borrarlo';
+$labels['autosavedraft'] = 'Guardar borrador automáticamente';
+$labels['everynminutes'] = 'cada $n minutos';
+$labels['never'] = 'nunca';
+$labels['folder'] = 'Bandeja';
+$labels['folders'] = 'Bandejas';
+$labels['foldername'] = 'Nombre de bandeja';
+$labels['subscribed'] = 'Suscrita';
+$labels['messagecount'] = 'Mensajes';
+$labels['create'] = 'Crear';
+$labels['createfolder'] = 'Crear nueva bandeja';
+$labels['rename'] = 'Renombrar';
+$labels['renamefolder'] = 'Renombrar bandeja';
+$labels['deletefolder'] = 'Eliminar bandeja';
+$labels['managefolders'] = 'Administrar bandejas';
+$labels['sortby'] = 'Ordenar por';
+$labels['sortasc'] = 'Orden ascendente';
+$labels['sortdesc'] = 'Orden descendente';
+
+?>
+
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/es/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Javier Smaldone <javier@smaldone.com.ar> |
+ | David Grajal Blanco <dgrabla@gmail.com> |
+ | Lito Jornero <jornero@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1079 2008-02-14 07:47:11Z tomekp $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Contraseña incorrecta';
+$messages['cookiesdisabled'] = 'Su navegador no acepta cookies';
+$messages['sessionerror'] = 'Su sesión no existe o ha expirado';
+$messages['imaperror'] = 'Error de conexión con el servidor IMAP';
+$messages['nomessagesfound'] = 'No se han encontrado mensajes en esta casilla';
+$messages['loggedout'] = 'Ha cerrado la sesión. ¡Hasta pronto!';
+$messages['mailboxempty'] = 'La casilla está vacía';
+$messages['loading'] = 'Cargando...';
+$messages['loadingdata'] = 'Cargando datos...';
+$messages['checkingmail'] = 'Verificando si hay nuevos mensajes...';
+$messages['sendingmessage'] = 'Enviando mensaje...';
+$messages['messagesent'] = 'Mensaje enviado correctamente';
+$messages['savingmessage'] = 'Guardar mensaje...';
+$messages['messagesaved'] = 'Mensaje guardado en borradores';
+$messages['successfullysaved'] = 'Guardado correctamente';
+$messages['addedsuccessfully'] = 'Contacto añadido correctamente a la libreta de direcciones';
+$messages['contactexists'] = 'Ya existe un contacto con esta dirección de correo';
+$messages['blockedimages'] = 'Para proteger su privacidad, las imágenes externas han sido bloqueadas en este mensaje';
+$messages['encryptedmessage'] = 'Este es un mensaje cifrado y no puede ser mostrado. ¡Lo siento!';
+$messages['nocontactsfound'] = 'No hay contactos';
+$messages['contactnotfound'] = 'El contacto solicitado no existe';
+$messages['sendingfailed'] = 'Error al enviar mensaje';
+$messages['errorsaving'] = 'Ocurrió un error mientras se guardaba';
+$messages['errormoving'] = 'No se ha podido mover el mensaje';
+$messages['errordeleting'] = 'No se ha podido eliminar el mensaje';
+$messages['deletecontactconfirm'] = '¿Realmente quiere eliminar los contactos seleccionados?';
+$messages['deletemessagesconfirm'] = '¿Realmente quiere eliminar los mensajes seleccionados?';
+$messages['deletefolderconfirm'] = '¿Está seguro de que quiere eliminar esta carpeta?';
+$messages['purgefolderconfirm'] = '¿Está seguro de que quiere eliminar todos los mensajes de esta carpeta?';
+$messages['formincomplete'] = 'No se han llenado todos los campos del formulario';
+$messages['noemailwarning'] = 'Por favor, introduzca un e-mail válido';
+$messages['nonamewarning'] = 'Por favor, introduzca su nombre';
+$messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página';
+$messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario';
+$messages['nosubjectwarning'] = 'El campo "Asunto" esta vacío. ¿Desea completarlo en este momento?';
+$messages['nobodywarning'] = '¿Quiere enviar este mensaje sin texto?';
+$messages['notsentwarning'] = 'El mensaje no ha sido enviado. ¿Desea descartar su mensaje?';
+$messages['noldapserver'] = 'Por favor, seleccione un servidor LDAP para buscar';
+$messages['nocontactsreturned'] = 'No se han encontrado contactos';
+$messages['nosearchname'] = 'Por favor, introduzca un nombre o la dirección de e-mail';
+$messages['searchsuccessful'] = 'Se encontraron $nr mensajes';
+$messages['searchnomatch'] = 'La búsqueda no obtuvo resultados';
+$messages['searching'] = 'Buscando...';
+$messages['checking'] = 'Revisando...';
+$messages['nospellerrors'] = 'No se encontraron errores ortográficos';
+$messages['folderdeleted'] = 'Carpeta eliminada exitosamente';
+$messages['deletedsuccessfully'] = 'Eliminado exitosamente';
+$messages['converting'] = 'Removiendo el formato del mensaje...';
+$messages['messageopenerror'] = 'No puedo descargar el mensaje del servidor';
+$messages['fileuploaderror'] = 'Fallo en la subida de archivos';
+$messages['filesizeerror'] = 'El archivo excede el tamaño maximo ($size)';
+$messages['copysuccess'] = '$nr direcciones copiadas con éxito';
+$messages['copyerror'] = 'No se pudo copiar ninguna dirección';
+$messages['sourceisreadonly'] = 'Esta dirección es de sólo-lectura';
+$messages['errorsavingcontact'] = 'No se pudo guardar la dirección de contacto';
+$messages['movingmessage'] = 'Moviendo mensaje...';
+$messages['receiptsent'] = 'La notificación de lectura se ha enviado con éxito.';
+$messages['errorsendingreceipt'] = 'No se ha podido enviar la notificación de lectura.';
+$messages['nodeletelastidentity'] = 'No se puede borrar esta identidad puesto que es la última.';
+$messages['addsubfolderhint'] = 'Esta carpeta se creará como una subcarpeta dentro de la carpeta seleccionada';
+
+?>
\ No newline at end of file
$labels['thursday'] = 'Neljapäev';
$labels['friday'] = 'Reede';
$labels['saturday'] = 'Laupäev';
+$labels['jan'] = 'jaan';
+$labels['feb'] = 'veebr';
+$labels['mar'] = 'märts';
+$labels['apr'] = 'apr';
+$labels['may'] = 'mai';
+$labels['jun'] = 'juuni';
+$labels['jul'] = 'juuli';
+$labels['aug'] = 'aug';
+$labels['sep'] = 'sept';
+$labels['oct'] = 'okt';
+$labels['nov'] = 'nov';
+$labels['dec'] = 'dets';
+$labels['longjan'] = 'Jaanuar';
+$labels['longfeb'] = 'Veebruar';
+$labels['longmar'] = 'Märts';
+$labels['longapr'] = 'Aprill';
+$labels['longmay'] = 'Mai';
+$labels['longjun'] = 'Juuni';
+$labels['longjul'] = 'Juuli';
+$labels['longaug'] = 'August';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Oktoober';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'Detsember';
$labels['today'] = 'Täna';
$labels['checkmail'] = 'Kontrolli uusi kirju';
$labels['writenewmessage'] = 'Kirjuta uus kiri';
$labels['quicksearch'] = 'Kiirotsing';
$labels['resetsearch'] = 'Lähtesta otsing';
$labels['compose'] = 'Koosta kiri';
-$labels['sendmessage'] = 'Saada kiri kohe';
$labels['savemessage'] = 'Salvesta see mustand';
+$labels['sendmessage'] = 'Saada kiri kohe';
$labels['addattachment'] = 'Lisa fail';
$labels['charset'] = 'Märgistik';
$labels['editortype'] = 'Redaktori tüüp';
$labels['htmleditor'] = 'Kasuta HTML redaktorit';
$labels['htmlsignature'] = 'HTML allkiri';
$labels['previewpane'] = 'Näita eelvaate akent';
+$labels['logoutclear'] = 'Tühjenda väljumisel prügikast';
+$labels['logoutcompact'] = 'Tihenda väljumisel sissetulevate kaust';
+$labels['uisettings'] = 'Kasutajaliides';
+$labels['serversettings'] = 'Serveri seaded';
+$labels['mailboxview'] = 'Postkasti vaade';
+$labels['mdnrequests'] = 'Kättesaamis kinnitus';
+$labels['askuser'] = 'küsi kasutajalt';
+$labels['autosend'] = 'saada automaatselt';
+$labels['ignore'] = 'ignoreeri';
+$labels['readwhendeleted'] = 'Märgi kiri kustutamisel loetuks';
+$labels['flagfordeletion'] = 'Kustutamise asemel märgi kiri kustutatavaks';
$labels['autosavedraft'] = 'Salvesta mustandid automaatselt';
$labels['everynminutes'] = 'iga $n minuti tagant';
$labels['never'] = 'mitte kunagi';
$labels['sortby'] = 'Järjesta';
$labels['sortasc'] = 'Järjesta kasvavalt';
$labels['sortdesc'] = 'Järjesta kahanevalt';
-
?>
$messages['errorsendingreceipt'] = 'Ei õnnestunud kättesaamiskinnitust saata';
$messages['nodeletelastidentity'] = 'See identiteet on viimane ja seda ei saa kustutada.';
$messages['addsubfolderhint'] = 'See kataloog luuakse valitud kausta alamkataloogina.';
+$messages['forbiddencharacter'] = 'Kausta nimi sisaldab keelatud sümbolit';
?>
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | language/eu/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Bicyus <bicyus@tenkanet.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Ongietorri Roundcube|Mail-era';
-$labels['username'] = 'Erabiltzailea';
-$labels['password'] = 'Pasahitza';
-$labels['server'] = 'Zerbitzaria';
-$labels['login'] = 'Saio hasiera';
-$labels['logout'] = 'Irten';
-$labels['mail'] = 'ePosta';
-$labels['settings'] = 'Ezarpen Pertsonalak';
-$labels['addressbook'] = 'Helbide Liburua';
-$labels['inbox'] = 'Sarrera';
-$labels['drafts'] = 'Zirriborroak';
-$labels['sent'] = 'Bidalitakoak';
-$labels['trash'] = 'Zakarrontzia';
-$labels['junk'] = 'Zabor-posta';
-$labels['subject'] = 'Gaia';
-$labels['from'] = 'Nork';
-$labels['to'] = 'Nori';
-$labels['cc'] = 'Kopia';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Erantzun-Hona';
-$labels['date'] = 'Data';
-$labels['size'] = 'Tamaina';
-$labels['priority'] = 'Lehentasuna';
-$labels['organization'] = 'Erakundea';
-$labels['reply-to'] = 'Erantzun-Hona';
-$labels['mailboxlist'] = 'Karpetak';
-$labels['messagesfromto'] = '$from -tik $to -ra $count mezuetatik';
-$labels['messagenrof'] = '$nr mezua $count -tik';
-$labels['moveto'] = 'mugitu hona...';
-$labels['download'] = 'deskargatu';
-$labels['filename'] = 'Fitxategi Izena';
-$labels['filesize'] = 'Fitxategi Tamaina';
-$labels['preferhtml'] = 'HTML nahiago';
-$labels['htmlmessage'] = 'HTML Mezua';
-$labels['prettydate'] = 'Data politak';
-$labels['addtoaddressbook'] = 'Helbide liburura gehitu';
-$labels['sun'] = 'Iga';
-$labels['mon'] = 'Al';
-$labels['tue'] = 'As';
-$labels['wed'] = 'Azt';
-$labels['thu'] = 'Og';
-$labels['fri'] = 'Or';
-$labels['sat'] = 'Lar';
-$labels['sunday'] = 'Igandea';
-$labels['monday'] = 'Astelehena';
-$labels['tuesday'] = 'Asteartea';
-$labels['wednesday'] = 'Asteazkena';
-$labels['thursday'] = 'Osteguna';
-$labels['friday'] = 'Ostirala';
-$labels['saturday'] = 'Larunbata';
-$labels['today'] = 'Gaur';
-$labels['checkmail'] = 'Mezu berrien bila arakatu';
-$labels['writenewmessage'] = 'Mezu berri bat sortu';
-$labels['replytomessage'] = 'Mezuari erantzun';
-$labels['replytoallmessage'] = 'Bidaltzaile eta hartzaile guztiei erantzun';
-$labels['forwardmessage'] = 'Mezua Birbidali';
-$labels['deletemessage'] = 'Mezua zakarrontzira mugitu';
-$labels['printmessage'] = 'Mezu hau inprimatu';
-$labels['previousmessage'] = 'Aurreko mezua ikusi';
-$labels['previousmessages'] = 'Aurreko mezuak ikusi';
-$labels['firstmessage'] = 'Lehenengo mezua ikusi';
-$labels['firstmessages'] = 'Lehenengo mezu sorta ikusi';
-$labels['nextmessage'] = 'Hurrengo mezua ikusi';
-$labels['nextmessages'] = 'Hurrengo mezu sorta ikusi';
-$labels['lastmessage'] = 'Azken mezua ikusi';
-$labels['lastmessages'] = 'Azken mezu sorta ikusi';
-$labels['backtolist'] = 'Mezu zerrendara itzuli';
-$labels['viewsource'] = 'Jatorria bistarazi';
-$labels['select'] = 'Hautatu';
-$labels['all'] = 'Denak';
-$labels['none'] = 'Batez';
-$labels['unread'] = 'Irakurri gabeak';
-$labels['compact'] = 'Trinkotu';
-$labels['empty'] = 'Hustu';
-$labels['purge'] = 'Garbitu';
-$labels['quota'] = 'Disko erabilera';
-$labels['unknown'] = 'ezezaguna';
-$labels['unlimited'] = 'mugagabea';
-$labels['quicksearch'] = 'Bilaketa azkarra';
-$labels['resetsearch'] = 'Bilaketa berrabiarazi';
-$labels['compose'] = 'Mezu bat sortu';
-$labels['sendmessage'] = 'Mezua orain bidali';
-$labels['savemessage'] = 'Zirriborro hau gorde';
-$labels['addattachment'] = 'Fitxategia erantsi';
-$labels['charset'] = 'Karaktere jokoa';
-$labels['editortype'] = 'Editore mota';
-$labels['returnreceipt'] = 'Bidaltzaileari itzuli';
-$labels['checkspelling'] = 'Egiaztaketa ortografikoa';
-$labels['resumeediting'] = 'Editatzen jarraitu';
-$labels['revertto'] = 'Itzuli hona';
-$labels['attachments'] = 'Eranskinak';
-$labels['upload'] = 'Igo';
-$labels['close'] = 'Itxi';
-$labels['low'] = 'Baxua';
-$labels['lowest'] = 'Baxuena';
-$labels['normal'] = 'Normala';
-$labels['high'] = 'Altua';
-$labels['highest'] = 'Altuena';
-$labels['nosubject'] = '(gairik gabea)';
-$labels['showimages'] = 'Irudiak bistarazi';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Testu laua';
-$labels['name'] = 'Izena bistarazi';
-$labels['firstname'] = 'Izena';
-$labels['surname'] = 'Abizena';
-$labels['email'] = 'ePosta';
-$labels['addcontact'] = 'Txartel berria gehitu';
-$labels['editcontact'] = 'Txartela editatu';
-$labels['edit'] = 'Editatu';
-$labels['cancel'] = 'Utzi';
-$labels['save'] = 'Gorde';
-$labels['delete'] = 'Ezabatu';
-$labels['newcontact'] = 'Helbide liburu txartel berria sortu';
-$labels['deletecontact'] = 'Aukeraturiko txartelak ezabatu';
-$labels['composeto'] = 'Bidali mezua honi: ';
-$labels['contactsfromto'] = '$from -tik $to -ra $count txarteletatik';
-$labels['print'] = 'Inprimatu';
-$labels['export'] = 'Esportatu';
-$labels['previouspage'] = 'Aurreko sorta ikusi';
-$labels['firstpage'] = 'Lehenengo sorta ikusi';
-$labels['nextpage'] = 'Hurrengo sorta ikusi';
-$labels['lastpage'] = 'Azken sorta ikusi';
-$labels['groups'] = 'Taldeak';
-$labels['personaladrbook'] = 'Helbide pertsonalak';
-$labels['settingsfor'] = 'Honen ezarpenak:';
-$labels['preferences'] = 'Hobespenak';
-$labels['userpreferences'] = 'Erabiltzaile hobespenak';
-$labels['editpreferences'] = 'Erabiltzaile hobespenak editatu';
-$labels['identities'] = 'Identitateak';
-$labels['manageidentities'] = 'Kontu honetako identitateak kudeatu';
-$labels['newidentity'] = 'Identitate berria';
-$labels['newitem'] = 'Elementu berria';
-$labels['edititem'] = 'Elementua Editatu';
-$labels['setdefault'] = 'Lehenespenak ezarri';
-$labels['language'] = 'Hizkuntza';
-$labels['timezone'] = 'Ordu zonaldea';
-$labels['pagesize'] = 'Lerro orrialdeko';
-$labels['signature'] = 'Sinadura';
-$labels['dstactive'] = 'Eguneko gordeketak';
-$labels['htmleditor'] = 'HTML mezuak sortu';
-$labels['htmlsignature'] = 'HTML sinadura';
-$labels['previewpane'] = 'Aurrebista panela ikusi';
-$labels['autosavedraft'] = 'Zirriborroa automatikoki gorde';
-$labels['everynminutes'] = '$n minuturo';
-$labels['never'] = 'inoiz';
-$labels['folder'] = 'Karpeta';
-$labels['folders'] = 'Karpetak';
-$labels['foldername'] = 'Karpeta izena';
-$labels['subscribed'] = 'Harpideturik';
-$labels['create'] = 'Sortu';
-$labels['createfolder'] = 'Karpeta berria sortu';
-$labels['rename'] = 'Berrizendatu';
-$labels['renamefolder'] = 'Karpeta berrizendatu';
-$labels['deletefolder'] = 'Karpeta ezabatu';
-$labels['managefolders'] = 'Karpeta kudeaketa';
-$labels['sortby'] = 'Honela ordenatu';
-$labels['sortasc'] = 'Goraka ordenatu';
-$labels['sortdesc'] = 'Beheraka ordenatu';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | language/eu/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: pi <pi@beobide.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Saio sarrerak huts egin du';
-$messages['cookiesdisabled'] = 'Zure nabigatzaileak ez ditu cookie-ak onartzen';
-$messages['sessionerror'] = 'Zure saioa baliogabea da edo iraungita dago';
-$messages['imaperror'] = 'Huts IMAP zerbitzarira konektatzerakoan';
-$messages['nomessagesfound'] = 'Ez da mezurik aurkitu posta kutxa honetan';
-$messages['loggedout'] = 'Saioa behar bezala amaitu duzu. Agur!';
-$messages['mailboxempty'] = 'Posta kutxa hutsik dago';
-$messages['loading'] = 'Kargatzen...';
-$messages['loadingdata'] = 'Datuak kargatzen...';
-$messages['checkingmail'] = 'Mezu berrien bila arakatzen...';
-$messages['sendingmessage'] = 'Mezua bidaltzen...';
-$messages['messagesent'] = 'Mezua behar bezala bidali da';
-$messages['savingmessage'] = 'Mezua gordetzen...';
-$messages['messagesaved'] = 'Mezua zirriborroetan gordea';
-$messages['successfullysaved'] = 'Behar bezala gorde da';
-$messages['addedsuccessfully'] = 'Txartela behar bezala gehitu da helbide liburura';
-$messages['contactexists'] = 'ePosta honetako txartel bat badago dagoeneko';
-$messages['blockedimages'] = 'Zure pribazitatea mantentzeko urruneko irudiak blokeatu egin dira.';
-$messages['encryptedmessage'] = 'Hau enkriptaturiko mezu bat da eta ezin da bistarazi. Barkatu!';
-$messages['nocontactsfound'] = 'Ez da txartelik aurkitu';
-$messages['sendingfailed'] = 'Huts mezua bidaltzerakoan';
-$messages['errorsaving'] = 'Errore bat gertatu da gordetzerakoan';
-$messages['errormoving'] = 'Ezin da mezua mugitu';
-$messages['errordeleting'] = 'Ezin da mezua ezabatu';
-$messages['deletecontactconfirm'] = 'Benetan hautaturiko kontaktuak ezabatu nahi dituzula?';
-$messages['deletemessagesconfirm'] = 'Benetan hautaturiko mezuak ezabatu nahi dituzula?';
-$messages['deletefolderconfirm'] = 'Benetan Karpeta hau ezabatu nahi duzu?';
-$messages['purgefolderconfirm'] = 'Benetan karpeta honetako mezu guziak ezabatu nahi dituzu?';
-$messages['formincomplete'] = 'Inprimakia ez guztiz bete';
-$messages['noemailwarning'] = 'Mesedez idatzi baliozko eposta helbide bat';
-$messages['nonamewarning'] = 'Mesedez izen bat idatzi';
-$messages['nopagesizewarning'] = 'Mesedez paper tamaina idatzi';
-$messages['norecipientwarning'] = 'Mesedez behintzat hartzaile bat idatzi';
-$messages['nosubjectwarning'] = '"Gaia" eremua hutsik dago. Bat idatzi nahi al duzu?';
-$messages['nobodywarning'] = 'Testu gabeko mezu hau bidali?';
-$messages['notsentwarning'] = 'Mezua ez da bidali. Mezua ezeztatu nahi al duzu?';
-$messages['noldapserver'] = 'Mesedez hautatu bilaketa egiteko LDAP zerbitzari bat';
-$messages['nocontactsreturned'] = 'Ez da kontakturik aurkitu';
-$messages['nosearchname'] = 'Mesedez idatzi kontaktu izen bat edo eposta helbide bat';
-$messages['searchsuccessful'] = '$nr mezu aurkiturik';
-$messages['searchnomatch'] = 'Bilaketak ez du emaitzarik itzuli';
-$messages['searching'] = 'Bilatzen...';
-$messages['checking'] = 'Arakatzen...';
-$messages['nospellerrors'] = 'Ez da ortografia errorerik aurkitu';
-$messages['folderdeleted'] = 'Karpeta behar bezala ezabatu da';
-$messages['deletedsuccessfully'] = 'Behar bezala ezabatu da';
-$messages['converting'] = 'Mezuaren formatua ezabatzen';
-$messages['messageopenerror'] = 'Ezin da zerbitzaritik mezua kargatu';
-$messages['fileuploaderror'] = 'Huts fitxategia eransterakoan';
-$messages['filesizeerror'] = 'Erantsi nahi duzun fitxategian $size tamaina muga gainditzen du';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | language/eu/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Bicyus <bicyus@tenkanet.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Ongietorri Roundcube|Mail-era';
+$labels['username'] = 'Erabiltzailea';
+$labels['password'] = 'Pasahitza';
+$labels['server'] = 'Zerbitzaria';
+$labels['login'] = 'Saio hasiera';
+$labels['logout'] = 'Irten';
+$labels['mail'] = 'ePosta';
+$labels['settings'] = 'Ezarpen Pertsonalak';
+$labels['addressbook'] = 'Helbide Liburua';
+$labels['inbox'] = 'Sarrera';
+$labels['drafts'] = 'Zirriborroak';
+$labels['sent'] = 'Bidalitakoak';
+$labels['trash'] = 'Zakarrontzia';
+$labels['junk'] = 'Zabor-posta';
+$labels['subject'] = 'Gaia';
+$labels['from'] = 'Nork';
+$labels['to'] = 'Nori';
+$labels['cc'] = 'Kopia';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Erantzun-Hona';
+$labels['date'] = 'Data';
+$labels['size'] = 'Tamaina';
+$labels['priority'] = 'Lehentasuna';
+$labels['organization'] = 'Erakundea';
+$labels['reply-to'] = 'Erantzun-Hona';
+$labels['mailboxlist'] = 'Karpetak';
+$labels['messagesfromto'] = '$from -tik $to -ra $count mezuetatik';
+$labels['messagenrof'] = '$nr mezua $count -tik';
+$labels['moveto'] = 'mugitu hona...';
+$labels['download'] = 'deskargatu';
+$labels['filename'] = 'Fitxategi Izena';
+$labels['filesize'] = 'Fitxategi Tamaina';
+$labels['preferhtml'] = 'HTML nahiago';
+$labels['htmlmessage'] = 'HTML Mezua';
+$labels['prettydate'] = 'Data politak';
+$labels['addtoaddressbook'] = 'Helbide liburura gehitu';
+$labels['sun'] = 'Iga';
+$labels['mon'] = 'Al';
+$labels['tue'] = 'As';
+$labels['wed'] = 'Azt';
+$labels['thu'] = 'Og';
+$labels['fri'] = 'Or';
+$labels['sat'] = 'Lar';
+$labels['sunday'] = 'Igandea';
+$labels['monday'] = 'Astelehena';
+$labels['tuesday'] = 'Asteartea';
+$labels['wednesday'] = 'Asteazkena';
+$labels['thursday'] = 'Osteguna';
+$labels['friday'] = 'Ostirala';
+$labels['saturday'] = 'Larunbata';
+$labels['today'] = 'Gaur';
+$labels['checkmail'] = 'Mezu berrien bila arakatu';
+$labels['writenewmessage'] = 'Mezu berri bat sortu';
+$labels['replytomessage'] = 'Mezuari erantzun';
+$labels['replytoallmessage'] = 'Bidaltzaile eta hartzaile guztiei erantzun';
+$labels['forwardmessage'] = 'Mezua Birbidali';
+$labels['deletemessage'] = 'Mezua zakarrontzira mugitu';
+$labels['printmessage'] = 'Mezu hau inprimatu';
+$labels['previousmessage'] = 'Aurreko mezua ikusi';
+$labels['previousmessages'] = 'Aurreko mezuak ikusi';
+$labels['firstmessage'] = 'Lehenengo mezua ikusi';
+$labels['firstmessages'] = 'Lehenengo mezu sorta ikusi';
+$labels['nextmessage'] = 'Hurrengo mezua ikusi';
+$labels['nextmessages'] = 'Hurrengo mezu sorta ikusi';
+$labels['lastmessage'] = 'Azken mezua ikusi';
+$labels['lastmessages'] = 'Azken mezu sorta ikusi';
+$labels['backtolist'] = 'Mezu zerrendara itzuli';
+$labels['viewsource'] = 'Jatorria bistarazi';
+$labels['select'] = 'Hautatu';
+$labels['all'] = 'Denak';
+$labels['none'] = 'Batez';
+$labels['unread'] = 'Irakurri gabeak';
+$labels['compact'] = 'Trinkotu';
+$labels['empty'] = 'Hustu';
+$labels['purge'] = 'Garbitu';
+$labels['quota'] = 'Disko erabilera';
+$labels['unknown'] = 'ezezaguna';
+$labels['unlimited'] = 'mugagabea';
+$labels['quicksearch'] = 'Bilaketa azkarra';
+$labels['resetsearch'] = 'Bilaketa berrabiarazi';
+$labels['compose'] = 'Mezu bat sortu';
+$labels['sendmessage'] = 'Mezua orain bidali';
+$labels['savemessage'] = 'Zirriborro hau gorde';
+$labels['addattachment'] = 'Fitxategia erantsi';
+$labels['charset'] = 'Karaktere jokoa';
+$labels['editortype'] = 'Editore mota';
+$labels['returnreceipt'] = 'Bidaltzaileari itzuli';
+$labels['checkspelling'] = 'Egiaztaketa ortografikoa';
+$labels['resumeediting'] = 'Editatzen jarraitu';
+$labels['revertto'] = 'Itzuli hona';
+$labels['attachments'] = 'Eranskinak';
+$labels['upload'] = 'Igo';
+$labels['close'] = 'Itxi';
+$labels['low'] = 'Baxua';
+$labels['lowest'] = 'Baxuena';
+$labels['normal'] = 'Normala';
+$labels['high'] = 'Altua';
+$labels['highest'] = 'Altuena';
+$labels['nosubject'] = '(gairik gabea)';
+$labels['showimages'] = 'Irudiak bistarazi';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Testu laua';
+$labels['name'] = 'Izena bistarazi';
+$labels['firstname'] = 'Izena';
+$labels['surname'] = 'Abizena';
+$labels['email'] = 'ePosta';
+$labels['addcontact'] = 'Txartel berria gehitu';
+$labels['editcontact'] = 'Txartela editatu';
+$labels['edit'] = 'Editatu';
+$labels['cancel'] = 'Utzi';
+$labels['save'] = 'Gorde';
+$labels['delete'] = 'Ezabatu';
+$labels['newcontact'] = 'Helbide liburu txartel berria sortu';
+$labels['deletecontact'] = 'Aukeraturiko txartelak ezabatu';
+$labels['composeto'] = 'Bidali mezua honi: ';
+$labels['contactsfromto'] = '$from -tik $to -ra $count txarteletatik';
+$labels['print'] = 'Inprimatu';
+$labels['export'] = 'Esportatu';
+$labels['previouspage'] = 'Aurreko sorta ikusi';
+$labels['firstpage'] = 'Lehenengo sorta ikusi';
+$labels['nextpage'] = 'Hurrengo sorta ikusi';
+$labels['lastpage'] = 'Azken sorta ikusi';
+$labels['groups'] = 'Taldeak';
+$labels['personaladrbook'] = 'Helbide pertsonalak';
+$labels['settingsfor'] = 'Honen ezarpenak:';
+$labels['preferences'] = 'Hobespenak';
+$labels['userpreferences'] = 'Erabiltzaile hobespenak';
+$labels['editpreferences'] = 'Erabiltzaile hobespenak editatu';
+$labels['identities'] = 'Identitateak';
+$labels['manageidentities'] = 'Kontu honetako identitateak kudeatu';
+$labels['newidentity'] = 'Identitate berria';
+$labels['newitem'] = 'Elementu berria';
+$labels['edititem'] = 'Elementua Editatu';
+$labels['setdefault'] = 'Lehenespenak ezarri';
+$labels['language'] = 'Hizkuntza';
+$labels['timezone'] = 'Ordu zonaldea';
+$labels['pagesize'] = 'Lerro orrialdeko';
+$labels['signature'] = 'Sinadura';
+$labels['dstactive'] = 'Eguneko gordeketak';
+$labels['htmleditor'] = 'HTML mezuak sortu';
+$labels['htmlsignature'] = 'HTML sinadura';
+$labels['previewpane'] = 'Aurrebista panela ikusi';
+$labels['autosavedraft'] = 'Zirriborroa automatikoki gorde';
+$labels['everynminutes'] = '$n minuturo';
+$labels['never'] = 'inoiz';
+$labels['folder'] = 'Karpeta';
+$labels['folders'] = 'Karpetak';
+$labels['foldername'] = 'Karpeta izena';
+$labels['subscribed'] = 'Harpideturik';
+$labels['create'] = 'Sortu';
+$labels['createfolder'] = 'Karpeta berria sortu';
+$labels['rename'] = 'Berrizendatu';
+$labels['renamefolder'] = 'Karpeta berrizendatu';
+$labels['deletefolder'] = 'Karpeta ezabatu';
+$labels['managefolders'] = 'Karpeta kudeaketa';
+$labels['sortby'] = 'Honela ordenatu';
+$labels['sortasc'] = 'Goraka ordenatu';
+$labels['sortdesc'] = 'Beheraka ordenatu';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | language/eu/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: pi <pi@beobide.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Saio sarrerak huts egin du';
+$messages['cookiesdisabled'] = 'Zure nabigatzaileak ez ditu cookie-ak onartzen';
+$messages['sessionerror'] = 'Zure saioa baliogabea da edo iraungita dago';
+$messages['imaperror'] = 'Huts IMAP zerbitzarira konektatzerakoan';
+$messages['nomessagesfound'] = 'Ez da mezurik aurkitu posta kutxa honetan';
+$messages['loggedout'] = 'Saioa behar bezala amaitu duzu. Agur!';
+$messages['mailboxempty'] = 'Posta kutxa hutsik dago';
+$messages['loading'] = 'Kargatzen...';
+$messages['loadingdata'] = 'Datuak kargatzen...';
+$messages['checkingmail'] = 'Mezu berrien bila arakatzen...';
+$messages['sendingmessage'] = 'Mezua bidaltzen...';
+$messages['messagesent'] = 'Mezua behar bezala bidali da';
+$messages['savingmessage'] = 'Mezua gordetzen...';
+$messages['messagesaved'] = 'Mezua zirriborroetan gordea';
+$messages['successfullysaved'] = 'Behar bezala gorde da';
+$messages['addedsuccessfully'] = 'Txartela behar bezala gehitu da helbide liburura';
+$messages['contactexists'] = 'ePosta honetako txartel bat badago dagoeneko';
+$messages['blockedimages'] = 'Zure pribazitatea mantentzeko urruneko irudiak blokeatu egin dira.';
+$messages['encryptedmessage'] = 'Hau enkriptaturiko mezu bat da eta ezin da bistarazi. Barkatu!';
+$messages['nocontactsfound'] = 'Ez da txartelik aurkitu';
+$messages['sendingfailed'] = 'Huts mezua bidaltzerakoan';
+$messages['errorsaving'] = 'Errore bat gertatu da gordetzerakoan';
+$messages['errormoving'] = 'Ezin da mezua mugitu';
+$messages['errordeleting'] = 'Ezin da mezua ezabatu';
+$messages['deletecontactconfirm'] = 'Benetan hautaturiko kontaktuak ezabatu nahi dituzula?';
+$messages['deletemessagesconfirm'] = 'Benetan hautaturiko mezuak ezabatu nahi dituzula?';
+$messages['deletefolderconfirm'] = 'Benetan Karpeta hau ezabatu nahi duzu?';
+$messages['purgefolderconfirm'] = 'Benetan karpeta honetako mezu guziak ezabatu nahi dituzu?';
+$messages['formincomplete'] = 'Inprimakia ez guztiz bete';
+$messages['noemailwarning'] = 'Mesedez idatzi baliozko eposta helbide bat';
+$messages['nonamewarning'] = 'Mesedez izen bat idatzi';
+$messages['nopagesizewarning'] = 'Mesedez paper tamaina idatzi';
+$messages['norecipientwarning'] = 'Mesedez behintzat hartzaile bat idatzi';
+$messages['nosubjectwarning'] = '"Gaia" eremua hutsik dago. Bat idatzi nahi al duzu?';
+$messages['nobodywarning'] = 'Testu gabeko mezu hau bidali?';
+$messages['notsentwarning'] = 'Mezua ez da bidali. Mezua ezeztatu nahi al duzu?';
+$messages['noldapserver'] = 'Mesedez hautatu bilaketa egiteko LDAP zerbitzari bat';
+$messages['nocontactsreturned'] = 'Ez da kontakturik aurkitu';
+$messages['nosearchname'] = 'Mesedez idatzi kontaktu izen bat edo eposta helbide bat';
+$messages['searchsuccessful'] = '$nr mezu aurkiturik';
+$messages['searchnomatch'] = 'Bilaketak ez du emaitzarik itzuli';
+$messages['searching'] = 'Bilatzen...';
+$messages['checking'] = 'Arakatzen...';
+$messages['nospellerrors'] = 'Ez da ortografia errorerik aurkitu';
+$messages['folderdeleted'] = 'Karpeta behar bezala ezabatu da';
+$messages['deletedsuccessfully'] = 'Behar bezala ezabatu da';
+$messages['converting'] = 'Mezuaren formatua ezabatzen';
+$messages['messageopenerror'] = 'Ezin da zerbitzaritik mezua kargatu';
+$messages['fileuploaderror'] = 'Huts fitxategia eransterakoan';
+$messages['filesizeerror'] = 'Erantsi nahi duzun fitxategian $size tamaina muga gainditzen du';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/fi/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Ville Alatalo <ville@alatalo.org> |
- | Veljo Velling <veve@utu.fi> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Tervetuloa $product -käyttäjäksi';
-$labels['username'] = 'Käyttäjätunnus';
-$labels['password'] = 'Salasana';
-$labels['server'] = 'Palvelin';
-$labels['login'] = 'Kirjaudu';
-$labels['logout'] = 'Kirjaudu ulos';
-$labels['mail'] = 'Sähköposti';
-$labels['settings'] = 'Omat asetukset';
-$labels['addressbook'] = 'Osoitekirja';
-$labels['inbox'] = 'Saapuneet';
-$labels['drafts'] = 'Luonnokset';
-$labels['sent'] = 'Lähetetyt';
-$labels['trash'] = 'Roskakori';
-$labels['junk'] = 'Roskaposti';
-$labels['subject'] = 'Aihe';
-$labels['from'] = 'Lähettäjä';
-$labels['to'] = 'Vastaanottaja';
-$labels['cc'] = 'Kopio';
-$labels['bcc'] = 'Piilokopio';
-$labels['replyto'] = 'Vastaus osoitteeseen';
-$labels['date'] = 'Päiväys';
-$labels['size'] = 'Koko';
-$labels['priority'] = 'Tärkeys';
-$labels['organization'] = 'Organisaatio';
-$labels['reply-to'] = 'Vastaus osoitteeseen';
-$labels['mailboxlist'] = 'Kansiot';
-$labels['messagesfromto'] = 'Viestit $from-$to/$count';
-$labels['messagenrof'] = 'Viesti $nr/$count';
-$labels['moveto'] = 'siirrä kansioon...';
-$labels['download'] = 'lataa';
-$labels['filename'] = 'Tiedoston nimi';
-$labels['filesize'] = 'Tiedoston koko';
-$labels['preferhtml'] = 'Käytä HTML:aa';
-$labels['htmlmessage'] = 'HTML-viesti';
-$labels['prettydate'] = 'Nätit päiväykset';
-$labels['addtoaddressbook'] = 'Lisää osoitekirjaan';
-$labels['sun'] = 'Su';
-$labels['mon'] = 'Ma';
-$labels['tue'] = 'Ti';
-$labels['wed'] = 'Ke';
-$labels['thu'] = 'To';
-$labels['fri'] = 'Pe';
-$labels['sat'] = 'La';
-$labels['sunday'] = 'Sunnuntai';
-$labels['monday'] = 'Maanantai';
-$labels['tuesday'] = 'Tiistai';
-$labels['wednesday'] = 'Keskiviikko';
-$labels['thursday'] = 'Torstai';
-$labels['friday'] = 'Perjantai';
-$labels['saturday'] = 'Lauantai';
-$labels['today'] = 'Tänään';
-$labels['checkmail'] = 'Tarkista saapuneet viestit';
-$labels['writenewmessage'] = 'Kirjoita uusi viesti';
-$labels['replytomessage'] = 'Vastaa viestiin';
-$labels['replytoallmessage'] = 'Vastaa kaikille';
-$labels['forwardmessage'] = 'Välitä viesti';
-$labels['deletemessage'] = 'Poista viesti';
-$labels['movemessagetotrash'] = 'Siirrä viesti roskakoriin';
-$labels['printmessage'] = 'Tulosta viesti';
-$labels['previousmessage'] = 'Näytä edellinen viesti';
-$labels['previousmessages'] = 'Näytä edelliset viestit';
-$labels['firstmessage'] = 'Näytä ensimmäinen viesti';
-$labels['firstmessages'] = 'Näytä ensimmäinen viestiluettelo';
-$labels['nextmessage'] = 'Näytä edellinen viesti';
-$labels['nextmessages'] = 'Näytä seuraavat viestit';
-$labels['lastmessage'] = 'Näytä viimeinen viesti';
-$labels['lastmessages'] = 'Näytä viimeinen viestiluettelo';
-$labels['backtolist'] = 'Takaisin viesteihin';
-$labels['viewsource'] = 'Näytä lähdekoodi';
-$labels['markmessages'] = 'Merkitse viestit';
-$labels['markread'] = 'luetuiksi';
-$labels['markunread'] = 'ei-luetuiksi';
-$labels['select'] = 'Valitse';
-$labels['all'] = 'Kaikki';
-$labels['none'] = 'Ei mitään';
-$labels['unread'] = 'Lukemattomat';
-$labels['compact'] = 'Tiivistä';
-$labels['empty'] = 'Tyhjennä';
-$labels['purge'] = 'Puhdista';
-$labels['quota'] = 'Levytila';
-$labels['unknown'] = 'tuntematon';
-$labels['unlimited'] = 'rajoittamaton';
-$labels['quicksearch'] = 'Pikahaku';
-$labels['resetsearch'] = 'Nollaa haku';
-$labels['compose'] = 'Viestin kirjoitus';
-$labels['savemessage'] = 'Tallenna tämä luonnos';
-$labels['sendmessage'] = 'Lähetä viesti';
-$labels['addattachment'] = 'Liitetiedosto';
-$labels['charset'] = 'Merkistö';
-$labels['editortype'] = 'Editorin tyyppi';
-$labels['returnreceipt'] = 'Perillesaapumisilmoitus';
-$labels['checkspelling'] = 'Tarkista oikeinkirjoitus';
-$labels['resumeediting'] = 'Jatka muokkausta';
-$labels['revertto'] = 'Muuta takaisin';
-$labels['attachments'] = 'Liitetiedostot';
-$labels['upload'] = 'Lisää';
-$labels['close'] = 'Sulje';
-$labels['low'] = 'Matala';
-$labels['lowest'] = 'Matalin';
-$labels['normal'] = 'Normaali';
-$labels['high'] = 'Korkea';
-$labels['highest'] = 'Korkein';
-$labels['nosubject'] = '(ei otsikkoa)';
-$labels['showimages'] = 'Näytä kuvat';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Tavallinen teksti';
-$labels['addcc'] = 'Lisää kopio';
-$labels['addbcc'] = 'Lisää piilokopio';
-$labels['addreplyto'] = 'Lisää vastausosoite';
-$labels['mdnrequest'] = 'Viestin lähettäjä on pyytänyt kuittauksen siitä että olet lukenut viestin. Haluatko lähettää kuittauksen?';
-$labels['receiptread'] = 'Lukukuittaus';
-$labels['yourmessage'] = 'Tämä viesti on kuittaus lähettämällesi viestille';
-$labels['receiptnote'] = 'Huom! Kuittaus kertoo vain siitä, että viesti on avattu vastaanottajan tietokoneella. Se ei tarkoita että vastaanottaja on myös lukenut tai ymmärtänyt viestin.';
-$labels['name'] = 'Näkyvä nimi';
-$labels['firstname'] = 'Etunimi';
-$labels['surname'] = 'Sukunimi';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Lisää valittu kontakti osoitekirjaan';
-$labels['editcontact'] = 'Muokkaa kontaktia';
-$labels['edit'] = 'Muokkaa';
-$labels['cancel'] = 'Peruuta';
-$labels['save'] = 'Tallenna';
-$labels['delete'] = 'Poista';
-$labels['newcontact'] = 'Luo uusi kontakti';
-$labels['deletecontact'] = 'Poista valitut kontaktit';
-$labels['composeto'] = 'Kirjoita viesti kontaktille';
-$labels['contactsfromto'] = 'Kontaktit $from-$to/$count';
-$labels['print'] = 'Tulosta';
-$labels['export'] = 'Vie (export)';
-$labels['previouspage'] = 'Näytä edellinen luettelo';
-$labels['firstpage'] = 'Näytä ensimmäinen luettelo';
-$labels['nextpage'] = 'Näytä seuraava luettelo';
-$labels['lastpage'] = 'Näytä viimeinen luettelo';
-$labels['groups'] = 'Ryhmät';
-$labels['personaladrbook'] = 'Hensilökohtaiset osoitteet';
-$labels['settingsfor'] = 'Asetukset';
-$labels['preferences'] = 'Asetukset';
-$labels['userpreferences'] = 'Käyttäjän asetukset';
-$labels['editpreferences'] = 'Muokkaa käyttäjän asetuksia';
-$labels['identities'] = 'Identiteetit';
-$labels['manageidentities'] = 'Muokkaa tunnuksen identiteettejä';
-$labels['newidentity'] = 'Uusi identiteetti';
-$labels['newitem'] = 'Uusi';
-$labels['edititem'] = 'Muokkaa';
-$labels['setdefault'] = 'Aseta vakioksi';
-$labels['language'] = 'Kieli';
-$labels['timezone'] = 'Aikavyöhyke';
-$labels['pagesize'] = 'Rivejä sivulla';
-$labels['signature'] = 'Allekirjoitus';
-$labels['dstactive'] = 'Kesäaika';
-$labels['htmleditor'] = 'Kirjoita HTML-muodossa';
-$labels['htmlsignature'] = 'HTML-allekirjoitus';
-$labels['previewpane'] = 'Näytä esikatselulehti';
-$labels['autosavedraft'] = 'Tallenna luonnos automaattisesti';
-$labels['everynminutes'] = '$n minuutin välein';
-$labels['never'] = 'ei koskaan';
-$labels['folder'] = 'Kansio';
-$labels['folders'] = 'Kansiot';
-$labels['foldername'] = 'Kansion nimi';
-$labels['subscribed'] = 'Näytetään';
-$labels['messagecount'] = 'Viestejä';
-$labels['create'] = 'Luo uusi';
-$labels['createfolder'] = 'Luo uusi kansio';
-$labels['rename'] = 'Nimeä uudelleen';
-$labels['renamefolder'] = 'Nimeä kansio uudelleen';
-$labels['deletefolder'] = 'Poista kansio';
-$labels['managefolders'] = 'Kansioiden ylläpito';
-$labels['sortby'] = 'Järjestä';
-$labels['sortasc'] = 'Järjestä nousevasti (a-ö)';
-$labels['sortdesc'] = 'Järjestä laskevasti (ö-a)';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/fi/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Ville Alatalo <ville@alatalo.org> |
- | Veljo Velling <veve@utu.fi> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1151 2008-02-28 19:56:47Z thomasb $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Sisäänkirjautuminen epäonnistui';
-$messages['cookiesdisabled'] = 'Selaimesi ei hyväksy evästeitä';
-$messages['sessionerror'] = 'Sessio ei kelpaa tai ei ole enää voimassa';
-$messages['imaperror'] = 'Yhteys IMAP-palvelimeen epäonnistui';
-$messages['nomessagesfound'] = 'Kansiossa ei ole sähköpostiviestejä';
-$messages['loggedout'] = 'Sinut on kirjattu ulos järjestelmästä.';
-$messages['mailboxempty'] = 'Kansio on tyhjä';
-$messages['loading'] = 'Ladataan...';
-$messages['loadingdata'] = 'Ladataan tietoja...';
-$messages['checkingmail'] = 'Tarkistetaan saapuneita viestejä...';
-$messages['sendingmessage'] = 'Lähetetään viestiä...';
-$messages['messagesent'] = 'Viesti lähetetty';
-$messages['savingmessage'] = 'Tallennetaan viestiä...';
-$messages['messagesaved'] = 'Viesti tallennettu "Luonnokset" -kansioon';
-$messages['successfullysaved'] = 'Tallennus onnistui';
-$messages['addedsuccessfully'] = 'Kontakti lisätty osoitekirjaan';
-$messages['contactexists'] = 'Samalla sähköpostiosoitteella on jo olemassa kontakti';
-$messages['blockedimages'] = 'Turvallisuussyistä viestin kuvia ei näytetty.';
-$messages['encryptedmessage'] = 'Viesti on salattu, eikä sitä voida näyttää.';
-$messages['nocontactsfound'] = 'Ei kontakteja';
-$messages['contactnotfound'] = 'Pyydettyä yhteystietoa ei löytynyt';
-$messages['sendingfailed'] = 'Viestin lähetys epäonnistui';
-$messages['errorsaving'] = 'Tallennuksessa tapahtui virhe';
-$messages['errormoving'] = 'Viestiä ei voitu siirtää';
-$messages['errordeleting'] = 'Viestiä ei voitu poistaa';
-$messages['deletecontactconfirm'] = 'Haluatko varmasti poistaa valitut kontaktit?';
-$messages['deletemessagesconfirm'] = 'Haluatko varmasti poistaa valitut viestit?';
-$messages['deletefolderconfirm'] = 'Haluatko varmasti poistaa kansion?';
-$messages['purgefolderconfirm'] = 'Haluatko varmasti poistaa kaikki viestit kansiosta?';
-$messages['formincomplete'] = 'Lomakkeen tiedot olivat puutteelliset';
-$messages['noemailwarning'] = 'Anna sähköpostiosoite';
-$messages['nonamewarning'] = 'Anna nimi';
-$messages['nopagesizewarning'] = 'Anna sivukoko';
-$messages['norecipientwarning'] = 'Anna ainakin yksi vastaanottaja';
-$messages['nosubjectwarning'] = '"Otsikko" -kenttä on tyhjä. Haluaisitko kirjoittaa viestillesi otsikon?';
-$messages['nobodywarning'] = 'Lähetetäänkö viesti ilman tekstiä?';
-$messages['notsentwarning'] = 'Viestiä ei lähethttp://translator.roundcube.net/index.phpetty. Haluatko poistaa viestin?';
-$messages['noldapserver'] = 'Valitse LDAP -palvelin';
-$messages['nocontactsreturned'] = 'Yhtään kontaktia ei löytynyt';
-$messages['nosearchname'] = 'Anna kontaktin nimi tai sähköpostiosoite';
-$messages['searchsuccessful'] = 'Löydetty $nr viestiä';
-$messages['searchnomatch'] = 'Haku ei tuottanut tuloksia';
-$messages['searching'] = 'Etsitään...';
-$messages['checking'] = 'Tarkistetaan...';
-$messages['nospellerrors'] = 'Kirjoitusvirheitä ei löytynyt';
-$messages['folderdeleted'] = 'Kansio poistettu onnistuneesti';
-$messages['deletedsuccessfully'] = 'Poistettu onnistuneesti';
-$messages['converting'] = 'Poistetaan asettelu viestistä...';
-$messages['messageopenerror'] = 'Virhe kopioitaessa viestiä palvelimelta';
-$messages['fileuploaderror'] = 'Tiedoston lähettäminen epäonnistui';
-$messages['filesizeerror'] = 'Lähetettävä tiedosto ylittää sallitun enimmäiskoon $size';
-$messages['copysuccess'] = 'Kopioitu $nr osoitetta onnistuneesti';
-$messages['copyerror'] = 'Yhtään osoitetta ei voitu kopioida';
-$messages['sourceisreadonly'] = 'Tämän osoitteen lähde on kirjoitussuojattu';
-$messages['errorsavingcontact'] = 'Yhteystietoa ei voitu tallentaa';
-$messages['movingmessage'] = 'Siirretään viestiä...';
-$messages['receiptsent'] = 'Lukukuittaus lähetetty onnistuneesti';
-$messages['errorsendingreceipt'] = 'Lukukuittausta ei voitu lähettää';
-$messages['nodeletelastidentity'] = 'Et voi poistaa tätä identiteettiä, koska se on ainoa jäljelläoleva';
-$messages['addsubfolderhint'] = 'Uusi kansio luodaan valitun kansion alikansiona';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/fi/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Ville Alatalo <ville@alatalo.org> |
+| Veljo Velling <veve@utu.fi> |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 1462 2008-06-01 15:40:16Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Tervetuloa $product -käyttäjäksi';
+$labels['username'] = 'Käyttäjätunnus';
+$labels['password'] = 'Salasana';
+$labels['server'] = 'Palvelin';
+$labels['login'] = 'Kirjaudu';
+$labels['logout'] = 'Kirjaudu ulos';
+$labels['mail'] = 'Sähköposti';
+$labels['settings'] = 'Omat asetukset';
+$labels['addressbook'] = 'Osoitekirja';
+$labels['inbox'] = 'Saapuneet';
+$labels['drafts'] = 'Luonnokset';
+$labels['sent'] = 'Lähetetyt';
+$labels['trash'] = 'Roskakori';
+$labels['junk'] = 'Roskaposti';
+$labels['subject'] = 'Aihe';
+$labels['from'] = 'Lähettäjä';
+$labels['to'] = 'Vastaanottaja';
+$labels['cc'] = 'Kopio';
+$labels['bcc'] = 'Piilokopio';
+$labels['replyto'] = 'Vastaus osoitteeseen';
+$labels['date'] = 'Päiväys';
+$labels['size'] = 'Koko';
+$labels['priority'] = 'Tärkeys';
+$labels['organization'] = 'Organisaatio';
+$labels['reply-to'] = 'Vastaus osoitteeseen';
+$labels['mailboxlist'] = 'Kansiot';
+$labels['messagesfromto'] = 'Viestit $from-$to/$count';
+$labels['messagenrof'] = 'Viesti $nr/$count';
+$labels['moveto'] = 'siirrä kansioon...';
+$labels['download'] = 'lataa';
+$labels['filename'] = 'Tiedoston nimi';
+$labels['filesize'] = 'Tiedoston koko';
+$labels['preferhtml'] = 'Käytä HTML:aa';
+$labels['htmlmessage'] = 'HTML-viesti';
+$labels['prettydate'] = 'Nätit päiväykset';
+$labels['addtoaddressbook'] = 'Lisää osoitekirjaan';
+$labels['sun'] = 'Su';
+$labels['mon'] = 'Ma';
+$labels['tue'] = 'Ti';
+$labels['wed'] = 'Ke';
+$labels['thu'] = 'To';
+$labels['fri'] = 'Pe';
+$labels['sat'] = 'La';
+$labels['sunday'] = 'Sunnuntai';
+$labels['monday'] = 'Maanantai';
+$labels['tuesday'] = 'Tiistai';
+$labels['wednesday'] = 'Keskiviikko';
+$labels['thursday'] = 'Torstai';
+$labels['friday'] = 'Perjantai';
+$labels['saturday'] = 'Lauantai';
+$labels['jan'] = 'Tammi';
+$labels['feb'] = 'Helmi';
+$labels['mar'] = 'Maalis';
+$labels['apr'] = 'Huhti';
+$labels['may'] = 'Touko';
+$labels['jun'] = 'Kesä';
+$labels['jul'] = 'Heinä';
+$labels['aug'] = 'Elo';
+$labels['sep'] = 'Syys';
+$labels['oct'] = 'Loka';
+$labels['nov'] = 'Marras';
+$labels['dec'] = 'Joulu';
+$labels['longjan'] = 'Tammikuu';
+$labels['longfeb'] = 'Helmikuu';
+$labels['longmar'] = 'Maaliskuu';
+$labels['longapr'] = 'Huhtikuu';
+$labels['longmay'] = 'Toukokuu';
+$labels['longjun'] = 'Kesäkuu';
+$labels['longjul'] = 'Heinäkuu';
+$labels['longaug'] = 'Elokuu';
+$labels['longsep'] = 'Syyskuu';
+$labels['longoct'] = 'Lokakuu';
+$labels['longnov'] = 'Marraskuu';
+$labels['longdec'] = 'Joulukuu';
+$labels['today'] = 'Tänään';
+$labels['checkmail'] = 'Tarkista saapuneet viestit';
+$labels['writenewmessage'] = 'Kirjoita uusi viesti';
+$labels['replytomessage'] = 'Vastaa viestiin';
+$labels['replytoallmessage'] = 'Vastaa kaikille';
+$labels['forwardmessage'] = 'Välitä viesti';
+$labels['deletemessage'] = 'Poista viesti';
+$labels['movemessagetotrash'] = 'Siirrä viesti roskakoriin';
+$labels['printmessage'] = 'Tulosta viesti';
+$labels['previousmessage'] = 'Näytä edellinen viesti';
+$labels['previousmessages'] = 'Näytä edelliset viestit';
+$labels['firstmessage'] = 'Näytä ensimmäinen viesti';
+$labels['firstmessages'] = 'Näytä ensimmäinen viestiluettelo';
+$labels['nextmessage'] = 'Näytä edellinen viesti';
+$labels['nextmessages'] = 'Näytä seuraavat viestit';
+$labels['lastmessage'] = 'Näytä viimeinen viesti';
+$labels['lastmessages'] = 'Näytä viimeinen viestiluettelo';
+$labels['backtolist'] = 'Takaisin viesteihin';
+$labels['viewsource'] = 'Näytä lähdekoodi';
+$labels['markmessages'] = 'Merkitse viestit';
+$labels['markread'] = 'luetuiksi';
+$labels['markunread'] = 'ei-luetuiksi';
+$labels['select'] = 'Valitse';
+$labels['all'] = 'Kaikki';
+$labels['none'] = 'Ei mitään';
+$labels['unread'] = 'Lukemattomat';
+$labels['compact'] = 'Tiivistä';
+$labels['empty'] = 'Tyhjennä';
+$labels['purge'] = 'Puhdista';
+$labels['quota'] = 'Levytila';
+$labels['unknown'] = 'tuntematon';
+$labels['unlimited'] = 'rajoittamaton';
+$labels['quicksearch'] = 'Pikahaku';
+$labels['resetsearch'] = 'Nollaa haku';
+$labels['compose'] = 'Viestin kirjoitus';
+$labels['savemessage'] = 'Tallenna tämä luonnos';
+$labels['sendmessage'] = 'Lähetä viesti';
+$labels['addattachment'] = 'Liitetiedosto';
+$labels['charset'] = 'Merkistö';
+$labels['editortype'] = 'Editorin tyyppi';
+$labels['returnreceipt'] = 'Perillesaapumisilmoitus';
+$labels['checkspelling'] = 'Tarkista oikeinkirjoitus';
+$labels['resumeediting'] = 'Jatka muokkausta';
+$labels['revertto'] = 'Muuta takaisin';
+$labels['attachments'] = 'Liitetiedostot';
+$labels['upload'] = 'Lisää';
+$labels['close'] = 'Sulje';
+$labels['low'] = 'Matala';
+$labels['lowest'] = 'Matalin';
+$labels['normal'] = 'Normaali';
+$labels['high'] = 'Korkea';
+$labels['highest'] = 'Korkein';
+$labels['nosubject'] = '(ei otsikkoa)';
+$labels['showimages'] = 'Näytä kuvat';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Tavallinen teksti';
+$labels['addcc'] = 'Lisää kopio';
+$labels['addbcc'] = 'Lisää piilokopio';
+$labels['addreplyto'] = 'Lisää vastausosoite';
+$labels['mdnrequest'] = 'Viestin lähettäjä on pyytänyt kuittauksen siitä että olet lukenut viestin. Haluatko lähettää kuittauksen?';
+$labels['receiptread'] = 'Lukukuittaus';
+$labels['yourmessage'] = 'Tämä viesti on kuittaus lähettämällesi viestille';
+$labels['receiptnote'] = 'Huom! Kuittaus tarkoittaa vain sitä, että viesti on avattu vastaanottajan tietokoneella. Se ei tarkoita että vastaanottaja on myös lukenut tai ymmärtänyt viestin.';
+$labels['name'] = 'Näkyvä nimi';
+$labels['firstname'] = 'Etunimi';
+$labels['surname'] = 'Sukunimi';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Lisää valittu kontakti osoitekirjaan';
+$labels['editcontact'] = 'Muokkaa kontaktia';
+$labels['edit'] = 'Muokkaa';
+$labels['cancel'] = 'Peruuta';
+$labels['save'] = 'Tallenna';
+$labels['delete'] = 'Poista';
+$labels['newcontact'] = 'Luo uusi kontakti';
+$labels['deletecontact'] = 'Poista valitut kontaktit';
+$labels['composeto'] = 'Kirjoita viesti kontaktille';
+$labels['contactsfromto'] = 'Kontaktit $from-$to/$count';
+$labels['print'] = 'Tulosta';
+$labels['export'] = 'Vie (export)';
+$labels['previouspage'] = 'Näytä edellinen luettelo';
+$labels['firstpage'] = 'Näytä ensimmäinen luettelo';
+$labels['nextpage'] = 'Näytä seuraava luettelo';
+$labels['lastpage'] = 'Näytä viimeinen luettelo';
+$labels['groups'] = 'Ryhmät';
+$labels['personaladrbook'] = 'Hensilökohtaiset osoitteet';
+$labels['settingsfor'] = 'Asetukset';
+$labels['preferences'] = 'Asetukset';
+$labels['userpreferences'] = 'Käyttäjän asetukset';
+$labels['editpreferences'] = 'Muokkaa käyttäjän asetuksia';
+$labels['identities'] = 'Identiteetit';
+$labels['manageidentities'] = 'Muokkaa tunnuksen identiteettejä';
+$labels['newidentity'] = 'Uusi identiteetti';
+$labels['newitem'] = 'Uusi';
+$labels['edititem'] = 'Muokkaa';
+$labels['setdefault'] = 'Aseta vakioksi';
+$labels['language'] = 'Kieli';
+$labels['timezone'] = 'Aikavyöhyke';
+$labels['pagesize'] = 'Rivejä sivulla';
+$labels['signature'] = 'Allekirjoitus';
+$labels['dstactive'] = 'Kesäaika';
+$labels['htmleditor'] = 'Kirjoita HTML-muodossa';
+$labels['htmlsignature'] = 'HTML-allekirjoitus';
+$labels['previewpane'] = 'Näytä esikatselulehti';
+$labels['logoutclear'] = 'Tyhjennä roskakori ulos kirjautuessa';
+$labels['logoutcompact'] = 'Tiivistä kansiot ulos kirjautuessa';
+$labels['uisettings'] = 'Käyttöliittymä';
+$labels['serversettings'] = 'Palvelinasetukset';
+$labels['mailboxview'] = 'Postilaatikkonäkymä';
+$labels['mdnrequests'] = 'Lähettäjän kuittaukset';
+$labels['askuser'] = 'kysy käyttäjältä';
+$labels['autosend'] = 'lähetä automaattisesti';
+$labels['ignore'] = 'jätä huomiotta';
+$labels['readwhendeleted'] = 'Merkitse poistettavat viestit luetuiksi';
+$labels['flagfordeletion'] = 'Poistamisen sijaan, merkitse viestit poistettavaksi';
+$labels['autosavedraft'] = 'Tallenna luonnos automaattisesti';
+$labels['everynminutes'] = '$n minuutin välein';
+$labels['never'] = 'ei koskaan';
+$labels['folder'] = 'Kansio';
+$labels['folders'] = 'Kansiot';
+$labels['foldername'] = 'Kansion nimi';
+$labels['subscribed'] = 'Näytetään';
+$labels['messagecount'] = 'Viestejä';
+$labels['create'] = 'Luo uusi';
+$labels['createfolder'] = 'Luo uusi kansio';
+$labels['rename'] = 'Nimeä uudelleen';
+$labels['renamefolder'] = 'Nimeä kansio uudelleen';
+$labels['deletefolder'] = 'Poista kansio';
+$labels['managefolders'] = 'Kansioiden ylläpito';
+$labels['sortby'] = 'Järjestä';
+$labels['sortasc'] = 'Järjestä nousevasti (a-ö)';
+$labels['sortdesc'] = 'Järjestä laskevasti (ö-a)';
+
+?>
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/fi/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Ville Alatalo <ville@alatalo.org> |
+| Veljo Velling <veve@utu.fi> |
++-----------------------------------------------------------------------+
+
+@version $Id: messages.inc 1462 2008-06-01 15:40:16Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Sisäänkirjautuminen epäonnistui';
+$messages['cookiesdisabled'] = 'Selaimesi ei hyväksy evästeitä';
+$messages['sessionerror'] = 'Sessio ei kelpaa tai ei ole enää voimassa';
+$messages['imaperror'] = 'Yhteys IMAP-palvelimeen epäonnistui';
+$messages['nomessagesfound'] = 'Kansiossa ei ole sähköpostiviestejä';
+$messages['loggedout'] = 'Sinut on kirjattu ulos järjestelmästä.';
+$messages['mailboxempty'] = 'Kansio on tyhjä';
+$messages['loading'] = 'Ladataan...';
+$messages['loadingdata'] = 'Ladataan tietoja...';
+$messages['checkingmail'] = 'Tarkistetaan saapuneita viestejä...';
+$messages['sendingmessage'] = 'Lähetetään viestiä...';
+$messages['messagesent'] = 'Viesti lähetetty';
+$messages['savingmessage'] = 'Tallennetaan viestiä...';
+$messages['messagesaved'] = 'Viesti tallennettu "Luonnokset" -kansioon';
+$messages['successfullysaved'] = 'Tallennus onnistui';
+$messages['addedsuccessfully'] = 'Kontakti lisätty osoitekirjaan';
+$messages['contactexists'] = 'Samalla sähköpostiosoitteella on jo olemassa kontakti';
+$messages['blockedimages'] = 'Turvallisuussyistä viestin kuvia ei näytetty.';
+$messages['encryptedmessage'] = 'Viesti on salattu, eikä sitä voida näyttää.';
+$messages['nocontactsfound'] = 'Ei kontakteja';
+$messages['contactnotfound'] = 'Pyydettyä yhteystietoa ei löytynyt';
+$messages['sendingfailed'] = 'Viestin lähetys epäonnistui';
+$messages['errorsaving'] = 'Tallennuksessa tapahtui virhe';
+$messages['errormoving'] = 'Viestiä ei voitu siirtää';
+$messages['errordeleting'] = 'Viestiä ei voitu poistaa';
+$messages['deletecontactconfirm'] = 'Haluatko varmasti poistaa valitut kontaktit?';
+$messages['deletemessagesconfirm'] = 'Haluatko varmasti poistaa valitut viestit?';
+$messages['deletefolderconfirm'] = 'Haluatko varmasti poistaa kansion?';
+$messages['purgefolderconfirm'] = 'Haluatko varmasti poistaa kaikki viestit kansiosta?';
+$messages['formincomplete'] = 'Lomakkeen tiedot olivat puutteelliset';
+$messages['noemailwarning'] = 'Anna sähköpostiosoite';
+$messages['nonamewarning'] = 'Anna nimi';
+$messages['nopagesizewarning'] = 'Anna sivukoko';
+$messages['norecipientwarning'] = 'Anna ainakin yksi vastaanottaja';
+$messages['nosubjectwarning'] = '"Otsikko" -kenttä on tyhjä. Haluaisitko kirjoittaa viestillesi otsikon?';
+$messages['nobodywarning'] = 'Lähetetäänkö viesti ilman tekstiä?';
+$messages['notsentwarning'] = 'Viestiä ei lähethttp://translator.roundcube.net/index.phpetty. Haluatko poistaa viestin?';
+$messages['noldapserver'] = 'Valitse LDAP -palvelin';
+$messages['nocontactsreturned'] = 'Yhtään kontaktia ei löytynyt';
+$messages['nosearchname'] = 'Anna kontaktin nimi tai sähköpostiosoite';
+$messages['searchsuccessful'] = 'Löydetty $nr viestiä';
+$messages['searchnomatch'] = 'Haku ei tuottanut tuloksia';
+$messages['searching'] = 'Etsitään...';
+$messages['checking'] = 'Tarkistetaan...';
+$messages['nospellerrors'] = 'Kirjoitusvirheitä ei löytynyt';
+$messages['folderdeleted'] = 'Kansio poistettu onnistuneesti';
+$messages['deletedsuccessfully'] = 'Poistettu onnistuneesti';
+$messages['converting'] = 'Poistetaan asettelu viestistä...';
+$messages['messageopenerror'] = 'Virhe kopioitaessa viestiä palvelimelta';
+$messages['fileuploaderror'] = 'Tiedoston lähettäminen epäonnistui';
+$messages['filesizeerror'] = 'Lähetettävä tiedosto ylittää sallitun enimmäiskoon $size';
+$messages['copysuccess'] = 'Kopioitu $nr osoitetta onnistuneesti';
+$messages['copyerror'] = 'Yhtään osoitetta ei voitu kopioida';
+$messages['sourceisreadonly'] = 'Tämän osoitteen lähde on kirjoitussuojattu';
+$messages['errorsavingcontact'] = 'Yhteystietoa ei voitu tallentaa';
+$messages['movingmessage'] = 'Siirretään viestiä...';
+$messages['receiptsent'] = 'Lukukuittaus lähetetty onnistuneesti';
+$messages['errorsendingreceipt'] = 'Lukukuittausta ei voitu lähettää';
+$messages['nodeletelastidentity'] = 'Et voi poistaa tätä identiteettiä, koska se on ainoa jäljelläoleva';
+$messages['addsubfolderhint'] = 'Uusi kansio luodaan valitun kansion alikansiona';
+$messages['forbiddencharacter'] = 'Kansion nimessä on kiellettyjä merkkejä';
+
+?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/fr/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Joel S. <joel.s@spijoprod.net> |
- | Jerome Lipowicz <jerome@yayel.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Bienvenue sur $product';
-$labels['username'] = 'Utilisateur';
-$labels['password'] = 'Mot de passe';
-$labels['server'] = 'Serveur';
-$labels['login'] = 'Authentification';
-$labels['logout'] = 'Quitter';
-$labels['mail'] = 'Courriel';
-$labels['settings'] = 'Préférences';
-$labels['addressbook'] = 'Carnet d\'adresses';
-$labels['inbox'] = 'Messages reçus';
-$labels['drafts'] = 'Brouillons';
-$labels['sent'] = 'Messages envoyés';
-$labels['trash'] = 'Corbeille';
-$labels['junk'] = 'Indésirables';
-$labels['subject'] = 'Objet';
-$labels['from'] = 'De';
-$labels['to'] = 'À';
-$labels['cc'] = 'Cc';
-$labels['bcc'] = 'Cci';
-$labels['replyto'] = 'Répondre à';
-$labels['date'] = 'Date';
-$labels['size'] = 'Taille';
-$labels['priority'] = 'Priorité';
-$labels['organization'] = 'Organisation';
-$labels['reply-to'] = 'Répondre à';
-$labels['mailboxlist'] = 'Dossiers';
-$labels['messagesfromto'] = 'Messages de $from à $to sur $count';
-$labels['messagenrof'] = 'Message $nr sur $count';
-$labels['moveto'] = 'Déplacer vers...';
-$labels['download'] = 'Télécharger';
-$labels['filename'] = 'Nom du fichier';
-$labels['filesize'] = 'Taille du fichier';
-$labels['preferhtml'] = 'Afficher en HTML';
-$labels['htmlmessage'] = 'Message en HTML';
-$labels['prettydate'] = 'Affichage court des dates';
-$labels['addtoaddressbook'] = 'Ajouter au carnet d\'adresses';
-$labels['sun'] = 'Dim';
-$labels['mon'] = 'Lun';
-$labels['tue'] = 'Mar';
-$labels['wed'] = 'Mer';
-$labels['thu'] = 'Jeu';
-$labels['fri'] = 'Ven';
-$labels['sat'] = 'Sam';
-$labels['sunday'] = 'Dimanche';
-$labels['monday'] = 'Lundi';
-$labels['tuesday'] = 'Mardi';
-$labels['wednesday'] = 'Mercredi';
-$labels['thursday'] = 'Jeudi';
-$labels['friday'] = 'Vendredi';
-$labels['saturday'] = 'Samedi';
-$labels['today'] = 'Aujourd\'hui';
-$labels['checkmail'] = 'Vérification des nouveaux messages';
-$labels['writenewmessage'] = 'Écrire un nouveau message';
-$labels['replytomessage'] = 'Répondre au message';
-$labels['replytoallmessage'] = 'Répondre à tous';
-$labels['forwardmessage'] = 'Transmettre le message';
-$labels['deletemessage'] = 'Déplacer le message dans la corbeille';
-$labels['movemessagetotrash'] = 'Déplacer le message dans la corbeille';
-$labels['printmessage'] = 'Imprimer ce message';
-$labels['previousmessage'] = 'Voir le message précédent';
-$labels['previousmessages'] = 'Voir les messages précédents';
-$labels['firstmessage'] = 'Voir le premier message';
-$labels['firstmessages'] = 'Voir la première page de messages';
-$labels['nextmessage'] = 'Voir le message suivant';
-$labels['nextmessages'] = 'Voir les messages suivants';
-$labels['lastmessage'] = 'Voir le dernier message';
-$labels['lastmessages'] = 'Voir la dernière page de messages';
-$labels['backtolist'] = 'Retourner à la liste des messages';
-$labels['viewsource'] = 'Voir le source';
-$labels['markmessages'] = 'Marquer les messages';
-$labels['markread'] = 'Comme lus';
-$labels['markunread'] = 'Comme non lus';
-$labels['select'] = 'Sélectionner';
-$labels['all'] = 'Tous';
-$labels['none'] = 'Aucun';
-$labels['unread'] = 'Non lus';
-$labels['compact'] = 'Compacter';
-$labels['empty'] = 'Vider';
-$labels['purge'] = 'Purger';
-$labels['quota'] = 'Utilisation disque';
-$labels['unknown'] = 'inconnue';
-$labels['unlimited'] = 'illimitée';
-$labels['quicksearch'] = 'Recherche rapide';
-$labels['resetsearch'] = 'Réinitialiser la recherche';
-$labels['compose'] = 'Composer un nouveau message';
-$labels['savemessage'] = 'Sauvegarder ce brouillon';
-$labels['sendmessage'] = 'Envoyer le message maintenant';
-$labels['addattachment'] = 'Joindre un fichier';
-$labels['charset'] = 'Encodage';
-$labels['editortype'] = 'Type d\'éditeur';
-$labels['returnreceipt'] = 'Accusé de réception';
-$labels['checkspelling'] = 'Vérifier l\'orthographe';
-$labels['resumeediting'] = 'Retourner à l\'édition';
-$labels['revertto'] = 'Revenir à';
-$labels['attachments'] = 'Fichiers joints';
-$labels['upload'] = 'Joindre';
-$labels['close'] = 'Fermer';
-$labels['low'] = 'Basse';
-$labels['lowest'] = 'La plus basse';
-$labels['normal'] = 'Normale';
-$labels['high'] = 'Élevée';
-$labels['highest'] = 'La plus élevée';
-$labels['nosubject'] = '(pas de sujet)';
-$labels['showimages'] = 'Afficher les images';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'texte brut';
-$labels['addcc'] = 'Ajouter Cc';
-$labels['addbcc'] = 'Ajouter Cci';
-$labels['addreplyto'] = 'Ajouter Répondre à';
-$labels['mdnrequest'] = 'L\'expéditeur de ce message a demandé d\'être prévenu quand vous lirez ce message. Souhaitez-vous prévenir l\'expéditeur ?';
-$labels['receiptread'] = 'Accusé de réception (lire)';
-$labels['yourmessage'] = 'Ceci est un accusé de réception pour votre message';
-$labels['receiptnote'] = 'Note : Cet accusé de réception indique seulement que le message a été affiché sur l\'ordinateur du destinataire. Il n\'y a aucune garantie que le destinataire a lu ou compris le contenu du message.';
-$labels['name'] = 'Nom à afficher';
-$labels['firstname'] = 'Prénom';
-$labels['surname'] = 'Nom';
-$labels['email'] = 'Courriel';
-$labels['addcontact'] = 'Ajouter le contact sélectionné à votre Carnet d\'adresses';
-$labels['editcontact'] = 'Modifier le contact';
-$labels['edit'] = 'Modifier';
-$labels['cancel'] = 'Annuler';
-$labels['save'] = 'Sauvegarder';
-$labels['delete'] = 'Supprimer';
-$labels['newcontact'] = 'Créer un nouveau contact';
-$labels['deletecontact'] = 'Supprimer les contacts sélectionnés';
-$labels['composeto'] = 'Écrire un message à';
-$labels['contactsfromto'] = 'Contacts de $from à $to sur $count';
-$labels['print'] = 'Imprimer';
-$labels['export'] = 'Exporter';
-$labels['previouspage'] = 'Montrer page précédente';
-$labels['firstpage'] = 'Voir la première page';
-$labels['nextpage'] = 'Montrer page suivante';
-$labels['lastpage'] = 'Voir la dernière page';
-$labels['groups'] = 'Groupes';
-$labels['personaladrbook'] = 'Adresses personnelles';
-$labels['settingsfor'] = 'Paramètres pour';
-$labels['preferences'] = 'Préférences';
-$labels['userpreferences'] = 'Préférences utilisateur';
-$labels['editpreferences'] = 'Modifier les préférences utilisateur';
-$labels['identities'] = 'Identités';
-$labels['manageidentities'] = 'Gérer les identités pour ce compte';
-$labels['newidentity'] = 'Nouvelle identité';
-$labels['newitem'] = 'Nouvel élément';
-$labels['edititem'] = 'Modifier l\'élément';
-$labels['setdefault'] = 'Paramètres par défaut';
-$labels['language'] = 'Langue';
-$labels['timezone'] = 'Fuseau horaire';
-$labels['pagesize'] = 'Nombre de lignes par page';
-$labels['signature'] = 'Signature';
-$labels['dstactive'] = 'Heure d\'été';
-$labels['htmleditor'] = 'Composer un message au format HTML';
-$labels['htmlsignature'] = 'Signature HTML';
-$labels['previewpane'] = 'Afficher le panneau d\'aperçu';
-$labels['autosavedraft'] = 'Sauvegarde automatique des brouillons';
-$labels['everynminutes'] = 'toutes les $n minutes';
-$labels['never'] = 'jamais';
-$labels['folder'] = 'Dossier';
-$labels['folders'] = 'Dossiers';
-$labels['foldername'] = 'Nom du dossier';
-$labels['subscribed'] = 'Abonné';
-$labels['messagecount'] = 'Messages';
-$labels['create'] = 'Créer';
-$labels['createfolder'] = 'Créer un nouveau dossier';
-$labels['rename'] = 'Renommer';
-$labels['renamefolder'] = 'Renommer le dossier';
-$labels['deletefolder'] = 'Supprimer le dossier';
-$labels['managefolders'] = 'Organiser les dossiers';
-$labels['sortby'] = 'Trier par';
-$labels['sortasc'] = 'Tri ascendant';
-$labels['sortdesc'] = 'Tri descendant';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/fr/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Joel S. <joel.s@spijoprod.net> |
- | Jerome Lipowicz <jerome@yayel.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Erreur d\'authentification';
-$messages['cookiesdisabled'] = 'Votre navigateur n\'accepte pas les cookies';
-$messages['sessionerror'] = 'Votre session est invalide ou a expiré';
-$messages['imaperror'] = 'Erreur de connexion au serveur IMAP';
-$messages['nomessagesfound'] = 'Aucun message trouvé dans cette boîte aux lettres';
-$messages['loggedout'] = 'Vous venez de vous déconnecter avec succès. Au revoir !';
-$messages['mailboxempty'] = 'Boîte aux lettres vide';
-$messages['loading'] = 'Chargement...';
-$messages['loadingdata'] = 'Chargement des données...';
-$messages['checkingmail'] = 'Vérification des nouveaux messages...';
-$messages['sendingmessage'] = 'Message en cours d\'envoi...';
-$messages['messagesent'] = 'Message bien envoyé';
-$messages['savingmessage'] = 'Sauvegarde du message...';
-$messages['messagesaved'] = 'Message sauvegardé dans Brouillons';
-$messages['successfullysaved'] = 'Sauvegarde effectuée';
-$messages['addedsuccessfully'] = 'Contact ajouté dans le carnet d\'adresses';
-$messages['contactexists'] = 'Un contact avec ce courriel existe déjà';
-$messages['blockedimages'] = 'Afin de préserver votre vie privée, les images distantes ont été bloquées dans ce message.';
-$messages['encryptedmessage'] = 'Ceci est un message crypté et il ne peut pas être affiché. Désolé !';
-$messages['nocontactsfound'] = 'Aucun contact n\'a pu être trouvé';
-$messages['contactnotfound'] = 'Le contact demandé n\'a pas été trouvé';
-$messages['sendingfailed'] = 'L\'envoie du message a échoué';
-$messages['errorsaving'] = 'Une erreur a empêché la sauvegarde';
-$messages['errormoving'] = 'Impossible de déplacer le message';
-$messages['errordeleting'] = 'Impossible d\'effacer le message';
-$messages['deletecontactconfirm'] = 'Voulez-vous vraiment effacer le(s) contact(s) sélectionné(s) ?';
-$messages['deletemessagesconfirm'] = 'Voulez-vous vraiment supprimer le(s) message(s) séléctionné(s) ?';
-$messages['deletefolderconfirm'] = 'Voulez-vous vraiment effacer ce dossier ?';
-$messages['purgefolderconfirm'] = 'Voulez-vous vraiment effacer tous les messages de ce dossier ?';
-$messages['formincomplete'] = 'Le formulaire n\'a pas été entièrement rempli';
-$messages['noemailwarning'] = 'Veuillez spécifier un courriel valide';
-$messages['nonamewarning'] = 'Veuillez fournir un nom';
-$messages['nopagesizewarning'] = 'Veuillez indiquer une taille de page';
-$messages['norecipientwarning'] = 'Veuillez ajouter au moins un destinataire';
-$messages['nosubjectwarning'] = 'Le champ « Objet » est vide. Souhaitez-vous le renseigner maintenant ?';
-$messages['nobodywarning'] = 'Envoyer ce message sans texte ?';
-$messages['notsentwarning'] = 'Le message n\'a pas été envoyé. Voulez-vous abandonner ce message ?';
-$messages['noldapserver'] = 'Choisissez un serveur LDAP pour la recherche';
-$messages['nocontactsreturned'] = 'Aucun contact trouvé';
-$messages['nosearchname'] = 'Entrez un nom de contact ou un courriel';
-$messages['searchsuccessful'] = '$nr messages trouvés';
-$messages['searchnomatch'] = 'La recherche ne donne aucun résultat';
-$messages['searching'] = 'En cours de recherche...';
-$messages['checking'] = 'Vérification...';
-$messages['nospellerrors'] = 'Aucune faute trouvée';
-$messages['folderdeleted'] = 'Dossier effacé';
-$messages['deletedsuccessfully'] = 'Supprimé(s) avec succès';
-$messages['converting'] = 'Suppression de la mise en forme...';
-$messages['messageopenerror'] = 'Impossible de charger le message depuis serveur';
-$messages['fileuploaderror'] = 'Transfert du fichier echoué';
-$messages['filesizeerror'] = 'Le fichier transféré dépasse la taille maximale de $size';
-$messages['copysuccess'] = 'Succès de la copie des $nr adresses';
-$messages['copyerror'] = 'Ne peut pas copier les adresses';
-$messages['sourceisreadonly'] = 'Cette source d\'adresse est en lecture seule';
-$messages['errorsavingcontact'] = 'Ne peut pas enregistrer l\'adresse du contact';
-$messages['movingmessage'] = 'Déplacement du message...';
-$messages['receiptsent'] = 'L\'accusé de réception a bien été envoyé';
-$messages['errorsendingreceipt'] = 'L\'accusé de réception n\'a pas pu être envoyé';
-$messages['nodeletelastidentity'] = 'Vous ne pouvez pas effacer votre seule identité.';
-$messages['addsubfolderhint'] = 'Ce dossier sera créé comme sous-dossier de celui sélectionné.';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/fr/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Joel S. <joel.s@spijoprod.net> |
+ | Jerome Lipowicz <jerome@yayel.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Bienvenue sur $product';
+$labels['username'] = 'Utilisateur';
+$labels['password'] = 'Mot de passe';
+$labels['server'] = 'Serveur';
+$labels['login'] = 'Authentification';
+$labels['logout'] = 'Quitter';
+$labels['mail'] = 'Courriel';
+$labels['settings'] = 'Préférences';
+$labels['addressbook'] = 'Carnet d\'adresses';
+$labels['inbox'] = 'Messages reçus';
+$labels['drafts'] = 'Brouillons';
+$labels['sent'] = 'Messages envoyés';
+$labels['trash'] = 'Corbeille';
+$labels['junk'] = 'Indésirables';
+$labels['subject'] = 'Objet';
+$labels['from'] = 'De';
+$labels['to'] = 'À';
+$labels['cc'] = 'Cc';
+$labels['bcc'] = 'Cci';
+$labels['replyto'] = 'Répondre à';
+$labels['date'] = 'Date';
+$labels['size'] = 'Taille';
+$labels['priority'] = 'Priorité';
+$labels['organization'] = 'Organisation';
+$labels['reply-to'] = 'Répondre à';
+$labels['mailboxlist'] = 'Dossiers';
+$labels['messagesfromto'] = 'Messages de $from à $to sur $count';
+$labels['messagenrof'] = 'Message $nr sur $count';
+$labels['moveto'] = 'Déplacer vers...';
+$labels['download'] = 'Télécharger';
+$labels['filename'] = 'Nom du fichier';
+$labels['filesize'] = 'Taille du fichier';
+$labels['preferhtml'] = 'Afficher en HTML';
+$labels['htmlmessage'] = 'Message en HTML';
+$labels['prettydate'] = 'Affichage court des dates';
+$labels['addtoaddressbook'] = 'Ajouter au carnet d\'adresses';
+$labels['sun'] = 'Dim';
+$labels['mon'] = 'Lun';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mer';
+$labels['thu'] = 'Jeu';
+$labels['fri'] = 'Ven';
+$labels['sat'] = 'Sam';
+$labels['sunday'] = 'Dimanche';
+$labels['monday'] = 'Lundi';
+$labels['tuesday'] = 'Mardi';
+$labels['wednesday'] = 'Mercredi';
+$labels['thursday'] = 'Jeudi';
+$labels['friday'] = 'Vendredi';
+$labels['saturday'] = 'Samedi';
+$labels['today'] = 'Aujourd\'hui';
+$labels['checkmail'] = 'Vérification des nouveaux messages';
+$labels['writenewmessage'] = 'Écrire un nouveau message';
+$labels['replytomessage'] = 'Répondre au message';
+$labels['replytoallmessage'] = 'Répondre à tous';
+$labels['forwardmessage'] = 'Transmettre le message';
+$labels['deletemessage'] = 'Déplacer le message dans la corbeille';
+$labels['movemessagetotrash'] = 'Déplacer le message dans la corbeille';
+$labels['printmessage'] = 'Imprimer ce message';
+$labels['previousmessage'] = 'Voir le message précédent';
+$labels['previousmessages'] = 'Voir les messages précédents';
+$labels['firstmessage'] = 'Voir le premier message';
+$labels['firstmessages'] = 'Voir la première page de messages';
+$labels['nextmessage'] = 'Voir le message suivant';
+$labels['nextmessages'] = 'Voir les messages suivants';
+$labels['lastmessage'] = 'Voir le dernier message';
+$labels['lastmessages'] = 'Voir la dernière page de messages';
+$labels['backtolist'] = 'Retourner à la liste des messages';
+$labels['viewsource'] = 'Voir le source';
+$labels['markmessages'] = 'Marquer les messages';
+$labels['markread'] = 'Comme lus';
+$labels['markunread'] = 'Comme non lus';
+$labels['select'] = 'Sélectionner';
+$labels['all'] = 'Tous';
+$labels['none'] = 'Aucun';
+$labels['unread'] = 'Non lus';
+$labels['compact'] = 'Compacter';
+$labels['empty'] = 'Vider';
+$labels['purge'] = 'Purger';
+$labels['quota'] = 'Utilisation disque';
+$labels['unknown'] = 'inconnue';
+$labels['unlimited'] = 'illimitée';
+$labels['quicksearch'] = 'Recherche rapide';
+$labels['resetsearch'] = 'Réinitialiser la recherche';
+$labels['compose'] = 'Composer un nouveau message';
+$labels['savemessage'] = 'Sauvegarder ce brouillon';
+$labels['sendmessage'] = 'Envoyer le message maintenant';
+$labels['addattachment'] = 'Joindre un fichier';
+$labels['charset'] = 'Encodage';
+$labels['editortype'] = 'Type d\'éditeur';
+$labels['returnreceipt'] = 'Accusé de réception';
+$labels['checkspelling'] = 'Vérifier l\'orthographe';
+$labels['resumeediting'] = 'Retourner à l\'édition';
+$labels['revertto'] = 'Revenir à';
+$labels['attachments'] = 'Fichiers joints';
+$labels['upload'] = 'Joindre';
+$labels['close'] = 'Fermer';
+$labels['low'] = 'Basse';
+$labels['lowest'] = 'La plus basse';
+$labels['normal'] = 'Normale';
+$labels['high'] = 'Élevée';
+$labels['highest'] = 'La plus élevée';
+$labels['nosubject'] = '(pas de sujet)';
+$labels['showimages'] = 'Afficher les images';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'texte brut';
+$labels['addcc'] = 'Ajouter Cc';
+$labels['addbcc'] = 'Ajouter Cci';
+$labels['addreplyto'] = 'Ajouter Répondre à';
+$labels['mdnrequest'] = 'L\'expéditeur de ce message a demandé d\'être prévenu quand vous lirez ce message. Souhaitez-vous prévenir l\'expéditeur ?';
+$labels['receiptread'] = 'Accusé de réception (lire)';
+$labels['yourmessage'] = 'Ceci est un accusé de réception pour votre message';
+$labels['receiptnote'] = 'Note : Cet accusé de réception indique seulement que le message a été affiché sur l\'ordinateur du destinataire. Il n\'y a aucune garantie que le destinataire a lu ou compris le contenu du message.';
+$labels['name'] = 'Nom à afficher';
+$labels['firstname'] = 'Prénom';
+$labels['surname'] = 'Nom';
+$labels['email'] = 'Courriel';
+$labels['addcontact'] = 'Ajouter le contact sélectionné à votre Carnet d\'adresses';
+$labels['editcontact'] = 'Modifier le contact';
+$labels['edit'] = 'Modifier';
+$labels['cancel'] = 'Annuler';
+$labels['save'] = 'Sauvegarder';
+$labels['delete'] = 'Supprimer';
+$labels['newcontact'] = 'Créer un nouveau contact';
+$labels['deletecontact'] = 'Supprimer les contacts sélectionnés';
+$labels['composeto'] = 'Écrire un message à';
+$labels['contactsfromto'] = 'Contacts de $from à $to sur $count';
+$labels['print'] = 'Imprimer';
+$labels['export'] = 'Exporter';
+$labels['previouspage'] = 'Montrer page précédente';
+$labels['firstpage'] = 'Voir la première page';
+$labels['nextpage'] = 'Montrer page suivante';
+$labels['lastpage'] = 'Voir la dernière page';
+$labels['groups'] = 'Groupes';
+$labels['personaladrbook'] = 'Adresses personnelles';
+$labels['settingsfor'] = 'Paramètres pour';
+$labels['preferences'] = 'Préférences';
+$labels['userpreferences'] = 'Préférences utilisateur';
+$labels['editpreferences'] = 'Modifier les préférences utilisateur';
+$labels['identities'] = 'Identités';
+$labels['manageidentities'] = 'Gérer les identités pour ce compte';
+$labels['newidentity'] = 'Nouvelle identité';
+$labels['newitem'] = 'Nouvel élément';
+$labels['edititem'] = 'Modifier l\'élément';
+$labels['setdefault'] = 'Paramètres par défaut';
+$labels['language'] = 'Langue';
+$labels['timezone'] = 'Fuseau horaire';
+$labels['pagesize'] = 'Nombre de lignes par page';
+$labels['signature'] = 'Signature';
+$labels['dstactive'] = 'Heure d\'été';
+$labels['htmleditor'] = 'Composer un message au format HTML';
+$labels['htmlsignature'] = 'Signature HTML';
+$labels['previewpane'] = 'Afficher le panneau d\'aperçu';
+$labels['autosavedraft'] = 'Sauvegarde automatique des brouillons';
+$labels['everynminutes'] = 'toutes les $n minutes';
+$labels['never'] = 'jamais';
+$labels['folder'] = 'Dossier';
+$labels['folders'] = 'Dossiers';
+$labels['foldername'] = 'Nom du dossier';
+$labels['subscribed'] = 'Abonné';
+$labels['messagecount'] = 'Messages';
+$labels['create'] = 'Créer';
+$labels['createfolder'] = 'Créer un nouveau dossier';
+$labels['rename'] = 'Renommer';
+$labels['renamefolder'] = 'Renommer le dossier';
+$labels['deletefolder'] = 'Supprimer le dossier';
+$labels['managefolders'] = 'Organiser les dossiers';
+$labels['sortby'] = 'Trier par';
+$labels['sortasc'] = 'Tri ascendant';
+$labels['sortdesc'] = 'Tri descendant';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/fr/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Joel S. <joel.s@spijoprod.net> |
+ | Jerome Lipowicz <jerome@yayel.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Erreur d\'authentification';
+$messages['cookiesdisabled'] = 'Votre navigateur n\'accepte pas les cookies';
+$messages['sessionerror'] = 'Votre session est invalide ou a expiré';
+$messages['imaperror'] = 'Erreur de connexion au serveur IMAP';
+$messages['nomessagesfound'] = 'Aucun message trouvé dans cette boîte aux lettres';
+$messages['loggedout'] = 'Vous venez de vous déconnecter avec succès. Au revoir !';
+$messages['mailboxempty'] = 'Boîte aux lettres vide';
+$messages['loading'] = 'Chargement...';
+$messages['loadingdata'] = 'Chargement des données...';
+$messages['checkingmail'] = 'Vérification des nouveaux messages...';
+$messages['sendingmessage'] = 'Message en cours d\'envoi...';
+$messages['messagesent'] = 'Message bien envoyé';
+$messages['savingmessage'] = 'Sauvegarde du message...';
+$messages['messagesaved'] = 'Message sauvegardé dans Brouillons';
+$messages['successfullysaved'] = 'Sauvegarde effectuée';
+$messages['addedsuccessfully'] = 'Contact ajouté dans le carnet d\'adresses';
+$messages['contactexists'] = 'Un contact avec ce courriel existe déjà';
+$messages['blockedimages'] = 'Afin de préserver votre vie privée, les images distantes ont été bloquées dans ce message.';
+$messages['encryptedmessage'] = 'Ceci est un message crypté et il ne peut pas être affiché. Désolé !';
+$messages['nocontactsfound'] = 'Aucun contact n\'a pu être trouvé';
+$messages['contactnotfound'] = 'Le contact demandé n\'a pas été trouvé';
+$messages['sendingfailed'] = 'L\'envoie du message a échoué';
+$messages['errorsaving'] = 'Une erreur a empêché la sauvegarde';
+$messages['errormoving'] = 'Impossible de déplacer le message';
+$messages['errordeleting'] = 'Impossible d\'effacer le message';
+$messages['deletecontactconfirm'] = 'Voulez-vous vraiment effacer le(s) contact(s) sélectionné(s) ?';
+$messages['deletemessagesconfirm'] = 'Voulez-vous vraiment supprimer le(s) message(s) séléctionné(s) ?';
+$messages['deletefolderconfirm'] = 'Voulez-vous vraiment effacer ce dossier ?';
+$messages['purgefolderconfirm'] = 'Voulez-vous vraiment effacer tous les messages de ce dossier ?';
+$messages['formincomplete'] = 'Le formulaire n\'a pas été entièrement rempli';
+$messages['noemailwarning'] = 'Veuillez spécifier un courriel valide';
+$messages['nonamewarning'] = 'Veuillez fournir un nom';
+$messages['nopagesizewarning'] = 'Veuillez indiquer une taille de page';
+$messages['norecipientwarning'] = 'Veuillez ajouter au moins un destinataire';
+$messages['nosubjectwarning'] = 'Le champ « Objet » est vide. Souhaitez-vous le renseigner maintenant ?';
+$messages['nobodywarning'] = 'Envoyer ce message sans texte ?';
+$messages['notsentwarning'] = 'Le message n\'a pas été envoyé. Voulez-vous abandonner ce message ?';
+$messages['noldapserver'] = 'Choisissez un serveur LDAP pour la recherche';
+$messages['nocontactsreturned'] = 'Aucun contact trouvé';
+$messages['nosearchname'] = 'Entrez un nom de contact ou un courriel';
+$messages['searchsuccessful'] = '$nr messages trouvés';
+$messages['searchnomatch'] = 'La recherche ne donne aucun résultat';
+$messages['searching'] = 'En cours de recherche...';
+$messages['checking'] = 'Vérification...';
+$messages['nospellerrors'] = 'Aucune faute trouvée';
+$messages['folderdeleted'] = 'Dossier effacé';
+$messages['deletedsuccessfully'] = 'Supprimé(s) avec succès';
+$messages['converting'] = 'Suppression de la mise en forme...';
+$messages['messageopenerror'] = 'Impossible de charger le message depuis serveur';
+$messages['fileuploaderror'] = 'Transfert du fichier echoué';
+$messages['filesizeerror'] = 'Le fichier transféré dépasse la taille maximale de $size';
+$messages['copysuccess'] = 'Succès de la copie des $nr adresses';
+$messages['copyerror'] = 'Ne peut pas copier les adresses';
+$messages['sourceisreadonly'] = 'Cette source d\'adresse est en lecture seule';
+$messages['errorsavingcontact'] = 'Ne peut pas enregistrer l\'adresse du contact';
+$messages['movingmessage'] = 'Déplacement du message...';
+$messages['receiptsent'] = 'L\'accusé de réception a bien été envoyé';
+$messages['errorsendingreceipt'] = 'L\'accusé de réception n\'a pas pu être envoyé';
+$messages['nodeletelastidentity'] = 'Vous ne pouvez pas effacer votre seule identité.';
+$messages['addsubfolderhint'] = 'Ce dossier sera créé comme sous-dossier de celui sélectionné.';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ge/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Zaza Zviadadze <zviadadze@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 842 2007-10-20 13:55:02Z zaza$
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'მოგესალმებათ $product';
-$labels['username'] = 'მომხმარებელი';
-$labels['password'] = 'პაროლი';
-$labels['server'] = 'სერვერი';
-$labels['login'] = 'შესვლა';
-$labels['logout'] = 'გამოსვლა';
-$labels['mail'] = 'ელ–ფოსტა';
-$labels['settings'] = 'პარამეტრები';
-$labels['addressbook'] = 'მისამართები';
-$labels['inbox'] = 'მიღებული';
-$labels['drafts'] = 'დროებითი';
-$labels['sent'] = 'გაგზავნილები';
-$labels['trash'] = 'წაშლილები';
-$labels['junk'] = 'სპამი';
-$labels['subject'] = 'სათაური';
-$labels['from'] = 'გამგზავნი';
-$labels['to'] = 'მიმღები';
-$labels['cc'] = 'კოპია';
-$labels['bcc'] = 'ფარული';
-$labels['replyto'] = 'დაბრუნება';
-$labels['date'] = 'თარიღი';
-$labels['size'] = 'ზომა';
-$labels['priority'] = 'პრიორიტეტი';
-$labels['organization'] = 'ორგანიზაცია';
-$labels['reply-to'] = 'დაბრუნება';
-$labels['mailboxlist'] = 'საქაღალდეები';
-$labels['messagesfromto'] = 'შეტყობინება $from $to დან $count';
-$labels['messagenrof'] = 'შეტყობინება $nr დან $count';
-$labels['moveto'] = 'გადატანა...';
-$labels['download'] = 'გადმოწერა';
-$labels['filename'] = 'ფაილის სახელი';
-$labels['filesize'] = 'ფაილის ზომა';
-$labels['preferhtml'] = 'როგორც HTML';
-$labels['htmlmessage'] = 'HTML შეტყობინება';
-$labels['prettydate'] = 'კარგი თარიღები';
-$labels['addtoaddressbook'] = 'მისამართებში დამატება';
-$labels['sun'] = 'კვ';
-$labels['mon'] = 'ორ';
-$labels['tue'] = 'სამ';
-$labels['wed'] = 'ოთხ';
-$labels['thu'] = 'ხუთ';
-$labels['fri'] = 'პარ';
-$labels['sat'] = 'შაბ';
-$labels['sunday'] = 'კვირა';
-$labels['monday'] = 'ორშაბათი';
-$labels['tuesday'] = 'სამშაბათი';
-$labels['wednesday'] = 'ოთხშაბათი';
-$labels['thursday'] = 'ხუთშაბათი';
-$labels['friday'] = 'პარასკევი';
-$labels['saturday'] = 'შაბათი';
-$labels['today'] = 'დღეს';
-$labels['checkmail'] = 'შემოწმება ახალ შეტყობინებაზე';
-$labels['writenewmessage'] = 'ახალი შეტყობინება';
-$labels['replytomessage'] = 'პასუხი';
-$labels['replytoallmessage'] = 'პასუხი ყველას';
-$labels['forwardmessage'] = 'გადაგზავნა';
-$labels['deletemessage'] = 'წაშლა';
-$labels['movemessagetotrash'] = 'შეტყობინების წაშლილებში გადატანა';
-$labels['printmessage'] = 'შეტყობინების ამობეჭვდა';
-$labels['previousmessage'] = 'წინა შეტყობინების ნახვა';
-$labels['previousmessages'] = 'წინა შეტყობინებების ნახვა';
-$labels['firstmessage'] = 'პირველი შეტყობინების ნახვა';
-$labels['firstmessages'] = 'პრველი შეტყობინებები';
-$labels['nextmessage'] = 'შემდეგი შეტყობინების ნახვა';
-$labels['nextmessages'] = 'შემდეგი შეტყობინებების ნახვა';
-$labels['lastmessage'] = 'ბოლო შეტყობინების ნახვა';
-$labels['lastmessages'] = 'ბოლო შეტყობინებების ნახვა';
-$labels['backtolist'] = 'უკან ჩამონათვალში';
-$labels['viewsource'] = 'შიგთავსი';
-$labels['markmessages'] = 'მონიშნეთ შეტყობინებები';
-$labels['markread'] = 'როგორც წაკითხული';
-$labels['markunread'] = 'როგორც წაუკითხავი';
-$labels['select'] = 'მონიშვნა';
-$labels['all'] = 'ყველა';
-$labels['none'] = 'არცერთი';
-$labels['unread'] = 'წაუკითხავი';
-$labels['compact'] = 'შეკუმშვა';
-$labels['empty'] = 'გაცარიელება';
-$labels['purge'] = 'გასუფთავება';
-$labels['quota'] = 'შეზღუდვა';
-$labels['unknown'] = 'უცნობი';
-$labels['unlimited'] = 'შეუზღუდავი';
-$labels['quicksearch'] = 'სწრაფი ძიება';
-$labels['resetsearch'] = 'ძიების გასუფთავება';
-$labels['compose'] = 'შეტყობინების დაწერა';
-$labels['savemessage'] = 'დროებით შენახვა';
-$labels['sendmessage'] = 'შეტყობინების გაგზავნა';
-$labels['addattachment'] = 'ფაილის ატვირთვა';
-$labels['charset'] = 'კოდირება';
-$labels['editortype'] = 'რედაქტორი';
-$labels['returnreceipt'] = 'პასუხის მოთხოვნა';
-$labels['checkspelling'] = 'ორთოგრაფიული შემოწმება';
-$labels['resumeediting'] = 'რედაქტირების გაგრძელება';
-$labels['revertto'] = 'გაუქმება';
-$labels['attachments'] = 'გზავნილები';
-$labels['upload'] = 'ატვირთვა';
-$labels['close'] = 'დახურვა';
-$labels['low'] = 'დაბალი';
-$labels['lowest'] = 'უდაბლესი';
-$labels['normal'] = 'საშუალო';
-$labels['high'] = 'მაღალი';
-$labels['highest'] = 'უმაღლესი';
-$labels['nosubject'] = '(უსათაურო)';
-$labels['showimages'] = 'გამოსახულების ჩვენება';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'ტექსტური';
-$labels['addcc'] = 'დაამატე კოპიო';
-$labels['addbcc'] = 'დაამატე ფარული კოპიო';
-$labels['addreplyto'] = 'დაამატე გამომგზავნი';
-$labels['mdnrequest'] = 'გამომგზავნს სურს შეიტყოს წერილის მიღება. გსურთ შეატყობინოთ გამომგზავნს?';
-$labels['receiptread'] = 'გზავნილის დაბრუნება';
-$labels['yourmessage'] = 'ეს არის მიღების დასტური თქვენს შეტყობინებაზე';
-$labels['receiptnote'] = 'განმარტება: ეს ნიშნავს რომ ადრესატმა მიიღო შეტყობინება. მაგრამ, არ ნიშნავს რომ წაიკითხა ან გაიგო ტექსტი';
-$labels['name'] = 'სრული სახელი';
-$labels['firstname'] = 'სახელი';
-$labels['surname'] = 'გვარი';
-$labels['email'] = 'ელ–ფოსტა';
-$labels['addcontact'] = 'კონტაქტებში დამატება';
-$labels['editcontact'] = 'კონტაქტის რედაქტირება';
-$labels['edit'] = 'რედაქტირება';
-$labels['cancel'] = 'გაუქმება';
-$labels['save'] = 'შენახვა';
-$labels['delete'] = 'წაშლა';
-$labels['newcontact'] = 'კონტაქტის შექმნა';
-$labels['deletecontact'] = 'მონიშნელი კონტაქტის წაშლა';
-$labels['composeto'] = 'ფოსტის გაგზავნა შერჩეულ ადრესატებთან';
-$labels['contactsfromto'] = 'კონტაქტები $from დან $to ში $count';
-$labels['print'] = 'დაბეჭვდა';
-$labels['export'] = 'ექსპორტი';
-$labels['previouspage'] = 'წინას ჩვენება';
-$labels['firstpage'] = 'პირველის ჩვენება';
-$labels['nextpage'] = 'შემდეგის ჩვენება';
-$labels['lastpage'] = 'ბოლოს ჩვენება';
-$labels['groups'] = 'ჯგუფები';
-$labels['personaladrbook'] = 'პერსონალური მისამართები';
-$labels['settingsfor'] = 'პარამეტრები';
-$labels['preferences'] = 'პარამეტრები';
-$labels['userpreferences'] = 'მომხმარებლის პარამეტრები';
-$labels['editpreferences'] = 'მომხმარებლის პარამეტრების რედაქტირება';
-$labels['identities'] = 'პროფილები';
-$labels['manageidentities'] = 'პროფილების მართვა';
-$labels['newidentity'] = 'ახალი პროფილი';
-$labels['newitem'] = 'ახალი';
-$labels['edititem'] = 'რედაქტირება';
-$labels['setdefault'] = 'როგორც ზოგაგად';
-$labels['language'] = 'ენა';
-$labels['timezone'] = 'დროითი ზონა';
-$labels['pagesize'] = 'სტრიქონი გვერდზე';
-$labels['signature'] = 'ხელმოწერა';
-$labels['dstactive'] = 'დროის გადაყვანა';
-$labels['htmleditor'] = 'შეტყობინების შექმნა HTML –ში';
-$labels['htmlsignature'] = 'HTML ხელმოწერა';
-$labels['previewpane'] = 'ჩვენება';
-$labels['autosavedraft'] = 'ავტომატური შენახვა';
-$labels['everynminutes'] = 'ყოველ $n წუთში';
-$labels['never'] = 'არასდროს';
-$labels['folder'] = 'საქაღალდე';
-$labels['folders'] = 'საქაღალდეები';
-$labels['foldername'] = 'საქაღალდის დასახელება';
-$labels['subscribed'] = 'გამოცერილია';
-$labels['messagecount'] = 'შეტყობინებები';
-$labels['create'] = 'შექმნა';
-$labels['createfolder'] = 'საქაღალდის შექმნა';
-$labels['rename'] = 'სახელის გადარქმევა';
-$labels['renamefolder'] = 'სახელის გადარქმევა საქაღალდისთვის';
-$labels['deletefolder'] = 'საქაღალდის წაშლა';
-$labels['managefolders'] = 'საქაღალდეების მართვა';
-$labels['sortby'] = 'დალაგება';
-$labels['sortasc'] = 'დალაგება ზრდადობით';
-$labels['sortdesc'] = 'დალაგება კლებადობით';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ge/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Zaza Zviadadze <zviadadze@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 842 2007-10-20 13:55:02Z zaza $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'შესვლა შეუძლებელია';
-$messages['cookiesdisabled'] = 'თქვენი ბროუზერი კუკიებს არ პასუხობს';
-$messages['sessionerror'] = 'თქვენი სესია არის მცდარი ან ვადაგასული';
-$messages['imaperror'] = 'IMAP სერვერთან დაკავშირება შეუძლებელია';
-$messages['nomessagesfound'] = 'არ არის ახალი შეტყობინება';
-$messages['loggedout'] = 'წარმატებით დაიხურა თქვენი სესია';
-$messages['mailboxempty'] = 'საფოსტო ყუთი ცარიელია';
-$messages['loading'] = 'იტვირთება...';
-$messages['loadingdata'] = 'მონაცემების ჩატვირთვა...';
-$messages['checkingmail'] = 'ახალი შეტყობინების ნახვა';
-$messages['sendingmessage'] = 'შეტყობინების გაგზავნა';
-$messages['messagesent'] = 'შეტყობინება გაიგზავნა წარმატებით';
-$messages['savingmessage'] = 'შეტყობინების შენახვა...';
-$messages['messagesaved'] = 'შეტყობინების დროებით შენახვა';
-$messages['successfullysaved'] = 'წარმატებით შეინახა';
-$messages['addedsuccessfully'] = 'კონტაქტი წარმატებით დაემატა მისამართებში';
-$messages['contactexists'] = 'კონტაქტი ამ მისამართზე უკვე არსებობს';
-$messages['blockedimages'] = 'უსაფრთხოების მიზნით სურათების ჩვენება შეზღუდულია';
-$messages['encryptedmessage'] = 'შეტყობინება დაშიფრულია და სამწუხაროდ ჩვენება შეუძლებელია';
-$messages['nocontactsfound'] = 'კონტაქტი ვერ მოიძებნა';
-$messages['contactnotfound'] = 'მოთხოვნილი კონტაქტი ვერ მოიძებნა';
-$messages['sendingfailed'] = 'შეტყობინება ვერ გაიგზავნა';
-$messages['errorsaving'] = 'შენახვის დროს მოხდა შეცდომა';
-$messages['errormoving'] = 'შეტყობინების გადატანა შეუძლებელია';
-$messages['errordeleting'] = 'შეტყობინების წაშლა შეუძლებელია';
-$messages['deletecontactconfirm'] = 'ნამდვილად გსურთ მონიშნული კონტაქტების წაშლა?';
-$messages['deletemessagesconfirm'] = 'ნამდვილად გსურთ მონიშნული შეტყობინებების წაშლა?';
-$messages['deletefolderconfirm'] = 'ნამდვილად გსურთ ამ საქაღალდის წაშლა?';
-$messages['purgefolderconfirm'] = 'ნამდვილად გსურთ ყველა შეტყობინების წაშლა აღნიშნულ საქაღალდეში?';
-$messages['formincomplete'] = 'ყველა ველი არ არის შევსებული';
-$messages['noemailwarning'] = 'მიუთითეთ სწორი ელ–ფოსტის მისამართი';
-$messages['nonamewarning'] = 'მიუთითეთ სახელი';
-$messages['nopagesizewarning'] = 'მიუთითეთ ფურცლის ზომა';
-$messages['norecipientwarning'] = 'მიუთითეთ მიმღები';
-$messages['nosubjectwarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უსათაუროდ?';
-$messages['nobodywarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უტექსტოდ?';
-$messages['notsentwarning'] = 'შეტყობინება ვერ იქნა გაგზავნილი. გსურთ თუ არა გზავნილის გაუქმება?';
-$messages['noldapserver'] = 'მიუთითეთ LDAP სერვერი ძიებისთვის';
-$messages['nocontactsreturned'] = 'კონტაქტები ვერ მოძებნა';
-$messages['nosearchname'] = 'მიუთითეთ სახელი ან ელ–ფოსტის მისამართი';
-$messages['searchsuccessful'] = '$nr შეტყობინეა მოიძებნა';
-$messages['searchnomatch'] = 'შეტყობინება ვერ მოიძებნა';
-$messages['searching'] = 'ძიება...';
-$messages['checking'] = 'შემოწმება...';
-$messages['nospellerrors'] = 'ორთოგრაფიული შეცდომა არ არის';
-$messages['folderdeleted'] = 'საქაღალდე წარმატებით წაიშალა';
-$messages['deletedsuccessfully'] = 'წარმატებით წაიშალა';
-$messages['converting'] = 'შეტყობინების ფორმატირების გაუქმება...';
-$messages['messageopenerror'] = 'შეტყობინება ვერ ჩაიტვირთა სერვერიდან';
-$messages['fileuploaderror'] = 'ფაილი ვერ აიტვირთა';
-$messages['filesizeerror'] = 'ატვირთული ფაილის ზომა მეტია დასაშვებ ფაილის მაქსიმალურ ზომაზე ($size)';
-$messages['copysuccess'] = 'წარმატებით დაკოპირდა $nr მისამართი';
-$messages['copyerror'] = 'ვერცერთი მისამართი ვერ დაკოპირდა';
-$messages['sourceisreadonly'] = 'აღნიშნული მისამართის მხოლოდ წაკითხვაა შესაძლებელი';
-$messages['errorsavingcontact'] = 'საკონტაქტო მისამართის შენახვა შეუძლებელია';
-$messages['movingmessage'] = 'შეტყობინების გადატანა...';
-$messages['receiptsent'] = 'წარმატებით გაიგზავნა';
-$messages['errorsendingreceipt'] = 'არ გაიგზავნა';
-$messages['nodeletelastidentity'] = 'წაშლა შეუძლებელია, ის თქვენთვის ერთადერთია';
-$messages['addsubfolderhint'] = 'საქაღალდე შეიქმნება როგორც ქვესაქაღალდე მონიშნულ საქაღალდეში';
-
-?>
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | language/gl/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: David Garabana Barro <david garabana com> |
- +-----------------------------------------------------------------------+
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Benvido a $product';
-$labels['username'] = 'Nome de usuario';
-$labels['password'] = 'Contrasinal';
-$labels['server'] = 'Servidor';
-$labels['login'] = 'Acceder';
-$labels['logout'] = 'Saír';
-$labels['mail'] = 'Correo Electrónico';
-$labels['settings'] = 'Axustes persoais';
-$labels['addressbook'] = 'Caderno de enderezos';
-$labels['inbox'] = 'Caixa de entrada';
-$labels['drafts'] = 'Borradores';
-$labels['sent'] = 'Enviado';
-$labels['trash'] = 'Cubo do Lixo';
-$labels['junk'] = 'Lixo';
-$labels['subject'] = 'Asunto';
-$labels['from'] = 'Remitente';
-$labels['to'] = 'Destinatario';
-$labels['cc'] = 'Copia';
-$labels['bcc'] = 'Copia Oculta';
-$labels['replyto'] = 'Respostar a';
-$labels['date'] = 'Data';
-$labels['size'] = 'Tamaño';
-$labels['priority'] = 'Prioridade';
-$labels['organization'] = 'Organización';
-$labels['reply-to'] = 'Respostar a';
-$labels['mailboxlist'] = 'Cartafoles';
-$labels['messagesfromto'] = 'Mensaxes do $from ao $to de $count';
-$labels['messagenrof'] = 'Mensaxe $nr de $count';
-$labels['moveto'] = 'Mover a...';
-$labels['download'] = 'Baixar';
-$labels['filename'] = 'Nome de ficheiro';
-$labels['filesize'] = 'Tamaño de ficheiro';
-$labels['preferhtml'] = 'Prefiro HTML';
-$labels['htmlmessage'] = 'Mensaxe HTML';
-$labels['prettydate'] = 'Data decorada';
-$labels['addtoaddressbook'] = 'Engadir ao caderno de enderezos';
-$labels['sun'] = 'Dom';
-$labels['mon'] = 'Lun';
-$labels['tue'] = 'Mar';
-$labels['wed'] = 'Mér';
-$labels['thu'] = 'Xov';
-$labels['fri'] = 'Ven';
-$labels['sat'] = 'Sáb';
-$labels['sunday'] = 'Domingo';
-$labels['monday'] = 'Luns';
-$labels['tuesday'] = 'Martes';
-$labels['wednesday'] = 'Mércores';
-$labels['thursday'] = 'Xoves';
-$labels['friday'] = 'Venres';
-$labels['saturday'] = 'Sábado';
-$labels['today'] = 'Hoxe';
-$labels['checkmail'] = 'Buscar novas mensaxes';
-$labels['writenewmessage'] = 'Crear unha nova mensaxe';
-$labels['replytomessage'] = 'Respostar á mensaxe';
-$labels['replytoallmessage'] = 'Respostar a todos';
-$labels['forwardmessage'] = 'Reenviar a mensaxe';
-$labels['deletemessage'] = 'Borrar a mensaxe';
-$labels['movemessagetotrash'] = 'Mover a mensaxe ó cubo do lixo';
-$labels['printmessage'] = 'Imprimir esta mensaxe';
-$labels['previousmessage'] = 'Amosar a mensaxe anterior';
-$labels['previousmessages'] = 'Amosar o grupo anterior de mensaxes';
-$labels['firstmessage'] = 'Amosar a primeira mensaxe';
-$labels['firstmessages'] = 'Amosar o primeiro grupo de mensaxes';
-$labels['nextmessage'] = 'Amosar a seguinte mensaxe';
-$labels['nextmessages'] = 'Amosar o seguinte grupo de mensaxes';
-$labels['lastmessage'] = 'Amosar a última mensaxe';
-$labels['lastmessages'] = 'Amosar o último grupo de mensaxes';
-$labels['backtolist'] = 'Voltar á lista de mensaxes';
-$labels['viewsource'] = 'Ver fonte';
-$labels['markmessages'] = 'Marcar mensaxes';
-$labels['markread'] = 'Coma lidos';
-$labels['markunread'] = 'Coma non lidos';
-$labels['select'] = 'Seleccionar';
-$labels['all'] = 'Todas';
-$labels['none'] = 'Ningunha';
-$labels['unread'] = 'Non lidas';
-$labels['compact'] = 'Compactar';
-$labels['empty'] = 'Baleiro';
-$labels['purge'] = 'Baleirar';
-$labels['quota'] = 'Uso de disco';
-$labels['unknown'] = 'desconocido';
-$labels['unlimited'] = 'ilimitado';
-$labels['quicksearch'] = 'Busca rápida';
-$labels['resetsearch'] = 'Restablecer a busca';
-$labels['compose'] = 'Redactar unha mensaxe';
-$labels['savemessage'] = 'Gardar a mensaxe coma borrador';
-$labels['sendmessage'] = 'Enviar a mensaxe agora';
-$labels['addattachment'] = 'Anexar un ficheiro';
-$labels['charset'] = 'Codificación';
-$labels['editortype'] = 'Tipo de editor';
-$labels['returnreceipt'] = 'Notificación de disposición';
-$labels['checkspelling'] = 'Revisar a ortografía';
-$labels['resumeediting'] = 'Voltar á edición';
-$labels['revertto'] = 'Voltar a';
-$labels['attachments'] = 'Ficheiros anexos';
-$labels['upload'] = 'Cargar';
-$labels['close'] = 'Pechar';
-$labels['low'] = 'Baixa';
-$labels['lowest'] = 'A máis baixa';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'Alta';
-$labels['highest'] = 'A máis alta';
-$labels['nosubject'] = '(Sen asunto)';
-$labels['showimages'] = 'Mostrar imaxes';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Texto claro';
-$labels['addcc'] = 'Engadir Copia (CC)';
-$labels['addbcc'] = 'Engadir Copia Oculta (BCC)';
-$labels['addreplyto'] = 'Engadir Respostar a (Reply-To)';
-$labels['mdnrequest'] = 'O remitente desta mensaxe pediu ser notificado cando vostede lea esta mensaxe. Quere notificar ao remitente?';
-$labels['receiptread'] = 'Notificación da disposición da mensaxe (lectura)';
-$labels['yourmessage'] = 'Esta é unha notificación de disposición para a súa mensaxe';
-$labels['receiptnote'] = 'Nota: Esta notificación só confirma que a mensaxe se abriu no computador do destinatario. Non asegura que o destinatario o lera ou entendera o seu contido.';
-$labels['name'] = 'Nome completo';
-$labels['firstname'] = 'Nome';
-$labels['surname'] = 'Apelidos';
-$labels['email'] = 'Correo Electrónico';
-$labels['addcontact'] = 'Engadir novo contacto';
-$labels['editcontact'] = 'Editar contacto';
-$labels['edit'] = 'Editar';
-$labels['cancel'] = 'Cancelar';
-$labels['save'] = 'Gardar';
-$labels['delete'] = 'Borrar';
-$labels['newcontact'] = 'Crear novo contacto';
-$labels['deletecontact'] = 'Borrar os contactos seleccionados';
-$labels['composeto'] = 'Redactar mensaxe a';
-$labels['contactsfromto'] = 'Contactos do $from ao $to de $count';
-$labels['print'] = 'Imprimir';
-$labels['export'] = 'Exportar';
-$labels['previouspage'] = 'Amosar o grupo anterior';
-$labels['firstpage'] = 'Amosar o primeiro grupo';
-$labels['nextpage'] = 'Amosar o seguinte grupo';
-$labels['lastpage'] = 'Amosar o último grupo';
-$labels['groups'] = 'Grupos';
-$labels['personaladrbook'] = 'Enderezos persoais';
-$labels['settingsfor'] = 'Axustes de';
-$labels['preferences'] = 'Preferencias';
-$labels['userpreferences'] = 'Preferencias de usuario';
-$labels['editpreferences'] = 'Editar preferencias de usuario';
-$labels['identities'] = 'Identidades';
-$labels['manageidentities'] = 'Administrar identidades de esta conta';
-$labels['newidentity'] = 'Nova identidade';
-$labels['newitem'] = 'Novo';
-$labels['edititem'] = 'Editar';
-$labels['setdefault'] = 'Opción por defecto';
-$labels['language'] = 'Linguaxe';
-$labels['timezone'] = 'Zona horaria';
-$labels['pagesize'] = 'Filas por páxina';
-$labels['signature'] = 'Sinatura';
-$labels['dstactive'] = 'Cambio de hora';
-$labels['htmleditor'] = 'Redactar mensaxes HTML';
-$labels['htmlsignature'] = 'Sinatura HTML';
-$labels['previewpane'] = 'Amosar panel de previsualización';
-$labels['autosavedraft'] = 'Gardar borrador automáticamente';
-$labels['everynminutes'] = 'cada $n minutos';
-$labels['never'] = 'nunca';
-$labels['folder'] = 'Cartafol';
-$labels['folders'] = 'Cartafoles';
-$labels['foldername'] = 'Nome do cartafol';
-$labels['subscribed'] = 'Subscrito';
-$labels['messagecount'] = 'Mensaxes';
-$labels['create'] = 'Crear';
-$labels['createfolder'] = 'Crear novo cartafol';
-$labels['rename'] = 'Renomear';
-$labels['renamefolder'] = 'Renomear cartafol';
-$labels['deletefolder'] = 'Borrar cartafol';
-$labels['managefolders'] = 'Xestionar cartafoles';
-$labels['sortby'] = 'Ordenar por';
-$labels['sortasc'] = 'Orde ascendente';
-$labels['sortdesc'] = 'Orde descendente';
-
-?>
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | language/gl/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: David Garabana Barro <david garabana com> |
- +-----------------------------------------------------------------------+
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Fallou o acceso';
-$messages['cookiesdisabled'] = 'O seu navegador non acepta galletas';
-$messages['sessionerror'] = 'A súa sesión non é válida ou expirou';
-$messages['imaperror'] = 'Fallou a conexión co servidor IMAP';
-$messages['nomessagesfound'] = 'Non se atoparon mensaxes nesta caixa de correo';
-$messages['loggedout'] = 'Rematou correctamente a súa sesión. Ata logo!';
-$messages['mailboxempty'] = 'A caixa de correo está vacía';
-$messages['loading'] = 'Cargando...';
-$messages['loadingdata'] = 'Cargando datos...';
-$messages['checkingmail'] = 'Buscando novas mensaxes...';
-$messages['sendingmessage'] = 'Enviando mensaxe...';
-$messages['messagesent'] = 'A mensaxe enviouse correctamente';
-$messages['savingmessage'] = 'Gardando mensaxe...';
-$messages['messagesaved'] = 'A mensaxe gardouse en "Borradores"';
-$messages['successfullysaved'] = 'Gardada correctamente';
-$messages['addedsuccessfully'] = 'O contacto engadiuse correctamente ao caderno de enderezos';
-$messages['contactexists'] = 'Xa existe un contacto con este enderezo de correo electrónico';
-$messages['blockedimages'] = 'Estanse a bloquear as imaxes remotas para protexer a súa privacidade';
-$messages['encryptedmessage'] = 'Síntoo!. Non se pode amosar a mensaxe porque está cifrada';
-$messages['nocontactsfound'] = 'Non se atoparon contactos';
-$messages['contactnotfound'] = 'Non se atopou o contacto solicitado';
-$messages['sendingfailed'] = 'Fallou o envío da mensaxe';
-$messages['errorsaving'] = 'Ocurriu un erro mentres se gardaba';
-$messages['errormoving'] = 'Non puiden mover a mensaxe';
-$messages['errordeleting'] = 'Non puiden borrar a mensaxe';
-$messages['deletecontactconfirm'] = 'Quere borrar o(s) contacto(s) seleccionados?';
-$messages['deletemessagesconfirm'] = 'Quere borrar a(s) mensaxe(s) seleccionadas?';
-$messages['deletefolderconfirm'] = 'Quere borrar este cartafol?';
-$messages['purgefolderconfirm'] = 'Quere borrar tódalas mensaxes neste cartafol?';
-$messages['formincomplete'] = 'Non se cumprimentou completamente o formulario';
-$messages['noemailwarning'] = 'Por favor, introduza un enderezo de correo electrónico válida';
-$messages['nonamewarning'] = 'Por favor, introduza un nome';
-$messages['nopagesizewarning'] = 'Por favor, introduza un tamaño de páxina';
-$messages['norecipientwarning'] = 'Por favor, introduza polo menos un destinatario';
-$messages['nosubjectwarning'] = 'O campo "tema" está baleiro. Quere introducir un?';
-$messages['nobodywarning'] = 'Quere enviar esta mensaxe sen texto?';
-$messages['notsentwarning'] = 'A mensaxe non se enviou. Quere descartala?';
-$messages['noldapserver'] = 'Por favor, elixa un servidor LDAP para buscar';
-$messages['nocontactsreturned'] = 'Non se atoparon contactos';
-$messages['nosearchname'] = 'Por favor, introduza un contacto ou un enderezo de correo electrónico';
-$messages['searchsuccessful'] = 'Atopáronse $nr mensaxes';
-$messages['searchnomatch'] = 'A busca non atopou coincidencias';
-$messages['searching'] = 'Buscando...';
-$messages['checking'] = 'Comprobando...';
-$messages['nospellerrors'] = 'Non hai erros ortográficos';
-$messages['folderdeleted'] = 'Borrouse o cartafol con éxito';
-$messages['deletedsuccessfully'] = 'Borrouse con éxito';
-$messages['converting'] = 'Eliminando o formato da mensaxe...';
-$messages['messageopenerror'] = 'Non puiden cargar a mensaxe desde o servidor';
-$messages['fileuploaderror'] = 'Fallou a carga do ficheiro';
-$messages['filesizeerror'] = 'O ficheiro cargado é máis grande que o tamaño máximo de $size';
-$messages['copysuccess'] = 'Copiáronse correctamente $nr enderezos';
-$messages['copyerror'] = 'Non puiden copiar ningún enderezo';
-$messages['sourceisreadonly'] = 'A orixe é de só lectura';
-$messages['errorsavingcontact'] = 'Non puiden gardar o contacto';
-$messages['movingmessage'] = 'Movendo mensaxe...';
-$messages['receiptsent'] = 'A notificación de disposición enviouse correctamente';
-$messages['errorsendingreceipt'] = 'Non se puido enviar a notificación';
-$messages['nodeletelastidentity'] = 'Non pode borrar esta identidade, é a última';
-$messages['addsubfolderhint'] = 'Este cartafol vaise crear coma un subcartafol do seleccionado';
-
-?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | language/gl/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: David Garabana Barro <david garabana com> |
+ +-----------------------------------------------------------------------+
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Benvido a $product';
+$labels['username'] = 'Nome de usuario';
+$labels['password'] = 'Contrasinal';
+$labels['server'] = 'Servidor';
+$labels['login'] = 'Acceder';
+$labels['logout'] = 'Saír';
+$labels['mail'] = 'Correo Electrónico';
+$labels['settings'] = 'Axustes persoais';
+$labels['addressbook'] = 'Caderno de enderezos';
+$labels['inbox'] = 'Caixa de entrada';
+$labels['drafts'] = 'Borradores';
+$labels['sent'] = 'Enviado';
+$labels['trash'] = 'Cubo do Lixo';
+$labels['junk'] = 'Lixo';
+$labels['subject'] = 'Asunto';
+$labels['from'] = 'Remitente';
+$labels['to'] = 'Destinatario';
+$labels['cc'] = 'Copia';
+$labels['bcc'] = 'Copia Oculta';
+$labels['replyto'] = 'Respostar a';
+$labels['date'] = 'Data';
+$labels['size'] = 'Tamaño';
+$labels['priority'] = 'Prioridade';
+$labels['organization'] = 'Organización';
+$labels['reply-to'] = 'Respostar a';
+$labels['mailboxlist'] = 'Cartafoles';
+$labels['messagesfromto'] = 'Mensaxes do $from ao $to de $count';
+$labels['messagenrof'] = 'Mensaxe $nr de $count';
+$labels['moveto'] = 'Mover a...';
+$labels['download'] = 'Baixar';
+$labels['filename'] = 'Nome de ficheiro';
+$labels['filesize'] = 'Tamaño de ficheiro';
+$labels['preferhtml'] = 'Prefiro HTML';
+$labels['htmlmessage'] = 'Mensaxe HTML';
+$labels['prettydate'] = 'Data decorada';
+$labels['addtoaddressbook'] = 'Engadir ao caderno de enderezos';
+$labels['sun'] = 'Dom';
+$labels['mon'] = 'Lun';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mér';
+$labels['thu'] = 'Xov';
+$labels['fri'] = 'Ven';
+$labels['sat'] = 'Sáb';
+$labels['sunday'] = 'Domingo';
+$labels['monday'] = 'Luns';
+$labels['tuesday'] = 'Martes';
+$labels['wednesday'] = 'Mércores';
+$labels['thursday'] = 'Xoves';
+$labels['friday'] = 'Venres';
+$labels['saturday'] = 'Sábado';
+$labels['today'] = 'Hoxe';
+$labels['checkmail'] = 'Buscar novas mensaxes';
+$labels['writenewmessage'] = 'Crear unha nova mensaxe';
+$labels['replytomessage'] = 'Respostar á mensaxe';
+$labels['replytoallmessage'] = 'Respostar a todos';
+$labels['forwardmessage'] = 'Reenviar a mensaxe';
+$labels['deletemessage'] = 'Borrar a mensaxe';
+$labels['movemessagetotrash'] = 'Mover a mensaxe ó cubo do lixo';
+$labels['printmessage'] = 'Imprimir esta mensaxe';
+$labels['previousmessage'] = 'Amosar a mensaxe anterior';
+$labels['previousmessages'] = 'Amosar o grupo anterior de mensaxes';
+$labels['firstmessage'] = 'Amosar a primeira mensaxe';
+$labels['firstmessages'] = 'Amosar o primeiro grupo de mensaxes';
+$labels['nextmessage'] = 'Amosar a seguinte mensaxe';
+$labels['nextmessages'] = 'Amosar o seguinte grupo de mensaxes';
+$labels['lastmessage'] = 'Amosar a última mensaxe';
+$labels['lastmessages'] = 'Amosar o último grupo de mensaxes';
+$labels['backtolist'] = 'Voltar á lista de mensaxes';
+$labels['viewsource'] = 'Ver fonte';
+$labels['markmessages'] = 'Marcar mensaxes';
+$labels['markread'] = 'Coma lidos';
+$labels['markunread'] = 'Coma non lidos';
+$labels['select'] = 'Seleccionar';
+$labels['all'] = 'Todas';
+$labels['none'] = 'Ningunha';
+$labels['unread'] = 'Non lidas';
+$labels['compact'] = 'Compactar';
+$labels['empty'] = 'Baleiro';
+$labels['purge'] = 'Baleirar';
+$labels['quota'] = 'Uso de disco';
+$labels['unknown'] = 'desconocido';
+$labels['unlimited'] = 'ilimitado';
+$labels['quicksearch'] = 'Busca rápida';
+$labels['resetsearch'] = 'Restablecer a busca';
+$labels['compose'] = 'Redactar unha mensaxe';
+$labels['savemessage'] = 'Gardar a mensaxe coma borrador';
+$labels['sendmessage'] = 'Enviar a mensaxe agora';
+$labels['addattachment'] = 'Anexar un ficheiro';
+$labels['charset'] = 'Codificación';
+$labels['editortype'] = 'Tipo de editor';
+$labels['returnreceipt'] = 'Notificación de disposición';
+$labels['checkspelling'] = 'Revisar a ortografía';
+$labels['resumeediting'] = 'Voltar á edición';
+$labels['revertto'] = 'Voltar a';
+$labels['attachments'] = 'Ficheiros anexos';
+$labels['upload'] = 'Cargar';
+$labels['close'] = 'Pechar';
+$labels['low'] = 'Baixa';
+$labels['lowest'] = 'A máis baixa';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Alta';
+$labels['highest'] = 'A máis alta';
+$labels['nosubject'] = '(Sen asunto)';
+$labels['showimages'] = 'Mostrar imaxes';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Texto claro';
+$labels['addcc'] = 'Engadir Copia (CC)';
+$labels['addbcc'] = 'Engadir Copia Oculta (BCC)';
+$labels['addreplyto'] = 'Engadir Respostar a (Reply-To)';
+$labels['mdnrequest'] = 'O remitente desta mensaxe pediu ser notificado cando vostede lea esta mensaxe. Quere notificar ao remitente?';
+$labels['receiptread'] = 'Notificación da disposición da mensaxe (lectura)';
+$labels['yourmessage'] = 'Esta é unha notificación de disposición para a súa mensaxe';
+$labels['receiptnote'] = 'Nota: Esta notificación só confirma que a mensaxe se abriu no computador do destinatario. Non asegura que o destinatario o lera ou entendera o seu contido.';
+$labels['name'] = 'Nome completo';
+$labels['firstname'] = 'Nome';
+$labels['surname'] = 'Apelidos';
+$labels['email'] = 'Correo Electrónico';
+$labels['addcontact'] = 'Engadir novo contacto';
+$labels['editcontact'] = 'Editar contacto';
+$labels['edit'] = 'Editar';
+$labels['cancel'] = 'Cancelar';
+$labels['save'] = 'Gardar';
+$labels['delete'] = 'Borrar';
+$labels['newcontact'] = 'Crear novo contacto';
+$labels['deletecontact'] = 'Borrar os contactos seleccionados';
+$labels['composeto'] = 'Redactar mensaxe a';
+$labels['contactsfromto'] = 'Contactos do $from ao $to de $count';
+$labels['print'] = 'Imprimir';
+$labels['export'] = 'Exportar';
+$labels['previouspage'] = 'Amosar o grupo anterior';
+$labels['firstpage'] = 'Amosar o primeiro grupo';
+$labels['nextpage'] = 'Amosar o seguinte grupo';
+$labels['lastpage'] = 'Amosar o último grupo';
+$labels['groups'] = 'Grupos';
+$labels['personaladrbook'] = 'Enderezos persoais';
+$labels['settingsfor'] = 'Axustes de';
+$labels['preferences'] = 'Preferencias';
+$labels['userpreferences'] = 'Preferencias de usuario';
+$labels['editpreferences'] = 'Editar preferencias de usuario';
+$labels['identities'] = 'Identidades';
+$labels['manageidentities'] = 'Administrar identidades de esta conta';
+$labels['newidentity'] = 'Nova identidade';
+$labels['newitem'] = 'Novo';
+$labels['edititem'] = 'Editar';
+$labels['setdefault'] = 'Opción por defecto';
+$labels['language'] = 'Linguaxe';
+$labels['timezone'] = 'Zona horaria';
+$labels['pagesize'] = 'Filas por páxina';
+$labels['signature'] = 'Sinatura';
+$labels['dstactive'] = 'Cambio de hora';
+$labels['htmleditor'] = 'Redactar mensaxes HTML';
+$labels['htmlsignature'] = 'Sinatura HTML';
+$labels['previewpane'] = 'Amosar panel de previsualización';
+$labels['autosavedraft'] = 'Gardar borrador automáticamente';
+$labels['everynminutes'] = 'cada $n minutos';
+$labels['never'] = 'nunca';
+$labels['folder'] = 'Cartafol';
+$labels['folders'] = 'Cartafoles';
+$labels['foldername'] = 'Nome do cartafol';
+$labels['subscribed'] = 'Subscrito';
+$labels['messagecount'] = 'Mensaxes';
+$labels['create'] = 'Crear';
+$labels['createfolder'] = 'Crear novo cartafol';
+$labels['rename'] = 'Renomear';
+$labels['renamefolder'] = 'Renomear cartafol';
+$labels['deletefolder'] = 'Borrar cartafol';
+$labels['managefolders'] = 'Xestionar cartafoles';
+$labels['sortby'] = 'Ordenar por';
+$labels['sortasc'] = 'Orde ascendente';
+$labels['sortdesc'] = 'Orde descendente';
+
+?>
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | language/gl/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: David Garabana Barro <david garabana com> |
+ +-----------------------------------------------------------------------+
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Fallou o acceso';
+$messages['cookiesdisabled'] = 'O seu navegador non acepta galletas';
+$messages['sessionerror'] = 'A súa sesión non é válida ou expirou';
+$messages['imaperror'] = 'Fallou a conexión co servidor IMAP';
+$messages['nomessagesfound'] = 'Non se atoparon mensaxes nesta caixa de correo';
+$messages['loggedout'] = 'Rematou correctamente a súa sesión. Ata logo!';
+$messages['mailboxempty'] = 'A caixa de correo está vacía';
+$messages['loading'] = 'Cargando...';
+$messages['loadingdata'] = 'Cargando datos...';
+$messages['checkingmail'] = 'Buscando novas mensaxes...';
+$messages['sendingmessage'] = 'Enviando mensaxe...';
+$messages['messagesent'] = 'A mensaxe enviouse correctamente';
+$messages['savingmessage'] = 'Gardando mensaxe...';
+$messages['messagesaved'] = 'A mensaxe gardouse en "Borradores"';
+$messages['successfullysaved'] = 'Gardada correctamente';
+$messages['addedsuccessfully'] = 'O contacto engadiuse correctamente ao caderno de enderezos';
+$messages['contactexists'] = 'Xa existe un contacto con este enderezo de correo electrónico';
+$messages['blockedimages'] = 'Estanse a bloquear as imaxes remotas para protexer a súa privacidade';
+$messages['encryptedmessage'] = 'Síntoo!. Non se pode amosar a mensaxe porque está cifrada';
+$messages['nocontactsfound'] = 'Non se atoparon contactos';
+$messages['contactnotfound'] = 'Non se atopou o contacto solicitado';
+$messages['sendingfailed'] = 'Fallou o envío da mensaxe';
+$messages['errorsaving'] = 'Ocurriu un erro mentres se gardaba';
+$messages['errormoving'] = 'Non puiden mover a mensaxe';
+$messages['errordeleting'] = 'Non puiden borrar a mensaxe';
+$messages['deletecontactconfirm'] = 'Quere borrar o(s) contacto(s) seleccionados?';
+$messages['deletemessagesconfirm'] = 'Quere borrar a(s) mensaxe(s) seleccionadas?';
+$messages['deletefolderconfirm'] = 'Quere borrar este cartafol?';
+$messages['purgefolderconfirm'] = 'Quere borrar tódalas mensaxes neste cartafol?';
+$messages['formincomplete'] = 'Non se cumprimentou completamente o formulario';
+$messages['noemailwarning'] = 'Por favor, introduza un enderezo de correo electrónico válida';
+$messages['nonamewarning'] = 'Por favor, introduza un nome';
+$messages['nopagesizewarning'] = 'Por favor, introduza un tamaño de páxina';
+$messages['norecipientwarning'] = 'Por favor, introduza polo menos un destinatario';
+$messages['nosubjectwarning'] = 'O campo "tema" está baleiro. Quere introducir un?';
+$messages['nobodywarning'] = 'Quere enviar esta mensaxe sen texto?';
+$messages['notsentwarning'] = 'A mensaxe non se enviou. Quere descartala?';
+$messages['noldapserver'] = 'Por favor, elixa un servidor LDAP para buscar';
+$messages['nocontactsreturned'] = 'Non se atoparon contactos';
+$messages['nosearchname'] = 'Por favor, introduza un contacto ou un enderezo de correo electrónico';
+$messages['searchsuccessful'] = 'Atopáronse $nr mensaxes';
+$messages['searchnomatch'] = 'A busca non atopou coincidencias';
+$messages['searching'] = 'Buscando...';
+$messages['checking'] = 'Comprobando...';
+$messages['nospellerrors'] = 'Non hai erros ortográficos';
+$messages['folderdeleted'] = 'Borrouse o cartafol con éxito';
+$messages['deletedsuccessfully'] = 'Borrouse con éxito';
+$messages['converting'] = 'Eliminando o formato da mensaxe...';
+$messages['messageopenerror'] = 'Non puiden cargar a mensaxe desde o servidor';
+$messages['fileuploaderror'] = 'Fallou a carga do ficheiro';
+$messages['filesizeerror'] = 'O ficheiro cargado é máis grande que o tamaño máximo de $size';
+$messages['copysuccess'] = 'Copiáronse correctamente $nr enderezos';
+$messages['copyerror'] = 'Non puiden copiar ningún enderezo';
+$messages['sourceisreadonly'] = 'A orixe é de só lectura';
+$messages['errorsavingcontact'] = 'Non puiden gardar o contacto';
+$messages['movingmessage'] = 'Movendo mensaxe...';
+$messages['receiptsent'] = 'A notificación de disposición enviouse correctamente';
+$messages['errorsendingreceipt'] = 'Non se puido enviar a notificación';
+$messages['nodeletelastidentity'] = 'Non pode borrar esta identidade, é a última';
+$messages['addsubfolderhint'] = 'Este cartafol vaise crear coma un subcartafol do seleccionado';
+
+?>
+++ /dev/null
-<?php\r
-\r
-/*\r
- +-----------------------------------------------------------------------+\r
- | language/he/labels.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Moshe Leibovitch <moish@mln.co.il> |\r
- +-----------------------------------------------------------------------+\r
-*/\r
-\r
-$labels = array();\r
-$labels['welcome'] = 'ברוך בואך אל $product';\r
-$labels['username'] = 'שם';\r
-$labels['password'] = 'סיסמה';\r
-$labels['server'] = 'שרת';\r
-$labels['login'] = 'כניסה';\r
-$labels['logout'] = 'יציאה';\r
-$labels['mail'] = 'תיבת דואר';\r
-$labels['settings'] = 'הגדרות אישיות';\r
-$labels['addressbook'] = 'פנקס כתובות';\r
-$labels['inbox'] = 'נכנס';\r
-$labels['drafts'] = 'טיוטות';\r
-$labels['sent'] = 'נשלח';\r
-$labels['trash'] = 'אשפה';\r
-$labels['junk'] = 'זבל';\r
-$labels['subject'] = 'נושא';\r
-$labels['from'] = 'מאת';\r
-$labels['to'] = 'אל';\r
-$labels['cc'] = 'לידיעה';\r
-$labels['bcc'] = 'מכותב מוסתר';\r
-$labels['replyto'] = 'מענה לשולח';\r
-$labels['date'] = 'תאריך';\r
-$labels['size'] = 'גודל';\r
-$labels['priority'] = 'עדיפות';\r
-$labels['organization'] = 'ארגון';\r
-$labels['reply-to'] = 'מענה לשולח';\r
-$labels['mailboxlist'] = 'תיקים';\r
-$labels['messagesfromto'] = 'הודעות $from עד $to מתוך $count';\r
-$labels['messagenrof'] = 'הודעה $nr מתוך $count';\r
-$labels['moveto'] = 'תיוק ב..';\r
-$labels['download'] = 'הורדה';\r
-$labels['filename'] = 'שם קובץ';\r
-$labels['filesize'] = 'גודל קובץ';\r
-$labels['preferhtml'] = 'הצגת HTML';\r
-$labels['htmlmessage'] = 'תוכן HTML';\r
-$labels['prettydate'] = 'תאריכים מעוצבים';\r
-$labels['addtoaddressbook'] = 'הוספה לפנקס כתובות';\r
-$labels['sun'] = 'יום א';\r
-$labels['mon'] = 'יום ב';\r
-$labels['tue'] = 'יום ג';\r
-$labels['wed'] = 'יום ד';\r
-$labels['thu'] = 'יום ה';\r
-$labels['fri'] = 'יום ו';\r
-$labels['sat'] = 'יום ש';\r
-$labels['sunday'] = 'ראשון';\r
-$labels['monday'] = 'שני';\r
-$labels['tuesday'] = 'שלישי';\r
-$labels['wednesday'] = 'רביעי';\r
-$labels['thursday'] = 'חמישי';\r
-$labels['friday'] = 'ששי';\r
-$labels['saturday'] = 'שבת';\r
-$labels['today'] = 'היום';\r
-$labels['checkmail'] = 'בדיקת תיבה';\r
-$labels['writenewmessage'] = 'מכתב חדש';\r
-$labels['replytomessage'] = 'מענה למכתב';\r
-$labels['replytoallmessage'] = 'מענה לשולח ולכל הנמענים';\r
-$labels['forwardmessage'] = 'העברת מכתב';\r
-$labels['deletemessage'] = 'מחיקה';\r
-$labels['movemessagetotrash'] = 'השלכה לאשפה';\r
-$labels['printmessage'] = 'הדפסה';\r
-$labels['previousmessage'] = 'הצגת מכתב קודם';\r
-$labels['previousmessages'] = 'הצגת רשימה קודמת';\r
-$labels['firstmessage'] = 'הצגת המכתב הראשון';\r
-$labels['firstmessages'] = 'הצגה של קבוצת המכתבים הראשונה';\r
-$labels['nextmessage'] = 'הצגת המכתב הבא';\r
-$labels['nextmessages'] = 'הצגה של קבוצת המכתבים הבאה';\r
-$labels['lastmessage'] = 'הצגת המכתב האחרון';\r
-$labels['lastmessages'] = 'הצגה של קבוצת המכתבים האחרונה';\r
-$labels['backtolist'] = 'חזרה אל רשימת המכתבים';\r
-$labels['viewsource'] = 'הצגת קוד מקור';\r
-$labels['markmessages'] = 'סימון הודעות';\r
-$labels['markread'] = 'כנקראו';\r
-$labels['markunread'] = 'כלא נקראו';\r
-$labels['select'] = 'בחירה';\r
-$labels['all'] = 'הכל';\r
-$labels['none'] = 'כלום';\r
-$labels['unread'] = 'לא נקראו';\r
-$labels['compact'] = 'פינוי שטח לא מנוצל';\r
-$labels['empty'] = 'ריקון';\r
-$labels['purge'] = 'מחיקה';\r
-$labels['quota'] = 'ניצול קיבולת';\r
-$labels['unknown'] = 'לא ידוע';\r
-$labels['unlimited'] = 'ללא הגבלה';\r
-$labels['quicksearch'] = 'חיפוש מהיר';\r
-$labels['resetsearch'] = 'ניקוי תיבת החיפוש';\r
-$labels['compose'] = 'מכתב חדש';\r
-$labels['savemessage'] = 'שמירת טיוטה';\r
-$labels['sendmessage'] = 'משלוח מיידי';\r
-$labels['addattachment'] = 'צירוף קובץ';\r
-$labels['charset'] = 'קידוד';\r
-$labels['editortype'] = 'סוג עורך';\r
-$labels['returnreceipt'] = 'אישור קבלה';\r
-$labels['checkspelling'] = 'בדיקת איות';\r
-$labels['resumeediting'] = 'המשך עריכה';\r
-$labels['revertto'] = 'חזור למצב קודם';\r
-$labels['attachments'] = 'קבצים מצורפים';\r
-$labels['upload'] = 'העלאה';\r
-$labels['close'] = 'סגירה';\r
-$labels['low'] = 'נמוך';\r
-$labels['lowest'] = 'נמוך ביותר';\r
-$labels['normal'] = 'רגיל';\r
-$labels['high'] = 'גבוה';\r
-$labels['highest'] = 'גבוה ביותר';\r
-$labels['nosubject'] = '(ללא נושא)';\r
-$labels['showimages'] = 'הצגת תמונות';\r
-$labels['htmltoggle'] = 'HTML';\r
-$labels['plaintoggle'] = 'ללא עיצוב';\r
-$labels['addcc'] = 'הוספת מכותב לידיעה';\r
-$labels['addbcc'] = 'הוספת מכותב נסתר';\r
-$labels['addreplyto'] = 'הוספת כתובת למענה';\r
-$labels['mdnrequest'] = 'השולח ביקש לדעת אם המכתב נקרא. האם להודיע לשולח?';\r
-$labels['receiptread'] = '(אישור קבלה (נקרא';\r
-$labels['yourmessage'] = 'זה אישור קבלה למכתבך';\r
-$labels['receiptnote'] = 'זה אישור על כך שהמכתב הוצג אבל אינו מבטיח שהתוכן נקרא או הובן';\r
-$labels['name'] = 'שם להצגה';\r
-$labels['firstname'] = 'שם פרטי';\r
-$labels['surname'] = 'שם משפחה';\r
-$labels['email'] = 'כתובת דוא"ל';\r
-$labels['addcontact'] = 'הוספת איש קשר';\r
-$labels['editcontact'] = 'עריכת איש קשר';\r
-$labels['edit'] = 'עריכה';\r
-$labels['cancel'] = 'ביטול';\r
-$labels['save'] = 'שמירה';\r
-$labels['delete'] = 'מחיקה';\r
-$labels['newcontact'] = 'איש קשר חדש';\r
-$labels['deletecontact'] = 'מחיקת אנשי קשר מסומנים';\r
-$labels['composeto'] = 'משלוח מכתב אל';\r
-$labels['contactsfromto'] = 'אנשי קשר $from עד $to מתוך $count';\r
-$labels['print'] = 'הדפסה';\r
-$labels['export'] = 'ייצוא';\r
-$labels['previouspage'] = 'הצגת הקבוצה הקודמת';\r
-$labels['firstpage'] = 'הצגת הקבוצה הראשונה';\r
-$labels['nextpage'] = 'הצגת הקבוצה הבאה';\r
-$labels['lastpage'] = 'הצגת הקבוצה האחרונה';\r
-$labels['groups'] = 'קבוצות';\r
-$labels['personaladrbook'] = 'כתובות פרטיות';\r
-$labels['settingsfor'] = 'הגדרות עבור';\r
-$labels['preferences'] = 'העדפות';\r
-$labels['userpreferences'] = 'העדפות משתמש';\r
-$labels['editpreferences'] = 'עריכה של העדפות משתמש';\r
-$labels['identities'] = 'זהויות';\r
-$labels['manageidentities'] = 'ניהול זהויות לחשבון זה';\r
-$labels['newidentity'] = 'זהות חדשה';\r
-$labels['newitem'] = 'פריט חדש';\r
-$labels['edititem'] = 'עריכת פריט';\r
-$labels['setdefault'] = 'קביעה של ברירת מחדל';\r
-$labels['language'] = 'שפה';\r
-$labels['timezone'] = 'איזור זמן';\r
-$labels['pagesize'] = 'מספר שורות בדף';\r
-$labels['signature'] = 'חתימה';\r
-$labels['dstactive'] = 'שעון קיץ';\r
-$labels['htmleditor'] = 'יצירת הודעה מעוצבת';\r
-$labels['htmlsignature'] = 'חתימה מעוצבת';\r
-$labels['previewpane'] = 'הצג הצצה מוקדמת';\r
-$labels['autosavedraft'] = 'שמירה אוטומטית של טיוטה';\r
-$labels['everynminutes'] = 'כל $n דקות';\r
-$labels['never'] = 'אף פעם';\r
-$labels['folder'] = 'תיק';\r
-$labels['folders'] = 'תיקים';\r
-$labels['foldername'] = 'שם תיק';\r
-$labels['subscribed'] = 'מנוי';\r
-$labels['messagecount'] = 'הודעות';\r
-$labels['create'] = 'יצירה';\r
-$labels['createfolder'] = 'יצירת תיק חדש';\r
-$labels['rename'] = 'שינוי שם';\r
-$labels['renamefolder'] = 'שינוי שם תיק';\r
-$labels['deletefolder'] = 'מחיקת תיק';\r
-$labels['managefolders'] = 'ניהול תיקים';\r
-$labels['sortby'] = 'מיון לפי';\r
-$labels['sortasc'] = 'מיון בסדר עולה';\r
-$labels['sortdesc'] = 'מיון בסדר יורד';\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-\r
-/*\r
- +-----------------------------------------------------------------------+\r
- | language/he/messages.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Moshe Leibovitch <moish@mln.co.il> |\r
- +-----------------------------------------------------------------------+\r
-\r
-*/\r
-\r
-$messages = array();\r
-$messages['loginfailed'] = 'הכניסה נכשלה';\r
-$messages['cookiesdisabled'] = 'הדפדפן אינו מקבל עוגיות';\r
-$messages['sessionerror'] = 'הקשר שלך אינו חוקי או שפג תוקפו';\r
-$messages['imaperror'] = 'הקשר לשרת נכשל';\r
-$messages['nomessagesfound'] = 'לא נמצאו מכתבים בתיבה זו';\r
-$messages['loggedout'] = 'הקשר הסתיים. להתראות!';\r
-$messages['mailboxempty'] = 'התיבה ריקה';\r
-$messages['loading'] = 'טעינה...';\r
-$messages['loadingdata'] = 'טעינת מידע..';\r
-$messages['checkingmail'] = 'בדיקת קיום מכתבים חדשים...';\r
-$messages['sendingmessage'] = 'משלוח מכתבים';\r
-$messages['messagesent'] = 'מכתב נשלח בהצלחה';\r
-$messages['savingmessage'] = 'שמירת מכתב...';\r
-$messages['messagesaved'] = 'המכתב נשמר כטיוטה';\r
-$messages['successfullysaved'] = 'נשמר בהצלחה';\r
-$messages['addedsuccessfully'] = 'איש הקשר נוסף לפנקס בהצלחה';\r
-$messages['contactexists'] = 'קיים כבר איש קשר עם כתובת דוא"ל זו';\r
-$messages['blockedimages'] = 'תמונות משרת אחר נחסמו כדי לשמור על הפרטיות';\r
-$messages['encryptedmessage'] = 'זו הודעת מוצפנת ולכן לא ניתן להציגה';\r
-$messages['nocontactsfound'] = 'לא נמצאו אנשי קשר';\r
-$messages['contactnotfound'] = 'איש הקשר המבוקש לא נמצא';\r
-$messages['sendingfailed'] = 'שליחת המכתב נכשלה';\r
-$messages['errorsaving'] = 'נגרמה שגיאה במהלך השמירה';\r
-$messages['errormoving'] = 'לא ניתן לתייק את המכתב';\r
-$messages['errordeleting'] = 'לא ניתן למחוק את המכתב';\r
-$messages['deletecontactconfirm'] = 'האם למחוק את איש הקשר?';\r
-$messages['deletemessagesconfirm'] = 'האם למחוק את המכתבים נמסומנים?';\r
-$messages['deletefolderconfirm'] = 'האם למחוק תיק זה?';\r
-$messages['purgefolderconfirm'] = 'האם למחוק את כל ההודעות בתיק זה?';\r
-$messages['formincomplete'] = 'לא הושלמו כל הפרטים בטופס זה';\r
-$messages['noemailwarning'] = 'נא להוסיף כתובת דוא"ל חוקית';\r
-$messages['nonamewarning'] = 'נא להוסיף שם';\r
-$messages['nopagesizewarning'] = 'נא להוסיף גודל דף';\r
-$messages['norecipientwarning'] = 'נא להוסיף לפחות נמען אחד';\r
-$messages['nosubjectwarning'] = 'שורת הנושא ריקה. האם ברצונך להוסיף נושא כעת?';\r
-$messages['nobodywarning'] = 'האם לשלוח מכתב ללא תוכן?';\r
-$messages['notsentwarning'] = 'המכתב לא נשלח. האם לבטלו?';\r
-$messages['noldapserver'] = 'נא לבחור שרת כתובות לחיפוש';\r
-$messages['nocontactsreturned'] = 'לא נמצאו אנשי קשר';\r
-$messages['nosearchname'] = 'נא להוסיף איש קשר או כתובת דוא"ל';\r
-$messages['searchsuccessful'] = 'נמצאו $nr מכתבים';\r
-$messages['searchnomatch'] = 'החיפוש לא מצא דבר';\r
-$messages['searching'] = 'חיפוש...';\r
-$messages['checking'] = 'בדיקה...';\r
-$messages['nospellerrors'] = 'לא נמצאו שגיאות כתיב';\r
-$messages['folderdeleted'] = 'התיק נמחק בהצלחה';\r
-$messages['deletedsuccessfully'] = 'המחיקה הסתימה בהצלחה';\r
-$messages['converting'] = 'הסרת העיצוב מהמכתב';\r
-$messages['messageopenerror'] = 'לא ניתן לטעון המכתב מהשרת';\r
-$messages['fileuploaderror'] = 'העלאת הקובץ נכשלה';\r
-$messages['filesizeerror'] = 'הקובץ לטעינה גדול מהגודל המקסימלי שהוא $size';\r
-$messages['copysuccess'] = '$nr כתובות הועתקו בהצלחה';\r
-$messages['copyerror'] = 'לא ניתן היה להעתיק כתובת כלשהי';\r
-$messages['sourceisreadonly'] = 'המקור לכתובת הוא לקריאה בלבד';\r
-$messages['errorsavingcontact'] = 'לא ניתן לשמור את כתובת איש הקשר';\r
-$messages['movingmessage'] = 'תיוק המכתב..';\r
-$messages['receiptsent'] = 'אישור הקבלה נשלח בהצלחה';\r
-$messages['errorsendingreceipt'] = 'לא ניתן לשלוח אישור קבלה';\r
-$messages['nodeletelastidentity'] = 'זו הזהות האחרונה ולכן לא ניתן לבטלה';\r
-$messages['addsubfolderhint'] = 'תיקיה זו תוקם תחת התיקיה שנבחרה';\r
-\r
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
++-----------------------------------------------------------------------+
+| language/he/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Moshe Leibovitch <moish@mln.co.il> |
+| Updates: Noor Dawod <noor@comrax.com> |
++-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['welcome'] = 'ברוך בואך אל $product';
+$labels['username'] = 'שם משתמש';
+$labels['password'] = 'סיסמה';
+$labels['server'] = 'שרת';
+$labels['login'] = 'כניסה';
+$labels['logout'] = 'יציאה';
+$labels['mail'] = 'תיבת דואר';
+$labels['settings'] = 'הגדרות אישיות';
+$labels['addressbook'] = 'פנקס כתובות';
+$labels['inbox'] = 'נכנס';
+$labels['drafts'] = 'טיוטות';
+$labels['sent'] = 'נשלח';
+$labels['trash'] = 'אשפה';
+$labels['junk'] = 'זבל';
+$labels['subject'] = 'נושא';
+$labels['from'] = 'מאת';
+$labels['to'] = 'אל';
+$labels['cc'] = 'לידיעה';
+$labels['bcc'] = 'מכותב מוסתר';
+$labels['replyto'] = 'מענה לשולח';
+$labels['date'] = 'תאריך';
+$labels['size'] = 'גודל';
+$labels['priority'] = 'עדיפות';
+$labels['organization'] = 'ארגון';
+$labels['reply-to'] = 'מענה לשולח';
+$labels['mailboxlist'] = 'תיקים';
+$labels['messagesfromto'] = 'מכתבים $from עד $to מתוך $count';
+$labels['messagenrof'] = 'מכתב $nr מתוך $count';
+$labels['moveto'] = 'תיוק ב...';
+$labels['download'] = 'הורדה';
+$labels['filename'] = 'שם קובץ';
+$labels['filesize'] = 'גודל קובץ';
+$labels['preferhtml'] = 'הצגת HTML';
+$labels['htmlmessage'] = 'תוכן HTML';
+$labels['prettydate'] = 'תאריכים מעוצבים';
+$labels['addtoaddressbook'] = 'הוספה לפנקס כתובות';
+$labels['sun'] = 'יום א';
+$labels['mon'] = 'יום ב';
+$labels['tue'] = 'יום ג';
+$labels['wed'] = 'יום ד';
+$labels['thu'] = 'יום ה';
+$labels['fri'] = 'יום ו';
+$labels['sat'] = 'יום ש';
+$labels['sunday'] = 'ראשון';
+$labels['monday'] = 'שני';
+$labels['tuesday'] = 'שלישי';
+$labels['wednesday'] = 'רביעי';
+$labels['thursday'] = 'חמישי';
+$labels['friday'] = 'ששי';
+$labels['saturday'] = 'שבת';
+$labels['jan'] = 'ינו';
+$labels['feb'] = 'פבר';
+$labels['mar'] = 'מרץ';
+$labels['apr'] = 'אפר';
+$labels['may'] = 'מאי';
+$labels['jun'] = 'יונ';
+$labels['jul'] = 'יול';
+$labels['aug'] = 'אוג';
+$labels['sep'] = 'ספט';
+$labels['oct'] = 'אוק';
+$labels['nov'] = 'נוב';
+$labels['dec'] = 'דצמ';
+$labels['longjan'] = 'ינואר';
+$labels['longfeb'] = 'פברואר';
+$labels['longmar'] = 'מרץ';
+$labels['longapr'] = 'אפריל';
+$labels['longmay'] = 'מאי';
+$labels['longjun'] = 'יוני';
+$labels['longjul'] = 'יולי';
+$labels['longaug'] = 'אוגוסט';
+$labels['longsep'] = 'ספטמבר';
+$labels['longoct'] = 'אוקטובר';
+$labels['longnov'] = 'נובמבר';
+$labels['longdec'] = 'דצמבר';
+$labels['today'] = 'היום';
+$labels['checkmail'] = 'בדיקת מכתבים חדשים';
+$labels['writenewmessage'] = 'מכתב חדש';
+$labels['replytomessage'] = 'מענה למכתב';
+$labels['replytoallmessage'] = 'מענה לשולח ולכל הנמענים';
+$labels['forwardmessage'] = 'העבר מכתב';
+$labels['deletemessage'] = 'מחיקה';
+$labels['movemessagetotrash'] = 'השלכה לאשפה';
+$labels['printmessage'] = 'הדפסה';
+$labels['previousmessage'] = 'הצג מכתב קודם';
+$labels['previousmessages'] = 'הצגת רשימה קודמת';
+$labels['firstmessage'] = 'הצג מכתב ראשון';
+$labels['firstmessages'] = 'הצגה של קבוצת המכתבים הראשונה';
+$labels['nextmessage'] = 'הצג מכתב הבא';
+$labels['nextmessages'] = 'הצגה של קבוצת המכתבים הבאה';
+$labels['lastmessage'] = 'הצג מכתב אחרון';
+$labels['lastmessages'] = 'הצגה של קבוצת המכתבים האחרונה';
+$labels['backtolist'] = 'חזרה אל רשימת המכתבים';
+$labels['viewsource'] = 'הצגת קוד מקור';
+$labels['markmessages'] = 'סימון מכתבים';
+$labels['markread'] = 'כנקראו';
+$labels['markunread'] = 'כלא נקראו';
+$labels['select'] = 'בחירה';
+$labels['all'] = 'הכל';
+$labels['none'] = 'כלום';
+$labels['unread'] = 'לא נקראו';
+$labels['compact'] = 'פינוי שטח לא מנוצל';
+$labels['empty'] = 'ריקון';
+$labels['purge'] = 'מחיקה';
+$labels['quota'] = 'ניצול קיבולת';
+$labels['unknown'] = 'לא ידוע';
+$labels['unlimited'] = 'ללא הגבלה';
+$labels['quicksearch'] = 'חיפוש מהיר';
+$labels['resetsearch'] = 'ניקוי תיבת החיפוש';
+$labels['compose'] = 'מכתב חדש';
+$labels['savemessage'] = 'שמירת טיוטה';
+$labels['sendmessage'] = 'משלוח מיידי';
+$labels['addattachment'] = 'צירוף קובץ';
+$labels['charset'] = 'קידוד';
+$labels['editortype'] = 'סוג עורך';
+$labels['returnreceipt'] = 'אישור קבלה';
+$labels['checkspelling'] = 'בדיקת איות';
+$labels['resumeediting'] = 'המשך עריכה';
+$labels['revertto'] = 'חזור למצב קודם';
+$labels['attachments'] = 'קבצים מצורפים';
+$labels['upload'] = 'העלאה';
+$labels['close'] = 'סגירה';
+$labels['low'] = 'נמוך';
+$labels['lowest'] = 'נמוך ביותר';
+$labels['normal'] = 'רגיל';
+$labels['high'] = 'גבוה';
+$labels['highest'] = 'גבוה ביותר';
+$labels['nosubject'] = '(ללא נושא)';
+$labels['showimages'] = 'הצגת תמונות';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'ללא עיצוב';
+$labels['addcc'] = 'הוספת מכותב לידיעה';
+$labels['addbcc'] = 'הוספת מכותב נסתר';
+$labels['addreplyto'] = 'הוספת כתובת למענה';
+$labels['mdnrequest'] = 'השולח ביקש לדעת אם המכתב נקרא. האם להודיע לשולח?';
+$labels['receiptread'] = '(אישור קבלה (נקרא';
+$labels['yourmessage'] = 'אישור קבלה למכתבך';
+$labels['receiptnote'] = 'הערה: האישור אינו מבטיח שהנמען קרא או הבין את תוכן מכתבך.';
+$labels['name'] = 'שם להצגה';
+$labels['firstname'] = 'שם פרטי';
+$labels['surname'] = 'שם משפחה';
+$labels['email'] = 'כתובת דוא\"ל';
+$labels['addcontact'] = 'הוספת איש קשר';
+$labels['editcontact'] = 'עריכת איש קשר';
+$labels['edit'] = 'עריכה';
+$labels['cancel'] = 'ביטול';
+$labels['save'] = 'שמירה';
+$labels['delete'] = 'מחיקה';
+$labels['newcontact'] = 'איש קשר חדש';
+$labels['deletecontact'] = 'מחיקת אנשי קשר מסומנים';
+$labels['composeto'] = 'משלוח מכתב אל';
+$labels['contactsfromto'] = 'אנשי קשר $from עד $to מתוך $count';
+$labels['print'] = 'הדפסה';
+$labels['export'] = 'ייצוא';
+$labels['previouspage'] = 'הצגת הקבוצה הקודמת';
+$labels['firstpage'] = 'הצגת הקבוצה הראשונה';
+$labels['nextpage'] = 'הצגת הקבוצה הבאה';
+$labels['lastpage'] = 'הצגת הקבוצה האחרונה';
+$labels['groups'] = 'קבוצות';
+$labels['personaladrbook'] = 'כתובות פרטיות';
+$labels['settingsfor'] = 'הגדרות עבור';
+$labels['preferences'] = 'העדפות';
+$labels['userpreferences'] = 'העדפות משתמש';
+$labels['editpreferences'] = 'עריכה של העדפות משתמש';
+$labels['identities'] = 'זהויות';
+$labels['manageidentities'] = 'ניהול זהויות לחשבון זה';
+$labels['newidentity'] = 'זהות חדשה';
+$labels['newitem'] = 'פריט חדש';
+$labels['edititem'] = 'עריכת פריט';
+$labels['setdefault'] = 'קביעת ברירת מחדל';
+$labels['language'] = 'שפה';
+$labels['timezone'] = 'איזור זמן';
+$labels['pagesize'] = 'מספר שורות בדף';
+$labels['signature'] = 'חתימה';
+$labels['dstactive'] = 'שעון קיץ';
+$labels['htmleditor'] = 'צור מכתב מעוצב';
+$labels['htmlsignature'] = 'חתימה מעוצבת';
+$labels['previewpane'] = 'הצג הצצה מוקדמת';
+$labels['logoutclear'] = 'ריקון סל אשפה ביציאה';
+$labels['logoutcompact'] = 'פינוי שטח לא מנוצל ביציאה';
+$labels['uisettings'] = 'ממשק משתמש';
+$labels['serversettings'] = 'הגדרות שרת';
+$labels['mailboxview'] = 'הצצה לתיבת הדוא\"ל';
+$labels['mdnrequests'] = 'הודעות השרת';
+$labels['askuser'] = 'שאל את המשתמש';
+$labels['autosend'] = 'שליחה אוטומטית';
+$labels['ignore'] = 'התעלם';
+$labels['readwhendeleted'] = 'סימון הודעה כנקראה לאחר מחיקה';
+$labels['flagfordeletion'] = 'איתות על מחיקת הודעה';
+$labels['autosavedraft'] = 'שמירה אוטומטית של טיוטה';
+$labels['everynminutes'] = 'כל $n דקות';
+$labels['never'] = 'אף פעם';
+$labels['folder'] = 'תיק';
+$labels['folders'] = 'תיקים';
+$labels['foldername'] = 'שם תיק';
+$labels['subscribed'] = 'מנוי';
+$labels['messagecount'] = 'מכתבים';
+$labels['create'] = 'יצירה';
+$labels['createfolder'] = 'יצירת תיק חדש';
+$labels['rename'] = 'שינוי שם';
+$labels['renamefolder'] = 'שינוי שם תיק';
+$labels['deletefolder'] = 'מחיקת תיק';
+$labels['managefolders'] = 'ניהול תיקים';
+$labels['sortby'] = 'מיון לפי';
+$labels['sortasc'] = 'מיון בסדר עולה';
+$labels['sortdesc'] = 'מיון בסדר יורד';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
++-----------------------------------------------------------------------+
+| language/he/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Moshe Leibovitch <moish@mln.co.il> |
+| Updates: Noor Dawod <noor@comrax.com> |
++-----------------------------------------------------------------------+
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'הכניסה נכשלה';
+$messages['cookiesdisabled'] = 'הדפדפן אינו מקבל עוגיות';
+$messages['sessionerror'] = 'כניסתך למערכת אינה חוקית או שפג תוקפה';
+$messages['imaperror'] = 'הקשר לשרת הדוא\"ל נכשל';
+$messages['nomessagesfound'] = 'לא נמצאו מכתבים בתיבה זו';
+$messages['loggedout'] = 'הקשר הסתיים. להתראות!';
+$messages['mailboxempty'] = 'התיבה ריקה';
+$messages['loading'] = 'טעינה...';
+$messages['loadingdata'] = 'טעינת מידע...';
+$messages['checkingmail'] = 'בדיקת קיום מכתבים חדשים...';
+$messages['sendingmessage'] = 'משלוח מכתבים';
+$messages['messagesent'] = 'המכתב נשלח בהצלחה';
+$messages['savingmessage'] = 'שמירת מכתב...';
+$messages['messagesaved'] = 'המכתב נשמר כטיוטה';
+$messages['successfullysaved'] = 'נשמר בהצלחה';
+$messages['addedsuccessfully'] = 'איש הקשר נוסף לפנקס בהצלחה';
+$messages['contactexists'] = 'קיים כבר איש קשר עם כתובת דוא\"ל זו';
+$messages['blockedimages'] = 'תמונות משרת אחר נחסמו כדי לשמור על הפרטיות';
+$messages['encryptedmessage'] = 'זו הודעת מוצפנת ולא ניתן להציגה';
+$messages['nocontactsfound'] = 'לא נמצאו אנשי קשר';
+$messages['contactnotfound'] = 'איש הקשר המבוקש לא נמצא';
+$messages['sendingfailed'] = 'שליחת המכתב נכשלה';
+$messages['errorsaving'] = 'נגרמה שגיאה במהלך השמירה';
+$messages['errormoving'] = 'לא ניתן לתייק את המכתב';
+$messages['errordeleting'] = 'לא ניתן למחוק את המכתב';
+$messages['deletecontactconfirm'] = 'האם למחוק את איש הקשר?';
+$messages['deletemessagesconfirm'] = 'האם למחוק את המכתבים המסומנים?';
+$messages['deletefolderconfirm'] = 'האם למחוק תיק זה?';
+$messages['purgefolderconfirm'] = 'האם למחוק את כל ההודעות בתיק זה?';
+$messages['formincomplete'] = 'לא הוזנו כל השדות בטופס זה';
+$messages['noemailwarning'] = 'נא להוסיף כתובת דוא\"ל חוקית';
+$messages['nonamewarning'] = 'נא להוסיף שם';
+$messages['nopagesizewarning'] = 'נא להוסיף גודל דף';
+$messages['norecipientwarning'] = 'נא להוסיף לפחות נמען אחד';
+$messages['nosubjectwarning'] = 'שורת הנושא ריקה. האם ברצונך להוסיף נושא כעת?';
+$messages['nobodywarning'] = 'האם לשלוח מכתב ללא תוכן?';
+$messages['notsentwarning'] = 'המכתב לא נשלח. האם לבטל?';
+$messages['noldapserver'] = 'נא לבחור שרת כתובות לחיפוש';
+$messages['nocontactsreturned'] = 'לא נמצאו אנשי קשר';
+$messages['nosearchname'] = 'נא להוסיף איש קשר או כתובת דוא\"ל';
+$messages['searchsuccessful'] = 'נמצאו $nr מכתבים';
+$messages['searchnomatch'] = 'תוצאת החיפוש ריקה';
+$messages['searching'] = 'חיפוש...';
+$messages['checking'] = 'בדיקה...';
+$messages['nospellerrors'] = 'לא נמצאו שגיאות כתיב';
+$messages['folderdeleted'] = 'התיק נמחק בהצלחה';
+$messages['deletedsuccessfully'] = 'המחיקה הסתיימה בהצלחה';
+$messages['converting'] = 'הסרת העיצוב מהמכתב';
+$messages['messageopenerror'] = 'לא ניתן לטעון המכתב מהשרת';
+$messages['fileuploaderror'] = 'העלאת הקובץ נכשלה';
+$messages['filesizeerror'] = 'הקובץ לטעינה גדול מהגודל המקסימלי שהוא $size';
+$messages['copysuccess'] = '$nr כתובות הועתקו בהצלחה';
+$messages['copyerror'] = 'לא ניתן להעתיק אף כתובת';
+$messages['sourceisreadonly'] = 'המקור לכתובת הוא לקריאה בלבד';
+$messages['errorsavingcontact'] = 'לא ניתן לשמור את כתובת איש הקשר';
+$messages['movingmessage'] = 'תיוק המכתב...';
+$messages['receiptsent'] = 'אישור הקבלה נשלח בהצלחה';
+$messages['errorsendingreceipt'] = 'לא ניתן לשלוח אישור קבלה';
+$messages['nodeletelastidentity'] = 'זו הזהות האחרונה ולכן לא ניתן לבטלה';
+$messages['addsubfolderhint'] = 'תיקיה זו תוקם תחת התיקיה שנבחרה';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | localization/hi/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Aniruddha "Karim" Shankar <karim@sarai.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$labels = array();
-
-// login page
-$labels['welcome'] = '$product में स्वागत है';
-$labels['username'] = 'यूसरनाम';
-$labels['password'] = 'पासवर्ड';
-$labels['server'] = 'सर्वर';
-$labels['login'] = 'लॉगिन';
-
-// taskbar
-$labels['logout'] = 'लॉगआऊट';
-$labels['mail'] = 'ई-मेल';
-$labels['settings'] = 'निजी सैटिंग';
-$labels['addressbook'] = 'पता खाता';
-
-// mailbox names
-$labels['inbox'] = 'इनबॉक्स';
-$labels['drafts'] = 'ड्राफ़ट';
-$labels['sent'] = 'भेजा गया';
-$labels['trash'] = 'रद्दी';
-$labels['junk'] = 'स्पैम';
-
-// message listing
-$labels['subject'] = 'विशय';
-$labels['from'] = 'भेजने वाला';
-$labels['to'] = 'पाने वाला';
-$labels['cc'] = 'कार्बन';
-$labels['bcc'] = 'अंधा कार्बन';
-$labels['replyto'] = 'जवाब यहाँ';
-$labels['date'] = 'तारीख';
-$labels['size'] = 'माप';
-$labels['priority'] = 'मेल की महत्वपूर्णता';
-$labels['organization'] = 'संस्था';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-
-$labels['mailboxlist'] = 'फ़ोलडर';
-$labels['messagesfromto'] = '$from से ले कर $to, $count मेल में से';
-$labels['messagenrof'] = '$nr नम्बर मेल, $count में से';
-
-$labels['moveto'] = 'खीस्काऐं...';
-$labels['download'] = 'डाऊनलोड';
-
-$labels['filename'] = 'फ़ाईल नाम';
-$labels['filesize'] = 'फ़ाईल माप';
-
-$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) दिखाऐं';
-$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूप मेल करें';
-$labels['prettydate'] = 'सुनदर तारीखें';
-
-$labels['addtoaddressbook'] = 'पता खाते में जोडें';
-
-// weekdays short
-$labels['sun'] = 'रवि';
-$labels['mon'] = 'सोम';
-$labels['tue'] = 'मंग';
-$labels['wed'] = 'बुध';
-$labels['thu'] = 'गुरु';
-$labels['fri'] = 'शुक्र';
-$labels['sat'] = 'शनि';
-
-// weekdays long
-$labels['sunday'] = 'रविवार';
-$labels['monday'] = 'सोमवार';
-$labels['tuesday'] = 'मंगलवार';
-$labels['wednesday'] = 'बुधवार';
-$labels['thursday'] = 'गुरुवार';
-$labels['friday'] = 'शुक्रवार';
-$labels['saturday'] = 'शनिवार';
-
-$labels['today'] = 'आज';
-
-// toolbar buttons
-$labels['checkmail'] = 'नये मेल लाऐं';
-$labels['writenewmessage'] = 'मेल लिखें';
-$labels['replytomessage'] = 'मेल का जवाब दें';
-$labels['replytoallmessage'] = 'सभी को जवाब लिखें';
-$labels['forwardmessage'] = 'आगे भेजें';
-$labels['deletemessage'] = 'रद्द करें';
-$labels['printmessage'] = 'मेल छापें';
-$labels['previousmessage'] = 'पीछे के मेल दिखाऐं';
-$labels['previousmessages'] = 'पीछे के मेल का बन्डल दिखाऐं';
-$labels['firstmessage'] = 'पहला मेल दिखाऐं';
-$labels['firstmessages'] = 'पहला मेल का बन्डल दिखाऐं';
-$labels['nextmessage'] = 'अगला मेल दिखाऐं';
-$labels['nextmessages'] = 'अगले मेल का बन्डल दिखाऐं';
-$labels['lastmessage'] = 'आखीरी मेल दिखाऐं';
-$labels['lastmessages'] = 'आखिरी मेल का बन्डल दिखाऐं';
-$labels['backtolist'] = 'मेल सूची देखें';
-$labels['viewsource'] = 'सोर्स दिखाऐं';
-
-$labels['select'] = 'चुनें';
-$labels['all'] = 'सभी';
-$labels['none'] = 'कोई नहीं';
-$labels['unread'] = 'अनदेखी';
-
-$labels['compact'] = 'छोटा करें';
-$labels['empty'] = 'मेल रद्दी में डालें';
-$labels['purge'] = 'मिटाऐं';
-
-$labels['quota'] = 'डिस्क उपयोग';
-$labels['unknown'] = 'अज्ञात';
-$labels['unlimited'] = 'असीम';
-
-$labels['quicksearch'] = 'तेज़ खोज';
-$labels['resetsearch'] = 'खोज खाली करें';
-
-
-// message compose
-$labels['compose'] = 'मेल लिखें';
-$labels['sendmessage'] = 'मेल भेजें';
-$labels['savemessage'] = 'ड्राफ़ट सहेजें';
-$labels['addattachment'] = 'फ़ाईल जोडें';
-$labels['charset'] = 'कैरेक्टर सैट';
-$labels['editortype'] = 'सम्पादक प्राकार';
-$labels['returnreceipt'] = 'मेल रसीद';
-
-$labels['checkspelling'] = 'स्पैलिंग जाँचें';
-$labels['resumeediting'] = 'सम्पादन फिर शुरू करें';
-$labels['revertto'] = 'पहले की स्थिती पर जाऐं';
-
-$labels['attachments'] = 'जुडे फाईल';
-$labels['upload'] = 'अपलोड';
-$labels['close'] = 'बंद';
-
-$labels['low'] = 'कम';
-$labels['lowest'] = 'सबसे कम';
-$labels['normal'] = 'साधारण';
-$labels['high'] = 'उच्च';
-$labels['highest'] = 'उच्चतम';
-
-$labels['nosubject'] = '(कोई विशय नहीं)';
-$labels['showimages'] = 'चित्र दिखाऐं';
-
-$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)';
-$labels['plaintoggle'] = 'सादा पाठ';
-
-
-// address boook
-$labels['name'] = 'दिखने वाला नाम';
-$labels['firstname'] = 'पहला नाम';
-$labels['surname'] = 'उपनाम';
-$labels['email'] = 'मेल';
-
-$labels['addcontact'] = 'नया पता जोडें';
-$labels['editcontact'] = 'पता सम्पाद';
-
-$labels['edit'] = 'सम्पाद';
-$labels['cancel'] = 'रद्द';
-$labels['save'] = 'सहेज';
-$labels['delete'] = 'मिटा';
-
-$labels['newcontact'] = 'नया पता कार्ड बनाऐं';
-$labels['deletecontact'] = 'चुने पते मिटाऐं';
-$labels['composeto'] = 'को मेल भेजें';
-$labels['contactsfromto'] = '$from से ले कर $to, $count पते में से';
-$labels['print'] = 'छापें';
-$labels['export'] = 'ऐक्स्पोर्ट';
-
-$labels['previouspage'] = 'इससे पहले के बन्डल को दिखाऐं';
-$labels['firstpage'] = 'पहला बन्डल दिखाऐं';
-$labels['nextpage'] = 'अगला बन्डल दिखाऐं';
-$labels['lastpage'] = 'आखिरी बन्डल दिखाऐं';
-
-
-// LDAP search
-$labels['ldapsearch'] = 'ऐलडैप (LDAP) डाईरेक्टरी खोजें';
-
-$labels['ldappublicsearchname'] = 'पता का नाम';
-$labels['ldappublicsearchtype'] = 'सख़त मैच?';
-$labels['ldappublicserverselect'] = 'सर्वर चुनें';
-$labels['ldappublicsearchfield'] = 'यहाँ खोजें';
-$labels['ldappublicsearchform'] = 'पता के लिये खोजें';
-$labels['ldappublicsearch'] = 'खोज';
-
-
-// settings
-$labels['settingsfor'] = 'इनके विन्यास:';
-
-$labels['preferences'] = 'पसंद';
-$labels['userpreferences'] = 'यूसर पसंद';
-$labels['editpreferences'] = 'यूसर पसंद सम्पादें';
-
-$labels['identities'] = 'पहचान';
-$labels['manageidentities'] = 'इस खाते के पहचान व्यवस्थित करें';
-$labels['newidentity'] = 'नया पहचान';
-
-$labels['newitem'] = 'नया चीज़';
-$labels['edititem'] = 'चीज़ सम्पादें';
-
-$labels['setdefault'] = 'तयशुदा चुनें';
-$labels['language'] = 'भाषा';
-$labels['timezone'] = 'समय क्षेत्र';
-$labels['pagesize'] = 'हर पन्ने पर इतने';
-$labels['signature'] = 'दस्तखत';
-$labels['dstactive'] = 'रौशनी बचाव';
-$labels['htmleditor'] = 'मेल ऐच-टी-ऐम-एल (HTML) मे लिखें';
-$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) दस्तखत';
-$labels['previewpane'] = 'झलक पट्टी दिखाऐं';
-
-$labels['autosavedraft'] = 'ड्राफ़ट अपने आप सहेजते जाऐं';
-$labels['everynminutes'] = 'हर $n मिनट';
-$labels['never'] = 'कभी नहाीं';
-
-$labels['folder'] = 'फ़ोल्डर';
-$labels['folders'] = 'फ़ोल्डर';
-$labels['foldername'] = 'फ़ोल्डर नाम';
-$labels['subscribed'] = 'सबस्क्राईब किया गया';
-$labels['create'] = 'बनाऐं';
-$labels['createfolder'] = 'फ़ोलडर बनाऐं';
-$labels['rename'] = 'नाम बदलें';
-$labels['renamefolder'] = 'फ़ोलडर का नाम बदलें';
-$labels['deletefolder'] = 'फ़ोलडर मिटाऐं';
-$labels['managefolders'] = 'फ़ोलडर को व्यवस्थित करें';
-
-$labels['sortby'] = 'ऐसे तय करें';
-$labels['sortasc'] = 'पहले से आखीरी तय करें';
-$labels['sortdesc'] = 'आखीरी से पहले तय करें';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | localization/hi/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Aniruddha "Karim" Shankar <karim@sarai.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$messages = array();
-
-$messages['loginfailed'] = 'लॉगिन नहीं हो पाया';
-$messages['cookiesdisabled'] = 'आपका ब्राऊसर कुकी स्वीकार नहीं कर रहा है';
-$messages['sessionerror'] = 'सत्र समाप्त या अवैद्य';
-$messages['imaperror'] = 'आईमैप (IMAP) सर्वर से सम्पर्क नहीं हो पाया';
-$messages['nomessagesfound'] = 'इस मेलबॉक्स में कोई मेल नहीं है';
-$messages['loggedout'] = 'सत्र समाप्त. टा टा!';
-$messages['mailboxempty'] = 'मेलबॉक्स खाली है';
-$messages['loading'] = 'लोड हो रहा है';
-$messages['loadingdata'] = 'डाटा लोड हो रहा है...';
-$messages['checkingmail'] = 'क्या नया मेल है?...';
-$messages['sendingmessage'] = 'मेल भेजा जा रहा है...';
-$messages['messagesent'] = 'मेल भेजा गया है';
-$messages['savingmessage'] = 'मेल सहेजा जा रहा है...';
-$messages['messagesaved'] = 'मेल ड्राफ़्ट फोल्डर में जमा हो रहा है';
-$messages['successfullysaved'] = 'सहेजा गया है';
-$messages['addedsuccessfully'] = 'पता खाते में पता जोडा गया है';
-$messages['contactexists'] = 'इस ई-मेल पता से एक पता पेहले से है';
-$messages['blockedimages'] = 'आप के प्राईवेसी के लिये और स्पैम से बचने के लिये इस मेल में सदूर चित्र नहीं दिखाये गये हैं।';
-$messages['encryptedmessage'] = 'माफ़ कीजिये, यह मेल कूट रूप में है, इस कारण दिखाया नहीं जा सकता।';
-$messages['nocontactsfound'] = 'कोई पता नहीं मिला';
-$messages['sendingfailed'] = 'मेल नहीं भिज पाया';
-$messages['errorsaving'] = 'सहेजते-सहेजते गडबड हो गया';
-$messages['errormoving'] = 'मेल खिस्का नहीं';
-$messages['errordeleting'] = 'मेल मिटा नहीं';
-$messages['deletecontactconfirm'] = 'चुने गये पते को सचमुच मिटाना है ?';
-$messages['deletemessagesconfirm'] = 'चुने गये मेल को सचमुच मिटाना है ?';
-$messages['deletefolderconfirm'] = 'फ़ोल्डर को सचमुच मिटाऐं ?';
-$messages['purgefolderconfirm'] = 'फ़ोल्डर में पडे सारे मेल को सचमुच मिटाना है?';
-$messages['formincomplete'] = 'फ़ॉर्म पूरी तरह से भरा नहीं';
-$messages['noemailwarning'] = 'वैद्य मेल पता भरें';
-$messages['nonamewarning'] = 'नाम भरें';
-$messages['nopagesizewarning'] = 'पन्ना माप भरें';
-$messages['norecipientwarning'] = 'कम-से-कम एक पाने वाले का पता भरें';
-$messages['nosubjectwarning'] = 'मेल का कोई विशय नहीं बताया गया है। क्या आप विशय डालना चाहते हैं ?';
-$messages['nobodywarning'] = 'बिना कुछ लिखे मेल भेजें?';
-$messages['notsentwarning'] = 'मेल भिजा नहीं. मेल रद्द करें ?';
-$messages['noldapserver'] = 'खोज के लिये एक ऐलडैप सर्वर चुनें';
-$messages['nocontactsreturned'] = 'कोई पते नहीं मिले';
-$messages['nosearchname'] = 'पता या पते का नाम भरें';
-$messages['searchsuccessful'] = '$nr मेल मिले';
-$messages['searchnomatch'] = 'खोज असफ़ल';
-$messages['searching'] = 'खोजा रहे हैं...';
-$messages['checking'] = 'चाँचा चा रहा है...';
-$messages['nospellerrors'] = 'कोई स्पैलिंग गलती नहीं मिली';
-$messages['folderdeleted'] = 'फ़ोल्डर मिट गया';
-$messages['deletedsuccessfully'] = "मिट गया";
-$messages['converting'] = 'मेल से फ़ॉर्मैटिंग निकाला जा रहा है...';
-$messages['messageopenerror'] = 'सर्वर से मेल लोड नहीं हो पाया';
-$messages['fileuploaderror'] = 'फ़ाईल अपलोड नहीं हो पाया';
-$messages['filesizeerror'] = 'अपलोड के लिये फ़ाईल हद $size से बड़ा है';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | localization/hi/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Aniruddha "Karim" Shankar <karim@sarai.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = '$product में स्वागत है';
+$labels['username'] = 'यूसरनाम';
+$labels['password'] = 'पासवर्ड';
+$labels['server'] = 'सर्वर';
+$labels['login'] = 'लॉगिन';
+
+// taskbar
+$labels['logout'] = 'लॉगआऊट';
+$labels['mail'] = 'ई-मेल';
+$labels['settings'] = 'निजी सैटिंग';
+$labels['addressbook'] = 'पता खाता';
+
+// mailbox names
+$labels['inbox'] = 'इनबॉक्स';
+$labels['drafts'] = 'ड्राफ़ट';
+$labels['sent'] = 'भेजा गया';
+$labels['trash'] = 'रद्दी';
+$labels['junk'] = 'स्पैम';
+
+// message listing
+$labels['subject'] = 'विशय';
+$labels['from'] = 'भेजने वाला';
+$labels['to'] = 'पाने वाला';
+$labels['cc'] = 'कार्बन';
+$labels['bcc'] = 'अंधा कार्बन';
+$labels['replyto'] = 'जवाब यहाँ';
+$labels['date'] = 'तारीख';
+$labels['size'] = 'माप';
+$labels['priority'] = 'मेल की महत्वपूर्णता';
+$labels['organization'] = 'संस्था';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'फ़ोलडर';
+$labels['messagesfromto'] = '$from से ले कर $to, $count मेल में से';
+$labels['messagenrof'] = '$nr नम्बर मेल, $count में से';
+
+$labels['moveto'] = 'खीस्काऐं...';
+$labels['download'] = 'डाऊनलोड';
+
+$labels['filename'] = 'फ़ाईल नाम';
+$labels['filesize'] = 'फ़ाईल माप';
+
+$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) दिखाऐं';
+$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूप मेल करें';
+$labels['prettydate'] = 'सुनदर तारीखें';
+
+$labels['addtoaddressbook'] = 'पता खाते में जोडें';
+
+// weekdays short
+$labels['sun'] = 'रवि';
+$labels['mon'] = 'सोम';
+$labels['tue'] = 'मंग';
+$labels['wed'] = 'बुध';
+$labels['thu'] = 'गुरु';
+$labels['fri'] = 'शुक्र';
+$labels['sat'] = 'शनि';
+
+// weekdays long
+$labels['sunday'] = 'रविवार';
+$labels['monday'] = 'सोमवार';
+$labels['tuesday'] = 'मंगलवार';
+$labels['wednesday'] = 'बुधवार';
+$labels['thursday'] = 'गुरुवार';
+$labels['friday'] = 'शुक्रवार';
+$labels['saturday'] = 'शनिवार';
+
+$labels['today'] = 'आज';
+
+// toolbar buttons
+$labels['checkmail'] = 'नये मेल लाऐं';
+$labels['writenewmessage'] = 'मेल लिखें';
+$labels['replytomessage'] = 'मेल का जवाब दें';
+$labels['replytoallmessage'] = 'सभी को जवाब लिखें';
+$labels['forwardmessage'] = 'आगे भेजें';
+$labels['deletemessage'] = 'रद्द करें';
+$labels['printmessage'] = 'मेल छापें';
+$labels['previousmessage'] = 'पीछे के मेल दिखाऐं';
+$labels['previousmessages'] = 'पीछे के मेल का बन्डल दिखाऐं';
+$labels['firstmessage'] = 'पहला मेल दिखाऐं';
+$labels['firstmessages'] = 'पहला मेल का बन्डल दिखाऐं';
+$labels['nextmessage'] = 'अगला मेल दिखाऐं';
+$labels['nextmessages'] = 'अगले मेल का बन्डल दिखाऐं';
+$labels['lastmessage'] = 'आखीरी मेल दिखाऐं';
+$labels['lastmessages'] = 'आखिरी मेल का बन्डल दिखाऐं';
+$labels['backtolist'] = 'मेल सूची देखें';
+$labels['viewsource'] = 'सोर्स दिखाऐं';
+
+$labels['select'] = 'चुनें';
+$labels['all'] = 'सभी';
+$labels['none'] = 'कोई नहीं';
+$labels['unread'] = 'अनदेखी';
+
+$labels['compact'] = 'छोटा करें';
+$labels['empty'] = 'मेल रद्दी में डालें';
+$labels['purge'] = 'मिटाऐं';
+
+$labels['quota'] = 'डिस्क उपयोग';
+$labels['unknown'] = 'अज्ञात';
+$labels['unlimited'] = 'असीम';
+
+$labels['quicksearch'] = 'तेज़ खोज';
+$labels['resetsearch'] = 'खोज खाली करें';
+
+
+// message compose
+$labels['compose'] = 'मेल लिखें';
+$labels['sendmessage'] = 'मेल भेजें';
+$labels['savemessage'] = 'ड्राफ़ट सहेजें';
+$labels['addattachment'] = 'फ़ाईल जोडें';
+$labels['charset'] = 'कैरेक्टर सैट';
+$labels['editortype'] = 'सम्पादक प्राकार';
+$labels['returnreceipt'] = 'मेल रसीद';
+
+$labels['checkspelling'] = 'स्पैलिंग जाँचें';
+$labels['resumeediting'] = 'सम्पादन फिर शुरू करें';
+$labels['revertto'] = 'पहले की स्थिती पर जाऐं';
+
+$labels['attachments'] = 'जुडे फाईल';
+$labels['upload'] = 'अपलोड';
+$labels['close'] = 'बंद';
+
+$labels['low'] = 'कम';
+$labels['lowest'] = 'सबसे कम';
+$labels['normal'] = 'साधारण';
+$labels['high'] = 'उच्च';
+$labels['highest'] = 'उच्चतम';
+
+$labels['nosubject'] = '(कोई विशय नहीं)';
+$labels['showimages'] = 'चित्र दिखाऐं';
+
+$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)';
+$labels['plaintoggle'] = 'सादा पाठ';
+
+
+// address boook
+$labels['name'] = 'दिखने वाला नाम';
+$labels['firstname'] = 'पहला नाम';
+$labels['surname'] = 'उपनाम';
+$labels['email'] = 'मेल';
+
+$labels['addcontact'] = 'नया पता जोडें';
+$labels['editcontact'] = 'पता सम्पाद';
+
+$labels['edit'] = 'सम्पाद';
+$labels['cancel'] = 'रद्द';
+$labels['save'] = 'सहेज';
+$labels['delete'] = 'मिटा';
+
+$labels['newcontact'] = 'नया पता कार्ड बनाऐं';
+$labels['deletecontact'] = 'चुने पते मिटाऐं';
+$labels['composeto'] = 'को मेल भेजें';
+$labels['contactsfromto'] = '$from से ले कर $to, $count पते में से';
+$labels['print'] = 'छापें';
+$labels['export'] = 'ऐक्स्पोर्ट';
+
+$labels['previouspage'] = 'इससे पहले के बन्डल को दिखाऐं';
+$labels['firstpage'] = 'पहला बन्डल दिखाऐं';
+$labels['nextpage'] = 'अगला बन्डल दिखाऐं';
+$labels['lastpage'] = 'आखिरी बन्डल दिखाऐं';
+
+
+// LDAP search
+$labels['ldapsearch'] = 'ऐलडैप (LDAP) डाईरेक्टरी खोजें';
+
+$labels['ldappublicsearchname'] = 'पता का नाम';
+$labels['ldappublicsearchtype'] = 'सख़त मैच?';
+$labels['ldappublicserverselect'] = 'सर्वर चुनें';
+$labels['ldappublicsearchfield'] = 'यहाँ खोजें';
+$labels['ldappublicsearchform'] = 'पता के लिये खोजें';
+$labels['ldappublicsearch'] = 'खोज';
+
+
+// settings
+$labels['settingsfor'] = 'इनके विन्यास:';
+
+$labels['preferences'] = 'पसंद';
+$labels['userpreferences'] = 'यूसर पसंद';
+$labels['editpreferences'] = 'यूसर पसंद सम्पादें';
+
+$labels['identities'] = 'पहचान';
+$labels['manageidentities'] = 'इस खाते के पहचान व्यवस्थित करें';
+$labels['newidentity'] = 'नया पहचान';
+
+$labels['newitem'] = 'नया चीज़';
+$labels['edititem'] = 'चीज़ सम्पादें';
+
+$labels['setdefault'] = 'तयशुदा चुनें';
+$labels['language'] = 'भाषा';
+$labels['timezone'] = 'समय क्षेत्र';
+$labels['pagesize'] = 'हर पन्ने पर इतने';
+$labels['signature'] = 'दस्तखत';
+$labels['dstactive'] = 'रौशनी बचाव';
+$labels['htmleditor'] = 'मेल ऐच-टी-ऐम-एल (HTML) मे लिखें';
+$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) दस्तखत';
+$labels['previewpane'] = 'झलक पट्टी दिखाऐं';
+
+$labels['autosavedraft'] = 'ड्राफ़ट अपने आप सहेजते जाऐं';
+$labels['everynminutes'] = 'हर $n मिनट';
+$labels['never'] = 'कभी नहाीं';
+
+$labels['folder'] = 'फ़ोल्डर';
+$labels['folders'] = 'फ़ोल्डर';
+$labels['foldername'] = 'फ़ोल्डर नाम';
+$labels['subscribed'] = 'सबस्क्राईब किया गया';
+$labels['create'] = 'बनाऐं';
+$labels['createfolder'] = 'फ़ोलडर बनाऐं';
+$labels['rename'] = 'नाम बदलें';
+$labels['renamefolder'] = 'फ़ोलडर का नाम बदलें';
+$labels['deletefolder'] = 'फ़ोलडर मिटाऐं';
+$labels['managefolders'] = 'फ़ोलडर को व्यवस्थित करें';
+
+$labels['sortby'] = 'ऐसे तय करें';
+$labels['sortasc'] = 'पहले से आखीरी तय करें';
+$labels['sortdesc'] = 'आखीरी से पहले तय करें';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | localization/hi/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Aniruddha "Karim" Shankar <karim@sarai.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$messages = array();
+
+$messages['loginfailed'] = 'लॉगिन नहीं हो पाया';
+$messages['cookiesdisabled'] = 'आपका ब्राऊसर कुकी स्वीकार नहीं कर रहा है';
+$messages['sessionerror'] = 'सत्र समाप्त या अवैद्य';
+$messages['imaperror'] = 'आईमैप (IMAP) सर्वर से सम्पर्क नहीं हो पाया';
+$messages['nomessagesfound'] = 'इस मेलबॉक्स में कोई मेल नहीं है';
+$messages['loggedout'] = 'सत्र समाप्त. टा टा!';
+$messages['mailboxempty'] = 'मेलबॉक्स खाली है';
+$messages['loading'] = 'लोड हो रहा है';
+$messages['loadingdata'] = 'डाटा लोड हो रहा है...';
+$messages['checkingmail'] = 'क्या नया मेल है?...';
+$messages['sendingmessage'] = 'मेल भेजा जा रहा है...';
+$messages['messagesent'] = 'मेल भेजा गया है';
+$messages['savingmessage'] = 'मेल सहेजा जा रहा है...';
+$messages['messagesaved'] = 'मेल ड्राफ़्ट फोल्डर में जमा हो रहा है';
+$messages['successfullysaved'] = 'सहेजा गया है';
+$messages['addedsuccessfully'] = 'पता खाते में पता जोडा गया है';
+$messages['contactexists'] = 'इस ई-मेल पता से एक पता पेहले से है';
+$messages['blockedimages'] = 'आप के प्राईवेसी के लिये और स्पैम से बचने के लिये इस मेल में सदूर चित्र नहीं दिखाये गये हैं।';
+$messages['encryptedmessage'] = 'माफ़ कीजिये, यह मेल कूट रूप में है, इस कारण दिखाया नहीं जा सकता।';
+$messages['nocontactsfound'] = 'कोई पता नहीं मिला';
+$messages['sendingfailed'] = 'मेल नहीं भिज पाया';
+$messages['errorsaving'] = 'सहेजते-सहेजते गडबड हो गया';
+$messages['errormoving'] = 'मेल खिस्का नहीं';
+$messages['errordeleting'] = 'मेल मिटा नहीं';
+$messages['deletecontactconfirm'] = 'चुने गये पते को सचमुच मिटाना है ?';
+$messages['deletemessagesconfirm'] = 'चुने गये मेल को सचमुच मिटाना है ?';
+$messages['deletefolderconfirm'] = 'फ़ोल्डर को सचमुच मिटाऐं ?';
+$messages['purgefolderconfirm'] = 'फ़ोल्डर में पडे सारे मेल को सचमुच मिटाना है?';
+$messages['formincomplete'] = 'फ़ॉर्म पूरी तरह से भरा नहीं';
+$messages['noemailwarning'] = 'वैद्य मेल पता भरें';
+$messages['nonamewarning'] = 'नाम भरें';
+$messages['nopagesizewarning'] = 'पन्ना माप भरें';
+$messages['norecipientwarning'] = 'कम-से-कम एक पाने वाले का पता भरें';
+$messages['nosubjectwarning'] = 'मेल का कोई विशय नहीं बताया गया है। क्या आप विशय डालना चाहते हैं ?';
+$messages['nobodywarning'] = 'बिना कुछ लिखे मेल भेजें?';
+$messages['notsentwarning'] = 'मेल भिजा नहीं. मेल रद्द करें ?';
+$messages['noldapserver'] = 'खोज के लिये एक ऐलडैप सर्वर चुनें';
+$messages['nocontactsreturned'] = 'कोई पते नहीं मिले';
+$messages['nosearchname'] = 'पता या पते का नाम भरें';
+$messages['searchsuccessful'] = '$nr मेल मिले';
+$messages['searchnomatch'] = 'खोज असफ़ल';
+$messages['searching'] = 'खोजा रहे हैं...';
+$messages['checking'] = 'चाँचा चा रहा है...';
+$messages['nospellerrors'] = 'कोई स्पैलिंग गलती नहीं मिली';
+$messages['folderdeleted'] = 'फ़ोल्डर मिट गया';
+$messages['deletedsuccessfully'] = "मिट गया";
+$messages['converting'] = 'मेल से फ़ॉर्मैटिंग निकाला जा रहा है...';
+$messages['messageopenerror'] = 'सर्वर से मेल लोड नहीं हो पाया';
+$messages['fileuploaderror'] = 'फ़ाईल अपलोड नहीं हो पाया';
+$messages['filesizeerror'] = 'अपलोड के लिये फ़ाईल हद $size से बड़ा है';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/hu/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Levente Farkas <lfarkas at lfarkas dot org> |
- | Ervin Hegedüs <airween@damson.hu> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1069 2008-02-13 19:33:10Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Üdvözli a $product';
-$labels['username'] = 'Felhasználónév';
-$labels['password'] = 'Jelszó';
-$labels['server'] = 'Szerver';
-$labels['login'] = 'Belépés';
-$labels['logout'] = 'Kijelentkezés';
-$labels['mail'] = 'E-mail';
-$labels['settings'] = 'Egyéni beállítások';
-$labels['addressbook'] = 'Címjegyzék';
-$labels['inbox'] = 'Érkezett levelek';
-$labels['drafts'] = 'Piszkozatok';
-$labels['sent'] = 'Küldött levelek';
-$labels['trash'] = 'Törölt elemek';
-$labels['junk'] = 'Szemetes';
-$labels['subject'] = 'Tárgy';
-$labels['from'] = 'Feladó';
-$labels['to'] = 'Címzett';
-$labels['cc'] = 'Másolat';
-$labels['bcc'] = 'Titkos másolat';
-$labels['replyto'] = 'Válaszcím';
-$labels['date'] = 'Dátum';
-$labels['size'] = 'Méret';
-$labels['priority'] = 'Sürgősség';
-$labels['organization'] = 'Szervezet';
-$labels['reply-to'] = 'Válaszcím';
-$labels['mailboxlist'] = 'Mappák';
-$labels['messagesfromto'] = 'Üzenetek: $from - $to / $count';
-$labels['messagenrof'] = '$nr / $count üzenet';
-$labels['moveto'] = 'áthelyezés...';
-$labels['download'] = 'letöltés';
-$labels['filename'] = 'File neve';
-$labels['filesize'] = 'File mérete';
-$labels['preferhtml'] = 'HTML megjelenítés';
-$labels['htmlmessage'] = 'HTML üzenet';
-$labels['prettydate'] = 'Rövid dátumok';
-$labels['addtoaddressbook'] = 'Hozzáadás a címjegyzékhez';
-$labels['sun'] = 'Vas';
-$labels['mon'] = 'Hét';
-$labels['tue'] = 'Kedd';
-$labels['wed'] = 'Szer';
-$labels['thu'] = 'Csüt';
-$labels['fri'] = 'Pén';
-$labels['sat'] = 'Szom';
-$labels['sunday'] = 'Vasárnap';
-$labels['monday'] = 'Hétfő';
-$labels['tuesday'] = 'Kedd';
-$labels['wednesday'] = 'Szerda';
-$labels['thursday'] = 'Csütörtök';
-$labels['friday'] = 'Péntek';
-$labels['saturday'] = 'Szombat';
-$labels['today'] = 'Ma';
-$labels['checkmail'] = 'Új üzenetek ellenőrzése';
-$labels['writenewmessage'] = 'Új üzenet';
-$labels['replytomessage'] = 'Válasz';
-$labels['replytoallmessage'] = 'Válasz a feladónak és az összes címzettnek';
-$labels['forwardmessage'] = 'Továbbítás';
-$labels['deletemessage'] = 'Törlés';
-$labels['movemessagetotrash'] = 'Üzenet törlése';
-$labels['printmessage'] = 'Nyomtatás';
-$labels['previousmessage'] = 'Előző levél mutatása';
-$labels['previousmessages'] = 'Előző rész mutatása';
-$labels['firstmessage'] = 'Első levél mutatása';
-$labels['firstmessages'] = 'Első rész mutatása';
-$labels['nextmessage'] = 'Következő levél mutatása';
-$labels['nextmessages'] = 'Következő rész mutatása';
-$labels['lastmessage'] = 'Utolsó levél mutatása';
-$labels['lastmessages'] = 'Utolsó rész mutatása';
-$labels['backtolist'] = 'Vissza az üzenetekhez';
-$labels['viewsource'] = 'Forrás megtekintése';
-$labels['markmessages'] = 'Üzenetek megjelölése';
-$labels['markread'] = 'Olvasottként';
-$labels['markunread'] = 'Olvasatlanként';
-$labels['select'] = 'Kijelölés';
-$labels['all'] = 'Összes';
-$labels['none'] = 'Nincs';
-$labels['unread'] = 'Olvasatlan';
-$labels['compact'] = 'Tömörítés';
-$labels['empty'] = 'Ürítés';
-$labels['purge'] = 'Tisztítás';
-$labels['quota'] = 'Diszk használat';
-$labels['unknown'] = 'ismeretlen';
-$labels['unlimited'] = 'korlátlan';
-$labels['quicksearch'] = 'Gyorskeresés';
-$labels['resetsearch'] = 'Alapállapot';
-$labels['compose'] = 'Üzenet létrehozása';
-$labels['savemessage'] = 'Vázlat mentése';
-$labels['sendmessage'] = 'Üzenet azonnali küldése';
-$labels['addattachment'] = 'File csatolása';
-$labels['charset'] = 'Karakterkészlet';
-$labels['editortype'] = 'Szerkesztő típusa';
-$labels['returnreceipt'] = 'Értesítés';
-$labels['checkspelling'] = 'Helyesírás-ellenőrzés';
-$labels['resumeediting'] = 'Helyesírás kész';
-$labels['revertto'] = 'Vissza erre:';
-$labels['attachments'] = 'Csatolások';
-$labels['upload'] = 'Feltöltés';
-$labels['close'] = 'Bezárás';
-$labels['low'] = 'Alacsony';
-$labels['lowest'] = 'Legkisebb';
-$labels['normal'] = 'Normál';
-$labels['high'] = 'Magas';
-$labels['highest'] = 'Legmagasabb';
-$labels['nosubject'] = '(nincs tárgy)';
-$labels['showimages'] = 'Képek megjelenítése';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Egyszerű szöveg';
-$labels['addcc'] = 'Cc (Másolati cím) hozzáadása';
-$labels['addbcc'] = 'Bcc (Titkos másolati cím) hozzáadása';
-$labels['addreplyto'] = 'Válaszcím hozzáadása';
-$labels['mdnrequest'] = 'Az üzenet küldője értesítést kér arról hogy elolvastad a levelet. Elküdjük az Olvasási Értesítést?';
-$labels['receiptread'] = 'Olvasási Értesítés (olvasott)';
-$labels['yourmessage'] = 'Ez az üzeneted Olvasási Értesítése';
-$labels['receiptnote'] = 'Megjegyzés: Ez az Olvasási Értesítés csak azt igazolja, hogy az üzenet megjelenítésre került a címzett számítógépén. Nincs rá garancia, hogy a címzett elolvasta volna az üzenetet illetve megértette volna annak tartalmát.';
-$labels['name'] = 'Megjelenített név';
-$labels['firstname'] = 'Keresztnév';
-$labels['surname'] = 'Vezetéknév';
-$labels['email'] = 'E-mail cím';
-$labels['addcontact'] = 'Új kapcsolat hozzáadása';
-$labels['editcontact'] = 'Kapcsolat szerkesztése';
-$labels['edit'] = 'Szerkesztés';
-$labels['cancel'] = 'Mégsem';
-$labels['save'] = 'Mentés';
-$labels['delete'] = 'Törlés';
-$labels['newcontact'] = 'Új névjegykártya létrehozása';
-$labels['deletecontact'] = 'Kijelölt kapcsolatok törlése';
-$labels['composeto'] = 'E-mail küldése erre a címre';
-$labels['contactsfromto'] = 'Kapcsolatok: $from - $to / $count';
-$labels['print'] = 'Nyomtatás';
-$labels['export'] = 'Exportálás';
-$labels['previouspage'] = 'Előző lap';
-$labels['firstpage'] = 'Első lap';
-$labels['nextpage'] = 'Következő lap';
-$labels['lastpage'] = 'Utolsó lap';
-$labels['groups'] = 'Csoportok';
-$labels['personaladrbook'] = 'Személyes címjegyzék';
-$labels['settingsfor'] = 'Beállítás';
-$labels['preferences'] = 'Beállítások';
-$labels['userpreferences'] = 'Felhasználói beállítások';
-$labels['editpreferences'] = 'Felhasználói beállítások szerkesztése';
-$labels['identities'] = 'Azonosítók';
-$labels['manageidentities'] = 'Hozzáférés azonosítóinak kezelése';
-$labels['newidentity'] = 'Új azonosító';
-$labels['newitem'] = 'Új elem';
-$labels['edititem'] = 'Elem szerkesztése';
-$labels['setdefault'] = 'Beállítás alapértelmezettnek';
-$labels['language'] = 'Nyelv';
-$labels['timezone'] = 'Időzóna';
-$labels['pagesize'] = 'Sorok száma egy oldalon';
-$labels['signature'] = 'Aláírás';
-$labels['dstactive'] = 'Nyári időszámítás';
-$labels['htmleditor'] = 'HTML üzenet írása';
-$labels['htmlsignature'] = 'HTML aláírás';
-$labels['previewpane'] = 'Előnézeti kép';
-$labels['autosavedraft'] = 'Automatikus piszkozat mentés';
-$labels['everynminutes'] = 'minden $n percben';
-$labels['never'] = 'soha';
-$labels['folder'] = 'Mappa';
-$labels['folders'] = 'Mappák';
-$labels['foldername'] = 'Mappa neve';
-$labels['subscribed'] = 'Feliratkozás';
-$labels['messagecount'] = 'Üzenet';
-$labels['create'] = 'Létrehozás';
-$labels['createfolder'] = 'Új mappa létrehozása';
-$labels['rename'] = 'Átnevezés';
-$labels['renamefolder'] = 'Mappa átnevezése';
-$labels['deletefolder'] = 'Mappa törlése';
-$labels['managefolders'] = 'Mappák kezelése';
-$labels['sortby'] = 'Rendezés';
-$labels['sortasc'] = 'növekvő';
-$labels['sortdesc'] = 'csökkenő';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/hu/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Levente Farkas <lfarkas at lfarkas dot org> |
- | Ervin Hegedüs <airween@damson.hu> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Sikertelen belépés';
-$messages['cookiesdisabled'] = 'A böngésző nem támogatja a sütik használatát';
-$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet';
-$messages['imaperror'] = 'Nem sikerült a kapcsolódás az IMAP szerverhez';
-$messages['nomessagesfound'] = 'A fiók nem tartalmaz leveleket';
-$messages['loggedout'] = 'Sikeres kijelentkezés. Viszont látásra!';
-$messages['mailboxempty'] = 'A fiók üres';
-$messages['loading'] = 'Betöltés...';
-$messages['loadingdata'] = 'Az adatok betöltése...';
-$messages['checkingmail'] = 'Új üzenetek keresése...';
-$messages['sendingmessage'] = 'Az üzenet küldése...';
-$messages['messagesent'] = 'Az üzenet elküldve';
-$messages['savingmessage'] = 'Az üzenet mentése...';
-$messages['messagesaved'] = 'Az üzenet elmentve a Sablonokhoz';
-$messages['successfullysaved'] = 'A mentés sikerült';
-$messages['addedsuccessfully'] = 'A cím hozzáadása a címjegyzékhez megtörtént';
-$messages['contactexists'] = 'A kapcsolat már létezik ezzel az e-mail címmel';
-$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott.';
-$messages['encryptedmessage'] = 'Az üzenet titkosított, emiatt nem tudom megjeleníteni.';
-$messages['nocontactsfound'] = 'Nincs kapcsolat';
-$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található';
-$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült';
-$messages['errorsaving'] = 'A mentés során hiba lépett fel';
-$messages['errormoving'] = 'Az üzenetet nem sikerült áthelyezni';
-$messages['errordeleting'] = 'Az üzenetet nem sikerült törölni';
-$messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt címe(ke)t?';
-$messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt üzenete(ke)t?';
-$messages['deletefolderconfirm'] = 'Biztos, hogy törölni szeretnéd ezt a mappát?';
-$messages['purgefolderconfirm'] = 'Biztos vagy benne, hogy az összes üzenet törölhető?';
-$messages['formincomplete'] = 'Az űrlap hiányosan lett kitöltve';
-$messages['noemailwarning'] = 'Adj meg egy valós e-mail címet';
-$messages['nonamewarning'] = 'Adj meg egy nevet';
-$messages['nopagesizewarning'] = 'Add meg a papír méretét';
-$messages['norecipientwarning'] = 'Legalább egy címzettet adj meg';
-$messages['nosubjectwarning'] = 'A "Tárgy" mező üres. Szeretnéd most kitölteni?';
-$messages['nobodywarning'] = 'Elküldöd az üzenetet tárgy nélkül?';
-$messages['notsentwarning'] = 'Az üzenet még nem küldtem el. Eldobod az üzenetet?';
-$messages['noldapserver'] = 'Adj meg egy LDAP szervert a kereséshez';
-$messages['nocontactsreturned'] = 'Nem találtam kapcsolatot';
-$messages['nosearchname'] = 'Add meg a kapcsolat nevét vagy e-mail címét';
-$messages['searchsuccessful'] = '$nr üzenetet találtam';
-$messages['searchnomatch'] = 'Nincs találat';
-$messages['searching'] = 'Keresés...';
-$messages['checking'] = 'Ellenőrzés...';
-$messages['nospellerrors'] = 'Nem találtam helyesírási hibát';
-$messages['folderdeleted'] = 'A mappa sikeresen törölve';
-$messages['deletedsuccessfully'] = 'Törölve';
-$messages['converting'] = 'Formázás eltávolítása az üzenetből...';
-$messages['messageopenerror'] = 'Nem tudom letölteni a leveleket a szerverről';
-$messages['fileuploaderror'] = 'Feltöltés sikertelen';
-$messages['filesizeerror'] = 'A feltöltött file mérete meghaladja a maximális méretet $size';
-$messages['copysuccess'] = 'Sikeresen másoltunk $nr címet';
-$messages['copyerror'] = 'Nem tudtunk másolni egyetlen címet sem';
-$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható';
-$messages['errorsavingcontact'] = 'Nem tudtuk menteni a kapcsolat címét';
-$messages['movingmessage'] = 'Üzenet mozgatása...';
-$messages['receiptsent'] = 'Az Olvasási Értesítést elküldtük';
-$messages['errorsendingreceipt'] = 'Az Olvasási Értesítést nem sikerült elküldeni';
-$messages['nodeletelastidentity'] = 'Nem törölheti ezt a profilt, ez az egyetlen';
-$messages['addsubfolderhint'] = 'Az új könyvtárat az aktuálisan kiválasztott alkönyvtáraként fogjuk létrehozni';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/hu/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Levente Farkas <lfarkas at lfarkas dot org> |
+ | Ervin Hegedüs <airween@damson.hu> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1069 2008-02-13 19:33:10Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Üdvözli a $product';
+$labels['username'] = 'Felhasználónév';
+$labels['password'] = 'Jelszó';
+$labels['server'] = 'Szerver';
+$labels['login'] = 'Belépés';
+$labels['logout'] = 'Kijelentkezés';
+$labels['mail'] = 'E-mail';
+$labels['settings'] = 'Egyéni beállítások';
+$labels['addressbook'] = 'Címjegyzék';
+$labels['inbox'] = 'Érkezett levelek';
+$labels['drafts'] = 'Piszkozatok';
+$labels['sent'] = 'Küldött levelek';
+$labels['trash'] = 'Törölt elemek';
+$labels['junk'] = 'Szemetes';
+$labels['subject'] = 'Tárgy';
+$labels['from'] = 'Feladó';
+$labels['to'] = 'Címzett';
+$labels['cc'] = 'Másolat';
+$labels['bcc'] = 'Titkos másolat';
+$labels['replyto'] = 'Válaszcím';
+$labels['date'] = 'Dátum';
+$labels['size'] = 'Méret';
+$labels['priority'] = 'Sürgősség';
+$labels['organization'] = 'Szervezet';
+$labels['reply-to'] = 'Válaszcím';
+$labels['mailboxlist'] = 'Mappák';
+$labels['messagesfromto'] = 'Üzenetek: $from - $to / $count';
+$labels['messagenrof'] = '$nr / $count üzenet';
+$labels['moveto'] = 'áthelyezés...';
+$labels['download'] = 'letöltés';
+$labels['filename'] = 'File neve';
+$labels['filesize'] = 'File mérete';
+$labels['preferhtml'] = 'HTML megjelenítés';
+$labels['htmlmessage'] = 'HTML üzenet';
+$labels['prettydate'] = 'Rövid dátumok';
+$labels['addtoaddressbook'] = 'Hozzáadás a címjegyzékhez';
+$labels['sun'] = 'Vas';
+$labels['mon'] = 'Hét';
+$labels['tue'] = 'Kedd';
+$labels['wed'] = 'Szer';
+$labels['thu'] = 'Csüt';
+$labels['fri'] = 'Pén';
+$labels['sat'] = 'Szom';
+$labels['sunday'] = 'Vasárnap';
+$labels['monday'] = 'Hétfő';
+$labels['tuesday'] = 'Kedd';
+$labels['wednesday'] = 'Szerda';
+$labels['thursday'] = 'Csütörtök';
+$labels['friday'] = 'Péntek';
+$labels['saturday'] = 'Szombat';
+$labels['today'] = 'Ma';
+$labels['checkmail'] = 'Új üzenetek ellenőrzése';
+$labels['writenewmessage'] = 'Új üzenet';
+$labels['replytomessage'] = 'Válasz';
+$labels['replytoallmessage'] = 'Válasz a feladónak és az összes címzettnek';
+$labels['forwardmessage'] = 'Továbbítás';
+$labels['deletemessage'] = 'Törlés';
+$labels['movemessagetotrash'] = 'Üzenet törlése';
+$labels['printmessage'] = 'Nyomtatás';
+$labels['previousmessage'] = 'Előző levél mutatása';
+$labels['previousmessages'] = 'Előző rész mutatása';
+$labels['firstmessage'] = 'Első levél mutatása';
+$labels['firstmessages'] = 'Első rész mutatása';
+$labels['nextmessage'] = 'Következő levél mutatása';
+$labels['nextmessages'] = 'Következő rész mutatása';
+$labels['lastmessage'] = 'Utolsó levél mutatása';
+$labels['lastmessages'] = 'Utolsó rész mutatása';
+$labels['backtolist'] = 'Vissza az üzenetekhez';
+$labels['viewsource'] = 'Forrás megtekintése';
+$labels['markmessages'] = 'Üzenetek megjelölése';
+$labels['markread'] = 'Olvasottként';
+$labels['markunread'] = 'Olvasatlanként';
+$labels['select'] = 'Kijelölés';
+$labels['all'] = 'Összes';
+$labels['none'] = 'Nincs';
+$labels['unread'] = 'Olvasatlan';
+$labels['compact'] = 'Tömörítés';
+$labels['empty'] = 'Ürítés';
+$labels['purge'] = 'Tisztítás';
+$labels['quota'] = 'Diszk használat';
+$labels['unknown'] = 'ismeretlen';
+$labels['unlimited'] = 'korlátlan';
+$labels['quicksearch'] = 'Gyorskeresés';
+$labels['resetsearch'] = 'Alapállapot';
+$labels['compose'] = 'Üzenet létrehozása';
+$labels['savemessage'] = 'Vázlat mentése';
+$labels['sendmessage'] = 'Üzenet azonnali küldése';
+$labels['addattachment'] = 'File csatolása';
+$labels['charset'] = 'Karakterkészlet';
+$labels['editortype'] = 'Szerkesztő típusa';
+$labels['returnreceipt'] = 'Értesítés';
+$labels['checkspelling'] = 'Helyesírás-ellenőrzés';
+$labels['resumeediting'] = 'Helyesírás kész';
+$labels['revertto'] = 'Vissza erre:';
+$labels['attachments'] = 'Csatolások';
+$labels['upload'] = 'Feltöltés';
+$labels['close'] = 'Bezárás';
+$labels['low'] = 'Alacsony';
+$labels['lowest'] = 'Legkisebb';
+$labels['normal'] = 'Normál';
+$labels['high'] = 'Magas';
+$labels['highest'] = 'Legmagasabb';
+$labels['nosubject'] = '(nincs tárgy)';
+$labels['showimages'] = 'Képek megjelenítése';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Egyszerű szöveg';
+$labels['addcc'] = 'Cc (Másolati cím) hozzáadása';
+$labels['addbcc'] = 'Bcc (Titkos másolati cím) hozzáadása';
+$labels['addreplyto'] = 'Válaszcím hozzáadása';
+$labels['mdnrequest'] = 'Az üzenet küldője értesítést kér arról hogy elolvastad a levelet. Elküdjük az Olvasási Értesítést?';
+$labels['receiptread'] = 'Olvasási Értesítés (olvasott)';
+$labels['yourmessage'] = 'Ez az üzeneted Olvasási Értesítése';
+$labels['receiptnote'] = 'Megjegyzés: Ez az Olvasási Értesítés csak azt igazolja, hogy az üzenet megjelenítésre került a címzett számítógépén. Nincs rá garancia, hogy a címzett elolvasta volna az üzenetet illetve megértette volna annak tartalmát.';
+$labels['name'] = 'Megjelenített név';
+$labels['firstname'] = 'Keresztnév';
+$labels['surname'] = 'Vezetéknév';
+$labels['email'] = 'E-mail cím';
+$labels['addcontact'] = 'Új kapcsolat hozzáadása';
+$labels['editcontact'] = 'Kapcsolat szerkesztése';
+$labels['edit'] = 'Szerkesztés';
+$labels['cancel'] = 'Mégsem';
+$labels['save'] = 'Mentés';
+$labels['delete'] = 'Törlés';
+$labels['newcontact'] = 'Új névjegykártya létrehozása';
+$labels['deletecontact'] = 'Kijelölt kapcsolatok törlése';
+$labels['composeto'] = 'E-mail küldése erre a címre';
+$labels['contactsfromto'] = 'Kapcsolatok: $from - $to / $count';
+$labels['print'] = 'Nyomtatás';
+$labels['export'] = 'Exportálás';
+$labels['previouspage'] = 'Előző lap';
+$labels['firstpage'] = 'Első lap';
+$labels['nextpage'] = 'Következő lap';
+$labels['lastpage'] = 'Utolsó lap';
+$labels['groups'] = 'Csoportok';
+$labels['personaladrbook'] = 'Személyes címjegyzék';
+$labels['settingsfor'] = 'Beállítás';
+$labels['preferences'] = 'Beállítások';
+$labels['userpreferences'] = 'Felhasználói beállítások';
+$labels['editpreferences'] = 'Felhasználói beállítások szerkesztése';
+$labels['identities'] = 'Azonosítók';
+$labels['manageidentities'] = 'Hozzáférés azonosítóinak kezelése';
+$labels['newidentity'] = 'Új azonosító';
+$labels['newitem'] = 'Új elem';
+$labels['edititem'] = 'Elem szerkesztése';
+$labels['setdefault'] = 'Beállítás alapértelmezettnek';
+$labels['language'] = 'Nyelv';
+$labels['timezone'] = 'Időzóna';
+$labels['pagesize'] = 'Sorok száma egy oldalon';
+$labels['signature'] = 'Aláírás';
+$labels['dstactive'] = 'Nyári időszámítás';
+$labels['htmleditor'] = 'HTML üzenet írása';
+$labels['htmlsignature'] = 'HTML aláírás';
+$labels['previewpane'] = 'Előnézeti kép';
+$labels['autosavedraft'] = 'Automatikus piszkozat mentés';
+$labels['everynminutes'] = 'minden $n percben';
+$labels['never'] = 'soha';
+$labels['folder'] = 'Mappa';
+$labels['folders'] = 'Mappák';
+$labels['foldername'] = 'Mappa neve';
+$labels['subscribed'] = 'Feliratkozás';
+$labels['messagecount'] = 'Üzenet';
+$labels['create'] = 'Létrehozás';
+$labels['createfolder'] = 'Új mappa létrehozása';
+$labels['rename'] = 'Átnevezés';
+$labels['renamefolder'] = 'Mappa átnevezése';
+$labels['deletefolder'] = 'Mappa törlése';
+$labels['managefolders'] = 'Mappák kezelése';
+$labels['sortby'] = 'Rendezés';
+$labels['sortasc'] = 'növekvő';
+$labels['sortdesc'] = 'csökkenő';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/hu/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Levente Farkas <lfarkas at lfarkas dot org> |
+ | Ervin Hegedüs <airween@damson.hu> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1192 2008-03-14 08:11:06Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Sikertelen belépés';
+$messages['cookiesdisabled'] = 'A böngésző nem támogatja a sütik használatát';
+$messages['sessionerror'] = 'Érvénytelen vagy lejárt munkamenet';
+$messages['imaperror'] = 'Nem sikerült a kapcsolódás az IMAP szerverhez';
+$messages['nomessagesfound'] = 'A fiók nem tartalmaz leveleket';
+$messages['loggedout'] = 'Sikeres kijelentkezés. Viszont látásra!';
+$messages['mailboxempty'] = 'A fiók üres';
+$messages['loading'] = 'Betöltés...';
+$messages['loadingdata'] = 'Az adatok betöltése...';
+$messages['checkingmail'] = 'Új üzenetek keresése...';
+$messages['sendingmessage'] = 'Az üzenet küldése...';
+$messages['messagesent'] = 'Az üzenet elküldve';
+$messages['savingmessage'] = 'Az üzenet mentése...';
+$messages['messagesaved'] = 'Az üzenet elmentve a Sablonokhoz';
+$messages['successfullysaved'] = 'A mentés sikerült';
+$messages['addedsuccessfully'] = 'A cím hozzáadása a címjegyzékhez megtörtént';
+$messages['contactexists'] = 'A kapcsolat már létezik ezzel az e-mail címmel';
+$messages['blockedimages'] = 'Biztonsági okokból a távoli képek letöltése tiltott.';
+$messages['encryptedmessage'] = 'Az üzenet titkosított, emiatt nem tudom megjeleníteni.';
+$messages['nocontactsfound'] = 'Nincs kapcsolat';
+$messages['contactnotfound'] = 'A kiválasztott kapcsolat nem található';
+$messages['sendingfailed'] = 'Az üzenet elküldése nem sikerült';
+$messages['errorsaving'] = 'A mentés során hiba lépett fel';
+$messages['errormoving'] = 'Az üzenetet nem sikerült áthelyezni';
+$messages['errordeleting'] = 'Az üzenetet nem sikerült törölni';
+$messages['deletecontactconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt címe(ke)t?';
+$messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretnéd a kijelölt üzenete(ke)t?';
+$messages['deletefolderconfirm'] = 'Biztos, hogy törölni szeretnéd ezt a mappát?';
+$messages['purgefolderconfirm'] = 'Biztos vagy benne, hogy az összes üzenet törölhető?';
+$messages['formincomplete'] = 'Az űrlap hiányosan lett kitöltve';
+$messages['noemailwarning'] = 'Adj meg egy valós e-mail címet';
+$messages['nonamewarning'] = 'Adj meg egy nevet';
+$messages['nopagesizewarning'] = 'Add meg a papír méretét';
+$messages['norecipientwarning'] = 'Legalább egy címzettet adj meg';
+$messages['nosubjectwarning'] = 'A "Tárgy" mező üres. Szeretnéd most kitölteni?';
+$messages['nobodywarning'] = 'Elküldöd az üzenetet tárgy nélkül?';
+$messages['notsentwarning'] = 'Az üzenet még nem küldtem el. Eldobod az üzenetet?';
+$messages['noldapserver'] = 'Adj meg egy LDAP szervert a kereséshez';
+$messages['nocontactsreturned'] = 'Nem találtam kapcsolatot';
+$messages['nosearchname'] = 'Add meg a kapcsolat nevét vagy e-mail címét';
+$messages['searchsuccessful'] = '$nr üzenetet találtam';
+$messages['searchnomatch'] = 'Nincs találat';
+$messages['searching'] = 'Keresés...';
+$messages['checking'] = 'Ellenőrzés...';
+$messages['nospellerrors'] = 'Nem találtam helyesírási hibát';
+$messages['folderdeleted'] = 'A mappa sikeresen törölve';
+$messages['deletedsuccessfully'] = 'Törölve';
+$messages['converting'] = 'Formázás eltávolítása az üzenetből...';
+$messages['messageopenerror'] = 'Nem tudom letölteni a leveleket a szerverről';
+$messages['fileuploaderror'] = 'Feltöltés sikertelen';
+$messages['filesizeerror'] = 'A feltöltött file mérete meghaladja a maximális méretet $size';
+$messages['copysuccess'] = 'Sikeresen másoltunk $nr címet';
+$messages['copyerror'] = 'Nem tudtunk másolni egyetlen címet sem';
+$messages['sourceisreadonly'] = 'Ez a címforrás csak olvasható';
+$messages['errorsavingcontact'] = 'Nem tudtuk menteni a kapcsolat címét';
+$messages['movingmessage'] = 'Üzenet mozgatása...';
+$messages['receiptsent'] = 'Az Olvasási Értesítést elküldtük';
+$messages['errorsendingreceipt'] = 'Az Olvasási Értesítést nem sikerült elküldeni';
+$messages['nodeletelastidentity'] = 'Nem törölheti ezt a profilt, ez az egyetlen';
+$messages['addsubfolderhint'] = 'Az új könyvtárat az aktuálisan kiválasztott alkönyvtáraként fogjuk létrehozni';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/am/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Vahan Yerkanian <vahan@arminco.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1160 2008-03-01 15:32:44Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Բարի գալուստ $product';
+$labels['username'] = 'Օգտվող';
+$labels['password'] = 'Գաղտնաբառ';
+$labels['server'] = 'Սերվեր';
+$labels['login'] = 'Մուտք';
+$labels['logout'] = 'Ելք';
+$labels['mail'] = 'Էլ–փոստ';
+$labels['settings'] = 'Նախասիրություններ';
+$labels['addressbook'] = 'Հասցեներ';
+$labels['inbox'] = 'Փոստարկղ';
+$labels['drafts'] = 'Սևագրեր';
+$labels['sent'] = 'Ուղարկված';
+$labels['trash'] = 'Աղբարկղ';
+$labels['junk'] = 'Թափոն';
+$labels['subject'] = 'Վերնագիր';
+$labels['from'] = 'Ուղարկող';
+$labels['to'] = 'Ստացող';
+$labels['cc'] = 'Cc';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Reply-To';
+$labels['date'] = 'Ամսաթիվ';
+$labels['size'] = 'Չափ';
+$labels['priority'] = 'Առավելություն';
+$labels['organization'] = 'Կազմակերպություն';
+$labels['reply-to'] = 'Reply-To';
+$labels['mailboxlist'] = 'Դարակներ';
+$labels['messagesfromto'] = 'Նամակներ $from–ից $to–ը եղած $count–ից';
+$labels['messagenrof'] = 'Նամակ $nr եղած $count–ից';
+$labels['moveto'] = 'Տեղափոխել...';
+$labels['download'] = 'Քաշել';
+$labels['filename'] = 'Ֆայլի անուն';
+$labels['filesize'] = 'Ֆայլի չափ';
+$labels['preferhtml'] = 'Գերադասել HTML';
+$labels['htmlmessage'] = 'HTML նամակ';
+$labels['prettydate'] = 'Պարզ ամսաթվեր';
+$labels['addtoaddressbook'] = 'Հիշել հասցեն';
+$labels['sun'] = 'Կիր';
+$labels['mon'] = 'Երկ';
+$labels['tue'] = 'Երք';
+$labels['wed'] = 'Չրք';
+$labels['thu'] = 'Հնգ';
+$labels['fri'] = 'Ուրբ';
+$labels['sat'] = 'Շբթ';
+$labels['sunday'] = 'Կիրակի';
+$labels['monday'] = 'Երկուշաբթի';
+$labels['tuesday'] = 'Երեքշաբթի';
+$labels['wednesday'] = 'Չորեքշաբթի';
+$labels['thursday'] = 'Հինգշաբթի';
+$labels['friday'] = 'Ուրբաթ';
+$labels['saturday'] = 'Շաբաթ';
+$labels['today'] = 'Այսօր';
+$labels['checkmail'] = 'Ստուգել նոր նամակները';
+$labels['writenewmessage'] = 'Նոր նամակ';
+$labels['replytomessage'] = 'Պատասխանել նամակին';
+$labels['replytoallmessage'] = 'Պատասխանել բոլորին';
+$labels['forwardmessage'] = 'Փոխանցել նամակը';
+$labels['deletemessage'] = 'Ջնջել նամակը';
+$labels['movemessagetotrash'] = 'Գցել աղբարկղը';
+$labels['printmessage'] = 'Տպել';
+$labels['previousmessage'] = 'Ցուցադրել նախորդ նամակը';
+$labels['previousmessages'] = 'Ցուցադրել նախորդ նամակները';
+$labels['firstmessage'] = 'Ցուցադրել առաջին նամակը';
+$labels['firstmessages'] = 'Ցուցադրել առաջին էջը';
+$labels['nextmessage'] = 'Ցուցադրել հաջորդ նամակը';
+$labels['nextmessages'] = 'Ցուցադրել հաջորդ նամակները';
+$labels['lastmessage'] = 'Ցուցադրել վերջին նամակը';
+$labels['lastmessages'] = 'Ցուցադրել վերջին էջը';
+$labels['backtolist'] = 'Վերադառնալ նամակների ցուցակ';
+$labels['viewsource'] = 'Ցուցադրել նամակի կոդը';
+$labels['markmessages'] = 'Նշել նամակները';
+$labels['markread'] = 'որպես կարդացած';
+$labels['markunread'] = 'որպես չկարդացած';
+$labels['select'] = 'Նշել';
+$labels['all'] = 'Բոլորը';
+$labels['none'] = 'Չնշել';
+$labels['unread'] = 'Չկարդացածը';
+$labels['compact'] = 'Սեղմել';
+$labels['empty'] = 'Դատարկել';
+$labels['purge'] = 'Մաքրել';
+$labels['quota'] = 'Դիսկային տարածք';
+$labels['unknown'] = 'անհայտ';
+$labels['unlimited'] = 'անսահմանափակ';
+$labels['quicksearch'] = 'Արագ որոնում';
+$labels['resetsearch'] = 'Վերսկսել որոնումը';
+$labels['compose'] = 'Գրել նամակ';
+$labels['savemessage'] = 'Հիշել որպես սևագիր';
+$labels['sendmessage'] = 'Ուղարկել';
+$labels['addattachment'] = 'Կցել ֆայլ';
+$labels['charset'] = 'Տառաշար';
+$labels['editortype'] = 'Խմբագրի տիպը';
+$labels['returnreceipt'] = 'Ստացման հավաստագիր';
+$labels['checkspelling'] = 'Ստուգել ուղագրությունը';
+$labels['resumeediting'] = 'Շարունակել խմբագրումը';
+$labels['revertto'] = 'Վերականգնել';
+$labels['attachments'] = 'Կցումներ';
+$labels['upload'] = 'Բեռնել';
+$labels['close'] = 'Փակել';
+$labels['low'] = 'Ցածր';
+$labels['lowest'] = 'Նվազագույն';
+$labels['normal'] = 'Նորմալ';
+$labels['high'] = 'Կարևոր';
+$labels['highest'] = 'Կարևորագույն';
+$labels['nosubject'] = '(առանց վերնագրի)';
+$labels['showimages'] = 'Ցուցադրել նկարները';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Պարզ տեքստ';
+$labels['addcc'] = 'Ավելացնել Cc';
+$labels['addbcc'] = 'Ավելացնել Bcc';
+$labels['addreplyto'] = 'Ավելացնել Reply-To';
+$labels['mdnrequest'] = 'Նամակի հեղինակը խնդրել է նամակը կարդալուն պես տեղեկացնել իրեն։ Ցանկանում էք Տեղեկացնե՞լ։';
+$labels['receiptread'] = 'Նամակի ընթերցման ծանուցագիր';
+$labels['yourmessage'] = 'Սա Ձեր նամակի ընթերցման ծանուցագիրն է';
+$labels['receiptnote'] = 'Նշում՝ Այս ծանուցագիրը ընդամենը տեղեկացնում է, որ նամակը ցուցադրվել է հասցեատիրոջ համակարչով։ Չկա որևիցե երաշխիք, որ հասցեատերը իսկապես կարդացել է նամակը։';
+$labels['name'] = 'Մականուն';
+$labels['firstname'] = 'Անուն';
+$labels['surname'] = 'Ազգանուն';
+$labels['email'] = 'Էկ–փոստ';
+$labels['addcontact'] = 'Գրանցել նշած հասցեն';
+$labels['editcontact'] = 'Խմբագրել հասցեն';
+$labels['edit'] = 'Խմբագրել';
+$labels['cancel'] = 'Թարգել';
+$labels['save'] = 'Հիշել';
+$labels['delete'] = 'Ջնջել';
+$labels['newcontact'] = 'Ստեղծել նոր հասցեքարտ';
+$labels['deletecontact'] = 'Ջնջել նշած նամակները';
+$labels['composeto'] = 'Գրել նամակ';
+$labels['contactsfromto'] = 'Հասցեներ $from–ից $to–ը եղած $count–ից';
+$labels['print'] = 'Տպել';
+$labels['export'] = 'Արտահանել';
+$labels['previouspage'] = 'Ցուցադրել նախորդ էջը';
+$labels['firstpage'] = 'Ցուցադրել առաջին էջը';
+$labels['nextpage'] = 'Ցուցադրել հաջորդ էջը';
+$labels['lastpage'] = 'Ցուցադրել վերջին էջը';
+$labels['groups'] = 'Խմբեր';
+$labels['personaladrbook'] = 'Անձնական հասցեներ';
+$labels['settingsfor'] = 'Նախասիրություններ';
+$labels['preferences'] = 'Ընդհանուր';
+$labels['userpreferences'] = 'Օգտվողի նախասիրություններ';
+$labels['editpreferences'] = 'Խմբագրել օգտվողի նախասիրությունները';
+$labels['identities'] = 'Անձիք';
+$labels['manageidentities'] = 'Կարգավորել անձանց';
+$labels['newidentity'] = 'Նոր անձ';
+$labels['newitem'] = 'Նոր իր';
+$labels['edititem'] = 'Խմբագրել իրը';
+$labels['setdefault'] = 'Հիմնական';
+$labels['language'] = 'Լեզու';
+$labels['timezone'] = 'Ժամային գոտի';
+$labels['pagesize'] = 'Տողեր առ էջ';
+$labels['signature'] = 'Ստորագրություն';
+$labels['dstactive'] = 'Ամառային ժամանակ';
+$labels['htmleditor'] = 'Ստեղծել HTML նամակներ';
+$labels['htmlsignature'] = 'HTML ստորագրություն';
+$labels['previewpane'] = 'Ցուցադրել պատուհանը';
+$labels['autosavedraft'] = 'Սևագրի ավտոմատ գրանցում';
+$labels['everynminutes'] = 'ամեն $n րոպեն';
+$labels['never'] = 'երբեք';
+$labels['folder'] = 'Դարակ';
+$labels['folders'] = 'Դարակներ';
+$labels['foldername'] = 'Դարակի անուն';
+$labels['subscribed'] = 'Բաժանորդագրված';
+$labels['messagecount'] = 'Նամակներ';
+$labels['create'] = 'Ստեղծել';
+$labels['createfolder'] = 'Բացել նոր դարակ';
+$labels['rename'] = 'Վերանվանել';
+$labels['renamefolder'] = 'Վերանվանել դարակը';
+$labels['deletefolder'] = 'Ջնջել դարակը';
+$labels['managefolders'] = 'Կարգավորել դարակները';
+$labels['sortby'] = 'Դասավորել';
+$labels['sortasc'] = 'ըստ աճման';
+$labels['sortdesc'] = 'ըստ նվազման';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/am/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Vahan Yerkanian <vahan@arminco.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1160 2008-03-01 15:32:44Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Մուտքը ձախողվեց';
+$messages['cookiesdisabled'] = 'Сookies–ների ապահովվումը բացակայում է';
+$messages['sessionerror'] = 'Անվավեր կամ ժամկետանց սեսիա';
+$messages['imaperror'] = 'IMAP սերվերի հետ կապը ձախողվեց';
+$messages['nomessagesfound'] = 'Այս փոստարկղում նամակներ չկան';
+$messages['loggedout'] = 'Դուք բարեհաջող ավարտեցիք աշխատանքը։ Ցտեսություն…';
+$messages['mailboxempty'] = 'Փոստարկղը դատարկ է';
+$messages['loading'] = 'Բեռնավորում…';
+$messages['loadingdata'] = 'Տվյալների բեռնավորում…';
+$messages['checkingmail'] = 'Նոր նամակների ստուգում…';
+$messages['sendingmessage'] = 'Նամակի ուղարկում…';
+$messages['messagesent'] = 'Նամակն ուղարկված է';
+$messages['savingmessage'] = 'Նամակի գրանցում…';
+$messages['messagesaved'] = 'Նամակը գրանցվեց որպես սևագիր';
+$messages['successfullysaved'] = 'Գրանցված է';
+$messages['addedsuccessfully'] = 'Հասցեն ավելացված է';
+$messages['contactexists'] = 'Այս հասցեով անձը արդեն գրանցված է';
+$messages['blockedimages'] = 'Ձեր անվտանգության համար, այս նամակի արտաքին նկարներն բեռնված չեն';
+$messages['encryptedmessage'] = 'Ներողություն, այս նամակը կոդավորված է';
+$messages['nocontactsfound'] = 'Հասցեներ չկան';
+$messages['contactnotfound'] = 'Որոնվող հասցեն չգտնվեց';
+$messages['sendingfailed'] = 'Նամակի ուղարկումը ձախողվեց';
+$messages['errorsaving'] = 'Գրանցման սխալ';
+$messages['errormoving'] = 'Նամակի տեղափոխման ձախողում';
+$messages['errordeleting'] = 'Նամակի ջնջման ձախողում';
+$messages['deletecontactconfirm'] = 'Ուզու՞մ էք ջնջել նշված անձերին';
+$messages['deletemessagesconfirm'] = 'Ուզու՞մ էք ջնջել նշված նամակները';
+$messages['deletefolderconfirm'] = 'Ուզու՞մ էք ջնջել այս դարակը';
+$messages['purgefolderconfirm'] = 'Ուզու՞մ էք ջնջել այս դարակի բոլոր նամակները';
+$messages['formincomplete'] = 'Ձևը թերի է լրացված';
+$messages['noemailwarning'] = 'Մուտքագրեք ճիշտ էլ. հասցե';
+$messages['nonamewarning'] = 'Մուտքագրեք անուն';
+$messages['nopagesizewarning'] = 'Մուտքագրեք էջի չափս';
+$messages['norecipientwarning'] = 'Մուտքագրեք նվազագույնը մեկ հասցեատեր';
+$messages['nosubjectwarning'] = 'Վերնագիր բացակայում է, ցանկանո՞ւմ եք լրացնել';
+$messages['nobodywarning'] = 'Ուղարկե՞լ այս նամակը դատարկ';
+$messages['notsentwarning'] = 'Նամակն ուղարկված չէ։ Ջնջե՞լ Ձեր նամակը';
+$messages['noldapserver'] = 'Ընտրեք ldap սերվեր որոնման համար';
+$messages['nocontactsreturned'] = 'Հասցեներ չեն գտնվել';
+$messages['nosearchname'] = 'Մուտքագրեք հասցեատեր կամ էլ. հասցե';
+$messages['searchsuccessful'] = 'Գտնվեց $nr նամակ';
+$messages['searchnomatch'] = 'Համապատասխան նամակներ չգտնվեցին';
+$messages['searching'] = 'Որոնում...';
+$messages['checking'] = 'Ստուգում…';
+$messages['nospellerrors'] = 'Ուղագրական սխալներ չկան';
+$messages['folderdeleted'] = 'Դարակը ջնջվեց';
+$messages['deletedsuccessfully'] = 'Ջնջված է';
+$messages['converting'] = 'Նամակի ձևավորման հեռացում…';
+$messages['messageopenerror'] = 'Նամակի բեռնվումը սերվերից ձախողվեց';
+$messages['fileuploaderror'] = 'Ֆայլի կցումն ձախողվեց';
+$messages['filesizeerror'] = 'Ֆայլի չափը գերազանցում է մաքսիմալը՝ $size';
+$messages['copysuccess'] = '$nr հասցեների կրկնօրինակումը ավարտված է';
+$messages['copyerror'] = 'Հասցեների կրկնօրինակումը ձախողվեց';
+$messages['sourceisreadonly'] = 'Այս հասցեն պաշտպանված է';
+$messages['errorsavingcontact'] = 'Հասցեի գրանցումն ձախողվեց';
+$messages['movingmessage'] = 'Նամակը տեղափոխվում է…';
+$messages['receiptsent'] = 'Նամակի ընթերցման ծանուցագիրն ուղարկված է';
+$messages['errorsendingreceipt'] = 'Ծանուցագրի ուղարկումը ձախողվեց';
+$messages['nodeletelastidentity'] = 'Անհնար է ջնջել վերջին տարբերակը';
+$messages['addsubfolderhint'] = 'Այս դարակը կստեղծվի որպես նշվածի ենթադարակ';
+
+?>
\ No newline at end of file
| Licensed under the GNU GPL |
| |
| PURPOSE: |
- | Provide centralized location for keeping track of |
- | available languages |
+ | Provide a centralized location table |
+ | for keeping track of available languages |
| |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: index.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: index.inc 1491 2008-06-07 19:31:56Z alec $
*/
-
- $rcube_languages = array(
- 'sq_AL' => 'Albanian',
- 'ar' => 'Arabic',
- 'am' => 'Armenian',
- 'bs_BA' => 'Bosnian (Bosanski)',
- 'bg' => 'Bulgarian',
- 'ca' => 'Català',
- 'zh_CN' => 'Chinese (Simplified)',
- 'zh_TW' => 'Chinese (Traditional)',
- 'hr' => 'Croatian (Hrvatski)',
- 'cz' => 'Czech',
- 'da' => 'Dansk',
- 'de_DE' => 'Deutsch (Deutsch)',
- 'de_CH' => 'Deutsch (Schweiz)',
- 'en_GB' => 'English (GB)',
- 'en_US' => 'English (US)',
- 'es' => 'Español',
- 'eo' => 'Esperanto',
- 'et_EE' => 'Estonian',
- 'eu' => 'Euskara',
- 'nl_BE' => 'Flemish',
- 'fr' => 'Français',
- 'gl' => 'Galego',
- 'ge' => 'Georgian',
- 'el' => 'Greek',
- 'he' => 'Hebrew',
- 'hi' => 'Hindi',
- 'hu' => 'Hungarian',
- 'is' => 'Icelandic',
- 'id_ID' => 'Indonesian',
- 'ga_IE' => 'Irish',
- 'it' => 'Italiano',
- 'ja' => 'Japanese (日本語)',
- 'kr' => 'Korean',
- 'ku' => 'Kurdish (Kurmancî)',
- 'lv' => 'Latvian',
- 'lt' => 'Lithuanian',
- 'mk' => 'Macedonian',
- 'ms_MY' => 'Malay',
- 'nl_NL' => 'Nederlands',
- 'ne' => 'Nepali',
- 'nb_NO' => 'Norsk (bokmål)',
- 'nn_NO' => 'Norsk (nynorsk)',
- 'fa' => 'Persian',
- 'pl' => 'Polski',
- 'pt_BR' => 'Portuguese (Brazilian)',
- 'pt_PT' => 'Portuguese (Standard)',
- 'ro' => 'Romanian',
- 'ru' => 'Russian',
- 'sr_cyrillic' => 'Serbian Cyrillic',
- 'sr_latin' => 'Serbian Latin',
- 'si' => 'Sinhala',
- 'sk' => 'Slovak',
- 'sl' => 'Slovenian',
- 'fi' => 'Suomi',
- 'se' => 'Svenska',
- 'th_TH' => 'Thai',
- 'tr' => 'Turkish',
- 'uk' => 'Ukrainian',
- 'vn' => 'Vietnamese'
+
+// langage codes according to ISO 639-1
+// country codes according to ISO 3166-1 (Alpha-2)
+
+$rcube_languages = array(
+ 'sq_AL' => 'Albanian',
+ 'ar_SA' => 'Arabic',
+ 'hy_AM' => 'Armenian',
+ 'bs_BA' => 'Bosnian (Serbian Latin)',
+ 'bg_BG' => 'Bulgarian',
+ 'ca_ES' => 'Català',
+ 'zh_CN' => 'Chinese (Simplified)',
+ 'zh_TW' => 'Chinese (Traditional)',
+ 'hr_HR' => 'Croatian (Hrvatski)',
+ 'cs_CZ' => 'Czech',
+ 'da_DK' => 'Dansk',
+ 'de_DE' => 'Deutsch (Deutsch)',
+ 'de_CH' => 'Deutsch (Schweiz)',
+ 'en_GB' => 'English (GB)',
+ 'en_US' => 'English (US)',
+ 'es_ES' => 'Español',
+ 'eo' => 'Esperanto',
+ 'et_EE' => 'Estonian',
+ 'eu_ES' => 'Euskara (Basque)',
+ 'fi_FI' => 'Finnish (Suomi)',
+ 'nl_BE' => 'Flemish',
+ 'fr_FR' => 'Français',
+ 'gl_ES' => 'Galego (Galician)',
+ 'ka_GE' => 'Georgian (Kartuli)',
+ 'el_GR' => 'Greek',
+ 'he_IL' => 'Hebrew',
+ 'hi_IN' => 'Hindi',
+ 'hu_HU' => 'Hungarian',
+ 'is_IS' => 'Icelandic',
+ 'id_ID' => 'Indonesian',
+ 'ga_IE' => 'Irish',
+ 'it_IT' => 'Italiano',
+ 'ja_JP' => 'Japanese (日本語)',
+ 'ko_KR' => 'Korean',
+ 'ku' => 'Kurdish (Kurmancî)',
+ 'lv_LV' => 'Latvian',
+ 'lt_LT' => 'Lithuanian',
+ 'mk_MK' => 'Macedonian',
+ 'ms_MY' => 'Malay',
+ 'nl_NL' => 'Nederlands',
+ 'ne_NP' => 'Nepali',
+ 'nb_NO' => 'Norsk (Bokmål)',
+ 'nn_NO' => 'Norsk (Nynorsk)',
+ 'fa' => 'Persian (Farsi)',
+ 'pl_PL' => 'Polski',
+ 'pt_BR' => 'Portuguese (Brazilian)',
+ 'pt_PT' => 'Portuguese (Standard)',
+ 'ro_RO' => 'Romanian',
+ 'ru_RU' => 'Russian',
+ 'sr_CS' => 'Serbian (Cyrillic)',
+ 'si_LK' => 'Sinhala',
+ 'sk_SK' => 'Slovak',
+ 'sl_SI' => 'Slovenian',
+ 'sv_SE' => 'Swedish (Svenska)',
+ 'th_TH' => 'Thai',
+ 'tr_TR' => 'Turkish',
+ 'uk_UA' => 'Ukrainian',
+ 'vi_VN' => 'Vietnamese',
);
$rcube_language_aliases = array(
- 'ee' => 'et_EE',
- 'bs' => 'bs_BA',
- 'cn' => 'zh_CN',
- 'de' => 'de_DE',
- 'en' => 'en_US',
- 'ga' => 'ga_IE',
- 'nl' => 'nl_NL',
- 'no' => 'nn_NO',
- 'pt' => 'pt_PT',
- 'th' => 'th_TH',
- 'tw' => 'zh_TW'
+ 'ar' => 'ar_SA',
+ 'am' => 'hy_AM',
+ 'bg' => 'bg_BG',
+ 'bs' => 'bs_BA',
+ 'ca' => 'ca_ES',
+ 'cn' => 'zh_CN',
+ 'cs' => 'cs_CZ',
+ 'cz' => 'cs_CZ',
+ 'da' => 'da_DK',
+ 'de' => 'de_DE',
+ 'ee' => 'et_EE',
+ 'el' => 'el_GR',
+ 'en' => 'en_US',
+ 'eu' => 'eu_ES',
+ 'ga' => 'ga_IE',
+ 'ge' => 'ka_GE',
+ 'gl' => 'gl_ES',
+ 'he' => 'he_IL',
+ 'hi' => 'hi_IN',
+ 'hr' => 'hr_HR',
+ 'ja' => 'ja_JP',
+ 'ko' => 'ko_KR',
+ 'kr' => 'ko_KR',
+ 'ne' => 'ne_NP',
+ 'no' => 'nn_NO',
+ 'ms' => 'ms_MY',
+ 'pl' => 'pl_PL',
+ 'tw' => 'zh_TW',
+ 'si' => 'si_LK',
+ 'sl' => 'sl_SI',
+ 'sr' => 'sr_CS',
+ 'sr_cyrillic' => 'sr_CS',
+ 'sr_latin' => 'bs_BA',
+ 'se' => 'sv_SE',
+ 'sv' => 'sv_SE',
+ 'uk' => 'uk_UA',
+ 'vn' => 'vi_VN',
+ 'vi' => 'vi_VN',
+ 'zh' => 'zh_CN',
);
-$rcube_charsets = array();
?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/en_GB/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Weiran Zhang (weiran@weiran.co.uk) |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 543 2007-04-28 18:07:12Z thomasb $
-
-*/
-
-$labels = array();
-
-// login page
-$labels['welcome'] = 'Vefpóstur Vodafone';
-$labels['username'] = 'Netfang';
-$labels['password'] = 'Lykilorð';
-$labels['server'] = 'Server';
-$labels['login'] = 'Innskrá';
-
-// taskbar
-$labels['logout'] = 'Útskrá';
-$labels['mail'] = 'Tölvupóstur';
-$labels['settings'] = 'Stillingar';
-$labels['addressbook'] = 'Netfangaskrá';
-
-// mailbox names
-$labels['inbox'] = 'Innhólf';
-$labels['drafts'] = 'Drög';
-$labels['sent'] = 'Sent';
-$labels['trash'] = 'Eyddir hlutir';
-$labels['junk'] = 'Ruslpóstur';
-
-// message listing
-$labels['subject'] = 'Efni';
-$labels['from'] = 'Sendandi';
-$labels['to'] = 'Viðtakandi';
-$labels['cc'] = 'Afrit';
-$labels['bcc'] = 'Blint afrit';
-$labels['replyto'] = 'Reply-To';
-$labels['date'] = 'Dags';
-$labels['size'] = 'Stærð';
-$labels['priority'] = 'Forgangur';
-$labels['organization'] = 'Stofnun';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-
-$labels['mailboxlist'] = 'Möppur';
-$labels['messagesfromto'] = 'Skeyti $from til $to af $count';
-$labels['messagenrof'] = 'Skeyti $nr af $count';
-
-$labels['moveto'] = 'færa í...';
-$labels['download'] = 'sækja';
-
-$labels['filename'] = 'Skrárnafn';
-$labels['filesize'] = 'Skrárstærð';
-
-$labels['preferhtml'] = 'Vil HTML';
-$labels['htmlmessage'] = 'HTML skeyti';
-$labels['prettydate'] = 'Fallegar dagsetningar';
-
-$labels['addtoaddressbook'] = 'Bæta í netfangaskrá';
-
-// weekdays short
-$labels['sun'] = 'sun';
-$labels['mon'] = 'mán';
-$labels['tue'] = 'þri';
-$labels['wed'] = 'mið';
-$labels['thu'] = 'fim';
-$labels['fri'] = 'fös';
-$labels['sat'] = 'lau';
-
-// weekdays long
-$labels['sunday'] = 'sunnudagur';
-$labels['monday'] = 'mánudagur';
-$labels['tuesday'] = 'þriðjudagur';
-$labels['wednesday'] = 'miðvikudagur';
-$labels['thursday'] = 'fimmtudagur';
-$labels['friday'] = 'föstudagur';
-$labels['saturday'] = 'laugardagur';
-
-$labels['today'] = 'í dag';
-
-// toolbar buttons
-$labels['checkmail'] = 'Gá að nýjum skeytum';
-$labels['writenewmessage'] = 'Búa til nýtt skeyti';
-$labels['replytomessage'] = 'Svara skeyti';
-$labels['replytoallmessage'] = 'Svara sendanda og öllum viðtakendum';
-$labels['forwardmessage'] = 'Framsenda skeyti';
-$labels['deletemessage'] = 'Færa skeyti í rusl';
-$labels['printmessage'] = 'Prenta skeyti';
-$labels['previousmessages'] = 'Sýna fyrri skammt af skeytum';
-$labels['nextmessages'] = 'Sýna næsta skammt af skeytum';
-$labels['backtolist'] = 'Til baka í skeytalista';
-$labels['viewsource'] = 'Skoða kóða';
-
-$labels['select'] = 'Velja';
-$labels['all'] = 'Allt';
-$labels['none'] = 'Ekkert';
-$labels['unread'] = 'Ólesið';
-
-$labels['compact'] = 'Pakka';
-$labels['empty'] = 'Tæma';
-$labels['purge'] = 'Hreinsa';
-
-$labels['quota'] = 'Gagnamagn';
-
-
-// message compose
-$labels['compose'] = 'Semja skeyti';
-$labels['savemessage'] = 'Vista drög';
-$labels['sendmessage'] = 'Senda skeytið núna';
-$labels['addattachment'] = 'Hengja við';
-$labels['charset'] = 'Stafasett';
-
-$labels['returnreceipt'] = 'Kvittun við lestur';
-
-$labels['attachments'] = 'Viðhengi';
-$labels['upload'] = 'Senda';
-$labels['close'] = 'Loka';
-
-$labels['low'] = 'Lágt';
-$labels['lowest'] = 'Lægst';
-$labels['normal'] = 'Venjulegt';
-$labels['high'] = 'Hátt';
-$labels['highest'] = 'Hæst';
-
-$labels['nosubject'] = '(ekkert efni)';
-$labels['showimages'] = 'Birta myndir';
-
-$labels['editortype'] = 'Gerð ritils';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Einfaldur';
-
-$labels['checkspelling'] = 'Villuleita';
-$labels['resumeediting'] = 'Aftur í ritham';
-$labels['revertto'] = 'Hverfa til';
-
-$labels['addcc'] = 'Bæta við Cc';
-$labels['addbcc'] = 'Bæta við Bcc';
-$labels['addreplyto'] = 'Bæta við Reply-To';
-
-
-// address boook
-$labels['name'] = 'Nafn til birtingar';
-$labels['firstname'] = 'Fornafn';
-$labels['surname'] = 'Eftirnafn';
-$labels['email'] = 'Netfang';
-$labels['mobile'] = 'Farsími';
-
-$labels['addcontact'] = 'Bæta við nýju';
-$labels['editcontact'] = 'Lagfæra';
-
-$labels['edit'] = 'Laga';
-$labels['cancel'] = 'Hætta við';
-$labels['save'] = 'Vista';
-$labels['delete'] = 'Eyða';
-
-$labels['newcontact'] = 'Búa til nýtt nafnspjald';
-$labels['deletecontact'] = 'Eyða völdum netföngum';
-$labels['composeto'] = 'Skrifa skeyti til';
-$labels['contactsfromto'] = 'Netföng $from til $to af $count';
-$labels['print'] = 'Prenta';
-$labels['export'] = 'Flytja út';
-
-
-// settings
-$labels['settingsfor'] = 'Stillingar fyrir';
-
-$labels['preferences'] = 'Stillingar';
-$labels['userpreferences'] = 'Notendastillingar';
-$labels['editpreferences'] = 'Breyta notendastillingum';
-
-$labels['identities'] = 'Identities';
-$labels['manageidentities'] = 'Manage identities for this account';
-$labels['newidentity'] = 'New identity';
-
-$labels['newitem'] = 'Nýtt';
-$labels['edititem'] = 'Laga';
-
-$labels['setdefault'] = 'Gera sjálfgilt';
-$labels['language'] = 'Tungumál';
-$labels['timezone'] = 'Tímabelti';
-$labels['pagesize'] = 'Línur á síðu';
-$labels['signature'] = 'Undirskrift';
-$labels['dstactive'] = 'Sumar-/vetratími';
-$labels['htmleditor'] = 'Skrifa HTML-skeyti';
-$labels['htmlsignature'] = 'HTML-undirskrift';
-$labels['previewpane'] = 'Sýna forskoðunarglugga';
-
-$labels['autosavedraft'] = 'Vista sjálfkrafa sem drög';
-$labels['everynminutes'] = 'á $n mínútna fresti';
-$labels['never'] = 'aldrei';
-
-$labels['folder'] = 'Mappa';
-$labels['folders'] = 'Möppur';
-$labels['foldername'] = 'Nafn möppu';
-$labels['subscribed'] = 'Valin';
-$labels['create'] = 'Búa til';
-$labels['createfolder'] = 'Búa til nýja möppu';
-$labels['deletefolder'] = 'Eyða möppu';
-$labels['managefolders'] = 'Sýsla með möppum';
-$labels['renamefolder'] = 'Breyta nafni möppu';
-
-
-
-$labels['sortby'] = 'Raða eftir';
-$labels['sortasc'] = 'Raða vaxandi';
-$labels['sortdesc'] = 'Raða minnkandi';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/en_GB/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Weiran Zhang (weiran@weiran.co.uk) |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 466 2007-02-06 09:17:01Z tomekp $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Innskráning mistókst';
-$messages['cookiesdisabled'] = 'Vafrinn þinn vill ekki taka við kökum (cookies)';
-$messages['sessionerror'] = 'Innskráningin þín ógild eða útrunnin';
-$messages['imaperror'] = 'Tengin við IMAP-miðlara mistókst';
-$messages['nomessagesfound'] = 'Engin skeyti eru í þessu pósthólfi';
-$messages['loggedout'] = 'Þú hefur útskráðst. Bless!';
-$messages['mailboxempty'] = 'Pósthólfið er tómt';
-$messages['loading'] = 'Hleð...';
-$messages['loadingdata'] = 'Hleð gögn...';
-$messages['checkingmail'] = 'Gái að nýjum skeytum...';
-$messages['messagesent'] = 'Skeyti var sent';
-$messages['savingmessage'] = 'Vista skeyti...';
-$messages['messagesaved'] = 'Skeytið vistað í Drög';
-$messages['successfullysaved'] = 'Vistun heppnaðist!';
-$messages['addedsuccessfully'] = 'Netfangi var bætt í netfangaskrá';
-$messages['contactexists'] = 'Þetta netfang er þegar skráð í netfangaskrána';
-$messages['blockedimages'] = 'Til verndar hafa allar myndir í þessu skeyti verið blokkaðar.';
-$messages['encryptedmessage'] = 'Þetta er dulkóðað skeyti og því miður er ekki hægt að birta það';
-$messages['nocontactsfound'] = 'Engin netföng';
-$messages['sendingfailed'] = 'Sending misheppnaðist';
-$messages['errorsaving'] = 'Villa kom upp þegar var verið að vista';
-$messages['errormoving'] = 'Gat ekki fært skeytið';
-$messages['errordeleting'] = 'Gat ekki eytt skeytinu';
-$messages['deletecontactconfirm'] = 'Ertu viss um að þú viljir eyða völdum netföngum?';
-$messages['deletefolderconfirm'] = 'Ertu viss um að vilja eyða þessari möppu?';
-$messages['formincomplete'] = 'Formið var ekki fyllt út að fullu';
-$messages['noemailwarning'] = 'Sláðu inn gildt netfang';
-$messages['nonamewarning'] = 'Sláðu inn nafn';
-$messages['nopagesizewarning'] = 'Sláðu inn síðustærð';
-$messages['norecipientwarning'] = 'Í það minnsta einn viðtakandi verður að vera';
-$messages['nosubjectwarning'] = 'Efnislínan er tóm. Viltu slá eitthvað inn í hana?';
-$messages['nobodywarning'] = 'Viltu senda tómt skeyti?';
-$messages['notsentwarning'] = 'Skeytið hefur ekki verið send. Viltu henda skeytinu?';
-$messages['noldapserver'] = 'Please select an ldap server to search';
-$messages['nocontactsreturned'] = 'Engin netföng fundust';
-$messages['nosearchname'] = 'Sláðu inn nafn eða netfang';
-$messages['searchsuccessful'] = '$nr skeyti fundust';
-$messages['searchnomatch'] = 'Leit skilaði engu';
-$messages['searching'] = 'Leita...';
-$messages['checking'] = 'Gái...';
-$messages['nospellerrors'] = 'Engar innsláttarvillur fundust';
-$messages['folderdeleted'] = 'Möppu var eytt';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/en_GB/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Weiran Zhang (weiran@weiran.co.uk) |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 543 2007-04-28 18:07:12Z thomasb $
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = 'Vefpóstur Vodafone';
+$labels['username'] = 'Netfang';
+$labels['password'] = 'Lykilorð';
+$labels['server'] = 'Server';
+$labels['login'] = 'Innskrá';
+
+// taskbar
+$labels['logout'] = 'Útskrá';
+$labels['mail'] = 'Tölvupóstur';
+$labels['settings'] = 'Stillingar';
+$labels['addressbook'] = 'Netfangaskrá';
+
+// mailbox names
+$labels['inbox'] = 'Innhólf';
+$labels['drafts'] = 'Drög';
+$labels['sent'] = 'Sent';
+$labels['trash'] = 'Eyddir hlutir';
+$labels['junk'] = 'Ruslpóstur';
+
+// message listing
+$labels['subject'] = 'Efni';
+$labels['from'] = 'Sendandi';
+$labels['to'] = 'Viðtakandi';
+$labels['cc'] = 'Afrit';
+$labels['bcc'] = 'Blint afrit';
+$labels['replyto'] = 'Reply-To';
+$labels['date'] = 'Dags';
+$labels['size'] = 'Stærð';
+$labels['priority'] = 'Forgangur';
+$labels['organization'] = 'Stofnun';
+
+// aliases
+$labels['reply-to'] = $labels['replyto'];
+
+$labels['mailboxlist'] = 'Möppur';
+$labels['messagesfromto'] = 'Skeyti $from til $to af $count';
+$labels['messagenrof'] = 'Skeyti $nr af $count';
+
+$labels['moveto'] = 'færa í...';
+$labels['download'] = 'sækja';
+
+$labels['filename'] = 'Skrárnafn';
+$labels['filesize'] = 'Skrárstærð';
+
+$labels['preferhtml'] = 'Vil HTML';
+$labels['htmlmessage'] = 'HTML skeyti';
+$labels['prettydate'] = 'Fallegar dagsetningar';
+
+$labels['addtoaddressbook'] = 'Bæta í netfangaskrá';
+
+// weekdays short
+$labels['sun'] = 'sun';
+$labels['mon'] = 'mán';
+$labels['tue'] = 'þri';
+$labels['wed'] = 'mið';
+$labels['thu'] = 'fim';
+$labels['fri'] = 'fös';
+$labels['sat'] = 'lau';
+
+// weekdays long
+$labels['sunday'] = 'sunnudagur';
+$labels['monday'] = 'mánudagur';
+$labels['tuesday'] = 'þriðjudagur';
+$labels['wednesday'] = 'miðvikudagur';
+$labels['thursday'] = 'fimmtudagur';
+$labels['friday'] = 'föstudagur';
+$labels['saturday'] = 'laugardagur';
+
+$labels['today'] = 'í dag';
+
+// toolbar buttons
+$labels['checkmail'] = 'Gá að nýjum skeytum';
+$labels['writenewmessage'] = 'Búa til nýtt skeyti';
+$labels['replytomessage'] = 'Svara skeyti';
+$labels['replytoallmessage'] = 'Svara sendanda og öllum viðtakendum';
+$labels['forwardmessage'] = 'Framsenda skeyti';
+$labels['deletemessage'] = 'Færa skeyti í rusl';
+$labels['printmessage'] = 'Prenta skeyti';
+$labels['previousmessages'] = 'Sýna fyrri skammt af skeytum';
+$labels['nextmessages'] = 'Sýna næsta skammt af skeytum';
+$labels['backtolist'] = 'Til baka í skeytalista';
+$labels['viewsource'] = 'Skoða kóða';
+
+$labels['select'] = 'Velja';
+$labels['all'] = 'Allt';
+$labels['none'] = 'Ekkert';
+$labels['unread'] = 'Ólesið';
+
+$labels['compact'] = 'Pakka';
+$labels['empty'] = 'Tæma';
+$labels['purge'] = 'Hreinsa';
+
+$labels['quota'] = 'Gagnamagn';
+
+
+// message compose
+$labels['compose'] = 'Semja skeyti';
+$labels['savemessage'] = 'Vista drög';
+$labels['sendmessage'] = 'Senda skeytið núna';
+$labels['addattachment'] = 'Hengja við';
+$labels['charset'] = 'Stafasett';
+
+$labels['returnreceipt'] = 'Kvittun við lestur';
+
+$labels['attachments'] = 'Viðhengi';
+$labels['upload'] = 'Senda';
+$labels['close'] = 'Loka';
+
+$labels['low'] = 'Lágt';
+$labels['lowest'] = 'Lægst';
+$labels['normal'] = 'Venjulegt';
+$labels['high'] = 'Hátt';
+$labels['highest'] = 'Hæst';
+
+$labels['nosubject'] = '(ekkert efni)';
+$labels['showimages'] = 'Birta myndir';
+
+$labels['editortype'] = 'Gerð ritils';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Einfaldur';
+
+$labels['checkspelling'] = 'Villuleita';
+$labels['resumeediting'] = 'Aftur í ritham';
+$labels['revertto'] = 'Hverfa til';
+
+$labels['addcc'] = 'Bæta við Cc';
+$labels['addbcc'] = 'Bæta við Bcc';
+$labels['addreplyto'] = 'Bæta við Reply-To';
+
+
+// address boook
+$labels['name'] = 'Nafn til birtingar';
+$labels['firstname'] = 'Fornafn';
+$labels['surname'] = 'Eftirnafn';
+$labels['email'] = 'Netfang';
+$labels['mobile'] = 'Farsími';
+
+$labels['addcontact'] = 'Bæta við nýju';
+$labels['editcontact'] = 'Lagfæra';
+
+$labels['edit'] = 'Laga';
+$labels['cancel'] = 'Hætta við';
+$labels['save'] = 'Vista';
+$labels['delete'] = 'Eyða';
+
+$labels['newcontact'] = 'Búa til nýtt nafnspjald';
+$labels['deletecontact'] = 'Eyða völdum netföngum';
+$labels['composeto'] = 'Skrifa skeyti til';
+$labels['contactsfromto'] = 'Netföng $from til $to af $count';
+$labels['print'] = 'Prenta';
+$labels['export'] = 'Flytja út';
+
+
+// settings
+$labels['settingsfor'] = 'Stillingar fyrir';
+
+$labels['preferences'] = 'Stillingar';
+$labels['userpreferences'] = 'Notendastillingar';
+$labels['editpreferences'] = 'Breyta notendastillingum';
+
+$labels['identities'] = 'Identities';
+$labels['manageidentities'] = 'Manage identities for this account';
+$labels['newidentity'] = 'New identity';
+
+$labels['newitem'] = 'Nýtt';
+$labels['edititem'] = 'Laga';
+
+$labels['setdefault'] = 'Gera sjálfgilt';
+$labels['language'] = 'Tungumál';
+$labels['timezone'] = 'Tímabelti';
+$labels['pagesize'] = 'Línur á síðu';
+$labels['signature'] = 'Undirskrift';
+$labels['dstactive'] = 'Sumar-/vetratími';
+$labels['htmleditor'] = 'Skrifa HTML-skeyti';
+$labels['htmlsignature'] = 'HTML-undirskrift';
+$labels['previewpane'] = 'Sýna forskoðunarglugga';
+
+$labels['autosavedraft'] = 'Vista sjálfkrafa sem drög';
+$labels['everynminutes'] = 'á $n mínútna fresti';
+$labels['never'] = 'aldrei';
+
+$labels['folder'] = 'Mappa';
+$labels['folders'] = 'Möppur';
+$labels['foldername'] = 'Nafn möppu';
+$labels['subscribed'] = 'Valin';
+$labels['create'] = 'Búa til';
+$labels['createfolder'] = 'Búa til nýja möppu';
+$labels['deletefolder'] = 'Eyða möppu';
+$labels['managefolders'] = 'Sýsla með möppum';
+$labels['renamefolder'] = 'Breyta nafni möppu';
+
+
+
+$labels['sortby'] = 'Raða eftir';
+$labels['sortasc'] = 'Raða vaxandi';
+$labels['sortdesc'] = 'Raða minnkandi';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/en_GB/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Weiran Zhang (weiran@weiran.co.uk) |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 466 2007-02-06 09:17:01Z tomekp $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Innskráning mistókst';
+$messages['cookiesdisabled'] = 'Vafrinn þinn vill ekki taka við kökum (cookies)';
+$messages['sessionerror'] = 'Innskráningin þín ógild eða útrunnin';
+$messages['imaperror'] = 'Tengin við IMAP-miðlara mistókst';
+$messages['nomessagesfound'] = 'Engin skeyti eru í þessu pósthólfi';
+$messages['loggedout'] = 'Þú hefur útskráðst. Bless!';
+$messages['mailboxempty'] = 'Pósthólfið er tómt';
+$messages['loading'] = 'Hleð...';
+$messages['loadingdata'] = 'Hleð gögn...';
+$messages['checkingmail'] = 'Gái að nýjum skeytum...';
+$messages['messagesent'] = 'Skeyti var sent';
+$messages['savingmessage'] = 'Vista skeyti...';
+$messages['messagesaved'] = 'Skeytið vistað í Drög';
+$messages['successfullysaved'] = 'Vistun heppnaðist!';
+$messages['addedsuccessfully'] = 'Netfangi var bætt í netfangaskrá';
+$messages['contactexists'] = 'Þetta netfang er þegar skráð í netfangaskrána';
+$messages['blockedimages'] = 'Til verndar hafa allar myndir í þessu skeyti verið blokkaðar.';
+$messages['encryptedmessage'] = 'Þetta er dulkóðað skeyti og því miður er ekki hægt að birta það';
+$messages['nocontactsfound'] = 'Engin netföng';
+$messages['sendingfailed'] = 'Sending misheppnaðist';
+$messages['errorsaving'] = 'Villa kom upp þegar var verið að vista';
+$messages['errormoving'] = 'Gat ekki fært skeytið';
+$messages['errordeleting'] = 'Gat ekki eytt skeytinu';
+$messages['deletecontactconfirm'] = 'Ertu viss um að þú viljir eyða völdum netföngum?';
+$messages['deletefolderconfirm'] = 'Ertu viss um að vilja eyða þessari möppu?';
+$messages['formincomplete'] = 'Formið var ekki fyllt út að fullu';
+$messages['noemailwarning'] = 'Sláðu inn gildt netfang';
+$messages['nonamewarning'] = 'Sláðu inn nafn';
+$messages['nopagesizewarning'] = 'Sláðu inn síðustærð';
+$messages['norecipientwarning'] = 'Í það minnsta einn viðtakandi verður að vera';
+$messages['nosubjectwarning'] = 'Efnislínan er tóm. Viltu slá eitthvað inn í hana?';
+$messages['nobodywarning'] = 'Viltu senda tómt skeyti?';
+$messages['notsentwarning'] = 'Skeytið hefur ekki verið send. Viltu henda skeytinu?';
+$messages['noldapserver'] = 'Please select an ldap server to search';
+$messages['nocontactsreturned'] = 'Engin netföng fundust';
+$messages['nosearchname'] = 'Sláðu inn nafn eða netfang';
+$messages['searchsuccessful'] = '$nr skeyti fundust';
+$messages['searchnomatch'] = 'Leit skilaði engu';
+$messages['searching'] = 'Leita...';
+$messages['checking'] = 'Gái...';
+$messages['nospellerrors'] = 'Engar innsláttarvillur fundust';
+$messages['folderdeleted'] = 'Möppu var eytt';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/it/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Andrej Mocilnik <amocilnik@dotcom.ts.it> |
- | Yusef Maali <contact@yusefmaali.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Benvenuto in $product';
-$labels['username'] = 'Utente';
-$labels['password'] = 'Password';
-$labels['server'] = 'Server';
-$labels['login'] = 'Entra';
-$labels['logout'] = 'Esci';
-$labels['mail'] = 'E-Mail';
-$labels['settings'] = 'Impostazioni';
-$labels['addressbook'] = 'Rubrica';
-$labels['inbox'] = 'Posta in arrivo';
-$labels['drafts'] = 'Bozze';
-$labels['sent'] = 'Inviata';
-$labels['trash'] = 'Cestino';
-$labels['junk'] = 'Spam';
-$labels['subject'] = 'Oggetto';
-$labels['from'] = 'Mittente';
-$labels['to'] = 'Destinatario';
-$labels['cc'] = 'Cc';
-$labels['bcc'] = 'Ccn';
-$labels['replyto'] = 'Rispondi a';
-$labels['date'] = 'Data';
-$labels['size'] = 'Dimensione';
-$labels['priority'] = 'Priorità';
-$labels['organization'] = 'Società';
-$labels['reply-to'] = 'Rispondi a';
-$labels['mailboxlist'] = 'Cartelle';
-$labels['messagesfromto'] = 'Messaggi da $from a $to di $count';
-$labels['messagenrof'] = 'Messaggio $nr di $count';
-$labels['moveto'] = 'sposta...';
-$labels['download'] = 'download';
-$labels['filename'] = 'Nome file';
-$labels['filesize'] = 'Dimensione file';
-$labels['preferhtml'] = 'Mostra HTML';
-$labels['htmlmessage'] = 'Messaggio HTML';
-$labels['prettydate'] = 'Date più leggibili';
-$labels['addtoaddressbook'] = 'Aggiungi alla rubrica';
-$labels['sun'] = 'Dom';
-$labels['mon'] = 'Lun';
-$labels['tue'] = 'Mar';
-$labels['wed'] = 'Mer';
-$labels['thu'] = 'Gio';
-$labels['fri'] = 'Ven';
-$labels['sat'] = 'Sab';
-$labels['sunday'] = 'Domenica';
-$labels['monday'] = 'Lunedì';
-$labels['tuesday'] = 'Martedì';
-$labels['wednesday'] = 'Mercoledì';
-$labels['thursday'] = 'Giovedì';
-$labels['friday'] = 'Venerdì';
-$labels['saturday'] = 'Sabato';
-$labels['today'] = 'Oggi';
-$labels['checkmail'] = 'Controlla nuovi messaggi';
-$labels['writenewmessage'] = 'Scrivi un nuovo messaggio';
-$labels['replytomessage'] = 'Rispondi al messaggio';
-$labels['replytoallmessage'] = 'Rispondi a tutti';
-$labels['forwardmessage'] = 'Inoltra il messaggio';
-$labels['deletemessage'] = 'Elimina il messaggio';
-$labels['movemessagetotrash'] = 'Sposta il messaggio nel cestino';
-$labels['printmessage'] = 'Stampa il messaggio';
-$labels['previousmessage'] = 'Visualizza il messaggio precedente';
-$labels['previousmessages'] = 'Visualizza messaggi precedenti';
-$labels['firstmessage'] = 'Visualizza il primo messaggio';
-$labels['firstmessages'] = 'Visualizza il primo set di messaggi';
-$labels['nextmessage'] = 'Visualizza il messaggio successivo';
-$labels['nextmessages'] = 'Visualizza messaggi successivi';
-$labels['lastmessage'] = 'Visualizza l\'ultimo messaggio';
-$labels['lastmessages'] = 'Visualizza l\'ultimo set di messaggi';
-$labels['backtolist'] = 'Torna alla lista messaggi';
-$labels['viewsource'] = 'Visualizza sorgente messaggio';
-$labels['markmessages'] = 'Marca i messaggi';
-$labels['markread'] = 'Letti';
-$labels['markunread'] = 'Non letti';
-$labels['select'] = 'Seleziona';
-$labels['all'] = 'Tutti';
-$labels['none'] = 'Nessuno';
-$labels['unread'] = 'Non letti';
-$labels['compact'] = 'Compatta';
-$labels['empty'] = 'Svuota';
-$labels['purge'] = 'Pulisci';
-$labels['quota'] = 'Spazio utilizzato';
-$labels['unknown'] = 'sconosciuto';
-$labels['unlimited'] = 'illimitato';
-$labels['quicksearch'] = 'Ricerca veloce';
-$labels['resetsearch'] = 'Annulla ricerca';
-$labels['compose'] = 'Scrivi un messaggio';
-$labels['savemessage'] = 'Salva come bozza';
-$labels['sendmessage'] = 'Invia il messaggio adesso';
-$labels['addattachment'] = 'Allega un file';
-$labels['charset'] = 'Set di caratteri';
-$labels['editortype'] = 'Tipo editor';
-$labels['returnreceipt'] = 'Ricevuta di ritorno';
-$labels['checkspelling'] = 'Controlla ortografia';
-$labels['resumeediting'] = 'Torna al messaggio';
-$labels['revertto'] = 'Ripristina';
-$labels['attachments'] = 'Allegati';
-$labels['upload'] = 'Aggiungi';
-$labels['close'] = 'Chiudi';
-$labels['low'] = 'Bassa';
-$labels['lowest'] = 'Molto bassa';
-$labels['normal'] = 'Normale';
-$labels['high'] = 'Alta';
-$labels['highest'] = 'Molto alta';
-$labels['nosubject'] = '(nessun oggetto)';
-$labels['showimages'] = 'Visualizza immagini';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Testo semplice';
-$labels['addcc'] = 'Aggiungi Cc';
-$labels['addbcc'] = 'Aggiungi Bcc';
-$labels['addreplyto'] = 'Aggiungi Rispondi a';
-$labels['mdnrequest'] = 'Il mittente richiede di ricevere una notifica dell\'avvenuta lettura del messaggio. Si desidera inviare tale notifica?';
-$labels['receiptread'] = 'Ricevuta di ritorno (letto)';
-$labels['yourmessage'] = 'Questa è la ricevuta di ritorno del mesaggio inviato';
-$labels['receiptnote'] = 'Nota: questa Ricevuta di ritorno attesta solamente che il messaggio è stato visualizzato nel computer del destinatario. Non c\'è pertanto alcuna garanzia che il destinatario abbia letto o compreso il suo contenuto.';
-$labels['name'] = 'Nome visualizzato';
-$labels['firstname'] = 'Nome';
-$labels['surname'] = 'Cognome';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Aggiungi contatto alla rubrica';
-$labels['editcontact'] = 'Modifica contatto';
-$labels['edit'] = 'Modifica';
-$labels['cancel'] = 'Annulla';
-$labels['save'] = 'Salva';
-$labels['delete'] = 'Elimina';
-$labels['newcontact'] = 'Crea un nuovo contatto';
-$labels['deletecontact'] = 'Elimina i contatti selezionati';
-$labels['composeto'] = 'Invia email a';
-$labels['contactsfromto'] = 'Contatti da $from a $to di $count';
-$labels['print'] = 'Stampa';
-$labels['export'] = 'Esporta';
-$labels['previouspage'] = 'Pagina precedente';
-$labels['firstpage'] = 'Prima pagina';
-$labels['nextpage'] = 'Pagina successiva';
-$labels['lastpage'] = 'Ultima pagina';
-$labels['groups'] = 'Gruppi';
-$labels['personaladrbook'] = 'Rubrica Personale';
-$labels['settingsfor'] = 'Impostazioni per ';
-$labels['preferences'] = 'Preferenze';
-$labels['userpreferences'] = 'Preferenze utente';
-$labels['editpreferences'] = 'Modifica le preferenze per l\'utente';
-$labels['identities'] = 'Identità';
-$labels['manageidentities'] = 'Gestisci le identità per questo account';
-$labels['newidentity'] = 'Nuova identità';
-$labels['newitem'] = 'Nuovo elemento';
-$labels['edititem'] = 'Modifica elemento';
-$labels['setdefault'] = 'Imposta predefinita';
-$labels['language'] = 'Lingua';
-$labels['timezone'] = 'Fuso orario';
-$labels['pagesize'] = 'Righe per pagina';
-$labels['signature'] = 'Firma';
-$labels['dstactive'] = 'Gestione ora legale / ora solare';
-$labels['htmleditor'] = 'Scrivi i messaggi in HTML';
-$labels['htmlsignature'] = 'Firma in HTML';
-$labels['previewpane'] = 'Mostra l\'anteprima';
-$labels['autosavedraft'] = 'Salva le bozze automaticamente';
-$labels['everynminutes'] = 'ogni $n minuti';
-$labels['never'] = 'mai';
-$labels['folder'] = 'Cartella';
-$labels['folders'] = 'Cartelle';
-$labels['foldername'] = 'Nome cartella';
-$labels['subscribed'] = 'Sottoscritta';
-$labels['messagecount'] = 'Messaggi';
-$labels['create'] = 'Crea';
-$labels['createfolder'] = 'Crea nuova cartella';
-$labels['rename'] = 'Rinomina';
-$labels['renamefolder'] = 'Rinomina cartella';
-$labels['deletefolder'] = 'Cancella cartella';
-$labels['managefolders'] = 'Gestione cartelle';
-$labels['sortby'] = 'Ordina per';
-$labels['sortasc'] = 'Ordinamento crescente';
-$labels['sortdesc'] = 'Ordinamento decrescente';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/it/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Andrej Mocilnik <amocilnik@dotcom.ts.it> |
- | Yusef Maali <contact@yusefmaali.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Impossibile accedere. Utente o password non corretti';
-$messages['cookiesdisabled'] = 'Il tuo browser non accetta i cookies';
-$messages['sessionerror'] = 'Sessione non valida o scaduta';
-$messages['imaperror'] = 'Impossibile connettersi al server IMAP';
-$messages['nomessagesfound'] = 'Nessun messaggio trovato in questa cartella';
-$messages['loggedout'] = 'Sessione chiusa correttamente. Arrivederci!';
-$messages['mailboxempty'] = 'Cartella vuota';
-$messages['loading'] = 'Caricamento...';
-$messages['loadingdata'] = 'Caricamento dati...';
-$messages['checkingmail'] = 'Controllo nuovi messaggi...';
-$messages['sendingmessage'] = 'Invio messaggio in corso...';
-$messages['messagesent'] = 'Messaggio inviato correttamente';
-$messages['savingmessage'] = 'Salvataggio messaggio...';
-$messages['messagesaved'] = 'Messaggio salvato nelle bozze';
-$messages['successfullysaved'] = 'Salvato correttamente';
-$messages['addedsuccessfully'] = 'Contatto aggiunto alla rubrica';
-$messages['contactexists'] = 'Esiste già un contatto con questo indirizzo e-mail';
-$messages['blockedimages'] = 'Per proteggere la tua privacy, le immagini remote di questo messaggio sono state bloccate.';
-$messages['encryptedmessage'] = 'Questo messaggio é cifrato e non può essere visualizzato';
-$messages['nocontactsfound'] = 'Nessun contatto trovato';
-$messages['contactnotfound'] = 'Il contatto richiesto non è stato trovato';
-$messages['sendingfailed'] = 'Impossibile inviare il messaggio';
-$messages['errorsaving'] = 'Impossibile salvare';
-$messages['errormoving'] = 'Impossibile spostare il messaggio';
-$messages['errordeleting'] = 'Impossibile cancellare il messaggio';
-$messages['deletecontactconfirm'] = 'Sei sicuro di voler cancellare i contatti selezionati?';
-$messages['deletemessagesconfirm'] = 'Sei sicuro di voler cancellare i messaggi selezionati?';
-$messages['deletefolderconfirm'] = 'Sei sicuro di voler cancellare la cartella selezionata?';
-$messages['purgefolderconfirm'] = 'Sei sicuro di voler cancellare tutti i messaggi in questa cartella?';
-$messages['formincomplete'] = 'Per favore, compila tutti i campi';
-$messages['noemailwarning'] = 'Per favore, immetti un indirizzo e-mail valido';
-$messages['nonamewarning'] = 'Per favore, immetti un nome';
-$messages['nopagesizewarning'] = 'Per favore, immetti il numero di righe per pagina';
-$messages['norecipientwarning'] = 'Per favore, immetti almeno un destinatario';
-$messages['nosubjectwarning'] = 'L\'oggetto é vuoto. Vuoi inserirlo adesso?';
-$messages['nobodywarning'] = 'Inviare il messaggio senza testo?';
-$messages['notsentwarning'] = 'Il messaggio non é stato inviato. Vuoi veramente annullare questo messaggio?';
-$messages['noldapserver'] = 'Per favore, scegli un server LDAP in cui ricercare';
-$messages['nocontactsreturned'] = 'Nessun contatto trovato';
-$messages['nosearchname'] = 'Per favore, immetti un nome o un indirizzo e-mail';
-$messages['searchsuccessful'] = '$nr messaggi trovati';
-$messages['searchnomatch'] = 'La ricerca non ha dato nessun risultato';
-$messages['searching'] = 'Ricerca...';
-$messages['checking'] = 'Controllo...';
-$messages['nospellerrors'] = 'Nessun errore ortografico trovato';
-$messages['folderdeleted'] = 'Cartella eliminata';
-$messages['deletedsuccessfully'] = 'Eliminato con successo';
-$messages['converting'] = 'Rimozione della formattazione dal messaggio...';
-$messages['messageopenerror'] = 'Impossibile caricare il messaggio dal server';
-$messages['fileuploaderror'] = 'Errore durante il caricamento del file';
-$messages['filesizeerror'] = 'Il file da caricare supera il limite massimo di $size';
-$messages['copysuccess'] = 'Copiati $nr indirizzi';
-$messages['copyerror'] = 'Impossibile copiare gli indirizzi';
-$messages['sourceisreadonly'] = 'La rubrica è in sola lettura';
-$messages['errorsavingcontact'] = 'Impossibile salvare il contatto';
-$messages['movingmessage'] = 'Sposto il messaggio...';
-$messages['receiptsent'] = 'Ricevuta di ritorno inviata con successo';
-$messages['errorsendingreceipt'] = 'Impossibile spedire la ricevuta di ritorno';
-$messages['nodeletelastidentity'] = 'Impossibile eliminare l\'unica identità disponibile';
-$messages['addsubfolderhint'] = 'La cartella verrà creata come sotto cartella della cartella corrente';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/it/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Andrej Mocilnik <amocilnik@dotcom.ts.it> |
+ | Yusef Maali <contact@yusefmaali.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Benvenuto in $product';
+$labels['username'] = 'Utente';
+$labels['password'] = 'Password';
+$labels['server'] = 'Server';
+$labels['login'] = 'Entra';
+$labels['logout'] = 'Esci';
+$labels['mail'] = 'E-Mail';
+$labels['settings'] = 'Impostazioni';
+$labels['addressbook'] = 'Rubrica';
+$labels['inbox'] = 'Posta in arrivo';
+$labels['drafts'] = 'Bozze';
+$labels['sent'] = 'Inviata';
+$labels['trash'] = 'Cestino';
+$labels['junk'] = 'Spam';
+$labels['subject'] = 'Oggetto';
+$labels['from'] = 'Mittente';
+$labels['to'] = 'Destinatario';
+$labels['cc'] = 'Cc';
+$labels['bcc'] = 'Ccn';
+$labels['replyto'] = 'Rispondi a';
+$labels['date'] = 'Data';
+$labels['size'] = 'Dimensione';
+$labels['priority'] = 'Priorità';
+$labels['organization'] = 'Società';
+$labels['reply-to'] = 'Rispondi a';
+$labels['mailboxlist'] = 'Cartelle';
+$labels['messagesfromto'] = 'Messaggi da $from a $to di $count';
+$labels['messagenrof'] = 'Messaggio $nr di $count';
+$labels['moveto'] = 'sposta...';
+$labels['download'] = 'download';
+$labels['filename'] = 'Nome file';
+$labels['filesize'] = 'Dimensione file';
+$labels['preferhtml'] = 'Mostra HTML';
+$labels['htmlmessage'] = 'Messaggio HTML';
+$labels['prettydate'] = 'Date più leggibili';
+$labels['addtoaddressbook'] = 'Aggiungi alla rubrica';
+$labels['sun'] = 'Dom';
+$labels['mon'] = 'Lun';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mer';
+$labels['thu'] = 'Gio';
+$labels['fri'] = 'Ven';
+$labels['sat'] = 'Sab';
+$labels['sunday'] = 'Domenica';
+$labels['monday'] = 'Lunedì';
+$labels['tuesday'] = 'Martedì';
+$labels['wednesday'] = 'Mercoledì';
+$labels['thursday'] = 'Giovedì';
+$labels['friday'] = 'Venerdì';
+$labels['saturday'] = 'Sabato';
+$labels['today'] = 'Oggi';
+$labels['checkmail'] = 'Controlla nuovi messaggi';
+$labels['writenewmessage'] = 'Scrivi un nuovo messaggio';
+$labels['replytomessage'] = 'Rispondi al messaggio';
+$labels['replytoallmessage'] = 'Rispondi a tutti';
+$labels['forwardmessage'] = 'Inoltra il messaggio';
+$labels['deletemessage'] = 'Elimina il messaggio';
+$labels['movemessagetotrash'] = 'Sposta il messaggio nel cestino';
+$labels['printmessage'] = 'Stampa il messaggio';
+$labels['previousmessage'] = 'Visualizza il messaggio precedente';
+$labels['previousmessages'] = 'Visualizza messaggi precedenti';
+$labels['firstmessage'] = 'Visualizza il primo messaggio';
+$labels['firstmessages'] = 'Visualizza il primo set di messaggi';
+$labels['nextmessage'] = 'Visualizza il messaggio successivo';
+$labels['nextmessages'] = 'Visualizza messaggi successivi';
+$labels['lastmessage'] = 'Visualizza l\'ultimo messaggio';
+$labels['lastmessages'] = 'Visualizza l\'ultimo set di messaggi';
+$labels['backtolist'] = 'Torna alla lista messaggi';
+$labels['viewsource'] = 'Visualizza sorgente messaggio';
+$labels['markmessages'] = 'Marca i messaggi';
+$labels['markread'] = 'Letti';
+$labels['markunread'] = 'Non letti';
+$labels['select'] = 'Seleziona';
+$labels['all'] = 'Tutti';
+$labels['none'] = 'Nessuno';
+$labels['unread'] = 'Non letti';
+$labels['compact'] = 'Compatta';
+$labels['empty'] = 'Svuota';
+$labels['purge'] = 'Pulisci';
+$labels['quota'] = 'Spazio utilizzato';
+$labels['unknown'] = 'sconosciuto';
+$labels['unlimited'] = 'illimitato';
+$labels['quicksearch'] = 'Ricerca veloce';
+$labels['resetsearch'] = 'Annulla ricerca';
+$labels['compose'] = 'Scrivi un messaggio';
+$labels['savemessage'] = 'Salva come bozza';
+$labels['sendmessage'] = 'Invia il messaggio adesso';
+$labels['addattachment'] = 'Allega un file';
+$labels['charset'] = 'Set di caratteri';
+$labels['editortype'] = 'Tipo editor';
+$labels['returnreceipt'] = 'Ricevuta di ritorno';
+$labels['checkspelling'] = 'Controlla ortografia';
+$labels['resumeediting'] = 'Torna al messaggio';
+$labels['revertto'] = 'Ripristina';
+$labels['attachments'] = 'Allegati';
+$labels['upload'] = 'Aggiungi';
+$labels['close'] = 'Chiudi';
+$labels['low'] = 'Bassa';
+$labels['lowest'] = 'Molto bassa';
+$labels['normal'] = 'Normale';
+$labels['high'] = 'Alta';
+$labels['highest'] = 'Molto alta';
+$labels['nosubject'] = '(nessun oggetto)';
+$labels['showimages'] = 'Visualizza immagini';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Testo semplice';
+$labels['addcc'] = 'Aggiungi Cc';
+$labels['addbcc'] = 'Aggiungi Bcc';
+$labels['addreplyto'] = 'Aggiungi Rispondi a';
+$labels['mdnrequest'] = 'Il mittente richiede di ricevere una notifica dell\'avvenuta lettura del messaggio. Si desidera inviare tale notifica?';
+$labels['receiptread'] = 'Ricevuta di ritorno (letto)';
+$labels['yourmessage'] = 'Questa è la ricevuta di ritorno del mesaggio inviato';
+$labels['receiptnote'] = 'Nota: questa Ricevuta di ritorno attesta solamente che il messaggio è stato visualizzato nel computer del destinatario. Non c\'è pertanto alcuna garanzia che il destinatario abbia letto o compreso il suo contenuto.';
+$labels['name'] = 'Nome visualizzato';
+$labels['firstname'] = 'Nome';
+$labels['surname'] = 'Cognome';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Aggiungi contatto alla rubrica';
+$labels['editcontact'] = 'Modifica contatto';
+$labels['edit'] = 'Modifica';
+$labels['cancel'] = 'Annulla';
+$labels['save'] = 'Salva';
+$labels['delete'] = 'Elimina';
+$labels['newcontact'] = 'Crea un nuovo contatto';
+$labels['deletecontact'] = 'Elimina i contatti selezionati';
+$labels['composeto'] = 'Invia email a';
+$labels['contactsfromto'] = 'Contatti da $from a $to di $count';
+$labels['print'] = 'Stampa';
+$labels['export'] = 'Esporta';
+$labels['previouspage'] = 'Pagina precedente';
+$labels['firstpage'] = 'Prima pagina';
+$labels['nextpage'] = 'Pagina successiva';
+$labels['lastpage'] = 'Ultima pagina';
+$labels['groups'] = 'Gruppi';
+$labels['personaladrbook'] = 'Rubrica Personale';
+$labels['settingsfor'] = 'Impostazioni per ';
+$labels['preferences'] = 'Preferenze';
+$labels['userpreferences'] = 'Preferenze utente';
+$labels['editpreferences'] = 'Modifica le preferenze per l\'utente';
+$labels['identities'] = 'Identità';
+$labels['manageidentities'] = 'Gestisci le identità per questo account';
+$labels['newidentity'] = 'Nuova identità';
+$labels['newitem'] = 'Nuovo elemento';
+$labels['edititem'] = 'Modifica elemento';
+$labels['setdefault'] = 'Imposta predefinita';
+$labels['language'] = 'Lingua';
+$labels['timezone'] = 'Fuso orario';
+$labels['pagesize'] = 'Righe per pagina';
+$labels['signature'] = 'Firma';
+$labels['dstactive'] = 'Gestione ora legale / ora solare';
+$labels['htmleditor'] = 'Scrivi i messaggi in HTML';
+$labels['htmlsignature'] = 'Firma in HTML';
+$labels['previewpane'] = 'Mostra l\'anteprima';
+$labels['autosavedraft'] = 'Salva le bozze automaticamente';
+$labels['everynminutes'] = 'ogni $n minuti';
+$labels['never'] = 'mai';
+$labels['folder'] = 'Cartella';
+$labels['folders'] = 'Cartelle';
+$labels['foldername'] = 'Nome cartella';
+$labels['subscribed'] = 'Sottoscritta';
+$labels['messagecount'] = 'Messaggi';
+$labels['create'] = 'Crea';
+$labels['createfolder'] = 'Crea nuova cartella';
+$labels['rename'] = 'Rinomina';
+$labels['renamefolder'] = 'Rinomina cartella';
+$labels['deletefolder'] = 'Cancella cartella';
+$labels['managefolders'] = 'Gestione cartelle';
+$labels['sortby'] = 'Ordina per';
+$labels['sortasc'] = 'Ordinamento crescente';
+$labels['sortdesc'] = 'Ordinamento decrescente';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/it/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Andrej Mocilnik <amocilnik@dotcom.ts.it> |
+ | Yusef Maali <contact@yusefmaali.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1068 2008-02-13 19:24:23Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Impossibile accedere. Utente o password non corretti';
+$messages['cookiesdisabled'] = 'Il tuo browser non accetta i cookies';
+$messages['sessionerror'] = 'Sessione non valida o scaduta';
+$messages['imaperror'] = 'Impossibile connettersi al server IMAP';
+$messages['nomessagesfound'] = 'Nessun messaggio trovato in questa cartella';
+$messages['loggedout'] = 'Sessione chiusa correttamente. Arrivederci!';
+$messages['mailboxempty'] = 'Cartella vuota';
+$messages['loading'] = 'Caricamento...';
+$messages['loadingdata'] = 'Caricamento dati...';
+$messages['checkingmail'] = 'Controllo nuovi messaggi...';
+$messages['sendingmessage'] = 'Invio messaggio in corso...';
+$messages['messagesent'] = 'Messaggio inviato correttamente';
+$messages['savingmessage'] = 'Salvataggio messaggio...';
+$messages['messagesaved'] = 'Messaggio salvato nelle bozze';
+$messages['successfullysaved'] = 'Salvato correttamente';
+$messages['addedsuccessfully'] = 'Contatto aggiunto alla rubrica';
+$messages['contactexists'] = 'Esiste già un contatto con questo indirizzo e-mail';
+$messages['blockedimages'] = 'Per proteggere la tua privacy, le immagini remote di questo messaggio sono state bloccate.';
+$messages['encryptedmessage'] = 'Questo messaggio é cifrato e non può essere visualizzato';
+$messages['nocontactsfound'] = 'Nessun contatto trovato';
+$messages['contactnotfound'] = 'Il contatto richiesto non è stato trovato';
+$messages['sendingfailed'] = 'Impossibile inviare il messaggio';
+$messages['errorsaving'] = 'Impossibile salvare';
+$messages['errormoving'] = 'Impossibile spostare il messaggio';
+$messages['errordeleting'] = 'Impossibile cancellare il messaggio';
+$messages['deletecontactconfirm'] = 'Sei sicuro di voler cancellare i contatti selezionati?';
+$messages['deletemessagesconfirm'] = 'Sei sicuro di voler cancellare i messaggi selezionati?';
+$messages['deletefolderconfirm'] = 'Sei sicuro di voler cancellare la cartella selezionata?';
+$messages['purgefolderconfirm'] = 'Sei sicuro di voler cancellare tutti i messaggi in questa cartella?';
+$messages['formincomplete'] = 'Per favore, compila tutti i campi';
+$messages['noemailwarning'] = 'Per favore, immetti un indirizzo e-mail valido';
+$messages['nonamewarning'] = 'Per favore, immetti un nome';
+$messages['nopagesizewarning'] = 'Per favore, immetti il numero di righe per pagina';
+$messages['norecipientwarning'] = 'Per favore, immetti almeno un destinatario';
+$messages['nosubjectwarning'] = 'L\'oggetto é vuoto. Vuoi inserirlo adesso?';
+$messages['nobodywarning'] = 'Inviare il messaggio senza testo?';
+$messages['notsentwarning'] = 'Il messaggio non é stato inviato. Vuoi veramente annullare questo messaggio?';
+$messages['noldapserver'] = 'Per favore, scegli un server LDAP in cui ricercare';
+$messages['nocontactsreturned'] = 'Nessun contatto trovato';
+$messages['nosearchname'] = 'Per favore, immetti un nome o un indirizzo e-mail';
+$messages['searchsuccessful'] = '$nr messaggi trovati';
+$messages['searchnomatch'] = 'La ricerca non ha dato nessun risultato';
+$messages['searching'] = 'Ricerca...';
+$messages['checking'] = 'Controllo...';
+$messages['nospellerrors'] = 'Nessun errore ortografico trovato';
+$messages['folderdeleted'] = 'Cartella eliminata';
+$messages['deletedsuccessfully'] = 'Eliminato con successo';
+$messages['converting'] = 'Rimozione della formattazione dal messaggio...';
+$messages['messageopenerror'] = 'Impossibile caricare il messaggio dal server';
+$messages['fileuploaderror'] = 'Errore durante il caricamento del file';
+$messages['filesizeerror'] = 'Il file da caricare supera il limite massimo di $size';
+$messages['copysuccess'] = 'Copiati $nr indirizzi';
+$messages['copyerror'] = 'Impossibile copiare gli indirizzi';
+$messages['sourceisreadonly'] = 'La rubrica è in sola lettura';
+$messages['errorsavingcontact'] = 'Impossibile salvare il contatto';
+$messages['movingmessage'] = 'Sposto il messaggio...';
+$messages['receiptsent'] = 'Ricevuta di ritorno inviata con successo';
+$messages['errorsendingreceipt'] = 'Impossibile spedire la ricevuta di ritorno';
+$messages['nodeletelastidentity'] = 'Impossibile eliminare l\'unica identità disponibile';
+$messages['addsubfolderhint'] = 'La cartella verrà creata come sotto cartella della cartella corrente';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ja/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Tadashi Jokagi <elf2000@users.sourceforge.net> |
- | Takashi Takamatsu <taka717@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1154 2008-02-28 20:05:47Z thomasb $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'ようこそ $product へ';
-$labels['username'] = 'ユーザー名';
-$labels['password'] = 'パスワード';
-$labels['server'] = 'サーバ';
-$labels['login'] = 'ログイン';
-$labels['logout'] = 'ログアウト';
-$labels['mail'] = '電子メール';
-$labels['settings'] = '個人設定';
-$labels['addressbook'] = 'アドレス帳';
-$labels['inbox'] = '受信箱';
-$labels['drafts'] = '草稿';
-$labels['sent'] = '送信箱';
-$labels['trash'] = 'ごみ箱';
-$labels['junk'] = 'ジャンク';
-$labels['subject'] = '件名';
-$labels['from'] = '送信者';
-$labels['to'] = '受信者';
-$labels['cc'] = 'コピー';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = '返信先';
-$labels['date'] = '日付';
-$labels['size'] = '容量';
-$labels['priority'] = '優先度';
-$labels['organization'] = '所属';
-$labels['reply-to'] = '返信先';
-$labels['mailboxlist'] = 'フォルダ一覧';
-$labels['messagesfromto'] = '表示中のメッセージ: $from ~ $to (全: $count 件)';
-$labels['messagenrof'] = '現在のメッセージ:$nr (全: $count 件)';
-$labels['moveto'] = 'フォルダの移動';
-$labels['download'] = 'ダウンロード';
-$labels['filename'] = 'ファイル名';
-$labels['filesize'] = 'ファイルサイズ';
-$labels['preferhtml'] = 'HTML を表示';
-$labels['htmlmessage'] = 'HTML メッセージ';
-$labels['prettydate'] = '簡易な日付表示';
-$labels['addtoaddressbook'] = 'アドレス帳に追加';
-$labels['sun'] = '日';
-$labels['mon'] = '月';
-$labels['tue'] = '火';
-$labels['wed'] = '水';
-$labels['thu'] = '木';
-$labels['fri'] = '金';
-$labels['sat'] = '土';
-$labels['sunday'] = '日曜日';
-$labels['monday'] = '月曜日';
-$labels['tuesday'] = '火曜日';
-$labels['wednesday'] = '水曜日';
-$labels['thursday'] = '木曜日';
-$labels['friday'] = '金曜日';
-$labels['saturday'] = '土曜日';
-$labels['today'] = '今日';
-$labels['checkmail'] = '新着の確認';
-$labels['writenewmessage'] = '新規メールの作成';
-$labels['replytomessage'] = '返信';
-$labels['replytoallmessage'] = '送信者とすべての受信者に返信';
-$labels['forwardmessage'] = '転送';
-$labels['deletemessage'] = '削除';
-$labels['movemessagetotrash'] = 'ごみ箱に移動';
-$labels['printmessage'] = '印刷';
-$labels['previousmessage'] = '前のメッセージへ';
-$labels['previousmessages'] = '前の一覧へ';
-$labels['firstmessage'] = '最初のメッセージへ';
-$labels['firstmessages'] = '最初の一覧へ';
-$labels['nextmessage'] = '次のメッセージへ';
-$labels['nextmessages'] = '次の一覧へ';
-$labels['lastmessage'] = '最後のメッセージへ';
-$labels['lastmessages'] = '最後の一覧へ';
-$labels['backtolist'] = '一覧に戻る';
-$labels['viewsource'] = 'ソースの表示';
-$labels['markmessages'] = 'マークを付ける';
-$labels['markread'] = '既読にする';
-$labels['markunread'] = '未読にする';
-$labels['select'] = '選択';
-$labels['all'] = 'すべて';
-$labels['none'] = 'なし';
-$labels['unread'] = '未読';
-$labels['compact'] = 'コンパクト';
-$labels['empty'] = '空';
-$labels['purge'] = '破棄';
-$labels['quota'] = 'ディスク使用量';
-$labels['unknown'] = '不明';
-$labels['unlimited'] = '無制限';
-$labels['quicksearch'] = 'Quick search';
-$labels['resetsearch'] = 'Reset search';
-$labels['compose'] = 'メッセージの作成';
-$labels['savemessage'] = '草稿に保存';
-$labels['sendmessage'] = '今すぐ送信';
-$labels['addattachment'] = 'ファイルの添付';
-$labels['charset'] = '文字エンコード';
-$labels['editortype'] = 'エディターの種類';
-$labels['returnreceipt'] = '開封確認';
-$labels['checkspelling'] = 'スペルチェック';
-$labels['resumeediting'] = '編集の中断';
-$labels['revertto'] = '元に戻す';
-$labels['attachments'] = '添付ファイル';
-$labels['upload'] = 'アップロード';
-$labels['close'] = '閉じる';
-$labels['low'] = '低い';
-$labels['lowest'] = '最低';
-$labels['normal'] = '通常';
-$labels['high'] = '高い';
-$labels['highest'] = '最高';
-$labels['nosubject'] = '(件名なし)';
-$labels['showimages'] = '画像の表示';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'テキスト';
-$labels['addcc'] = 'Cc 追加';
-$labels['addbcc'] = 'Bcc 追加';
-$labels['addreplyto'] = 'Reply-To 追加';
-$labels['mdnrequest'] = 'メッセージの送信者は開封確認の送付を求めています。開封確認のメッセージを送付しますか?';
-$labels['receiptread'] = '開封確認 (表示済)';
-$labels['yourmessage'] = 'これはあなたが送信したメッセージに対する開封確認です。';
-$labels['receiptnote'] = '注意: この開封確認はメッセージが受信者に表示されたことの通知です。受信者がメッセージを読んだこと、内容を理解したことを保証するものではありません。';
-$labels['name'] = '表示名';
-$labels['firstname'] = '名前';
-$labels['surname'] = '名字';
-$labels['email'] = 'メールアドレス';
-$labels['addcontact'] = '連絡先の新規追加';
-$labels['editcontact'] = '連絡先の編集';
-$labels['edit'] = '編集';
-$labels['cancel'] = 'キャンセル';
-$labels['save'] = '保存';
-$labels['delete'] = '削除';
-$labels['newcontact'] = '連絡先の新規作成';
-$labels['deletecontact'] = '連絡先の削除';
-$labels['composeto'] = 'この連絡先へメールを送信';
-$labels['contactsfromto'] = '連絡先: $from ~ $to (全: $count 件)';
-$labels['print'] = '印刷';
-$labels['export'] = 'エクスポート';
-$labels['previouspage'] = '前の一覧へ';
-$labels['firstpage'] = '最初の一覧へ';
-$labels['nextpage'] = '次の一覧へ';
-$labels['lastpage'] = '最後の一覧へ';
-$labels['groups'] = 'グループ';
-$labels['personaladrbook'] = '個人アドレス';
-$labels['settingsfor'] = '次の設定:';
-$labels['preferences'] = '設定';
-$labels['userpreferences'] = 'ユーザー設定';
-$labels['editpreferences'] = 'ユーザー設定の変更';
-$labels['identities'] = '個人情報';
-$labels['manageidentities'] = 'アカウントの個人情報管理';
-$labels['newidentity'] = '個人情報の新規作成';
-$labels['newitem'] = '新しい項目';
-$labels['edititem'] = '項目の編集';
-$labels['setdefault'] = '標準の設定';
-$labels['language'] = '言語';
-$labels['timezone'] = 'タイムゾーン';
-$labels['pagesize'] = 'ページ単位の表示件数';
-$labels['signature'] = '署名';
-$labels['dstactive'] = '夏時間の適用';
-$labels['htmleditor'] = 'メッセージ作成はHTMLが標準';
-$labels['htmlsignature'] = 'HTML の署名';
-$labels['previewpane'] = 'プレビューペインの表示';
-$labels['autosavedraft'] = '自動的に草稿を保存';
-$labels['everynminutes'] = ' $n 分毎';
-$labels['never'] = 'しない';
-$labels['folder'] = 'フォルダ';
-$labels['folders'] = 'フォルダ一覧';
-$labels['foldername'] = 'フォルダ名';
-$labels['subscribed'] = '購読済';
-$labels['messagecount'] = 'メッセージ';
-$labels['create'] = '作成';
-$labels['createfolder'] = 'フォルダの新規作成';
-$labels['rename'] = '名前の変更';
-$labels['renamefolder'] = 'フォルダ名の変更';
-$labels['deletefolder'] = 'フォルダの削除';
-$labels['managefolders'] = 'フォルダの管理';
-$labels['sortby'] = '整列の基準にする';
-$labels['sortasc'] = '昇順で整列';
-$labels['sortdesc'] = '降順で整列';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ja/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Tadashi Jokagi <elf2000@users.sourceforge.net> |
- | Takashi Takamatsu <taka717@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1154 2008-02-28 20:05:47Z thomasb $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'ログインに失敗しました。';
-$messages['cookiesdisabled'] = 'ブラウザで Cookie が無効に設定されています。';
-$messages['sessionerror'] = 'セッションが正しくないか期限切れです。';
-$messages['imaperror'] = 'IMAP サーバへの接続に失敗しました。';
-$messages['nomessagesfound'] = 'メールはありません。';
-$messages['loggedout'] = 'ログアウトしました。';
-$messages['mailboxempty'] = 'メールボックスは空です。';
-$messages['loading'] = '読み込み中...';
-$messages['loadingdata'] = 'データを読み込み中です...';
-$messages['checkingmail'] = 'メールの確認中です...';
-$messages['sendingmessage'] = 'メールを送信中です...';
-$messages['messagesent'] = 'メールを送信しました。';
-$messages['savingmessage'] = 'メールを保存しています...';
-$messages['messagesaved'] = 'メールを下書きに保存しました。';
-$messages['successfullysaved'] = '保存しました。';
-$messages['addedsuccessfully'] = 'アドレス帳への連絡先の追加しました。';
-$messages['contactexists'] = 'このメールアドレスは既にアドレス帳に存在します。';
-$messages['blockedimages'] = 'プライバシーを保護するため、このメールに含まれるリモート画像はブロックされました。';
-$messages['encryptedmessage'] = 'このメールは暗号化されているため表示できません。';
-$messages['nocontactsfound'] = '連絡先が見つかりません。';
-$messages['contactnotfound'] = '要求された連絡先が見つかりません。';
-$messages['sendingfailed'] = 'メールの送信に失敗しました。';
-$messages['errorsaving'] = '保存中にエラーが発生しました。';
-$messages['errormoving'] = 'メールを移動できません。';
-$messages['errordeleting'] = 'メールを削除できません。';
-$messages['deletecontactconfirm'] = '選択した連絡先を本当に削除しますか?';
-$messages['deletemessagesconfirm'] = '選択したメールを本当に削除しますか?';
-$messages['deletefolderconfirm'] = 'このフォルダを本当に削除しますか?';
-$messages['purgefolderconfirm'] = 'このフォルダの全てのメールを本当に削除しますか?';
-$messages['formincomplete'] = 'フォームの項目が完全に入力されていません。';
-$messages['noemailwarning'] = '有効なメールアドレスを入力して下さい。';
-$messages['nonamewarning'] = '名前を入力して下さい。';
-$messages['nopagesizewarning'] = 'ページのサイズを入力して下さい。';
-$messages['norecipientwarning'] = '受信者を最低 1 人は入力して下さい。';
-$messages['nosubjectwarning'] = '件名が空です。今すぐ入力しますか?';
-$messages['nobodywarning'] = '本文が無いメールを送信しますか?';
-$messages['notsentwarning'] = 'メールは送信されませんでした。破棄しますか?';
-$messages['noldapserver'] = '検索する LDAP サーバーを選択して下さい。';
-$messages['nocontactsreturned'] = '連絡先が見つかりません。';
-$messages['nosearchname'] = '連絡先の名前かメールアドレスを入力して下さい。';
-$messages['searchsuccessful'] = ' $nr 件のメールが見つかりました。';
-$messages['searchnomatch'] = '一致するメールはありません。';
-$messages['searching'] = '検索中です...';
-$messages['checking'] = '確認中です...';
-$messages['nospellerrors'] = 'スペルミスは見つかりませんでした。';
-$messages['folderdeleted'] = 'フォルダを削除しました。';
-$messages['deletedsuccessfully'] = '削除しました。';
-$messages['converting'] = 'メールから書式を削除中です...';
-$messages['messageopenerror'] = 'サーバからメールを取得できません。';
-$messages['fileuploaderror'] = 'ファイルのアップロードに失敗しました。';
-$messages['filesizeerror'] = 'アップロードしたファイルのサイズが上限 $size を超えました。';
-$messages['copysuccess'] = 'アドレス $nr 個のコピーに成功しました。';
-$messages['copyerror'] = 'アドレスをコピーできません。';
-$messages['sourceisreadonly'] = 'このアドレス情報は読み取り専用です。';
-$messages['errorsavingcontact'] = '連絡先のアドレスを保存できません。';
-$messages['movingmessage'] = '移動中です...';
-$messages['receiptsent'] = '開封確認を送信しました。';
-$messages['errorsendingreceipt'] = '開封確認を送信できません。';
-$messages['nodeletelastidentity'] = '削除できません。少なくとも1つの個人情報が必要です。';
-$messages['addsubfolderhint'] = '現在選択しているフォルダのサブフォルダとして作成されます。';
-
-?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ja/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Tadashi Jokagi <elf2000@users.sourceforge.net> |
+ | Takashi Takamatsu <taka717@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1335 2008-04-27 15:18:13Z alec $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'ようこそ $product へ';
+$labels['username'] = 'ユーザー名';
+$labels['password'] = 'パスワード';
+$labels['server'] = 'サーバ';
+$labels['login'] = 'ログイン';
+$labels['logout'] = 'ログアウト';
+$labels['mail'] = '電子メール';
+$labels['settings'] = '個人設定';
+$labels['addressbook'] = 'アドレス帳';
+$labels['inbox'] = '受信箱';
+$labels['drafts'] = '草稿';
+$labels['sent'] = '送信箱';
+$labels['trash'] = 'ごみ箱';
+$labels['junk'] = 'ジャンク';
+$labels['subject'] = '件名';
+$labels['from'] = '送信者';
+$labels['to'] = '受信者';
+$labels['cc'] = 'コピー';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = '返信先';
+$labels['date'] = '日付';
+$labels['size'] = '容量';
+$labels['priority'] = '優先度';
+$labels['organization'] = '所属';
+$labels['reply-to'] = '返信先';
+$labels['mailboxlist'] = 'フォルダ一覧';
+$labels['messagesfromto'] = '表示中のメッセージ: $from ~ $to (全: $count 件)';
+$labels['messagenrof'] = '現在のメッセージ:$nr (全: $count 件)';
+$labels['moveto'] = 'フォルダの移動';
+$labels['download'] = 'ダウンロード';
+$labels['filename'] = 'ファイル名';
+$labels['filesize'] = 'ファイルサイズ';
+$labels['preferhtml'] = 'HTML を表示';
+$labels['htmlmessage'] = 'HTML メッセージ';
+$labels['prettydate'] = '簡易な日付表示';
+$labels['addtoaddressbook'] = 'アドレス帳に追加';
+$labels['sun'] = '日';
+$labels['mon'] = '月';
+$labels['tue'] = '火';
+$labels['wed'] = '水';
+$labels['thu'] = '木';
+$labels['fri'] = '金';
+$labels['sat'] = '土';
+$labels['sunday'] = '日曜日';
+$labels['monday'] = '月曜日';
+$labels['tuesday'] = '火曜日';
+$labels['wednesday'] = '水曜日';
+$labels['thursday'] = '木曜日';
+$labels['friday'] = '金曜日';
+$labels['saturday'] = '土曜日';
+$labels['jan'] = '1月';
+$labels['feb'] = '2月';
+$labels['mar'] = '3月';
+$labels['apr'] = '4月';
+$labels['may'] = '5月';
+$labels['jun'] = '6月';
+$labels['jul'] = '7月';
+$labels['aug'] = '8月';
+$labels['sep'] = '9月';
+$labels['oct'] = '10月';
+$labels['nov'] = '11月';
+$labels['dec'] = '12月';
+$labels['longjan'] = '1月';
+$labels['longfeb'] = '2月';
+$labels['longmar'] = '3月';
+$labels['longapr'] = '4月';
+$labels['longmay'] = '5月';
+$labels['longjun'] = '6月';
+$labels['longjul'] = '7月';
+$labels['longaug'] = '8月';
+$labels['longsep'] = '9月';
+$labels['longoct'] = '10月';
+$labels['longnov'] = '11月';
+$labels['longdec'] = '12月';
+$labels['today'] = '今日';
+$labels['checkmail'] = '新着の確認';
+$labels['writenewmessage'] = '新規メールの作成';
+$labels['replytomessage'] = '返信';
+$labels['replytoallmessage'] = '送信者とすべての受信者に返信';
+$labels['forwardmessage'] = '転送';
+$labels['deletemessage'] = '削除';
+$labels['movemessagetotrash'] = 'ごみ箱に移動';
+$labels['printmessage'] = '印刷';
+$labels['previousmessage'] = '前のメッセージへ';
+$labels['previousmessages'] = '前の一覧へ';
+$labels['firstmessage'] = '最初のメッセージへ';
+$labels['firstmessages'] = '最初の一覧へ';
+$labels['nextmessage'] = '次のメッセージへ';
+$labels['nextmessages'] = '次の一覧へ';
+$labels['lastmessage'] = '最後のメッセージへ';
+$labels['lastmessages'] = '最後の一覧へ';
+$labels['backtolist'] = '一覧に戻る';
+$labels['viewsource'] = 'ソースの表示';
+$labels['markmessages'] = 'マークを付ける';
+$labels['markread'] = '既読にする';
+$labels['markunread'] = '未読にする';
+$labels['select'] = '選択';
+$labels['all'] = 'すべて';
+$labels['none'] = 'なし';
+$labels['unread'] = '未読';
+$labels['compact'] = 'コンパクト';
+$labels['empty'] = '空';
+$labels['purge'] = '破棄';
+$labels['quota'] = 'ディスク使用量';
+$labels['unknown'] = '不明';
+$labels['unlimited'] = '無制限';
+$labels['quicksearch'] = 'Quick search';
+$labels['resetsearch'] = 'Reset search';
+$labels['compose'] = 'メッセージの作成';
+$labels['savemessage'] = '草稿に保存';
+$labels['sendmessage'] = '今すぐ送信';
+$labels['addattachment'] = 'ファイルの添付';
+$labels['charset'] = '文字エンコード';
+$labels['editortype'] = 'エディターの種類';
+$labels['returnreceipt'] = '開封確認';
+$labels['checkspelling'] = 'スペルチェック';
+$labels['resumeediting'] = '編集の中断';
+$labels['revertto'] = '元に戻す';
+$labels['attachments'] = '添付ファイル';
+$labels['upload'] = 'アップロード';
+$labels['close'] = '閉じる';
+$labels['low'] = '低い';
+$labels['lowest'] = '最低';
+$labels['normal'] = '通常';
+$labels['high'] = '高い';
+$labels['highest'] = '最高';
+$labels['nosubject'] = '(件名なし)';
+$labels['showimages'] = '画像の表示';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'テキスト';
+$labels['addcc'] = 'Cc 追加';
+$labels['addbcc'] = 'Bcc 追加';
+$labels['addreplyto'] = 'Reply-To 追加';
+$labels['mdnrequest'] = 'メッセージの送信者は開封確認の送付を求めています。開封確認のメッセージを送付しますか?';
+$labels['receiptread'] = '開封確認 (表示済)';
+$labels['yourmessage'] = 'これはあなたが送信したメッセージに対する開封確認です。';
+$labels['receiptnote'] = '注意: この開封確認はメッセージが受信者に表示されたことの通知です。受信者がメッセージを読んだこと、内容を理解したことを保証するものではありません。';
+$labels['name'] = '表示名';
+$labels['firstname'] = '名前';
+$labels['surname'] = '名字';
+$labels['email'] = 'メールアドレス';
+$labels['addcontact'] = '連絡先の新規追加';
+$labels['editcontact'] = '連絡先の編集';
+$labels['edit'] = '編集';
+$labels['cancel'] = 'キャンセル';
+$labels['save'] = '保存';
+$labels['delete'] = '削除';
+$labels['newcontact'] = '連絡先の新規作成';
+$labels['deletecontact'] = '連絡先の削除';
+$labels['composeto'] = 'この連絡先へメールを送信';
+$labels['contactsfromto'] = '連絡先: $from ~ $to (全: $count 件)';
+$labels['print'] = '印刷';
+$labels['export'] = 'エクスポート';
+$labels['previouspage'] = '前の一覧へ';
+$labels['firstpage'] = '最初の一覧へ';
+$labels['nextpage'] = '次の一覧へ';
+$labels['lastpage'] = '最後の一覧へ';
+$labels['groups'] = 'グループ';
+$labels['personaladrbook'] = '個人アドレス';
+$labels['settingsfor'] = '次の設定:';
+$labels['preferences'] = '設定';
+$labels['userpreferences'] = 'ユーザー設定';
+$labels['editpreferences'] = 'ユーザー設定の変更';
+$labels['identities'] = '個人情報';
+$labels['manageidentities'] = 'アカウントの個人情報管理';
+$labels['newidentity'] = '個人情報の新規作成';
+$labels['newitem'] = '新しい項目';
+$labels['edititem'] = '項目の編集';
+$labels['setdefault'] = '標準の設定';
+$labels['language'] = '言語';
+$labels['timezone'] = 'タイムゾーン';
+$labels['pagesize'] = 'ページ単位の表示件数';
+$labels['signature'] = '署名';
+$labels['dstactive'] = '夏時間の適用';
+$labels['htmleditor'] = 'メッセージ作成はHTMLが標準';
+$labels['htmlsignature'] = 'HTML の署名';
+$labels['previewpane'] = 'プレビューペインの表示';
+$labels['logoutclear'] = 'ログアウト時にごみ箱を空にする';
+$labels['logoutcompact'] = 'ログアウト時にフォルダのコンパクト化を実行';
+$labels['uisettings'] = 'ユーザーインターフェース';
+$labels['serversettings'] = 'サーバの設定';
+$labels['autosavedraft'] = '自動的に草稿を保存';
+$labels['everynminutes'] = ' $n 分毎';
+$labels['never'] = 'しない';
+$labels['folder'] = 'フォルダ';
+$labels['folders'] = 'フォルダ一覧';
+$labels['foldername'] = 'フォルダ名';
+$labels['subscribed'] = '購読済';
+$labels['messagecount'] = 'メッセージ';
+$labels['create'] = '作成';
+$labels['createfolder'] = 'フォルダの新規作成';
+$labels['rename'] = '名前の変更';
+$labels['renamefolder'] = 'フォルダ名の変更';
+$labels['deletefolder'] = 'フォルダの削除';
+$labels['managefolders'] = 'フォルダの管理';
+$labels['sortby'] = '整列の基準にする';
+$labels['sortasc'] = '昇順で整列';
+$labels['sortdesc'] = '降順で整列';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ja/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Tadashi Jokagi <elf2000@users.sourceforge.net> |
+ | Takashi Takamatsu <taka717@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1335 2008-04-27 15:18:13Z alec $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'ログインに失敗しました。';
+$messages['cookiesdisabled'] = 'ブラウザで Cookie が無効に設定されています。';
+$messages['sessionerror'] = 'セッションが正しくないか期限切れです。';
+$messages['imaperror'] = 'IMAP サーバへの接続に失敗しました。';
+$messages['nomessagesfound'] = 'メールはありません。';
+$messages['loggedout'] = 'ログアウトしました。';
+$messages['mailboxempty'] = 'メールボックスは空です。';
+$messages['loading'] = '読み込み中...';
+$messages['loadingdata'] = 'データを読み込み中です...';
+$messages['checkingmail'] = 'メールの確認中です...';
+$messages['sendingmessage'] = 'メールを送信中です...';
+$messages['messagesent'] = 'メールを送信しました。';
+$messages['savingmessage'] = 'メールを保存しています...';
+$messages['messagesaved'] = 'メールを下書きに保存しました。';
+$messages['successfullysaved'] = '保存しました。';
+$messages['addedsuccessfully'] = 'アドレス帳への連絡先の追加しました。';
+$messages['contactexists'] = 'このメールアドレスは既にアドレス帳に存在します。';
+$messages['blockedimages'] = 'プライバシーを保護するため、このメールに含まれるリモート画像はブロックされました。';
+$messages['encryptedmessage'] = 'このメールは暗号化されているため表示できません。';
+$messages['nocontactsfound'] = '連絡先がありません。';
+$messages['contactnotfound'] = '要求された連絡先が見つかりません。';
+$messages['sendingfailed'] = 'メールの送信に失敗しました。';
+$messages['errorsaving'] = '保存中にエラーが発生しました。';
+$messages['errormoving'] = 'メールを移動できません。';
+$messages['errordeleting'] = 'メールを削除できません。';
+$messages['deletecontactconfirm'] = '選択した連絡先を本当に削除しますか?';
+$messages['deletemessagesconfirm'] = '選択したメールを本当に削除しますか?';
+$messages['deletefolderconfirm'] = 'このフォルダを本当に削除しますか?';
+$messages['purgefolderconfirm'] = 'このフォルダの全てのメールを本当に削除しますか?';
+$messages['formincomplete'] = 'フォームの項目が完全に入力されていません。';
+$messages['noemailwarning'] = '有効なメールアドレスを入力して下さい。';
+$messages['nonamewarning'] = '名前を入力して下さい。';
+$messages['nopagesizewarning'] = 'ページのサイズを入力して下さい。';
+$messages['norecipientwarning'] = '受信者を最低 1 人は入力して下さい。';
+$messages['nosubjectwarning'] = '件名が空です。今すぐ入力しますか?';
+$messages['nobodywarning'] = '本文が無いメールを送信しますか?';
+$messages['notsentwarning'] = 'メールは送信されませんでした。破棄しますか?';
+$messages['noldapserver'] = '検索する LDAP サーバーを選択して下さい。';
+$messages['nocontactsreturned'] = '連絡先がありません。';
+$messages['nosearchname'] = '連絡先の名前かメールアドレスを入力して下さい。';
+$messages['searchsuccessful'] = ' $nr 件のメールが見つかりました。';
+$messages['searchnomatch'] = '一致するメールはありません。';
+$messages['searching'] = '検索中です...';
+$messages['checking'] = '確認中です...';
+$messages['nospellerrors'] = 'スペルミスは見つかりませんでした。';
+$messages['folderdeleted'] = 'フォルダを削除しました。';
+$messages['deletedsuccessfully'] = '削除しました。';
+$messages['converting'] = 'メールから書式を削除中です...';
+$messages['messageopenerror'] = 'サーバからメールを取得できません。';
+$messages['fileuploaderror'] = 'ファイルのアップロードに失敗しました。';
+$messages['filesizeerror'] = 'アップロードしたファイルのサイズが上限 $size を超えました。';
+$messages['copysuccess'] = 'アドレス $nr 個のコピーに成功しました。';
+$messages['copyerror'] = 'アドレスをコピーできません。';
+$messages['sourceisreadonly'] = 'このアドレス情報は読み取り専用です。';
+$messages['errorsavingcontact'] = '連絡先のアドレスを保存できません。';
+$messages['movingmessage'] = '移動中です...';
+$messages['receiptsent'] = '開封確認を送信しました。';
+$messages['errorsendingreceipt'] = '開封確認を送信できません。';
+$messages['nodeletelastidentity'] = '削除できません。少なくとも1つの個人情報が必要です。';
+$messages['addsubfolderhint'] = '現在選択しているフォルダのサブフォルダとして作成されます。';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ge/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Zaza Zviadadze <zviadadze@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 842 2007-10-20 13:55:02Z zaza$
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'მოგესალმებათ $product';
+$labels['username'] = 'მომხმარებელი';
+$labels['password'] = 'პაროლი';
+$labels['server'] = 'სერვერი';
+$labels['login'] = 'შესვლა';
+$labels['logout'] = 'გამოსვლა';
+$labels['mail'] = 'ელ–ფოსტა';
+$labels['settings'] = 'პარამეტრები';
+$labels['addressbook'] = 'მისამართები';
+$labels['inbox'] = 'მიღებული';
+$labels['drafts'] = 'დროებითი';
+$labels['sent'] = 'გაგზავნილები';
+$labels['trash'] = 'წაშლილები';
+$labels['junk'] = 'სპამი';
+$labels['subject'] = 'სათაური';
+$labels['from'] = 'გამგზავნი';
+$labels['to'] = 'მიმღები';
+$labels['cc'] = 'კოპია';
+$labels['bcc'] = 'ფარული';
+$labels['replyto'] = 'დაბრუნება';
+$labels['date'] = 'თარიღი';
+$labels['size'] = 'ზომა';
+$labels['priority'] = 'პრიორიტეტი';
+$labels['organization'] = 'ორგანიზაცია';
+$labels['reply-to'] = 'დაბრუნება';
+$labels['mailboxlist'] = 'საქაღალდეები';
+$labels['messagesfromto'] = 'შეტყობინება $from $to დან $count';
+$labels['messagenrof'] = 'შეტყობინება $nr დან $count';
+$labels['moveto'] = 'გადატანა...';
+$labels['download'] = 'გადმოწერა';
+$labels['filename'] = 'ფაილის სახელი';
+$labels['filesize'] = 'ფაილის ზომა';
+$labels['preferhtml'] = 'როგორც HTML';
+$labels['htmlmessage'] = 'HTML შეტყობინება';
+$labels['prettydate'] = 'კარგი თარიღები';
+$labels['addtoaddressbook'] = 'მისამართებში დამატება';
+$labels['sun'] = 'კვ';
+$labels['mon'] = 'ორ';
+$labels['tue'] = 'სამ';
+$labels['wed'] = 'ოთხ';
+$labels['thu'] = 'ხუთ';
+$labels['fri'] = 'პარ';
+$labels['sat'] = 'შაბ';
+$labels['sunday'] = 'კვირა';
+$labels['monday'] = 'ორშაბათი';
+$labels['tuesday'] = 'სამშაბათი';
+$labels['wednesday'] = 'ოთხშაბათი';
+$labels['thursday'] = 'ხუთშაბათი';
+$labels['friday'] = 'პარასკევი';
+$labels['saturday'] = 'შაბათი';
+$labels['today'] = 'დღეს';
+$labels['checkmail'] = 'შემოწმება ახალ შეტყობინებაზე';
+$labels['writenewmessage'] = 'ახალი შეტყობინება';
+$labels['replytomessage'] = 'პასუხი';
+$labels['replytoallmessage'] = 'პასუხი ყველას';
+$labels['forwardmessage'] = 'გადაგზავნა';
+$labels['deletemessage'] = 'წაშლა';
+$labels['movemessagetotrash'] = 'შეტყობინების წაშლილებში გადატანა';
+$labels['printmessage'] = 'შეტყობინების ამობეჭვდა';
+$labels['previousmessage'] = 'წინა შეტყობინების ნახვა';
+$labels['previousmessages'] = 'წინა შეტყობინებების ნახვა';
+$labels['firstmessage'] = 'პირველი შეტყობინების ნახვა';
+$labels['firstmessages'] = 'პრველი შეტყობინებები';
+$labels['nextmessage'] = 'შემდეგი შეტყობინების ნახვა';
+$labels['nextmessages'] = 'შემდეგი შეტყობინებების ნახვა';
+$labels['lastmessage'] = 'ბოლო შეტყობინების ნახვა';
+$labels['lastmessages'] = 'ბოლო შეტყობინებების ნახვა';
+$labels['backtolist'] = 'უკან ჩამონათვალში';
+$labels['viewsource'] = 'შიგთავსი';
+$labels['markmessages'] = 'მონიშნეთ შეტყობინებები';
+$labels['markread'] = 'როგორც წაკითხული';
+$labels['markunread'] = 'როგორც წაუკითხავი';
+$labels['select'] = 'მონიშვნა';
+$labels['all'] = 'ყველა';
+$labels['none'] = 'არცერთი';
+$labels['unread'] = 'წაუკითხავი';
+$labels['compact'] = 'შეკუმშვა';
+$labels['empty'] = 'გაცარიელება';
+$labels['purge'] = 'გასუფთავება';
+$labels['quota'] = 'შეზღუდვა';
+$labels['unknown'] = 'უცნობი';
+$labels['unlimited'] = 'შეუზღუდავი';
+$labels['quicksearch'] = 'სწრაფი ძიება';
+$labels['resetsearch'] = 'ძიების გასუფთავება';
+$labels['compose'] = 'შეტყობინების დაწერა';
+$labels['savemessage'] = 'დროებით შენახვა';
+$labels['sendmessage'] = 'შეტყობინების გაგზავნა';
+$labels['addattachment'] = 'ფაილის ატვირთვა';
+$labels['charset'] = 'კოდირება';
+$labels['editortype'] = 'რედაქტორი';
+$labels['returnreceipt'] = 'პასუხის მოთხოვნა';
+$labels['checkspelling'] = 'ორთოგრაფიული შემოწმება';
+$labels['resumeediting'] = 'რედაქტირების გაგრძელება';
+$labels['revertto'] = 'გაუქმება';
+$labels['attachments'] = 'გზავნილები';
+$labels['upload'] = 'ატვირთვა';
+$labels['close'] = 'დახურვა';
+$labels['low'] = 'დაბალი';
+$labels['lowest'] = 'უდაბლესი';
+$labels['normal'] = 'საშუალო';
+$labels['high'] = 'მაღალი';
+$labels['highest'] = 'უმაღლესი';
+$labels['nosubject'] = '(უსათაურო)';
+$labels['showimages'] = 'გამოსახულების ჩვენება';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'ტექსტური';
+$labels['addcc'] = 'დაამატე კოპიო';
+$labels['addbcc'] = 'დაამატე ფარული კოპიო';
+$labels['addreplyto'] = 'დაამატე გამომგზავნი';
+$labels['mdnrequest'] = 'გამომგზავნს სურს შეიტყოს წერილის მიღება. გსურთ შეატყობინოთ გამომგზავნს?';
+$labels['receiptread'] = 'გზავნილის დაბრუნება';
+$labels['yourmessage'] = 'ეს არის მიღების დასტური თქვენს შეტყობინებაზე';
+$labels['receiptnote'] = 'განმარტება: ეს ნიშნავს რომ ადრესატმა მიიღო შეტყობინება. მაგრამ, არ ნიშნავს რომ წაიკითხა ან გაიგო ტექსტი';
+$labels['name'] = 'სრული სახელი';
+$labels['firstname'] = 'სახელი';
+$labels['surname'] = 'გვარი';
+$labels['email'] = 'ელ–ფოსტა';
+$labels['addcontact'] = 'კონტაქტებში დამატება';
+$labels['editcontact'] = 'კონტაქტის რედაქტირება';
+$labels['edit'] = 'რედაქტირება';
+$labels['cancel'] = 'გაუქმება';
+$labels['save'] = 'შენახვა';
+$labels['delete'] = 'წაშლა';
+$labels['newcontact'] = 'კონტაქტის შექმნა';
+$labels['deletecontact'] = 'მონიშნელი კონტაქტის წაშლა';
+$labels['composeto'] = 'ფოსტის გაგზავნა შერჩეულ ადრესატებთან';
+$labels['contactsfromto'] = 'კონტაქტები $from დან $to ში $count';
+$labels['print'] = 'დაბეჭვდა';
+$labels['export'] = 'ექსპორტი';
+$labels['previouspage'] = 'წინას ჩვენება';
+$labels['firstpage'] = 'პირველის ჩვენება';
+$labels['nextpage'] = 'შემდეგის ჩვენება';
+$labels['lastpage'] = 'ბოლოს ჩვენება';
+$labels['groups'] = 'ჯგუფები';
+$labels['personaladrbook'] = 'პერსონალური მისამართები';
+$labels['settingsfor'] = 'პარამეტრები';
+$labels['preferences'] = 'პარამეტრები';
+$labels['userpreferences'] = 'მომხმარებლის პარამეტრები';
+$labels['editpreferences'] = 'მომხმარებლის პარამეტრების რედაქტირება';
+$labels['identities'] = 'პროფილები';
+$labels['manageidentities'] = 'პროფილების მართვა';
+$labels['newidentity'] = 'ახალი პროფილი';
+$labels['newitem'] = 'ახალი';
+$labels['edititem'] = 'რედაქტირება';
+$labels['setdefault'] = 'როგორც ზოგაგად';
+$labels['language'] = 'ენა';
+$labels['timezone'] = 'დროითი ზონა';
+$labels['pagesize'] = 'სტრიქონი გვერდზე';
+$labels['signature'] = 'ხელმოწერა';
+$labels['dstactive'] = 'დროის გადაყვანა';
+$labels['htmleditor'] = 'შეტყობინების შექმნა HTML –ში';
+$labels['htmlsignature'] = 'HTML ხელმოწერა';
+$labels['previewpane'] = 'ჩვენება';
+$labels['autosavedraft'] = 'ავტომატური შენახვა';
+$labels['everynminutes'] = 'ყოველ $n წუთში';
+$labels['never'] = 'არასდროს';
+$labels['folder'] = 'საქაღალდე';
+$labels['folders'] = 'საქაღალდეები';
+$labels['foldername'] = 'საქაღალდის დასახელება';
+$labels['subscribed'] = 'გამოცერილია';
+$labels['messagecount'] = 'შეტყობინებები';
+$labels['create'] = 'შექმნა';
+$labels['createfolder'] = 'საქაღალდის შექმნა';
+$labels['rename'] = 'სახელის გადარქმევა';
+$labels['renamefolder'] = 'სახელის გადარქმევა საქაღალდისთვის';
+$labels['deletefolder'] = 'საქაღალდის წაშლა';
+$labels['managefolders'] = 'საქაღალდეების მართვა';
+$labels['sortby'] = 'დალაგება';
+$labels['sortasc'] = 'დალაგება ზრდადობით';
+$labels['sortdesc'] = 'დალაგება კლებადობით';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ge/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Zaza Zviadadze <zviadadze@gmail.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 842 2007-10-20 13:55:02Z zaza $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'შესვლა შეუძლებელია';
+$messages['cookiesdisabled'] = 'თქვენი ბროუზერი კუკიებს არ პასუხობს';
+$messages['sessionerror'] = 'თქვენი სესია არის მცდარი ან ვადაგასული';
+$messages['imaperror'] = 'IMAP სერვერთან დაკავშირება შეუძლებელია';
+$messages['nomessagesfound'] = 'არ არის ახალი შეტყობინება';
+$messages['loggedout'] = 'წარმატებით დაიხურა თქვენი სესია';
+$messages['mailboxempty'] = 'საფოსტო ყუთი ცარიელია';
+$messages['loading'] = 'იტვირთება...';
+$messages['loadingdata'] = 'მონაცემების ჩატვირთვა...';
+$messages['checkingmail'] = 'ახალი შეტყობინების ნახვა';
+$messages['sendingmessage'] = 'შეტყობინების გაგზავნა';
+$messages['messagesent'] = 'შეტყობინება გაიგზავნა წარმატებით';
+$messages['savingmessage'] = 'შეტყობინების შენახვა...';
+$messages['messagesaved'] = 'შეტყობინების დროებით შენახვა';
+$messages['successfullysaved'] = 'წარმატებით შეინახა';
+$messages['addedsuccessfully'] = 'კონტაქტი წარმატებით დაემატა მისამართებში';
+$messages['contactexists'] = 'კონტაქტი ამ მისამართზე უკვე არსებობს';
+$messages['blockedimages'] = 'უსაფრთხოების მიზნით სურათების ჩვენება შეზღუდულია';
+$messages['encryptedmessage'] = 'შეტყობინება დაშიფრულია და სამწუხაროდ ჩვენება შეუძლებელია';
+$messages['nocontactsfound'] = 'კონტაქტი ვერ მოიძებნა';
+$messages['contactnotfound'] = 'მოთხოვნილი კონტაქტი ვერ მოიძებნა';
+$messages['sendingfailed'] = 'შეტყობინება ვერ გაიგზავნა';
+$messages['errorsaving'] = 'შენახვის დროს მოხდა შეცდომა';
+$messages['errormoving'] = 'შეტყობინების გადატანა შეუძლებელია';
+$messages['errordeleting'] = 'შეტყობინების წაშლა შეუძლებელია';
+$messages['deletecontactconfirm'] = 'ნამდვილად გსურთ მონიშნული კონტაქტების წაშლა?';
+$messages['deletemessagesconfirm'] = 'ნამდვილად გსურთ მონიშნული შეტყობინებების წაშლა?';
+$messages['deletefolderconfirm'] = 'ნამდვილად გსურთ ამ საქაღალდის წაშლა?';
+$messages['purgefolderconfirm'] = 'ნამდვილად გსურთ ყველა შეტყობინების წაშლა აღნიშნულ საქაღალდეში?';
+$messages['formincomplete'] = 'ყველა ველი არ არის შევსებული';
+$messages['noemailwarning'] = 'მიუთითეთ სწორი ელ–ფოსტის მისამართი';
+$messages['nonamewarning'] = 'მიუთითეთ სახელი';
+$messages['nopagesizewarning'] = 'მიუთითეთ ფურცლის ზომა';
+$messages['norecipientwarning'] = 'მიუთითეთ მიმღები';
+$messages['nosubjectwarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უსათაუროდ?';
+$messages['nobodywarning'] = 'გსურთ თუ არა შეტყობინების გაგზავნა უტექსტოდ?';
+$messages['notsentwarning'] = 'შეტყობინება ვერ იქნა გაგზავნილი. გსურთ თუ არა გზავნილის გაუქმება?';
+$messages['noldapserver'] = 'მიუთითეთ LDAP სერვერი ძიებისთვის';
+$messages['nocontactsreturned'] = 'კონტაქტები ვერ მოძებნა';
+$messages['nosearchname'] = 'მიუთითეთ სახელი ან ელ–ფოსტის მისამართი';
+$messages['searchsuccessful'] = '$nr შეტყობინეა მოიძებნა';
+$messages['searchnomatch'] = 'შეტყობინება ვერ მოიძებნა';
+$messages['searching'] = 'ძიება...';
+$messages['checking'] = 'შემოწმება...';
+$messages['nospellerrors'] = 'ორთოგრაფიული შეცდომა არ არის';
+$messages['folderdeleted'] = 'საქაღალდე წარმატებით წაიშალა';
+$messages['deletedsuccessfully'] = 'წარმატებით წაიშალა';
+$messages['converting'] = 'შეტყობინების ფორმატირების გაუქმება...';
+$messages['messageopenerror'] = 'შეტყობინება ვერ ჩაიტვირთა სერვერიდან';
+$messages['fileuploaderror'] = 'ფაილი ვერ აიტვირთა';
+$messages['filesizeerror'] = 'ატვირთული ფაილის ზომა მეტია დასაშვებ ფაილის მაქსიმალურ ზომაზე ($size)';
+$messages['copysuccess'] = 'წარმატებით დაკოპირდა $nr მისამართი';
+$messages['copyerror'] = 'ვერცერთი მისამართი ვერ დაკოპირდა';
+$messages['sourceisreadonly'] = 'აღნიშნული მისამართის მხოლოდ წაკითხვაა შესაძლებელი';
+$messages['errorsavingcontact'] = 'საკონტაქტო მისამართის შენახვა შეუძლებელია';
+$messages['movingmessage'] = 'შეტყობინების გადატანა...';
+$messages['receiptsent'] = 'წარმატებით გაიგზავნა';
+$messages['errorsendingreceipt'] = 'არ გაიგზავნა';
+$messages['nodeletelastidentity'] = 'წაშლა შეუძლებელია, ის თქვენთვის ერთადერთია';
+$messages['addsubfolderhint'] = 'საქაღალდე შეიქმნება როგორც ქვესაქაღალდე მონიშნულ საქაღალდეში';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | localization/kr/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: lordmiss <lordmiss@lordmiss.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
+
+*/
+
+$labels['welcome'] = '$product에 오신 것을 환영합니다';
+$labels['welcome'] = '$product에 오신 것을 환영합니다';
+$labels['username'] = '사용자명';
+$labels['password'] = '비밀번호';
+$labels['server'] = '서버';
+$labels['login'] = '로그인';
+$labels['logout'] = '로그아웃';
+$labels['mail'] = '이메일';
+$labels['settings'] = '개인 설정';
+$labels['addressbook'] = '주소록';
+$labels['inbox'] = '받은편지함';
+$labels['drafts'] = '임시저장';
+$labels['sent'] = '보낸편지함';
+$labels['trash'] = '휴지통';
+$labels['junk'] = '정크메일';
+$labels['subject'] = '제목';
+$labels['from'] = '보내는 사람';
+$labels['to'] = '받는 사람';
+$labels['cc'] = '참조';
+$labels['bcc'] = '숨은 참조';
+$labels['replyto'] = '회신 주소';
+$labels['date'] = '날짜';
+$labels['size'] = '크기';
+$labels['priority'] = '우선순위';
+$labels['organization'] = '기관';
+$labels['reply-to'] = '회신 주소';
+$labels['mailboxlist'] = '폴더';
+$labels['messagesfromto'] = '$from 이 $to에게 보낸 메시지 $count 개';
+$labels['messagenrof'] = '메시지 $count 개 중 $nr 개';
+$labels['moveto'] = '이동...';
+$labels['download'] = '다운로드';
+$labels['filename'] = '파일 이름';
+$labels['filesize'] = '파일 크기';
+$labels['preferhtml'] = 'HTML 보이기';
+$labels['htmlmessage'] = 'HTML 메시지';
+$labels['prettydate'] = '날짜 형식';
+$labels['addtoaddressbook'] = '주소록에 추가';
+$labels['sun'] = '일';
+$labels['mon'] = '월';
+$labels['tue'] = '화';
+$labels['wed'] = '수';
+$labels['thu'] = '목';
+$labels['fri'] = '금';
+$labels['sat'] = '토';
+$labels['sunday'] = '일요일';
+$labels['monday'] = '월요일';
+$labels['tuesday'] = '화요일';
+$labels['wednesday'] = '수요일';
+$labels['thursday'] = '목요일';
+$labels['friday'] = '금요일';
+$labels['saturday'] = '토요일';
+$labels['today'] = '오늘';
+$labels['checkmail'] = '새 메일 확인';
+$labels['writenewmessage'] = '새 메일 작성';
+$labels['replytomessage'] = '회신 작성';
+$labels['replytoallmessage'] = '보낸이와 모든 수신자에게 회신';
+$labels['forwardmessage'] = '메일 전달';
+$labels['deletemessage'] = '메일 삭제';
+$labels['movemessagetotrash'] = '메일 휴지통으로 이동';
+$labels['printmessage'] = '메일 인쇄';
+$labels['previousmessage'] = '이전 메일 보기';
+$labels['previousmessages'] = '이전 메일 세트 보기';
+$labels['firstmessage'] = '처음 메일 보기';
+$labels['firstmessages'] = '처음 메일 세트 보기';
+$labels['nextmessage'] = '다음 메일 보기';
+$labels['nextmessages'] = '다음 메일 세트 보기';
+$labels['lastmessage'] = '마지막 메일 보기';
+$labels['lastmessages'] = '마지막 메일 세트 보기';
+$labels['backtolist'] = '메일 목록으로';
+$labels['viewsource'] = '소스 보기';
+$labels['markmessages'] = '메시지 표시';
+$labels['markread'] = '읽은 것으로';
+$labels['markunread'] = '읽지 않은 것으로';
+$labels['select'] = '선택';
+$labels['all'] = '모두';
+$labels['none'] = '없음';
+$labels['unread'] = '읽지 않음';
+$labels['compact'] = '간단하게';
+$labels['empty'] = '비우기';
+$labels['purge'] = '삭제';
+$labels['quota'] = '디스크 사용';
+$labels['unknown'] = '알수 없음';
+$labels['unlimited'] = '제한 없음';
+$labels['quicksearch'] = '빨리 찾기';
+$labels['resetsearch'] = '찾기 리셋';
+$labels['compose'] = '메일 쓰기';
+$labels['savemessage'] = '드래프트 저장';
+$labels['sendmessage'] = '메일 지금 보냄';
+$labels['addattachment'] = '파일 첨부';
+$labels['charset'] = '문자셋';
+$labels['editortype'] = '편집기 형태';
+$labels['returnreceipt'] = '수신 확인';
+$labels['checkspelling'] = '스펠링 체크';
+$labels['resumeediting'] = '편집 계속';
+$labels['revertto'] = '돌아감';
+$labels['attachments'] = '첨부 파일';
+$labels['upload'] = '업로드';
+$labels['close'] = '닫기';
+$labels['low'] = '낮음';
+$labels['lowest'] = '가장 낮음';
+$labels['normal'] = '보통';
+$labels['high'] = '높음';
+$labels['highest'] = '가장 높음';
+$labels['nosubject'] = '(제목 없음)';
+$labels['showimages'] = '이미지 표시';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = '일반 텍스트';
+$labels['addcc'] = '참조 넣기';
+$labels['addbcc'] = '숨은참조 넣기';
+$labels['addreplyto'] = '회신주소 넣기';
+$labels['mdnrequest'] = '이 메시지를 보낸 분이 읽음 확인 요청을 했습니다. 확인할까요?';
+$labels['receiptread'] = '읽음 확인 보내기';
+$labels['yourmessage'] = '당신의 메시지를 읽었습니다.';
+$labels['receiptnote'] = '주의: 이 확인은 이 메시지가 수신자의 컴퓨터에 표시된 것만을 의미합니다. 수신자가 반드시 이 메일을 읽거나 이해했다는 것은 아닙니다.';
+$labels['name'] = '표시 이름';
+$labels['firstname'] = '이름';
+$labels['surname'] = '성';
+$labels['email'] = '이메일';
+$labels['addcontact'] = '새 연락처 추가';
+$labels['editcontact'] = '연락처 편집';
+$labels['edit'] = '편집';
+$labels['cancel'] = '취소';
+$labels['save'] = '저장';
+$labels['delete'] = '삭제';
+$labels['newcontact'] = '새 연락처 카드 만들기';
+$labels['deletecontact'] = '선택한 연락처 삭제';
+$labels['composeto'] = '새 메일 작성';
+$labels['contactsfromto'] = '$from 에서 $to 로의 연락처 $count 개';
+$labels['print'] = '인쇄';
+$labels['export'] = '내보내기';
+$labels['previouspage'] = '이전 세트 보기';
+$labels['firstpage'] = '처음 세트 보기';
+$labels['nextpage'] = '다음 세트 보기';
+$labels['lastpage'] = '마지막 세트 보기';
+$labels['groups'] = '그룹';
+$labels['personaladrbook'] = '개인 주소';
+$labels['settingsfor'] = '설정';
+$labels['preferences'] = '환경 설정';
+$labels['userpreferences'] = '사용자 환경';
+$labels['editpreferences'] = '사용자 환경 편집';
+$labels['identities'] = '신원';
+$labels['manageidentities'] = '이 계정의 신원 관리';
+$labels['newidentity'] = '새 신원';
+$labels['newitem'] = '새 아이템';
+$labels['edititem'] = '아이템 편집';
+$labels['setdefault'] = '기본으로 설정';
+$labels['language'] = '언어';
+$labels['timezone'] = '시간대';
+$labels['pagesize'] = '페이지당 줄 수';
+$labels['signature'] = '서명';
+$labels['dstactive'] = '서머타임';
+$labels['htmleditor'] = 'HTML 메일 쓰기';
+$labels['htmlsignature'] = 'HTML 서명';
+$labels['previewpane'] = '이전 구역 보기';
+$labels['autosavedraft'] = '드래프트 자동 저장';
+$labels['everynminutes'] = '$n 분마다';
+$labels['never'] = '하지 않음';
+$labels['folder'] = '폴더';
+$labels['folders'] = '폴더';
+$labels['foldername'] = '폴더 이름';
+$labels['subscribed'] = '가입됨';
+$labels['messagecount'] = '메시지';
+$labels['create'] = '만들기';
+$labels['createfolder'] = '새 폴더 만들기';
+$labels['rename'] = '이름 바꾸기';
+$labels['renamefolder'] = '폴더 이름 바꾸기';
+$labels['deletefolder'] = '폴더 지우기';
+$labels['managefolders'] = '폴더 관리';
+$labels['sortby'] = '정렬';
+$labels['sortasc'] = '오름차순으로 정렬';
+$labels['sortdesc'] = '내림차순으로 정렬';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | localization/kr/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: lordmiss <lordmiss@lordmiss.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
+
+*/
+
+$messages['loginfailed'] = '로그인 실패';
+$messages['loginfailed'] = '로그인 실패';
+$messages['cookiesdisabled'] = '브라우저가 쿠키를 지원하지 않습니다';
+$messages['sessionerror'] = '세션이 유효하지 않거나 종료되었습니다';
+$messages['imaperror'] = 'IMAP 서버 연결 실패';
+$messages['nomessagesfound'] = '이 메일함에 메일이 없습니다';
+$messages['loggedout'] = '세션을 성공적으로 종료하였습니다. 안녕히 가십시오!';
+$messages['mailboxempty'] = '메일함이 비어있습니다';
+$messages['loading'] = '불러오는 중...';
+$messages['loadingdata'] = '데이터 불러오는 중...';
+$messages['checkingmail'] = '새 메일 확인 중...';
+$messages['sendingmessage'] = '메일 보내는 중...';
+$messages['messagesent'] = '메일을 성공적으로 보냈습니다';
+$messages['savingmessage'] = '메일 저장 중...';
+$messages['messagesaved'] = '메일이 드래프트 폴더에 저장되었습니다';
+$messages['successfullysaved'] = '성공적으로 저장';
+$messages['addedsuccessfully'] = '연락처가 주소록에 성공적으로 추가되었습니다';
+$messages['contactexists'] = '이 메일로 지정된 연락처가 이미 있습니다';
+$messages['blockedimages'] = '보안 유지를 위해, 이 메일의 외부 이미지를 차단하였습니다';
+$messages['encryptedmessage'] = '이 메일은 암호화되어 볼 수 없습니다. 죄송합니다!';
+$messages['nocontactsfound'] = '연락처 없음';
+$messages['contactnotfound'] = '요청한 연락처가 없습니다';
+$messages['sendingfailed'] = '메일을 보내지 못했습니다';
+$messages['errorsaving'] = '저장 중 에러가 발생했습니다';
+$messages['errormoving'] = '메일을 옮길 수 없습니다';
+$messages['errordeleting'] = '메일을 지울 수 없습니다';
+$messages['deletecontactconfirm'] = '정말 선택한 연락처들을 삭제하시겠습니까?';
+$messages['deletemessagesconfirm'] = '정말 선택한 메일들을 삭제하시겠습니까?';
+$messages['deletefolderconfirm'] = '정말 이 폴더를 삭제하시겠습니까?';
+$messages['purgefolderconfirm'] = '정말 이 폴더의 모든 메일을 삭제하시겠습니까?';
+$messages['formincomplete'] = '양식을 완전히 채우지 않았습니다';
+$messages['noemailwarning'] = '유효한 이메일 주소를 넣어주십시오';
+$messages['nonamewarning'] = '이름을 넣어주십시오';
+$messages['nopagesizewarning'] = '페이지 크기를 넣어주십시오';
+$messages['norecipientwarning'] = '적어도 한 개 이상의 수신 주소를 넣어주십시오';
+$messages['nosubjectwarning'] = '"제목"이 없습니다. 제목을 넣으시겠습니까?';
+$messages['nobodywarning'] = '텍스트 없이 메일을 보낼까요?';
+$messages['notsentwarning'] = '메일을 보내지 않았습니다. 메일을 버리시겠습니까?';
+$messages['noldapserver'] = '검색할 LDAP 서버를 선택하세요';
+$messages['nocontactsreturned'] = '연락처가 없습니다';
+$messages['nosearchname'] = '연락처 이름이나 메일 주소를 넣으세요';
+$messages['searchsuccessful'] = '$nr개의 메일 발견';
+$messages['searchnomatch'] = '검색 결과가 없습니다';
+$messages['searching'] = '검색 중...';
+$messages['checking'] = '체크 중...';
+$messages['nospellerrors'] = '스펠링 에러가 없습니다';
+$messages['folderdeleted'] = '폴더를 성공적으로 삭제하였습니다';
+$messages['deletedsuccessfully'] = '성공적으로 삭제하였습니다';
+$messages['converting'] = '메일의 포맷을 지우는 중...';
+$messages['messageopenerror'] = '서버에서 메일을 가져올 수 없습니다';
+$messages['fileuploaderror'] = '파일 업로드 실패';
+$messages['filesizeerror'] = '올린 파일이 $size의 최대 크기를 초과했습니다';
+$messages['copysuccess'] = '$nr개의 주소를 성공적으로 복사했습니다';
+$messages['copyerror'] = '주소를 복사할 수 없습니다';
+$messages['sourceisreadonly'] = '이 주소 소스는 읽기 전용입니다';
+$messages['errorsavingcontact'] = '연락처 주소를 저장할 수 없습니다';
+$messages['movingmessage'] = '메시지 이동 중...';
+$messages['receiptsent'] = '메일 읽음 확인을 보냈습니다';
+$messages['errorsendingreceipt'] = '읽음 확인을 보낼 수 없습니다';
+$messages['nodeletelastidentity'] = '이 정보는 마지막 남은 것이므로 지울 수 없습니다';
+$messages['addsubfolderhint'] = '이 폴더는 현재 선택된 폴더의 서브 폴더로 만들어질 것입니다';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | localization/kr/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: lordmiss <lordmiss@lordmiss.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
-
-*/
-
-$labels['welcome'] = '$product에 오신 것을 환영합니다';
-$labels['welcome'] = '$product에 오신 것을 환영합니다';
-$labels['username'] = '사용자명';
-$labels['password'] = '비밀번호';
-$labels['server'] = '서버';
-$labels['login'] = '로그인';
-$labels['logout'] = '로그아웃';
-$labels['mail'] = '이메일';
-$labels['settings'] = '개인 설정';
-$labels['addressbook'] = '주소록';
-$labels['inbox'] = '받은편지함';
-$labels['drafts'] = '임시저장';
-$labels['sent'] = '보낸편지함';
-$labels['trash'] = '휴지통';
-$labels['junk'] = '정크메일';
-$labels['subject'] = '제목';
-$labels['from'] = '보내는 사람';
-$labels['to'] = '받는 사람';
-$labels['cc'] = '참조';
-$labels['bcc'] = '숨은 참조';
-$labels['replyto'] = '회신 주소';
-$labels['date'] = '날짜';
-$labels['size'] = '크기';
-$labels['priority'] = '우선순위';
-$labels['organization'] = '기관';
-$labels['reply-to'] = '회신 주소';
-$labels['mailboxlist'] = '폴더';
-$labels['messagesfromto'] = '$from 이 $to에게 보낸 메시지 $count 개';
-$labels['messagenrof'] = '메시지 $count 개 중 $nr 개';
-$labels['moveto'] = '이동...';
-$labels['download'] = '다운로드';
-$labels['filename'] = '파일 이름';
-$labels['filesize'] = '파일 크기';
-$labels['preferhtml'] = 'HTML 보이기';
-$labels['htmlmessage'] = 'HTML 메시지';
-$labels['prettydate'] = '날짜 형식';
-$labels['addtoaddressbook'] = '주소록에 추가';
-$labels['sun'] = '일';
-$labels['mon'] = '월';
-$labels['tue'] = '화';
-$labels['wed'] = '수';
-$labels['thu'] = '목';
-$labels['fri'] = '금';
-$labels['sat'] = '토';
-$labels['sunday'] = '일요일';
-$labels['monday'] = '월요일';
-$labels['tuesday'] = '화요일';
-$labels['wednesday'] = '수요일';
-$labels['thursday'] = '목요일';
-$labels['friday'] = '금요일';
-$labels['saturday'] = '토요일';
-$labels['today'] = '오늘';
-$labels['checkmail'] = '새 메일 확인';
-$labels['writenewmessage'] = '새 메일 작성';
-$labels['replytomessage'] = '회신 작성';
-$labels['replytoallmessage'] = '보낸이와 모든 수신자에게 회신';
-$labels['forwardmessage'] = '메일 전달';
-$labels['deletemessage'] = '메일 삭제';
-$labels['movemessagetotrash'] = '메일 휴지통으로 이동';
-$labels['printmessage'] = '메일 인쇄';
-$labels['previousmessage'] = '이전 메일 보기';
-$labels['previousmessages'] = '이전 메일 세트 보기';
-$labels['firstmessage'] = '처음 메일 보기';
-$labels['firstmessages'] = '처음 메일 세트 보기';
-$labels['nextmessage'] = '다음 메일 보기';
-$labels['nextmessages'] = '다음 메일 세트 보기';
-$labels['lastmessage'] = '마지막 메일 보기';
-$labels['lastmessages'] = '마지막 메일 세트 보기';
-$labels['backtolist'] = '메일 목록으로';
-$labels['viewsource'] = '소스 보기';
-$labels['markmessages'] = '메시지 표시';
-$labels['markread'] = '읽은 것으로';
-$labels['markunread'] = '읽지 않은 것으로';
-$labels['select'] = '선택';
-$labels['all'] = '모두';
-$labels['none'] = '없음';
-$labels['unread'] = '읽지 않음';
-$labels['compact'] = '간단하게';
-$labels['empty'] = '비우기';
-$labels['purge'] = '삭제';
-$labels['quota'] = '디스크 사용';
-$labels['unknown'] = '알수 없음';
-$labels['unlimited'] = '제한 없음';
-$labels['quicksearch'] = '빨리 찾기';
-$labels['resetsearch'] = '찾기 리셋';
-$labels['compose'] = '메일 쓰기';
-$labels['savemessage'] = '드래프트 저장';
-$labels['sendmessage'] = '메일 지금 보냄';
-$labels['addattachment'] = '파일 첨부';
-$labels['charset'] = '문자셋';
-$labels['editortype'] = '편집기 형태';
-$labels['returnreceipt'] = '수신 확인';
-$labels['checkspelling'] = '스펠링 체크';
-$labels['resumeediting'] = '편집 계속';
-$labels['revertto'] = '돌아감';
-$labels['attachments'] = '첨부 파일';
-$labels['upload'] = '업로드';
-$labels['close'] = '닫기';
-$labels['low'] = '낮음';
-$labels['lowest'] = '가장 낮음';
-$labels['normal'] = '보통';
-$labels['high'] = '높음';
-$labels['highest'] = '가장 높음';
-$labels['nosubject'] = '(제목 없음)';
-$labels['showimages'] = '이미지 표시';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = '일반 텍스트';
-$labels['addcc'] = '참조 넣기';
-$labels['addbcc'] = '숨은참조 넣기';
-$labels['addreplyto'] = '회신주소 넣기';
-$labels['mdnrequest'] = '이 메시지를 보낸 분이 읽음 확인 요청을 했습니다. 확인할까요?';
-$labels['receiptread'] = '읽음 확인 보내기';
-$labels['yourmessage'] = '당신의 메시지를 읽었습니다.';
-$labels['receiptnote'] = '주의: 이 확인은 이 메시지가 수신자의 컴퓨터에 표시된 것만을 의미합니다. 수신자가 반드시 이 메일을 읽거나 이해했다는 것은 아닙니다.';
-$labels['name'] = '표시 이름';
-$labels['firstname'] = '이름';
-$labels['surname'] = '성';
-$labels['email'] = '이메일';
-$labels['addcontact'] = '새 연락처 추가';
-$labels['editcontact'] = '연락처 편집';
-$labels['edit'] = '편집';
-$labels['cancel'] = '취소';
-$labels['save'] = '저장';
-$labels['delete'] = '삭제';
-$labels['newcontact'] = '새 연락처 카드 만들기';
-$labels['deletecontact'] = '선택한 연락처 삭제';
-$labels['composeto'] = '새 메일 작성';
-$labels['contactsfromto'] = '$from 에서 $to 로의 연락처 $count 개';
-$labels['print'] = '인쇄';
-$labels['export'] = '내보내기';
-$labels['previouspage'] = '이전 세트 보기';
-$labels['firstpage'] = '처음 세트 보기';
-$labels['nextpage'] = '다음 세트 보기';
-$labels['lastpage'] = '마지막 세트 보기';
-$labels['groups'] = '그룹';
-$labels['personaladrbook'] = '개인 주소';
-$labels['settingsfor'] = '설정';
-$labels['preferences'] = '환경 설정';
-$labels['userpreferences'] = '사용자 환경';
-$labels['editpreferences'] = '사용자 환경 편집';
-$labels['identities'] = '신원';
-$labels['manageidentities'] = '이 계정의 신원 관리';
-$labels['newidentity'] = '새 신원';
-$labels['newitem'] = '새 아이템';
-$labels['edititem'] = '아이템 편집';
-$labels['setdefault'] = '기본으로 설정';
-$labels['language'] = '언어';
-$labels['timezone'] = '시간대';
-$labels['pagesize'] = '페이지당 줄 수';
-$labels['signature'] = '서명';
-$labels['dstactive'] = '서머타임';
-$labels['htmleditor'] = 'HTML 메일 쓰기';
-$labels['htmlsignature'] = 'HTML 서명';
-$labels['previewpane'] = '이전 구역 보기';
-$labels['autosavedraft'] = '드래프트 자동 저장';
-$labels['everynminutes'] = '$n 분마다';
-$labels['never'] = '하지 않음';
-$labels['folder'] = '폴더';
-$labels['folders'] = '폴더';
-$labels['foldername'] = '폴더 이름';
-$labels['subscribed'] = '가입됨';
-$labels['messagecount'] = '메시지';
-$labels['create'] = '만들기';
-$labels['createfolder'] = '새 폴더 만들기';
-$labels['rename'] = '이름 바꾸기';
-$labels['renamefolder'] = '폴더 이름 바꾸기';
-$labels['deletefolder'] = '폴더 지우기';
-$labels['managefolders'] = '폴더 관리';
-$labels['sortby'] = '정렬';
-$labels['sortasc'] = '오름차순으로 정렬';
-$labels['sortdesc'] = '내림차순으로 정렬';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | localization/kr/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: lordmiss <lordmiss@lordmiss.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 560 2007-05-17 15:01:26Z thomasb $
-
-*/
-
-$messages['loginfailed'] = '로그인 실패';
-$messages['loginfailed'] = '로그인 실패';
-$messages['cookiesdisabled'] = '브라우저가 쿠키를 지원하지 않습니다';
-$messages['sessionerror'] = '세션이 유효하지 않거나 종료되었습니다';
-$messages['imaperror'] = 'IMAP 서버 연결 실패';
-$messages['nomessagesfound'] = '이 메일함에 메일이 없습니다';
-$messages['loggedout'] = '세션을 성공적으로 종료하였습니다. 안녕히 가십시오!';
-$messages['mailboxempty'] = '메일함이 비어있습니다';
-$messages['loading'] = '불러오는 중...';
-$messages['loadingdata'] = '데이터 불러오는 중...';
-$messages['checkingmail'] = '새 메일 확인 중...';
-$messages['sendingmessage'] = '메일 보내는 중...';
-$messages['messagesent'] = '메일을 성공적으로 보냈습니다';
-$messages['savingmessage'] = '메일 저장 중...';
-$messages['messagesaved'] = '메일이 드래프트 폴더에 저장되었습니다';
-$messages['successfullysaved'] = '성공적으로 저장';
-$messages['addedsuccessfully'] = '연락처가 주소록에 성공적으로 추가되었습니다';
-$messages['contactexists'] = '이 메일로 지정된 연락처가 이미 있습니다';
-$messages['blockedimages'] = '보안 유지를 위해, 이 메일의 외부 이미지를 차단하였습니다';
-$messages['encryptedmessage'] = '이 메일은 암호화되어 볼 수 없습니다. 죄송합니다!';
-$messages['nocontactsfound'] = '연락처 없음';
-$messages['contactnotfound'] = '요청한 연락처가 없습니다';
-$messages['sendingfailed'] = '메일을 보내지 못했습니다';
-$messages['errorsaving'] = '저장 중 에러가 발생했습니다';
-$messages['errormoving'] = '메일을 옮길 수 없습니다';
-$messages['errordeleting'] = '메일을 지울 수 없습니다';
-$messages['deletecontactconfirm'] = '정말 선택한 연락처들을 삭제하시겠습니까?';
-$messages['deletemessagesconfirm'] = '정말 선택한 메일들을 삭제하시겠습니까?';
-$messages['deletefolderconfirm'] = '정말 이 폴더를 삭제하시겠습니까?';
-$messages['purgefolderconfirm'] = '정말 이 폴더의 모든 메일을 삭제하시겠습니까?';
-$messages['formincomplete'] = '양식을 완전히 채우지 않았습니다';
-$messages['noemailwarning'] = '유효한 이메일 주소를 넣어주십시오';
-$messages['nonamewarning'] = '이름을 넣어주십시오';
-$messages['nopagesizewarning'] = '페이지 크기를 넣어주십시오';
-$messages['norecipientwarning'] = '적어도 한 개 이상의 수신 주소를 넣어주십시오';
-$messages['nosubjectwarning'] = '"제목"이 없습니다. 제목을 넣으시겠습니까?';
-$messages['nobodywarning'] = '텍스트 없이 메일을 보낼까요?';
-$messages['notsentwarning'] = '메일을 보내지 않았습니다. 메일을 버리시겠습니까?';
-$messages['noldapserver'] = '검색할 LDAP 서버를 선택하세요';
-$messages['nocontactsreturned'] = '연락처가 없습니다';
-$messages['nosearchname'] = '연락처 이름이나 메일 주소를 넣으세요';
-$messages['searchsuccessful'] = '$nr개의 메일 발견';
-$messages['searchnomatch'] = '검색 결과가 없습니다';
-$messages['searching'] = '검색 중...';
-$messages['checking'] = '체크 중...';
-$messages['nospellerrors'] = '스펠링 에러가 없습니다';
-$messages['folderdeleted'] = '폴더를 성공적으로 삭제하였습니다';
-$messages['deletedsuccessfully'] = '성공적으로 삭제하였습니다';
-$messages['converting'] = '메일의 포맷을 지우는 중...';
-$messages['messageopenerror'] = '서버에서 메일을 가져올 수 없습니다';
-$messages['fileuploaderror'] = '파일 업로드 실패';
-$messages['filesizeerror'] = '올린 파일이 $size의 최대 크기를 초과했습니다';
-$messages['copysuccess'] = '$nr개의 주소를 성공적으로 복사했습니다';
-$messages['copyerror'] = '주소를 복사할 수 없습니다';
-$messages['sourceisreadonly'] = '이 주소 소스는 읽기 전용입니다';
-$messages['errorsavingcontact'] = '연락처 주소를 저장할 수 없습니다';
-$messages['movingmessage'] = '메시지 이동 중...';
-$messages['receiptsent'] = '메일 읽음 확인을 보냈습니다';
-$messages['errorsendingreceipt'] = '읽음 확인을 보낼 수 없습니다';
-$messages['nodeletelastidentity'] = '이 정보는 마지막 남은 것이므로 지울 수 없습니다';
-$messages['addsubfolderhint'] = '이 폴더는 현재 선택된 폴더의 서브 폴더로 만들어질 것입니다';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/lt/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Martynas Bendorius <martynas@evanet.lt> |
- +-----------------------------------------------------------------------+'
-
- @version $Id: labels.inc 1128 2008-02-21 07:43:23Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Sveiki atvykę į $product';
-$labels['username'] = 'Vartotojas';
-$labels['password'] = 'Slaptažodis';
-$labels['server'] = 'Serveris';
-$labels['login'] = 'Prisijungti';
-$labels['logout'] = 'Atsijungti';
-$labels['mail'] = 'El. paštas';
-$labels['settings'] = 'Nustatymai';
-$labels['addressbook'] = 'Adresų knyga';
-$labels['inbox'] = 'Gauti';
-$labels['drafts'] = 'Juodraščiai';
-$labels['sent'] = 'Išsiųsti';
-$labels['trash'] = 'Šiukšliadėžė';
-$labels['junk'] = 'Nereikalingi';
-$labels['subject'] = 'Tema';
-$labels['from'] = 'Siuntėjas';
-$labels['to'] = 'Gavėjas';
-$labels['cc'] = 'Kopija';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Atsakyti į';
-$labels['date'] = 'Data';
-$labels['size'] = 'Dydis';
-$labels['priority'] = 'Svarbumas';
-$labels['organization'] = 'Organizacija';
-$labels['reply-to'] = 'Atsakyti į';
-$labels['mailboxlist'] = 'Aplankai';
-$labels['messagesfromto'] = 'Laiškai nuo $from iki $to iš $count';
-$labels['messagenrof'] = 'Laiškas $nr iš $count';
-$labels['moveto'] = 'perkelti į ...';
-$labels['download'] = 'parsisiųsti';
-$labels['filename'] = 'Bylos vardas';
-$labels['filesize'] = 'Bylos dydis';
-$labels['preferhtml'] = 'Rodyti HTML';
-$labels['htmlmessage'] = 'HTML Laiškas';
-$labels['prettydate'] = 'Gražios datos';
-$labels['addtoaddressbook'] = 'Įtraukti į adresų knygą';
-$labels['sun'] = 'Sek';
-$labels['mon'] = 'Pir';
-$labels['tue'] = 'Ant';
-$labels['wed'] = 'Tre';
-$labels['thu'] = 'Ket';
-$labels['fri'] = 'Pen';
-$labels['sat'] = 'Šeš';
-$labels['sunday'] = 'Sekmadienis';
-$labels['monday'] = 'Pirmadienis';
-$labels['tuesday'] = 'Antradienis';
-$labels['wednesday'] = 'Trečiadienis';
-$labels['thursday'] = 'Ketvirtadienis';
-$labels['friday'] = 'Penktadienis';
-$labels['saturday'] = 'Šeštadienis';
-$labels['today'] = 'Šiandien';
-$labels['checkmail'] = 'Tikrinti ar nėra naujų laiškų';
-$labels['writenewmessage'] = 'Rašyti naują laišką';
-$labels['replytomessage'] = 'Atsakyti į lašką';
-$labels['replytoallmessage'] = 'Atsakyti visiems';
-$labels['forwardmessage'] = 'Persiųsti laišką';
-$labels['deletemessage'] = 'Ištrinti laišką';
-$labels['movemessagetotrash'] = 'Perkelti laišką į šiukšliadėžę';
-$labels['printmessage'] = 'Atspausdinti laišką';
-$labels['previousmessage'] = 'Rodyti ankstesnį laišką';
-$labels['previousmessages'] = 'Rodyti ankstesius laiškus';
-$labels['firstmessage'] = 'Rodyti pirmąjį laišką';
-$labels['firstmessages'] = 'Rodyti pirmuosius laiškus';
-$labels['nextmessage'] = 'Rodyti tolesnį laišką';
-$labels['nextmessages'] = 'Rodyti tolesnius laiškus';
-$labels['lastmessage'] = 'Rodyti paskutinį laišką';
-$labels['lastmessages'] = 'Rodyti paskutinius laiškus';
-$labels['backtolist'] = 'Grižti į laiškų sarašą';
-$labels['viewsource'] = 'Rodyti šaltinį';
-$labels['markmessages'] = 'Pažymėti laiškus';
-$labels['markread'] = 'Kaip perskaitytus';
-$labels['markunread'] = 'Kaip neperskaitytus';
-$labels['select'] = 'Pažymėti';
-$labels['all'] = 'Visus';
-$labels['none'] = 'Nieko';
-$labels['unread'] = 'Neskaitytas';
-$labels['compact'] = 'Suspausti';
-$labels['empty'] = 'Ištuštinti';
-$labels['purge'] = 'Išvalyti';
-$labels['quota'] = 'Disko naudojimas';
-$labels['unknown'] = 'nežinomas';
-$labels['unlimited'] = 'neribotas';
-$labels['quicksearch'] = 'Greita paieška';
-$labels['resetsearch'] = 'Atšaukti paiešką';
-$labels['compose'] = 'Rašyti nauja laiška';
-$labels['savemessage'] = 'Išsaugoti šį juodraštį';
-$labels['sendmessage'] = 'Išsiųsti laiską';
-$labels['addattachment'] = 'Prisegti bylą';
-$labels['charset'] = 'Koduotė';
-$labels['editortype'] = 'Redagavimo tipas';
-$labels['returnreceipt'] = 'Atgalinis gavėjas';
-$labels['checkspelling'] = 'Tikrinti rašybą';
-$labels['resumeediting'] = 'Tęsti redagavimą';
-$labels['revertto'] = 'Atstatyti į';
-$labels['attachments'] = 'Prisegtos bylos';
-$labels['upload'] = 'Įkelti';
-$labels['close'] = 'Uždaryti';
-$labels['low'] = 'Žemas';
-$labels['lowest'] = 'Žemiausias';
-$labels['normal'] = 'Normalus';
-$labels['high'] = 'Aukštas';
-$labels['highest'] = 'Aukščiausias';
-$labels['nosubject'] = '(nėra temos)';
-$labels['showimages'] = 'Rodyti paveikslėlius';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Paprastas tekstas';
-$labels['addcc'] = 'Pridėti Cc';
-$labels['addbcc'] = 'Pridėti Bcc';
-$labels['addreplyto'] = 'Pridėti Reply-To';
-$labels['mdnrequest'] = 'Žinutės siuntėjas paprašė patvirtinti, kad jūs ją perskaitėte. Ar norite išsiųsti patvirtinimą?';
-$labels['receiptread'] = 'Patvirtinimas (skaitymo)';
-$labels['yourmessage'] = 'Jūsų laiško perskaitymo patvirtinimas';
-$labels['receiptnote'] = 'Pastaba: šis laiško perskaitymo patvirtinimas nurodo, jog laiškas buvo atidarytas gavėjo kompiuteryje, tačiau negarantuoja, jog gavėjas perskaitė ir suprato laiško turinį.';
-$labels['name'] = 'Rodomas vardas';
-$labels['firstname'] = 'Vardas';
-$labels['surname'] = 'Pavardė';
-$labels['email'] = 'El. paštas';
-$labels['addcontact'] = 'Pridėti kontaktą';
-$labels['editcontact'] = 'Redaguoti kontaktą';
-$labels['edit'] = 'Redaguoti';
-$labels['cancel'] = 'Atšaukti';
-$labels['save'] = 'Išsaugoti';
-$labels['delete'] = 'Ištrinti';
-$labels['newcontact'] = 'Sukurti naują kontaktą';
-$labels['deletecontact'] = 'Ištrinti pažymėtus kontaktus';
-$labels['composeto'] = 'Rašyti laišką';
-$labels['contactsfromto'] = 'Kontaktai nuo $from iki $to iš $count';
-$labels['print'] = 'Atspausdinti';
-$labels['export'] = 'Eksportuoti';
-$labels['previouspage'] = 'Rodyti ankstesnį puslapį';
-$labels['firstpage'] = 'Rodyti pirmąjį puslapį';
-$labels['nextpage'] = 'Rodyti tolesnį puslapį';
-$labels['lastpage'] = 'Rodyti paskutinį puslapį';
-$labels['groups'] = 'Grupės';
-$labels['personaladrbook'] = 'Asmeniniai adresai';
-$labels['settingsfor'] = 'Nustatymai';
-$labels['preferences'] = 'Nustatymai';
-$labels['userpreferences'] = 'Vartotojo nustatymai';
-$labels['editpreferences'] = 'Redaguoti vartotojo nustatymus';
-$labels['identities'] = 'Tapatybės';
-$labels['manageidentities'] = 'Tvarkyti tapatybes šiai sąskaitai';
-$labels['newidentity'] = 'Nauja tapatybė';
-$labels['newitem'] = 'Naujas įrašas';
-$labels['edititem'] = 'Redaguoti įrašą';
-$labels['setdefault'] = 'Nustatyti pagrindiniu';
-$labels['language'] = 'Kalba';
-$labels['timezone'] = 'Laiko juosta';
-$labels['pagesize'] = 'Eilučių skaičius puslapyje';
-$labels['signature'] = 'Parašas';
-$labels['dstactive'] = 'Vasaros/Žiemos laikas';
-$labels['htmleditor'] = 'Kurti HTML laiškus';
-$labels['htmlsignature'] = 'HTML parašas';
-$labels['previewpane'] = 'Rodyti peržiūros lauką';
-$labels['autosavedraft'] = 'Automatiškai išsaugoti juodraščius';
-$labels['everynminutes'] = 'kas $n minutes(-ių)';
-$labels['never'] = 'niekada';
-$labels['folder'] = 'Aplankas';
-$labels['folders'] = 'Aplankai';
-$labels['foldername'] = 'Aplanko vardas';
-$labels['subscribed'] = 'Užsakytas';
-$labels['messagecount'] = 'Laiškai';
-$labels['create'] = 'Sukurti';
-$labels['createfolder'] = 'Sukurti naują aplanką';
-$labels['rename'] = 'Pervadinti';
-$labels['renamefolder'] = 'Pervadinti aplanką';
-$labels['deletefolder'] = 'Ištrinti aplanką';
-$labels['managefolders'] = 'Tvarkyti aplankus';
-$labels['sortby'] = 'Rikiuoti pagal';
-$labels['sortasc'] = 'Rikiuoti didėjančia tvarka';
-$labels['sortdesc'] = 'Rikiuoti mažėjančia tvarka';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/lt/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Martynas Bendorius <martynas@evanet.lt> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1128 2008-02-21 07:43:23Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Prisijungti nepavyko';
-$messages['cookiesdisabled'] = 'Jūsų naršyklė nepriima slapukų';
-$messages['sessionerror'] = 'Jūsų sesija negaliojanti';
-$messages['imaperror'] = 'Nepavyko prisijungti prie IMAP serverio';
-$messages['nomessagesfound'] = 'Šioje pašto dėžutėje laiškų nėra ';
-$messages['loggedout'] = 'Jus sėkmingai atsijungėte. Viso gero!';
-$messages['mailboxempty'] = 'Pašto dėžutė tuščia';
-$messages['loading'] = 'Įkeliama...';
-$messages['loadingdata'] = 'Įkeliami duomenys...';
-$messages['checkingmail'] = 'Tikrinama ar nėra naujų pranešimų...';
-$messages['sendingmessage'] = 'Siunčiamas laiškas...';
-$messages['messagesent'] = 'Laiškas sėkmingai nusiųstas';
-$messages['savingmessage'] = 'Išsaugomas laiškas...';
-$messages['messagesaved'] = 'Laiškas išsaugotas į Juodraščius';
-$messages['successfullysaved'] = 'Sėkmingai išsaugota';
-$messages['addedsuccessfully'] = 'Kontaktas sėkmingai įtrauktas į adresų knygą';
-$messages['contactexists'] = 'Kontaktas, turintis šį el. pašto adresą, jau egzistuoja';
-$messages['blockedimages'] = 'Saugant jūsų privatumą su laišku neatsiųsti paveikslėliai nerodomi';
-$messages['encryptedmessage'] = 'Apgailestaujame, tačiau šis laiškas užšifruotas ir negali būti parodytas.';
-$messages['nocontactsfound'] = 'Kontaktų nerasta';
-$messages['contactnotfound'] = 'Reikalautas kontaktas nerastas';
-$messages['sendingfailed'] = 'Laiško išsiųsti nepavyko';
-$messages['errorsaving'] = 'Išsaugant įvyko klaida';
-$messages['errormoving'] = 'Laiško perkelti nepavyko';
-$messages['errordeleting'] = 'Laiško ištrinti nepavyko';
-$messages['deletecontactconfirm'] = 'Ar jūs tikrai norite ištrinti pasirinktą(-us) kontaktą(-us)?';
-$messages['deletemessagesconfirm'] = 'Ar jūs tikrai norite ištrinti pasirinktą(-us) žinutę(-es)?';
-$messages['deletefolderconfirm'] = 'Ar jūs tikrai norite ištrinti šį aplanką?';
-$messages['purgefolderconfirm'] = 'Ar jūs tikrai norite ištrinti visus laiškus, esančius šiame aplanke?';
-$messages['formincomplete'] = 'Šios formos laukai yra nepilnai užpildyti';
-$messages['noemailwarning'] = 'Prašome įvesti teisingą el. pašto adresą';
-$messages['nonamewarning'] = 'Prašome įvesti vardą';
-$messages['nopagesizewarning'] = 'Prašome įvesti puslapio dydį';
-$messages['norecipientwarning'] = 'Prašome įvesti bent vieną gavėją';
-$messages['nosubjectwarning'] = 'Temos laukelis tuščias. Ar norite temą įvesti dabar?';
-$messages['nobodywarning'] = 'Išsiųsti šį laišką be teksto?';
-$messages['notsentwarning'] = 'Laiškas neišsiųstas. Ar jūs tikrai norite jo atsikratyti?';
-$messages['noldapserver'] = 'Prašome pasirinkti LDAP serverį paieškai';
-$messages['nocontactsreturned'] = 'Kontaktas(-ai) nerastas(-i)';
-$messages['nosearchname'] = 'Prašom įvesti vardą arba el. pašto adresą';
-$messages['searchsuccessful'] = 'Surasta $nr žinučių';
-$messages['searchnomatch'] = 'Rezultatų nerasta';
-$messages['searching'] = 'Ieškoma...';
-$messages['checking'] = 'Tikrinama...';
-$messages['nospellerrors'] = 'Rašybos klaidų nerasta';
-$messages['folderdeleted'] = 'Aplankas sėkmingai ištrintas';
-$messages['deletedsuccessfully'] = 'Sėkmingai ištrintas';
-$messages['converting'] = 'Pašalinamas laiško formatavimas...';
-$messages['messageopenerror'] = 'Nepavyko įkelti laišką iš serverio';
-$messages['fileuploaderror'] = 'Nepavyko įkelti bylos';
-$messages['filesizeerror'] = 'Įkelta byla viršija maksimalų vietos limitą — $size';
-$messages['copysuccess'] = 'Sėkmingai nukopijuoti $nr adresai';
-$messages['copyerror'] = 'Adresų kopijuoti negalima';
-$messages['sourceisreadonly'] = 'Šis adreso šaltinis yra tik skaitymui';
-$messages['errorsavingcontact'] = 'Kontakto adreso išsaugoti negalima';
-$messages['movingmessage'] = 'Perkeliamas laiškas...';
-$messages['receiptsent'] = 'Sėkmingai išsiųstas laiško perskaitymo patvirtinimas';
-$messages['errorsendingreceipt'] = 'Nepavyko išsiųsti laiško perskaitymo patvirtinimo';
-$messages['nodeletelastidentity'] = 'Jūs negalite ištrinti šios tapatybės, kadangi ji yra vienintelė likusi.';
-$messages['addsubfolderhint'] = 'Šis aplankas bus sukurtas kaip poaplankis, kurį esate pažymėjęs';
-
-?>
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/lt/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Martynas Bendorius <martynas@evanet.lt> |
++-----------------------------------------------------------------------+'
+
+@version $Id: labels.inc 1445 2008-05-28 09:42:08Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Sveiki atvykę į $product';
+$labels['username'] = 'Vartotojas';
+$labels['password'] = 'Slaptažodis';
+$labels['server'] = 'Serveris';
+$labels['login'] = 'Prisijungti';
+$labels['logout'] = 'Atsijungti';
+$labels['mail'] = 'El. paštas';
+$labels['settings'] = 'Nustatymai';
+$labels['addressbook'] = 'Adresų knyga';
+$labels['inbox'] = 'Gauti';
+$labels['drafts'] = 'Juodraščiai';
+$labels['sent'] = 'Išsiųsti';
+$labels['trash'] = 'Šiukšliadėžė';
+$labels['junk'] = 'Nereikalingi';
+$labels['subject'] = 'Tema';
+$labels['from'] = 'Siuntėjas';
+$labels['to'] = 'Gavėjas';
+$labels['cc'] = 'Kopija';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Atsakyti į';
+$labels['date'] = 'Data';
+$labels['size'] = 'Dydis';
+$labels['priority'] = 'Svarbumas';
+$labels['organization'] = 'Organizacija';
+$labels['reply-to'] = 'Atsakyti į';
+$labels['mailboxlist'] = 'Aplankai';
+$labels['messagesfromto'] = 'Laiškai nuo $from iki $to iš $count';
+$labels['messagenrof'] = 'Laiškas $nr iš $count';
+$labels['moveto'] = 'perkelti į ...';
+$labels['download'] = 'parsisiųsti';
+$labels['filename'] = 'Bylos vardas';
+$labels['filesize'] = 'Bylos dydis';
+$labels['preferhtml'] = 'Rodyti HTML';
+$labels['htmlmessage'] = 'HTML Laiškas';
+$labels['prettydate'] = 'Gražios datos';
+$labels['addtoaddressbook'] = 'Įtraukti į adresų knygą';
+$labels['sun'] = 'Sek';
+$labels['mon'] = 'Pir';
+$labels['tue'] = 'Ant';
+$labels['wed'] = 'Tre';
+$labels['thu'] = 'Ket';
+$labels['fri'] = 'Pen';
+$labels['sat'] = 'Šeš';
+$labels['sunday'] = 'Sekmadienis';
+$labels['monday'] = 'Pirmadienis';
+$labels['tuesday'] = 'Antradienis';
+$labels['wednesday'] = 'Trečiadienis';
+$labels['thursday'] = 'Ketvirtadienis';
+$labels['friday'] = 'Penktadienis';
+$labels['saturday'] = 'Šeštadienis';
+$labels['jan'] = 'Sau';
+$labels['feb'] = 'Vas';
+$labels['mar'] = 'Kov';
+$labels['apr'] = 'Bal';
+$labels['may'] = 'Geg';
+$labels['jun'] = 'Bir';
+$labels['jul'] = 'Lie';
+$labels['aug'] = 'Rugp';
+$labels['sep'] = 'Rugs';
+$labels['oct'] = 'Spa';
+$labels['nov'] = 'Lap';
+$labels['dec'] = 'Gruo';
+$labels['longjan'] = 'Sausis';
+$labels['longfeb'] = 'Vasaris';
+$labels['longmar'] = 'Kovas';
+$labels['longapr'] = 'Balandis';
+$labels['longmay'] = 'Gegužė';
+$labels['longjun'] = 'Biržėlis';
+$labels['longjul'] = 'Liepa';
+$labels['longaug'] = 'Rugpjūtis';
+$labels['longsep'] = 'Rugsėjis';
+$labels['longoct'] = 'Spalis';
+$labels['longnov'] = 'Lapkritis';
+$labels['longdec'] = 'Gruodis';
+$labels['today'] = 'Šiandien';
+$labels['checkmail'] = 'Tikrinti ar nėra naujų laiškų';
+$labels['writenewmessage'] = 'Rašyti naują laišką';
+$labels['replytomessage'] = 'Atsakyti į lašką';
+$labels['replytoallmessage'] = 'Atsakyti visiems';
+$labels['forwardmessage'] = 'Persiųsti laišką';
+$labels['deletemessage'] = 'Ištrinti laišką';
+$labels['movemessagetotrash'] = 'Perkelti laišką į šiukšliadėžę';
+$labels['printmessage'] = 'Atspausdinti laišką';
+$labels['previousmessage'] = 'Rodyti ankstesnį laišką';
+$labels['previousmessages'] = 'Rodyti ankstesius laiškus';
+$labels['firstmessage'] = 'Rodyti pirmąjį laišką';
+$labels['firstmessages'] = 'Rodyti pirmuosius laiškus';
+$labels['nextmessage'] = 'Rodyti tolesnį laišką';
+$labels['nextmessages'] = 'Rodyti tolesnius laiškus';
+$labels['lastmessage'] = 'Rodyti paskutinį laišką';
+$labels['lastmessages'] = 'Rodyti paskutinius laiškus';
+$labels['backtolist'] = 'Grižti į laiškų sarašą';
+$labels['viewsource'] = 'Rodyti šaltinį';
+$labels['markmessages'] = 'Pažymėti laiškus';
+$labels['markread'] = 'Kaip perskaitytus';
+$labels['markunread'] = 'Kaip neperskaitytus';
+$labels['select'] = 'Pažymėti';
+$labels['all'] = 'Visus';
+$labels['none'] = 'Nieko';
+$labels['unread'] = 'Neskaitytas';
+$labels['compact'] = 'Suspausti';
+$labels['empty'] = 'Ištuštinti';
+$labels['purge'] = 'Išvalyti';
+$labels['quota'] = 'Disko naudojimas';
+$labels['unknown'] = 'nežinomas';
+$labels['unlimited'] = 'neribotas';
+$labels['quicksearch'] = 'Greita paieška';
+$labels['resetsearch'] = 'Atšaukti paiešką';
+$labels['compose'] = 'Rašyti nauja laiška';
+$labels['savemessage'] = 'Išsaugoti šį juodraštį';
+$labels['sendmessage'] = 'Išsiųsti laiską';
+$labels['addattachment'] = 'Prisegti bylą';
+$labels['charset'] = 'Koduotė';
+$labels['editortype'] = 'Redagavimo tipas';
+$labels['returnreceipt'] = 'Atgalinis gavėjas';
+$labels['checkspelling'] = 'Tikrinti rašybą';
+$labels['resumeediting'] = 'Tęsti redagavimą';
+$labels['revertto'] = 'Atstatyti į';
+$labels['attachments'] = 'Prisegtos bylos';
+$labels['upload'] = 'Įkelti';
+$labels['close'] = 'Uždaryti';
+$labels['low'] = 'Žemas';
+$labels['lowest'] = 'Žemiausias';
+$labels['normal'] = 'Normalus';
+$labels['high'] = 'Aukštas';
+$labels['highest'] = 'Aukščiausias';
+$labels['nosubject'] = '(nėra temos)';
+$labels['showimages'] = 'Rodyti paveikslėlius';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Paprastas tekstas';
+$labels['addcc'] = 'Pridėti Cc';
+$labels['addbcc'] = 'Pridėti Bcc';
+$labels['addreplyto'] = 'Pridėti Reply-To';
+$labels['mdnrequest'] = 'Žinutės siuntėjas paprašė patvirtinti, kad jūs ją perskaitėte. Ar norite išsiųsti patvirtinimą?';
+$labels['receiptread'] = 'Patvirtinimas (skaitymo)';
+$labels['yourmessage'] = 'Jūsų laiško perskaitymo patvirtinimas';
+$labels['receiptnote'] = 'Pastaba: šis laiško perskaitymo patvirtinimas nurodo, jog laiškas buvo atidarytas gavėjo kompiuteryje, tačiau negarantuoja, jog gavėjas perskaitė ir suprato laiško turinį.';
+$labels['name'] = 'Rodomas vardas';
+$labels['firstname'] = 'Vardas';
+$labels['surname'] = 'Pavardė';
+$labels['email'] = 'El. paštas';
+$labels['addcontact'] = 'Pridėti kontaktą';
+$labels['editcontact'] = 'Redaguoti kontaktą';
+$labels['edit'] = 'Redaguoti';
+$labels['cancel'] = 'Atšaukti';
+$labels['save'] = 'Išsaugoti';
+$labels['delete'] = 'Ištrinti';
+$labels['newcontact'] = 'Sukurti naują kontaktą';
+$labels['deletecontact'] = 'Ištrinti pažymėtus kontaktus';
+$labels['composeto'] = 'Rašyti laišką';
+$labels['contactsfromto'] = 'Kontaktai nuo $from iki $to iš $count';
+$labels['print'] = 'Atspausdinti';
+$labels['export'] = 'Eksportuoti';
+$labels['previouspage'] = 'Rodyti ankstesnį puslapį';
+$labels['firstpage'] = 'Rodyti pirmąjį puslapį';
+$labels['nextpage'] = 'Rodyti tolesnį puslapį';
+$labels['lastpage'] = 'Rodyti paskutinį puslapį';
+$labels['groups'] = 'Grupės';
+$labels['personaladrbook'] = 'Asmeniniai adresai';
+$labels['settingsfor'] = 'Nustatymai';
+$labels['preferences'] = 'Nustatymai';
+$labels['userpreferences'] = 'Vartotojo nustatymai';
+$labels['editpreferences'] = 'Redaguoti vartotojo nustatymus';
+$labels['identities'] = 'Tapatybės';
+$labels['manageidentities'] = 'Tvarkyti tapatybes šiai sąskaitai';
+$labels['newidentity'] = 'Nauja tapatybė';
+$labels['newitem'] = 'Naujas įrašas';
+$labels['edititem'] = 'Redaguoti įrašą';
+$labels['setdefault'] = 'Nustatyti pagrindiniu';
+$labels['language'] = 'Kalba';
+$labels['timezone'] = 'Laiko juosta';
+$labels['pagesize'] = 'Eilučių skaičius puslapyje';
+$labels['signature'] = 'Parašas';
+$labels['dstactive'] = 'Vasaros/Žiemos laikas';
+$labels['htmleditor'] = 'Kurti HTML laiškus';
+$labels['htmlsignature'] = 'HTML parašas';
+$labels['previewpane'] = 'Rodyti peržiūros lauką';
+$labels['logoutclear'] = 'Išvalyti šiukšliadėžę atsijungiant';
+$labels['logoutcompact'] = 'Suspausti Gautus atsijungiant';
+$labels['uisettings'] = 'Vartotojo Aplinka';
+$labels['serversettings'] = 'Serverio Nuostatos';
+$labels['mailboxview'] = 'Pašto Dėžutės Peržiūra';
+$labels['mdnrequests'] = 'Siuntėjo perspėjimai';
+$labels['askuser'] = 'prašyti vartotojo';
+$labels['autosend'] = 'siųsti automatiškai';
+$labels['ignore'] = 'ignoruoti';
+$labels['readwhendeleted'] = 'Pažymėti laišką kaip perskaitytu trinant';
+$labels['flagfordeletion'] = 'Pažymėti laišką trynimui vietoje ištrynimo';
+$labels['autosavedraft'] = 'Automatiškai išsaugoti juodraščius';
+$labels['everynminutes'] = 'kas $n minutes(-ių)';
+$labels['never'] = 'niekada';
+$labels['folder'] = 'Aplankas';
+$labels['folders'] = 'Aplankai';
+$labels['foldername'] = 'Aplanko vardas';
+$labels['subscribed'] = 'Užsakytas';
+$labels['messagecount'] = 'Laiškai';
+$labels['create'] = 'Sukurti';
+$labels['createfolder'] = 'Sukurti naują aplanką';
+$labels['rename'] = 'Pervadinti';
+$labels['renamefolder'] = 'Pervadinti aplanką';
+$labels['deletefolder'] = 'Ištrinti aplanką';
+$labels['managefolders'] = 'Tvarkyti aplankus';
+$labels['sortby'] = 'Rikiuoti pagal';
+$labels['sortasc'] = 'Rikiuoti didėjančia tvarka';
+$labels['sortdesc'] = 'Rikiuoti mažėjančia tvarka';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/lt/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Martynas Bendorius <martynas@evanet.lt> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1128 2008-02-21 07:43:23Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Prisijungti nepavyko';
+$messages['cookiesdisabled'] = 'Jūsų naršyklė nepriima slapukų';
+$messages['sessionerror'] = 'Jūsų sesija negaliojanti';
+$messages['imaperror'] = 'Nepavyko prisijungti prie IMAP serverio';
+$messages['nomessagesfound'] = 'Šioje pašto dėžutėje laiškų nėra ';
+$messages['loggedout'] = 'Jus sėkmingai atsijungėte. Viso gero!';
+$messages['mailboxempty'] = 'Pašto dėžutė tuščia';
+$messages['loading'] = 'Įkeliama...';
+$messages['loadingdata'] = 'Įkeliami duomenys...';
+$messages['checkingmail'] = 'Tikrinama ar nėra naujų pranešimų...';
+$messages['sendingmessage'] = 'Siunčiamas laiškas...';
+$messages['messagesent'] = 'Laiškas sėkmingai nusiųstas';
+$messages['savingmessage'] = 'Išsaugomas laiškas...';
+$messages['messagesaved'] = 'Laiškas išsaugotas į Juodraščius';
+$messages['successfullysaved'] = 'Sėkmingai išsaugota';
+$messages['addedsuccessfully'] = 'Kontaktas sėkmingai įtrauktas į adresų knygą';
+$messages['contactexists'] = 'Kontaktas, turintis šį el. pašto adresą, jau egzistuoja';
+$messages['blockedimages'] = 'Saugant jūsų privatumą su laišku neatsiųsti paveikslėliai nerodomi';
+$messages['encryptedmessage'] = 'Apgailestaujame, tačiau šis laiškas užšifruotas ir negali būti parodytas.';
+$messages['nocontactsfound'] = 'Kontaktų nerasta';
+$messages['contactnotfound'] = 'Reikalautas kontaktas nerastas';
+$messages['sendingfailed'] = 'Laiško išsiųsti nepavyko';
+$messages['errorsaving'] = 'Išsaugant įvyko klaida';
+$messages['errormoving'] = 'Laiško perkelti nepavyko';
+$messages['errordeleting'] = 'Laiško ištrinti nepavyko';
+$messages['deletecontactconfirm'] = 'Ar jūs tikrai norite ištrinti pasirinktą(-us) kontaktą(-us)?';
+$messages['deletemessagesconfirm'] = 'Ar jūs tikrai norite ištrinti pasirinktą(-us) žinutę(-es)?';
+$messages['deletefolderconfirm'] = 'Ar jūs tikrai norite ištrinti šį aplanką?';
+$messages['purgefolderconfirm'] = 'Ar jūs tikrai norite ištrinti visus laiškus, esančius šiame aplanke?';
+$messages['formincomplete'] = 'Šios formos laukai yra nepilnai užpildyti';
+$messages['noemailwarning'] = 'Prašome įvesti teisingą el. pašto adresą';
+$messages['nonamewarning'] = 'Prašome įvesti vardą';
+$messages['nopagesizewarning'] = 'Prašome įvesti puslapio dydį';
+$messages['norecipientwarning'] = 'Prašome įvesti bent vieną gavėją';
+$messages['nosubjectwarning'] = 'Temos laukelis tuščias. Ar norite temą įvesti dabar?';
+$messages['nobodywarning'] = 'Išsiųsti šį laišką be teksto?';
+$messages['notsentwarning'] = 'Laiškas neišsiųstas. Ar jūs tikrai norite jo atsikratyti?';
+$messages['noldapserver'] = 'Prašome pasirinkti LDAP serverį paieškai';
+$messages['nocontactsreturned'] = 'Kontaktas(-ai) nerastas(-i)';
+$messages['nosearchname'] = 'Prašom įvesti vardą arba el. pašto adresą';
+$messages['searchsuccessful'] = 'Surasta $nr žinučių';
+$messages['searchnomatch'] = 'Rezultatų nerasta';
+$messages['searching'] = 'Ieškoma...';
+$messages['checking'] = 'Tikrinama...';
+$messages['nospellerrors'] = 'Rašybos klaidų nerasta';
+$messages['folderdeleted'] = 'Aplankas sėkmingai ištrintas';
+$messages['deletedsuccessfully'] = 'Sėkmingai ištrintas';
+$messages['converting'] = 'Pašalinamas laiško formatavimas...';
+$messages['messageopenerror'] = 'Nepavyko įkelti laišką iš serverio';
+$messages['fileuploaderror'] = 'Nepavyko įkelti bylos';
+$messages['filesizeerror'] = 'Įkelta byla viršija maksimalų vietos limitą — $size';
+$messages['copysuccess'] = 'Sėkmingai nukopijuoti $nr adresai';
+$messages['copyerror'] = 'Adresų kopijuoti negalima';
+$messages['sourceisreadonly'] = 'Šis adreso šaltinis yra tik skaitymui';
+$messages['errorsavingcontact'] = 'Kontakto adreso išsaugoti negalima';
+$messages['movingmessage'] = 'Perkeliamas laiškas...';
+$messages['receiptsent'] = 'Sėkmingai išsiųstas laiško perskaitymo patvirtinimas';
+$messages['errorsendingreceipt'] = 'Nepavyko išsiųsti laiško perskaitymo patvirtinimo';
+$messages['nodeletelastidentity'] = 'Jūs negalite ištrinti šios tapatybės, kadangi ji yra vienintelė likusi.';
+$messages['addsubfolderhint'] = 'Šis aplankas bus sukurtas kaip poaplankis, kurį esate pažymėjęs';
+
+?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/lv/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Rudolfs Osins <dev.random@gmail.com> |
- | Mikelis Zalais <mik@prog.lv> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1093 2008-02-16 11:40:18Z tomekp $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Esiet laipni lūgti $product';
-$labels['username'] = 'Lietotājvārds';
-$labels['password'] = 'Parole';
-$labels['server'] = 'Serveris';
-$labels['login'] = 'Pieslēgties';
-$labels['logout'] = 'Atslēgties';
-$labels['mail'] = 'E-pasts';
-$labels['settings'] = 'Personīgie iestatījumi';
-$labels['addressbook'] = 'Adrešu grāmata';
-$labels['inbox'] = 'Ienākošās';
-$labels['drafts'] = 'Uzmetumi';
-$labels['sent'] = 'Nosūtītās';
-$labels['trash'] = 'Miskaste';
-$labels['junk'] = 'Mēstules';
-$labels['subject'] = 'Temats';
-$labels['from'] = 'No';
-$labels['to'] = 'Kam';
-$labels['cc'] = 'Kopija';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Atbildēt uz';
-$labels['date'] = 'Datums';
-$labels['size'] = 'Izmērs';
-$labels['priority'] = 'Prioritāte';
-$labels['organization'] = 'Organizācija';
-$labels['reply-to'] = 'Atbildēt uz';
-$labels['mailboxlist'] = 'Mapes';
-$labels['messagesfromto'] = 'Vēstules $from līdz $to no $count';
-$labels['messagenrof'] = '$nr. vēstule no $count';
-$labels['moveto'] = 'pārvietot uz...';
-$labels['download'] = 'lejupielādēt';
-$labels['filename'] = 'Faila nosaukums';
-$labels['filesize'] = 'Faila izmērs';
-$labels['preferhtml'] = 'Dot priekšroku HTML';
-$labels['htmlmessage'] = 'HTML vēstule';
-$labels['prettydate'] = '"Skaists" datums';
-$labels['addtoaddressbook'] = 'Pievienot adrešu grāmatai';
-$labels['sun'] = 'Sv';
-$labels['mon'] = 'P';
-$labels['tue'] = 'O';
-$labels['wed'] = 'T';
-$labels['thu'] = 'C';
-$labels['fri'] = 'P';
-$labels['sat'] = 'Se';
-$labels['sunday'] = 'Svētdiena';
-$labels['monday'] = 'Pirmdiena';
-$labels['tuesday'] = 'Otrdiena';
-$labels['wednesday'] = 'Trešdiena';
-$labels['thursday'] = 'Ceturtdiena';
-$labels['friday'] = 'Piektdiena';
-$labels['saturday'] = 'Sestdiena';
-$labels['today'] = 'Šodien';
-$labels['checkmail'] = 'Pārbaudīt pastu';
-$labels['writenewmessage'] = 'Rakstīt jaunu vēstuli';
-$labels['replytomessage'] = 'Atbildēt uz vēstuli';
-$labels['replytoallmessage'] = 'Atbildēt sūtītājam un visiem saņēmējiem';
-$labels['forwardmessage'] = 'Pārsūtīt vēstuli';
-$labels['deletemessage'] = 'Dzēst vēstuli';
-$labels['movemessagetotrash'] = 'Pārvietot vēstuli uz miskasti';
-$labels['printmessage'] = 'Izdrukāt šo vēstuli';
-$labels['previousmessage'] = 'Parādīt iepriekšējo vēstuli';
-$labels['previousmessages'] = 'Parādīt iepriekšējo vēstuļu kopu';
-$labels['firstmessage'] = 'Parādīt pirmo vēstuli';
-$labels['firstmessages'] = 'Parādīt pirmo vēstuļu kopu';
-$labels['nextmessage'] = 'Parādīt nākamo vēstuli';
-$labels['nextmessages'] = 'Parādīt nākamo vēstuļu kopu';
-$labels['lastmessage'] = 'Parādīt pēdējo vēstuli';
-$labels['lastmessages'] = 'Parādīt pēdējo vēstuļu kopu';
-$labels['backtolist'] = 'Atpakaļ uz vēstuļu sarakstu';
-$labels['viewsource'] = 'Rādīt pirmtekstu';
-$labels['markmessages'] = 'Atzīmēt vēstules';
-$labels['markread'] = 'Kā lasītas';
-$labels['markunread'] = 'Kā nelasītas';
-$labels['select'] = 'Iezīmēt';
-$labels['all'] = 'Visas';
-$labels['none'] = 'Nevienu';
-$labels['unread'] = 'Nelasītās';
-$labels['compact'] = 'Saspiest';
-$labels['empty'] = 'Iztukšot';
-$labels['purge'] = 'Iztīrīt';
-$labels['quota'] = 'Kvota';
-$labels['unknown'] = 'nezināms';
-$labels['unlimited'] = 'neierobežots';
-$labels['quicksearch'] = 'Ārtā meklēšana';
-$labels['resetsearch'] = 'Atstatīt meklēšanu';
-$labels['compose'] = 'Rakstīt vēstuli';
-$labels['savemessage'] = 'Saglabāt uzmetumu';
-$labels['sendmessage'] = 'Sūtīt vēstuli';
-$labels['addattachment'] = 'Pievienot failu';
-$labels['charset'] = 'Rakstzīmju kopa';
-$labels['editortype'] = 'Redaktora tips';
-$labels['returnreceipt'] = 'Saņemšanas apstiprinājums';
-$labels['checkspelling'] = 'Pārbaudīt pareizrakstību';
-$labels['resumeediting'] = 'Turpināt rediģēšanu';
-$labels['revertto'] = 'Atgriezt uz';
-$labels['attachments'] = 'Pielikumi';
-$labels['upload'] = 'Augšupielādēt';
-$labels['close'] = 'Aizvērt';
-$labels['low'] = 'Zema';
-$labels['lowest'] = 'Zemākā';
-$labels['normal'] = 'Normāla';
-$labels['high'] = 'Augsta';
-$labels['highest'] = 'Augstākā';
-$labels['nosubject'] = '(no subject)';
-$labels['showimages'] = 'Rādīt attēlus';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Vienkāršs teksts';
-$labels['addcc'] = 'Pievienot Cc';
-$labels['addbcc'] = 'Pievienot Bcc';
-$labels['addreplyto'] = 'Pievienot Reply-To';
-$labels['mdnrequest'] = 'Šīs vēstules sūtītājs vēlas redzēt vēstules saņemšanas apstiprinājumu. Vai jūs vēlaties nosūtīt apstiprinājumu?';
-$labels['receiptread'] = 'Saņemšanas apstiprinājums';
-$labels['yourmessage'] = 'Šīs ir jūsu vēstules saņemšanas apstiprinājums';
-$labels['receiptnote'] = 'Piezīme: Šīs apsiprinājums nozīmē tikai to, ka vēstule tika parādīta uz saņēmāja datora. Tas nenozīmē, ka saņēmējs ir izlasījis vai izpratis vēstules saturu.';
-$labels['name'] = 'Uzrādītais vārds';
-$labels['firstname'] = 'Vārds';
-$labels['surname'] = 'Uzvārds';
-$labels['email'] = 'E-pasts';
-$labels['addcontact'] = 'Pievienot iezīmēto ierakstu adrešu grāmatai';
-$labels['editcontact'] = 'Rediģēt adrešu grāmatas ierakstu';
-$labels['edit'] = 'Rediģēt';
-$labels['cancel'] = 'Atcelt';
-$labels['save'] = 'Saglabāt';
-$labels['delete'] = 'Dzēst';
-$labels['newcontact'] = 'Izveidot jaunu ierakstu adrešu grāmatā';
-$labels['deletecontact'] = 'Dzēst iezīmētos ierakstus';
-$labels['composeto'] = 'Rakstīt vēstuli';
-$labels['contactsfromto'] = 'Ieraksti $from līdz $to no $count';
-$labels['print'] = 'Drukāt';
-$labels['export'] = 'Eksportēt';
-$labels['previouspage'] = 'Parādīt iepriekšējo kopu';
-$labels['firstpage'] = 'Parādīt pirmo kopu';
-$labels['nextpage'] = 'Parādīt nākamo kopu';
-$labels['lastpage'] = 'Parādīt pēdējo kopu';
-$labels['groups'] = 'Grupas';
-$labels['personaladrbook'] = 'Personīgās adreses';
-$labels['settingsfor'] = 'Iestatījumi';
-$labels['preferences'] = 'Preferences';
-$labels['userpreferences'] = 'Lietotāja preferences';
-$labels['editpreferences'] = 'Rediģēt lietotāja preferences';
-$labels['identities'] = 'Identitātes';
-$labels['manageidentities'] = 'Rediģēt šī konta identitātes';
-$labels['newidentity'] = 'Jauna identitāte';
-$labels['newitem'] = 'Jauns';
-$labels['edititem'] = 'Rediģēt';
-$labels['setdefault'] = 'Uzlikt kā noklusēto';
-$labels['language'] = 'Valoda';
-$labels['timezone'] = 'Laika zona';
-$labels['pagesize'] = 'Rindas lapā';
-$labels['signature'] = 'Paraksts';
-$labels['dstactive'] = 'Vasaras/ziemas laiks';
-$labels['htmleditor'] = 'Rakstīt HTML vēstules';
-$labels['htmlsignature'] = 'HTML paraksts';
-$labels['previewpane'] = 'Rādīt priekšskatījuma paneli';
-$labels['autosavedraft'] = 'Automātiski saglabāt uzmetumu';
-$labels['everynminutes'] = 'katras $n minūtes';
-$labels['never'] = 'nekad';
-$labels['folder'] = 'Mape';
-$labels['folders'] = 'Mapes';
-$labels['foldername'] = 'Mapes nosaukums';
-$labels['subscribed'] = 'Abonētās';
-$labels['messagecount'] = 'Vēstules';
-$labels['create'] = 'Izveidot';
-$labels['createfolder'] = 'Izveidot jaunu mapi';
-$labels['rename'] = 'Pārsaukt';
-$labels['renamefolder'] = 'Pārsaukt mapi';
-$labels['deletefolder'] = 'Dzēst mapi';
-$labels['managefolders'] = 'Rediģēt mapes';
-$labels['sortby'] = 'Kārtot pēc';
-$labels['sortasc'] = 'Kārtot augošā secībā';
-$labels['sortdesc'] = 'Kārtot dilstošā secībā';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/lv/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Rudolfs Osins <dev.random@gmail.com> |
- | Mikelis Zalais <mik@prog.lv> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1093 2008-02-16 11:40:18Z tomekp $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Neizdevās pieslēgties';
-$messages['cookiesdisabled'] = 'Jūsu pārlūkprogramma neatbalsta sīkdatnes (cookies)';
-$messages['sessionerror'] = 'Jūsu sessija ir beigusies';
-$messages['imaperror'] = 'Neizdevās pieslēgties IMAP serverim';
-$messages['nomessagesfound'] = 'Šajā pastkastē nav vēstuļu';
-$messages['loggedout'] = 'Jūs esat veiksmīgi atslēdzies';
-$messages['mailboxempty'] = 'Pastkaste tukša';
-$messages['loading'] = 'Notiek ielāde...';
-$messages['loadingdata'] = 'Tiek ielādēti dati...';
-$messages['checkingmail'] = 'Notiek pasta pārbaude...';
-$messages['sendingmessage'] = 'Tiek sūtīta vēstule...';
-$messages['messagesent'] = 'Vēstule nosūtīta veiksmīgi';
-$messages['savingmessage'] = 'Vēstule tiek saglabāta...';
-$messages['messagesaved'] = 'Vēstule saglabāta pie uzmetumiem';
-$messages['successfullysaved'] = 'Saglabāts veiksmīgi';
-$messages['addedsuccessfully'] = 'Ieraksts veiksmīgi pievienots adrešu grāmatai';
-$messages['contactexists'] = 'Ieraksts ar šādu e-pasta adresi jau eksistē';
-$messages['blockedimages'] = 'Drošības nolūkos attēli, kas tiek ielādēti no cita servera, šajā vēstulē ir bloķēti';
-$messages['encryptedmessage'] = 'Šī ir šifrēta vēstule un diemžēl nevar tikt parādīta';
-$messages['nocontactsfound'] = 'Ieraksti netika atrasti';
-$messages['contactnotfound'] = 'Prasītais kontakts nav atrasts';
-$messages['sendingfailed'] = 'Vēstule netika nosūtīta';
-$messages['errorsaving'] = 'Saglabājot vēstuli notikusi kļūme, vēstule netika saglabāta';
-$messages['errormoving'] = 'Vēstule netika pārvietota';
-$messages['errordeleting'] = 'Vēstule netika dzēsta';
-$messages['deletecontactconfirm'] = 'Vai tiešām vēlaties dzēst iezīmēto(ās) kontaktpersonas?';
-$messages['deletemessagesconfirm'] = 'Vai tiešām vēlaties dzēst iezīmēto(ās) vēstules?';
-$messages['deletefolderconfirm'] = 'Vai tiešām vēlaties dzēst šo mapi?';
-$messages['purgefolderconfirm'] = 'Vai tiešām vēlaties dzēst visas vēstules, kas atrodas šajā mapē?';
-$messages['formincomplete'] = 'Formulārs nav pilnībā aizpildīts';
-$messages['noemailwarning'] = 'Lūdzu ievadiet pareizu e-pasta adresi';
-$messages['nonamewarning'] = 'Lūdzu ievadiet vārdu';
-$messages['nopagesizewarning'] = 'Lūdzu ievadiet lapas izmēru';
-$messages['norecipientwarning'] = 'Lūdzu ievadiet vismaz vienu saņēmēju';
-$messages['nosubjectwarning'] = 'Lauks "temats" ir tukšs. Vai vēlaties to aizpildīt tagad?';
-$messages['nobodywarning'] = 'Sūtīt vēstuli bez satura teksta?';
-$messages['notsentwarning'] = 'Vēstule netika nosūtīta. Vai vēlaties atmest savu vēstuli?';
-$messages['noldapserver'] = 'Lūdzu izvēlaties LDAP serveri';
-$messages['nocontactsreturned'] = 'Neviena kontaktpersona netika atrasta';
-$messages['nosearchname'] = 'Lūdzu ievadiet kontaktpersonas vārdu vai e-pasta adresi';
-$messages['searchsuccessful'] = 'Atrastas $nr vēstules';
-$messages['searchnomatch'] = 'Meklēšanā nekas netika atrasts';
-$messages['searching'] = 'Notiek meklēšana...';
-$messages['checking'] = 'Notiek pārbaude...';
-$messages['nospellerrors'] = 'Netika atrastas pareizrakstības kļudas';
-$messages['folderdeleted'] = 'Mape veiksmīgi izdzēsta';
-$messages['deletedsuccessfully'] = 'Veiksmīgi izdzēsts';
-$messages['converting'] = 'Tiek novākts vēstules formatējums...';
-$messages['messageopenerror'] = 'Nevarēja ielādēt vēstuli no servera';
-$messages['fileuploaderror'] = 'Neizdevās ielādēt failu';
-$messages['filesizeerror'] = 'Ielādētais fails pārsniedz pieļaujamo $size apjomu';
-$messages['copysuccess'] = 'Veiksmīgi nokopētas $nr vēstules';
-$messages['copyerror'] = 'Nevarēja nokopēt nevienu adresi';
-$messages['sourceisreadonly'] = 'Adreses avots ir lasīšanas režīmā tikai';
-$messages['errorsavingcontact'] = 'Nevarēja saglabāt kontakta adreses';
-$messages['movingmessage'] = 'Pārvietoju vēstules...';
-$messages['receiptsent'] = 'Saņemšanas apstiprinājums nosūtīts';
-$messages['errorsendingreceipt'] = 'Neizdevās nosūtīt apstiprinājumu';
-$messages['nodeletelastidentity'] = 'Šo identitāti nevar izdzēst, tā ir pati pēdējā.';
-$messages['addsubfolderhint'] = 'Šis folderis tiks izveidots kā apakšfolderis tam, kurš patreiz ir izvēlēts';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/lv/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Rudolfs Osins <dev.random@gmail.com> |
+ | Mikelis Zalais <mik@prog.lv> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1093 2008-02-16 11:40:18Z tomekp $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Esiet laipni lūgti $product';
+$labels['username'] = 'Lietotājvārds';
+$labels['password'] = 'Parole';
+$labels['server'] = 'Serveris';
+$labels['login'] = 'Pieslēgties';
+$labels['logout'] = 'Atslēgties';
+$labels['mail'] = 'E-pasts';
+$labels['settings'] = 'Personīgie iestatījumi';
+$labels['addressbook'] = 'Adrešu grāmata';
+$labels['inbox'] = 'Ienākošās';
+$labels['drafts'] = 'Uzmetumi';
+$labels['sent'] = 'Nosūtītās';
+$labels['trash'] = 'Miskaste';
+$labels['junk'] = 'Mēstules';
+$labels['subject'] = 'Temats';
+$labels['from'] = 'No';
+$labels['to'] = 'Kam';
+$labels['cc'] = 'Kopija';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Atbildēt uz';
+$labels['date'] = 'Datums';
+$labels['size'] = 'Izmērs';
+$labels['priority'] = 'Prioritāte';
+$labels['organization'] = 'Organizācija';
+$labels['reply-to'] = 'Atbildēt uz';
+$labels['mailboxlist'] = 'Mapes';
+$labels['messagesfromto'] = 'Vēstules $from līdz $to no $count';
+$labels['messagenrof'] = '$nr. vēstule no $count';
+$labels['moveto'] = 'pārvietot uz...';
+$labels['download'] = 'lejupielādēt';
+$labels['filename'] = 'Faila nosaukums';
+$labels['filesize'] = 'Faila izmērs';
+$labels['preferhtml'] = 'Dot priekšroku HTML';
+$labels['htmlmessage'] = 'HTML vēstule';
+$labels['prettydate'] = '"Skaists" datums';
+$labels['addtoaddressbook'] = 'Pievienot adrešu grāmatai';
+$labels['sun'] = 'Sv';
+$labels['mon'] = 'P';
+$labels['tue'] = 'O';
+$labels['wed'] = 'T';
+$labels['thu'] = 'C';
+$labels['fri'] = 'P';
+$labels['sat'] = 'Se';
+$labels['sunday'] = 'Svētdiena';
+$labels['monday'] = 'Pirmdiena';
+$labels['tuesday'] = 'Otrdiena';
+$labels['wednesday'] = 'Trešdiena';
+$labels['thursday'] = 'Ceturtdiena';
+$labels['friday'] = 'Piektdiena';
+$labels['saturday'] = 'Sestdiena';
+$labels['today'] = 'Šodien';
+$labels['checkmail'] = 'Pārbaudīt pastu';
+$labels['writenewmessage'] = 'Rakstīt jaunu vēstuli';
+$labels['replytomessage'] = 'Atbildēt uz vēstuli';
+$labels['replytoallmessage'] = 'Atbildēt sūtītājam un visiem saņēmējiem';
+$labels['forwardmessage'] = 'Pārsūtīt vēstuli';
+$labels['deletemessage'] = 'Dzēst vēstuli';
+$labels['movemessagetotrash'] = 'Pārvietot vēstuli uz miskasti';
+$labels['printmessage'] = 'Izdrukāt šo vēstuli';
+$labels['previousmessage'] = 'Parādīt iepriekšējo vēstuli';
+$labels['previousmessages'] = 'Parādīt iepriekšējo vēstuļu kopu';
+$labels['firstmessage'] = 'Parādīt pirmo vēstuli';
+$labels['firstmessages'] = 'Parādīt pirmo vēstuļu kopu';
+$labels['nextmessage'] = 'Parādīt nākamo vēstuli';
+$labels['nextmessages'] = 'Parādīt nākamo vēstuļu kopu';
+$labels['lastmessage'] = 'Parādīt pēdējo vēstuli';
+$labels['lastmessages'] = 'Parādīt pēdējo vēstuļu kopu';
+$labels['backtolist'] = 'Atpakaļ uz vēstuļu sarakstu';
+$labels['viewsource'] = 'Rādīt pirmtekstu';
+$labels['markmessages'] = 'Atzīmēt vēstules';
+$labels['markread'] = 'Kā lasītas';
+$labels['markunread'] = 'Kā nelasītas';
+$labels['select'] = 'Iezīmēt';
+$labels['all'] = 'Visas';
+$labels['none'] = 'Nevienu';
+$labels['unread'] = 'Nelasītās';
+$labels['compact'] = 'Saspiest';
+$labels['empty'] = 'Iztukšot';
+$labels['purge'] = 'Iztīrīt';
+$labels['quota'] = 'Kvota';
+$labels['unknown'] = 'nezināms';
+$labels['unlimited'] = 'neierobežots';
+$labels['quicksearch'] = 'Ārtā meklēšana';
+$labels['resetsearch'] = 'Atstatīt meklēšanu';
+$labels['compose'] = 'Rakstīt vēstuli';
+$labels['savemessage'] = 'Saglabāt uzmetumu';
+$labels['sendmessage'] = 'Sūtīt vēstuli';
+$labels['addattachment'] = 'Pievienot failu';
+$labels['charset'] = 'Rakstzīmju kopa';
+$labels['editortype'] = 'Redaktora tips';
+$labels['returnreceipt'] = 'Saņemšanas apstiprinājums';
+$labels['checkspelling'] = 'Pārbaudīt pareizrakstību';
+$labels['resumeediting'] = 'Turpināt rediģēšanu';
+$labels['revertto'] = 'Atgriezt uz';
+$labels['attachments'] = 'Pielikumi';
+$labels['upload'] = 'Augšupielādēt';
+$labels['close'] = 'Aizvērt';
+$labels['low'] = 'Zema';
+$labels['lowest'] = 'Zemākā';
+$labels['normal'] = 'Normāla';
+$labels['high'] = 'Augsta';
+$labels['highest'] = 'Augstākā';
+$labels['nosubject'] = '(no subject)';
+$labels['showimages'] = 'Rādīt attēlus';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Vienkāršs teksts';
+$labels['addcc'] = 'Pievienot Cc';
+$labels['addbcc'] = 'Pievienot Bcc';
+$labels['addreplyto'] = 'Pievienot Reply-To';
+$labels['mdnrequest'] = 'Šīs vēstules sūtītājs vēlas redzēt vēstules saņemšanas apstiprinājumu. Vai jūs vēlaties nosūtīt apstiprinājumu?';
+$labels['receiptread'] = 'Saņemšanas apstiprinājums';
+$labels['yourmessage'] = 'Šīs ir jūsu vēstules saņemšanas apstiprinājums';
+$labels['receiptnote'] = 'Piezīme: Šīs apsiprinājums nozīmē tikai to, ka vēstule tika parādīta uz saņēmāja datora. Tas nenozīmē, ka saņēmējs ir izlasījis vai izpratis vēstules saturu.';
+$labels['name'] = 'Uzrādītais vārds';
+$labels['firstname'] = 'Vārds';
+$labels['surname'] = 'Uzvārds';
+$labels['email'] = 'E-pasts';
+$labels['addcontact'] = 'Pievienot iezīmēto ierakstu adrešu grāmatai';
+$labels['editcontact'] = 'Rediģēt adrešu grāmatas ierakstu';
+$labels['edit'] = 'Rediģēt';
+$labels['cancel'] = 'Atcelt';
+$labels['save'] = 'Saglabāt';
+$labels['delete'] = 'Dzēst';
+$labels['newcontact'] = 'Izveidot jaunu ierakstu adrešu grāmatā';
+$labels['deletecontact'] = 'Dzēst iezīmētos ierakstus';
+$labels['composeto'] = 'Rakstīt vēstuli';
+$labels['contactsfromto'] = 'Ieraksti $from līdz $to no $count';
+$labels['print'] = 'Drukāt';
+$labels['export'] = 'Eksportēt';
+$labels['previouspage'] = 'Parādīt iepriekšējo kopu';
+$labels['firstpage'] = 'Parādīt pirmo kopu';
+$labels['nextpage'] = 'Parādīt nākamo kopu';
+$labels['lastpage'] = 'Parādīt pēdējo kopu';
+$labels['groups'] = 'Grupas';
+$labels['personaladrbook'] = 'Personīgās adreses';
+$labels['settingsfor'] = 'Iestatījumi';
+$labels['preferences'] = 'Preferences';
+$labels['userpreferences'] = 'Lietotāja preferences';
+$labels['editpreferences'] = 'Rediģēt lietotāja preferences';
+$labels['identities'] = 'Identitātes';
+$labels['manageidentities'] = 'Rediģēt šī konta identitātes';
+$labels['newidentity'] = 'Jauna identitāte';
+$labels['newitem'] = 'Jauns';
+$labels['edititem'] = 'Rediģēt';
+$labels['setdefault'] = 'Uzlikt kā noklusēto';
+$labels['language'] = 'Valoda';
+$labels['timezone'] = 'Laika zona';
+$labels['pagesize'] = 'Rindas lapā';
+$labels['signature'] = 'Paraksts';
+$labels['dstactive'] = 'Vasaras/ziemas laiks';
+$labels['htmleditor'] = 'Rakstīt HTML vēstules';
+$labels['htmlsignature'] = 'HTML paraksts';
+$labels['previewpane'] = 'Rādīt priekšskatījuma paneli';
+$labels['autosavedraft'] = 'Automātiski saglabāt uzmetumu';
+$labels['everynminutes'] = 'katras $n minūtes';
+$labels['never'] = 'nekad';
+$labels['folder'] = 'Mape';
+$labels['folders'] = 'Mapes';
+$labels['foldername'] = 'Mapes nosaukums';
+$labels['subscribed'] = 'Abonētās';
+$labels['messagecount'] = 'Vēstules';
+$labels['create'] = 'Izveidot';
+$labels['createfolder'] = 'Izveidot jaunu mapi';
+$labels['rename'] = 'Pārsaukt';
+$labels['renamefolder'] = 'Pārsaukt mapi';
+$labels['deletefolder'] = 'Dzēst mapi';
+$labels['managefolders'] = 'Rediģēt mapes';
+$labels['sortby'] = 'Kārtot pēc';
+$labels['sortasc'] = 'Kārtot augošā secībā';
+$labels['sortdesc'] = 'Kārtot dilstošā secībā';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/lv/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Rudolfs Osins <dev.random@gmail.com> |
+ | Mikelis Zalais <mik@prog.lv> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1093 2008-02-16 11:40:18Z tomekp $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Neizdevās pieslēgties';
+$messages['cookiesdisabled'] = 'Jūsu pārlūkprogramma neatbalsta sīkdatnes (cookies)';
+$messages['sessionerror'] = 'Jūsu sessija ir beigusies';
+$messages['imaperror'] = 'Neizdevās pieslēgties IMAP serverim';
+$messages['nomessagesfound'] = 'Šajā pastkastē nav vēstuļu';
+$messages['loggedout'] = 'Jūs esat veiksmīgi atslēdzies';
+$messages['mailboxempty'] = 'Pastkaste tukša';
+$messages['loading'] = 'Notiek ielāde...';
+$messages['loadingdata'] = 'Tiek ielādēti dati...';
+$messages['checkingmail'] = 'Notiek pasta pārbaude...';
+$messages['sendingmessage'] = 'Tiek sūtīta vēstule...';
+$messages['messagesent'] = 'Vēstule nosūtīta veiksmīgi';
+$messages['savingmessage'] = 'Vēstule tiek saglabāta...';
+$messages['messagesaved'] = 'Vēstule saglabāta pie uzmetumiem';
+$messages['successfullysaved'] = 'Saglabāts veiksmīgi';
+$messages['addedsuccessfully'] = 'Ieraksts veiksmīgi pievienots adrešu grāmatai';
+$messages['contactexists'] = 'Ieraksts ar šādu e-pasta adresi jau eksistē';
+$messages['blockedimages'] = 'Drošības nolūkos attēli, kas tiek ielādēti no cita servera, šajā vēstulē ir bloķēti';
+$messages['encryptedmessage'] = 'Šī ir šifrēta vēstule un diemžēl nevar tikt parādīta';
+$messages['nocontactsfound'] = 'Ieraksti netika atrasti';
+$messages['contactnotfound'] = 'Prasītais kontakts nav atrasts';
+$messages['sendingfailed'] = 'Vēstule netika nosūtīta';
+$messages['errorsaving'] = 'Saglabājot vēstuli notikusi kļūme, vēstule netika saglabāta';
+$messages['errormoving'] = 'Vēstule netika pārvietota';
+$messages['errordeleting'] = 'Vēstule netika dzēsta';
+$messages['deletecontactconfirm'] = 'Vai tiešām vēlaties dzēst iezīmēto(ās) kontaktpersonas?';
+$messages['deletemessagesconfirm'] = 'Vai tiešām vēlaties dzēst iezīmēto(ās) vēstules?';
+$messages['deletefolderconfirm'] = 'Vai tiešām vēlaties dzēst šo mapi?';
+$messages['purgefolderconfirm'] = 'Vai tiešām vēlaties dzēst visas vēstules, kas atrodas šajā mapē?';
+$messages['formincomplete'] = 'Formulārs nav pilnībā aizpildīts';
+$messages['noemailwarning'] = 'Lūdzu ievadiet pareizu e-pasta adresi';
+$messages['nonamewarning'] = 'Lūdzu ievadiet vārdu';
+$messages['nopagesizewarning'] = 'Lūdzu ievadiet lapas izmēru';
+$messages['norecipientwarning'] = 'Lūdzu ievadiet vismaz vienu saņēmēju';
+$messages['nosubjectwarning'] = 'Lauks "temats" ir tukšs. Vai vēlaties to aizpildīt tagad?';
+$messages['nobodywarning'] = 'Sūtīt vēstuli bez satura teksta?';
+$messages['notsentwarning'] = 'Vēstule netika nosūtīta. Vai vēlaties atmest savu vēstuli?';
+$messages['noldapserver'] = 'Lūdzu izvēlaties LDAP serveri';
+$messages['nocontactsreturned'] = 'Neviena kontaktpersona netika atrasta';
+$messages['nosearchname'] = 'Lūdzu ievadiet kontaktpersonas vārdu vai e-pasta adresi';
+$messages['searchsuccessful'] = 'Atrastas $nr vēstules';
+$messages['searchnomatch'] = 'Meklēšanā nekas netika atrasts';
+$messages['searching'] = 'Notiek meklēšana...';
+$messages['checking'] = 'Notiek pārbaude...';
+$messages['nospellerrors'] = 'Netika atrastas pareizrakstības kļudas';
+$messages['folderdeleted'] = 'Mape veiksmīgi izdzēsta';
+$messages['deletedsuccessfully'] = 'Veiksmīgi izdzēsts';
+$messages['converting'] = 'Tiek novākts vēstules formatējums...';
+$messages['messageopenerror'] = 'Nevarēja ielādēt vēstuli no servera';
+$messages['fileuploaderror'] = 'Neizdevās ielādēt failu';
+$messages['filesizeerror'] = 'Ielādētais fails pārsniedz pieļaujamo $size apjomu';
+$messages['copysuccess'] = 'Veiksmīgi nokopētas $nr vēstules';
+$messages['copyerror'] = 'Nevarēja nokopēt nevienu adresi';
+$messages['sourceisreadonly'] = 'Adreses avots ir lasīšanas režīmā tikai';
+$messages['errorsavingcontact'] = 'Nevarēja saglabāt kontakta adreses';
+$messages['movingmessage'] = 'Pārvietoju vēstules...';
+$messages['receiptsent'] = 'Saņemšanas apstiprinājums nosūtīts';
+$messages['errorsendingreceipt'] = 'Neizdevās nosūtīt apstiprinājumu';
+$messages['nodeletelastidentity'] = 'Šo identitāti nevar izdzēst, tā ir pati pēdējā.';
+$messages['addsubfolderhint'] = 'Šis folderis tiks izveidots kā apakšfolderis tam, kurš patreiz ir izvēlēts';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-\r
-/*\r
- +-----------------------------------------------------------------------+\r
- | language/mk/labels.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Ivan Mishev - mishevivan@gmail.com |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$labels = array();\r
-$labels['welcome'] = 'Добредојдовте во $product';\r
-$labels['username'] = 'Корисничко Име';\r
-$labels['password'] = 'Лозинка';\r
-$labels['server'] = 'Сервер';\r
-$labels['login'] = 'Логирај Се';\r
-$labels['logout'] = 'Одлогирај Се';\r
-$labels['mail'] = 'Е-Маил';\r
-$labels['settings'] = 'Подесувања';\r
-$labels['addressbook'] = 'Именик';\r
-$labels['inbox'] = 'Пошта';\r
-$labels['drafts'] = 'Непратени';\r
-$labels['sent'] = 'Пратени';\r
-$labels['trash'] = 'Корпа';\r
-$labels['junk'] = 'Ѓубре';\r
-$labels['subject'] = 'Наслов';\r
-$labels['from'] = 'Праќач';\r
-$labels['to'] = 'Примач';\r
-$labels['cc'] = 'Копирај';\r
-$labels['bcc'] = 'Bcc';\r
-$labels['replyto'] = 'Препрати на';\r
-$labels['date'] = 'Дата';\r
-$labels['size'] = 'Големина';\r
-$labels['priority'] = 'Приоритет';\r
-$labels['organization'] = 'Организација';\r
-$labels['reply-to'] = 'Препрати на';\r
-$labels['mailboxlist'] = 'Папки';\r
-$labels['messagesfromto'] = '$count пораки од $from';\r
-$labels['messagenrof'] = '$nr порака од $count';\r
-$labels['moveto'] = 'Премести во...';\r
-$labels['download'] = 'сними';\r
-$labels['filename'] = 'Име на датотеката';\r
-$labels['filesize'] = 'Големина на датотеката';\r
-$labels['preferhtml'] = 'Прикажи во HTML';\r
-$labels['htmlmessage'] = 'HTML Порака';\r
-$labels['prettydate'] = 'Убави дати';\r
-$labels['addtoaddressbook'] = 'Додади во именик';\r
-$labels['sun'] = 'Нед';\r
-$labels['mon'] = 'Пон';\r
-$labels['tue'] = 'Вто';\r
-$labels['wed'] = 'Сре';\r
-$labels['thu'] = 'Чет';\r
-$labels['fri'] = 'Пет';\r
-$labels['sat'] = 'Саб';\r
-$labels['sunday'] = 'Недела';\r
-$labels['monday'] = 'Понеделник';\r
-$labels['tuesday'] = 'Вторник';\r
-$labels['wednesday'] = 'Среда';\r
-$labels['thursday'] = 'Четврток';\r
-$labels['friday'] = 'Петок';\r
-$labels['saturday'] = 'Сабота';\r
-$labels['today'] = 'Денес';\r
-$labels['checkmail'] = 'Провери пошта';\r
-$labels['writenewmessage'] = 'Нова порака';\r
-$labels['replytomessage'] = 'Одговори на пораката';\r
-$labels['replytoallmessage'] = 'Одговори на сите';\r
-$labels['forwardmessage'] = 'Препрати ја пораката';\r
-$labels['deletemessage'] = 'Премести ја пораката во Корпа';\r
-$labels['movemessagetotrash'] = 'Премести ги пораките во Канта';\r
-$labels['printmessage'] = 'За печатење';\r
-$labels['previousmessage'] = 'Прикажи ја претходната порака';\r
-$labels['previousmessages'] = 'Прикажи ги претходните пораки';\r
-$labels['firstmessage'] = 'Прикажи ја првата порака';\r
-$labels['firstmessages'] = 'Прикажи ги првите пораки';\r
-$labels['nextmessage'] = 'Прикажи ја наредната порака';\r
-$labels['nextmessages'] = 'Прикажи ги следните пораки';\r
-$labels['lastmessage'] = 'Прикажи ја последната порака';\r
-$labels['lastmessages'] = 'Прикажи ги последните пораки';\r
-$labels['backtolist'] = 'Врати се во поштенското сандаче';\r
-$labels['viewsource'] = 'Покажи го изворот на пракање';\r
-$labels['markmessages'] = 'Обележи ги пораките';\r
-$labels['markread'] = 'Како прочитани';\r
-$labels['markunread'] = 'Како непрочитани';\r
-$labels['select'] = 'Одбележи';\r
-$labels['all'] = 'Сите';\r
-$labels['none'] = 'Никоја';\r
-$labels['unread'] = 'Непрочитани';\r
-$labels['compact'] = 'Уредно';\r
-$labels['empty'] = 'Испразни';\r
-$labels['purge'] = 'Чистење';\r
-$labels['quota'] = 'Искористен простор';\r
-$labels['unknown'] = 'непознато';\r
-$labels['unlimited'] = 'неограничено';\r
-$labels['quicksearch'] = 'Брзо претражување';\r
-$labels['resetsearch'] = 'Ново претражување';\r
-$labels['compose'] = 'Нова порака';\r
-$labels['savemessage'] = 'Снимај ја пораката во Непратени';\r
-$labels['sendmessage'] = 'Прати ја пораката';\r
-$labels['addattachment'] = 'Прикачи фајл';\r
-$labels['charset'] = 'Charset';\r
-$labels['editortype'] = 'Тип на едитор';\r
-$labels['returnreceipt'] = 'Врати ';\r
-$labels['checkspelling'] = 'Провери спелување';\r
-$labels['resumeediting'] = 'Продолжи со уредување';\r
-$labels['revertto'] = 'Обрати се на';\r
-$labels['attachments'] = 'Прикачено';\r
-$labels['upload'] = 'Прикачи';\r
-$labels['close'] = 'Затвори';\r
-$labels['low'] = 'Низок';\r
-$labels['lowest'] = 'Најнизок';\r
-$labels['normal'] = 'Нормален';\r
-$labels['high'] = 'Висок';\r
-$labels['highest'] = 'Највисок';\r
-$labels['nosubject'] = '(нема тема)';\r
-$labels['showimages'] = 'Прикажи ги сликите';\r
-$labels['htmltoggle'] = 'HTML';\r
-$labels['plaintoggle'] = 'Обичен текст';\r
-$labels['addcc'] = 'Додај Cc';\r
-$labels['addbcc'] = 'Додај Bcc';\r
-$labels['addreplyto'] = 'Додај Одговори-На';\r
-$labels['mdnrequest'] = 'Праќачот на оваа порака сака да добие известување кога ќе ја прочитате пораката. Дали сакате да го известите?';\r
-$labels['receiptread'] = 'Извести (читај)';\r
-$labels['yourmessage'] = 'Ова е известување за вашата порака';\r
-$labels['receiptnote'] = 'Забелешка: Ова известување само потврдува дека пораката која сте ја пратиле е отворена. Не е гаранција дека примачот ја прочитал или ја разбрал истата.';\r
-$labels['name'] = 'Прикажано име';\r
-$labels['firstname'] = 'Име';\r
-$labels['surname'] = 'Презиме';\r
-$labels['email'] = 'Е-маил';\r
-$labels['addcontact'] = 'Додади го контактот';\r
-$labels['editcontact'] = 'Промени го контактот';\r
-$labels['edit'] = 'Промени';\r
-$labels['cancel'] = 'Откажи';\r
-$labels['save'] = 'Сними';\r
-$labels['delete'] = 'Избриши';\r
-$labels['newcontact'] = 'Додади ново име';\r
-$labels['deletecontact'] = 'Избриши ги следните имиња';\r
-$labels['composeto'] = 'Напиши порака';\r
-$labels['contactsfromto'] = '$count имиња $from до $to';\r
-$labels['print'] = 'Испечати';\r
-$labels['export'] = 'Извади како';\r
-$labels['previouspage'] = 'Прикажи претходна страна';\r
-$labels['firstpage'] = 'Прикажи ја првата страна';\r
-$labels['nextpage'] = 'Прикажи ја следната страна';\r
-$labels['lastpage'] = 'Прикажи ја последната страна';\r
-$labels['groups'] = 'Групи';\r
-$labels['personaladrbook'] = 'Адреси';\r
-$labels['settingsfor'] = 'Подесувања за';\r
-$labels['preferences'] = 'Подесувања';\r
-$labels['userpreferences'] = 'Кориснички подесувања';\r
-$labels['editpreferences'] = 'Промени ги корисничките подесувања';\r
-$labels['identities'] = 'Идентитети';\r
-$labels['manageidentities'] = 'Организирај ги идентитетите за овој корисник';\r
-$labels['newidentity'] = 'Нов идентитет';\r
-$labels['newitem'] = 'Нов објект';\r
-$labels['edititem'] = 'Промени објект';\r
-$labels['setdefault'] = 'Одбери за основно';\r
-$labels['language'] = 'Јазик';\r
-$labels['timezone'] = 'Временска зона';\r
-$labels['pagesize'] = 'Редови прикажани на страна';\r
-$labels['signature'] = 'Потпис';\r
-$labels['dstactive'] = 'Промени на времето';\r
-$labels['htmleditor'] = 'Создади HTML порака';\r
-$labels['htmlsignature'] = 'HTML потпис';\r
-$labels['previewpane'] = 'Прикажи го претходниот панел';\r
-$labels['autosavedraft'] = 'Авоматски снимај во Непратени';\r
-$labels['everynminutes'] = 'секои $n минути';\r
-$labels['never'] = 'никогаш';\r
-$labels['folder'] = 'Папка';\r
-$labels['folders'] = 'Папки';\r
-$labels['foldername'] = 'Име на папката';\r
-$labels['subscribed'] = 'Претплатен';\r
-$labels['messagecount'] = 'Пораки';\r
-$labels['create'] = 'Креирај';\r
-$labels['createfolder'] = 'Креирај нова папка';\r
-$labels['rename'] = 'Преименувај';\r
-$labels['renamefolder'] = 'Преименувај ја папката';\r
-$labels['deletefolder'] = 'Избриши ја папката';\r
-$labels['managefolders'] = 'Организирање на папки';\r
-$labels['sortby'] = 'Уреди по';\r
-$labels['sortasc'] = 'Уреди по азбучен ред';\r
-$labels['sortdesc'] = 'Уреди опаѓачки';\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-\r
-/*\r
- +-----------------------------------------------------------------------+\r
- | language/mk/messages.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Ivan Mishev - mishevivan@gmail.com |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$messages = array();\r
-$messages['loginfailed'] = 'Неуспешна најава';\r
-$messages['cookiesdisabled'] = 'Вашиот прелистувач не прифаќа cookies';\r
-$messages['sessionerror'] = 'Сесијата е невалидна или е истечена';\r
-$messages['imaperror'] = 'Конектирањето со IMAP е неуспешно';\r
-$messages['nomessagesfound'] = 'Немате пораки во вашата пошта';\r
-$messages['loggedout'] = 'Успешно се одлогиравте. Благодариме!';\r
-$messages['mailboxempty'] = 'Поштенското сандаче е празно.';\r
-$messages['loading'] = 'Вчитувам...';\r
-$messages['loadingdata'] = 'Ги вчитувам податоците...';\r
-$messages['checkingmail'] = 'Проверување за нови пораки...';\r
-$messages['sendingmessage'] = 'Праќање на пораката...';\r
-$messages['messagesent'] = 'Пораката е успешно пратена';\r
-$messages['savingmessage'] = 'Пораката се снима...';\r
-$messages['messagesaved'] = 'Пораката е снимена во Непратени';\r
-$messages['successfullysaved'] = 'Успешно снимено';\r
-$messages['addedsuccessfully'] = 'Името е успешно додадено ви Именик';\r
-$messages['contactexists'] = 'Веќе постои име со зададената Е-маил адреса';\r
-$messages['blockedimages'] = 'За да се заштити вашата приватност, сликите во оваа порака не се прикажани.';\r
-$messages['encryptedmessage'] = 'Оваа порака е кодирана и неможе да се прикаже. Извинете!';\r
-$messages['nocontactsfound'] = 'Нема Имиња во Именикот.';\r
-$messages['contactnotfound'] = 'Бараното име не постои';\r
-$messages['sendingfailed'] = 'Пораката не е пратена';\r
-$messages['errorsaving'] = 'Грешка при снимањето';\r
-$messages['errormoving'] = 'Пораката неможе да се премести';\r
-$messages['errordeleting'] = 'Пораката неможе да се избрише';\r
-$messages['deletecontactconfirm'] = 'Дали сте сигурни дека сакате да го избришете обележаниот(те) контакт(и)?';\r
-$messages['deletemessagesconfirm'] = 'Дали сте сигурни дека сакате да го избришете обележаниот(те) порака(и)?';\r
-$messages['deletefolderconfirm'] = 'Дали сте сигурни дека сакате да ја избришете оваа папка?';\r
-$messages['purgefolderconfirm'] = 'Дали сте сигурни дека сакате да ги избршете сите пораки во оваа папка?';\r
-$messages['formincomplete'] = 'Имате изоставено непополнети информации';\r
-$messages['noemailwarning'] = 'Внесете валидна емаил адреса';\r
-$messages['nonamewarning'] = 'Внесете име';\r
-$messages['nopagesizewarning'] = 'Внесете ја големината на страната';\r
-$messages['norecipientwarning'] = 'Внесете барем еден примач';\r
-$messages['nosubjectwarning'] = 'Немате внесено „Наслов“. Дали сакате да внесете?';\r
-$messages['nobodywarning'] = 'Пораката нема текст во неа. Дали сакате да ја пратите?';\r
-$messages['notsentwarning'] = 'Пораката не е пратена. Дали сакате да ја откажете?';\r
-$messages['noldapserver'] = 'Изберете LDAP сервер за пребарување';\r
-$messages['nocontactsreturned'] = 'Не се најдени имиња';\r
-$messages['nosearchname'] = 'Внесете име или емаил адреса';\r
-$messages['searchsuccessful'] = '$nr пораки се најдени';\r
-$messages['searchnomatch'] = 'Претражувањето нема резлутати';\r
-$messages['searching'] = 'Пребарувам....';\r
-$messages['checking'] = 'Проверувам...';\r
-$messages['nospellerrors'] = 'Нема грешки во спелувањето';\r
-$messages['folderdeleted'] = 'Папката е успешно избришана';\r
-$messages['deletedsuccessfully'] = 'Успешно избришано';\r
-$messages['converting'] = 'Форматирањето на пораката е отстрането...';\r
-$messages['messageopenerror'] = 'Пораката неможе да се вчита од серверот';\r
-$messages['fileuploaderror'] = 'Прикачувањето е неуспешно';\r
-$messages['filesizeerror'] = 'Датотеката што се прикачува го изминува лимитот од $size';\r
-$messages['copysuccess'] = 'Успешно се копирани $nr имиња';\r
-$messages['copyerror'] = 'Неможе да се копираат адресите';\r
-$messages['sourceisreadonly'] = 'Изворот на оваа адреса неможе да се промени';\r
-$messages['errorsavingcontact'] = 'Името неможе да се сними';\r
-$messages['movingmessage'] = 'Пораката се преместува...';\r
-$messages['receiptsent'] = 'Известувањето е успешно пратено';\r
-$messages['errorsendingreceipt'] = 'Известувањето не е пратено';\r
-$messages['nodeletelastidentity'] = 'Овој идентитет неможе да се избрише, тој е последниот.';\r
-$messages['addsubfolderhint'] = 'Оваа папка ќе биде креирана како под-папка на селектираната.';\r
-\r
-?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | language/mk/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Ivan Mishev - mishevivan@gmail.com |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = 'Добредојдовте во $product';\r
+$labels['username'] = 'Корисничко Име';\r
+$labels['password'] = 'Лозинка';\r
+$labels['server'] = 'Сервер';\r
+$labels['login'] = 'Логирај Се';\r
+$labels['logout'] = 'Одлогирај Се';\r
+$labels['mail'] = 'Е-Маил';\r
+$labels['settings'] = 'Подесувања';\r
+$labels['addressbook'] = 'Именик';\r
+$labels['inbox'] = 'Пошта';\r
+$labels['drafts'] = 'Непратени';\r
+$labels['sent'] = 'Пратени';\r
+$labels['trash'] = 'Корпа';\r
+$labels['junk'] = 'Ѓубре';\r
+$labels['subject'] = 'Наслов';\r
+$labels['from'] = 'Праќач';\r
+$labels['to'] = 'Примач';\r
+$labels['cc'] = 'Копирај';\r
+$labels['bcc'] = 'Bcc';\r
+$labels['replyto'] = 'Препрати на';\r
+$labels['date'] = 'Дата';\r
+$labels['size'] = 'Големина';\r
+$labels['priority'] = 'Приоритет';\r
+$labels['organization'] = 'Организација';\r
+$labels['reply-to'] = 'Препрати на';\r
+$labels['mailboxlist'] = 'Папки';\r
+$labels['messagesfromto'] = '$count пораки од $from';\r
+$labels['messagenrof'] = '$nr порака од $count';\r
+$labels['moveto'] = 'Премести во...';\r
+$labels['download'] = 'сними';\r
+$labels['filename'] = 'Име на датотеката';\r
+$labels['filesize'] = 'Големина на датотеката';\r
+$labels['preferhtml'] = 'Прикажи во HTML';\r
+$labels['htmlmessage'] = 'HTML Порака';\r
+$labels['prettydate'] = 'Убави дати';\r
+$labels['addtoaddressbook'] = 'Додади во именик';\r
+$labels['sun'] = 'Нед';\r
+$labels['mon'] = 'Пон';\r
+$labels['tue'] = 'Вто';\r
+$labels['wed'] = 'Сре';\r
+$labels['thu'] = 'Чет';\r
+$labels['fri'] = 'Пет';\r
+$labels['sat'] = 'Саб';\r
+$labels['sunday'] = 'Недела';\r
+$labels['monday'] = 'Понеделник';\r
+$labels['tuesday'] = 'Вторник';\r
+$labels['wednesday'] = 'Среда';\r
+$labels['thursday'] = 'Четврток';\r
+$labels['friday'] = 'Петок';\r
+$labels['saturday'] = 'Сабота';\r
+$labels['today'] = 'Денес';\r
+$labels['checkmail'] = 'Провери пошта';\r
+$labels['writenewmessage'] = 'Нова порака';\r
+$labels['replytomessage'] = 'Одговори на пораката';\r
+$labels['replytoallmessage'] = 'Одговори на сите';\r
+$labels['forwardmessage'] = 'Препрати ја пораката';\r
+$labels['deletemessage'] = 'Премести ја пораката во Корпа';\r
+$labels['movemessagetotrash'] = 'Премести ги пораките во Канта';\r
+$labels['printmessage'] = 'За печатење';\r
+$labels['previousmessage'] = 'Прикажи ја претходната порака';\r
+$labels['previousmessages'] = 'Прикажи ги претходните пораки';\r
+$labels['firstmessage'] = 'Прикажи ја првата порака';\r
+$labels['firstmessages'] = 'Прикажи ги првите пораки';\r
+$labels['nextmessage'] = 'Прикажи ја наредната порака';\r
+$labels['nextmessages'] = 'Прикажи ги следните пораки';\r
+$labels['lastmessage'] = 'Прикажи ја последната порака';\r
+$labels['lastmessages'] = 'Прикажи ги последните пораки';\r
+$labels['backtolist'] = 'Врати се во поштенското сандаче';\r
+$labels['viewsource'] = 'Покажи го изворот на пракање';\r
+$labels['markmessages'] = 'Обележи ги пораките';\r
+$labels['markread'] = 'Како прочитани';\r
+$labels['markunread'] = 'Како непрочитани';\r
+$labels['select'] = 'Одбележи';\r
+$labels['all'] = 'Сите';\r
+$labels['none'] = 'Никоја';\r
+$labels['unread'] = 'Непрочитани';\r
+$labels['compact'] = 'Уредно';\r
+$labels['empty'] = 'Испразни';\r
+$labels['purge'] = 'Чистење';\r
+$labels['quota'] = 'Искористен простор';\r
+$labels['unknown'] = 'непознато';\r
+$labels['unlimited'] = 'неограничено';\r
+$labels['quicksearch'] = 'Брзо претражување';\r
+$labels['resetsearch'] = 'Ново претражување';\r
+$labels['compose'] = 'Нова порака';\r
+$labels['savemessage'] = 'Снимај ја пораката во Непратени';\r
+$labels['sendmessage'] = 'Прати ја пораката';\r
+$labels['addattachment'] = 'Прикачи фајл';\r
+$labels['charset'] = 'Charset';\r
+$labels['editortype'] = 'Тип на едитор';\r
+$labels['returnreceipt'] = 'Врати ';\r
+$labels['checkspelling'] = 'Провери спелување';\r
+$labels['resumeediting'] = 'Продолжи со уредување';\r
+$labels['revertto'] = 'Обрати се на';\r
+$labels['attachments'] = 'Прикачено';\r
+$labels['upload'] = 'Прикачи';\r
+$labels['close'] = 'Затвори';\r
+$labels['low'] = 'Низок';\r
+$labels['lowest'] = 'Најнизок';\r
+$labels['normal'] = 'Нормален';\r
+$labels['high'] = 'Висок';\r
+$labels['highest'] = 'Највисок';\r
+$labels['nosubject'] = '(нема тема)';\r
+$labels['showimages'] = 'Прикажи ги сликите';\r
+$labels['htmltoggle'] = 'HTML';\r
+$labels['plaintoggle'] = 'Обичен текст';\r
+$labels['addcc'] = 'Додај Cc';\r
+$labels['addbcc'] = 'Додај Bcc';\r
+$labels['addreplyto'] = 'Додај Одговори-На';\r
+$labels['mdnrequest'] = 'Праќачот на оваа порака сака да добие известување кога ќе ја прочитате пораката. Дали сакате да го известите?';\r
+$labels['receiptread'] = 'Извести (читај)';\r
+$labels['yourmessage'] = 'Ова е известување за вашата порака';\r
+$labels['receiptnote'] = 'Забелешка: Ова известување само потврдува дека пораката која сте ја пратиле е отворена. Не е гаранција дека примачот ја прочитал или ја разбрал истата.';\r
+$labels['name'] = 'Прикажано име';\r
+$labels['firstname'] = 'Име';\r
+$labels['surname'] = 'Презиме';\r
+$labels['email'] = 'Е-маил';\r
+$labels['addcontact'] = 'Додади го контактот';\r
+$labels['editcontact'] = 'Промени го контактот';\r
+$labels['edit'] = 'Промени';\r
+$labels['cancel'] = 'Откажи';\r
+$labels['save'] = 'Сними';\r
+$labels['delete'] = 'Избриши';\r
+$labels['newcontact'] = 'Додади ново име';\r
+$labels['deletecontact'] = 'Избриши ги следните имиња';\r
+$labels['composeto'] = 'Напиши порака';\r
+$labels['contactsfromto'] = '$count имиња $from до $to';\r
+$labels['print'] = 'Испечати';\r
+$labels['export'] = 'Извади како';\r
+$labels['previouspage'] = 'Прикажи претходна страна';\r
+$labels['firstpage'] = 'Прикажи ја првата страна';\r
+$labels['nextpage'] = 'Прикажи ја следната страна';\r
+$labels['lastpage'] = 'Прикажи ја последната страна';\r
+$labels['groups'] = 'Групи';\r
+$labels['personaladrbook'] = 'Адреси';\r
+$labels['settingsfor'] = 'Подесувања за';\r
+$labels['preferences'] = 'Подесувања';\r
+$labels['userpreferences'] = 'Кориснички подесувања';\r
+$labels['editpreferences'] = 'Промени ги корисничките подесувања';\r
+$labels['identities'] = 'Идентитети';\r
+$labels['manageidentities'] = 'Организирај ги идентитетите за овој корисник';\r
+$labels['newidentity'] = 'Нов идентитет';\r
+$labels['newitem'] = 'Нов објект';\r
+$labels['edititem'] = 'Промени објект';\r
+$labels['setdefault'] = 'Одбери за основно';\r
+$labels['language'] = 'Јазик';\r
+$labels['timezone'] = 'Временска зона';\r
+$labels['pagesize'] = 'Редови прикажани на страна';\r
+$labels['signature'] = 'Потпис';\r
+$labels['dstactive'] = 'Промени на времето';\r
+$labels['htmleditor'] = 'Создади HTML порака';\r
+$labels['htmlsignature'] = 'HTML потпис';\r
+$labels['previewpane'] = 'Прикажи го претходниот панел';\r
+$labels['autosavedraft'] = 'Авоматски снимај во Непратени';\r
+$labels['everynminutes'] = 'секои $n минути';\r
+$labels['never'] = 'никогаш';\r
+$labels['folder'] = 'Папка';\r
+$labels['folders'] = 'Папки';\r
+$labels['foldername'] = 'Име на папката';\r
+$labels['subscribed'] = 'Претплатен';\r
+$labels['messagecount'] = 'Пораки';\r
+$labels['create'] = 'Креирај';\r
+$labels['createfolder'] = 'Креирај нова папка';\r
+$labels['rename'] = 'Преименувај';\r
+$labels['renamefolder'] = 'Преименувај ја папката';\r
+$labels['deletefolder'] = 'Избриши ја папката';\r
+$labels['managefolders'] = 'Организирање на папки';\r
+$labels['sortby'] = 'Уреди по';\r
+$labels['sortasc'] = 'Уреди по азбучен ред';\r
+$labels['sortdesc'] = 'Уреди опаѓачки';\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | language/mk/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Ivan Mishev - mishevivan@gmail.com |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'Неуспешна најава';\r
+$messages['cookiesdisabled'] = 'Вашиот прелистувач не прифаќа cookies';\r
+$messages['sessionerror'] = 'Сесијата е невалидна или е истечена';\r
+$messages['imaperror'] = 'Конектирањето со IMAP е неуспешно';\r
+$messages['nomessagesfound'] = 'Немате пораки во вашата пошта';\r
+$messages['loggedout'] = 'Успешно се одлогиравте. Благодариме!';\r
+$messages['mailboxempty'] = 'Поштенското сандаче е празно.';\r
+$messages['loading'] = 'Вчитувам...';\r
+$messages['loadingdata'] = 'Ги вчитувам податоците...';\r
+$messages['checkingmail'] = 'Проверување за нови пораки...';\r
+$messages['sendingmessage'] = 'Праќање на пораката...';\r
+$messages['messagesent'] = 'Пораката е успешно пратена';\r
+$messages['savingmessage'] = 'Пораката се снима...';\r
+$messages['messagesaved'] = 'Пораката е снимена во Непратени';\r
+$messages['successfullysaved'] = 'Успешно снимено';\r
+$messages['addedsuccessfully'] = 'Името е успешно додадено ви Именик';\r
+$messages['contactexists'] = 'Веќе постои име со зададената Е-маил адреса';\r
+$messages['blockedimages'] = 'За да се заштити вашата приватност, сликите во оваа порака не се прикажани.';\r
+$messages['encryptedmessage'] = 'Оваа порака е кодирана и неможе да се прикаже. Извинете!';\r
+$messages['nocontactsfound'] = 'Нема Имиња во Именикот.';\r
+$messages['contactnotfound'] = 'Бараното име не постои';\r
+$messages['sendingfailed'] = 'Пораката не е пратена';\r
+$messages['errorsaving'] = 'Грешка при снимањето';\r
+$messages['errormoving'] = 'Пораката неможе да се премести';\r
+$messages['errordeleting'] = 'Пораката неможе да се избрише';\r
+$messages['deletecontactconfirm'] = 'Дали сте сигурни дека сакате да го избришете обележаниот(те) контакт(и)?';\r
+$messages['deletemessagesconfirm'] = 'Дали сте сигурни дека сакате да го избришете обележаниот(те) порака(и)?';\r
+$messages['deletefolderconfirm'] = 'Дали сте сигурни дека сакате да ја избришете оваа папка?';\r
+$messages['purgefolderconfirm'] = 'Дали сте сигурни дека сакате да ги избршете сите пораки во оваа папка?';\r
+$messages['formincomplete'] = 'Имате изоставено непополнети информации';\r
+$messages['noemailwarning'] = 'Внесете валидна емаил адреса';\r
+$messages['nonamewarning'] = 'Внесете име';\r
+$messages['nopagesizewarning'] = 'Внесете ја големината на страната';\r
+$messages['norecipientwarning'] = 'Внесете барем еден примач';\r
+$messages['nosubjectwarning'] = 'Немате внесено „Наслов“. Дали сакате да внесете?';\r
+$messages['nobodywarning'] = 'Пораката нема текст во неа. Дали сакате да ја пратите?';\r
+$messages['notsentwarning'] = 'Пораката не е пратена. Дали сакате да ја откажете?';\r
+$messages['noldapserver'] = 'Изберете LDAP сервер за пребарување';\r
+$messages['nocontactsreturned'] = 'Не се најдени имиња';\r
+$messages['nosearchname'] = 'Внесете име или емаил адреса';\r
+$messages['searchsuccessful'] = '$nr пораки се најдени';\r
+$messages['searchnomatch'] = 'Претражувањето нема резлутати';\r
+$messages['searching'] = 'Пребарувам....';\r
+$messages['checking'] = 'Проверувам...';\r
+$messages['nospellerrors'] = 'Нема грешки во спелувањето';\r
+$messages['folderdeleted'] = 'Папката е успешно избришана';\r
+$messages['deletedsuccessfully'] = 'Успешно избришано';\r
+$messages['converting'] = 'Форматирањето на пораката е отстрането...';\r
+$messages['messageopenerror'] = 'Пораката неможе да се вчита од серверот';\r
+$messages['fileuploaderror'] = 'Прикачувањето е неуспешно';\r
+$messages['filesizeerror'] = 'Датотеката што се прикачува го изминува лимитот од $size';\r
+$messages['copysuccess'] = 'Успешно се копирани $nr имиња';\r
+$messages['copyerror'] = 'Неможе да се копираат адресите';\r
+$messages['sourceisreadonly'] = 'Изворот на оваа адреса неможе да се промени';\r
+$messages['errorsavingcontact'] = 'Името неможе да се сними';\r
+$messages['movingmessage'] = 'Пораката се преместува...';\r
+$messages['receiptsent'] = 'Известувањето е успешно пратено';\r
+$messages['errorsendingreceipt'] = 'Известувањето не е пратено';\r
+$messages['nodeletelastidentity'] = 'Овој идентитет неможе да се избрише, тој е последниот.';\r
+$messages['addsubfolderhint'] = 'Оваа папка ќе биде креирана како под-папка на селектираната.';\r
+\r
+?>
\ No newline at end of file
/*
- +-----------------------------------------------------------------------+
- | language/ms_MY/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 543 2007-04-28 18:07:12Z thomasb $
++-----------------------------------------------------------------------+
+| language/ms_MY/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Muhammad Zamri MS <myzamri@gmail.com> |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 543 2007-04-28 18:07:12Z thomasb $
*/
$labels = array();
-
-// login page
-$labels['welcome'] = 'Selamat datang ke $product';
-$labels['username'] = 'Nama Pengguna';
-$labels['password'] = 'Kata Laluan';
-$labels['server'] = 'Pelayan';
-$labels['login'] = 'Log Masuk';
-
-// taskbar
-$labels['logout'] = 'Log Keluar';
-$labels['mail'] = 'E-Mel';
+$labels['welcome'] = 'Selamat datang ke $product';
+$labels['username'] = 'Nama Pengguna';
+$labels['password'] = 'Kata Laluan';
+$labels['server'] = 'Pelayan';
+$labels['login'] = 'Log Masuk';
+$labels['logout'] = 'Log Keluar';
+$labels['mail'] = 'E-Mel';
$labels['settings'] = 'Tetapan Peribadi';
$labels['addressbook'] = 'Buku Alamat';
-
-// mailbox names
-$labels['inbox'] = 'Masuk';
+$labels['inbox'] = 'Masuk';
$labels['drafts'] = 'Draf';
-$labels['sent'] = 'Keluar';
-$labels['trash'] = 'Sampah';
-$labels['junk'] = 'Remeh';
-
-// message listing
+$labels['sent'] = 'Keluar';
+$labels['trash'] = 'Sampah';
+$labels['junk'] = 'Remeh';
$labels['subject'] = 'Subjek';
-$labels['from'] = 'Penghantar';
-$labels['to'] = 'Penerima';
-$labels['cc'] = 'Salinan';
-$labels['bcc'] = 'Bcc';
+$labels['from'] = 'Penghantar';
+$labels['to'] = 'Penerima';
+$labels['cc'] = 'Salinan';
+$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Balas kepada';
-$labels['date'] = 'Tarikh';
-$labels['size'] = 'Saiz';
+$labels['date'] = 'Tarikh';
+$labels['size'] = 'Saiz';
$labels['priority'] = 'Keutamaan';
$labels['organization'] = 'Organisasi';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-
+$labels['reply-to'] = 'Balas kepada';
$labels['mailboxlist'] = 'Kabinet Fail';
$labels['messagesfromto'] = 'Mesej $from ke $to dari $count';
$labels['messagenrof'] = 'Mesej $nr dari $count';
-
-$labels['moveto'] = 'pindah ke...';
+$labels['moveto'] = 'pindah ke...';
$labels['download'] = 'muat turun';
-
$labels['filename'] = 'Nama Fail';
$labels['filesize'] = 'Saiz Fail';
-
$labels['preferhtml'] = 'Papar HTML';
$labels['htmlmessage'] = 'Mesej HTML';
$labels['prettydate'] = 'Tarikh-tarikh cantik';
-
$labels['addtoaddressbook'] = 'Tambah ke buku alamat';
-
-// weekdays short
$labels['sun'] = 'Aha';
$labels['mon'] = 'Isn';
$labels['tue'] = 'Sel';
$labels['thu'] = 'Kha';
$labels['fri'] = 'Jum';
$labels['sat'] = 'Sab';
-
-// weekdays long
-$labels['sunday'] = 'Ahad';
-$labels['monday'] = 'Isnin';
-$labels['tuesday'] = 'Selasa';
+$labels['sunday'] = 'Ahad';
+$labels['monday'] = 'Isnin';
+$labels['tuesday'] = 'Selasa';
$labels['wednesday'] = 'Rabu';
-$labels['thursday'] = 'Khamis';
-$labels['friday'] = 'Jumaat';
-$labels['saturday'] = 'Sabtu';
-
+$labels['thursday'] = 'Khamis';
+$labels['friday'] = 'Jumaat';
+$labels['saturday'] = 'Sabtu';
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mac';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'Mei';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Ogo';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Okt';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dis';
+$labels['longjan'] = 'Januari';
+$labels['longfeb'] = 'Februari';
+$labels['longmar'] = 'March';
+$labels['longapr'] = 'April';
+$labels['longmay'] = 'Mei';
+$labels['longjun'] = 'Jun';
+$labels['longjul'] = 'Julai';
+$labels['longaug'] = 'Ogos';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Oktober';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'Disember';
$labels['today'] = 'Hari Ini';
-
-// toolbar buttons
-$labels['checkmail'] = 'Semak mesej baru';
-$labels['writenewmessage'] = 'Cipta mesej baru';
-$labels['replytomessage'] = 'Balas mesej';
+$labels['checkmail'] = 'Semak mesej baru';
+$labels['writenewmessage'] = 'Cipta mesej baru';
+$labels['replytomessage'] = 'Balas mesej';
$labels['replytoallmessage'] = 'Balas kepada penghantar dan semua penerima';
-$labels['forwardmessage'] = 'Marakan mesej';
-$labels['deletemessage'] = 'Pindah mesej ke sampah';
-$labels['printmessage'] = 'Cetak mesej ini';
-$labels['previousmessage'] = 'Papar mesej sebelumnya';
+$labels['forwardmessage'] = 'Marakan mesej';
+$labels['deletemessage'] = 'Pindah mesej ke sampah';
+$labels['movemessagetotrash'] = 'Pindah mesej ke Tong Sampah';
+$labels['printmessage'] = 'Cetak mesej ini';
+$labels['previousmessage'] = 'Papar mesej sebelumnya';
$labels['previousmessages'] = 'Papar set mesej sebelumnya';
-$labels['firstmessage'] = 'Papar mesej pertama';
-$labels['firstmessages'] = 'Papar set mesej pertama';
-$labels['nextmessage'] = 'Papat mesej seterusnya';
-$labels['nextmessages'] = 'Papar set mesej seterusnya';
-$labels['lastmessage'] = 'Papat mesej terakhir';
-$labels['lastmessages'] = 'Papar set mesej terakhir';
-$labels['backtolist'] = 'Kembali ke senarai mesej';
-$labels['viewsource'] = 'Papar sumber';
-
+$labels['firstmessage'] = 'Papar mesej pertama';
+$labels['firstmessages'] = 'Papar set mesej pertama';
+$labels['nextmessage'] = 'Papat mesej seterusnya';
+$labels['nextmessages'] = 'Papar set mesej seterusnya';
+$labels['lastmessage'] = 'Papat mesej terakhir';
+$labels['lastmessages'] = 'Papar set mesej terakhir';
+$labels['backtolist'] = 'Kembali ke senarai mesej';
+$labels['viewsource'] = 'Papar sumber';
+$labels['markmessages'] = 'Tanda mesej';
+$labels['markread'] = 'dibaca';
+$labels['markunread'] = 'belum/tidak dibaca';
$labels['select'] = 'Pilih';
$labels['all'] = 'Semua';
$labels['none'] = 'Tiada';
$labels['unread'] = 'Tidak dibaca';
-
$labels['compact'] = 'Padat';
$labels['empty'] = 'Kosong';
$labels['purge'] = 'Singkir';
-
$labels['quota'] = 'Penggunaan cakera';
-$labels['unknown'] = 'tidak dikenali';
-$labels['unlimited'] = 'tidak terhad';
-
-$labels['quicksearch'] = 'Carian pantas';
-$labels['resetsearch'] = 'Set semula carian';
-
-
-// message compose
-$labels['compose'] = 'Karang mesej';
-$labels['sendmessage'] = 'Hantar mesej sekarang';
-$labels['savemessage'] = 'Simpan draf ini';
-$labels['addattachment'] = 'Lampir fail';
-$labels['charset'] = 'Charset';
-$labels['editortype'] = 'Jenis Editor';
-$labels['returnreceipt'] = 'Resit kembali';
-
+$labels['unknown'] = 'tidak dikenali';
+$labels['unlimited'] = 'tidak terhad';
+$labels['quicksearch'] = 'Carian pantas';
+$labels['resetsearch'] = 'Set semula carian';
+$labels['compose'] = 'Karang mesej';
+$labels['savemessage'] = 'Simpan draf ini';
+$labels['sendmessage'] = 'Hantar mesej sekarang';
+$labels['addattachment'] = 'Lampir fail';
+$labels['charset'] = 'Charset';
+$labels['editortype'] = 'Jenis Editor';
+$labels['returnreceipt'] = 'Resit kembali';
$labels['checkspelling'] = 'Semak ejaan';
$labels['resumeediting'] = 'Sambung pengeditan';
-$labels['revertto'] = 'Kembali kepada';
-
+$labels['revertto'] = 'Kembali kepada';
$labels['attachments'] = 'Lampiran';
$labels['upload'] = 'Muat naik';
-$labels['close'] = 'Tutup';
-
-$labels['low'] = 'Rendah';
-$labels['lowest'] = 'Paling Rendah';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'Tinggi';
+$labels['close'] = 'Tutup';
+$labels['low'] = 'Rendah';
+$labels['lowest'] = 'Paling Rendah';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Tinggi';
$labels['highest'] = 'Paling Tinggi';
-
-$labels['nosubject'] = '(tiada subjek)';
+$labels['nosubject'] = '(tiada subjek)';
$labels['showimages'] = 'Papar imej';
-
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = 'Teks kosong';
-
-
-// address boook
-$labels['name'] = 'Nama paparan';
+$labels['addcc'] = 'Tambah Cc';
+$labels['addbcc'] = 'Tambah Bcc';
+$labels['addreplyto'] = 'Tambah Reply-To';
+$labels['mdnrequest'] = 'Pengirim mesej ini mahu diberitahu apabila anda membaca mesej ini. Adakah anda ingin memberitahu pengirim?';
+$labels['receiptread'] = 'Balas Resip (dibaca)';
+$labels['yourmessage'] = 'Ini adalah Resip Balasan untuk mesej anda';
+$labels['receiptnote'] = 'Perhatian: Resip ini hanya untuk memberitahu yang mesej ini telah dipaparkan di komputer penerima. Tidak ada jaminan yang penerima telah membaca atau memahami kandungan mesej.';
+$labels['name'] = 'Nama paparan';
$labels['firstname'] = 'Nama pertama';
-$labels['surname'] = 'Nama akhir';
-$labels['email'] = 'E-Mel';
-
+$labels['surname'] = 'Nama akhir';
+$labels['email'] = 'E-Mel';
$labels['addcontact'] = 'Tambah kontek baru';
$labels['editcontact'] = 'Ubahsuai Kontek';
-
-$labels['edit'] = 'Ubahsuai';
+$labels['edit'] = 'Ubahsuai';
$labels['cancel'] = 'Batal';
-$labels['save'] = 'Simpan';
+$labels['save'] = 'Simpan';
$labels['delete'] = 'Hapus';
-
-$labels['newcontact'] = 'Cipta kad kontek baru';
-$labels['deletecontact'] = 'Hapus kontek yang dipilih';
-$labels['composeto'] = 'Karang mel kepada';
+$labels['newcontact'] = 'Cipta kad kontek baru';
+$labels['deletecontact'] = 'Hapus kontek yang dipilih';
+$labels['composeto'] = 'Karang mel kepada';
$labels['contactsfromto'] = 'Kontek $from ke $to dari $count';
-$labels['print'] = 'Cetak';
-$labels['export'] = 'Eksport';
-
-$labels['previouspage'] = 'Papar set sebelumnya';
-$labels['firstpage'] = 'Papar set pertama';
-$labels['nextpage'] = 'Papar set seterusnya';
-$labels['lastpage'] = 'Papar set akhir';
-
+$labels['print'] = 'Cetak';
+$labels['export'] = 'Eksport';
+$labels['previouspage'] = 'Papar set sebelumnya';
+$labels['firstpage'] = 'Papar set pertama';
+$labels['nextpage'] = 'Papar set seterusnya';
+$labels['lastpage'] = 'Papar set akhir';
$labels['groups'] = 'Kumpulan';
$labels['personaladrbook'] = 'Alamat-alamat Peribadi';
-
-
-// settings
-$labels['settingsfor'] = 'Tetapan bagi';
-
-$labels['preferences'] = 'Pilihan';
-$labels['userpreferences'] = 'Pilihan pengguna';
-$labels['editpreferences'] = 'Ubahsuai pilihan pengguna';
-
-$labels['identities'] = 'Identiti';
-$labels['manageidentities'] = 'Urus identiti bagi akaun ini';
-$labels['newidentity'] = 'Identiti baru';
-
-$labels['newitem'] = 'Butiran baru';
-$labels['edititem'] = 'Ubahsuai butiran';
-
-$labels['setdefault'] = 'Tetap asal';
-$labels['language'] = 'Bahasa';
-$labels['timezone'] = 'Zon Masa';
-$labels['pagesize'] = 'Baris setiap muka';
+$labels['settingsfor'] = 'Tetapan bagi';
+$labels['preferences'] = 'Pilihan';
+$labels['userpreferences'] = 'Pilihan pengguna';
+$labels['editpreferences'] = 'Ubahsuai pilihan pengguna';
+$labels['identities'] = 'Identiti';
+$labels['manageidentities'] = 'Urus identiti bagi akaun ini';
+$labels['newidentity'] = 'Identiti baru';
+$labels['newitem'] = 'Butiran baru';
+$labels['edititem'] = 'Ubahsuai butiran';
+$labels['setdefault'] = 'Tetap asal';
+$labels['language'] = 'Bahasa';
+$labels['timezone'] = 'Zon Masa';
+$labels['pagesize'] = 'Baris setiap muka';
$labels['signature'] = 'Tandatangan';
-$labels['dstactive'] = 'Simpanan siang hari';
+$labels['dstactive'] = 'Simpanan siang hari';
$labels['htmleditor'] = 'Karang mesej HTML';
$labels['htmlsignature'] = 'Tandatangan HTML';
$labels['previewpane'] = 'Pamer ruang previu';
-
-$labels['autosavedraft'] = 'Simpan draf dengan automatik';
-$labels['everynminutes'] = 'setiap $n minit';
-$labels['never'] = 'tidak pernah';
-
-$labels['folder'] = 'Kabinet Fail';
-$labels['folders'] = 'Kabinet Fail';
-$labels['foldername'] = 'Nama Kabinet Fail';
-$labels['subscribed'] = 'Dilanggan';
-$labels['create'] = 'Cipta';
-$labels['createfolder'] = 'Cipta kabinet fail baru';
+$labels['logoutclear'] = 'Kosongkan Tong sampah ketika keluar';
+$labels['logoutcompact'] = 'Padatkan Inbox ketika keluar';
+$labels['uisettings'] = 'Antaramuka Pengguna';
+$labels['serversettings'] = 'Konfigurasi Pelayan';
+$labels['mailboxview'] = 'Pandangan kotak Mel';
+$labels['mdnrequests'] = 'Pemberitahuan Pengirim';
+$labels['askuser'] = 'Tanya pengguna';
+$labels['autosend'] = 'Hantar automatik';
+$labels['ignore'] = 'Biarkan';
+$labels['readwhendeleted'] = 'Tanda mesej sebagai dibaca ketika hapus';
+$labels['flagfordeletion'] = 'Tanda mesej untuk pembuangan (tidak delete terus)';
+$labels['autosavedraft'] = 'Simpan draf dengan automatik';
+$labels['everynminutes'] = 'setiap $n minit';
+$labels['never'] = 'tidak pernah';
+$labels['folder'] = 'Kabinet Fail';
+$labels['folders'] = 'Kabinet Fail';
+$labels['foldername'] = 'Nama Kabinet Fail';
+$labels['subscribed'] = 'Dilanggan';
+$labels['messagecount'] = 'Mesej-mesej';
+$labels['create'] = 'Cipta';
+$labels['createfolder'] = 'Cipta kabinet fail baru';
$labels['rename'] = 'Namakan semula';
$labels['renamefolder'] = 'Namakan semula kabinet fail';
-$labels['deletefolder'] = 'Hapus kabinet fail';
-$labels['managefolders'] = 'Urus kabinet fail';
-
+$labels['deletefolder'] = 'Hapus kabinet fail';
+$labels['managefolders'] = 'Urus kabinet fail';
$labels['sortby'] = 'Susun dengan';
-$labels['sortasc'] = 'Susun menaik';
+$labels['sortasc'] = 'Susun menaik';
$labels['sortdesc'] = 'Susun menurun';
?>
/*
- +-----------------------------------------------------------------------+
- | language/ms_MY/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- +-----------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| language/ms_MY/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Muhammad Zamri MS <myzamri@gmail.com> |
++-----------------------------------------------------------------------+
- @version $Id: messages.inc 543 2007-04-28 18:07:12Z thomasb $
+@version $Id: messages.inc 543 2007-04-28 18:07:12Z thomasb $
*/
$messages = array();
-$messages['loginfailed'] = 'Log masuk gagal';
+$messages['loginfailed'] = 'Log masuk gagal';
$messages['cookiesdisabled'] = 'Pelayar anda tidak menerima cookies';
$messages['sessionerror'] = 'Sesi anda tidak sah atau telah tamat';
$messages['imaperror'] = 'Sambungan ke pelayan IMAP gagal';
$messages['encryptedmessage'] = 'Ini adalah mesej yang di\'encrypted\' dan tidak boleh dipamerkan. Maaf!';
$messages['nocontactsfound'] = 'Tiada kontek dijumpai';
$messages['contactnotfound'] = 'Kontek yang diminta tidak dijumpai';
-
$messages['sendingfailed'] = 'Gagal menghantar mesej';
$messages['errorsaving'] = 'Terdapat ralat ketika menyimpan';
$messages['errormoving'] = 'Tidak boleh pindah mesej';
$messages['errordeleting'] = 'Tidak boleh hapus mesej';
-$messages['deletecontactconfirm'] = 'Adakah anda ingin hapuskan kontek yang dipilih?';
+$messages['deletecontactconfirm'] = 'Adakah anda ingin hapuskan kontek yang dipilih?';
$messages['deletemessagesconfirm'] = 'Adakah anda ingin hapuskan mesej yang dipilih?';
-$messages['deletefolderconfirm'] = 'Adakah anda ingin hapuskan kabinet fail ini?';
-$messages['purgefolderconfirm'] = 'Adakah anda ingin hapuskan semua mesej dalam kabinet fail ini?';
+$messages['deletefolderconfirm'] = 'Adakah anda ingin hapuskan kabinet fail ini?';
+$messages['purgefolderconfirm'] = 'Adakah anda ingin hapuskan semua mesej dalam kabinet fail ini?';
$messages['formincomplete'] = 'Borang tidak diisi dengan lengkap';
$messages['noemailwarning'] = 'Sila masukkan alamat emel yang sah';
-$messages['nonamewarning'] = 'Sila masukkan nama';
+$messages['nonamewarning'] = 'Sila masukkan nama';
$messages['nopagesizewarning'] = 'Sila masukkan saiz halaman';
$messages['norecipientwarning'] = 'Sila masukkan sekurang-kurangnya satu penerima';
-$messages['nosubjectwarning'] = 'Ruang "Subjek" kosong. Adakah anda ingin masukkannya sekarang?';
+$messages['nosubjectwarning'] = 'Ruang \"Subjek\" kosong. Adakah anda ingin masukkannya sekarang?';
$messages['nobodywarning'] = 'Hantar mesej ini tanpa teks?';
$messages['notsentwarning'] = 'Mesej tidak dihantar. Adakah anda ingin menyingkir mesej anda?';
$messages['noldapserver'] = 'Sila pilih satu pelayan ldap untuk carian';
$messages['checking'] = 'Menyemak...';
$messages['nospellerrors'] = 'Tiada kesalah ejaan dijumpai';
$messages['folderdeleted'] = 'Kabinet fail berjaya dihapuskan';
-$messages['deletedsuccessfully'] = "Berjaya dihapuskan";
+$messages['deletedsuccessfully'] = 'Berjaya dihapuskan';
$messages['converting'] = 'Singkir format dari mesej...';
$messages['messageopenerror'] = 'Tidak boleh muat mesej dari server';
$messages['fileuploaderror'] = 'Muatnaik fail gagal';
$messages['filesizeerror'] = 'Fail yang dimuatnaik melampaui saiz maksima $size';
-
$messages['copysuccess'] = 'Berjaya salin alamat-alamat $nr';
$messages['copyerror'] = 'Tidak boleh salin apa-apa alamat';
$messages['sourceisreadonly'] = 'Sumber alamat ini adalah untuk bacaan sahaja';
$messages['errorsavingcontact'] = 'Tidak boleh simmpan alamat kontek';
+$messages['movingmessage'] = 'Memindah mesej...';
+$messages['receiptsent'] = 'Berjaya menghantar resip bacaan';
+$messages['errorsendingreceipt'] = 'Tidak dapat menghantar resip';
+$messages['nodeletelastidentity'] = 'Anda tidak boleh membuang identiti ini, ia milik anda yang terakhir.';
+$messages['addsubfolderhint'] = 'Folder ini akan dibina sebagai subfolder kepada folder yang dipilih sekarang';
?>
| Author: Tor Erik Linnerud - JKLM <tel@jklm.no> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1093 2008-02-16 11:40:18Z tomekp $
+ @version $Id: labels.inc 1335 2008-04-27 15:18:13Z alec $
*/
$labels['thursday'] = 'Torsdag';
$labels['friday'] = 'Fredag';
$labels['saturday'] = 'Lørdag';
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'Mai';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Aug';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Okt';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Des';
+$labels['longjan'] = 'Januar';
+$labels['longfeb'] = 'Februar';
+$labels['longmar'] = 'Marsj';
+$labels['longapr'] = 'April';
+$labels['longmay'] = 'Mai';
+$labels['longjun'] = 'Juni';
+$labels['longjul'] = 'Juli';
+$labels['longaug'] = 'August';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Oktober';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'Desember';
$labels['today'] = 'I dag';
$labels['checkmail'] = 'Sjekk for nye beskjeder';
$labels['writenewmessage'] = 'Opprett en ny e-post';
$labels['htmleditor'] = 'Bruk HTML-editor';
$labels['htmlsignature'] = 'HTML-signatur';
$labels['previewpane'] = 'Forhåndsvisning';
+$labels['logoutclear'] = 'Tøm søpel ved utlogging';
+$labels['logoutcompact'] = 'Kompakt innboksen ved utlogging';
+$labels['uisettings'] = 'Brukergrensesnitt';
+$labels['serversettings'] = 'Serverinnstillinger';
$labels['autosavedraft'] = 'Autolagring av utkast';
$labels['everynminutes'] = 'Hvert $n. minutt';
$labels['never'] = 'Aldri';
+++ /dev/null
-<?php\r
-\r
-/*\r
- +-----------------------------------------------------------------------+\r
- | localization/ne/labels.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2007, RoundQube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Nepali Translation by: |\r
- | Prasanna Singh <prasanna@bhunet.com>, <prasanna@bhunet.com> |\r
- | RoundCubeAuthor: Thomas Bruederli <roundcube@gmail.com> |\r
- +-----------------------------------------------------------------------+\r
-*/\r
-\r
-$labels = array();\r
-$labels['welcome'] = '$product मा स्वागत छ';\r
-$labels['username'] = 'युसरनेम';\r
-$labels['password'] = 'पासवर्ड';\r
-$labels['server'] = 'सर्भर';\r
-$labels['login'] = 'लगईन';\r
-$labels['logout'] = 'लगआउट';\r
-$labels['mail'] = 'ई-मेल';\r
-$labels['settings'] = 'व्यक्तिगत रोजाईहरु';\r
-$labels['addressbook'] = 'ठेगाना किताब';\r
-$labels['inbox'] = 'इनबक्स';\r
-$labels['drafts'] = 'ड्राफ्ट';\r
-$labels['sent'] = 'पठईएका मेलहरु';\r
-$labels['trash'] = 'रद्दी टोकरी';\r
-$labels['junk'] = 'स्पाम';\r
-$labels['subject'] = 'विषय';\r
-$labels['from'] = 'प्रेषक';\r
-$labels['to'] = 'प्रापक';\r
-$labels['cc'] = 'कार्बन कपि';\r
-$labels['bcc'] = 'अंधो कार्बन कपि';\r
-$labels['replyto'] = 'पुन: जवाब';\r
-$labels['date'] = 'तारिख';\r
-$labels['size'] = 'नाप';\r
-$labels['priority'] = 'मेलको प्राथमिकता';\r
-$labels['organization'] = 'संस्था';\r
-$labels['reply-to'] = 'पुन: जवाब';\r
-$labels['mailboxlist'] = 'फोलडर';\r
-$labels['messagesfromto'] = 'मेलहरु $from बाट $to सम्म, $count मध्यबाट';\r
-$labels['messagenrof'] = '$nr नम्बर मेल, $count मध्यबाट';\r
-$labels['moveto'] = 'सार्नुहोस...';\r
-$labels['download'] = 'डाऊनलोड';\r
-$labels['filename'] = 'फाईलको नाम';\r
-$labels['filesize'] = 'फाईलको नाप';\r
-$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) देखाउनुहोस';\r
-$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूपका मेल';\r
-$labels['prettydate'] = 'सुन्दर तारिख';\r
-$labels['addtoaddressbook'] = 'ठेगाना पुस्तिकामा जोड्नुहोस';\r
-$labels['sun'] = 'आइत';\r
-$labels['mon'] = 'सोम';\r
-$labels['tue'] = 'मंगल';\r
-$labels['wed'] = 'बुध';\r
-$labels['thu'] = 'विहि';\r
-$labels['fri'] = 'शुक';\r
-$labels['sat'] = 'शनि';\r
-$labels['sunday'] = 'आइतवार';\r
-$labels['monday'] = 'सोमवार';\r
-$labels['tuesday'] = 'मंगलवार';\r
-$labels['wednesday'] = 'बुधवार';\r
-$labels['thursday'] = 'विहिवार';\r
-$labels['friday'] = 'शुक्रवार';\r
-$labels['saturday'] = 'शनिवार';\r
-$labels['today'] = 'आज';\r
-$labels['checkmail'] = 'नया मेल खोज्नुहोस';\r
-$labels['writenewmessage'] = 'नया मेल लेखनुहोस';\r
-$labels['replytomessage'] = 'मेलको जवाफ दिनुहोस';\r
-$labels['replytoallmessage'] = 'प्रेषक लगायत सबैलाई जवाफ दिनुहोस';\r
-$labels['forwardmessage'] = 'मेल अगाडि पठाउनुहोस';\r
-$labels['deletemessage'] = 'रद्दी टोकरीमा सार्नुहोस';\r
-$labels['printmessage'] = 'मेल छाप्नुहोस';\r
-$labels['previousmessage'] = 'पछाडिको मेल देखाउनुहोस';\r
-$labels['previousmessages'] = 'पछाडिको मेलका सेटहरु देखाउनुहोस';\r
-$labels['firstmessage'] = 'पहलो मेल देखाउनुहोस';\r
-$labels['firstmessages'] = 'पहलो मेलका सेटहरु देखाउनुहोस';\r
-$labels['nextmessage'] = 'अगाडिको मेल देखाउनुहोस';\r
-$labels['nextmessages'] = 'अगाडिको मेलका सेटहरु देखाउनुहोस';\r
-$labels['lastmessage'] = 'अन्तिम मेल देखाउनुहोस';\r
-$labels['lastmessages'] = 'अन्तिम मेलका सेटहरु देखाउनुहोस';\r
-$labels['backtolist'] = 'मेल सूची देखाउनुहोस';\r
-$labels['viewsource'] = 'श्रोत देखाउनुहोस';\r
-$labels['select'] = 'चुन्नुहोस';\r
-$labels['all'] = 'सबै |';\r
-$labels['none'] = 'हैन';\r
-$labels['unread'] = 'नपढिएका |';\r
-$labels['compact'] = 'छोटो गर्नुहोस';\r
-$labels['empty'] = 'खाली गर्ने';\r
-$labels['purge'] = 'नाम निशाना मेटाउनुहोस';\r
-$labels['quota'] = 'डिस्कको उपभोग';\r
-$labels['unknown'] = 'अज्ञात';\r
-$labels['unlimited'] = 'अनगिन्ति';\r
-$labels['quicksearch'] = 'स्फुर्ति खोज';\r
-$labels['resetsearch'] = 'पन: खोज';\r
-$labels['compose'] = 'मेल लखन गर्नुहोस';\r
-$labels['sendmessage'] = 'तुरुन्तै मेल पठाउनुहोस';\r
-$labels['savemessage'] = 'ड्राफ्ट जोगाउनुहोस';\r
-$labels['addattachment'] = 'फाइल टाँस्नुहोस';\r
-$labels['charset'] = 'क्यारेक्टर सेट';\r
-$labels['editortype'] = 'सम्पादकको प्रकार';\r
-$labels['returnreceipt'] = 'फिर्ति रसीद';\r
-$labels['checkspelling'] = 'हिज्जे जाँच';\r
-$labels['resumeediting'] = 'पुन: सम्पादन गर्नुहोस';\r
-$labels['revertto'] = 'पहिलेको स्थितीमा जानुहोस';\r
-$labels['attachments'] = 'टाँसिएका फाईलहरु';\r
-$labels['upload'] = 'अपलोड';\r
-$labels['close'] = 'बन्द';\r
-$labels['low'] = 'कम';\r
-$labels['lowest'] = 'सबै भन्दा कम';\r
-$labels['normal'] = 'साधारण';\r
-$labels['high'] = 'उच्च';\r
-$labels['highest'] = 'उच्चतम';\r
-$labels['nosubject'] = '(बिना विषयको)';\r
-$labels['showimages'] = 'चित्र देखाउनुहोस';\r
-$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)';\r
-$labels['plaintoggle'] = 'सादा अक्षर';\r
-$labels['name'] = 'देखाउने नाम';\r
-$labels['firstname'] = 'पहिलो नाम';\r
-$labels['surname'] = 'थर';\r
-$labels['email'] = 'ई-मेल';\r
-$labels['addcontact'] = 'नया सम्पर्क जोड्नुहोस';\r
-$labels['editcontact'] = 'सम्पर्क सच्याउनुहोस';\r
-$labels['edit'] = 'सच्याउनुहोस';\r
-$labels['cancel'] = 'खारेज गर्नुहोस';\r
-$labels['save'] = 'जोगाउनुहोस';\r
-$labels['delete'] = 'मेटाउनुहोस';\r
-$labels['newcontact'] = 'नया सम्पर्क कार्ड बनाउनुहोस';\r
-$labels['deletecontact'] = 'छानिएका सम्पर्कहरु मेटाउनुहोस';\r
-$labels['composeto'] = 'मेल लेखी पठाउनुहोस';\r
-$labels['contactsfromto'] = 'सम्पर्कहरु $from बाट $to सम्म, $count मध्यबाट';\r
-$labels['print'] = 'छाप्नुहोस';\r
-$labels['export'] = 'ऐक्स्पोर्ट गर्नुहोस';\r
-$labels['previouspage'] = 'पहिलेको सेट देखाउनुहोस';\r
-$labels['firstpage'] = 'पहिलो सेट देखाउनुहोस';\r
-$labels['nextpage'] = 'अर्को सेट देखाउनुहोस';\r
-$labels['lastpage'] = 'अन्तिम सेट देखाउनुहोस';\r
-$labels['groups'] = 'समूहहरु';\r
-$labels['personaladrbook'] = 'व्यक्तिगत ठेगानाहरु';\r
-$labels['settingsfor'] = 'तय';\r
-$labels['preferences'] = 'रोजाइहरु';\r
-$labels['userpreferences'] = 'यूसरका रोजाइहरु';\r
-$labels['editpreferences'] = 'यूसरका रोजाइहर सम्पादन गर्नुहोस';\r
-$labels['identities'] = 'पहिचानहरु';\r
-$labels['manageidentities'] = 'यो खाताको पहिचानहरको व्यवस्था गर्नुहोस';\r
-$labels['newidentity'] = 'नया पहिचान';\r
-$labels['newitem'] = 'नया प्रकार';\r
-$labels['edititem'] = 'प्रकार सम्पादन गर्नुहोस';\r
-$labels['setdefault'] = 'तय गर्नुहोस';\r
-$labels['language'] = 'भाषा';\r
-$labels['timezone'] = 'समय क्षेत्र';\r
-$labels['pagesize'] = 'हरेक पन्नामा यति';\r
-$labels['signature'] = 'हस्ताक्षर';\r
-$labels['dstactive'] = 'प्रकाश बचाव';\r
-$labels['htmleditor'] = 'ऐच-टी-ऐम-एल (HTML) मेल लखन गर्नुहोस';\r
-$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) हस्ताक्षर';\r
-$labels['previewpane'] = 'पूर्व दृष्य देखाउनुहोस';\r
-$labels['autosavedraft'] = 'स्वत ड्राफ्ट जोगाउनुहोस';\r
-$labels['everynminutes'] = 'प्रत्येक $n मिनटमा';\r
-$labels['never'] = 'काहिलै नहुने';\r
-$labels['folder'] = 'फोल्डर';\r
-$labels['folders'] = 'फोल्डरहरु';\r
-$labels['foldername'] = 'फोल्डरको नाम';\r
-$labels['subscribed'] = 'सबस्क्राईब गरियो';\r
-$labels['create'] = 'बनाउनुहोस';\r
-$labels['createfolder'] = 'नया फोलडर बनाउनुहोस';\r
-$labels['rename'] = 'नाम बदल्नुहोस';\r
-$labels['renamefolder'] = 'फोलडरको नाम बदल्नुहोस';\r
-$labels['deletefolder'] = 'फोलडर मेट्नुहोस';\r
-$labels['managefolders'] = 'फोलडर व्यवस्थित गर्नुहोस';\r
-$labels['sortby'] = 'यसरी तय गर्नुहोस';\r
-$labels['sortasc'] = 'पहिलो देखि अन्तिम सम्म तय गर्नुहोस';\r
-$labels['sortdesc'] = 'अन्तिम देखि पहिलो सम्म तय गर्नुहोस';\r
-\r
-?>\r
+++ /dev/null
-<?php\r
-\r
-/*\r
- +-----------------------------------------------------------------------+\r
- | localization/ne/messages.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2007, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Nepali Translation by: |\r
- | Prasanna Singh <prasanna@bhunet.com>, <prasanna@bhunet.com> |\r
- | RoundCubeAuthor: Thomas Bruederli <roundcube@gmail.com> |\r
- +-----------------------------------------------------------------------+\r
-*/\r
-\r
-$messages = array();\r
-$messages['loginfailed'] = 'लागईन हुन पाएन';\r
-$messages['cookiesdisabled'] = 'तपाईको ब्राऊसरले कुकी स्वीकार गारिरहेको छैन';\r
-$messages['sessionerror'] = 'सत्र समाप्त वा अवैद्य';\r
-$messages['imaperror'] = 'सर्वर संग सम्पर्क हुन पाएन';\r
-$messages['nomessagesfound'] = 'यो मेलबक्स मा कुनै मेल छैन';\r
-$messages['loggedout'] = 'सत्र समाप्त । नमास्कार!';\r
-$messages['mailboxempty'] = 'मेल बक्स खाली छ';\r
-$messages['loading'] = 'लोड भईरहेको छ...';\r
-$messages['loadingdata'] = 'डाटा लोड भईरहेको छै...';\r
-$messages['checkingmail'] = 'नया मेलको खोजी भईरहेको छ...';\r
-$messages['sendingmessage'] = 'मेल पठाईदै रहेको छ...';\r
-$messages['messagesent'] = 'मेल सफल्तापूर्वक पठाईयो';\r
-$messages['savingmessage'] = 'मेल जोगाईदै छ...';\r
-$messages['messagesaved'] = 'मेल ड्राफ्ट फोल्डरमा जोगाईयो';\r
-$messages['successfullysaved'] = 'सफल्तापूर्वक जोगाईयो';\r
-$messages['addedsuccessfully'] = 'सम्पर्क पुस्तिकामा सफल्तापूर्वक सम्पर्क प्रविष्ट गारियो';\r
-$messages['contactexists'] = 'यो ई-मेल पहिलै लिईसकिएको छ';\r
-$messages['blockedimages'] = 'तपाईको प्राईवेसी को लागि तथा अन्य स्पामबाट बच्नकोलागि यो मेलमा चित्रहुरु देखाईएका छैनन्।';\r
-$messages['encryptedmessage'] = 'माफ गर्नुहोसे, यो मेल ईन्क्रिफ्ट गरिएको रूपमा छ, त्यसैले देखाउन सकिदैन!';\r
-$messages['nocontactsfound'] = 'कुनै सम्पर्क भेटिएन';\r
-$messages['contactnotfound'] = 'अनुरोध गारिएको सम्पर्क भेटिएन';\r
-$messages['sendingfailed'] = 'मेल पठाउन सकिएन';\r
-$messages['errorsaving'] = 'जोगाउदा-जोगाउदै गडबड भायो';\r
-$messages['errormoving'] = 'मेल सार्न सकिएन';\r
-$messages['errordeleting'] = 'मेल मेटाउन सकिएन';\r
-$messages['deletecontactconfirm'] = 'तापाईले छान्नुभएको सम्पर्कहरु, साँचै मेट्न चहानुहुन्छ?';\r
-$messages['deletemessagesconfirm'] = 'तापाईले छान्नु भएको मेलहरु, साँचै मेट्न चहानुहुन्छ?';\r
-$messages['deletefolderconfirm'] = 'तापाईले साँचै यो फोल्डर मेट्न चहानु हुन्छ?';\r
-$messages['purgefolderconfirm'] = 'तापाईले साँचै यो फोल्डरमा भएका सबै मेलहरु मेट्न चहानुहुन्छ?';\r
-$messages['formincomplete'] = 'फर्म पूर्ण रुपमा भरिएको छैन';\r
-$messages['noemailwarning'] = 'कृपया वैद्य ई-मेल भर्नुहोस';\r
-$messages['nonamewarning'] = 'कृपया नाम भर्नुहोस';\r
-$messages['nopagesizewarning'] = 'कृपया पन्नाको नाप भर्नुहोस';\r
-$messages['norecipientwarning'] = 'कृपया कम-से-कम एउटा प्रापकको विवरण भर्नुहोस';\r
-$messages['nosubjectwarning'] = 'मेलको कुनै विषय तोकिएको छैनै। केहि तोक्न चहानुहुन्छ ?';\r
-$messages['nobodywarning'] = 'बिना केहि लेखि पठाउने?';\r
-$messages['notsentwarning'] = 'मेल पठएको छैन.. मेल रद्द गर्न चहानुहुन्छ?';\r
-$messages['noldapserver'] = 'कृपया खोजको निम्ति एउटा ऐलडाप सर्वर छान्नहोस';\r
-$messages['nocontactsreturned'] = 'कुनै सम्पर्क फेला परेनन्';\r
-$messages['nosearchname'] = 'कृपया सम्पर्कको नाम या ई-मेल भर्नुहोस';\r
-$messages['searchsuccessful'] = '$nr मेलहरु पाइयो';\r
-$messages['searchnomatch'] = 'खोज असफल रहयो';\r
-$messages['searching'] = 'खोजि भईरहेको छ...';\r
-$messages['checking'] = 'जाँच भईरहेको छ...';\r
-$messages['nospellerrors'] = 'कुनै गलत हिज्जे फेला परेनन्';\r
-$messages['folderdeleted'] = 'फोल्डर सफल्तापूर्वक मेटियो';\r
-$messages['deletedsuccessfully'] = 'सफल्तापूर्वक मेटियो';\r
-$messages['converting'] = 'मेलबाट फोर्माटिङ हटाईदै छ...';\r
-$messages['messageopenerror'] = 'सर्वरबाट मेल लोड हुन सकेन';\r
-$messages['fileuploaderror'] = 'फाईल अपलोड हुन असफल';\r
-$messages['filesizeerror'] = 'अपलोड गरिएको फाईल हद $size भन्दा ठूलो छ';\r
-$messages['copysuccess'] = 'सफल्तापूर्वक $nr ठेगानाहरु उतारियो';\r
-$messages['copyerror'] = 'कुनै पनि ठेगानाहरु उतार्न सकिएन';\r
-$messages['sourceisreadonly'] = 'यो ठेगाना को श्रोत पढ्नको लागि मात्र उपलब्ध छ';\r
-$messages['errorsavingcontact'] = 'स्मपर्कको ठेगाना जोगाउन सकिएन';\r
-\r
-?>\r
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | localization/ne/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2007, RoundQube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Nepali Translation by: |\r
+ | Prasanna Singh <prasanna@bhunet.com>, <prasanna@bhunet.com> |\r
+ | RoundCubeAuthor: Thomas Bruederli <roundcube@gmail.com> |\r
+ +-----------------------------------------------------------------------+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = '$product मा स्वागत छ';\r
+$labels['username'] = 'युसरनेम';\r
+$labels['password'] = 'पासवर्ड';\r
+$labels['server'] = 'सर्भर';\r
+$labels['login'] = 'लगईन';\r
+$labels['logout'] = 'लगआउट';\r
+$labels['mail'] = 'ई-मेल';\r
+$labels['settings'] = 'व्यक्तिगत रोजाईहरु';\r
+$labels['addressbook'] = 'ठेगाना किताब';\r
+$labels['inbox'] = 'इनबक्स';\r
+$labels['drafts'] = 'ड्राफ्ट';\r
+$labels['sent'] = 'पठईएका मेलहरु';\r
+$labels['trash'] = 'रद्दी टोकरी';\r
+$labels['junk'] = 'स्पाम';\r
+$labels['subject'] = 'विषय';\r
+$labels['from'] = 'प्रेषक';\r
+$labels['to'] = 'प्रापक';\r
+$labels['cc'] = 'कार्बन कपि';\r
+$labels['bcc'] = 'अंधो कार्बन कपि';\r
+$labels['replyto'] = 'पुन: जवाब';\r
+$labels['date'] = 'तारिख';\r
+$labels['size'] = 'नाप';\r
+$labels['priority'] = 'मेलको प्राथमिकता';\r
+$labels['organization'] = 'संस्था';\r
+$labels['reply-to'] = 'पुन: जवाब';\r
+$labels['mailboxlist'] = 'फोलडर';\r
+$labels['messagesfromto'] = 'मेलहरु $from बाट $to सम्म, $count मध्यबाट';\r
+$labels['messagenrof'] = '$nr नम्बर मेल, $count मध्यबाट';\r
+$labels['moveto'] = 'सार्नुहोस...';\r
+$labels['download'] = 'डाऊनलोड';\r
+$labels['filename'] = 'फाईलको नाम';\r
+$labels['filesize'] = 'फाईलको नाप';\r
+$labels['preferhtml'] = 'ऐच-टी-ऐम-ऐल(HTML) देखाउनुहोस';\r
+$labels['htmlmessage'] = 'ऐच-टी-ऐम-ऐल (HTML) रूपका मेल';\r
+$labels['prettydate'] = 'सुन्दर तारिख';\r
+$labels['addtoaddressbook'] = 'ठेगाना पुस्तिकामा जोड्नुहोस';\r
+$labels['sun'] = 'आइत';\r
+$labels['mon'] = 'सोम';\r
+$labels['tue'] = 'मंगल';\r
+$labels['wed'] = 'बुध';\r
+$labels['thu'] = 'विहि';\r
+$labels['fri'] = 'शुक';\r
+$labels['sat'] = 'शनि';\r
+$labels['sunday'] = 'आइतवार';\r
+$labels['monday'] = 'सोमवार';\r
+$labels['tuesday'] = 'मंगलवार';\r
+$labels['wednesday'] = 'बुधवार';\r
+$labels['thursday'] = 'विहिवार';\r
+$labels['friday'] = 'शुक्रवार';\r
+$labels['saturday'] = 'शनिवार';\r
+$labels['today'] = 'आज';\r
+$labels['checkmail'] = 'नया मेल खोज्नुहोस';\r
+$labels['writenewmessage'] = 'नया मेल लेखनुहोस';\r
+$labels['replytomessage'] = 'मेलको जवाफ दिनुहोस';\r
+$labels['replytoallmessage'] = 'प्रेषक लगायत सबैलाई जवाफ दिनुहोस';\r
+$labels['forwardmessage'] = 'मेल अगाडि पठाउनुहोस';\r
+$labels['deletemessage'] = 'रद्दी टोकरीमा सार्नुहोस';\r
+$labels['printmessage'] = 'मेल छाप्नुहोस';\r
+$labels['previousmessage'] = 'पछाडिको मेल देखाउनुहोस';\r
+$labels['previousmessages'] = 'पछाडिको मेलका सेटहरु देखाउनुहोस';\r
+$labels['firstmessage'] = 'पहलो मेल देखाउनुहोस';\r
+$labels['firstmessages'] = 'पहलो मेलका सेटहरु देखाउनुहोस';\r
+$labels['nextmessage'] = 'अगाडिको मेल देखाउनुहोस';\r
+$labels['nextmessages'] = 'अगाडिको मेलका सेटहरु देखाउनुहोस';\r
+$labels['lastmessage'] = 'अन्तिम मेल देखाउनुहोस';\r
+$labels['lastmessages'] = 'अन्तिम मेलका सेटहरु देखाउनुहोस';\r
+$labels['backtolist'] = 'मेल सूची देखाउनुहोस';\r
+$labels['viewsource'] = 'श्रोत देखाउनुहोस';\r
+$labels['select'] = 'चुन्नुहोस';\r
+$labels['all'] = 'सबै |';\r
+$labels['none'] = 'हैन';\r
+$labels['unread'] = 'नपढिएका |';\r
+$labels['compact'] = 'छोटो गर्नुहोस';\r
+$labels['empty'] = 'खाली गर्ने';\r
+$labels['purge'] = 'नाम निशाना मेटाउनुहोस';\r
+$labels['quota'] = 'डिस्कको उपभोग';\r
+$labels['unknown'] = 'अज्ञात';\r
+$labels['unlimited'] = 'अनगिन्ति';\r
+$labels['quicksearch'] = 'स्फुर्ति खोज';\r
+$labels['resetsearch'] = 'पन: खोज';\r
+$labels['compose'] = 'मेल लखन गर्नुहोस';\r
+$labels['sendmessage'] = 'तुरुन्तै मेल पठाउनुहोस';\r
+$labels['savemessage'] = 'ड्राफ्ट जोगाउनुहोस';\r
+$labels['addattachment'] = 'फाइल टाँस्नुहोस';\r
+$labels['charset'] = 'क्यारेक्टर सेट';\r
+$labels['editortype'] = 'सम्पादकको प्रकार';\r
+$labels['returnreceipt'] = 'फिर्ति रसीद';\r
+$labels['checkspelling'] = 'हिज्जे जाँच';\r
+$labels['resumeediting'] = 'पुन: सम्पादन गर्नुहोस';\r
+$labels['revertto'] = 'पहिलेको स्थितीमा जानुहोस';\r
+$labels['attachments'] = 'टाँसिएका फाईलहरु';\r
+$labels['upload'] = 'अपलोड';\r
+$labels['close'] = 'बन्द';\r
+$labels['low'] = 'कम';\r
+$labels['lowest'] = 'सबै भन्दा कम';\r
+$labels['normal'] = 'साधारण';\r
+$labels['high'] = 'उच्च';\r
+$labels['highest'] = 'उच्चतम';\r
+$labels['nosubject'] = '(बिना विषयको)';\r
+$labels['showimages'] = 'चित्र देखाउनुहोस';\r
+$labels['htmltoggle'] = 'ऐच-टी-ऐम-एल (HTML)';\r
+$labels['plaintoggle'] = 'सादा अक्षर';\r
+$labels['name'] = 'देखाउने नाम';\r
+$labels['firstname'] = 'पहिलो नाम';\r
+$labels['surname'] = 'थर';\r
+$labels['email'] = 'ई-मेल';\r
+$labels['addcontact'] = 'नया सम्पर्क जोड्नुहोस';\r
+$labels['editcontact'] = 'सम्पर्क सच्याउनुहोस';\r
+$labels['edit'] = 'सच्याउनुहोस';\r
+$labels['cancel'] = 'खारेज गर्नुहोस';\r
+$labels['save'] = 'जोगाउनुहोस';\r
+$labels['delete'] = 'मेटाउनुहोस';\r
+$labels['newcontact'] = 'नया सम्पर्क कार्ड बनाउनुहोस';\r
+$labels['deletecontact'] = 'छानिएका सम्पर्कहरु मेटाउनुहोस';\r
+$labels['composeto'] = 'मेल लेखी पठाउनुहोस';\r
+$labels['contactsfromto'] = 'सम्पर्कहरु $from बाट $to सम्म, $count मध्यबाट';\r
+$labels['print'] = 'छाप्नुहोस';\r
+$labels['export'] = 'ऐक्स्पोर्ट गर्नुहोस';\r
+$labels['previouspage'] = 'पहिलेको सेट देखाउनुहोस';\r
+$labels['firstpage'] = 'पहिलो सेट देखाउनुहोस';\r
+$labels['nextpage'] = 'अर्को सेट देखाउनुहोस';\r
+$labels['lastpage'] = 'अन्तिम सेट देखाउनुहोस';\r
+$labels['groups'] = 'समूहहरु';\r
+$labels['personaladrbook'] = 'व्यक्तिगत ठेगानाहरु';\r
+$labels['settingsfor'] = 'तय';\r
+$labels['preferences'] = 'रोजाइहरु';\r
+$labels['userpreferences'] = 'यूसरका रोजाइहरु';\r
+$labels['editpreferences'] = 'यूसरका रोजाइहर सम्पादन गर्नुहोस';\r
+$labels['identities'] = 'पहिचानहरु';\r
+$labels['manageidentities'] = 'यो खाताको पहिचानहरको व्यवस्था गर्नुहोस';\r
+$labels['newidentity'] = 'नया पहिचान';\r
+$labels['newitem'] = 'नया प्रकार';\r
+$labels['edititem'] = 'प्रकार सम्पादन गर्नुहोस';\r
+$labels['setdefault'] = 'तय गर्नुहोस';\r
+$labels['language'] = 'भाषा';\r
+$labels['timezone'] = 'समय क्षेत्र';\r
+$labels['pagesize'] = 'हरेक पन्नामा यति';\r
+$labels['signature'] = 'हस्ताक्षर';\r
+$labels['dstactive'] = 'प्रकाश बचाव';\r
+$labels['htmleditor'] = 'ऐच-टी-ऐम-एल (HTML) मेल लखन गर्नुहोस';\r
+$labels['htmlsignature'] = 'ऐच-टी-ऐम-एल (HTML) हस्ताक्षर';\r
+$labels['previewpane'] = 'पूर्व दृष्य देखाउनुहोस';\r
+$labels['autosavedraft'] = 'स्वत ड्राफ्ट जोगाउनुहोस';\r
+$labels['everynminutes'] = 'प्रत्येक $n मिनटमा';\r
+$labels['never'] = 'काहिलै नहुने';\r
+$labels['folder'] = 'फोल्डर';\r
+$labels['folders'] = 'फोल्डरहरु';\r
+$labels['foldername'] = 'फोल्डरको नाम';\r
+$labels['subscribed'] = 'सबस्क्राईब गरियो';\r
+$labels['create'] = 'बनाउनुहोस';\r
+$labels['createfolder'] = 'नया फोलडर बनाउनुहोस';\r
+$labels['rename'] = 'नाम बदल्नुहोस';\r
+$labels['renamefolder'] = 'फोलडरको नाम बदल्नुहोस';\r
+$labels['deletefolder'] = 'फोलडर मेट्नुहोस';\r
+$labels['managefolders'] = 'फोलडर व्यवस्थित गर्नुहोस';\r
+$labels['sortby'] = 'यसरी तय गर्नुहोस';\r
+$labels['sortasc'] = 'पहिलो देखि अन्तिम सम्म तय गर्नुहोस';\r
+$labels['sortdesc'] = 'अन्तिम देखि पहिलो सम्म तय गर्नुहोस';\r
+\r
+?>\r
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | localization/ne/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2007, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Nepali Translation by: |\r
+ | Prasanna Singh <prasanna@bhunet.com>, <prasanna@bhunet.com> |\r
+ | RoundCubeAuthor: Thomas Bruederli <roundcube@gmail.com> |\r
+ +-----------------------------------------------------------------------+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'लागईन हुन पाएन';\r
+$messages['cookiesdisabled'] = 'तपाईको ब्राऊसरले कुकी स्वीकार गारिरहेको छैन';\r
+$messages['sessionerror'] = 'सत्र समाप्त वा अवैद्य';\r
+$messages['imaperror'] = 'सर्वर संग सम्पर्क हुन पाएन';\r
+$messages['nomessagesfound'] = 'यो मेलबक्स मा कुनै मेल छैन';\r
+$messages['loggedout'] = 'सत्र समाप्त । नमास्कार!';\r
+$messages['mailboxempty'] = 'मेल बक्स खाली छ';\r
+$messages['loading'] = 'लोड भईरहेको छ...';\r
+$messages['loadingdata'] = 'डाटा लोड भईरहेको छै...';\r
+$messages['checkingmail'] = 'नया मेलको खोजी भईरहेको छ...';\r
+$messages['sendingmessage'] = 'मेल पठाईदै रहेको छ...';\r
+$messages['messagesent'] = 'मेल सफल्तापूर्वक पठाईयो';\r
+$messages['savingmessage'] = 'मेल जोगाईदै छ...';\r
+$messages['messagesaved'] = 'मेल ड्राफ्ट फोल्डरमा जोगाईयो';\r
+$messages['successfullysaved'] = 'सफल्तापूर्वक जोगाईयो';\r
+$messages['addedsuccessfully'] = 'सम्पर्क पुस्तिकामा सफल्तापूर्वक सम्पर्क प्रविष्ट गारियो';\r
+$messages['contactexists'] = 'यो ई-मेल पहिलै लिईसकिएको छ';\r
+$messages['blockedimages'] = 'तपाईको प्राईवेसी को लागि तथा अन्य स्पामबाट बच्नकोलागि यो मेलमा चित्रहुरु देखाईएका छैनन्।';\r
+$messages['encryptedmessage'] = 'माफ गर्नुहोसे, यो मेल ईन्क्रिफ्ट गरिएको रूपमा छ, त्यसैले देखाउन सकिदैन!';\r
+$messages['nocontactsfound'] = 'कुनै सम्पर्क भेटिएन';\r
+$messages['contactnotfound'] = 'अनुरोध गारिएको सम्पर्क भेटिएन';\r
+$messages['sendingfailed'] = 'मेल पठाउन सकिएन';\r
+$messages['errorsaving'] = 'जोगाउदा-जोगाउदै गडबड भायो';\r
+$messages['errormoving'] = 'मेल सार्न सकिएन';\r
+$messages['errordeleting'] = 'मेल मेटाउन सकिएन';\r
+$messages['deletecontactconfirm'] = 'तापाईले छान्नुभएको सम्पर्कहरु, साँचै मेट्न चहानुहुन्छ?';\r
+$messages['deletemessagesconfirm'] = 'तापाईले छान्नु भएको मेलहरु, साँचै मेट्न चहानुहुन्छ?';\r
+$messages['deletefolderconfirm'] = 'तापाईले साँचै यो फोल्डर मेट्न चहानु हुन्छ?';\r
+$messages['purgefolderconfirm'] = 'तापाईले साँचै यो फोल्डरमा भएका सबै मेलहरु मेट्न चहानुहुन्छ?';\r
+$messages['formincomplete'] = 'फर्म पूर्ण रुपमा भरिएको छैन';\r
+$messages['noemailwarning'] = 'कृपया वैद्य ई-मेल भर्नुहोस';\r
+$messages['nonamewarning'] = 'कृपया नाम भर्नुहोस';\r
+$messages['nopagesizewarning'] = 'कृपया पन्नाको नाप भर्नुहोस';\r
+$messages['norecipientwarning'] = 'कृपया कम-से-कम एउटा प्रापकको विवरण भर्नुहोस';\r
+$messages['nosubjectwarning'] = 'मेलको कुनै विषय तोकिएको छैनै। केहि तोक्न चहानुहुन्छ ?';\r
+$messages['nobodywarning'] = 'बिना केहि लेखि पठाउने?';\r
+$messages['notsentwarning'] = 'मेल पठएको छैन.. मेल रद्द गर्न चहानुहुन्छ?';\r
+$messages['noldapserver'] = 'कृपया खोजको निम्ति एउटा ऐलडाप सर्वर छान्नहोस';\r
+$messages['nocontactsreturned'] = 'कुनै सम्पर्क फेला परेनन्';\r
+$messages['nosearchname'] = 'कृपया सम्पर्कको नाम या ई-मेल भर्नुहोस';\r
+$messages['searchsuccessful'] = '$nr मेलहरु पाइयो';\r
+$messages['searchnomatch'] = 'खोज असफल रहयो';\r
+$messages['searching'] = 'खोजि भईरहेको छ...';\r
+$messages['checking'] = 'जाँच भईरहेको छ...';\r
+$messages['nospellerrors'] = 'कुनै गलत हिज्जे फेला परेनन्';\r
+$messages['folderdeleted'] = 'फोल्डर सफल्तापूर्वक मेटियो';\r
+$messages['deletedsuccessfully'] = 'सफल्तापूर्वक मेटियो';\r
+$messages['converting'] = 'मेलबाट फोर्माटिङ हटाईदै छ...';\r
+$messages['messageopenerror'] = 'सर्वरबाट मेल लोड हुन सकेन';\r
+$messages['fileuploaderror'] = 'फाईल अपलोड हुन असफल';\r
+$messages['filesizeerror'] = 'अपलोड गरिएको फाईल हद $size भन्दा ठूलो छ';\r
+$messages['copysuccess'] = 'सफल्तापूर्वक $nr ठेगानाहरु उतारियो';\r
+$messages['copyerror'] = 'कुनै पनि ठेगानाहरु उतार्न सकिएन';\r
+$messages['sourceisreadonly'] = 'यो ठेगाना को श्रोत पढ्नको लागि मात्र उपलब्ध छ';\r
+$messages['errorsavingcontact'] = 'स्मपर्कको ठेगाना जोगाउन सकिएन';\r
+\r
+?>\r
/*
- +-----------------------------------------------------------------------+
- | language/nl_NL/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Mark Moses <mark@katmoda.com> |
- +-----------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| language/nl_NL/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Mark Moses <mark@katmoda.com> |
++-----------------------------------------------------------------------+
- @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $
+@version $Id: labels.inc 1402 2008-05-19 07:50:25Z alec $
*/
$labels['drafts'] = 'Concepten';
$labels['sent'] = 'Verzonden';
$labels['trash'] = 'Prullenbak';
-$labels['junk'] = 'SPAM';
+$labels['junk'] = 'Spam';
$labels['subject'] = 'Onderwerp';
$labels['from'] = 'Afzender';
$labels['to'] = 'Ontvanger';
$labels['download'] = 'download';
$labels['filename'] = 'Bestandsnaam';
$labels['filesize'] = 'Bestandsgrootte';
-$labels['preferhtml'] = 'Prefereer HTML';
+$labels['preferhtml'] = 'Toon HTML';
$labels['htmlmessage'] = 'HTML Bericht';
-$labels['prettydate'] = 'Opgemaakte data';
+$labels['prettydate'] = 'Opgemaakte datums';
$labels['addtoaddressbook'] = 'Toevoegen aan adresboek';
$labels['sun'] = 'Zo';
$labels['mon'] = 'Ma';
$labels['thursday'] = 'Donderdag';
$labels['friday'] = 'Vrijdag';
$labels['saturday'] = 'Zaterdag';
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mrt';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'Mei';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Aug';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Okt';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dec';
+$labels['longjan'] = 'Januari';
+$labels['longfeb'] = 'Februari';
+$labels['longmar'] = 'Maart';
+$labels['longapr'] = 'April';
+$labels['longmay'] = 'Mei';
+$labels['longjun'] = 'Juni';
+$labels['longjul'] = 'Juli';
+$labels['longaug'] = 'Augustus';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Oktober';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'December';
$labels['today'] = 'Vandaag';
$labels['checkmail'] = 'Controleer op nieuwe berichten';
-$labels['writenewmessage'] = 'Nieuw bericht';
+$labels['writenewmessage'] = 'Maak een nieuw bericht';
$labels['replytomessage'] = 'Beantwoord het bericht';
$labels['replytoallmessage'] = 'Beantwoord alle ontvangers';
$labels['forwardmessage'] = 'Bericht doorsturen';
$labels['addcc'] = 'Kopie toevoegen';
$labels['addbcc'] = 'Bcc toevoegen';
$labels['addreplyto'] = 'Antwoord-aan toevoegen';
-$labels['mdnrequest'] = 'De afzender van dit bericht heeft gevraagd of er een melding kan worden verzonden als dit bericht is ontvangen. Wilt u de een melding verzenden?';
+$labels['mdnrequest'] = 'De afzender van dit bericht heeft gevraagd of er een melding kan worden verzonden als dit bericht is ontvangen. Wilt u de melding verzenden?';
$labels['receiptread'] = 'Ontvangstbevestiging (gelezen)';
$labels['yourmessage'] = 'Dit is een ontvangstbevestiging voor uw bericht';
$labels['receiptnote'] = 'Let op: Deze bevestigt alleen dat uw bericht bij de geaddresseerde is binnen gekomen. Er is geen garantie dat de geaddresseerde het bericht daadwerkelijk heeft gelezen of de inhoud heeft begrepen.';
$labels['htmleditor'] = 'Maak HTML berichten aan';
$labels['htmlsignature'] = 'HTML onderschrift';
$labels['previewpane'] = 'Toon voorbeeldvenster';
+$labels['logoutclear'] = 'Prullenbak legen bij uitloggen';
+$labels['logoutcompact'] = 'Postvak IN opschonen bij uitloggen';
+$labels['uisettings'] = 'Gebruikers Interface';
+$labels['serversettings'] = 'Server Instellingen';
+$labels['askuser'] = 'vraag de gebruiker';
+$labels['autosend'] = 'stuur automatisch';
+$labels['ignore'] = 'negeer';
+$labels['readwhendeleted'] = 'Markeer het bericht na verwijderen als gelezen';
$labels['autosavedraft'] = 'Concept automatisch opslaan';
$labels['everynminutes'] = 'iedere $n minuten';
$labels['never'] = 'nooit';
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/pl/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Tomasz Pajor <t.pajor@kei.pl> |
- | Sławomir Cichoń <slawek.cichon@gmail.com> |
- | Janusz Zamecki <janusz@zamecki.eu> |
- | Mariusz Szulerecki <nob@force.eu.org> |
- | Wojciech Szczepucha <donkoyote@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Witamy w $product';
-$labels['username'] = 'Nazwa';
-$labels['password'] = 'Hasło';
-$labels['server'] = 'Serwer';
-$labels['login'] = 'Zaloguj';
-$labels['logout'] = 'Wyloguj';
-$labels['mail'] = 'Skrzynka odbiorcza';
-$labels['settings'] = 'Ustawienia';
-$labels['addressbook'] = 'Książka adresowa';
-$labels['inbox'] = 'Odebrane';
-$labels['drafts'] = 'Kopie robocze';
-$labels['sent'] = 'Wysłane';
-$labels['trash'] = 'Kosz';
-$labels['junk'] = 'Spam';
-$labels['subject'] = 'Temat';
-$labels['from'] = 'Nadawca';
-$labels['to'] = 'Odbiorca';
-$labels['cc'] = 'Kopia';
-$labels['bcc'] = 'Ukryta kopia';
-$labels['replyto'] = 'Odpowiedz do';
-$labels['date'] = 'Data';
-$labels['size'] = 'Wielkość';
-$labels['priority'] = 'Priorytet';
-$labels['organization'] = 'Organizacja';
-$labels['reply-to'] = 'Odpowiedz do';
-$labels['mailboxlist'] = 'Foldery';
-$labels['messagesfromto'] = 'Wiadomości od $from do $to z $count';
-$labels['messagenrof'] = 'Wiadomość $nr z $count';
-$labels['moveto'] = 'Przenieś do...';
-$labels['download'] = 'Pobierz';
-$labels['filename'] = 'Nazwa pliku';
-$labels['filesize'] = 'Wielkość pliku';
-$labels['preferhtml'] = 'Domyślny HTML';
-$labels['htmlmessage'] = 'Wiadomość HTML';
-$labels['prettydate'] = 'Ładne daty';
-$labels['addtoaddressbook'] = 'Dodaj do książki adresowej ';
-$labels['sun'] = 'Nd';
-$labels['mon'] = 'Pn';
-$labels['tue'] = 'Wt';
-$labels['wed'] = 'Śr';
-$labels['thu'] = 'Czw';
-$labels['fri'] = 'Pt';
-$labels['sat'] = 'Sb';
-$labels['sunday'] = 'Niedziela';
-$labels['monday'] = 'Poniedziałek';
-$labels['tuesday'] = 'Wtorek';
-$labels['wednesday'] = 'Środa';
-$labels['thursday'] = 'Czwartek';
-$labels['friday'] = 'Piątek';
-$labels['saturday'] = 'Sobota';
-$labels['today'] = 'Dzisiaj';
-$labels['checkmail'] = 'Sprawdź skrzynkę';
-$labels['writenewmessage'] = 'Utwórz nową wiadomość';
-$labels['replytomessage'] = 'Odpowiedz nadawcy';
-$labels['replytoallmessage'] = 'Odpowiedz wszystkim';
-$labels['forwardmessage'] = 'Prześlij dalej';
-$labels['deletemessage'] = 'Usuń';
-$labels['movemessagetotrash'] = 'Przenieś do Kosza';
-$labels['printmessage'] = 'Drukuj';
-$labels['previousmessage'] = 'Pokaż poprzednią';
-$labels['previousmessages'] = 'Pokaż poprzednie';
-$labels['firstmessage'] = 'Pokaż pierwszą';
-$labels['firstmessages'] = 'Pokaż pierwsze';
-$labels['nextmessage'] = 'Pokaż następną';
-$labels['nextmessages'] = 'Pokaż następne';
-$labels['lastmessage'] = 'Pokaż ostatnią';
-$labels['lastmessages'] = 'Pokaż ostatnie';
-$labels['backtolist'] = 'Pokaż listę wiadomości';
-$labels['viewsource'] = 'Pokaż źródło';
-$labels['markmessages'] = 'Oznacz wiadomość';
-$labels['markread'] = 'Jako przeczytaną';
-$labels['markunread'] = 'Jako nieprzeczytaną';
-$labels['select'] = 'Zaznacz';
-$labels['all'] = 'Wszystkie';
-$labels['none'] = 'Anuluj';
-$labels['unread'] = 'Nieprzeczytane';
-$labels['compact'] = 'Upakuj';
-$labels['empty'] = 'Opróżnij';
-$labels['purge'] = 'Oczyść';
-$labels['quota'] = 'Użyte miejsce';
-$labels['unknown'] = 'nieznane';
-$labels['unlimited'] = 'bez limitu';
-$labels['quicksearch'] = 'Szybkie wyszukiwanie';
-$labels['resetsearch'] = 'Wyczyść filtr';
-$labels['compose'] = 'Utwórz wiadomość';
-$labels['savemessage'] = 'Zapisz kopię roboczą';
-$labels['sendmessage'] = 'Wyślij teraz';
-$labels['addattachment'] = 'Dołącz plik';
-$labels['charset'] = 'Kodowanie znaków';
-$labels['editortype'] = 'Typ edytora';
-$labels['returnreceipt'] = 'Potwierdzenie odbioru';
-$labels['checkspelling'] = 'Sprawdź pisownię';
-$labels['resumeediting'] = 'Zakończ sprawdzanie pisowni';
-$labels['revertto'] = 'Powróć do';
-$labels['attachments'] = 'Załączniki';
-$labels['upload'] = 'Wyślij';
-$labels['close'] = 'Zamknij';
-$labels['low'] = 'Bardzo niski';
-$labels['lowest'] = 'Niski';
-$labels['normal'] = 'Normalny';
-$labels['high'] = 'Wysoki';
-$labels['highest'] = 'Bardzo wysoki';
-$labels['nosubject'] = '(brak tematu)';
-$labels['showimages'] = 'Wyświetl obrazki';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Zwykły tekst';
-$labels['addcc'] = 'Dodaj Cc';
-$labels['addbcc'] = 'Dodaj Bcc';
-$labels['addreplyto'] = 'Dodaj Reply-To';
-$labels['mdnrequest'] = 'Nadawca zażądał potwierdzenia przeczytania tej wiadomości. Czy chcesz go powiadomić?';
-$labels['receiptread'] = 'Potwierdzenie otrzymania';
-$labels['yourmessage'] = 'To jest potwierdzenie dostarczenia Twojej wiadomości';
-$labels['receiptnote'] = 'Uwaga: To potwierdzenie dostarczenia wiadomości oznacza tylko, że wiadomość została wyświetlona na komputerze adresata. Nie ma żadnej gwarancji, że odbiorca przeczytał czy też zrozumiał treść wiadomości.';
-$labels['name'] = 'Nazwa';
-$labels['firstname'] = 'Imię';
-$labels['surname'] = 'Nazwisko';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Dodaj nowy kontakt do książki adresowej';
-$labels['editcontact'] = 'Edytuj kontakt';
-$labels['edit'] = 'Edytuj';
-$labels['cancel'] = 'Anuluj';
-$labels['save'] = 'Zapisz';
-$labels['delete'] = 'Kasuj';
-$labels['newcontact'] = 'Dodaj nowy kontakt';
-$labels['deletecontact'] = 'Usuń zaznaczone kontakty';
-$labels['composeto'] = 'Utwórz wiadomość dla wybranych kontaktów';
-$labels['contactsfromto'] = 'Kontakty od $from do $to z $count';
-$labels['print'] = 'Drukuj';
-$labels['export'] = 'Eksportuj';
-$labels['previouspage'] = 'poprzednia strona';
-$labels['firstpage'] = 'pierwsza strona';
-$labels['nextpage'] = 'następna strona';
-$labels['lastpage'] = 'ostatnia strona';
-$labels['groups'] = 'Grupy';
-$labels['personaladrbook'] = 'Książka adresowa';
-$labels['settingsfor'] = 'Ustawienia dla';
-$labels['preferences'] = 'Preferencje';
-$labels['userpreferences'] = 'Preferencje';
-$labels['editpreferences'] = 'Edytuj preferencje';
-$labels['identities'] = 'Tożsamości';
-$labels['manageidentities'] = 'Zarządzaj tożsamościami';
-$labels['newidentity'] = 'Nowa tożsamość';
-$labels['newitem'] = 'Nowy';
-$labels['edititem'] = 'Edytuj';
-$labels['setdefault'] = 'Domyślna';
-$labels['language'] = 'Język';
-$labels['timezone'] = 'Strefa czasowa';
-$labels['pagesize'] = 'Wierszy na stronie';
-$labels['signature'] = 'Podpis';
-$labels['dstactive'] = 'Czas letni';
-$labels['htmleditor'] = 'Twórz wiadomości HTML';
-$labels['htmlsignature'] = 'Podpis w HTML';
-$labels['previewpane'] = 'Pokaż podgląd';
-$labels['autosavedraft'] = 'Automatyczny zapis tworzonej wiadomości';
-$labels['everynminutes'] = 'co $n minut';
-$labels['never'] = 'nigdy';
-$labels['folder'] = 'Folder';
-$labels['folders'] = 'Foldery';
-$labels['foldername'] = 'Nazwa folderu';
-$labels['subscribed'] = 'Zasubskrybowany';
-$labels['messagecount'] = 'Wiadomości';
-$labels['create'] = 'Utwórz';
-$labels['createfolder'] = 'Utwórz nowy folder';
-$labels['rename'] = 'Zmień nazwę';
-$labels['renamefolder'] = 'Zmień nazwę folderu';
-$labels['deletefolder'] = 'Usuń folder';
-$labels['managefolders'] = 'Zarządzaj folderami';
-$labels['sortby'] = 'Sortuj wg';
-$labels['sortasc'] = 'Rosnąco';
-$labels['sortdesc'] = 'Malejąco';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/pl/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Tomasz Pajor <t.pajor@kei.pl> |
- | Author: Sławomir Cichoń <slawek.cichon@gmail.com> |
- | Janusz Zamecki <janusz@zamecki.eu> |
- | Mariusz Szulerecki <nob@force.eu.org> |
- | Wojciech Szczepucha <donkoyote@gmail.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Błąd logowania!';
-$messages['cookiesdisabled'] = 'Twoja przeglądarka nie obsługuje ciasteczek!';
-$messages['sessionerror'] = 'Błąd sesji bądź sesja wygasła!';
-$messages['imaperror'] = 'Błąd połączenia z serwerem!';
-$messages['nomessagesfound'] = 'Brak wiadomości w skrzynce.';
-$messages['loggedout'] = 'Użytkownik wylogował się poprawnie.';
-$messages['mailboxempty'] = 'Skrzynka jest pusta!';
-$messages['loading'] = 'Ładowanie...';
-$messages['loadingdata'] = 'Ładowanie danych...';
-$messages['checkingmail'] = 'Sprawdzanie nowych wiadomości...';
-$messages['sendingmessage'] = 'Wysyłanie wiadomości...';
-$messages['messagesent'] = 'Wiadomość została wysłana.';
-$messages['savingmessage'] = 'Zapisywanie wiadomości...';
-$messages['messagesaved'] = 'Wiadomość została zapisana w folderze Kopie robocze.';
-$messages['successfullysaved'] = 'Zapisano.';
-$messages['addedsuccessfully'] = 'Kontakt został dodany.';
-$messages['contactexists'] = 'Kontakt o podanym adresie e-mail już istnieje!';
-$messages['blockedimages'] = 'Ze względów bezpieczeństwa zewnętrzne obrazki zostały zablokowane.';
-$messages['encryptedmessage'] = 'Przepraszamy, nie można wyświetlić zaszyfrowanej wiadomości!';
-$messages['nocontactsfound'] = 'Nie znaleziono kontaktu!';
-$messages['contactnotfound'] = 'Szukany kontakt nie został odnaleziony';
-$messages['sendingfailed'] = 'Nie udało się wysłać wiadomości!';
-$messages['errorsaving'] = 'Błąd podczas zapisu!';
-$messages['errormoving'] = 'Nie można przenieść wybranej wiadomości!';
-$messages['errordeleting'] = 'Nie można usunąć wiadomości!';
-$messages['deletecontactconfirm'] = 'Czy na pewno chcesz usunąć wybrane kontakty?';
-$messages['deletemessagesconfirm'] = 'Czy na pewno chcesz usunąć wybrane wiadomości?';
-$messages['deletefolderconfirm'] = 'Czy na pewno chcesz usunąć wybrany folder?';
-$messages['purgefolderconfirm'] = 'Czy na pewno chcesz usunąć wszystkie wiadomości w tym folderze?';
-$messages['formincomplete'] = 'Uzupełnij formularz!';
-$messages['noemailwarning'] = 'Podaj poprawny adres e-mail!';
-$messages['nonamewarning'] = 'Podaj nazwę!';
-$messages['nopagesizewarning'] = 'Podaj poprawną wartość!';
-$messages['norecipientwarning'] = 'Podaj co najmniej jednego odbiorcę!';
-$messages['nosubjectwarning'] = 'Nie podano tematu wiadomości. Czy chcesz go teraz uzupełnić?';
-$messages['nobodywarning'] = 'Ta wiadomość jest pusta, czy mimo to chcesz ją wysłać?';
-$messages['notsentwarning'] = 'Wiadomość nie została wysłana. Czy chcesz usunąć tę wiadomość?';
-$messages['noldapserver'] = 'Wybierz serwer LDAP!';
-$messages['nocontactsreturned'] = 'Nie znaleziono kontaktów!';
-$messages['nosearchname'] = 'Podaj nazwę kontaktu lub jego adres e-mail.';
-$messages['searchsuccessful'] = 'Liczba znalezionych wiadomości: $nr';
-$messages['searchnomatch'] = 'Nic nie znaleziono.';
-$messages['searching'] = 'Wyszukiwanie...';
-$messages['checking'] = 'Sprawdzanie...';
-$messages['nospellerrors'] = 'Nie znaleziono błędów w pisowni.';
-$messages['folderdeleted'] = 'Folder został pomyślnie usunięty.';
-$messages['deletedsuccessfully'] = 'Usunięto';
-$messages['converting'] = 'Konwertowanie wiadomości...';
-$messages['messageopenerror'] = 'Nie można załadować wiadomości z serwera';
-$messages['fileuploaderror'] = 'Załączanie pliku nie powiodło się';
-$messages['filesizeerror'] = 'Plik przekracza maksymalną wielkość $size';
-$messages['copysuccess'] = 'Pomyślnie skopiowano następującą liczbę adresów: $nr';
-$messages['copyerror'] = 'Nie można skopiować żadnego adresu';
-$messages['sourceisreadonly'] = 'Źródło adresu jest tylko do odczytu';
-$messages['errorsavingcontact'] = 'Nie można było zapisać adresu kontaktu';
-$messages['movingmessage'] = 'Przenoszenie wiadomości...';
-$messages['receiptsent'] = 'Pomyślnie wysłano potwierdzenie dostarczenia';
-$messages['errorsendingreceipt'] = 'Nie można wysłać potwierdzenia';
-$messages['nodeletelastidentity'] = 'Nie można skasować tej tożsamości, ponieważ jest ostatnią.';
-$messages['addsubfolderhint'] = 'Ten folder zostanie utworzony jako podfolder aktualnie wybranego.';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/pl_PL/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Tomasz Pajor <t.pajor@kei.pl> |
+ | Sławomir Cichoń <slawek.cichon@gmail.com> |
+ | Janusz Zamecki <janusz@zamecki.eu> |
+ | Mariusz Szulerecki <nob@force.eu.org> |
+ | Wojciech Szczepucha <donkoyote@gmail.com> |
+ | Aleksander Machniak <alec@alec.pl> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1404 2008-05-19 08:12:54Z alec $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Witamy w $product';
+$labels['username'] = 'Nazwa';
+$labels['password'] = 'Hasło';
+$labels['server'] = 'Serwer';
+$labels['login'] = 'Zaloguj';
+$labels['logout'] = 'Wyloguj';
+$labels['mail'] = 'Skrzynka odbiorcza';
+$labels['settings'] = 'Ustawienia';
+$labels['addressbook'] = 'Książka adresowa';
+$labels['inbox'] = 'Odebrane';
+$labels['drafts'] = 'Kopie robocze';
+$labels['sent'] = 'Wysłane';
+$labels['trash'] = 'Kosz';
+$labels['junk'] = 'Spam';
+$labels['subject'] = 'Temat';
+$labels['from'] = 'Nadawca';
+$labels['to'] = 'Odbiorca';
+$labels['cc'] = 'Kopia';
+$labels['bcc'] = 'Ukryta kopia';
+$labels['replyto'] = 'Odpowiedz do';
+$labels['date'] = 'Data';
+$labels['size'] = 'Rozmiar';
+$labels['priority'] = 'Priorytet';
+$labels['organization'] = 'Organizacja';
+$labels['reply-to'] = 'Odpowiedz do';
+$labels['mailboxlist'] = 'Foldery';
+$labels['messagesfromto'] = 'Wiadomości od $from do $to z $count';
+$labels['messagenrof'] = 'Wiadomość $nr z $count';
+$labels['moveto'] = 'Przenieś do...';
+$labels['download'] = 'Pobierz';
+$labels['filename'] = 'Nazwa pliku';
+$labels['filesize'] = 'Rozmiar pliku';
+$labels['preferhtml'] = 'Domyślny HTML';
+$labels['htmlmessage'] = 'Wiadomość HTML';
+$labels['prettydate'] = 'Ładne daty';
+$labels['addtoaddressbook'] = 'Dodaj do książki adresowej ';
+$labels['sun'] = 'Nd';
+$labels['mon'] = 'Pn';
+$labels['tue'] = 'Wt';
+$labels['wed'] = 'Śr';
+$labels['thu'] = 'Czw';
+$labels['fri'] = 'Pt';
+$labels['sat'] = 'Sb';
+$labels['sunday'] = 'Niedziela';
+$labels['monday'] = 'Poniedziałek';
+$labels['tuesday'] = 'Wtorek';
+$labels['wednesday'] = 'Środa';
+$labels['thursday'] = 'Czwartek';
+$labels['friday'] = 'Piątek';
+$labels['saturday'] = 'Sobota';
+$labels['jan'] = 'sty';
+$labels['feb'] = 'lut';
+$labels['mar'] = 'mar';
+$labels['apr'] = 'kwi';
+$labels['may'] = 'maj';
+$labels['jun'] = 'cze';
+$labels['jul'] = 'lip';
+$labels['aug'] = 'sie';
+$labels['sep'] = 'wrz';
+$labels['oct'] = 'paź';
+$labels['nov'] = 'lis';
+$labels['dec'] = 'gru';
+$labels['longjan'] = 'styczeń';
+$labels['longfeb'] = 'luty';
+$labels['longmar'] = 'marzec';
+$labels['longapr'] = 'kwiecień';
+$labels['longmay'] = 'maj';
+$labels['longjun'] = 'czerwiec';
+$labels['longjul'] = 'lipiec';
+$labels['longaug'] = 'sierpień';
+$labels['longsep'] = 'wrzesień';
+$labels['longoct'] = 'październik';
+$labels['longnov'] = 'listopad';
+$labels['longdec'] = 'grudzień';
+$labels['today'] = 'Dzisiaj';
+$labels['checkmail'] = 'Sprawdź skrzynkę';
+$labels['writenewmessage'] = 'Utwórz nową wiadomość';
+$labels['replytomessage'] = 'Odpowiedz nadawcy';
+$labels['replytoallmessage'] = 'Odpowiedz wszystkim';
+$labels['forwardmessage'] = 'Prześlij dalej';
+$labels['deletemessage'] = 'Usuń';
+$labels['movemessagetotrash'] = 'Przenieś do Kosza';
+$labels['printmessage'] = 'Drukuj';
+$labels['previousmessage'] = 'Pokaż poprzednią';
+$labels['previousmessages'] = 'Pokaż poprzednie';
+$labels['firstmessage'] = 'Pokaż pierwszą';
+$labels['firstmessages'] = 'Pokaż pierwsze';
+$labels['nextmessage'] = 'Pokaż następną';
+$labels['nextmessages'] = 'Pokaż następne';
+$labels['lastmessage'] = 'Pokaż ostatnią';
+$labels['lastmessages'] = 'Pokaż ostatnie';
+$labels['backtolist'] = 'Pokaż listę wiadomości';
+$labels['viewsource'] = 'Pokaż źródło';
+$labels['markmessages'] = 'Oznacz wiadomość';
+$labels['markread'] = 'Jako przeczytaną';
+$labels['markunread'] = 'Jako nieprzeczytaną';
+$labels['select'] = 'Zaznacz';
+$labels['all'] = 'Wszystkie';
+$labels['none'] = 'Anuluj';
+$labels['unread'] = 'Nieprzeczytane';
+$labels['compact'] = 'Porządkuj';
+$labels['empty'] = 'Opróżnij';
+$labels['purge'] = 'Oczyść';
+$labels['quota'] = 'Użyte miejsce';
+$labels['unknown'] = 'nieznane';
+$labels['unlimited'] = 'bez limitu';
+$labels['quicksearch'] = 'Szybkie wyszukiwanie';
+$labels['resetsearch'] = 'Wyczyść filtr';
+$labels['compose'] = 'Utwórz wiadomość';
+$labels['savemessage'] = 'Zapisz kopię roboczą';
+$labels['sendmessage'] = 'Wyślij teraz';
+$labels['addattachment'] = 'Dołącz plik';
+$labels['charset'] = 'Kodowanie znaków';
+$labels['editortype'] = 'Typ edytora';
+$labels['returnreceipt'] = 'Potwierdzenie odbioru';
+$labels['checkspelling'] = 'Sprawdź pisownię';
+$labels['resumeediting'] = 'Zakończ sprawdzanie pisowni';
+$labels['revertto'] = 'Powróć do';
+$labels['attachments'] = 'Załączniki';
+$labels['upload'] = 'Wyślij';
+$labels['close'] = 'Zamknij';
+$labels['low'] = 'Bardzo niski';
+$labels['lowest'] = 'Niski';
+$labels['normal'] = 'Normalny';
+$labels['high'] = 'Wysoki';
+$labels['highest'] = 'Bardzo wysoki';
+$labels['nosubject'] = '(brak tematu)';
+$labels['showimages'] = 'Wyświetl obrazki';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Zwykły tekst';
+$labels['addcc'] = 'Dodaj Cc';
+$labels['addbcc'] = 'Dodaj Bcc';
+$labels['addreplyto'] = 'Dodaj Reply-To';
+$labels['mdnrequest'] = 'Nadawca zażądał potwierdzenia przeczytania tej wiadomości. Czy chcesz go powiadomić?';
+$labels['receiptread'] = 'Potwierdzenie otrzymania';
+$labels['yourmessage'] = 'To jest potwierdzenie dostarczenia Twojej wiadomości';
+$labels['receiptnote'] = 'Uwaga: To potwierdzenie dostarczenia wiadomości oznacza tylko, że wiadomość została wyświetlona na komputerze adresata. Nie ma żadnej gwarancji, że odbiorca przeczytał czy też zrozumiał treść wiadomości.';
+$labels['name'] = 'Nazwa';
+$labels['firstname'] = 'Imię';
+$labels['surname'] = 'Nazwisko';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Dodaj nowy kontakt do książki adresowej';
+$labels['editcontact'] = 'Edytuj kontakt';
+$labels['edit'] = 'Edytuj';
+$labels['cancel'] = 'Anuluj';
+$labels['save'] = 'Zapisz';
+$labels['delete'] = 'Usuń';
+$labels['newcontact'] = 'Dodaj nowy kontakt';
+$labels['deletecontact'] = 'Usuń zaznaczone kontakty';
+$labels['composeto'] = 'Utwórz wiadomość dla wybranych kontaktów';
+$labels['contactsfromto'] = 'Kontakty od $from do $to z $count';
+$labels['print'] = 'Drukuj';
+$labels['export'] = 'Eksportuj';
+$labels['previouspage'] = 'poprzednia strona';
+$labels['firstpage'] = 'pierwsza strona';
+$labels['nextpage'] = 'następna strona';
+$labels['lastpage'] = 'ostatnia strona';
+$labels['groups'] = 'Grupy';
+$labels['personaladrbook'] = 'Książka adresowa';
+$labels['settingsfor'] = 'Ustawienia dla';
+$labels['preferences'] = 'Preferencje';
+$labels['userpreferences'] = 'Preferencje użytkownika';
+$labels['editpreferences'] = 'Edytuj preferencje';
+$labels['identities'] = 'Tożsamości';
+$labels['manageidentities'] = 'Zarządzaj tożsamościami';
+$labels['newidentity'] = 'Nowa tożsamość';
+$labels['newitem'] = 'Nowy';
+$labels['edititem'] = 'Edytuj';
+$labels['setdefault'] = 'Domyślna';
+$labels['language'] = 'Język';
+$labels['timezone'] = 'Strefa czasowa';
+$labels['pagesize'] = 'Wierszy na stronie';
+$labels['signature'] = 'Podpis';
+$labels['dstactive'] = 'Czas letni';
+$labels['htmleditor'] = 'Twórz wiadomości HTML';
+$labels['htmlsignature'] = 'Podpis w HTML';
+$labels['previewpane'] = 'Pokaż podgląd';
+$labels['logoutclear'] = 'Przy wylogowaniu opróżnij Kosz';
+$labels['logoutcompact'] = 'Przy wylogowaniu porządkuj folder Odebrane';
+$labels['uisettings'] = 'Interfejs użytkownika';
+$labels['serversettings'] = 'Ustawienia serwera';
+$labels['mailboxview'] = 'Widok skrzynki pocztowej';
+$labels['mdnrequests'] = 'Potwierdzenia odbioru';
+$labels['askuser'] = 'spytaj użytkownika';
+$labels['autosend'] = 'wyślij automatycznie';
+$labels['ignore'] = 'ignoruj';
+$labels['readwhendeleted'] = 'Podczas usuwania oznacz wiadomość jako przeczytaną';
+$labels['flagfordeletion'] = 'Oznacz wiadomość do usunięcia zamiast ją usuwać';
+$labels['autosavedraft'] = 'Automatyczny zapis tworzonej wiadomości';
+$labels['everynminutes'] = 'co $n minut';
+$labels['never'] = 'nigdy';
+$labels['folder'] = 'Folder';
+$labels['folders'] = 'Foldery';
+$labels['foldername'] = 'Nazwa folderu';
+$labels['subscribed'] = 'Zasubskrybowany';
+$labels['messagecount'] = 'Wiadomości';
+$labels['create'] = 'Utwórz';
+$labels['createfolder'] = 'Utwórz nowy folder';
+$labels['rename'] = 'Zmień nazwę';
+$labels['renamefolder'] = 'Zmień nazwę folderu';
+$labels['deletefolder'] = 'Usuń folder';
+$labels['managefolders'] = 'Zarządzaj folderami';
+$labels['sortby'] = 'Sortuj wg';
+$labels['sortasc'] = 'Rosnąco';
+$labels['sortdesc'] = 'Malejąco';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/pl_PL/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Tomasz Pajor <t.pajor@kei.pl> |
+ | Author: Sławomir Cichoń <slawek.cichon@gmail.com> |
+ | Janusz Zamecki <janusz@zamecki.eu> |
+ | Mariusz Szulerecki <nob@force.eu.org> |
+ | Wojciech Szczepucha <donkoyote@gmail.com> |
+ | Aleksander Machniak <alec@alec.pl> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1245 2008-04-03 13:17:34Z alec $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Błąd logowania!';
+$messages['cookiesdisabled'] = 'Twoja przeglądarka nie obsługuje ciasteczek!';
+$messages['sessionerror'] = 'Błąd sesji bądź sesja wygasła!';
+$messages['imaperror'] = 'Błąd połączenia z serwerem!';
+$messages['nomessagesfound'] = 'Brak wiadomości w skrzynce.';
+$messages['loggedout'] = 'Użytkownik wylogował się poprawnie.';
+$messages['mailboxempty'] = 'Skrzynka jest pusta!';
+$messages['loading'] = 'Ładowanie...';
+$messages['loadingdata'] = 'Ładowanie danych...';
+$messages['checkingmail'] = 'Sprawdzanie nowych wiadomości...';
+$messages['sendingmessage'] = 'Wysyłanie wiadomości...';
+$messages['messagesent'] = 'Wiadomość została wysłana.';
+$messages['savingmessage'] = 'Zapisywanie wiadomości...';
+$messages['messagesaved'] = 'Wiadomość została zapisana w folderze Kopie robocze.';
+$messages['successfullysaved'] = 'Zapisano.';
+$messages['addedsuccessfully'] = 'Kontakt został dodany.';
+$messages['contactexists'] = 'Kontakt o podanym adresie e-mail już istnieje!';
+$messages['blockedimages'] = 'Ze względów bezpieczeństwa zewnętrzne obrazki zostały zablokowane.';
+$messages['encryptedmessage'] = 'Przepraszamy, nie można wyświetlić zaszyfrowanej wiadomości!';
+$messages['nocontactsfound'] = 'Nie znaleziono kontaktu!';
+$messages['contactnotfound'] = 'Szukany kontakt nie został odnaleziony';
+$messages['sendingfailed'] = 'Nie udało się wysłać wiadomości!';
+$messages['errorsaving'] = 'Błąd podczas zapisu!';
+$messages['errormoving'] = 'Nie można przenieść wybranej wiadomości!';
+$messages['errordeleting'] = 'Nie można usunąć wiadomości!';
+$messages['deletecontactconfirm'] = 'Czy na pewno chcesz usunąć wybrane kontakty?';
+$messages['deletemessagesconfirm'] = 'Czy na pewno chcesz usunąć wybrane wiadomości?';
+$messages['deletefolderconfirm'] = 'Czy na pewno chcesz usunąć wybrany folder?';
+$messages['purgefolderconfirm'] = 'Czy na pewno chcesz usunąć wszystkie wiadomości w tym folderze?';
+$messages['formincomplete'] = 'Uzupełnij formularz!';
+$messages['noemailwarning'] = 'Podaj poprawny adres e-mail!';
+$messages['nonamewarning'] = 'Podaj nazwę!';
+$messages['nopagesizewarning'] = 'Podaj poprawną wartość!';
+$messages['norecipientwarning'] = 'Podaj co najmniej jednego odbiorcę!';
+$messages['nosubjectwarning'] = 'Nie podano tematu wiadomości. Czy chcesz go teraz uzupełnić?';
+$messages['nobodywarning'] = 'Ta wiadomość jest pusta, czy mimo to chcesz ją wysłać?';
+$messages['notsentwarning'] = 'Wiadomość nie została wysłana. Czy chcesz usunąć tę wiadomość?';
+$messages['noldapserver'] = 'Wybierz serwer LDAP!';
+$messages['nocontactsreturned'] = 'Nie znaleziono kontaktów!';
+$messages['nosearchname'] = 'Podaj nazwę kontaktu lub jego adres e-mail.';
+$messages['searchsuccessful'] = 'Liczba znalezionych wiadomości: $nr';
+$messages['searchnomatch'] = 'Nic nie znaleziono.';
+$messages['searching'] = 'Wyszukiwanie...';
+$messages['checking'] = 'Sprawdzanie...';
+$messages['nospellerrors'] = 'Nie znaleziono błędów w pisowni.';
+$messages['folderdeleted'] = 'Folder został pomyślnie usunięty.';
+$messages['deletedsuccessfully'] = 'Usunięto';
+$messages['converting'] = 'Konwertowanie wiadomości...';
+$messages['messageopenerror'] = 'Nie można załadować wiadomości z serwera';
+$messages['fileuploaderror'] = 'Załączanie pliku nie powiodło się';
+$messages['filesizeerror'] = 'Plik przekracza maksymalną wielkość $size';
+$messages['copysuccess'] = 'Pomyślnie skopiowano następującą liczbę adresów: $nr';
+$messages['copyerror'] = 'Nie można skopiować żadnego adresu';
+$messages['sourceisreadonly'] = 'Źródło adresu jest tylko do odczytu';
+$messages['errorsavingcontact'] = 'Nie można było zapisać adresu kontaktu';
+$messages['movingmessage'] = 'Przenoszenie wiadomości...';
+$messages['receiptsent'] = 'Pomyślnie wysłano potwierdzenie dostarczenia';
+$messages['errorsendingreceipt'] = 'Nie można wysłać potwierdzenia';
+$messages['nodeletelastidentity'] = 'Nie można skasować tej tożsamości, ponieważ jest ostatnią.';
+$messages['addsubfolderhint'] = 'Ten folder zostanie utworzony jako podfolder aktualnie wybranego.';
+$messages['forbiddencharacter'] = 'Nazwa folderu zawiera niedozwolony znak';
+
+?>
\ No newline at end of file
/*
- +-----------------------------------------------------------------------+
- | language/pt_PT/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Authors: Sergio Rocha <sergio.rocha@makeitsimple.pt> |
- | João Vale <jpvale@gmail.com> |
- | Fernando Silva <fernando.silva@openquest.pt> |
- +-----------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| language/pt_PT/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Authors: Sergio Rocha <sergio.rocha@makeitsimple.pt> |
+| João Vale <jpvale@gmail.com> |
+| Fernando Silva <fernando.silva@openquest.pt> |
+| Nuno Costa <nuno@criacaoweb.net> |
++-----------------------------------------------------------------------+
- @version $Id: labels.inc 1068 2008-02-13 19:24:23Z yllar $
+@version $Id: labels.inc 1402 2008-05-19 07:50:25Z alec $
*/
$labels['thursday'] = 'Quinta-feira';
$labels['friday'] = 'Sexta-feira';
$labels['saturday'] = 'Sábado';
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Fev';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Abr';
+$labels['may'] = 'Mai';
+$labels['jun'] = 'Jun';
+$labels['jul'] = 'Jul';
+$labels['aug'] = 'Ago';
+$labels['sep'] = 'Set';
+$labels['oct'] = 'Out';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dez';
+$labels['longjan'] = 'Janeiro';
+$labels['longfeb'] = 'Fevereiro';
+$labels['longmar'] = 'Março';
+$labels['longapr'] = 'Abril';
+$labels['longmay'] = 'Maio';
+$labels['longjun'] = 'Junho';
+$labels['longjul'] = 'Julho';
+$labels['longaug'] = 'Agosto';
+$labels['longsep'] = 'Setembro';
+$labels['longoct'] = 'Outubro';
+$labels['longnov'] = 'Novembro';
+$labels['longdec'] = 'Dezembro';
$labels['today'] = 'Hoje';
$labels['checkmail'] = 'Verificar novas mensagens';
$labels['writenewmessage'] = 'Criar nova mensagem';
$labels['htmleditor'] = 'Escrever mensagens em HTML';
$labels['htmlsignature'] = 'Assinatura em HTML';
$labels['previewpane'] = 'Mostrar pré-visualização';
+$labels['logoutclear'] = 'Limpar a Lixeira após sair';
+$labels['logoutcompact'] = 'Compactar Caixa de Entrada após sair';
+$labels['uisettings'] = 'Interface de Utilizador';
+$labels['serversettings'] = 'Definições do Servidor';
$labels['autosavedraft'] = 'Salvar rascunho automaticamente';
$labels['everynminutes'] = 'a cada $n minutos';
$labels['never'] = 'nunca';
$labels['sortby'] = 'Ordenado por';
$labels['sortasc'] = 'Ascendente';
$labels['sortdesc'] = 'Descendente';
+$labels['mailboxview'] = 'Visualizar caixa de Entrada';
+$labels['mdnrequests'] = 'Enviar Notificações';
+$labels['askuser'] = 'Perguntar ao ultilizador';
+$labels['autosend'] = 'enviar automáticamente';
+$labels['ignore'] = 'ignorar';
+$labels['readwhendeleted'] = 'Marcar a mensagem como lida ao excluir';
?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ro/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Daniel Anechitoaie - danieLs <daniels@safereaction.ro> |
- | Ispas Dorin <dorinxp2004@yahoo.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1149 2008-02-28 19:52:09Z thomasb $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Bine ati venit la $product';
-$labels['username'] = 'Utilizator';
-$labels['password'] = 'Parola';
-$labels['server'] = 'Server';
-$labels['login'] = 'Autentificare';
-$labels['logout'] = 'Deconectare';
-$labels['mail'] = 'E-Mail';
-$labels['settings'] = 'Setari Personale';
-$labels['addressbook'] = 'Agenda';
-$labels['inbox'] = 'Primite';
-$labels['drafts'] = 'Ciorne';
-$labels['sent'] = 'Trimise';
-$labels['trash'] = 'Gunoi';
-$labels['junk'] = 'Junk';
-$labels['subject'] = 'Subiect';
-$labels['from'] = 'Expeditor';
-$labels['to'] = 'Destinatar';
-$labels['cc'] = 'Copie';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Raspunde-La';
-$labels['date'] = 'Data';
-$labels['size'] = 'Marime';
-$labels['priority'] = 'Prioritate';
-$labels['organization'] = 'Organizatie';
-$labels['reply-to'] = 'Raspunde-La';
-$labels['mailboxlist'] = 'Dosare';
-$labels['messagesfromto'] = 'Mesaje de la $from pana la $to din $count';
-$labels['messagenrof'] = '$nr mesaje din $count';
-$labels['moveto'] = 'muta in...';
-$labels['download'] = 'descarca';
-$labels['filename'] = 'Nume fisier';
-$labels['filesize'] = 'Marime fisier';
-$labels['preferhtml'] = 'Prefer HTML';
-$labels['htmlmessage'] = 'Mesaj HTML';
-$labels['prettydate'] = 'Data formatata';
-$labels['addtoaddressbook'] = 'Adauga in agenda';
-$labels['sun'] = 'Dum';
-$labels['mon'] = 'Lun';
-$labels['tue'] = 'Mar';
-$labels['wed'] = 'Mie';
-$labels['thu'] = 'Joi';
-$labels['fri'] = 'Vin';
-$labels['sat'] = 'Sam';
-$labels['sunday'] = 'Duminica';
-$labels['monday'] = 'Luni';
-$labels['tuesday'] = 'Marti';
-$labels['wednesday'] = 'Miercuri';
-$labels['thursday'] = 'Joi';
-$labels['friday'] = 'Vineri';
-$labels['saturday'] = 'Sambata';
-$labels['today'] = 'Astazi';
-$labels['checkmail'] = 'Verifica pentru mesaje noi';
-$labels['writenewmessage'] = 'Creaza mesaj nou';
-$labels['replytomessage'] = 'Raspunde la mesaj';
-$labels['replytoallmessage'] = 'Raspunde la toti';
-$labels['forwardmessage'] = 'Trimite mesajul mai departe';
-$labels['deletemessage'] = 'Trimite mesajul la gunoi';
-$labels['movemessagetotrash'] = 'Muta mesajul la gunoi';
-$labels['printmessage'] = 'Listeaza mesajul';
-$labels['previousmessage'] = 'Afiseaza mesajul anterior';
-$labels['previousmessages'] = 'Afiseaza setul anterior de mesaje';
-$labels['firstmessage'] = 'Afiseaza primul mesaj';
-$labels['firstmessages'] = 'Afiseaza primul set de mesaje';
-$labels['nextmessage'] = 'Afiseaza urmatorul mesaj';
-$labels['nextmessages'] = 'Afiseaza setul urmator de mesaje';
-$labels['lastmessage'] = 'Afiseaza ultimul mesaj';
-$labels['lastmessages'] = 'Afiseaza ultimul set de mesaje';
-$labels['backtolist'] = 'Inapoi la lista cu mesaje';
-$labels['viewsource'] = 'Afiseaza sursa';
-$labels['markmessages'] = 'Marcheaza mesajele';
-$labels['markread'] = 'Ca citit';
-$labels['markunread'] = 'Ca necitit';
-$labels['select'] = 'Selecteaza';
-$labels['all'] = 'Toate';
-$labels['none'] = 'Nici unul';
-$labels['unread'] = 'Necitite';
-$labels['compact'] = 'Compreseaza';
-$labels['empty'] = 'Goleste';
-$labels['purge'] = 'Curata';
-$labels['quota'] = 'Spatiu folosit';
-$labels['unknown'] = 'necunoscut';
-$labels['unlimited'] = 'nelimitat';
-$labels['quicksearch'] = 'Cautare rapida';
-$labels['resetsearch'] = 'Resetare cautare';
-$labels['compose'] = 'Compune mesaj';
-$labels['savemessage'] = 'Salveaza aceasta ciorna';
-$labels['sendmessage'] = 'Trimite mesaj';
-$labels['addattachment'] = 'Ataseaza fisier';
-$labels['charset'] = 'Set de caractere';
-$labels['editortype'] = 'Tip de editor';
-$labels['returnreceipt'] = 'Returneaza confirmare';
-$labels['checkspelling'] = 'Verifica ortografie';
-$labels['resumeediting'] = 'Reia editarea';
-$labels['revertto'] = 'Revina la';
-$labels['attachments'] = 'Atasamente';
-$labels['upload'] = 'Incarca';
-$labels['close'] = 'Inchide';
-$labels['low'] = 'Mica';
-$labels['lowest'] = 'Cea mai mica';
-$labels['normal'] = 'Normala';
-$labels['high'] = 'Mare';
-$labels['highest'] = 'Cea mai mare';
-$labels['nosubject'] = '(fara subiect)';
-$labels['showimages'] = 'Afiseaza imagini';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Text simplu';
-$labels['addcc'] = 'Adauga Cc';
-$labels['addbcc'] = 'Adauga Bcc';
-$labels['addreplyto'] = 'Adauga Raspunde-La';
-$labels['mdnrequest'] = 'Expeditorul acestui mesaj a solicitat sa fie notificat la cititrea mesajului. Doriti sa notificati expeditorul?';
-$labels['receiptread'] = 'Returneaza confirmare (citit)';
-$labels['yourmessage'] = 'Aceasta este o confirmare a mesajului dumneavoastra.';
-$labels['receiptnote'] = 'Nota: Aceasta confirmare doar va informeaza ca mesajul a fost afisat pe calculatorul destinatarului. Nu este nici o garantie ca destinatarul a citit sau a inteles continutul mesajului.';
-$labels['name'] = 'Nume de afisat';
-$labels['firstname'] = 'Nume';
-$labels['surname'] = 'Prenume';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Adauga contactul selectat in agenda';
-$labels['editcontact'] = 'Modifica contact';
-$labels['edit'] = 'Editeaza';
-$labels['cancel'] = 'Renunta';
-$labels['save'] = 'Salveaza';
-$labels['delete'] = 'Sterge';
-$labels['newcontact'] = 'Creaza contact nou';
-$labels['deletecontact'] = 'Sterge contactul selectat';
-$labels['composeto'] = 'Compune e-mail pentru';
-$labels['contactsfromto'] = 'Contacte de la $from pana la $to din $count';
-$labels['print'] = 'Listeaza';
-$labels['export'] = 'Exporta';
-$labels['previouspage'] = 'Pagina anterioara';
-$labels['firstpage'] = 'Arata primul set';
-$labels['nextpage'] = 'Pagina urmatoare';
-$labels['lastpage'] = 'Arata ultimul set';
-$labels['groups'] = 'Grupuri';
-$labels['personaladrbook'] = 'Adrese personale';
-$labels['settingsfor'] = 'Setari pentru';
-$labels['preferences'] = 'Preferinte';
-$labels['userpreferences'] = 'Preferinte utilizator';
-$labels['editpreferences'] = 'Modifica preferinte utilizator';
-$labels['identities'] = 'Identitati';
-$labels['manageidentities'] = 'Administreaza identitati pentru acest cont';
-$labels['newidentity'] = 'Identitate noua';
-$labels['newitem'] = 'Item nou';
-$labels['edititem'] = 'Editeaza item';
-$labels['setdefault'] = 'Seteaza implicit';
-$labels['language'] = 'Limba';
-$labels['timezone'] = 'Fus orar';
-$labels['pagesize'] = 'Randuri pe pagina';
-$labels['signature'] = 'Semnatura';
-$labels['dstactive'] = 'Daylight savings';
-$labels['htmleditor'] = 'Scrie mesaje HTML';
-$labels['htmlsignature'] = 'Semnatura HTML';
-$labels['previewpane'] = 'Arata preview';
-$labels['autosavedraft'] = 'Salveaza ciorna automat';
-$labels['everynminutes'] = 'fiecare $n minute';
-$labels['never'] = 'niciodata';
-$labels['folder'] = 'Dosar';
-$labels['folders'] = 'Dosare';
-$labels['foldername'] = 'Nume dosar';
-$labels['subscribed'] = 'Inscris';
-$labels['messagecount'] = 'Mesaje';
-$labels['create'] = 'Creaza';
-$labels['createfolder'] = 'Creaza dosar nou';
-$labels['rename'] = 'Redenumeste';
-$labels['renamefolder'] = 'Redenumeste dosar';
-$labels['deletefolder'] = 'Sterge dosar';
-$labels['managefolders'] = 'Administreaza dosare';
-$labels['sortby'] = 'Sorteaza dupa';
-$labels['sortasc'] = 'Sorteaza ascendent';
-$labels['sortdesc'] = 'Sorteaza descendent';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ro/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Daniel Anechitoaie - danieLs <daniels@safereaction.ro> |
- | Ispas Dorin <dorinxp2004@yahoo.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1149 2008-02-28 19:52:09Z thomasb $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Autentificare esuata';
-$messages['cookiesdisabled'] = 'Browserul dumneavoastra nu accepta cookies';
-$messages['sessionerror'] = 'Sesiunea dumneavoastra este invalida sau a expirat';
-$messages['imaperror'] = 'Conectarea la serverul IMAP a esuat';
-$messages['nomessagesfound'] = 'Nu a fost gasit nici un mesaj in aceasta casuta postala';
-$messages['loggedout'] = 'Sesiune incheiata cu succes. La revedere!';
-$messages['mailboxempty'] = 'Casuta postala este goala';
-$messages['loading'] = 'Se incarca...';
-$messages['loadingdata'] = 'Se incarca informatiile...';
-$messages['checkingmail'] = 'Verifica pentru mesaje noi...';
-$messages['sendingmessage'] = 'Trimitere mesaj...';
-$messages['messagesent'] = 'Mesajul a fost trimis cu succes!';
-$messages['savingmessage'] = 'Salvare mesaj...';
-$messages['messagesaved'] = 'Mesajul a fost salvat in Ciorne';
-$messages['successfullysaved'] = 'Salvarea s-a efectuat cu succes';
-$messages['addedsuccessfully'] = 'Contactul a fost adaugat cu succes in agenda';
-$messages['contactexists'] = 'Mai exista un contact cu aceasta adresa de e-mail';
-$messages['blockedimages'] = 'Pentru a va proteja intimitatea imaginile externe au fost blocate.';
-$messages['encryptedmessage'] = 'Acesta este un mesaj criptat si nu poate fi afisat. Ne pare rau.';
-$messages['nocontactsfound'] = 'Nu s-a gasit nici un contact';
-$messages['contactnotfound'] = 'Contactul solicitat nu a fost gasit.';
-$messages['sendingfailed'] = 'Nu s-a reusit trimiterea mesajului';
-$messages['errorsaving'] = 'A intervenit o eroare in timp ce se efectua salvarea';
-$messages['errormoving'] = 'Nu s-a putut muta mesajul';
-$messages['errordeleting'] = 'Nu s-a putut sterge mesajul';
-$messages['deletecontactconfirm'] = 'Sunteti sigur ca doriti sa stergeti contactul(ele) selectate?';
-$messages['deletemessagesconfirm'] = 'Chiar doriti sa stergeti mesajele selectate ?';
-$messages['deletefolderconfirm'] = 'Sunteti sigur ca doriti sa stergeti acest dosar?';
-$messages['purgefolderconfirm'] = 'Sunteti sigur ca doriti sa stergeti toate mesajele din acest dosar?';
-$messages['formincomplete'] = 'Formularul nu a fost completat corect';
-$messages['noemailwarning'] = 'Va rugam introduceti o adresa de e-mail valida';
-$messages['nonamewarning'] = 'Va rugam introduceti un nume';
-$messages['nopagesizewarning'] = 'Va rugam introduceti marimea paginii';
-$messages['norecipientwarning'] = 'Va rugam introduceti cel putin un destinatar';
-$messages['nosubjectwarning'] = 'Mesajul nu are subiect. Vreti sa introduceti unul acum?';
-$messages['nobodywarning'] = 'Trimiteti acest mesaj fara text?';
-$messages['notsentwarning'] = 'Mesajul nu a fost trimis. Vreti sa renuntatati la el?';
-$messages['noldapserver'] = 'Va rugam alegeti un server ldap pentru cautare';
-$messages['nocontactsreturned'] = 'Nu s-a gasit nici un contact';
-$messages['nosearchname'] = 'Va rugam introduceti un nume de contact sau adresa de e-mail';
-$messages['searchsuccessful'] = '$nr mesaje gasite';
-$messages['searchnomatch'] = 'Cautarea nu a returnat nici un rezultat';
-$messages['searching'] = 'Se cauta...';
-$messages['checking'] = 'Se verifica...';
-$messages['nospellerrors'] = 'Nu s-a gasit nicio greseala de ortografie';
-$messages['folderdeleted'] = 'Dosarul a fost sters cu succes';
-$messages['deletedsuccessfully'] = 'Mesaj sters cu succes !';
-$messages['converting'] = 'Resetez mesajul la parametrii initiali';
-$messages['messageopenerror'] = 'Nu am putut incarca mesajul din server';
-$messages['fileuploaderror'] = 'Incarcarea pe server a esuat';
-$messages['filesizeerror'] = 'Fisierul incarcat depaseste marimea de $size';
-$messages['copysuccess'] = 'Am copiat cu succes $nr de adrese';
-$messages['copyerror'] = 'Nu am putut copia nici o adresa';
-$messages['sourceisreadonly'] = 'Sursa adrese este "read-only"(se poate doar citi)';
-$messages['errorsavingcontact'] = 'Nu am putut salva adresa de contact';
-$messages['movingmessage'] = 'Mutare mesaj....';
-$messages['receiptsent'] = 'Confirmarea a fost trimisa cu succes';
-$messages['errorsendingreceipt'] = 'Confirmarea nu a putut fi trimisa';
-$messages['nodeletelastidentity'] = 'Nu putesti sterge aceasta identitate, este ultima.';
-$messages['addsubfolderhint'] = 'Acest dosar va fi creat ca subdosar al celui selectat.';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ro/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Daniel Anechitoaie - danieLs <daniels@safereaction.ro> |
+ | Ispas Dorin <dorinxp2004@yahoo.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1149 2008-02-28 19:52:09Z thomasb $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Bine ati venit la $product';
+$labels['username'] = 'Utilizator';
+$labels['password'] = 'Parola';
+$labels['server'] = 'Server';
+$labels['login'] = 'Autentificare';
+$labels['logout'] = 'Deconectare';
+$labels['mail'] = 'E-Mail';
+$labels['settings'] = 'Setari Personale';
+$labels['addressbook'] = 'Agenda';
+$labels['inbox'] = 'Primite';
+$labels['drafts'] = 'Ciorne';
+$labels['sent'] = 'Trimise';
+$labels['trash'] = 'Gunoi';
+$labels['junk'] = 'Junk';
+$labels['subject'] = 'Subiect';
+$labels['from'] = 'Expeditor';
+$labels['to'] = 'Destinatar';
+$labels['cc'] = 'Copie';
+$labels['bcc'] = 'Bcc';
+$labels['replyto'] = 'Raspunde-La';
+$labels['date'] = 'Data';
+$labels['size'] = 'Marime';
+$labels['priority'] = 'Prioritate';
+$labels['organization'] = 'Organizatie';
+$labels['reply-to'] = 'Raspunde-La';
+$labels['mailboxlist'] = 'Dosare';
+$labels['messagesfromto'] = 'Mesaje de la $from pana la $to din $count';
+$labels['messagenrof'] = '$nr mesaje din $count';
+$labels['moveto'] = 'muta in...';
+$labels['download'] = 'descarca';
+$labels['filename'] = 'Nume fisier';
+$labels['filesize'] = 'Marime fisier';
+$labels['preferhtml'] = 'Prefer HTML';
+$labels['htmlmessage'] = 'Mesaj HTML';
+$labels['prettydate'] = 'Data formatata';
+$labels['addtoaddressbook'] = 'Adauga in agenda';
+$labels['sun'] = 'Dum';
+$labels['mon'] = 'Lun';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mie';
+$labels['thu'] = 'Joi';
+$labels['fri'] = 'Vin';
+$labels['sat'] = 'Sam';
+$labels['sunday'] = 'Duminica';
+$labels['monday'] = 'Luni';
+$labels['tuesday'] = 'Marti';
+$labels['wednesday'] = 'Miercuri';
+$labels['thursday'] = 'Joi';
+$labels['friday'] = 'Vineri';
+$labels['saturday'] = 'Sambata';
+$labels['today'] = 'Astazi';
+$labels['checkmail'] = 'Verifica pentru mesaje noi';
+$labels['writenewmessage'] = 'Creaza mesaj nou';
+$labels['replytomessage'] = 'Raspunde la mesaj';
+$labels['replytoallmessage'] = 'Raspunde la toti';
+$labels['forwardmessage'] = 'Trimite mesajul mai departe';
+$labels['deletemessage'] = 'Trimite mesajul la gunoi';
+$labels['movemessagetotrash'] = 'Muta mesajul la gunoi';
+$labels['printmessage'] = 'Listeaza mesajul';
+$labels['previousmessage'] = 'Afiseaza mesajul anterior';
+$labels['previousmessages'] = 'Afiseaza setul anterior de mesaje';
+$labels['firstmessage'] = 'Afiseaza primul mesaj';
+$labels['firstmessages'] = 'Afiseaza primul set de mesaje';
+$labels['nextmessage'] = 'Afiseaza urmatorul mesaj';
+$labels['nextmessages'] = 'Afiseaza setul urmator de mesaje';
+$labels['lastmessage'] = 'Afiseaza ultimul mesaj';
+$labels['lastmessages'] = 'Afiseaza ultimul set de mesaje';
+$labels['backtolist'] = 'Inapoi la lista cu mesaje';
+$labels['viewsource'] = 'Afiseaza sursa';
+$labels['markmessages'] = 'Marcheaza mesajele';
+$labels['markread'] = 'Ca citit';
+$labels['markunread'] = 'Ca necitit';
+$labels['select'] = 'Selecteaza';
+$labels['all'] = 'Toate';
+$labels['none'] = 'Nici unul';
+$labels['unread'] = 'Necitite';
+$labels['compact'] = 'Compreseaza';
+$labels['empty'] = 'Goleste';
+$labels['purge'] = 'Curata';
+$labels['quota'] = 'Spatiu folosit';
+$labels['unknown'] = 'necunoscut';
+$labels['unlimited'] = 'nelimitat';
+$labels['quicksearch'] = 'Cautare rapida';
+$labels['resetsearch'] = 'Resetare cautare';
+$labels['compose'] = 'Compune mesaj';
+$labels['savemessage'] = 'Salveaza aceasta ciorna';
+$labels['sendmessage'] = 'Trimite mesaj';
+$labels['addattachment'] = 'Ataseaza fisier';
+$labels['charset'] = 'Set de caractere';
+$labels['editortype'] = 'Tip de editor';
+$labels['returnreceipt'] = 'Returneaza confirmare';
+$labels['checkspelling'] = 'Verifica ortografie';
+$labels['resumeediting'] = 'Reia editarea';
+$labels['revertto'] = 'Revina la';
+$labels['attachments'] = 'Atasamente';
+$labels['upload'] = 'Incarca';
+$labels['close'] = 'Inchide';
+$labels['low'] = 'Mica';
+$labels['lowest'] = 'Cea mai mica';
+$labels['normal'] = 'Normala';
+$labels['high'] = 'Mare';
+$labels['highest'] = 'Cea mai mare';
+$labels['nosubject'] = '(fara subiect)';
+$labels['showimages'] = 'Afiseaza imagini';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Text simplu';
+$labels['addcc'] = 'Adauga Cc';
+$labels['addbcc'] = 'Adauga Bcc';
+$labels['addreplyto'] = 'Adauga Raspunde-La';
+$labels['mdnrequest'] = 'Expeditorul acestui mesaj a solicitat sa fie notificat la cititrea mesajului. Doriti sa notificati expeditorul?';
+$labels['receiptread'] = 'Returneaza confirmare (citit)';
+$labels['yourmessage'] = 'Aceasta este o confirmare a mesajului dumneavoastra.';
+$labels['receiptnote'] = 'Nota: Aceasta confirmare doar va informeaza ca mesajul a fost afisat pe calculatorul destinatarului. Nu este nici o garantie ca destinatarul a citit sau a inteles continutul mesajului.';
+$labels['name'] = 'Nume de afisat';
+$labels['firstname'] = 'Nume';
+$labels['surname'] = 'Prenume';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Adauga contactul selectat in agenda';
+$labels['editcontact'] = 'Modifica contact';
+$labels['edit'] = 'Editeaza';
+$labels['cancel'] = 'Renunta';
+$labels['save'] = 'Salveaza';
+$labels['delete'] = 'Sterge';
+$labels['newcontact'] = 'Creaza contact nou';
+$labels['deletecontact'] = 'Sterge contactul selectat';
+$labels['composeto'] = 'Compune e-mail pentru';
+$labels['contactsfromto'] = 'Contacte de la $from pana la $to din $count';
+$labels['print'] = 'Listeaza';
+$labels['export'] = 'Exporta';
+$labels['previouspage'] = 'Pagina anterioara';
+$labels['firstpage'] = 'Arata primul set';
+$labels['nextpage'] = 'Pagina urmatoare';
+$labels['lastpage'] = 'Arata ultimul set';
+$labels['groups'] = 'Grupuri';
+$labels['personaladrbook'] = 'Adrese personale';
+$labels['settingsfor'] = 'Setari pentru';
+$labels['preferences'] = 'Preferinte';
+$labels['userpreferences'] = 'Preferinte utilizator';
+$labels['editpreferences'] = 'Modifica preferinte utilizator';
+$labels['identities'] = 'Identitati';
+$labels['manageidentities'] = 'Administreaza identitati pentru acest cont';
+$labels['newidentity'] = 'Identitate noua';
+$labels['newitem'] = 'Item nou';
+$labels['edititem'] = 'Editeaza item';
+$labels['setdefault'] = 'Seteaza implicit';
+$labels['language'] = 'Limba';
+$labels['timezone'] = 'Fus orar';
+$labels['pagesize'] = 'Randuri pe pagina';
+$labels['signature'] = 'Semnatura';
+$labels['dstactive'] = 'Daylight savings';
+$labels['htmleditor'] = 'Scrie mesaje HTML';
+$labels['htmlsignature'] = 'Semnatura HTML';
+$labels['previewpane'] = 'Arata preview';
+$labels['autosavedraft'] = 'Salveaza ciorna automat';
+$labels['everynminutes'] = 'fiecare $n minute';
+$labels['never'] = 'niciodata';
+$labels['folder'] = 'Dosar';
+$labels['folders'] = 'Dosare';
+$labels['foldername'] = 'Nume dosar';
+$labels['subscribed'] = 'Inscris';
+$labels['messagecount'] = 'Mesaje';
+$labels['create'] = 'Creaza';
+$labels['createfolder'] = 'Creaza dosar nou';
+$labels['rename'] = 'Redenumeste';
+$labels['renamefolder'] = 'Redenumeste dosar';
+$labels['deletefolder'] = 'Sterge dosar';
+$labels['managefolders'] = 'Administreaza dosare';
+$labels['sortby'] = 'Sorteaza dupa';
+$labels['sortasc'] = 'Sorteaza ascendent';
+$labels['sortdesc'] = 'Sorteaza descendent';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ro/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Daniel Anechitoaie - danieLs <daniels@safereaction.ro> |
+ | Ispas Dorin <dorinxp2004@yahoo.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1149 2008-02-28 19:52:09Z thomasb $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Autentificare esuata';
+$messages['cookiesdisabled'] = 'Browserul dumneavoastra nu accepta cookies';
+$messages['sessionerror'] = 'Sesiunea dumneavoastra este invalida sau a expirat';
+$messages['imaperror'] = 'Conectarea la serverul IMAP a esuat';
+$messages['nomessagesfound'] = 'Nu a fost gasit nici un mesaj in aceasta casuta postala';
+$messages['loggedout'] = 'Sesiune incheiata cu succes. La revedere!';
+$messages['mailboxempty'] = 'Casuta postala este goala';
+$messages['loading'] = 'Se incarca...';
+$messages['loadingdata'] = 'Se incarca informatiile...';
+$messages['checkingmail'] = 'Verifica pentru mesaje noi...';
+$messages['sendingmessage'] = 'Trimitere mesaj...';
+$messages['messagesent'] = 'Mesajul a fost trimis cu succes!';
+$messages['savingmessage'] = 'Salvare mesaj...';
+$messages['messagesaved'] = 'Mesajul a fost salvat in Ciorne';
+$messages['successfullysaved'] = 'Salvarea s-a efectuat cu succes';
+$messages['addedsuccessfully'] = 'Contactul a fost adaugat cu succes in agenda';
+$messages['contactexists'] = 'Mai exista un contact cu aceasta adresa de e-mail';
+$messages['blockedimages'] = 'Pentru a va proteja intimitatea imaginile externe au fost blocate.';
+$messages['encryptedmessage'] = 'Acesta este un mesaj criptat si nu poate fi afisat. Ne pare rau.';
+$messages['nocontactsfound'] = 'Nu s-a gasit nici un contact';
+$messages['contactnotfound'] = 'Contactul solicitat nu a fost gasit.';
+$messages['sendingfailed'] = 'Nu s-a reusit trimiterea mesajului';
+$messages['errorsaving'] = 'A intervenit o eroare in timp ce se efectua salvarea';
+$messages['errormoving'] = 'Nu s-a putut muta mesajul';
+$messages['errordeleting'] = 'Nu s-a putut sterge mesajul';
+$messages['deletecontactconfirm'] = 'Sunteti sigur ca doriti sa stergeti contactul(ele) selectate?';
+$messages['deletemessagesconfirm'] = 'Chiar doriti sa stergeti mesajele selectate ?';
+$messages['deletefolderconfirm'] = 'Sunteti sigur ca doriti sa stergeti acest dosar?';
+$messages['purgefolderconfirm'] = 'Sunteti sigur ca doriti sa stergeti toate mesajele din acest dosar?';
+$messages['formincomplete'] = 'Formularul nu a fost completat corect';
+$messages['noemailwarning'] = 'Va rugam introduceti o adresa de e-mail valida';
+$messages['nonamewarning'] = 'Va rugam introduceti un nume';
+$messages['nopagesizewarning'] = 'Va rugam introduceti marimea paginii';
+$messages['norecipientwarning'] = 'Va rugam introduceti cel putin un destinatar';
+$messages['nosubjectwarning'] = 'Mesajul nu are subiect. Vreti sa introduceti unul acum?';
+$messages['nobodywarning'] = 'Trimiteti acest mesaj fara text?';
+$messages['notsentwarning'] = 'Mesajul nu a fost trimis. Vreti sa renuntatati la el?';
+$messages['noldapserver'] = 'Va rugam alegeti un server ldap pentru cautare';
+$messages['nocontactsreturned'] = 'Nu s-a gasit nici un contact';
+$messages['nosearchname'] = 'Va rugam introduceti un nume de contact sau adresa de e-mail';
+$messages['searchsuccessful'] = '$nr mesaje gasite';
+$messages['searchnomatch'] = 'Cautarea nu a returnat nici un rezultat';
+$messages['searching'] = 'Se cauta...';
+$messages['checking'] = 'Se verifica...';
+$messages['nospellerrors'] = 'Nu s-a gasit nicio greseala de ortografie';
+$messages['folderdeleted'] = 'Dosarul a fost sters cu succes';
+$messages['deletedsuccessfully'] = 'Mesaj sters cu succes !';
+$messages['converting'] = 'Resetez mesajul la parametrii initiali';
+$messages['messageopenerror'] = 'Nu am putut incarca mesajul din server';
+$messages['fileuploaderror'] = 'Incarcarea pe server a esuat';
+$messages['filesizeerror'] = 'Fisierul incarcat depaseste marimea de $size';
+$messages['copysuccess'] = 'Am copiat cu succes $nr de adrese';
+$messages['copyerror'] = 'Nu am putut copia nici o adresa';
+$messages['sourceisreadonly'] = 'Sursa adrese este "read-only"(se poate doar citi)';
+$messages['errorsavingcontact'] = 'Nu am putut salva adresa de contact';
+$messages['movingmessage'] = 'Mutare mesaj....';
+$messages['receiptsent'] = 'Confirmarea a fost trimisa cu succes';
+$messages['errorsendingreceipt'] = 'Confirmarea nu a putut fi trimisa';
+$messages['nodeletelastidentity'] = 'Nu putesti sterge aceasta identitate, este ultima.';
+$messages['addsubfolderhint'] = 'Acest dosar va fi creat ca subdosar al celui selectat.';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ru_RU/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Maxim Zenin <maxx@webmechanics.ru> |
- | Vladimir Kulev <me@lightoze.net> |
- | Artur Smolkin <admin@roundcube.ru> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1134 2008-02-22 15:05:18Z yllar $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Добро пожаловать в $product!';
-$labels['username'] = 'Имя пользователя';
-$labels['password'] = 'Пароль';
-$labels['server'] = 'Сервер';
-$labels['login'] = 'Войти';
-$labels['logout'] = 'Выход';
-$labels['mail'] = 'Почта';
-$labels['settings'] = 'Настройки';
-$labels['addressbook'] = 'Контакты';
-$labels['inbox'] = 'Входящие';
-$labels['drafts'] = 'Черновики';
-$labels['sent'] = 'Отправленные';
-$labels['trash'] = 'Корзина';
-$labels['junk'] = 'СПАМ';
-$labels['subject'] = 'Тема';
-$labels['from'] = 'От';
-$labels['to'] = 'Кому';
-$labels['cc'] = 'Копия';
-$labels['bcc'] = 'Скрытая';
-$labels['replyto'] = 'Обратный адрес';
-$labels['date'] = 'Дата';
-$labels['size'] = 'Размер';
-$labels['priority'] = 'Приоритет';
-$labels['organization'] = 'Организация';
-$labels['reply-to'] = 'Обратный адрес';
-$labels['mailboxlist'] = 'Папки';
-$labels['messagesfromto'] = 'Сообщения с $from по $to из $count';
-$labels['messagenrof'] = 'Сообщение $nr из $count';
-$labels['moveto'] = 'Переместить в...';
-$labels['download'] = 'Загрузить';
-$labels['filename'] = 'Имя файла';
-$labels['filesize'] = 'Размер файла';
-$labels['preferhtml'] = 'Предпочитать HTML';
-$labels['htmlmessage'] = 'Сообщение HTML';
-$labels['prettydate'] = 'Красивые даты';
-$labels['addtoaddressbook'] = 'Добавить в контакты';
-$labels['sun'] = 'Вс';
-$labels['mon'] = 'Пн';
-$labels['tue'] = 'Вт';
-$labels['wed'] = 'Ср';
-$labels['thu'] = 'Чт';
-$labels['fri'] = 'Пт';
-$labels['sat'] = 'Сб';
-$labels['sunday'] = 'Воскресенье';
-$labels['monday'] = 'Понедельник';
-$labels['tuesday'] = 'Вторник';
-$labels['wednesday'] = 'Среда';
-$labels['thursday'] = 'Четверг';
-$labels['friday'] = 'Пятница';
-$labels['saturday'] = 'Суббота';
-$labels['today'] = 'Сегодня';
-$labels['checkmail'] = 'Доставить почту';
-$labels['writenewmessage'] = 'Новое сообщение';
-$labels['replytomessage'] = 'Ответить';
-$labels['replytoallmessage'] = 'Ответить всем';
-$labels['forwardmessage'] = 'Переслать';
-$labels['deletemessage'] = 'В корзину';
-$labels['movemessagetotrash'] = 'Переместить сообщение в корзину';
-$labels['printmessage'] = 'Печать';
-$labels['previousmessage'] = 'Показать предыдущее сообщение';
-$labels['previousmessages'] = 'Предыдущее';
-$labels['firstmessage'] = 'Показать первое сообщение';
-$labels['firstmessages'] = 'Первое сообщение';
-$labels['nextmessage'] = 'Показать следующее сообщение';
-$labels['nextmessages'] = 'Следующее';
-$labels['lastmessage'] = 'Показать последнее сообщение';
-$labels['lastmessages'] = 'Последнее сообщение';
-$labels['backtolist'] = 'К списку сообщений';
-$labels['viewsource'] = 'Исходный текст';
-$labels['markmessages'] = 'Отметить сообщение';
-$labels['markread'] = 'как прочитанное';
-$labels['markunread'] = 'как непрочитанное';
-$labels['select'] = 'Выбрать';
-$labels['all'] = 'Все';
-$labels['none'] = 'Ничего';
-$labels['unread'] = 'Непрочитанные';
-$labels['compact'] = 'Сжать';
-$labels['empty'] = 'Опустошить';
-$labels['purge'] = 'Очистить';
-$labels['quota'] = 'Квота';
-$labels['unknown'] = 'неизвестно';
-$labels['unlimited'] = 'без ограничений';
-$labels['quicksearch'] = 'Быстрый поиск';
-$labels['resetsearch'] = 'Сброс';
-$labels['compose'] = 'Написать сообщение';
-$labels['savemessage'] = 'Сохранить черновик';
-$labels['sendmessage'] = 'Отправить сейчас';
-$labels['addattachment'] = 'Добавить вложение';
-$labels['charset'] = 'Кодировка';
-$labels['editortype'] = 'Редактор';
-$labels['returnreceipt'] = 'Запрос ответа';
-$labels['checkspelling'] = 'Проверить орфографию';
-$labels['resumeediting'] = 'Продолжить редактирование';
-$labels['revertto'] = 'Отменить правки';
-$labels['attachments'] = 'Вложения';
-$labels['upload'] = 'Загрузить';
-$labels['close'] = 'Закрыть';
-$labels['low'] = 'Низкий';
-$labels['lowest'] = 'Нижайш.';
-$labels['normal'] = 'Норм.';
-$labels['high'] = 'Высокий';
-$labels['highest'] = 'Высоч.';
-$labels['nosubject'] = '(без темы)';
-$labels['showimages'] = 'Показать изображения';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Обычный текст';
-$labels['addcc'] = 'Копия';
-$labels['addbcc'] = 'Скрытая копия';
-$labels['addreplyto'] = 'Обратный адрес';
-$labels['mdnrequest'] = 'Отправитель этого сообщения запросил уведомление о прочтении. Отправить уведомление?';
-$labels['receiptread'] = 'Уведомление о прочтении';
-$labels['yourmessage'] = 'Это уведомление о прочтении вашего сообщения';
-$labels['receiptnote'] = 'Это уведомление означает только, что сообщение было открыто получателем, и не гарантирует того, что оно было прочитано и (или) понято.';
-$labels['name'] = 'Отображаемое имя';
-$labels['firstname'] = 'Имя';
-$labels['surname'] = 'Фамилия';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Добавить выбранные контакты в список контактов';
-$labels['editcontact'] = 'Редактировать контакт';
-$labels['edit'] = 'Правка';
-$labels['cancel'] = 'Отмена';
-$labels['save'] = 'Сохранить';
-$labels['delete'] = 'Удалить';
-$labels['newcontact'] = 'Создать новый контакт';
-$labels['deletecontact'] = 'Удалить выбранные контакты';
-$labels['composeto'] = 'Создать сообщение для выбранных контактов';
-$labels['contactsfromto'] = 'Контакты с $from по $to из $count';
-$labels['print'] = 'Печать';
-$labels['export'] = 'Экспорт';
-$labels['previouspage'] = 'Показать предыдущий';
-$labels['firstpage'] = 'Показать первый';
-$labels['nextpage'] = 'Показать следующий';
-$labels['lastpage'] = 'Показать последний';
-$labels['groups'] = 'Группы';
-$labels['personaladrbook'] = 'Персональные адреса';
-$labels['settingsfor'] = 'Настройки для';
-$labels['preferences'] = 'Настройки';
-$labels['userpreferences'] = 'Настройки пользователя';
-$labels['editpreferences'] = 'Редактировать настройки пользователя';
-$labels['identities'] = 'Профили';
-$labels['manageidentities'] = 'Управление профилями';
-$labels['newidentity'] = 'Новый профиль';
-$labels['newitem'] = 'Новый';
-$labels['edititem'] = 'Правка';
-$labels['setdefault'] = 'Использовать по умолчанию';
-$labels['language'] = 'Язык';
-$labels['timezone'] = 'Часовой пояс';
-$labels['pagesize'] = 'Строк на странице';
-$labels['signature'] = 'Подпись';
-$labels['dstactive'] = 'Перевод часов';
-$labels['htmleditor'] = 'Создавать сообщения в HTML';
-$labels['htmlsignature'] = 'Подпись в HTML';
-$labels['previewpane'] = 'Показать панель превью';
-$labels['autosavedraft'] = 'Автосохранение черновика';
-$labels['everynminutes'] = 'каждые $n минут';
-$labels['never'] = 'никогда';
-$labels['folder'] = 'Папка';
-$labels['folders'] = 'Папки';
-$labels['foldername'] = 'Имя папки';
-$labels['subscribed'] = 'Подписан';
-$labels['messagecount'] = 'сообщения';
-$labels['create'] = 'Создать';
-$labels['createfolder'] = 'Создать новую папку';
-$labels['rename'] = 'Переименовать';
-$labels['renamefolder'] = 'Переименовать папку';
-$labels['deletefolder'] = 'Удалить папку';
-$labels['managefolders'] = 'Управление папками';
-$labels['sortby'] = 'Сортировать по';
-$labels['sortasc'] = 'Возрастанию';
-$labels['sortdesc'] = 'Убыванию';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/ru_RU/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Maxim Zenin <maxx@webmechanics.ru> |
- | Vladimir Kulev <me@lightoze.net> |
- | Artur Smolkin <admin@roundcube.ru> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1134 2008-02-22 15:05:18Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Неудачная попытка входа';
-$messages['cookiesdisabled'] = 'Ваш броузер не принимает cookie';
-$messages['sessionerror'] = 'Ваша сессия устарела';
-$messages['imaperror'] = 'Неудачное соединение с IMAP сервером';
-$messages['nomessagesfound'] = 'Сообщений не найдено';
-$messages['loggedout'] = 'Ваша сессия завершена. Всего доброго!';
-$messages['mailboxempty'] = 'Почтовый ящик пуст';
-$messages['loading'] = 'Загрузка...';
-$messages['loadingdata'] = 'Загрузка данных...';
-$messages['checkingmail'] = 'Проверка новых сообщений...';
-$messages['sendingmessage'] = 'Отправка сообщения...';
-$messages['messagesent'] = 'Сообщение отправлено';
-$messages['savingmessage'] = 'Сохранение сообщения...';
-$messages['messagesaved'] = 'Сохранено в Черновиках';
-$messages['successfullysaved'] = 'Сохранено';
-$messages['addedsuccessfully'] = 'Контакт добавлен в список контактов';
-$messages['contactexists'] = 'Контакт с этим адресом e-mail уже существует';
-$messages['blockedimages'] = 'В целях безопасности загрузка изображений заблокирована.';
-$messages['encryptedmessage'] = 'Сообщение зашифровано и не может быть показано. Обратитесь к администратору сервера.';
-$messages['nocontactsfound'] = 'Контакты не найдены';
-$messages['contactnotfound'] = 'Требуемый контакт не найден';
-$messages['sendingfailed'] = 'Не удалось отправить сообщение';
-$messages['errorsaving'] = 'В процессе сохранения произошла ошибка';
-$messages['errormoving'] = 'Не удалось переместить сообщение';
-$messages['errordeleting'] = 'Не удалось удалить сообщение';
-$messages['deletecontactconfirm'] = 'Вы действительно хотите удалить выделенные контакты?';
-$messages['deletemessagesconfirm'] = 'Вы действительно хотите удалить выбранные сообщения?';
-$messages['deletefolderconfirm'] = 'Вы действительно хотите удалить эту папку?';
-$messages['purgefolderconfirm'] = 'Вы действительно хотите удалить все сообщения в этой папке?';
-$messages['formincomplete'] = 'Заполнены не все поля';
-$messages['noemailwarning'] = 'Пожалуйста, введите корректный адрес электронной почты';
-$messages['nonamewarning'] = 'Пожалуйста, введите имя';
-$messages['nopagesizewarning'] = 'Пожалуйста, введите размер страницы';
-$messages['norecipientwarning'] = 'Пожалуйста, введите имя получателя';
-$messages['nosubjectwarning'] = 'Поле "Тема" не заполнено. Хотите заполнить его сейчас?';
-$messages['nobodywarning'] = 'Отправить сообщение без текста?';
-$messages['notsentwarning'] = 'Сообщение не было отправлено. Вы хотите отказаться от отправки?';
-$messages['noldapserver'] = 'Пожалуйста, выберите LDAP сервер для поиска';
-$messages['nocontactsreturned'] = 'Контакты не найдены';
-$messages['nosearchname'] = 'Пожалуйста, введите имя или адрес E-Mail';
-$messages['searchsuccessful'] = 'Найденных сообщений - $nr';
-$messages['searchnomatch'] = 'Сообщений не найдено';
-$messages['searching'] = 'Поиск...';
-$messages['checking'] = 'Проверка...';
-$messages['nospellerrors'] = 'Орфографических ошибок не найдено';
-$messages['folderdeleted'] = 'Папка удалена';
-$messages['deletedsuccessfully'] = 'Удалено';
-$messages['converting'] = 'Удаление форматирования сообщения...';
-$messages['messageopenerror'] = 'Невозможно загрузить сообщение с сервера';
-$messages['fileuploaderror'] = 'Невозможно загрузить файл';
-$messages['filesizeerror'] = 'Загруженный файл больше максимального размера в $size';
-$messages['copysuccess'] = 'Скопировано $nr адресов';
-$messages['copyerror'] = 'Невозможно скопировать адреса';
-$messages['sourceisreadonly'] = 'Данный источник адресов только для чтения';
-$messages['errorsavingcontact'] = 'Невозможно сохранить адрес контакта';
-$messages['movingmessage'] = 'Перемещение сообщения…';
-$messages['receiptsent'] = 'Уведомление о прочтении отправлено';
-$messages['errorsendingreceipt'] = 'Уведомление о прочтении не отправлено';
-$messages['nodeletelastidentity'] = 'Вы не можете удалить этот профиль, он у вас последний';
-$messages['addsubfolderhint'] = 'Эта папка будет создана как подпапка в текущей папке';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ru_RU/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Maxim Zenin <maxx@webmechanics.ru> |
+ | Vladimir Kulev <me@lightoze.net> |
+ | Artur Smolkin <admin@roundcube.ru> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1429 2008-05-27 05:35:06Z alec $
+
+*/
+
+$labels = array();
+
+// login page
+$labels['welcome'] = 'Добро пожаловать в $product!';
+$labels['username'] = 'Имя пользователя';
+$labels['password'] = 'Пароль';
+$labels['server'] = 'Сервер';
+$labels['login'] = 'Войти';
+
+// taskbar
+$labels['logout'] = 'Выход';
+$labels['mail'] = 'Почта';
+$labels['settings'] = 'Настройки';
+$labels['addressbook'] = 'Контакты';
+
+// mailbox names
+$labels['inbox'] = 'Входящие';
+$labels['drafts'] = 'Черновики';
+$labels['sent'] = 'Отправленные';
+$labels['trash'] = 'Корзина';
+$labels['junk'] = 'СПАМ';
+
+// message listing
+$labels['subject'] = 'Тема';
+$labels['from'] = 'От';
+$labels['to'] = 'Кому';
+$labels['cc'] = 'Копия';
+$labels['bcc'] = 'Скрытая';
+$labels['replyto'] = 'Обратный адрес';
+$labels['date'] = 'Дата';
+$labels['size'] = 'Размер';
+$labels['priority'] = 'Приоритет';
+$labels['organization'] = 'Организация';
+
+// aliases
+$labels['reply-to'] = 'Обратный адрес';
+
+$labels['mailboxlist'] = 'Папки';
+$labels['messagesfromto'] = 'Сообщения с $from по $to из $count';
+$labels['messagenrof'] = 'Сообщение $nr из $count';
+
+$labels['moveto'] = 'Переместить в...';
+$labels['download'] = 'Загрузить';
+
+$labels['filename'] = 'Имя файла';
+$labels['filesize'] = 'Размер файла';
+
+$labels['preferhtml'] = 'Предпочитать HTML';
+$labels['htmlmessage'] = 'Сообщение HTML';
+$labels['prettydate'] = 'Красивые даты';
+
+$labels['addtoaddressbook'] = 'Добавить в контакты';
+
+// weekdays short
+$labels['sun'] = 'Вс';
+$labels['mon'] = 'Пн';
+$labels['tue'] = 'Вт';
+$labels['wed'] = 'Ср';
+$labels['thu'] = 'Чт';
+$labels['fri'] = 'Пт';
+$labels['sat'] = 'Сб';
+
+// weekdays long
+$labels['sunday'] = 'Воскресенье';
+$labels['monday'] = 'Понедельник';
+$labels['tuesday'] = 'Вторник';
+$labels['wednesday'] = 'Среда';
+$labels['thursday'] = 'Четверг';
+$labels['friday'] = 'Пятница';
+$labels['saturday'] = 'Суббота';
+
+// months short
+$labels['jan'] = 'Янв';
+$labels['feb'] = 'Фев';
+$labels['mar'] = 'Мар';
+$labels['apr'] = 'Апр';
+$labels['may'] = 'Май';
+$labels['jun'] = 'Июн';
+$labels['jul'] = 'Июл';
+$labels['aug'] = 'Авг';
+$labels['sep'] = 'Сен';
+$labels['oct'] = 'Окт';
+$labels['nov'] = 'Ноя';
+$labels['dec'] = 'Дек';
+
+// months long
+$labels['longjan'] = 'Январь';
+$labels['longfeb'] = 'Февраль';
+$labels['longmar'] = 'Март';
+$labels['longapr'] = 'Апрель';
+$labels['longmay'] = 'Май';
+$labels['longjun'] = 'Июнь';
+$labels['longjul'] = 'Июль';
+$labels['longaug'] = 'Август';
+$labels['longsep'] = 'Сентябрь';
+$labels['longoct'] = 'Октябрь';
+$labels['longnov'] = 'Ноябрь';
+$labels['longdec'] = 'Декабрь';
+
+$labels['today'] = 'Сегодня';
+
+// toolbar buttons
+$labels['checkmail'] = 'Доставить почту';
+$labels['writenewmessage'] = 'Новое сообщение';
+$labels['replytomessage'] = 'Ответить';
+$labels['replytoallmessage'] = 'Ответить всем';
+$labels['forwardmessage'] = 'Переслать';
+$labels['deletemessage'] = 'В корзину';
+$labels['movemessagetotrash'] = 'Переместить сообщение в корзину';
+$labels['printmessage'] = 'Печать';
+$labels['previousmessage'] = 'Показать предыдущее сообщение';
+$labels['previousmessages'] = 'Предыдущее';
+$labels['firstmessage'] = 'Показать первое сообщение';
+$labels['firstmessages'] = 'Первое сообщение';
+$labels['nextmessage'] = 'Показать следующее сообщение';
+$labels['nextmessages'] = 'Следующее';
+$labels['lastmessage'] = 'Показать последнее сообщение';
+$labels['lastmessages'] = 'Последнее сообщение';
+$labels['backtolist'] = 'К списку сообщений';
+$labels['viewsource'] = 'Исходный текст';
+$labels['markmessages'] = 'Отметить сообщение';
+$labels['markread'] = 'как прочитанное';
+$labels['markunread'] = 'как непрочитанное';
+
+$labels['select'] = 'Выбрать';
+$labels['all'] = 'Все';
+$labels['none'] = 'Ничего';
+$labels['unread'] = 'Непрочитанные';
+
+$labels['compact'] = 'Сжать';
+$labels['empty'] = 'Опустошить';
+$labels['purge'] = 'Очистить';
+
+$labels['quota'] = 'Квота';
+$labels['unknown'] = 'неизвестно';
+$labels['unlimited'] = 'без ограничений';
+
+$labels['quicksearch'] = 'Быстрый поиск';
+$labels['resetsearch'] = 'Сброс';
+
+
+// message compose
+$labels['compose'] = 'Написать сообщение';
+$labels['savemessage'] = 'Сохранить черновик';
+$labels['sendmessage'] = 'Отправить сейчас';
+$labels['addattachment'] = 'Добавить вложение';
+$labels['charset'] = 'Кодировка';
+$labels['editortype'] = 'Редактор';
+$labels['returnreceipt'] = 'Запрос ответа';
+
+$labels['checkspelling'] = 'Проверить орфографию';
+$labels['resumeediting'] = 'Продолжить редактирование';
+$labels['revertto'] = 'Отменить правки';
+
+$labels['attachments'] = 'Вложения';
+$labels['upload'] = 'Загрузить';
+$labels['close'] = 'Закрыть';
+
+$labels['low'] = 'Низкий';
+$labels['lowest'] = 'Нижайш.';
+$labels['normal'] = 'Норм.';
+$labels['high'] = 'Высокий';
+$labels['highest'] = 'Высоч.';
+
+$labels['nosubject'] = '(без темы)';
+$labels['showimages'] = 'Показать изображения';
+
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Обычный текст';
+
+$labels['addcc'] = 'Копия';
+$labels['addbcc'] = 'Скрытая копия';
+$labels['addreplyto'] = 'Обратный адрес';
+
+// mdn
+$labels['mdnrequest'] = 'Отправитель этого сообщения запросил уведомление о прочтении. Отправить уведомление?';
+$labels['receiptread'] = 'Уведомление о прочтении';
+$labels['yourmessage'] = 'Это уведомление о прочтении вашего сообщения';
+$labels['receiptnote'] = 'Это уведомление означает только, что сообщение было открыто получателем, и не гарантирует того, что оно было прочитано и (или) понято.';
+
+// address book
+$labels['name'] = 'Отображаемое имя';
+$labels['firstname'] = 'Имя';
+$labels['surname'] = 'Фамилия';
+$labels['email'] = 'E-Mail';
+
+$labels['addcontact'] = 'Добавить выбранные контакты в список контактов';
+$labels['editcontact'] = 'Редактировать контакт';
+
+$labels['edit'] = 'Правка';
+$labels['cancel'] = 'Отмена';
+$labels['save'] = 'Сохранить';
+$labels['delete'] = 'Удалить';
+
+$labels['newcontact'] = 'Создать новый контакт';
+$labels['deletecontact'] = 'Удалить выбранные контакты';
+$labels['composeto'] = 'Создать сообщение для выбранных контактов';
+$labels['contactsfromto'] = 'Контакты с $from по $to из $count';
+$labels['print'] = 'Печать';
+$labels['export'] = 'Экспорт';
+
+$labels['previouspage'] = 'Показать предыдущий';
+$labels['firstpage'] = 'Показать первый';
+$labels['nextpage'] = 'Показать следующий';
+$labels['lastpage'] = 'Показать последний';
+
+$labels['groups'] = 'Группы';
+$labels['personaladrbook'] = 'Персональные адреса';
+
+
+// settings
+$labels['settingsfor'] = 'Настройки для';
+
+$labels['preferences'] = 'Настройки';
+$labels['userpreferences'] = 'Настройки пользователя';
+$labels['editpreferences'] = 'Редактировать настройки пользователя';
+
+$labels['identities'] = 'Профили';
+$labels['manageidentities'] = 'Управление профилями';
+$labels['newidentity'] = 'Новый профиль';
+
+$labels['newitem'] = 'Новый';
+$labels['edititem'] = 'Правка';
+
+$labels['setdefault'] = 'Использовать по умолчанию';
+$labels['language'] = 'Язык';
+$labels['timezone'] = 'Часовой пояс';
+$labels['pagesize'] = 'Строк на странице';
+$labels['signature'] = 'Подпись';
+$labels['dstactive'] = 'Перевод часов';
+$labels['htmleditor'] = 'Создавать сообщения в HTML';
+$labels['htmlsignature'] = 'Подпись в HTML';
+$labels['previewpane'] = 'Показать панель превью';
+$labels['logoutclear'] = 'Очищать корзину при выходе';
+$labels['logoutcompact'] = 'Сжать Входящие при выходе';
+$labels['uisettings'] = 'Пользовательский интерфейс';
+$labels['serversettings'] = 'Настройки сервера';
+$labels['mailboxview'] = 'Вид почтового ящика';
+$labels['mdnrequests'] = 'Уведомления о прочтении';
+$labels['askuser'] = 'спросить перед отправкой';
+$labels['autosend'] = 'отправлять автоматически';
+$labels['ignore'] = 'игнорировать';
+$labels['readwhendeleted'] = 'Помечать как прочитанное при удалении';
+$labels['flagfordeletion'] = 'Помечать "для удаления" вместо удаления';
+
+$labels['autosavedraft'] = 'Автосохранение черновика';
+$labels['everynminutes'] = 'каждые $n минут';
+$labels['never'] = 'никогда';
+
+$labels['folder'] = 'Папка';
+$labels['folders'] = 'Папки';
+$labels['foldername'] = 'Имя папки';
+$labels['subscribed'] = 'Подписан';
+$labels['messagecount'] = 'сообщения';
+$labels['create'] = 'Создать';
+$labels['createfolder'] = 'Создать новую папку';
+$labels['rename'] = 'Переименовать';
+$labels['renamefolder'] = 'Переименовать папку';
+$labels['deletefolder'] = 'Удалить папку';
+$labels['managefolders'] = 'Управление папками';
+
+$labels['sortby'] = 'Сортировать по';
+$labels['sortasc'] = 'Возрастанию';
+$labels['sortdesc'] = 'Убыванию';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/ru_RU/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Maxim Zenin <maxx@webmechanics.ru> |
+ | Vladimir Kulev <me@lightoze.net> |
+ | Artur Smolkin <admin@roundcube.ru> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1134 2008-02-22 15:05:18Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Неудачная попытка входа';
+$messages['cookiesdisabled'] = 'Ваш броузер не принимает cookie';
+$messages['sessionerror'] = 'Ваша сессия устарела';
+$messages['imaperror'] = 'Неудачное соединение с IMAP сервером';
+$messages['nomessagesfound'] = 'Сообщений не найдено';
+$messages['loggedout'] = 'Ваша сессия завершена. Всего доброго!';
+$messages['mailboxempty'] = 'Почтовый ящик пуст';
+$messages['loading'] = 'Загрузка...';
+$messages['loadingdata'] = 'Загрузка данных...';
+$messages['checkingmail'] = 'Проверка новых сообщений...';
+$messages['sendingmessage'] = 'Отправка сообщения...';
+$messages['messagesent'] = 'Сообщение отправлено';
+$messages['savingmessage'] = 'Сохранение сообщения...';
+$messages['messagesaved'] = 'Сохранено в Черновиках';
+$messages['successfullysaved'] = 'Сохранено';
+$messages['addedsuccessfully'] = 'Контакт добавлен в список контактов';
+$messages['contactexists'] = 'Контакт с этим адресом e-mail уже существует';
+$messages['blockedimages'] = 'В целях безопасности загрузка изображений заблокирована.';
+$messages['encryptedmessage'] = 'Сообщение зашифровано и не может быть показано. Обратитесь к администратору сервера.';
+$messages['nocontactsfound'] = 'Контакты не найдены';
+$messages['contactnotfound'] = 'Требуемый контакт не найден';
+$messages['sendingfailed'] = 'Не удалось отправить сообщение';
+$messages['errorsaving'] = 'В процессе сохранения произошла ошибка';
+$messages['errormoving'] = 'Не удалось переместить сообщение';
+$messages['errordeleting'] = 'Не удалось удалить сообщение';
+$messages['deletecontactconfirm'] = 'Вы действительно хотите удалить выделенные контакты?';
+$messages['deletemessagesconfirm'] = 'Вы действительно хотите удалить выбранные сообщения?';
+$messages['deletefolderconfirm'] = 'Вы действительно хотите удалить эту папку?';
+$messages['purgefolderconfirm'] = 'Вы действительно хотите удалить все сообщения в этой папке?';
+$messages['formincomplete'] = 'Заполнены не все поля';
+$messages['noemailwarning'] = 'Пожалуйста, введите корректный адрес электронной почты';
+$messages['nonamewarning'] = 'Пожалуйста, введите имя';
+$messages['nopagesizewarning'] = 'Пожалуйста, введите размер страницы';
+$messages['norecipientwarning'] = 'Пожалуйста, введите имя получателя';
+$messages['nosubjectwarning'] = 'Поле "Тема" не заполнено. Хотите заполнить его сейчас?';
+$messages['nobodywarning'] = 'Отправить сообщение без текста?';
+$messages['notsentwarning'] = 'Сообщение не было отправлено. Вы хотите отказаться от отправки?';
+$messages['noldapserver'] = 'Пожалуйста, выберите LDAP сервер для поиска';
+$messages['nocontactsreturned'] = 'Контакты не найдены';
+$messages['nosearchname'] = 'Пожалуйста, введите имя или адрес E-Mail';
+$messages['searchsuccessful'] = 'Найденных сообщений - $nr';
+$messages['searchnomatch'] = 'Сообщений не найдено';
+$messages['searching'] = 'Поиск...';
+$messages['checking'] = 'Проверка...';
+$messages['nospellerrors'] = 'Орфографических ошибок не найдено';
+$messages['folderdeleted'] = 'Папка удалена';
+$messages['deletedsuccessfully'] = 'Удалено';
+$messages['converting'] = 'Удаление форматирования сообщения...';
+$messages['messageopenerror'] = 'Невозможно загрузить сообщение с сервера';
+$messages['fileuploaderror'] = 'Невозможно загрузить файл';
+$messages['filesizeerror'] = 'Загруженный файл больше максимального размера в $size';
+$messages['copysuccess'] = 'Скопировано $nr адресов';
+$messages['copyerror'] = 'Невозможно скопировать адреса';
+$messages['sourceisreadonly'] = 'Данный источник адресов только для чтения';
+$messages['errorsavingcontact'] = 'Невозможно сохранить адрес контакта';
+$messages['movingmessage'] = 'Перемещение сообщения…';
+$messages['receiptsent'] = 'Уведомление о прочтении отправлено';
+$messages['errorsendingreceipt'] = 'Уведомление о прочтении не отправлено';
+$messages['nodeletelastidentity'] = 'Вы не можете удалить этот профиль, он у вас последний';
+$messages['addsubfolderhint'] = 'Эта папка будет создана как подпапка в текущей папке';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/se/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Fredrik Nygren <f.nygren@gmail.com> |
- | Andreas Henriksson <andreas@fatal.se> |
- | Jonas Näsholm <hostmaster@bitfuse.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Välkommen till $product';
-$labels['username'] = 'Användarnamn';
-$labels['password'] = 'Lösenord';
-$labels['server'] = 'Server';
-$labels['login'] = 'Logga in';
-$labels['logout'] = 'Logga ut';
-$labels['mail'] = 'Meddelanden';
-$labels['settings'] = 'Personliga inställningar';
-$labels['addressbook'] = 'Adressbok';
-$labels['inbox'] = 'Inkorg';
-$labels['drafts'] = 'Utkast';
-$labels['sent'] = 'Skickat';
-$labels['trash'] = 'Papperskorg';
-$labels['junk'] = 'Skräp';
-$labels['subject'] = 'Ämne';
-$labels['from'] = 'Avsändare';
-$labels['to'] = 'Mottagare';
-$labels['cc'] = 'Kopia';
-$labels['bcc'] = 'Hemlig kopia';
-$labels['replyto'] = 'Svara till';
-$labels['date'] = 'Datum';
-$labels['size'] = 'Storlek';
-$labels['priority'] = 'Prioritet';
-$labels['organization'] = 'Organisation';
-$labels['reply-to'] = 'Svara till';
-$labels['mailboxlist'] = 'Mappar';
-$labels['messagesfromto'] = 'Meddelande $from till $to av $count';
-$labels['messagenrof'] = 'Meddelande $nr av $count';
-$labels['moveto'] = 'flytta till...';
-$labels['download'] = 'ladda ner';
-$labels['filename'] = 'Filnamn';
-$labels['filesize'] = 'Filstorlek';
-$labels['preferhtml'] = 'Visa HTML';
-$labels['htmlmessage'] = 'HTML-meddelande';
-$labels['prettydate'] = 'Fina datum';
-$labels['addtoaddressbook'] = 'Lägg till i adressbok';
-$labels['sun'] = 'Sön';
-$labels['mon'] = 'Mån';
-$labels['tue'] = 'Tis';
-$labels['wed'] = 'Ons';
-$labels['thu'] = 'Tor';
-$labels['fri'] = 'Fre';
-$labels['sat'] = 'Lör';
-$labels['sunday'] = 'Söndag';
-$labels['monday'] = 'Måndag';
-$labels['tuesday'] = 'Tisdag';
-$labels['wednesday'] = 'Onsdag';
-$labels['thursday'] = 'Torsdag';
-$labels['friday'] = 'Fredag';
-$labels['saturday'] = 'Lördag';
-$labels['today'] = 'Idag';
-$labels['checkmail'] = 'Hämta nya meddelanden';
-$labels['writenewmessage'] = 'Skapa nytt meddelande';
-$labels['replytomessage'] = 'Svara avsändaren';
-$labels['replytoallmessage'] = 'Svara avsändaren och alla mottagare';
-$labels['forwardmessage'] = 'Vidarebefordra meddelande';
-$labels['deletemessage'] = 'Radera meddelande';
-$labels['movemessagetotrash'] = 'Flytta meddelande till papperskorgen';
-$labels['printmessage'] = 'Skriv ut';
-$labels['previousmessage'] = 'Visa föregående meddelande';
-$labels['previousmessages'] = 'Visa tidigare grupp av meddelanden';
-$labels['firstmessage'] = 'Visa första meddelandet';
-$labels['firstmessages'] = 'Visa första gruppen av meddelanden';
-$labels['nextmessage'] = 'Visa nästa meddelande';
-$labels['nextmessages'] = 'Visa nästa grupp av meddelanden';
-$labels['lastmessage'] = 'Visa sista meddelandet';
-$labels['lastmessages'] = 'Visa sista gruppen av meddelanden';
-$labels['backtolist'] = 'Tillbaka till meddelandelistan';
-$labels['viewsource'] = 'Visa källa';
-$labels['markmessages'] = 'Markera meddelande';
-$labels['markread'] = 'Som läst';
-$labels['markunread'] = 'Som oläst';
-$labels['select'] = 'Välj';
-$labels['all'] = 'Alla';
-$labels['none'] = 'Ingen';
-$labels['unread'] = 'Olästa';
-$labels['compact'] = 'Packa';
-$labels['empty'] = 'Töm';
-$labels['purge'] = 'Rensa';
-$labels['quota'] = 'Diskutrymme';
-$labels['unknown'] = 'okänd';
-$labels['unlimited'] = 'obegränsad';
-$labels['quicksearch'] = 'Snabbsök';
-$labels['resetsearch'] = 'Återställ sökning';
-$labels['compose'] = 'Skapa nytt meddelande';
-$labels['savemessage'] = 'Spara utkast';
-$labels['sendmessage'] = 'Skicka meddelande';
-$labels['addattachment'] = 'Bifoga fil';
-$labels['charset'] = 'Teckenkodning';
-$labels['editortype'] = 'Typ av redigerare';
-$labels['returnreceipt'] = 'Mottagarkvitto';
-$labels['checkspelling'] = 'Kontrollera stavning';
-$labels['resumeediting'] = 'Återuppta redigering';
-$labels['revertto'] = 'Återgå till';
-$labels['attachments'] = 'Bilagor';
-$labels['upload'] = 'Bifoga';
-$labels['close'] = 'Stäng';
-$labels['low'] = 'Låg';
-$labels['lowest'] = 'Lägst';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'Hög';
-$labels['highest'] = 'Högst';
-$labels['nosubject'] = '(inget ämne)';
-$labels['showimages'] = 'Visa bilder';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Oformaterad text';
-$labels['addcc'] = 'Kopia';
-$labels['addbcc'] = 'Hemlig kopia';
-$labels['addreplyto'] = 'Svara till';
-$labels['mdnrequest'] = 'Avsändaren har bett om att bli uppmärksammad när du läst det här meddelandet. Vill du skicka uppmärksamma avsändaren?';
-$labels['receiptread'] = 'Svarskvitto (läst)';
-$labels['yourmessage'] = 'Det här är ett svarskvitto för ditt meddelande';
-$labels['receiptnote'] = 'Notera: Det här kvittot berättar bara att meddelandet visats på mottagarens dator. Det finns ingen garanti att mottagaren har läst och förstått innehållet i meddelandet';
-$labels['name'] = 'Visa namn';
-$labels['firstname'] = 'Förnamn';
-$labels['surname'] = 'Efternamn';
-$labels['email'] = 'E-post';
-$labels['addcontact'] = 'Lägg till ny kontakt';
-$labels['editcontact'] = 'Redigera kontakt';
-$labels['edit'] = 'Redigera';
-$labels['cancel'] = 'Avbryt';
-$labels['save'] = 'Spara';
-$labels['delete'] = 'Radera';
-$labels['newcontact'] = 'Skapa nytt kontaktkort';
-$labels['deletecontact'] = 'Radera valda kontakter';
-$labels['composeto'] = 'Skriv meddelande till';
-$labels['contactsfromto'] = 'Kontakter $from till $to av $count';
-$labels['print'] = 'Skriv ut';
-$labels['export'] = 'Exportera';
-$labels['previouspage'] = 'Visa föregående grupp';
-$labels['firstpage'] = 'Visa första gruppen';
-$labels['nextpage'] = 'Visa nästa grupp';
-$labels['lastpage'] = 'Visa sista gruppen';
-$labels['groups'] = 'Grupper';
-$labels['personaladrbook'] = 'Personliga adresser';
-$labels['settingsfor'] = 'Inställningar för';
-$labels['preferences'] = 'Inställningar';
-$labels['userpreferences'] = 'Användarinställningar';
-$labels['editpreferences'] = 'Ändra användarinställningar';
-$labels['identities'] = 'Profiler';
-$labels['manageidentities'] = 'Hantera profiler för detta konto';
-$labels['newidentity'] = 'Ny profil';
-$labels['newitem'] = 'Ny post';
-$labels['edititem'] = 'Ändra post';
-$labels['setdefault'] = 'Sätt som standard';
-$labels['language'] = 'Språk';
-$labels['timezone'] = 'Tidszon';
-$labels['pagesize'] = 'Rader per sida';
-$labels['signature'] = 'Signatur';
-$labels['dstactive'] = 'Sommartid';
-$labels['htmleditor'] = 'Skriv HTML-meddelanden';
-$labels['htmlsignature'] = 'HTML-signatur';
-$labels['previewpane'] = 'Visa delad vy i inbox';
-$labels['autosavedraft'] = 'Spara utkast automatiskt';
-$labels['everynminutes'] = 'var $n minut';
-$labels['never'] = 'aldrig';
-$labels['folder'] = 'Mapp';
-$labels['folders'] = 'Mappar';
-$labels['foldername'] = 'Mappnamn';
-$labels['subscribed'] = 'Ansluten';
-$labels['messagecount'] = 'Meddelanden';
-$labels['create'] = 'Skapa';
-$labels['createfolder'] = 'Skapa ny mapp';
-$labels['rename'] = 'Byt namn';
-$labels['renamefolder'] = 'Byt mappnamn';
-$labels['deletefolder'] = 'Radera mapp';
-$labels['managefolders'] = 'Hantera mappar';
-$labels['sortby'] = 'Sortera på';
-$labels['sortasc'] = 'Sortera stigande';
-$labels['sortdesc'] = 'Sortera fallande';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/se/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Fredrik Nygren <f.nygren@gmail.com> |
- | Andreas Henriksson <andreas@fatal.se> |
- | Jonas Näsholm <hostmaster@bitfuse.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Inloggningen misslyckades';
-$messages['cookiesdisabled'] = 'Din webbläsare accepterar inte cookies';
-$messages['sessionerror'] = 'Din inloggning är felaktig eller har gått ut';
-$messages['imaperror'] = 'Kontakt med IMAP-servern misslyckades';
-$messages['nomessagesfound'] = 'Inga meddelanden';
-$messages['loggedout'] = 'Du är utloggad. Välkommen åter!';
-$messages['mailboxempty'] = 'Mappen är tom';
-$messages['loading'] = 'Laddar...';
-$messages['loadingdata'] = 'Laddar data...';
-$messages['checkingmail'] = 'Letar efter nya meddelanden...';
-$messages['sendingmessage'] = 'Skickar meddelande...';
-$messages['messagesent'] = 'Meddelandet har skickats';
-$messages['savingmessage'] = 'Sparar meddelande...';
-$messages['messagesaved'] = 'Meddelande sparades till utkast';
-$messages['successfullysaved'] = 'Sparat';
-$messages['addedsuccessfully'] = 'Kontakten har lagts till i adressboken';
-$messages['contactexists'] = 'En kontakt med den här adressen finns redan';
-$messages['blockedimages'] = 'För att skydda dig är bilder blockerade.';
-$messages['encryptedmessage'] = 'Meddelandet är krypterat och kan tyvärr inte visas.';
-$messages['nocontactsfound'] = 'Inga kontakter hittades';
-$messages['contactnotfound'] = 'Den efterfrågade kontanten hittades inte';
-$messages['sendingfailed'] = 'Meddelandet kunde inte skickas';
-$messages['errorsaving'] = 'Ett fel uppstod när meddelandet sparades';
-$messages['errormoving'] = 'Meddelandet kunde inte flyttas';
-$messages['errordeleting'] = 'Meddelandet kunde inte raderas';
-$messages['deletecontactconfirm'] = 'Vill du verkligen radera valda kontakter?';
-$messages['deletemessagesconfirm'] = 'Vill du verkligen ta bort valda meddelanden?';
-$messages['deletefolderconfirm'] = 'Vill du verkligen radera den här mappen?';
-$messages['purgefolderconfirm'] = 'Vill du verkligen radera alla meddelanden i den här mappen?';
-$messages['formincomplete'] = 'Formuläret var inte ifyllt i sin helhet';
-$messages['noemailwarning'] = 'Vänligen ange en giltig adress';
-$messages['nonamewarning'] = 'Vänligen ange ett namn';
-$messages['nopagesizewarning'] = 'Vänligen ange en sidstorlek';
-$messages['norecipientwarning'] = 'Vänligen ange minst en mottagare';
-$messages['nosubjectwarning'] = 'Ämnesfältet är tomt. Vill du lägga till något nu?';
-$messages['nobodywarning'] = 'Skicka det här meddelandet utan text?';
-$messages['notsentwarning'] = 'Meddelande har inte skickats. Vill du avbryta meddelandet?';
-$messages['noldapserver'] = 'Vänligen ange en LDAP-server att söka';
-$messages['nocontactsreturned'] = 'Inga kontakter hittades';
-$messages['nosearchname'] = 'Vänligen ange ett kontaktnamn eller en adress';
-$messages['searchsuccessful'] = '$nr meddelanden hittades';
-$messages['searchnomatch'] = 'Sökningen returnerade inga träffar';
-$messages['searching'] = 'Söker...';
-$messages['checking'] = 'Kontrollerar...';
-$messages['nospellerrors'] = 'Inget stavfel hittades';
-$messages['folderdeleted'] = 'Mappen raderades';
-$messages['deletedsuccessfully'] = 'Lyckad borttagning';
-$messages['converting'] = 'Tar bort formatering från meddelande...';
-$messages['messageopenerror'] = 'Kunde inte ladda meddelande från servern';
-$messages['fileuploaderror'] = 'Filuppladdning misslyckades';
-$messages['filesizeerror'] = 'Den uppladdade filen överstiger maxstorleken $size';
-$messages['copysuccess'] = 'Lyckad kopiering av $nr adresser';
-$messages['copyerror'] = 'Kunde inte kopiera några adresser';
-$messages['sourceisreadonly'] = 'Denna adresskälla är skrivskyddad';
-$messages['errorsavingcontact'] = 'Kunde inte spara kontakt-adressen';
-$messages['movingmessage'] = 'Flyttar meddelande...';
-$messages['receiptsent'] = 'Ett läskvitto har skickats';
-$messages['errorsendingreceipt'] = 'Kunde inte skicka läskvittot';
-$messages['nodeletelastidentity'] = 'Du kan inte radera den här identiteten, det är din sista.';
-$messages['addsubfolderhint'] = 'Den här mappen kommer att skapas som en underkatalog till den valda';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-\r
-/*\r
- +-----------------------------------------------------------------------+\r
- | language/si/labels.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Melanga Dissanayake <Melanga.Dissanayake@pabcbank.com> |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$labels = array();\r
-$labels['welcome'] = '$product ආයුබොවන්';\r
-$labels['username'] = 'නම';\r
-$labels['password'] = 'මුරපදය';\r
-$labels['server'] = 'පද්ධතිය';\r
-$labels['login'] = 'අතුල්වීම';\r
-$labels['logout'] = 'පිටවීම';\r
-$labels['mail'] = 'විද්යුත් තැපෑල';\r
-$labels['settings'] = 'පොද්ගලික කට්ටල අංග';\r
-$labels['addressbook'] = 'ලිපින පොත';\r
-$labels['inbox'] = 'ඇතුල්වීම්';\r
-$labels['drafts'] = 'කටු සටහන්';\r
-$labels['sent'] = 'පිටවුම්';\r
-$labels['trash'] = 'ලටපට';\r
-$labels['junk'] = 'සුන්බුන්';\r
-$labels['subject'] = 'මාතෘකාව';\r
-$labels['from'] = 'යවන්නා';\r
-$labels['to'] = 'ලබන්නා';\r
-$labels['cc'] = 'පිටපත් කිරීම්';\r
-$labels['bcc'] = 'අඳ පිටපත් කිරීම්';\r
-$labels['replyto'] = 'පිළිතුරු සඳහා';\r
-$labels['date'] = 'දිනය';\r
-$labels['size'] = 'ප්රමාණය';\r
-$labels['priority'] = 'ප්රමුඛතාව';\r
-$labels['organization'] = 'සංවිධානය';\r
-$labels['reply-to'] = 'පිළිතුරු සඳහා';\r
-$labels['mailboxlist'] = 'ෆෝල්ඩරය';\r
-$labels['messagesfromto'] = '$from ගෙන් $to පනිවුඩ $count';\r
-$labels['messagenrof'] = 'පනිවුඩය $count න් $nr ';\r
-$labels['moveto'] = 'ගෙනයෑම...';\r
-$labels['download'] = 'බාගතකිරීම';\r
-$labels['filename'] = 'ගොනුවේ නම';\r
-$labels['filesize'] = 'ගොනුවේ ප්රමාණය';\r
-$labels['preferhtml'] = 'HTML විදහා පෙන්වීම';\r
-$labels['htmlmessage'] = 'HTML පනිවුඩය';\r
-$labels['prettydate'] = 'සුරුබුහුටි දින';\r
-$labels['addtoaddressbook'] = 'ලිපින පොතට එකතු කරන්න';\r
-$labels['sun'] = 'ඉරිදා';\r
-$labels['mon'] = 'සඳුදා';\r
-$labels['tue'] = 'අගහ';\r
-$labels['wed'] = 'බදාදා';\r
-$labels['thu'] = 'බ්රහස්';\r
-$labels['fri'] = 'සිකුරා';\r
-$labels['sat'] = 'සෙනසු';\r
-$labels['sunday'] = 'ඉරිදා';\r
-$labels['monday'] = 'සඳුදා';\r
-$labels['tuesday'] = 'අගහරුවාදා';\r
-$labels['wednesday'] = 'බදාදා';\r
-$labels['thursday'] = 'බ්රහස්පතිනිදා';\r
-$labels['friday'] = 'සිකුරාදා';\r
-$labels['saturday'] = 'සෙනසුරාදා';\r
-$labels['today'] = 'අද';\r
-$labels['checkmail'] = 'අඵත් පනිවුඩ සඳහා පිරික්සීම';\r
-$labels['writenewmessage'] = 'අඵත් පනිවුඩක්';\r
-$labels['replytomessage'] = 'පනිවුඩයට පිළිතුරු';\r
-$labels['replytoallmessage'] = 'එවන්නාට සහ සැමට පිළිතුරු';\r
-$labels['forwardmessage'] = 'පනිවුඩය ඉදිරියට';\r
-$labels['deletemessage'] = 'පනිවුඩය ලටපට තුලට ගෙනයන්න';\r
-$labels['movemessagetotrash'] = 'පණිවුඩය ලටපට වෙත ගෙන යන්න';\r
-$labels['printmessage'] = 'පනිවුඩය මුද්රනය කරන්න';\r
-$labels['previousmessage'] = 'කලින් පනිවුඩය පෙන්නන්න';\r
-$labels['previousmessages'] = 'කලින් පනිවුඩ කට්ටලය පෙන්නන්න';\r
-$labels['firstmessage'] = 'පළමුවන පනිවුඩය පෙන්නන්න';\r
-$labels['firstmessages'] = 'පළමුවන පනිවුඩ කට්ටලය පෙන්නන්න';\r
-$labels['nextmessage'] = 'මීළඟ පනිවුඩය පෙන්නන්න';\r
-$labels['nextmessages'] = 'මීළඟ පනිවුඩ කට්ටලය පෙන්නන්න';\r
-$labels['lastmessage'] = 'අවසාන පනිවුඩය පෙන්නන්න';\r
-$labels['lastmessages'] = 'අවසාන පනිවුඩ කට්ටලය පෙන්නන්න';\r
-$labels['backtolist'] = 'නැවතත් පනිවුඩ ලැයිස්තුවට';\r
-$labels['viewsource'] = 'මූලාශ්රය පෙන්නන්න';\r
-$labels['markmessages'] = 'පණිවුඩ';\r
-$labels['markread'] = 'කියවු ලෙස සළකුණු කරන්න';\r
-$labels['markunread'] = 'නොකියවු ලෙස සළකුණු කරන්න';\r
-$labels['select'] = 'තෝරාගන්න';\r
-$labels['all'] = 'සියලු';\r
-$labels['none'] = 'තෝරානොගත්';\r
-$labels['unread'] = 'නොකියවූ';\r
-$labels['compact'] = 'සංයුක්ත';\r
-$labels['empty'] = 'රික්ත';\r
-$labels['purge'] = 'විරේචන';\r
-$labels['quota'] = 'භාවිතය';\r
-$labels['unknown'] = 'නාඳුනන';\r
-$labels['unlimited'] = 'අසීමිත';\r
-$labels['quicksearch'] = 'ඉක්මන් සෙවුම';\r
-$labels['resetsearch'] = 'සෙවුම යලි පිහිටවීම';\r
-$labels['compose'] = 'පනිවුඩයක් සෑදීම';\r
-$labels['savemessage'] = 'කටු සටහනේ තැන්පත කරන්න';\r
-$labels['sendmessage'] = 'පනිවුඩය දැන් යවන්න';\r
-$labels['addattachment'] = 'ගොනුවක් ඇතුලත් කිරීම';\r
-$labels['charset'] = 'අකුරැ කට්ටලය';\r
-$labels['editortype'] = 'සම්පාදන ආකාරය';\r
-$labels['returnreceipt'] = 'නැවත ලබන්නා';\r
-$labels['checkspelling'] = 'වචන පරීක්ෂාව';\r
-$labels['resumeediting'] = 'සම්පාදන නැවත ඇරඹීම';\r
-$labels['revertto'] = 'ආපසු ඒම';\r
-$labels['attachments'] = 'ගොනු';\r
-$labels['upload'] = 'ඇතුල් කරීම';\r
-$labels['close'] = 'වැසීම';\r
-$labels['low'] = 'අඩු';\r
-$labels['lowest'] = 'අඩුම';\r
-$labels['normal'] = 'සමක';\r
-$labels['high'] = 'ඉහළ';\r
-$labels['highest'] = 'ඉහළම';\r
-$labels['nosubject'] = '(මාතෘකාව නොමැති)';\r
-$labels['showimages'] = 'රූප පෙන්නන්න';\r
-$labels['htmltoggle'] = 'HTML';\r
-$labels['plaintoggle'] = 'පැහැදිලි අකුරු';\r
-$labels['addcc'] = 'Cc එක් කරන්න';\r
-$labels['addbcc'] = 'Bcc එක් කරන්න';\r
-$labels['addreplyto'] = '\'පිළිතුරු සඳහා\' එක් කරන්න';\r
-$labels['mdnrequest'] = 'මෙම පණිවුඩය එවන්නා ඔබ එය කියවු බව අසයි. එය දැන්වීමට ඔබ කැමතිද?';\r
-$labels['receiptread'] = 'ලැබීම් ලදුපත (කියවීම)';\r
-$labels['yourmessage'] = 'මෙය ඔබගේ පණිවුඩයේ ලැබීම් ලදුපතයි';\r
-$labels['receiptnote'] = 'සටහන: ලැබීම් ලදුපත මගින් මෙම පණිවුඩය කියවූ බව හෝ තේරුම් ගත් බව ගම්ය නොවේ. පණිවුඩය ලබන්නාට පෙන්නුම් කල බවටට සාක්ෂියක් පමණි';\r
-$labels['name'] = 'නම පෙන්නන්න';\r
-$labels['firstname'] = 'පළමු නම';\r
-$labels['surname'] = 'අවසාන නම';\r
-$labels['email'] = 'ද්යුත් තැපෑල';\r
-$labels['addcontact'] = 'ලිපින පොතට එකතු කරන්න';\r
-$labels['editcontact'] = 'ලිපිනය වෙනස් කිරීම';\r
-$labels['edit'] = 'වෙනස් කිරීම';\r
-$labels['cancel'] = 'අවලංගු කරීම';\r
-$labels['save'] = 'තැන්පත් කිරීම';\r
-$labels['delete'] = 'මකා දැමීම';\r
-$labels['newcontact'] = 'අඵත් ලිපින පතක් සෑදීම';\r
-$labels['deletecontact'] = 'තෝරාගත් ලිපින මකා දැමන්න';\r
-$labels['composeto'] = 'පනිවුඩයක් සෑදීම';\r
-$labels['contactsfromto'] = '$from ගෙන් $to ලිපින $count';\r
-$labels['print'] = 'මුද්රණය';\r
-$labels['export'] = 'නිර්යාත';\r
-$labels['previouspage'] = 'කලින් කට්ටලය පෙන්නන්න';\r
-$labels['firstpage'] = 'පළමුවන කට්ටලය පෙන්නන්න';\r
-$labels['nextpage'] = 'මීළඟ කට්ටලය පෙන්නන්න';\r
-$labels['lastpage'] = 'අවසාන කට්ටලය පෙන්නන්න';\r
-$labels['groups'] = 'කණ්ඩායම්';\r
-$labels['personaladrbook'] = 'පොද්ගලික ලිපිනය';\r
-$labels['settingsfor'] = 'සඳහා කට්ටල අංග';\r
-$labels['preferences'] = 'අභිමතය';\r
-$labels['userpreferences'] = 'පරිශීලක අභිමතය';\r
-$labels['editpreferences'] = 'පරිශීලක අභිමතය වෙනස් කිරීම්';\r
-$labels['identities'] = 'අනන්නයතාව';\r
-$labels['manageidentities'] = 'මෙම ගිණුමෙ අනන්නයතාව හැසිරවීම';\r
-$labels['newidentity'] = 'අඵත් අනන්නයතාව';\r
-$labels['newitem'] = 'අඵත් අයිතම';\r
-$labels['edititem'] = 'අයිතම වෙනස් කිරීම්';\r
-$labels['setdefault'] = 'පළමු තත්වයට';\r
-$labels['language'] = 'භාෂාව';\r
-$labels['timezone'] = 'කාල කලාපය';\r
-$labels['pagesize'] = 'පිටුවකටඅ පේළි';\r
-$labels['signature'] = 'අත්සන';\r
-$labels['dstactive'] = 'දිවා එළිය ඉතිරි කිරීම';\r
-$labels['htmleditor'] = 'HTML පනිවුඩයක් සෑදීම';\r
-$labels['htmlsignature'] = 'HTML අත්සන';\r
-$labels['previewpane'] = 'පූර්වදර්ශන කොටස පෙන්නන්න';\r
-$labels['autosavedraft'] = 'ස්වයංක්රීයව කටු සටහනේ තැන්පත් කරන්න';\r
-$labels['everynminutes'] = 'සෑම මිනිත්තු $n';\r
-$labels['never'] = 'කිසි විටෙකත් නැති';\r
-$labels['folder'] = 'ෆෝල්ඩරය';\r
-$labels['folders'] = 'ෆෝල්ඩර';\r
-$labels['foldername'] = 'ෆෝල්ඩරයේ නම';\r
-$labels['subscribed'] = 'සාමාජික';\r
-$labels['messagecount'] = 'පනිවුඩ';\r
-$labels['create'] = 'සෑදීම';\r
-$labels['createfolder'] = 'අඵත් ෆෝල්ඩරයක් සෑදීම';\r
-$labels['rename'] = 'නැවත නම් කිරීම';\r
-$labels['renamefolder'] = 'ෆෝල්ඩරය නැවත නම් කිරීම';\r
-$labels['deletefolder'] = 'ෆෝල්ඩරය මකා දැමීම';\r
-$labels['managefolders'] = 'හැසිරවීම හැසිරවීම';\r
-$labels['sortby'] = 'චිසින් වර්ග කිරීම';\r
-$labels['sortasc'] = 'ආරෝහණ වර්ග කිරීම';\r
-$labels['sortdesc'] = 'අවරෝහණ වර්ග කිරීම';\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?\r
-/*\r
-\r
- +-----------------------------------------------------------------------+\r
- | language/si/messages.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Melanga Dissanayake <Melanga.Dissanayake@pabcbank.com> |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$messages = array();\r
-$messages['loginfailed'] = 'ඇතුල්වීම අසාර්ථකයි';\r
-$messages['cookiesdisabled'] = 'ඔබේ බෞසරය කුකී බාර ගන්නේ නැත';\r
-$messages['sessionerror'] = 'ඔබේ වාරය අවලංගු හෝ කාලය ඉකුත් වී ඇත';\r
-$messages['imaperror'] = 'IMAP සම්බන්ධතාවය අසාර්ථකයි';\r
-$messages['nomessagesfound'] = 'ලියුම් පෙට්ටියේ පනිවුඩ නැත';\r
-$messages['loggedout'] = 'ඔබගේ වාරය සාර්ථකව අවසන් විය. අයුබොවන්!';\r
-$messages['mailboxempty'] = 'ලියුම් පෙට්ටිය හිස්';\r
-$messages['loading'] = 'පූරනය...';\r
-$messages['loadingdata'] = 'දත්ත පූරනය...';\r
-$messages['checkingmail'] = 'අලුත් පනිවුඩ පරීක්ෂා කිරීම...';\r
-$messages['sendingmessage'] = 'පනිවුඩය යැවීම...';\r
-$messages['messagesent'] = 'පනිවුඩය සාර්ථකව යවන ලදී';\r
-$messages['savingmessage'] = 'පනිවුඩය තැන්පත් කීරීම...';\r
-$messages['messagesaved'] = 'පනිවුඩය කටු සටහනේ තැන්පත් විය';\r
-$messages['successfullysaved'] = 'සාර්ථකව තැන්පත විය';\r
-$messages['addedsuccessfully'] = 'ලිපිනය සාර්ථකව ලිපින පොතට එකතු කරන ලදී';\r
-$messages['contactexists'] = 'ඉහත ලිපිනය සහිත විද්යුත් තැපැල් ලිපිනයක් ලිපින පොතේ ඇත';\r
-$messages['blockedimages'] = 'ඔබගෙ පොද්ගලිකත්වය හේතුවෙන්, දුරස්ථ රූප අවහිර කර ඇත.';\r
-$messages['encryptedmessage'] = 'මෙම පනිවුඩය රහස් කේතනය කර ඇති බැවින් පෙන්විය නොහැක. සමාවන්න!';\r
-$messages['nocontactsfound'] = 'ලිපින සොයා ගත නොහැක';\r
-$messages['contactnotfound'] = 'ඉල්ලූ ලිපිනය සොයාගත නොහැක';\r
-$messages['sendingfailed'] = 'පනිවුඩය යැවීම අසාර්ථකයි';\r
-$messages['errorsaving'] = 'පනිවුඩය තැන්පත් කීරීමේදී දොෂයක් සිදු විය';\r
-$messages['errormoving'] = 'පනිවුඩය ගෙන යාමට නොහැක';\r
-$messages['errordeleting'] = 'පනිවුඩය මකා දැමීමට නොහැක';\r
-$messages['deletecontactconfirm'] = 'තෝරා ඇති ලිපින ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
-$messages['deletemessagesconfirm'] = 'තෝරා ඇත පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
-$messages['deletefolderconfirm'] = 'ෆෝල්ඩරය මකා දැමීමට සැබවින්ම වුවමනාද?';\r
-$messages['purgefolderconfirm'] = 'මෙම ෆෝල්ඩරයේ ඇති සියලුම පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
-$messages['formincomplete'] = 'පෝරමය සම්පූර්ණයෙන් පුරවා නොමැත';\r
-$messages['noemailwarning'] = 'කරුණාකර වලංගු විද්යුත් තැපැල් ලිපිනයක් ඇතුලත් කරන්න';\r
-$messages['nonamewarning'] = 'කරුණාකර නම ඇතුලත් කරන්න';\r
-$messages['nopagesizewarning'] = 'කරුණාකර පිටුවේ ප්රමානය ඇතුලත් කරන්න';\r
-$messages['norecipientwarning'] = 'කරුණාකර යටත් පිරිසෙයින් එක් ලබන්නෙකු හෝ ඇතුලත් කරන්න';\r
-$messages['nosubjectwarning'] = '"මාතෘකාව" හිස්. මාතෘකාවක් අතුලත් කිරීමට ඔබ කැමතිද?';\r
-$messages['nobodywarning'] = 'මෙම හිස් පනිවුඩය යවන්නද?';\r
-$messages['notsentwarning'] = 'පනිවුඩය යැවීමට නොහැකි විය. ඔබට එය බැහැර කිරීමට වුවමනාද?';\r
-$messages['noldapserver'] = 'සෙවුම සඳහා කරුණාකර ldap සම්බන්ධතාවයක් තෝරා ගන්න';\r
-$messages['nocontactsreturned'] = 'ලිපින/ය සොයා ගත නොහැක';\r
-$messages['nosearchname'] = 'කරුණාකර ලිපිනයෙහි නම හෝ විද්යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න';\r
-$messages['searchsuccessful'] = '$nr පනිවුඩය හමු විය';\r
-$messages['searchnomatch'] = 'සෙවුමට අදාල ගැලපීමක් නොමැත';\r
-$messages['searching'] = 'සොයමින් පවතී...';\r
-$messages['checking'] = 'පිරික්සමින් පවතී...';\r
-$messages['nospellerrors'] = 'වියාකරන දොෂ නොමැත';\r
-$messages['folderdeleted'] = 'ෆෝල්ඩරය සාර්ථකව මකා දමන ලදී';\r
-$messages['deletedsuccessfully'] = 'සාර්ථකව මකා දමන ලදී';\r
-$messages['converting'] = 'පනිවුඩයෙන් ආකෘතීකරණය ඉවත් කිරීම';\r
-$messages['messageopenerror'] = 'පනිවුඩය පූරනය කිරීමට නොහැක';\r
-$messages['fileuploaderror'] = 'ගොනුව ඇතුලත් කිරීමට නොහැක';\r
-$messages['filesizeerror'] = 'ඇතුලත් කල ගොනුවෙ ප්රමාණය උපරිම අගය $size ඉක්මවා ඇත';\r
-$messages['copysuccess'] = '$nr ලිපිනය සාර්ථකව පිටපත් කරන ලදී';\r
-$messages['copyerror'] = 'කවර ලිපිනයක්වත් හෝ පිටපත් කල නොහැක';\r
-$messages['sourceisreadonly'] = 'මෙම ලිපින මූලාශ්රය කියවීම සඳහා පමනි';\r
-$messages['errorsavingcontact'] = 'ලිපිනය තැන්පත් කීරීමට නොහැක';\r
-$messages['movingmessage'] = 'පනිවුඩය ගෙනයමින් පවතී...';\r
-$messages['receiptsent'] = 'කියවීම් භාර ගැනීම සාර්ථකව යවන ලදී';\r
-$messages['errorsendingreceipt'] = 'කියවීම් භාර ගැනීම යැවීමට නොහැක';\r
-$messages['nodeletelastidentity'] = 'අවසාන අනන්යතාවය මකා දැමිය නොහැක';\r
-$messages['addsubfolderhint'] = 'ෆෝල්ඩරය දැනට තෝරාගෙන ඇති ෆෝල්ඩරයෙහි අනු ෆෝල්ඩරයක් ලෙස සෑදේ';\r
-\r
-?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+ +-----------------------------------------------------------------------+\r
+ | language/si/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Melanga Dissanayake <Melanga.Dissanayake@pabcbank.com> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = '$product ආයුබොවන්';\r
+$labels['username'] = 'නම';\r
+$labels['password'] = 'මුරපදය';\r
+$labels['server'] = 'පද්ධතිය';\r
+$labels['login'] = 'අතුල්වීම';\r
+$labels['logout'] = 'පිටවීම';\r
+$labels['mail'] = 'විද්යුත් තැපෑල';\r
+$labels['settings'] = 'පොද්ගලික කට්ටල අංග';\r
+$labels['addressbook'] = 'ලිපින පොත';\r
+$labels['inbox'] = 'ඇතුල්වීම්';\r
+$labels['drafts'] = 'කටු සටහන්';\r
+$labels['sent'] = 'පිටවුම්';\r
+$labels['trash'] = 'ලටපට';\r
+$labels['junk'] = 'සුන්බුන්';\r
+$labels['subject'] = 'මාතෘකාව';\r
+$labels['from'] = 'යවන්නා';\r
+$labels['to'] = 'ලබන්නා';\r
+$labels['cc'] = 'පිටපත් කිරීම්';\r
+$labels['bcc'] = 'අඳ පිටපත් කිරීම්';\r
+$labels['replyto'] = 'පිළිතුරු සඳහා';\r
+$labels['date'] = 'දිනය';\r
+$labels['size'] = 'ප්රමාණය';\r
+$labels['priority'] = 'ප්රමුඛතාව';\r
+$labels['organization'] = 'සංවිධානය';\r
+$labels['reply-to'] = 'පිළිතුරු සඳහා';\r
+$labels['mailboxlist'] = 'ෆෝල්ඩරය';\r
+$labels['messagesfromto'] = '$from ගෙන් $to පනිවුඩ $count';\r
+$labels['messagenrof'] = 'පනිවුඩය $count න් $nr ';\r
+$labels['moveto'] = 'ගෙනයෑම...';\r
+$labels['download'] = 'බාගතකිරීම';\r
+$labels['filename'] = 'ගොනුවේ නම';\r
+$labels['filesize'] = 'ගොනුවේ ප්රමාණය';\r
+$labels['preferhtml'] = 'HTML විදහා පෙන්වීම';\r
+$labels['htmlmessage'] = 'HTML පනිවුඩය';\r
+$labels['prettydate'] = 'සුරුබුහුටි දින';\r
+$labels['addtoaddressbook'] = 'ලිපින පොතට එකතු කරන්න';\r
+$labels['sun'] = 'ඉරිදා';\r
+$labels['mon'] = 'සඳුදා';\r
+$labels['tue'] = 'අගහ';\r
+$labels['wed'] = 'බදාදා';\r
+$labels['thu'] = 'බ්රහස්';\r
+$labels['fri'] = 'සිකුරා';\r
+$labels['sat'] = 'සෙනසු';\r
+$labels['sunday'] = 'ඉරිදා';\r
+$labels['monday'] = 'සඳුදා';\r
+$labels['tuesday'] = 'අගහරුවාදා';\r
+$labels['wednesday'] = 'බදාදා';\r
+$labels['thursday'] = 'බ්රහස්පතිනිදා';\r
+$labels['friday'] = 'සිකුරාදා';\r
+$labels['saturday'] = 'සෙනසුරාදා';\r
+$labels['today'] = 'අද';\r
+$labels['checkmail'] = 'අඵත් පනිවුඩ සඳහා පිරික්සීම';\r
+$labels['writenewmessage'] = 'අඵත් පනිවුඩක්';\r
+$labels['replytomessage'] = 'පනිවුඩයට පිළිතුරු';\r
+$labels['replytoallmessage'] = 'එවන්නාට සහ සැමට පිළිතුරු';\r
+$labels['forwardmessage'] = 'පනිවුඩය ඉදිරියට';\r
+$labels['deletemessage'] = 'පනිවුඩය ලටපට තුලට ගෙනයන්න';\r
+$labels['movemessagetotrash'] = 'පණිවුඩය ලටපට වෙත ගෙන යන්න';\r
+$labels['printmessage'] = 'පනිවුඩය මුද්රනය කරන්න';\r
+$labels['previousmessage'] = 'කලින් පනිවුඩය පෙන්නන්න';\r
+$labels['previousmessages'] = 'කලින් පනිවුඩ කට්ටලය පෙන්නන්න';\r
+$labels['firstmessage'] = 'පළමුවන පනිවුඩය පෙන්නන්න';\r
+$labels['firstmessages'] = 'පළමුවන පනිවුඩ කට්ටලය පෙන්නන්න';\r
+$labels['nextmessage'] = 'මීළඟ පනිවුඩය පෙන්නන්න';\r
+$labels['nextmessages'] = 'මීළඟ පනිවුඩ කට්ටලය පෙන්නන්න';\r
+$labels['lastmessage'] = 'අවසාන පනිවුඩය පෙන්නන්න';\r
+$labels['lastmessages'] = 'අවසාන පනිවුඩ කට්ටලය පෙන්නන්න';\r
+$labels['backtolist'] = 'නැවතත් පනිවුඩ ලැයිස්තුවට';\r
+$labels['viewsource'] = 'මූලාශ්රය පෙන්නන්න';\r
+$labels['markmessages'] = 'පණිවුඩ';\r
+$labels['markread'] = 'කියවු ලෙස සළකුණු කරන්න';\r
+$labels['markunread'] = 'නොකියවු ලෙස සළකුණු කරන්න';\r
+$labels['select'] = 'තෝරාගන්න';\r
+$labels['all'] = 'සියලු';\r
+$labels['none'] = 'තෝරානොගත්';\r
+$labels['unread'] = 'නොකියවූ';\r
+$labels['compact'] = 'සංයුක්ත';\r
+$labels['empty'] = 'රික්ත';\r
+$labels['purge'] = 'විරේචන';\r
+$labels['quota'] = 'භාවිතය';\r
+$labels['unknown'] = 'නාඳුනන';\r
+$labels['unlimited'] = 'අසීමිත';\r
+$labels['quicksearch'] = 'ඉක්මන් සෙවුම';\r
+$labels['resetsearch'] = 'සෙවුම යලි පිහිටවීම';\r
+$labels['compose'] = 'පනිවුඩයක් සෑදීම';\r
+$labels['savemessage'] = 'කටු සටහනේ තැන්පත කරන්න';\r
+$labels['sendmessage'] = 'පනිවුඩය දැන් යවන්න';\r
+$labels['addattachment'] = 'ගොනුවක් ඇතුලත් කිරීම';\r
+$labels['charset'] = 'අකුරැ කට්ටලය';\r
+$labels['editortype'] = 'සම්පාදන ආකාරය';\r
+$labels['returnreceipt'] = 'නැවත ලබන්නා';\r
+$labels['checkspelling'] = 'වචන පරීක්ෂාව';\r
+$labels['resumeediting'] = 'සම්පාදන නැවත ඇරඹීම';\r
+$labels['revertto'] = 'ආපසු ඒම';\r
+$labels['attachments'] = 'ගොනු';\r
+$labels['upload'] = 'ඇතුල් කරීම';\r
+$labels['close'] = 'වැසීම';\r
+$labels['low'] = 'අඩු';\r
+$labels['lowest'] = 'අඩුම';\r
+$labels['normal'] = 'සමක';\r
+$labels['high'] = 'ඉහළ';\r
+$labels['highest'] = 'ඉහළම';\r
+$labels['nosubject'] = '(මාතෘකාව නොමැති)';\r
+$labels['showimages'] = 'රූප පෙන්නන්න';\r
+$labels['htmltoggle'] = 'HTML';\r
+$labels['plaintoggle'] = 'පැහැදිලි අකුරු';\r
+$labels['addcc'] = 'Cc එක් කරන්න';\r
+$labels['addbcc'] = 'Bcc එක් කරන්න';\r
+$labels['addreplyto'] = '\'පිළිතුරු සඳහා\' එක් කරන්න';\r
+$labels['mdnrequest'] = 'මෙම පණිවුඩය එවන්නා ඔබ එය කියවු බව අසයි. එය දැන්වීමට ඔබ කැමතිද?';\r
+$labels['receiptread'] = 'ලැබීම් ලදුපත (කියවීම)';\r
+$labels['yourmessage'] = 'මෙය ඔබගේ පණිවුඩයේ ලැබීම් ලදුපතයි';\r
+$labels['receiptnote'] = 'සටහන: ලැබීම් ලදුපත මගින් මෙම පණිවුඩය කියවූ බව හෝ තේරුම් ගත් බව ගම්ය නොවේ. පණිවුඩය ලබන්නාට පෙන්නුම් කල බවටට සාක්ෂියක් පමණි';\r
+$labels['name'] = 'නම පෙන්නන්න';\r
+$labels['firstname'] = 'පළමු නම';\r
+$labels['surname'] = 'අවසාන නම';\r
+$labels['email'] = 'ද්යුත් තැපෑල';\r
+$labels['addcontact'] = 'ලිපින පොතට එකතු කරන්න';\r
+$labels['editcontact'] = 'ලිපිනය වෙනස් කිරීම';\r
+$labels['edit'] = 'වෙනස් කිරීම';\r
+$labels['cancel'] = 'අවලංගු කරීම';\r
+$labels['save'] = 'තැන්පත් කිරීම';\r
+$labels['delete'] = 'මකා දැමීම';\r
+$labels['newcontact'] = 'අඵත් ලිපින පතක් සෑදීම';\r
+$labels['deletecontact'] = 'තෝරාගත් ලිපින මකා දැමන්න';\r
+$labels['composeto'] = 'පනිවුඩයක් සෑදීම';\r
+$labels['contactsfromto'] = '$from ගෙන් $to ලිපින $count';\r
+$labels['print'] = 'මුද්රණය';\r
+$labels['export'] = 'නිර්යාත';\r
+$labels['previouspage'] = 'කලින් කට්ටලය පෙන්නන්න';\r
+$labels['firstpage'] = 'පළමුවන කට්ටලය පෙන්නන්න';\r
+$labels['nextpage'] = 'මීළඟ කට්ටලය පෙන්නන්න';\r
+$labels['lastpage'] = 'අවසාන කට්ටලය පෙන්නන්න';\r
+$labels['groups'] = 'කණ්ඩායම්';\r
+$labels['personaladrbook'] = 'පොද්ගලික ලිපිනය';\r
+$labels['settingsfor'] = 'සඳහා කට්ටල අංග';\r
+$labels['preferences'] = 'අභිමතය';\r
+$labels['userpreferences'] = 'පරිශීලක අභිමතය';\r
+$labels['editpreferences'] = 'පරිශීලක අභිමතය වෙනස් කිරීම්';\r
+$labels['identities'] = 'අනන්නයතාව';\r
+$labels['manageidentities'] = 'මෙම ගිණුමෙ අනන්නයතාව හැසිරවීම';\r
+$labels['newidentity'] = 'අඵත් අනන්නයතාව';\r
+$labels['newitem'] = 'අඵත් අයිතම';\r
+$labels['edititem'] = 'අයිතම වෙනස් කිරීම්';\r
+$labels['setdefault'] = 'පළමු තත්වයට';\r
+$labels['language'] = 'භාෂාව';\r
+$labels['timezone'] = 'කාල කලාපය';\r
+$labels['pagesize'] = 'පිටුවකටඅ පේළි';\r
+$labels['signature'] = 'අත්සන';\r
+$labels['dstactive'] = 'දිවා එළිය ඉතිරි කිරීම';\r
+$labels['htmleditor'] = 'HTML පනිවුඩයක් සෑදීම';\r
+$labels['htmlsignature'] = 'HTML අත්සන';\r
+$labels['previewpane'] = 'පූර්වදර්ශන කොටස පෙන්නන්න';\r
+$labels['autosavedraft'] = 'ස්වයංක්රීයව කටු සටහනේ තැන්පත් කරන්න';\r
+$labels['everynminutes'] = 'සෑම මිනිත්තු $n';\r
+$labels['never'] = 'කිසි විටෙකත් නැති';\r
+$labels['folder'] = 'ෆෝල්ඩරය';\r
+$labels['folders'] = 'ෆෝල්ඩර';\r
+$labels['foldername'] = 'ෆෝල්ඩරයේ නම';\r
+$labels['subscribed'] = 'සාමාජික';\r
+$labels['messagecount'] = 'පනිවුඩ';\r
+$labels['create'] = 'සෑදීම';\r
+$labels['createfolder'] = 'අඵත් ෆෝල්ඩරයක් සෑදීම';\r
+$labels['rename'] = 'නැවත නම් කිරීම';\r
+$labels['renamefolder'] = 'ෆෝල්ඩරය නැවත නම් කිරීම';\r
+$labels['deletefolder'] = 'ෆෝල්ඩරය මකා දැමීම';\r
+$labels['managefolders'] = 'හැසිරවීම හැසිරවීම';\r
+$labels['sortby'] = 'චිසින් වර්ග කිරීම';\r
+$labels['sortasc'] = 'ආරෝහණ වර්ග කිරීම';\r
+$labels['sortdesc'] = 'අවරෝහණ වර්ග කිරීම';\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/si/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Melanga Dissanayake <Melanga.Dissanayake@pabcbank.com> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'ඇතුල්වීම අසාර්ථකයි';\r
+$messages['cookiesdisabled'] = 'ඔබේ බෞසරය කුකී බාර ගන්නේ නැත';\r
+$messages['sessionerror'] = 'ඔබේ වාරය අවලංගු හෝ කාලය ඉකුත් වී ඇත';\r
+$messages['imaperror'] = 'IMAP සම්බන්ධතාවය අසාර්ථකයි';\r
+$messages['nomessagesfound'] = 'ලියුම් පෙට්ටියේ පනිවුඩ නැත';\r
+$messages['loggedout'] = 'ඔබගේ වාරය සාර්ථකව අවසන් විය. අයුබොවන්!';\r
+$messages['mailboxempty'] = 'ලියුම් පෙට්ටිය හිස්';\r
+$messages['loading'] = 'පූරනය...';\r
+$messages['loadingdata'] = 'දත්ත පූරනය...';\r
+$messages['checkingmail'] = 'අලුත් පනිවුඩ පරීක්ෂා කිරීම...';\r
+$messages['sendingmessage'] = 'පනිවුඩය යැවීම...';\r
+$messages['messagesent'] = 'පනිවුඩය සාර්ථකව යවන ලදී';\r
+$messages['savingmessage'] = 'පනිවුඩය තැන්පත් කීරීම...';\r
+$messages['messagesaved'] = 'පනිවුඩය කටු සටහනේ තැන්පත් විය';\r
+$messages['successfullysaved'] = 'සාර්ථකව තැන්පත විය';\r
+$messages['addedsuccessfully'] = 'ලිපිනය සාර්ථකව ලිපින පොතට එකතු කරන ලදී';\r
+$messages['contactexists'] = 'ඉහත ලිපිනය සහිත විද්යුත් තැපැල් ලිපිනයක් ලිපින පොතේ ඇත';\r
+$messages['blockedimages'] = 'ඔබගෙ පොද්ගලිකත්වය හේතුවෙන්, දුරස්ථ රූප අවහිර කර ඇත.';\r
+$messages['encryptedmessage'] = 'මෙම පනිවුඩය රහස් කේතනය කර ඇති බැවින් පෙන්විය නොහැක. සමාවන්න!';\r
+$messages['nocontactsfound'] = 'ලිපින සොයා ගත නොහැක';\r
+$messages['contactnotfound'] = 'ඉල්ලූ ලිපිනය සොයාගත නොහැක';\r
+$messages['sendingfailed'] = 'පනිවුඩය යැවීම අසාර්ථකයි';\r
+$messages['errorsaving'] = 'පනිවුඩය තැන්පත් කීරීමේදී දොෂයක් සිදු විය';\r
+$messages['errormoving'] = 'පනිවුඩය ගෙන යාමට නොහැක';\r
+$messages['errordeleting'] = 'පනිවුඩය මකා දැමීමට නොහැක';\r
+$messages['deletecontactconfirm'] = 'තෝරා ඇති ලිපින ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
+$messages['deletemessagesconfirm'] = 'තෝරා ඇත පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
+$messages['deletefolderconfirm'] = 'ෆෝල්ඩරය මකා දැමීමට සැබවින්ම වුවමනාද?';\r
+$messages['purgefolderconfirm'] = 'මෙම ෆෝල්ඩරයේ ඇති සියලුම පනිවුඩ ඔබට මකා දැමීමට සැබවින්ම වුවමනාද?';\r
+$messages['formincomplete'] = 'පෝරමය සම්පූර්ණයෙන් පුරවා නොමැත';\r
+$messages['noemailwarning'] = 'කරුණාකර වලංගු විද්යුත් තැපැල් ලිපිනයක් ඇතුලත් කරන්න';\r
+$messages['nonamewarning'] = 'කරුණාකර නම ඇතුලත් කරන්න';\r
+$messages['nopagesizewarning'] = 'කරුණාකර පිටුවේ ප්රමානය ඇතුලත් කරන්න';\r
+$messages['norecipientwarning'] = 'කරුණාකර යටත් පිරිසෙයින් එක් ලබන්නෙකු හෝ ඇතුලත් කරන්න';\r
+$messages['nosubjectwarning'] = '"මාතෘකාව" හිස්. මාතෘකාවක් අතුලත් කිරීමට ඔබ කැමතිද?';\r
+$messages['nobodywarning'] = 'මෙම හිස් පනිවුඩය යවන්නද?';\r
+$messages['notsentwarning'] = 'පනිවුඩය යැවීමට නොහැකි විය. ඔබට එය බැහැර කිරීමට වුවමනාද?';\r
+$messages['noldapserver'] = 'සෙවුම සඳහා කරුණාකර ldap සම්බන්ධතාවයක් තෝරා ගන්න';\r
+$messages['nocontactsreturned'] = 'ලිපින/ය සොයා ගත නොහැක';\r
+$messages['nosearchname'] = 'කරුණාකර ලිපිනයෙහි නම හෝ විද්යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න';\r
+$messages['searchsuccessful'] = '$nr පනිවුඩය හමු විය';\r
+$messages['searchnomatch'] = 'සෙවුමට අදාල ගැලපීමක් නොමැත';\r
+$messages['searching'] = 'සොයමින් පවතී...';\r
+$messages['checking'] = 'පිරික්සමින් පවතී...';\r
+$messages['nospellerrors'] = 'වියාකරන දොෂ නොමැත';\r
+$messages['folderdeleted'] = 'ෆෝල්ඩරය සාර්ථකව මකා දමන ලදී';\r
+$messages['deletedsuccessfully'] = 'සාර්ථකව මකා දමන ලදී';\r
+$messages['converting'] = 'පනිවුඩයෙන් ආකෘතීකරණය ඉවත් කිරීම';\r
+$messages['messageopenerror'] = 'පනිවුඩය පූරනය කිරීමට නොහැක';\r
+$messages['fileuploaderror'] = 'ගොනුව ඇතුලත් කිරීමට නොහැක';\r
+$messages['filesizeerror'] = 'ඇතුලත් කල ගොනුවෙ ප්රමාණය උපරිම අගය $size ඉක්මවා ඇත';\r
+$messages['copysuccess'] = '$nr ලිපිනය සාර්ථකව පිටපත් කරන ලදී';\r
+$messages['copyerror'] = 'කවර ලිපිනයක්වත් හෝ පිටපත් කල නොහැක';\r
+$messages['sourceisreadonly'] = 'මෙම ලිපින මූලාශ්රය කියවීම සඳහා පමනි';\r
+$messages['errorsavingcontact'] = 'ලිපිනය තැන්පත් කීරීමට නොහැක';\r
+$messages['movingmessage'] = 'පනිවුඩය ගෙනයමින් පවතී...';\r
+$messages['receiptsent'] = 'කියවීම් භාර ගැනීම සාර්ථකව යවන ලදී';\r
+$messages['errorsendingreceipt'] = 'කියවීම් භාර ගැනීම යැවීමට නොහැක';\r
+$messages['nodeletelastidentity'] = 'අවසාන අනන්යතාවය මකා දැමිය නොහැක';\r
+$messages['addsubfolderhint'] = 'ෆෝල්ඩරය දැනට තෝරාගෙන ඇති ෆෝල්ඩරයෙහි අනු ෆෝල්ඩරයක් ලෙස සෑදේ';\r
+\r
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/sk/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Marek Kutnar <marek19@zmail.sk> |
- | Lukas Kraic <lukas.kraic@truni.sk> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 1153 2008-02-28 20:04:12Z thomasb $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Vitajte v $product';
-$labels['username'] = 'Prihlasovacie meno';
-$labels['password'] = 'Heslo';
-$labels['server'] = 'Server';
-$labels['login'] = 'Prihlásiť';
-$labels['logout'] = 'Odhlásiť';
-$labels['mail'] = 'E-Mail';
-$labels['settings'] = 'Osobné nastavenia';
-$labels['addressbook'] = 'Adresár';
-$labels['inbox'] = 'Doručená pošta';
-$labels['drafts'] = 'Rozpísané';
-$labels['sent'] = 'Odoslané';
-$labels['trash'] = 'Kôš';
-$labels['junk'] = 'Nevyžiadaná pošta';
-$labels['subject'] = 'Predmet';
-$labels['from'] = 'Odosielateľ';
-$labels['to'] = 'Adresát';
-$labels['cc'] = 'Kópia';
-$labels['bcc'] = 'Tajná kópia';
-$labels['replyto'] = 'Odpovedať na';
-$labels['date'] = 'Dátum';
-$labels['size'] = 'Veľkosť';
-$labels['priority'] = 'Priorita';
-$labels['organization'] = 'Organizácia';
-$labels['reply-to'] = 'Odpovedať na';
-$labels['mailboxlist'] = 'Adresár';
-$labels['messagesfromto'] = 'Správy od $from do $to z $count';
-$labels['messagenrof'] = 'Správa $nr z $count';
-$labels['moveto'] = 'presunúť do...';
-$labels['download'] = 'stiahnuť';
-$labels['filename'] = 'Meno súboru';
-$labels['filesize'] = 'Veľkosť súboru';
-$labels['preferhtml'] = 'Uprednostniť HTML zobrazenie';
-$labels['htmlmessage'] = 'HTML správa';
-$labels['prettydate'] = 'Krajší dátum';
-$labels['addtoaddressbook'] = 'Pridaj do adresára';
-$labels['sun'] = 'Ned';
-$labels['mon'] = 'Pon';
-$labels['tue'] = 'Uto';
-$labels['wed'] = 'Str';
-$labels['thu'] = 'Štv';
-$labels['fri'] = 'Pia';
-$labels['sat'] = 'Sob';
-$labels['sunday'] = 'Nedeľa';
-$labels['monday'] = 'Pondelok';
-$labels['tuesday'] = 'Utorok';
-$labels['wednesday'] = 'Streda';
-$labels['thursday'] = 'Štvrtok';
-$labels['friday'] = 'Piatok';
-$labels['saturday'] = 'Sobota';
-$labels['today'] = 'Dnes';
-$labels['checkmail'] = 'Skontroluj nové správy';
-$labels['writenewmessage'] = 'Vytvor novú správu';
-$labels['replytomessage'] = 'Odpovedať';
-$labels['replytoallmessage'] = 'Odpovedať všetkým';
-$labels['forwardmessage'] = 'Poslať ďalej';
-$labels['deletemessage'] = 'Zmazať správu';
-$labels['movemessagetotrash'] = 'Presunúť správu do koša';
-$labels['printmessage'] = 'Vytlač správu';
-$labels['previousmessage'] = 'Zobraziť predchádzajúcu správu';
-$labels['previousmessages'] = 'Zobraziť predchádzajúcu stránku správ';
-$labels['firstmessage'] = 'Zobraziť prvú správu';
-$labels['firstmessages'] = 'Zobraziť prvú stránku správ';
-$labels['nextmessage'] = 'Zobraziť ďalšiu správu';
-$labels['nextmessages'] = 'Zobraziť ďalšiu stránku správ';
-$labels['lastmessage'] = 'Zobraziť poslednú správu';
-$labels['lastmessages'] = 'Zobraziť poslednú stránku správ';
-$labels['backtolist'] = 'Späť na zoznam správ';
-$labels['viewsource'] = 'Ukáž zdroj správy';
-$labels['markmessages'] = 'Označ správy';
-$labels['markread'] = 'Ako prečítané';
-$labels['markunread'] = 'Ako neprečítané';
-$labels['select'] = 'Výber';
-$labels['all'] = 'Všetky';
-$labels['none'] = 'Žiadnu';
-$labels['unread'] = 'Neprečítané';
-$labels['compact'] = 'Kompaktné';
-$labels['empty'] = 'Prázdne';
-$labels['purge'] = 'Vyprázdniť';
-$labels['quota'] = 'Využitie schránky';
-$labels['unknown'] = 'neznáme';
-$labels['unlimited'] = 'neobmedzené';
-$labels['quicksearch'] = 'Rýchle vyhľadávanie';
-$labels['resetsearch'] = 'Vyčisti vyhľadávanie';
-$labels['compose'] = 'Vytvoriť správu';
-$labels['savemessage'] = 'Uložiť do rozpísaných';
-$labels['sendmessage'] = 'Odoslať správu';
-$labels['addattachment'] = 'Pridať prílohu';
-$labels['charset'] = 'Znaková sada';
-$labels['editortype'] = 'Typ editora';
-$labels['returnreceipt'] = 'Doručenka';
-$labels['checkspelling'] = 'Skontroluj pravopis';
-$labels['resumeediting'] = 'Pokračovať v úpravách';
-$labels['revertto'] = 'Vrátiť sa na';
-$labels['attachments'] = 'Prílohy';
-$labels['upload'] = 'Nahrať';
-$labels['close'] = 'Zatvor';
-$labels['low'] = 'Nízka';
-$labels['lowest'] = 'Najnižšia';
-$labels['normal'] = 'Normálna';
-$labels['high'] = 'Vysoká';
-$labels['highest'] = 'Najvyššia';
-$labels['nosubject'] = '(bez predmetu)';
-$labels['showimages'] = 'Ukáž obrázky';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Čisty text';
-$labels['addcc'] = 'Pridať kópiu';
-$labels['addbcc'] = 'Pridať skrytú kopiu';
-$labels['addreplyto'] = 'Pridať odpoveď';
-$labels['mdnrequest'] = 'Odosielateľ tejto správy chce byť upozornený na to, že ste správu obdržali. Chcete potvrdiť prijatie správy?';
-$labels['receiptread'] = 'Potvrdenie o prijatí správy';
-$labels['yourmessage'] = 'Toto je potvrdenie o prijatí Vašej správy';
-$labels['receiptnote'] = 'Poznámka: Toto potvrdenie negarantuje, že správa bola príjemcom prečítaná a porozumel jej obsahu.';
-$labels['name'] = 'Celé meno';
-$labels['firstname'] = 'Meno';
-$labels['surname'] = 'Priezvisko';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Pridaj nový kontakt';
-$labels['editcontact'] = 'Uprav kontakt';
-$labels['edit'] = 'Uprav';
-$labels['cancel'] = 'Zruš';
-$labels['save'] = 'Ulož';
-$labels['delete'] = 'Zmaž';
-$labels['newcontact'] = 'Vytvor nový kontakt';
-$labels['deletecontact'] = 'Zmaž zvolené kontakty';
-$labels['composeto'] = 'Vytvor správu';
-$labels['contactsfromto'] = 'Kontakty od $from do $to z $count';
-$labels['print'] = 'Tlač';
-$labels['export'] = 'Export';
-$labels['previouspage'] = 'Predchádzajúca stránka';
-$labels['firstpage'] = 'Prvá stránka';
-$labels['nextpage'] = 'Nasledujúca stránka';
-$labels['lastpage'] = 'Posledná stránka';
-$labels['groups'] = 'Skupiny';
-$labels['personaladrbook'] = 'Osobné adresy';
-$labels['settingsfor'] = 'Nastavenia pre';
-$labels['preferences'] = 'Vlastnosti';
-$labels['userpreferences'] = 'Užívateľské vlastnosti';
-$labels['editpreferences'] = 'Uprav užívateľské vlastnosti';
-$labels['identities'] = 'Profily';
-$labels['manageidentities'] = 'Spravovať profily pre tento účet';
-$labels['newidentity'] = 'Nový profil';
-$labels['newitem'] = 'Nová položka';
-$labels['edititem'] = 'Uprav položku';
-$labels['setdefault'] = 'Obnoviť pôvodné';
-$labels['language'] = 'Jazyk';
-$labels['timezone'] = 'Časová zóna';
-$labels['pagesize'] = 'Riadky na stránku';
-$labels['signature'] = 'Podpis';
-$labels['dstactive'] = 'Letný čas';
-$labels['htmleditor'] = 'Vytvoriť HTML správu';
-$labels['htmlsignature'] = 'HTML podpis';
-$labels['previewpane'] = 'Ukáž náhlad výplne';
-$labels['autosavedraft'] = 'Automaticky ulož koncept';
-$labels['everynminutes'] = 'každých $n minút';
-$labels['never'] = 'nikdy';
-$labels['folder'] = 'Zložka';
-$labels['folders'] = 'Zložky';
-$labels['foldername'] = 'Meno zložky';
-$labels['subscribed'] = 'Podpísaný';
-$labels['messagecount'] = 'Počet správ';
-$labels['create'] = 'Vytvoriť';
-$labels['createfolder'] = 'Vytvor novú zložku';
-$labels['rename'] = 'Premenovať';
-$labels['renamefolder'] = 'Premenovať zložku';
-$labels['deletefolder'] = 'Zmaž zložku';
-$labels['managefolders'] = 'Spravovať zložky';
-$labels['sortby'] = 'Triediť podľa';
-$labels['sortasc'] = 'Triediť vzostupne';
-$labels['sortdesc'] = 'Triediť zostupne';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/sk/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Marek Kutnar <marek19@zmail.sk> |
- | Lukas Kraic <lukas.kraic@truni.sk> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 1153 2008-02-28 20:04:12Z thomasb $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Chybné prihlásenie';
-$messages['cookiesdisabled'] = 'Váš internetový prehliadač nepodporuje cookies, ktoré sú potrebné pre prihlásenie';
-$messages['sessionerror'] = 'Vaše prihlásenie je neplatné alebo vypršala jeho platnosť';
-$messages['imaperror'] = 'Nepodarilo sa spojiť s IMAP serverom';
-$messages['nomessagesfound'] = 'Vo Vašej schránke nie je žiadna správa';
-$messages['loggedout'] = 'Odhlásenie prebehlo úspešne. Dovidenia.';
-$messages['mailboxempty'] = 'Schránka je prázdna';
-$messages['loading'] = 'Nahrávam...';
-$messages['loadingdata'] = 'Nahrávam údaje...';
-$messages['checkingmail'] = 'Kontrolujem nové správy...';
-$messages['sendingmessage'] = 'Posielam správu...';
-$messages['messagesent'] = 'Správa bola odoslaná';
-$messages['savingmessage'] = 'Ukladám správu...';
-$messages['messagesaved'] = 'Správa bola uložená do Nedokončené';
-$messages['successfullysaved'] = 'Uložené';
-$messages['addedsuccessfully'] = 'Kontakt bol pridaný do adresára';
-$messages['contactexists'] = 'Kontakt s touto e-mailovou adresou už existuje';
-$messages['blockedimages'] = 'Z bezpečnostných dôvodov sú v správe zablokované obrázky.';
-$messages['encryptedmessage'] = 'Táto správa je zakryptovaná, a nie je možné ju zobraziť!';
-$messages['nocontactsfound'] = 'Nemáte žiadne kontakty';
-$messages['contactnotfound'] = 'Požadovaný kontakt nebol nájdený';
-$messages['sendingfailed'] = 'Odosielanie správy zlyhalo';
-$messages['errorsaving'] = 'Vyskytla sa chyba pri ukladaní';
-$messages['errormoving'] = 'Nemôžem presunúť správu';
-$messages['errordeleting'] = 'Nemôžem zmazať správu';
-$messages['deletecontactconfirm'] = 'Ste si istý, že chcete zmazať zvolený(é) konakt(y)?';
-$messages['deletemessagesconfirm'] = 'Ste si istý, že chcete zmazať zvolenú(é) správu(y)?';
-$messages['deletefolderconfirm'] = 'Ste si istý, že chcete zmazať túto zložku?';
-$messages['purgefolderconfirm'] = 'Ste si istý, že chcete zmazať všetky správy v tejto zložke?';
-$messages['formincomplete'] = 'Formulár nie je kompletne vyplnený';
-$messages['noemailwarning'] = 'Prosím vložte platnú emailovú adresu';
-$messages['nonamewarning'] = 'Prosím zadajte meno';
-$messages['nopagesizewarning'] = 'Prosím zadajte počet strán';
-$messages['norecipientwarning'] = 'Prosím vložte aspoň jedného adresáta';
-$messages['nosubjectwarning'] = 'Predmet správy je prázdny. Chcete ho teraz zadať?';
-$messages['nobodywarning'] = 'Chcete odoslať správu bez textu?';
-$messages['notsentwarning'] = 'Správa nebola odoslaná, chcete ju zrušiť?';
-$messages['noldapserver'] = 'Prosím zvoľ LDAP server pre vyhľadávanie';
-$messages['nocontactsreturned'] = 'Neboli nájdené žiadne kontakty';
-$messages['nosearchname'] = 'Prosím vložte meno alebo emailovú adresu';
-$messages['searchsuccessful'] = '$nr správa(y) nájdené';
-$messages['searchnomatch'] = 'Hľadaný výraz nebol nájdený';
-$messages['searching'] = 'Hľadám...';
-$messages['checking'] = 'Kontrolujem...';
-$messages['nospellerrors'] = 'Pri kontrole pravopisu neboli nájdene chyby';
-$messages['folderdeleted'] = 'Adresár bol zmazaný';
-$messages['deletedsuccessfully'] = 'Úspešne zmazané';
-$messages['converting'] = 'Odstraňujem formátovanie zo správy...';
-$messages['messageopenerror'] = 'Nemôžem nahrať správu zo servera';
-$messages['fileuploaderror'] = 'Nahrávanie súboru neuspešné';
-$messages['filesizeerror'] = 'Nahrávaný súbor prekročil maximálnu velkost $size';
-$messages['copysuccess'] = 'Úspešne skopírovanie $nr adries';
-$messages['copyerror'] = 'Nemôžem skopírovať žiadnu adresu';
-$messages['sourceisreadonly'] = 'Tento zdroj adries je len na čítanie';
-$messages['errorsavingcontact'] = 'Nemôžem uložit adresu kontaktu';
-$messages['movingmessage'] = 'Presúvam správu...';
-$messages['receiptsent'] = 'Potvrdenie o prijatí správy odoslané';
-$messages['errorsendingreceipt'] = 'Potvrdenie o prijatí správy nebolo možné odoslať';
-$messages['nodeletelastidentity'] = 'Identita sa nedá odstrániť, je posledná a musí zostať.';
-$messages['addsubfolderhint'] = 'Táto zložka bude vytvorená ako podzložka aktualne zvolenej zložky';
-
-?>
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/sk/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Marek Kutnar <marek19@zmail.sk> |
+| Lukas Kraic <lukas.kraic@truni.sk> |
+| Peter Mann <peter.mann@tuke.sk> |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 1462 2008-06-01 15:40:16Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Vitajte v $product';
+$labels['username'] = 'Prihlasovacie meno';
+$labels['password'] = 'Heslo';
+$labels['server'] = 'Server';
+$labels['login'] = 'Prihlásiť';
+$labels['logout'] = 'Odhlásiť';
+$labels['mail'] = 'E-Mail';
+$labels['settings'] = 'Osobné nastavenia';
+$labels['addressbook'] = 'Adresár';
+$labels['inbox'] = 'Doručená pošta';
+$labels['drafts'] = 'Rozpísané';
+$labels['sent'] = 'Odoslané';
+$labels['trash'] = 'Kôš';
+$labels['junk'] = 'Nevyžiadaná pošta';
+$labels['subject'] = 'Predmet';
+$labels['from'] = 'Odosielateľ';
+$labels['to'] = 'Adresát';
+$labels['cc'] = 'Kópia';
+$labels['bcc'] = 'Tajná kópia';
+$labels['replyto'] = 'Odpovedať na';
+$labels['date'] = 'Dátum';
+$labels['size'] = 'Veľkosť';
+$labels['priority'] = 'Priorita';
+$labels['organization'] = 'Organizácia';
+$labels['reply-to'] = 'Odpovedať na';
+$labels['mailboxlist'] = 'Adresár';
+$labels['messagesfromto'] = 'Správy od $from do $to z $count';
+$labels['messagenrof'] = 'Správa $nr z $count';
+$labels['moveto'] = 'presunúť do...';
+$labels['download'] = 'stiahnuť';
+$labels['filename'] = 'Meno súboru';
+$labels['filesize'] = 'Veľkosť súboru';
+$labels['preferhtml'] = 'Uprednostniť HTML zobrazenie';
+$labels['htmlmessage'] = 'HTML správa';
+$labels['prettydate'] = 'Krajší dátum';
+$labels['addtoaddressbook'] = 'Pridať do adresára';
+$labels['sun'] = 'Ne';
+$labels['mon'] = 'Po';
+$labels['tue'] = 'Ut';
+$labels['wed'] = 'St';
+$labels['thu'] = 'Št';
+$labels['fri'] = 'Pi';
+$labels['sat'] = 'So';
+$labels['sunday'] = 'Nedeľa';
+$labels['monday'] = 'Pondelok';
+$labels['tuesday'] = 'Utorok';
+$labels['wednesday'] = 'Streda';
+$labels['thursday'] = 'Štvrtok';
+$labels['friday'] = 'Piatok';
+$labels['saturday'] = 'Sobota';
+$labels['jan'] = 'Jan';
+$labels['feb'] = 'Feb';
+$labels['mar'] = 'Mar';
+$labels['apr'] = 'Apr';
+$labels['may'] = 'Máj';
+$labels['jun'] = 'Jún';
+$labels['jul'] = 'Júl';
+$labels['aug'] = 'Aug';
+$labels['sep'] = 'Sep';
+$labels['oct'] = 'Okt';
+$labels['nov'] = 'Nov';
+$labels['dec'] = 'Dec';
+$labels['longjan'] = 'Január';
+$labels['longfeb'] = 'Február';
+$labels['longmar'] = 'Marec';
+$labels['longapr'] = 'Apríl';
+$labels['longmay'] = 'Máj';
+$labels['longjun'] = 'Jún';
+$labels['longjul'] = 'Júl';
+$labels['longaug'] = 'August';
+$labels['longsep'] = 'September';
+$labels['longoct'] = 'Október';
+$labels['longnov'] = 'November';
+$labels['longdec'] = 'December';
+$labels['today'] = 'Dnes';
+$labels['checkmail'] = 'Skontrolovať nové správy';
+$labels['writenewmessage'] = 'Vytvoriť novú správu';
+$labels['replytomessage'] = 'Odpovedať';
+$labels['replytoallmessage'] = 'Odpovedať všetkým';
+$labels['forwardmessage'] = 'Poslať ďalej';
+$labels['deletemessage'] = 'Zmazať správu';
+$labels['movemessagetotrash'] = 'Presunúť správu do koša';
+$labels['printmessage'] = 'Vytlačiť správu';
+$labels['previousmessage'] = 'Zobraziť predchádzajúcu správu';
+$labels['previousmessages'] = 'Zobraziť predchádzajúcu stránku správ';
+$labels['firstmessage'] = 'Zobraziť prvú správu';
+$labels['firstmessages'] = 'Zobraziť prvú stránku správ';
+$labels['nextmessage'] = 'Zobraziť ďalšiu správu';
+$labels['nextmessages'] = 'Zobraziť ďalšiu stránku správ';
+$labels['lastmessage'] = 'Zobraziť poslednú správu';
+$labels['lastmessages'] = 'Zobraziť poslednú stránku správ';
+$labels['backtolist'] = 'Späť na zoznam správ';
+$labels['viewsource'] = 'Ukázať zdroj správy';
+$labels['markmessages'] = 'Označiť správy';
+$labels['markread'] = 'Ako prečítané';
+$labels['markunread'] = 'Ako neprečítané';
+$labels['select'] = 'Výber';
+$labels['all'] = 'Všetky';
+$labels['none'] = 'Žiadne';
+$labels['unread'] = 'Neprečítané';
+$labels['compact'] = 'Kompaktné';
+$labels['empty'] = 'Prázdne';
+$labels['purge'] = 'Vyprázdniť';
+$labels['quota'] = 'Zaplnenie schránky';
+$labels['unknown'] = 'neznáme';
+$labels['unlimited'] = 'neobmedzené';
+$labels['quicksearch'] = 'Rýchle vyhľadávanie';
+$labels['resetsearch'] = 'Vyčistiť vyhľadávanie';
+$labels['compose'] = 'Vytvoriť správu';
+$labels['savemessage'] = 'Uložiť do rozpísaných';
+$labels['sendmessage'] = 'Odoslať správu';
+$labels['addattachment'] = 'Pridať prílohu';
+$labels['charset'] = 'Znaková sada';
+$labels['editortype'] = 'Typ editora';
+$labels['returnreceipt'] = 'Potvrdenie o doručení';
+$labels['checkspelling'] = 'Skontrolovať pravopis';
+$labels['resumeediting'] = 'Pokračovať v úpravách';
+$labels['revertto'] = 'Vrátiť sa na';
+$labels['attachments'] = 'Prílohy';
+$labels['upload'] = 'Nahrať';
+$labels['close'] = 'Zatvoriť';
+$labels['low'] = 'Nízka';
+$labels['lowest'] = 'Najnižšia';
+$labels['normal'] = 'Normálna';
+$labels['high'] = 'Vysoká';
+$labels['highest'] = 'Najvyššia';
+$labels['nosubject'] = '(bez predmetu)';
+$labels['showimages'] = 'Ukázať obrázky';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Čistý text';
+$labels['addcc'] = 'Pridať kópiu';
+$labels['addbcc'] = 'Pridať skrytú kopiu';
+$labels['addreplyto'] = 'Pridať odpoveď';
+$labels['mdnrequest'] = 'Odosielateľ tejto správy chce byť upozornený na to, že ste správu obdržali. Chcete potvrdiť prijatie správy?';
+$labels['receiptread'] = 'Potvrdenie o prijatí správy';
+$labels['yourmessage'] = 'Toto je potvrdenie o prijatí Vašej správy';
+$labels['receiptnote'] = 'Poznámka: Toto potvrdenie negarantuje, že správa bola príjemcom prečítaná a porozumel jej obsahu.';
+$labels['name'] = 'Celé meno';
+$labels['firstname'] = 'Meno';
+$labels['surname'] = 'Priezvisko';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Pridať nový kontakt';
+$labels['editcontact'] = 'Upraviť kontakt';
+$labels['edit'] = 'Upraviť';
+$labels['cancel'] = 'Zrušiť';
+$labels['save'] = 'Uložiť';
+$labels['delete'] = 'Zmazať';
+$labels['newcontact'] = 'Vytvoriť nový kontakt';
+$labels['deletecontact'] = 'Zmazať zvolené kontakty';
+$labels['composeto'] = 'Vytvoriť správu pre';
+$labels['contactsfromto'] = 'Kontakty od $from do $to z $count';
+$labels['print'] = 'Tlač';
+$labels['export'] = 'Export';
+$labels['previouspage'] = 'Predchádzajúca stránka';
+$labels['firstpage'] = 'Prvá stránka';
+$labels['nextpage'] = 'Nasledujúca stránka';
+$labels['lastpage'] = 'Posledná stránka';
+$labels['groups'] = 'Skupiny';
+$labels['personaladrbook'] = 'Osobné adresy';
+$labels['settingsfor'] = 'Nastavenia pre';
+$labels['preferences'] = 'Vlastnosti';
+$labels['userpreferences'] = 'Používateľské nastavenia';
+$labels['editpreferences'] = 'Upraviť používateľské nastavenia';
+$labels['identities'] = 'Profily';
+$labels['manageidentities'] = 'Spravovať profily pre tento účet';
+$labels['newidentity'] = 'Nový profil';
+$labels['newitem'] = 'Nová položka';
+$labels['edititem'] = 'Upraviť položku';
+$labels['setdefault'] = 'Obnoviť pôvodné';
+$labels['language'] = 'Jazyk';
+$labels['timezone'] = 'Časová zóna';
+$labels['pagesize'] = 'Riadky na stránku';
+$labels['signature'] = 'Podpis';
+$labels['dstactive'] = 'Letný čas';
+$labels['htmleditor'] = 'Vytvoriť HTML správu';
+$labels['htmlsignature'] = 'HTML podpis';
+$labels['previewpane'] = 'Ukázať náhľad';
+$labels['logoutclear'] = 'Vyprázdniť kôš pri odhlásení';
+$labels['logoutcompact'] = 'Zhustiť priečinok Doručená pošta pri odhlásení';
+$labels['uisettings'] = 'Používateľské rozhranie';
+$labels['serversettings'] = 'Nastavenia servera';
+$labels['mailboxview'] = 'Pohľad na schránku';
+$labels['mdnrequests'] = 'Upozornenia odosielateľovi';
+$labels['askuser'] = 'spýtať sa používateľa';
+$labels['autosend'] = 'poslať automaticky';
+$labels['ignore'] = 'ignorovať';
+$labels['readwhendeleted'] = 'Označiť správu ';
+$labels['flagfordeletion'] = 'Pri odstránení správy iba označiť správu ako odstránenú';
+$labels['autosavedraft'] = 'Automaticky uložiť koncept';
+$labels['everynminutes'] = 'každých $n minút';
+$labels['never'] = 'nikdy';
+$labels['folder'] = 'Priečinok';
+$labels['folders'] = 'Priečinky';
+$labels['foldername'] = 'Názov priečinku';
+$labels['subscribed'] = 'Prihlásený k odberu';
+$labels['messagecount'] = 'Počet správ';
+$labels['create'] = 'Vytvoriť';
+$labels['createfolder'] = 'Vytvor nový priečinok';
+$labels['rename'] = 'Premenovať';
+$labels['renamefolder'] = 'Premenovať priečinok';
+$labels['deletefolder'] = 'Zmazať priečinok';
+$labels['managefolders'] = 'Spravovať priečinky';
+$labels['sortby'] = 'Triediť podľa';
+$labels['sortasc'] = 'Triediť vzostupne';
+$labels['sortdesc'] = 'Triediť zostupne';
+
+?>
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/sk/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Marek Kutnar <marek19@zmail.sk> |
+| Lukas Kraic <lukas.kraic@truni.sk> |
+| Peter Mann <peter.mann@tuke.sk> |
++-----------------------------------------------------------------------+
+
+@version $Id: messages.inc 1462 2008-06-01 15:40:16Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Chybné prihlásenie';
+$messages['cookiesdisabled'] = 'Váš internetový prehliadač nepodporuje cookies, ktoré sú potrebné pre prihlásenie';
+$messages['sessionerror'] = 'Vaše prihlásenie je neplatné alebo vypršala jeho platnosť';
+$messages['imaperror'] = 'Nepodarilo sa spojiť s IMAP serverom';
+$messages['nomessagesfound'] = 'Vo Vašej schránke nie je žiadna správa';
+$messages['loggedout'] = 'Odhlásenie prebehlo úspešne. Dovidenia.';
+$messages['mailboxempty'] = 'Schránka je prázdna';
+$messages['loading'] = 'Načítava sa...';
+$messages['loadingdata'] = 'Načítavajú sa údaje...';
+$messages['checkingmail'] = 'Kontrolujú sa nové správy...';
+$messages['sendingmessage'] = 'Správa sa odosiela...';
+$messages['messagesent'] = 'Správa bola úspešne odoslaná';
+$messages['savingmessage'] = 'Správa sa ukladá...';
+$messages['messagesaved'] = 'Správa bola uložená medzi Rozpísané správy';
+$messages['successfullysaved'] = 'Úspešne uložená';
+$messages['addedsuccessfully'] = 'Kontakt bol pridaný do adresára';
+$messages['contactexists'] = 'Kontakt s touto e-mailovou adresou už existuje';
+$messages['blockedimages'] = 'Z bezpečnostných dôvodov sú v správe zablokované obrázky.';
+$messages['encryptedmessage'] = 'Táto správa je zašifrovaná, a nie je možné ju zobraziť!';
+$messages['nocontactsfound'] = 'Nemáte žiadne kontakty';
+$messages['contactnotfound'] = 'Požadovaný kontakt nebol nájdený';
+$messages['sendingfailed'] = 'Odosielanie správy zlyhalo';
+$messages['errorsaving'] = 'Vyskytla sa chyba pri ukladaní';
+$messages['errormoving'] = 'Správa sa nedá presunúť';
+$messages['errordeleting'] = 'Správa sa nedá zmazať';
+$messages['deletecontactconfirm'] = 'Ste si istý, že chcete zmazať zvolený(é) kontakt(y)?';
+$messages['deletemessagesconfirm'] = 'Ste si istý, že chcete zmazať zvolenú(é) správu(y)?';
+$messages['deletefolderconfirm'] = 'Ste si istý, že chcete zmazať tento priečinok?';
+$messages['purgefolderconfirm'] = 'Ste si istý, že chcete zmazať všetky správy v tomto priečinku?';
+$messages['formincomplete'] = 'Formulár nie je kompletne vyplnený';
+$messages['noemailwarning'] = 'Prosím, vložte platnú emailovú adresu';
+$messages['nonamewarning'] = 'Prosím, zadajte meno';
+$messages['nopagesizewarning'] = 'Prosím, zadajte veľkosť strany';
+$messages['norecipientwarning'] = 'Prosím, vložte aspoň jedného príjemcu';
+$messages['nosubjectwarning'] = 'Predmet správy je prázdny. Chcete ho teraz zadať?';
+$messages['nobodywarning'] = 'Chcete odoslať správu bez textu?';
+$messages['notsentwarning'] = 'Správa nebola odoslaná, chcete ju zrušiť?';
+$messages['noldapserver'] = 'Prosím, zvoľte LDAP server na vyhľadávanie';
+$messages['nocontactsreturned'] = 'Neboli nájdené žiadne kontakty';
+$messages['nosearchname'] = 'Prosím vložte meno alebo emailovú adresu';
+$messages['searchsuccessful'] = 'nájdených $nr správ';
+$messages['searchnomatch'] = 'Hľadaný výraz nebol nájdený';
+$messages['searching'] = 'Vyhľadáva sa...';
+$messages['checking'] = 'Kontroluje sa...';
+$messages['nospellerrors'] = 'Pri kontrole pravopisu neboli nájdené chyby';
+$messages['folderdeleted'] = 'Priečinok bol zmazaný';
+$messages['deletedsuccessfully'] = 'Úspešne zmazané';
+$messages['converting'] = 'Odstraňuje sa formátovanie správy...';
+$messages['messageopenerror'] = 'Nedá sa načítať správa zo servera';
+$messages['fileuploaderror'] = 'Načítanie súboru nebolo úspešné';
+$messages['filesizeerror'] = 'Načítavaný súbor prekročil maximálnu veľkosť $size';
+$messages['copysuccess'] = 'Úspešne sa skopírovalo $nr adries';
+$messages['copyerror'] = 'Nedá sa kopírovať žiadna adresa';
+$messages['sourceisreadonly'] = 'Tento zdroj adries je len na čítanie';
+$messages['errorsavingcontact'] = 'Nedá sa uložiť adresa kontaktu';
+$messages['movingmessage'] = 'Správa sa presúva...';
+$messages['receiptsent'] = 'Potvrdenie o prijatí správy bolo odoslané';
+$messages['errorsendingreceipt'] = 'Potvrdenie o prijatí správy sa nedalo odoslať';
+$messages['nodeletelastidentity'] = 'Identita sa nedá odstrániť, je posledná a musí zostať.';
+$messages['addsubfolderhint'] = 'Tento priečinok bude vytvorený ako podpriečinok aktuálne zvoleného priečinka';
+$messages['forbiddencharacter'] = 'Názov priečinka obsahuje nepovolený znak';
+
+?>
+++ /dev/null
-<?php
-
-/*
-
-+-----------------------------------------------------------------------+
-| language/sl/labels.inc |
-| |
-| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
-| Licensed under the GNU GPL |
-| |
-+-----------------------------------------------------------------------+
-| Author: Andrej Sossi <asossi@dotcom.ts.it> |
-| Andrej Mocilnik <amocilnik@dotcom.ts.it> |
-+-----------------------------------------------------------------------+
-
-@version $Id: labels.inc 1109 2008-02-17 20:22:05Z thomasb $
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Dobrodošel v $product';
-$labels['username'] = 'Uporabniško ime';
-$labels['password'] = 'Geslo';
-$labels['server'] = 'Strežnik';
-$labels['login'] = 'Prijava';
-$labels['logout'] = 'Odjava';
-$labels['mail'] = 'E-Pošta';
-$labels['settings'] = 'Osebne nastavitve';
-$labels['addressbook'] = 'Stiki';
-$labels['inbox'] = 'Prejeto';
-$labels['drafts'] = 'Osnutki';
-$labels['sent'] = 'Poslano';
-$labels['trash'] = 'Smeti';
-$labels['junk'] = 'Nezaželena sporočila';
-$labels['subject'] = 'Zadeva';
-$labels['from'] = 'Pošiljatelj';
-$labels['to'] = 'Prejemnik';
-$labels['cc'] = 'Kp';
-$labels['bcc'] = 'Skp';
-$labels['replyto'] = 'Odgovor na';
-$labels['date'] = 'Datum';
-$labels['size'] = 'Velikost';
-$labels['priority'] = 'Prioriteta';
-$labels['organization'] = 'Organizacija';
-$labels['reply-to'] = 'Odgovor na';
-$labels['mailboxlist'] = 'Mape';
-$labels['messagesfromto'] = 'Sporočila $from do $to od $count';
-$labels['messagenrof'] = 'Sporočilo $nr od $count';
-$labels['moveto'] = 'premakni v...';
-$labels['download'] = 'prenesi';
-$labels['filename'] = 'Ime datoteke';
-$labels['filesize'] = 'Velikost datoteke';
-$labels['preferhtml'] = 'Prednostno HTML';
-$labels['htmlmessage'] = 'HTML sporočilo';
-$labels['prettydate'] = 'Bolj čitljivi datumi';
-$labels['addtoaddressbook'] = 'Dodaj v stike';
-$labels['sun'] = 'Ned';
-$labels['mon'] = 'Pon';
-$labels['tue'] = 'Tor';
-$labels['wed'] = 'Sre';
-$labels['thu'] = 'Čet';
-$labels['fri'] = 'Pet';
-$labels['sat'] = 'Sob';
-$labels['sunday'] = 'Nedelja';
-$labels['monday'] = 'Ponedeljek';
-$labels['tuesday'] = 'Torek';
-$labels['wednesday'] = 'Sreda';
-$labels['thursday'] = 'Četrtek';
-$labels['friday'] = 'Petek';
-$labels['saturday'] = 'Sobota';
-$labels['today'] = 'Danes';
-$labels['checkmail'] = 'Preglej nova sporočila';
-$labels['writenewmessage'] = 'Novo sporočilo';
-$labels['replytomessage'] = 'Odgovori na sporočilo';
-$labels['replytoallmessage'] = 'Odgovori pošiljatelju in vsem prejemnikom';
-$labels['forwardmessage'] = 'Posreduj sporočilo';
-$labels['deletemessage'] = 'Premakni sporočilo v smeti';
-$labels['movemessagetotrash'] = 'Premakni v smetnjak';
-$labels['printmessage'] = 'Natisni to sporočilo';
-$labels['previousmessage'] = 'Prikaži prejšnje sporočilo';
-$labels['previousmessages'] = 'Prikaži prejšnja sporočila';
-$labels['firstmessage'] = 'Prikaži prvo sporočilo';
-$labels['firstmessages'] = 'Prikaži prva sporočila';
-$labels['nextmessage'] = 'Prikaži naslednjo sporočilo';
-$labels['nextmessages'] = 'Prikaži naslednja sporočila';
-$labels['lastmessage'] = 'Prikaži zadnjo sporočilo';
-$labels['lastmessages'] = 'Prikaži zadnja sporočila';
-$labels['backtolist'] = 'Nazaj na seznam sporočil';
-$labels['viewsource'] = 'Prikaži izvirno kodo';
-$labels['markmessages'] = 'Označi sporočilo';
-$labels['markread'] = 'Kot prebrano';
-$labels['markunread'] = 'Kot neprebrano';
-$labels['select'] = 'Izberi';
-$labels['all'] = 'Vse';
-$labels['none'] = 'Nobenih';
-$labels['unread'] = 'Neprebrano';
-$labels['compact'] = 'Stisni';
-$labels['empty'] = 'Izprazni';
-$labels['purge'] = 'Počisti';
-$labels['quota'] = 'Poraba diska';
-$labels['unknown'] = 'neznana';
-$labels['unlimited'] = 'neomejena';
-$labels['quicksearch'] = 'Hitri iskalnik';
-$labels['resetsearch'] = 'Prekliči iskanje';
-$labels['compose'] = 'Sestavi sporočilo';
-$labels['savemessage'] = 'Shrani kot osnutek';
-$labels['sendmessage'] = 'Pošlji sporočilo zdaj';
-$labels['addattachment'] = 'Pripni datoteko';
-$labels['charset'] = 'Nabor znakov';
-$labels['editortype'] = 'Vrsta urejevalnika';
-$labels['returnreceipt'] = 'Potrdilo prejemnika';
-$labels['checkspelling'] = 'Preglej pravopis';
-$labels['resumeediting'] = 'Nadaljuj z urejanjem';
-$labels['revertto'] = 'Razveljavi';
-$labels['attachments'] = 'Priponke';
-$labels['upload'] = 'Naloži';
-$labels['close'] = 'Zapri';
-$labels['low'] = 'Nizka';
-$labels['lowest'] = 'Najnižja';
-$labels['normal'] = 'Normalna';
-$labels['high'] = 'Visoka';
-$labels['highest'] = 'Najvišja';
-$labels['nosubject'] = '(brez naslova)';
-$labels['showimages'] = 'Prikaži slike';
-$labels['htmltoggle'] = 'Obogateno besedilo (HTML)';
-$labels['plaintoggle'] = 'Samo besedilo';
-$labels['addcc'] = 'Dodaj Kp';
-$labels['addbcc'] = 'Dodaj Skp';
-$labels['addreplyto'] = 'Dodaj naslov za odgovor';
-$labels['mdnrequest'] = 'Pošiljatelj tega sporočila je zaprosil za portdilo, ko vi preberete to sporočilo. Hočete poslati obvestilo?';
-$labels['receiptread'] = 'Potrdilo o prebranem sporočilu';
-$labels['yourmessage'] = 'To je potrdilo, da je bilo vaše sporočilo prebrano';
-$labels['receiptnote'] = 'Pozor: to je samo potrdilo, da vaše sporočilo je bilo prikazano na prejemnikovem računalniku. To še ne pomeni, da je prejemnik prebral ali razumel vsebino vašega sporočila.';
-$labels['name'] = 'Ime za prikaz';
-$labels['firstname'] = 'Ime';
-$labels['surname'] = 'Priimek';
-$labels['email'] = 'E-Pošta';
-$labels['addcontact'] = 'Dodaj izbrane stike v imenik';
-$labels['editcontact'] = 'Uredi vizitko';
-$labels['edit'] = 'Uredi';
-$labels['cancel'] = 'Prekliči';
-$labels['save'] = 'Shrani';
-$labels['delete'] = 'Briši';
-$labels['newcontact'] = 'Dodaj vizitko';
-$labels['deletecontact'] = 'Izbriši izbrane vizitke';
-$labels['composeto'] = 'Sestavi sporočilo za';
-$labels['contactsfromto'] = 'Vizitke $from od $to do $count';
-$labels['print'] = 'Natisni';
-$labels['export'] = 'Izvozi';
-$labels['previouspage'] = 'Prejšnja stran';
-$labels['firstpage'] = 'Prva stran';
-$labels['nextpage'] = 'Naslednja stran';
-$labels['lastpage'] = 'Zadnja stran';
-$labels['groups'] = 'Skupine';
-$labels['personaladrbook'] = 'Osebni Stiki';
-$labels['settingsfor'] = 'Nastavitve za';
-$labels['preferences'] = 'Nastavitve';
-$labels['userpreferences'] = 'Uporabniške nastavitve';
-$labels['editpreferences'] = 'Uredi uporabniške nastavitve';
-$labels['identities'] = 'Identitete';
-$labels['manageidentities'] = 'Upravljaj identitete za ta račun';
-$labels['newidentity'] = 'Nova identiteta';
-$labels['newitem'] = 'Nov predmet';
-$labels['edititem'] = 'Uredi predmet';
-$labels['setdefault'] = 'Nastavi privzeto';
-$labels['language'] = 'Jezik';
-$labels['timezone'] = 'Časovni pas';
-$labels['pagesize'] = 'Vrstic na stran';
-$labels['signature'] = 'Podpis';
-$labels['dstactive'] = 'Avtomatična nastavitev sončne/legalne ure';
-$labels['htmleditor'] = 'Sestavi sporočila z obogatenim besedilom';
-$labels['htmlsignature'] = 'Podpis z obogatenim besedilom';
-$labels['previewpane'] = 'Prikaži predogled';
-$labels['autosavedraft'] = 'Avtomatično shrani osnutke';
-$labels['everynminutes'] = 'vsakih $n minut';
-$labels['never'] = 'nikoli';
-$labels['folder'] = 'Mapa';
-$labels['folders'] = 'Mape';
-$labels['foldername'] = 'Ime mape';
-$labels['subscribed'] = 'Vpisan';
-$labels['messagecount'] = 'Sporočila';
-$labels['create'] = 'Ustvari';
-$labels['createfolder'] = 'Ustvari novo mapo';
-$labels['rename'] = 'Preimenuj';
-$labels['renamefolder'] = 'Preimenuj mapo';
-$labels['deletefolder'] = 'Izbriši mapo';
-$labels['managefolders'] = 'Urejaj mape';
-$labels['sortby'] = 'Uredi po';
-$labels['sortasc'] = 'Uredi naraščajoče';
-$labels['sortdesc'] = 'Uredi padajoče';
-
-?>
+++ /dev/null
-<?php
-
-/*
-
-+-----------------------------------------------------------------------+
-| language/sl/messages.inc |
-| |
-| Language file of the RoundCube Webmail client |
-| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
-| Licensed under the GNU GPL |
-| |
-+-----------------------------------------------------------------------+
-| Author: Andrej Sossi <asossi@dotcom.ts.it> |
-| Andrej Mocilnik <amocilnik@dotcom.ts.it> |
-+-----------------------------------------------------------------------+
-
-@version $Id: messages.inc 1109 2008-02-17 20:22:05Z thomasb $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Prijava neuspešna';
-$messages['cookiesdisabled'] = 'Vaš brskalnik nima omogočenih piškotov';
-$messages['sessionerror'] = 'Vaša seja je napačna oz. potekla';
-$messages['imaperror'] = 'Povezava na IMAP strežnik neuspešna';
-$messages['nomessagesfound'] = 'Ni sporočil';
-$messages['loggedout'] = 'Uspešno ste zaključili sejo. Nasvidenje!';
-$messages['mailboxempty'] = 'Nabiralnik je prazen';
-$messages['loading'] = 'Nalagam...';
-$messages['loadingdata'] = 'Nalagam podatke...';
-$messages['checkingmail'] = 'Iščem nova sporočila...';
-$messages['sendingmessage'] = 'Pošiljam sporočilo...';
-$messages['messagesent'] = 'Sporočilo uspešno poslano';
-$messages['savingmessage'] = 'Shranjujem sporočilo';
-$messages['messagesaved'] = 'Sporočilo shranjeno v osnutke';
-$messages['successfullysaved'] = 'Uspešno shranjeno';
-$messages['addedsuccessfully'] = 'Vizitka uspešno dodana';
-$messages['contactexists'] = 'Vizitka s tem e-naslovom že obstaja!';
-$messages['blockedimages'] = 'Zaradi vaše varnosti slike v tem sporočilu niso prikazane.';
-$messages['encryptedmessage'] = 'To je zaščiteno sporočilo, na žalost ne more biti prikazano. Oprostite!';
-$messages['nocontactsfound'] = 'Ne najdem nobene vizitke';
-$messages['contactnotfound'] = 'Ne najdem iskane vizitke';
-$messages['sendingfailed'] = 'Pošiljanje sporočila neuspešno';
-$messages['errorsaving'] = 'Pri shranjevanju je prišlo do napake';
-$messages['errormoving'] = 'Ne morem premakniti sporočila';
-$messages['errordeleting'] = 'Ne morem izbrisati sporočila';
-$messages['deletecontactconfirm'] = 'Želite zbrisati izbrane vizitke?';
-$messages['deletemessagesconfirm'] = 'Želite zbrisati izbrana sporočila?';
-$messages['deletefolderconfirm'] = 'Želite zbrisati to mapo?';
-$messages['purgefolderconfirm'] = 'Želite zbrisati vsa sporočila v tej mapi?';
-$messages['formincomplete'] = 'Obrazec ni bil izpolnjen v celoti';
-$messages['noemailwarning'] = 'Prosim vpišite veljaven e-naslov';
-$messages['nonamewarning'] = 'Prosim vpišite ime';
-$messages['nopagesizewarning'] = 'Prosim vpišite velikost strani';
-$messages['norecipientwarning'] = 'Prosim vpišite vsaj enega naslovnika';
-$messages['nosubjectwarning'] = 'Polje "Naslov" je prazno. Ali ga želite vpisati zdaj?';
-$messages['nobodywarning'] = 'Pošlji to sporočilo brez besedila?';
-$messages['notsentwarning'] = 'Sporočilo ni bilo poslano. Želite opustiti vaše sporočilo?';
-$messages['noldapserver'] = 'Prosim izberite ldap strežnik za iskanje';
-$messages['nocontactsreturned'] = 'Ne najdem vizitk';
-$messages['nosearchname'] = 'Prosim vpišite ime ali e-naslov stika';
-$messages['searchsuccessful'] = 'Število dobljenih sporočil: $nr';
-$messages['searchnomatch'] = 'Iskanje ni doprineslo nobenega rezultata';
-$messages['searching'] = 'Iščem...';
-$messages['checking'] = 'Previrjam...';
-$messages['nospellerrors'] = 'Ni pravopisnih napak';
-$messages['folderdeleted'] = 'Mapa uspešno zbrisana';
-$messages['deletedsuccessfully'] = 'Uspešno zbrisano';
-$messages['converting'] = 'Brišem obogatitev besedila...';
-$messages['messageopenerror'] = 'Neuspešno nalaganje sporočila s stežnika';
-$messages['fileuploaderror'] = 'Neuspešno nalaganje datoteke';
-$messages['filesizeerror'] = 'Naložena datoteka presega maksimalno velikost $size';
-$messages['copysuccess'] = 'Število prepisanih naslovov: $nr';
-$messages['copyerror'] = 'Ne morem prepisati nobenega naslova';
-$messages['sourceisreadonly'] = 'Izvirnik naslova je samo berljiv';
-$messages['errorsavingcontact'] = 'Ne morem shraniti vizitke';
-$messages['movingmessage'] = 'Premakni besedilo...';
-$messages['receiptsent'] = 'Potrdilo o prebranem sporočilu je bilo uspešno poslano';
-$messages['errorsendingreceipt'] = 'Nemogoče poslati potrdilo o prebranem sporočilu';
-$messages['nodeletelastidentity'] = 'Nemogoče zbrisati identitete. Ta je edina, ki imate.';
-$messages['addsubfolderhint'] = 'Mapa bo narejena kot podmapa trenutno izbrane mape';
-
-?>
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/sl/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Andrej Sossi <asossi@dotcom.ts.it> |
+| Andrej Mocilnik <amocilnik@dotcom.ts.it> |
++-----------------------------------------------------------------------+
+
+@version $Id: labels.inc 1109 2008-02-17 20:22:05Z thomasb $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Dobrodošel v $product';
+$labels['username'] = 'Uporabniško ime';
+$labels['password'] = 'Geslo';
+$labels['server'] = 'Strežnik';
+$labels['login'] = 'Prijava';
+$labels['logout'] = 'Odjava';
+$labels['mail'] = 'E-Pošta';
+$labels['settings'] = 'Osebne nastavitve';
+$labels['addressbook'] = 'Stiki';
+$labels['inbox'] = 'Prejeto';
+$labels['drafts'] = 'Osnutki';
+$labels['sent'] = 'Poslano';
+$labels['trash'] = 'Smeti';
+$labels['junk'] = 'Nezaželena sporočila';
+$labels['subject'] = 'Zadeva';
+$labels['from'] = 'Pošiljatelj';
+$labels['to'] = 'Prejemnik';
+$labels['cc'] = 'Kp';
+$labels['bcc'] = 'Skp';
+$labels['replyto'] = 'Odgovor na';
+$labels['date'] = 'Datum';
+$labels['size'] = 'Velikost';
+$labels['priority'] = 'Prioriteta';
+$labels['organization'] = 'Organizacija';
+$labels['reply-to'] = 'Odgovor na';
+$labels['mailboxlist'] = 'Mape';
+$labels['messagesfromto'] = 'Sporočila $from do $to od $count';
+$labels['messagenrof'] = 'Sporočilo $nr od $count';
+$labels['moveto'] = 'premakni v...';
+$labels['download'] = 'prenesi';
+$labels['filename'] = 'Ime datoteke';
+$labels['filesize'] = 'Velikost datoteke';
+$labels['preferhtml'] = 'Prednostno HTML';
+$labels['htmlmessage'] = 'HTML sporočilo';
+$labels['prettydate'] = 'Bolj čitljivi datumi';
+$labels['addtoaddressbook'] = 'Dodaj v stike';
+$labels['sun'] = 'Ned';
+$labels['mon'] = 'Pon';
+$labels['tue'] = 'Tor';
+$labels['wed'] = 'Sre';
+$labels['thu'] = 'Čet';
+$labels['fri'] = 'Pet';
+$labels['sat'] = 'Sob';
+$labels['sunday'] = 'Nedelja';
+$labels['monday'] = 'Ponedeljek';
+$labels['tuesday'] = 'Torek';
+$labels['wednesday'] = 'Sreda';
+$labels['thursday'] = 'Četrtek';
+$labels['friday'] = 'Petek';
+$labels['saturday'] = 'Sobota';
+$labels['today'] = 'Danes';
+$labels['checkmail'] = 'Preglej nova sporočila';
+$labels['writenewmessage'] = 'Novo sporočilo';
+$labels['replytomessage'] = 'Odgovori na sporočilo';
+$labels['replytoallmessage'] = 'Odgovori pošiljatelju in vsem prejemnikom';
+$labels['forwardmessage'] = 'Posreduj sporočilo';
+$labels['deletemessage'] = 'Premakni sporočilo v smeti';
+$labels['movemessagetotrash'] = 'Premakni v smetnjak';
+$labels['printmessage'] = 'Natisni to sporočilo';
+$labels['previousmessage'] = 'Prikaži prejšnje sporočilo';
+$labels['previousmessages'] = 'Prikaži prejšnja sporočila';
+$labels['firstmessage'] = 'Prikaži prvo sporočilo';
+$labels['firstmessages'] = 'Prikaži prva sporočila';
+$labels['nextmessage'] = 'Prikaži naslednjo sporočilo';
+$labels['nextmessages'] = 'Prikaži naslednja sporočila';
+$labels['lastmessage'] = 'Prikaži zadnjo sporočilo';
+$labels['lastmessages'] = 'Prikaži zadnja sporočila';
+$labels['backtolist'] = 'Nazaj na seznam sporočil';
+$labels['viewsource'] = 'Prikaži izvirno kodo';
+$labels['markmessages'] = 'Označi sporočilo';
+$labels['markread'] = 'Kot prebrano';
+$labels['markunread'] = 'Kot neprebrano';
+$labels['select'] = 'Izberi';
+$labels['all'] = 'Vse';
+$labels['none'] = 'Nobenih';
+$labels['unread'] = 'Neprebrano';
+$labels['compact'] = 'Stisni';
+$labels['empty'] = 'Izprazni';
+$labels['purge'] = 'Počisti';
+$labels['quota'] = 'Poraba diska';
+$labels['unknown'] = 'neznana';
+$labels['unlimited'] = 'neomejena';
+$labels['quicksearch'] = 'Hitri iskalnik';
+$labels['resetsearch'] = 'Prekliči iskanje';
+$labels['compose'] = 'Sestavi sporočilo';
+$labels['savemessage'] = 'Shrani kot osnutek';
+$labels['sendmessage'] = 'Pošlji sporočilo zdaj';
+$labels['addattachment'] = 'Pripni datoteko';
+$labels['charset'] = 'Nabor znakov';
+$labels['editortype'] = 'Vrsta urejevalnika';
+$labels['returnreceipt'] = 'Potrdilo prejemnika';
+$labels['checkspelling'] = 'Preglej pravopis';
+$labels['resumeediting'] = 'Nadaljuj z urejanjem';
+$labels['revertto'] = 'Razveljavi';
+$labels['attachments'] = 'Priponke';
+$labels['upload'] = 'Naloži';
+$labels['close'] = 'Zapri';
+$labels['low'] = 'Nizka';
+$labels['lowest'] = 'Najnižja';
+$labels['normal'] = 'Normalna';
+$labels['high'] = 'Visoka';
+$labels['highest'] = 'Najvišja';
+$labels['nosubject'] = '(brez naslova)';
+$labels['showimages'] = 'Prikaži slike';
+$labels['htmltoggle'] = 'Obogateno besedilo (HTML)';
+$labels['plaintoggle'] = 'Samo besedilo';
+$labels['addcc'] = 'Dodaj Kp';
+$labels['addbcc'] = 'Dodaj Skp';
+$labels['addreplyto'] = 'Dodaj naslov za odgovor';
+$labels['mdnrequest'] = 'Pošiljatelj tega sporočila je zaprosil za portdilo, ko vi preberete to sporočilo. Hočete poslati obvestilo?';
+$labels['receiptread'] = 'Potrdilo o prebranem sporočilu';
+$labels['yourmessage'] = 'To je potrdilo, da je bilo vaše sporočilo prebrano';
+$labels['receiptnote'] = 'Pozor: to je samo potrdilo, da vaše sporočilo je bilo prikazano na prejemnikovem računalniku. To še ne pomeni, da je prejemnik prebral ali razumel vsebino vašega sporočila.';
+$labels['name'] = 'Ime za prikaz';
+$labels['firstname'] = 'Ime';
+$labels['surname'] = 'Priimek';
+$labels['email'] = 'E-Pošta';
+$labels['addcontact'] = 'Dodaj izbrane stike v imenik';
+$labels['editcontact'] = 'Uredi vizitko';
+$labels['edit'] = 'Uredi';
+$labels['cancel'] = 'Prekliči';
+$labels['save'] = 'Shrani';
+$labels['delete'] = 'Briši';
+$labels['newcontact'] = 'Dodaj vizitko';
+$labels['deletecontact'] = 'Izbriši izbrane vizitke';
+$labels['composeto'] = 'Sestavi sporočilo za';
+$labels['contactsfromto'] = 'Vizitke $from od $to do $count';
+$labels['print'] = 'Natisni';
+$labels['export'] = 'Izvozi';
+$labels['previouspage'] = 'Prejšnja stran';
+$labels['firstpage'] = 'Prva stran';
+$labels['nextpage'] = 'Naslednja stran';
+$labels['lastpage'] = 'Zadnja stran';
+$labels['groups'] = 'Skupine';
+$labels['personaladrbook'] = 'Osebni Stiki';
+$labels['settingsfor'] = 'Nastavitve za';
+$labels['preferences'] = 'Nastavitve';
+$labels['userpreferences'] = 'Uporabniške nastavitve';
+$labels['editpreferences'] = 'Uredi uporabniške nastavitve';
+$labels['identities'] = 'Identitete';
+$labels['manageidentities'] = 'Upravljaj identitete za ta račun';
+$labels['newidentity'] = 'Nova identiteta';
+$labels['newitem'] = 'Nov predmet';
+$labels['edititem'] = 'Uredi predmet';
+$labels['setdefault'] = 'Nastavi privzeto';
+$labels['language'] = 'Jezik';
+$labels['timezone'] = 'Časovni pas';
+$labels['pagesize'] = 'Vrstic na stran';
+$labels['signature'] = 'Podpis';
+$labels['dstactive'] = 'Avtomatična nastavitev sončne/legalne ure';
+$labels['htmleditor'] = 'Sestavi sporočila z obogatenim besedilom';
+$labels['htmlsignature'] = 'Podpis z obogatenim besedilom';
+$labels['previewpane'] = 'Prikaži predogled';
+$labels['autosavedraft'] = 'Avtomatično shrani osnutke';
+$labels['everynminutes'] = 'vsakih $n minut';
+$labels['never'] = 'nikoli';
+$labels['folder'] = 'Mapa';
+$labels['folders'] = 'Mape';
+$labels['foldername'] = 'Ime mape';
+$labels['subscribed'] = 'Vpisan';
+$labels['messagecount'] = 'Sporočila';
+$labels['create'] = 'Ustvari';
+$labels['createfolder'] = 'Ustvari novo mapo';
+$labels['rename'] = 'Preimenuj';
+$labels['renamefolder'] = 'Preimenuj mapo';
+$labels['deletefolder'] = 'Izbriši mapo';
+$labels['managefolders'] = 'Urejaj mape';
+$labels['sortby'] = 'Uredi po';
+$labels['sortasc'] = 'Uredi naraščajoče';
+$labels['sortdesc'] = 'Uredi padajoče';
+
+?>
--- /dev/null
+<?php
+
+/*
+
++-----------------------------------------------------------------------+
+| language/sl/messages.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Andrej Sossi <asossi@dotcom.ts.it> |
+| Andrej Mocilnik <amocilnik@dotcom.ts.it> |
++-----------------------------------------------------------------------+
+
+@version $Id: messages.inc 1109 2008-02-17 20:22:05Z thomasb $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Prijava neuspešna';
+$messages['cookiesdisabled'] = 'Vaš brskalnik nima omogočenih piškotov';
+$messages['sessionerror'] = 'Vaša seja je napačna oz. potekla';
+$messages['imaperror'] = 'Povezava na IMAP strežnik neuspešna';
+$messages['nomessagesfound'] = 'Ni sporočil';
+$messages['loggedout'] = 'Uspešno ste zaključili sejo. Nasvidenje!';
+$messages['mailboxempty'] = 'Nabiralnik je prazen';
+$messages['loading'] = 'Nalagam...';
+$messages['loadingdata'] = 'Nalagam podatke...';
+$messages['checkingmail'] = 'Iščem nova sporočila...';
+$messages['sendingmessage'] = 'Pošiljam sporočilo...';
+$messages['messagesent'] = 'Sporočilo uspešno poslano';
+$messages['savingmessage'] = 'Shranjujem sporočilo';
+$messages['messagesaved'] = 'Sporočilo shranjeno v osnutke';
+$messages['successfullysaved'] = 'Uspešno shranjeno';
+$messages['addedsuccessfully'] = 'Vizitka uspešno dodana';
+$messages['contactexists'] = 'Vizitka s tem e-naslovom že obstaja!';
+$messages['blockedimages'] = 'Zaradi vaše varnosti slike v tem sporočilu niso prikazane.';
+$messages['encryptedmessage'] = 'To je zaščiteno sporočilo, na žalost ne more biti prikazano. Oprostite!';
+$messages['nocontactsfound'] = 'Ne najdem nobene vizitke';
+$messages['contactnotfound'] = 'Ne najdem iskane vizitke';
+$messages['sendingfailed'] = 'Pošiljanje sporočila neuspešno';
+$messages['errorsaving'] = 'Pri shranjevanju je prišlo do napake';
+$messages['errormoving'] = 'Ne morem premakniti sporočila';
+$messages['errordeleting'] = 'Ne morem izbrisati sporočila';
+$messages['deletecontactconfirm'] = 'Želite zbrisati izbrane vizitke?';
+$messages['deletemessagesconfirm'] = 'Želite zbrisati izbrana sporočila?';
+$messages['deletefolderconfirm'] = 'Želite zbrisati to mapo?';
+$messages['purgefolderconfirm'] = 'Želite zbrisati vsa sporočila v tej mapi?';
+$messages['formincomplete'] = 'Obrazec ni bil izpolnjen v celoti';
+$messages['noemailwarning'] = 'Prosim vpišite veljaven e-naslov';
+$messages['nonamewarning'] = 'Prosim vpišite ime';
+$messages['nopagesizewarning'] = 'Prosim vpišite velikost strani';
+$messages['norecipientwarning'] = 'Prosim vpišite vsaj enega naslovnika';
+$messages['nosubjectwarning'] = 'Polje "Naslov" je prazno. Ali ga želite vpisati zdaj?';
+$messages['nobodywarning'] = 'Pošlji to sporočilo brez besedila?';
+$messages['notsentwarning'] = 'Sporočilo ni bilo poslano. Želite opustiti vaše sporočilo?';
+$messages['noldapserver'] = 'Prosim izberite ldap strežnik za iskanje';
+$messages['nocontactsreturned'] = 'Ne najdem vizitk';
+$messages['nosearchname'] = 'Prosim vpišite ime ali e-naslov stika';
+$messages['searchsuccessful'] = 'Število dobljenih sporočil: $nr';
+$messages['searchnomatch'] = 'Iskanje ni doprineslo nobenega rezultata';
+$messages['searching'] = 'Iščem...';
+$messages['checking'] = 'Previrjam...';
+$messages['nospellerrors'] = 'Ni pravopisnih napak';
+$messages['folderdeleted'] = 'Mapa uspešno zbrisana';
+$messages['deletedsuccessfully'] = 'Uspešno zbrisano';
+$messages['converting'] = 'Brišem obogatitev besedila...';
+$messages['messageopenerror'] = 'Neuspešno nalaganje sporočila s stežnika';
+$messages['fileuploaderror'] = 'Neuspešno nalaganje datoteke';
+$messages['filesizeerror'] = 'Naložena datoteka presega maksimalno velikost $size';
+$messages['copysuccess'] = 'Število prepisanih naslovov: $nr';
+$messages['copyerror'] = 'Ne morem prepisati nobenega naslova';
+$messages['sourceisreadonly'] = 'Izvirnik naslova je samo berljiv';
+$messages['errorsavingcontact'] = 'Ne morem shraniti vizitke';
+$messages['movingmessage'] = 'Premakni besedilo...';
+$messages['receiptsent'] = 'Potrdilo o prebranem sporočilu je bilo uspešno poslano';
+$messages['errorsendingreceipt'] = 'Nemogoče poslati potrdilo o prebranem sporočilu';
+$messages['nodeletelastidentity'] = 'Nemogoče zbrisati identitete. Ta je edina, ki imate.';
+$messages['addsubfolderhint'] = 'Mapa bo narejena kot podmapa trenutno izbrane mape';
+
+?>
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/sr_cyrillic/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Branko Kokanovic <branko.kokanovic@gmail.com |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+$labels['welcome'] = 'Добродошли на $product';\r
+$labels['username'] = 'Корисничко име';\r
+$labels['password'] = 'Лозинка';\r
+$labels['server'] = 'Сервер';\r
+$labels['login'] = 'Пријава';\r
+$labels['logout'] = 'Одјава';\r
+$labels['mail'] = 'Сандуче';\r
+$labels['settings'] = 'Подешавања';\r
+$labels['addressbook'] = 'Именик';\r
+$labels['inbox'] = 'Примљене';\r
+$labels['drafts'] = 'Снимљене';\r
+$labels['sent'] = 'Послате';\r
+$labels['trash'] = 'Канта';\r
+$labels['junk'] = 'Смеће';\r
+$labels['subject'] = 'Наслов';\r
+$labels['from'] = 'Од';\r
+$labels['to'] = 'За';\r
+$labels['cc'] = 'Cc';\r
+$labels['bcc'] = 'Bcc';\r
+$labels['replyto'] = 'Reply-To';\r
+$labels['date'] = 'Датум';\r
+$labels['size'] = 'Величина';\r
+$labels['priority'] = 'Приоритет';\r
+$labels['organization'] = 'Организација';\r
+$labels['reply-to'] = 'Reply-To';\r
+$labels['mailboxlist'] = 'Фасцикле';\r
+$labels['messagesfromto'] = 'Поруке од $from за $to од укупно $count';\r
+$labels['messagenrof'] = 'Порука број $nr од $count';\r
+$labels['moveto'] = 'пребаци у...';\r
+$labels['download'] = 'преузми (скидање)';\r
+$labels['filename'] = 'Име датотекеe';\r
+$labels['filesize'] = 'Величина датотеке';\r
+$labels['preferhtml'] = 'Предност дај ХТМЛ формату';\r
+$labels['htmlmessage'] = 'ХТМЛ формат поруке';\r
+$labels['prettydate'] = 'Форматирани датум';\r
+$labels['addtoaddressbook'] = 'Додај у именик';\r
+$labels['sun'] = 'Нед';\r
+$labels['mon'] = 'Пон';\r
+$labels['tue'] = 'Уто';\r
+$labels['wed'] = 'Сре';\r
+$labels['thu'] = 'Чет';\r
+$labels['fri'] = 'Пет';\r
+$labels['sat'] = 'Суб';\r
+$labels['sunday'] = 'Недеља';\r
+$labels['monday'] = 'Понедељак';\r
+$labels['tuesday'] = 'Уторак';\r
+$labels['wednesday'] = 'Среда';\r
+$labels['thursday'] = 'Четвртак';\r
+$labels['friday'] = 'Петак';\r
+$labels['saturday'] = 'Субота';\r
+$labels['today'] = 'данас';\r
+$labels['checkmail'] = 'Провера нових порука';\r
+$labels['writenewmessage'] = 'Нова порука';\r
+$labels['replytomessage'] = 'Одговори на поруку';\r
+$labels['replytoallmessage'] = 'Одговори пошиљаоцу и свим примаоцима';\r
+$labels['forwardmessage'] = 'Проследи поруку';\r
+$labels['deletemessage'] = 'Извриши поруку';\r
+$labels['movemessagetotrash'] = 'Пребаци поруку у канту';\r
+$labels['printmessage'] = 'Одштампај поруку';\r
+$labels['previousmessage'] = 'Прикажи претходну поруку';\r
+$labels['previousmessages'] = 'Прикажи претходни скуп порука';\r
+$labels['firstmessage'] = 'Прикажи прву поруку';\r
+$labels['firstmessages'] = 'Прикажи први скуп порука';\r
+$labels['nextmessage'] = 'Прикажи следећу поруку';\r
+$labels['nextmessages'] = 'Прикажи следећи скуп порука';\r
+$labels['lastmessage'] = 'Прикажи последњу поруку';\r
+$labels['lastmessages'] = 'Прикажи последњи скуп порука';\r
+$labels['backtolist'] = 'Повратак на листу порука';\r
+$labels['viewsource'] = 'Прикажи поруку у изворном облику';\r
+$labels['markmessages'] = 'Обележи поруке';\r
+$labels['markread'] = 'Као прочитане';\r
+$labels['markunread'] = 'Као непрочитане';\r
+$labels['select'] = 'Означи';\r
+$labels['all'] = 'Све';\r
+$labels['none'] = 'Ниједну';\r
+$labels['unread'] = 'Непрочитане';\r
+$labels['compact'] = 'Компакција';\r
+$labels['empty'] = 'Испразни';\r
+$labels['purge'] = 'Oчисти';\r
+$labels['quota'] = 'Квота';\r
+$labels['unknown'] = 'непозната';\r
+$labels['unlimited'] = 'бесконачна';\r
+$labels['quicksearch'] = 'Брза претрага';\r
+$labels['resetsearch'] = 'Прикажи све поруке';\r
+$labels['compose'] = 'Нова порука';\r
+$labels['savemessage'] = 'Сачувај у Снимљене';\r
+$labels['sendmessage'] = 'Пошаљи поруку';\r
+$labels['addattachment'] = 'Приложи датотеку';\r
+$labels['charset'] = 'Скуп карактера';\r
+$labels['editortype'] = 'Врста едитора';\r
+$labels['returnreceipt'] = 'Потврда о приспећу';\r
+$labels['checkspelling'] = 'Провера правописа';\r
+$labels['resumeediting'] = 'Повратак у режим писања';\r
+$labels['revertto'] = 'Врати се на';\r
+$labels['attachments'] = 'Прилози ';\r
+$labels['upload'] = 'Додај';\r
+$labels['close'] = 'Затвори';\r
+$labels['low'] = 'Низак';\r
+$labels['lowest'] = 'Најнижи';\r
+$labels['normal'] = 'Средњи';\r
+$labels['high'] = 'Висок';\r
+$labels['highest'] = 'Највиши';\r
+$labels['nosubject'] = '(без наслова)';\r
+$labels['showimages'] = 'Прикажи слике';\r
+$labels['htmltoggle'] = 'HTML';\r
+$labels['plaintoggle'] = 'Обичан текст';\r
+$labels['addcc'] = 'Додај Cc';\r
+$labels['addbcc'] = 'Додај Bcc';\r
+$labels['addreplyto'] = 'Додај Reply-To';\r
+$labels['mdnrequest'] = 'Пошиљалац ове поруке је замолио да буде обавештен када прочитате ову поруку. Да ли желите да обавестите пошиљаоца?';\r
+$labels['receiptread'] = 'Обавештење о приспећу (прочитана порука)';\r
+$labels['yourmessage'] = 'Ово је обавештење о приспећу за вашу поруку';\r
+$labels['receiptnote'] = 'Пажња: Ово обавештење само потврђује да је порука приказана на рачунару примаоца. Не постоји гаранција да је прималац прочитао или разумео садржај поруке.';\r
+$labels['name'] = 'Пуно име';\r
+$labels['firstname'] = 'Име';\r
+$labels['surname'] = 'Презиме';\r
+$labels['email'] = 'Е-мејл';\r
+$labels['addcontact'] = 'Додај нови контакт';\r
+$labels['editcontact'] = 'Измени контакт';\r
+$labels['edit'] = 'Измени';\r
+$labels['cancel'] = 'Поништи';\r
+$labels['save'] = 'Сачувај';\r
+$labels['delete'] = 'Обриши';\r
+$labels['newcontact'] = 'Додај нови контакт';\r
+$labels['deletecontact'] = 'Обриши одабране контакте';\r
+$labels['composeto'] = 'Напиши поруку...';\r
+$labels['contactsfromto'] = 'Контакти од $from до $to од укупно $count';\r
+$labels['print'] = 'Штампај';\r
+$labels['export'] = 'Извези';\r
+$labels['previouspage'] = 'Прикажи претходну страну';\r
+$labels['firstpage'] = 'Прикажи први скуп';\r
+$labels['nextpage'] = 'Прикажи следећу страну';\r
+$labels['lastpage'] = 'Прикажи последњи скуп';\r
+$labels['groups'] = 'Групе';\r
+$labels['personaladrbook'] = 'Личне адресе';\r
+$labels['settingsfor'] = 'Подешавања за';\r
+$labels['preferences'] = 'Подешавања';\r
+$labels['userpreferences'] = 'Општа подешавања';\r
+$labels['editpreferences'] = 'Измена општих подешавања';\r
+$labels['identities'] = 'Идентитети';\r
+$labels['manageidentities'] = 'Подеси идентитете за овај налог';\r
+$labels['newidentity'] = 'Додај идентитет';\r
+$labels['newitem'] = 'Нова ставка';\r
+$labels['edititem'] = 'Измена ставке';\r
+$labels['setdefault'] = 'Подеси подразумевано';\r
+$labels['language'] = 'Језик';\r
+$labels['timezone'] = 'Временска зона';\r
+$labels['pagesize'] = 'Редова по страни';\r
+$labels['signature'] = 'Потпис';\r
+$labels['dstactive'] = 'Летње померање времена';\r
+$labels['htmleditor'] = 'Састави HTML поруке';\r
+$labels['htmlsignature'] = 'HTML потпис';\r
+$labels['previewpane'] = 'Прикажи панел за преглед';\r
+$labels['autosavedraft'] = 'Аутоматски чувај у Снимљене';\r
+$labels['everynminutes'] = 'сваких $n минута';\r
+$labels['never'] = 'никад';\r
+$labels['folder'] = 'Фасцикла';\r
+$labels['folders'] = 'Фасцикле';\r
+$labels['foldername'] = 'Име фасцикле';\r
+$labels['subscribed'] = 'Потписана';\r
+$labels['messagecount'] = 'Поруке';\r
+$labels['create'] = 'Креирај';\r
+$labels['createfolder'] = 'Креирај нову фасциклу';\r
+$labels['rename'] = 'Преименуј';\r
+$labels['renamefolder'] = 'Преименуј фасциклу';\r
+$labels['deletefolder'] = 'Обриши фасциклу';\r
+$labels['managefolders'] = 'Подеси фасциклу';\r
+$labels['sortby'] = 'Сортирај по';\r
+$labels['sortasc'] = 'Сортирај растуће';\r
+$labels['sortdesc'] = 'Сортирај опадајуће';\r
+\r
+?>\r
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/sr_cyrillic/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |\r
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
+ | Licensed under the GNU GPL |\r
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Branko Kokanovic <branko.kokanovic@gmail.com> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'Неуспешно пријављивање';\r
+$messages['cookiesdisabled'] = 'Ваш интернет прегледач не подржава колачиће';\r
+$messages['sessionerror'] = 'Сесија није валидна или је истекла';\r
+$messages['imaperror'] = 'Неуспешна конекција на IMAP сервер';\r
+$messages['nomessagesfound'] = 'Немате порука у сандучету';\r
+$messages['loggedout'] = 'Успешно сте се одјавили.';\r
+$messages['mailboxempty'] = 'Сандуче је празно';\r
+$messages['loading'] = 'Учитавање...';\r
+$messages['loadingdata'] = 'Учитавање података...';\r
+$messages['checkingmail'] = 'Провера нових порука у току...';\r
+$messages['sendingmessage'] = 'Порука се шаље...';\r
+$messages['messagesent'] = 'Порука је успешно послата';\r
+$messages['savingmessage'] = 'Порука се снима...';\r
+$messages['messagesaved'] = 'Порука успешно сачувана у Снимљене';\r
+$messages['successfullysaved'] = 'Снимање успешно обављено';\r
+$messages['addedsuccessfully'] = 'Контакт успешно додат у именик';\r
+$messages['contactexists'] = 'Контакт са овом е-мејл адресом већ постоји у именику';\r
+$messages['blockedimages'] = 'Због заштите приватности, слике са удаљених сервера су блокиране';\r
+$messages['encryptedmessage'] = 'Ова порука је шифрована, па се не може приказати';\r
+$messages['nocontactsfound'] = 'Није пронађен ниједан контакт';\r
+$messages['contactnotfound'] = 'Жељени контакт није нађен';\r
+$messages['sendingfailed'] = 'Грешка при слању поруке';\r
+$messages['errorsaving'] = 'Грешка при снимању поруке';\r
+$messages['errormoving'] = 'Грешка при премештању поруке';\r
+$messages['errordeleting'] = 'Грешка при брисању поруке';\r
+$messages['deletecontactconfirm'] = 'Да ли стварно желите да обришете изабране контакте?';\r
+$messages['deletemessagesconfirm'] = 'Да ли стварно желите да обришете изабране поруке?';\r
+$messages['deletefolderconfirm'] = 'Да ли заиста желите да обришете изабрану фасциклу?';\r
+$messages['purgefolderconfirm'] = 'Да ли заиста желите да обришете све поруке у фасцикли?';\r
+$messages['formincomplete'] = 'Формулар није у целости попуњен';\r
+$messages['noemailwarning'] = 'Унесите валидну е-мејл адресу';\r
+$messages['nonamewarning'] = 'Унесите име';\r
+$messages['nopagesizewarning'] = 'Унесите величину странице';\r
+$messages['norecipientwarning'] = 'Унесите примаоца/примаоце (За)';\r
+$messages['nosubjectwarning'] = 'Поље \'Наслов\' је празно. Желите ли да унесете наслов?';\r
+$messages['nobodywarning'] = 'Да ли желите да пошаљете поруку без текста?';\r
+$messages['notsentwarning'] = 'Порука није послата. Да ли желите да одбаците ову поруку?';\r
+$messages['noldapserver'] = 'Унесите LDAP сервер за претрагу';\r
+$messages['nocontactsreturned'] = 'Није пронађен ниједан контакт';\r
+$messages['nosearchname'] = 'Унесите име или е-мејл адресу';\r
+$messages['searchsuccessful'] = 'Број пронађених порука: $nr';\r
+$messages['searchnomatch'] = 'Тражена фраза није пронађена ни у једној поруци';\r
+$messages['searching'] = 'Претрага у току...';\r
+$messages['checking'] = 'Провера у току...';\r
+$messages['nospellerrors'] = 'Није пронађена ниједна правописна грешка';\r
+$messages['folderdeleted'] = 'Фасцикла успешно обрисана';\r
+$messages['deletedsuccessfully'] = 'Брисање успешно';\r
+$messages['converting'] = 'Уклањање форматирања из поруке...';\r
+$messages['messageopenerror'] = 'Порука се не може учитати са сервера';\r
+$messages['fileuploaderror'] = 'Слање датотеке неуспешно';\r
+$messages['filesizeerror'] = 'Послата датотека не може да прекорачи величину од $size';\r
+$messages['copysuccess'] = 'Успешно копирано $nr адреса';\r
+$messages['copyerror'] = 'Немогуће је ископирати иједну адресу';\r
+$messages['sourceisreadonly'] = 'Овај извор адресе је само за читање';\r
+$messages['errorsavingcontact'] = 'Неуспело снимање адресе контакта';\r
+$messages['movingmessage'] = 'Премештам поруку...';\r
+$messages['receiptsent'] = 'Успешно послато обавештење о приспећу';\r
+$messages['errorsendingreceipt'] = 'Неуспело слање обавештења о приспећу';\r
+$messages['nodeletelastidentity'] = 'Не можете обрисати овај идентитет, он Вам је последњи.';\r
+$messages['addsubfolderhint'] = 'Ова фасцикла ће бити креирана као подфасцикла тренутне';\r
+\r
+?>\r
+++ /dev/null
-<?php\r
-\r
-/*\r
-\r
- +-----------------------------------------------------------------------+\r
- | language/sr_cyrillic/labels.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Branko Kokanovic <branko.kokanovic@gmail.com |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$labels = array();\r
-$labels['welcome'] = 'Добродошли на $product';\r
-$labels['username'] = 'Корисничко име';\r
-$labels['password'] = 'Лозинка';\r
-$labels['server'] = 'Сервер';\r
-$labels['login'] = 'Пријава';\r
-$labels['logout'] = 'Одјава';\r
-$labels['mail'] = 'Сандуче';\r
-$labels['settings'] = 'Подешавања';\r
-$labels['addressbook'] = 'Именик';\r
-$labels['inbox'] = 'Примљене';\r
-$labels['drafts'] = 'Снимљене';\r
-$labels['sent'] = 'Послате';\r
-$labels['trash'] = 'Канта';\r
-$labels['junk'] = 'Смеће';\r
-$labels['subject'] = 'Наслов';\r
-$labels['from'] = 'Од';\r
-$labels['to'] = 'За';\r
-$labels['cc'] = 'Cc';\r
-$labels['bcc'] = 'Bcc';\r
-$labels['replyto'] = 'Reply-To';\r
-$labels['date'] = 'Датум';\r
-$labels['size'] = 'Величина';\r
-$labels['priority'] = 'Приоритет';\r
-$labels['organization'] = 'Организација';\r
-$labels['reply-to'] = 'Reply-To';\r
-$labels['mailboxlist'] = 'Фасцикле';\r
-$labels['messagesfromto'] = 'Поруке од $from за $to од укупно $count';\r
-$labels['messagenrof'] = 'Порука број $nr од $count';\r
-$labels['moveto'] = 'пребаци у...';\r
-$labels['download'] = 'преузми (скидање)';\r
-$labels['filename'] = 'Име датотекеe';\r
-$labels['filesize'] = 'Величина датотеке';\r
-$labels['preferhtml'] = 'Предност дај ХТМЛ формату';\r
-$labels['htmlmessage'] = 'ХТМЛ формат поруке';\r
-$labels['prettydate'] = 'Форматирани датум';\r
-$labels['addtoaddressbook'] = 'Додај у именик';\r
-$labels['sun'] = 'Нед';\r
-$labels['mon'] = 'Пон';\r
-$labels['tue'] = 'Уто';\r
-$labels['wed'] = 'Сре';\r
-$labels['thu'] = 'Чет';\r
-$labels['fri'] = 'Пет';\r
-$labels['sat'] = 'Суб';\r
-$labels['sunday'] = 'Недеља';\r
-$labels['monday'] = 'Понедељак';\r
-$labels['tuesday'] = 'Уторак';\r
-$labels['wednesday'] = 'Среда';\r
-$labels['thursday'] = 'Четвртак';\r
-$labels['friday'] = 'Петак';\r
-$labels['saturday'] = 'Субота';\r
-$labels['today'] = 'данас';\r
-$labels['checkmail'] = 'Провера нових порука';\r
-$labels['writenewmessage'] = 'Нова порука';\r
-$labels['replytomessage'] = 'Одговори на поруку';\r
-$labels['replytoallmessage'] = 'Одговори пошиљаоцу и свим примаоцима';\r
-$labels['forwardmessage'] = 'Проследи поруку';\r
-$labels['deletemessage'] = 'Извриши поруку';\r
-$labels['movemessagetotrash'] = 'Пребаци поруку у канту';\r
-$labels['printmessage'] = 'Одштампај поруку';\r
-$labels['previousmessage'] = 'Прикажи претходну поруку';\r
-$labels['previousmessages'] = 'Прикажи претходни скуп порука';\r
-$labels['firstmessage'] = 'Прикажи прву поруку';\r
-$labels['firstmessages'] = 'Прикажи први скуп порука';\r
-$labels['nextmessage'] = 'Прикажи следећу поруку';\r
-$labels['nextmessages'] = 'Прикажи следећи скуп порука';\r
-$labels['lastmessage'] = 'Прикажи последњу поруку';\r
-$labels['lastmessages'] = 'Прикажи последњи скуп порука';\r
-$labels['backtolist'] = 'Повратак на листу порука';\r
-$labels['viewsource'] = 'Прикажи поруку у изворном облику';\r
-$labels['markmessages'] = 'Обележи поруке';\r
-$labels['markread'] = 'Као прочитане';\r
-$labels['markunread'] = 'Као непрочитане';\r
-$labels['select'] = 'Означи';\r
-$labels['all'] = 'Све';\r
-$labels['none'] = 'Ниједну';\r
-$labels['unread'] = 'Непрочитане';\r
-$labels['compact'] = 'Компакција';\r
-$labels['empty'] = 'Испразни';\r
-$labels['purge'] = 'Oчисти';\r
-$labels['quota'] = 'Квота';\r
-$labels['unknown'] = 'непозната';\r
-$labels['unlimited'] = 'бесконачна';\r
-$labels['quicksearch'] = 'Брза претрага';\r
-$labels['resetsearch'] = 'Прикажи све поруке';\r
-$labels['compose'] = 'Нова порука';\r
-$labels['savemessage'] = 'Сачувај у Снимљене';\r
-$labels['sendmessage'] = 'Пошаљи поруку';\r
-$labels['addattachment'] = 'Приложи датотеку';\r
-$labels['charset'] = 'Скуп карактера';\r
-$labels['editortype'] = 'Врста едитора';\r
-$labels['returnreceipt'] = 'Потврда о приспећу';\r
-$labels['checkspelling'] = 'Провера правописа';\r
-$labels['resumeediting'] = 'Повратак у режим писања';\r
-$labels['revertto'] = 'Врати се на';\r
-$labels['attachments'] = 'Прилози ';\r
-$labels['upload'] = 'Додај';\r
-$labels['close'] = 'Затвори';\r
-$labels['low'] = 'Низак';\r
-$labels['lowest'] = 'Најнижи';\r
-$labels['normal'] = 'Средњи';\r
-$labels['high'] = 'Висок';\r
-$labels['highest'] = 'Највиши';\r
-$labels['nosubject'] = '(без наслова)';\r
-$labels['showimages'] = 'Прикажи слике';\r
-$labels['htmltoggle'] = 'HTML';\r
-$labels['plaintoggle'] = 'Обичан текст';\r
-$labels['addcc'] = 'Додај Cc';\r
-$labels['addbcc'] = 'Додај Bcc';\r
-$labels['addreplyto'] = 'Додај Reply-To';\r
-$labels['mdnrequest'] = 'Пошиљалац ове поруке је замолио да буде обавештен када прочитате ову поруку. Да ли желите да обавестите пошиљаоца?';\r
-$labels['receiptread'] = 'Обавештење о приспећу (прочитана порука)';\r
-$labels['yourmessage'] = 'Ово је обавештење о приспећу за вашу поруку';\r
-$labels['receiptnote'] = 'Пажња: Ово обавештење само потврђује да је порука приказана на рачунару примаоца. Не постоји гаранција да је прималац прочитао или разумео садржај поруке.';\r
-$labels['name'] = 'Пуно име';\r
-$labels['firstname'] = 'Име';\r
-$labels['surname'] = 'Презиме';\r
-$labels['email'] = 'Е-мејл';\r
-$labels['addcontact'] = 'Додај нови контакт';\r
-$labels['editcontact'] = 'Измени контакт';\r
-$labels['edit'] = 'Измени';\r
-$labels['cancel'] = 'Поништи';\r
-$labels['save'] = 'Сачувај';\r
-$labels['delete'] = 'Обриши';\r
-$labels['newcontact'] = 'Додај нови контакт';\r
-$labels['deletecontact'] = 'Обриши одабране контакте';\r
-$labels['composeto'] = 'Напиши поруку...';\r
-$labels['contactsfromto'] = 'Контакти од $from до $to од укупно $count';\r
-$labels['print'] = 'Штампај';\r
-$labels['export'] = 'Извези';\r
-$labels['previouspage'] = 'Прикажи претходну страну';\r
-$labels['firstpage'] = 'Прикажи први скуп';\r
-$labels['nextpage'] = 'Прикажи следећу страну';\r
-$labels['lastpage'] = 'Прикажи последњи скуп';\r
-$labels['groups'] = 'Групе';\r
-$labels['personaladrbook'] = 'Личне адресе';\r
-$labels['settingsfor'] = 'Подешавања за';\r
-$labels['preferences'] = 'Подешавања';\r
-$labels['userpreferences'] = 'Општа подешавања';\r
-$labels['editpreferences'] = 'Измена општих подешавања';\r
-$labels['identities'] = 'Идентитети';\r
-$labels['manageidentities'] = 'Подеси идентитете за овај налог';\r
-$labels['newidentity'] = 'Додај идентитет';\r
-$labels['newitem'] = 'Нова ставка';\r
-$labels['edititem'] = 'Измена ставке';\r
-$labels['setdefault'] = 'Подеси подразумевано';\r
-$labels['language'] = 'Језик';\r
-$labels['timezone'] = 'Временска зона';\r
-$labels['pagesize'] = 'Редова по страни';\r
-$labels['signature'] = 'Потпис';\r
-$labels['dstactive'] = 'Летње померање времена';\r
-$labels['htmleditor'] = 'Састави HTML поруке';\r
-$labels['htmlsignature'] = 'HTML потпис';\r
-$labels['previewpane'] = 'Прикажи панел за преглед';\r
-$labels['autosavedraft'] = 'Аутоматски чувај у Снимљене';\r
-$labels['everynminutes'] = 'сваких $n минута';\r
-$labels['never'] = 'никад';\r
-$labels['folder'] = 'Фасцикла';\r
-$labels['folders'] = 'Фасцикле';\r
-$labels['foldername'] = 'Име фасцикле';\r
-$labels['subscribed'] = 'Потписана';\r
-$labels['messagecount'] = 'Поруке';\r
-$labels['create'] = 'Креирај';\r
-$labels['createfolder'] = 'Креирај нову фасциклу';\r
-$labels['rename'] = 'Преименуј';\r
-$labels['renamefolder'] = 'Преименуј фасциклу';\r
-$labels['deletefolder'] = 'Обриши фасциклу';\r
-$labels['managefolders'] = 'Подеси фасциклу';\r
-$labels['sortby'] = 'Сортирај по';\r
-$labels['sortasc'] = 'Сортирај растуће';\r
-$labels['sortdesc'] = 'Сортирај опадајуће';\r
-\r
-?>\r
+++ /dev/null
-<?php\r
-\r
-/*\r
-\r
- +-----------------------------------------------------------------------+\r
- | language/sr_cyrillic/messages.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |\r
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |\r
- | Licensed under the GNU GPL |\r
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Branko Kokanovic <branko.kokanovic@gmail.com> |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$messages = array();\r
-$messages['loginfailed'] = 'Неуспешно пријављивање';\r
-$messages['cookiesdisabled'] = 'Ваш интернет прегледач не подржава колачиће';\r
-$messages['sessionerror'] = 'Сесија није валидна или је истекла';\r
-$messages['imaperror'] = 'Неуспешна конекција на IMAP сервер';\r
-$messages['nomessagesfound'] = 'Немате порука у сандучету';\r
-$messages['loggedout'] = 'Успешно сте се одјавили.';\r
-$messages['mailboxempty'] = 'Сандуче је празно';\r
-$messages['loading'] = 'Учитавање...';\r
-$messages['loadingdata'] = 'Учитавање података...';\r
-$messages['checkingmail'] = 'Провера нових порука у току...';\r
-$messages['sendingmessage'] = 'Порука се шаље...';\r
-$messages['messagesent'] = 'Порука је успешно послата';\r
-$messages['savingmessage'] = 'Порука се снима...';\r
-$messages['messagesaved'] = 'Порука успешно сачувана у Снимљене';\r
-$messages['successfullysaved'] = 'Снимање успешно обављено';\r
-$messages['addedsuccessfully'] = 'Контакт успешно додат у именик';\r
-$messages['contactexists'] = 'Контакт са овом е-мејл адресом већ постоји у именику';\r
-$messages['blockedimages'] = 'Због заштите приватности, слике са удаљених сервера су блокиране';\r
-$messages['encryptedmessage'] = 'Ова порука је шифрована, па се не може приказати';\r
-$messages['nocontactsfound'] = 'Није пронађен ниједан контакт';\r
-$messages['contactnotfound'] = 'Жељени контакт није нађен';\r
-$messages['sendingfailed'] = 'Грешка при слању поруке';\r
-$messages['errorsaving'] = 'Грешка при снимању поруке';\r
-$messages['errormoving'] = 'Грешка при премештању поруке';\r
-$messages['errordeleting'] = 'Грешка при брисању поруке';\r
-$messages['deletecontactconfirm'] = 'Да ли стварно желите да обришете изабране контакте?';\r
-$messages['deletemessagesconfirm'] = 'Да ли стварно желите да обришете изабране поруке?';\r
-$messages['deletefolderconfirm'] = 'Да ли заиста желите да обришете изабрану фасциклу?';\r
-$messages['purgefolderconfirm'] = 'Да ли заиста желите да обришете све поруке у фасцикли?';\r
-$messages['formincomplete'] = 'Формулар није у целости попуњен';\r
-$messages['noemailwarning'] = 'Унесите валидну е-мејл адресу';\r
-$messages['nonamewarning'] = 'Унесите име';\r
-$messages['nopagesizewarning'] = 'Унесите величину странице';\r
-$messages['norecipientwarning'] = 'Унесите примаоца/примаоце (За)';\r
-$messages['nosubjectwarning'] = 'Поље \'Наслов\' је празно. Желите ли да унесете наслов?';\r
-$messages['nobodywarning'] = 'Да ли желите да пошаљете поруку без текста?';\r
-$messages['notsentwarning'] = 'Порука није послата. Да ли желите да одбаците ову поруку?';\r
-$messages['noldapserver'] = 'Унесите LDAP сервер за претрагу';\r
-$messages['nocontactsreturned'] = 'Није пронађен ниједан контакт';\r
-$messages['nosearchname'] = 'Унесите име или е-мејл адресу';\r
-$messages['searchsuccessful'] = 'Број пронађених порука: $nr';\r
-$messages['searchnomatch'] = 'Тражена фраза није пронађена ни у једној поруци';\r
-$messages['searching'] = 'Претрага у току...';\r
-$messages['checking'] = 'Провера у току...';\r
-$messages['nospellerrors'] = 'Није пронађена ниједна правописна грешка';\r
-$messages['folderdeleted'] = 'Фасцикла успешно обрисана';\r
-$messages['deletedsuccessfully'] = 'Брисање успешно';\r
-$messages['converting'] = 'Уклањање форматирања из поруке...';\r
-$messages['messageopenerror'] = 'Порука се не може учитати са сервера';\r
-$messages['fileuploaderror'] = 'Слање датотеке неуспешно';\r
-$messages['filesizeerror'] = 'Послата датотека не може да прекорачи величину од $size';\r
-$messages['copysuccess'] = 'Успешно копирано $nr адреса';\r
-$messages['copyerror'] = 'Немогуће је ископирати иједну адресу';\r
-$messages['sourceisreadonly'] = 'Овај извор адресе је само за читање';\r
-$messages['errorsavingcontact'] = 'Неуспело снимање адресе контакта';\r
-$messages['movingmessage'] = 'Премештам поруку...';\r
-$messages['receiptsent'] = 'Успешно послато обавештење о приспећу';\r
-$messages['errorsendingreceipt'] = 'Неуспело слање обавештења о приспећу';\r
-$messages['nodeletelastidentity'] = 'Не можете обрисати овај идентитет, он Вам је последњи.';\r
-$messages['addsubfolderhint'] = 'Ова фасцикла ће бити креирана као подфасцикла тренутне';\r
-\r
-?>\r
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/sr_latin/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Viktor Varga <vile@neobee.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$labels = array();
-
-// login page
-$labels['welcome'] = 'Dobrodošli na $product';
-$labels['username'] = 'Korisničko ime';
-$labels['password'] = 'Lozinka';
-$labels['server'] = 'Server';
-$labels['login'] = 'Prijava';
-
-// taskbar
-$labels['logout'] = 'Odjava';
-$labels['mail'] = 'Sanduče';
-$labels['settings'] = 'Podešavanja';
-$labels['addressbook'] = 'Imenik';
-
-// mailbox names
-$labels['inbox'] = 'Inbox';
-$labels['drafts'] = 'Drafts';
-$labels['sent'] = 'Sent';
-$labels['trash'] = 'Trash';
-$labels['junk'] = 'Junk';
-
-// message listing
-$labels['subject'] = 'Naslov';
-$labels['from'] = 'Od';
-$labels['to'] = 'Za';
-$labels['cc'] = 'Cc';
-$labels['bcc'] = 'Bcc';
-$labels['replyto'] = 'Reply-To';
-$labels['date'] = 'Datum';
-$labels['size'] = 'Veličina';
-$labels['priority'] = 'Prioritet';
-$labels['organization'] = 'Organizacija';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-
-$labels['mailboxlist'] = 'Fascikle';
-$labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count';
-$labels['messagenrof'] = 'Poruka broj $nr od $count';
-
-$labels['moveto'] = 'prebaci u...';
-$labels['download'] = 'preuzmi (download)';
-
-$labels['filename'] = 'Ime datoteke';
-$labels['filesize'] = 'Veličina datoteke';
-
-$labels['preferhtml'] = 'HTML format u prednosti';
-$labels['htmlmessage'] = 'HTML format poruke';
-$labels['prettydate'] = 'Formatiran datum';
-
-$labels['addtoaddressbook'] = 'Dodaj u imenik';
-
-// weekdays short
-$labels['sun'] = 'Ned';
-$labels['mon'] = 'Pon';
-$labels['tue'] = 'Uto';
-$labels['wed'] = 'Sre';
-$labels['thu'] = 'Čet';
-$labels['fri'] = 'Pet';
-$labels['sat'] = 'Sub';
-
-// weekdays long
-$labels['sunday'] = 'Nedelja';
-$labels['monday'] = 'Ponedeljak';
-$labels['tuesday'] = 'Utorak';
-$labels['wednesday'] = 'Sreda';
-$labels['thursday'] = 'Četvrtak';
-$labels['friday'] = 'Petak';
-$labels['saturday'] = 'Subota';
-
-$labels['today'] = 'danas';
-
-// toolbar buttons
-$labels['checkmail'] = 'Provera novih poruka';
-$labels['writenewmessage'] = 'Nova poruka';
-$labels['replytomessage'] = 'Odgovori na poruku';
-$labels['replytoallmessage'] = 'Odgovori pošiljaocu i svim primaocima';
-$labels['forwardmessage'] = 'Prosledi poruku';
-$labels['deletemessage'] = 'Prebaci poruku u korpu (Trash)';
-$labels['printmessage'] = 'Odštampaj poruku';
-$labels['previousmessages'] = 'Prikaži prethodni skup poruka';
-$labels['nextmessages'] = 'Prikaži sledeći skup poruka';
-$labels['backtolist'] = 'Povratak na listu poruka';
-$labels['viewsource'] = 'Prikaži poruku u izvornom obliku';
-
-$labels['select'] = 'Obeleži';
-$labels['all'] = 'Sve';
-$labels['none'] = 'Nijednu';
-$labels['unread'] = 'Nepročitane';
-
-$labels['compact'] = 'Kompakcija';
-$labels['empty'] = 'Izprazni';
-$labels['purge'] = 'Očisti';
-
-$labels['quota'] = 'Kvota';
-$labels['unknown'] = 'nepoznato';
-$labels['unlimited'] = 'beskonačna';
-
-$labels['quicksearch'] = 'Brza pretraga';
-$labels['resetsearch'] = 'Prikaži sve poruke';
-
-// message compose
-$labels['compose'] = 'Nova poruka';
-$labels['savemessage'] = 'Sačuvaj u \'Drafts\'';
-$labels['sendmessage'] = 'Pošalji poruku';
-$labels['addattachment'] = 'Priloži datoteku';
-$labels['charset'] = 'Karakter-set';
-$labels['returnreceipt'] = 'Potvrda o prispeću poruke';
-
-$labels['checkspelling'] = 'Provera pravopisa';
-$labels['resumeediting'] = 'Povratak u režim pisanja';
-$labels['revertto'] = 'Revert to';
-
-$labels['attachments'] = 'Prilozi (Attachments)';
-$labels['upload'] = 'Dodaj';
-$labels['close'] = 'Zatvori';
-
-$labels['low'] = 'Nizak';
-$labels['lowest'] = 'Najniži';
-$labels['normal'] = 'Srednji';
-$labels['high'] = 'Visok';
-$labels['highest'] = 'Najviši';
-
-$labels['nosubject'] = '(bez naslova)';
-$labels['showimages'] = 'Prikaži slike';
-
-// address boook
-$labels['name'] = 'Puno ime';
-$labels['firstname'] = 'Ime';
-$labels['surname'] = 'Prezime';
-$labels['email'] = 'E-Mail';
-
-$labels['addcontact'] = 'Dodaj novi kontakt';
-$labels['editcontact'] = 'Izmeni kontakt';
-
-$labels['edit'] = 'Izmeni';
-$labels['cancel'] = 'Otkaži';
-$labels['save'] = 'Sačuvaj';
-$labels['delete'] = 'Obriši';
-
-$labels['newcontact'] = 'Dodaj novi kontakt';
-$labels['deletecontact'] = 'Obriši odabrane kontakte';
-$labels['composeto'] = 'Napiši mail...';
-$labels['contactsfromto'] = 'Kontakti od $from do $to od ukupno $count';
-$labels['print'] = 'Štampaj';
-$labels['export'] = 'Izvezi';
-
-$labels['previouspage'] = 'Prikaži predhodni skup';
-$labels['nextpage'] = 'Prikaži sledeći skup';
-
-// LDAP search
-$labels['ldapsearch'] = 'Pretraga LDAP imenika';
-
-$labels['ldappublicsearchname'] = 'Ime kontakta';
-$labels['ldappublicsearchtype'] = 'Potpuna fraza?';
-$labels['ldappublicserverselect'] = 'Odaberi servere';
-$labels['ldappublicsearchfield'] = 'Pretraži na';
-$labels['ldappublicsearchform'] = 'Pretraži kontakte';
-$labels['ldappublicsearch'] = 'Pretraga';
-
-// settings
-$labels['settingsfor'] = 'Podešavanja za';
-
-$labels['preferences'] = 'Podešavanja';
-$labels['userpreferences'] = 'Opšta podešavanja';
-$labels['editpreferences'] = 'Izmena opštih podešavanja';
-
-$labels['identities'] = 'Identiteti';
-$labels['manageidentities'] = 'Podesi identitete za ovaj nalog';
-$labels['newidentity'] = 'Dodaj identitet';
-
-$labels['newitem'] = 'New item';
-$labels['edititem'] = 'Edit item';
-
-$labels['setdefault'] = 'Set default';
-$labels['language'] = 'Jezik';
-$labels['timezone'] = 'Vremenska zona';
-$labels['pagesize'] = 'Redova po stranici';
-$labels['signature'] = 'Potpis';
-$labels['dstactive'] = 'Letnje pomeranje vremena';
-
-$labels['folder'] = 'Fascikla';
-$labels['folders'] = 'Fascikle';
-$labels['foldername'] = 'Ime fascikle';
-$labels['subscribed'] = 'Subscribed';
-$labels['create'] = 'Kreiraj';
-$labels['createfolder'] = 'Kreiraj novu fasciklu';
-$labels['rename'] = 'Preimenuj';
-$labels['renamefolder'] = 'Preimenuj Fasciklu';
-$labels['deletefolder'] = 'Obriši Fasciklu';
-$labels['managefolders'] = 'Podesi Fasciklu';
-
-$labels['sortby'] = 'Sortiraj po';
-$labels['sortasc'] = 'Sortiraj rastućim nizom';
-$labels['sortdesc'] = 'Sortiraj opadajućim nizom';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/sr_latin/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Viktor Varga <vile@neobee.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Prijava neuspešna';
-$messages['cookiesdisabled'] = 'Vaš pretraživač ne podržava kolačiće (cookies)';
-$messages['sessionerror'] = 'Sesija je nije validna ili je istekla';
-$messages['imaperror'] = 'Neuspešna konekcija na IMAP server';
-$messages['nomessagesfound'] = 'Nema poruka u sandučetu';
-$messages['loggedout'] = 'Uspešno ste se odjavili.';
-$messages['mailboxempty'] = 'Sanduše je prazno';
-$messages['loading'] = 'Učitavanje...';
-$messages['loadingdata'] = 'Učitavanje podataka...';
-$messages['checkingmail'] = 'Provera novih poruka u toku...';
-$messages['sendingmessage'] = 'Poruka se šalje...';
-$messages['messagesent'] = 'Poruka je uspešno poslana';
-$messages['savingmessage'] = 'Poruka se snima...';
-$messages['messagesaved'] = 'Poruka uspešno sačuvana u \'Drafts\'';
-$messages['successfullysaved'] = 'Snimanje uspešno obavljeno';
-$messages['addedsuccessfully'] = 'Kontakt uspešno dodat u imenik';
-$messages['contactexists'] = 'Kontakt sa ovom e-mail adresom već postoji u imeniku';
-$messages['blockedimages'] = 'Zbog zaštite privatnosti, slike sa udaljenih servera su blokirane.';
-$messages['encryptedmessage'] = 'Ova poruka je šifrovana pa se ne može prikazati';
-$messages['nocontactsfound'] = 'Imenik je prazan';
-$messages['sendingfailed'] = 'Greška pri slanju poruke';
-$messages['errorsaving'] = 'Greška pri snimanju';
-$messages['errormoving'] = 'Greška pri premeštanju poruke';
-$messages['errordeleting'] = 'Greška pri brisanju poruke';
-$messages['deletecontactconfirm'] = 'Da li želite da obrišete izabrane kontakte?';
-$messages['deletefolderconfirm'] = 'Da li zaista želite da obrišete ovu fasciklu?';
-$messages['purgefolderconfirm'] = 'Da li zaista želite da obrišete sve poruke u fascilli?';
-$messages['formincomplete'] = 'Forma nije u celosti popunjena';
-$messages['noemailwarning'] = 'Unesite validnu e-mail adresu';
-$messages['nonamewarning'] = 'Unesite ime';
-$messages['nopagesizewarning'] = 'Unesite veličinu stranice';
-$messages['norecipientwarning'] = 'Unesite primaoca / primaoce (ZA)';
-$messages['nosubjectwarning'] = 'Polje \'Naslov\' je prazno. Želite li da unesete naslov?';
-$messages['nobodywarning'] = 'Da li želite da pošaljete poruku bez teksta?';
-$messages['notsentwarning'] = 'Poruka nije poslana. Da li želite da odbacite ovu poruku?';
-$messages['noldapserver'] = 'Unesite LDAP server za pretragu';
-$messages['nocontactsreturned'] = 'Nije pronađen ni jedan kontakt';
-$messages['nosearchname'] = 'Unesite ime ili e-mail adresu';
-$messages['searchsuccessful'] = 'Broj pronađenih poruka: $nr';
-$messages['searchnomatch'] = 'Tražena fraza nije pronađena ni u jednoj poruci';
-$messages['searching'] = 'Pretraga u toku...';
-$messages['checking'] = 'Provera u toku...';
-$messages['nospellerrors'] = 'Nije pronađena ni jedna pravopisna greška';
-$messages['folderdeleted'] = 'Fascikla uspešno obrisana';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/se/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Fredrik Nygren <f.nygren@gmail.com> |
+ | Andreas Henriksson <andreas@fatal.se> |
+ | Jonas Näsholm <hostmaster@bitfuse.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 1191 2008-03-13 08:10:49Z yllar $
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Välkommen till $product';
+$labels['username'] = 'Användarnamn';
+$labels['password'] = 'Lösenord';
+$labels['server'] = 'Server';
+$labels['login'] = 'Logga in';
+$labels['logout'] = 'Logga ut';
+$labels['mail'] = 'Meddelanden';
+$labels['settings'] = 'Personliga inställningar';
+$labels['addressbook'] = 'Adressbok';
+$labels['inbox'] = 'Inkorg';
+$labels['drafts'] = 'Utkast';
+$labels['sent'] = 'Skickat';
+$labels['trash'] = 'Papperskorg';
+$labels['junk'] = 'Skräp';
+$labels['subject'] = 'Ämne';
+$labels['from'] = 'Avsändare';
+$labels['to'] = 'Mottagare';
+$labels['cc'] = 'Kopia';
+$labels['bcc'] = 'Hemlig kopia';
+$labels['replyto'] = 'Svara till';
+$labels['date'] = 'Datum';
+$labels['size'] = 'Storlek';
+$labels['priority'] = 'Prioritet';
+$labels['organization'] = 'Organisation';
+$labels['reply-to'] = 'Svara till';
+$labels['mailboxlist'] = 'Mappar';
+$labels['messagesfromto'] = 'Meddelande $from till $to av $count';
+$labels['messagenrof'] = 'Meddelande $nr av $count';
+$labels['moveto'] = 'flytta till...';
+$labels['download'] = 'ladda ner';
+$labels['filename'] = 'Filnamn';
+$labels['filesize'] = 'Filstorlek';
+$labels['preferhtml'] = 'Visa HTML';
+$labels['htmlmessage'] = 'HTML-meddelande';
+$labels['prettydate'] = 'Fina datum';
+$labels['addtoaddressbook'] = 'Lägg till i adressbok';
+$labels['sun'] = 'Sön';
+$labels['mon'] = 'Mån';
+$labels['tue'] = 'Tis';
+$labels['wed'] = 'Ons';
+$labels['thu'] = 'Tor';
+$labels['fri'] = 'Fre';
+$labels['sat'] = 'Lör';
+$labels['sunday'] = 'Söndag';
+$labels['monday'] = 'Måndag';
+$labels['tuesday'] = 'Tisdag';
+$labels['wednesday'] = 'Onsdag';
+$labels['thursday'] = 'Torsdag';
+$labels['friday'] = 'Fredag';
+$labels['saturday'] = 'Lördag';
+$labels['today'] = 'Idag';
+$labels['checkmail'] = 'Hämta nya meddelanden';
+$labels['writenewmessage'] = 'Skapa nytt meddelande';
+$labels['replytomessage'] = 'Svara avsändaren';
+$labels['replytoallmessage'] = 'Svara avsändaren och alla mottagare';
+$labels['forwardmessage'] = 'Vidarebefordra meddelande';
+$labels['deletemessage'] = 'Radera meddelande';
+$labels['movemessagetotrash'] = 'Flytta meddelande till papperskorgen';
+$labels['printmessage'] = 'Skriv ut';
+$labels['previousmessage'] = 'Visa föregående meddelande';
+$labels['previousmessages'] = 'Visa tidigare grupp av meddelanden';
+$labels['firstmessage'] = 'Visa första meddelandet';
+$labels['firstmessages'] = 'Visa första gruppen av meddelanden';
+$labels['nextmessage'] = 'Visa nästa meddelande';
+$labels['nextmessages'] = 'Visa nästa grupp av meddelanden';
+$labels['lastmessage'] = 'Visa sista meddelandet';
+$labels['lastmessages'] = 'Visa sista gruppen av meddelanden';
+$labels['backtolist'] = 'Tillbaka till meddelandelistan';
+$labels['viewsource'] = 'Visa källa';
+$labels['markmessages'] = 'Markera meddelande';
+$labels['markread'] = 'Som läst';
+$labels['markunread'] = 'Som oläst';
+$labels['select'] = 'Välj';
+$labels['all'] = 'Alla';
+$labels['none'] = 'Ingen';
+$labels['unread'] = 'Olästa';
+$labels['compact'] = 'Packa';
+$labels['empty'] = 'Töm';
+$labels['purge'] = 'Rensa';
+$labels['quota'] = 'Diskutrymme';
+$labels['unknown'] = 'okänd';
+$labels['unlimited'] = 'obegränsad';
+$labels['quicksearch'] = 'Snabbsök';
+$labels['resetsearch'] = 'Återställ sökning';
+$labels['compose'] = 'Skapa nytt meddelande';
+$labels['savemessage'] = 'Spara utkast';
+$labels['sendmessage'] = 'Skicka meddelande';
+$labels['addattachment'] = 'Bifoga fil';
+$labels['charset'] = 'Teckenkodning';
+$labels['editortype'] = 'Typ av redigerare';
+$labels['returnreceipt'] = 'Mottagarkvitto';
+$labels['checkspelling'] = 'Kontrollera stavning';
+$labels['resumeediting'] = 'Återuppta redigering';
+$labels['revertto'] = 'Återgå till';
+$labels['attachments'] = 'Bilagor';
+$labels['upload'] = 'Bifoga';
+$labels['close'] = 'Stäng';
+$labels['low'] = 'Låg';
+$labels['lowest'] = 'Lägst';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Hög';
+$labels['highest'] = 'Högst';
+$labels['nosubject'] = '(inget ämne)';
+$labels['showimages'] = 'Visa bilder';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Oformaterad text';
+$labels['addcc'] = 'Kopia';
+$labels['addbcc'] = 'Hemlig kopia';
+$labels['addreplyto'] = 'Svara till';
+$labels['mdnrequest'] = 'Avsändaren har bett om att bli uppmärksammad när du läst det här meddelandet. Vill du skicka uppmärksamma avsändaren?';
+$labels['receiptread'] = 'Svarskvitto (läst)';
+$labels['yourmessage'] = 'Det här är ett svarskvitto för ditt meddelande';
+$labels['receiptnote'] = 'Notera: Det här kvittot berättar bara att meddelandet visats på mottagarens dator. Det finns ingen garanti att mottagaren har läst och förstått innehållet i meddelandet';
+$labels['name'] = 'Visa namn';
+$labels['firstname'] = 'Förnamn';
+$labels['surname'] = 'Efternamn';
+$labels['email'] = 'E-post';
+$labels['addcontact'] = 'Lägg till ny kontakt';
+$labels['editcontact'] = 'Redigera kontakt';
+$labels['edit'] = 'Redigera';
+$labels['cancel'] = 'Avbryt';
+$labels['save'] = 'Spara';
+$labels['delete'] = 'Radera';
+$labels['newcontact'] = 'Skapa nytt kontaktkort';
+$labels['deletecontact'] = 'Radera valda kontakter';
+$labels['composeto'] = 'Skriv meddelande till';
+$labels['contactsfromto'] = 'Kontakter $from till $to av $count';
+$labels['print'] = 'Skriv ut';
+$labels['export'] = 'Exportera';
+$labels['previouspage'] = 'Visa föregående grupp';
+$labels['firstpage'] = 'Visa första gruppen';
+$labels['nextpage'] = 'Visa nästa grupp';
+$labels['lastpage'] = 'Visa sista gruppen';
+$labels['groups'] = 'Grupper';
+$labels['personaladrbook'] = 'Personliga adresser';
+$labels['settingsfor'] = 'Inställningar för';
+$labels['preferences'] = 'Inställningar';
+$labels['userpreferences'] = 'Användarinställningar';
+$labels['editpreferences'] = 'Ändra användarinställningar';
+$labels['identities'] = 'Profiler';
+$labels['manageidentities'] = 'Hantera profiler för detta konto';
+$labels['newidentity'] = 'Ny profil';
+$labels['newitem'] = 'Ny post';
+$labels['edititem'] = 'Ändra post';
+$labels['setdefault'] = 'Sätt som standard';
+$labels['language'] = 'Språk';
+$labels['timezone'] = 'Tidszon';
+$labels['pagesize'] = 'Rader per sida';
+$labels['signature'] = 'Signatur';
+$labels['dstactive'] = 'Sommartid';
+$labels['htmleditor'] = 'Skriv HTML-meddelanden';
+$labels['htmlsignature'] = 'HTML-signatur';
+$labels['previewpane'] = 'Visa delad vy i inbox';
+$labels['autosavedraft'] = 'Spara utkast automatiskt';
+$labels['everynminutes'] = 'var $n minut';
+$labels['never'] = 'aldrig';
+$labels['folder'] = 'Mapp';
+$labels['folders'] = 'Mappar';
+$labels['foldername'] = 'Mappnamn';
+$labels['subscribed'] = 'Ansluten';
+$labels['messagecount'] = 'Meddelanden';
+$labels['create'] = 'Skapa';
+$labels['createfolder'] = 'Skapa ny mapp';
+$labels['rename'] = 'Byt namn';
+$labels['renamefolder'] = 'Byt mappnamn';
+$labels['deletefolder'] = 'Radera mapp';
+$labels['managefolders'] = 'Hantera mappar';
+$labels['sortby'] = 'Sortera på';
+$labels['sortasc'] = 'Sortera stigande';
+$labels['sortdesc'] = 'Sortera fallande';
+
+?>
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/se/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Fredrik Nygren <f.nygren@gmail.com> |
+ | Andreas Henriksson <andreas@fatal.se> |
+ | Jonas Näsholm <hostmaster@bitfuse.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 1143 2008-02-26 20:50:10Z yllar $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Inloggningen misslyckades';
+$messages['cookiesdisabled'] = 'Din webbläsare accepterar inte cookies';
+$messages['sessionerror'] = 'Din inloggning är felaktig eller har gått ut';
+$messages['imaperror'] = 'Kontakt med IMAP-servern misslyckades';
+$messages['nomessagesfound'] = 'Inga meddelanden';
+$messages['loggedout'] = 'Du är utloggad. Välkommen åter!';
+$messages['mailboxempty'] = 'Mappen är tom';
+$messages['loading'] = 'Laddar...';
+$messages['loadingdata'] = 'Laddar data...';
+$messages['checkingmail'] = 'Letar efter nya meddelanden...';
+$messages['sendingmessage'] = 'Skickar meddelande...';
+$messages['messagesent'] = 'Meddelandet har skickats';
+$messages['savingmessage'] = 'Sparar meddelande...';
+$messages['messagesaved'] = 'Meddelande sparades till utkast';
+$messages['successfullysaved'] = 'Sparat';
+$messages['addedsuccessfully'] = 'Kontakten har lagts till i adressboken';
+$messages['contactexists'] = 'En kontakt med den här adressen finns redan';
+$messages['blockedimages'] = 'För att skydda dig är bilder blockerade.';
+$messages['encryptedmessage'] = 'Meddelandet är krypterat och kan tyvärr inte visas.';
+$messages['nocontactsfound'] = 'Inga kontakter hittades';
+$messages['contactnotfound'] = 'Den efterfrågade kontanten hittades inte';
+$messages['sendingfailed'] = 'Meddelandet kunde inte skickas';
+$messages['errorsaving'] = 'Ett fel uppstod när meddelandet sparades';
+$messages['errormoving'] = 'Meddelandet kunde inte flyttas';
+$messages['errordeleting'] = 'Meddelandet kunde inte raderas';
+$messages['deletecontactconfirm'] = 'Vill du verkligen radera valda kontakter?';
+$messages['deletemessagesconfirm'] = 'Vill du verkligen ta bort valda meddelanden?';
+$messages['deletefolderconfirm'] = 'Vill du verkligen radera den här mappen?';
+$messages['purgefolderconfirm'] = 'Vill du verkligen radera alla meddelanden i den här mappen?';
+$messages['formincomplete'] = 'Formuläret var inte ifyllt i sin helhet';
+$messages['noemailwarning'] = 'Vänligen ange en giltig adress';
+$messages['nonamewarning'] = 'Vänligen ange ett namn';
+$messages['nopagesizewarning'] = 'Vänligen ange en sidstorlek';
+$messages['norecipientwarning'] = 'Vänligen ange minst en mottagare';
+$messages['nosubjectwarning'] = 'Ämnesfältet är tomt. Vill du lägga till något nu?';
+$messages['nobodywarning'] = 'Skicka det här meddelandet utan text?';
+$messages['notsentwarning'] = 'Meddelande har inte skickats. Vill du avbryta meddelandet?';
+$messages['noldapserver'] = 'Vänligen ange en LDAP-server att söka';
+$messages['nocontactsreturned'] = 'Inga kontakter hittades';
+$messages['nosearchname'] = 'Vänligen ange ett kontaktnamn eller en adress';
+$messages['searchsuccessful'] = '$nr meddelanden hittades';
+$messages['searchnomatch'] = 'Sökningen returnerade inga träffar';
+$messages['searching'] = 'Söker...';
+$messages['checking'] = 'Kontrollerar...';
+$messages['nospellerrors'] = 'Inget stavfel hittades';
+$messages['folderdeleted'] = 'Mappen raderades';
+$messages['deletedsuccessfully'] = 'Lyckad borttagning';
+$messages['converting'] = 'Tar bort formatering från meddelande...';
+$messages['messageopenerror'] = 'Kunde inte ladda meddelande från servern';
+$messages['fileuploaderror'] = 'Filuppladdning misslyckades';
+$messages['filesizeerror'] = 'Den uppladdade filen överstiger maxstorleken $size';
+$messages['copysuccess'] = 'Lyckad kopiering av $nr adresser';
+$messages['copyerror'] = 'Kunde inte kopiera några adresser';
+$messages['sourceisreadonly'] = 'Denna adresskälla är skrivskyddad';
+$messages['errorsavingcontact'] = 'Kunde inte spara kontakt-adressen';
+$messages['movingmessage'] = 'Flyttar meddelande...';
+$messages['receiptsent'] = 'Ett läskvitto har skickats';
+$messages['errorsendingreceipt'] = 'Kunde inte skicka läskvittot';
+$messages['nodeletelastidentity'] = 'Du kan inte radera den här identiteten, det är din sista.';
+$messages['addsubfolderhint'] = 'Den här mappen kommer att skapas som en underkatalog till den valda';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/tr/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Hasan Cansız <hasancansiz@yahoo.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
-
-*/
-
-$labels = array();
-$labels['welcome'] = '$product \'a hoşgeldiniz';
-$labels['username'] = 'Kullanıcı Adı';
-$labels['password'] = 'Şifre';
-$labels['server'] = 'Sunucu';
-$labels['login'] = 'Oturum Aç';
-$labels['logout'] = 'Oturumu Kapat';
-$labels['mail'] = 'E-Posta';
-$labels['settings'] = 'Kişisel Ayarlar';
-$labels['addressbook'] = 'Rehber';
-$labels['inbox'] = 'Gelenler';
-$labels['drafts'] = 'Taslaklar';
-$labels['sent'] = 'Gönderilenler';
-$labels['trash'] = 'Çöp Kutusu';
-$labels['junk'] = 'Gereksiz(spam)';
-$labels['subject'] = 'Konu';
-$labels['from'] = 'Gönderen';
-$labels['to'] = 'Alıcı';
-$labels['cc'] = 'Karbon Kopya';
-$labels['bcc'] = 'Gizli Karbon Kopya';
-$labels['replyto'] = 'Yanıtların Gönderileceği Adres';
-$labels['date'] = 'Tarih';
-$labels['size'] = 'Boyut';
-$labels['priority'] = 'Öncelik';
-$labels['organization'] = 'Kuruluş';
-$labels['reply-to'] = 'Yanıtların Gönderileceği Adres';
-$labels['mailboxlist'] = 'Klasörler';
-$labels['messagesfromto'] = '$count Mesajın $from - $to Arasındaki Mesajlar';
-$labels['messagenrof'] = '$count Mesajın $nr .';
-$labels['moveto'] = 'şuraya taşı...';
-$labels['download'] = 'İndir';
-$labels['filename'] = 'Dosya Adı';
-$labels['filesize'] = 'Dosya Boyutu';
-$labels['preferhtml'] = 'HTML görüntülemeyi destekle';
-$labels['htmlmessage'] = 'HTML Mesaj';
-$labels['prettydate'] = 'Tarihi kısaltarak göster';
-$labels['addtoaddressbook'] = 'Rehbere Ekle';
-$labels['sun'] = 'Pzr';
-$labels['mon'] = 'Pts';
-$labels['tue'] = 'Sal';
-$labels['wed'] = 'Çar';
-$labels['thu'] = 'Per';
-$labels['fri'] = 'Cum';
-$labels['sat'] = 'Cts';
-$labels['sunday'] = 'Pazar';
-$labels['monday'] = 'Pazartesi';
-$labels['tuesday'] = 'Salı';
-$labels['wednesday'] = 'Çarşamba';
-$labels['thursday'] = 'Perşembe';
-$labels['friday'] = 'Cuma';
-$labels['saturday'] = 'Cumartesi';
-$labels['today'] = 'Bugün';
-$labels['checkmail'] = 'Yeni posta olup olmadığını kontrol et';
-$labels['writenewmessage'] = 'Yeni posta oluştur';
-$labels['replytomessage'] = 'Postayı yanıtla';
-$labels['replytoallmessage'] = 'Bu postanın gönderildiği herkesi yanıtla';
-$labels['forwardmessage'] = 'Postayı ilet';
-$labels['deletemessage'] = 'Çöp Kutusuna At';
-$labels['printmessage'] = 'Yazdır';
-$labels['previousmessage'] = 'Önceki mesajı göster';
-$labels['previousmessages'] = 'Önceki postaları göster';
-$labels['firstmessage'] = 'İlk mesajı göster';
-$labels['firstmessages'] = 'İlk mesajları göster';
-$labels['nextmessage'] = 'Sonraki mesajı göster';
-$labels['nextmessages'] = 'Sonraki postaları göster';
-$labels['lastmessage'] = 'Son mesajı göster';
-$labels['lastmessages'] = 'Son mesajları göster';
-$labels['backtolist'] = 'Posta kutusuna dön';
-$labels['viewsource'] = 'Kaynağı göster';
-$labels['select'] = 'Seç';
-$labels['all'] = 'Hepsi';
-$labels['none'] = 'Hiçbiri';
-$labels['unread'] = 'Okunmamış';
-$labels['compact'] = 'Kompakt';
-$labels['empty'] = 'Boşalt';
-$labels['purge'] = 'Sil';
-$labels['quota'] = 'Disk kullanımı';
-$labels['unknown'] = 'bilinmeyen';
-$labels['unlimited'] = 'sınırsız';
-$labels['quicksearch'] = 'Hızlı arama';
-$labels['resetsearch'] = 'Aramayı sıfırla';
-$labels['compose'] = 'Yeni posta oluştur';
-$labels['sendmessage'] = 'Postayı gönder';
-$labels['savemessage'] = 'Taslak olarak kaydet';
-$labels['addattachment'] = 'Dosya ekle';
-$labels['charset'] = 'Karakter seti';
-$labels['editortype'] = 'Düzenleyici tipi';
-$labels['returnreceipt'] = 'Return receipt';
-$labels['checkspelling'] = 'Dilbilgisi kontrolu yap';
-$labels['resumeediting'] = 'Düzenlemeye devam et';
-$labels['revertto'] = 'Revert to';
-$labels['attachments'] = 'Ekler';
-$labels['upload'] = 'Yükle';
-$labels['close'] = 'Kapat';
-$labels['low'] = 'Düşük';
-$labels['lowest'] = 'Çok düşük';
-$labels['normal'] = 'Normal';
-$labels['high'] = 'Yüksek';
-$labels['highest'] = 'Çok yüksek';
-$labels['nosubject'] = '(Konu Belirtilmemiş)';
-$labels['showimages'] = 'Grafikleri görüntüle';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Düz metin';
-$labels['name'] = 'İsmi görüntüle';
-$labels['firstname'] = 'İsim';
-$labels['surname'] = 'Soy isim';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Seçili kişiyi rehbere ekle';
-$labels['editcontact'] = 'Kişiyi düzenle';
-$labels['edit'] = 'Düzenle';
-$labels['cancel'] = 'İptal';
-$labels['save'] = 'Kaydet';
-$labels['delete'] = 'Sil';
-$labels['newcontact'] = 'Yeni kişi Kartı Ekle';
-$labels['deletecontact'] = 'Seçili kişileri sil';
-$labels['composeto'] = 'Seçili kişiye posta gönder';
-$labels['contactsfromto'] = '$count Kişinin $from - $to arası ';
-$labels['print'] = 'Yazdır';
-$labels['export'] = 'Export';
-$labels['previouspage'] = 'Önceki seti göster';
-$labels['firstpage'] = 'İlk sayfa';
-$labels['nextpage'] = 'Sonraki seti göster';
-$labels['lastpage'] = 'Son sayfa';
-$labels['groups'] = 'Gruplar';
-$labels['personaladrbook'] = 'Adresler';
-$labels['settingsfor'] = 'Ayarlar';
-$labels['preferences'] = 'Tercihler';
-$labels['userpreferences'] = 'Kullanıcı tercihleri';
-$labels['editpreferences'] = 'Kullanıcı tercihlerini düzenle';
-$labels['identities'] = 'Kimlikler';
-$labels['manageidentities'] = 'Bu hesap için kimlikleri düzenle';
-$labels['newidentity'] = 'Yeni kimlik';
-$labels['newitem'] = 'Yeni etiket';
-$labels['edititem'] = 'Etiket düzenle';
-$labels['setdefault'] = 'Varsayılan olarak ayarla';
-$labels['language'] = 'Dil';
-$labels['timezone'] = 'Saat dilimi';
-$labels['pagesize'] = 'Bir sayfada kaç posta gösterilsin';
-$labels['signature'] = 'İmza';
-$labels['dstactive'] = 'Yaz saati uygulaması';
-$labels['htmleditor'] = 'HTML türünde mesaj düzenle';
-$labels['htmlsignature'] = 'HTML türü imza';
-$labels['previewpane'] = 'İlk paneli göster';
-$labels['autosavedraft'] = 'Taslağı otomatik kaydet';
-$labels['everynminutes'] = 'her $n dakikada bir';
-$labels['never'] = 'hiçbir zaman';
-$labels['folder'] = 'Klasör';
-$labels['folders'] = 'Klasörler';
-$labels['foldername'] = 'Klasör ismi';
-$labels['subscribed'] = 'Görülebilir';
-$labels['create'] = 'Yeni Oluştur';
-$labels['createfolder'] = 'Yeni klasör oluştur';
-$labels['rename'] = 'Yeniden adlandır';
-$labels['renamefolder'] = 'Klasörü yeniden adlandır';
-$labels['deletefolder'] = 'Klasörü sil';
-$labels['managefolders'] = 'Klasörleri düzenle';
-$labels['sortby'] = 'Sırala';
-$labels['sortasc'] = 'Azdan çoğa';
-$labels['sortdesc'] = 'Çoktan aza';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/tr/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Hasan Cansız <hasancansiz@yahoo.com> |
- +-----------------------------------------------------------------------+
-
- @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Giriş Başarısız';
-$messages['cookiesdisabled'] = 'Tarayıcınız cookileri kabul etmiyor';
-$messages['sessionerror'] = 'Oturumunuz sona ermiş veya hatalı';
-$messages['imaperror'] = 'IMAP Servera bağlanılamadı';
-$messages['nomessagesfound'] = 'Posta kutusunda mesaj bulunamadı';
-$messages['loggedout'] = 'Oturumu başarılı bir şekilde kapattınız. Güle güle!';
-$messages['mailboxempty'] = 'Posta kutusu boş';
-$messages['loading'] = 'Yükleniyor...';
-$messages['loadingdata'] = 'Veriler yükleniyor...';
-$messages['checkingmail'] = 'Yeni posta var mı diye kontrol ediliyor...';
-$messages['sendingmessage'] = 'Posta gönderiliyor...';
-$messages['messagesent'] = 'Posta gönderildi';
-$messages['savingmessage'] = 'Posta kaydediliyor...';
-$messages['messagesaved'] = 'Posta taslaklara kaydedildi';
-$messages['successfullysaved'] = 'Kaydedildi';
-$messages['addedsuccessfully'] = 'Kişi rehbere eklendi';
-$messages['contactexists'] = 'Rehberde bu posta adresine sahip biri zaten var';
-$messages['blockedimages'] = 'Gizliliğinizi korumak amacıyla postadaki grafikler bloke edildi.';
-$messages['encryptedmessage'] = 'Bu şifrelenmiş bir posta ve bu nedenle gösterilemiyor. Özür dilerim!';
-$messages['nocontactsfound'] = 'Kişi bulunamadı';
-$messages['contactnotfound'] = 'İstenen bağlantı bulunamadı';
-$messages['sendingfailed'] = 'Posta gönderilemedi';
-$messages['errorsaving'] = 'Kaydederken bir problem oluştu';
-$messages['errormoving'] = 'Posta taşınamadı';
-$messages['errordeleting'] = 'Posta silinemedi';
-$messages['deletecontactconfirm'] = 'Seçili posta(lar)ı silmeyi gerçekten istiyor musunuz?';
-$messages['deletemessagesconfirm'] = 'Seçilen mesajları silmek istiyor musunuz?';
-$messages['deletefolderconfirm'] = 'Bu klasörü silmeyi gerçekten istiyor musunuz?';
-$messages['purgefolderconfirm'] = 'Bu klasördeki tüm postaları silmeyi gerçekten istiyor musnuz?';
-$messages['formincomplete'] = 'Form tam olarak doldurulmadı';
-$messages['noemailwarning'] = 'Lütfen geçerli bir posta adresi girin';
-$messages['nonamewarning'] = 'Lütfen bir isim girin';
-$messages['nopagesizewarning'] = 'Lütfen bir sayfa boyutu girin';
-$messages['norecipientwarning'] = 'Lütfen en az bir alıcı belirtin';
-$messages['nosubjectwarning'] = '"Konu" kutusu boş bırakılmış. Þimdi bir konu belirtmek ister misiniz?';
-$messages['nobodywarning'] = 'Postayı boş olarak gönder?';
-$messages['notsentwarning'] = 'Posta gönderilmedi. Postanızı iptal etmek istiyor musunuz?';
-$messages['noldapserver'] = 'Lütfen arama için bir Ldap sunucu seçin';
-$messages['nocontactsreturned'] = 'Kişi bulunamadı';
-$messages['nosearchname'] = 'Lütfen bir kişi ismi veya posta adresi girin';
-$messages['searchsuccessful'] = '$nr tane posta bulundu';
-$messages['searchnomatch'] = 'Aramanıza uygun hiçbir sonuç bulunamadı';
-$messages['searching'] = 'Aranıyor...';
-$messages['checking'] = 'Kontrol ediliyor...';
-$messages['nospellerrors'] = 'Yazım hatası bulunmadı';
-$messages['folderdeleted'] = 'Klasör başarılı bir şekilde silindi';
-$messages['deletedsuccessfully'] = 'Silindi';
-$messages['converting'] = 'Mesajın biçimlendirmesi kaldırılıyor..';
-$messages['messageopenerror'] = 'Mesaj sunucudan yüklenemedi';
-$messages['fileuploaderror'] = 'Dosya yükleme başarısız';
-$messages['filesizeerror'] = 'Yüklenen dosya en büyük dosya boyu $size \'ı aşıyor';
-$messages['copysuccess'] = '$nr adres kopyalandı';
-$messages['copyerror'] = 'Hiçbir adres kopyalanamadı';
-$messages['sourceisreadonly'] = 'Adres kaynağı salt okunur durumda';
-$messages['errorsavingcontact'] = 'Bağlantı adresi kaydedilemedi';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/tr/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Hasan Cansız <hasancansiz@yahoo.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: labels.inc 950 2008-01-04 08:04:53Z tomekp $
+
+*/
+
+$labels = array();
+$labels['welcome'] = '$product \'a hoşgeldiniz';
+$labels['username'] = 'Kullanıcı Adı';
+$labels['password'] = 'Şifre';
+$labels['server'] = 'Sunucu';
+$labels['login'] = 'Oturum Aç';
+$labels['logout'] = 'Oturumu Kapat';
+$labels['mail'] = 'E-Posta';
+$labels['settings'] = 'Kişisel Ayarlar';
+$labels['addressbook'] = 'Rehber';
+$labels['inbox'] = 'Gelenler';
+$labels['drafts'] = 'Taslaklar';
+$labels['sent'] = 'Gönderilenler';
+$labels['trash'] = 'Çöp Kutusu';
+$labels['junk'] = 'Gereksiz(spam)';
+$labels['subject'] = 'Konu';
+$labels['from'] = 'Gönderen';
+$labels['to'] = 'Alıcı';
+$labels['cc'] = 'Karbon Kopya';
+$labels['bcc'] = 'Gizli Karbon Kopya';
+$labels['replyto'] = 'Yanıtların Gönderileceği Adres';
+$labels['date'] = 'Tarih';
+$labels['size'] = 'Boyut';
+$labels['priority'] = 'Öncelik';
+$labels['organization'] = 'Kuruluş';
+$labels['reply-to'] = 'Yanıtların Gönderileceği Adres';
+$labels['mailboxlist'] = 'Klasörler';
+$labels['messagesfromto'] = '$count Mesajın $from - $to Arasındaki Mesajlar';
+$labels['messagenrof'] = '$count Mesajın $nr .';
+$labels['moveto'] = 'şuraya taşı...';
+$labels['download'] = 'İndir';
+$labels['filename'] = 'Dosya Adı';
+$labels['filesize'] = 'Dosya Boyutu';
+$labels['preferhtml'] = 'HTML görüntülemeyi destekle';
+$labels['htmlmessage'] = 'HTML Mesaj';
+$labels['prettydate'] = 'Tarihi kısaltarak göster';
+$labels['addtoaddressbook'] = 'Rehbere Ekle';
+$labels['sun'] = 'Pzr';
+$labels['mon'] = 'Pts';
+$labels['tue'] = 'Sal';
+$labels['wed'] = 'Çar';
+$labels['thu'] = 'Per';
+$labels['fri'] = 'Cum';
+$labels['sat'] = 'Cts';
+$labels['sunday'] = 'Pazar';
+$labels['monday'] = 'Pazartesi';
+$labels['tuesday'] = 'Salı';
+$labels['wednesday'] = 'Çarşamba';
+$labels['thursday'] = 'Perşembe';
+$labels['friday'] = 'Cuma';
+$labels['saturday'] = 'Cumartesi';
+$labels['today'] = 'Bugün';
+$labels['checkmail'] = 'Yeni posta olup olmadığını kontrol et';
+$labels['writenewmessage'] = 'Yeni posta oluştur';
+$labels['replytomessage'] = 'Postayı yanıtla';
+$labels['replytoallmessage'] = 'Bu postanın gönderildiği herkesi yanıtla';
+$labels['forwardmessage'] = 'Postayı ilet';
+$labels['deletemessage'] = 'Çöp Kutusuna At';
+$labels['printmessage'] = 'Yazdır';
+$labels['previousmessage'] = 'Önceki mesajı göster';
+$labels['previousmessages'] = 'Önceki postaları göster';
+$labels['firstmessage'] = 'İlk mesajı göster';
+$labels['firstmessages'] = 'İlk mesajları göster';
+$labels['nextmessage'] = 'Sonraki mesajı göster';
+$labels['nextmessages'] = 'Sonraki postaları göster';
+$labels['lastmessage'] = 'Son mesajı göster';
+$labels['lastmessages'] = 'Son mesajları göster';
+$labels['backtolist'] = 'Posta kutusuna dön';
+$labels['viewsource'] = 'Kaynağı göster';
+$labels['select'] = 'Seç';
+$labels['all'] = 'Hepsi';
+$labels['none'] = 'Hiçbiri';
+$labels['unread'] = 'Okunmamış';
+$labels['compact'] = 'Kompakt';
+$labels['empty'] = 'Boşalt';
+$labels['purge'] = 'Sil';
+$labels['quota'] = 'Disk kullanımı';
+$labels['unknown'] = 'bilinmeyen';
+$labels['unlimited'] = 'sınırsız';
+$labels['quicksearch'] = 'Hızlı arama';
+$labels['resetsearch'] = 'Aramayı sıfırla';
+$labels['compose'] = 'Yeni posta oluştur';
+$labels['sendmessage'] = 'Postayı gönder';
+$labels['savemessage'] = 'Taslak olarak kaydet';
+$labels['addattachment'] = 'Dosya ekle';
+$labels['charset'] = 'Karakter seti';
+$labels['editortype'] = 'Düzenleyici tipi';
+$labels['returnreceipt'] = 'Return receipt';
+$labels['checkspelling'] = 'Dilbilgisi kontrolu yap';
+$labels['resumeediting'] = 'Düzenlemeye devam et';
+$labels['revertto'] = 'Revert to';
+$labels['attachments'] = 'Ekler';
+$labels['upload'] = 'Yükle';
+$labels['close'] = 'Kapat';
+$labels['low'] = 'Düşük';
+$labels['lowest'] = 'Çok düşük';
+$labels['normal'] = 'Normal';
+$labels['high'] = 'Yüksek';
+$labels['highest'] = 'Çok yüksek';
+$labels['nosubject'] = '(Konu Belirtilmemiş)';
+$labels['showimages'] = 'Grafikleri görüntüle';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Düz metin';
+$labels['name'] = 'İsmi görüntüle';
+$labels['firstname'] = 'İsim';
+$labels['surname'] = 'Soy isim';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Seçili kişiyi rehbere ekle';
+$labels['editcontact'] = 'Kişiyi düzenle';
+$labels['edit'] = 'Düzenle';
+$labels['cancel'] = 'İptal';
+$labels['save'] = 'Kaydet';
+$labels['delete'] = 'Sil';
+$labels['newcontact'] = 'Yeni kişi Kartı Ekle';
+$labels['deletecontact'] = 'Seçili kişileri sil';
+$labels['composeto'] = 'Seçili kişiye posta gönder';
+$labels['contactsfromto'] = '$count Kişinin $from - $to arası ';
+$labels['print'] = 'Yazdır';
+$labels['export'] = 'Export';
+$labels['previouspage'] = 'Önceki seti göster';
+$labels['firstpage'] = 'İlk sayfa';
+$labels['nextpage'] = 'Sonraki seti göster';
+$labels['lastpage'] = 'Son sayfa';
+$labels['groups'] = 'Gruplar';
+$labels['personaladrbook'] = 'Adresler';
+$labels['settingsfor'] = 'Ayarlar';
+$labels['preferences'] = 'Tercihler';
+$labels['userpreferences'] = 'Kullanıcı tercihleri';
+$labels['editpreferences'] = 'Kullanıcı tercihlerini düzenle';
+$labels['identities'] = 'Kimlikler';
+$labels['manageidentities'] = 'Bu hesap için kimlikleri düzenle';
+$labels['newidentity'] = 'Yeni kimlik';
+$labels['newitem'] = 'Yeni etiket';
+$labels['edititem'] = 'Etiket düzenle';
+$labels['setdefault'] = 'Varsayılan olarak ayarla';
+$labels['language'] = 'Dil';
+$labels['timezone'] = 'Saat dilimi';
+$labels['pagesize'] = 'Bir sayfada kaç posta gösterilsin';
+$labels['signature'] = 'İmza';
+$labels['dstactive'] = 'Yaz saati uygulaması';
+$labels['htmleditor'] = 'HTML türünde mesaj düzenle';
+$labels['htmlsignature'] = 'HTML türü imza';
+$labels['previewpane'] = 'İlk paneli göster';
+$labels['autosavedraft'] = 'Taslağı otomatik kaydet';
+$labels['everynminutes'] = 'her $n dakikada bir';
+$labels['never'] = 'hiçbir zaman';
+$labels['folder'] = 'Klasör';
+$labels['folders'] = 'Klasörler';
+$labels['foldername'] = 'Klasör ismi';
+$labels['subscribed'] = 'Görülebilir';
+$labels['create'] = 'Yeni Oluştur';
+$labels['createfolder'] = 'Yeni klasör oluştur';
+$labels['rename'] = 'Yeniden adlandır';
+$labels['renamefolder'] = 'Klasörü yeniden adlandır';
+$labels['deletefolder'] = 'Klasörü sil';
+$labels['managefolders'] = 'Klasörleri düzenle';
+$labels['sortby'] = 'Sırala';
+$labels['sortasc'] = 'Azdan çoğa';
+$labels['sortdesc'] = 'Çoktan aza';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/tr/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Hasan Cansız <hasancansiz@yahoo.com> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id: messages.inc 950 2008-01-04 08:04:53Z tomekp $
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Giriş Başarısız';
+$messages['cookiesdisabled'] = 'Tarayıcınız cookileri kabul etmiyor';
+$messages['sessionerror'] = 'Oturumunuz sona ermiş veya hatalı';
+$messages['imaperror'] = 'IMAP Servera bağlanılamadı';
+$messages['nomessagesfound'] = 'Posta kutusunda mesaj bulunamadı';
+$messages['loggedout'] = 'Oturumu başarılı bir şekilde kapattınız. Güle güle!';
+$messages['mailboxempty'] = 'Posta kutusu boş';
+$messages['loading'] = 'Yükleniyor...';
+$messages['loadingdata'] = 'Veriler yükleniyor...';
+$messages['checkingmail'] = 'Yeni posta var mı diye kontrol ediliyor...';
+$messages['sendingmessage'] = 'Posta gönderiliyor...';
+$messages['messagesent'] = 'Posta gönderildi';
+$messages['savingmessage'] = 'Posta kaydediliyor...';
+$messages['messagesaved'] = 'Posta taslaklara kaydedildi';
+$messages['successfullysaved'] = 'Kaydedildi';
+$messages['addedsuccessfully'] = 'Kişi rehbere eklendi';
+$messages['contactexists'] = 'Rehberde bu posta adresine sahip biri zaten var';
+$messages['blockedimages'] = 'Gizliliğinizi korumak amacıyla postadaki grafikler bloke edildi.';
+$messages['encryptedmessage'] = 'Bu şifrelenmiş bir posta ve bu nedenle gösterilemiyor. Özür dilerim!';
+$messages['nocontactsfound'] = 'Kişi bulunamadı';
+$messages['contactnotfound'] = 'İstenen bağlantı bulunamadı';
+$messages['sendingfailed'] = 'Posta gönderilemedi';
+$messages['errorsaving'] = 'Kaydederken bir problem oluştu';
+$messages['errormoving'] = 'Posta taşınamadı';
+$messages['errordeleting'] = 'Posta silinemedi';
+$messages['deletecontactconfirm'] = 'Seçili posta(lar)ı silmeyi gerçekten istiyor musunuz?';
+$messages['deletemessagesconfirm'] = 'Seçilen mesajları silmek istiyor musunuz?';
+$messages['deletefolderconfirm'] = 'Bu klasörü silmeyi gerçekten istiyor musunuz?';
+$messages['purgefolderconfirm'] = 'Bu klasördeki tüm postaları silmeyi gerçekten istiyor musnuz?';
+$messages['formincomplete'] = 'Form tam olarak doldurulmadı';
+$messages['noemailwarning'] = 'Lütfen geçerli bir posta adresi girin';
+$messages['nonamewarning'] = 'Lütfen bir isim girin';
+$messages['nopagesizewarning'] = 'Lütfen bir sayfa boyutu girin';
+$messages['norecipientwarning'] = 'Lütfen en az bir alıcı belirtin';
+$messages['nosubjectwarning'] = '"Konu" kutusu boş bırakılmış. Þimdi bir konu belirtmek ister misiniz?';
+$messages['nobodywarning'] = 'Postayı boş olarak gönder?';
+$messages['notsentwarning'] = 'Posta gönderilmedi. Postanızı iptal etmek istiyor musunuz?';
+$messages['noldapserver'] = 'Lütfen arama için bir Ldap sunucu seçin';
+$messages['nocontactsreturned'] = 'Kişi bulunamadı';
+$messages['nosearchname'] = 'Lütfen bir kişi ismi veya posta adresi girin';
+$messages['searchsuccessful'] = '$nr tane posta bulundu';
+$messages['searchnomatch'] = 'Aramanıza uygun hiçbir sonuç bulunamadı';
+$messages['searching'] = 'Aranıyor...';
+$messages['checking'] = 'Kontrol ediliyor...';
+$messages['nospellerrors'] = 'Yazım hatası bulunmadı';
+$messages['folderdeleted'] = 'Klasör başarılı bir şekilde silindi';
+$messages['deletedsuccessfully'] = 'Silindi';
+$messages['converting'] = 'Mesajın biçimlendirmesi kaldırılıyor..';
+$messages['messageopenerror'] = 'Mesaj sunucudan yüklenemedi';
+$messages['fileuploaderror'] = 'Dosya yükleme başarısız';
+$messages['filesizeerror'] = 'Yüklenen dosya en büyük dosya boyu $size \'ı aşıyor';
+$messages['copysuccess'] = '$nr adres kopyalandı';
+$messages['copyerror'] = 'Hiçbir adres kopyalanamadı';
+$messages['sourceisreadonly'] = 'Adres kaynağı salt okunur durumda';
+$messages['errorsavingcontact'] = 'Bağlantı adresi kaydedilemedi';
+
+?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/uk/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Natali Stasyuk <natali@onlineua.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$labels = array();
-$labels['welcome'] = 'Ласкаво просимо в $product!';
-$labels['username'] = 'Ім`я користувача';
-$labels['password'] = 'Пароль';
-$labels['server'] = 'Сервер';
-$labels['login'] = 'Увійти';
-$labels['logout'] = 'Вийти';
-$labels['mail'] = 'Пошта';
-$labels['settings'] = 'Налаштування';
-$labels['addressbook'] = 'Контакти';
-$labels['inbox'] = 'Вхідні';
-$labels['drafts'] = 'Чернетки';
-$labels['sent'] = 'Відправлені';
-$labels['trash'] = 'Смітник';
-$labels['junk'] = 'Спам';
-$labels['subject'] = 'Тема';
-$labels['from'] = 'Від';
-$labels['to'] = 'Кому';
-$labels['cc'] = 'Копія';
-$labels['bcc'] = 'Прихована';
-$labels['replyto'] = 'Зворотня адреса';
-$labels['date'] = 'Дата';
-$labels['size'] = 'Розмір';
-$labels['priority'] = 'Пріоритет';
-$labels['organization'] = 'Організація';
-$labels['reply-to'] = 'Зворотня адреса';
-$labels['mailboxlist'] = 'Теки';
-$labels['messagesfromto'] = 'Повідомлення з $from по $to із $count';
-$labels['messagenrof'] = 'Повідомлення $nr із $count';
-$labels['moveto'] = 'Перемістити у...';
-$labels['download'] = 'Завантажити';
-$labels['filename'] = 'Ім`я файлу';
-$labels['filesize'] = 'Розмір файлу';
-$labels['preferhtml'] = 'Переважно HTML';
-$labels['htmlmessage'] = 'Повідомлення HTML';
-$labels['prettydate'] = 'Красиві дати';
-$labels['addtoaddressbook'] = 'Додати до контактів';
-$labels['sun'] = 'Нд';
-$labels['mon'] = 'Пн';
-$labels['tue'] = 'Вт';
-$labels['wed'] = 'Ср';
-$labels['thu'] = 'Чт';
-$labels['fri'] = 'Пт';
-$labels['sat'] = 'Сб';
-$labels['sunday'] = 'Неділя';
-$labels['monday'] = 'Понеділок';
-$labels['tuesday'] = 'Вівторок';
-$labels['wednesday'] = 'Середа';
-$labels['thursday'] = 'Четвер';
-$labels['friday'] = 'П`ятниця';
-$labels['saturday'] = 'Субота';
-$labels['today'] = 'Сьогодні';
-$labels['checkmail'] = 'Перевірити пошту';
-$labels['writenewmessage'] = 'Нове повідомлення';
-$labels['replytomessage'] = 'Відповісти';
-$labels['replytoallmessage'] = 'Відповісти усім';
-$labels['forwardmessage'] = 'Переслати';
-$labels['deletemessage'] = 'У смітник';
-$labels['movemessagetotrash'] = 'Перемістити повідомлення у смітник';
-$labels['printmessage'] = 'Друкувати';
-$labels['previousmessage'] = 'Показати попереднє повідомлення';
-$labels['previousmessages'] = 'Попередня сторінка повідомлень';
-$labels['firstmessage'] = 'Показати перше повідомлення';
-$labels['firstmessages'] = 'Перша сторінка повідомлень';
-$labels['nextmessage'] = 'Показати наступне повідомлення';
-$labels['nextmessages'] = 'Наступна сторінка повідомлень';
-$labels['lastmessage'] = 'Показати останнє повідомлення';
-$labels['lastmessages'] = 'Остання сторінка повідомлень';
-$labels['backtolist'] = 'До переліку повідомлень';
-$labels['viewsource'] = 'Вихідний текст';
-$labels['select'] = 'Вибрати';
-$labels['all'] = 'Все';
-$labels['none'] = 'Нічого';
-$labels['unread'] = 'Непрочитані';
-$labels['compact'] = 'Стиснути';
-$labels['empty'] = 'Спустошити';
-$labels['purge'] = 'Очистити';
-$labels['quota'] = 'Квота';
-$labels['unknown'] = 'невідомо';
-$labels['unlimited'] = 'без обмеження';
-$labels['quicksearch'] = 'Швидкий пошук';
-$labels['resetsearch'] = 'Очистити пошук';
-$labels['compose'] = 'Написати повідомлення';
-$labels['savemessage'] = 'Зберегти чернетку';
-$labels['sendmessage'] = 'Відіслати зараз';
-$labels['addattachment'] = 'Додати вкладення';
-$labels['charset'] = 'Набір символів';
-$labels['editortype'] = 'Редактор';
-$labels['returnreceipt'] = 'Запит відповіді';
-$labels['checkspelling'] = 'Перевірити орфографію';
-$labels['resumeediting'] = 'Продовжити редагування';
-$labels['revertto'] = 'Відмінити правки';
-$labels['attachments'] = 'Вкладення';
-$labels['upload'] = 'Завантажити';
-$labels['close'] = 'Закрити';
-$labels['low'] = 'Низький';
-$labels['lowest'] = 'Найнижчий';
-$labels['normal'] = 'Нормальний';
-$labels['high'] = 'Високий';
-$labels['highest'] = 'Найвищий';
-$labels['nosubject'] = '(без теми)';
-$labels['showimages'] = 'Показати зображення';
-$labels['htmltoggle'] = 'HTML';
-$labels['plaintoggle'] = 'Звичайний текст';
-$labels['addcc'] = 'Додати Cc';
-$labels['addbcc'] = 'Додати Bcc';
-$labels['addreplyto'] = 'Додати Reply-To';
-$labels['name'] = 'Відображуване ім`я';
-$labels['firstname'] = 'Ім`я';
-$labels['surname'] = 'Прізвище';
-$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Додати вибрані контакти до списку контактів';
-$labels['editcontact'] = 'Редагувати контакт';
-$labels['edit'] = 'Правка';
-$labels['cancel'] = 'Відміна';
-$labels['save'] = 'Зберегти';
-$labels['delete'] = 'Видалити';
-$labels['newcontact'] = 'Створити новий контакт';
-$labels['deletecontact'] = 'Видалити вибрані контакти';
-$labels['composeto'] = 'Створити повідомлення для вибранних контактів';
-$labels['contactsfromto'] = 'Контакти з $from по $to з $count';
-$labels['print'] = 'Друкувати';
-$labels['export'] = 'Експортувати';
-$labels['previouspage'] = 'Показати попередній';
-$labels['firstpage'] = 'Показати перший';
-$labels['nextpage'] = 'Показати наступний';
-$labels['lastpage'] = 'Показати останній';
-$labels['groups'] = 'Групи';
-$labels['personaladrbook'] = 'Персональні адреси';
-$labels['settingsfor'] = 'Налаштування для';
-$labels['preferences'] = 'Уподобання';
-$labels['userpreferences'] = 'Уподобання користувача';
-$labels['editpreferences'] = 'Редагувати уподобання користувача';
-$labels['identities'] = 'Профілі';
-$labels['manageidentities'] = 'Керування профілями';
-$labels['newidentity'] = 'Новий профіль';
-$labels['newitem'] = 'Новий';
-$labels['edititem'] = 'Правка';
-$labels['setdefault'] = 'Використовувати типово';
-$labels['language'] = 'Мова';
-$labels['timezone'] = 'Часовий пояс';
-$labels['pagesize'] = 'Рядків на сторінці';
-$labels['signature'] = 'Підпис';
-$labels['dstactive'] = 'Літній/зимовий час';
-$labels['htmleditor'] = 'Створювати повідомлення в HTML';
-$labels['htmlsignature'] = 'Підпис в HTML';
-$labels['previewpane'] = 'Показати панель перегляду';
-$labels['autosavedraft'] = 'Автозбереження чернетки';
-$labels['everynminutes'] = 'кожні $n хвилин';
-$labels['never'] = 'ніколи';
-$labels['folder'] = 'Тека';
-$labels['folders'] = 'Теки';
-$labels['foldername'] = 'Назва теки';
-$labels['subscribed'] = 'Підписані';
-$labels['create'] = 'Створити';
-$labels['createfolder'] = 'Створити нову теку';
-$labels['rename'] = 'Перейменувати';
-$labels['renamefolder'] = 'Перейменувати теку';
-$labels['deletefolder'] = 'Видалити теку';
-$labels['managefolders'] = 'Керування теками';
-$labels['sortby'] = 'Відсортувати за';
-$labels['sortasc'] = 'Сортувати за зростанням';
-$labels['sortdesc'] = 'Сортувати за спаданням';
-
-?>
\ No newline at end of file
+++ /dev/null
-<?php
-
-/*
-
- +-----------------------------------------------------------------------+
- | language/uk/messages.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Natali Stasyuk <natali@onlineua.net> |
- +-----------------------------------------------------------------------+
-
- @version $Id$
-
-*/
-
-$messages = array();
-$messages['loginfailed'] = 'Невдала спроба входу';
-$messages['cookiesdisabled'] = 'Ваш переглядач не приймає cookie';
-$messages['sessionerror'] = 'Ваша сесія застаріла';
-$messages['imaperror'] = 'Невдале з`єднання з IMAP сервером';
-$messages['nomessagesfound'] = 'Повідомлень не знайдено';
-$messages['loggedout'] = 'Ваша сесія завершена. Всього найкращого!';
-$messages['mailboxempty'] = 'Поштова скринька порожня';
-$messages['loading'] = 'Завантаження...';
-$messages['loadingdata'] = 'Завантаження даних...';
-$messages['checkingmail'] = 'Перевірка нових повідомлень...';
-$messages['sendingmessage'] = 'Відправка повідомлень...';
-$messages['messagesent'] = 'Повідомлення відправлено';
-$messages['savingmessage'] = 'Збереження повідомлення...';
-$messages['messagesaved'] = 'Збережено в Чернетках';
-$messages['successfullysaved'] = 'Збережено';
-$messages['addedsuccessfully'] = 'Контакт успішно доданий до списку контактів';
-$messages['contactexists'] = 'Контакт з цією адресою e-mail вже існує';
-$messages['blockedimages'] = 'З метою безпеки завантаження зображень заблоковано';
-$messages['encryptedmessage'] = 'Повідомлення зашифровано і не може бути показано. Зверніться до адміністратора серверу.';
-$messages['nocontactsfound'] = 'Контакти не знайдені';
-$messages['contactnotfound'] = 'Запитаний контакт не знайдений';
-$messages['sendingfailed'] = 'Не вдалося відправити повідомлення';
-$messages['errorsaving'] = 'У процесі збереження трапилася помилка';
-$messages['errormoving'] = 'Не вдалося перемістити повідомлення';
-$messages['errordeleting'] = 'Не вдалося видалити повідомлення';
-$messages['deletecontactconfirm'] = 'Ви дійстно бажаєте видалити вибрані контакти?';
-$messages['deletemessagesconfirm'] = 'Ви дійстно бажаєте видалити вибрані повідомлення?';
-$messages['deletefolderconfirm'] = 'Ви дійстно бажаєте видалити цю теку?';
-$messages['purgefolderconfirm'] = 'Ви дійстно бажаєте видалити всі повідомлення у цій теці?';
-$messages['formincomplete'] = 'Заповнені не усі поля';
-$messages['noemailwarning'] = 'Будь ласка, введіть коректну адресу електронної пошти';
-$messages['nonamewarning'] = 'Будь ласка, введіть ім`я';
-$messages['nopagesizewarning'] = 'Будь ласка, введіть розмір сторінки';
-$messages['norecipientwarning'] = 'Будь ласка, введіть ім`я отримувача';
-$messages['nosubjectwarning'] = 'Поле "Тема" не заповнено. Бажаєте заповнити його зараз?';
-$messages['nobodywarning'] = 'Відправити повідомлення без тексту?';
-$messages['notsentwarning'] = 'Повідомлення не було відправлено. Ви бажаєте відмовитись від відправки?';
-$messages['noldapserver'] = 'Будь ласка, виберіть LDAP сервер для пошука';
-$messages['nocontactsreturned'] = 'Контакти не знайдені';
-$messages['nosearchname'] = 'Будь ласка, введіть ім`я чи адресу E-Mail';
-$messages['searchsuccessful'] = 'Зайдено $nr повідомлень';
-$messages['searchnomatch'] = 'Повідомлень не знайдено';
-$messages['searching'] = 'Пошук...';
-$messages['checking'] = 'Перевірка...';
-$messages['nospellerrors'] = 'Орфографічних помилок не знайдено';
-$messages['folderdeleted'] = 'Тека видалена';
-$messages['deletedsuccessfully'] = 'Видалено успішно';
-$messages['converting'] = 'Видалення форматованого повідомлення...';
-$messages['messageopenerror'] = 'Неможливо завантажити повідомлення з серверу';
-$messages['fileuploaderror'] = 'Неможливо завантажити файл';
-$messages['filesizeerror'] = 'Завантажений файл більший за максимальний розмір у $size';
-$messages['copysuccess'] = 'Скопійовано $nr адрес';
-$messages['copyerror'] = 'Неможливо скопіювати адресу';
-$messages['sourceisreadonly'] = 'Дане джерело адрес лише для читання';
-$messages['errorsavingcontact'] = 'Неможливо зберегти адресу контакта';
-$messages['movingmessage'] = 'Переміщую повідомлення...';
-
-?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/uk/labels.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Natali Stasyuk <natali@onlineua.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$labels = array();
+$labels['welcome'] = 'Ласкаво просимо в $product!';
+$labels['username'] = 'Ім`я користувача';
+$labels['password'] = 'Пароль';
+$labels['server'] = 'Сервер';
+$labels['login'] = 'Увійти';
+$labels['logout'] = 'Вийти';
+$labels['mail'] = 'Пошта';
+$labels['settings'] = 'Налаштування';
+$labels['addressbook'] = 'Контакти';
+$labels['inbox'] = 'Вхідні';
+$labels['drafts'] = 'Чернетки';
+$labels['sent'] = 'Відправлені';
+$labels['trash'] = 'Смітник';
+$labels['junk'] = 'Спам';
+$labels['subject'] = 'Тема';
+$labels['from'] = 'Від';
+$labels['to'] = 'Кому';
+$labels['cc'] = 'Копія';
+$labels['bcc'] = 'Прихована';
+$labels['replyto'] = 'Зворотня адреса';
+$labels['date'] = 'Дата';
+$labels['size'] = 'Розмір';
+$labels['priority'] = 'Пріоритет';
+$labels['organization'] = 'Організація';
+$labels['reply-to'] = 'Зворотня адреса';
+$labels['mailboxlist'] = 'Теки';
+$labels['messagesfromto'] = 'Повідомлення з $from по $to із $count';
+$labels['messagenrof'] = 'Повідомлення $nr із $count';
+$labels['moveto'] = 'Перемістити у...';
+$labels['download'] = 'Завантажити';
+$labels['filename'] = 'Ім`я файлу';
+$labels['filesize'] = 'Розмір файлу';
+$labels['preferhtml'] = 'Переважно HTML';
+$labels['htmlmessage'] = 'Повідомлення HTML';
+$labels['prettydate'] = 'Красиві дати';
+$labels['addtoaddressbook'] = 'Додати до контактів';
+$labels['sun'] = 'Нд';
+$labels['mon'] = 'Пн';
+$labels['tue'] = 'Вт';
+$labels['wed'] = 'Ср';
+$labels['thu'] = 'Чт';
+$labels['fri'] = 'Пт';
+$labels['sat'] = 'Сб';
+$labels['sunday'] = 'Неділя';
+$labels['monday'] = 'Понеділок';
+$labels['tuesday'] = 'Вівторок';
+$labels['wednesday'] = 'Середа';
+$labels['thursday'] = 'Четвер';
+$labels['friday'] = 'П`ятниця';
+$labels['saturday'] = 'Субота';
+$labels['today'] = 'Сьогодні';
+$labels['checkmail'] = 'Перевірити пошту';
+$labels['writenewmessage'] = 'Нове повідомлення';
+$labels['replytomessage'] = 'Відповісти';
+$labels['replytoallmessage'] = 'Відповісти усім';
+$labels['forwardmessage'] = 'Переслати';
+$labels['deletemessage'] = 'У смітник';
+$labels['movemessagetotrash'] = 'Перемістити повідомлення у смітник';
+$labels['printmessage'] = 'Друкувати';
+$labels['previousmessage'] = 'Показати попереднє повідомлення';
+$labels['previousmessages'] = 'Попередня сторінка повідомлень';
+$labels['firstmessage'] = 'Показати перше повідомлення';
+$labels['firstmessages'] = 'Перша сторінка повідомлень';
+$labels['nextmessage'] = 'Показати наступне повідомлення';
+$labels['nextmessages'] = 'Наступна сторінка повідомлень';
+$labels['lastmessage'] = 'Показати останнє повідомлення';
+$labels['lastmessages'] = 'Остання сторінка повідомлень';
+$labels['backtolist'] = 'До переліку повідомлень';
+$labels['viewsource'] = 'Вихідний текст';
+$labels['select'] = 'Вибрати';
+$labels['all'] = 'Все';
+$labels['none'] = 'Нічого';
+$labels['unread'] = 'Непрочитані';
+$labels['compact'] = 'Стиснути';
+$labels['empty'] = 'Спустошити';
+$labels['purge'] = 'Очистити';
+$labels['quota'] = 'Квота';
+$labels['unknown'] = 'невідомо';
+$labels['unlimited'] = 'без обмеження';
+$labels['quicksearch'] = 'Швидкий пошук';
+$labels['resetsearch'] = 'Очистити пошук';
+$labels['compose'] = 'Написати повідомлення';
+$labels['savemessage'] = 'Зберегти чернетку';
+$labels['sendmessage'] = 'Відіслати зараз';
+$labels['addattachment'] = 'Додати вкладення';
+$labels['charset'] = 'Набір символів';
+$labels['editortype'] = 'Редактор';
+$labels['returnreceipt'] = 'Запит відповіді';
+$labels['checkspelling'] = 'Перевірити орфографію';
+$labels['resumeediting'] = 'Продовжити редагування';
+$labels['revertto'] = 'Відмінити правки';
+$labels['attachments'] = 'Вкладення';
+$labels['upload'] = 'Завантажити';
+$labels['close'] = 'Закрити';
+$labels['low'] = 'Низький';
+$labels['lowest'] = 'Найнижчий';
+$labels['normal'] = 'Нормальний';
+$labels['high'] = 'Високий';
+$labels['highest'] = 'Найвищий';
+$labels['nosubject'] = '(без теми)';
+$labels['showimages'] = 'Показати зображення';
+$labels['htmltoggle'] = 'HTML';
+$labels['plaintoggle'] = 'Звичайний текст';
+$labels['addcc'] = 'Додати Cc';
+$labels['addbcc'] = 'Додати Bcc';
+$labels['addreplyto'] = 'Додати Reply-To';
+$labels['name'] = 'Відображуване ім`я';
+$labels['firstname'] = 'Ім`я';
+$labels['surname'] = 'Прізвище';
+$labels['email'] = 'E-Mail';
+$labels['addcontact'] = 'Додати вибрані контакти до списку контактів';
+$labels['editcontact'] = 'Редагувати контакт';
+$labels['edit'] = 'Правка';
+$labels['cancel'] = 'Відміна';
+$labels['save'] = 'Зберегти';
+$labels['delete'] = 'Видалити';
+$labels['newcontact'] = 'Створити новий контакт';
+$labels['deletecontact'] = 'Видалити вибрані контакти';
+$labels['composeto'] = 'Створити повідомлення для вибранних контактів';
+$labels['contactsfromto'] = 'Контакти з $from по $to з $count';
+$labels['print'] = 'Друкувати';
+$labels['export'] = 'Експортувати';
+$labels['previouspage'] = 'Показати попередній';
+$labels['firstpage'] = 'Показати перший';
+$labels['nextpage'] = 'Показати наступний';
+$labels['lastpage'] = 'Показати останній';
+$labels['groups'] = 'Групи';
+$labels['personaladrbook'] = 'Персональні адреси';
+$labels['settingsfor'] = 'Налаштування для';
+$labels['preferences'] = 'Уподобання';
+$labels['userpreferences'] = 'Уподобання користувача';
+$labels['editpreferences'] = 'Редагувати уподобання користувача';
+$labels['identities'] = 'Профілі';
+$labels['manageidentities'] = 'Керування профілями';
+$labels['newidentity'] = 'Новий профіль';
+$labels['newitem'] = 'Новий';
+$labels['edititem'] = 'Правка';
+$labels['setdefault'] = 'Використовувати типово';
+$labels['language'] = 'Мова';
+$labels['timezone'] = 'Часовий пояс';
+$labels['pagesize'] = 'Рядків на сторінці';
+$labels['signature'] = 'Підпис';
+$labels['dstactive'] = 'Літній/зимовий час';
+$labels['htmleditor'] = 'Створювати повідомлення в HTML';
+$labels['htmlsignature'] = 'Підпис в HTML';
+$labels['previewpane'] = 'Показати панель перегляду';
+$labels['autosavedraft'] = 'Автозбереження чернетки';
+$labels['everynminutes'] = 'кожні $n хвилин';
+$labels['never'] = 'ніколи';
+$labels['folder'] = 'Тека';
+$labels['folders'] = 'Теки';
+$labels['foldername'] = 'Назва теки';
+$labels['subscribed'] = 'Підписані';
+$labels['create'] = 'Створити';
+$labels['createfolder'] = 'Створити нову теку';
+$labels['rename'] = 'Перейменувати';
+$labels['renamefolder'] = 'Перейменувати теку';
+$labels['deletefolder'] = 'Видалити теку';
+$labels['managefolders'] = 'Керування теками';
+$labels['sortby'] = 'Відсортувати за';
+$labels['sortasc'] = 'Сортувати за зростанням';
+$labels['sortdesc'] = 'Сортувати за спаданням';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php
+
+/*
+
+ +-----------------------------------------------------------------------+
+ | language/uk/messages.inc |
+ | |
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |
+ +-----------------------------------------------------------------------+
+ | Author: Natali Stasyuk <natali@onlineua.net> |
+ +-----------------------------------------------------------------------+
+
+ @version $Id$
+
+*/
+
+$messages = array();
+$messages['loginfailed'] = 'Невдала спроба входу';
+$messages['cookiesdisabled'] = 'Ваш переглядач не приймає cookie';
+$messages['sessionerror'] = 'Ваша сесія застаріла';
+$messages['imaperror'] = 'Невдале з`єднання з IMAP сервером';
+$messages['nomessagesfound'] = 'Повідомлень не знайдено';
+$messages['loggedout'] = 'Ваша сесія завершена. Всього найкращого!';
+$messages['mailboxempty'] = 'Поштова скринька порожня';
+$messages['loading'] = 'Завантаження...';
+$messages['loadingdata'] = 'Завантаження даних...';
+$messages['checkingmail'] = 'Перевірка нових повідомлень...';
+$messages['sendingmessage'] = 'Відправка повідомлень...';
+$messages['messagesent'] = 'Повідомлення відправлено';
+$messages['savingmessage'] = 'Збереження повідомлення...';
+$messages['messagesaved'] = 'Збережено в Чернетках';
+$messages['successfullysaved'] = 'Збережено';
+$messages['addedsuccessfully'] = 'Контакт успішно доданий до списку контактів';
+$messages['contactexists'] = 'Контакт з цією адресою e-mail вже існує';
+$messages['blockedimages'] = 'З метою безпеки завантаження зображень заблоковано';
+$messages['encryptedmessage'] = 'Повідомлення зашифровано і не може бути показано. Зверніться до адміністратора серверу.';
+$messages['nocontactsfound'] = 'Контакти не знайдені';
+$messages['contactnotfound'] = 'Запитаний контакт не знайдений';
+$messages['sendingfailed'] = 'Не вдалося відправити повідомлення';
+$messages['errorsaving'] = 'У процесі збереження трапилася помилка';
+$messages['errormoving'] = 'Не вдалося перемістити повідомлення';
+$messages['errordeleting'] = 'Не вдалося видалити повідомлення';
+$messages['deletecontactconfirm'] = 'Ви дійстно бажаєте видалити вибрані контакти?';
+$messages['deletemessagesconfirm'] = 'Ви дійстно бажаєте видалити вибрані повідомлення?';
+$messages['deletefolderconfirm'] = 'Ви дійстно бажаєте видалити цю теку?';
+$messages['purgefolderconfirm'] = 'Ви дійстно бажаєте видалити всі повідомлення у цій теці?';
+$messages['formincomplete'] = 'Заповнені не усі поля';
+$messages['noemailwarning'] = 'Будь ласка, введіть коректну адресу електронної пошти';
+$messages['nonamewarning'] = 'Будь ласка, введіть ім`я';
+$messages['nopagesizewarning'] = 'Будь ласка, введіть розмір сторінки';
+$messages['norecipientwarning'] = 'Будь ласка, введіть ім`я отримувача';
+$messages['nosubjectwarning'] = 'Поле "Тема" не заповнено. Бажаєте заповнити його зараз?';
+$messages['nobodywarning'] = 'Відправити повідомлення без тексту?';
+$messages['notsentwarning'] = 'Повідомлення не було відправлено. Ви бажаєте відмовитись від відправки?';
+$messages['noldapserver'] = 'Будь ласка, виберіть LDAP сервер для пошука';
+$messages['nocontactsreturned'] = 'Контакти не знайдені';
+$messages['nosearchname'] = 'Будь ласка, введіть ім`я чи адресу E-Mail';
+$messages['searchsuccessful'] = 'Зайдено $nr повідомлень';
+$messages['searchnomatch'] = 'Повідомлень не знайдено';
+$messages['searching'] = 'Пошук...';
+$messages['checking'] = 'Перевірка...';
+$messages['nospellerrors'] = 'Орфографічних помилок не знайдено';
+$messages['folderdeleted'] = 'Тека видалена';
+$messages['deletedsuccessfully'] = 'Видалено успішно';
+$messages['converting'] = 'Видалення форматованого повідомлення...';
+$messages['messageopenerror'] = 'Неможливо завантажити повідомлення з серверу';
+$messages['fileuploaderror'] = 'Неможливо завантажити файл';
+$messages['filesizeerror'] = 'Завантажений файл більший за максимальний розмір у $size';
+$messages['copysuccess'] = 'Скопійовано $nr адрес';
+$messages['copyerror'] = 'Неможливо скопіювати адресу';
+$messages['sourceisreadonly'] = 'Дане джерело адрес лише для читання';
+$messages['errorsavingcontact'] = 'Неможливо зберегти адресу контакта';
+$messages['movingmessage'] = 'Переміщую повідомлення...';
+
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/vn/labels.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Vinh Bui <bqvinh@buivinh.info> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$labels = array();\r
+\r
+// login page\r
+$labels['welcome'] = 'Xin mời sử dụng $product';\r
+$labels['username'] = 'Tên người dùng';\r
+$labels['password'] = 'Mật khẩu';\r
+$labels['server'] = 'Máy chủ?';\r
+$labels['login'] = 'Đăng nhập';\r
+\r
+// taskbar\r
+$labels['logout'] = 'Đăng xuất';\r
+$labels['mail'] = 'E-Mail';\r
+$labels['settings'] = 'Thiết lập';\r
+$labels['addressbook'] = 'Sổ địa chỉ';\r
+\r
+// mailbox names\r
+$labels['inbox'] = 'Inbox';\r
+$labels['drafts'] = 'Drafts';\r
+$labels['sent'] = 'Sent';\r
+$labels['trash'] = 'Trash';\r
+$labels['junk'] = 'Junk';\r
+\r
+// message listing\r
+$labels['subject'] = 'Tiêu đề';\r
+$labels['from'] = 'Người gửi';\r
+$labels['to'] = 'Người nhận';\r
+$labels['cc'] = 'Đồng nhận';\r
+$labels['bcc'] = 'Đồng nhận (2)';\r
+$labels['replyto'] = 'Trả lời vào';\r
+$labels['date'] = 'Ngày';\r
+$labels['size'] = 'D.Lượng';\r
+$labels['priority'] = 'Ưu tiên';\r
+$labels['organization'] = 'Cơ quan';\r
+\r
+// aliases\r
+$labels['reply-to'] = $labels['replyto'];\r
+\r
+$labels['mailboxlist'] = 'Thư mục';\r
+$labels['messagesfromto'] = 'Thư $from - $to / $count';\r
+$labels['messagenrof'] = 'Thư $nr / $count';\r
+\r
+$labels['moveto'] = 'chuyển đến...';\r
+$labels['download'] = 'tải xuống';\r
+\r
+$labels['filename'] = 'Tên file';\r
+$labels['filesize'] = 'Dung lượng';\r
+\r
+$labels['preferhtml'] = 'Dùng HTML';\r
+$labels['htmlmessage'] = 'Thư kiểu HTML';\r
+$labels['prettydate'] = 'Hiển thị ngày đầy đủ';\r
+\r
+$labels['addtoaddressbook'] = 'Thêm và sổ địa chỉ';\r
+\r
+// weekdays short\r
+$labels['sun'] = 'CN';\r
+$labels['mon'] = 'T2';\r
+$labels['tue'] = 'T3';\r
+$labels['wed'] = 'T4';\r
+$labels['thu'] = 'T5';\r
+$labels['fri'] = 'T6';\r
+$labels['sat'] = 'T7';\r
+\r
+// weekdays long\r
+$labels['sunday'] = 'Chủ nhật';\r
+$labels['monday'] = 'Thứ hai';\r
+$labels['tuesday'] = 'Thứ ba';\r
+$labels['wednesday'] = 'Thứ tư';\r
+$labels['thursday'] = 'Thứ năm';\r
+$labels['friday'] = 'Thứ sáu';\r
+$labels['saturday'] = 'Thứ bẩy';\r
+\r
+$labels['today'] = 'Hôm nay';\r
+\r
+// toolbar buttons\r
+$labels['checkmail'] = 'Kiểm tra thư mới';\r
+$labels['writenewmessage'] = 'Soạn thư mới';\r
+$labels['replytomessage'] = 'Trả lời thư';\r
+$labels['replytoallmessage'] = 'Trả lời tất cả';\r
+$labels['forwardmessage'] = 'Chuyển thư';\r
+$labels['deletemessage'] = 'Xóa thư';\r
+$labels['printmessage'] = 'In thư';\r
+$labels['previousmessages'] = 'Hiển thị các thư trước';\r
+$labels['nextmessages'] = 'Hiển thị các thư sau';\r
+$labels['backtolist'] = 'Trở về danh sách thư';\r
+$labels['viewsource'] = 'Hiển thị mã nguồn';\r
+\r
+$labels['select'] = 'Chọn';\r
+$labels['all'] = 'Toàn bộ';\r
+$labels['none'] = 'Bỏ chọn';\r
+$labels['unread'] = 'Chưa đọc';\r
+\r
+$labels['compact'] = 'Rút gọn';\r
+$labels['empty'] = 'Xóa rỗng';\r
+$labels['purge'] = 'Tối giản';\r
+\r
+$labels['quota'] = 'Hạn mức';\r
+$labels['unknown'] = 'không rõ';\r
+$labels['unlimited'] = 'không hạn chế';\r
+\r
+$labels['quicksearch'] = 'Tìm nhanh';\r
+$labels['resetsearch'] = 'Xóa bỏ tìm kiếm';\r
+\r
+// message compose\r
+$labels['compose'] = 'Soạn thư';\r
+$labels['savemessage'] = 'Lưu thư đang soạn';\r
+$labels['sendmessage'] = 'Gửi thư';\r
+$labels['addattachment'] = 'Gửi kèm';\r
+$labels['charset'] = 'Bộ ký tự';\r
+$labels['returnreceipt'] = 'Báo nhận';\r
+\r
+$labels['checkspelling'] = 'Kiểm tra chính tả';\r
+$labels['resumeediting'] = 'Soạn thảo';\r
+$labels['revertto'] = 'Chuyển về';\r
+\r
+$labels['attachments'] = 'Gửi kèm';\r
+$labels['upload'] = 'Tải lên';\r
+$labels['close'] = 'Đóng';\r
+\r
+$labels['low'] = 'Thấp';\r
+$labels['lowest'] = 'Thấp nhất';\r
+$labels['normal'] = 'Bình thường';\r
+$labels['high'] = 'Khẩn';\r
+$labels['highest'] = 'Thượng khẩn';\r
+\r
+$labels['nosubject'] = '(no subject)';\r
+$labels['showimages'] = 'Hiển thị ảnh';\r
+\r
+// address boook\r
+$labels['name'] = 'Tên hiển thị';\r
+$labels['firstname'] = 'Tên';\r
+$labels['surname'] = 'Họ';\r
+$labels['email'] = 'E-Mail';\r
+\r
+$labels['addcontact'] = 'Thêm mới địa chỉ';\r
+$labels['editcontact'] = 'Sửa địa chỉ cũ';\r
+\r
+$labels['edit'] = 'Sửa đổi';\r
+$labels['cancel'] = 'Ngưng';\r
+$labels['save'] = 'Lưu';\r
+$labels['delete'] = 'Xóa';\r
+\r
+$labels['newcontact'] = 'Thêm mới địa chỉ liên hệ';\r
+$labels['deletecontact'] = 'Xóa địa chỉ được chọn';\r
+$labels['composeto'] = 'Soạn thư cho';\r
+$labels['contactsfromto'] = 'Địa chỉ từ $from - $to / $count';\r
+$labels['print'] = 'In thư';\r
+$labels['export'] = 'Export';\r
+\r
+$labels['previouspage'] = 'Trang trước';\r
+$labels['nextpage'] = 'Trang tiếp';\r
+\r
+// LDAP search\r
+$labels['ldapsearch'] = 'LDAP directory search';\r
+\r
+$labels['ldappublicsearchname'] = 'Tên địa chỉ';\r
+$labels['ldappublicsearchtype'] = 'Khớp toàn bộ?';\r
+$labels['ldappublicserverselect'] = 'Chọn máy chủ';\r
+$labels['ldappublicsearchfield'] = 'Tìm trên';\r
+$labels['ldappublicsearchform'] = 'Tìm địa chỉ liên hệ';\r
+$labels['ldappublicsearch'] = 'Tìm kiếm';\r
+\r
+// settings\r
+$labels['settingsfor'] = 'Thiết lập cho';\r
+\r
+$labels['preferences'] = 'Tham số';\r
+$labels['userpreferences'] = 'Tham số người dùng';\r
+$labels['editpreferences'] = 'Sửa đổi';\r
+\r
+$labels['identities'] = 'Người dùng';\r
+$labels['manageidentities'] = 'Quản trị người dùng';\r
+$labels['newidentity'] = 'Người dùng mới';\r
+\r
+$labels['newitem'] = 'Thêm mới';\r
+$labels['edititem'] = 'Sửa đổi';\r
+\r
+$labels['setdefault'] = 'Thiết lập mặc định';\r
+$labels['language'] = 'Ngôn ngữ';\r
+$labels['timezone'] = 'Múi giờ';\r
+$labels['pagesize'] = 'Số dòng trên trang';\r
+$labels['signature'] = 'Chữ ký';\r
+$labels['dstactive'] = 'Giờ mùa hè';\r
+\r
+$labels['folder'] = 'Thư mục';\r
+$labels['folders'] = 'Thư mục';\r
+$labels['foldername'] = 'Tên thư mục';\r
+$labels['subscribed'] = 'Cho sử dụng';\r
+$labels['create'] = 'Tạo';\r
+$labels['createfolder'] = 'Tạo thư mục mới';\r
+$labels['rename'] = 'Đổi tên';\r
+$labels['renamefolder'] = 'Đổi tên thư mục';\r
+$labels['deletefolder'] = 'Xóa thư mục';\r
+$labels['managefolders'] = 'Quản trị thư mục';\r
+\r
+$labels['sortby'] = 'Sắp xếp';\r
+$labels['sortasc'] = 'Xếp tăng dần';\r
+$labels['sortdesc'] = 'Xếp giảm dần';\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+/*\r
+\r
+ +-----------------------------------------------------------------------+\r
+ | language/vn/messages.inc |\r
+ | |\r
+ | Language file of the RoundCube Webmail client |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Licensed under the GNU GPL |
+ | |\r
+ +-----------------------------------------------------------------------+\r
+ | Author: Vinh Bui <bqvinh@buivinh.info> |\r
+ +-----------------------------------------------------------------------+\r
+\r
+ @version $Id$\r
+\r
+*/\r
+\r
+$messages = array();\r
+$messages['loginfailed'] = 'Không đăng nhập được';\r
+$messages['cookiesdisabled'] = 'Trình duyệt không hỗ trợ cookies';\r
+$messages['sessionerror'] = 'Phiên làm việc không hợp lệ hoặc đã hết hạn';\r
+$messages['imaperror'] = 'Không kết nối được với máy chủ IMAP';\r
+$messages['nomessagesfound'] = 'Không có thư trong hòm thư này';\r
+$messages['loggedout'] = 'Phiên làm việc đã kết thúc. Hẹn gặp lại!';\r
+$messages['mailboxempty'] = 'Hộp thư rỗng';\r
+$messages['loading'] = 'Vui lòng chờ trong giây lát...';\r
+$messages['loadingdata'] = 'Đang nạp dữ liệu...';\r
+$messages['checkingmail'] = 'Kiểm tra thư mới...';\r
+$messages['sendingmessage'] = 'Đang gửi thư...';\r
+$messages['messagesent'] = 'Thư đã được gửi';\r
+$messages['savingmessage'] = 'Đang lưu thư...';\r
+$messages['messagesaved'] = 'Thư đã được gửi vào ngăn Drafts';\r
+$messages['successfullysaved'] = 'Đã lưu thành công';\r
+$messages['addedsuccessfully'] = 'Địa chỉ liên hệ đã được lưu';\r
+$messages['contactexists'] = 'Địa chỉ liên hệ với e-mail này đã được lưu trước đây';\r
+$messages['blockedimages'] = 'Để bảo vệ tính riêng tư, chức năng hiện ảnh từ xa bị cấm trong thư này.';\r
+$messages['encryptedmessage'] = 'Thư này được mã hóa, không thể xem. Rất tiếc!';\r
+$messages['nocontactsfound'] = 'Không tìm thấy địa chỉ liên hệ';\r
+$messages['sendingfailed'] = 'Không gửi được thư';\r
+$messages['errorsaving'] = 'Lỗi khi lưu';\r
+$messages['errormoving'] = 'Không thể chuyển được thư';\r
+$messages['errordeleting'] = 'Không thể xóa được thư';\r
+$messages['deletecontactconfirm'] = 'Xóa bỏ các địa chỉ được chọn?';\r
+$messages['deletefolderconfirm'] = 'Xóa bỏ thư mục này?';\r
+$messages['purgefolderconfirm'] = 'Xóa toàn bộ thư trong thư mục nào?';\r
+$messages['formincomplete'] = 'Mẫu chưa được điền xong';\r
+$messages['noemailwarning'] = 'Nhập địa chỉ email';\r
+$messages['nonamewarning'] = 'Nhập tên';\r
+$messages['nopagesizewarning'] = 'Nhập kích cỡ của trang';\r
+$messages['norecipientwarning'] = 'Thư cần có it nhất 1 người nhận';\r
+$messages['nosubjectwarning'] = 'Mục "Tiêu đề" chưa có. Điền tiêu đề ?';\r
+$messages['nobodywarning'] = 'Thư không nội dung, vẫn tiếp tục gửi?';\r
+$messages['notsentwarning'] = 'Thư chưa được gửi. Bỏ qua thư đang soạn?';\r
+$messages['noldapserver'] = 'Chọn máy chủ ldap server để tìm';\r
+$messages['nocontactsreturned'] = 'Không tìm thấy địa chỉ';\r
+$messages['nosearchname'] = 'Nhập địa chỉ hoặc email';\r
+$messages['searchsuccessful'] = '$nr messages found';\r
+$messages['searchnomatch'] = 'Không tìm thấy';\r
+$messages['searching'] = 'Tìm kiếm...';\r
+$messages['checking'] = 'Kiểm tra...';\r
+$messages['nospellerrors'] = 'Không có lỗi chính tả';\r
+$messages['folderdeleted'] = 'Thư mục đã được xóa';\r
+\r
+?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-\r
-/*\r
-\r
- +-----------------------------------------------------------------------+\r
- | language/vn/labels.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Vinh Bui <bqvinh@buivinh.info> |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$labels = array();\r
-\r
-// login page\r
-$labels['welcome'] = 'Xin mời sử dụng $product';\r
-$labels['username'] = 'Tên người dùng';\r
-$labels['password'] = 'Mật khẩu';\r
-$labels['server'] = 'Máy chủ?';\r
-$labels['login'] = 'Đăng nhập';\r
-\r
-// taskbar\r
-$labels['logout'] = 'Đăng xuất';\r
-$labels['mail'] = 'E-Mail';\r
-$labels['settings'] = 'Thiết lập';\r
-$labels['addressbook'] = 'Sổ địa chỉ';\r
-\r
-// mailbox names\r
-$labels['inbox'] = 'Inbox';\r
-$labels['drafts'] = 'Drafts';\r
-$labels['sent'] = 'Sent';\r
-$labels['trash'] = 'Trash';\r
-$labels['junk'] = 'Junk';\r
-\r
-// message listing\r
-$labels['subject'] = 'Tiêu đề';\r
-$labels['from'] = 'Người gửi';\r
-$labels['to'] = 'Người nhận';\r
-$labels['cc'] = 'Đồng nhận';\r
-$labels['bcc'] = 'Đồng nhận (2)';\r
-$labels['replyto'] = 'Trả lời vào';\r
-$labels['date'] = 'Ngày';\r
-$labels['size'] = 'D.Lượng';\r
-$labels['priority'] = 'Ưu tiên';\r
-$labels['organization'] = 'Cơ quan';\r
-\r
-// aliases\r
-$labels['reply-to'] = $labels['replyto'];\r
-\r
-$labels['mailboxlist'] = 'Thư mục';\r
-$labels['messagesfromto'] = 'Thư $from - $to / $count';\r
-$labels['messagenrof'] = 'Thư $nr / $count';\r
-\r
-$labels['moveto'] = 'chuyển đến...';\r
-$labels['download'] = 'tải xuống';\r
-\r
-$labels['filename'] = 'Tên file';\r
-$labels['filesize'] = 'Dung lượng';\r
-\r
-$labels['preferhtml'] = 'Dùng HTML';\r
-$labels['htmlmessage'] = 'Thư kiểu HTML';\r
-$labels['prettydate'] = 'Hiển thị ngày đầy đủ';\r
-\r
-$labels['addtoaddressbook'] = 'Thêm và sổ địa chỉ';\r
-\r
-// weekdays short\r
-$labels['sun'] = 'CN';\r
-$labels['mon'] = 'T2';\r
-$labels['tue'] = 'T3';\r
-$labels['wed'] = 'T4';\r
-$labels['thu'] = 'T5';\r
-$labels['fri'] = 'T6';\r
-$labels['sat'] = 'T7';\r
-\r
-// weekdays long\r
-$labels['sunday'] = 'Chủ nhật';\r
-$labels['monday'] = 'Thứ hai';\r
-$labels['tuesday'] = 'Thứ ba';\r
-$labels['wednesday'] = 'Thứ tư';\r
-$labels['thursday'] = 'Thứ năm';\r
-$labels['friday'] = 'Thứ sáu';\r
-$labels['saturday'] = 'Thứ bẩy';\r
-\r
-$labels['today'] = 'Hôm nay';\r
-\r
-// toolbar buttons\r
-$labels['checkmail'] = 'Kiểm tra thư mới';\r
-$labels['writenewmessage'] = 'Soạn thư mới';\r
-$labels['replytomessage'] = 'Trả lời thư';\r
-$labels['replytoallmessage'] = 'Trả lời tất cả';\r
-$labels['forwardmessage'] = 'Chuyển thư';\r
-$labels['deletemessage'] = 'Xóa thư';\r
-$labels['printmessage'] = 'In thư';\r
-$labels['previousmessages'] = 'Hiển thị các thư trước';\r
-$labels['nextmessages'] = 'Hiển thị các thư sau';\r
-$labels['backtolist'] = 'Trở về danh sách thư';\r
-$labels['viewsource'] = 'Hiển thị mã nguồn';\r
-\r
-$labels['select'] = 'Chọn';\r
-$labels['all'] = 'Toàn bộ';\r
-$labels['none'] = 'Bỏ chọn';\r
-$labels['unread'] = 'Chưa đọc';\r
-\r
-$labels['compact'] = 'Rút gọn';\r
-$labels['empty'] = 'Xóa rỗng';\r
-$labels['purge'] = 'Tối giản';\r
-\r
-$labels['quota'] = 'Hạn mức';\r
-$labels['unknown'] = 'không rõ';\r
-$labels['unlimited'] = 'không hạn chế';\r
-\r
-$labels['quicksearch'] = 'Tìm nhanh';\r
-$labels['resetsearch'] = 'Xóa bỏ tìm kiếm';\r
-\r
-// message compose\r
-$labels['compose'] = 'Soạn thư';\r
-$labels['savemessage'] = 'Lưu thư đang soạn';\r
-$labels['sendmessage'] = 'Gửi thư';\r
-$labels['addattachment'] = 'Gửi kèm';\r
-$labels['charset'] = 'Bộ ký tự';\r
-$labels['returnreceipt'] = 'Báo nhận';\r
-\r
-$labels['checkspelling'] = 'Kiểm tra chính tả';\r
-$labels['resumeediting'] = 'Soạn thảo';\r
-$labels['revertto'] = 'Chuyển về';\r
-\r
-$labels['attachments'] = 'Gửi kèm';\r
-$labels['upload'] = 'Tải lên';\r
-$labels['close'] = 'Đóng';\r
-\r
-$labels['low'] = 'Thấp';\r
-$labels['lowest'] = 'Thấp nhất';\r
-$labels['normal'] = 'Bình thường';\r
-$labels['high'] = 'Khẩn';\r
-$labels['highest'] = 'Thượng khẩn';\r
-\r
-$labels['nosubject'] = '(no subject)';\r
-$labels['showimages'] = 'Hiển thị ảnh';\r
-\r
-// address boook\r
-$labels['name'] = 'Tên hiển thị';\r
-$labels['firstname'] = 'Tên';\r
-$labels['surname'] = 'Họ';\r
-$labels['email'] = 'E-Mail';\r
-\r
-$labels['addcontact'] = 'Thêm mới địa chỉ';\r
-$labels['editcontact'] = 'Sửa địa chỉ cũ';\r
-\r
-$labels['edit'] = 'Sửa đổi';\r
-$labels['cancel'] = 'Ngưng';\r
-$labels['save'] = 'Lưu';\r
-$labels['delete'] = 'Xóa';\r
-\r
-$labels['newcontact'] = 'Thêm mới địa chỉ liên hệ';\r
-$labels['deletecontact'] = 'Xóa địa chỉ được chọn';\r
-$labels['composeto'] = 'Soạn thư cho';\r
-$labels['contactsfromto'] = 'Địa chỉ từ $from - $to / $count';\r
-$labels['print'] = 'In thư';\r
-$labels['export'] = 'Export';\r
-\r
-$labels['previouspage'] = 'Trang trước';\r
-$labels['nextpage'] = 'Trang tiếp';\r
-\r
-// LDAP search\r
-$labels['ldapsearch'] = 'LDAP directory search';\r
-\r
-$labels['ldappublicsearchname'] = 'Tên địa chỉ';\r
-$labels['ldappublicsearchtype'] = 'Khớp toàn bộ?';\r
-$labels['ldappublicserverselect'] = 'Chọn máy chủ';\r
-$labels['ldappublicsearchfield'] = 'Tìm trên';\r
-$labels['ldappublicsearchform'] = 'Tìm địa chỉ liên hệ';\r
-$labels['ldappublicsearch'] = 'Tìm kiếm';\r
-\r
-// settings\r
-$labels['settingsfor'] = 'Thiết lập cho';\r
-\r
-$labels['preferences'] = 'Tham số';\r
-$labels['userpreferences'] = 'Tham số người dùng';\r
-$labels['editpreferences'] = 'Sửa đổi';\r
-\r
-$labels['identities'] = 'Người dùng';\r
-$labels['manageidentities'] = 'Quản trị người dùng';\r
-$labels['newidentity'] = 'Người dùng mới';\r
-\r
-$labels['newitem'] = 'Thêm mới';\r
-$labels['edititem'] = 'Sửa đổi';\r
-\r
-$labels['setdefault'] = 'Thiết lập mặc định';\r
-$labels['language'] = 'Ngôn ngữ';\r
-$labels['timezone'] = 'Múi giờ';\r
-$labels['pagesize'] = 'Số dòng trên trang';\r
-$labels['signature'] = 'Chữ ký';\r
-$labels['dstactive'] = 'Giờ mùa hè';\r
-\r
-$labels['folder'] = 'Thư mục';\r
-$labels['folders'] = 'Thư mục';\r
-$labels['foldername'] = 'Tên thư mục';\r
-$labels['subscribed'] = 'Cho sử dụng';\r
-$labels['create'] = 'Tạo';\r
-$labels['createfolder'] = 'Tạo thư mục mới';\r
-$labels['rename'] = 'Đổi tên';\r
-$labels['renamefolder'] = 'Đổi tên thư mục';\r
-$labels['deletefolder'] = 'Xóa thư mục';\r
-$labels['managefolders'] = 'Quản trị thư mục';\r
-\r
-$labels['sortby'] = 'Sắp xếp';\r
-$labels['sortasc'] = 'Xếp tăng dần';\r
-$labels['sortdesc'] = 'Xếp giảm dần';\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-\r
-/*\r
-\r
- +-----------------------------------------------------------------------+\r
- | language/vn/messages.inc |\r
- | |\r
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |\r
- +-----------------------------------------------------------------------+\r
- | Author: Vinh Bui <bqvinh@buivinh.info> |\r
- +-----------------------------------------------------------------------+\r
-\r
- @version $Id$\r
-\r
-*/\r
-\r
-$messages = array();\r
-$messages['loginfailed'] = 'Không đăng nhập được';\r
-$messages['cookiesdisabled'] = 'Trình duyệt không hỗ trợ cookies';\r
-$messages['sessionerror'] = 'Phiên làm việc không hợp lệ hoặc đã hết hạn';\r
-$messages['imaperror'] = 'Không kết nối được với máy chủ IMAP';\r
-$messages['nomessagesfound'] = 'Không có thư trong hòm thư này';\r
-$messages['loggedout'] = 'Phiên làm việc đã kết thúc. Hẹn gặp lại!';\r
-$messages['mailboxempty'] = 'Hộp thư rỗng';\r
-$messages['loading'] = 'Vui lòng chờ trong giây lát...';\r
-$messages['loadingdata'] = 'Đang nạp dữ liệu...';\r
-$messages['checkingmail'] = 'Kiểm tra thư mới...';\r
-$messages['sendingmessage'] = 'Đang gửi thư...';\r
-$messages['messagesent'] = 'Thư đã được gửi';\r
-$messages['savingmessage'] = 'Đang lưu thư...';\r
-$messages['messagesaved'] = 'Thư đã được gửi vào ngăn Drafts';\r
-$messages['successfullysaved'] = 'Đã lưu thành công';\r
-$messages['addedsuccessfully'] = 'Địa chỉ liên hệ đã được lưu';\r
-$messages['contactexists'] = 'Địa chỉ liên hệ với e-mail này đã được lưu trước đây';\r
-$messages['blockedimages'] = 'Để bảo vệ tính riêng tư, chức năng hiện ảnh từ xa bị cấm trong thư này.';\r
-$messages['encryptedmessage'] = 'Thư này được mã hóa, không thể xem. Rất tiếc!';\r
-$messages['nocontactsfound'] = 'Không tìm thấy địa chỉ liên hệ';\r
-$messages['sendingfailed'] = 'Không gửi được thư';\r
-$messages['errorsaving'] = 'Lỗi khi lưu';\r
-$messages['errormoving'] = 'Không thể chuyển được thư';\r
-$messages['errordeleting'] = 'Không thể xóa được thư';\r
-$messages['deletecontactconfirm'] = 'Xóa bỏ các địa chỉ được chọn?';\r
-$messages['deletefolderconfirm'] = 'Xóa bỏ thư mục này?';\r
-$messages['purgefolderconfirm'] = 'Xóa toàn bộ thư trong thư mục nào?';\r
-$messages['formincomplete'] = 'Mẫu chưa được điền xong';\r
-$messages['noemailwarning'] = 'Nhập địa chỉ email';\r
-$messages['nonamewarning'] = 'Nhập tên';\r
-$messages['nopagesizewarning'] = 'Nhập kích cỡ của trang';\r
-$messages['norecipientwarning'] = 'Thư cần có it nhất 1 người nhận';\r
-$messages['nosubjectwarning'] = 'Mục "Tiêu đề" chưa có. Điền tiêu đề ?';\r
-$messages['nobodywarning'] = 'Thư không nội dung, vẫn tiếp tục gửi?';\r
-$messages['notsentwarning'] = 'Thư chưa được gửi. Bỏ qua thư đang soạn?';\r
-$messages['noldapserver'] = 'Chọn máy chủ ldap server để tìm';\r
-$messages['nocontactsreturned'] = 'Không tìm thấy địa chỉ';\r
-$messages['nosearchname'] = 'Nhập địa chỉ hoặc email';\r
-$messages['searchsuccessful'] = '$nr messages found';\r
-$messages['searchnomatch'] = 'Không tìm thấy';\r
-$messages['searching'] = 'Tìm kiếm...';\r
-$messages['checking'] = 'Kiểm tra...';\r
-$messages['nospellerrors'] = 'Không có lỗi chính tả';\r
-$messages['folderdeleted'] = 'Thư mục đã được xóa';\r
-\r
-?>
\ No newline at end of file
/*
- +-----------------------------------------------------------------------+
- | localization/zh_CN/labels.inc |
- | |
- | Language file of the RoundCube Webmail client |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- +-----------------------------------------------------------------------+
- | Author: Xue zhong sheng <xue.zhongsheng@gmail.com> |
- +-----------------------------------------------------------------------+
++-----------------------------------------------------------------------+
+| localization/zh_CN/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+| Licensed under the GNU GPL |
+| |
++-----------------------------------------------------------------------+
+| Author: Xue zhong sheng <xue.zhongsheng@gmail.com> |
+| Zhang Huang bin <michaelbibby@gmail.com> |
++-----------------------------------------------------------------------+
- @version $Id: labels.inc 1255 2008-04-05 12:49:21Z thomasb $
+@version $Id: labels.inc 1428 2008-05-26 17:18:31Z alec $
*/
$labels['thursday'] = '星期四';
$labels['friday'] = '星期五';
$labels['saturday'] = '星期六';
+$labels['jan'] = '一月';
+$labels['feb'] = '二月';
+$labels['mar'] = '三月';
+$labels['apr'] = '四月';
+$labels['may'] = '五月';
+$labels['jun'] = '六月';
+$labels['jul'] = '七月';
+$labels['aug'] = '八月';
+$labels['sep'] = '九月';
+$labels['oct'] = '十月';
+$labels['nov'] = '十一月';
+$labels['dec'] = '十二月';
+$labels['longjan'] = '一月';
+$labels['longfeb'] = '二月';
+$labels['longmar'] = '三月';
+$labels['longapr'] = '四月';
+$labels['longmay'] = '五月';
+$labels['longjun'] = '六月';
+$labels['longjul'] = '七月';
+$labels['longaug'] = '八月';
+$labels['longsep'] = '九月';
+$labels['longoct'] = '十月';
+$labels['longnov'] = '十一月';
+$labels['longdec'] = '十二月';
$labels['today'] = '今日';
$labels['checkmail'] = '检查邮件';
$labels['writenewmessage'] = '写新邮件';
$labels['replytoallmessage'] = '全部回复';
$labels['forwardmessage'] = '转发';
$labels['deletemessage'] = '删除';
+$labels['movemessagetotrash'] = '移动邮件到回收站';
$labels['printmessage'] = '打印';
$labels['previousmessage'] = '上一封';
$labels['previousmessages'] = '上一页';
$labels['lastmessages'] = '最后一页';
$labels['backtolist'] = '返回邮件列表';
$labels['viewsource'] = '显示邮件原文';
+$labels['markmessages'] = '标记邮件';
+$labels['markread'] = '已读';
+$labels['markunread'] = '未读';
$labels['select'] = '选择';
$labels['all'] = '全部';
$labels['none'] = '无';
$labels['showimages'] = '显示图片';
$labels['htmltoggle'] = 'HTML';
$labels['plaintoggle'] = '纯文本';
+$labels['addcc'] = '添加抄送';
+$labels['addbcc'] = '添加暗送';
+$labels['addreplyto'] = '添加回复';
+$labels['mdnrequest'] = '发件人要求在您阅读这封邮件时发送通知。您是否希望通知发件人?';
+$labels['receiptread'] = '发送回执(已读)';
+$labels['yourmessage'] = '这是您的邮件回执';
+$labels['receiptnote'] = '注意:回执只表示邮件在收件人的电脑上被打开过,不表示收件人已经阅读或已理解邮件的内容。';
$labels['name'] = '显示名称';
$labels['firstname'] = '名称';
$labels['surname'] = '姓氏';
$labels['htmleditor'] = '使用HTML编辑器';
$labels['htmlsignature'] = '使用HTML签名';
$labels['previewpane'] = '显示预览窗口';
+$labels['logoutclear'] = '退出时清空回收站';
+$labels['logoutcompact'] = '退出时压缩收件箱';
+$labels['uisettings'] = '用户界面';
+$labels['serversettings'] = '服务器设置';
+$labels['mailboxview'] = '邮箱查看';
+$labels['mdnrequests'] = '发件人通知';
+$labels['askuser'] = '询问用户';
+$labels['autosend'] = '自动发送';
+$labels['ignore'] = '乎略';
+$labels['readwhendeleted'] = '删除后标记为已读';
+$labels['flagfordeletion'] = '标记邮件为已删除而不是实际删除';
$labels['autosavedraft'] = '自动保存到草稿箱';
$labels['everynminutes'] = '第 $n 分钟';
$labels['never'] = '从不';
$labels['folders'] = '邮件夹';
$labels['foldername'] = '邮件夹名称';
$labels['subscribed'] = '已订阅';
+$labels['messagecount'] = '邮件数量';
$labels['create'] = '建立';
$labels['createfolder'] = '建立新邮件夹';
$labels['rename'] = '重命名';
| |
+-----------------------------------------------------------------------+
| Author: Xue zhong sheng <xue.zhongsheng@gmail.com> |
+ | Zhang Huang bin <michaelbibby@gmail.com> |
+-----------------------------------------------------------------------+
- @version $Id: messages.inc 1255 2008-04-05 12:49:21Z thomasb $
+ @version $Id: messages.inc 1415 2008-05-21 13:23:00Z alec $
*/
| Ting-Hung Chiu <earrl@mmlab.cse.yzu.edu.tw> |
+-----------------------------------------------------------------------+
- @version $Id: labels.inc 1086 2008-02-15 05:43:32Z tomekp $
+ @version $Id: labels.inc 1277 2008-04-10 10:01:46Z alec $
*/
$labels['inbox'] = '信件匣';
$labels['drafts'] = '草稿匣';
$labels['sent'] = '寄件備份';
-$labels['trash'] = '垃圾é\83µä»¶';
-$labels['junk'] = '垃圾桶';
+$labels['trash'] = '垃圾桶';
+$labels['junk'] = '垃圾é\83µä»¶';
$labels['subject'] = '主旨';
$labels['from'] = '寄件者';
$labels['to'] = '收件者';
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: delete.inc 573 2007-05-18 11:29:25Z thomasb $
+ $Id: delete.inc 1361 2008-05-07 22:16:00Z richs $
*/
-if (($cid = get_input_value('_cid', RCUBE_INPUT_POST)) && preg_match('/^[0-9]+(,[0-9]+)*$/', $cid))
+if (($cid = get_input_value('_cid', RCUBE_INPUT_POST)) &&
+ (preg_match('/^[0-9]+(,[0-9]+)*$/', $cid) ||
+ preg_match('/^[a-zA-Z0-9=]+(,[a-zA-Z0-9=]+)*$/', $cid))
+ )
{
$deleted = $CONTACTS->delete($cid);
if (!$deleted)
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: edit.inc 543 2007-04-28 18:07:12Z thomasb $
+ $Id: edit.inc 1361 2008-05-07 22:16:00Z richs $
*/
function rcmail_contact_editform($attrib)
{
- global $CONTACTS, $OUTPUT;
+ global $RCMAIL, $CONTACTS, $OUTPUT;
// check if we have a valid result
- if ($GLOBALS['_action'] != 'add' && !(($result = $CONTACTS->get_result()) && ($record = $result->first())))
+ if ($RCMAIL->action != 'add' && !(($result = $CONTACTS->get_result()) && ($record = $result->first())))
{
$OUTPUT->show_message('contactnotfound');
return false;
// similar function as in /steps/settings/edit_identity.inc
function get_form_tags($attrib)
{
- global $CONTACTS, $OUTPUT, $EDIT_FORM, $SESS_HIDDEN_FIELD;
+ global $CONTACTS, $EDIT_FORM, $RCMAIL;
$result = $CONTACTS->get_result();
$form_start = '';
if (!strlen($EDIT_FORM))
{
- $hiddenfields = new hiddenfield(array('name' => '_task', 'value' => $GLOBALS['_task']));
+ $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $RCMAIL->task));
$hiddenfields->add(array('name' => '_action', 'value' => 'save', 'source' => get_input_value('_source', RCUBE_INPUT_GPC)));
+ $hiddenfields->add(array('name' => '_source', 'value' => get_input_value('_source', RCUBE_INPUT_GPC)));
if (($result = $CONTACTS->get_result()) && ($record = $result->first()))
$hiddenfields->add(array('name' => '_cid', 'value' => $record['ID']));
- $form_start = !strlen($attrib['form']) ? '<form name="form" action="./" method="post">' : '';
- $form_start .= "\n$SESS_HIDDEN_FIELD\n";
+ $form_start = !strlen($attrib['form']) ? $RCMAIL->output->form_tag(array('name' => "form", 'method' => "post")) : '';
$form_start .= $hiddenfields->show();
}
$form_name = strlen($attrib['form']) ? $attrib['form'] : 'form';
if (!strlen($EDIT_FORM))
- $OUTPUT->add_gui_object('editform', $form_name);
+ $RCMAIL->output->add_gui_object('editform', $form_name);
$EDIT_FORM = $form_name;
- return array($form_start, $form_end);
+ return array($form_start, $form_end);
}
if (!$CONTACTS->get_result() && template_exists('addcontact'))
- parse_template('addcontact');
+ $OUTPUT->send('addcontact');
// this will be executed if no template for addcontact exists
-parse_template('editcontact');
-?>
\ No newline at end of file
+$OUTPUT->send('editcontact');
+?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: func.inc 930 2007-11-25 17:34:19Z thomasb $
+ $Id: func.inc 1412 2008-05-21 07:45:54Z alec $
*/
-require_once('include/rcube_contacts.inc');
-require_once('include/rcube_ldap.inc');
-
// instantiate a contacts object according to the given source
if (($source = get_input_value('_source', RCUBE_INPUT_GPC)) && isset($CONFIG['ldap_public'][$source]))
$CONTACTS = new rcube_ldap($CONFIG['ldap_public'][$source]);
-else
- $CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']);
+else if (strtolower($CONFIG['address_book_type']) == 'ldap') {
+ // Get the first LDAP address book.
+ $source = key((array)$CONFIG['ldap_public']);
+ $prop = current((array)$CONFIG['ldap_public']);
+ $CONTACTS = new rcube_ldap($prop);
+} else {
+ $CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']);
+} // end else
$CONTACTS->set_pagesize($CONFIG['pagesize']);
$OUTPUT->set_env('readonly', $CONTACTS->readonly, false);
// add list of address sources to client env
-$js_list = array("0" => array('id' => 0, 'readonly' => false));
+$js_list = array();
+if (strtolower($CONFIG['address_book_type']) != 'ldap') {
+ // We are using the DB address book, add it.
+ $js_list = array("0" => array('id' => 0, 'readonly' => false));
+} // end if
foreach ((array)$CONFIG['ldap_public'] as $id => $prop)
- $js_list[$id] = array('id' => $id, 'readonly' => !$prop['writeable']);
+ $js_list[$id] = array('id' => $id, 'readonly' => !$prop['writable']);
$OUTPUT->set_env('address_sources', $js_list);
// allow the following attributes to be added to the <ul> tag
$out = '<ul' . create_attrib_string($attrib, array('style', 'class', 'id')) . ">\n";
- $out .= sprintf($line_templ,
- 'rcmli'.$local_id,
- !$current ? 'selected' : '',
- Q(rcmail_url('list', array('_source' => 0))),
- JS_OBJECT_NAME,
- $local_id,
- JS_OBJECT_NAME,
- $local_id,
- JS_OBJECT_NAME,
- $local_id,
- JS_OBJECT_NAME,
- $local_id,
- rcube_label('personaladrbook'));
+ if (strtolower($CONFIG['address_book_type']) != 'ldap') {
+ $out .= sprintf($line_templ,
+ 'rcmli'.$local_id,
+ !$current ? 'selected' : '',
+ Q(rcmail_url('list', array('_source' => 0))),
+ JS_OBJECT_NAME,
+ $local_id,
+ JS_OBJECT_NAME,
+ $local_id,
+ JS_OBJECT_NAME,
+ $local_id,
+ JS_OBJECT_NAME,
+ $local_id,
+ rcube_label('personaladrbook'));
+ } // end if
+ else {
+ // DB address book not used, see if a source is set, if not use the
+ // first LDAP directory.
+ if (!$current) {
+ $current = key((array)$CONFIG['ldap_public']);
+ } // end if
+ } // end else
foreach ((array)$CONFIG['ldap_public'] as $id => $prop)
{
// format each col
foreach ($a_show_cols as $col)
- $a_row_cols[$col] = $row[$col];
+ $a_row_cols[$col] = Q($row[$col]);
$OUTPUT->command($prefix.'add_contact_row', $row['ID'], $a_row_cols);
}
return $out;
}
-
+
+$OUTPUT->set_pagetitle(rcube_label('addressbook'));
// register UI objects
$OUTPUT->add_handlers(array(
'addresslist' => 'rcmail_contacts_list',
'addressframe' => 'rcmail_contact_frame',
'recordscountdisplay' => 'rcmail_rowcount_display',
- 'searchform' => 'rcmail_search_form'
+ 'searchform' => array($OUTPUT, 'search_form')
));
?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: save.inc 638 2007-07-03 17:25:05Z thomasb $
+ $Id: save.inc 1407 2008-05-19 17:47:45Z thomasb $
*/
}
// check input
-if ((!get_input_value('_name', RCUBE_INPUT_POST) || !get_input_value('_email', RCUBE_INPUT_POST)) && $_framed)
+if ((!get_input_value('_name', RCUBE_INPUT_POST) || !get_input_value('_email', RCUBE_INPUT_POST)))
{
$OUTPUT->show_message('formincomplete', 'warning');
rcmail_overwrite_action(empty($_POST['_cid']) ? 'add' : 'show');
{
if ($CONTACTS->update($cid, $a_record))
{
- if ($_framed)
- {
- // define list of cols to be displayed
- $a_js_cols = array();
- $record = $CONTACTS->get_record($cid, true);
-
- foreach (array('name', 'email') as $col)
- $a_js_cols[] = (string)$record[$col];
-
- // update the changed col in list
- $OUTPUT->command('parent.update_contact_row', $cid, $a_js_cols);
- }
+ // define list of cols to be displayed
+ $a_js_cols = array();
+ $record = $CONTACTS->get_record($cid, true);
+
+ foreach (array('name', 'email') as $col)
+ $a_js_cols[] = (string)$record[$col];
+
+ // update the changed col in list
+ $OUTPUT->command('parent.update_contact_row', $cid, $a_js_cols);
// show confirmation
$OUTPUT->show_message('successfullysaved', 'confirmation');
// insert record and send response
if ($insert_id = $CONTACTS->insert($a_record))
{
- if ($_framed)
- {
- // add contact row or jump to the page where it should appear
- $CONTACTS->reset();
- $result = $CONTACTS->search($CONTACTS->primary_key, $insert_id);
-
- rcmail_js_contacts_list($result, 'parent.');
- $OUTPUT->command('parent.contact_list.select', $insert_id);
-
- // update record count display
- $CONTACTS->reset();
- $OUTPUT->command('parent.set_rowcount', rcmail_get_rowcount_text());
- }
+ // add contact row or jump to the page where it should appear
+ $CONTACTS->reset();
+ $result = $CONTACTS->search($CONTACTS->primary_key, $insert_id);
+
+ rcmail_js_contacts_list($result, 'parent.');
+ $OUTPUT->command('parent.contact_list.select', $insert_id);
+
+ // update record count display
+ $CONTACTS->reset();
+ $OUTPUT->command('parent.set_rowcount', rcmail_get_rowcount_text());
// show confirmation
$OUTPUT->show_message('successfullysaved', 'confirmation');
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: error.inc 850 2007-10-03 00:13:32Z ihug $
+ $Id: error.inc 1347 2008-04-30 14:07:29Z thomasb $
*/
if (template_exists('error'))
{
- $OUTPUT->scripts = array();
- $OUTPUT->script_files = array();
- parse_template('error');
+ $OUTPUT->reset();
+ $OUTPUT->send('error');
}
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: addcontact.inc 638 2007-07-03 17:25:05Z thomasb $
+ $Id: addcontact.inc 1365 2008-05-08 08:22:18Z alec $
*/
-require_once('include/rcube_contacts.inc');
-
$done = false;
if (!empty($_POST['_address']))
{
- $CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']);
+ $CONTACTS = array();
+ if (strtolower($CONFIG['address_book_type']) == 'ldap') {
+ // Use the first writable LDAP address book.
+ foreach ($CONFIG["ldap_public"] as $id => $prop) {
+ if ($prop["writable"]) {
+ $CONTACTS = new rcube_ldap($prop);
+ break;
+ } // end if
+ } // end foreach
+ } // end if
+ else {
+ $CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']);
+ } // end else
$contact_arr = $IMAP->decode_address_list(get_input_value('_address', RCUBE_INPUT_POST, true), 1, false);
if (!empty($contact_arr[1]['mailto']))
$OUTPUT->show_message('errorsavingcontact', 'warning');
$OUTPUT->send();
-?>
\ No newline at end of file
+?>
$OUTPUT->set_env('messagecount', $IMAP->messagecount());
$OUTPUT->command('set_unread_count', $mbox_name, $unread_count, ($mbox_name == 'INBOX'));
$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text());
- $OUTPUT->command('set_quota', $IMAP->get_quota());
+ $OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota()));
// add new message headers to list
$a_headers = array();
| program/steps/mail/compose.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: compose.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: compose.inc 1493 2008-06-08 18:17:09Z alec $
*/
-require_once('Mail/mimeDecode.php');
-require_once('lib/html2text.inc');
-
// define constants for message compose mode
define('RCUBE_COMPOSE_REPLY', 0x0106);
define('RCUBE_COMPOSE_FORWARD', 0x0107);
// remove an attachment
-if ($_action=='remove-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_POST['_file'], $regs))
+if ($RCMAIL->action=='remove-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_POST['_file'], $regs))
{
$id = $regs[1];
if (is_array($_SESSION['compose']['attachments'][$id]))
}
}
-if ($_action=='display-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_GET['_file'], $regs))
+if ($RCMAIL->action=='display-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_GET['_file'], $regs))
{
$id = $regs[1];
if (is_array($_SESSION['compose']['attachments'][$id]))
else if ($msg_uid = get_input_value('_draft_uid', RCUBE_INPUT_GET))
$compose_mode = RCUBE_COMPOSE_DRAFT;
-
if (!empty($msg_uid))
{
// similar as in program/steps/mail/show.inc
- $MESSAGE = array('UID' => $msg_uid);
- $MESSAGE['headers'] = &$IMAP->get_headers($msg_uid);
- $MESSAGE['structure'] = &$IMAP->get_structure($msg_uid);
+ $MESSAGE = new rcube_message($msg_uid);
- if (!empty($MESSAGE['headers']->charset))
- $IMAP->set_charset($MESSAGE['headers']->charset);
+ if (!empty($MESSAGE->headers->charset))
+ $IMAP->set_charset($MESSAGE->headers->charset);
- $MESSAGE['subject'] = $IMAP->decode_header($MESSAGE['headers']->subject);
- $MESSAGE['parts'] = $IMAP->get_mime_numbers($MESSAGE['structure']);
-
if ($compose_mode == RCUBE_COMPOSE_REPLY)
{
$_SESSION['compose']['reply_uid'] = $msg_uid;
- $_SESSION['compose']['reply_msgid'] = $MESSAGE['headers']->messageID;
- $_SESSION['compose']['references'] = trim($MESSAGE['headers']->references . " " . $MESSAGE['headers']->messageID);
+ $_SESSION['compose']['reply_msgid'] = $MESSAGE->headers->messageID;
+ $_SESSION['compose']['references'] = trim($MESSAGE->headers->references . " " . $MESSAGE->headers->messageID);
if (!empty($_GET['_all']))
- $MESSAGE['reply_all'] = 1;
+ $MESSAGE->reply_all = 1;
}
else if ($compose_mode == RCUBE_COMPOSE_FORWARD)
{
}
$allow_attrib = array('id', 'class', 'style', 'cols', 'rows', 'tabindex');
- $field_type = 'textarea';
+ $field_type = 'html_textarea';
break;
case 'replyto':
case 'reply-to':
$fname = '_replyto';
$allow_attrib = array('id', 'class', 'style', 'size', 'tabindex');
- $field_type = 'textfield';
+ $field_type = 'html_inputfield';
break;
}
else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY)
{
// get recipent address(es) out of the message headers
- if ($header=='to' && !empty($MESSAGE['headers']->replyto))
- $fvalue = $MESSAGE['headers']->replyto;
+ if ($header=='to' && !empty($MESSAGE->headers->replyto))
+ $fvalue = $MESSAGE->headers->replyto;
- else if ($header=='to' && !empty($MESSAGE['headers']->from))
- $fvalue = $MESSAGE['headers']->from;
+ else if ($header=='to' && !empty($MESSAGE->headers->from))
+ $fvalue = $MESSAGE->headers->from;
// add recipent of original message if reply to all
- else if ($header=='cc' && !empty($MESSAGE['reply_all']))
+ else if ($header=='cc' && !empty($MESSAGE->reply_all))
{
- if ($v = $MESSAGE['headers']->to)
+ if ($v = $MESSAGE->headers->to)
$fvalue .= $v;
- if ($v = $MESSAGE['headers']->cc)
+ if ($v = $MESSAGE->headers->cc)
$fvalue .= (!empty($fvalue) ? ', ' : '') . $v;
}
$fvalue = '';
foreach ($to_addresses as $addr_part)
{
- if (!empty($addr_part['mailto']) && !in_array($addr_part['mailto'], $sa_recipients) && (!$MESSAGE['FROM'] || !in_array($addr_part['mailto'], $MESSAGE['FROM'])))
+ if (!empty($addr_part['mailto']) && !in_array($addr_part['mailto'], $sa_recipients) && (!$MESSAGE->compose_from || !in_array($addr_part['mailto'], $MESSAGE->compose_from)))
{
$fvalue .= (strlen($fvalue) ? ', ':'').$addr_part['string'];
$sa_recipients[] = $addr_part['mailto'];
else if ($header && $compose_mode == RCUBE_COMPOSE_DRAFT)
{
// get drafted headers
- if ($header=='to' && !empty($MESSAGE['headers']->to))
- $fvalue = $IMAP->decode_header($MESSAGE['headers']->to);
+ if ($header=='to' && !empty($MESSAGE->headers->to))
+ $fvalue = $MESSAGE->get_header('to');
- if ($header=='cc' && !empty($MESSAGE['headers']->cc))
- $fvalue = $IMAP->decode_header($MESSAGE['headers']->cc);
+ if ($header=='cc' && !empty($MESSAGE->headers->cc))
+ $fvalue = $MESSAGE->get_header('cc');
- if ($header=='bcc' && !empty($MESSAGE['headers']->bcc))
- $fvalue = $IMAP->decode_header($MESSAGE['headers']->bcc);
+ if ($header=='bcc' && !empty($MESSAGE->headers->bcc))
+ $fvalue = $MESSAGE->get_header('bcc');
}
// create teaxtarea object
$input = new $field_type($field_attrib);
- $out = $input->show($fvalue);
+ $out = $input->show($fvalue);
}
if ($form_start)
// extract all recipients of the reply-message
$a_recipients = array();
- if ($compose_mode == RCUBE_COMPOSE_REPLY && is_object($MESSAGE['headers']))
+ if ($compose_mode == RCUBE_COMPOSE_REPLY && is_object($MESSAGE->headers))
{
- $MESSAGE['FROM'] = array();
+ $MESSAGE->compose_from = array();
- $a_to = $IMAP->decode_address_list($MESSAGE['headers']->to);
+ $a_to = $IMAP->decode_address_list($MESSAGE->headers->to);
foreach ($a_to as $addr)
{
if (!empty($addr['mailto']))
$a_recipients[] = $addr['mailto'];
}
- if (!empty($MESSAGE['headers']->cc))
+ if (!empty($MESSAGE->headers->cc))
{
- $a_cc = $IMAP->decode_address_list($MESSAGE['headers']->cc);
+ $a_cc = $IMAP->decode_address_list($MESSAGE->headers->cc);
foreach ($a_cc as $addr)
{
if (!empty($addr['mailto']))
$a_signatures = array();
$field_attrib['onchange'] = JS_OBJECT_NAME.".change_identity(this)";
- $select_from = new select($field_attrib);
+ $select_from = new html_select($field_attrib);
while ($sql_arr = $DB->fetch_assoc($sql_result))
{
{
$h2t = new html2text($a_signatures[$identity_id]['text'], false, false);
$plainTextPart = $h2t->get_text();
- $a_signatures[$identity_id]['plain_text'] = trim($plainTextPart);
+ $a_signatures[$identity_id]['plain_text'] = trim(html_entity_decode($plainTextPart, ENT_NOQUOTES, 'UTF-8'));
}
}
if (in_array($sql_arr['email'], $a_recipients))
$from_id = $sql_arr['identity_id'];
- if ($compose_mode == RCUBE_COMPOSE_REPLY && is_array($MESSAGE['FROM']))
- $MESSAGE['FROM'][] = $sql_arr['email'];
+ if ($compose_mode == RCUBE_COMPOSE_REPLY && is_array($MESSAGE->compose_from))
+ $MESSAGE->compose_from[] = $sql_arr['email'];
- if ($compose_mode == RCUBE_COMPOSE_DRAFT && strstr($MESSAGE['headers']->from, $sql_arr['email']))
+ if ($compose_mode == RCUBE_COMPOSE_DRAFT && strstr($MESSAGE->headers->from, $sql_arr['email']))
$from_id = $sql_arr['identity_id'];
}
}
else
{
- $input_from = new textfield($field_attrib);
+ $input_from = new html_inputfield($field_attrib);
$out = $input_from->show($_POST['_from']);
}
function rcmail_compose_body($attrib)
{
- global $CONFIG, $OUTPUT, $MESSAGE, $compose_mode;
+ global $RCMAIL, $CONFIG, $OUTPUT, $MESSAGE, $compose_mode;
list($form_start, $form_end) = get_form_tags($attrib);
unset($attrib['form']);
// use posted message body
if (!empty($_POST['_message']))
+ {
+ $body = get_input_value('_message', RCUBE_INPUT_POST, true);
+ }
+ else if ($compose_mode)
+ {
+ if ($isHtml && $MESSAGE->has_html_part())
{
- $body = get_input_value('_message', RCUBE_INPUT_POST, TRUE);
- }
- // compose reply-body
- else if ($compose_mode == RCUBE_COMPOSE_REPLY)
- {
- $hasHtml = rcmail_has_html_part($MESSAGE['parts']);
- if ($hasHtml && $CONFIG['htmleditor'])
- {
- $body = rcmail_first_html_part($MESSAGE);
+ $body = $MESSAGE->first_html_part();
$isHtml = true;
- }
- else
- {
- $body = rcmail_first_text_part($MESSAGE);
- $isHtml = false;
- }
-
- $body = rcmail_create_reply_body($body, $isHtml);
}
- // forward message body inline
- else if ($compose_mode == RCUBE_COMPOSE_FORWARD)
- {
- $hasHtml = rcmail_has_html_part($MESSAGE['parts']);
- if ($hasHtml && $CONFIG['htmleditor'])
- {
- $body = rcmail_first_html_part($MESSAGE);
- $isHtml = true;
- }
else
- {
- $body = rcmail_first_text_part($MESSAGE);
- $isHtml = false;
- }
-
- $body = rcmail_create_forward_body($body, $isHtml);
- }
- else if ($compose_mode == RCUBE_COMPOSE_DRAFT)
{
- $hasHtml = rcmail_has_html_part($MESSAGE['parts']);
- if ($hasHtml && $CONFIG['htmleditor'])
- {
- $body = rcmail_first_html_part($MESSAGE);
- $isHtml = true;
- }
- else
- {
- $body = rcmail_first_text_part($MESSAGE);
+ $body = $MESSAGE->first_text_part();
$isHtml = false;
- }
-
- $body = rcmail_create_draft_body($body, $isHtml);
}
+
+ // compose reply-body
+ if ($compose_mode == RCUBE_COMPOSE_REPLY)
+ $body = rcmail_create_reply_body($body, $isHtml);
+ // forward message body inline
+ else if ($compose_mode == RCUBE_COMPOSE_FORWARD)
+ $body = rcmail_create_forward_body($body, $isHtml);
+ // load draft message body
+ else if ($compose_mode == RCUBE_COMPOSE_DRAFT)
+ $body = rcmail_create_draft_body($body, $isHtml);
+ }
+
+ $tinylang = substr($_SESSION['language'], 0, 2);
+ if (!file_exists('program/js/tiny_mce/langs/'.$tinylang.'.js'))
+ $tinylang = 'en';
$OUTPUT->include_script('tiny_mce/tiny_mce.js');
$OUTPUT->include_script("editor.js");
- $OUTPUT->add_script('rcmail_editor_init("$__skin_path");');
+ $OUTPUT->add_script('rcmail_editor_init("$__skin_path", "'.$tinylang.'");');
$out = $form_start ? "$form_start\n" : '';
- $saveid = new hiddenfield(array('name' => '_draft_saveid', 'value' => $compose_mode==RCUBE_COMPOSE_DRAFT ? str_replace(array('<','>'), "", $MESSAGE['headers']->messageID) : ''));
+ $saveid = new html_hiddenfield(array('name' => '_draft_saveid', 'value' => $compose_mode==RCUBE_COMPOSE_DRAFT ? str_replace(array('<','>'), "", $MESSAGE->headers->messageID) : ''));
$out .= $saveid->show();
- $drafttoggle = new hiddenfield(array('name' => '_draft', 'value' => 'yes'));
+ $drafttoggle = new html_hiddenfield(array('name' => '_draft', 'value' => 'yes'));
$out .= $drafttoggle->show();
- $msgtype = new hiddenfield(array('name' => '_is_html', 'value' => ($isHtml?"1":"0")));
+ $msgtype = new html_hiddenfield(array('name' => '_is_html', 'value' => ($isHtml?"1":"0")));
$out .= $msgtype->show();
// If desired, set this text area to be editable by TinyMCE
- if ($isHtml)
- $attrib['mce_editable'] = "true";
- $textarea = new textarea($attrib);
+ if ($isHtml) $attrib['class'] = "mce_editor";
+ $textarea = new html_textarea($attrib);
$out .= $textarea->show($body);
$out .= $form_end ? "\n$form_end" : '';
"googie.setCurrentLanguage('%s');\n".
"googie.decorateTextarea('%s');\n".
"%s.set_env('spellcheck', googie);",
- $GLOBALS['COMM_PATH'],
+ $RCMAIL->comm_path,
JQ(Q(rcube_label('checkspelling'))),
JQ(Q(rcube_label('resumeediting'))),
JQ(Q(rcube_label('close'))),
JQ(Q(rcube_label('revertto'))),
JQ(Q(rcube_label('nospellerrors'))),
$lang_set,
- substr($_SESSION['user_lang'], 0, 2),
+ substr($_SESSION['language'], 0, 2),
$attrib['id'],
JS_OBJECT_NAME), 'foot');
rcube_add_label('checking');
}
- $out .= "\n".'<iframe name="savetarget" src="program/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>';
+ $out .= "\n".'<iframe name="savetarget" src="program/blank.gif" style="width:0;height:0;border:none;visibility:hidden;"></iframe>';
return $out;
}
// add title line
$prefix = sprintf("\n\n\nOn %s, %s wrote:\n",
- $MESSAGE['headers']->date,
- $IMAP->decode_header($MESSAGE['headers']->from));
+ $MESSAGE->headers->date,
+ $MESSAGE->get_header('from'));
// try to remove the signature
- if ($sp = strrstr($body, '-- '))
+ if ($sp = strrpos($body, '-- '))
{
if ($body{$sp+3}==' ' || $body{$sp+3}=="\n" || $body{$sp+3}=="\r")
$body = substr($body, 0, $sp-1);
}
else
{
- $prefix = sprintf("<br><br>On %s, %s wrote:<br><blockquote type=\"cite\" " .
- "style=\"padding-left: 5px; border-left: #1010ff 2px solid; " .
- "margin-left: 5px; width: 100%%\">",
- $MESSAGE['headers']->date,
- $IMAP->decode_header($MESSAGE['headers']->from));
-
+ $prefix = sprintf("<br /><br />On %s, %s wrote:<br />\n",
+ $MESSAGE->headers->date,
+ Q($MESSAGE->get_header('from')));
+ $prefix .= '<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px; width:100%">';
$suffix = "</blockquote>";
}
{
global $IMAP, $MESSAGE;
- if (! $bodyIsHtml)
+ if (!$bodyIsHtml)
{
// soft-wrap message first
$body = wordwrap($body, 80);
$prefix = sprintf("\n\n\n-------- Original Message --------\nSubject: %s\nDate: %s\nFrom: %s\nTo: %s\n\n",
- $MESSAGE['subject'],
- $MESSAGE['headers']->date,
- $IMAP->decode_header($MESSAGE['headers']->from),
- $IMAP->decode_header($MESSAGE['headers']->to));
+ $MESSAGE->subject,
+ $MESSAGE->headers->date,
+ $MESSAGE->get_header('from'),
+ $MESSAGE->get_header('to'));
}
else
{
$prefix = sprintf(
- "<br><br>-------- Original Message --------" .
+ "<br><br>-------- Original Message --------" .
"<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody>" .
"<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Subject: </th><td>%s</td></tr>" .
"<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">Date: </th><td>%s</td></tr>" .
"<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">From: </th><td>%s</td></tr>" .
"<tr><th align=\"right\" nowrap=\"nowrap\" valign=\"baseline\">To: </th><td>%s</td></tr>" .
"</tbody></table><br>",
- Q($MESSAGE['subject']),
- Q($MESSAGE['headers']->date),
- Q($IMAP->decode_header($MESSAGE['headers']->from)),
- Q($IMAP->decode_header($MESSAGE['headers']->to)));
+ Q($MESSAGE->subject),
+ Q($MESSAGE->headers->date),
+ Q($MESSAGE->get_header('from')),
+ Q($MESSAGE->get_header('to')));
}
// add attachments
- if (!isset($_SESSION['compose']['forward_attachments']) && is_array($MESSAGE['parts']))
+ if (!isset($_SESSION['compose']['forward_attachments']) && is_array($MESSAGE->mime_parts))
rcmail_write_compose_attachments($MESSAGE);
return $prefix.$body;
function rcmail_create_draft_body($body, $bodyIsHtml)
{
- global $IMAP, $MESSAGE;
+ global $MESSAGE;
/**
* add attachments
- * sizeof($MESSAGE['parts'] can be 1 - e.g. attachment, but no text!
+ * sizeof($MESSAGE->mime_parts can be 1 - e.g. attachment, but no text!
*/
if (!isset($_SESSION['compose']['forward_attachments'])
- && is_array($MESSAGE['parts'])
- && count($MESSAGE['parts']) > 0)
+ && is_array($MESSAGE->mime_parts)
+ && count($MESSAGE->mime_parts) > 0)
rcmail_write_compose_attachments($MESSAGE);
return $body;
function rcmail_write_compose_attachments(&$message)
{
- global $IMAP, $CONFIG;
+ global $RCMAIL, $IMAP;
- $temp_dir = unslashify($CONFIG['temp_dir']);
+ $temp_dir = unslashify($RCMAIL->config->get('temp_dir'));
if (!is_array($_SESSION['compose']['attachments']))
$_SESSION['compose']['attachments'] = array();
- foreach ($message['parts'] as $pid => $part)
+ foreach ((array)$message->mime_parts as $pid => $part)
{
if ($part->ctype_primary != 'message' &&
($part->disposition=='attachment' || $part->disposition=='inline' || $part->headers['content-id'] ||
$tmp_path = tempnam($temp_dir, 'rcmAttmnt');
if ($fp = fopen($tmp_path, 'w'))
{
- fwrite($fp, $IMAP->get_message_part($message['UID'], $pid, $part->encoding));
+ fwrite($fp, $message->get_part_content($pid));
fclose($fp);
$_SESSION['compose']['attachments'][] = array(
}
}
- $_SESSION['compose']['forward_attachments'] = TRUE;
+ $_SESSION['compose']['forward_attachments'] = true;
}
function rcmail_compose_subject($attrib)
{
- global $CONFIG, $MESSAGE, $compose_mode;
+ global $MESSAGE, $compose_mode;
list($form_start, $form_end) = get_form_tags($attrib);
unset($attrib['form']);
$attrib['name'] = '_subject';
- $textfield = new textfield($attrib);
+ $textfield = new html_inputfield($attrib);
$subject = '';
// create a reply-subject
else if ($compose_mode == RCUBE_COMPOSE_REPLY)
{
- if (eregi('^re:', $MESSAGE['subject']))
- $subject = $MESSAGE['subject'];
+ if (eregi('^re:', $MESSAGE->subject))
+ $subject = $MESSAGE->subject;
else
- $subject = 'Re: '.$MESSAGE['subject'];
+ $subject = 'Re: '.$MESSAGE->subject;
}
// create a forward-subject
else if ($compose_mode == RCUBE_COMPOSE_FORWARD)
{
- if (eregi('^fwd:', $MESSAGE['subject']))
- $subject = $MESSAGE['subject'];
+ if (eregi('^fwd:', $MESSAGE->subject))
+ $subject = $MESSAGE->subject;
else
- $subject = 'Fwd: '.$MESSAGE['subject'];
+ $subject = 'Fwd: '.$MESSAGE->subject;
}
// creeate a draft-subject
else if ($compose_mode == RCUBE_COMPOSE_DRAFT)
- $subject = $MESSAGE['subject'];
+ $subject = $MESSAGE->subject;
$out = $form_start ? "$form_start\n" : '';
$out .= $textfield->show($subject);
if (!$attrib['id'])
$attrib['id'] = 'rcmAttachmentList';
- // allow the following attributes to be added to the <ul> tag
- $attrib_str = create_attrib_string($attrib, array('id', 'class', 'style'));
-
- $out = '<ul'. $attrib_str . ">\n";
+ $out = "\n";
if (is_array($_SESSION['compose']['attachments']))
{
if ($attrib['deleteicon'])
- $button = sprintf('<img src="%s%s" alt="%s" border="0" style="padding-right:2px;vertical-align:middle" />',
- $CONFIG['skin_path'],
- $attrib['deleteicon'],
- rcube_label('delete'));
+ $button = html::img(array(
+ 'src' => $CONFIG['skin_path'] . $attrib['deleteicon'],
+ 'alt' => rcube_label('delete'),
+ 'style' => "border:0;padding-right:2px;vertical-align:middle"));
else
- $button = rcube_label('delete');
+ $button = Q(rcube_label('delete'));
foreach ($_SESSION['compose']['attachments'] as $id => $a_prop)
- $out .= sprintf('<li id="rcmfile%d"><a href="#delete" onclick="return %s.command(\'remove-attachment\',\'rcmfile%d\', this)" title="%s">%s</a>%s</li>',
- $id,
- JS_OBJECT_NAME,
- $id,
- Q(rcube_label('delete')),
- $button,
- Q($a_prop['name']));
+ $out .= html::tag('li', array('id' => "rcmfile".$id),
+ html::a(array(
+ 'href' => "#delete",
+ 'title' => rcube_label('delete'),
+ 'onclick' => sprintf("return %s.command(\'remove-attachment\',\'rcmfile%d\', this)", JS_OBJECT_NAME, $id)),
+ $button) . Q($a_prop['name']));
}
$OUTPUT->add_gui_object('attachmentlist', $attrib['id']);
- $out .= '</ul>';
- return $out;
+ return html::tag('ul', $attrib, $out, html::$common_attrib);
}
function rcmail_compose_attachment_form($attrib)
{
- global $OUTPUT, $SESS_HIDDEN_FIELD;
+ global $OUTPUT;
// add ID if not given
if (!$attrib['id'])
$attrib['id'] = 'rcmUploadbox';
- // allow the following attributes to be added to the <div> tag
- $attrib_str = create_attrib_string($attrib, array('id', 'class', 'style'));
- $input_field = rcmail_compose_attachment_field(array());
- $label_send = rcube_label('upload');
- $label_close = rcube_label('close');
- $js_instance = JS_OBJECT_NAME;
+ $button = new html_inputfield(array('type' => 'button', 'class' => 'button'));
+
+ $out = html::div($attrib,
+ $OUTPUT->form_tag(array('name' => 'form', 'method' => 'post', 'enctype' => 'multipart/form-data')) .
+ rcmail_compose_attachment_field(array()) . html::br() .
+ $button->show(rcube_label('close'), array('onclick' => "document.getElementById('$attrib[id]').style.visibility='hidden'")) .
+ $button->show(rcube_label('upload'), array('onclick' => JS_OBJECT_NAME . ".command('send-attachment', this.form)"))
+ );
- $out = <<<EOF
-<div$attrib_str>
-<form action="./" method="post" enctype="multipart/form-data">
-$SESS_HIDDEN_FIELD
-$input_field<br />
-<input type="button" value="$label_close" class="button" onclick="document.getElementById('$attrib[id]').style.visibility='hidden'" />
-<input type="button" value="$label_send" class="button" onclick="$js_instance.command('send-attachment', this.form)" />
-</form>
-</div>
-EOF;
-
$OUTPUT->add_gui_object('uploadbox', $attrib['id']);
return $out;
unset($attrib['form']);
$attrib['name'] = '_priority';
- $selector = new select($attrib);
+ $selector = new html_select($attrib);
$selector->add(array(rcube_label('lowest'),
rcube_label('low'),
rcube_label('highest')),
array(5, 4, 0, 2, 1));
- $sel = isset($_POST['_priority']) ? $_POST['_priority'] : intval($MESSAGE['headers']->priority);
+ $sel = isset($_POST['_priority']) ? $_POST['_priority'] : intval($MESSAGE->headers->priority);
$out = $form_start ? "$form_start\n" : '';
$out .= $selector->show($sel);
function rcmail_receipt_checkbox($attrib)
{
- global $MESSAGE;
+ global $MESSAGE, $compose_mode;
list($form_start, $form_end) = get_form_tags($attrib);
unset($attrib['form']);
$attrib['name'] = '_receipt';
$attrib['value'] = '1';
- $checkbox = new checkbox($attrib);
+ $checkbox = new html_checkbox($attrib);
$out = $form_start ? "$form_start\n" : '';
- $out .= $checkbox->show($MESSAGE['headers']->mdn_to ? 1 : 0);
+ $out .= $checkbox->show(
+ $compose_mode == RCUBE_COMPOSE_DRAFT && $MESSAGE->headers->mdn_to ? 1 : 0);
$out .= $form_end ? "\n$form_end" : '';
return $out;
'plain' => 'plaintoggle'
);
- // determine whether HTML or plain text should be checked
- if ($CONFIG['htmleditor'])
- $useHtml = true;
- else
- $useHtml = false;
+ // determine whether HTML or plain text should be checked
+ $useHtml = $CONFIG['htmleditor'] ? true : false;
- if ($compose_mode == RCUBE_COMPOSE_REPLY ||
- $compose_mode == RCUBE_COMPOSE_FORWARD ||
- $compose_mode == RCUBE_COMPOSE_DRAFT)
- {
- $hasHtml = rcmail_has_html_part($MESSAGE['parts']);
- $useHtml = ($hasHtml && $CONFIG['htmleditor']);
- }
+ if ($compose_mode)
+ $useHtml = ($useHtml && $MESSAGE->has_html_part());
$selector = '';
-
- $attrib['name'] = '_editorSelect';
- $attrib['onchange'] = 'return rcmail_toggle_editor(this)';
+ $chosenvalue = $useHtml ? 'html' : 'plain';
+ $radio = new html_radiobutton(array('name' => '_editorSelect', 'onclick' => 'return rcmail_toggle_editor(this)'));
foreach ($choices as $value => $text)
{
- $checked = '';
- if ((($value == 'html') && $useHtml) ||
- (($value != 'html') && !$useHtml))
- $attrib['checked'] = 'true';
- else
- unset($attrib['checked']);
-
$attrib['id'] = '_' . $value;
- $rb = new radiobutton($attrib);
- $selector .= sprintf("%s<label for=\"%s\">%s</label>",
- $rb->show($value),
- $attrib['id'],
- rcube_label($text));
+ $attrib['value'] = $value;
+ $selector .= $radio->show($chosenvalue, $attrib) . html::label($attrib['id'], Q(rcube_label($text)));
}
return $selector;
function get_form_tags($attrib)
{
- global $CONFIG, $OUTPUT, $MESSAGE_FORM, $SESS_HIDDEN_FIELD;
+ global $RCMAIL, $MESSAGE_FORM;
$form_start = '';
if (!strlen($MESSAGE_FORM))
{
- $hiddenfields = new hiddenfield(array('name' => '_task', 'value' => $GLOBALS['_task']));
+ $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $RCMAIL->task));
$hiddenfields->add(array('name' => '_action', 'value' => 'send'));
- $form_start = empty($attrib['form']) ? '<form name="form" action="./" method="post">' : '';
- $form_start .= "\n$SESS_HIDDEN_FIELD\n";
+ $form_start = empty($attrib['form']) ? $RCMAIL->output->form_tag(array('name' => "form", 'method' => "post")) : '';
$form_start .= $hiddenfields->show();
}
$form_name = !empty($attrib['form']) ? $attrib['form'] : 'form';
if (!strlen($MESSAGE_FORM))
- $OUTPUT->add_gui_object('messageform', $form_name);
+ $RCMAIL->output->add_gui_object('messageform', $form_name);
$MESSAGE_FORM = $form_name;
- return array($form_start, $form_end);
+ return array($form_start, $form_end);
}
/****** get contacts for this user and add them to client scripts ********/
-require_once('include/rcube_contacts.inc');
-require_once('include/rcube_ldap.inc');
-
$CONTACTS = new rcube_contacts($DB, $USER->ID);
$CONTACTS->set_pagesize(1000);
/* LDAP autocompletion */
foreach ($CONFIG['ldap_public'] as $ldapserv_config)
{
- if ($ldapserv_config['fuzzy_search'] != 1)
+ if ($ldapserv_config['fuzzy_search'] != 1 ||
+ $ldapserv_config['global_search'] != 1)
{
continue;
- }
+ }
$LDAP = new rcube_ldap($ldapserv_config);
$LDAP->connect();
if ($a_contacts)
{
$OUTPUT->set_env('contacts', $a_contacts);
- }
-parse_template('compose');
-?>
\ No newline at end of file
+ }
+
+$OUTPUT->send('compose');
+
+?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: folders.inc 1020 2008-02-05 22:56:29Z thomasb $
+ $Id: folders.inc 1344 2008-04-30 08:21:42Z thomasb $
*/
$mbox_name = $IMAP->get_mailbox_name();
// send EXPUNGE command
-if ($_action=='expunge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST)))
+if ($RCMAIL->action=='expunge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST)))
{
$success = $IMAP->expunge($mbox);
if ($success && !empty($_REQUEST['_reload']))
{
$OUTPUT->command('message_list.clear');
- $_action = 'list';
+ $RCMAIL->action = 'list';
return;
}
else
}
// clear mailbox
-else if ($_action=='purge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST)))
+else if ($RCMAIL->action=='purge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST)))
{
// we should only be purging trash and junk
if($mbox == $CONFIG['trash_mbox'] || $mbox == $CONFIG['junk_mbox'])
| program/steps/mail/func.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: func.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: func.inc 1494 2008-06-09 12:22:54Z alec $
*/
-require_once('lib/html2text.inc');
require_once('lib/enriched.inc');
require_once('include/rcube_smtp.inc');
}
-// define url for getting message parts
-if (strlen($_GET['_uid']))
- $GET_URL = rcmail_url('get', array('_mbox'=>$IMAP->get_mailbox_name(), '_uid'=>get_input_value('_uid', RCUBE_INPUT_GET)));
-
-
// set current mailbox in client environment
$OUTPUT->set_env('mailbox', $IMAP->get_mailbox_name());
$OUTPUT->set_env('quota', $IMAP->get_capability('quota'));
$OUTPUT->set_env('junk_mailbox', $CONFIG['junk_mbox']);
if (!$OUTPUT->ajax_call)
- rcube_add_label('checkingmail', 'deletemessage', 'movemessagetotrash');
+ rcube_add_label('checkingmail', 'deletemessage', 'movemessagetotrash', 'movingmessage');
// set page title
-if (empty($_action) || $_action == 'list')
+if (empty($RCMAIL->action) || $RCMAIL->action == 'list')
$OUTPUT->set_pagetitle(rcmail_localize_foldername($IMAP->get_mailbox_name()));
-// return the message list as HTML table
+/**
+ * return the message list as HTML table
+ */
function rcmail_message_list($attrib)
{
global $IMAP, $CONFIG, $COMM_PATH, $OUTPUT;
// make sort links
$sort = '';
- if ($IMAP->get_capability('sort') && in_array($col, $a_sort_cols))
+ if (in_array($col, $a_sort_cols))
{
// have buttons configured
if (!empty($attrib['sortdescbutton']) || !empty($attrib['sortascbutton']))
$zebra_class);
$out .= sprintf("<td class=\"icon\">%s</td>\n", $message_icon ? sprintf($image_tag, $skin_path, $message_icon, '') : '');
-
+
+ if (!empty($header->charset))
+ $IMAP->set_charset($header->charset);
+
// format each col
foreach ($a_show_cols as $col)
{
else if ($col=='subject')
{
$action = $mbox==$CONFIG['drafts_mbox'] ? 'compose' : 'show';
- $uid_param = $mbox==$CONFIG['drafts_mbox'] ? '_draf_uid' : '_uid';
- $cont = Q(rcube_imap::decode_mime_string($header->$col, $header->charset));
+ $uid_param = $mbox==$CONFIG['drafts_mbox'] ? '_draft_uid' : '_uid';
+ $cont = Q($IMAP->decode_header($header->$col));
if (empty($cont)) $cont = Q(rcube_label('nosubject'));
$cont = sprintf('<a href="%s" onclick="return rcube_event.cancel(event)">%s</a>', Q(rcmail_url($action, array($uid_param=>$header->uid, '_mbox'=>$mbox))), $cont);
}
}
-// return javascript commands to add rows to the message list
+/**
+ * return javascript commands to add rows to the message list
+ */
function rcmail_js_message_list($a_headers, $insert_top=FALSE)
{
global $CONFIG, $IMAP, $OUTPUT;
if (empty($header))
continue;
+ if (!empty($header->charset))
+ $IMAP->set_charset($header->charset);
+
// format each col; similar as in rcmail_message_list()
foreach ($a_show_cols as $col)
{
else if ($col=='subject')
{
$action = $mbox==$CONFIG['drafts_mbox'] ? 'compose' : 'show';
- $uid_param = $mbox==$CONFIG['drafts_mbox'] ? '_draf_uid' : '_uid';
- $cont = Q(rcube_imap::decode_mime_string($header->$col, $header->charset));
+ $uid_param = $mbox==$CONFIG['drafts_mbox'] ? '_draft_uid' : '_uid';
+ $cont = Q($IMAP->decode_header($header->$col));
if (!$cont) $cont = Q(rcube_label('nosubject'));
$cont = sprintf('<a href="%s" onclick="return rcube_event.cancel(event)">%s</a>', Q(rcmail_url($action, array($uid_param=>$header->uid, '_mbox'=>$mbox))), $cont);
}
}
-// return an HTML iframe for loading mail content
+/**
+ * return an HTML iframe for loading mail content
+ */
function rcmail_messagecontent_frame($attrib)
{
global $OUTPUT;
}
+/**
+ *
+ */
function rcmail_messagecount_display($attrib)
{
global $IMAP, $OUTPUT;
}
+/**
+ *
+ */
function rcmail_quota_display($attrib)
{
global $OUTPUT, $COMM_PATH;
if (!$attrib['id'])
$attrib['id'] = 'rcmquotadisplay';
+ if(isset($attrib['display']))
+ $_SESSION['quota_display'] = $attrib['display'];
+
$OUTPUT->add_gui_object('quotadisplay', $attrib['id']);
// allow the following attributes to be added to the <span> tag
- $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id'));
+ $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id', 'display'));
$out = '<span' . $attrib_str . '>';
- $out .= rcmail_quota_content($attrib['display']);
+ $out .= rcmail_quota_content();
$out .= '</span>';
return $out;
}
-function rcmail_quota_content($display)
+/**
+ *
+ */
+function rcmail_quota_content($quota=NULL)
{
global $IMAP, $COMM_PATH;
- if (!$IMAP->get_capability('QUOTA'))
- $quota_text = rcube_label('unknown');
- else if ($quota = $IMAP->get_quota())
+ $display = isset($_SESSION['quota_display']) ? $_SESSION['quota_display'] : '';
+
+ if (is_array($quota) && !empty($quota['used']) && !empty($quota['total']))
+ {
+ if (!isset($quota['percent']))
+ $quota['percent'] = $quota['used'] / $quota['total'];
+ }
+ elseif (!$IMAP->get_capability('QUOTA'))
+ return rcube_label('unknown');
+ else
+ $quota = $IMAP->get_quota();
+
+ if ($quota)
{
- $quota_text = sprintf("%s / %s (%.0f%%)",
- show_bytes($quota["used"] * 1024),
- show_bytes($quota["total"] * 1024),
- $quota["percent"]);
+ $quota_text = sprintf('%s / %s (%.0f%%)',
+ show_bytes($quota['used'] * 1024),
+ show_bytes($quota['total'] * 1024),
+ $quota['percent']);
// show quota as image (by Brett Patterson)
if ($display == 'image' && function_exists('imagegif'))
}
+/**
+ *
+ */
function rcmail_get_messagecount_text($count=NULL, $page=NULL)
{
global $IMAP, $MESSAGE;
- if (isset($MESSAGE['index']))
+ if (isset($MESSAGE->index))
{
return rcube_label(array('name' => 'messagenrof',
- 'vars' => array('nr' => $MESSAGE['index']+1,
+ 'vars' => array('nr' => $MESSAGE->index+1,
'count' => $count!==NULL ? $count : $IMAP->messagecount())));
}
}
-/* Stolen from Squirrelmail */
-function sq_deent(&$attvalue, $regex, $hex=false)
- {
- $ret_match = false;
- preg_match_all($regex, $attvalue, $matches);
- if (is_array($matches) && sizeof($matches[0]) > 0)
- {
- $repl = Array();
- for ($i = 0; $i < sizeof($matches[0]); $i++)
- {
- $numval = $matches[1][$i];
- if ($hex)
- $numval = hexdec($numval);
- $repl{$matches[0][$i]} = chr($numval);
- }
- $attvalue = strtr($attvalue, $repl);
- return true;
- }
- else
- return false;
- }
-
-
-/* Stolen verbatim from Squirrelmail */
-function sq_defang(&$attvalue)
- {
- /* Skip this if there aren't ampersands or backslashes. */
- if ((strpos($attvalue, '&') === false) &&
- (strpos($attvalue, '\\') === false))
- return;
- $m = false;
- do
- {
- $m = false;
- $m = $m || sq_deent($attvalue, '/\�*(\d+);*/s');
- $m = $m || sq_deent($attvalue, '/\�*((\d|[a-f])+);*/si', true);
- $m = $m || sq_deent($attvalue, '/\\\\(\d+)/s', true);
- } while ($m == true);
- $attvalue = stripslashes($attvalue);
- }
-
-
-function rcmail_html_filter($html)
- {
- preg_match_all('/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|\'.*?\'|[^\'">\s]+))?)+\s*|\s*)\/?>/', $html, $tags);
-
- /* From Squirrelmail: Translate all dangerous Unicode or Shift_JIS characters which are accepted by
- * IE as regular characters. */
- $replace = array(array('ʟ', 'ʟ', /* L UNICODE IPA Extension */
- 'ʀ', 'ʀ', /* R UNICODE IPA Extension */
- 'ɴ', 'ɴ', /* N UNICODE IPA Extension */
- 'E', 'E', /* Unicode FULLWIDTH LATIN CAPITAL LETTER E */
- 'e', 'e', /* Unicode FULLWIDTH LATIN SMALL LETTER E */
- 'X', 'X', /* Unicode FULLWIDTH LATIN CAPITAL LETTER X */
- 'x', 'x', /* Unicode FULLWIDTH LATIN SMALL LETTER X */
- 'P', 'P', /* Unicode FULLWIDTH LATIN CAPITAL LETTER P */
- 'p', 'p', /* Unicode FULLWIDTH LATIN SMALL LETTER P */
- 'R', 'R', /* Unicode FULLWIDTH LATIN CAPITAL LETTER R */
- 'r', 'r', /* Unicode FULLWIDTH LATIN SMALL LETTER R */
- 'S', 'S', /* Unicode FULLWIDTH LATIN CAPITAL LETTER S */
- 's', 's', /* Unicode FULLWIDTH LATIN SMALL LETTER S */
- 'I', 'I', /* Unicode FULLWIDTH LATIN CAPITAL LETTER I */
- 'i', 'i', /* Unicode FULLWIDTH LATIN SMALL LETTER I */
- 'O', 'O', /* Unicode FULLWIDTH LATIN CAPITAL LETTER O */
- 'o', 'o', /* Unicode FULLWIDTH LATIN SMALL LETTER O */
- 'N', 'N', /* Unicode FULLWIDTH LATIN CAPITAL LETTER N */
- 'n', 'n', /* Unicode FULLWIDTH LATIN SMALL LETTER N */
- 'L', 'L', /* Unicode FULLWIDTH LATIN CAPITAL LETTER L */
- 'l', 'l', /* Unicode FULLWIDTH LATIN SMALL LETTER L */
- 'U', 'U', /* Unicode FULLWIDTH LATIN CAPITAL LETTER U */
- 'u', 'u', /* Unicode FULLWIDTH LATIN SMALL LETTER U */
- 'ⁿ', 'ⁿ' , /* Unicode SUPERSCRIPT LATIN SMALL LETTER N */
- "\xEF\xBC\xA5", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER E */
- /* in unicode this is some Chinese char range */
- "\xEF\xBD\x85", /* Shift JIS FULLWIDTH LATIN SMALL LETTER E */
- "\xEF\xBC\xB8", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER X */
- "\xEF\xBD\x98", /* Shift JIS FULLWIDTH LATIN SMALL LETTER X */
- "\xEF\xBC\xB0", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER P */
- "\xEF\xBD\x90", /* Shift JIS FULLWIDTH LATIN SMALL LETTER P */
- "\xEF\xBC\xB2", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER R */
- "\xEF\xBD\x92", /* Shift JIS FULLWIDTH LATIN SMALL LETTER R */
- "\xEF\xBC\xB3", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER S */
- "\xEF\xBD\x93", /* Shift JIS FULLWIDTH LATIN SMALL LETTER S */
- "\xEF\xBC\xA9", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER I */
- "\xEF\xBD\x89", /* Shift JIS FULLWIDTH LATIN SMALL LETTER I */
- "\xEF\xBC\xAF", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER O */
- "\xEF\xBD\x8F", /* Shift JIS FULLWIDTH LATIN SMALL LETTER O */
- "\xEF\xBC\xAE", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER N */
- "\xEF\xBD\x8E", /* Shift JIS FULLWIDTH LATIN SMALL LETTER N */
- "\xEF\xBC\xAC", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER L */
- "\xEF\xBD\x8C", /* Shift JIS FULLWIDTH LATIN SMALL LETTER L */
- "\xEF\xBC\xB5", /* Shift JIS FULLWIDTH LATIN CAPITAL LETTER U */
- "\xEF\xBD\x95", /* Shift JIS FULLWIDTH LATIN SMALL LETTER U */
- "\xE2\x81\xBF", /* Shift JIS FULLWIDTH SUPERSCRIPT N */
- "\xCA\x9F", /* L UNICODE IPA Extension */
- "\xCA\x80", /* R UNICODE IPA Extension */
- "\xC9\xB4"), /* N UNICODE IPA Extension */
- array('l', 'l', 'r', 'r', 'n', 'n', 'E', 'E', 'e', 'e', 'X', 'X', 'x', 'x',
- 'P', 'P', 'p', 'p', 'R', 'R', 'r', 'r', 'S', 'S', 's', 's', 'I', 'I',
- 'i', 'i', 'O', 'O', 'o', 'o', 'N', 'N', 'n', 'n', 'L', 'L', 'l', 'l',
- 'U', 'U', 'u', 'u', 'n', 'n', 'E', 'e', 'X', 'x', 'P', 'p', 'R', 'r',
- 'S', 's', 'I', 'i', 'O', 'o', 'N', 'n', 'L', 'l', 'U', 'u', 'n', 'l', 'r', 'n'));
- if ((count($tags)>3) && (count($tags[3])>0))
- foreach ($tags[3] as $nr=>$value)
- {
- /* Remove comments */
- $newvalue = preg_replace('/(\/\*.*\*\/)/','$2',$value);
- /* Translate dangerous characters */
- $newvalue = str_replace($replace[0], $replace[1], $newvalue);
- sq_defang($newvalue);
- /* Rename dangerous CSS */
- $newvalue = preg_replace('/expression/i', 'idiocy', $newvalue);
- $newvalue = preg_replace('/url/i', 'idiocy', $newvalue);
- $newattrs = preg_replace('/'.preg_quote($value, '/').'$/', $newvalue, $tags[1][$nr]);
- $newtag = preg_replace('/'.preg_quote($tags[1][$nr], '/').'/', $newattrs, $tags[0][$nr]);
- $html = preg_replace('/'.preg_quote($tags[0][$nr], '/').'/', $newtag, $html);
- }
- return $html;
- }
-
-
-function rcmail_print_body($part, $safe=FALSE, $plain=FALSE)
- {
- global $IMAP, $REMOTE_OBJECTS;
+/**
+ * Convert the given message part to proper HTML
+ * which can be displayed the message view
+ *
+ * @param object rcube_message_part Message part
+ * @param bool True if external objects (ie. images ) are allowed
+ * @param bool True if part should be converted to plaintext
+ * @return string Formatted HTML string
+ */
+function rcmail_print_body($part, $safe=false, $plain=false)
+{
+ global $REMOTE_OBJECTS;
- $body = is_array($part->replaces) ? strtr($part->body, $part->replaces) : $part->body;
-
// convert html to text/plain
- if ($part->ctype_secondary=='html' && $plain)
- {
- $txt = new html2text($body, false, true);
+ if ($part->ctype_secondary == 'html' && $plain) {
+ $txt = new html2text($part->body, false, true);
$body = $txt->get_text();
$part->ctype_secondary = 'plain';
- }
-
+ }
// text/html
- if ($part->ctype_secondary=='html')
- {
- // remove charset specification in HTML message
- $body = preg_replace('/charset=[a-z0-9\-]+/i', '', $body);
-
- if (!$safe) // remove remote images and scripts
- {
- $remote_patterns = array('/<img\s+(.*)src=(["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)(\2|\s|>)/Ui',
- '/(src|background)=(["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)(\2|\s|>)/Ui',
- '/(<base.*href=["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)([^<]*>)/i',
- '/(<link.*href=["\']?)([hftps]{3,5}:\/{2}[^"\'\s]+)([^<]*>)/i',
- '/url\s*\(["\']?([hftps]{3,5}:\/{2}[^"\'\s]+)["\']?\)/i',
- '/url\s*\(["\']?([\.\/]+[^"\'\s]+)["\']?\)/i',
- '/<script.+<\/script>/Umis');
-
- $remote_replaces = array('<img \\1src=\\2./program/blocked.gif\\4',
- '',
- '',
- '',
- 'none',
- 'none',
- '');
-
- // set flag if message containes remote obejcts that where blocked
- foreach ($remote_patterns as $pattern)
- {
- if (preg_match($pattern, $body))
- {
- $REMOTE_OBJECTS = TRUE;
- break;
- }
- }
-
- $body = preg_replace($remote_patterns, $remote_replaces, $body);
- }
-
- return Q(rcmail_html_filter($body), 'show', FALSE);
- }
-
+ else if ($part->ctype_secondary == 'html') {
+ // charset was converted to UTF-8 in rcube_imap::get_message_part() -> change charset specification in HTML accordingly
+ $html = $part->body;
+ if(preg_match('/(\s+content=[\'"]\w+\/\w+;\s+charset)=([a-z0-9-]+)/i', $html))
+ $html = preg_replace('/(\s+content=[\'"]\w+\/\w+;\s+charset)=([a-z0-9-]+)/i', '\\1='.RCMAIL_CHARSET, $html);
+ else
+ $html = substr_replace($html, '<meta http-equiv="Content-Type" content="text/html; charset='.RCMAIL_CHARSET.'" />', intval(stripos($html, '</head>')), 0);
+
+ // clean HTML with washhtml by Frederic Motte
+ $body = washtml::wash($html, array(
+ 'show_washed' => false,
+ 'allow_remote' => $safe,
+ 'blocked_src' => "./program/blocked.gif",
+ 'charset' => RCMAIL_CHARSET,
+ 'cid_map' => $part->replaces,
+ ), $full_inline);
+
+ $REMOTE_OBJECTS = !$full_inline;
+
+ return $body;
+ }
// text/enriched
- if ($part->ctype_secondary=='enriched')
- {
+ else if ($part->ctype_secondary=='enriched') {
+ $part->ctype_secondary = 'html';
return Q(enriched_to_html($body), 'show');
- }
+ }
else
- {
- // make links and email-addresses clickable
- $convert_patterns = $convert_replaces = $replace_strings = array();
-
- $url_chars = 'a-z0-9_\-\+\*\$\/&%=@#:;';
- $url_chars_within = '\?\.~,!';
+ $body = $part->body;
- $convert_patterns[] = "/([\w]+):\/\/([a-z0-9\-\.]+[a-z]{2,4}([$url_chars$url_chars_within]*[$url_chars])?)/ie";
- $convert_replaces[] = "rcmail_str_replacement('<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>', \$replace_strings)";
- $convert_patterns[] = "/([^\/:]|\s)(www\.)([a-z0-9\-]{2,}[a-z]{2,4}([$url_chars$url_chars_within]*[$url_chars])?)/ie";
- $convert_replaces[] = "rcmail_str_replacement('\\1<a href=\"http://\\2\\3\" target=\"_blank\">\\2\\3</a>', \$replace_strings)";
-
- $convert_patterns[] = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/ie';
- $convert_replaces[] = "rcmail_str_replacement('<a href=\"mailto:\\1\" onclick=\"return ".JS_OBJECT_NAME.".command(\'compose\',\'\\1\',this)\">\\1</a>', \$replace_strings)";
-
- if ($part->ctype_parameters['format'] != 'flowed')
- $body = wordwrap(trim($body), 80);
+ /**** assert plaintext ****/
- $body = preg_replace($convert_patterns, $convert_replaces, $body);
+ // make links and email-addresses clickable
+ $convert_patterns = $convert_replaces = $replace_strings = array();
+
+ $url_chars = 'a-z0-9_\-\+\*\$\/&%=@#:;';
+ $url_chars_within = '\?\.~,!';
- // split body into single lines
- $a_lines = preg_split('/\r?\n/', $body);
- $quote_level = 0;
+ $convert_patterns[] = "/([\w]+):\/\/([a-z0-9\-\.]+[a-z]{2,4}([$url_chars$url_chars_within]*[$url_chars])?)/ie";
+ $convert_replaces[] = "rcmail_str_replacement('<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>', \$replace_strings)";
- // colorize quoted parts
- for($n=0; $n<sizeof($a_lines); $n++)
- {
- $line = $a_lines[$n];
- $quotation = '';
- $q = 0;
-
- if (preg_match('/^(>+\s*)+/', $line, $regs))
- {
- $q = strlen(preg_replace('/\s/', '', $regs[0]));
- $line = substr($line, strlen($regs[0]));
+ $convert_patterns[] = "/([^\/:]|\s)(www\.)([a-z0-9\-]{2,}[a-z]{2,4}([$url_chars$url_chars_within]*[$url_chars])?)/ie";
+ $convert_replaces[] = "rcmail_str_replacement('\\1<a href=\"http://\\2\\3\" target=\"_blank\">\\2\\3</a>', \$replace_strings)";
+
+ $convert_patterns[] = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/ie';
+ $convert_replaces[] = "rcmail_str_replacement('<a href=\"mailto:\\1\" onclick=\"return ".JS_OBJECT_NAME.".command(\'compose\',\'\\1\',this)\">\\1</a>', \$replace_strings)";
+
+// if ($part->ctype_parameters['format'] != 'flowed')
+// $body = wordwrap(trim($body), 80);
- if ($q > $quote_level)
- $quotation = str_repeat('<blockquote>', $q - $quote_level);
- else if ($q < $quote_level)
- $quotation = str_repeat("</blockquote>", $quote_level - $q);
- }
- else if ($quote_level > 0)
- $quotation = str_repeat("</blockquote>", $quote_level);
+ // search for patterns like links and e-mail addresses
+ $body = preg_replace($convert_patterns, $convert_replaces, $body);
- $quote_level = $q;
- $a_lines[$n] = $quotation . Q($line, 'replace', FALSE);
- }
+ // split body into single lines
+ $a_lines = preg_split('/\r?\n/', $body);
+ $quote_level = 0;
- // insert the links for urls and mailtos
- $body = preg_replace("/##string_replacement\{([0-9]+)\}##/e", "\$replace_strings[\\1]", join("\n", $a_lines));
+ // colorize quoted parts
+ for ($n=0; $n < sizeof($a_lines); $n++) {
+ $line = $a_lines[$n];
+ $quotation = '';
+ $q = 0;
- return "<div class=\"pre\">".$body."\n</div>";
+ if (preg_match('/^(>+\s*)+/', $line, $regs)) {
+ $q = strlen(preg_replace('/\s/', '', $regs[0]));
+ $line = substr($line, strlen($regs[0]));
+
+ if ($q > $quote_level)
+ $quotation = str_repeat('<blockquote>', $q - $quote_level);
+ else if ($q < $quote_level)
+ $quotation = str_repeat("</blockquote>", $quote_level - $q);
}
+ else if ($quote_level > 0)
+ $quotation = str_repeat("</blockquote>", $quote_level);
+
+ $quote_level = $q;
+ $a_lines[$n] = $quotation . Q($line, 'replace', false); // htmlquote plaintext
}
+ // insert the links for urls and mailtos
+ $body = preg_replace("/##string_replacement\{([0-9]+)\}##/e", "\$replace_strings[\\1]", join("\n", $a_lines));
+
+ return "<div class=\"pre\">".$body."\n</div>";
+ }
-// add a string to the replacement array and return a replacement string
+
+/**
+ * add a string to the replacement array and return a replacement string
+ */
function rcmail_str_replacement($str, &$rep)
{
static $count = 0;
}
-function rcmail_parse_message(&$structure, $arg=array(), $recursive=FALSE)
- {
- global $IMAP;
- static $sa_inline_objects = array();
-
- // arguments are: (bool)$prefer_html, (string)$get_url
- extract($arg);
-
- $a_attachments = array();
- $a_return_parts = array();
- $out = '';
-
- $message_ctype_primary = strtolower($structure->ctype_primary);
- $message_ctype_secondary = strtolower($structure->ctype_secondary);
-
- // show message headers
- if ($recursive && is_array($structure->headers) && isset($structure->headers['subject']))
- {
- $c = new stdClass;
- $c->type = 'headers';
- $c->headers = &$structure->headers;
- $a_return_parts[] = $c;
- }
-
- // print body if message doesn't have multiple parts
- if ($message_ctype_primary=='text')
- {
- $structure->type = 'content';
- $a_return_parts[] = &$structure;
- }
-
- // message contains alternative parts
- else if ($message_ctype_primary=='multipart' && $message_ctype_secondary=='alternative' && is_array($structure->parts))
- {
- // get html/plaintext parts
- $plain_part = $html_part = $print_part = $related_part = NULL;
-
- foreach ($structure->parts as $p => $sub_part)
- {
- $rel_parts = $attachmnts = null;
- $sub_ctype_primary = strtolower($sub_part->ctype_primary);
- $sub_ctype_secondary = strtolower($sub_part->ctype_secondary);
-
- // check if sub part is
- if ($sub_ctype_primary=='text' && $sub_ctype_secondary=='plain')
- $plain_part = $p;
- else if ($sub_ctype_primary=='text' && $sub_ctype_secondary=='html')
- $html_part = $p;
- else if ($sub_ctype_primary=='text' && $sub_ctype_secondary=='enriched')
- $enriched_part = $p;
- else if ($sub_ctype_primary=='multipart' && ($sub_ctype_secondary=='related' || $sub_ctype_secondary=='mixed'))
- $related_part = $p;
- }
-
- // parse related part (alternative part could be in here)
- if ($related_part!==NULL)
- {
- list($rel_parts, $attachmnts) = rcmail_parse_message($structure->parts[$related_part], $arg, TRUE);
- $a_attachments = array_merge($a_attachments, $attachmnts);
- }
-
- // merge related parts if any
- if ($rel_parts && $prefer_html && !$html_part)
- $a_return_parts = array_merge($a_return_parts, $rel_parts);
-
- // choose html/plain part to print
- else if ($html_part!==NULL && $prefer_html)
- $print_part = &$structure->parts[$html_part];
- else if ($enriched_part!==NULL)
- $print_part = &$structure->parts[$enriched_part];
- else if ($plain_part!==NULL)
- $print_part = &$structure->parts[$plain_part];
-
- // show message body
- if (is_object($print_part))
- {
- $print_part->type = 'content';
- $a_return_parts[] = $print_part;
- }
- // show plaintext warning
- else if ($html_part!==NULL && empty($a_return_parts))
- {
- $c = new stdClass;
- $c->type = 'content';
- $c->body = rcube_label('htmlmessage');
- $c->ctype_primary = 'text';
- $c->ctype_secondary = 'plain';
-
- $a_return_parts[] = $c;
- }
-
- // add html part as attachment
- if ($html_part!==NULL && $structure->parts[$html_part]!==$print_part)
- {
- $html_part = &$structure->parts[$html_part];
- $html_part->filename = rcube_label('htmlmessage');
- $html_part->mimetype = 'text/html';
-
- $a_attachments[] = $html_part;
- }
- }
-
- // message contains multiple parts
- else if (is_array($structure->parts) && !empty($structure->parts))
- {
- for ($i=0; $i<count($structure->parts); $i++)
- {
- $mail_part = &$structure->parts[$i];
- $primary_type = strtolower($mail_part->ctype_primary);
- $secondary_type = strtolower($mail_part->ctype_secondary);
-
- // multipart/alternative
- if ($primary_type=='multipart')
- {
- list($parts, $attachmnts) = rcmail_parse_message($mail_part, $arg, TRUE);
- $a_return_parts = array_merge($a_return_parts, $parts);
- $a_attachments = array_merge($a_attachments, $attachmnts);
- }
-
- // part text/[plain|html] OR message/delivery-status
- else if (($primary_type=='text' && ($secondary_type=='plain' || $secondary_type=='html') && $mail_part->disposition!='attachment') ||
- ($primary_type=='message' && ($secondary_type=='delivery-status' || $secondary_type=='disposition-notification')))
- {
- $mail_part->type = 'content';
- $a_return_parts[] = $mail_part;
- }
-
- // part message/*
- else if ($primary_type=='message')
- {
- list($parts, $attachmnts) = rcmail_parse_message($mail_part, $arg, TRUE);
-
- $a_return_parts = array_merge($a_return_parts, $parts);
- $a_attachments = array_merge($a_attachments, $attachmnts);
- }
-
- // ignore "virtual" protocol parts
- else if ($primary_type=='protocol')
- continue;
-
- // part is file/attachment
- else if ($mail_part->disposition=='attachment' || $mail_part->disposition=='inline' || $mail_part->headers['content-id'] ||
- (empty($mail_part->disposition) && $mail_part->filename))
- {
- // skip apple resource forks
- if ($message_ctype_secondary=='appledouble' && $secondary_type=='applefile')
- continue;
-
- // part belongs to a related message
- if ($message_ctype_secondary=='related' && $mail_part->headers['content-id'])
- {
- $mail_part->content_id = preg_replace(array('/^</', '/>$/'), '', $mail_part->headers['content-id']);
- $sa_inline_objects[] = $mail_part;
- }
- // is regular attachment
- else
- {
- if (!$mail_part->filename)
- $mail_part->filename = 'Part '.$mail_part->mime_id;
- $a_attachments[] = $mail_part;
- }
- }
- }
-
- // if this was a related part try to resolve references
- if ($message_ctype_secondary=='related' && sizeof($sa_inline_objects))
- {
- $a_replaces = array();
-
- foreach ($sa_inline_objects as $inline_object)
- $a_replaces['cid:'.$inline_object->content_id] = htmlspecialchars(sprintf($get_url, $inline_object->mime_id));
-
- // add replace array to each content part
- // (will be applied later when part body is available)
- for ($i=0; $i<count($a_return_parts); $i++)
- {
- if ($a_return_parts[$i]->type=='content')
- $a_return_parts[$i]->replaces = $a_replaces;
- }
- }
- }
-
- // message is single part non-text
- else if ($structure->filename)
- $a_attachments[] = $structure;
-
- return array($a_return_parts, $a_attachments);
- }
-
-
-
-
-// return table with message headers
+/**
+ * return table with message headers
+ */
function rcmail_message_headers($attrib, $headers=NULL)
{
global $IMAP, $OUTPUT, $MESSAGE;
// get associative array of headers object
if (!$headers)
- $headers = is_object($MESSAGE['headers']) ? get_object_vars($MESSAGE['headers']) : $MESSAGE['headers'];
+ $headers = is_object($MESSAGE->headers) ? get_object_vars($MESSAGE->headers) : $MESSAGE->headers;
+
+ // add empty subject if none exsists
+ if (empty($headers['subject']))
+ $headers['subject'] = rcube_label('nosubject');
$header_count = 0;
continue;
if ($hkey=='date' && !empty($headers[$hkey]))
- $header_value = format_date(strtotime($headers[$hkey]));
+ $header_value = format_date($headers[$hkey]);
else if (in_array($hkey, array('from', 'to', 'cc', 'bcc', 'reply-to')))
$header_value = Q(rcmail_address_string($headers[$hkey], NULL, $attrib['addicon']), 'show');
else
- $header_value = Q(rcube_imap::decode_mime_string($headers[$hkey], $headers['charset']));
+ $header_value = Q($IMAP->decode_header($headers[$hkey]));
$out .= "\n<tr>\n";
$out .= '<td class="header-title">'.Q(rcube_label($hkey)).": </td>\n";
}
-
+/**
+ * Handler for the 'messagebody' GUI object
+ *
+ * @param array Named parameters
+ * @return string HTML content showing the message body
+ */
function rcmail_message_body($attrib)
{
- global $CONFIG, $OUTPUT, $MESSAGE, $IMAP, $GET_URL, $REMOTE_OBJECTS;
+ global $CONFIG, $OUTPUT, $MESSAGE, $IMAP, $REMOTE_OBJECTS;
- if (!is_array($MESSAGE['parts']) && !$MESSAGE['body'])
+ if (!is_array($MESSAGE->parts) && empty($MESSAGE->body))
return '';
if (!$attrib['id'])
$attrib['id'] = 'rcmailMsgBody';
- $safe_mode = $MESSAGE['is_safe'] || intval($_GET['_safe']);
- $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id'));
- $out = '<div '. $attrib_str . ">\n";
+ $safe_mode = $MESSAGE->is_safe || intval($_GET['_safe']);
+ $out = '';
$header_attrib = array();
foreach ($attrib as $attr => $value)
if (preg_match('/^headertable([a-z]+)$/i', $attr, $regs))
$header_attrib[$regs[1]] = $value;
-
- // this is an ecrypted message
- // -> create a plaintext body with the according message
- if (!sizeof($MESSAGE['parts']) && $MESSAGE['headers']->ctype=='multipart/encrypted')
- {
- $p = new stdClass;
- $p->type = 'content';
- $p->ctype_primary = 'text';
- $p->ctype_secondary = 'plain';
- $p->body = rcube_label('encryptedmessage');
- $MESSAGE['parts'][0] = $p;
- }
-
- if ($MESSAGE['parts'])
+ if (!empty($MESSAGE->parts))
{
- foreach ($MESSAGE['parts'] as $i => $part)
+ foreach ($MESSAGE->parts as $i => $part)
{
- if ($part->type=='headers')
+ if ($part->type == 'headers')
$out .= rcmail_message_headers(sizeof($header_attrib) ? $header_attrib : NULL, $part->headers);
- else if ($part->type=='content')
+ else if ($part->type == 'content')
{
if (empty($part->ctype_parameters) || empty($part->ctype_parameters['charset']))
- $part->ctype_parameters['charset'] = $MESSAGE['headers']->charset;
+ $part->ctype_parameters['charset'] = $MESSAGE->headers->charset;
// fetch part if not available
if (!isset($part->body))
- $part->body = $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part);
+ $part->body = $MESSAGE->get_part_content($part->mime_id);
$body = rcmail_print_body($part, $safe_mode, !$CONFIG['prefer_html']);
- $out .= '<div class="message-part">';
- if ($part->ctype_secondary != 'plain')
- $out .= rcmail_sanitize_html($body, $attrib['id']);
+ if ($part->ctype_secondary == 'html')
+ $out .= html::div('message-htmlpart', rcmail_html4inline($body, $attrib['id']));
else
- $out .= $body;
-
- $out .= "</div>\n";
+ $out .= html::div('message-part', $body);
}
}
}
else
- $out .= $MESSAGE['body'];
+ $out .= html::div('message-part', html::div('pre', Q($MESSAGE->body)));
- $ctype_primary = strtolower($MESSAGE['structure']->ctype_primary);
- $ctype_secondary = strtolower($MESSAGE['structure']->ctype_secondary);
+ $ctype_primary = strtolower($MESSAGE->structure->ctype_primary);
+ $ctype_secondary = strtolower($MESSAGE->structure->ctype_secondary);
// list images after mail body
- if (get_boolean($attrib['showimages']) && $ctype_primary=='multipart' &&
- !empty($MESSAGE['attachments']) && !strstr($message_body, '<html') && strlen($GET_URL))
- {
- foreach ($MESSAGE['attachments'] as $attach_prop)
- {
- if (strpos($attach_prop->mimetype, 'image/')===0)
- $out .= sprintf("\n<hr />\n<p align=\"center\"><img src=\"%s&_part=%s\" alt=\"%s\" title=\"%s\" /></p>\n",
- htmlspecialchars($GET_URL), $attach_prop->mime_id,
- $attach_prop->filename,
- $attach_prop->filename);
- }
+ if (get_boolean($attrib['showimages']) && $ctype_primary == 'multipart' &&
+ !empty($MESSAGE->attachments) && !strstr($message_body, '<html')) {
+ foreach ($MESSAGE->attachments as $attach_prop) {
+ if (strpos($attach_prop->mimetype, 'image/') === 0) {
+ $out .= html::tag('hr') . html::p(array('align' => "center"),
+ html::img(array(
+ 'src' => $MESSAGE->get_part_url($attach_prop->mime_id),
+ 'title' => $attach_prop->filename,
+ 'alt' => $attach_prop->filename,
+ )));
+ }
}
+ }
// tell client that there are blocked remote objects
if ($REMOTE_OBJECTS && !$safe_mode)
$OUTPUT->set_env('blockedobjects', true);
- $out .= "\n</div>";
- return $out;
+ return html::div($attrib, $out);
}
-// modify a HTML message that it can be displayed inside a HTML page
-function rcmail_sanitize_html($body, $container_id)
+/**
+ * modify a HTML message that it can be displayed inside a HTML page
+ */
+function rcmail_html4inline($body, $container_id)
{
- // remove any null-byte characters before parsing
- $body = preg_replace('/\x00/', '', $body);
-
$base_url = "";
$last_style_pos = 0;
$body_lc = strtolower($body);
$last_style_pos = $pos2;
}
-
- // remove SCRIPT tags
- foreach (array('script', 'applet', 'object', 'embed', 'iframe') as $tag)
- {
- while (($pos = strpos($body_lc, '<'.$tag)) && (($pos2 = strpos($body_lc, '</'.$tag.'>', $pos)) || ($pos3 = strpos($body_lc, '>', $pos))))
- {
- $end = $pos2 ? $pos2 + strlen('</'.$tag.'>') : $pos3 + 1;
- $body = substr($body, 0, $pos) . substr($body, $end, strlen($body)-$end);
- $body_lc = strtolower($body);
- }
- }
-
- // replace event handlers on any object
- while ($body != $prev_body)
- {
- $prev_body = $body;
- $body = preg_replace('/(<[^!][^>]*\s)on(?:load|unload|click|dblclick|mousedown|mouseup|mouseover|mousemove|mouseout|focus|blur|keypress|keydown|keyup|submit|reset|select|change)=([^>]+>)/im', '$1__removed=$2', $body);
- $body = preg_replace('/(<[^!][^>]*\shref=["\']?)(javascript:)([^>]*?>)/im', '$1null:$3', $body);
- }
-
// resolve <base href>
if ($base_url)
{
// add comments arround html and other tags
$out = preg_replace(array(
- '/(<!DOCTYPE.+)/i',
+ '/(<!DOCTYPE[^>]*>)/i',
+ '/(<\?xml[^>]*>)/i',
'/(<\/?html[^>]*>)/i',
'/(<\/?head[^>]*>)/i',
'/(<title[^>]*>.*<\/title>)/Ui',
$body);
$out = preg_replace(
- array(
- '/<body([^>]*)>/i',
- '/<\/body>/i',
- ),
- array(
- '<div class="rcmBody"\\1>',
- '</div>',
- ),
+ array('/<body([^>]*)>/i', '/<\/body>/i'),
+ array('<div class="rcmBody"\\1>', '</div>'),
$out);
// quote <? of php and xml files that are specified as text/html
}
-// parse link attributes and set correct target
+/**
+ * parse link attributes and set correct target
+ */
function rcmail_alter_html_link($tag, $attrs, $container_id)
{
- $in = preg_replace('/=([^("|\'|\s)]+)(\s|$)/', '="\1"', $in);
$attrib = parse_attrib_string($attrs);
-
+
if ($tag == 'link' && preg_match('/^https?:\/\//i', $attrib['href']))
$attrib['href'] = "./bin/modcss.php?u=" . urlencode($attrib['href']) . "&c=" . urlencode($container_id);
"return %s.command('compose','%s',this)",
JS_OBJECT_NAME,
JQ(substr($attrib['href'], 7)));
-
+
else if (!empty($attrib['href']) && $attrib['href']{0}!='#')
$attrib['target'] = '_blank';
}
-function rcmail_has_html_part($message_parts)
-{
- if (!is_array($message_parts))
- return FALSE;
-
- // check all message parts
- foreach ($message_parts as $pid => $part)
- {
- $mimetype = strtolower($part->ctype_primary.'/'.$part->ctype_secondary);
- if ($mimetype=='text/html')
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-// return first HTML part of a message
-function rcmail_first_html_part($message_struct)
- {
- global $IMAP;
-
- if (!is_array($message_struct['parts']))
- return FALSE;
-
- $html_part = NULL;
-
- // check all message parts
- foreach ($message_struct['parts'] as $pid => $part)
- {
- $mimetype = strtolower($part->ctype_primary.'/'.$part->ctype_secondary);
- if ($mimetype=='text/html')
- {
- $html_part = $IMAP->get_message_part($message_struct['UID'], $pid, $part);
- }
- }
-
- if ($html_part)
- {
- // remove special chars encoding
- //$trans = array_flip(get_html_translation_table(HTML_ENTITIES));
- //$html_part = strtr($html_part, $trans);
-
- return $html_part;
- }
-
- return FALSE;
-}
-
-
-// return first text part of a message
-function rcmail_first_text_part($message_struct)
- {
- global $IMAP;
-
- if (empty($message_struct['parts']))
- return $message_struct['UID'] ? $IMAP->get_body($message_struct['UID']) : false;
-
- // check all message parts
- foreach ($message_struct['parts'] as $pid => $part)
- {
- $mimetype = strtolower($part->ctype_primary.'/'.$part->ctype_secondary);
-
- if ($mimetype=='text/plain')
- return $IMAP->get_message_part($message_struct['UID'], $pid, $part);
-
- else if ($mimetype=='text/html')
- {
- $html_part = $IMAP->get_message_part($message_struct['UID'], $pid, $part);
-
- // remove special chars encoding
- $trans = array_flip(get_html_translation_table(HTML_ENTITIES));
- $html_part = strtr($html_part, $trans);
-
- // create instance of html2text class
- $txt = new html2text($html_part);
- return $txt->get_text();
- }
- }
-
- return FALSE;
- }
-
-
-// decode address string and re-format it as HTML links
+/**
+ * decode address string and re-format it as HTML links
+ */
function rcmail_address_string($input, $max=NULL, $addicon=NULL)
{
global $IMAP, $PRINT_MODE, $CONFIG, $OUTPUT, $EMAIL_ADDRESS_PATTERN;
-
+
$a_parts = $IMAP->decode_address_list($input);
if (!sizeof($a_parts))
function rcmail_message_part_controls()
{
- global $CONFIG, $IMAP, $MESSAGE;
+ global $MESSAGE;
$part = asciiwords(get_input_value('_part', RCUBE_INPUT_GPC));
- if (!is_array($MESSAGE) || !is_array($MESSAGE['parts']) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE['parts'][$part])
+ if (!is_object($MESSAGE) || !is_array($MESSAGE->parts) || !($_GET['_uid'] && $_GET['_part']) || !$MESSAGE->mime_parts[$part])
return '';
- $part = $MESSAGE['parts'][$part];
- $attrib_str = create_attrib_string($attrib, array('id', 'class', 'style', 'cellspacing', 'cellpadding', 'border', 'summary'));
- $out = '<table '. $attrib_str . ">\n";
+ $part = $MESSAGE->mime_parts[$part];
+ $table = new html_table(array('cols' => 3));
- if ($part->filename)
- {
- $out .= sprintf('<tr><td class="title">%s</td><td>%s</td><td>[<a href="./?%s">%s</a>]</tr>'."\n",
- Q(rcube_label('filename')),
- Q($part->filename),
- str_replace('_frame=', '_download=', $_SERVER['QUERY_STRING']),
- Q(rcube_label('download')));
- }
-
- if ($part->size)
- $out .= sprintf('<tr><td class="title">%s</td><td>%s</td></tr>'."\n",
- Q(rcube_label('filesize')),
- show_bytes($part->size));
+ if (!empty($part->filename)) {
+ $table->add('title', Q(rcube_label('filename')));
+ $table->add(null, Q($part->filename));
+ $table->add(null, '[' . html::a('?'.str_replace('_frame=', '_download=', $_SERVER['QUERY_STRING']), Q(rcube_label('download'))) . ']');
+ }
- $out .= "\n</table>";
+ if (!empty($part->size)) {
+ $table->add('title', Q(rcube_label('filesize')));
+ $table->add(null, Q(show_bytes($part->size)));
+ }
- return $out;
+ return $table->show($attrib);
}
{
global $MESSAGE;
- $part = $MESSAGE['parts'][asciiwords(get_input_value('_part', RCUBE_INPUT_GPC))];
+ $part = $MESSAGE->mime_parts[asciiwords(get_input_value('_part', RCUBE_INPUT_GPC))];
$ctype_primary = strtolower($part->ctype_primary);
$attrib['src'] = Q('./?'.str_replace('_frame=', ($ctype_primary=='text' ? '_show=' : '_preload='), $_SERVER['QUERY_STRING']));
}
-// clear message composing settings
+/**
+ * clear message composing settings
+ */
function rcmail_compose_cleanup()
{
if (!isset($_SESSION['compose']))
{
global $CONFIG;
- $headers = $message->headers();
$msg_body = $message->get();
+ $headers = $message->headers();
// send thru SMTP server using custom SMTP library
if ($CONFIG['smtp_server'])
// clean Bcc from header for recipients
$send_headers = $headers;
unset($send_headers['Bcc']);
+ // here too, it because txtHeaders() below use $message->_headers not only $send_headers
+ unset($message->_headers['Bcc']);
// send message
$smtp_response = array();
- $sent = smtp_mail($from, $a_recipients, ($foo = $message->txtHeaders($send_headers)), $msg_body, $smtp_response);
+ $sent = smtp_mail($from, $a_recipients, ($foo = $message->txtHeaders($send_headers, true)), $msg_body, $smtp_response);
// log error
if (!$sent)
function rcmail_send_mdn($uid)
{
global $CONFIG, $USER, $IMAP;
+
+ $message = new rcube_message($uid);
- $message = array('UID' => $uid);
- $message['headers'] = $IMAP->get_headers($message['UID']);
- $message['subject'] = rcube_imap::decode_mime_string($message['headers']->subject, $message['headers']->charset);
-
- if ($message['headers']->mdn_to && !$message['headers']->mdn_sent)
+ if ($message->headers->mdn_to && !$message->headers->mdn_sent)
{
$identity = $USER->get_identity();
$sender = format_email_recipient($identity['email'], $identity['name']);
- $recipient = array_shift($IMAP->decode_address_list($message['headers']->mdn_to));
+ $recipient = array_shift($IMAP->decode_address_list($message->headers->mdn_to));
$mailto = $recipient['mailto'];
- $compose = new rc_mail_mime(rcmail_header_delm());
+ $compose = new rcube_mail_mime(rcmail_header_delm());
$compose->setParam(array(
'text_encoding' => 'quoted-printable',
'html_encoding' => 'quoted-printable',
$headers = array(
'Date' => date('r'),
'From' => $sender,
- 'To' => $message['headers']->mdn_to,
- 'Subject' => rcube_label('receiptread') . ': ' . $message['subject'],
+ 'To' => $message->headers->mdn_to,
+ 'Subject' => rcube_label('receiptread') . ': ' . $message->subject,
'Message-ID' => sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), rcmail_mail_domain($_SESSION['imap_host'])),
'X-Sender' => $identity['email'],
'Content-Type' => 'multipart/report; report-type=disposition-notification',
$headers['User-Agent'] = $CONFIG['useragent'];
$body = rcube_label("yourmessage") . "\r\n\r\n" .
- "\t" . rcube_label("to") . ': ' . rcube_imap::decode_mime_string($message['headers']->to, $message['headers']->charset) . "\r\n" .
- "\t" . rcube_label("subject") . ': ' . $message['subject'] . "\r\n" .
- "\t" . rcube_label("sent") . ': ' . format_date(strtotime($message['headers']->date), $CONFIG['date_long']) . "\r\n" .
+ "\t" . rcube_label("to") . ': ' . rcube_imap::decode_mime_string($message->headers->to, $message->headers->charset) . "\r\n" .
+ "\t" . rcube_label("subject") . ': ' . $message->subject . "\r\n" .
+ "\t" . rcube_label("sent") . ': ' . format_date($message->headers->date, $CONFIG['date_long']) . "\r\n" .
"\r\n" . rcube_label("receiptnote") . "\r\n";
$ua = !empty($CONFIG['useragent']) ? $CONFIG['useragent'] : "RoundCube Webmail (Version ".RCMAIL_VERSION.")";
$report = "Reporting-UA: $ua\r\n";
- if ($message['headers']->to)
- $report .= "Original-Recipient: {$message['headers']->to}\r\n";
+ if ($message->headers->to)
+ $report .= "Original-Recipient: {$message->headers->to}\r\n";
$report .= "Final-Recipient: rfc822; {$identity['email']}\r\n" .
- "Original-Message-ID: {$message['headers']->messageID}\r\n" .
+ "Original-Message-ID: {$message->headers->messageID}\r\n" .
"Disposition: manual-action/MDN-sent-manually; displayed\r\n";
- $compose->headers($headers, true);
- $compose->setTXTBody($body);
+ $compose->headers($headers);
+ $compose->setTXTBody(wordwrap($body, 75, "\r\n"));
$compose->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline');
$sent = rcmail_deliver_message($compose, $identity['email'], $mailto);
if ($sent)
{
- $IMAP->set_flag($message['UID'], 'MDNSENT');
+ $IMAP->set_flag($message->uid, 'MDNSENT');
return true;
}
}
'messagecontentframe' => 'rcmail_messagecontent_frame',
'messagepartframe' => 'rcmail_message_part_frame',
'messagepartcontrols' => 'rcmail_message_part_controls',
- 'searchform' => 'rcmail_search_form'
+ 'searchform' => array($OUTPUT, 'search_form'),
));
?>
| program/steps/mail/get.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: get.inc 1026 2008-02-07 07:50:37Z thomasb $
+ $Id: get.inc 1400 2008-05-17 17:46:43Z thomasb $
*/
// show loading page
-if ($_GET['_preload'])
- {
+if (!empty($_GET['_preload'])) {
$url = str_replace('&_preload=1', '', $_SERVER['REQUEST_URI']);
$message = rcube_label('loadingdata');
$message .
"\n</body>\n</html>";
exit;
- }
+}
// similar code as in program/steps/mail/show.inc
-if ($_GET['_uid'])
- {
- $MESSAGE = array('UID' => get_input_value('_uid', RCUBE_INPUT_GET));
- $MESSAGE['structure'] = $IMAP->get_structure($MESSAGE['UID']);
- $MESSAGE['parts'] = $IMAP->get_mime_numbers($MESSAGE['structure']);
- }
+if (!empty($_GET['_uid'])) {
+ $RCMAIL->config->set('prefer_html', true);
+ $MESSAGE = new rcube_message(get_input_value('_uid', RCUBE_INPUT_GET));
+}
// show part page
-if ($_GET['_frame'])
- {
- parse_template('messagepart');
+if (!empty($_GET['_frame'])) {
+ $OUTPUT->send('messagepart');
exit;
- }
+}
-else if ($pid = get_input_value('_part', RCUBE_INPUT_GET))
- {
- if ($part = $MESSAGE['parts'][$pid])
- {
+else if ($pid = get_input_value('_part', RCUBE_INPUT_GET)) {
+ if ($part = $MESSAGE->mime_parts[$pid]) {
$ctype_primary = strtolower($part->ctype_primary);
$ctype_secondary = strtolower($part->ctype_secondary);
$mimetype = sprintf('%s/%s', $ctype_primary, $ctype_secondary);
header("Content-Transfer-Encoding: binary");
// send download headers
- if ($_GET['_download'])
- {
+ if ($_GET['_download']) {
header("Cache-Control: private", false);
header("Content-Type: application/octet-stream");
- }
+ }
else
header("Content-Type: $mimetype");
// We need to set the following headers to make downloads work using IE in HTTPS mode.
- if (isset($_SERVER['HTTPS']))
- {
+ if (isset($_SERVER['HTTPS'])) {
header('Pragma: ');
header('Cache-Control: ');
- }
+ }
// deliver part content
- if ($ctype_primary=='text' && $ctype_secondary=='html')
- {
+ if ($ctype_primary == 'text' && $ctype_secondary == 'html') {
// we have to analyze the whole structure again to find inline objects
+ /* what was this good for again ?
list($new_parts, $new_attachments) =
rcmail_parse_message($MESSAGE['structure'],
array('safe' => intval($_GET['_safe']),
for ($partix = 0; $partix < sizeof($all_parts); $partix++)
if ($all_parts[$partix]->mime_id == $pid)
$part = &$all_parts[$partix];
+ */
// get part body if not available
if (!$part->body)
- $part->body = $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part);
+ $part->body = $MESSAGE->get_part_content($part->mime_id);
$OUTPUT = new rcube_html_page();
- $OUTPUT->write(rcmail_print_body($part, intval($_GET['_safe'])));
- }
- else
- {
+ $OUTPUT->write(rcmail_print_body($part, $MESSAGE->is_safe));
+ }
+ else {
header(sprintf('Content-Disposition: %s; filename="%s";',
$_GET['_download'] ? 'attachment' : 'inline',
$part->filename ? abbreviate_string($part->filename, 55) : "roundcube.$ctype_secondary"));
// turn off output buffering and print part content
- $IMAP->get_message_part($MESSAGE['UID'], $part->mime_id, $part, true);
- }
+ $IMAP->get_message_part($MESSAGE->uid, $part->mime_id, $part, true);
+ }
exit;
- }
}
+}
// print message
-else
- {
- $ctype_primary = strtolower($MESSAGE['structure']->ctype_primary);
- $ctype_secondary = strtolower($MESSAGE['structure']->ctype_secondary);
- $mimetype = sprintf('%s/%s', $ctype_primary, $ctype_secondary);
-
+else {
// send correct headers for content type
header("Content-Type: text/html");
- $cont = '';
- list($MESSAGE['parts']) = rcmail_parse_message($MESSAGE['structure'],
- array('safe' => intval($_GET['_safe']),
- 'get_url' => $GET_URL.'&_part=%s'));
-
$cont = "<html>\n<head><title></title>\n</head>\n<body>";
$cont .= rcmail_message_body(array());
$cont .= "\n</body>\n</html>";
$OUTPUT->write($cont);
exit;
- }
+}
// if we arrive here, the requested part was not found
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: mark.inc 1019 2008-02-05 21:39:08Z thomasb $
+ $Id: mark.inc 1292 2008-04-12 17:37:22Z alec $
*/
$flag = $a_flags_map[$flag] ? $a_flags_map[$flag] : strtoupper($flag);
$marked = $IMAP->set_flag($uids, $flag);
+ if($flag == 'DELETED' && $CONFIG['read_when_deleted'] && !empty($_POST['_ruid']))
+ {
+ $uids = get_input_value('_ruid', RCUBE_INPUT_POST);
+ $read = $IMAP->set_flag($uids, 'SEEN');
+
+ if ($read != -1)
+ $OUTPUT->command('flag_deleted_as_read', $uids);
+ }
+
if ($marked != -1)
{
$mbox_name = $IMAP->get_mailbox_name();
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: move_del.inc 1019 2008-02-05 21:39:08Z thomasb $
+ $Id: move_del.inc 1359 2008-05-06 16:56:42Z alec $
*/
$old_pages = ceil($old_count / $IMAP->page_size);
// move messages
-if ($_action=='moveto' && !empty($_POST['_uid']) && !empty($_POST['_target_mbox']))
-{
- $count = sizeof(explode(',', ($uids = get_input_value('_uid', RCUBE_INPUT_POST))));
- $target = get_input_value('_target_mbox', RCUBE_INPUT_POST);
- $moved = $IMAP->move_message($uids, $target, get_input_value('_mbox', RCUBE_INPUT_POST));
+if ($RCMAIL->action=='moveto' && !empty($_POST['_uid']) && !empty($_POST['_target_mbox'])) {
+ $count = sizeof(explode(',', ($uids = get_input_value('_uid', RCUBE_INPUT_POST))));
+ $target = get_input_value('_target_mbox', RCUBE_INPUT_POST);
+ $moved = $IMAP->move_message($uids, $target, get_input_value('_mbox', RCUBE_INPUT_POST));
- if (!$moved)
- {
- // send error message
- $OUTPUT->command('list_mailbox');
- $OUTPUT->show_message('errormoving', 'error');
- $OUTPUT->send();
- exit;
- }
+ if (!$moved) {
+ // send error message
+ $OUTPUT->command('list_mailbox');
+ $OUTPUT->show_message('errormoving', 'error');
+ $OUTPUT->send();
+ exit;
+ }
}
-
// delete messages
-else if ($_action=='delete' && !empty($_POST['_uid']))
-{
- $count = sizeof(explode(',', ($uids = get_input_value('_uid', RCUBE_INPUT_POST))));
- $del = $IMAP->delete_message($uids, get_input_value('_mbox', RCUBE_INPUT_POST));
+else if ($RCMAIL->action=='delete' && !empty($_POST['_uid'])) {
+ $count = sizeof(explode(',', ($uids = get_input_value('_uid', RCUBE_INPUT_POST))));
+ $del = $IMAP->delete_message($uids, get_input_value('_mbox', RCUBE_INPUT_POST));
- if (!$del)
- {
- // send error message
- $OUTPUT->command('list_mailbox');
- $OUTPUT->show_message('errordeleting', 'error');
- $OUTPUT->send();
- exit;
- }
+ if (!$del) {
+ // send error message
+ $OUTPUT->command('list_mailbox');
+ $OUTPUT->show_message('errordeleting', 'error');
+ $OUTPUT->send();
+ exit;
+ }
}
-
// unknown action or missing query param
-else
- exit;
-
+else {
+ exit;
+}
// refresh saved search set after moving some messages
-if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $IMAP->search_set)
- $_SESSION['search'][$search_request] = $IMAP->refresh_search();
-
+if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $IMAP->search_set) {
+ $_SESSION['search'][$search_request] = $IMAP->refresh_search();
+}
-$msg_count = $IMAP->messagecount();
-$pages = ceil($msg_count / $IMAP->page_size);
+$msg_count = $IMAP->messagecount();
+$pages = ceil($msg_count / $IMAP->page_size);
$nextpage_count = $old_count - $IMAP->page_size * $IMAP->list_page;
-$remaining = $msg_count - $IMAP->page_size * ($IMAP->list_page - 1);
+$remaining = $msg_count - $IMAP->page_size * ($IMAP->list_page - 1);
// jump back one page (user removed the whole last page)
-if ($IMAP->list_page > 1 && $nextpage_count <= 0 && $remaining == 0)
-{
- $IMAP->set_page($IMAP->list_page-1);
- $_SESSION['page'] = $IMAP->list_page;
- $jump_back = true;
+if ($IMAP->list_page > 1 && $nextpage_count <= 0 && $remaining == 0) {
+ $IMAP->set_page($IMAP->list_page-1);
+ $_SESSION['page'] = $IMAP->list_page;
+ $jump_back = true;
}
// update message count display
$OUTPUT->set_env('pagecount', $pages);
+$OUTPUT->set_env('messagecount', $msg_count);
$OUTPUT->set_env('current_page', $IMAP->list_page);
$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($msg_count));
$mbox = $IMAP->get_mailbox_name();
$OUTPUT->command('set_unread_count', $mbox, $IMAP->messagecount($mbox, 'UNSEEN'), ($mbox == 'INBOX'));
-if ($_action=='moveto' && $target)
- $OUTPUT->command('set_unread_count', $target, $IMAP->messagecount($target, 'UNSEEN'));
+if ($RCMAIL->action=='moveto' && $target) {
+ $OUTPUT->command('set_unread_count', $target, $IMAP->messagecount($target, 'UNSEEN'));
+}
-$OUTPUT->command('set_quota', $IMAP->get_quota());
+$OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota()));
// add new rows from next page (if any)
-if ($_POST['_from']!='show' && ($jump_back || $nextpage_count > 0))
-{
- $sort_col = isset($_SESSION['sort_col']) ? $_SESSION['sort_col'] : $CONFIG['message_sort_col'];
- $sort_order = isset($_SESSION['sort_order']) ? $_SESSION['sort_order'] : $CONFIG['message_sort_order'];
+if ($_POST['_from']!='show' && ($jump_back || $nextpage_count > 0)) {
+ $sort_col = isset($_SESSION['sort_col']) ? $_SESSION['sort_col'] : $CONFIG['message_sort_col'];
+ $sort_order = isset($_SESSION['sort_order']) ? $_SESSION['sort_order'] : $CONFIG['message_sort_order'];
- $a_headers = $IMAP->list_headers($mbox, NULL, $sort_col, $sort_order);
- if (!$jump_back)
- $a_headers = array_slice($a_headers, -$count, $count);
-
- rcmail_js_message_list($a_headers);
+ $a_headers = $IMAP->list_headers($mbox, NULL, $sort_col, $sort_order);
+ if (!$jump_back) {
+ $a_headers = array_slice($a_headers, -$count, $count);
+ }
+ rcmail_js_message_list($a_headers);
}
-
// send response
$OUTPUT->send();
-
-?>
+++ /dev/null
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/steps/mail/quotadisplay.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Remote call to return the quota image or text |
- | |
- +-----------------------------------------------------------------------+
- | Author: Robin Elfrink <robin@15augustus.nl> |
- +-----------------------------------------------------------------------+
-
- $Id: quotadisplay.inc 850 2007-10-03 00:13:32Z ihug $
-
-*/
-
-$display = isset($_GET['_display']) ? $_GET['_display'] : 'text';
-$id = isset($_GET['_id']) ? $_GET['_id'] : 'rcmquotadisplay';
-$quota = rcmail_quota_content($display);
-$OUTPUT->remote_response(sprintf("this.gui_objects.%s.innerHTML = '%s';\n", $id, $quota));
-
-exit;
-?>
| program/steps/mail/sendmail.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: sendmail.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: sendmail.inc 1344 2008-04-30 08:21:42Z thomasb $
*/
-//require_once('lib/smtp.inc');
-require_once('lib/html2text.inc');
-require_once('lib/rc_mail_mime.inc');
-
-
if (!isset($_SESSION['compose']['id']))
{
rcmail_overwrite_action('list');
*/
function rcmail_attach_emoticons(&$mime_message)
{
- global $CONFIG, $INSTALL_PATH;
+ global $CONFIG;
$htmlContents = $mime_message->getHtmlBody();
if (! in_array($image_name, $included_images))
{
// add the image to the MIME message
- $img_file = $INSTALL_PATH . '/' . $searchstr . $image_name;
+ $img_file = INSTALL_PATH . '/' . $searchstr . $image_name;
if(! $mime_message->addHTMLImage($img_file, 'image/gif', '', true, '_' . $image_name))
$OUTPUT->show_message("emoticonerror", 'error');
}
// additional headers
-$headers['Message-ID'] = $message_id;
-$headers['X-Sender'] = $from;
-
if ($CONFIG['http_received_header'])
{
$nldlm = rcmail_header_delm() . "\t";
69, $nldlm);
}
+$headers['Message-ID'] = $message_id;
+$headers['X-Sender'] = $from;
+
if (!empty($CONFIG['useragent']))
$headers['User-Agent'] = $CONFIG['useragent'];
$isHtml = ($isHtmlVal == "1");
// create extended PEAR::Mail_mime instance
-$MAIL_MIME = new rc_mail_mime(rcmail_header_delm());
+$MAIL_MIME = new rcube_mail_mime(rcmail_header_delm());
// For HTML-formatted messages, construct the MIME message with both
// the HTML part and the plain-text part
));
// encoding subject header with mb_encode provides better results with asian characters
-if ($MBSTRING && function_exists("mb_encode_mimeheader"))
+if (function_exists("mb_encode_mimeheader"))
{
mb_internal_encoding($message_charset);
$headers['Subject'] = mb_encode_mimeheader($headers['Subject'], $message_charset, 'Q');
*/
-require_once('lib/rc_mail_mime.inc');
-
if (!empty($_POST['_uid'])) {
$sent = rcmail_send_mdn(get_input_value('_uid', RCUBE_INPUT_POST));
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: show.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: show.inc 1400 2008-05-17 17:46:43Z thomasb $
*/
-require_once('Mail/mimeDecode.php');
-require_once('lib/rc_mail_mime.inc');
-
-$PRINT_MODE = $_action=='print' ? TRUE : FALSE;
+$PRINT_MODE = $RCMAIL->action=='print' ? TRUE : FALSE;
// similar code as in program/steps/mail/get.inc
-if ($_GET['_uid'])
- {
- $MESSAGE = array('UID' => get_input_value('_uid', RCUBE_INPUT_GET));
- $MESSAGE['headers'] = $IMAP->get_headers($MESSAGE['UID']);
+if ($_GET['_uid']) {
+ $MESSAGE = new rcube_message(get_input_value('_uid', RCUBE_INPUT_GET));
// set message charset as default
- if (!empty($MESSAGE['headers']->charset))
- $IMAP->set_charset($MESSAGE['headers']->charset);
-
+ if (!empty($MESSAGE->headers->charset))
+ $IMAP->set_charset($MESSAGE->headers->charset);
+
// go back to list if message not found (wrong UID)
- if (!$MESSAGE['headers'])
- {
+ if (empty($MESSAGE->headers)) {
$OUTPUT->show_message('messageopenerror', 'error');
- if ($_action=='preview' && template_exists('messagepreview'))
- parse_template('messagepreview');
- else
- {
- $_action = 'list';
+ if ($RCMAIL->action=='preview' && template_exists('messagepreview'))
+ $OUTPUT->send('messagepreview');
+ else {
+ $RCMAIL->action = 'list';
return;
- }
}
+ }
- // check if safe flag is set
- if ($MESSAGE['is_safe'] = intval($_GET['_safe']))
- $_SESSION['safe_messages'][$MESSAGE['UID']] = true;
- else if ($_SESSION['safe_messages'][$MESSAGE['UID']])
- $MESSAGE['is_safe'] = 1;
-
+ $mbox_name = $IMAP->get_mailbox_name();
+
// calculate Etag for this request
- $etag = md5($MESSAGE['UID'].$IMAP->get_mailbox_name().session_id().intval($MESSAGE['headers']->mdn_sent).intval($MESSAGE['is_safe']).intval($PRINT_MODE));
+ $etag = md5($MESSAGE->uid.$mbox_name.session_id().intval($MESSAGE->headers->mdn_sent).intval($MESSAGE->is_safe).intval($PRINT_MODE));
// allow caching, unless remote images are present
- if ((bool)$MESSAGE['is_safe'])
+ if ((bool)$MESSAGE->is_safe)
send_nocacheing_headers();
else if (empty($CONFIG['devel_mode']))
- send_modified_header($_SESSION['login_time'], $etag);
+ send_modified_header($_SESSION['login_time'], $etag, !$MESSAGE->headers->seen);
- $MESSAGE['subject'] = rcube_imap::decode_mime_string($MESSAGE['headers']->subject, $MESSAGE['headers']->charset);
- $OUTPUT->set_pagetitle($MESSAGE['subject']);
+ $OUTPUT->set_pagetitle($MESSAGE->subject);
- if ($MESSAGE['structure'] = $IMAP->get_structure($MESSAGE['UID']))
- list($MESSAGE['parts'], $MESSAGE['attachments']) = rcmail_parse_message(
- $MESSAGE['structure'],
- array('safe' => $MESSAGE['is_safe'],
- 'prefer_html' => $CONFIG['prefer_html'],
- 'get_url' => $GET_URL.'&_part=%s')
- );
- else
- $MESSAGE['body'] = $IMAP->get_body($MESSAGE['UID']);
-
-
// mark message as read
- if (!$MESSAGE['headers']->seen && $_action != 'preview')
- $IMAP->set_flag($MESSAGE['UID'], 'SEEN');
+ if (!$MESSAGE->headers->seen)
+ {
+ $marked = $IMAP->set_flag($MESSAGE->uid, 'SEEN');
+ if($RCMAIL->action == 'preview' && $marked != -1)
+ {
+ $OUTPUT->command('set_unread_count_from_preview', $mbox_name, $IMAP->messagecount($mbox_name, 'UNSEEN'), ($mbox_name == 'INBOX'));
+ $OUTPUT->command('mark_as_read_from_preview', $MESSAGE->uid);
+ }
+ }
// give message uid to the client
- $OUTPUT->set_env('uid', $MESSAGE['UID']);
- $OUTPUT->set_env('safemode', $MESSAGE['is_safe']);
+ $OUTPUT->set_env('uid', $MESSAGE->uid);
+ $OUTPUT->set_env('safemode', $MESSAGE->is_safe);
// check for unset disposition notification
- if ($MESSAGE['headers']->mdn_to && !$MESSAGE['headers']->mdn_sent && $IMAP->get_mailbox_name() != $CONFIG['drafts_mbox'])
+ if ($MESSAGE->headers->mdn_to && !$MESSAGE->headers->mdn_sent &&
+ $mbox_name != $CONFIG['drafts_mbox'] && $mbox_name != $CONFIG['sent_mbox'])
{
if (intval($CONFIG['mdn_requests']) === 1)
{
- if (rcmail_send_mdn($MESSAGE['UID']))
+ if (rcmail_send_mdn($MESSAGE->uid))
$OUTPUT->show_message('receiptsent', 'confirmation');
}
else if (empty($CONFIG['mdn_requests']))
// Only if we use custom sorting
$a_msg_index = $IMAP->message_index(NULL, $_SESSION['sort_col'], $_SESSION['sort_order']);
- $MESSAGE['index'] = array_search((string)$MESSAGE['UID'], $a_msg_index, TRUE);
- $prev = isset($a_msg_index[$MESSAGE['index']-1]) ? $a_msg_index[$MESSAGE['index']-1] : -1 ;
+ $MESSAGE->index = array_search((string)$MESSAGE->uid, $a_msg_index, TRUE);
+ $prev = isset($a_msg_index[$MESSAGE->index-1]) ? $a_msg_index[$MESSAGE->index-1] : -1 ;
$first = count($a_msg_index)>0 ? $a_msg_index[0] : -1;
- $next = isset($a_msg_index[$MESSAGE['index']+1]) ? $a_msg_index[$MESSAGE['index']+1] : -1 ;
+ $next = isset($a_msg_index[$MESSAGE->index+1]) ? $a_msg_index[$MESSAGE->index+1] : -1 ;
$last = count($a_msg_index)>0 ? $a_msg_index[count($a_msg_index)-1] : -1;
}
else
{
// this assumes that we are sorted by date_DESC
- $seq = $IMAP->get_id($MESSAGE['UID']);
+ $seq = $IMAP->get_id($MESSAGE->uid);
$prev = $IMAP->get_uid($seq + 1);
$first = $IMAP->get_uid($IMAP->messagecount());
$next = $IMAP->get_uid($seq - 1);
$last = $IMAP->get_uid(1);
- $MESSAGE['index'] = $IMAP->messagecount() - $seq;
+ $MESSAGE->index = $IMAP->messagecount() - $seq;
}
if ($prev > 0)
function rcmail_message_attachments($attrib)
- {
- global $CONFIG, $OUTPUT, $PRINT_MODE, $MESSAGE, $GET_URL;
+{
+ global $PRINT_MODE, $MESSAGE;
+
+ $out = $ol = '';
- if (sizeof($MESSAGE['attachments']))
- {
- // allow the following attributes to be added to the <ul> tag
- $attrib_str = create_attrib_string($attrib, array('style', 'class', 'id'));
- $out = '<ul' . $attrib_str . ">\n";
-
- foreach ($MESSAGE['attachments'] as $attach_prop)
- {
- if ($PRINT_MODE)
- $out .= sprintf('<li>%s (%s)</li>'."\n",
- $attach_prop->filename,
- show_bytes($attach_prop->size));
- else
- $out .= sprintf('<li><a href="%s&_part=%s" onclick="return %s.command(\'load-attachment\',{part:\'%s\', mimetype:\'%s\'},this)">%s</a></li>'."\n",
- htmlspecialchars($GET_URL),
- $attach_prop->mime_id,
- JS_OBJECT_NAME,
- $attach_prop->mime_id,
- $attach_prop->mimetype,
- $attach_prop->filename);
+ if (sizeof($MESSAGE->attachments)) {
+ foreach ($MESSAGE->attachments as $attach_prop) {
+ if ($PRINT_MODE) {
+ $ol .= html::tag('li', null, sprintf("%s (%s)", Q($attach_prop->filename), Q(show_bytes($attach_prop->size))));
+ }
+ else {
+ $ol .= html::tag('li', null,
+ html::a(array(
+ 'href' => $MESSAGE->get_part_url($attach_prop->mime_id),
+ 'onclick' => sprintf(
+ 'return %s.command(\'load-attachment\',{part:\'%s\', mimetype:\'%s\'},this)',
+ JS_OBJECT_NAME,
+ $attach_prop->mime_id,
+ $attach_prop->mimetype),
+ ),
+ Q($attach_prop->filename)));
}
+ }
- $out .= "</ul>";
- return $out;
- }
- }
+ $out = html::tag('ul', $attrib, $ol, html::$common_attrib);
+ }
+
+ return $out;
+}
'blockedobjects' => 'rcmail_remote_objects_msg'));
-if ($_action=='print' && template_exists('printmessage'))
- parse_template('printmessage');
-else if ($_action=='preview' && template_exists('messagepreview'))
- parse_template('messagepreview');
+if ($RCMAIL->action=='print' && template_exists('printmessage'))
+ $OUTPUT->send('printmessage');
+else if ($RCMAIL->action=='preview' && template_exists('messagepreview'))
+ $OUTPUT->send('messagepreview');
else
- parse_template('message');
+ $OUTPUT->send('message');
?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: upload.inc 1085 2008-02-14 23:49:30Z till $
+ $Id: upload.inc 1434 2008-05-27 14:58:04Z thomasb $
*/
-if (!$_SESSION['compose'])
- {
- exit;
- }
+if (!$_SESSION['compose']) {
+ die("Invalid session var!");
+}
// use common temp dir for file uploads
$_SESSION['compose']['attachments'] = array();
-$response = '';
+// clear all stored output properties (like scripts and env vars)
+$OUTPUT->reset();
if (is_array($_FILES['_attachments']['tmp_name']))
{
}
}
}
+else if ($_SERVER['REQUEST_METHOD'] == 'POST')
+ {
+ $OUTPUT->command('display_message', rcube_label('fileuploaderror'), 'error');
+ }
// send html page with JS calls as response
$OUTPUT->command('show_attachment_form', false);
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: viewsource.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: viewsource.inc 1195 2008-03-21 11:45:46Z thomasb $
*/
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: edit_identity.inc 940 2007-12-11 04:20:01Z estadtherr $
+ $Id: edit_identity.inc 1412 2008-05-21 07:45:54Z alec $
*/
-if (($_GET['_iid'] || $_POST['_iid']) && $_action=='edit-identity')
+$OUTPUT->set_pagetitle(rcube_label('identities'));
+
+if (($_GET['_iid'] || $_POST['_iid']) && $RCMAIL->action=='edit-identity')
{
$IDENTITY_RECORD = $USER->get_identity(get_input_value('_iid', RCUBE_INPUT_GPC));
if (is_array($IDENTITY_RECORD))
$OUTPUT->set_env('iid', $IDENTITY_RECORD['identity_id']);
-
- $OUTPUT->set_pagetitle(rcube_label('edititem'));
}
-else
- $OUTPUT->set_pagetitle(rcube_label('newitem'));
$OUTPUT->include_script('list.js');
function rcube_identity_form($attrib)
{
- global $IDENTITY_RECORD, $OUTPUT;
+ global $IDENTITY_RECORD, $RCMAIL, $OUTPUT;
+
+ $tinylang = substr($_SESSION['language'], 0, 2);
+ if (!file_exists('program/js/tiny_mce/langs/'.$tinylang.'.js'))
+ {
+ $tinylang = 'en';
+ }
- $OUTPUT->include_script('tiny_mce/tiny_mce_src.js');
- $OUTPUT->add_script("tinyMCE.init({ mode : 'specific_textareas'," .
+ $OUTPUT->include_script('tiny_mce/tiny_mce.js');
+ $OUTPUT->add_script("tinyMCE.init({ mode : 'textareas'," .
+ "editor_selector : 'mce_editor'," .
"apply_source_formatting : true," .
+ "language : '$tinylang'," .
"content_css : '\$__skin_path' + '/editor_content.css'," .
- "editor_css : '\$__skin_path' + '/editor_ui.css'," .
"theme : 'advanced'," .
"theme_advanced_toolbar_location : 'top'," .
"theme_advanced_toolbar_align : 'left'," .
"theme_advanced_buttons2 : 'link,unlink,code,forecolor,fontselect,fontsizeselect'," .
"theme_advanced_buttons3 : '' });");
- if (!$IDENTITY_RECORD && $GLOBALS['_action']!='add-identity')
+ if (!$IDENTITY_RECORD && $RCMAIL->action != 'add-identity')
return rcube_label('notfound');
// add some labels to client
'reply-to' => array('type' => 'text', 'label' => 'replyto'),
'bcc' => array('type' => 'text'),
'signature' => array('type' => 'textarea', 'size' => "40", 'rows' => "6"),
- 'html_signature'=>array('type' => 'checkbox', 'label' => 'htmlsignature', 'onclick' => 'return rcmail.toggle_editor(this, \'_signature\');'),
+ 'html_signature'=>array('type' => 'checkbox', 'label' => 'htmlsignature', 'onclick' => 'return rcmail.toggle_editor(this, \'rcmfd_signature\');'),
'standard' => array('type' => 'checkbox', 'label' => 'setdefault'));
if (is_array($colprop))
{
$out = $form_start;
- $out .= rcmail_get_edit_field($attrib['part'], $IDENTITY_RECORD[$attrib['part']], $attrib, $colprop['type']);
+ $out .= rcmail_get_edit_field($attrib['part'], $IDENTITY_RECORD[$attrib['part']], $attrib + array('size' => 30), $colprop['type']);
return $out;
}
else
{
$attrib['size'] = $colprop['size'];
$attrib['rows'] = $colprop['rows'];
- $attrib['mce_editable'] = $IDENTITY_RECORD['html_signature'] ? "true" : "false";
+ if ($IDENTITY_RECORD['html_signature'])
+ {
+ $attrib['class'] = "mce_editor";
+ }
}
else
{
- unset($attrib['size']);
+ $attrib['size'] = 40;
unset($attrib['rows']);
- unset($attrib['mce_editable']);
}
$label = strlen($colprop['label']) ? $colprop['label'] : $col;
$OUTPUT->add_handler('identityform', 'rcube_identity_form');
-if ($_action=='add-identity' && template_exists('addidentity'))
- parse_template('addidentity');
+if ($RCMAIL->action=='add-identity' && template_exists('addidentity'))
+ $OUTPUT->send('addidentity');
-parse_template('editidentity');
+$OUTPUT->send('editidentity');
?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: func.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: func.inc 1448 2008-05-29 07:36:53Z alec $
*/
-
-if ($USER->ID)
- $OUTPUT->set_pagetitle(rcube_label('settingsfor') . " ". $USER->get_username());
-
+if (!$OUTPUT->ajax_call)
+ $OUTPUT->set_pagetitle(rcube_label('preferences'));
function rcmail_user_prefs_form($attrib)
{
- global $DB, $CONFIG, $sess_user_lang;
+ global $RCMAIL;
+ $config = $RCMAIL->config->all();
- $no_override = is_array($CONFIG['dont_override']) ? array_flip($CONFIG['dont_override']) : array();
+ $no_override = is_array($config['dont_override']) ? array_flip($config['dont_override']) : array();
// add some labels to client
rcube_add_label('nopagesizewarning');
// allow the following attributes to be added to the <table> tag
$attrib_str = create_attrib_string($attrib, array('style', 'class', 'id', 'cellpadding', 'cellspacing', 'border', 'summary'));
- // return the complete edit form as table
- $out = "$form_start<table" . $attrib_str . ">\n\n";
+ // return the complete edit form as tables
+ $out = "$form_start<fieldset><legend>" . Q(rcube_label('uisettings')) . "</legend>\n<table" . $attrib_str . ">\n\n";
// show language selection
if (!isset($no_override['language']))
{
- $a_lang = rcube_list_languages();
+ $a_lang = $RCMAIL->list_languages();
asort($a_lang);
$field_id = 'rcmfd_lang';
- $select_lang = new select(array('name' => '_language', 'id' => $field_id));
+ $select_lang = new html_select(array('name' => '_language', 'id' => $field_id));
$select_lang->add(array_values($a_lang), array_keys($a_lang));
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('language')),
- $select_lang->show($sess_user_lang));
+ $select_lang->show($_SESSION['language']));
}
if (!isset($no_override['timezone']))
{
$field_id = 'rcmfd_timezone';
- $select_timezone = new select(array('name' => '_timezone', 'id' => $field_id));
+ $select_timezone = new html_select(array('name' => '_timezone', 'id' => $field_id));
$select_timezone->add('(GMT -11:00) Midway Island, Samoa', '-11');
$select_timezone->add('(GMT -10:00) Hawaii', '-10');
$select_timezone->add('(GMT -9:30) Marquesas Islands', '-9.5');
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('timezone')),
- $select_timezone->show((string)$CONFIG['timezone']));
+ $select_timezone->show((string)$config['timezone']));
}
// daylight savings
if (!isset($no_override['dst_active']))
{
$field_id = 'rcmfd_dst';
- $input_dst = new checkbox(array('name' => '_dst_active', 'id' => $field_id, 'value' => 1));
+ $input_dst = new html_checkbox(array('name' => '_dst_active', 'id' => $field_id, 'value' => 1));
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('dstactive')),
- $input_dst->show($CONFIG['dst_active']));
+ $input_dst->show($config['dst_active']));
}
// show page size selection
if (!isset($no_override['pagesize']))
{
$field_id = 'rcmfd_pgsize';
- $input_pagesize = new textfield(array('name' => '_pagesize', 'id' => $field_id, 'size' => 5));
+ $input_pagesize = new html_inputfield(array('name' => '_pagesize', 'id' => $field_id, 'size' => 5));
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('pagesize')),
- $input_pagesize->show($CONFIG['pagesize']));
+ $input_pagesize->show($config['pagesize']));
}
// MM: Show checkbox for toggling 'pretty dates'
if (!isset($no_override['prettydate']))
{
$field_id = 'rcmfd_prettydate';
- $input_prettydate = new checkbox(array('name' => '_pretty_date', 'id' => $field_id, 'value' => 1));
+ $input_prettydate = new html_checkbox(array('name' => '_pretty_date', 'id' => $field_id, 'value' => 1));
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('prettydate')),
- $input_prettydate->show($CONFIG['prettydate']?1:0));
+ $input_prettydate->show($config['prettydate']?1:0));
}
// show checkbox for HTML/plaintext messages
if (!isset($no_override['prefer_html']))
{
$field_id = 'rcmfd_htmlmsg';
- $input_pagesize = new checkbox(array('name' => '_prefer_html', 'id' => $field_id, 'value' => 1));
+ $input_pagesize = new html_checkbox(array('name' => '_prefer_html', 'id' => $field_id, 'value' => 1));
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('preferhtml')),
- $input_pagesize->show($CONFIG['prefer_html']?1:0));
+ $input_pagesize->show($config['prefer_html']?1:0));
}
// Show checkbox for HTML Editor
if (!isset($no_override['htmleditor']))
{
$field_id = 'rcmfd_htmleditor';
- $input_htmleditor = new checkbox(array('name' => '_htmleditor', 'id' => $field_id, 'value' => 1));
+ $input_htmleditor = new html_checkbox(array('name' => '_htmleditor', 'id' => $field_id, 'value' => 1));
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('htmleditor')),
- $input_htmleditor->show($CONFIG['htmleditor']?1:0));
+ $input_htmleditor->show($config['htmleditor']?1:0));
+ }
+
+
+ if (!isset($no_override['mdn_requests']))
+ {
+ $field_id = 'rcmfd_mdn_requests';
+ $select_mdn_requests = new html_select(array('name' => '_mdn_requests', 'id' => $field_id));
+ $select_mdn_requests->add(rcube_label('askuser'), 0);
+ $select_mdn_requests->add(rcube_label('autosend'), 1);
+ $select_mdn_requests->add(rcube_label('ignore'), 2);
+
+ $out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
+ $field_id,
+ Q(rcube_label('mdnrequests')),
+ $select_mdn_requests->show($config['mdn_requests']));
}
+ $out .= "</table></fieldset>\n<fieldset><legend>" . Q(rcube_label('mailboxview')) . "</legend>\n<table" . $attrib_str . ">\n\n";
+
// show config parameter for preview pane
if (!isset($no_override['preview_pane']))
{
$field_id = 'rcmfd_preview';
- $input_preview = new checkbox(array('name' => '_preview_pane', 'id' => $field_id, 'value' => 1));
+ $input_preview = new html_checkbox(array('name' => '_preview_pane', 'id' => $field_id, 'value' => 1));
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('previewpane')),
- $input_preview->show($CONFIG['preview_pane']?1:0));
+ $input_preview->show($config['preview_pane']?1:0));
}
+
+ $out .= "</table></fieldset>\n<fieldset><legend>" . Q(rcube_label('serversettings')) . "</legend>\n<table" . $attrib_str . ">\n\n";
- if (!empty($CONFIG['drafts_mbox']) && !isset($no_override['draft_autosave']))
+ if (!empty($config['drafts_mbox']) && !isset($no_override['draft_autosave']))
{
$field_id = 'rcmfd_autosave';
- $select_autosave = new select(array('name' => '_draft_autosave', 'id' => $field_id));
+ $select_autosave = new html_select(array('name' => '_draft_autosave', 'id' => $field_id));
$select_autosave->add(rcube_label('never'), 0);
foreach (array(3, 5, 10) as $i => $min)
$select_autosave->add(rcube_label(array('name' => 'everynminutes', 'vars' => array('n' => $min))), $min*60);
$out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
$field_id,
Q(rcube_label('autosavedraft')),
- $select_autosave->show($CONFIG['draft_autosave']));
+ $select_autosave->show($config['draft_autosave']));
+ }
+
+ if (!isset($no_override['read_when_deleted']))
+ {
+ $field_id = 'rcmfd_read_deleted';
+ $input_readdeleted = new html_checkbox(array('name' => '_read_when_deleted', 'id' => $field_id, 'value' => 1));
+ $out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
+ $field_id,
+ Q(rcube_label('readwhendeleted')),
+ $input_readdeleted->show($config['read_when_deleted']?1:0));
}
- $out .= "\n</table>$form_end";
+ if (!isset($no_override['flag_for_deletion']))
+ {
+ $field_id = 'rcmfd_flag_for_deletion';
+ $input_flagfordeletion = new html_checkbox(array('name' => '_flag_for_deletion', 'id' => $field_id, 'value' => 1));
+ $out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
+ $field_id,
+ Q(rcube_label('flagfordeletion')),
+ $input_flagfordeletion->show($config['flag_for_deletion']?1:0));
+ }
+
+ // Trash purging on logout
+ if (!isset($no_override['logout_purge']))
+ {
+ $field_id = 'rcmfd_logout_purge';
+ $input_purge = new html_checkbox(array('name' => '_logout_purge', 'id' => $field_id, 'value' => 1));
+ $out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
+ $field_id,
+ Q(rcube_label('logoutclear')),
+ $input_purge->show($config['logout_purge']?1:0));
+ }
+
+ // INBOX compacting on logout
+ if (!isset($no_override['logout_expunge']))
+ {
+ $field_id = 'rcmfd_logout_expunge';
+ $input_expunge = new html_checkbox(array('name' => '_logout_expunge', 'id' => $field_id, 'value' => 1));
+ $out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n",
+ $field_id,
+ Q(rcube_label('logoutcompact')),
+ $input_expunge->show($config['logout_expunge']?1:0));
+ }
+
+ $out .= "\n</table></fieldset>$form_end";
return $out;
}
// similar function as in /steps/addressbook/edit.inc
function get_form_tags($attrib, $action, $add_hidden=array())
{
- global $OUTPUT, $EDIT_FORM, $SESS_HIDDEN_FIELD;
+ global $EDIT_FORM, $RCMAIL;
$form_start = '';
if (!strlen($EDIT_FORM))
{
- $hiddenfields = new hiddenfield(array('name' => '_task', 'value' => $GLOBALS['_task']));
+ $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $RCMAIL->task));
$hiddenfields->add(array('name' => '_action', 'value' => $action));
if ($add_hidden)
$hiddenfields->add($add_hidden);
- if ($_GET['_framed'] || $_POST['_framed'])
- $hiddenfields->add(array('name' => '_framed', 'value' => 1));
-
- $form_start = !strlen($attrib['form']) ? '<form name="form" action="./" method="post">' : '';
- $form_start .= "\n$SESS_HIDDEN_FIELD\n";
+ $form_start = !strlen($attrib['form']) ? $RCMAIL->output->form_tag(array('name' => "form", 'method' => "post")) : '';
$form_start .= $hiddenfields->show();
}
$form_name = strlen($attrib['form']) ? $attrib['form'] : 'form';
if (!strlen($EDIT_FORM))
- $OUTPUT->add_gui_object('editform', $form_name);
+ $RCMAIL->output->add_gui_object('editform', $form_name);
$EDIT_FORM = $form_name;
- return array($form_start, $form_end);
+ return array($form_start, $form_end);
}
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: identities.inc 543 2007-04-28 18:07:12Z thomasb $
+ $Id: identities.inc 1412 2008-05-21 07:45:54Z alec $
*/
-if ($USER_DATA = $DB->fetch_assoc($sql_result))
- $OUTPUT->set_pagetitle(sprintf('%s (%s@%s)', rcube_label('identities'), $USER_DATA['username'], $USER_DATA['mail_host']));
+$OUTPUT->set_pagetitle(rcube_label('identities'));
$OUTPUT->include_script('list.js');
$OUTPUT->add_handler('identityframe', 'rcmail_identity_frame');
-parse_template('identities');
+$OUTPUT->send('identities');
?>
\ No newline at end of file
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: manage_folders.inc 1255 2008-04-05 12:49:21Z thomasb $
+ $Id: manage_folders.inc 1455 2008-05-30 11:52:15Z alec $
*/
-// init IMAP connection
-rcmail_imap_init(TRUE);
-
-$OUTPUT->include_script('list.js');
+// WARNING: folder names in UI are encoded with UTF-8
+// init IMAP connection
+$RCMAIL->imap_init(true);
// subscribe to one or more mailboxes
-if ($_action=='subscribe')
+if ($RCMAIL->action=='subscribe')
{
- if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST))
+ if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF-7'))
$IMAP->subscribe(array($mbox));
-
- if ($OUTPUT->ajax_call)
- $OUTPUT->remote_response('// subscribed');
}
// unsubscribe one or more mailboxes
-else if ($_action=='unsubscribe')
+else if ($RCMAIL->action=='unsubscribe')
{
- if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST))
+ if ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST, false, 'UTF-7'))
$IMAP->unsubscribe(array($mbox));
-
- if ($OUTPUT->ajax_call)
- $OUTPUT->remote_response('// unsubscribed');
}
// create a new mailbox
-else if ($_action=='create-folder')
+else if ($RCMAIL->action=='create-folder')
{
if (!empty($_POST['_name']))
- $create = $IMAP->create_mailbox(trim(get_input_value('_name', RCUBE_INPUT_POST, FALSE, 'UTF-7')), TRUE);
-
+ {
+ $name = trim(get_input_value('_name', RCUBE_INPUT_POST, FALSE, 'UTF-7'));
+ // #1485036 (RFC3501, 5.1.3) TODO: it should be done on read not on write
+ $name = str_replace('&-', '&', $name);
+ $create = $IMAP->create_mailbox($name, TRUE);
+ }
+
if ($create && $OUTPUT->ajax_call)
{
$delimiter = $IMAP->get_hierarchy_delimiter();
+ $folderlist = $IMAP->list_unsubscribed();
+ $index = array_search($create, $folderlist);
+ $before = $index !== false && isset($folderlist[$index+1]) ? rcube_charset_convert($folderlist[$index+1], 'UTF-7') : false;
+
+ $create = rcube_charset_convert($create, 'UTF-7');
$foldersplit = explode($delimiter, $create);
- $display_create = str_repeat(' ', substr_count($create, $delimiter)) . rcube_charset_convert($foldersplit[count($foldersplit)-1], 'UTF-7');
- $OUTPUT->command('add_folder_row', $create, $display_create);
- $OUTPUT->send();
+ $display_create = str_repeat(' ', substr_count($create, $delimiter)) . $foldersplit[count($foldersplit)-1];
+
+ $OUTPUT->command('add_folder_row', $create, $display_create, false, $before);
}
- else if (!$create && $OUTPUT->ajax_call)
+ else if (!$create)
{
$OUTPUT->show_message('errorsaving', 'error');
- $OUTPUT->remote_response();
}
- else if (!$create)
- $OUTPUT->show_message('errorsaving', 'error');
}
// rename a mailbox
-else if ($_action=='rename-folder')
+else if ($RCMAIL->action=='rename-folder')
{
- $a_mboxes = array_unique(array_merge($IMAP->list_mailboxes(), $IMAP->list_unsubscribed()));
- $delimiter = $IMAP->get_hierarchy_delimiter();
-
if (!empty($_POST['_folder_oldname']) && !empty($_POST['_folder_newname']))
- $rename = $IMAP->rename_mailbox(($oldname = get_input_value('_folder_oldname', RCUBE_INPUT_POST)), trim(get_input_value('_folder_newname', RCUBE_INPUT_POST, FALSE, 'UTF-7')));
-
+ {
+ $name_utf8 = trim(get_input_value('_folder_newname', RCUBE_INPUT_POST));
+ $oldname_utf8 = get_input_value('_folder_oldname', RCUBE_INPUT_POST);
+ $name = rcube_charset_convert($name_utf8, 'UTF-8', 'UTF-7');
+ $oldname = rcube_charset_convert($oldname_utf8, 'UTF-8', 'UTF-7');
+
+ // #1485036 (RFC3501, 5.1.3) TODO: it should be done on read not on write
+ $name = str_replace('&-', '&', $name);
+
+ $rename = $IMAP->rename_mailbox($oldname, $name);
+ }
+
if ($rename && $OUTPUT->ajax_call)
{
+ $folderlist = $IMAP->list_unsubscribed();
$delimiter = $IMAP->get_hierarchy_delimiter();
- $foldersplit = explode($delimiter, $rename);
- $level = count($foldersplit) - 1;
- $display_rename = str_repeat(' ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7');
- $OUTPUT->command('replace_folder_row', $oldname, $rename, $display_rename);
- foreach ($a_mboxes as $mbox)
- if (preg_match('/^'.preg_quote($oldname . $delimiter, '/').'/', $mbox))
+
+ $regexp = '/^' . preg_quote($rename . $delimiter, '/') . '/';
+
+ // subfolders
+ for ($x=sizeof($folderlist)-1; $x>=0; $x--)
+ {
+ if (preg_match($regexp, $folderlist[$x]))
{
- $c_rename = preg_replace('/^'.preg_quote($oldname, '/').'/', $rename, $mbox);
- $foldersplit = explode($delimiter, $c_rename);
+ $oldfolder = $oldname . $delimiter . preg_replace($regexp, '', $folderlist[$x]);
+ $foldersplit = explode($delimiter, $folderlist[$x]);
$level = count($foldersplit) - 1;
- $display_rename = str_repeat(' ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7');
- $OUTPUT->command('replace_folder_row', $mbox, $c_rename, $display_rename);
+ $display_rename = str_repeat(' ', $level)
+ . rcube_charset_convert($foldersplit[$level], 'UTF-7');
+
+ $before = isset($folderlist[$x+1]) ? rcube_charset_convert($folderlist[$x+1], 'UTF-7') : false;
+
+ $OUTPUT->command('replace_folder_row', rcube_charset_convert($oldfolder, 'UTF-7'),
+ rcube_charset_convert($folderlist[$x], 'UTF-7'), $display_rename, $before);
}
+ }
+
+ $foldersplit = explode($delimiter, $rename);
+ $level = count($foldersplit) - 1;
+ $display_rename = str_repeat(' ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7');
+ $index = array_search($rename, $folderlist);
+ $before = $index !== false && isset($folderlist[$index+1]) ? rcube_charset_convert($folderlist[$index+1], 'UTF-7') : false;
+
+ $OUTPUT->command('replace_folder_row', $oldname_utf8, rcube_charset_convert($rename, 'UTF-7'),
+ $display_rename, $before);
+
$OUTPUT->command('reset_folder_rename');
- $OUTPUT->send();
}
else if (!$rename && $OUTPUT->ajax_call)
{
$OUTPUT->command('reset_folder_rename');
$OUTPUT->show_message('errorsaving', 'error');
- $OUTPUT->send();
}
else if (!$rename)
$OUTPUT->show_message('errorsaving', 'error');
}
// delete an existing IMAP mailbox
-else if ($_action=='delete-folder')
+else if ($RCMAIL->action=='delete-folder')
{
- $a_mboxes = array_merge($IMAP->list_mailboxes(), $IMAP->list_unsubscribed());
+ $a_mboxes = $IMAP->list_unsubscribed();
$delimiter = $IMAP->get_hierarchy_delimiter();
+
+ $mboxes_utf8 = get_input_value('_mboxes', RCUBE_INPUT_POST);
+ $mboxes = rcube_charset_convert($mboxes_utf8, 'UTF-8', 'UTF-7');
- if ($mboxes = get_input_value('_mboxes', RCUBE_INPUT_POST))
+ if ($mboxes)
$deleted = $IMAP->delete_mailbox(array($mboxes));
if ($OUTPUT->ajax_call && $deleted)
{
- $OUTPUT->command('remove_folder_row', get_input_value('_mboxes', RCUBE_INPUT_POST));
+ $OUTPUT->command('remove_folder_row', $mboxes_utf8);
foreach ($a_mboxes as $mbox)
{
- $regex = get_input_value('_mboxes', RCUBE_INPUT_POST) . $delimiter;
- $regex = preg_quote($regex, '/');
- if (preg_match('/^'. $regex .'/', $mbox))
+ if (preg_match('/^'. preg_quote($mboxes.$delimiter, '/') .'/', $mbox))
{
- $OUTPUT->command('remove_folder_row', $mbox);
+ $OUTPUT->command('remove_folder_row', rcube_charset_convert($mbox, 'UTF-7'));
}
}
$OUTPUT->show_message('folderdeleted', 'confirmation');
- $OUTPUT->send();
}
- else if ($OUTPUT->ajax_call)
+ else if (!$deleted)
{
$OUTPUT->show_message('errorsaving', 'error');
- $OUTPUT->send();
}
}
+if ($OUTPUT->ajax_call)
+ $OUTPUT->send();
// build table with all folders listed by server
list($form_start, $form_end) = get_form_tags($attrib, 'folders');
unset($attrib['form']);
-
if (!$attrib['id'])
$attrib['id'] = 'rcmSubscriptionlist';
$a_subscribed = $IMAP->list_mailboxes();
$delimiter = $IMAP->get_hierarchy_delimiter();
$a_js_folders = array();
-
- $checkbox_subscribe = new checkbox(array('name' => '_subscribed[]', 'onclick' => JS_OBJECT_NAME.".command(this.checked?'subscribe':'unsubscribe',this.value)"));
+
+ $checkbox_subscribe = new html_checkbox(array('name' => '_subscribed[]', 'onclick' => JS_OBJECT_NAME.".command(this.checked?'subscribe':'unsubscribe',this.value)"));
if (!empty($attrib['deleteicon']))
$del_button = sprintf('<img src="%s%s" alt="%s" border="0" />', $CONFIG['skin_path'], $attrib['deleteicon'], rcube_label('delete'));
$level = count($foldersplit) - 1;
$display_folder = str_repeat(' ', $level) . rcube_charset_convert($foldersplit[$level], 'UTF-7');
$folder_html = $CONFIG['protect_default_folders'] && in_array($folder, $CONFIG['default_imap_folders']) ? rcmail_localize_foldername($folder) : $display_folder;
-
- if (!$protected)
- $a_js_folders['rcmrow'.($i+1)] = array($folder, rcube_charset_convert($folder, 'UTF-7'));
+ $folder_utf8 = rcube_charset_convert($folder, 'UTF-7');
+
+ $a_js_folders['rcmrow'.($i+1)] = array($folder_utf8, $display_folder, $protected);
$out .= sprintf('<tr id="rcmrow%d" class="%s"><td class="name">%s</td><td class="msgcount">%d</td>',
$i+1,
if ($protected)
$out .= '<td class="subscribed"> '.($subscribed ? '•' : '-').'</td>';
else
- $out .= '<td class="subscribed">'.$checkbox_subscribe->show($subscribed?$folder:'', array('value' => $folder)).'</td>';
+ $out .= '<td class="subscribed">'.$checkbox_subscribe->show($subscribed?$folder_utf8:'', array('value' => $folder_utf8)).'</td>';
// add rename and delete buttons
if (!$protected)
// return the complete edit form as table
$out = "$form_start\n";
- $input = new textfield(array('name' => '_folder_name'));
+ $input = new html_inputfield(array('name' => '_folder_name'));
$out .= $input->show();
if (get_boolean($attrib['button']))
{
- $button = new input_field(array('type' => 'button',
+ $button = new html_inputfield(array('type' => 'button',
'value' => rcube_label('create'),
'onclick' => JS_OBJECT_NAME.".command('create-folder',this.form)"));
$out .= $button->show();
$out = "$form_start\n";
$a_unsubscribed = $IMAP->list_unsubscribed();
- $select_folder = new select(array('name' => '_folder_oldname', 'id' => 'rcmfd_oldfolder'));
+ $select_folder = new html_select(array('name' => '_folder_oldname', 'id' => 'rcmfd_oldfolder'));
foreach ($a_unsubscribed as $i => $folder)
{
$out .= $select_folder->show();
$out .= " to ";
- $inputtwo = new textfield(array('name' => '_folder_newname'));
+ $inputtwo = new html_inputfield(array('name' => '_folder_newname'));
$out .= $inputtwo->show();
if (get_boolean($attrib['button']))
{
- $button = new input_field(array('type' => 'button',
+ $button = new html_inputfield(array('type' => 'button',
'value' => rcube_label('rename'),
'onclick' => JS_OBJECT_NAME.".command('rename-folder',this.form)"));
$out .= $button->show();
return $out;
}
+$OUTPUT->set_pagetitle(rcube_label('folders'));
+$OUTPUT->include_script('list.js');
// register UI objects
$OUTPUT->add_handlers(array(
));
// add some labels to client
-rcube_add_label('deletefolderconfirm','addsubfolderhint');
+rcube_add_label('deletefolderconfirm','addsubfolderhint','forbiddencharacter');
$OUTPUT->send('managefolders');
?>
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: save_identity.inc 938 2007-12-10 15:27:19Z thomasb $
+ $Id: save_identity.inc 1407 2008-05-19 17:47:45Z thomasb $
*/
}
}
-// insert a new contact
+// insert a new identity record
else
{
if ($insert_id = $USER->insert_identity($save_data))
{
+ $OUTPUT->show_message('successfullysaved', 'confirmation');
+
$_GET['_iid'] = $insert_id;
if (!empty($_POST['_standard']))
$default_id = $insert_id;
-
- if ($_POST['_framed'])
- {
- // add contact row or jump to the page where it should appear
- // ....
- }
}
else
{
$USER->set_default($default_id);
// go to next step
-rcmail_overwrite_action($_framed ? 'edit-identity' : 'identities');
+rcmail_overwrite_action('identities');
?>
\ No newline at end of file
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: save_prefs.inc 938 2007-12-10 15:27:19Z thomasb $
+ $Id: save_prefs.inc 1403 2008-05-19 08:09:38Z alec $
*/
$a_user_prefs = array(
'timezone' => isset($_POST['_timezone']) ? floatval($_POST['_timezone']) : $CONFIG['timezone'],
'dst_active' => isset($_POST['_dst_active']) ? TRUE : FALSE,
- 'pagesize' => is_numeric($_POST['_pagesize']) ? intval($_POST['_pagesize']) : $CONFIG['pagesize'],
+ 'pagesize' => is_numeric($_POST['_pagesize']) ? max(2, intval($_POST['_pagesize'])) : $CONFIG['pagesize'],
'prettydate' => isset($_POST['_pretty_date']) ? TRUE : FALSE,
'prefer_html' => isset($_POST['_prefer_html']) ? TRUE : FALSE,
'htmleditor' => isset($_POST['_htmleditor']) ? TRUE : FALSE,
'preview_pane' => isset($_POST['_preview_pane']) ? TRUE : FALSE,
- 'draft_autosave' => isset($_POST['_draft_autosave']) ? intval($_POST['_draft_autosave']) : 0
+ 'read_when_deleted' => isset($_POST['_read_when_deleted']) ? TRUE : FALSE,
+ 'flag_for_deletion' => isset($_POST['_flag_for_deletion']) ? TRUE : FALSE,
+ 'logout_purge' => isset($_POST['_logout_purge']) ? TRUE : FALSE,
+ 'logout_expunge' => isset($_POST['_logout_expunge']) ? TRUE : FALSE,
+ 'draft_autosave' => isset($_POST['_draft_autosave']) ? intval($_POST['_draft_autosave']) : 0,
+ 'mdn_requests' => isset($_POST['_mdn_requests']) ? intval($_POST['_mdn_requests']) : 0,
);
// don't override these parameters
// switch UI language
-if (isset($_POST['_language']))
- {
- $sess_user_lang = $_SESSION['user_lang'] = get_input_value('_language', RCUBE_INPUT_POST);
- rcmail_set_locale($sess_user_lang);
- }
+if (isset($_POST['_language'])) {
+ $RCMAIL->load_language(get_input_value('_language', RCUBE_INPUT_POST));
+}
// force min size
if ($a_user_prefs['pagesize'] < 1)
{
border: 0;
padding: 0;
+ background-color: transparent;
}
input.button
width: 600px;
height: 37px;
background: url(images/taskbar.gif) top right no-repeat;
- padding: 10px 14px 10px 0px;
+ padding: 10px 4px 10px 0px;
text-align: right;
white-space: nowrap;
z-index: 2;
font-size: 11px;
color: #666666;
text-decoration: none;
- padding: 6px 16px 6px 30px;
+ padding: 6px 16px 6px 25px;
background-repeat: no-repeat;
}
{
position: absolute;
top: 60px;
- right: 30px;
+ right: 20px;
width: 182px;
height: 20px;
text-align: right;
+++ /dev/null
-/* This file contains the CSS data for the editor UI of TinyMCE instances */\r
-\r
-.mceToolbarTop a, .mceToolbarTop a:visited, .mceToolbarTop a:hover, .mceToolbarBottom a, .mceToolbarBottom a:visited, .mceToolbarBottom a:hover {border: 0; margin: 0; padding: 0; background: transparent;}\r
-.mceSeparatorLine {border: 0; padding: 0; margin-left: 4px; margin-right: 2px;}\r
-.mceSelectList {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 7pt !important; font-weight: normal; margin-top: 3px; padding: 0; display: inline; vertical-align: top; background-color: #F0F0EE;}\r
-.mceLabel, .mceLabelDisabled {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt;}\r
-.mceLabel {color: #000000;}\r
-.mceLabelDisabled {cursor: text; color: #999999;}\r
-.mceEditor {background: #F0F0EE; border: 1px solid #cccccc; padding: 0; margin: 0;}\r
-.mceEditorArea { font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; background: #FFFFFF; padding: 0; margin: 0; }\r
-.mceToolbarTop, .mceToolbarBottom {background: #F0F0EE; line-height: 1px; font-size: 1px;}\r
-.mceToolbarTop {border-bottom: 1px solid #cccccc; padding-bottom: 1px;}\r
-.mceToolbarBottom {border-top: 1px solid #cccccc;}\r
-.mceToolbarContainer {display: block; position: relative; left: 0; top: 0; width: 100%;}\r
-.mceStatusbarTop, .mceStatusbarBottom, .mceStatusbar {height: 20px;}\r
-.mceStatusbarTop .mceStatusbarPathText, .mceStatusbarBottom .mceStatusbarPathText, .mceStatusbar .mceStatusbarPathText {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt; padding: 2px; line-height: 16px; overflow: visible;}\r
-.mceStatusbarTop {border-bottom: 1px solid #cccccc;}\r
-.mceStatusbarBottom {border-top: 1px solid #cccccc;}\r
-.mceStatusbar {border-bottom: 1px solid #cccccc;}\r
-.mcePathItem, .mcePathItem:link, .mcePathItem:visited, .mcePathItem:hover {text-decoration: none; font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt; color: #000000;}\r
-.mcePathItem:hover {text-decoration: underline;}\r
-.mceStatusbarPathText {float: left;}\r
-.mceStatusbarResize {float: right; background-image: url('../images/statusbar_resize.gif'); background-repeat: no-repeat; width: 11px; height: 20px; cursor: se-resize;}\r
-.mceResizeBox {width: 10px; height: 10px; display: none; border: 1px dotted gray; margin: 0; padding: 0;}\r
-.mceEditorIframe {border: 0;}\r
-\r
-/* Button CSS rules */\r
-\r
-a.mceButtonDisabled img, a.mceButtonNormal img, a.mceButtonSelected img {width: 20px; height: 20px; cursor: default; margin-top: 1px; margin-left: 1px;}\r
-a.mceButtonDisabled img {border: 0 !important;}\r
-a.mceButtonNormal img, a.mceButtonSelected img {border: 1px solid #F0F0EE !important;}\r
-a.mceButtonSelected img {border: 1px solid #6779AA !important; background-color: #D4D5D8;}\r
-a.mceButtonNormal img:hover, a.mceButtonSelected img:hover {border: 1px solid #0A246A !important; cursor: default; background-color: #B6BDD2;}\r
-a.mceButtonDisabled img {-moz-opacity:0.3; opacity: 0.3; border: 1px solid #F0F0EE !important; cursor: default;}\r
-a.mceTiledButton img {background-image: url('../images/buttons.gif'); background-repeat: no-repeat;}\r
-\r
-/* Menu button CSS rules */\r
-\r
-span.mceMenuButton img, span.mceMenuButtonSelected img {border: 1px solid #F0F0EE; margin-left: 1px;}\r
-span.mceMenuButtonSelected img {border: 1px solid #6779AA; background-color: #B6BDD2;}\r
-span.mceMenuButtonSelected img.mceMenuButton {border: 1px solid #F0F0EE; background-color: transparent;}\r
-span.mceMenuButton img.mceMenuButton, span.mceMenuButtonSelected img.mceMenuButton {border-left: 0; margin-left: 0;}\r
-span.mceMenuButton:hover img, span.mceMenuButtonSelected:hover img {border: 1px solid #0A246A; background-color: #B6BDD2;}\r
-span.mceMenuButton:hover img.mceMenuButton, span.mceMenuButtonSelected:hover img.mceMenuButton {border-left: 0;}\r
-span.mceMenuButtonFocus img {border: 1px solid gray; border-right: 0; margin-left: 1px; background-color: #F5F4F2;}\r
-span.mceMenuButtonFocus img.mceMenuButton {border: 1px solid gray; border-left: 1px solid #F5F4F2; margin-left: 0;}\r
-span.mceMenuHover img {border: 1px solid #0A246A; background-color: #B6BDD2;}\r
-span.mceMenuButtonSelected.mceMenuHover img.mceMenuButton {border: 1px solid #0A246A; background-color: #B6BDD2; border-left: 0;}\r
-\r
-/* Menu */\r
-\r
-.mceMenu {position: absolute; left: 0; top: 0; display: none; z-index: 1000; background-color: white; border: 1px solid gray; font-weight: normal;}\r
-.mceMenu a, .mceMenuTitle, .mceMenuDisabled {display: block; width: 100%; text-decoration: none; background-color: white; font-family: Tahoma, Verdana, Arial, Helvetica; font-size: 11px; line-height: 20px; color: black;}\r
-.mceMenu a:hover {background-color: #B6BDD2; color: black; text-decoration: none !important;}\r
-.mceMenu span {padding-left: 10px; padding-right: 10px; display: block; line-height: 20px;}\r
-.mceMenuSeparator {border-bottom: 1px solid gray; background-color: gray; height: 1px;}\r
-.mceMenuTitle span {padding-left: 5px;}\r
-.mceMenuTitle {background-color: #DDDDDD; font-weight: bold;}\r
-.mceMenuDisabled {color: gray;}\r
-span.mceMenuSelectedItem {background-image: url('../images/menu_check.gif'); background-repeat: no-repeat; background-position: 5px 8px; padding-left: 20px;}\r
-span.mceMenuCheckItem {padding-left: 20px;}\r
-span.mceMenuLine {display: block; position: absolute; left: 0; top: -1px; background-color: #F5F4F2; width: 30px; height: 1px; overflow: hidden; padding-left: 0; padding-right: 0;}\r
-.mceColors table, .mceColors td {margin: 0; padding: 2px;}\r
-a.mceMoreColors {width: auto; padding: 0; margin: 0 3px 3px 3px; text-align: center; border: 1px solid white; text-decoration: none !important;}\r
-.mceColorPreview {position: absolute; overflow:hidden; left: 0; top: 0; margin-left: 3px; margin-top: 15px; width: 16px; height: 4px; background-color: red;}\r
-a.mceMoreColors:hover {border: 1px solid #0A246A;}\r
-.mceColors td a {width: 9px; height: 9px; overflow: hidden; border: 1px solid #808080;}\r
-\r
-/* MSIE 6 specific rules */\r
-\r
-* html a.mceButtonNormal img, * html a.mceButtonSelected img, * html a.mceButtonDisabled img {border: 0 !important; margin-top: 2px; margin-bottom: 1px;}\r
-* html a.mceButtonDisabled img {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); border: 0 !important;}\r
-* html a.mceButtonDisabled {border: 1px solid #F0F0EE !important;}\r
-* html a.mceButtonNormal, * html a.mceButtonSelected {border: 1px solid #F0F0EE !important; cursor: default;}\r
-* html a.mceButtonSelected {border: 1px solid #6779AA !important; background-color: #D4D5D8;}\r
-* html a.mceButtonNormal:hover, * html a.mceButtonSelected:hover {border: 1px solid #0A246A !important; background-color: #B6BDD2; cursor: default;}\r
-* html .mceSelectList {margin-top: 2px;}\r
-* html span.mceMenuButton, * html span.mceMenuButtonFocus {position: relative; left: 0; top: 0;}\r
-* html span.mceMenuButton img, * html span.mceMenuButtonSelected img, * html span.mceMenuButtonFocus img {position: relative; top: 1px;}\r
-* html a.mceMoreColors {width: auto;}\r
-* html .mceColors td a {width: 10px; height: 10px;}\r
-* html .mceColorPreview {margin-left: 2px; margin-top: 14px;}\r
-\r
-/* MSIE 7 specific rules */\r
-\r
-*:first-child+html a.mceButtonNormal img, *:first-child+html a.mceButtonSelected img, *:first-child+html a.mceButtonDisabled img {border: 0 !important; margin-top: 2px; margin-bottom: 1px;}\r
-*:first-child+html a.mceButtonDisabled img {filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); border: 0 !important;}\r
-*:first-child+html a.mceButtonDisabled {border: 1px solid #F0F0EE !important;}\r
-*:first-child+html a.mceButtonNormal, *:first-child+html a.mceButtonSelected {border: 1px solid #F0F0EE !important; cursor: default;}\r
-*:first-child+html a.mceButtonSelected {border: 1px solid #6779AA !important; background-color: #D4D5D8;}\r
-*:first-child+html a.mceButtonNormal:hover, *:first-child+html a.mceButtonSelected:hover {border: 1px solid #0A246A !important; background-color: #B6BDD2; cursor: default;}\r
-*:first-child+html .mceSelectList {margin-top: 2px;}\r
-*:first-child+html span.mceMenuButton, *:first-child+html span.mceMenuButtonFocus {position: relative; left: 0; top: 0;}\r
-*:first-child+html span.mceMenuButton img, *:first-child+html span.mceMenuButtonSelected img, *:first-child+html span.mceMenuButtonFocus img {position: relative; top: 1px;}\r
-*:first-child+html a.mceMoreColors {width: 137px;}\r
-*:first-child+html .mceColors td a {width: 10px; height: 10px;}\r
-*:first-child+html .mceColorPreview {margin: 0; padding-left: 4px; margin-top: 14px; width: 14px;}\r
<div id="tabsbar">
-<span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span><span id="settingstabfolders" class="tablink"><roundcube:button command="folders" type="link" label="folders" title="managefolders" class="tablink" /></span><span id="settingstabidentities" class="tablink"><roundcube:button command="identities" type="link" label="identities" title="manageidentities" class="tablink" /></span>
+<span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span>
+<span id="settingstabfolders" class="tablink"><roundcube:button command="folders" type="link" label="folders" title="managefolders" class="tablink" /></span>
+<span id="settingstabidentities" class="tablink"><roundcube:button command="identities" type="link" label="identities" title="manageidentities" class="tablink" /></span>
</div>
{
position: absolute;
bottom: 16px;
- right: 30px;
+ right: 20px;
width: 300px;
height: 20px;
text-align: right;
position: absolute;
top: 85px;
left: 200px;
- right: 30px;
+ right: 20px;
bottom: 40px;
border: 1px solid #999999;
background-color: #F9F9F9;
overflow: auto;
/* css hack for IE */
- width: expression((parseInt(document.documentElement.clientWidth)-230)+'px');
+ width: expression((parseInt(document.documentElement.clientWidth)-220)+'px');
height: expression((parseInt(document.documentElement.clientHeight)-125)+'px');
}
position: absolute;
top: 305px;
left: 200px;
- right: 30px;
+ right: 20px;
bottom: 40px;
border: 1px solid #999999;
background-color: #F9F9F9;
/* css hack for IE */
- width: expression((parseInt(document.documentElement.clientWidth)-230)+'px');
+ width: expression((parseInt(document.documentElement.clientWidth)-220)+'px');
height: expression((parseInt(document.documentElement.clientHeight)-135-document.getElementById('mailcontframe').offsetHeight)+'px');
}
right: 0px;
bottom: 0px;
/* css hack for IE */
- width: expression((parseInt(document.documentElement.clientWidth)-230)+'px');
+ width: expression((parseInt(document.documentElement.clientWidth)-220)+'px');
height: expression((parseInt(document.documentElement.clientHeight)-135-document.getElementById('mailcontframe').offsetHeight)+'px');
}
position: absolute;
top: 10px;
left: 220px;
+ right: 20px;
height: 40px;
+ /* css hack for IE */
+ width: expression((parseInt(document.documentElement.clientWidth)-240)+'px');
}
#partheader table td
position: absolute;
top: 85px;
left: 20px;
- width: 160px;
+ width: 170px;
bottom: 40px;
border: 1px solid #999;
background-color: #F9F9F9;
{
font-size: 11px;
background: url(images/icons/folder-closed.png) no-repeat;
- background-position: 10px 1px;
+ background-position: 5px 1px;
border-bottom: 1px solid #EBEBEB;
}
#mailboxlist li a
{
display: block;
- padding-left: 32px;
+ padding-left: 25px;
padding-top: 2px;
padding-bottom: 2px;
text-decoration: none;
position: absolute;
top: 85px;
left: 200px;
- right: 30px;
+ right: 20px;
bottom: 40px;
border: 1px solid #999;
background-color: #FFF;
overflow: auto;
/* css hack for IE */
/* margin-bottom: 10px; */
- width: expression((parseInt(document.documentElement.clientWidth)-230)+'px');
+ width: expression((parseInt(document.documentElement.clientWidth)-220)+'px');
height: expression((parseInt(document.documentElement.clientHeight)-125)+'px');
}
#attachment-list
{
margin: 0px;
- padding: 0px 0px 0px 68px;
- min-height: 18px;
+ padding: 0px 0px 0px 72px;
+ min-height: 16px;
list-style-image: none;
list-style-type: none;
- background: url(images/icons/attachment.png) 52px 1px no-repeat #DFDFDF;
- /* css hack for IE */
- height: expression(Math.min(18, parseInt(this.clientHeight))+'px');
+ background: url(images/icons/attachment.png) 60px 2px no-repeat #DFDFDF;
+ /* IE6 hack */
+ _height: expression(Math.min(16, parseInt(document.documentElement.clientHeight))+'px');
}
#attachment-list:after
float: left;
height: 18px;
font-size: 11px;
- padding: 2px 10px 0px 10px;
+ padding: 2px 0px 0px 15px;
+ white-space: nowrap;
}
#attachment-list li a
border-top: 0;
}
-div.message-part a
+div.message-part a,
+div.message-htmlpart a
{
color: #0000CC;
}
border-right: 2px solid #bb0000;
}
+body.iframe div.message-htmlpart
+{
+ margin: 8px;
+}
+
+div.message-htmlpart div.rcmBody
+{
+ margin: 8px;
+}
+
#remote-objects-message
{
display: none;
position: absolute;
top: 90px;
left: 200px;
- right: 40px;
- bottom: 40px;
+ right: 25px;
+ bottom: 30px;
padding: 0px;
margin: 0px;
/* css hack for IE */
- width: expression((parseInt(document.documentElement.clientWidth)-240)+'px');
+ width: expression((parseInt(document.documentElement.clientWidth)-220)+'px');
height: expression((parseInt(document.documentElement.clientHeight)-130)+'px');
}
{
width: 90px;
}
+
+fieldset
+{
+ margin-bottom: 0.5em;
+ border: 1px solid #999999;
+}
+
+legend
+{
+ color: #999999;
+}
+
\ No newline at end of file
<script type="text/javascript">
<!--
-var cc_field = document.form._cc;
+var cc_field = document.getElementById('rcmcomposecc');
if (cc_field && cc_field.value!='')
rcmail_show_header_form('compose-cc', document.getElementById('addcclink'));
-var bcc_field = document.form._bcc;
+var bcc_field = document.getElementById('rcmcomposebcc');
if (bcc_field && bcc_field.value!='')
rcmail_show_header_form('compose-bcc', document.getElementById('addbcclink'));
<div id="messagetoolbar">
<roundcube:button command="checkmail" imageSel="/images/buttons/inbox_sel.png" imageAct="/images/buttons/inbox_act.png" imagePas="/images/buttons/inbox_pas.png" width="32" height="32" title="checkmail" />
<roundcube:button command="compose" imageSel="/images/buttons/compose_sel.png" imageAct="/images/buttons/compose_act.png" imagePas="/images/buttons/compose_pas.png" width="32" height="32" title="writenewmessage" />
-<roundcube:button id="markreadbutton" image="/images/buttons/markread_act.png" width="32" height="32" title="markmessages" onclick="rcmailUI.show_markmenu();return false" />
+<roundcube:button name="markreadbutton" id="markreadbutton" image="/images/buttons/markread_act.png" width="32" height="32" title="markmessages" onclick="rcmailUI.show_markmenu();return false" />
<roundcube:button command="reply" imageSel="/images/buttons/reply_sel.png" imageAct="/images/buttons/reply_act.png" imagePas="/images/buttons/reply_pas.png" width="32" height="32" title="replytomessage" />
<roundcube:button command="reply-all" imageSel="/images/buttons/replyall_sel.png" imageAct="/images/buttons/replyall_act.png" imagePas="/images/buttons/replyall_pas.png" width="32" height="32" title="replytoallmessage" />
<roundcube:button command="forward" imageSel="/images/buttons/forward_sel.png" imageAct="/images/buttons/forward_act.png" imagePas="/images/buttons/forward_pas.png" width="32" height="32" title="forwardmessage" />
</div>
<div id="messageframe">
+
<roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/plus.gif" summary="Message headers" />
<roundcube:object name="messageAttachments" id="attachment-list" />
+
<roundcube:object name="blockedObjects" id="remote-objects-message" />
<roundcube:object name="messageBody" id="messagebody" showImages="true" />
+
</div>
</body>
<div id="partheader">
<roundcube:object name="messagePartControls" cellpadding="2" cellspacing="0" />
+
+<div style="position:absolute; top:2px; right:0; width:12em; text-align:right">
+ [<a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a>]
+</div>
</div>
<div style="padding:15px">
<roundcube:object name="userprefs">
-<p><br /><roundcube:button command="save" type="input" class="button" label="save" /></p>
+<p><roundcube:button command="save" type="input" class="button" label="save" /></p>
</div>
</div>