aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL.txt47
-rw-r--r--boot.php51
-rw-r--r--convert_innodb.sql19
-rw-r--r--database.sql10
-rw-r--r--htconfig.php3
-rw-r--r--images/icons.pngbin12389 -> 12608 bytes
-rw-r--r--include/Contact.php2
-rw-r--r--include/Photo.php6
-rw-r--r--include/api.php113
-rw-r--r--include/auth.php9
-rw-r--r--include/bb2diaspora.php7
-rw-r--r--include/bbcode.php9
-rw-r--r--include/config.php30
-rw-r--r--include/conversation.php54
-rw-r--r--include/crypto.php36
-rw-r--r--include/datetime.php6
-rw-r--r--include/dba.php22
-rw-r--r--include/delivery.php759
-rwxr-xr-x[-rw-r--r--]include/diaspora.php217
-rw-r--r--include/directory.php10
-rw-r--r--include/enotify.php5
-rw-r--r--include/event.php17
-rw-r--r--include/follow.php243
-rw-r--r--include/group.php31
-rwxr-xr-x[-rw-r--r--]include/items.php174
-rw-r--r--include/nav.php2
-rw-r--r--include/network.php164
-rw-r--r--include/notifier.php68
-rw-r--r--include/pgettext.php6
-rw-r--r--include/profile_advanced.php9
-rw-r--r--include/profile_selectors.php7
-rw-r--r--include/security.php2
-rw-r--r--include/socgraph.php30
-rw-r--r--include/text.php45
-rw-r--r--include/user.php327
-rw-r--r--index.php2
-rw-r--r--js/country.js6
-rw-r--r--js/main.js6
-rw-r--r--library/langdet/Text/LanguageDetect.php1708
-rw-r--r--library/langdet/Text/LanguageDetect/Exception.php57
-rw-r--r--library/langdet/Text/LanguageDetect/ISO639.php341
-rw-r--r--library/langdet/Text/LanguageDetect/Parser.php349
-rw-r--r--library/langdet/data/lang.dat1
-rw-r--r--library/langdet/data/unicode_blocks.dat1
-rw-r--r--library/langdet/docs/example_clui.php35
-rw-r--r--library/langdet/docs/example_web.php72
-rw-r--r--library/langdet/docs/iso.php21
-rw-r--r--library/langdet/tests/Text_LanguageDetectTest.php2056
-rw-r--r--library/langdet/tests/Text_LanguageDetect_ISO639Test.php72
-rw-r--r--library/tinymce/changelog.txt3090
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js354
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js1902
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js146
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js4
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css8
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm8
-rw-r--r--library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js24
-rw-r--r--library/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js6
-rw-r--r--library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css7
-rw-r--r--library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css6
-rw-r--r--library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css5
-rw-r--r--library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css6
-rw-r--r--library/tinymce/jscripts/tiny_mce/tiny_mce.js2
-rw-r--r--library/tinymce/jscripts/tiny_mce/tiny_mce_src.js4911
-rw-r--r--mod/acctlink.php16
-rw-r--r--mod/acl.php2
-rw-r--r--mod/admin.php19
-rw-r--r--mod/community.php2
-rw-r--r--mod/dfrn_confirm.php34
-rw-r--r--mod/dfrn_notify.php10
-rw-r--r--mod/dfrn_request.php24
-rw-r--r--mod/dirfind.php3
-rw-r--r--mod/follow.php214
-rw-r--r--mod/hostxrd.php22
-rwxr-xr-x[-rw-r--r--]mod/install.php102
-rw-r--r--mod/item.php86
-rwxr-xr-x[-rw-r--r--]mod/like.php125
-rw-r--r--mod/message.php3
-rw-r--r--mod/network.php49
-rw-r--r--mod/notes.php12
-rw-r--r--mod/photo.php21
-rw-r--r--mod/photos.php72
-rw-r--r--mod/ping.php8
-rw-r--r--mod/profile.php2
-rw-r--r--mod/profiles.php30
-rw-r--r--mod/redir.php2
-rw-r--r--mod/register.php350
-rw-r--r--mod/search.php30
-rw-r--r--mod/settings.php53
-rw-r--r--mod/wallmessage.php4
-rw-r--r--update.php41
-rw-r--r--util/db_update.php2
-rw-r--r--util/messages.po2556
-rw-r--r--view/admin_summary.tpl4
-rw-r--r--view/de/friend_complete_eml.tpl8
-rw-r--r--view/de/intro_complete_eml.tpl16
-rw-r--r--view/de/messages.po2566
-rw-r--r--view/de/register_open_eml.tpl28
-rw-r--r--view/de/strings.php194
-rw-r--r--view/dfrn_req_confirm.tpl4
-rwxr-xr-x[-rw-r--r--]view/diaspora_like_relay.tpl4
-rw-r--r--view/diaspora_relay_retraction.tpl10
-rwxr-xr-xview/diaspora_relayable_retraction.tpl11
-rw-r--r--view/eo/lostpass_eml.tpl32
-rw-r--r--view/eo/messages.po888
-rw-r--r--view/eo/strings.php35
-rw-r--r--view/eo/update_fail_eml.tpl11
-rw-r--r--view/generic_links_widget.tpl2
-rw-r--r--view/group_selection.tpl8
-rw-r--r--view/head.tpl1
-rw-r--r--view/install_checks.tpl6
-rw-r--r--view/pagetypes.tpl3
-rw-r--r--view/photo_album.tpl2
-rw-r--r--view/photo_edit.tpl5
-rw-r--r--view/photo_top.tpl4
-rw-r--r--view/photos_recent.tpl1
-rw-r--r--view/profile_advanced.tpl9
-rw-r--r--view/profile_edit.tpl9
-rw-r--r--view/prv_message.tpl2
-rw-r--r--view/settings.tpl15
-rw-r--r--view/theme/darkzero-NS/style.css73
-rw-r--r--view/theme/darkzero/style.css35
-rw-r--r--view/theme/diabook/bottom.tpl11
-rw-r--r--view/theme/diabook/diabook-dark/style-network.css7
-rw-r--r--view/theme/diabook/diabook-dark/style-profile.css2
-rw-r--r--view/theme/diabook/theme.php36
-rw-r--r--view/theme/dispy/communityhome.tpl40
-rw-r--r--view/theme/dispy/config.php16
-rw-r--r--view/theme/dispy/conversation.tpl3
-rw-r--r--view/theme/dispy/dark/_base.less21
-rw-r--r--view/theme/dispy/dark/screenshot.jpgbin39101 -> 46268 bytes
-rw-r--r--view/theme/dispy/dark/screenshot_small.jpgbin0 -> 23567 bytes
-rw-r--r--view/theme/dispy/dark/style.css139
-rw-r--r--view/theme/dispy/dark/style.less440
-rw-r--r--view/theme/dispy/dark/theme.php14
-rw-r--r--view/theme/dispy/group_side.tpl5
-rw-r--r--view/theme/dispy/light/_base.less29
-rw-r--r--view/theme/dispy/light/connect.pngbin443 -> 0 bytes
-rw-r--r--view/theme/dispy/light/screenshot.jpgbin60400 -> 53187 bytes
-rw-r--r--view/theme/dispy/light/screenshot_small.jpgbin0 -> 26448 bytes
-rw-r--r--view/theme/dispy/light/style.css199
-rw-r--r--view/theme/dispy/light/style.less560
-rw-r--r--view/theme/dispy/light/theme.php10
-rw-r--r--view/theme/dispy/nav.tpl15
-rw-r--r--view/theme/dispy/photo_edit.tpl53
-rw-r--r--view/theme/dispy/screenshot.jpgbin0 -> 39453 bytes
-rw-r--r--view/theme/dispy/style.php302
-rw-r--r--view/theme/dispy/theme.php2
-rw-r--r--view/theme/dispy/wall_item.tpl14
-rw-r--r--view/theme/dispy/wallwall_item.tpl14
-rw-r--r--view/theme/duepuntozero/profile_vcard.tpl51
-rw-r--r--view/theme/duepuntozero/style.css81
-rw-r--r--view/theme/quattro/dark/style.css135
-rw-r--r--view/theme/quattro/green/style.css135
-rw-r--r--view/theme/quattro/icons.less15
-rw-r--r--view/theme/quattro/icons/addon_off.pngbin0 -> 438 bytes
-rw-r--r--view/theme/quattro/icons/addon_on.pngbin0 -> 428 bytes
-rw-r--r--view/theme/quattro/quattro.less73
-rw-r--r--view/theme/slackr/birthdays_reminder.tpl1
-rw-r--r--view/theme/slackr/events_reminder.tpl39
-rw-r--r--view/theme/slackr/style.css110
-rw-r--r--view/theme/slackr/theme.php9
-rw-r--r--view/theme/testbubble/unsupported0
174 files changed, 18227 insertions, 10002 deletions
diff --git a/INSTALL.txt b/INSTALL.txt
index 574e90975..c36c846a1 100644
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -222,3 +222,50 @@ Retry the installation. As soon as the database has been created,
% chmod 755 .htconfig.php
+#####################################################################
+- Some configurations with "suhosin" security are configured without
+an ability to run external processes. Friendica requires this ability.
+Following are some notes provided by one of our members.
+#####################################################################
+
+On my server I use the php protection system Suhosin
+[http://www.hardened-php.net/suhosin/]. One of the things it does is to block
+certain functions like proc_open, as configured in /etc/php5/conf.d/suhosin.ini:
+
+ suhosin.executor.func.blacklist = proc_open, ...
+
+For those sites like Friendica that really need these functions they can be
+enabled, e.g. in /etc/apache2/sites-available/friendica:
+
+ <Directory /var/www/friendica/>
+ php_admin_value suhosin.executor.func.blacklist none
+ php_admin_value suhosin.executor.eval.blacklist none
+ </Directory>
+
+This enables every function for Friendica if accessed via browser, but not for
+the cronjob that is called via php command line. I attempted to enable it for
+cron by using something like
+
+ */10 * * * * cd /var/www/friendica/friendica/ && sudo -u www-data /usr/bin/php
+-d suhosin.executor.func.blacklist=none -d suhosin.executor.eval.blacklist=none
+-f include/poller.php
+
+This worked well for simple test cases, but the friendica-cron still failed with
+a fatal error:
+suhosin[22962]: ALERT - function within blacklist called: proc_open() (attacker
+'REMOTE_ADDR not set', file '/var/www/friendica/friendica/boot.php', line 1341)
+
+After a while I noticed, that include/poller.php calls further php script via
+proc_open. These scripts themselves also use proc_open and fail, because they
+are NOT called with -d suhosin.executor.func.blacklist=none.
+
+So the simple solution is to put the correct parameters into .htconfig.php:
+ // Location of PHP command line processor
+ $a->config['php_path'] = '/usr/bin/php -d suhosin.executor.func.blacklist=none
+-d suhosin.executor.eval.blacklist=none';
+
+
+This is obvious as soon as you notice that the friendica-cron uses proc_open to
+execute php-scripts that also use proc_open, but it took me quite some time to
+find that out. I hope this saves some time for other people using suhosin with
+function blacklists.
diff --git a/boot.php b/boot.php
index dd4e31d4f..18313b4cd 100644
--- a/boot.php
+++ b/boot.php
@@ -9,9 +9,9 @@ require_once('include/nav.php');
require_once('include/cache.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
-define ( 'FRIENDICA_VERSION', '3.0.1338' );
+define ( 'FRIENDICA_VERSION', '3.0.1363' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1143 );
+define ( 'DB_UPDATE_VERSION', 1148 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
@@ -441,22 +441,19 @@ if(! class_exists('App')) {
if(intval($this->config['system']['ssl_policy']) === intval(SSL_POLICY_FULL))
$scheme = 'https';
- // We need to populate the $ssl flag across the entire program before turning this on.
- // Basically, we'll have $ssl = true on any links which can only be seen by a logged in user
- // (and also the login link). Anything seen by an outsider will have it turned off.
- // At present, setting SSL_POLICY_SELFSIGN will only force remote contacts to update their
- // contact links to this site with "http:" if they are currently using "https:"
-
- // if($this->config['system']['ssl_policy'] == SSL_POLICY_SELFSIGN) {
- // if($ssl)
- // $scheme = 'https';
- // else
- // $scheme = 'http';
- // }
- }
+ // Basically, we have $ssl = true on any links which can only be seen by a logged in user
+ // (and also the login link). Anything seen by an outsider will have it turned off.
+
+ if($this->config['system']['ssl_policy'] == SSL_POLICY_SELFSIGN) {
+ if($ssl)
+ $scheme = 'https';
+ else
+ $scheme = 'http';
+ }
+ }
- $this->baseurl = $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
- return $this->baseurl;
+ $this->baseurl = $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
+ return $this->baseurl;
}
function set_baseurl($url) {
@@ -511,6 +508,7 @@ if(! class_exists('App')) {
$tpl = file_get_contents('view/head.tpl');
$this->page['htmlhead'] = replace_macros($tpl,array(
'$baseurl' => $this->get_baseurl(), // FIXME for z_path!!!!
+ '$local_user' => local_user(),
'$generator' => 'Friendica' . ' ' . FRIENDICA_VERSION,
'$delitem' => t('Delete this item?'),
'$comment' => t('Comment'),
@@ -1323,6 +1321,25 @@ if(! function_exists('proc_run')) {
$a = get_app();
$args = func_get_args();
+
+ $newargs = array();
+ if(! count($args))
+ return;
+
+ // expand any arrays
+
+ foreach($args as $arg) {
+ if(is_array($arg)) {
+ foreach($arg as $n) {
+ $newargs[] = $n;
+ }
+ }
+ else
+ $newargs[] = $arg;
+ }
+
+ $args = $newargs;
+
$arr = array('args' => $args, 'run_cmd' => true);
call_hooks("proc_run", $arr);
diff --git a/convert_innodb.sql b/convert_innodb.sql
new file mode 100644
index 000000000..9eeb67fe8
--- /dev/null
+++ b/convert_innodb.sql
@@ -0,0 +1,19 @@
+
+
+ALTER TABLE `profile` DROP INDEX `pub_keywords` ;
+ALTER TABLE `profile` DROP INDEX `prv_keywords` ;
+
+ALTER TABLE `item` DROP INDEX `title` ;
+ALTER TABLE `item` DROP INDEX `body` ;
+ALTER TABLE `item` DROP INDEX `allow_cid` ;
+ALTER TABLE `item` DROP INDEX `allow_gid` ;
+ALTER TABLE `item` DROP INDEX `deny_cid` ;
+ALTER TABLE `item` DROP INDEX `deny_gid` ;
+ALTER TABLE `item` DROP INDEX `tag` ;
+ALTER TABLE `item` DROP INDEX `file` ;
+
+
+SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' engine=InnoDB;')
+FROM information_schema.tables
+WHERE engine = 'MyISAM';
+
diff --git a/database.sql b/database.sql
index cf086796a..c1d1b27e4 100644
--- a/database.sql
+++ b/database.sql
@@ -173,6 +173,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
`readonly` tinyint(1) NOT NULL DEFAULT '0',
`writable` tinyint(1) NOT NULL DEFAULT '0',
`forum` tinyint(1) NOT NULL DEFAULT '0',
+ `prv` tinyint(1) NOT NULL DEFAULT '0',
`hidden` tinyint(1) NOT NULL DEFAULT '0',
`archive` tinyint(1) NOT NULL DEFAULT '0',
`pending` tinyint(1) NOT NULL DEFAULT '1',
@@ -819,9 +820,11 @@ CREATE TABLE IF NOT EXISTS `profile` (
`region` char(255) NOT NULL,
`postal-code` char(32) NOT NULL,
`country-name` char(255) NOT NULL,
+ `hometown` char(255) NOT NULL,
`gender` char(32) NOT NULL,
`marital` char(255) NOT NULL,
`with` text NOT NULL,
+ `howlong` datetime NOT NULL default '0000-00-00 00:00:00',
`sexual` char(255) NOT NULL,
`politic` char(255) NOT NULL,
`religion` char(255) NOT NULL,
@@ -941,12 +944,14 @@ CREATE TABLE IF NOT EXISTS `session` (
CREATE TABLE IF NOT EXISTS `sign` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `iid` int(10) unsigned NOT NULL,
+ `iid` int(10) unsigned NOT NULL DEFAULT '0',
+ `retract_iid` int(10) unsigned NOT NULL DEFAULT '0',
`signed_text` mediumtext NOT NULL,
`signature` text NOT NULL,
`signer` char(255) NOT NULL,
PRIMARY KEY (`id`),
- KEY `iid` (`iid`)
+ KEY `iid` (`iid`),
+ KEY `retract_iid` (`retract_iid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
@@ -1028,6 +1033,7 @@ CREATE TABLE IF NOT EXISTS `user` (
`account_expires_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`expire_notification_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`service_class` char(32) NOT NULL,
+ `def_gid` int(11) NOT NULL DEFAULT '0',
`allow_cid` mediumtext NOT NULL,
`allow_gid` mediumtext NOT NULL,
`deny_cid` mediumtext NOT NULL,
diff --git a/htconfig.php b/htconfig.php
index 872572654..de7674c9a 100644
--- a/htconfig.php
+++ b/htconfig.php
@@ -88,3 +88,6 @@ $a->config['system']['itemcache'] = "";
// If enabled, the lockpath is used for a lockfile to check if the poller is running
$a->config['system']['lockpath'] = "";
+
+// If enabled, the MyBB fulltext engine is used
+// $a->config['system']['use_fulltext_engine'] = true;
diff --git a/images/icons.png b/images/icons.png
index dd3af3aee..0ff5c430c 100644
--- a/images/icons.png
+++ b/images/icons.png
Binary files differ
diff --git a/include/Contact.php b/include/Contact.php
index 2523fc023..675d1c81e 100644
--- a/include/Contact.php
+++ b/include/Contact.php
@@ -209,7 +209,7 @@ function contact_photo_menu($contact) {
);
- $args = array('contact' => $contact, 'menu' => $menu);
+ $args = array('contact' => $contact, 'menu' => &$menu);
call_hooks('contact_photo_menu', $args);
diff --git a/include/Photo.php b/include/Photo.php
index 4d02b5c65..fce559999 100644
--- a/include/Photo.php
+++ b/include/Photo.php
@@ -87,6 +87,12 @@ class Photo {
}
+ public function rotate($degrees) {
+ $this->image = imagerotate($this->image,$degrees,0);
+ $this->width = imagesx($this->image);
+ $this->height = imagesy($this->image);
+ }
+
public function scaleImageUp($min) {
diff --git a/include/api.php b/include/api.php
index a693a32c8..5c17b35f5 100644
--- a/include/api.php
+++ b/include/api.php
@@ -4,26 +4,26 @@
require_once("conversation.php");
require_once("oauth.php");
require_once("html2plain.php");
- /*
+ /*
* Twitter-Like API
- *
+ *
*/
$API = Array();
- $called_api = Null;
+ $called_api = Null;
function api_date($str){
//Wed May 23 06:01:13 +0000 2007
return datetime_convert('UTC', 'UTC', $str, "D M d H:i:s +0000 Y" );
}
-
-
+
+
function api_register_func($path, $func, $auth=false){
global $API;
$API[$path] = array('func'=>$func,
'auth'=>$auth);
}
-
+
/**
* Simple HTTP Login
*/
@@ -691,24 +691,24 @@
'geo' => '',
'coordinates' => $lastwall['coord'],
'place' => $lastwall['location'],
- 'contributors' => ''
+ 'contributors' => ''
);
}
return api_apply_template("user", $type, array('$user' => $user_info));
-
+
}
api_register_func('api/users/show','api_users_show');
-
+
/**
- *
+ *
* http://developer.twitter.com/doc/get/statuses/home_timeline
- *
+ *
* TODO: Optional parameters
* TODO: Add reply info
*/
function api_statuses_home_timeline(&$a, $type){
if (local_user()===false) return false;
-
+
$user_info = api_get_user($a);
// get last newtork messages
@@ -720,7 +720,7 @@
$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
$max_id = (x($_REQUEST,'max_id')?$_REQUEST['max_id']:0);
//$since_id = 0;//$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
-
+
$start = $page*$count;
//$include_entities = (x($_REQUEST,'include_entities')?$_REQUEST['include_entities']:false);
@@ -728,7 +728,7 @@
if ($max_id > 0)
$sql_extra = 'AND `item`.`id` <= '.intval($max_id);
- $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
+ $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
@@ -747,7 +747,7 @@
$ret = api_format_items($r,$user_info);
-
+
$data = array('$statuses' => $ret);
switch($type){
case "atom":
@@ -761,7 +761,7 @@
return($as);
break;
}
-
+
return api_apply_template("timeline", $type, $data);
}
api_register_func('api/statuses/home_timeline','api_statuses_home_timeline', true);
@@ -769,7 +769,7 @@
function api_statuses_public_timeline(&$a, $type){
if (local_user()===false) return false;
-
+
$user_info = api_get_user($a);
// get last newtork messages
@@ -781,7 +781,7 @@
$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
$max_id = (x($_REQUEST,'max_id')?$_REQUEST['max_id']:0);
//$since_id = 0;//$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
-
+
$start = $page*$count;
//$include_entities = (x($_REQUEST,'include_entities')?$_REQUEST['include_entities']:false);
@@ -789,7 +789,7 @@
if ($max_id > 0)
$sql_extra = 'AND `item`.`id` <= '.intval($max_id);
- /*$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
+ /*$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
@@ -806,17 +806,17 @@
intval($since_id),
intval($start), intval($count)
);*/
- $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
+ $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
- `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
+ `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,
`user`.`nickname`, `user`.`hidewall`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
LEFT JOIN `user` ON `user`.`uid` = `item`.`uid`
WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0
- AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = ''
- AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = ''
- AND `item`.`private` = 0 AND `item`.`wall` = 1 AND `user`.`hidewall` = 0
+ AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = ''
+ AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = ''
+ AND `item`.`private` = 0 AND `item`.`wall` = 1 AND `user`.`hidewall` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
$sql_extra
AND `item`.`id`>%d
@@ -827,7 +827,7 @@
$ret = api_format_items($r,$user_info);
-
+
$data = array('$statuses' => $ret);
switch($type){
case "atom":
@@ -841,7 +841,7 @@
return($as);
break;
}
-
+
return api_apply_template("timeline", $type, $data);
}
api_register_func('api/statuses/public_timeline','api_statuses_public_timeline', true);
@@ -857,11 +857,11 @@
// params
$id = intval($a->argv[3]);
- logger('API: api_statuses_show: '.$id);
+ logger('API: api_statuses_show: '.$id);
//$include_entities = (x($_REQUEST,'include_entities')?$_REQUEST['include_entities']:false);
- $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
+ $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
@@ -875,7 +875,7 @@
);
$ret = api_format_items($r,$user_info);
-
+
$data = array('$status' => $ret[0]);
/*switch($type){
case "atom":
@@ -976,7 +976,7 @@
$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
$max_id = (x($_REQUEST,'max_id')?$_REQUEST['max_id']:0);
//$since_id = 0;//$since_id = (x($_REQUEST,'since_id')?$_REQUEST['since_id']:0);
-
+
$start = $page*$count;
//$include_entities = (x($_REQUEST,'include_entities')?$_REQUEST['include_entities']:false);
@@ -985,11 +985,19 @@
$myurl = substr($myurl,strpos($myurl,'://')+3);
$myurl = str_replace(array('www.','.'),array('','\\.'),$myurl);
$diasp_url = str_replace('/profile/','/u/',$myurl);
- $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` regexp '%s' or `tag` regexp '%s' or tag regexp '%s' )) ",
- dbesc($myurl . '$'),
- dbesc($myurl . '\\]'),
- dbesc($diasp_url . '\\]')
- );
+
+ if (get_config('system','use_fulltext_engine'))
+ $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ",
+ dbesc(protect_sprintf($myurl)),
+ dbesc(protect_sprintf($myurl)),
+ dbesc(protect_sprintf($diasp_url))
+ );
+ else
+ $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` like '%s' or `tag` like '%s' or tag like '%s' )) ",
+ dbesc(protect_sprintf('%' . $myurl)),
+ dbesc(protect_sprintf('%' . $myurl . ']%')),
+ dbesc(protect_sprintf('%' . $diasp_url . ']%'))
+ );
if ($max_id > 0)
$sql_extra .= ' AND `item`.`id` <= '.intval($max_id);
@@ -1013,7 +1021,7 @@
$ret = api_format_items($r,$user_info);
-
+
$data = array('$statuses' => $ret);
switch($type){
case "atom":
@@ -1027,7 +1035,7 @@
return($as);
break;
}
-
+
return api_apply_template("timeline", $type, $data);
}
api_register_func('api/statuses/mentions','api_statuses_mentions', true);
@@ -1078,14 +1086,14 @@
$ret = api_format_items($r,$user_info);
-
+
$data = array('$statuses' => $ret);
switch($type){
case "atom":
case "rss":
$data = api_rss_extra($a, $data, $user_info);
}
-
+
return api_apply_template("timeline", $type, $data);
}
@@ -1094,25 +1102,25 @@
function api_favorites(&$a, $type){
if (local_user()===false) return false;
-
+
$user_info = api_get_user($a);
// in friendica starred item are private
// return favorites only for self
logger('api_favorites: self:' . $user_info['self']);
-
+
if ($user_info['self']==0) {
$ret = array();
} else {
-
-
+
+
// params
$count = (x($_GET,'count')?$_GET['count']:20);
$page = (x($_REQUEST,'page')?$_REQUEST['page']-1:0);
if ($page<0) $page=0;
-
+
$start = $page*$count;
- $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
+ $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
@@ -1129,16 +1137,16 @@
);
$ret = api_format_items($r,$user_info);
-
+
}
-
+
$data = array('$statuses' => $ret);
switch($type){
case "atom":
case "rss":
$data = api_rss_extra($a, $data, $user_info);
}
-
+
return api_apply_template("timeline", $type, $data);
}
@@ -1208,7 +1216,7 @@
$as['link']['type'] = "text/html";
return($as);
}
-
+
function api_format_items($r,$user_info) {
//logger('api_format_items: ' . print_r($r,true));
@@ -1223,14 +1231,14 @@
$status_user = (($item['cid']==$user_info['id'])?$user_info: api_item_get_user($a,$item));
if ($item['parent']!=$item['id']) {
- $r = q("select id from item where parent=%s and id<%s order by id desc limit 1",
+ $r = q("select id from item where parent=%s and id<%s order by id desc limit 1",
intval($item['parent']), intval($item['id']));
if ($r)
$in_reply_to_status_id = $r[0]['id'];
else
$in_reply_to_status_id = $item['parent'];
- $r = q("select `item`.`contact-id`, `contact`.nick, `item`.`author-name` from item, contact
+ $r = q("select `item`.`contact-id`, `contact`.nick, `item`.`author-name` from item, contact
where `contact`.`id` = `item`.`contact-id` and `item`.id=%d", intval($in_reply_to_status_id));
$in_reply_to_screen_name = $r[0]['author-name'];
@@ -1251,6 +1259,9 @@
else
$statustext = trim($statustitle."\n\n".$statusbody);
+ if (($item["network"] == NETWORK_FEED) and (strlen($statustext)> 1000))
+ $statustext = substr($statustext, 0, 1000)."... \n".$item["plink"];
+
$status = array(
'text' => $statustext,
'truncated' => False,
diff --git a/include/auth.php b/include/auth.php
index 1341f3bb8..cba6a67a7 100644
--- a/include/auth.php
+++ b/include/auth.php
@@ -11,6 +11,13 @@ function nuke_session() {
unset($_SESSION['cid']);
unset($_SESSION['theme']);
unset($_SESSION['page_flags']);
+ unset($_SESSION['submanage']);
+ unset($_SESSION['my_url']);
+ unset($_SESSION['my_address']);
+ unset($_SESSION['addr']);
+ unset($_SESSION['return_url']);
+ unset($_SESSION['theme']);
+ unset($_SESSION['page_flags']);
}
@@ -46,6 +53,8 @@ if((isset($_SESSION)) && (x($_SESSION,'authenticated')) && ((! (x($_POST,'auth-p
$check = get_config('system','paranoia');
// extra paranoia - if the IP changed, log them out
if($check && ($_SESSION['addr'] != $_SERVER['REMOTE_ADDR'])) {
+ logger('Session address changed. Paranoid setting in effect, blocking session. '
+ . $_SESSION['addr'] . ' != ' . $_SERVER['REMOTE_ADDR']);
nuke_session();
goaway(z_root());
}
diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php
index 8487f845a..d86ba4543 100644
--- a/include/bb2diaspora.php
+++ b/include/bb2diaspora.php
@@ -221,13 +221,18 @@ function bb2diaspora($Text,$preserve_nl = false) {
$Text = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$Text);
- $Text = preg_replace('/\[(.*?)\]\((.*?)\\\\_(.*?)\)/ism','[$1]($2_$3)',$Text);
+ $Text = preg_replace_callback('/\[(.*?)\]\((.*?)\)/ism','unescape_underscores_in_links',$Text);
call_hooks('bb2diaspora',$Text);
return $Text;
}
+function unescape_underscores_in_links($m) {
+ $y = str_replace('\\_','_', $m[2]);
+ return('[' . $m[1] . '](' . $y . ')');
+}
+
function format_event_diaspora($ev) {
$a = get_app();
diff --git a/include/bbcode.php b/include/bbcode.php
index 85d310b75..efc362880 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -52,6 +52,8 @@ function bb_unspacefy_and_trim($st) {
function bbcode($Text,$preserve_nl = false) {
+ $a = get_app();
+
// Hide all [noparse] contained bbtags spacefying them
$Text = preg_replace_callback("/\[noparse\](.*?)\[\/noparse\]/ism", 'bb_spacefy',$Text);
@@ -114,6 +116,11 @@ function bbcode($Text,$preserve_nl = false) {
$Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '<a href="$1" target="external-link">$2</a>', $Text);
//$Text = preg_replace("/\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[\/url\]/ism", '<a href="$1" target="_blank">$2</a>', $Text);
+ // we may need to restrict this further if it picks up too many strays
+ // link acct:user@host to a webfinger profile redirector
+
+ $Text = preg_replace('/acct:(.*?)@(.*?)([ ,])/', '<a href="' . $a->get_baseurl() . '/acctlink?addr=' . "$1@$2"
+ . '" target="extlink" >acct:' . "$1@$2$3" . '</a>',$Text);
// Perform MAIL Search
$Text = preg_replace("/\[mail\]([$MAILSearchString]*)\[\/mail\]/", '<a href="mailto:$1">$1</a>', $Text);
@@ -226,7 +233,7 @@ function bbcode($Text,$preserve_nl = false) {
$endlessloop = 0;
while ((strpos($Text, "[/quote]")!== false) and (strpos($Text, "[quote=") !== false) and (++$endlessloop < 20))
$Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism",
- "<br /><strong class=".'"author"'.">" . $t_wrote . "</strong><blockquote class=".'"author"'.">$2</blockquote>",
+ "<br /><strong class=".'"author"'.">" . $t_wrote . "</strong><blockquote>$2</blockquote>",
$Text);
// [img=widthxheight]image source[/img]
diff --git a/include/config.php b/include/config.php
index 4cff38090..df1070c13 100644
--- a/include/config.php
+++ b/include/config.php
@@ -6,7 +6,7 @@
* Note:
* Please do not store booleans - convert to 0/1 integer values
* The get_?config() functions return boolean false for keys that are unset,
- * and this could lead to subtle bugs.
+ * and this could lead to subtle bugs.
*
* There are a few places in the code (such as the admin panel) where boolean
* configurations need to be fixed as of 10/08/2011.
@@ -30,6 +30,9 @@ function load_config($family) {
$a->config[$family][$k] = $rr['v'];
}
}
+ } else if ($rr['cat'] != 'config') {
+ // Negative caching
+ $a->config[$family] = "!<unset>!";
}
}}
@@ -47,6 +50,13 @@ function get_config($family, $key, $instore = false) {
global $a;
if(! $instore) {
+ // Looking if the whole family isn't set
+ if(isset($a->config[$family])) {
+ if($a->config[$family] === '!<unset>!') {
+ return false;
+ }
+ }
+
if(isset($a->config[$family][$key])) {
if($a->config[$family][$key] === '!<unset>!') {
return false;
@@ -77,11 +87,9 @@ function get_config($family, $key, $instore = false) {
if(! function_exists('set_config')) {
function set_config($family,$key,$value) {
global $a;
-
// manage array value
$dbvalue = (is_array($value)?serialize($value):$value);
- $dbvalue = (is_bool($value) ? intval($value) : $value);
-
+ $dbvalue = (is_bool($dbvalue) ? intval($dbvalue) : $dbvalue);
if(get_config($family,$key,true) === false) {
$a->config[$family][$key] = $value;
$ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",
@@ -89,11 +97,11 @@ function set_config($family,$key,$value) {
dbesc($key),
dbesc($dbvalue)
);
- if($ret)
+ if($ret)
return $value;
return $ret;
}
-
+
$ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
dbesc($dbvalue),
dbesc($family),
@@ -120,6 +128,9 @@ function load_pconfig($uid,$family) {
$k = $rr['k'];
$a->config[$uid][$family][$k] = $rr['v'];
}
+ } else if ($rr['cat'] != 'config') {
+ // Negative caching
+ $a->config[$uid][$family] = "!<unset>!";
}
}}
@@ -131,6 +142,13 @@ function get_pconfig($uid,$family, $key, $instore = false) {
global $a;
if(! $instore) {
+ // Looking if the whole family isn't set
+ if(isset($a->config[$uid][$family])) {
+ if($a->config[$uid][$family] === '!<unset>!') {
+ return false;
+ }
+ }
+
if(isset($a->config[$uid][$family][$key])) {
if($a->config[$uid][$family][$key] === '!<unset>!') {
return false;
diff --git a/include/conversation.php b/include/conversation.php
index 6bf673b97..a9c6287a9 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -173,6 +173,13 @@ function localize_item(&$item){
$item['body'] = str_replace($mtch[0],'@[url=' . zrl($mtch[1]). ']',$item['body']);
}
}
+ if(preg_match_all('/\[url=(.*?)\/photos\/(.*?)\/image\/(.*?)\]\[img(.*?)\]h(.*?)\[\/img\]\[\/url\]/is',$item['body'],$matches,PREG_SET_ORDER)) {
+logger('matched');
+ foreach($matches as $mtch) {
+ $item['body'] = str_replace($mtch[0],'[url=' . zrl($mtch[1] . '/photos/' . $mtch[2] . '/image/' . $mtch[3] ,true) . '][img' . $mtch[4] . ']h' . $mtch[5] . '[/img][/url]',$item['body']);
+ }
+ }
+
}
@@ -495,7 +502,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
// On the network page, I am the owner. On the display page it will be the profile owner.
// This will have been stored in $a->page_contact by our calling page.
- // Put this person on the left of the wall-to-wall notice.
+ // Put this person as the wall owner of the wall-to-wall notice.
$owner_url = zrl($a->page_contact['url']);
$owner_photo = $a->page_contact['thumb'];
@@ -503,23 +510,38 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$template = $wallwall;
$commentww = 'ww';
}
- if((! $item['wall']) && (strlen($item['owner-link'])) && (! link_compare($item['owner-link'],$item['author-link']))) {
-
- // Could be anybody.
- $owner_url = $item['owner-link'];
- $owner_photo = $item['owner-avatar'];
- $owner_name = $item['owner-name'];
- $template = $wallwall;
- $commentww = 'ww';
- // If it is our contact, use a friendly redirect link
- if((link_compare($item['owner-link'],$item['url']))
- && ($item['network'] === NETWORK_DFRN)) {
- $owner_url = $redirect_url;
- $osparkle = ' sparkle';
+ if((! $item['wall']) && $item['owner-link']) {
+
+ $owner_linkmatch = (($item['owner-link']) && link_compare($item['owner-link'],$item['author-link']));
+ $alias_linkmatch = (($item['alias']) && link_compare($item['alias'],$item['author-link']));
+ $owner_namematch = (($item['owner-name']) && $item['owner-name'] == $item['author-name']);
+ if((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) {
+
+ // The author url doesn't match the owner (typically the contact)
+ // and also doesn't match the contact alias.
+ // The name match is a hack to catch several weird cases where URLs are
+ // all over the park. It can be tricked, but this prevents you from
+ // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn
+ // well that it's the same Bob Smith.
+
+ // But it could be somebody else with the same name. It just isn't highly likely.
+
+
+ $owner_url = $item['owner-link'];
+ $owner_photo = $item['owner-avatar'];
+ $owner_name = $item['owner-name'];
+ $template = $wallwall;
+ $commentww = 'ww';
+ // If it is our contact, use a friendly redirect link
+ if((link_compare($item['owner-link'],$item['url']))
+ && ($item['network'] === NETWORK_DFRN)) {
+ $owner_url = $redirect_url;
+ $osparkle = ' sparkle';
+ }
+ else
+ $owner_url = zrl($owner_url);
}
- else
- $owner_url = zrl($owner_url);
}
}
diff --git a/include/crypto.php b/include/crypto.php
index 0feb45c24..6fc9a287e 100644
--- a/include/crypto.php
+++ b/include/crypto.php
@@ -292,4 +292,38 @@ function zot_unencapsulate($data,$prvkey) {
$ret['sender'] = $s;
$ret['data'] = aes_unencapsulate($x,$prvkey);
return $ret;
-} \ No newline at end of file
+}
+
+function new_keypair($bits) {
+
+ $openssl_options = array(
+ 'digest_alg' => 'sha1',
+ 'private_key_bits' => $bits,
+ 'encrypt_key' => false
+ );
+
+ $conf = get_config('system','openssl_conf_file');
+ if($conf)
+ $openssl_options['config'] = $conf;
+
+ $result = openssl_pkey_new($openssl_options);
+
+ if(empty($result)) {
+ logger('new_keypair: failed');
+ return false;
+ }
+
+ // Get private key
+
+ $response = array('prvkey' => '', 'pubkey' => '');
+
+ openssl_pkey_export($result, $response['prvkey']);
+
+ // Get public key
+ $pkey = openssl_pkey_get_details($result);
+ $response['pubkey'] = $pkey["key"];
+
+ return $response;
+
+}
+
diff --git a/include/datetime.php b/include/datetime.php
index f4dcfce62..3b1491e4d 100644
--- a/include/datetime.php
+++ b/include/datetime.php
@@ -244,7 +244,7 @@ function timesel($pre,$h,$m) {
// Limited to range of timestamps
if(! function_exists('relative_date')) {
-function relative_date($posted_date) {
+function relative_date($posted_date,$format = null) {
$localtime = datetime_convert('UTC',date_default_timezone_get(),$posted_date);
@@ -274,7 +274,9 @@ function relative_date($posted_date) {
if ($d >= 1) {
$r = round($d);
// translators - e.g. 22 hours ago, 1 minute ago
- return sprintf( t('%1$d %2$s ago'),$r, (($r == 1) ? $str[0] : $str[1]));
+ if(! $format)
+ $format = t('%1$d %2$s ago');
+ return sprintf( $format,$r, (($r == 1) ? $str[0] : $str[1]));
}
}
}}
diff --git a/include/dba.php b/include/dba.php
index c9f880241..881097f30 100644
--- a/include/dba.php
+++ b/include/dba.php
@@ -32,9 +32,9 @@ class dba {
if (!(strlen($server) && strlen($user))){
$this->connected = false;
$this->db = null;
- return;
+ return;
}
-
+
if($install) {
if(strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1')) {
if(! dns_get_record($server, DNS_A + DNS_CNAME + DNS_PTR)) {
@@ -71,23 +71,29 @@ class dba {
}
public function q($sql) {
-
+
if((! $this->db) || (! $this->connected))
return false;
-
+
$this->error = '';
+ //if (get_config("system", "db_log") != "")
+ // @file_put_contents(get_config("system", "db_log"), datetime_convert().':'.session_id(). ' Start '.$sql."\n", FILE_APPEND);
+
if($this->mysqli)
$result = @$this->db->query($sql);
else
$result = @mysql_query($sql,$this->db);
+ //if (get_config("system", "db_log") != "")
+ // @file_put_contents(get_config("system", "db_log"), datetime_convert().':'.session_id(). ' Stop '."\n", FILE_APPEND);
+
if($this->mysqli) {
if($this->db->errno)
$this->error = $this->db->error;
}
elseif(mysql_errno($this->db))
- $this->error = mysql_error($this->db);
+ $this->error = mysql_error($this->db);
if(strlen($this->error)) {
logger('dba: ' . $this->error);
@@ -107,8 +113,8 @@ class dba {
else
$mesg = mysql_num_rows($result) . ' results' . EOL;
}
-
- $str = 'SQL = ' . printable($sql) . EOL . 'SQL returned ' . $mesg
+
+ $str = 'SQL = ' . printable($sql) . EOL . 'SQL returned ' . $mesg
. (($this->error) ? ' error: ' . $this->error : '')
. EOL;
@@ -146,7 +152,7 @@ class dba {
}
}
-
+
if($this->debug)
logger('dba: ' . printable(print_r($r, true)));
return($r);
diff --git a/include/delivery.php b/include/delivery.php
index 5f84a548a..e6cfc8155 100644
--- a/include/delivery.php
+++ b/include/delivery.php
@@ -38,164 +38,168 @@ function delivery_run($argv, $argc){
$cmd = $argv[1];
$item_id = intval($argv[2]);
- $contact_id = intval($argv[3]);
- // Some other process may have delivered this item already.
+ for($x = 3; $x < $argc; $x ++) {
- $r = q("select * from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
- dbesc($cmd),
- dbesc($item_id),
- dbesc($contact_id)
- );
- if(! count($r)) {
- return;
- }
-
- $maxsysload = intval(get_config('system','maxloadavg'));
- if($maxsysload < 1)
- $maxsysload = 50;
- if(function_exists('sys_getloadavg')) {
- $load = sys_getloadavg();
- if(intval($load[0]) > $maxsysload) {
- logger('system: load ' . $load . ' too high. Delivery deferred to next queue run.');
- return;
- }
- }
+ $contact_id = intval($argv[$x]);
- // It's ours to deliver. Remove it from the queue.
+ // Some other process may have delivered this item already.
- q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
- dbesc($cmd),
- dbesc($item_id),
- dbesc($contact_id)
- );
+ $r = q("select * from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
+ dbesc($cmd),
+ dbesc($item_id),
+ dbesc($contact_id)
+ );
+ if(! count($r)) {
+ continue;
+ }
+
+ $maxsysload = intval(get_config('system','maxloadavg'));
+ if($maxsysload < 1)
+ $maxsysload = 50;
+ if(function_exists('sys_getloadavg')) {
+ $load = sys_getloadavg();
+ if(intval($load[0]) > $maxsysload) {
+ logger('system: load ' . $load . ' too high. Delivery deferred to next queue run.');
+ return;
+ }
+ }
- if((! $item_id) || (! $contact_id))
- return;
+ // It's ours to deliver. Remove it from the queue.
- $expire = false;
- $top_level = false;
- $recipients = array();
- $url_recipients = array();
+ q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
+ dbesc($cmd),
+ dbesc($item_id),
+ dbesc($contact_id)
+ );
- $normal_mode = true;
+ if((! $item_id) || (! $contact_id))
+ continue;
- $recipients[] = $contact_id;
+ $expire = false;
+ $top_level = false;
+ $recipients = array();
+ $url_recipients = array();
- if($cmd === 'expire') {
- $normal_mode = false;
- $expire = true;
- $items = q("SELECT * FROM `item` WHERE `uid` = %d AND `wall` = 1
- AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP() - INTERVAL 30 MINUTE",
- intval($item_id)
- );
- $uid = $item_id;
- $item_id = 0;
- if(! count($items))
- return;
- }
- else {
+ $normal_mode = true;
- // find ancestors
- $r = q("SELECT * FROM `item` WHERE `id` = %d and visible = 1 and moderated = 0 LIMIT 1",
- intval($item_id)
- );
+ $recipients[] = $contact_id;
- if((! count($r)) || (! intval($r[0]['parent']))) {
- return;
+ if($cmd === 'expire') {
+ $normal_mode = false;
+ $expire = true;
+ $items = q("SELECT * FROM `item` WHERE `uid` = %d AND `wall` = 1
+ AND `deleted` = 1 AND `changed` > UTC_TIMESTAMP() - INTERVAL 30 MINUTE",
+ intval($item_id)
+ );
+ $uid = $item_id;
+ $item_id = 0;
+ if(! count($items))
+ continue;
}
+ else {
- $target_item = $r[0];
- $parent_id = intval($r[0]['parent']);
- $uid = $r[0]['uid'];
- $updated = $r[0]['edited'];
+ // find ancestors
+ $r = q("SELECT * FROM `item` WHERE `id` = %d and visible = 1 and moderated = 0 LIMIT 1",
+ intval($item_id)
+ );
- if(! $parent_id)
- return;
+ if((! count($r)) || (! intval($r[0]['parent']))) {
+ continue;
+ }
+ $target_item = $r[0];
+ $parent_id = intval($r[0]['parent']);
+ $uid = $r[0]['uid'];
+ $updated = $r[0]['edited'];
- $items = q("SELECT `item`.*, `sign`.`signed_text`,`sign`.`signature`,`sign`.`signer`
- FROM `item` LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `parent` = %d and visible = 1 and moderated = 0 ORDER BY `id` ASC",
- intval($parent_id)
- );
+ // The following seems superfluous. We've already checked for "if (! intval($r[0]['parent']))" a few lines up
+ if(! $parent_id)
+ continue;
- if(! count($items)) {
- return;
- }
- $icontacts = null;
- $contacts_arr = array();
- foreach($items as $item)
- if(! in_array($item['contact-id'],$contacts_arr))
- $contacts_arr[] = intval($item['contact-id']);
- if(count($contacts_arr)) {
- $str_contacts = implode(',',$contacts_arr);
- $icontacts = q("SELECT * FROM `contact`
- WHERE `id` IN ( $str_contacts ) "
+ $items = q("SELECT `item`.*, `sign`.`signed_text`,`sign`.`signature`,`sign`.`signer`
+ FROM `item` LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `parent` = %d and visible = 1 and moderated = 0 ORDER BY `id` ASC",
+ intval($parent_id)
);
- }
- if( ! ($icontacts && count($icontacts)))
- return;
- // avoid race condition with deleting entries
+ if(! count($items)) {
+ continue;
+ }
- if($items[0]['deleted']) {
+ $icontacts = null;
+ $contacts_arr = array();
foreach($items as $item)
- $item['deleted'] = 1;
- }
+ if(! in_array($item['contact-id'],$contacts_arr))
+ $contacts_arr[] = intval($item['contact-id']);
+ if(count($contacts_arr)) {
+ $str_contacts = implode(',',$contacts_arr);
+ $icontacts = q("SELECT * FROM `contact`
+ WHERE `id` IN ( $str_contacts ) "
+ );
+ }
+ if( ! ($icontacts && count($icontacts)))
+ continue;
+
+ // avoid race condition with deleting entries
- if((count($items) == 1) && ($items[0]['uri'] === $items[0]['parent-uri'])) {
- logger('delivery: top level post');
- $top_level = true;
+ if($items[0]['deleted']) {
+ foreach($items as $item)
+ $item['deleted'] = 1;
+ }
+
+ if((count($items) == 1) && ($items[0]['uri'] === $items[0]['parent-uri'])) {
+ logger('delivery: top level post');
+ $top_level = true;
+ }
}
- }
- $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`,
- `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`,
- `user`.`page-flags`, `user`.`prvnets`
- FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid`
- WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
- intval($uid)
- );
+ $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`,
+ `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`,
+ `user`.`page-flags`, `user`.`prvnets`
+ FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid`
+ WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
+ intval($uid)
+ );
- if(! count($r))
- return;
+ if(! count($r))
+ continue;
- $owner = $r[0];
+ $owner = $r[0];
- $walltowall = ((($top_level) && ($owner['id'] != $items[0]['contact-id'])) ? true : false);
+ $walltowall = ((($top_level) && ($owner['id'] != $items[0]['contact-id'])) ? true : false);
- $public_message = true;
+ $public_message = true;
- // fill this in with a single salmon slap if applicable
+ // fill this in with a single salmon slap if applicable
- $slap = '';
+ $slap = '';
- require_once('include/group.php');
+ require_once('include/group.php');
- $parent = $items[0];
+ $parent = $items[0];
- // This is IMPORTANT!!!!
+ // This is IMPORTANT!!!!
- // We will only send a "notify owner to relay" or followup message if the referenced post
- // originated on our system by virtue of having our hostname somewhere
- // in the URI, AND it was a comment (not top_level) AND the parent originated elsewhere.
- // if $parent['wall'] == 1 we will already have the parent message in our array
- // and we will relay the whole lot.
-
- // expire sends an entire group of expire messages and cannot be forwarded.
- // However the conversation owner will be a part of the conversation and will
- // be notified during this run.
- // Other DFRN conversation members will be alerted during polled updates.
-
- // Diaspora members currently are not notified of expirations, and other networks have
- // either limited or no ability to process deletions. We should at least fix Diaspora
- // by stringing togther an array of retractions and sending them onward.
+ // We will only send a "notify owner to relay" or followup message if the referenced post
+ // originated on our system by virtue of having our hostname somewhere
+ // in the URI, AND it was a comment (not top_level) AND the parent originated elsewhere.
+ // if $parent['wall'] == 1 we will already have the parent message in our array
+ // and we will relay the whole lot.
+
+ // expire sends an entire group of expire messages and cannot be forwarded.
+ // However the conversation owner will be a part of the conversation and will
+ // be notified during this run.
+ // Other DFRN conversation members will be alerted during polled updates.
+
+ // Diaspora members currently are not notified of expirations, and other networks have
+ // either limited or no ability to process deletions. We should at least fix Diaspora
+ // by stringing togther an array of retractions and sending them onward.
- $localhost = $a->get_hostname();
- if(strpos($localhost,':'))
- $localhost = substr($localhost,0,strpos($localhost,':'));
+ $localhost = $a->get_hostname();
+ if(strpos($localhost,':'))
+ $localhost = substr($localhost,0,strpos($localhost,':'));
/**
*
@@ -205,337 +209,338 @@ function delivery_run($argv, $argc){
*
*/
- if((! $top_level) && ($parent['wall'] == 0) && (! $expire) && (stristr($target_item['uri'],$localhost))) {
- logger('relay denied for delivery agent.');
+ if((! $top_level) && ($parent['wall'] == 0) && (! $expire) && (stristr($target_item['uri'],$localhost))) {
+ logger('relay denied for delivery agent.');
- /* no relay allowed for direct contact delivery */
- return;
- }
+ /* no relay allowed for direct contact delivery */
+ continue;
+ }
- if((strlen($parent['allow_cid']))
- || (strlen($parent['allow_gid']))
- || (strlen($parent['deny_cid']))
- || (strlen($parent['deny_gid']))) {
- $public_message = false; // private recipients, not public
- }
+ if((strlen($parent['allow_cid']))
+ || (strlen($parent['allow_gid']))
+ || (strlen($parent['deny_cid']))
+ || (strlen($parent['deny_gid']))) {
+ $public_message = false; // private recipients, not public
+ }
- $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `blocked` = 0 AND `pending` = 0",
- intval($contact_id)
- );
+ $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `blocked` = 0 AND `pending` = 0",
+ intval($contact_id)
+ );
- if(count($r))
- $contact = $r[0];
+ if(count($r))
+ $contact = $r[0];
- $hubxml = feed_hublinks();
+ $hubxml = feed_hublinks();
- logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
+ logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
- require_once('include/salmon.php');
+ require_once('include/salmon.php');
- if($contact['self'])
- return;
+ if($contact['self'])
+ continue;
- $deliver_status = 0;
+ $deliver_status = 0;
- switch($contact['network']) {
+ switch($contact['network']) {
- case NETWORK_DFRN :
- logger('notifier: dfrndelivery: ' . $contact['name']);
+ case NETWORK_DFRN :
+ logger('notifier: dfrndelivery: ' . $contact['name']);
- $feed_template = get_markup_template('atom_feed.tpl');
- $mail_template = get_markup_template('atom_mail.tpl');
+ $feed_template = get_markup_template('atom_feed.tpl');
+ $mail_template = get_markup_template('atom_mail.tpl');
- $atom = '';
+ $atom = '';
- $birthday = feed_birthday($owner['uid'],$owner['timezone']);
+ $birthday = feed_birthday($owner['uid'],$owner['timezone']);
- if(strlen($birthday))
- $birthday = '<dfrn:birthday>' . xmlify($birthday) . '</dfrn:birthday>';
+ if(strlen($birthday))
+ $birthday = '<dfrn:birthday>' . xmlify($birthday) . '</dfrn:birthday>';
- $atom .= replace_macros($feed_template, array(
- '$version' => xmlify(FRIENDICA_VERSION),
- '$feed_id' => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ),
- '$feed_title' => xmlify($owner['name']),
- '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , ATOM_TIME)) ,
- '$hub' => $hubxml,
- '$salmon' => '', // private feed, we don't use salmon here
- '$name' => xmlify($owner['name']),
- '$profile_page' => xmlify($owner['url']),
- '$photo' => xmlify($owner['photo']),
- '$thumb' => xmlify($owner['thumb']),
- '$picdate' => xmlify(datetime_convert('UTC','UTC',$owner['avatar-date'] . '+00:00' , ATOM_TIME)) ,
- '$uridate' => xmlify(datetime_convert('UTC','UTC',$owner['uri-date'] . '+00:00' , ATOM_TIME)) ,
- '$namdate' => xmlify(datetime_convert('UTC','UTC',$owner['name-date'] . '+00:00' , ATOM_TIME)) ,
- '$birthday' => $birthday,
- '$community' => (($owner['page-flags'] == PAGE_COMMUNITY) ? '<dfrn:community>1</dfrn:community>' : '')
- ));
+ $atom .= replace_macros($feed_template, array(
+ '$version' => xmlify(FRIENDICA_VERSION),
+ '$feed_id' => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ),
+ '$feed_title' => xmlify($owner['name']),
+ '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , ATOM_TIME)) ,
+ '$hub' => $hubxml,
+ '$salmon' => '', // private feed, we don't use salmon here
+ '$name' => xmlify($owner['name']),
+ '$profile_page' => xmlify($owner['url']),
+ '$photo' => xmlify($owner['photo']),
+ '$thumb' => xmlify($owner['thumb']),
+ '$picdate' => xmlify(datetime_convert('UTC','UTC',$owner['avatar-date'] . '+00:00' , ATOM_TIME)) ,
+ '$uridate' => xmlify(datetime_convert('UTC','UTC',$owner['uri-date'] . '+00:00' , ATOM_TIME)) ,
+ '$namdate' => xmlify(datetime_convert('UTC','UTC',$owner['name-date'] . '+00:00' , ATOM_TIME)) ,
+ '$birthday' => $birthday,
+ '$community' => (($owner['page-flags'] == PAGE_COMMUNITY) ? '<dfrn:community>1</dfrn:community>' : '')
+ ));
- foreach($items as $item) {
- if(! $item['parent'])
- continue;
+ foreach($items as $item) {
+ if(! $item['parent'])
+ continue;
- // private emails may be in included in public conversations. Filter them.
- if(($public_message) && $item['private'])
- continue;
+ // private emails may be in included in public conversations. Filter them.
+ if(($public_message) && $item['private'])
+ continue;
- $item_contact = get_item_contact($item,$icontacts);
- if(! $item_contact)
- continue;
+ $item_contact = get_item_contact($item,$icontacts);
+ if(! $item_contact)
+ continue;
- if($normal_mode) {
- if($item_id == $item['id'] || $item['id'] == $item['parent'])
+ if($normal_mode) {
+ if($item_id == $item['id'] || $item['id'] == $item['parent'])
+ $atom .= atom_entry($item,'text',null,$owner,true,(($top_level) ? $contact['id'] : 0));
+ }
+ else
$atom .= atom_entry($item,'text',null,$owner,true);
- }
- else
- $atom .= atom_entry($item,'text',null,$owner,true);
-
- }
- $atom .= '</feed>' . "\r\n";
-
- logger('notifier: ' . $atom, LOGGER_DATA);
- $basepath = implode('/', array_slice(explode('/',$contact['url']),0,3));
-
- // perform local delivery if we are on the same site
+ }
- if(link_compare($basepath,$a->get_baseurl())) {
+ $atom .= '</feed>' . "\r\n";
+
+ logger('notifier: ' . $atom, LOGGER_DATA);
+ $basepath = implode('/', array_slice(explode('/',$contact['url']),0,3));
+
+ // perform local delivery if we are on the same site
+
+ if(link_compare($basepath,$a->get_baseurl())) {
+
+ $nickname = basename($contact['url']);
+ if($contact['issued-id'])
+ $sql_extra = sprintf(" AND `dfrn-id` = '%s' ", dbesc($contact['issued-id']));
+ else
+ $sql_extra = sprintf(" AND `issued-id` = '%s' ", dbesc($contact['dfrn-id']));
+
+ $x = q("SELECT `contact`.*, `contact`.`uid` AS `importer_uid`,
+ `contact`.`pubkey` AS `cpubkey`,
+ `contact`.`prvkey` AS `cprvkey`,
+ `contact`.`thumb` AS `thumb`,
+ `contact`.`url` as `url`,
+ `contact`.`name` as `senderName`,
+ `user`.*
+ FROM `contact`
+ LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid`
+ WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ AND `contact`.`network` = '%s' AND `user`.`nickname` = '%s'
+ $sql_extra
+ AND `user`.`account_expired` = 0 LIMIT 1",
+ dbesc(NETWORK_DFRN),
+ dbesc($nickname)
+ );
- $nickname = basename($contact['url']);
- if($contact['issued-id'])
- $sql_extra = sprintf(" AND `dfrn-id` = '%s' ", dbesc($contact['issued-id']));
- else
- $sql_extra = sprintf(" AND `issued-id` = '%s' ", dbesc($contact['dfrn-id']));
-
- $x = q("SELECT `contact`.*, `contact`.`uid` AS `importer_uid`,
- `contact`.`pubkey` AS `cpubkey`,
- `contact`.`prvkey` AS `cprvkey`,
- `contact`.`thumb` AS `thumb`,
- `contact`.`url` as `url`,
- `contact`.`name` as `senderName`,
- `user`.*
- FROM `contact`
- LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid`
- WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0
- AND `contact`.`network` = '%s' AND `user`.`nickname` = '%s'
- $sql_extra
- AND `user`.`account_expired` = 0 LIMIT 1",
- dbesc(NETWORK_DFRN),
- dbesc($nickname)
- );
+ if(count($x)) {
+ if($owner['page-flags'] == PAGE_COMMUNITY && ! $x[0]['writable']) {
+ q("update contact set writable = 1 where id = %d limit 1",
+ intval($x[0]['id'])
+ );
+ $x[0]['writable'] = 1;
+ }
- if(count($x)) {
- if($owner['page-flags'] == PAGE_COMMUNITY && ! $x[0]['writable']) {
- q("update contact set writable = 1 where id = %d limit 1",
- intval($x[0]['id'])
- );
- $x[0]['writable'] = 1;
- }
+ $ssl_policy = get_config('system','ssl_policy');
+ fix_contact_ssl_policy($x[0],$ssl_policy);
- $ssl_policy = get_config('system','ssl_policy');
- fix_contact_ssl_policy($x[0],$ssl_policy);
+ // If we are setup as a soapbox we aren't accepting input from this person
- // If we are setup as a soapbox we aren't accepting input from this person
+ if($x[0]['page-flags'] == PAGE_SOAPBOX)
+ break;
- if($x[0]['page-flags'] == PAGE_SOAPBOX)
+ require_once('library/simplepie/simplepie.inc');
+ logger('mod-delivery: local delivery');
+ local_delivery($x[0],$atom);
break;
-
- require_once('library/simplepie/simplepie.inc');
- logger('mod-delivery: local delivery');
- local_delivery($x[0],$atom);
- break;
+ }
}
- }
-
- if(! was_recently_delayed($contact['id']))
- $deliver_status = dfrn_deliver($owner,$contact,$atom);
- else
- $deliver_status = (-1);
-
- logger('notifier: dfrn_delivery returns ' . $deliver_status);
- if($deliver_status == (-1)) {
- logger('notifier: delivery failed: queuing message');
- add_to_queue($contact['id'],NETWORK_DFRN,$atom);
- }
- break;
+ if(! was_recently_delayed($contact['id']))
+ $deliver_status = dfrn_deliver($owner,$contact,$atom);
+ else
+ $deliver_status = (-1);
- case NETWORK_OSTATUS :
+ logger('notifier: dfrn_delivery returns ' . $deliver_status);
- // Do not send to otatus if we are not configured to send to public networks
- if($owner['prvnets'])
- break;
- if(get_config('system','ostatus_disabled') || get_config('system','dfrn_only'))
+ if($deliver_status == (-1)) {
+ logger('notifier: delivery failed: queuing message');
+ add_to_queue($contact['id'],NETWORK_DFRN,$atom);
+ }
break;
- // only send salmon if public - e.g. if it's ok to notify
- // a public hub, it's ok to send a salmon
+ case NETWORK_OSTATUS :
- if(($public_message) && (! $expire)) {
- $slaps = array();
+ // Do not send to otatus if we are not configured to send to public networks
+ if($owner['prvnets'])
+ break;
+ if(get_config('system','ostatus_disabled') || get_config('system','dfrn_only'))
+ break;
- foreach($items as $item) {
- if(! $item['parent'])
- continue;
+ // only send salmon if public - e.g. if it's ok to notify
+ // a public hub, it's ok to send a salmon
- // private emails may be in included in public conversations. Filter them.
- if(($public_message) && $item['private'])
- continue;
+ if(($public_message) && (! $expire)) {
+ $slaps = array();
- $item_contact = get_item_contact($item,$icontacts);
- if(! $item_contact)
- continue;
+ foreach($items as $item) {
+ if(! $item['parent'])
+ continue;
- if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
- $slaps[] = atom_entry($item,'html',null,$owner,true);
- }
+ // private emails may be in included in public conversations. Filter them.
+ if(($public_message) && $item['private'])
+ continue;
+
+ $item_contact = get_item_contact($item,$icontacts);
+ if(! $item_contact)
+ continue;
- logger('notifier: slapdelivery: ' . $contact['name']);
- foreach($slaps as $slappy) {
- if($contact['notify']) {
- if(! was_recently_delayed($contact['id']))
- $deliver_status = slapper($owner,$contact['notify'],$slappy);
- else
- $deliver_status = (-1);
-
- if($deliver_status == (-1)) {
- // queue message for redelivery
- add_to_queue($contact['id'],NETWORK_OSTATUS,$slappy);
+ if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
+ $slaps[] = atom_entry($item,'html',null,$owner,true);
+ }
+
+ logger('notifier: slapdelivery: ' . $contact['name']);
+ foreach($slaps as $slappy) {
+ if($contact['notify']) {
+ if(! was_recently_delayed($contact['id']))
+ $deliver_status = slapper($owner,$contact['notify'],$slappy);
+ else
+ $deliver_status = (-1);
+
+ if($deliver_status == (-1)) {
+ // queue message for redelivery
+ add_to_queue($contact['id'],NETWORK_OSTATUS,$slappy);
+ }
}
}
}
- }
-
- break;
-
- case NETWORK_MAIL :
- case NETWORK_MAIL2:
- if(get_config('system','dfrn_only'))
break;
- // WARNING: does not currently convert to RFC2047 header encodings, etc.
- $addr = $contact['addr'];
- if(! strlen($addr))
- break;
-
- if($cmd === 'wall-new' || $cmd === 'comment-new') {
+ case NETWORK_MAIL :
+ case NETWORK_MAIL2:
- $it = null;
- if($cmd === 'wall-new')
- $it = $items[0];
- else {
- $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
- intval($argv[2]),
- intval($uid)
- );
- if(count($r))
- $it = $r[0];
- }
- if(! $it)
+ if(get_config('system','dfrn_only'))
break;
-
+ // WARNING: does not currently convert to RFC2047 header encodings, etc.
- $local_user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
- intval($uid)
- );
- if(! count($local_user))
+ $addr = $contact['addr'];
+ if(! strlen($addr))
break;
+
+ if($cmd === 'wall-new' || $cmd === 'comment-new') {
+
+ $it = null;
+ if($cmd === 'wall-new')
+ $it = $items[0];
+ else {
+ $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($argv[2]),
+ intval($uid)
+ );
+ if(count($r))
+ $it = $r[0];
+ }
+ if(! $it)
+ break;
- $reply_to = '';
- $r1 = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
- intval($uid)
- );
- if($r1 && $r1[0]['reply_to'])
- $reply_to = $r1[0]['reply_to'];
- $subject = (($it['title']) ? email_header_encode($it['title'],'UTF-8') : t("\x28no subject\x29")) ;
+ $local_user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
+ intval($uid)
+ );
+ if(! count($local_user))
+ break;
+
+ $reply_to = '';
+ $r1 = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
+ intval($uid)
+ );
+ if($r1 && $r1[0]['reply_to'])
+ $reply_to = $r1[0]['reply_to'];
- // only expose our real email address to true friends
+ $subject = (($it['title']) ? email_header_encode($it['title'],'UTF-8') : t("\x28no subject\x29")) ;
- if(($contact['rel'] == CONTACT_IS_FRIEND) && (! $contact['blocked']))
- $headers = 'From: ' . email_header_encode($local_user[0]['username'],'UTF-8') . ' <' . $local_user[0]['email'] . '>' . "\n";
- else
- $headers = 'From: ' . email_header_encode($local_user[0]['username'],'UTF-8') . ' <' . t('noreply') . '@' . $a->get_hostname() . '>' . "\n";
+ // only expose our real email address to true friends
- if($reply_to)
- $headers .= 'Reply-to: ' . $reply_to . "\n";
+ if(($contact['rel'] == CONTACT_IS_FRIEND) && (! $contact['blocked']))
+ $headers = 'From: ' . email_header_encode($local_user[0]['username'],'UTF-8') . ' <' . $local_user[0]['email'] . '>' . "\n";
+ else
+ $headers = 'From: ' . email_header_encode($local_user[0]['username'],'UTF-8') . ' <' . t('noreply') . '@' . $a->get_hostname() . '>' . "\n";
- // for testing purposes: Collect exported mails
- // $file = tempnam("/tmp/friendica/", "mail-out-");
- // file_put_contents($file, json_encode($it));
+ if($reply_to)
+ $headers .= 'Reply-to: ' . $reply_to . "\n";
- $headers .= 'Message-Id: <' . iri2msgid($it['uri']). '>' . "\n";
+ // for testing purposes: Collect exported mails
+ // $file = tempnam("/tmp/friendica/", "mail-out-");
+ // file_put_contents($file, json_encode($it));
+
+ $headers .= 'Message-Id: <' . iri2msgid($it['uri']). '>' . "\n";
- //logger("Mail: uri: ".$it['uri']." parent-uri ".$it['parent-uri'], LOGGER_DEBUG);
- //logger("Mail: Data: ".print_r($it, true), LOGGER_DEBUG);
- //logger("Mail: Data: ".print_r($it, true), LOGGER_DATA);
+ //logger("Mail: uri: ".$it['uri']." parent-uri ".$it['parent-uri'], LOGGER_DEBUG);
+ //logger("Mail: Data: ".print_r($it, true), LOGGER_DEBUG);
+ //logger("Mail: Data: ".print_r($it, true), LOGGER_DATA);
- if($it['uri'] !== $it['parent-uri']) {
- $headers .= 'References: <' . iri2msgid($it['parent-uri']) . '>' . "\n";
- if(!strlen($it['title'])) {
- $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1",
- dbesc($it['parent-uri']));
+ if($it['uri'] !== $it['parent-uri']) {
+ $headers .= 'References: <' . iri2msgid($it['parent-uri']) . '>' . "\n";
+ if(!strlen($it['title'])) {
+ $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1",
+ dbesc($it['parent-uri']));
- if(count($r) AND ($r[0]['title'] != ''))
- $subject = $r[0]['title'];
+ if(count($r) AND ($r[0]['title'] != ''))
+ $subject = $r[0]['title'];
+ }
+ if(strncasecmp($subject,'RE:',3))
+ $subject = 'Re: '.$subject;
}
- if(strncasecmp($subject,'RE:',3))
- $subject = 'Re: '.$subject;
+ email_send($addr, $subject, $headers, $it);
}
- email_send($addr, $subject, $headers, $it);
- }
- break;
+ break;
- case NETWORK_DIASPORA :
- if($public_message)
- $loc = 'public batch ' . $contact['batch'];
- else
- $loc = $contact['name'];
+ case NETWORK_DIASPORA :
+ if($public_message)
+ $loc = 'public batch ' . $contact['batch'];
+ else
+ $loc = $contact['name'];
- logger('delivery: diaspora batch deliver: ' . $loc);
+ logger('delivery: diaspora batch deliver: ' . $loc);
- if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode))
- break;
+ if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode))
+ break;
- if((! $contact['pubkey']) && (! $public_message))
- break;
+ if((! $contact['pubkey']) && (! $public_message))
+ break;
- if($target_item['verb'] === ACTIVITY_DISLIKE) {
- // unsupported
- break;
- }
- elseif(($target_item['deleted']) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
- logger('delivery: diaspora retract: ' . $loc);
- // diaspora delete,
- diaspora_send_retraction($target_item,$owner,$contact,$public_message);
- break;
- }
- elseif($target_item['parent'] != $target_item['id']) {
+ if($target_item['verb'] === ACTIVITY_DISLIKE) {
+ // unsupported
+ break;
+ }
+ elseif(($target_item['deleted']) && ($target_item['uri'] === $target_item['parent-uri'])) {
+ // top-level retraction
+ logger('delivery: diaspora retract: ' . $loc);
- logger('delivery: diaspora relay: ' . $loc);
+ diaspora_send_retraction($target_item,$owner,$contact,$public_message);
+ break;
+ }
+ elseif($target_item['uri'] !== $target_item['parent-uri']) {
+ // we are the relay - send comments, likes and relayable_retractions to our conversants
+ logger('delivery: diaspora relay: ' . $loc);
- // we are the relay - send comments, likes and unlikes to our conversants
- diaspora_send_relay($target_item,$owner,$contact,$public_message);
- break;
- }
- elseif(($top_level) && (! $walltowall)) {
- // currently no workable solution for sending walltowall
- logger('delivery: diaspora status: ' . $loc);
- diaspora_send_status($target_item,$owner,$contact,$public_message);
- break;
- }
+ diaspora_send_relay($target_item,$owner,$contact,$public_message);
+ break;
+ }
+ elseif(($top_level) && (! $walltowall)) {
+ // currently no workable solution for sending walltowall
+ logger('delivery: diaspora status: ' . $loc);
+ diaspora_send_status($target_item,$owner,$contact,$public_message);
+ break;
+ }
- logger('delivery: diaspora unknown mode: ' . $contact['name']);
+ logger('delivery: diaspora unknown mode: ' . $contact['name']);
- break;
+ break;
- case NETWORK_FEED :
- case NETWORK_FACEBOOK :
- if(get_config('system','dfrn_only'))
+ case NETWORK_FEED :
+ case NETWORK_FACEBOOK :
+ if(get_config('system','dfrn_only'))
+ break;
+ default:
break;
- default:
- break;
+ }
}
return;
diff --git a/include/diaspora.php b/include/diaspora.php
index 2051de5fc..1e6662f04 100644..100755
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -83,6 +83,9 @@ function diaspora_dispatch($importer,$msg) {
elseif($xmlbase->signed_retraction) {
$ret = diaspora_signed_retraction($importer,$xmlbase->signed_retraction,$msg);
}
+ elseif($xmlbase->relayable_retraction) {
+ $ret = diaspora_signed_retraction($importer,$xmlbase->relayable_retraction,$msg);
+ }
elseif($xmlbase->photo) {
$ret = diaspora_photo($importer,$xmlbase->photo,$msg);
}
@@ -569,6 +572,14 @@ function diaspora_request($importer,$xml) {
return;
}
+ $g = q("select def_gid from user where uid = %d limit 1",
+ intval($importer['uid'])
+ );
+ if($g && intval($g[0]['def_gid'])) {
+ require_once('include/group.php');
+ group_add_member($importer['uid'],'',$contact_record['id'],$g[0]['def_gid']);
+ }
+
if($importer['page-flags'] == PAGE_NORMAL) {
$hash = random_string() . (string) time(); // Generate a confirm_key
@@ -669,7 +680,7 @@ function diaspora_post($importer,$xml) {
return;
}
- // allocate a guid on our system - we aren't fixing any collisions.
+ // allocate a guid on our system - we aren't fixing any collisions.
// we're ignoring them
$g = q("select * from guid where guid = '%s' limit 1",
@@ -836,7 +847,7 @@ function diaspora_reshare($importer,$xml) {
$prefix = '&#x2672; ' . $details . "\n";
- // allocate a guid on our system - we aren't fixing any collisions.
+ // allocate a guid on our system - we aren't fixing any collisions.
// we're ignoring them
$g = q("select * from guid where guid = '%s' limit 1",
@@ -940,7 +951,7 @@ function diaspora_asphoto($importer,$xml) {
return;
}
- // allocate a guid on our system - we aren't fixing any collisions.
+ // allocate a guid on our system - we aren't fixing any collisions.
// we're ignoring them
$g = q("select * from guid where guid = '%s' limit 1",
@@ -1594,22 +1605,28 @@ function diaspora_like($importer,$xml,$msg) {
logger('diaspora_like: duplicate like: ' . $guid);
return;
}
+ // Note: I don't think "Like" objects with positive = "false" are ever actually used
+ // It looks like "RelayableRetractions" are used for "unlike" instead
if($positive === 'false') {
- q("UPDATE `item` SET `deleted` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ logger('diaspora_like: received a like with positive set to "false"...ignoring');
+/* q("UPDATE `item` SET `deleted` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($r[0]['id']),
intval($importer['uid'])
- );
+ );*/
// FIXME
// send notification via proc_run()
return;
}
}
+ // Note: I don't think "Like" objects with positive = "false" are ever actually used
+ // It looks like "RelayableRetractions" are used for "unlike" instead
if($positive === 'false') {
- logger('diaspora_like: unlike received with no corresponding like');
+ logger('diaspora_like: received a like with positive set to "false"');
+ logger('diaspora_like: unlike received with no corresponding like...ignoring');
return;
}
- $author_signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle;
+ $signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle;
$author_signature = base64_decode($author_signature);
@@ -1627,20 +1644,20 @@ function diaspora_like($importer,$xml,$msg) {
}
}
- if(! rsa_verify($author_signed_data,$author_signature,$key,'sha256')) {
+ if(! rsa_verify($signed_data,$author_signature,$key,'sha256')) {
logger('diaspora_like: verification failed.');
return;
}
if($parent_author_signature) {
- $owner_signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle;
+ //$owner_signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle;
$parent_author_signature = base64_decode($parent_author_signature);
$key = $msg['key'];
- if(! rsa_verify($owner_signed_data,$parent_author_signature,$key,'sha256')) {
+ if(! rsa_verify($signed_data,$parent_author_signature,$key,'sha256')) {
logger('diaspora_like: owner verification failed.');
return;
}
@@ -1775,38 +1792,89 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
$type = notags(unxmlify($xml->target_type));
$sig = notags(unxmlify($xml->target_author_signature));
+ $parent_author_signature = (($xml->parent_author_signature) ? notags(unxmlify($xml->parent_author_signature)) : '');
+
$contact = diaspora_get_contact_by_handle($importer['uid'],$diaspora_handle);
if(! $contact) {
logger('diaspora_signed_retraction: no contact');
return;
}
- // this may not yet work for comments. Need to see how the relaying works
- // and figure out who signs it.
-
$signed_data = $guid . ';' . $type ;
- $sig = base64_decode($sig);
+ $sig_decode = base64_decode($sig);
+
+ if(strcasecmp($diaspora_handle,$msg['author']) == 0) {
+ $person = $contact;
+ $key = $msg['key'];
+ }
+ else {
+ $person = find_diaspora_person_by_handle($diaspora_handle);
- $key = $msg['key'];
+ if(is_array($person) && x($person,'pubkey'))
+ $key = $person['pubkey'];
+ else {
+ logger('diaspora_signed_retraction: unable to find author details');
+ return;
+ }
+ }
- if(! rsa_verify($signed_data,$sig,$key,'sha256')) {
- logger('diaspora_signed_retraction: owner verification failed.' . print_r($msg,true));
+ if(! rsa_verify($signed_data,$sig_decode,$key,'sha256')) {
+ logger('diaspora_signed_retraction: retraction-owner verification failed.' . print_r($msg,true));
return;
}
- if($type === 'StatusMessage') {
+ if($parent_author_signature) {
+ $parent_author_signature = base64_decode($parent_author_signature);
+
+ $key = $msg['key'];
+
+ if(! rsa_verify($signed_data,$parent_author_signature,$key,'sha256')) {
+ logger('diaspora_signed_retraction: failed to verify person relaying the retraction (e.g. owner of a post relaying a retracted comment');
+ return;
+ }
+
+ }
+
+ if($type === 'StatusMessage' || $type === 'Comment' || $type === 'Like') {
$r = q("select * from item where guid = '%s' and uid = %d and not file like '%%[%%' limit 1",
dbesc($guid),
intval($importer['uid'])
);
if(count($r)) {
if(link_compare($r[0]['author-link'],$contact['url'])) {
- q("update item set `deleted` = 1, `changed` = '%s' where `id` = %d limit 1",
+ q("update item set `deleted` = 1, `edited` = '%s', `changed` = '%s', `body` = '' , `title` = '' where `id` = %d limit 1",
+ dbesc(datetime_convert()),
dbesc(datetime_convert()),
intval($r[0]['id'])
);
+
+ // Now check if the retraction needs to be relayed by us
+ //
+ // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
+ // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
+ // The only item with `parent` and `id` as the parent id is the parent item.
+ $p = q("select origin from item where parent = %d and id = %d limit 1",
+ $r[0]['parent'],
+ $r[0]['parent']
+ );
+ if(count($p)) {
+ if(($p[0]['origin']) && (! $parent_author_signature)) {
+ q("insert into sign (`retract_iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+ $r[0]['id'],
+ dbesc($signed_data),
+ dbesc($sig),
+ dbesc($diaspora_handle)
+ );
+
+ // the existence of parent_author_signature would have meant the parent_author or owner
+ // is already relaying.
+ logger('diaspora_signed_retraction: relaying relayable_retraction');
+
+ proc_run('php','include/notifier.php','relayable_retraction',$r[0]['id']);
+ }
+ }
}
}
}
@@ -2047,8 +2115,12 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
$theiraddr = $contact['addr'];
- $p = q("select guid from item where parent = %d limit 1",
- $item['parent']
+ // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
+ // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
+ // The only item with `parent` and `id` as the parent id is the parent item.
+ $p = q("select guid from item where parent = %d and id = %d limit 1",
+ intval($item['parent']),
+ intval($item['parent'])
);
if(count($p))
$parent_guid = $p[0]['guid'];
@@ -2059,7 +2131,11 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
$tpl = get_markup_template('diaspora_like.tpl');
$like = true;
$target_type = 'Post';
- $positive = (($item['deleted']) ? 'false' : 'true');
+// $positive = (($item['deleted']) ? 'false' : 'true');
+ $positive = 'true';
+
+ if(($item['deleted']))
+ logger('diaspora_send_followup: received deleted "like". Those should go to diaspora_send_retraction');
}
else {
$tpl = get_markup_template('diaspora_comment.tpl');
@@ -2099,41 +2175,51 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$a = get_app();
- $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+ $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
$theiraddr = $contact['addr'];
- $p = q("select guid from item where parent = %d limit 1",
- $item['parent']
+ // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always
+ // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
+ // The only item with `parent` and `id` as the parent id is the parent item.
+ $p = q("select guid from item where parent = %d and id = %d limit 1",
+ intval($item['parent']),
+ intval($item['parent'])
);
if(count($p))
$parent_guid = $p[0]['guid'];
else
return;
- if($item['verb'] === ACTIVITY_LIKE) {
+ $like = false;
+ $relay_retract = false;
+ $sql_sign_id = 'iid';
+ if( $item['deleted']) {
+ $tpl = get_markup_template('diaspora_relayable_retraction.tpl');
+ $relay_retract = true;
+ $sql_sign_id = 'retract_iid';
+ $target_type = ( ($item['verb'] === ACTIVITY_LIKE) ? 'Like' : 'Comment');
+ }
+ elseif($item['verb'] === ACTIVITY_LIKE) {
$tpl = get_markup_template('diaspora_like_relay.tpl');
$like = true;
$target_type = 'Post';
- $positive = (($item['deleted']) ? 'false' : 'true');
+// $positive = (($item['deleted']) ? 'false' : 'true');
+ $positive = 'true';
}
else {
$tpl = get_markup_template('diaspora_comment_relay.tpl');
- $like = false;
}
$body = $item['body'];
$text = html_entity_decode(bb2diaspora($body));
- // fetch the original signature if somebody sent the post to us to relay
- // If we are relaying for a reply originating on our own account, there wasn't a 'send to relay'
- // action. It wasn't needed. In that case create the original signature and the
- // owner (parent author) signature
- // comments from other networks will be relayed under our name, with a brief
- // preamble to describe what's happening and noting the real author
- $r = q("select * from sign where iid = %d limit 1",
+ // fetch the original signature if the relayable was created by a Diaspora
+ // or DFRN user. Relayables for other networks are not supported.
+
+ $r = q("select * from sign where " . $sql_sign_id . " = %d limit 1",
intval($item['id'])
);
if(count($r)) {
@@ -2144,6 +2230,12 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
}
else {
+ // Author signature information (for likes, comments, and retractions of likes or comments,
+ // whether from Diaspora or Friendica) must be placed in the `sign` table before this
+ // function is called
+ logger('diaspora_send_relay: original author signature not found, cannot send relayable');
+ return;
+/*
$itemcontact = q("select * from contact where `id` = %d limit 1",
intval($item['contact-id'])
);
@@ -2152,29 +2244,40 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$prefix = sprintf( t('[Relayed] Comment authored by %s from network %s'),
'['. $item['author-name'] . ']' . '(' . $item['author-link'] . ')',
network_to_name($itemcontact['network'])) . "\n";
+ // "$body" was assigned to "$text" above. It isn't used after that, so I don't think
+ // the following change will do anything
$body = $prefix . $body;
+
+ // I think this comment will fail upon reaching Diaspora, because "$signed_text" is not defined
}
}
else {
+ // I'm confused about this "else." Since it sets "$handle = $myaddr," it seems like it should be for the case
+ // where the top-level post owner commented on his own post, i.e. "$itemcontact[0]['self']" is true. But it's
+ // positioned to be for the case where "count($itemcontact)" is 0.
+
+ $handle = $myaddr;
if($like)
- $signed_text = $item['guid'] . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $myaddr;
+ $signed_text = $item['guid'] . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $handle;
+ elseif($relay_retract)
+ $signed_text = $item['guid'] . ';' . $target_type;
else
- $signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $myaddr;
+ $signed_text = $item['guid'] . ';' . $parent_guid . ';' . $text . ';' . $handle;
$authorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
- q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+ q("insert into sign (`" . $sql_sign_id . "`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
intval($item['id']),
dbesc($signed_text),
- dbesc(base64_encode($authorsig)),
- dbesc($myaddr)
+ dbesc($authorsig),
+ dbesc($handle)
);
- $handle = $myaddr;
}
+*/
}
- // sign it
+ // sign it with the top-level owner's signature
$parentauthorsig = base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'));
@@ -2182,14 +2285,15 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
'$guid' => xmlify($item['guid']),
'$parent_guid' => xmlify($parent_guid),
'$target_type' =>xmlify($target_type),
- '$authorsig' => xmlify($orig_sign['signature']),
+ '$authorsig' => xmlify($authorsig),
'$parentsig' => xmlify($parentauthorsig),
'$body' => xmlify($text),
'$positive' => xmlify($positive),
'$handle' => xmlify($handle)
));
- logger('diaspora_relay_comment: base message: ' . $msg, LOGGER_DATA);
+ logger('diaspora_send_relay: base message: ' . $msg, LOGGER_DATA);
+
$slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
@@ -2204,14 +2308,25 @@ function diaspora_send_retraction($item,$owner,$contact,$public_batch = false) {
$a = get_app();
$myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
- $signed_text = $item['guid'] . ';' . 'StatusMessage';
+ // Check whether the retraction is for a top-level post or whether it's a relayable
+ if( $item['uri'] !== $item['parent-uri'] ) {
+
+ $tpl = get_markup_template('diaspora_relay_retraction.tpl');
+ $target_type = (($item['verb'] === ACTIVITY_LIKE) ? 'Like' : 'Comment');
+ }
+ else {
+
+ $tpl = get_markup_template('diaspora_signed_retract.tpl');
+ $target_type = 'StatusMessage';
+ }
+
+ $signed_text = $item['guid'] . ';' . $target_type;
- $tpl = get_markup_template('diaspora_signed_retract.tpl');
$msg = replace_macros($tpl, array(
- '$guid' => $item['guid'],
- '$type' => 'StatusMessage',
- '$handle' => $myaddr,
- '$signature' => base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256'))
+ '$guid' => xmlify($item['guid']),
+ '$type' => xmlify($target_type),
+ '$handle' => xmlify($myaddr),
+ '$signature' => xmlify(base64_encode(rsa_sign($signed_text,$owner['uprvkey'],'sha256')))
));
$slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
@@ -2335,3 +2450,5 @@ function diaspora_transmit($owner,$contact,$slap,$public_batch) {
return(($return_code) ? $return_code : (-1));
}
+
+
diff --git a/include/directory.php b/include/directory.php
index cae78adb4..45386183c 100644
--- a/include/directory.php
+++ b/include/directory.php
@@ -24,6 +24,9 @@ function directory_run($argv, $argc){
load_config('system');
+ load_hooks();
+
+
$a->set_baseurl(get_config('system','url'));
$dir = get_config('system','directory_submit_url');
@@ -31,7 +34,12 @@ function directory_run($argv, $argc){
if(! strlen($dir))
return;
- fetch_url($dir . '?url=' . bin2hex($argv[1]));
+ $arr = array('url' => $argv[1]);
+
+ call_hooks('globaldir_update', $arr);
+
+ if(strlen($arr['url']))
+ fetch_url($dir . '?url=' . bin2hex($arr['url']));
return;
}
diff --git a/include/enotify.php b/include/enotify.php
index ca134ac86..fe0f128b6 100644
--- a/include/enotify.php
+++ b/include/enotify.php
@@ -13,13 +13,16 @@ function notification($params) {
$banner = t('Friendica Notification');
$product = FRIENDICA_PLATFORM;
- $siteurl = z_path();
+ $siteurl = $a->get_baseurl(true);
$thanks = t('Thank You,');
$sitename = get_config('config','sitename');
$site_admin = sprintf( t('%s Administrator'), $sitename);
$sender_name = $product;
$hostname = $a->get_hostname();
+ if(strpos($hostname,':'))
+ $hostname = substr($hostname,0,strpos($hostname,':'));
+
$sender_email = t('noreply') . '@' . $hostname;
$additional_mail_header = "";
diff --git a/include/event.php b/include/event.php
index 29202badd..866ae8c3f 100644
--- a/include/event.php
+++ b/include/event.php
@@ -42,7 +42,7 @@ function format_event_html($ev) {
return $o;
}
-
+/*
function parse_event($h) {
require_once('include/Scrape.php');
@@ -108,7 +108,7 @@ function parse_event($h) {
return $ret;
}
-
+*/
function format_event_bbcode($ev) {
@@ -162,7 +162,6 @@ function bbtoevent($s) {
$match = '';
if(preg_match("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",$s,$match))
$ev['adjust'] = $match[1];
- $match = '';
$ev['nofinish'] = (((x($ev, 'start') && $ev['start']) && (!x($ev, 'finish') || !$ev['finish'])) ? 1 : 0);
return $ev;
@@ -294,10 +293,14 @@ function event_store($arr) {
intval($arr['uid'])
);
- return $r[0]['id'];
+ $item_id = $r[0]['id'];
}
else
- return 0;
+ $item_id = 0;
+
+ call_hooks("event_updated", $arr['id']);
+
+ return $item_id;
}
else {
@@ -361,7 +364,7 @@ function event_store($arr) {
$item_arr['body'] = format_event_bbcode($event);
- $item_arr['object'] = '<object><type>' . xmlify(ACTIVITY_OBJ_EVENT) . '</type><title></title><id>' . xmlify($uri) . '</id>';
+ $item_arr['object'] = '<object><type>' . xmlify(ACTIVITY_OBJ_EVENT) . '</type><title></title><id>' . xmlify($arr['uri']) . '</id>';
$item_arr['object'] .= '<content>' . xmlify(format_event_bbcode($event)) . '</content>';
$item_arr['object'] .= '</object>' . "\n";
@@ -383,6 +386,8 @@ function event_store($arr) {
);
}
+ call_hooks("event_created", $event['id']);
+
return $item_id;
}
}
diff --git a/include/follow.php b/include/follow.php
new file mode 100644
index 000000000..d92d7577d
--- /dev/null
+++ b/include/follow.php
@@ -0,0 +1,243 @@
+<?php
+
+
+//
+// Takes a $uid and a url/handle and adds a new contact
+// Currently if the contact is DFRN, interactive needs to be true, to redirect to the
+// dfrn_request page.
+
+// Otherwise this can be used to bulk add statusnet contacts, twitter contacts, etc.
+// Returns an array
+// $return['success'] boolean true if successful
+// $return['message'] error text if success is false.
+
+
+
+function new_contact($uid,$url,$interactive = false) {
+
+ $result = array('success' => false,'message' => '');
+
+ $a = get_app();
+
+ // remove ajax junk, e.g. Twitter
+
+ $url = str_replace('/#!/','/',$url);
+
+ if(! allowed_url($url)) {
+ $result['message'] = t('Disallowed profile URL.');
+ return $result;
+ }
+
+ if(! $url) {
+ $result['message'] = t('Connect URL missing.');
+ return $result;
+ }
+
+ $arr = array('url' => $url, 'contact' => array());
+
+ call_hooks('follow', $arr);
+
+ if(x($arr['contact'],'name'))
+ $ret = $arr['contact'];
+ else
+ $ret = probe_url($url);
+
+ if($ret['network'] === NETWORK_DFRN) {
+ if($interactive) {
+ if(strlen($a->path))
+ $myaddr = bin2hex($a->get_baseurl() . '/profile/' . $a->user['nickname']);
+ else
+ $myaddr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname());
+
+ goaway($ret['request'] . "&addr=$myaddr");
+
+ // NOTREACHED
+ }
+ }
+ else {
+ if(get_config('system','dfrn_only')) {
+ $result['message'] = t('This site is not configured to allow communications with other networks.') . EOL;
+ $result['message'] != t('No compatible communication protocols or feeds were discovered.') . EOL;
+ return $result;
+ }
+ }
+
+ // This extra param just confuses things, remove it
+ if($ret['network'] === NETWORK_DIASPORA)
+ $ret['url'] = str_replace('?absolute=true','',$ret['url']);
+
+
+ // do we have enough information?
+
+ if(! ((x($ret,'name')) && (x($ret,'poll')) && ((x($ret,'url')) || (x($ret,'addr'))))) {
+ $result['message'] .= t('The profile address specified does not provide adequate information.') . EOL;
+ if(! x($ret,'poll'))
+ $result['message'] .= t('No compatible communication protocols or feeds were discovered.') . EOL;
+ if(! x($ret,'name'))
+ $result['message'] .= t('An author or name was not found.') . EOL;
+ if(! x($ret,'url'))
+ $result['message'] .= t('No browser URL could be matched to this address.') . EOL;
+ if(strpos($url,'@') !== false) {
+ $result['message'] .= t('Unable to match @-style Identity Address with a known protocol or email contact.') . EOL;
+ $result['message'] .= t('Use mailto: in front of address to force email check.') . EOL;
+ }
+ return $result;
+ }
+
+ if($ret['network'] === NETWORK_OSTATUS && get_config('system','ostatus_disabled')) {
+ $result['message'] .= t('The profile address specified belongs to a network which has been disabled on this site.') . EOL;
+ $ret['notify'] = '';
+ }
+
+ if(! $ret['notify']) {
+ $result['message'] .= t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . EOL;
+ }
+
+ $writeable = ((($ret['network'] === NETWORK_OSTATUS) && ($ret['notify'])) ? 1 : 0);
+ $hidden = (($ret['network'] === NETWORK_MAIL) ? 1 : 0);
+
+ if($ret['network'] === NETWORK_MAIL) {
+ $writeable = 1;
+
+ }
+ if($ret['network'] === NETWORK_DIASPORA)
+ $writeable = 1;
+
+ // check if we already have a contact
+ // the poll url is more reliable than the profile url, as we may have
+ // indirect links or webfinger links
+
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` = '%s' LIMIT 1",
+ intval($uid),
+ dbesc($ret['poll'])
+ );
+
+
+ if(count($r)) {
+ // update contact
+ if($r[0]['rel'] == CONTACT_IS_FOLLOWER || ($network === NETWORK_DIASPORA && $r[0]['rel'] == CONTACT_IS_SHARING)) {
+ q("UPDATE `contact` SET `rel` = %d , `readonly` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval(CONTACT_IS_FRIEND),
+ intval($r[0]['id']),
+ intval($uid)
+ );
+ }
+ }
+ else {
+
+ $new_relation = (($ret['network'] === NETWORK_MAIL) ? CONTACT_IS_FRIEND : CONTACT_IS_SHARING);
+ if($ret['network'] === NETWORK_DIASPORA)
+ $new_relation = CONTACT_IS_FOLLOWER;
+
+ // create contact record
+ $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `batch`, `notify`, `poll`, `poco`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`,
+ `writable`, `hidden`, `blocked`, `readonly`, `pending` )
+ VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, 0, 0, 0 ) ",
+ intval($uid),
+ dbesc(datetime_convert()),
+ dbesc($ret['url']),
+ dbesc(normalise_link($ret['url'])),
+ dbesc($ret['addr']),
+ dbesc($ret['alias']),
+ dbesc($ret['batch']),
+ dbesc($ret['notify']),
+ dbesc($ret['poll']),
+ dbesc($ret['poco']),
+ dbesc($ret['name']),
+ dbesc($ret['nick']),
+ dbesc($ret['photo']),
+ dbesc($ret['network']),
+ dbesc($ret['pubkey']),
+ intval($new_relation),
+ intval($ret['priority']),
+ intval($writeable),
+ intval($hidden)
+ );
+ }
+
+ $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($ret['url']),
+ intval($uid)
+ );
+
+ if(! count($r)) {
+ $result['message'] .= t('Unable to retrieve contact information.') . EOL;
+ return $result;
+ }
+
+ $contact = $r[0];
+ $contact_id = $r[0]['id'];
+
+
+ $g = q("select def_gid from user where uid = %d limit 1",
+ intval($uid)
+ );
+ if($g && intval($g[0]['def_gid'])) {
+ require_once('include/group.php');
+ group_add_member($uid,'',$contact_id,$g[0]['def_gid']);
+ }
+
+ require_once("Photo.php");
+
+ $photos = import_profile_photo($ret['photo'],$uid,$contact_id);
+
+ $r = q("UPDATE `contact` SET `photo` = '%s',
+ `thumb` = '%s',
+ `micro` = '%s',
+ `name-date` = '%s',
+ `uri-date` = '%s',
+ `avatar-date` = '%s'
+ WHERE `id` = %d LIMIT 1
+ ",
+ dbesc($photos[0]),
+ dbesc($photos[1]),
+ dbesc($photos[2]),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ intval($contact_id)
+ );
+
+
+ // pull feed and consume it, which should subscribe to the hub.
+
+ proc_run('php',"include/poller.php","$contact_id");
+
+ // create a follow slap
+
+ $tpl = get_markup_template('follow_slap.tpl');
+ $slap = replace_macros($tpl, array(
+ '$name' => $a->user['username'],
+ '$profile_page' => $a->get_baseurl() . '/profile/' . $a->user['nickname'],
+ '$photo' => $a->contact['photo'],
+ '$thumb' => $a->contact['thumb'],
+ '$published' => datetime_convert('UTC','UTC', 'now', ATOM_TIME),
+ '$item_id' => 'urn:X-dfrn:' . $a->get_hostname() . ':follow:' . random_string(),
+ '$title' => '',
+ '$type' => 'text',
+ '$content' => t('following'),
+ '$nick' => $a->user['nickname'],
+ '$verb' => ACTIVITY_FOLLOW,
+ '$ostat_follow' => ''
+ ));
+
+ $r = q("SELECT `contact`.*, `user`.* FROM `contact` LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid`
+ WHERE `user`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
+ intval($uid)
+ );
+
+ if(count($r)) {
+ if(($contact['network'] == NETWORK_OSTATUS) && (strlen($contact['notify']))) {
+ require_once('include/salmon.php');
+ slapper($r[0],$contact['notify'],$slap);
+ }
+ if($contact['network'] == NETWORK_DIASPORA) {
+ require_once('include/diaspora.php');
+ $ret = diaspora_share($a->user,$contact);
+ logger('mod_follow: diaspora_share returns: ' . $ret);
+ }
+ }
+
+ $result['success'] = true;
+ return $result;
+}
diff --git a/include/group.php b/include/group.php
index edb547de6..854ac06a9 100644
--- a/include/group.php
+++ b/include/group.php
@@ -97,8 +97,9 @@ function group_rmv_member($uid,$name,$member) {
}
-function group_add_member($uid,$name,$member) {
- $gid = group_byname($uid,$name);
+function group_add_member($uid,$name,$member,$gid = 0) {
+ if(! $gid)
+ $gid = group_byname($uid,$name);
if((! $gid) || (! $uid) || (! $member))
return false;
@@ -154,6 +155,32 @@ function group_public_members($gid) {
}
+function mini_group_select($uid,$gid = 0) {
+
+ $grps = array();
+ $o = '';
+
+ $r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d ORDER BY `name` ASC",
+ intval($uid)
+ );
+ $grps[] = array('name' => '', 'id' => '0', 'selected' => '');
+ if(count($r)) {
+ foreach($r as $rr) {
+ $grps[] = array('name' => $rr['name'], 'id' => $rr['id'], 'selected' => (($gid == $rr['id']) ? 'true' : ''));
+ }
+
+ }
+ logger('groups: ' . print_r($grps,true));
+
+ $o = replace_macros(get_markup_template('group_selection.tpl'), array(
+ '$label' => t('Default privacy group for new contacts'),
+ '$groups' => $grps
+ ));
+ return $o;
+}
+
+
+
function group_side($every="contacts",$each="group",$edit = false, $group_id = 0, $cid = 0) {
diff --git a/include/items.php b/include/items.php
index 129499967..4513db1db 100644..100755
--- a/include/items.php
+++ b/include/items.php
@@ -180,6 +180,10 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0)
foreach($items as $item) {
+ // prevent private email from leaking.
+ if($item['network'] === NETWORK_MAIL)
+ continue;
+
// public feeds get html, our own nodes use bbcode
if($public_feed) {
@@ -959,6 +963,8 @@ function tag_deliver($uid,$item_id) {
return;
$community_page = (($u[0]['page-flags'] == PAGE_COMMUNITY) ? true : false);
+ $prvgroup = (($u[0]['page-flags'] == PAGE_PRVGROUP) ? true : false);
+
$i = q("select * from item where id = %d and uid = %d limit 1",
intval($item_id),
@@ -1008,9 +1014,10 @@ function tag_deliver($uid,$item_id) {
'otype' => 'item'
));
- if(! $community_page)
+ if((! $community_page) && (! $prvgroup))
return;
+
// tgroup delivery - setup a second delivery chain
// prevent delivery looping - only proceed
// if the message originated elsewhere and is a top-level post
@@ -1031,8 +1038,11 @@ function tag_deliver($uid,$item_id) {
$private = ($u[0]['allow_cid'] || $u[0]['allow_gid'] || $u[0]['deny_cid'] || $u[0]['deny_gid']) ? 1 : 0;
- q("update item set wall = 1, origin = 1, forum_mode = 1, `owner-name` = '%s', `owner-link` = '%s', `owner-avatar` = '%s',
+ $forum_mode = (($prvgroup) ? 2 : 1);
+
+ q("update item set wall = 1, origin = 1, forum_mode = %d, `owner-name` = '%s', `owner-link` = '%s', `owner-avatar` = '%s',
`private` = %d, `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' where id = %d limit 1",
+ intval($forum_mode),
dbesc($c[0]['name']),
dbesc($c[0]['url']),
dbesc($c[0]['thumb']),
@@ -1057,9 +1067,6 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
$a = get_app();
-// if((! strlen($contact['issued-id'])) && (! $contact['duplex']) && (! ($owner['page-flags'] == PAGE_COMMUNITY)))
-// return 3;
-
$idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
if($contact['duplex'] && $contact['dfrn-id'])
@@ -1124,6 +1131,9 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
$rino_allowed = ((intval($res->rino) === 1) ? 1 : 0);
$page = (($owner['page-flags'] == PAGE_COMMUNITY) ? 1 : 0);
+ if($owner['page-flags'] == PAGE_PRVGROUP)
+ $page = 2;
+
$final_dfrn_id = '';
if($perm) {
@@ -1177,7 +1187,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
$postvars['ssl_policy'] = $ssl_policy;
if($page)
- $postvars['page'] = '1';
+ $postvars['page'] = $page;
if($rino && $rino_allowed && (! $dissolve)) {
$key = substr(random_string(),0,16);
@@ -2194,7 +2204,7 @@ function local_delivery($importer,$data) {
if($is_reply) {
$community = false;
- if($importer['page-flags'] == PAGE_COMMUNITY) {
+ if($importer['page-flags'] == PAGE_COMMUNITY || $importer['page-flags'] == PAGE_PRVGROUP ) {
$sql_extra = '';
$community = true;
logger('local_delivery: possible community reply');
@@ -2221,8 +2231,8 @@ function local_delivery($importer,$data) {
if($r && count($r))
$is_a_remote_comment = true;
- // Does this have the characteristics of a community comment?
- // If it's a reply to a wall post on a community page it's a
+ // Does this have the characteristics of a community or private group comment?
+ // If it's a reply to a wall post on a community/prvgroup page it's a
// valid community comment. Also forum_mode makes it valid for sure.
// If neither, it's not.
@@ -2711,6 +2721,12 @@ function new_follower($importer,$contact,$datarray,$item,$sharing = false) {
);
$a = get_app();
if(count($r)) {
+
+ if(intval($r[0]['def_gid'])) {
+ require_once('include/group.php');
+ group_add_member($r[0]['uid'],'',$contact_record['id'],$r[0]['def_gid']);
+ }
+
if(($r[0]['notify-flags'] & NOTIFY_INTRO) && ($r[0]['page-flags'] == PAGE_NORMAL)) {
$email_tpl = get_intltext_template('follow_notify_eml.tpl');
$email = replace_macros($email_tpl, array(
@@ -2820,7 +2836,7 @@ function atom_author($tag,$name,$uri,$h,$w,$photo) {
return $o;
}
-function atom_entry($item,$type,$author,$owner,$comment = false) {
+function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
$a = get_app();
@@ -2832,7 +2848,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
if($item['allow_cid'] || $item['allow_gid'] || $item['deny_cid'] || $item['deny_gid'])
- $body = fix_private_photos($item['body'],$owner['uid']);
+ $body = fix_private_photos($item['body'],$owner['uid'],$item,$cid);
else
$body = $item['body'];
@@ -2915,14 +2931,17 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
return $o;
}
-function fix_private_photos($s,$uid) {
+function fix_private_photos($s,$uid, $item = null, $cid = 0) {
$a = get_app();
- logger('fix_private_photos');
- if(preg_match("/\[img\](.*?)\[\/img\]/is",$s,$matches)) {
- $image = $matches[1];
- logger('fix_private_photos: found photo ' . $image);
- if(stristr($image ,$a->get_baseurl() . '/photo/')) {
+ logger('fix_private_photos', LOGGER_DEBUG);
+ $site = substr($a->get_baseurl(),strpos($a->get_baseurl(),'://'));
+
+ if(preg_match("/\[img(.*?)\](.*?)\[\/img\]/is",$s,$matches)) {
+ $image = $matches[2];
+ logger('fix_private_photos: found photo ' . $image, LOGGER_DEBUG);
+ if(stristr($image , $site . '/photo/')) {
+ $replace = false;
$i = basename($image);
$i = str_replace('.jpg','',$i);
$x = strpos($i,'-');
@@ -2935,17 +2954,86 @@ function fix_private_photos($s,$uid) {
intval($uid)
);
if(count($r)) {
- logger('replacing photo');
- $s = str_replace($image, 'data:image/jpg;base64,' . base64_encode($r[0]['data']), $s);
+
+ // Check to see if we should replace this photo link with an embedded image
+ // 1. No need to do so if the photo is public
+ // 2. If there's a contact-id provided, see if they're in the access list
+ // for the photo. If so, embed it.
+ // 3. Otherwise, if we have an item, see if the item permissions match the photo
+ // permissions, regardless of order but first check to see if they're an exact
+ // match to save some processing overhead.
+
+ // Currently we only embed one private photo per message so as not to hit import
+ // size limits at the receiving end.
+
+ // To embed multiples, we would need to parse out the embedded photos on message
+ // receipt and limit size based only on the text component. Would also need to
+ // ignore all photos during bbcode translation and item localisation, as these
+ // will hit internal regex backtrace limits.
+
+ if(has_permissions($r[0])) {
+ if($cid) {
+ $recips = enumerate_permissions($r[0]);
+ if(in_array($cid, $recips)) {
+ $replace = true;
+ }
+ }
+ elseif($item) {
+ if(compare_permissions($item,$r[0]))
+ $replace = true;
+ }
+ }
+ if($replace) {
+ logger('fix_private_photos: replacing photo', LOGGER_DEBUG);
+ $s = str_replace($image, 'data:image/jpg;base64,' . base64_encode($r[0]['data']), $s);
+ logger('fix_private_photos: replaced: ' . $s, LOGGER_DATA);
+ }
}
}
- logger('fix_private_photos: replaced: ' . $s, LOGGER_DATA);
}
}
return($s);
}
+function has_permissions($obj) {
+ if(($obj['allow_cid'] != '') || ($obj['allow_gid'] != '') || ($obj['deny_cid'] != '') || ($obj['deny_gid'] != ''))
+ return true;
+ return false;
+}
+
+function compare_permissions($obj1,$obj2) {
+ // first part is easy. Check that these are exactly the same.
+ if(($obj1['allow_cid'] == $obj2['allow_cid'])
+ && ($obj1['allow_gid'] == $obj2['allow_gid'])
+ && ($obj1['deny_cid'] == $obj2['deny_cid'])
+ && ($obj1['deny_gid'] == $obj2['deny_gid']))
+ return true;
+
+ // This is harder. Parse all the permissions and compare the resulting set.
+
+ $recipients1 = enumerate_permissions($obj1);
+ $recipients2 = enumerate_permissions($obj2);
+ sort($recipients1);
+ sort($recipients2);
+ if($recipients1 == $recipients2)
+ return true;
+ return false;
+}
+
+// returns an array of contact-ids that are allowed to see this object
+
+function enumerate_permissions($obj) {
+ require_once('include/group.php');
+ $allow_people = expand_acl($obj['allow_cid']);
+ $allow_groups = expand_groups(expand_acl($obj['allow_gid']));
+ $deny_people = expand_acl($obj['deny_cid']);
+ $deny_groups = expand_groups(expand_acl($obj['deny_gid']));
+ $recipients = array_unique(array_merge($allow_people,$allow_groups));
+ $deny = array_unique(array_merge($deny_people,$deny_groups));
+ $recipients = array_diff($recipients,$deny);
+ return $recipients;
+}
function item_getfeedtags($item) {
$ret = array();
@@ -2992,13 +3080,20 @@ function item_getfeedattach($item) {
function item_expire($uid,$days) {
- if((! $uid) || (! $days))
+ if((! $uid) || ($days < 1))
return;
+ // $expire_network_only = save your own wall posts
+ // and just expire conversations started by others
+
+ $expire_network_only = get_pconfig($uid,'expire','network_only');
+ $sql_extra = ((intval($expire_network_only)) ? " AND wall = 0 " : "");
+
$r = q("SELECT * FROM `item`
WHERE `uid` = %d
AND `created` < UTC_TIMESTAMP() - INTERVAL %d DAY
AND `id` = `parent`
+ $sql_extra
AND `deleted` = 0",
intval($uid),
intval($days)
@@ -3183,7 +3278,42 @@ function drop_item($id,$interactive = true) {
q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1",
intval($r[0]['id'])
);
- }
+ }
+
+ // Add a relayable_retraction signature for Diaspora. Note that we can't add a target_author_signature
+ // if the comment was deleted by a remote user. That should be ok, because if a remote user is deleting
+ // the comment, that means we're the home of the post, and Diaspora will only
+ // check the parent_author_signature of retractions that it doesn't have to relay further
+ //
+ // I don't think this function gets called for an "unlike," but I'll check anyway
+ $signed_text = $item['guid'] . ';' . ( ($item['verb'] === ACTIVITY_LIKE) ? 'Like' : 'Comment');
+
+ if(local_user() == $item['uid']) {
+
+ $handle = $a->user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+ $authorsig = base64_encode(rsa_sign($signed_text,$a->user['prvkey'],'sha256'));
+ }
+ else {
+ $r = q("SELECT `nick`, `url` FROM `contact` WHERE `id` = '%d' LIMIT 1",
+ $item['contact-id']
+ );
+ if(count($r)) {
+ // The below handle only works for NETWORK_DFRN. I think that's ok, because this function
+ // only handles DFRN deletes
+ $handle_baseurl_start = strpos($r['url'],'://') + 3;
+ $handle_baseurl_length = strpos($r['url'],'/profile') - $handle_baseurl_start;
+ $handle = $r['nick'] . '@' . substr($r['url'], $handle_baseurl_start, $handle_baseurl_length);
+ $authorsig = '';
+ }
+ }
+
+ if(isset($handle))
+ q("insert into sign (`retract_iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+ intval($item['id']),
+ dbesc($signed_text),
+ dbesc($authorsig),
+ dbesc($handle)
+ );
}
$drop_id = intval($item['id']);
diff --git a/include/nav.php b/include/nav.php
index 2c9c643a9..909ba9b54 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -117,7 +117,7 @@ function nav(&$a) {
/* only show friend requests for normal pages. Other page types have automatic friendship. */
- if($_SESSION['page_flags'] == PAGE_NORMAL) {
+ if($_SESSION['page_flags'] == PAGE_NORMAL || $_SESSION['page_flags'] == PAGE_PRVGROUP) {
$nav['introductions'] = array('notifications/intros', t('Introductions'), "", t('Friend Requests'));
$nav['notifications'] = array('notifications', t('Notifications'), "", t('Notifications'));
$nav['notifications']['all']=array('notifications/system', t('See all notifications'), "", "");
diff --git a/include/network.php b/include/network.php
index 27a45ec40..eeb2460d1 100644
--- a/include/network.php
+++ b/include/network.php
@@ -876,3 +876,167 @@ function fix_contact_ssl_policy(&$contact,$new_policy) {
}
}
+
+
+/**
+ * xml2array() will convert the given XML text to an array in the XML structure.
+ * Link: http://www.bin-co.com/php/scripts/xml2array/
+ * Portions significantly re-written by mike@macgirvin.com for Friendica (namespaces, lowercase tags, get_attribute default changed, more...)
+ * Arguments : $contents - The XML text
+ * $namespaces - true or false include namespace information in the returned array as array elements.
+ * $get_attributes - 1 or 0. If this is 1 the function will get the attributes as well as the tag values - this results in a different array structure in the return value.
+ * $priority - Can be 'tag' or 'attribute'. This will change the way the resulting array sturcture. For 'tag', the tags are given more importance.
+ * Return: The parsed XML in an array form. Use print_r() to see the resulting array structure.
+ * Examples: $array = xml2array(file_get_contents('feed.xml'));
+ * $array = xml2array(file_get_contents('feed.xml', true, 1, 'attribute'));
+ */
+
+function xml2array($contents, $namespaces = true, $get_attributes=1, $priority = 'attribute') {
+ if(!$contents) return array();
+
+ if(!function_exists('xml_parser_create')) {
+ logger('xml2array: parser function missing');
+ return array();
+ }
+
+
+ libxml_use_internal_errors(true);
+ libxml_clear_errors();
+
+ if($namespaces)
+ $parser = @xml_parser_create_ns("UTF-8",':');
+ else
+ $parser = @xml_parser_create();
+
+ if(! $parser) {
+ logger('xml2array: xml_parser_create: no resource');
+ return array();
+ }
+
+ xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
+ // http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
+ xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
+ xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
+ @xml_parse_into_struct($parser, trim($contents), $xml_values);
+ @xml_parser_free($parser);
+
+ if(! $xml_values) {
+ logger('xml2array: libxml: parse error: ' . $contents, LOGGER_DATA);
+ foreach(libxml_get_errors() as $err)
+ logger('libxml: parse: ' . $err->code . " at " . $err->line . ":" . $err->column . " : " . $err->message, LOGGER_DATA);
+ libxml_clear_errors();
+ return;
+ }
+
+ //Initializations
+ $xml_array = array();
+ $parents = array();
+ $opened_tags = array();
+ $arr = array();
+
+ $current = &$xml_array; // Reference
+
+ // Go through the tags.
+ $repeated_tag_index = array(); // Multiple tags with same name will be turned into an array
+ foreach($xml_values as $data) {
+ unset($attributes,$value); // Remove existing values, or there will be trouble
+
+ // This command will extract these variables into the foreach scope
+ // tag(string), type(string), level(int), attributes(array).
+ extract($data); // We could use the array by itself, but this cooler.
+
+ $result = array();
+ $attributes_data = array();
+
+ if(isset($value)) {
+ if($priority == 'tag') $result = $value;
+ else $result['value'] = $value; // Put the value in a assoc array if we are in the 'Attribute' mode
+ }
+
+ //Set the attributes too.
+ if(isset($attributes) and $get_attributes) {
+ foreach($attributes as $attr => $val) {
+ if($priority == 'tag') $attributes_data[$attr] = $val;
+ else $result['@attributes'][$attr] = $val; // Set all the attributes in a array called 'attr'
+ }
+ }
+
+ // See tag status and do the needed.
+ if($namespaces && strpos($tag,':')) {
+ $namespc = substr($tag,0,strrpos($tag,':'));
+ $tag = strtolower(substr($tag,strlen($namespc)+1));
+ $result['@namespace'] = $namespc;
+ }
+ $tag = strtolower($tag);
+
+ if($type == "open") { // The starting of the tag '<tag>'
+ $parent[$level-1] = &$current;
+ if(!is_array($current) or (!in_array($tag, array_keys($current)))) { // Insert New tag
+ $current[$tag] = $result;
+ if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
+ $repeated_tag_index[$tag.'_'.$level] = 1;
+
+ $current = &$current[$tag];
+
+ } else { // There was another element with the same tag name
+
+ if(isset($current[$tag][0])) { // If there is a 0th element it is already an array
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
+ $repeated_tag_index[$tag.'_'.$level]++;
+ } else { // This section will make the value an array if multiple tags with the same name appear together
+ $current[$tag] = array($current[$tag],$result); // This will combine the existing item and the new item together to make an array
+ $repeated_tag_index[$tag.'_'.$level] = 2;
+
+ if(isset($current[$tag.'_attr'])) { // The attribute of the last(0th) tag must be moved as well
+ $current[$tag]['0_attr'] = $current[$tag.'_attr'];
+ unset($current[$tag.'_attr']);
+ }
+
+ }
+ $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
+ $current = &$current[$tag][$last_item_index];
+ }
+
+ } elseif($type == "complete") { // Tags that ends in 1 line '<tag />'
+ //See if the key is already taken.
+ if(!isset($current[$tag])) { //New Key
+ $current[$tag] = $result;
+ $repeated_tag_index[$tag.'_'.$level] = 1;
+ if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;
+
+ } else { // If taken, put all things inside a list(array)
+ if(isset($current[$tag][0]) and is_array($current[$tag])) { // If it is already an array...
+
+ // ...push the new element into that array.
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
+
+ if($priority == 'tag' and $get_attributes and $attributes_data) {
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
+ }
+ $repeated_tag_index[$tag.'_'.$level]++;
+
+ } else { // If it is not an array...
+ $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
+ $repeated_tag_index[$tag.'_'.$level] = 1;
+ if($priority == 'tag' and $get_attributes) {
+ if(isset($current[$tag.'_attr'])) { // The attribute of the last(0th) tag must be moved as well
+
+ $current[$tag]['0_attr'] = $current[$tag.'_attr'];
+ unset($current[$tag.'_attr']);
+ }
+
+ if($attributes_data) {
+ $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
+ }
+ }
+ $repeated_tag_index[$tag.'_'.$level]++; // 0 and 1 indexes are already taken
+ }
+ }
+
+ } elseif($type == 'close') { // End of tag '</tag>'
+ $current = &$parent[$level-1];
+ }
+ }
+
+ return($xml_array);
+}
diff --git a/include/notifier.php b/include/notifier.php
index 6ce281372..f0a1940d4 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -125,6 +125,7 @@ function notifier_run($argv, $argc){
$uid = $r[0]['uid'];
$updated = $r[0]['edited'];
+ // The following seems superfluous. We've already checked for "if (! intval($r[0]['parent']))" a few lines up
if(! $parent_id)
return;
@@ -220,7 +221,7 @@ function notifier_run($argv, $argc){
}
- if(($cmd === 'uplink') && (intval($parent['forum_mode'])) && (! $top_level)) {
+ if(($cmd === 'uplink') && (intval($parent['forum_mode']) == 1) && (! $top_level)) {
$relay_to_owner = true;
}
@@ -265,10 +266,10 @@ function notifier_run($argv, $argc){
$deny_people = expand_acl($parent['deny_cid']);
$deny_groups = expand_groups(expand_acl($parent['deny_gid']));
- // if our parent is a forum, uplink to the origional author causing
- // a delivery fork
+ // if our parent is a public forum (forum_mode == 1), uplink to the origional author causing
+ // a delivery fork. private groups (forum_mode == 2) do not uplink
- if(intval($parent['forum_mode']) && (! $top_level) && ($cmd !== 'uplink')) {
+ if((intval($parent['forum_mode']) == 1) && (! $top_level) && ($cmd !== 'uplink')) {
proc_run('php','include/notifier','uplink',$item_id);
}
@@ -345,7 +346,7 @@ function notifier_run($argv, $argc){
if($mail) {
$public_message = false; // mail is not public
- $body = fix_private_photos($item['body'],$owner['uid']);
+ $body = fix_private_photos($item['body'],$owner['uid'],null,$message[0]['contact-id']);
$atom .= replace_macros($mail_template, array(
'$name' => xmlify($owner['name']),
@@ -478,17 +479,42 @@ function notifier_run($argv, $argc){
}
}
- foreach($r as $contact) {
+
+ // This controls the number of deliveries to execute with each separate delivery process.
+ // By default we'll perform one delivery per process. Assuming a hostile shared hosting
+ // provider, this provides the greatest chance of deliveries if processes start getting
+ // killed. We can also space them out with the delivery_interval to also help avoid them
+ // getting whacked.
+
+ // If $deliveries_per_process > 1, we will chain this number of multiple deliveries
+ // together into a single process. This will reduce the overall number of processes
+ // spawned for each delivery, but they will run longer.
+
+ $deliveries_per_process = intval(get_config('system','delivery_batch_count'));
+ if($deliveries_per_process <= 0)
+ $deliveries_per_process = 1;
+
+ $this_batch = array();
+
+ for($x = 0; $x < count($r); $x ++) {
+ $contact = $r[$x];
+
if($contact['self'])
continue;
// potentially more than one recipient. Start a new process and space them out a bit.
- // we will deliver single recipient types of message and email receipients here.
-
+ // we will deliver single recipient types of message and email recipients here.
+
if((! $mail) && (! $fsuggest) && (! $followup)) {
- proc_run('php','include/delivery.php',$cmd,$item_id,$contact['id']);
- if($interval)
- @time_sleep_until(microtime(true) + (float) $interval);
+
+ $this_batch[] = $contact['id'];
+
+ if(count($this_batch) == $deliveries_per_process) {
+ proc_run('php','include/delivery.php',$cmd,$item_id,$this_batch);
+ $this_batch = array();
+ if($interval)
+ @time_sleep_until(microtime(true) + (float) $interval);
+ }
continue;
}
@@ -571,7 +597,7 @@ function notifier_run($argv, $argc){
break;
case NETWORK_OSTATUS:
- // Do not send to otatus if we are not configured to send to public networks
+ // Do not send to ostatus if we are not configured to send to public networks
if($owner['prvnets'])
break;
if(get_config('system','ostatus_disabled') || get_config('system','dfrn_only'))
@@ -712,18 +738,19 @@ function notifier_run($argv, $argc){
// unsupported
break;
}
- elseif(($target_item['deleted']) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
- // diaspora delete,
+ elseif(($target_item['deleted']) && (($target_item['uri'] === $target_item['parent-uri']) || $followup)) {
+ // send both top-level retractions and relayable retractions for owner to relay
diaspora_send_retraction($target_item,$owner,$contact);
break;
}
elseif($followup) {
- // send comments, likes and retractions of likes to owner to relay
+ // send comments and likes to owner to relay
diaspora_send_followup($target_item,$owner,$contact);
break;
}
- elseif($target_item['parent'] != $target_item['id']) {
- // we are the relay - send comments, likes and unlikes to our conversants
+ elseif($target_item['uri'] !== $target_item['parent-uri']) {
+ // we are the relay - send comments, likes and relayable_retractions
+ // (of comments and likes) to our conversants
diaspora_send_relay($target_item,$owner,$contact);
break;
}
@@ -833,6 +860,13 @@ function notifier_run($argv, $argc){
}
+ // If the item was deleted, clean up the `sign` table
+ if($target_item['deleted']) {
+ $r = q("DELETE FROM sign where `retract_iid` = %d",
+ intval($target_item['id'])
+ );
+ }
+
logger('notifier: calling hooks', LOGGER_DEBUG);
if($normal_mode)
diff --git a/include/pgettext.php b/include/pgettext.php
index a079a4687..5a0eab0b0 100644
--- a/include/pgettext.php
+++ b/include/pgettext.php
@@ -15,10 +15,10 @@
*/
-if(! function_exists('get_language')) {
-function get_language() {
+if(! function_exists('get_browser_language')) {
+function get_browser_language() {
- if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
+ if (x($_SERVER,'HTTP_ACCEPT_LANGUAGE')) {
// break up string into pieces (languages and q factors)
preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i',
$_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
diff --git a/include/profile_advanced.php b/include/profile_advanced.php
index bb9850cd0..ffb45090b 100644
--- a/include/profile_advanced.php
+++ b/include/profile_advanced.php
@@ -25,8 +25,8 @@ function advanced_profile(&$a) {
$val = ((intval($a->profile['dob']))
? day_translate(datetime_convert('UTC','UTC',$a->profile['dob'] . ' 00:00 +00:00',$year_bd_format))
- : day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],6) . ' 00:00 +00:00',$short_bd_format)));
-
+ : day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],5) . ' 00:00 +00:00',$short_bd_format)));
+
$profile['birthday'] = array( t('Birthday:'), $val);
}
@@ -39,11 +39,16 @@ function advanced_profile(&$a) {
if($a->profile['with']) $profile['marital']['with'] = $a->profile['with'];
+ if(strlen($a->profile['howlong']) && $a->profile['howlong'] !== '0000-00-00 00:00:00') {
+ $profile['howlong'] = relative_date($a->profile['howlong'], t('for %1$d %2$s'));
+ }
if($a->profile['sexual']) $profile['sexual'] = array( t('Sexual Preference:'), $a->profile['sexual'] );
if($a->profile['homepage']) $profile['homepage'] = array( t('Homepage:'), linkify($a->profile['homepage']) );
+ if($a->profile['hometown']) $profile['hometown'] = array( t('Hometown:'), linkify($a->profile['hometown']) );
+
if($a->profile['pub_keywords']) $profile['pub_keywords'] = array( t('Tags:'), $a->profile['pub_keywords']);
if($a->profile['politic']) $profile['politic'] = array( t('Political Views:'), $a->profile['politic']);
diff --git a/include/profile_selectors.php b/include/profile_selectors.php
index 4700bb96f..8d29fd099 100644
--- a/include/profile_selectors.php
+++ b/include/profile_selectors.php
@@ -5,6 +5,8 @@ function gender_selector($current="",$suffix="") {
$o = '';
$select = array('', t('Male'), t('Female'), t('Currently Male'), t('Currently Female'), t('Mostly Male'), t('Mostly Female'), t('Transgender'), t('Intersex'), t('Transsexual'), t('Hermaphrodite'), t('Neuter'), t('Non-specific'), t('Other'), t('Undecided'));
+ call_hooks('gender_selector', $select);
+
$o .= "<select name=\"gender$suffix\" id=\"gender-select$suffix\" size=\"1\" >";
foreach($select as $selection) {
if($selection !== 'NOTRANSLATION') {
@@ -20,6 +22,9 @@ function sexpref_selector($current="",$suffix="") {
$o = '';
$select = array('', t('Males'), t('Females'), t('Gay'), t('Lesbian'), t('No Preference'), t('Bisexual'), t('Autosexual'), t('Abstinent'), t('Virgin'), t('Deviant'), t('Fetish'), t('Oodles'), t('Nonsexual'));
+
+ call_hooks('sexpref_selector', $select);
+
$o .= "<select name=\"sexual$suffix\" id=\"sexual-select$suffix\" size=\"1\" >";
foreach($select as $selection) {
if($selection !== 'NOTRANSLATION') {
@@ -36,6 +41,8 @@ function marital_selector($current="",$suffix="") {
$o = '';
$select = array('', t('Single'), t('Lonely'), t('Available'), t('Unavailable'), t('Has crush'), t('Infatuated'), t('Dating'), t('Unfaithful'), t('Sex Addict'), t('Friends'), t('Friends/Benefits'), t('Casual'), t('Engaged'), t('Married'), t('Imaginarily married'), t('Partners'), t('Cohabiting'), t('Common law'), t('Happy'), t('Not looking'), t('Swinger'), t('Betrayed'), t('Separated'), t('Unstable'), t('Divorced'), t('Imaginarily divorced'), t('Widowed'), t('Uncertain'), t('It\'s complicated'), t('Don\'t care'), t('Ask me') );
+ call_hooks('marital_selector', $select);
+
$o .= "<select name=\"marital\" id=\"marital-select\" size=\"1\" >";
foreach($select as $selection) {
if($selection !== 'NOTRANSLATION') {
diff --git a/include/security.php b/include/security.php
index a92400b5c..af201d2af 100644
--- a/include/security.php
+++ b/include/security.php
@@ -76,7 +76,7 @@ function authenticate_success($user_record, $login_initial = false, $interactive
header('X-Account-Management-Status: active; name="' . $a->user['username'] . '"; id="' . $a->user['nickname'] .'"');
if($login_initial) {
- $l = get_language();
+ $l = get_browser_language();
q("UPDATE `user` SET `login_date` = '%s', `language` = '%s' WHERE `uid` = %d LIMIT 1",
dbesc(datetime_convert()),
diff --git a/include/socgraph.php b/include/socgraph.php
index 592779089..eccb133cc 100644
--- a/include/socgraph.php
+++ b/include/socgraph.php
@@ -71,20 +71,24 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) {
$name = $entry->displayName;
- foreach($entry->urls as $url) {
- if($url->type == 'profile') {
- $profile_url = $url->value;
- continue;
- }
- if($url->type == 'webfinger') {
- $connect_url = str_replace('acct:' , '', $url->value);
- continue;
+ if(isset($entry->urls)) {
+ foreach($entry->urls as $url) {
+ if($url->type == 'profile') {
+ $profile_url = $url->value;
+ continue;
+ }
+ if($url->type == 'webfinger') {
+ $connect_url = str_replace('acct:' , '', $url->value);
+ continue;
+ }
}
- }
- foreach($entry->photos as $photo) {
- if($photo->type == 'profile') {
- $profile_photo = $photo->value;
- continue;
+ }
+ if(isset($entry->photos)) {
+ foreach($entry->photos as $photo) {
+ if($photo->type == 'profile') {
+ $profile_photo = $photo->value;
+ continue;
+ }
}
}
diff --git a/include/text.php b/include/text.php
index e3c683338..d4a4d5580 100644
--- a/include/text.php
+++ b/include/text.php
@@ -646,7 +646,7 @@ function search($s,$id='search-box',$url='/search',$save = false) {
$a = get_app();
$o = '<div id="' . $id . '">';
$o .= '<form action="' . $a->get_baseurl((stristr($url,'network')) ? true : false) . $url . '" method="get" >';
- $o .= '<input type="text" name="search" id="search-text" value="' . $s .'" />';
+ $o .= '<input type="text" name="search" id="search-text" placeholder="' . t('Search') . '" value="' . $s .'" />';
$o .= '<input type="submit" name="submit" id="search-submit" value="' . t('Search') . '" />';
if($save)
$o .= '<input type="submit" name="save" id="search-save" value="' . t('Save') . '" />';
@@ -742,6 +742,8 @@ function smilies($s, $sample = false) {
':homebrew',
':coffee',
':facepalm',
+ ':like',
+ ':dislike',
'~friendika',
'~friendica'
@@ -778,6 +780,8 @@ function smilies($s, $sample = false) {
'<img src="' . $a->get_baseurl() . '/images/beer_mug.gif" alt=":homebrew" />',
'<img src="' . $a->get_baseurl() . '/images/coffee.gif" alt=":coffee" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-facepalm.gif" alt=":facepalm" />',
+ '<img src="' . $a->get_baseurl() . '/images/like.gif" alt=":like" />',
+ '<img src="' . $a->get_baseurl() . '/images/dislike.gif" alt=":dislike" />',
'<a href="http://project.friendika.com">~friendika <img src="' . $a->get_baseurl() . '/images/friendika-16.png" alt="~friendika" /></a>',
'<a href="http://friendica.com">~friendica <img src="' . $a->get_baseurl() . '/images/friendica-16.png" alt="~friendica" /></a>'
);
@@ -887,6 +891,7 @@ function prepare_body($item,$attach = false) {
} else
$s = prepare_text($item['body']);
+
$prep_arr = array('item' => $item, 'html' => $s);
call_hooks('prepare_body', $prep_arr);
$s = $prep_arr['html'];
@@ -901,24 +906,30 @@ function prepare_body($item,$attach = false) {
foreach($arr as $r) {
$matches = false;
$icon = '';
- $cnt = preg_match('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches);
+ $cnt = preg_match_all('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches, PREG_SET_ORDER);
if($cnt) {
- $icontype = strtolower(substr($matches[3],0,strpos($matches[3],'/')));
- switch($icontype) {
- case 'video':
- case 'audio':
- case 'image':
- case 'text':
- $icon = '<div class="attachtype icon s22 type-' . $icontype . '"></div>';
- break;
- default:
- $icon = '<div class="attachtype icon s22 type-unkn"></div>';
- break;
+ foreach($matches as $mtch) {
+ $icontype = strtolower(substr($mtch[3],0,strpos($mtch[3],'/')));
+ switch($icontype) {
+ case 'video':
+ case 'audio':
+ case 'image':
+ case 'text':
+ $icon = '<div class="attachtype icon s22 type-' . $icontype . '"></div>';
+ break;
+ default:
+ $icon = '<div class="attachtype icon s22 type-unkn"></div>';
+ break;
+ }
+ $title = ((strlen(trim($mtch[4]))) ? escape_tags(trim($mtch[4])) : escape_tags($mtch[1]));
+ $title .= ' ' . $mtch[2] . ' ' . t('bytes');
+ if((local_user() == $item['uid']) && $item['contact-id'] != $a->contact['id'])
+ $the_url = $a->get_baseurl() . '/redir/' . $item['contact-id'] . '?f=1&url=' . $mtch[1];
+ else
+ $the_url = $mtch[1];
+
+ $s .= '<a href="' . strip_tags($the_url) . '" title="' . $title . '" class="attachlink" target="external-link" >' . $icon . '</a>';
}
- $title = ((strlen(trim($matches[4]))) ? escape_tags(trim($matches[4])) : escape_tags($matches[1]));
- $title .= ' ' . $matches[2] . ' ' . t('bytes');
-
- $s .= '<a href="' . strip_tags($matches[1]) . '" title="' . $title . '" class="attachlink" target="external-link" >' . $icon . '</a>';
}
}
$s .= '<div class="clear"></div></div>';
diff --git a/include/user.php b/include/user.php
new file mode 100644
index 000000000..af43a2b52
--- /dev/null
+++ b/include/user.php
@@ -0,0 +1,327 @@
+<?php
+
+require_once('include/config.php');
+require_once('include/network.php');
+require_once('include/plugin.php');
+require_once('include/text.php');
+require_once('include/pgettext.php');
+require_once('include/datetime.php');
+
+function create_user($arr) {
+
+ // Required: { username, nickname, email } or { openid_url }
+
+ $a = get_app();
+ $result = array('success' => false, 'user' => null, 'password' => '', 'message' => '');
+
+ $using_invites = get_config('system','invitation_only');
+ $num_invites = get_config('system','number_invites');
+
+
+ $invite_id = ((x($arr,'invite_id')) ? notags(trim($arr['invite_id'])) : '');
+ $username = ((x($arr,'username')) ? notags(trim($arr['username'])) : '');
+ $nickname = ((x($arr,'nickname')) ? notags(trim($arr['nickname'])) : '');
+ $email = ((x($arr,'email')) ? notags(trim($arr['email'])) : '');
+ $openid_url = ((x($arr,'openid_url')) ? notags(trim($arr['openid_url'])) : '');
+ $photo = ((x($arr,'photo')) ? notags(trim($arr['photo'])) : '');
+ $password = ((x($arr,'password')) ? trim($arr['password']) : '');
+ $blocked = ((x($arr,'blocked')) ? intval($arr['blocked']) : 0);
+ $verified = ((x($arr,'verified')) ? intval($arr['verified']) : 0);
+
+ $publish = ((x($arr,'profile_publish_reg') && intval($arr['profile_publish_reg'])) ? 1 : 0);
+ $netpublish = ((strlen(get_config('system','directory_submit_url'))) ? $publish : 0);
+
+ $tmp_str = $openid_url;
+
+ if($using_invites) {
+ if(! $invite_id) {
+ $result['message'] .= t('An invitation is required.') . EOL;
+ return $result;
+ }
+ $r = q("select * from register where `hash` = '%s' limit 1", dbesc($invite_id));
+ if(! results($r)) {
+ $result['message'] .= t('Invitation could not be verified.') . EOL;
+ return $result;
+ }
+ }
+
+ if((! x($username)) || (! x($email)) || (! x($nickname))) {
+ if($openid_url) {
+ if(! validate_url($tmp_str)) {
+ $result['message'] .= t('Invalid OpenID url') . EOL;
+ return $result;
+ }
+ $_SESSION['register'] = 1;
+ $_SESSION['openid'] = $openid_url;
+ require_once('library/openid.php');
+ $openid = new LightOpenID;
+ $openid->identity = $openid_url;
+ $openid->returnUrl = $a->get_baseurl() . '/openid';
+ $openid->required = array('namePerson/friendly', 'contact/email', 'namePerson');
+ $openid->optional = array('namePerson/first','media/image/aspect11','media/image/default');
+ goaway($openid->authUrl());
+ // NOTREACHED
+ }
+
+ notice( t('Please enter the required information.') . EOL );
+ return;
+ }
+
+ if(! validate_url($tmp_str))
+ $openid_url = '';
+
+
+ $err = '';
+
+ // collapse multiple spaces in name
+ $username = preg_replace('/ +/',' ',$username);
+
+ if(mb_strlen($username) > 48)
+ $result['message'] .= t('Please use a shorter name.') . EOL;
+ if(mb_strlen($username) < 3)
+ $result['message'] .= t('Name too short.') . EOL;
+
+ // I don't really like having this rule, but it cuts down
+ // on the number of auto-registrations by Russian spammers
+
+ // Using preg_match was completely unreliable, due to mixed UTF-8 regex support
+ // $no_utf = get_config('system','no_utf');
+ // $pat = (($no_utf) ? '/^[a-zA-Z]* [a-zA-Z]*$/' : '/^\p{L}* \p{L}*$/u' );
+
+ // So now we are just looking for a space in the full name.
+
+ $loose_reg = get_config('system','no_regfullname');
+ if(! $loose_reg) {
+ $username = mb_convert_case($username,MB_CASE_TITLE,'UTF-8');
+ if(! strpos($username,' '))
+ $result['message'] .= t("That doesn't appear to be your full \x28First Last\x29 name.") . EOL;
+ }
+
+
+ if(! allowed_email($email))
+ $result['message'] .= t('Your email domain is not among those allowed on this site.') . EOL;
+
+ if((! valid_email($email)) || (! validate_email($email)))
+ $result['message'] .= t('Not a valid email address.') . EOL;
+
+ // Disallow somebody creating an account using openid that uses the admin email address,
+ // since openid bypasses email verification. We'll allow it if there is not yet an admin account.
+
+ if((x($a->config,'admin_email')) && (strcasecmp($email,$a->config['admin_email']) == 0) && strlen($openid_url)) {
+ $r = q("SELECT * FROM `user` WHERE `email` = '%s' LIMIT 1",
+ dbesc($email)
+ );
+ if(count($r))
+ $result['message'] .= t('Cannot use that email.') . EOL;
+ }
+
+ $nickname = $arr['nickname'] = strtolower($nickname);
+
+ if(! preg_match("/^[a-z][a-z0-9\-\_]*$/",$nickname))
+ $result['message'] .= t('Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.') . EOL;
+ $r = q("SELECT `uid` FROM `user`
+ WHERE `nickname` = '%s' LIMIT 1",
+ dbesc($nickname)
+ );
+ if(count($r))
+ $result['message'] .= t('Nickname is already registered. Please choose another.') . EOL;
+
+ // Check deleted accounts that had this nickname. Doesn't matter to us,
+ // but could be a security issue for federated platforms.
+
+ $r = q("SELECT * FROM `userd`
+ WHERE `username` = '%s' LIMIT 1",
+ dbesc($nickname)
+ );
+ if(count($r))
+ $result['message'] .= t('Nickname was once registered here and may not be re-used. Please choose another.') . EOL;
+
+ if(strlen($result['message'])) {
+ return $result;
+ }
+
+ $new_password = ((strlen($password)) ? $password : autoname(6) . mt_rand(100,9999));
+ $new_password_encoded = hash('whirlpool',$new_password);
+
+ $result['password'] = $new_password;
+
+ require_once('include/crypto.php');
+
+ $keys = new_keypair(1024);
+
+ if($keys === false) {
+ $result['message'] .= t('SERIOUS ERROR: Generation of security keys failed.') . EOL;
+ return $result;
+ }
+
+ $prvkey = $keys['prvkey'];
+ $pubkey = $keys['pubkey'];
+
+ /**
+ *
+ * Create another keypair for signing/verifying
+ * salmon protocol messages. We have to use a slightly
+ * less robust key because this won't be using openssl
+ * but the phpseclib. Since it is PHP interpreted code
+ * it is not nearly as efficient, and the larger keys
+ * will take several minutes each to process.
+ *
+ */
+
+ $sres = new_keypair(512);
+ $sprvkey = $sres['prvkey'];
+ $spubkey = $sres['pubkey'];
+
+ $r = q("INSERT INTO `user` ( `guid`, `username`, `password`, `email`, `openid`, `nickname`,
+ `pubkey`, `prvkey`, `spubkey`, `sprvkey`, `register_date`, `verified`, `blocked`, `timezone` )
+ VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, 'UTC' )",
+ dbesc(generate_user_guid()),
+ dbesc($username),
+ dbesc($new_password_encoded),
+ dbesc($email),
+ dbesc($openid_url),
+ dbesc($nickname),
+ dbesc($pubkey),
+ dbesc($prvkey),
+ dbesc($spubkey),
+ dbesc($sprvkey),
+ dbesc(datetime_convert()),
+ intval($verified),
+ intval($blocked)
+ );
+
+ if($r) {
+ $r = q("SELECT * FROM `user`
+ WHERE `username` = '%s' AND `password` = '%s' LIMIT 1",
+ dbesc($username),
+ dbesc($new_password_encoded)
+ );
+ if($r !== false && count($r)) {
+ $u = $r[0];
+ $newuid = intval($r[0]['uid']);
+ }
+ }
+ else {
+ $result['message'] .= t('An error occurred during registration. Please try again.') . EOL ;
+ return $result;
+ }
+
+ /**
+ * if somebody clicked submit twice very quickly, they could end up with two accounts
+ * due to race condition. Remove this one.
+ */
+
+ $r = q("SELECT `uid` FROM `user`
+ WHERE `nickname` = '%s' ",
+ dbesc($nickname)
+ );
+ if((count($r) > 1) && $newuid) {
+ $result['message'] .= t('Nickname is already registered. Please choose another.') . EOL;
+ q("DELETE FROM `user` WHERE `uid` = %d LIMIT 1",
+ intval($newuid)
+ );
+ return $result;
+ }
+
+ if(x($newuid) !== false) {
+ $r = q("INSERT INTO `profile` ( `uid`, `profile-name`, `is-default`, `name`, `photo`, `thumb`, `publish`, `net-publish` )
+ VALUES ( %d, '%s', %d, '%s', '%s', '%s', %d, %d ) ",
+ intval($newuid),
+ t('default'),
+ 1,
+ dbesc($username),
+ dbesc($a->get_baseurl() . "/photo/profile/{$newuid}.jpg"),
+ dbesc($a->get_baseurl() . "/photo/avatar/{$newuid}.jpg"),
+ intval($publish),
+ intval($netpublish)
+
+ );
+ if($r === false) {
+ $result['message'] .= t('An error occurred creating your default profile. Please try again.') . EOL;
+ // Start fresh next time.
+ $r = q("DELETE FROM `user` WHERE `uid` = %d",
+ intval($newuid));
+ return $result;
+ }
+ $r = q("INSERT INTO `contact` ( `uid`, `created`, `self`, `name`, `nick`, `photo`, `thumb`, `micro`, `blocked`, `pending`, `url`, `nurl`,
+ `request`, `notify`, `poll`, `confirm`, `poco`, `name-date`, `uri-date`, `avatar-date`, `closeness` )
+ VALUES ( %d, '%s', 1, '%s', '%s', '%s', '%s', '%s', 0, 0, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 0 ) ",
+ intval($newuid),
+ datetime_convert(),
+ dbesc($username),
+ dbesc($nickname),
+ dbesc($a->get_baseurl() . "/photo/profile/{$newuid}.jpg"),
+ dbesc($a->get_baseurl() . "/photo/avatar/{$newuid}.jpg"),
+ dbesc($a->get_baseurl() . "/photo/micro/{$newuid}.jpg"),
+ dbesc($a->get_baseurl() . "/profile/$nickname"),
+ dbesc(normalise_link($a->get_baseurl() . "/profile/$nickname")),
+ dbesc($a->get_baseurl() . "/dfrn_request/$nickname"),
+ dbesc($a->get_baseurl() . "/dfrn_notify/$nickname"),
+ dbesc($a->get_baseurl() . "/dfrn_poll/$nickname"),
+ dbesc($a->get_baseurl() . "/dfrn_confirm/$nickname"),
+ dbesc($a->get_baseurl() . "/poco/$nickname"),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert())
+ );
+
+ // Create a group with no members. This allows somebody to use it
+ // right away as a default group for new contacts.
+
+ require_once('include/group.php');
+ group_add($newuid, t('Friends'));
+
+ }
+
+ // if we have no OpenID photo try to look up an avatar
+ if(! strlen($photo))
+ $photo = avatar_img($email);
+
+ // unless there is no avatar-plugin loaded
+ if(strlen($photo)) {
+ require_once('include/Photo.php');
+ $photo_failure = false;
+
+ $filename = basename($photo);
+ $img_str = fetch_url($photo,true);
+ $img = new Photo($img_str);
+ if($img->is_valid()) {
+
+ $img->scaleImageSquare(175);
+
+ $hash = photo_new_resource();
+
+ $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 4 );
+
+ if($r === false)
+ $photo_failure = true;
+
+ $img->scaleImage(80);
+
+ $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 5 );
+
+ if($r === false)
+ $photo_failure = true;
+
+ $img->scaleImage(48);
+
+ $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 6 );
+
+ if($r === false)
+ $photo_failure = true;
+
+ if(! $photo_failure) {
+ q("UPDATE `photo` SET `profile` = 1 WHERE `resource-id` = '%s' ",
+ dbesc($hash)
+ );
+ }
+ }
+ }
+
+ call_hooks('register_account', $newuid);
+
+ $result['success'] = true;
+ $result['user'] = $u;
+ return $result;
+
+} \ No newline at end of file
diff --git a/index.php b/index.php
index a409f47b4..94329eedc 100644
--- a/index.php
+++ b/index.php
@@ -27,7 +27,7 @@ $install = ((file_exists('.htconfig.php') && filesize('.htconfig.php')) ? false
@include(".htconfig.php");
-$lang = get_language();
+$lang = get_browser_language();
load_translation_table($lang);
diff --git a/js/country.js b/js/country.js
index 1c7505580..c3add477f 100644
--- a/js/country.js
+++ b/js/country.js
@@ -9,7 +9,7 @@
//
var gLngMaxStateLength=0;
var gLngMaxCountryLength=0;
-var gLngNumberCountries=252;
+var gLngNumberCountries=253;
var gLngNumberStates=0;
var gLngSelectedCountry=0;
var gLngSelectedState=0;
@@ -17,7 +17,7 @@ var gArCountryInfo;
var gArStateInfo;
// NOTE:
// Some editors may exhibit problems viewing 2803 characters...
-var sCountryString = "|Afghanistan|Albania|Algeria|American Samoa|Angola|Anguilla|Antartica|Antigua and Barbuda|Argentina|Armenia|Aruba|Ashmore and Cartier Island|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|British Virgin Islands|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Clipperton Island|Cocos (Keeling) Islands|Colombia|Comoros|Congo, Democratic Republic of the|Congo, Republic of the|Cook Islands|Costa Rica|Cote d'Ivoire|Croatia|Cuba|Cyprus|Czech Republic|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Europa Island|Falkland Islands (Islas Malvinas)|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|French Southern and Antarctic Lands|Gabon|Gambia, The|Gaza Strip|Georgia|Germany|Ghana|Gibraltar|Glorioso Islands|Greece|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Heard Island and McDonald Islands|Holy See (Vatican City)|Honduras|Hong Kong|Howland Island|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Ireland, Northern|Israel|Italy|Jamaica|Jan Mayen|Japan|Jarvis Island|Jersey|Johnston Atoll|Jordan|Juan de Nova Island|Kazakhstan|Kenya|Kiribati|Korea, North|Korea, South|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|Macau|Macedonia, Former Yugoslav Republic of|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Man, Isle of|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia, Federated States of|Midway Islands|Moldova|Monaco|Mongolia|Montserrat|Morocco|Mozambique|Namibia|Nauru|Nepal|Netherlands|Netherlands Antilles|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Pitcaim Islands|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romainia|Russia|Rwanda|Saint Helena|Saint Kitts and Nevis|Saint Lucia|Saint Pierre and Miquelon|Saint Vincent and the Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Scotland|Senegal|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and South Sandwich Islands|Spain|Spratly Islands|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|Tobago|Toga|Tokelau|Tonga|Trinidad|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|Uruguay|USA|Uzbekistan|Vanuatu|Venezuela|Vietnam|Virgin Islands|Wales|Wallis and Futuna|West Bank|Western Sahara|Yemen|Yugoslavia|Zambia|Zimbabwe";
+var sCountryString = "|Afghanistan|Albania|Algeria|American Samoa|Angola|Anguilla|Antartica|Antigua and Barbuda|Argentina|Armenia|Aruba|Ashmore and Cartier Island|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|British Virgin Islands|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Clipperton Island|Cocos (Keeling) Islands|Colombia|Comoros|Congo, Democratic Republic of the|Congo, Republic of the|Cook Islands|Costa Rica|Cote d'Ivoire|Croatia|Cuba|Cyprus|Czech Republic|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Europa Island|Falkland Islands (Islas Malvinas)|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|French Southern and Antarctic Lands|Gabon|Gambia, The|Gaza Strip|Georgia|Germany|Ghana|Gibraltar|Glorioso Islands|Greece|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Heard Island and McDonald Islands|Holy See (Vatican City)|Honduras|Hong Kong|Howland Island|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Ireland, Northern|Israel|Italy|Jamaica|Jan Mayen|Japan|Jarvis Island|Jersey|Johnston Atoll|Jordan|Juan de Nova Island|Kazakhstan|Kenya|Kiribati|Korea, North|Korea, South|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|Macau|Macedonia, Former Yugoslav Republic of|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Man, Isle of|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia, Federated States of|Midway Islands|Moldova|Monaco|Mongolia|Montserrat|Morocco|Mozambique|Namibia|Nauru|Nepal|Netherlands|Netherlands Antilles|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Pitcaim Islands|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romainia|Russia|Rwanda|Saint Helena|Saint Kitts and Nevis|Saint Lucia|Saint Pierre and Miquelon|Saint Vincent and the Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Scotland|Senegal|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and South Sandwich Islands|Spain|Spratly Islands|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|Tobago|Toga|Tokelau|Tonga|Trinidad|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|Uruguay|USA|Uzbekistan|Vanuatu|Venezuela|Vietnam|Virgin Islands|Wales|Wallis and Futuna|West Bank|Western Sahara|Yemen|Yugoslavia|Zambia|Zimbabwe|Friendicaland"
var aStates = new Array();
aStates[0]="";
@@ -275,7 +275,7 @@ aStates[249]="|'Adan|'Ataq|Abyan|Al Bayda'|Al Hudaydah|Al Jawf|Al Mahrah|Al Mahw
aStates[250]="|Kosovo|Montenegro|Serbia|Vojvodina";
aStates[251]="|Central|Copperbelt|Eastern|Luapula|Lusaka|North-Western|Northern|Southern|Western";
aStates[252]="|Bulawayo|Harare|ManicalandMashonaland Central|Mashonaland East|Mashonaland West|Masvingo|Matabeleland North|Matabeleland South|Midlands";
-
+aStates[253]="|Self Hosted|Private Server|Architects Of Sleep|DFRN|Distributed Friend Network|Free-Beer.ch|Foojbook|Free-Haven|Friendica.eu|Friendika.me.4.it|Friendika - I Ask Questions|Frndc.com|Hipatia|Hungerfreunde|Kaluguran Community|Kak Ste?|Karl.Markx.pm|Loozah Social Club|MyFriendica.net|MyFriendNetwork|Oi!|OpenMindSpace|Recolutionari.es|Sysfu Social Club|theshi.re|Tumpambae|Uzmiac|Other";
/*
* gArCountryInfo
* (0) Country name
diff --git a/js/main.js b/js/main.js
index 6a2632441..885e042aa 100644
--- a/js/main.js
+++ b/js/main.js
@@ -117,6 +117,9 @@
/* nav update event */
$('nav').bind('nav-update', function(e,data){;
+ var invalid = $(data).find('invalid').text();
+ if(invalid == 1) { window.location.href=window.location.href }
+
var net = $(data).find('net').text();
if(net == 0) { net = ''; $('#net-update').removeClass('show') } else { $('#net-update').addClass('show') }
$('#net-update').html(net);
@@ -211,7 +214,8 @@
function NavUpdate() {
if(! stopped) {
- $.get("ping",function(data) {
+ var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : '');
+ $.get(pingCmd,function(data) {
$(data).find('result').each(function() {
// send nav-update event
$('nav').trigger('nav-update', this);
diff --git a/library/langdet/Text/LanguageDetect.php b/library/langdet/Text/LanguageDetect.php
new file mode 100644
index 000000000..7cebbe607
--- /dev/null
+++ b/library/langdet/Text/LanguageDetect.php
@@ -0,0 +1,1708 @@
+<?php
+
+/**
+ * Detects the language of a given piece of text.
+ *
+ * Attempts to detect the language of a sample of text by correlating ranked
+ * 3-gram frequencies to a table of 3-gram frequencies of known languages.
+ *
+ * Implements a version of a technique originally proposed by Cavnar & Trenkle
+ * (1994): "N-Gram-Based Text Categorization"
+ *
+ * PHP version 5
+ *
+ * @category Text
+ * @package Text_LanguageDetect
+ * @author Nicholas Pisarro <infinityminusnine+pear@gmail.com>
+ * @copyright 2005-2006 Nicholas Pisarro
+ * @license http://www.debian.org/misc/bsd.license BSD
+ * @version SVN: $Id: LanguageDetect.php 322353 2012-01-16 08:41:43Z cweiske $
+ * @link http://pear.php.net/package/Text_LanguageDetect/
+ * @link http://langdetect.blogspot.com/
+ */
+
+require_once 'Text/LanguageDetect/Exception.php';
+require_once 'Text/LanguageDetect/Parser.php';
+require_once 'Text/LanguageDetect/ISO639.php';
+
+/**
+ * Language detection class
+ *
+ * Requires the langauge model database (lang.dat) that should have
+ * accompanied this class definition in order to be instantiated.
+ *
+ * Example usage:
+ *
+ * <code>
+ * require_once 'Text/LanguageDetect.php';
+ *
+ * $l = new Text_LanguageDetect;
+ *
+ * $stdin = fopen('php://stdin', 'r');
+ *
+ * echo "Supported languages:\n";
+ *
+ * try {
+ * $langs = $l->getLanguages();
+ * } catch (Text_LanguageDetect_Exception $e) {
+ * die($e->getMessage());
+ * }
+ *
+ * sort($langs);
+ * echo join(', ', $langs);
+ *
+ * while ($line = fgets($stdin)) {
+ * print_r($l->detect($line, 4));
+ * }
+ * </code>
+ *
+ * @category Text
+ * @package Text_LanguageDetect
+ * @author Nicholas Pisarro <infinityminusnine+pear@gmail.com>
+ * @copyright 2005 Nicholas Pisarro
+ * @license http://www.debian.org/misc/bsd.license BSD
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Text_LanguageDetect/
+ * @todo allow users to generate their own language models
+ */
+class Text_LanguageDetect
+{
+ /**
+ * The filename that stores the trigram data for the detector
+ *
+ * If this value starts with a slash (/) or a dot (.) the value of
+ * $this->_data_dir will be ignored
+ *
+ * @var string
+ * @access private
+ */
+ var $_db_filename = 'lang.dat';
+
+ /**
+ * The filename that stores the unicode block definitions
+ *
+ * If this value starts with a slash (/) or a dot (.) the value of
+ * $this->_data_dir will be ignored
+ *
+ * @var string
+ * @access private
+ */
+ var $_unicode_db_filename = 'unicode_blocks.dat';
+
+ /**
+ * The data directory
+ *
+ * Should be set by PEAR installer
+ *
+ * @var string
+ * @access private
+ */
+ var $_data_dir = '@data_dir@';
+
+ /**
+ * The trigram data for comparison
+ *
+ * Will be loaded on start from $this->_db_filename
+ *
+ * @var array
+ * @access private
+ */
+ var $_lang_db = array();
+
+ /**
+ * stores the map of the trigram data to unicode characters
+ *
+ * @access private
+ * @var array
+ */
+ var $_unicode_map;
+
+ /**
+ * The size of the trigram data arrays
+ *
+ * @var int
+ * @access private
+ */
+ var $_threshold = 300;
+
+ /**
+ * the maximum possible score.
+ *
+ * needed for score normalization. Different depending on the
+ * perl compatibility setting
+ *
+ * @access private
+ * @var int
+ * @see setPerlCompatible()
+ */
+ var $_max_score = 0;
+
+ /**
+ * Whether or not to simulate perl's Language::Guess exactly
+ *
+ * @access private
+ * @var bool
+ * @see setPerlCompatible()
+ */
+ var $_perl_compatible = false;
+
+ /**
+ * Whether to use the unicode block detection to speed up processing
+ *
+ * @access private
+ * @var bool
+ */
+ var $_use_unicode_narrowing = true;
+
+ /**
+ * stores the result of the clustering operation
+ *
+ * @access private
+ * @var array
+ * @see clusterLanguages()
+ */
+ var $_clusters;
+
+ /**
+ * Which type of "language names" are accepted and returned:
+ *
+ * 0 - language name ("english")
+ * 2 - 2-letter ISO 639-1 code ("en")
+ * 3 - 3-letter ISO 639-2 code ("eng")
+ */
+ var $_name_mode = 0;
+
+ /**
+ * Constructor
+ *
+ * Will attempt to load the language database. If it fails, you will get
+ * an exception.
+ */
+ function __construct()
+ {
+ $data = $this->_readdb($this->_db_filename);
+ $this->_checkTrigram($data['trigram']);
+ $this->_lang_db = $data['trigram'];
+
+ if (isset($data['trigram-unicodemap'])) {
+ $this->_unicode_map = $data['trigram-unicodemap'];
+ }
+
+ // Not yet implemented:
+ if (isset($data['trigram-clusters'])) {
+ $this->_clusters = $data['trigram-clusters'];
+ }
+ }
+
+ /**
+ * Returns the path to the location of the database
+ *
+ * @param string $fname File name to load
+ *
+ * @return string expected path to the language model database
+ * @access private
+ */
+ function _get_data_loc($fname)
+ {
+ if ($fname{0} == '/' || $fname{0} == '.') {
+ // if filename starts with a slash, assume it's an absolute pathname
+ // and skip whatever is in $this->_data_dir
+ return $fname;
+
+ } elseif ($this->_data_dir != '@' . 'data_dir' . '@') {
+ // if the data dir was set by the PEAR installer, use that
+ return $this->_data_dir . '/Text_LanguageDetect/' . $fname;
+
+ } else {
+ // assume this was just unpacked somewhere
+ // try the local working directory if otherwise
+ return __DIR__ . '/../data/' . $fname;
+ }
+ }
+
+ /**
+ * Loads the language trigram database from filename
+ *
+ * Trigram datbase should be a serialize()'d array
+ *
+ * @param string $fname the filename where the data is stored
+ *
+ * @return array the language model data
+ * @throws Text_LanguageDetect_Exception
+ * @access private
+ */
+ function _readdb($fname)
+ {
+ // finds the correct data dir
+ $fname = $this->_get_data_loc($fname);
+
+ // input check
+ if (!file_exists($fname)) {
+ throw new Text_LanguageDetect_Exception(
+ 'Language database does not exist: ' . $fname,
+ Text_LanguageDetect_Exception::DB_NOT_FOUND
+ );
+ } elseif (!is_readable($fname)) {
+ throw new Text_LanguageDetect_Exception(
+ 'Language database is not readable: ' . $fname,
+ Text_LanguageDetect_Exception::DB_NOT_READABLE
+ );
+ }
+
+ return unserialize(file_get_contents($fname));
+ }
+
+
+ /**
+ * Checks if this object is ready to detect languages
+ *
+ * @param array $trigram Trigram data from database
+ *
+ * @return void
+ * @access private
+ */
+ function _checkTrigram($trigram)
+ {
+ if (!is_array($trigram)) {
+ if (ini_get('magic_quotes_runtime')) {
+ throw new Text_LanguageDetect_Exception(
+ 'Error loading database. Try turning magic_quotes_runtime off.',
+ Text_LanguageDetect_Exception::MAGIC_QUOTES
+ );
+ }
+ throw new Text_LanguageDetect_Exception(
+ 'Language database is not an array.',
+ Text_LanguageDetect_Exception::DB_NOT_ARRAY
+ );
+ } elseif (empty($trigram)) {
+ throw new Text_LanguageDetect_Exception(
+ 'Language database has no elements.',
+ Text_LanguageDetect_Exception::DB_EMPTY
+ );
+ }
+ }
+
+ /**
+ * Omits languages
+ *
+ * Pass this function the name of or an array of names of
+ * languages that you don't want considered
+ *
+ * If you're only expecting a limited set of languages, this can greatly
+ * speed up processing
+ *
+ * @param mixed $omit_list language name or array of names to omit
+ * @param bool $include_only if true will include (rather than
+ * exclude) only those in the list
+ *
+ * @return int number of languages successfully deleted
+ * @throws Text_LanguageDetect_Exception
+ */
+ public function omitLanguages($omit_list, $include_only = false)
+ {
+ $deleted = 0;
+
+ $omit_list = $this->_convertFromNameMode($omit_list);
+
+ if (!$include_only) {
+ // deleting the given languages
+ if (!is_array($omit_list)) {
+ $omit_list = strtolower($omit_list); // case desensitize
+ if (isset($this->_lang_db[$omit_list])) {
+ unset($this->_lang_db[$omit_list]);
+ $deleted++;
+ }
+ } else {
+ foreach ($omit_list as $omit_lang) {
+ if (isset($this->_lang_db[$omit_lang])) {
+ unset($this->_lang_db[$omit_lang]);
+ $deleted++;
+ }
+ }
+ }
+
+ } else {
+ // deleting all except the given languages
+ if (!is_array($omit_list)) {
+ $omit_list = array($omit_list);
+ }
+
+ // case desensitize
+ foreach ($omit_list as $key => $omit_lang) {
+ $omit_list[$key] = strtolower($omit_lang);
+ }
+
+ foreach (array_keys($this->_lang_db) as $lang) {
+ if (!in_array($lang, $omit_list)) {
+ unset($this->_lang_db[$lang]);
+ $deleted++;
+ }
+ }
+ }
+
+ // reset the cluster cache if the number of languages changes
+ // this will then have to be recalculated
+ if (isset($this->_clusters) && $deleted > 0) {
+ $this->_clusters = null;
+ }
+
+ return $deleted;
+ }
+
+
+ /**
+ * Returns the number of languages that this object can detect
+ *
+ * @access public
+ * @return int the number of languages
+ * @throws Text_LanguageDetect_Exception
+ */
+ function getLanguageCount()
+ {
+ return count($this->_lang_db);
+ }
+
+ /**
+ * Checks if the language with the given name exists in the database
+ *
+ * @param mixed $lang Language name or array of language names
+ *
+ * @return bool true if language model exists
+ */
+ public function languageExists($lang)
+ {
+ $lang = $this->_convertFromNameMode($lang);
+
+ if (is_string($lang)) {
+ return isset($this->_lang_db[strtolower($lang)]);
+
+ } elseif (is_array($lang)) {
+ foreach ($lang as $test_lang) {
+ if (!isset($this->_lang_db[strtolower($test_lang)])) {
+ return false;
+ }
+ }
+ return true;
+
+ } else {
+ throw new Text_LanguageDetect_Exception(
+ 'Unsupported parameter type passed to languageExists()',
+ Text_LanguageDetect_Exception::PARAM_TYPE
+ );
+ }
+ }
+
+ /**
+ * Returns the list of detectable languages
+ *
+ * @access public
+ * @return array the names of the languages known to this object<<<<<<<
+ * @throws Text_LanguageDetect_Exception
+ */
+ function getLanguages()
+ {
+ return $this->_convertToNameMode(
+ array_keys($this->_lang_db)
+ );
+ }
+
+ /**
+ * Make this object behave like Language::Guess
+ *
+ * @param bool $setting false to turn off perl compatibility
+ *
+ * @return void
+ */
+ public function setPerlCompatible($setting = true)
+ {
+ if (is_bool($setting)) { // input check
+ $this->_perl_compatible = $setting;
+
+ if ($setting == true) {
+ $this->_max_score = $this->_threshold;
+ } else {
+ $this->_max_score = 0;
+ }
+ }
+
+ }
+
+ /**
+ * Sets the way how language names are accepted and returned.
+ *
+ * @param integer $name_mode One of the following modes:
+ * 0 - language name ("english")
+ * 2 - 2-letter ISO 639-1 code ("en")
+ * 3 - 3-letter ISO 639-2 code ("eng")
+ *
+ * @return void
+ */
+ function setNameMode($name_mode)
+ {
+ $this->_name_mode = $name_mode;
+ }
+
+ /**
+ * Whether to use unicode block ranges in detection
+ *
+ * Should speed up most detections if turned on (detault is on). In some
+ * circumstances it may be slower, such as for large text samples (> 10K)
+ * in languages that use latin scripts. In other cases it should speed up
+ * detection noticeably.
+ *
+ * @param bool $setting false to turn off
+ *
+ * @return void
+ */
+ public function useUnicodeBlocks($setting = true)
+ {
+ if (is_bool($setting)) {
+ $this->_use_unicode_narrowing = $setting;
+ }
+ }
+
+ /**
+ * Converts a piece of text into trigrams
+ *
+ * @param string $text text to convert
+ *
+ * @return array array of trigram frequencies
+ * @access private
+ * @deprecated Superceded by the Text_LanguageDetect_Parser class
+ */
+ function _trigram($text)
+ {
+ $s = new Text_LanguageDetect_Parser($text);
+ $s->prepareTrigram();
+ $s->prepareUnicode(false);
+ $s->setPadStart(!$this->_perl_compatible);
+ $s->analyze();
+ return $s->getTrigramFreqs();
+ }
+
+ /**
+ * Converts a set of trigrams from frequencies to ranks
+ *
+ * Thresholds (cuts off) the list at $this->_threshold
+ *
+ * @param array $arr array of trigram
+ *
+ * @return array ranks of trigrams
+ * @access protected
+ */
+ function _arr_rank($arr)
+ {
+
+ // sorts alphabetically first as a standard way of breaking rank ties
+ $this->_bub_sort($arr);
+
+ // below might also work, but seemed to introduce errors in testing
+ //ksort($arr);
+ //asort($arr);
+
+ $rank = array();
+
+ $i = 0;
+ foreach ($arr as $key => $value) {
+ $rank[$key] = $i++;
+
+ // cut off at a standard threshold
+ if ($i >= $this->_threshold) {
+ break;
+ }
+ }
+
+ return $rank;
+ }
+
+ /**
+ * Sorts an array by value breaking ties alphabetically
+ *
+ * @param array &$arr the array to sort
+ *
+ * @return void
+ * @access private
+ */
+ function _bub_sort(&$arr)
+ {
+ // should do the same as this perl statement:
+ // sort { $trigrams{$b} == $trigrams{$a}
+ // ? $a cmp $b : $trigrams{$b} <=> $trigrams{$a} }
+
+ // needs to sort by both key and value at once
+ // using the key to break ties for the value
+
+ // converts array into an array of arrays of each key and value
+ // may be a better way of doing this
+ $combined = array();
+
+ foreach ($arr as $key => $value) {
+ $combined[] = array($key, $value);
+ }
+
+ usort($combined, array($this, '_sort_func'));
+
+ $replacement = array();
+ foreach ($combined as $key => $value) {
+ list($new_key, $new_value) = $value;
+ $replacement[$new_key] = $new_value;
+ }
+
+ $arr = $replacement;
+ }
+
+ /**
+ * Sort function used by bubble sort
+ *
+ * Callback function for usort().
+ *
+ * @param array $a first param passed by usort()
+ * @param array $b second param passed by usort()
+ *
+ * @return int 1 if $a is greater, -1 if not
+ * @see _bub_sort()
+ * @access private
+ */
+ function _sort_func($a, $b)
+ {
+ // each is actually a key/value pair, so that it can compare using both
+ list($a_key, $a_value) = $a;
+ list($b_key, $b_value) = $b;
+
+ if ($a_value == $b_value) {
+ // if the values are the same, break ties using the key
+ return strcmp($a_key, $b_key);
+
+ } else {
+ // if not, just sort normally
+ if ($a_value > $b_value) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+
+ // 0 should not be possible because keys must be unique
+ }
+
+ /**
+ * Calculates a linear rank-order distance statistic between two sets of
+ * ranked trigrams
+ *
+ * Sums the differences in rank for each trigram. If the trigram does not
+ * appear in both, consider it a difference of $this->_threshold.
+ *
+ * This distance measure was proposed by Cavnar & Trenkle (1994). Despite
+ * its simplicity it has been shown to be highly accurate for language
+ * identification tasks.
+ *
+ * @param array $arr1 the reference set of trigram ranks
+ * @param array $arr2 the target set of trigram ranks
+ *
+ * @return int the sum of the differences between the ranks of
+ * the two trigram sets
+ * @access private
+ */
+ function _distance($arr1, $arr2)
+ {
+ $sumdist = 0;
+
+ foreach ($arr2 as $key => $value) {
+ if (isset($arr1[$key])) {
+ $distance = abs($value - $arr1[$key]);
+ } else {
+ // $this->_threshold sets the maximum possible distance value
+ // for any one pair of trigrams
+ $distance = $this->_threshold;
+ }
+ $sumdist += $distance;
+ }
+
+ return $sumdist;
+
+ // todo: there are other distance statistics to try, e.g. relative
+ // entropy, but they're probably more costly to compute
+ }
+
+ /**
+ * Normalizes the score returned by _distance()
+ *
+ * Different if perl compatible or not
+ *
+ * @param int $score the score from _distance()
+ * @param int $base_count the number of trigrams being considered
+ *
+ * @return float the normalized score
+ * @see _distance()
+ * @access private
+ */
+ function _normalize_score($score, $base_count = null)
+ {
+ if ($base_count === null) {
+ $base_count = $this->_threshold;
+ }
+
+ if (!$this->_perl_compatible) {
+ return 1 - ($score / $base_count / $this->_threshold);
+ } else {
+ return floor($score / $base_count);
+ }
+ }
+
+
+ /**
+ * Detects the closeness of a sample of text to the known languages
+ *
+ * Calculates the statistical difference between the text and
+ * the trigrams for each language, normalizes the score then
+ * returns results for all languages in sorted order
+ *
+ * If perl compatible, the score is 300-0, 0 being most similar.
+ * Otherwise, it's 0-1 with 1 being most similar.
+ *
+ * The $sample text should be at least a few sentences in length;
+ * should be ascii-7 or utf8 encoded, if another and the mbstring extension
+ * is present it will try to detect and convert. However, experience has
+ * shown that mb_detect_encoding() *does not work very well* with at least
+ * some types of encoding.
+ *
+ * @param string $sample a sample of text to compare.
+ * @param int $limit if specified, return an array of the most likely
+ * $limit languages and their scores.
+ *
+ * @return mixed sorted array of language scores, blank array if no
+ * useable text was found
+ * @see _distance()
+ * @throws Text_LanguageDetect_Exception
+ */
+ public function detect($sample, $limit = 0)
+ {
+ // input check
+ if (!Text_LanguageDetect_Parser::validateString($sample)) {
+ return array();
+ }
+
+ // check char encoding
+ // (only if mbstring extension is compiled and PHP > 4.0.6)
+ if (function_exists('mb_detect_encoding')
+ && function_exists('mb_convert_encoding')
+ ) {
+ // mb_detect_encoding isn't very reliable, to say the least
+ // detection should still work with a sufficient sample
+ // of ascii characters
+ $encoding = mb_detect_encoding($sample);
+
+ // mb_detect_encoding() will return FALSE if detection fails
+ // don't attempt conversion if that's the case
+ if ($encoding != 'ASCII' && $encoding != 'UTF-8'
+ && $encoding !== false
+ ) {
+ // verify the encoding exists in mb_list_encodings
+ if (in_array($encoding, mb_list_encodings())) {
+ $sample = mb_convert_encoding($sample, 'UTF-8', $encoding);
+ }
+ }
+ }
+
+ $sample_obj = new Text_LanguageDetect_Parser($sample);
+ $sample_obj->prepareTrigram();
+ if ($this->_use_unicode_narrowing) {
+ $sample_obj->prepareUnicode();
+ }
+ $sample_obj->setPadStart(!$this->_perl_compatible);
+ $sample_obj->analyze();
+
+ $trigram_freqs =& $sample_obj->getTrigramRanks();
+ $trigram_count = count($trigram_freqs);
+
+ if ($trigram_count == 0) {
+ return array();
+ }
+
+ $scores = array();
+
+ // use unicode block detection to narrow down the possibilities
+ if ($this->_use_unicode_narrowing) {
+ $blocks =& $sample_obj->getUnicodeBlocks();
+
+ if (is_array($blocks)) {
+ $present_blocks = array_keys($blocks);
+ } else {
+ throw new Text_LanguageDetect_Exception(
+ 'Error during block detection',
+ Text_LanguageDetect_Exception::BLOCK_DETECTION
+ );
+ }
+
+ $possible_langs = array();
+
+ foreach ($present_blocks as $blockname) {
+ if (isset($this->_unicode_map[$blockname])) {
+
+ $possible_langs = array_merge(
+ $possible_langs,
+ array_keys($this->_unicode_map[$blockname])
+ );
+
+ // todo: faster way to do this?
+ }
+ }
+
+ // could also try an intersect operation rather than a union
+ // in other words, choose languages whose trigrams contain
+ // ALL of the unicode blocks found in this sample
+ // would improve speed but would be completely thrown off by an
+ // unexpected character, like an umlaut appearing in english text
+
+ $possible_langs = array_intersect(
+ array_keys($this->_lang_db),
+ array_unique($possible_langs)
+ );
+
+ // needs to intersect it with the keys of _lang_db in case
+ // languages have been omitted
+
+ } else {
+ // or just try 'em all
+ $possible_langs = array_keys($this->_lang_db);
+ }
+
+
+ foreach ($possible_langs as $lang) {
+ $scores[$lang] = $this->_normalize_score(
+ $this->_distance($this->_lang_db[$lang], $trigram_freqs),
+ $trigram_count
+ );
+ }
+
+ unset($sample_obj);
+
+ if ($this->_perl_compatible) {
+ asort($scores);
+ } else {
+ arsort($scores);
+ }
+
+ // todo: drop languages with a score of $this->_max_score?
+
+ // limit the number of returned scores
+ if ($limit && is_numeric($limit)) {
+ $limited_scores = array();
+
+ $i = 0;
+ foreach ($scores as $key => $value) {
+ if ($i++ >= $limit) {
+ break;
+ }
+
+ $limited_scores[$key] = $value;
+ }
+
+ return $this->_convertToNameMode($limited_scores, true);
+ } else {
+ return $this->_convertToNameMode($scores, true);
+ }
+ }
+
+ /**
+ * Returns only the most similar language to the text sample
+ *
+ * Calls $this->detect() and returns only the top result
+ *
+ * @param string $sample text to detect the language of
+ *
+ * @return string the name of the most likely language
+ * or null if no language is similar
+ * @see detect()
+ * @throws Text_LanguageDetect_Exception
+ */
+ public function detectSimple($sample)
+ {
+ $scores = $this->detect($sample, 1);
+
+ // if top language has the maximum possible score,
+ // then the top score will have been picked at random
+ if (!is_array($scores) || empty($scores)
+ || current($scores) == $this->_max_score
+ ) {
+ return null;
+ } else {
+ return key($scores);
+ }
+ }
+
+ /**
+ * Returns an array containing the most similar language and a confidence
+ * rating
+ *
+ * Confidence is a simple measure calculated from the similarity score
+ * minus the similarity score from the next most similar language
+ * divided by the highest possible score. Languages that have closely
+ * related cousins (e.g. Norwegian and Danish) should generally have lower
+ * confidence scores.
+ *
+ * The similarity score answers the question "How likely is the text the
+ * returned language regardless of the other languages considered?" The
+ * confidence score is one way of answering the question "how likely is the
+ * text the detected language relative to the rest of the language model
+ * set?"
+ *
+ * To see how similar languages are a priori, see languageSimilarity()
+ *
+ * @param string $sample text for which language will be detected
+ *
+ * @return array most similar language, score and confidence rating
+ * or null if no language is similar
+ * @see detect()
+ * @throws Text_LanguageDetect_Exception
+ */
+ public function detectConfidence($sample)
+ {
+ $scores = $this->detect($sample, 2);
+
+ // if most similar language has the max score, it
+ // will have been picked at random
+ if (!is_array($scores) || empty($scores)
+ || current($scores) == $this->_max_score
+ ) {
+ return null;
+ }
+
+ $arr['language'] = key($scores);
+ $arr['similarity'] = current($scores);
+ if (next($scores) !== false) { // if false then no next element
+ // the goal is to return a higher value if the distance between
+ // the similarity of the first score and the second score is high
+
+ if ($this->_perl_compatible) {
+ $arr['confidence'] = (current($scores) - $arr['similarity'])
+ / $this->_max_score;
+
+ } else {
+ $arr['confidence'] = $arr['similarity'] - current($scores);
+
+ }
+
+ } else {
+ $arr['confidence'] = null;
+ }
+
+ return $arr;
+ }
+
+ /**
+ * Returns the distribution of unicode blocks in a given utf8 string
+ *
+ * For the block name of a single char, use unicodeBlockName()
+ *
+ * @param string $str input string. Must be ascii or utf8
+ * @param bool $skip_symbols if true, skip ascii digits, symbols and
+ * non-printing characters. Includes spaces,
+ * newlines and common punctutation characters.
+ *
+ * @return array
+ * @throws Text_LanguageDetect_Exception
+ */
+ public function detectUnicodeBlocks($str, $skip_symbols)
+ {
+ $skip_symbols = (bool)$skip_symbols;
+ $str = (string)$str;
+
+ $sample_obj = new Text_LanguageDetect_Parser($str);
+ $sample_obj->prepareUnicode();
+ $sample_obj->prepareTrigram(false);
+ $sample_obj->setUnicodeSkipSymbols($skip_symbols);
+ $sample_obj->analyze();
+ $blocks = $sample_obj->getUnicodeBlocks();
+ unset($sample_obj);
+ return $blocks;
+ }
+
+ /**
+ * Returns the block name for a given unicode value
+ *
+ * If passed a string, will assume it is being passed a UTF8-formatted
+ * character and will automatically convert. Otherwise it will assume it
+ * is being passed a numeric unicode value.
+ *
+ * Make sure input is of the correct type!
+ *
+ * @param mixed $unicode unicode value or utf8 char
+ *
+ * @return mixed the block name string or false if not found
+ * @throws Text_LanguageDetect_Exception
+ */
+ public function unicodeBlockName($unicode)
+ {
+ if (is_string($unicode)) {
+ // assume it is being passed a utf8 char, so convert it
+ if (self::utf8strlen($unicode) > 1) {
+ throw new Text_LanguageDetect_Exception(
+ 'Pass a single char only to this method',
+ Text_LanguageDetect_Exception::PARAM_TYPE
+ );
+ }
+ $unicode = $this->_utf8char2unicode($unicode);
+
+ } elseif (!is_int($unicode)) {
+ throw new Text_LanguageDetect_Exception(
+ 'Input must be of type string or int.',
+ Text_LanguageDetect_Exception::PARAM_TYPE
+ );
+ }
+
+ $blocks = $this->_read_unicode_block_db();
+
+ $result = $this->_unicode_block_name($unicode, $blocks);
+
+ if ($result == -1) {
+ return false;
+ } else {
+ return $result[2];
+ }
+ }
+
+ /**
+ * Searches the unicode block database
+ *
+ * Returns the block name for a given unicode value. unicodeBlockName() is
+ * the public interface for this function, which does input checks which
+ * this function omits for speed.
+ *
+ * @param int $unicode the unicode value
+ * @param array $blocks the block database
+ * @param int $block_count the number of defined blocks in the database
+ *
+ * @return mixed Block name, -1 if it failed
+ * @see unicodeBlockName()
+ * @access protected
+ */
+ function _unicode_block_name($unicode, $blocks, $block_count = -1)
+ {
+ // for a reference, see
+ // http://www.unicode.org/Public/UNIDATA/Blocks.txt
+
+ // assume that ascii characters are the most common
+ // so try it first for efficiency
+ if ($unicode <= $blocks[0][1]) {
+ return $blocks[0];
+ }
+
+ // the optional $block_count param is for efficiency
+ // so we this function doesn't have to run count() every time
+ if ($block_count != -1) {
+ $high = $block_count - 1;
+ } else {
+ $high = count($blocks) - 1;
+ }
+
+ $low = 1; // start with 1 because ascii was 0
+
+ // your average binary search algorithm
+ while ($low <= $high) {
+ $mid = floor(($low + $high) / 2);
+
+ if ($unicode < $blocks[$mid][0]) {
+ // if it's lower than the lower bound
+ $high = $mid - 1;
+
+ } elseif ($unicode > $blocks[$mid][1]) {
+ // if it's higher than the upper bound
+ $low = $mid + 1;
+
+ } else {
+ // found it
+ return $blocks[$mid];
+ }
+ }
+
+ // failed to find the block
+ return -1;
+
+ // todo: differentiate when it's out of range or when it falls
+ // into an unassigned range?
+ }
+
+ /**
+ * Brings up the unicode block database
+ *
+ * @return array the database of unicode block definitions
+ * @throws Text_LanguageDetect_Exception
+ * @access protected
+ */
+ function _read_unicode_block_db()
+ {
+ // since the unicode definitions are always going to be the same,
+ // might as well share the memory for the db with all other instances
+ // of this class
+ static $data;
+
+ if (!isset($data)) {
+ $data = $this->_readdb($this->_unicode_db_filename);
+ }
+
+ return $data;
+ }
+
+ /**
+ * Calculate the similarities between the language models
+ *
+ * Use this function to see how similar languages are to each other.
+ *
+ * If passed 2 language names, will return just those languages compared.
+ * If passed 1 language name, will return that language compared to
+ * all others.
+ * If passed none, will return an array of every language model compared
+ * to every other one.
+ *
+ * @param string $lang1 the name of the first language to be compared
+ * @param string $lang2 the name of the second language to be compared
+ *
+ * @return array scores of every language compared
+ * or the score of just the provided languages
+ * or null if one of the supplied languages does not exist
+ * @throws Text_LanguageDetect_Exception
+ */
+ public function languageSimilarity($lang1 = null, $lang2 = null)
+ {
+ $lang1 = $this->_convertFromNameMode($lang1);
+ $lang2 = $this->_convertFromNameMode($lang2);
+ if ($lang1 != null) {
+ $lang1 = strtolower($lang1);
+
+ // check if language model exists
+ if (!isset($this->_lang_db[$lang1])) {
+ return null;
+ }
+
+ if ($lang2 != null) {
+ if (!isset($this->_lang_db[$lang2])) {
+ // check if language model exists
+ return null;
+ }
+
+ $lang2 = strtolower($lang2);
+
+ // compare just these two languages
+ return $this->_normalize_score(
+ $this->_distance(
+ $this->_lang_db[$lang1],
+ $this->_lang_db[$lang2]
+ )
+ );
+
+ } else {
+ // compare just $lang1 to all languages
+ $return_arr = array();
+ foreach ($this->_lang_db as $key => $value) {
+ if ($key != $lang1) {
+ // don't compare a language to itself
+ $return_arr[$key] = $this->_normalize_score(
+ $this->_distance($this->_lang_db[$lang1], $value)
+ );
+ }
+ }
+ asort($return_arr);
+
+ return $return_arr;
+ }
+
+
+ } else {
+ // compare all languages to each other
+ $return_arr = array();
+ foreach (array_keys($this->_lang_db) as $lang1) {
+ foreach (array_keys($this->_lang_db) as $lang2) {
+ // skip comparing languages to themselves
+ if ($lang1 != $lang2) {
+
+ if (isset($return_arr[$lang2][$lang1])) {
+ // don't re-calculate what's already been done
+ $return_arr[$lang1][$lang2]
+ = $return_arr[$lang2][$lang1];
+
+ } else {
+ // calculate
+ $return_arr[$lang1][$lang2]
+ = $this->_normalize_score(
+ $this->_distance(
+ $this->_lang_db[$lang1],
+ $this->_lang_db[$lang2]
+ )
+ );
+
+ }
+ }
+ }
+ }
+ return $return_arr;
+ }
+ }
+
+ /**
+ * Cluster known languages according to languageSimilarity()
+ *
+ * WARNING: this method is EXPERIMENTAL. It is not recommended for common
+ * use, and it may disappear or its functionality may change in future
+ * releases without notice.
+ *
+ * Uses a nearest neighbor technique to generate the maximum possible
+ * number of dendograms from the similarity data.
+ *
+ * @access public
+ * @return array language cluster data
+ * @throws Text_LanguageDetect_Exception
+ * @see languageSimilarity()
+ * @deprecated this function will eventually be removed and placed into
+ * the model generation class
+ */
+ function clusterLanguages()
+ {
+ // todo: set the maximum number of clusters
+ // return cached result, if any
+ if (isset($this->_clusters)) {
+ return $this->_clusters;
+ }
+
+ $langs = array_keys($this->_lang_db);
+
+ $arr = $this->languageSimilarity();
+
+ sort($langs);
+
+ foreach ($langs as $lang) {
+ if (!isset($this->_lang_db[$lang])) {
+ throw new Text_LanguageDetect_Exception(
+ "missing $lang!",
+ Text_LanguageDetect_Exception::UNKNOWN_LANGUAGE
+ );
+ }
+ }
+
+ // http://www.psychstat.missouristate.edu/multibook/mlt04m.html
+ foreach ($langs as $old_key => $lang1) {
+ $langs[$lang1] = $lang1;
+ unset($langs[$old_key]);
+ }
+
+ $result_data = $really_map = array();
+
+ $i = 0;
+ while (count($langs) > 2 && $i++ < 200) {
+ $highest_score = -1;
+ $highest_key1 = '';
+ $highest_key2 = '';
+ foreach ($langs as $lang1) {
+ foreach ($langs as $lang2) {
+ if ($lang1 != $lang2
+ && $arr[$lang1][$lang2] > $highest_score
+ ) {
+ $highest_score = $arr[$lang1][$lang2];
+ $highest_key1 = $lang1;
+ $highest_key2 = $lang2;
+ }
+ }
+ }
+
+ if (!$highest_key1) {
+ // should not ever happen
+ throw new Text_LanguageDetect_Exception(
+ "no highest key? (step: $i)",
+ Text_LanguageDetect_Exception::NO_HIGHEST_KEY
+ );
+ }
+
+ if ($highest_score == 0) {
+ // languages are perfectly dissimilar
+ break;
+ }
+
+ // $highest_key1 and $highest_key2 are most similar
+ $sum1 = array_sum($arr[$highest_key1]);
+ $sum2 = array_sum($arr[$highest_key2]);
+
+ // use the score for the one that is most similar to the rest of
+ // the field as the score for the group
+ // todo: could try averaging or "centroid" method instead
+ // seems like that might make more sense
+ // actually nearest neighbor may be better for binary searching
+
+
+ // for "Complete Linkage"/"furthest neighbor"
+ // sign should be <
+ // for "Single Linkage"/"nearest neighbor" method
+ // should should be >
+ // results seem to be pretty much the same with either method
+
+ // figure out which to delete and which to replace
+ if ($sum1 > $sum2) {
+ $replaceme = $highest_key1;
+ $deleteme = $highest_key2;
+ } else {
+ $replaceme = $highest_key2;
+ $deleteme = $highest_key1;
+ }
+
+ $newkey = $replaceme . ':' . $deleteme;
+
+ // $replaceme is most similar to remaining languages
+ // replace $replaceme with '$newkey', deleting $deleteme
+
+ // keep a record of which fork is really which language
+ $really_lang = $replaceme;
+ while (isset($really_map[$really_lang])) {
+ $really_lang = $really_map[$really_lang];
+ }
+ $really_map[$newkey] = $really_lang;
+
+
+ // replace the best fitting key, delete the other
+ foreach ($arr as $key1 => $arr2) {
+ foreach ($arr2 as $key2 => $value2) {
+ if ($key2 == $replaceme) {
+ $arr[$key1][$newkey] = $arr[$key1][$key2];
+ unset($arr[$key1][$key2]);
+ // replacing $arr[$key1][$key2] with $arr[$key1][$newkey]
+ }
+
+ if ($key1 == $replaceme) {
+ $arr[$newkey][$key2] = $arr[$key1][$key2];
+ unset($arr[$key1][$key2]);
+ // replacing $arr[$key1][$key2] with $arr[$newkey][$key2]
+ }
+
+ if ($key1 == $deleteme || $key2 == $deleteme) {
+ // deleting $arr[$key1][$key2]
+ unset($arr[$key1][$key2]);
+ }
+ }
+ }
+
+
+ unset($langs[$highest_key1]);
+ unset($langs[$highest_key2]);
+ $langs[$newkey] = $newkey;
+
+
+ // some of these may be overkill
+ $result_data[$newkey] = array(
+ 'newkey' => $newkey,
+ 'count' => $i,
+ 'diff' => abs($sum1 - $sum2),
+ 'score' => $highest_score,
+ 'bestfit' => $replaceme,
+ 'otherfit' => $deleteme,
+ 'really' => $really_lang,
+ );
+ }
+
+ $return_val = array(
+ 'open_forks' => $langs,
+ // the top level of clusters
+ // clusters that are mutually exclusive
+ // or specified by a specific maximum
+
+ 'fork_data' => $result_data,
+ // data for each split
+
+ 'name_map' => $really_map,
+ // which cluster is really which language
+ // using the nearest neighbor technique, the cluster
+ // inherits all of the properties of its most-similar member
+ // this keeps track
+ );
+
+
+ // saves the result in the object
+ $this->_clusters = $return_val;
+
+ return $return_val;
+ }
+
+
+ /**
+ * Perform an intelligent detection based on clusterLanguages()
+ *
+ * WARNING: this method is EXPERIMENTAL. It is not recommended for common
+ * use, and it may disappear or its functionality may change in future
+ * releases without notice.
+ *
+ * This compares the sample text to top the top level of clusters. If the
+ * sample is similar to the cluster it will drop down and compare it to the
+ * languages in the cluster, and so on until it hits a leaf node.
+ *
+ * this should find the language in considerably fewer compares
+ * (the equivalent of a binary search), however clusterLanguages() is costly
+ * and the loss of accuracy from this technique is significant.
+ *
+ * This method may need to be 'fuzzier' in order to become more accurate.
+ *
+ * This function could be more useful if the universe of possible languages
+ * was very large, however in such cases some method of Bayesian inference
+ * might be more helpful.
+ *
+ * @param string $str input string
+ *
+ * @return array language scores (only those compared)
+ * @throws Text_LanguageDetect_Exception
+ * @see clusterLanguages()
+ */
+ public function clusteredSearch($str)
+ {
+ // input check
+ if (!Text_LanguageDetect_Parser::validateString($str)) {
+ return array();
+ }
+
+ // clusterLanguages() will return a cached result if possible
+ // so it's safe to call it every time
+ $result = $this->clusterLanguages();
+
+ $dendogram_start = $result['open_forks'];
+ $dendogram_data = $result['fork_data'];
+ $dendogram_alias = $result['name_map'];
+
+ $sample_obj = new Text_LanguageDetect_Parser($str);
+ $sample_obj->prepareTrigram();
+ $sample_obj->setPadStart(!$this->_perl_compatible);
+ $sample_obj->analyze();
+ $sample_result = $sample_obj->getTrigramRanks();
+ $sample_count = count($sample_result);
+
+ // input check
+ if ($sample_count == 0) {
+ return array();
+ }
+
+ $i = 0; // counts the number of steps
+
+ foreach ($dendogram_start as $lang) {
+ if (isset($dendogram_alias[$lang])) {
+ $lang_key = $dendogram_alias[$lang];
+ } else {
+ $lang_key = $lang;
+ }
+
+ $scores[$lang] = $this->_normalize_score(
+ $this->_distance($this->_lang_db[$lang_key], $sample_result),
+ $sample_count
+ );
+
+ $i++;
+ }
+
+ if ($this->_perl_compatible) {
+ asort($scores);
+ } else {
+ arsort($scores);
+ }
+
+ $top_score = current($scores);
+ $top_key = key($scores);
+
+ // of starting forks, $top_key is the most similar to the sample
+
+ $cur_key = $top_key;
+ while (isset($dendogram_data[$cur_key])) {
+ $lang1 = $dendogram_data[$cur_key]['bestfit'];
+ $lang2 = $dendogram_data[$cur_key]['otherfit'];
+ foreach (array($lang1, $lang2) as $lang) {
+ if (isset($dendogram_alias[$lang])) {
+ $lang_key = $dendogram_alias[$lang];
+ } else {
+ $lang_key = $lang;
+ }
+
+ $scores[$lang] = $this->_normalize_score(
+ $this->_distance($this->_lang_db[$lang_key], $sample_result),
+ $sample_count
+ );
+
+ //todo: does not need to do same comparison again
+ }
+
+ $i++;
+
+ if ($scores[$lang1] > $scores[$lang2]) {
+ $cur_key = $lang1;
+ $loser_key = $lang2;
+ } else {
+ $cur_key = $lang2;
+ $loser_key = $lang1;
+ }
+
+ $diff = $scores[$cur_key] - $scores[$loser_key];
+
+ // $cur_key ({$dendogram_alias[$cur_key]}) wins
+ // over $loser_key ({$dendogram_alias[$loser_key]})
+ // with a difference of $diff
+ }
+
+ // found result in $i compares
+
+ // rather than sorting the result, preserve it so that you can see
+ // which paths the algorithm decided to take along the tree
+
+ // but sometimes the last item is only the second highest
+ if (($this->_perl_compatible && (end($scores) > prev($scores)))
+ || (!$this->_perl_compatible && (end($scores) < prev($scores)))
+ ) {
+ $real_last_score = current($scores);
+ $real_last_key = key($scores);
+
+ // swaps the 2nd-to-last item for the last item
+ unset($scores[$real_last_key]);
+ $scores[$real_last_key] = $real_last_score;
+ }
+
+
+ if (!$this->_perl_compatible) {
+ $scores = array_reverse($scores, true);
+ // second param requires php > 4.0.3
+ }
+
+ return $scores;
+ }
+
+ /**
+ * ut8-safe strlen()
+ *
+ * Returns the numbers of characters (not bytes) in a utf8 string
+ *
+ * @param string $str string to get the length of
+ *
+ * @return int number of chars
+ */
+ public static function utf8strlen($str)
+ {
+ // utf8_decode() will convert unknown chars to '?', which is actually
+ // ideal for counting.
+
+ return strlen(utf8_decode($str));
+
+ // idea stolen from dokuwiki
+ }
+
+ /**
+ * Returns the unicode value of a utf8 char
+ *
+ * @param string $char a utf8 (possibly multi-byte) char
+ *
+ * @return int unicode value
+ * @access protected
+ * @link http://en.wikipedia.org/wiki/UTF-8
+ */
+ function _utf8char2unicode($char)
+ {
+ // strlen() here will actually get the binary length of a single char
+ switch (strlen($char)) {
+ case 1:
+ // normal ASCII-7 byte
+ // 0xxxxxxx --> 0xxxxxxx
+ return ord($char{0});
+
+ case 2:
+ // 2 byte unicode
+ // 110zzzzx 10xxxxxx --> 00000zzz zxxxxxxx
+ $z = (ord($char{0}) & 0x000001F) << 6;
+ $x = (ord($char{1}) & 0x0000003F);
+ return ($z | $x);
+
+ case 3:
+ // 3 byte unicode
+ // 1110zzzz 10zxxxxx 10xxxxxx --> zzzzzxxx xxxxxxxx
+ $z = (ord($char{0}) & 0x0000000F) << 12;
+ $x1 = (ord($char{1}) & 0x0000003F) << 6;
+ $x2 = (ord($char{2}) & 0x0000003F);
+ return ($z | $x1 | $x2);
+
+ case 4:
+ // 4 byte unicode
+ // 11110zzz 10zzxxxx 10xxxxxx 10xxxxxx -->
+ // 000zzzzz xxxxxxxx xxxxxxxx
+ $z1 = (ord($char{0}) & 0x00000007) << 18;
+ $z2 = (ord($char{1}) & 0x0000003F) << 12;
+ $x1 = (ord($char{2}) & 0x0000003F) << 6;
+ $x2 = (ord($char{3}) & 0x0000003F);
+ return ($z1 | $z2 | $x1 | $x2);
+ }
+ }
+
+ /**
+ * utf8-safe fast character iterator
+ *
+ * Will get the next character starting from $counter, which will then be
+ * incremented. If a multi-byte char the bytes will be concatenated and
+ * $counter will be incremeted by the number of bytes in the char.
+ *
+ * @param string $str the string being iterated over
+ * @param int &$counter the iterator, will increment by reference
+ * @param bool $special_convert whether to do special conversions
+ *
+ * @return char the next (possibly multi-byte) char from $counter
+ * @access private
+ */
+ static function _next_char($str, &$counter, $special_convert = false)
+ {
+ $char = $str{$counter++};
+ $ord = ord($char);
+
+ // for a description of the utf8 system see
+ // http://www.phpclasses.org/browse/file/5131.html
+
+ // normal ascii one byte char
+ if ($ord <= 127) {
+ // special conversions needed for this package
+ // (that only apply to regular ascii characters)
+ // lower case, and convert all non-alphanumeric characters
+ // other than "'" to space
+ if ($special_convert && $char != ' ' && $char != "'") {
+ if ($ord >= 65 && $ord <= 90) { // A-Z
+ $char = chr($ord + 32); // lower case
+ } elseif ($ord < 97 || $ord > 122) { // NOT a-z
+ $char = ' '; // convert to space
+ }
+ }
+
+ return $char;
+
+ } elseif ($ord >> 5 == 6) { // two-byte char
+ // multi-byte chars
+ $nextchar = $str{$counter++}; // get next byte
+
+ // lower-casing of non-ascii characters is still incomplete
+
+ if ($special_convert) {
+ // lower case latin accented characters
+ if ($ord == 195) {
+ $nextord = ord($nextchar);
+ $nextord_adj = $nextord + 64;
+ // for a reference, see
+ // http://www.ramsch.org/martin/uni/fmi-hp/iso8859-1.html
+
+ // &Agrave; - &THORN; but not &times;
+ if ($nextord_adj >= 192
+ && $nextord_adj <= 222
+ && $nextord_adj != 215
+ ) {
+ $nextchar = chr($nextord + 32);
+ }
+
+ } elseif ($ord == 208) {
+ // lower case cyrillic alphabet
+ $nextord = ord($nextchar);
+ // if A - Pe
+ if ($nextord >= 144 && $nextord <= 159) {
+ // lower case
+ $nextchar = chr($nextord + 32);
+
+ } elseif ($nextord >= 160 && $nextord <= 175) {
+ // if Er - Ya
+ // lower case
+ $char = chr(209); // == $ord++
+ $nextchar = chr($nextord - 32);
+ }
+ }
+ }
+
+ // tag on next byte
+ return $char . $nextchar;
+ } elseif ($ord >> 4 == 14) { // three-byte char
+
+ // tag on next 2 bytes
+ return $char . $str{$counter++} . $str{$counter++};
+
+ } elseif ($ord >> 3 == 30) { // four-byte char
+
+ // tag on next 3 bytes
+ return $char . $str{$counter++} . $str{$counter++} . $str{$counter++};
+
+ } else {
+ // error?
+ }
+ }
+
+ /**
+ * Converts an $language input parameter from the configured mode
+ * to the language name that is used internally.
+ *
+ * Works for strings and arrays.
+ *
+ * @param string|array $lang A language description ("english"/"en"/"eng")
+ * @param boolean $convertKey If $lang is an array, setting $key
+ * converts the keys to the language name.
+ *
+ * @return string|array Language name
+ */
+ function _convertFromNameMode($lang, $convertKey = false)
+ {
+ if ($this->_name_mode == 0) {
+ return $lang;
+ }
+
+ if ($this->_name_mode == 2) {
+ $method = 'code2ToName';
+ } else {
+ $method = 'code3ToName';
+ }
+
+ if (is_string($lang)) {
+ return (string)Text_LanguageDetect_ISO639::$method($lang);
+ }
+
+ $newlang = array();
+ foreach ($lang as $key => $val) {
+ if ($convertKey) {
+ $newkey = (string)Text_LanguageDetect_ISO639::$method($key);
+ $newlang[$newkey] = $val;
+ } else {
+ $newlang[$key] = (string)Text_LanguageDetect_ISO639::$method($val);
+ }
+ }
+ return $newlang;
+ }
+
+ /**
+ * Converts an $language output parameter from the language name that is
+ * used internally to the configured mode.
+ *
+ * Works for strings and arrays.
+ *
+ * @param string|array $lang A language description ("english"/"en"/"eng")
+ * @param boolean $convertKey If $lang is an array, setting $key
+ * converts the keys to the language name.
+ *
+ * @return string|array Language name
+ */
+ function _convertToNameMode($lang, $convertKey = false)
+ {
+ if ($this->_name_mode == 0) {
+ return $lang;
+ }
+
+ if ($this->_name_mode == 2) {
+ $method = 'nameToCode2';
+ } else {
+ $method = 'nameToCode3';
+ }
+
+ if (is_string($lang)) {
+ return Text_LanguageDetect_ISO639::$method($lang);
+ }
+
+ $newlang = array();
+ foreach ($lang as $key => $val) {
+ if ($convertKey) {
+ $newkey = Text_LanguageDetect_ISO639::$method($key);
+ $newlang[$newkey] = $val;
+ } else {
+ $newlang[$key] = Text_LanguageDetect_ISO639::$method($val);
+ }
+ }
+ return $newlang;
+ }
+}
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+?>
diff --git a/library/langdet/Text/LanguageDetect/Exception.php b/library/langdet/Text/LanguageDetect/Exception.php
new file mode 100644
index 000000000..196d994f5
--- /dev/null
+++ b/library/langdet/Text/LanguageDetect/Exception.php
@@ -0,0 +1,57 @@
+<?php
+class Text_LanguageDetect_Exception extends Exception
+{
+ /**
+ * Database file could not be found
+ */
+ const DB_NOT_FOUND = 10;
+
+ /**
+ * Database file found, but not readable
+ */
+ const DB_NOT_READABLE = 11;
+
+ /**
+ * Database file is empty
+ */
+ const DB_EMPTY = 12;
+
+ /**
+ * Database contents is not a PHP array
+ */
+ const DB_NOT_ARRAY = 13;
+
+ /**
+ * Magic quotes are activated
+ */
+ const MAGIC_QUOTES = 14;
+
+
+ /**
+ * Parameter of invalid type passed to method
+ */
+ const PARAM_TYPE = 20;
+
+ /**
+ * Character in parameter is invalid
+ */
+ const INVALID_CHAR = 21;
+
+
+ /**
+ * Language is not in the database
+ */
+ const UNKNOWN_LANGUAGE = 30;
+
+
+ /**
+ * Error during block detection
+ */
+ const BLOCK_DETECTION = 40;
+
+
+ /**
+ * Error while clustering languages
+ */
+ const NO_HIGHEST_KEY = 50;
+}
diff --git a/library/langdet/Text/LanguageDetect/ISO639.php b/library/langdet/Text/LanguageDetect/ISO639.php
new file mode 100644
index 000000000..c577a2e1a
--- /dev/null
+++ b/library/langdet/Text/LanguageDetect/ISO639.php
@@ -0,0 +1,341 @@
+<?php
+/**
+ * Part of Text_LanguageDetect
+ *
+ * PHP version 5
+ *
+ * @category Text
+ * @package Text_LanguageDetect
+ * @author Christian Weiske <cweiske@php.net>
+ * @copyright 2011 Christian Weiske <cweiske@php.net>
+ * @license http://www.debian.org/misc/bsd.license BSD
+ * @version SVN: $Id$
+ * @link http://pear.php.net/package/Text_LanguageDetect/
+ */
+
+/**
+ * Provides a mapping between the languages from lang.dat and the
+ * ISO 639-1 and ISO-639-2 codes.
+ *
+ * Note that this class contains only languages that exist in lang.dat.
+ *
+ * @category Text
+ * @package Text_LanguageDetect
+ * @author Christian Weiske <cweiske@php.net>
+ * @copyright 2011 Christian Weiske <cweiske@php.net>
+ * @license http://www.debian.org/misc/bsd.license BSD
+ * @link http://www.loc.gov/standards/iso639-2/php/code_list.php
+ */
+class Text_LanguageDetect_ISO639
+{
+ /**
+ * Maps all language names from the language database to the
+ * ISO 639-1 2-letter language code.
+ *
+ * NULL indicates that there is no 2-letter code.
+ *
+ * @var array
+ */
+ public static $nameToCode2 = array(
+ 'albanian' => 'sq',
+ 'arabic' => 'ar',
+ 'azeri' => 'az',
+ 'bengali' => 'bn',
+ 'bulgarian' => 'bg',
+ 'cebuano' => null,
+ 'croatian' => 'hr',
+ 'czech' => 'cs',
+ 'danish' => 'da',
+ 'dutch' => 'nl',
+ 'english' => 'en',
+ 'estonian' => 'et',
+ 'farsi' => 'fa',
+ 'finnish' => 'fi',
+ 'french' => 'fr',
+ 'german' => 'de',
+ 'hausa' => 'ha',
+ 'hawaiian' => null,
+ 'hindi' => 'hi',
+ 'hungarian' => 'hu',
+ 'icelandic' => 'is',
+ 'indonesian' => 'id',
+ 'italian' => 'it',
+ 'kazakh' => 'kk',
+ 'kyrgyz' => 'ky',
+ 'latin' => 'la',
+ 'latvian' => 'lv',
+ 'lithuanian' => 'lt',
+ 'macedonian' => 'mk',
+ 'mongolian' => 'mn',
+ 'nepali' => 'ne',
+ 'norwegian' => 'no',
+ 'pashto' => 'ps',
+ 'pidgin' => null,
+ 'polish' => 'pl',
+ 'portuguese' => 'pt',
+ 'romanian' => 'ro',
+ 'russian' => 'ru',
+ 'serbian' => 'sr',
+ 'slovak' => 'sk',
+ 'slovene' => 'sl',
+ 'somali' => 'so',
+ 'spanish' => 'es',
+ 'swahili' => 'sw',
+ 'swedish' => 'sv',
+ 'tagalog' => 'tl',
+ 'turkish' => 'tr',
+ 'ukrainian' => 'uk',
+ 'urdu' => 'ur',
+ 'uzbek' => 'uz',
+ 'vietnamese' => 'vi',
+ 'welsh' => 'cy',
+ );
+
+ /**
+ * Maps all language names from the language database to the
+ * ISO 639-2 3-letter language code.
+ *
+ * @var array
+ */
+ public static $nameToCode3 = array(
+ 'albanian' => 'sqi',
+ 'arabic' => 'ara',
+ 'azeri' => 'aze',
+ 'bengali' => 'ben',
+ 'bulgarian' => 'bul',
+ 'cebuano' => 'ceb',
+ 'croatian' => 'hrv',
+ 'czech' => 'ces',
+ 'danish' => 'dan',
+ 'dutch' => 'nld',
+ 'english' => 'eng',
+ 'estonian' => 'est',
+ 'farsi' => 'fas',
+ 'finnish' => 'fin',
+ 'french' => 'fra',
+ 'german' => 'deu',
+ 'hausa' => 'hau',
+ 'hawaiian' => 'haw',
+ 'hindi' => 'hin',
+ 'hungarian' => 'hun',
+ 'icelandic' => 'isl',
+ 'indonesian' => 'ind',
+ 'italian' => 'ita',
+ 'kazakh' => 'kaz',
+ 'kyrgyz' => 'kir',
+ 'latin' => 'lat',
+ 'latvian' => 'lav',
+ 'lithuanian' => 'lit',
+ 'macedonian' => 'mkd',
+ 'mongolian' => 'mon',
+ 'nepali' => 'nep',
+ 'norwegian' => 'nor',
+ 'pashto' => 'pus',
+ 'pidgin' => 'crp',
+ 'polish' => 'pol',
+ 'portuguese' => 'por',
+ 'romanian' => 'ron',
+ 'russian' => 'rus',
+ 'serbian' => 'srp',
+ 'slovak' => 'slk',
+ 'slovene' => 'slv',
+ 'somali' => 'som',
+ 'spanish' => 'spa',
+ 'swahili' => 'swa',
+ 'swedish' => 'swe',
+ 'tagalog' => 'tgl',
+ 'turkish' => 'tur',
+ 'ukrainian' => 'ukr',
+ 'urdu' => 'urd',
+ 'uzbek' => 'uzb',
+ 'vietnamese' => 'vie',
+ 'welsh' => 'cym',
+ );
+
+ /**
+ * Maps ISO 639-1 2-letter language codes to the language names
+ * in the language database
+ *
+ * Not all languages have a 2 letter code, so some are missing
+ *
+ * @var array
+ */
+ public static $code2ToName = array(
+ 'ar' => 'arabic',
+ 'az' => 'azeri',
+ 'bg' => 'bulgarian',
+ 'bn' => 'bengali',
+ 'cs' => 'czech',
+ 'cy' => 'welsh',
+ 'da' => 'danish',
+ 'de' => 'german',
+ 'en' => 'english',
+ 'es' => 'spanish',
+ 'et' => 'estonian',
+ 'fa' => 'farsi',
+ 'fi' => 'finnish',
+ 'fr' => 'french',
+ 'ha' => 'hausa',
+ 'hi' => 'hindi',
+ 'hr' => 'croatian',
+ 'hu' => 'hungarian',
+ 'id' => 'indonesian',
+ 'is' => 'icelandic',
+ 'it' => 'italian',
+ 'kk' => 'kazakh',
+ 'ky' => 'kyrgyz',
+ 'la' => 'latin',
+ 'lt' => 'lithuanian',
+ 'lv' => 'latvian',
+ 'mk' => 'macedonian',
+ 'mn' => 'mongolian',
+ 'ne' => 'nepali',
+ 'nl' => 'dutch',
+ 'no' => 'norwegian',
+ 'pl' => 'polish',
+ 'ps' => 'pashto',
+ 'pt' => 'portuguese',
+ 'ro' => 'romanian',
+ 'ru' => 'russian',
+ 'sk' => 'slovak',
+ 'sl' => 'slovene',
+ 'so' => 'somali',
+ 'sq' => 'albanian',
+ 'sr' => 'serbian',
+ 'sv' => 'swedish',
+ 'sw' => 'swahili',
+ 'tl' => 'tagalog',
+ 'tr' => 'turkish',
+ 'uk' => 'ukrainian',
+ 'ur' => 'urdu',
+ 'uz' => 'uzbek',
+ 'vi' => 'vietnamese',
+ );
+
+ /**
+ * Maps ISO 639-2 3-letter language codes to the language names
+ * in the language database.
+ *
+ * @var array
+ */
+ public static $code3ToName = array(
+ 'ara' => 'arabic',
+ 'aze' => 'azeri',
+ 'ben' => 'bengali',
+ 'bul' => 'bulgarian',
+ 'ceb' => 'cebuano',
+ 'ces' => 'czech',
+ 'crp' => 'pidgin',
+ 'cym' => 'welsh',
+ 'dan' => 'danish',
+ 'deu' => 'german',
+ 'eng' => 'english',
+ 'est' => 'estonian',
+ 'fas' => 'farsi',
+ 'fin' => 'finnish',
+ 'fra' => 'french',
+ 'hau' => 'hausa',
+ 'haw' => 'hawaiian',
+ 'hin' => 'hindi',
+ 'hrv' => 'croatian',
+ 'hun' => 'hungarian',
+ 'ind' => 'indonesian',
+ 'isl' => 'icelandic',
+ 'ita' => 'italian',
+ 'kaz' => 'kazakh',
+ 'kir' => 'kyrgyz',
+ 'lat' => 'latin',
+ 'lav' => 'latvian',
+ 'lit' => 'lithuanian',
+ 'mkd' => 'macedonian',
+ 'mon' => 'mongolian',
+ 'nep' => 'nepali',
+ 'nld' => 'dutch',
+ 'nor' => 'norwegian',
+ 'pol' => 'polish',
+ 'por' => 'portuguese',
+ 'pus' => 'pashto',
+ 'rom' => 'romanian',
+ 'rus' => 'russian',
+ 'slk' => 'slovak',
+ 'slv' => 'slovene',
+ 'som' => 'somali',
+ 'spa' => 'spanish',
+ 'sqi' => 'albanian',
+ 'srp' => 'serbian',
+ 'swa' => 'swahili',
+ 'swe' => 'swedish',
+ 'tgl' => 'tagalog',
+ 'tur' => 'turkish',
+ 'ukr' => 'ukrainian',
+ 'urd' => 'urdu',
+ 'uzb' => 'uzbek',
+ 'vie' => 'vietnamese',
+ );
+
+ /**
+ * Returns the 2-letter ISO 639-1 code for the given language name.
+ *
+ * @param string $lang English language name like "swedish"
+ *
+ * @return string Two-letter language code (e.g. "sv") or NULL if not found
+ */
+ public static function nameToCode2($lang)
+ {
+ $lang = strtolower($lang);
+ if (!isset(self::$nameToCode2[$lang])) {
+ return null;
+ }
+ return self::$nameToCode2[$lang];
+ }
+
+ /**
+ * Returns the 3-letter ISO 639-2 code for the given language name.
+ *
+ * @param string $lang English language name like "swedish"
+ *
+ * @return string Three-letter language code (e.g. "swe") or NULL if not found
+ */
+ public static function nameToCode3($lang)
+ {
+ $lang = strtolower($lang);
+ if (!isset(self::$nameToCode3[$lang])) {
+ return null;
+ }
+ return self::$nameToCode3[$lang];
+ }
+
+ /**
+ * Returns the language name for the given 2-letter ISO 639-1 code.
+ *
+ * @param string $code Two-letter language code (e.g. "sv")
+ *
+ * @return string English language name like "swedish"
+ */
+ public static function code2ToName($code)
+ {
+ $lang = strtolower($code);
+ if (!isset(self::$code2ToName[$code])) {
+ return null;
+ }
+ return self::$code2ToName[$code];
+ }
+
+ /**
+ * Returns the language name for the given 3-letter ISO 639-2 code.
+ *
+ * @param string $code Three-letter language code (e.g. "swe")
+ *
+ * @return string English language name like "swedish"
+ */
+ public static function code3ToName($code)
+ {
+ $lang = strtolower($code);
+ if (!isset(self::$code3ToName[$code])) {
+ return null;
+ }
+ return self::$code3ToName[$code];
+ }
+}
+
+?> \ No newline at end of file
diff --git a/library/langdet/Text/LanguageDetect/Parser.php b/library/langdet/Text/LanguageDetect/Parser.php
new file mode 100644
index 000000000..1c20c2657
--- /dev/null
+++ b/library/langdet/Text/LanguageDetect/Parser.php
@@ -0,0 +1,349 @@
+<?php
+
+/**
+ * This class represents a text sample to be parsed.
+ *
+ * @category Text
+ * @package Text_LanguageDetect
+ * @author Nicholas Pisarro
+ * @copyright 2006
+ * @license BSD
+ * @version CVS: $Id: Parser.php 322327 2012-01-15 17:55:59Z cweiske $
+ * @link http://pear.php.net/package/Text_LanguageDetect/
+ * @link http://langdetect.blogspot.com/
+ */
+
+/**
+ * This class represents a text sample to be parsed.
+ *
+ * This separates the analysis of a text sample from the primary LanguageDetect
+ * class. After a new profile has been built, the data can be retrieved using
+ * the accessor functions.
+ *
+ * This class is intended to be used by the Text_LanguageDetect class, not
+ * end-users.
+ *
+ * @category Text
+ * @package Text_LanguageDetect
+ * @author Nicholas Pisarro
+ * @copyright 2006
+ * @license BSD
+ * @version release: 0.3.0
+ */
+class Text_LanguageDetect_Parser extends Text_LanguageDetect
+{
+ /**
+ * the piece of text being parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $_string;
+
+ /**
+ * stores the trigram frequencies of the sample
+ *
+ * @access private
+ * @var string
+ */
+ var $_trigrams = array();
+
+ /**
+ * stores the trigram ranks of the sample
+ *
+ * @access private
+ * @var array
+ */
+ var $_trigram_ranks = array();
+
+ /**
+ * stores the unicode blocks of the sample
+ *
+ * @access private
+ * @var array
+ */
+ var $_unicode_blocks = array();
+
+ /**
+ * Whether the parser should compile the unicode ranges
+ *
+ * @access private
+ * @var bool
+ */
+ var $_compile_unicode = false;
+
+ /**
+ * Whether the parser should compile trigrams
+ *
+ * @access private
+ * @var bool
+ */
+ var $_compile_trigram = false;
+
+ /**
+ * Whether the trigram parser should pad the beginning of the string
+ *
+ * @access private
+ * @var bool
+ */
+ var $_trigram_pad_start = false;
+
+ /**
+ * Whether the unicode parser should skip non-alphabetical ascii chars
+ *
+ * @access private
+ * @var bool
+ */
+ var $_unicode_skip_symbols = true;
+
+ /**
+ * Constructor
+ *
+ * @access private
+ * @param string $string string to be parsed
+ */
+ function Text_LanguageDetect_Parser($string) {
+ $this->_string = $string;
+ }
+
+ /**
+ * Returns true if a string is suitable for parsing
+ *
+ * @param string $str input string to test
+ * @return bool true if acceptable, false if not
+ */
+ public static function validateString($str) {
+ if (!empty($str) && strlen($str) > 3 && preg_match('/\S/', $str)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * turn on/off trigram counting
+ *
+ * @access public
+ * @param bool $bool true for on, false for off
+ */
+ function prepareTrigram($bool = true)
+ {
+ $this->_compile_trigram = $bool;
+ }
+
+ /**
+ * turn on/off unicode block counting
+ *
+ * @access public
+ * @param bool $bool true for on, false for off
+ */
+ function prepareUnicode($bool = true)
+ {
+ $this->_compile_unicode = $bool;
+ }
+
+ /**
+ * turn on/off padding the beginning of the sample string
+ *
+ * @access public
+ * @param bool $bool true for on, false for off
+ */
+ function setPadStart($bool = true)
+ {
+ $this->_trigram_pad_start = $bool;
+ }
+
+ /**
+ * Should the unicode block counter skip non-alphabetical ascii chars?
+ *
+ * @access public
+ * @param bool $bool true for on, false for off
+ */
+ function setUnicodeSkipSymbols($bool = true)
+ {
+ $this->_unicode_skip_symbols = $bool;
+ }
+
+ /**
+ * Returns the trigram ranks for the text sample
+ *
+ * @access public
+ * @return array trigram ranks in the text sample
+ */
+ function &getTrigramRanks()
+ {
+ return $this->_trigram_ranks;
+ }
+
+ /**
+ * Return the trigram freqency table
+ *
+ * only used in testing to make sure the parser is working
+ *
+ * @access public
+ * @return array trigram freqencies in the text sample
+ */
+ function &getTrigramFreqs()
+ {
+ return $this->_trigram;
+ }
+
+ /**
+ * returns the array of unicode blocks
+ *
+ * @access public
+ * @return array unicode blocks in the text sample
+ */
+ function &getUnicodeBlocks()
+ {
+ return $this->_unicode_blocks;
+ }
+
+ /**
+ * Executes the parsing operation
+ *
+ * Be sure to call the set*() functions to set options and the
+ * prepare*() functions first to tell it what kind of data to compute
+ *
+ * Afterwards the get*() functions can be used to access the compiled
+ * information.
+ *
+ * @access public
+ */
+ function analyze()
+ {
+ $len = strlen($this->_string);
+ $byte_counter = 0;
+
+
+ // unicode startup
+ if ($this->_compile_unicode) {
+ $blocks = $this->_read_unicode_block_db();
+ $block_count = count($blocks);
+
+ $skipped_count = 0;
+ $unicode_chars = array();
+ }
+
+ // trigram startup
+ if ($this->_compile_trigram) {
+ // initialize them as blank so the parser will skip the first two
+ // (since it skips trigrams with more than 2 contiguous spaces)
+ $a = ' ';
+ $b = ' ';
+
+ // kludge
+ // if it finds a valid trigram to start and the start pad option is
+ // off, then set a variable that will be used to reduce this
+ // trigram after parsing has finished
+ if (!$this->_trigram_pad_start) {
+ $a = $this->_next_char($this->_string, $byte_counter, true);
+
+ if ($a != ' ') {
+ $b = $this->_next_char($this->_string, $byte_counter, true);
+ $dropone = " $a$b";
+ }
+
+ $byte_counter = 0;
+ $a = ' ';
+ $b = ' ';
+ }
+ }
+
+ while ($byte_counter < $len) {
+ $char = $this->_next_char($this->_string, $byte_counter, true);
+
+
+ // language trigram detection
+ if ($this->_compile_trigram) {
+ if (!($b == ' ' && ($a == ' ' || $char == ' '))) {
+ if (!isset($this->_trigram[$a . $b . $char])) {
+ $this->_trigram[$a . $b . $char] = 1;
+ } else {
+ $this->_trigram[$a . $b . $char]++;
+ }
+ }
+
+ $a = $b;
+ $b = $char;
+ }
+
+ // unicode block detection
+ if ($this->_compile_unicode) {
+ if ($this->_unicode_skip_symbols
+ && strlen($char) == 1
+ && ($char < 'A' || $char > 'z'
+ || ($char > 'Z' && $char < 'a'))
+ && $char != "'") { // does not skip the apostrophe
+ // since it's included in the language
+ // models
+
+ $skipped_count++;
+ continue;
+ }
+
+ // build an array of all the characters
+ if (isset($unicode_chars[$char])) {
+ $unicode_chars[$char]++;
+ } else {
+ $unicode_chars[$char] = 1;
+ }
+ }
+
+ // todo: add byte detection here
+ }
+
+ // unicode cleanup
+ if ($this->_compile_unicode) {
+ foreach ($unicode_chars as $utf8_char => $count) {
+ $search_result = $this->_unicode_block_name(
+ $this->_utf8char2unicode($utf8_char), $blocks, $block_count);
+
+ if ($search_result != -1) {
+ $block_name = $search_result[2];
+ } else {
+ $block_name = '[Malformatted]';
+ }
+
+ if (isset($this->_unicode_blocks[$block_name])) {
+ $this->_unicode_blocks[$block_name] += $count;
+ } else {
+ $this->_unicode_blocks[$block_name] = $count;
+ }
+ }
+ }
+
+
+ // trigram cleanup
+ if ($this->_compile_trigram) {
+ // pad the end
+ if ($b != ' ') {
+ if (!isset($this->_trigram["$a$b "])) {
+ $this->_trigram["$a$b "] = 1;
+ } else {
+ $this->_trigram["$a$b "]++;
+ }
+ }
+
+ // perl compatibility; Language::Guess does not pad the beginning
+ // kludge
+ if (isset($dropone)) {
+ if ($this->_trigram[$dropone] == 1) {
+ unset($this->_trigram[$dropone]);
+ } else {
+ $this->_trigram[$dropone]--;
+ }
+ }
+
+ if (!empty($this->_trigram)) {
+ $this->_trigram_ranks = $this->_arr_rank($this->_trigram);
+ } else {
+ $this->_trigram_ranks = array();
+ }
+ }
+ }
+}
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+?>
diff --git a/library/langdet/data/lang.dat b/library/langdet/data/lang.dat
new file mode 100644
index 000000000..c2a44f56e
--- /dev/null
+++ b/library/langdet/data/lang.dat
@@ -0,0 +1 @@
+a:2:{s:7:"trigram";a:52:{s:8:"albanian";a:300:{s:4:"të ";s:1:"0";s:4:" të";s:1:"1";s:4:"në ";s:1:"2";s:4:"për";s:1:"3";s:4:" pë";s:1:"4";s:3:" e ";s:1:"5";s:3:"sht";s:1:"6";s:4:" në";s:1:"7";s:3:" sh";s:1:"8";s:3:"se ";s:1:"9";s:3:"et ";s:2:"10";s:4:"ë s";s:2:"11";s:4:"ë t";s:2:"12";s:3:" se";s:2:"13";s:3:"he ";s:2:"14";s:4:"jë ";s:2:"15";s:4:"ër ";s:2:"16";s:3:"dhe";s:2:"17";s:3:" pa";s:2:"18";s:4:"ë n";s:2:"19";s:4:"ë p";s:2:"20";s:4:" që";s:2:"21";s:3:" dh";s:2:"22";s:4:"një";s:2:"23";s:4:"ë m";s:2:"24";s:3:" nj";s:2:"25";s:4:"ësh";s:2:"26";s:3:"in ";s:2:"27";s:3:" me";s:2:"28";s:4:"që ";s:2:"29";s:3:" po";s:2:"30";s:3:"e n";s:2:"31";s:3:"e t";s:2:"32";s:3:"ish";s:2:"33";s:4:"më ";s:2:"34";s:4:"së ";s:2:"35";s:3:"me ";s:2:"36";s:4:"htë";s:2:"37";s:3:" ka";s:2:"38";s:3:" si";s:2:"39";s:3:"e k";s:2:"40";s:3:"e p";s:2:"41";s:3:" i ";s:2:"42";s:4:"anë";s:2:"43";s:3:"ar ";s:2:"44";s:3:" nu";s:2:"45";s:3:"und";s:2:"46";s:3:"ve ";s:2:"47";s:4:" ës";s:2:"48";s:3:"e s";s:2:"49";s:4:" më";s:2:"50";s:3:"nuk";s:2:"51";s:3:"par";s:2:"52";s:3:"uar";s:2:"53";s:3:"uk ";s:2:"54";s:3:"jo ";s:2:"55";s:4:"rë ";s:2:"56";s:3:"ta ";s:2:"57";s:4:"ë f";s:2:"58";s:3:"en ";s:2:"59";s:3:"it ";s:2:"60";s:3:"min";s:2:"61";s:3:"het";s:2:"62";s:3:"n e";s:2:"63";s:3:"ri ";s:2:"64";s:3:"shq";s:2:"65";s:4:"ë d";s:2:"66";s:3:" do";s:2:"67";s:3:" nd";s:2:"68";s:3:"sh ";s:2:"69";s:4:"ën ";s:2:"70";s:4:"atë";s:2:"71";s:3:"hqi";s:2:"72";s:3:"ist";s:2:"73";s:4:"ë q";s:2:"74";s:3:" gj";s:2:"75";s:3:" ng";s:2:"76";s:3:" th";s:2:"77";s:3:"a n";s:2:"78";s:3:"do ";s:2:"79";s:3:"end";s:2:"80";s:3:"imi";s:2:"81";s:3:"ndi";s:2:"82";s:3:"r t";s:2:"83";s:3:"rat";s:2:"84";s:4:"ë b";s:2:"85";s:4:"ëri";s:2:"86";s:3:" mu";s:2:"87";s:3:"art";s:2:"88";s:3:"ash";s:2:"89";s:3:"qip";s:2:"90";s:3:" ko";s:2:"91";s:3:"e m";s:2:"92";s:3:"edh";s:2:"93";s:3:"eri";s:2:"94";s:3:"je ";s:2:"95";s:3:"ka ";s:2:"96";s:3:"nga";s:2:"97";s:3:"si ";s:2:"98";s:3:"te ";s:2:"99";s:4:"ë k";s:3:"100";s:4:"ësi";s:3:"101";s:3:" ma";s:3:"102";s:3:" ti";s:3:"103";s:3:"eve";s:3:"104";s:3:"hje";s:3:"105";s:3:"ira";s:3:"106";s:3:"mun";s:3:"107";s:3:"on ";s:3:"108";s:3:"po ";s:3:"109";s:3:"re ";s:3:"110";s:3:" pr";s:3:"111";s:3:"im ";s:3:"112";s:3:"lit";s:3:"113";s:3:"o t";s:3:"114";s:3:"ur ";s:3:"115";s:4:"ë e";s:3:"116";s:4:"ë v";s:3:"117";s:4:"ët ";s:3:"118";s:3:" ku";s:3:"119";s:4:" së";s:3:"120";s:3:"e d";s:3:"121";s:3:"es ";s:3:"122";s:3:"ga ";s:3:"123";s:3:"iti";s:3:"124";s:3:"jet";s:3:"125";s:4:"ndë";s:3:"126";s:3:"oli";s:3:"127";s:3:"shi";s:3:"128";s:3:"tje";s:3:"129";s:4:" bë";s:3:"130";s:3:" z ";s:3:"131";s:3:"gje";s:3:"132";s:3:"kan";s:3:"133";s:3:"shk";s:3:"134";s:4:"ënd";s:3:"135";s:4:"ës ";s:3:"136";s:3:" de";s:3:"137";s:3:" kj";s:3:"138";s:3:" ru";s:3:"139";s:3:" vi";s:3:"140";s:3:"ara";s:3:"141";s:3:"gov";s:3:"142";s:3:"kjo";s:3:"143";s:3:"or ";s:3:"144";s:3:"r p";s:3:"145";s:3:"rto";s:3:"146";s:3:"rug";s:3:"147";s:3:"tet";s:3:"148";s:3:"ugo";s:3:"149";s:3:"ali";s:3:"150";s:3:"arr";s:3:"151";s:3:"at ";s:3:"152";s:3:"d t";s:3:"153";s:3:"ht ";s:3:"154";s:3:"i p";s:3:"155";s:4:"ipë";s:3:"156";s:3:"izi";s:3:"157";s:4:"jnë";s:3:"158";s:3:"n n";s:3:"159";s:3:"ohe";s:3:"160";s:3:"shu";s:3:"161";s:4:"shë";s:3:"162";s:3:"t e";s:3:"163";s:3:"tik";s:3:"164";s:3:"a e";s:3:"165";s:4:"arë";s:3:"166";s:4:"etë";s:3:"167";s:3:"hum";s:3:"168";s:3:"nd ";s:3:"169";s:3:"ndr";s:3:"170";s:3:"osh";s:3:"171";s:3:"ova";s:3:"172";s:3:"rim";s:3:"173";s:3:"tos";s:3:"174";s:3:"va ";s:3:"175";s:3:" fa";s:3:"176";s:3:" fi";s:3:"177";s:3:"a s";s:3:"178";s:3:"hen";s:3:"179";s:3:"i n";s:3:"180";s:3:"mar";s:3:"181";s:3:"ndo";s:3:"182";s:3:"por";s:3:"183";s:3:"ris";s:3:"184";s:3:"sa ";s:3:"185";s:3:"sis";s:3:"186";s:4:"tës";s:3:"187";s:4:"umë";s:3:"188";s:3:"viz";s:3:"189";s:3:"zit";s:3:"190";s:3:" di";s:3:"191";s:3:" mb";s:3:"192";s:3:"aj ";s:3:"193";s:3:"ana";s:3:"194";s:3:"ata";s:3:"195";s:4:"dër";s:3:"196";s:3:"e a";s:3:"197";s:3:"esh";s:3:"198";s:3:"ime";s:3:"199";s:3:"jes";s:3:"200";s:3:"lar";s:3:"201";s:3:"n s";s:3:"202";s:3:"nte";s:3:"203";s:3:"pol";s:3:"204";s:3:"r n";s:3:"205";s:3:"ran";s:3:"206";s:3:"res";s:3:"207";s:4:"rrë";s:3:"208";s:3:"tar";s:3:"209";s:4:"ë a";s:3:"210";s:4:"ë i";s:3:"211";s:3:" at";s:3:"212";s:3:" jo";s:3:"213";s:4:" kë";s:3:"214";s:3:" re";s:3:"215";s:3:"a k";s:3:"216";s:3:"ai ";s:3:"217";s:3:"akt";s:3:"218";s:4:"hë ";s:3:"219";s:4:"hën";s:3:"220";s:3:"i i";s:3:"221";s:3:"i m";s:3:"222";s:3:"ia ";s:3:"223";s:3:"men";s:3:"224";s:3:"nis";s:3:"225";s:3:"shm";s:3:"226";s:3:"str";s:3:"227";s:3:"t k";s:3:"228";s:3:"t n";s:3:"229";s:3:"t s";s:3:"230";s:4:"ë g";s:3:"231";s:4:"ërk";s:3:"232";s:4:"ëve";s:3:"233";s:3:" ai";s:3:"234";s:3:" ci";s:3:"235";s:3:" ed";s:3:"236";s:3:" ja";s:3:"237";s:3:" kr";s:3:"238";s:3:" qe";s:3:"239";s:3:" ta";s:3:"240";s:3:" ve";s:3:"241";s:3:"a p";s:3:"242";s:3:"cil";s:3:"243";s:3:"el ";s:3:"244";s:4:"erë";s:3:"245";s:3:"gji";s:3:"246";s:3:"hte";s:3:"247";s:3:"i t";s:3:"248";s:3:"jen";s:3:"249";s:3:"jit";s:3:"250";s:3:"k d";s:3:"251";s:4:"mën";s:3:"252";s:3:"n t";s:3:"253";s:3:"nyr";s:3:"254";s:3:"ori";s:3:"255";s:3:"pas";s:3:"256";s:3:"ra ";s:3:"257";s:3:"rie";s:3:"258";s:4:"rës";s:3:"259";s:3:"tor";s:3:"260";s:3:"uaj";s:3:"261";s:3:"yre";s:3:"262";s:4:"ëm ";s:3:"263";s:4:"ëny";s:3:"264";s:3:" ar";s:3:"265";s:3:" du";s:3:"266";s:3:" ga";s:3:"267";s:3:" je";s:3:"268";s:4:"dës";s:3:"269";s:3:"e e";s:3:"270";s:3:"e z";s:3:"271";s:3:"ha ";s:3:"272";s:3:"hme";s:3:"273";s:3:"ika";s:3:"274";s:3:"ini";s:3:"275";s:3:"ite";s:3:"276";s:3:"ith";s:3:"277";s:3:"koh";s:3:"278";s:3:"kra";s:3:"279";s:3:"ku ";s:3:"280";s:3:"lim";s:3:"281";s:3:"lis";s:3:"282";s:4:"qën";s:3:"283";s:4:"rën";s:3:"284";s:3:"s s";s:3:"285";s:3:"t d";s:3:"286";s:3:"t t";s:3:"287";s:3:"tir";s:3:"288";s:4:"tën";s:3:"289";s:3:"ver";s:3:"290";s:4:"ë j";s:3:"291";s:3:" ba";s:3:"292";s:3:" in";s:3:"293";s:3:" tr";s:3:"294";s:3:" zg";s:3:"295";s:3:"a a";s:3:"296";s:3:"a m";s:3:"297";s:3:"a t";s:3:"298";s:3:"abr";s:3:"299";}s:6:"arabic";a:300:{s:5:" ال";s:1:"0";s:6:"الع";s:1:"1";s:6:"لعر";s:1:"2";s:6:"عرا";s:1:"3";s:6:"راق";s:1:"4";s:5:" ÙÙŠ";s:1:"5";s:5:"ÙÙŠ ";s:1:"6";s:5:"ين ";s:1:"7";s:5:"ية ";s:1:"8";s:5:"Ù† ا";s:1:"9";s:6:"الم";s:2:"10";s:5:"ات ";s:2:"11";s:5:"من ";s:2:"12";s:5:"ÙŠ ا";s:2:"13";s:5:" من";s:2:"14";s:6:"الأ";s:2:"15";s:5:"Ø© ا";s:2:"16";s:5:"اق ";s:2:"17";s:5:" وا";s:2:"18";s:5:"اء ";s:2:"19";s:6:"الإ";s:2:"20";s:5:" أن";s:2:"21";s:6:"وال";s:2:"22";s:5:"ما ";s:2:"23";s:5:" عل";s:2:"24";s:5:"لى ";s:2:"25";s:5:"ت ا";s:2:"26";s:5:"ون ";s:2:"27";s:5:"هم ";s:2:"28";s:6:"اقي";s:2:"29";s:5:"ام ";s:2:"30";s:5:"Ù„ ا";s:2:"31";s:5:"أن ";s:2:"32";s:5:"Ù… ا";s:2:"33";s:6:"الت";s:2:"34";s:5:"لا ";s:2:"35";s:6:"الا";s:2:"36";s:5:"ان ";s:2:"37";s:5:"ها ";s:2:"38";s:5:"ال ";s:2:"39";s:5:"Ø© Ùˆ";s:2:"40";s:5:"ا ا";s:2:"41";s:6:"رها";s:2:"42";s:6:"لام";s:2:"43";s:6:"يين";s:2:"44";s:5:" ول";s:2:"45";s:6:"لأم";s:2:"46";s:5:"نا ";s:2:"47";s:6:"على";s:2:"48";s:5:"Ù† ÙŠ";s:2:"49";s:6:"الب";s:2:"50";s:5:"اد ";s:2:"51";s:6:"الق";s:2:"52";s:5:"د ا";s:2:"53";s:5:"ذا ";s:2:"54";s:5:"Ù‡ ا";s:2:"55";s:5:" با";s:2:"56";s:6:"الد";s:2:"57";s:5:"ب ا";s:2:"58";s:6:"مري";s:2:"59";s:5:"لم ";s:2:"60";s:5:" إن";s:2:"61";s:5:" لل";s:2:"62";s:6:"سلا";s:2:"63";s:6:"أمر";s:2:"64";s:6:"ريك";s:2:"65";s:5:"مة ";s:2:"66";s:5:"Ù‰ ا";s:2:"67";s:5:"ا ÙŠ";s:2:"68";s:5:" عن";s:2:"69";s:5:" هذ";s:2:"70";s:5:"Ø¡ ا";s:2:"71";s:5:"ر ا";s:2:"72";s:6:"كان";s:2:"73";s:6:"قتل";s:2:"74";s:6:"إسل";s:2:"75";s:6:"الح";s:2:"76";s:5:"وا ";s:2:"77";s:5:" إل";s:2:"78";s:5:"ا Ø£";s:2:"79";s:6:"بال";s:2:"80";s:5:"Ù† Ù…";s:2:"81";s:6:"الس";s:2:"82";s:5:"رة ";s:2:"83";s:6:"لإس";s:2:"84";s:5:"Ù† Ùˆ";s:2:"85";s:6:"هاب";s:2:"86";s:5:"ÙŠ Ùˆ";s:2:"87";s:5:"ير ";s:2:"88";s:5:" كا";s:2:"89";s:5:"لة ";s:2:"90";s:6:"يات";s:2:"91";s:5:" لا";s:2:"92";s:6:"انت";s:2:"93";s:5:"Ù† Ø£";s:2:"94";s:6:"يكي";s:2:"95";s:6:"الر";s:2:"96";s:6:"الو";s:2:"97";s:5:"Ø© Ù";s:2:"98";s:5:"دة ";s:2:"99";s:6:"الج";s:3:"100";s:5:"قي ";s:3:"101";s:5:"وي ";s:3:"102";s:6:"الذ";s:3:"103";s:6:"الش";s:3:"104";s:6:"امي";s:3:"105";s:6:"اني";s:3:"106";s:5:"ذه ";s:3:"107";s:5:"عن ";s:3:"108";s:6:"لما";s:3:"109";s:6:"هذه";s:3:"110";s:5:"ول ";s:3:"111";s:5:"ا٠";s:3:"112";s:6:"اوي";s:3:"113";s:6:"بري";s:3:"114";s:5:"Ø© Ù„";s:3:"115";s:5:" أم";s:3:"116";s:5:" لم";s:3:"117";s:5:" ما";s:3:"118";s:5:"يد ";s:3:"119";s:5:" أي";s:3:"120";s:6:"إره";s:3:"121";s:5:"ع ا";s:3:"122";s:6:"عمل";s:3:"123";s:6:"ولا";s:3:"124";s:6:"إلى";s:3:"125";s:6:"ابي";s:3:"126";s:5:"Ù† Ù";s:3:"127";s:6:"ختط";s:3:"128";s:5:"لك ";s:3:"129";s:5:"نه ";s:3:"130";s:5:"ني ";s:3:"131";s:5:"إن ";s:3:"132";s:6:"دين";s:3:"133";s:5:"٠ا";s:3:"134";s:6:"لذي";s:3:"135";s:5:"ÙŠ Ø£";s:3:"136";s:5:"ÙŠ ب";s:3:"137";s:5:" وأ";s:3:"138";s:5:"ا ع";s:3:"139";s:6:"الخ";s:3:"140";s:5:"تل ";s:3:"141";s:5:"تي ";s:3:"142";s:5:"قد ";s:3:"143";s:6:"لدي";s:3:"144";s:5:" كل";s:3:"145";s:5:" مع";s:3:"146";s:5:"اب ";s:3:"147";s:6:"اخت";s:3:"148";s:5:"ار ";s:3:"149";s:6:"الن";s:3:"150";s:6:"علا";s:3:"151";s:5:"Ù… Ùˆ";s:3:"152";s:5:"مع ";s:3:"153";s:5:"س ا";s:3:"154";s:5:"كل ";s:3:"155";s:6:"لاء";s:3:"156";s:5:"Ù† ب";s:3:"157";s:5:"Ù† ت";s:3:"158";s:5:"ÙŠ Ù…";s:3:"159";s:6:"عرب";s:3:"160";s:5:"Ù… ب";s:3:"161";s:5:" وق";s:3:"162";s:5:" يق";s:3:"163";s:5:"ا Ù„";s:3:"164";s:5:"ا Ù…";s:3:"165";s:6:"الÙ";s:3:"166";s:6:"تطا";s:3:"167";s:6:"داد";s:3:"168";s:6:"لمس";s:3:"169";s:5:"له ";s:3:"170";s:6:"هذا";s:3:"171";s:5:" مح";s:3:"172";s:6:"ؤلا";s:3:"173";s:5:"بي ";s:3:"174";s:5:"Ø© Ù…";s:3:"175";s:5:"Ù† Ù„";s:3:"176";s:6:"هؤل";s:3:"177";s:5:"كن ";s:3:"178";s:6:"لإر";s:3:"179";s:6:"لتي";s:3:"180";s:5:" أو";s:3:"181";s:5:" ان";s:3:"182";s:5:" عم";s:3:"183";s:5:"ا Ù";s:3:"184";s:5:"Ø© Ø£";s:3:"185";s:6:"طاÙ";s:3:"186";s:5:"عب ";s:3:"187";s:5:"Ù„ Ù…";s:3:"188";s:5:"Ù† ع";s:3:"189";s:5:"ور ";s:3:"190";s:5:"يا ";s:3:"191";s:5:" يس";s:3:"192";s:5:"ا ت";s:3:"193";s:5:"Ø© ب";s:3:"194";s:6:"راء";s:3:"195";s:6:"عال";s:3:"196";s:6:"قوا";s:3:"197";s:6:"قية";s:3:"198";s:6:"لعا";s:3:"199";s:5:"Ù… ÙŠ";s:3:"200";s:5:"مي ";s:3:"201";s:6:"مية";s:3:"202";s:6:"نية";s:3:"203";s:5:"أي ";s:3:"204";s:6:"ابا";s:3:"205";s:6:"بغد";s:3:"206";s:5:"بل ";s:3:"207";s:5:"رب ";s:3:"208";s:6:"عما";s:3:"209";s:6:"غدا";s:3:"210";s:6:"مال";s:3:"211";s:6:"ملي";s:3:"212";s:5:"يس ";s:3:"213";s:5:" بأ";s:3:"214";s:5:" بع";s:3:"215";s:5:" بغ";s:3:"216";s:5:" وم";s:3:"217";s:6:"بات";s:3:"218";s:6:"بية";s:3:"219";s:6:"ذلك";s:3:"220";s:5:"عة ";s:3:"221";s:6:"قاو";s:3:"222";s:6:"قيي";s:3:"223";s:5:"كي ";s:3:"224";s:5:"Ù… Ù…";s:3:"225";s:5:"ÙŠ ع";s:3:"226";s:5:" عر";s:3:"227";s:5:" قا";s:3:"228";s:5:"ا Ùˆ";s:3:"229";s:5:"رى ";s:3:"230";s:5:"Ù‚ ا";s:3:"231";s:6:"وات";s:3:"232";s:5:"وم ";s:3:"233";s:5:" هؤ";s:3:"234";s:5:"ا ب";s:3:"235";s:6:"دام";s:3:"236";s:5:"دي ";s:3:"237";s:6:"رات";s:3:"238";s:6:"شعب";s:3:"239";s:6:"لان";s:3:"240";s:6:"لشع";s:3:"241";s:6:"لقو";s:3:"242";s:6:"ليا";s:3:"243";s:5:"Ù† Ù‡";s:3:"244";s:5:"ÙŠ ت";s:3:"245";s:5:"ÙŠ ÙŠ";s:3:"246";s:5:" وه";s:3:"247";s:5:" يح";s:3:"248";s:6:"جرا";s:3:"249";s:6:"جما";s:3:"250";s:6:"حمد";s:3:"251";s:5:"دم ";s:3:"252";s:5:"كم ";s:3:"253";s:6:"لاو";s:3:"254";s:6:"لره";s:3:"255";s:6:"ماع";s:3:"256";s:5:"Ù† Ù‚";s:3:"257";s:5:"نة ";s:3:"258";s:5:"هي ";s:3:"259";s:5:" بل";s:3:"260";s:5:" به";s:3:"261";s:5:" له";s:3:"262";s:5:" وي";s:3:"263";s:5:"ا Ùƒ";s:3:"264";s:6:"اذا";s:3:"265";s:5:"اع ";s:3:"266";s:5:"ت Ù…";s:3:"267";s:6:"تخا";s:3:"268";s:6:"خاب";s:3:"269";s:5:"ر Ù…";s:3:"270";s:6:"لمت";s:3:"271";s:6:"مسل";s:3:"272";s:5:"Ù‰ Ø£";s:3:"273";s:6:"يست";s:3:"274";s:6:"يطا";s:3:"275";s:5:" لأ";s:3:"276";s:5:" لي";s:3:"277";s:6:"أمن";s:3:"278";s:6:"است";s:3:"279";s:6:"بعض";s:3:"280";s:5:"Ø© ت";s:3:"281";s:5:"ري ";s:3:"282";s:6:"صدا";s:3:"283";s:5:"Ù‚ Ùˆ";s:3:"284";s:6:"قول";s:3:"285";s:5:"مد ";s:3:"286";s:6:"نتخ";s:3:"287";s:6:"Ù†Ùس";s:3:"288";s:6:"نها";s:3:"289";s:6:"هنا";s:3:"290";s:6:"أعم";s:3:"291";s:6:"أنه";s:3:"292";s:6:"ائن";s:3:"293";s:6:"الآ";s:3:"294";s:6:"الك";s:3:"295";s:5:"حة ";s:3:"296";s:5:"د Ù…";s:3:"297";s:5:"ر ع";s:3:"298";s:6:"ربي";s:3:"299";}s:5:"azeri";a:300:{s:4:"lÉ™r";s:1:"0";s:3:"in ";s:1:"1";s:4:"ın ";s:1:"2";s:3:"lar";s:1:"3";s:3:"da ";s:1:"4";s:3:"an ";s:1:"5";s:3:"ir ";s:1:"6";s:4:"dÉ™ ";s:1:"7";s:3:"ki ";s:1:"8";s:3:" bi";s:1:"9";s:4:"É™n ";s:2:"10";s:4:"É™ri";s:2:"11";s:4:"arı";s:2:"12";s:4:"É™r ";s:2:"13";s:3:"dir";s:2:"14";s:3:"nda";s:2:"15";s:3:" ki";s:2:"16";s:3:"rin";s:2:"17";s:4:"nın";s:2:"18";s:4:"É™si";s:2:"19";s:3:"ini";s:2:"20";s:3:" ed";s:2:"21";s:3:" qa";s:2:"22";s:4:" tÉ™";s:2:"23";s:3:" ba";s:2:"24";s:3:" ol";s:2:"25";s:4:"ası";s:2:"26";s:4:"ilÉ™";s:2:"27";s:4:"rın";s:2:"28";s:3:" ya";s:2:"29";s:4:"anı";s:2:"30";s:4:" vÉ™";s:2:"31";s:4:"ndÉ™";s:2:"32";s:3:"ni ";s:2:"33";s:3:"ara";s:2:"34";s:5:"ını";s:2:"35";s:4:"ınd";s:2:"36";s:3:" bu";s:2:"37";s:3:"si ";s:2:"38";s:3:"ib ";s:2:"39";s:3:"aq ";s:2:"40";s:4:"dÉ™n";s:2:"41";s:3:"iya";s:2:"42";s:4:"nÉ™ ";s:2:"43";s:4:"rÉ™ ";s:2:"44";s:3:"n b";s:2:"45";s:4:"sın";s:2:"46";s:4:"vÉ™ ";s:2:"47";s:3:"iri";s:2:"48";s:4:"lÉ™ ";s:2:"49";s:3:"nin";s:2:"50";s:4:"É™li";s:2:"51";s:3:" de";s:2:"52";s:4:" mü";s:2:"53";s:3:"bir";s:2:"54";s:3:"n s";s:2:"55";s:3:"ri ";s:2:"56";s:4:"É™k ";s:2:"57";s:3:" az";s:2:"58";s:4:" sÉ™";s:2:"59";s:3:"ar ";s:2:"60";s:3:"bil";s:2:"61";s:4:"zÉ™r";s:2:"62";s:3:"bu ";s:2:"63";s:3:"dan";s:2:"64";s:3:"edi";s:2:"65";s:3:"ind";s:2:"66";s:3:"man";s:2:"67";s:3:"un ";s:2:"68";s:5:"É™rÉ™";s:2:"69";s:3:" ha";s:2:"70";s:3:"lan";s:2:"71";s:4:"yyÉ™";s:2:"72";s:3:"iyy";s:2:"73";s:3:" il";s:2:"74";s:3:" ne";s:2:"75";s:3:"r k";s:2:"76";s:4:"É™ b";s:2:"77";s:3:" is";s:2:"78";s:3:"na ";s:2:"79";s:3:"nun";s:2:"80";s:4:"ır ";s:2:"81";s:3:" da";s:2:"82";s:4:" hÉ™";s:2:"83";s:3:"a b";s:2:"84";s:4:"inÉ™";s:2:"85";s:3:"sin";s:2:"86";s:3:"yan";s:2:"87";s:4:"É™rb";s:2:"88";s:4:" dÉ™";s:2:"89";s:4:" mÉ™";s:2:"90";s:4:" qÉ™";s:2:"91";s:4:"dır";s:2:"92";s:3:"li ";s:2:"93";s:3:"ola";s:2:"94";s:3:"rba";s:2:"95";s:4:"azÉ™";s:2:"96";s:3:"can";s:2:"97";s:4:"lı ";s:2:"98";s:3:"nla";s:2:"99";s:3:" et";s:3:"100";s:4:" gö";s:3:"101";s:4:"alı";s:3:"102";s:3:"ayc";s:3:"103";s:3:"bay";s:3:"104";s:3:"eft";s:3:"105";s:3:"ist";s:3:"106";s:3:"n i";s:3:"107";s:3:"nef";s:3:"108";s:4:"tlÉ™";s:3:"109";s:3:"yca";s:3:"110";s:4:"yÉ™t";s:3:"111";s:5:"É™cÉ™";s:3:"112";s:3:" la";s:3:"113";s:3:"ild";s:3:"114";s:4:"nı ";s:3:"115";s:3:"tin";s:3:"116";s:3:"ldi";s:3:"117";s:3:"lik";s:3:"118";s:3:"n h";s:3:"119";s:3:"n m";s:3:"120";s:3:"oyu";s:3:"121";s:3:"raq";s:3:"122";s:3:"ya ";s:3:"123";s:4:"É™ti";s:3:"124";s:3:" ar";s:3:"125";s:3:"ada";s:3:"126";s:4:"edÉ™";s:3:"127";s:3:"mas";s:3:"128";s:4:"sı ";s:3:"129";s:4:"ına";s:3:"130";s:4:"É™ d";s:3:"131";s:5:"É™lÉ™";s:3:"132";s:4:"ayı";s:3:"133";s:3:"iyi";s:3:"134";s:3:"lma";s:3:"135";s:4:"mÉ™k";s:3:"136";s:3:"n d";s:3:"137";s:3:"ti ";s:3:"138";s:3:"yin";s:3:"139";s:3:"yun";s:3:"140";s:4:"É™t ";s:3:"141";s:4:"azı";s:3:"142";s:3:"ft ";s:3:"143";s:3:"i t";s:3:"144";s:3:"lli";s:3:"145";s:3:"n a";s:3:"146";s:3:"ra ";s:3:"147";s:4:" cÉ™";s:3:"148";s:4:" gÉ™";s:3:"149";s:3:" ko";s:3:"150";s:4:" nÉ™";s:3:"151";s:3:" oy";s:3:"152";s:3:"a d";s:3:"153";s:3:"ana";s:3:"154";s:4:"cÉ™k";s:3:"155";s:3:"eyi";s:3:"156";s:3:"ilm";s:3:"157";s:3:"irl";s:3:"158";s:3:"lay";s:3:"159";s:3:"liy";s:3:"160";s:3:"lub";s:3:"161";s:4:"n É™";s:3:"162";s:3:"ril";s:3:"163";s:4:"rlÉ™";s:3:"164";s:3:"unu";s:3:"165";s:3:"ver";s:3:"166";s:4:"ün ";s:3:"167";s:4:"É™ o";s:3:"168";s:4:"É™ni";s:3:"169";s:3:" he";s:3:"170";s:3:" ma";s:3:"171";s:3:" on";s:3:"172";s:3:" pa";s:3:"173";s:3:"ala";s:3:"174";s:3:"dey";s:3:"175";s:3:"i m";s:3:"176";s:3:"ima";s:3:"177";s:4:"lmÉ™";s:3:"178";s:4:"mÉ™t";s:3:"179";s:3:"par";s:3:"180";s:4:"yÉ™ ";s:3:"181";s:4:"É™tl";s:3:"182";s:3:" al";s:3:"183";s:3:" mi";s:3:"184";s:3:" sa";s:3:"185";s:4:" É™l";s:3:"186";s:4:"adı";s:3:"187";s:4:"akı";s:3:"188";s:3:"and";s:3:"189";s:3:"ard";s:3:"190";s:3:"art";s:3:"191";s:3:"ayi";s:3:"192";s:3:"i a";s:3:"193";s:3:"i q";s:3:"194";s:3:"i y";s:3:"195";s:3:"ili";s:3:"196";s:3:"ill";s:3:"197";s:4:"isÉ™";s:3:"198";s:3:"n o";s:3:"199";s:3:"n q";s:3:"200";s:3:"olu";s:3:"201";s:3:"rla";s:3:"202";s:4:"stÉ™";s:3:"203";s:4:"sÉ™ ";s:3:"204";s:3:"tan";s:3:"205";s:3:"tel";s:3:"206";s:3:"yar";s:3:"207";s:5:"É™dÉ™";s:3:"208";s:3:" me";s:3:"209";s:4:" rÉ™";s:3:"210";s:3:" ve";s:3:"211";s:3:" ye";s:3:"212";s:3:"a k";s:3:"213";s:3:"at ";s:3:"214";s:4:"baÅŸ";s:3:"215";s:3:"diy";s:3:"216";s:3:"ent";s:3:"217";s:3:"eti";s:3:"218";s:4:"hÉ™s";s:3:"219";s:3:"i i";s:3:"220";s:3:"ik ";s:3:"221";s:3:"la ";s:3:"222";s:4:"miÅŸ";s:3:"223";s:3:"n n";s:3:"224";s:3:"nu ";s:3:"225";s:3:"qar";s:3:"226";s:3:"ran";s:3:"227";s:4:"tÉ™r";s:3:"228";s:3:"xan";s:3:"229";s:4:"É™ a";s:3:"230";s:4:"É™ g";s:3:"231";s:4:"É™ t";s:3:"232";s:4:" dü";s:3:"233";s:3:"ama";s:3:"234";s:3:"b k";s:3:"235";s:3:"dil";s:3:"236";s:3:"era";s:3:"237";s:3:"etm";s:3:"238";s:3:"i b";s:3:"239";s:3:"kil";s:3:"240";s:3:"mil";s:3:"241";s:3:"n r";s:3:"242";s:3:"qla";s:3:"243";s:3:"r s";s:3:"244";s:3:"ras";s:3:"245";s:3:"siy";s:3:"246";s:3:"son";s:3:"247";s:3:"tim";s:3:"248";s:3:"yer";s:3:"249";s:4:"É™ k";s:3:"250";s:4:" gü";s:3:"251";s:3:" so";s:3:"252";s:4:" sö";s:3:"253";s:3:" te";s:3:"254";s:3:" xa";s:3:"255";s:3:"ai ";s:3:"256";s:3:"bar";s:3:"257";s:3:"cti";s:3:"258";s:3:"di ";s:3:"259";s:3:"eri";s:3:"260";s:4:"gör";s:3:"261";s:4:"gün";s:3:"262";s:4:"gÉ™l";s:3:"263";s:4:"hbÉ™";s:3:"264";s:4:"ihÉ™";s:3:"265";s:3:"iki";s:3:"266";s:3:"isi";s:3:"267";s:3:"lin";s:3:"268";s:3:"mai";s:3:"269";s:3:"maq";s:3:"270";s:3:"n k";s:3:"271";s:3:"n t";s:3:"272";s:3:"n v";s:3:"273";s:3:"onu";s:3:"274";s:3:"qan";s:3:"275";s:4:"qÉ™z";s:3:"276";s:4:"tÉ™ ";s:3:"277";s:3:"xal";s:3:"278";s:3:"yib";s:3:"279";s:3:"yih";s:3:"280";s:3:"zet";s:3:"281";s:4:"zır";s:3:"282";s:4:"ıb ";s:3:"283";s:4:"É™ m";s:3:"284";s:4:"É™ze";s:3:"285";s:3:" br";s:3:"286";s:3:" in";s:3:"287";s:4:" i̇";s:3:"288";s:3:" pr";s:3:"289";s:3:" ta";s:3:"290";s:3:" to";s:3:"291";s:5:" üç";s:3:"292";s:3:"a o";s:3:"293";s:3:"ali";s:3:"294";s:3:"ani";s:3:"295";s:3:"anl";s:3:"296";s:3:"aql";s:3:"297";s:3:"azi";s:3:"298";s:3:"bri";s:3:"299";}s:7:"bengali";a:300:{s:7:"ার ";s:1:"0";s:7:"য় ";s:1:"1";s:9:"েয়";s:1:"2";s:9:"য়া";s:1:"3";s:7:" কর";s:1:"4";s:7:"েত ";s:1:"5";s:7:" কা";s:1:"6";s:7:" পা";s:1:"7";s:7:" তা";s:1:"8";s:7:"না ";s:1:"9";s:9:"ায়";s:2:"10";s:7:"ের ";s:2:"11";s:9:"য়ে";s:2:"12";s:7:" বা";s:2:"13";s:7:"েব ";s:2:"14";s:7:" যা";s:2:"15";s:7:" হে";s:2:"16";s:7:" সা";s:2:"17";s:7:"ান ";s:2:"18";s:7:"েছ ";s:2:"19";s:7:" িন";s:2:"20";s:7:"েল ";s:2:"21";s:7:" িদ";s:2:"22";s:7:" না";s:2:"23";s:7:" িব";s:2:"24";s:7:"েক ";s:2:"25";s:7:"লা ";s:2:"26";s:7:"তা ";s:2:"27";s:7:" বઘ";s:2:"28";s:7:" িক";s:2:"29";s:9:"করে";s:2:"30";s:7:" পચ";s:2:"31";s:9:"াের";s:2:"32";s:9:"িনে";s:2:"33";s:7:"রা ";s:2:"34";s:7:" োব";s:2:"35";s:7:"কা ";s:2:"36";s:7:" কে";s:2:"37";s:7:" টা";s:2:"38";s:7:"র ক";s:2:"39";s:9:"েলা";s:2:"40";s:7:" োক";s:2:"41";s:7:" মা";s:2:"42";s:7:" োদ";s:2:"43";s:7:" োম";s:2:"44";s:7:"দর ";s:2:"45";s:7:"়া ";s:2:"46";s:9:"িদে";s:2:"47";s:9:"াকা";s:2:"48";s:9:"়েছ";s:2:"49";s:9:"েদর";s:2:"50";s:7:" আে";s:2:"51";s:5:" ও ";s:2:"52";s:7:"াল ";s:2:"53";s:7:"িট ";s:2:"54";s:7:" মà§";s:2:"55";s:9:"কের";s:2:"56";s:9:"হয়";s:2:"57";s:9:"করা";s:2:"58";s:7:"পর ";s:2:"59";s:9:"পাে";s:2:"60";s:7:" à¦à¦•";s:2:"61";s:7:" পদ";s:2:"62";s:9:"টাক";s:2:"63";s:7:"ড় ";s:2:"64";s:9:"কান";s:2:"65";s:7:"টা ";s:2:"66";s:9:"দગা";s:2:"67";s:9:"পদગ";s:2:"68";s:9:"াড়";s:2:"69";s:9:"োকা";s:2:"70";s:9:"ওয়";s:2:"71";s:9:"কাপ";s:2:"72";s:9:"হেয";s:2:"73";s:9:"েনর";s:2:"74";s:7:" হয";s:2:"75";s:9:"দেয";s:2:"76";s:7:"নর ";s:2:"77";s:9:"ানা";s:2:"78";s:9:"ােল";s:2:"79";s:7:" আর";s:2:"80";s:5:" ় ";s:2:"81";s:9:"বઘব";s:2:"82";s:9:"িয়";s:2:"83";s:7:" দা";s:2:"84";s:7:" সম";s:2:"85";s:9:"কার";s:2:"86";s:9:"হার";s:2:"87";s:7:"াই ";s:2:"88";s:9:"ড়া";s:2:"89";s:9:"িবি";s:2:"90";s:7:" রা";s:2:"91";s:7:" লা";s:2:"92";s:9:"নার";s:2:"93";s:9:"বহা";s:2:"94";s:7:"বা ";s:2:"95";s:9:"যায";s:2:"96";s:7:"েন ";s:2:"97";s:9:"ઘবহ";s:2:"98";s:7:" ভা";s:2:"99";s:7:" সে";s:3:"100";s:7:" োয";s:3:"101";s:7:"রর ";s:3:"102";s:9:"়ার";s:3:"103";s:9:"়াল";s:3:"104";s:7:"ગা ";s:3:"105";s:9:"থেক";s:3:"106";s:9:"ভাে";s:3:"107";s:7:"়ে ";s:3:"108";s:9:"েরর";s:3:"109";s:7:" ধর";s:3:"110";s:7:" হা";s:3:"111";s:7:"নઘ ";s:3:"112";s:9:"রেন";s:3:"113";s:9:"ােব";s:3:"114";s:9:"িড়";s:3:"115";s:7:"ির ";s:3:"116";s:7:" োথ";s:3:"117";s:9:"তার";s:3:"118";s:9:"বিভ";s:3:"119";s:9:"রেত";s:3:"120";s:9:"সাে";s:3:"121";s:9:"াকে";s:3:"122";s:9:"ােত";s:3:"123";s:9:"িভਭ";s:3:"124";s:7:"ে ব";s:3:"125";s:9:"োথে";s:3:"126";s:7:" োপ";s:3:"127";s:7:" োস";s:3:"128";s:9:"বার";s:3:"129";s:7:"ভਭ ";s:3:"130";s:7:"রন ";s:3:"131";s:7:"াম ";s:3:"132";s:7:" à¦à¦–";s:3:"133";s:7:"আর ";s:3:"134";s:9:"কাে";s:3:"135";s:7:"দন ";s:3:"136";s:9:"সাজ";s:3:"137";s:9:"ােক";s:3:"138";s:9:"ােন";s:3:"139";s:9:"েনা";s:3:"140";s:7:" ঘে";s:3:"141";s:7:" তে";s:3:"142";s:7:" রে";s:3:"143";s:9:"তেব";s:3:"144";s:7:"বন ";s:3:"145";s:9:"বઘা";s:3:"146";s:9:"েড়";s:3:"147";s:9:"েবন";s:3:"148";s:7:" খà§";s:3:"149";s:7:" চা";s:3:"150";s:7:" সà§";s:3:"151";s:7:"কে ";s:3:"152";s:9:"ধরে";s:3:"153";s:7:"র ো";s:3:"154";s:7:"় ি";s:3:"155";s:7:"া ি";s:3:"156";s:9:"ােথ";s:3:"157";s:9:"াਠা";s:3:"158";s:7:"িদ ";s:3:"159";s:7:"িন ";s:3:"160";s:7:" অন";s:3:"161";s:7:" আপ";s:3:"162";s:7:" আম";s:3:"163";s:7:" থা";s:3:"164";s:7:" বચ";s:3:"165";s:7:" োফ";s:3:"166";s:7:" ৌত";s:3:"167";s:9:"ঘের";s:3:"168";s:7:"তে ";s:3:"169";s:9:"ময়";s:3:"170";s:9:"যাਠ";s:3:"171";s:7:"র স";s:3:"172";s:9:"রাখ";s:3:"173";s:7:"া ব";s:3:"174";s:7:"া ো";s:3:"175";s:9:"ালা";s:3:"176";s:7:"িক ";s:3:"177";s:7:"িশ ";s:3:"178";s:7:"েখ ";s:3:"179";s:7:" à¦à¦°";s:3:"180";s:7:" চઓ";s:3:"181";s:7:" িড";s:3:"182";s:7:"খন ";s:3:"183";s:9:"ড়ে";s:3:"184";s:7:"র ব";s:3:"185";s:7:"়র ";s:3:"186";s:9:"াইে";s:3:"187";s:9:"ােদ";s:3:"188";s:9:"িদন";s:3:"189";s:9:"েরন";s:3:"190";s:7:" তੴ";s:3:"191";s:9:"ছাড";s:3:"192";s:9:"জনઘ";s:3:"193";s:9:"তাই";s:3:"194";s:7:"মা ";s:3:"195";s:9:"মাে";s:3:"196";s:9:"লার";s:3:"197";s:7:"াজ ";s:3:"198";s:9:"াতা";s:3:"199";s:9:"ামা";s:3:"200";s:9:"ਊেল";s:3:"201";s:9:"ગার";s:3:"202";s:7:" সব";s:3:"203";s:9:"আপন";s:3:"204";s:9:"à¦à¦•à¦Ÿ";s:3:"205";s:9:"কাি";s:3:"206";s:9:"জাই";s:3:"207";s:7:"টর ";s:3:"208";s:9:"ডজা";s:3:"209";s:9:"দেখ";s:3:"210";s:9:"পনা";s:3:"211";s:7:"রও ";s:3:"212";s:7:"লে ";s:3:"213";s:9:"হেব";s:3:"214";s:9:"াজা";s:3:"215";s:9:"ািট";s:3:"216";s:9:"িডজ";s:3:"217";s:7:"েথ ";s:3:"218";s:7:" à¦à¦¬";s:3:"219";s:7:" জন";s:3:"220";s:7:" জা";s:3:"221";s:9:"আমা";s:3:"222";s:9:"গেল";s:3:"223";s:9:"জান";s:3:"224";s:9:"নেত";s:3:"225";s:9:"বিশ";s:3:"226";s:9:"মà§à§‡";s:3:"227";s:9:"মেয";s:3:"228";s:7:"র প";s:3:"229";s:7:"সে ";s:3:"230";s:9:"হেল";s:3:"231";s:7:"় ো";s:3:"232";s:7:"া হ";s:3:"233";s:9:"াওয";s:3:"234";s:9:"োমক";s:3:"235";s:9:"ઘাি";s:3:"236";s:7:" অে";s:3:"237";s:5:" ট ";s:3:"238";s:7:" োগ";s:3:"239";s:7:" োন";s:3:"240";s:7:"জর ";s:3:"241";s:9:"তির";s:3:"242";s:9:"দাম";s:3:"243";s:9:"পড়";s:3:"244";s:9:"পার";s:3:"245";s:9:"বাঘ";s:3:"246";s:9:"মকা";s:3:"247";s:9:"মাম";s:3:"248";s:9:"য়র";s:3:"249";s:9:"যাে";s:3:"250";s:7:"র ম";s:3:"251";s:7:"রে ";s:3:"252";s:7:"লর ";s:3:"253";s:7:"া ক";s:3:"254";s:7:"াগ ";s:3:"255";s:9:"াবা";s:3:"256";s:9:"ারা";s:3:"257";s:9:"ািন";s:3:"258";s:7:"ে গ";s:3:"259";s:7:"েগ ";s:3:"260";s:9:"েলর";s:3:"261";s:9:"োদখ";s:3:"262";s:9:"োবি";s:3:"263";s:7:"ઓল ";s:3:"264";s:7:" দে";s:3:"265";s:7:" পà§";s:3:"266";s:7:" বে";s:3:"267";s:9:"অেন";s:3:"268";s:9:"à¦à¦–ন";s:3:"269";s:9:"কছà§";s:3:"270";s:9:"কাল";s:3:"271";s:9:"গেয";s:3:"272";s:7:"ছন ";s:3:"273";s:7:"ত প";s:3:"274";s:9:"নেয";s:3:"275";s:9:"পাি";s:3:"276";s:7:"মন ";s:3:"277";s:7:"র আ";s:3:"278";s:9:"রার";s:3:"279";s:7:"াও ";s:3:"280";s:7:"াপ ";s:3:"281";s:9:"িকছ";s:3:"282";s:9:"িগে";s:3:"283";s:9:"েছন";s:3:"284";s:9:"েজর";s:3:"285";s:9:"োমা";s:3:"286";s:9:"োমে";s:3:"287";s:9:"ৌতি";s:3:"288";s:9:"ઘাে";s:3:"289";s:3:" ' ";s:3:"290";s:7:" à¦à¦›";s:3:"291";s:7:" ছা";s:3:"292";s:7:" বল";s:3:"293";s:7:" যি";s:3:"294";s:7:" শি";s:3:"295";s:7:" িম";s:3:"296";s:7:" োল";s:3:"297";s:9:"à¦à¦›à¦¾";s:3:"298";s:7:"খা ";s:3:"299";}s:9:"bulgarian";a:300:{s:5:"на ";s:1:"0";s:5:" на";s:1:"1";s:5:"то ";s:1:"2";s:5:" пр";s:1:"3";s:5:" за";s:1:"4";s:5:"та ";s:1:"5";s:5:" по";s:1:"6";s:6:"ите";s:1:"7";s:5:"те ";s:1:"8";s:5:"а п";s:1:"9";s:5:"а Ñ";s:2:"10";s:5:" от";s:2:"11";s:5:"за ";s:2:"12";s:6:"ата";s:2:"13";s:5:"Ð¸Ñ ";s:2:"14";s:4:" в ";s:2:"15";s:5:"е н";s:2:"16";s:5:" да";s:2:"17";s:5:"а н";s:2:"18";s:5:" Ñе";s:2:"19";s:5:" ко";s:2:"20";s:5:"да ";s:2:"21";s:5:"от ";s:2:"22";s:6:"ани";s:2:"23";s:6:"пре";s:2:"24";s:5:"не ";s:2:"25";s:6:"ени";s:2:"26";s:5:"о н";s:2:"27";s:5:"ни ";s:2:"28";s:5:"Ñе ";s:2:"29";s:4:" и ";s:2:"30";s:5:"но ";s:2:"31";s:6:"ане";s:2:"32";s:6:"ето";s:2:"33";s:5:"а в";s:2:"34";s:5:"ва ";s:2:"35";s:6:"ван";s:2:"36";s:5:"е п";s:2:"37";s:5:"а о";s:2:"38";s:6:"ото";s:2:"39";s:6:"ран";s:2:"40";s:5:"ат ";s:2:"41";s:6:"ред";s:2:"42";s:5:" не";s:2:"43";s:5:"а д";s:2:"44";s:5:"и п";s:2:"45";s:5:" до";s:2:"46";s:6:"про";s:2:"47";s:5:" ÑÑŠ";s:2:"48";s:5:"ли ";s:2:"49";s:6:"при";s:2:"50";s:6:"ниÑ";s:2:"51";s:6:"Ñки";s:2:"52";s:6:"тел";s:2:"53";s:5:"а и";s:2:"54";s:5:"по ";s:2:"55";s:5:"ри ";s:2:"56";s:4:" е ";s:2:"57";s:5:" ка";s:2:"58";s:6:"ира";s:2:"59";s:6:"кат";s:2:"60";s:6:"ние";s:2:"61";s:6:"нит";s:2:"62";s:5:"е з";s:2:"63";s:5:"и Ñ";s:2:"64";s:5:"о Ñ";s:2:"65";s:6:"оÑÑ‚";s:2:"66";s:5:"че ";s:2:"67";s:5:" ра";s:2:"68";s:6:"иÑÑ‚";s:2:"69";s:5:"о п";s:2:"70";s:5:" из";s:2:"71";s:5:" Ñа";s:2:"72";s:5:"е д";s:2:"73";s:6:"ини";s:2:"74";s:5:"ки ";s:2:"75";s:6:"мин";s:2:"76";s:5:" ми";s:2:"77";s:5:"а б";s:2:"78";s:6:"ава";s:2:"79";s:5:"е в";s:2:"80";s:5:"ие ";s:2:"81";s:6:"пол";s:2:"82";s:6:"Ñтв";s:2:"83";s:5:"Ñ‚ н";s:2:"84";s:5:" въ";s:2:"85";s:5:" ÑÑ‚";s:2:"86";s:5:" то";s:2:"87";s:6:"аза";s:2:"88";s:5:"е о";s:2:"89";s:5:"ов ";s:2:"90";s:5:"ÑÑ‚ ";s:2:"91";s:5:"ÑŠÑ‚ ";s:2:"92";s:5:"и н";s:2:"93";s:6:"иÑÑ‚";s:2:"94";s:6:"нат";s:2:"95";s:5:"ра ";s:2:"96";s:5:" бъ";s:2:"97";s:5:" че";s:2:"98";s:6:"алн";s:2:"99";s:5:"е Ñ";s:3:"100";s:5:"ен ";s:3:"101";s:6:"еÑÑ‚";s:3:"102";s:5:"и д";s:3:"103";s:6:"лен";s:3:"104";s:6:"ниÑ";s:3:"105";s:5:"о о";s:3:"106";s:6:"ови";s:3:"107";s:5:" об";s:3:"108";s:5:" Ñл";s:3:"109";s:5:"а Ñ€";s:3:"110";s:6:"ато";s:3:"111";s:6:"кон";s:3:"112";s:6:"ноÑ";s:3:"113";s:6:"ров";s:3:"114";s:5:"ще ";s:3:"115";s:5:" ре";s:3:"116";s:4:" Ñ ";s:3:"117";s:5:" Ñп";s:3:"118";s:6:"ват";s:3:"119";s:6:"еше";s:3:"120";s:5:"и в";s:3:"121";s:6:"иет";s:3:"122";s:5:"о в";s:3:"123";s:6:"ове";s:3:"124";s:6:"Ñта";s:3:"125";s:5:"а к";s:3:"126";s:5:"а Ñ‚";s:3:"127";s:6:"дат";s:3:"128";s:6:"ент";s:3:"129";s:5:"ка ";s:3:"130";s:6:"лед";s:3:"131";s:6:"нет";s:3:"132";s:6:"ори";s:3:"133";s:6:"ÑÑ‚Ñ€";s:3:"134";s:6:"ÑÑ‚ÑŠ";s:3:"135";s:5:"ти ";s:3:"136";s:6:"Ñ‚ÑŠÑ€";s:3:"137";s:5:" те";s:3:"138";s:5:"а з";s:3:"139";s:5:"а м";s:3:"140";s:5:"ад ";s:3:"141";s:6:"ана";s:3:"142";s:6:"ено";s:3:"143";s:5:"и о";s:3:"144";s:6:"ина";s:3:"145";s:6:"ити";s:3:"146";s:5:"ма ";s:3:"147";s:6:"Ñка";s:3:"148";s:6:"Ñле";s:3:"149";s:6:"тво";s:3:"150";s:6:"тер";s:3:"151";s:6:"циÑ";s:3:"152";s:5:"ÑÑ‚ ";s:3:"153";s:5:" бе";s:3:"154";s:5:" де";s:3:"155";s:5:" па";s:3:"156";s:6:"ате";s:3:"157";s:6:"вен";s:3:"158";s:5:"ви ";s:3:"159";s:6:"вит";s:3:"160";s:5:"и з";s:3:"161";s:5:"и и";s:3:"162";s:6:"нар";s:3:"163";s:6:"нов";s:3:"164";s:6:"ова";s:3:"165";s:6:"пов";s:3:"166";s:6:"рез";s:3:"167";s:6:"рит";s:3:"168";s:5:"Ñа ";s:3:"169";s:6:"Ñта";s:3:"170";s:5:" го";s:3:"171";s:5:" ще";s:3:"172";s:6:"али";s:3:"173";s:5:"в п";s:3:"174";s:6:"гра";s:3:"175";s:5:"е и";s:3:"176";s:6:"еди";s:3:"177";s:6:"ели";s:3:"178";s:6:"или";s:3:"179";s:6:"каз";s:3:"180";s:6:"кит";s:3:"181";s:6:"лно";s:3:"182";s:6:"мен";s:3:"183";s:6:"оли";s:3:"184";s:6:"раз";s:3:"185";s:5:" ве";s:3:"186";s:5:" гр";s:3:"187";s:5:" им";s:3:"188";s:5:" ме";s:3:"189";s:5:" пъ";s:3:"190";s:6:"ави";s:3:"191";s:6:"ако";s:3:"192";s:6:"ача";s:3:"193";s:6:"вин";s:3:"194";s:5:"во ";s:3:"195";s:6:"гов";s:3:"196";s:6:"дан";s:3:"197";s:5:"ди ";s:3:"198";s:5:"до ";s:3:"199";s:5:"ед ";s:3:"200";s:6:"ери";s:3:"201";s:6:"еро";s:3:"202";s:6:"жда";s:3:"203";s:6:"ито";s:3:"204";s:6:"ков";s:3:"205";s:6:"кол";s:3:"206";s:6:"лни";s:3:"207";s:6:"мер";s:3:"208";s:6:"нач";s:3:"209";s:5:"о з";s:3:"210";s:6:"ола";s:3:"211";s:5:"он ";s:3:"212";s:6:"она";s:3:"213";s:6:"пра";s:3:"214";s:6:"рав";s:3:"215";s:6:"рем";s:3:"216";s:6:"ÑиÑ";s:3:"217";s:6:"Ñти";s:3:"218";s:5:"Ñ‚ п";s:3:"219";s:6:"тан";s:3:"220";s:5:"ха ";s:3:"221";s:5:"ше ";s:3:"222";s:6:"шен";s:3:"223";s:6:"ълг";s:3:"224";s:5:" ба";s:3:"225";s:5:" Ñи";s:3:"226";s:6:"аро";s:3:"227";s:6:"бъл";s:3:"228";s:5:"в Ñ€";s:3:"229";s:6:"гар";s:3:"230";s:5:"е е";s:3:"231";s:6:"елн";s:3:"232";s:6:"еме";s:3:"233";s:6:"ико";s:3:"234";s:6:"има";s:3:"235";s:5:"ко ";s:3:"236";s:6:"кои";s:3:"237";s:5:"ла ";s:3:"238";s:6:"лга";s:3:"239";s:5:"о д";s:3:"240";s:6:"ози";s:3:"241";s:6:"оит";s:3:"242";s:6:"под";s:3:"243";s:6:"реÑ";s:3:"244";s:6:"рие";s:3:"245";s:6:"Ñто";s:3:"246";s:5:"Ñ‚ к";s:3:"247";s:5:"Ñ‚ м";s:3:"248";s:5:"Ñ‚ Ñ";s:3:"249";s:6:"уÑÑ‚";s:3:"250";s:5:" би";s:3:"251";s:5:" дв";s:3:"252";s:5:" дъ";s:3:"253";s:5:" ма";s:3:"254";s:5:" мо";s:3:"255";s:5:" ни";s:3:"256";s:5:" оÑ";s:3:"257";s:6:"ала";s:3:"258";s:6:"анÑ";s:3:"259";s:6:"ара";s:3:"260";s:6:"ати";s:3:"261";s:6:"аци";s:3:"262";s:6:"беш";s:3:"263";s:6:"вър";s:3:"264";s:5:"е Ñ€";s:3:"265";s:6:"едв";s:3:"266";s:6:"ема";s:3:"267";s:6:"жав";s:3:"268";s:5:"и к";s:3:"269";s:6:"иал";s:3:"270";s:6:"ица";s:3:"271";s:6:"иче";s:3:"272";s:6:"киÑ";s:3:"273";s:6:"лит";s:3:"274";s:5:"о б";s:3:"275";s:6:"ово";s:3:"276";s:6:"оди";s:3:"277";s:6:"ока";s:3:"278";s:6:"поÑ";s:3:"279";s:6:"род";s:3:"280";s:6:"Ñед";s:3:"281";s:6:"Ñлу";s:3:"282";s:5:"Ñ‚ и";s:3:"283";s:6:"тов";s:3:"284";s:6:"ува";s:3:"285";s:6:"циа";s:3:"286";s:6:"чеÑ";s:3:"287";s:5:"Ñ Ð·";s:3:"288";s:5:" во";s:3:"289";s:5:" ил";s:3:"290";s:5:" Ñк";s:3:"291";s:5:" Ñ‚Ñ€";s:3:"292";s:5:" це";s:3:"293";s:6:"ами";s:3:"294";s:6:"ари";s:3:"295";s:6:"бат";s:3:"296";s:5:"би ";s:3:"297";s:6:"бра";s:3:"298";s:6:"бъд";s:3:"299";}s:7:"cebuano";a:300:{s:3:"ng ";s:1:"0";s:3:"sa ";s:1:"1";s:3:" sa";s:1:"2";s:3:"ang";s:1:"3";s:3:"ga ";s:1:"4";s:3:"nga";s:1:"5";s:3:" ka";s:1:"6";s:3:" ng";s:1:"7";s:3:"an ";s:1:"8";s:3:" an";s:1:"9";s:3:" na";s:2:"10";s:3:" ma";s:2:"11";s:3:" ni";s:2:"12";s:3:"a s";s:2:"13";s:3:"a n";s:2:"14";s:3:"on ";s:2:"15";s:3:" pa";s:2:"16";s:3:" si";s:2:"17";s:3:"a k";s:2:"18";s:3:"a m";s:2:"19";s:3:" ba";s:2:"20";s:3:"ong";s:2:"21";s:3:"a i";s:2:"22";s:3:"ila";s:2:"23";s:3:" mg";s:2:"24";s:3:"mga";s:2:"25";s:3:"a p";s:2:"26";s:3:"iya";s:2:"27";s:3:"a a";s:2:"28";s:3:"ay ";s:2:"29";s:3:"ka ";s:2:"30";s:3:"ala";s:2:"31";s:3:"ing";s:2:"32";s:3:"g m";s:2:"33";s:3:"n s";s:2:"34";s:3:"g n";s:2:"35";s:3:"lan";s:2:"36";s:3:" gi";s:2:"37";s:3:"na ";s:2:"38";s:3:"ni ";s:2:"39";s:3:"o s";s:2:"40";s:3:"g p";s:2:"41";s:3:"n n";s:2:"42";s:3:" da";s:2:"43";s:3:"ag ";s:2:"44";s:3:"pag";s:2:"45";s:3:"g s";s:2:"46";s:3:"yan";s:2:"47";s:3:"ayo";s:2:"48";s:3:"o n";s:2:"49";s:3:"si ";s:2:"50";s:3:" mo";s:2:"51";s:3:"a b";s:2:"52";s:3:"g a";s:2:"53";s:3:"ail";s:2:"54";s:3:"g b";s:2:"55";s:3:"han";s:2:"56";s:3:"a d";s:2:"57";s:3:"asu";s:2:"58";s:3:"nag";s:2:"59";s:3:"ya ";s:2:"60";s:3:"man";s:2:"61";s:3:"ne ";s:2:"62";s:3:"pan";s:2:"63";s:3:"kon";s:2:"64";s:3:" il";s:2:"65";s:3:" la";s:2:"66";s:3:"aka";s:2:"67";s:3:"ako";s:2:"68";s:3:"ana";s:2:"69";s:3:"bas";s:2:"70";s:3:"ko ";s:2:"71";s:3:"od ";s:2:"72";s:3:"yo ";s:2:"73";s:3:" di";s:2:"74";s:3:" ko";s:2:"75";s:3:" ug";s:2:"76";s:3:"a u";s:2:"77";s:3:"g k";s:2:"78";s:3:"kan";s:2:"79";s:3:"la ";s:2:"80";s:3:"len";s:2:"81";s:3:"sur";s:2:"82";s:3:"ug ";s:2:"83";s:3:" ai";s:2:"84";s:3:"apa";s:2:"85";s:3:"aw ";s:2:"86";s:3:"d s";s:2:"87";s:3:"g d";s:2:"88";s:3:"g g";s:2:"89";s:3:"ile";s:2:"90";s:3:"nin";s:2:"91";s:3:" iy";s:2:"92";s:3:" su";s:2:"93";s:3:"ene";s:2:"94";s:3:"og ";s:2:"95";s:3:"ot ";s:2:"96";s:3:"aba";s:2:"97";s:3:"aha";s:2:"98";s:3:"as ";s:2:"99";s:3:"imo";s:3:"100";s:3:" ki";s:3:"101";s:3:"a t";s:3:"102";s:3:"aga";s:3:"103";s:3:"ban";s:3:"104";s:3:"ero";s:3:"105";s:3:"nan";s:3:"106";s:3:"o k";s:3:"107";s:3:"ran";s:3:"108";s:3:"ron";s:3:"109";s:3:"sil";s:3:"110";s:3:"una";s:3:"111";s:3:"usa";s:3:"112";s:3:" us";s:3:"113";s:3:"a g";s:3:"114";s:3:"ahi";s:3:"115";s:3:"ani";s:3:"116";s:3:"er ";s:3:"117";s:3:"ha ";s:3:"118";s:3:"i a";s:3:"119";s:3:"rer";s:3:"120";s:3:"yon";s:3:"121";s:3:" pu";s:3:"122";s:3:"ini";s:3:"123";s:3:"nak";s:3:"124";s:3:"ro ";s:3:"125";s:3:"to ";s:3:"126";s:3:"ure";s:3:"127";s:3:" ed";s:3:"128";s:3:" og";s:3:"129";s:3:" wa";s:3:"130";s:3:"ili";s:3:"131";s:3:"mo ";s:3:"132";s:3:"n a";s:3:"133";s:3:"nd ";s:3:"134";s:3:"o a";s:3:"135";s:3:" ad";s:3:"136";s:3:" du";s:3:"137";s:3:" pr";s:3:"138";s:3:"aro";s:3:"139";s:3:"i s";s:3:"140";s:3:"ma ";s:3:"141";s:3:"n m";s:3:"142";s:3:"ulo";s:3:"143";s:3:"und";s:3:"144";s:3:" ta";s:3:"145";s:3:"ara";s:3:"146";s:3:"asa";s:3:"147";s:3:"ato";s:3:"148";s:3:"awa";s:3:"149";s:3:"dmu";s:3:"150";s:3:"e n";s:3:"151";s:3:"edm";s:3:"152";s:3:"ina";s:3:"153";s:3:"mak";s:3:"154";s:3:"mun";s:3:"155";s:3:"niy";s:3:"156";s:3:"san";s:3:"157";s:3:"wa ";s:3:"158";s:3:" tu";s:3:"159";s:3:" un";s:3:"160";s:3:"a l";s:3:"161";s:3:"bay";s:3:"162";s:3:"iga";s:3:"163";s:3:"ika";s:3:"164";s:3:"ita";s:3:"165";s:3:"kin";s:3:"166";s:3:"lis";s:3:"167";s:3:"may";s:3:"168";s:3:"os ";s:3:"169";s:3:" ar";s:3:"170";s:3:"ad ";s:3:"171";s:3:"ali";s:3:"172";s:3:"ama";s:3:"173";s:3:"ers";s:3:"174";s:3:"ipa";s:3:"175";s:3:"isa";s:3:"176";s:3:"mao";s:3:"177";s:3:"nim";s:3:"178";s:3:"t s";s:3:"179";s:3:"tin";s:3:"180";s:3:" ak";s:3:"181";s:3:" ap";s:3:"182";s:3:" hi";s:3:"183";s:3:"abo";s:3:"184";s:3:"agp";s:3:"185";s:3:"ano";s:3:"186";s:3:"ata";s:3:"187";s:3:"g i";s:3:"188";s:3:"gan";s:3:"189";s:3:"gka";s:3:"190";s:3:"gpa";s:3:"191";s:3:"i m";s:3:"192";s:3:"iha";s:3:"193";s:3:"k s";s:3:"194";s:3:"law";s:3:"195";s:3:"or ";s:3:"196";s:3:"rs ";s:3:"197";s:3:"siy";s:3:"198";s:3:"tag";s:3:"199";s:3:" al";s:3:"200";s:3:" at";s:3:"201";s:3:" ha";s:3:"202";s:3:" hu";s:3:"203";s:3:" im";s:3:"204";s:3:"a h";s:3:"205";s:3:"bu ";s:3:"206";s:3:"e s";s:3:"207";s:3:"gma";s:3:"208";s:3:"kas";s:3:"209";s:3:"lag";s:3:"210";s:3:"mon";s:3:"211";s:3:"nah";s:3:"212";s:3:"ngo";s:3:"213";s:3:"r s";s:3:"214";s:3:"ra ";s:3:"215";s:3:"sab";s:3:"216";s:3:"sam";s:3:"217";s:3:"sul";s:3:"218";s:3:"uba";s:3:"219";s:3:"uha";s:3:"220";s:3:" lo";s:3:"221";s:3:" re";s:3:"222";s:3:"ada";s:3:"223";s:3:"aki";s:3:"224";s:3:"aya";s:3:"225";s:3:"bah";s:3:"226";s:3:"ce ";s:3:"227";s:3:"d n";s:3:"228";s:3:"lab";s:3:"229";s:3:"pa ";s:3:"230";s:3:"pak";s:3:"231";s:3:"s n";s:3:"232";s:3:"s s";s:3:"233";s:3:"tan";s:3:"234";s:3:"taw";s:3:"235";s:3:"te ";s:3:"236";s:3:"uma";s:3:"237";s:3:"ura";s:3:"238";s:3:" in";s:3:"239";s:3:" lu";s:3:"240";s:3:"a c";s:3:"241";s:3:"abi";s:3:"242";s:3:"at ";s:3:"243";s:3:"awo";s:3:"244";s:3:"bat";s:3:"245";s:3:"dal";s:3:"246";s:3:"dla";s:3:"247";s:3:"ele";s:3:"248";s:3:"g t";s:3:"249";s:3:"g u";s:3:"250";s:3:"gay";s:3:"251";s:3:"go ";s:3:"252";s:3:"hab";s:3:"253";s:3:"hin";s:3:"254";s:3:"i e";s:3:"255";s:3:"i n";s:3:"256";s:3:"kab";s:3:"257";s:3:"kap";s:3:"258";s:3:"lay";s:3:"259";s:3:"lin";s:3:"260";s:3:"nil";s:3:"261";s:3:"pam";s:3:"262";s:3:"pas";s:3:"263";s:3:"pro";s:3:"264";s:3:"pul";s:3:"265";s:3:"ta ";s:3:"266";s:3:"ton";s:3:"267";s:3:"uga";s:3:"268";s:3:"ugm";s:3:"269";s:3:"unt";s:3:"270";s:3:" co";s:3:"271";s:3:" gu";s:3:"272";s:3:" mi";s:3:"273";s:3:" pi";s:3:"274";s:3:" ti";s:3:"275";s:3:"a o";s:3:"276";s:3:"abu";s:3:"277";s:3:"adl";s:3:"278";s:3:"ado";s:3:"279";s:3:"agh";s:3:"280";s:3:"agk";s:3:"281";s:3:"ao ";s:3:"282";s:3:"art";s:3:"283";s:3:"bal";s:3:"284";s:3:"cit";s:3:"285";s:3:"di ";s:3:"286";s:3:"dto";s:3:"287";s:3:"dun";s:3:"288";s:3:"ent";s:3:"289";s:3:"g e";s:3:"290";s:3:"gon";s:3:"291";s:3:"gug";s:3:"292";s:3:"ia ";s:3:"293";s:3:"iba";s:3:"294";s:3:"ice";s:3:"295";s:3:"in ";s:3:"296";s:3:"inu";s:3:"297";s:3:"it ";s:3:"298";s:3:"kaa";s:3:"299";}s:8:"croatian";a:300:{s:3:"je ";s:1:"0";s:3:" na";s:1:"1";s:3:" pr";s:1:"2";s:3:" po";s:1:"3";s:3:"na ";s:1:"4";s:3:" je";s:1:"5";s:3:" za";s:1:"6";s:3:"ije";s:1:"7";s:3:"ne ";s:1:"8";s:3:" i ";s:1:"9";s:3:"ti ";s:2:"10";s:3:"da ";s:2:"11";s:3:" ko";s:2:"12";s:3:" ne";s:2:"13";s:3:"li ";s:2:"14";s:3:" bi";s:2:"15";s:3:" da";s:2:"16";s:3:" u ";s:2:"17";s:3:"ma ";s:2:"18";s:3:"mo ";s:2:"19";s:3:"a n";s:2:"20";s:3:"ih ";s:2:"21";s:3:"za ";s:2:"22";s:3:"a s";s:2:"23";s:3:"ko ";s:2:"24";s:3:"i s";s:2:"25";s:3:"a p";s:2:"26";s:3:"koj";s:2:"27";s:3:"pro";s:2:"28";s:3:"ju ";s:2:"29";s:3:"se ";s:2:"30";s:3:" go";s:2:"31";s:3:"ost";s:2:"32";s:3:"to ";s:2:"33";s:3:"va ";s:2:"34";s:3:" do";s:2:"35";s:3:" to";s:2:"36";s:3:"e n";s:2:"37";s:3:"i p";s:2:"38";s:3:" od";s:2:"39";s:3:" ra";s:2:"40";s:3:"no ";s:2:"41";s:3:"ako";s:2:"42";s:3:"ka ";s:2:"43";s:3:"ni ";s:2:"44";s:3:" ka";s:2:"45";s:3:" se";s:2:"46";s:3:" mo";s:2:"47";s:3:" st";s:2:"48";s:3:"i n";s:2:"49";s:3:"ima";s:2:"50";s:3:"ja ";s:2:"51";s:3:"pri";s:2:"52";s:3:"vat";s:2:"53";s:3:"sta";s:2:"54";s:3:" su";s:2:"55";s:3:"ati";s:2:"56";s:3:"e p";s:2:"57";s:3:"ta ";s:2:"58";s:3:"tsk";s:2:"59";s:3:"e i";s:2:"60";s:3:"nij";s:2:"61";s:3:" tr";s:2:"62";s:3:"cij";s:2:"63";s:3:"jen";s:2:"64";s:3:"nos";s:2:"65";s:3:"o s";s:2:"66";s:3:" iz";s:2:"67";s:3:"om ";s:2:"68";s:3:"tro";s:2:"69";s:3:"ili";s:2:"70";s:3:"iti";s:2:"71";s:3:"pos";s:2:"72";s:3:" al";s:2:"73";s:3:"a i";s:2:"74";s:3:"a o";s:2:"75";s:3:"e s";s:2:"76";s:3:"ija";s:2:"77";s:3:"ini";s:2:"78";s:3:"pre";s:2:"79";s:3:"str";s:2:"80";s:3:"la ";s:2:"81";s:3:"og ";s:2:"82";s:3:"ovo";s:2:"83";s:3:" sv";s:2:"84";s:3:"ekt";s:2:"85";s:3:"nje";s:2:"86";s:3:"o p";s:2:"87";s:3:"odi";s:2:"88";s:3:"rva";s:2:"89";s:3:" ni";s:2:"90";s:3:"ali";s:2:"91";s:3:"min";s:2:"92";s:3:"rij";s:2:"93";s:3:"a t";s:2:"94";s:3:"a z";s:2:"95";s:3:"ats";s:2:"96";s:3:"iva";s:2:"97";s:3:"o t";s:2:"98";s:3:"od ";s:2:"99";s:3:"oje";s:3:"100";s:3:"ra ";s:3:"101";s:3:" hr";s:3:"102";s:3:"a m";s:3:"103";s:3:"a u";s:3:"104";s:3:"hrv";s:3:"105";s:3:"im ";s:3:"106";s:3:"ke ";s:3:"107";s:3:"o i";s:3:"108";s:3:"ovi";s:3:"109";s:3:"red";s:3:"110";s:3:"riv";s:3:"111";s:3:"te ";s:3:"112";s:3:"bi ";s:3:"113";s:3:"e o";s:3:"114";s:3:"god";s:3:"115";s:3:"i d";s:3:"116";s:3:"lek";s:3:"117";s:3:"umi";s:3:"118";s:3:"zvo";s:3:"119";s:3:"din";s:3:"120";s:3:"e u";s:3:"121";s:3:"ene";s:3:"122";s:3:"jed";s:3:"123";s:3:"ji ";s:3:"124";s:3:"lje";s:3:"125";s:3:"nog";s:3:"126";s:3:"su ";s:3:"127";s:3:" a ";s:3:"128";s:3:" el";s:3:"129";s:3:" mi";s:3:"130";s:3:" o ";s:3:"131";s:3:"a d";s:3:"132";s:3:"alu";s:3:"133";s:3:"ele";s:3:"134";s:3:"i u";s:3:"135";s:3:"izv";s:3:"136";s:3:"ktr";s:3:"137";s:3:"lum";s:3:"138";s:3:"o d";s:3:"139";s:3:"ori";s:3:"140";s:3:"rad";s:3:"141";s:3:"sto";s:3:"142";s:3:"a k";s:3:"143";s:3:"anj";s:3:"144";s:3:"ava";s:3:"145";s:3:"e k";s:3:"146";s:3:"men";s:3:"147";s:3:"nic";s:3:"148";s:3:"o j";s:3:"149";s:3:"oj ";s:3:"150";s:3:"ove";s:3:"151";s:3:"ski";s:3:"152";s:3:"tvr";s:3:"153";s:3:"una";s:3:"154";s:3:"vor";s:3:"155";s:3:" di";s:3:"156";s:3:" no";s:3:"157";s:3:" s ";s:3:"158";s:3:" ta";s:3:"159";s:3:" tv";s:3:"160";s:3:"i i";s:3:"161";s:3:"i o";s:3:"162";s:3:"kak";s:3:"163";s:4:"roÅ¡";s:3:"164";s:3:"sko";s:3:"165";s:3:"vod";s:3:"166";s:3:" sa";s:3:"167";s:4:" će";s:3:"168";s:3:"a b";s:3:"169";s:3:"adi";s:3:"170";s:3:"amo";s:3:"171";s:3:"eni";s:3:"172";s:3:"gov";s:3:"173";s:3:"iju";s:3:"174";s:3:"ku ";s:3:"175";s:3:"o n";s:3:"176";s:3:"ora";s:3:"177";s:3:"rav";s:3:"178";s:3:"ruj";s:3:"179";s:3:"smo";s:3:"180";s:3:"tav";s:3:"181";s:3:"tru";s:3:"182";s:3:"u p";s:3:"183";s:3:"ve ";s:3:"184";s:3:" in";s:3:"185";s:3:" pl";s:3:"186";s:3:"aci";s:3:"187";s:3:"bit";s:3:"188";s:3:"de ";s:3:"189";s:4:"diÅ¡";s:3:"190";s:3:"ema";s:3:"191";s:3:"i m";s:3:"192";s:3:"ika";s:3:"193";s:4:"iÅ¡t";s:3:"194";s:3:"jer";s:3:"195";s:3:"ki ";s:3:"196";s:3:"mog";s:3:"197";s:3:"nik";s:3:"198";s:3:"nov";s:3:"199";s:3:"nu ";s:3:"200";s:3:"oji";s:3:"201";s:3:"oli";s:3:"202";s:3:"pla";s:3:"203";s:3:"pod";s:3:"204";s:3:"st ";s:3:"205";s:3:"sti";s:3:"206";s:3:"tra";s:3:"207";s:3:"tre";s:3:"208";s:3:"vo ";s:3:"209";s:3:" sm";s:3:"210";s:4:" Å¡t";s:3:"211";s:3:"dan";s:3:"212";s:3:"e z";s:3:"213";s:3:"i t";s:3:"214";s:3:"io ";s:3:"215";s:3:"ist";s:3:"216";s:3:"kon";s:3:"217";s:3:"lo ";s:3:"218";s:3:"stv";s:3:"219";s:3:"u s";s:3:"220";s:3:"uje";s:3:"221";s:3:"ust";s:3:"222";s:4:"će ";s:3:"223";s:4:"ći ";s:3:"224";s:4:"Å¡to";s:3:"225";s:3:" dr";s:3:"226";s:3:" im";s:3:"227";s:3:" li";s:3:"228";s:3:"ada";s:3:"229";s:3:"aft";s:3:"230";s:3:"ani";s:3:"231";s:3:"ao ";s:3:"232";s:3:"ars";s:3:"233";s:3:"ata";s:3:"234";s:3:"e t";s:3:"235";s:3:"emo";s:3:"236";s:3:"i k";s:3:"237";s:3:"ine";s:3:"238";s:3:"jem";s:3:"239";s:3:"kov";s:3:"240";s:3:"lik";s:3:"241";s:3:"lji";s:3:"242";s:3:"mje";s:3:"243";s:3:"naf";s:3:"244";s:3:"ner";s:3:"245";s:3:"nih";s:3:"246";s:3:"nja";s:3:"247";s:3:"ogo";s:3:"248";s:3:"oiz";s:3:"249";s:3:"ome";s:3:"250";s:3:"pot";s:3:"251";s:3:"ran";s:3:"252";s:3:"ri ";s:3:"253";s:3:"roi";s:3:"254";s:3:"rtk";s:3:"255";s:3:"ska";s:3:"256";s:3:"ter";s:3:"257";s:3:"u i";s:3:"258";s:3:"u o";s:3:"259";s:3:"vi ";s:3:"260";s:3:"vrt";s:3:"261";s:3:" me";s:3:"262";s:3:" ug";s:3:"263";s:3:"ak ";s:3:"264";s:3:"ama";s:3:"265";s:4:"drž";s:3:"266";s:3:"e e";s:3:"267";s:3:"e g";s:3:"268";s:3:"e m";s:3:"269";s:3:"em ";s:3:"270";s:3:"eme";s:3:"271";s:3:"enj";s:3:"272";s:3:"ent";s:3:"273";s:3:"er ";s:3:"274";s:3:"ere";s:3:"275";s:3:"erg";s:3:"276";s:3:"eur";s:3:"277";s:3:"go ";s:3:"278";s:3:"i b";s:3:"279";s:3:"i z";s:3:"280";s:3:"jet";s:3:"281";s:3:"ksi";s:3:"282";s:3:"o u";s:3:"283";s:3:"oda";s:3:"284";s:3:"ona";s:3:"285";s:3:"pra";s:3:"286";s:3:"reb";s:3:"287";s:3:"rem";s:3:"288";s:3:"rop";s:3:"289";s:3:"tri";s:3:"290";s:4:"žav";s:3:"291";s:3:" ci";s:3:"292";s:3:" eu";s:3:"293";s:3:" re";s:3:"294";s:3:" te";s:3:"295";s:3:" uv";s:3:"296";s:3:" ve";s:3:"297";s:3:"aju";s:3:"298";s:3:"an ";s:3:"299";}s:5:"czech";a:300:{s:3:" pr";s:1:"0";s:3:" po";s:1:"1";s:4:"ní ";s:1:"2";s:3:"pro";s:1:"3";s:3:" na";s:1:"4";s:3:"na ";s:1:"5";s:4:" pÅ™";s:1:"6";s:3:"ch ";s:1:"7";s:3:" je";s:1:"8";s:3:" ne";s:1:"9";s:4:"že ";s:2:"10";s:4:" že";s:2:"11";s:3:" se";s:2:"12";s:3:" do";s:2:"13";s:3:" ro";s:2:"14";s:3:" st";s:2:"15";s:3:" v ";s:2:"16";s:3:" ve";s:2:"17";s:4:"pÅ™e";s:2:"18";s:3:"se ";s:2:"19";s:3:"ho ";s:2:"20";s:3:"sta";s:2:"21";s:3:" to";s:2:"22";s:3:" vy";s:2:"23";s:3:" za";s:2:"24";s:3:"ou ";s:2:"25";s:3:" a ";s:2:"26";s:3:"to ";s:2:"27";s:3:" by";s:2:"28";s:3:"la ";s:2:"29";s:3:"ce ";s:2:"30";s:3:"e v";s:2:"31";s:3:"ist";s:2:"32";s:3:"le ";s:2:"33";s:3:"pod";s:2:"34";s:4:"í p";s:2:"35";s:3:" vl";s:2:"36";s:3:"e n";s:2:"37";s:3:"e s";s:2:"38";s:3:"je ";s:2:"39";s:4:"ké ";s:2:"40";s:3:"by ";s:2:"41";s:3:"em ";s:2:"42";s:4:"ých";s:2:"43";s:3:" od";s:2:"44";s:3:"ova";s:2:"45";s:4:"Å™ed";s:2:"46";s:3:"dy ";s:2:"47";s:4:"ení";s:2:"48";s:3:"kon";s:2:"49";s:3:"li ";s:2:"50";s:4:"nÄ› ";s:2:"51";s:3:"str";s:2:"52";s:4:" zá";s:2:"53";s:3:"ve ";s:2:"54";s:3:" ka";s:2:"55";s:3:" sv";s:2:"56";s:3:"e p";s:2:"57";s:3:"it ";s:2:"58";s:4:"lád";s:2:"59";s:3:"oho";s:2:"60";s:3:"rov";s:2:"61";s:3:"roz";s:2:"62";s:3:"ter";s:2:"63";s:4:"vlá";s:2:"64";s:4:"ím ";s:2:"65";s:3:" ko";s:2:"66";s:3:"hod";s:2:"67";s:3:"nis";s:2:"68";s:5:"pří";s:2:"69";s:4:"ský";s:2:"70";s:3:" mi";s:2:"71";s:3:" ob";s:2:"72";s:3:" so";s:2:"73";s:3:"a p";s:2:"74";s:3:"ali";s:2:"75";s:3:"bud";s:2:"76";s:3:"edn";s:2:"77";s:3:"ick";s:2:"78";s:3:"kte";s:2:"79";s:3:"ku ";s:2:"80";s:3:"o s";s:2:"81";s:3:"al ";s:2:"82";s:3:"ci ";s:2:"83";s:3:"e t";s:2:"84";s:3:"il ";s:2:"85";s:3:"ny ";s:2:"86";s:4:"né ";s:2:"87";s:3:"odl";s:2:"88";s:4:"ová";s:2:"89";s:3:"rot";s:2:"90";s:3:"sou";s:2:"91";s:5:"ání";s:2:"92";s:3:" bu";s:2:"93";s:3:" mo";s:2:"94";s:3:" o ";s:2:"95";s:3:"ast";s:2:"96";s:3:"byl";s:2:"97";s:3:"de ";s:2:"98";s:3:"ek ";s:2:"99";s:3:"ost";s:3:"100";s:4:" mí";s:3:"101";s:3:" ta";s:3:"102";s:3:"es ";s:3:"103";s:3:"jed";s:3:"104";s:3:"ky ";s:3:"105";s:3:"las";s:3:"106";s:3:"m p";s:3:"107";s:3:"nes";s:3:"108";s:4:"ním";s:3:"109";s:3:"ran";s:3:"110";s:3:"rem";s:3:"111";s:3:"ros";s:3:"112";s:4:"ého";s:3:"113";s:3:" de";s:3:"114";s:3:" kt";s:3:"115";s:3:" ni";s:3:"116";s:3:" si";s:3:"117";s:4:" vý";s:3:"118";s:3:"at ";s:3:"119";s:4:"jí ";s:3:"120";s:4:"ký ";s:3:"121";s:3:"mi ";s:3:"122";s:3:"pre";s:3:"123";s:3:"tak";s:3:"124";s:3:"tan";s:3:"125";s:3:"y v";s:3:"126";s:4:"Å™ek";s:3:"127";s:3:" ch";s:3:"128";s:3:" li";s:3:"129";s:4:" ná";s:3:"130";s:3:" pa";s:3:"131";s:4:" Å™e";s:3:"132";s:3:"da ";s:3:"133";s:3:"dle";s:3:"134";s:3:"dne";s:3:"135";s:3:"i p";s:3:"136";s:3:"i v";s:3:"137";s:3:"ly ";s:3:"138";s:3:"min";s:3:"139";s:3:"o n";s:3:"140";s:3:"o v";s:3:"141";s:3:"pol";s:3:"142";s:3:"tra";s:3:"143";s:3:"val";s:3:"144";s:4:"vní";s:3:"145";s:4:"ích";s:3:"146";s:4:"ý p";s:3:"147";s:4:"Å™ej";s:3:"148";s:3:" ce";s:3:"149";s:3:" kd";s:3:"150";s:3:" le";s:3:"151";s:3:"a s";s:3:"152";s:3:"a z";s:3:"153";s:3:"cen";s:3:"154";s:3:"e k";s:3:"155";s:3:"eds";s:3:"156";s:3:"ekl";s:3:"157";s:3:"emi";s:3:"158";s:3:"kl ";s:3:"159";s:3:"lat";s:3:"160";s:3:"lo ";s:3:"161";s:4:"mié";s:3:"162";s:3:"nov";s:3:"163";s:3:"pra";s:3:"164";s:3:"sku";s:3:"165";s:4:"ské";s:3:"166";s:3:"sti";s:3:"167";s:3:"tav";s:3:"168";s:3:"ti ";s:3:"169";s:3:"ty ";s:3:"170";s:4:"ván";s:3:"171";s:4:"vé ";s:3:"172";s:3:"y n";s:3:"173";s:3:"y s";s:3:"174";s:4:"í s";s:3:"175";s:4:"í v";s:3:"176";s:4:"Ä› p";s:3:"177";s:3:" dn";s:3:"178";s:4:" nÄ›";s:3:"179";s:3:" sp";s:3:"180";s:4:" Äs";s:3:"181";s:3:"a n";s:3:"182";s:3:"a t";s:3:"183";s:3:"ak ";s:3:"184";s:4:"dní";s:3:"185";s:3:"doh";s:3:"186";s:3:"e b";s:3:"187";s:3:"e m";s:3:"188";s:3:"ejn";s:3:"189";s:3:"ena";s:3:"190";s:3:"est";s:3:"191";s:3:"ini";s:3:"192";s:3:"m z";s:3:"193";s:3:"nal";s:3:"194";s:3:"nou";s:3:"195";s:4:"ná ";s:3:"196";s:3:"ovi";s:3:"197";s:4:"ové";s:3:"198";s:4:"ový";s:3:"199";s:3:"rsk";s:3:"200";s:4:"stá";s:3:"201";s:4:"tí ";s:3:"202";s:4:"tÅ™e";s:3:"203";s:4:"tů ";s:3:"204";s:3:"ude";s:3:"205";s:3:"za ";s:3:"206";s:4:"é p";s:3:"207";s:4:"ém ";s:3:"208";s:4:"í d";s:3:"209";s:3:" ir";s:3:"210";s:3:" zv";s:3:"211";s:3:"ale";s:3:"212";s:4:"anÄ›";s:3:"213";s:3:"ave";s:3:"214";s:4:"cké";s:3:"215";s:3:"den";s:3:"216";s:3:"e z";s:3:"217";s:3:"ech";s:3:"218";s:3:"en ";s:3:"219";s:4:"erý";s:3:"220";s:3:"hla";s:3:"221";s:3:"i s";s:3:"222";s:4:"iér";s:3:"223";s:3:"lov";s:3:"224";s:3:"mu ";s:3:"225";s:3:"neb";s:3:"226";s:3:"nic";s:3:"227";s:3:"o b";s:3:"228";s:3:"o m";s:3:"229";s:3:"pad";s:3:"230";s:3:"pot";s:3:"231";s:3:"rav";s:3:"232";s:3:"rop";s:3:"233";s:4:"rý ";s:3:"234";s:3:"sed";s:3:"235";s:3:"si ";s:3:"236";s:3:"t p";s:3:"237";s:3:"tic";s:3:"238";s:3:"tu ";s:3:"239";s:4:"tÄ› ";s:3:"240";s:3:"u p";s:3:"241";s:3:"u v";s:3:"242";s:4:"vá ";s:3:"243";s:5:"výš";s:3:"244";s:4:"zvý";s:3:"245";s:5:"Äní";s:3:"246";s:5:"ří ";s:3:"247";s:4:"ům ";s:3:"248";s:3:" bl";s:3:"249";s:3:" br";s:3:"250";s:3:" ho";s:3:"251";s:3:" ja";s:3:"252";s:3:" re";s:3:"253";s:3:" s ";s:3:"254";s:3:" z ";s:3:"255";s:3:" zd";s:3:"256";s:3:"a v";s:3:"257";s:3:"ani";s:3:"258";s:3:"ato";s:3:"259";s:3:"bla";s:3:"260";s:3:"bri";s:3:"261";s:4:"eÄn";s:3:"262";s:4:"eÅ™e";s:3:"263";s:3:"h v";s:3:"264";s:3:"i n";s:3:"265";s:3:"ie ";s:3:"266";s:3:"ila";s:3:"267";s:3:"irs";s:3:"268";s:3:"ite";s:3:"269";s:3:"kov";s:3:"270";s:3:"nos";s:3:"271";s:3:"o o";s:3:"272";s:3:"o p";s:3:"273";s:3:"oce";s:3:"274";s:3:"ody";s:3:"275";s:3:"ohl";s:3:"276";s:3:"oli";s:3:"277";s:3:"ovo";s:3:"278";s:3:"pla";s:3:"279";s:4:"poÄ";s:3:"280";s:4:"prá";s:3:"281";s:3:"ra ";s:3:"282";s:3:"rit";s:3:"283";s:3:"rod";s:3:"284";s:3:"ry ";s:3:"285";s:3:"sd ";s:3:"286";s:3:"sko";s:3:"287";s:3:"ssd";s:3:"288";s:3:"tel";s:3:"289";s:3:"u s";s:3:"290";s:3:"vat";s:3:"291";s:4:"veÅ™";s:3:"292";s:3:"vit";s:3:"293";s:3:"vla";s:3:"294";s:3:"y p";s:3:"295";s:4:"áln";s:3:"296";s:4:"Äss";s:3:"297";s:4:"Å¡en";s:3:"298";s:3:" al";s:3:"299";}s:6:"danish";a:300:{s:3:"er ";s:1:"0";s:3:"en ";s:1:"1";s:3:" de";s:1:"2";s:3:"et ";s:1:"3";s:3:"der";s:1:"4";s:3:"de ";s:1:"5";s:3:"for";s:1:"6";s:3:" fo";s:1:"7";s:3:" i ";s:1:"8";s:3:"at ";s:1:"9";s:3:" at";s:2:"10";s:3:"re ";s:2:"11";s:3:"det";s:2:"12";s:3:" ha";s:2:"13";s:3:"nde";s:2:"14";s:3:"ere";s:2:"15";s:3:"ing";s:2:"16";s:3:"den";s:2:"17";s:3:" me";s:2:"18";s:3:" og";s:2:"19";s:3:"ger";s:2:"20";s:3:"ter";s:2:"21";s:3:" er";s:2:"22";s:3:" si";s:2:"23";s:3:"and";s:2:"24";s:3:" af";s:2:"25";s:3:"or ";s:2:"26";s:3:" st";s:2:"27";s:3:" ti";s:2:"28";s:3:" en";s:2:"29";s:3:"og ";s:2:"30";s:3:"ar ";s:2:"31";s:3:"il ";s:2:"32";s:3:"r s";s:2:"33";s:3:"ige";s:2:"34";s:3:"til";s:2:"35";s:3:"ke ";s:2:"36";s:3:"r e";s:2:"37";s:3:"af ";s:2:"38";s:3:"kke";s:2:"39";s:3:" ma";s:2:"40";s:4:" pÃ¥";s:2:"41";s:3:"om ";s:2:"42";s:4:"pÃ¥ ";s:2:"43";s:3:"ed ";s:2:"44";s:3:"ge ";s:2:"45";s:3:"end";s:2:"46";s:3:"nge";s:2:"47";s:3:"t s";s:2:"48";s:3:"e s";s:2:"49";s:3:"ler";s:2:"50";s:3:" sk";s:2:"51";s:3:"els";s:2:"52";s:3:"ern";s:2:"53";s:3:"sig";s:2:"54";s:3:"ne ";s:2:"55";s:3:"lig";s:2:"56";s:3:"r d";s:2:"57";s:3:"ska";s:2:"58";s:3:" vi";s:2:"59";s:3:"har";s:2:"60";s:3:" be";s:2:"61";s:3:" se";s:2:"62";s:3:"an ";s:2:"63";s:3:"ikk";s:2:"64";s:3:"lle";s:2:"65";s:3:"gen";s:2:"66";s:3:"n f";s:2:"67";s:3:"ste";s:2:"68";s:3:"t a";s:2:"69";s:3:"t d";s:2:"70";s:3:"rin";s:2:"71";s:3:" ik";s:2:"72";s:3:"es ";s:2:"73";s:3:"ng ";s:2:"74";s:3:"ver";s:2:"75";s:3:"r b";s:2:"76";s:3:"sen";s:2:"77";s:3:"ede";s:2:"78";s:3:"men";s:2:"79";s:3:"r i";s:2:"80";s:3:" he";s:2:"81";s:3:" et";s:2:"82";s:3:"ig ";s:2:"83";s:3:"lan";s:2:"84";s:3:"med";s:2:"85";s:3:"nd ";s:2:"86";s:3:"rne";s:2:"87";s:3:" da";s:2:"88";s:3:" in";s:2:"89";s:3:"e t";s:2:"90";s:3:"mme";s:2:"91";s:3:"und";s:2:"92";s:3:" om";s:2:"93";s:3:"e e";s:2:"94";s:3:"e m";s:2:"95";s:3:"her";s:2:"96";s:3:"le ";s:2:"97";s:3:"r f";s:2:"98";s:3:"t f";s:2:"99";s:4:"sÃ¥ ";s:3:"100";s:3:"te ";s:3:"101";s:3:" so";s:3:"102";s:3:"ele";s:3:"103";s:3:"t e";s:3:"104";s:3:" ko";s:3:"105";s:3:"est";s:3:"106";s:3:"ske";s:3:"107";s:3:" bl";s:3:"108";s:3:"e f";s:3:"109";s:3:"ekt";s:3:"110";s:3:"mar";s:3:"111";s:3:"bru";s:3:"112";s:3:"e a";s:3:"113";s:3:"el ";s:3:"114";s:3:"ers";s:3:"115";s:3:"ret";s:3:"116";s:3:"som";s:3:"117";s:3:"tte";s:3:"118";s:3:"ve ";s:3:"119";s:3:" la";s:3:"120";s:3:" ud";s:3:"121";s:3:" ve";s:3:"122";s:3:"age";s:3:"123";s:3:"e d";s:3:"124";s:3:"e h";s:3:"125";s:3:"lse";s:3:"126";s:3:"man";s:3:"127";s:3:"rug";s:3:"128";s:3:"sel";s:3:"129";s:3:"ser";s:3:"130";s:3:" fi";s:3:"131";s:3:" op";s:3:"132";s:3:" pr";s:3:"133";s:3:"dt ";s:3:"134";s:3:"e i";s:3:"135";s:3:"n m";s:3:"136";s:3:"r m";s:3:"137";s:3:" an";s:3:"138";s:3:" re";s:3:"139";s:3:" sa";s:3:"140";s:3:"ion";s:3:"141";s:3:"ner";s:3:"142";s:3:"res";s:3:"143";s:3:"t i";s:3:"144";s:3:"get";s:3:"145";s:3:"n s";s:3:"146";s:3:"one";s:3:"147";s:3:"orb";s:3:"148";s:3:"t h";s:3:"149";s:3:"vis";s:3:"150";s:4:"Ã¥r ";s:3:"151";s:3:" fr";s:3:"152";s:3:"bil";s:3:"153";s:3:"e k";s:3:"154";s:3:"ens";s:3:"155";s:3:"ind";s:3:"156";s:3:"omm";s:3:"157";s:3:"t m";s:3:"158";s:3:" hv";s:3:"159";s:3:" je";s:3:"160";s:3:"dan";s:3:"161";s:3:"ent";s:3:"162";s:3:"fte";s:3:"163";s:3:"nin";s:3:"164";s:3:" mi";s:3:"165";s:3:"e o";s:3:"166";s:3:"e p";s:3:"167";s:3:"n o";s:3:"168";s:3:"nte";s:3:"169";s:3:" ku";s:3:"170";s:3:"ell";s:3:"171";s:3:"nas";s:3:"172";s:3:"ore";s:3:"173";s:3:"r h";s:3:"174";s:3:"r k";s:3:"175";s:3:"sta";s:3:"176";s:3:"sto";s:3:"177";s:3:"dag";s:3:"178";s:3:"eri";s:3:"179";s:3:"kun";s:3:"180";s:3:"lde";s:3:"181";s:3:"mer";s:3:"182";s:3:"r a";s:3:"183";s:3:"r v";s:3:"184";s:3:"rek";s:3:"185";s:3:"rer";s:3:"186";s:3:"t o";s:3:"187";s:3:"tor";s:3:"188";s:4:"tør";s:3:"189";s:4:" fÃ¥";s:3:"190";s:4:" mÃ¥";s:3:"191";s:3:" to";s:3:"192";s:3:"boe";s:3:"193";s:3:"che";s:3:"194";s:3:"e v";s:3:"195";s:3:"i d";s:3:"196";s:3:"ive";s:3:"197";s:3:"kab";s:3:"198";s:3:"ns ";s:3:"199";s:3:"oel";s:3:"200";s:3:"se ";s:3:"201";s:3:"t v";s:3:"202";s:3:" al";s:3:"203";s:3:" bo";s:3:"204";s:3:" un";s:3:"205";s:3:"ans";s:3:"206";s:3:"dre";s:3:"207";s:3:"ire";s:3:"208";s:4:"køb";s:3:"209";s:3:"ors";s:3:"210";s:3:"ove";s:3:"211";s:3:"ren";s:3:"212";s:3:"t b";s:3:"213";s:4:"ør ";s:3:"214";s:3:" ka";s:3:"215";s:3:"ald";s:3:"216";s:3:"bet";s:3:"217";s:3:"gt ";s:3:"218";s:3:"isk";s:3:"219";s:3:"kal";s:3:"220";s:3:"kom";s:3:"221";s:3:"lev";s:3:"222";s:3:"n d";s:3:"223";s:3:"n i";s:3:"224";s:3:"pri";s:3:"225";s:3:"r p";s:3:"226";s:3:"rbr";s:3:"227";s:4:"søg";s:3:"228";s:3:"tel";s:3:"229";s:4:" sÃ¥";s:3:"230";s:3:" te";s:3:"231";s:3:" va";s:3:"232";s:3:"al ";s:3:"233";s:3:"dir";s:3:"234";s:3:"eje";s:3:"235";s:3:"fis";s:3:"236";s:4:"gsÃ¥";s:3:"237";s:3:"isc";s:3:"238";s:3:"jer";s:3:"239";s:3:"ker";s:3:"240";s:3:"ogs";s:3:"241";s:3:"sch";s:3:"242";s:3:"st ";s:3:"243";s:3:"t k";s:3:"244";s:3:"uge";s:3:"245";s:3:" di";s:3:"246";s:3:"ag ";s:3:"247";s:3:"d a";s:3:"248";s:3:"g i";s:3:"249";s:3:"ill";s:3:"250";s:3:"l a";s:3:"251";s:3:"lsk";s:3:"252";s:3:"n a";s:3:"253";s:3:"on ";s:3:"254";s:3:"sam";s:3:"255";s:3:"str";s:3:"256";s:3:"tet";s:3:"257";s:3:"var";s:3:"258";s:3:" mo";s:3:"259";s:3:"art";s:3:"260";s:3:"ash";s:3:"261";s:3:"att";s:3:"262";s:3:"e b";s:3:"263";s:3:"han";s:3:"264";s:3:"hav";s:3:"265";s:3:"kla";s:3:"266";s:3:"kon";s:3:"267";s:3:"n t";s:3:"268";s:3:"ned";s:3:"269";s:3:"r o";s:3:"270";s:3:"ra ";s:3:"271";s:3:"rre";s:3:"272";s:3:"ves";s:3:"273";s:3:"vil";s:3:"274";s:3:" el";s:3:"275";s:3:" kr";s:3:"276";s:3:" ov";s:3:"277";s:3:"ann";s:3:"278";s:3:"e u";s:3:"279";s:3:"ess";s:3:"280";s:3:"fra";s:3:"281";s:3:"g a";s:3:"282";s:3:"g d";s:3:"283";s:3:"int";s:3:"284";s:3:"ngs";s:3:"285";s:3:"rde";s:3:"286";s:3:"tra";s:3:"287";s:4:" Ã¥r";s:3:"288";s:3:"akt";s:3:"289";s:3:"asi";s:3:"290";s:3:"em ";s:3:"291";s:3:"gel";s:3:"292";s:3:"gym";s:3:"293";s:3:"hol";s:3:"294";s:3:"kan";s:3:"295";s:3:"mna";s:3:"296";s:3:"n h";s:3:"297";s:3:"nsk";s:3:"298";s:3:"old";s:3:"299";}s:5:"dutch";a:300:{s:3:"en ";s:1:"0";s:3:"de ";s:1:"1";s:3:" de";s:1:"2";s:3:"et ";s:1:"3";s:3:"an ";s:1:"4";s:3:" he";s:1:"5";s:3:"er ";s:1:"6";s:3:" va";s:1:"7";s:3:"n d";s:1:"8";s:3:"van";s:1:"9";s:3:"een";s:2:"10";s:3:"het";s:2:"11";s:3:" ge";s:2:"12";s:3:"oor";s:2:"13";s:3:" ee";s:2:"14";s:3:"der";s:2:"15";s:3:" en";s:2:"16";s:3:"ij ";s:2:"17";s:3:"aar";s:2:"18";s:3:"gen";s:2:"19";s:3:"te ";s:2:"20";s:3:"ver";s:2:"21";s:3:" in";s:2:"22";s:3:" me";s:2:"23";s:3:"aan";s:2:"24";s:3:"den";s:2:"25";s:3:" we";s:2:"26";s:3:"at ";s:2:"27";s:3:"in ";s:2:"28";s:3:" da";s:2:"29";s:3:" te";s:2:"30";s:3:"eer";s:2:"31";s:3:"nde";s:2:"32";s:3:"ter";s:2:"33";s:3:"ste";s:2:"34";s:3:"n v";s:2:"35";s:3:" vo";s:2:"36";s:3:" zi";s:2:"37";s:3:"ing";s:2:"38";s:3:"n h";s:2:"39";s:3:"voo";s:2:"40";s:3:"is ";s:2:"41";s:3:" op";s:2:"42";s:3:"tie";s:2:"43";s:3:" aa";s:2:"44";s:3:"ede";s:2:"45";s:3:"erd";s:2:"46";s:3:"ers";s:2:"47";s:3:" be";s:2:"48";s:3:"eme";s:2:"49";s:3:"ten";s:2:"50";s:3:"ken";s:2:"51";s:3:"n e";s:2:"52";s:3:" ni";s:2:"53";s:3:" ve";s:2:"54";s:3:"ent";s:2:"55";s:3:"ijn";s:2:"56";s:3:"jn ";s:2:"57";s:3:"mee";s:2:"58";s:3:"iet";s:2:"59";s:3:"n w";s:2:"60";s:3:"ng ";s:2:"61";s:3:"nie";s:2:"62";s:3:" is";s:2:"63";s:3:"cht";s:2:"64";s:3:"dat";s:2:"65";s:3:"ere";s:2:"66";s:3:"ie ";s:2:"67";s:3:"ijk";s:2:"68";s:3:"n b";s:2:"69";s:3:"rde";s:2:"70";s:3:"ar ";s:2:"71";s:3:"e b";s:2:"72";s:3:"e a";s:2:"73";s:3:"met";s:2:"74";s:3:"t d";s:2:"75";s:3:"el ";s:2:"76";s:3:"ond";s:2:"77";s:3:"t h";s:2:"78";s:3:" al";s:2:"79";s:3:"e w";s:2:"80";s:3:"op ";s:2:"81";s:3:"ren";s:2:"82";s:3:" di";s:2:"83";s:3:" on";s:2:"84";s:3:"al ";s:2:"85";s:3:"and";s:2:"86";s:3:"bij";s:2:"87";s:3:"zij";s:2:"88";s:3:" bi";s:2:"89";s:3:" hi";s:2:"90";s:3:" wi";s:2:"91";s:3:"or ";s:2:"92";s:3:"r d";s:2:"93";s:3:"t v";s:2:"94";s:3:" wa";s:2:"95";s:3:"e h";s:2:"96";s:3:"lle";s:2:"97";s:3:"rt ";s:2:"98";s:3:"ang";s:2:"99";s:3:"hij";s:3:"100";s:3:"men";s:3:"101";s:3:"n a";s:3:"102";s:3:"n z";s:3:"103";s:3:"rs ";s:3:"104";s:3:" om";s:3:"105";s:3:"e o";s:3:"106";s:3:"e v";s:3:"107";s:3:"end";s:3:"108";s:3:"est";s:3:"109";s:3:"n t";s:3:"110";s:3:"par";s:3:"111";s:3:" pa";s:3:"112";s:3:" pr";s:3:"113";s:3:" ze";s:3:"114";s:3:"e g";s:3:"115";s:3:"e p";s:3:"116";s:3:"n p";s:3:"117";s:3:"ord";s:3:"118";s:3:"oud";s:3:"119";s:3:"raa";s:3:"120";s:3:"sch";s:3:"121";s:3:"t e";s:3:"122";s:3:"ege";s:3:"123";s:3:"ich";s:3:"124";s:3:"ien";s:3:"125";s:3:"aat";s:3:"126";s:3:"ek ";s:3:"127";s:3:"len";s:3:"128";s:3:"n m";s:3:"129";s:3:"nge";s:3:"130";s:3:"nt ";s:3:"131";s:3:"ove";s:3:"132";s:3:"rd ";s:3:"133";s:3:"wer";s:3:"134";s:3:" ma";s:3:"135";s:3:" mi";s:3:"136";s:3:"daa";s:3:"137";s:3:"e k";s:3:"138";s:3:"lij";s:3:"139";s:3:"mer";s:3:"140";s:3:"n g";s:3:"141";s:3:"n o";s:3:"142";s:3:"om ";s:3:"143";s:3:"sen";s:3:"144";s:3:"t b";s:3:"145";s:3:"wij";s:3:"146";s:3:" ho";s:3:"147";s:3:"e m";s:3:"148";s:3:"ele";s:3:"149";s:3:"gem";s:3:"150";s:3:"heb";s:3:"151";s:3:"pen";s:3:"152";s:3:"ude";s:3:"153";s:3:" bo";s:3:"154";s:3:" ja";s:3:"155";s:3:"die";s:3:"156";s:3:"e e";s:3:"157";s:3:"eli";s:3:"158";s:3:"erk";s:3:"159";s:3:"le ";s:3:"160";s:3:"pro";s:3:"161";s:3:"rij";s:3:"162";s:3:" er";s:3:"163";s:3:" za";s:3:"164";s:3:"e d";s:3:"165";s:3:"ens";s:3:"166";s:3:"ind";s:3:"167";s:3:"ke ";s:3:"168";s:3:"n k";s:3:"169";s:3:"nd ";s:3:"170";s:3:"nen";s:3:"171";s:3:"nte";s:3:"172";s:3:"r h";s:3:"173";s:3:"s d";s:3:"174";s:3:"s e";s:3:"175";s:3:"t z";s:3:"176";s:3:" b ";s:3:"177";s:3:" co";s:3:"178";s:3:" ik";s:3:"179";s:3:" ko";s:3:"180";s:3:" ov";s:3:"181";s:3:"eke";s:3:"182";s:3:"hou";s:3:"183";s:3:"ik ";s:3:"184";s:3:"iti";s:3:"185";s:3:"lan";s:3:"186";s:3:"ns ";s:3:"187";s:3:"t g";s:3:"188";s:3:"t m";s:3:"189";s:3:" do";s:3:"190";s:3:" le";s:3:"191";s:3:" zo";s:3:"192";s:3:"ams";s:3:"193";s:3:"e z";s:3:"194";s:3:"g v";s:3:"195";s:3:"it ";s:3:"196";s:3:"je ";s:3:"197";s:3:"ls ";s:3:"198";s:3:"maa";s:3:"199";s:3:"n i";s:3:"200";s:3:"nke";s:3:"201";s:3:"rke";s:3:"202";s:3:"uit";s:3:"203";s:3:" ha";s:3:"204";s:3:" ka";s:3:"205";s:3:" mo";s:3:"206";s:3:" re";s:3:"207";s:3:" st";s:3:"208";s:3:" to";s:3:"209";s:3:"age";s:3:"210";s:3:"als";s:3:"211";s:3:"ark";s:3:"212";s:3:"art";s:3:"213";s:3:"ben";s:3:"214";s:3:"e r";s:3:"215";s:3:"e s";s:3:"216";s:3:"ert";s:3:"217";s:3:"eze";s:3:"218";s:3:"ht ";s:3:"219";s:3:"ijd";s:3:"220";s:3:"lem";s:3:"221";s:3:"r v";s:3:"222";s:3:"rte";s:3:"223";s:3:"t p";s:3:"224";s:3:"zeg";s:3:"225";s:3:"zic";s:3:"226";s:3:"aak";s:3:"227";s:3:"aal";s:3:"228";s:3:"ag ";s:3:"229";s:3:"ale";s:3:"230";s:3:"bbe";s:3:"231";s:3:"ch ";s:3:"232";s:3:"e t";s:3:"233";s:3:"ebb";s:3:"234";s:3:"erz";s:3:"235";s:3:"ft ";s:3:"236";s:3:"ge ";s:3:"237";s:3:"led";s:3:"238";s:3:"mst";s:3:"239";s:3:"n n";s:3:"240";s:3:"oek";s:3:"241";s:3:"r i";s:3:"242";s:3:"t o";s:3:"243";s:3:"t w";s:3:"244";s:3:"tel";s:3:"245";s:3:"tte";s:3:"246";s:3:"uur";s:3:"247";s:3:"we ";s:3:"248";s:3:"zit";s:3:"249";s:3:" af";s:3:"250";s:3:" li";s:3:"251";s:3:" ui";s:3:"252";s:3:"ak ";s:3:"253";s:3:"all";s:3:"254";s:3:"aut";s:3:"255";s:3:"doo";s:3:"256";s:3:"e i";s:3:"257";s:3:"ene";s:3:"258";s:3:"erg";s:3:"259";s:3:"ete";s:3:"260";s:3:"ges";s:3:"261";s:3:"hee";s:3:"262";s:3:"jaa";s:3:"263";s:3:"jke";s:3:"264";s:3:"kee";s:3:"265";s:3:"kel";s:3:"266";s:3:"kom";s:3:"267";s:3:"lee";s:3:"268";s:3:"moe";s:3:"269";s:3:"n s";s:3:"270";s:3:"ort";s:3:"271";s:3:"rec";s:3:"272";s:3:"s o";s:3:"273";s:3:"s v";s:3:"274";s:3:"teg";s:3:"275";s:3:"tij";s:3:"276";s:3:"ven";s:3:"277";s:3:"waa";s:3:"278";s:3:"wel";s:3:"279";s:3:" an";s:3:"280";s:3:" au";s:3:"281";s:3:" bu";s:3:"282";s:3:" gr";s:3:"283";s:3:" pl";s:3:"284";s:3:" ti";s:3:"285";s:3:"'' ";s:3:"286";s:3:"ade";s:3:"287";s:3:"dag";s:3:"288";s:3:"e l";s:3:"289";s:3:"ech";s:3:"290";s:3:"eel";s:3:"291";s:3:"eft";s:3:"292";s:3:"ger";s:3:"293";s:3:"gt ";s:3:"294";s:3:"ig ";s:3:"295";s:3:"itt";s:3:"296";s:3:"j d";s:3:"297";s:3:"ppe";s:3:"298";s:3:"rda";s:3:"299";}s:7:"english";a:300:{s:3:" th";s:1:"0";s:3:"the";s:1:"1";s:3:"he ";s:1:"2";s:3:"ed ";s:1:"3";s:3:" to";s:1:"4";s:3:" in";s:1:"5";s:3:"er ";s:1:"6";s:3:"ing";s:1:"7";s:3:"ng ";s:1:"8";s:3:" an";s:1:"9";s:3:"nd ";s:2:"10";s:3:" of";s:2:"11";s:3:"and";s:2:"12";s:3:"to ";s:2:"13";s:3:"of ";s:2:"14";s:3:" co";s:2:"15";s:3:"at ";s:2:"16";s:3:"on ";s:2:"17";s:3:"in ";s:2:"18";s:3:" a ";s:2:"19";s:3:"d t";s:2:"20";s:3:" he";s:2:"21";s:3:"e t";s:2:"22";s:3:"ion";s:2:"23";s:3:"es ";s:2:"24";s:3:" re";s:2:"25";s:3:"re ";s:2:"26";s:3:"hat";s:2:"27";s:3:" sa";s:2:"28";s:3:" st";s:2:"29";s:3:" ha";s:2:"30";s:3:"her";s:2:"31";s:3:"tha";s:2:"32";s:3:"tio";s:2:"33";s:3:"or ";s:2:"34";s:3:" ''";s:2:"35";s:3:"en ";s:2:"36";s:3:" wh";s:2:"37";s:3:"e s";s:2:"38";s:3:"ent";s:2:"39";s:3:"n t";s:2:"40";s:3:"s a";s:2:"41";s:3:"as ";s:2:"42";s:3:"for";s:2:"43";s:3:"is ";s:2:"44";s:3:"t t";s:2:"45";s:3:" be";s:2:"46";s:3:"ld ";s:2:"47";s:3:"e a";s:2:"48";s:3:"rs ";s:2:"49";s:3:" wa";s:2:"50";s:3:"ut ";s:2:"51";s:3:"ve ";s:2:"52";s:3:"ll ";s:2:"53";s:3:"al ";s:2:"54";s:3:" ma";s:2:"55";s:3:"e i";s:2:"56";s:3:" fo";s:2:"57";s:3:"'s ";s:2:"58";s:3:"an ";s:2:"59";s:3:"est";s:2:"60";s:3:" hi";s:2:"61";s:3:" mo";s:2:"62";s:3:" se";s:2:"63";s:3:" pr";s:2:"64";s:3:"s t";s:2:"65";s:3:"ate";s:2:"66";s:3:"st ";s:2:"67";s:3:"ter";s:2:"68";s:3:"ere";s:2:"69";s:3:"ted";s:2:"70";s:3:"nt ";s:2:"71";s:3:"ver";s:2:"72";s:3:"d a";s:2:"73";s:3:" wi";s:2:"74";s:3:"se ";s:2:"75";s:3:"e c";s:2:"76";s:3:"ect";s:2:"77";s:3:"ns ";s:2:"78";s:3:" on";s:2:"79";s:3:"ly ";s:2:"80";s:3:"tol";s:2:"81";s:3:"ey ";s:2:"82";s:3:"r t";s:2:"83";s:3:" ca";s:2:"84";s:3:"ati";s:2:"85";s:3:"ts ";s:2:"86";s:3:"all";s:2:"87";s:3:" no";s:2:"88";s:3:"his";s:2:"89";s:3:"s o";s:2:"90";s:3:"ers";s:2:"91";s:3:"con";s:2:"92";s:3:"e o";s:2:"93";s:3:"ear";s:2:"94";s:3:"f t";s:2:"95";s:3:"e w";s:2:"96";s:3:"was";s:2:"97";s:3:"ons";s:2:"98";s:3:"sta";s:2:"99";s:3:"'' ";s:3:"100";s:3:"sti";s:3:"101";s:3:"n a";s:3:"102";s:3:"sto";s:3:"103";s:3:"t h";s:3:"104";s:3:" we";s:3:"105";s:3:"id ";s:3:"106";s:3:"th ";s:3:"107";s:3:" it";s:3:"108";s:3:"ce ";s:3:"109";s:3:" di";s:3:"110";s:3:"ave";s:3:"111";s:3:"d h";s:3:"112";s:3:"cou";s:3:"113";s:3:"pro";s:3:"114";s:3:"ad ";s:3:"115";s:3:"oll";s:3:"116";s:3:"ry ";s:3:"117";s:3:"d s";s:3:"118";s:3:"e m";s:3:"119";s:3:" so";s:3:"120";s:3:"ill";s:3:"121";s:3:"cti";s:3:"122";s:3:"te ";s:3:"123";s:3:"tor";s:3:"124";s:3:"eve";s:3:"125";s:3:"g t";s:3:"126";s:3:"it ";s:3:"127";s:3:" ch";s:3:"128";s:3:" de";s:3:"129";s:3:"hav";s:3:"130";s:3:"oul";s:3:"131";s:3:"ty ";s:3:"132";s:3:"uld";s:3:"133";s:3:"use";s:3:"134";s:3:" al";s:3:"135";s:3:"are";s:3:"136";s:3:"ch ";s:3:"137";s:3:"me ";s:3:"138";s:3:"out";s:3:"139";s:3:"ove";s:3:"140";s:3:"wit";s:3:"141";s:3:"ys ";s:3:"142";s:3:"chi";s:3:"143";s:3:"t a";s:3:"144";s:3:"ith";s:3:"145";s:3:"oth";s:3:"146";s:3:" ab";s:3:"147";s:3:" te";s:3:"148";s:3:" wo";s:3:"149";s:3:"s s";s:3:"150";s:3:"res";s:3:"151";s:3:"t w";s:3:"152";s:3:"tin";s:3:"153";s:3:"e b";s:3:"154";s:3:"e h";s:3:"155";s:3:"nce";s:3:"156";s:3:"t s";s:3:"157";s:3:"y t";s:3:"158";s:3:"e p";s:3:"159";s:3:"ele";s:3:"160";s:3:"hin";s:3:"161";s:3:"s i";s:3:"162";s:3:"nte";s:3:"163";s:3:" li";s:3:"164";s:3:"le ";s:3:"165";s:3:" do";s:3:"166";s:3:"aid";s:3:"167";s:3:"hey";s:3:"168";s:3:"ne ";s:3:"169";s:3:"s w";s:3:"170";s:3:" as";s:3:"171";s:3:" fr";s:3:"172";s:3:" tr";s:3:"173";s:3:"end";s:3:"174";s:3:"sai";s:3:"175";s:3:" el";s:3:"176";s:3:" ne";s:3:"177";s:3:" su";s:3:"178";s:3:"'t ";s:3:"179";s:3:"ay ";s:3:"180";s:3:"hou";s:3:"181";s:3:"ive";s:3:"182";s:3:"lec";s:3:"183";s:3:"n't";s:3:"184";s:3:" ye";s:3:"185";s:3:"but";s:3:"186";s:3:"d o";s:3:"187";s:3:"o t";s:3:"188";s:3:"y o";s:3:"189";s:3:" ho";s:3:"190";s:3:" me";s:3:"191";s:3:"be ";s:3:"192";s:3:"cal";s:3:"193";s:3:"e e";s:3:"194";s:3:"had";s:3:"195";s:3:"ple";s:3:"196";s:3:" at";s:3:"197";s:3:" bu";s:3:"198";s:3:" la";s:3:"199";s:3:"d b";s:3:"200";s:3:"s h";s:3:"201";s:3:"say";s:3:"202";s:3:"t i";s:3:"203";s:3:" ar";s:3:"204";s:3:"e f";s:3:"205";s:3:"ght";s:3:"206";s:3:"hil";s:3:"207";s:3:"igh";s:3:"208";s:3:"int";s:3:"209";s:3:"not";s:3:"210";s:3:"ren";s:3:"211";s:3:" is";s:3:"212";s:3:" pa";s:3:"213";s:3:" sh";s:3:"214";s:3:"ays";s:3:"215";s:3:"com";s:3:"216";s:3:"n s";s:3:"217";s:3:"r a";s:3:"218";s:3:"rin";s:3:"219";s:3:"y a";s:3:"220";s:3:" un";s:3:"221";s:3:"n c";s:3:"222";s:3:"om ";s:3:"223";s:3:"thi";s:3:"224";s:3:" mi";s:3:"225";s:3:"by ";s:3:"226";s:3:"d i";s:3:"227";s:3:"e d";s:3:"228";s:3:"e n";s:3:"229";s:3:"t o";s:3:"230";s:3:" by";s:3:"231";s:3:"e r";s:3:"232";s:3:"eri";s:3:"233";s:3:"old";s:3:"234";s:3:"ome";s:3:"235";s:3:"whe";s:3:"236";s:3:"yea";s:3:"237";s:3:" gr";s:3:"238";s:3:"ar ";s:3:"239";s:3:"ity";s:3:"240";s:3:"mpl";s:3:"241";s:3:"oun";s:3:"242";s:3:"one";s:3:"243";s:3:"ow ";s:3:"244";s:3:"r s";s:3:"245";s:3:"s f";s:3:"246";s:3:"tat";s:3:"247";s:3:" ba";s:3:"248";s:3:" vo";s:3:"249";s:3:"bou";s:3:"250";s:3:"sam";s:3:"251";s:3:"tim";s:3:"252";s:3:"vot";s:3:"253";s:3:"abo";s:3:"254";s:3:"ant";s:3:"255";s:3:"ds ";s:3:"256";s:3:"ial";s:3:"257";s:3:"ine";s:3:"258";s:3:"man";s:3:"259";s:3:"men";s:3:"260";s:3:" or";s:3:"261";s:3:" po";s:3:"262";s:3:"amp";s:3:"263";s:3:"can";s:3:"264";s:3:"der";s:3:"265";s:3:"e l";s:3:"266";s:3:"les";s:3:"267";s:3:"ny ";s:3:"268";s:3:"ot ";s:3:"269";s:3:"rec";s:3:"270";s:3:"tes";s:3:"271";s:3:"tho";s:3:"272";s:3:"ica";s:3:"273";s:3:"ild";s:3:"274";s:3:"ir ";s:3:"275";s:3:"nde";s:3:"276";s:3:"ose";s:3:"277";s:3:"ous";s:3:"278";s:3:"pre";s:3:"279";s:3:"ste";s:3:"280";s:3:"era";s:3:"281";s:3:"per";s:3:"282";s:3:"r o";s:3:"283";s:3:"red";s:3:"284";s:3:"rie";s:3:"285";s:3:" bo";s:3:"286";s:3:" le";s:3:"287";s:3:"ali";s:3:"288";s:3:"ars";s:3:"289";s:3:"ore";s:3:"290";s:3:"ric";s:3:"291";s:3:"s m";s:3:"292";s:3:"str";s:3:"293";s:3:" fa";s:3:"294";s:3:"ess";s:3:"295";s:3:"ie ";s:3:"296";s:3:"ist";s:3:"297";s:3:"lat";s:3:"298";s:3:"uri";s:3:"299";}s:8:"estonian";a:300:{s:3:"st ";s:1:"0";s:3:" ka";s:1:"1";s:3:"on ";s:1:"2";s:3:"ja ";s:1:"3";s:3:" va";s:1:"4";s:3:" on";s:1:"5";s:3:" ja";s:1:"6";s:3:" ko";s:1:"7";s:3:"se ";s:1:"8";s:3:"ast";s:1:"9";s:3:"le ";s:2:"10";s:3:"es ";s:2:"11";s:3:"as ";s:2:"12";s:3:"is ";s:2:"13";s:3:"ud ";s:2:"14";s:3:" sa";s:2:"15";s:3:"da ";s:2:"16";s:3:"ga ";s:2:"17";s:3:" ta";s:2:"18";s:3:"aja";s:2:"19";s:3:"sta";s:2:"20";s:3:" ku";s:2:"21";s:3:" pe";s:2:"22";s:3:"a k";s:2:"23";s:3:"est";s:2:"24";s:3:"ist";s:2:"25";s:3:"ks ";s:2:"26";s:3:"ta ";s:2:"27";s:3:"al ";s:2:"28";s:3:"ava";s:2:"29";s:3:"id ";s:2:"30";s:3:"saa";s:2:"31";s:3:"mis";s:2:"32";s:3:"te ";s:2:"33";s:3:"val";s:2:"34";s:3:" et";s:2:"35";s:3:"nud";s:2:"36";s:3:" te";s:2:"37";s:3:"inn";s:2:"38";s:3:" se";s:2:"39";s:3:" tu";s:2:"40";s:3:"a v";s:2:"41";s:3:"alu";s:2:"42";s:3:"e k";s:2:"43";s:3:"ise";s:2:"44";s:3:"lu ";s:2:"45";s:3:"ma ";s:2:"46";s:3:"mes";s:2:"47";s:3:" mi";s:2:"48";s:3:"et ";s:2:"49";s:3:"iku";s:2:"50";s:3:"lin";s:2:"51";s:3:"ad ";s:2:"52";s:3:"el ";s:2:"53";s:3:"ime";s:2:"54";s:3:"ne ";s:2:"55";s:3:"nna";s:2:"56";s:3:" ha";s:2:"57";s:3:" in";s:2:"58";s:3:" ke";s:2:"59";s:4:" võ";s:2:"60";s:3:"a s";s:2:"61";s:3:"a t";s:2:"62";s:3:"ab ";s:2:"63";s:3:"e s";s:2:"64";s:3:"esi";s:2:"65";s:3:" la";s:2:"66";s:3:" li";s:2:"67";s:3:"e v";s:2:"68";s:3:"eks";s:2:"69";s:3:"ema";s:2:"70";s:3:"las";s:2:"71";s:3:"les";s:2:"72";s:3:"rju";s:2:"73";s:3:"tle";s:2:"74";s:3:"tsi";s:2:"75";s:3:"tus";s:2:"76";s:3:"upa";s:2:"77";s:3:"use";s:2:"78";s:3:"ust";s:2:"79";s:3:"var";s:2:"80";s:4:" lä";s:2:"81";s:3:"ali";s:2:"82";s:3:"arj";s:2:"83";s:3:"de ";s:2:"84";s:3:"ete";s:2:"85";s:3:"i t";s:2:"86";s:3:"iga";s:2:"87";s:3:"ilm";s:2:"88";s:3:"kui";s:2:"89";s:3:"li ";s:2:"90";s:3:"tul";s:2:"91";s:3:" ei";s:2:"92";s:3:" me";s:2:"93";s:4:" sõ";s:2:"94";s:3:"aal";s:2:"95";s:3:"ata";s:2:"96";s:3:"dus";s:2:"97";s:3:"ei ";s:2:"98";s:3:"nik";s:2:"99";s:3:"pea";s:3:"100";s:3:"s k";s:3:"101";s:3:"s o";s:3:"102";s:3:"sal";s:3:"103";s:4:"sõn";s:3:"104";s:3:"ter";s:3:"105";s:3:"ul ";s:3:"106";s:4:"või";s:3:"107";s:3:" el";s:3:"108";s:3:" ne";s:3:"109";s:3:"a j";s:3:"110";s:3:"ate";s:3:"111";s:3:"end";s:3:"112";s:3:"i k";s:3:"113";s:3:"ita";s:3:"114";s:3:"kar";s:3:"115";s:3:"kor";s:3:"116";s:3:"l o";s:3:"117";s:3:"lt ";s:3:"118";s:3:"maa";s:3:"119";s:3:"oli";s:3:"120";s:3:"sti";s:3:"121";s:3:"vad";s:3:"122";s:5:"ään";s:3:"123";s:3:" ju";s:3:"124";s:4:" jä";s:3:"125";s:4:" kü";s:3:"126";s:3:" ma";s:3:"127";s:3:" po";s:3:"128";s:4:" üt";s:3:"129";s:3:"aas";s:3:"130";s:3:"aks";s:3:"131";s:3:"at ";s:3:"132";s:3:"ed ";s:3:"133";s:3:"eri";s:3:"134";s:3:"hoi";s:3:"135";s:3:"i s";s:3:"136";s:3:"ka ";s:3:"137";s:3:"la ";s:3:"138";s:3:"nni";s:3:"139";s:3:"oid";s:3:"140";s:3:"pai";s:3:"141";s:3:"rit";s:3:"142";s:3:"us ";s:3:"143";s:4:"ütl";s:3:"144";s:3:" aa";s:3:"145";s:3:" lo";s:3:"146";s:3:" to";s:3:"147";s:3:" ve";s:3:"148";s:3:"a e";s:3:"149";s:3:"ada";s:3:"150";s:3:"aid";s:3:"151";s:3:"ami";s:3:"152";s:3:"and";s:3:"153";s:3:"dla";s:3:"154";s:3:"e j";s:3:"155";s:3:"ega";s:3:"156";s:3:"gi ";s:3:"157";s:3:"gu ";s:3:"158";s:3:"i p";s:3:"159";s:3:"idl";s:3:"160";s:3:"ik ";s:3:"161";s:3:"ini";s:3:"162";s:3:"jup";s:3:"163";s:3:"kal";s:3:"164";s:3:"kas";s:3:"165";s:3:"kes";s:3:"166";s:3:"koh";s:3:"167";s:3:"s e";s:3:"168";s:3:"s p";s:3:"169";s:3:"sel";s:3:"170";s:3:"sse";s:3:"171";s:3:"ui ";s:3:"172";s:3:" pi";s:3:"173";s:3:" si";s:3:"174";s:3:"aru";s:3:"175";s:3:"eda";s:3:"176";s:3:"eva";s:3:"177";s:3:"fil";s:3:"178";s:3:"i v";s:3:"179";s:3:"ida";s:3:"180";s:3:"ing";s:3:"181";s:5:"lää";s:3:"182";s:3:"me ";s:3:"183";s:3:"na ";s:3:"184";s:3:"nda";s:3:"185";s:3:"nim";s:3:"186";s:3:"ole";s:3:"187";s:3:"ots";s:3:"188";s:3:"ris";s:3:"189";s:3:"s l";s:3:"190";s:3:"sia";s:3:"191";s:3:"t p";s:3:"192";s:3:" en";s:3:"193";s:3:" mu";s:3:"194";s:3:" ol";s:3:"195";s:4:" põ";s:3:"196";s:3:" su";s:3:"197";s:4:" vä";s:3:"198";s:4:" üh";s:3:"199";s:3:"a l";s:3:"200";s:3:"a p";s:3:"201";s:3:"aga";s:3:"202";s:3:"ale";s:3:"203";s:3:"aps";s:3:"204";s:3:"arv";s:3:"205";s:3:"e a";s:3:"206";s:3:"ela";s:3:"207";s:3:"ika";s:3:"208";s:3:"lle";s:3:"209";s:3:"loo";s:3:"210";s:3:"mal";s:3:"211";s:3:"pet";s:3:"212";s:3:"t k";s:3:"213";s:3:"tee";s:3:"214";s:3:"tis";s:3:"215";s:3:"vat";s:3:"216";s:4:"äne";s:3:"217";s:4:"õnn";s:3:"218";s:3:" es";s:3:"219";s:3:" fi";s:3:"220";s:3:" vi";s:3:"221";s:3:"a i";s:3:"222";s:3:"a o";s:3:"223";s:3:"aab";s:3:"224";s:3:"aap";s:3:"225";s:3:"ala";s:3:"226";s:3:"alt";s:3:"227";s:3:"ama";s:3:"228";s:3:"anu";s:3:"229";s:3:"e p";s:3:"230";s:3:"e t";s:3:"231";s:3:"eal";s:3:"232";s:3:"eli";s:3:"233";s:3:"haa";s:3:"234";s:3:"hin";s:3:"235";s:3:"iva";s:3:"236";s:3:"kon";s:3:"237";s:3:"ku ";s:3:"238";s:3:"lik";s:3:"239";s:3:"lm ";s:3:"240";s:3:"min";s:3:"241";s:3:"n t";s:3:"242";s:3:"odu";s:3:"243";s:3:"oon";s:3:"244";s:3:"psa";s:3:"245";s:3:"ri ";s:3:"246";s:3:"si ";s:3:"247";s:3:"stu";s:3:"248";s:3:"t e";s:3:"249";s:3:"t s";s:3:"250";s:3:"ti ";s:3:"251";s:3:"ule";s:3:"252";s:3:"uur";s:3:"253";s:3:"vas";s:3:"254";s:3:"vee";s:3:"255";s:3:" ki";s:3:"256";s:3:" ni";s:3:"257";s:4:" nä";s:3:"258";s:3:" ra";s:3:"259";s:3:"aig";s:3:"260";s:3:"aka";s:3:"261";s:3:"all";s:3:"262";s:3:"atu";s:3:"263";s:3:"e e";s:3:"264";s:3:"eis";s:3:"265";s:3:"ers";s:3:"266";s:3:"i e";s:3:"267";s:3:"ii ";s:3:"268";s:3:"iis";s:3:"269";s:3:"il ";s:3:"270";s:3:"ima";s:3:"271";s:3:"its";s:3:"272";s:3:"kka";s:3:"273";s:3:"kuh";s:3:"274";s:3:"l k";s:3:"275";s:3:"lat";s:3:"276";s:3:"maj";s:3:"277";s:3:"ndu";s:3:"278";s:3:"ni ";s:3:"279";s:3:"nii";s:3:"280";s:3:"oma";s:3:"281";s:3:"ool";s:3:"282";s:3:"rso";s:3:"283";s:3:"ru ";s:3:"284";s:3:"rva";s:3:"285";s:3:"s t";s:3:"286";s:3:"sek";s:3:"287";s:3:"son";s:3:"288";s:3:"ste";s:3:"289";s:3:"t m";s:3:"290";s:3:"taj";s:3:"291";s:3:"tam";s:3:"292";s:3:"ude";s:3:"293";s:3:"uho";s:3:"294";s:3:"vai";s:3:"295";s:3:" ag";s:3:"296";s:3:" os";s:3:"297";s:3:" pa";s:3:"298";s:3:" re";s:3:"299";}s:5:"farsi";a:300:{s:5:"ان ";s:1:"0";s:5:"ای ";s:1:"1";s:5:"Ù‡ ا";s:1:"2";s:5:" اي";s:1:"3";s:5:" در";s:1:"4";s:5:"به ";s:1:"5";s:5:" بر";s:1:"6";s:5:"در ";s:1:"7";s:6:"ران";s:1:"8";s:5:" به";s:1:"9";s:5:"ÛŒ ا";s:2:"10";s:5:"از ";s:2:"11";s:5:"ين ";s:2:"12";s:5:"Ù…ÛŒ ";s:2:"13";s:5:" از";s:2:"14";s:5:"ده ";s:2:"15";s:5:"ست ";s:2:"16";s:6:"است";s:2:"17";s:5:" اس";s:2:"18";s:5:" Ú©Ù‡";s:2:"19";s:5:"Ú©Ù‡ ";s:2:"20";s:6:"اير";s:2:"21";s:5:"ند ";s:2:"22";s:6:"اين";s:2:"23";s:5:" ها";s:2:"24";s:6:"يرا";s:2:"25";s:5:"ود ";s:2:"26";s:5:" را";s:2:"27";s:6:"های";s:2:"28";s:5:" خو";s:2:"29";s:5:"ته ";s:2:"30";s:5:"را ";s:2:"31";s:6:"رای";s:2:"32";s:5:"رد ";s:2:"33";s:5:"Ù† ب";s:2:"34";s:6:"کرد";s:2:"35";s:4:" Ùˆ ";s:2:"36";s:5:" کر";s:2:"37";s:5:"ات ";s:2:"38";s:6:"برا";s:2:"39";s:5:"د Ú©";s:2:"40";s:6:"مان";s:2:"41";s:5:"ÛŒ د";s:2:"42";s:5:" ان";s:2:"43";s:6:"خوا";s:2:"44";s:6:"شور";s:2:"45";s:5:" با";s:2:"46";s:5:"Ù† ا";s:2:"47";s:5:" سا";s:2:"48";s:6:"تمی";s:2:"49";s:5:"ری ";s:2:"50";s:6:"اتم";s:2:"51";s:5:"ا ا";s:2:"52";s:6:"واه";s:2:"53";s:5:" ات";s:2:"54";s:5:" عر";s:2:"55";s:5:"اق ";s:2:"56";s:5:"ر Ù…";s:2:"57";s:6:"راق";s:2:"58";s:6:"عرا";s:2:"59";s:5:"ÛŒ ب";s:2:"60";s:5:" تا";s:2:"61";s:5:" تو";s:2:"62";s:5:"ار ";s:2:"63";s:5:"ر ا";s:2:"64";s:5:"Ù† Ù…";s:2:"65";s:5:"Ù‡ ب";s:2:"66";s:5:"ور ";s:2:"67";s:5:"يد ";s:2:"68";s:5:"ÛŒ Ú©";s:2:"69";s:5:" ام";s:2:"70";s:5:" دا";s:2:"71";s:5:" Ú©Ù†";s:2:"72";s:6:"اهد";s:2:"73";s:5:"هد ";s:2:"74";s:5:" آن";s:2:"75";s:5:" Ù…ÛŒ";s:2:"76";s:5:" ني";s:2:"77";s:5:" Ú¯Ù";s:2:"78";s:5:"د ا";s:2:"79";s:6:"Ú¯Ùت";s:2:"80";s:5:" Ú©Ø´";s:2:"81";s:5:"ا ب";s:2:"82";s:5:"Ù†ÛŒ ";s:2:"83";s:5:"ها ";s:2:"84";s:6:"کشو";s:2:"85";s:5:" رو";s:2:"86";s:5:"ت Ú©";s:2:"87";s:6:"نيو";s:2:"88";s:5:"Ù‡ Ù…";s:2:"89";s:5:"ÙˆÛŒ ";s:2:"90";s:5:"ÛŒ ت";s:2:"91";s:5:" شو";s:2:"92";s:5:"ال ";s:2:"93";s:6:"دار";s:2:"94";s:5:"مه ";s:2:"95";s:5:"Ù† Ú©";s:2:"96";s:5:"Ù‡ د";s:2:"97";s:5:"يه ";s:2:"98";s:5:" ما";s:2:"99";s:6:"امه";s:3:"100";s:5:"د ب";s:3:"101";s:6:"زار";s:3:"102";s:6:"ورا";s:3:"103";s:6:"گزا";s:3:"104";s:5:" پي";s:3:"105";s:5:"آن ";s:3:"106";s:6:"انت";s:3:"107";s:5:"ت ا";s:3:"108";s:5:"Ùت ";s:3:"109";s:5:"Ù‡ Ù†";s:3:"110";s:5:"ÛŒ Ø®";s:3:"111";s:6:"اما";s:3:"112";s:6:"بات";s:3:"113";s:5:"ما ";s:3:"114";s:6:"ملل";s:3:"115";s:6:"نام";s:3:"116";s:5:"ير ";s:3:"117";s:5:"ÛŒ Ù…";s:3:"118";s:5:"ÛŒ Ù‡";s:3:"119";s:5:" آم";s:3:"120";s:5:" ای";s:3:"121";s:5:" من";s:3:"122";s:6:"انس";s:3:"123";s:6:"اني";s:3:"124";s:5:"ت د";s:3:"125";s:6:"رده";s:3:"126";s:6:"ساز";s:3:"127";s:5:"Ù† د";s:3:"128";s:5:"نه ";s:3:"129";s:6:"ورد";s:3:"130";s:5:" او";s:3:"131";s:5:" بي";s:3:"132";s:5:" سو";s:3:"133";s:5:" شد";s:3:"134";s:6:"اده";s:3:"135";s:6:"اند";s:3:"136";s:5:"با ";s:3:"137";s:5:"ت ب";s:3:"138";s:5:"ر ب";s:3:"139";s:5:"ز ا";s:3:"140";s:6:"زما";s:3:"141";s:6:"سته";s:3:"142";s:5:"Ù† ر";s:3:"143";s:5:"Ù‡ س";s:3:"144";s:6:"وان";s:3:"145";s:5:"وز ";s:3:"146";s:5:"ÛŒ ر";s:3:"147";s:5:"ÛŒ س";s:3:"148";s:5:" هس";s:3:"149";s:6:"ابا";s:3:"150";s:5:"ام ";s:3:"151";s:6:"اور";s:3:"152";s:6:"تخا";s:3:"153";s:6:"خاب";s:3:"154";s:6:"خود";s:3:"155";s:5:"د د";s:3:"156";s:5:"دن ";s:3:"157";s:6:"رها";s:3:"158";s:6:"روز";s:3:"159";s:6:"رگز";s:3:"160";s:6:"نتخ";s:3:"161";s:5:"Ù‡ Ø´";s:3:"162";s:5:"Ù‡ Ù‡";s:3:"163";s:6:"هست";s:3:"164";s:5:"يت ";s:3:"165";s:5:"يم ";s:3:"166";s:5:" دو";s:3:"167";s:5:" دي";s:3:"168";s:5:" مو";s:3:"169";s:5:" نو";s:3:"170";s:5:" هم";s:3:"171";s:5:" کا";s:3:"172";s:5:"اد ";s:3:"173";s:6:"اری";s:3:"174";s:6:"انی";s:3:"175";s:5:"بر ";s:3:"176";s:6:"بود";s:3:"177";s:5:"ت Ù‡";s:3:"178";s:5:"Ø­ Ù‡";s:3:"179";s:6:"حال";s:3:"180";s:5:"رش ";s:3:"181";s:5:"عه ";s:3:"182";s:5:"Ù„ÛŒ ";s:3:"183";s:5:"وم ";s:3:"184";s:6:"ژان";s:3:"185";s:5:" سل";s:3:"186";s:6:"آمر";s:3:"187";s:5:"اح ";s:3:"188";s:6:"توس";s:3:"189";s:6:"داد";s:3:"190";s:6:"دام";s:3:"191";s:5:"ر د";s:3:"192";s:5:"ره ";s:3:"193";s:6:"ريک";s:3:"194";s:5:"زی ";s:3:"195";s:6:"سلا";s:3:"196";s:6:"شود";s:3:"197";s:6:"لاح";s:3:"198";s:6:"مري";s:3:"199";s:6:"نند";s:3:"200";s:5:"Ù‡ ع";s:3:"201";s:6:"يما";s:3:"202";s:6:"يکا";s:3:"203";s:6:"پيم";s:3:"204";s:5:"گر ";s:3:"205";s:5:" Ø¢Ú˜";s:3:"206";s:5:" ال";s:3:"207";s:5:" بو";s:3:"208";s:5:" مق";s:3:"209";s:5:" مل";s:3:"210";s:5:" ÙˆÛŒ";s:3:"211";s:6:"آژا";s:3:"212";s:6:"ازم";s:3:"213";s:6:"ازی";s:3:"214";s:6:"بار";s:3:"215";s:6:"برن";s:3:"216";s:5:"ر Ø¢";s:3:"217";s:5:"ز س";s:3:"218";s:6:"سعه";s:3:"219";s:6:"شته";s:3:"220";s:6:"مات";s:3:"221";s:5:"Ù† Ø¢";s:3:"222";s:5:"Ù† Ù¾";s:3:"223";s:5:"نس ";s:3:"224";s:5:"Ù‡ Ú¯";s:3:"225";s:6:"وسع";s:3:"226";s:6:"يان";s:3:"227";s:6:"يوم";s:3:"228";s:5:"کا ";s:3:"229";s:6:"کام";s:3:"230";s:6:"کند";s:3:"231";s:5:" خا";s:3:"232";s:5:" سر";s:3:"233";s:6:"آور";s:3:"234";s:6:"ارد";s:3:"235";s:6:"اقد";s:3:"236";s:6:"ايم";s:3:"237";s:6:"ايی";s:3:"238";s:6:"برگ";s:3:"239";s:5:"ت ع";s:3:"240";s:5:"تن ";s:3:"241";s:5:"خت ";s:3:"242";s:5:"د Ùˆ";s:3:"243";s:5:"ر Ø®";s:3:"244";s:5:"رک ";s:3:"245";s:6:"زير";s:3:"246";s:6:"Ùته";s:3:"247";s:6:"قدا";s:3:"248";s:5:"Ù„ ت";s:3:"249";s:6:"مين";s:3:"250";s:5:"Ù† Ú¯";s:3:"251";s:5:"Ù‡ Ø¢";s:3:"252";s:5:"Ù‡ Ø®";s:3:"253";s:5:"Ù‡ Ú©";s:3:"254";s:6:"ورک";s:3:"255";s:6:"ويو";s:3:"256";s:6:"يور";s:3:"257";s:6:"يوي";s:3:"258";s:5:"ÙŠÛŒ ";s:3:"259";s:5:"Ú© ت";s:3:"260";s:5:"ÛŒ Ø´";s:3:"261";s:5:" اق";s:3:"262";s:5:" حا";s:3:"263";s:5:" حق";s:3:"264";s:5:" دس";s:3:"265";s:5:" Ø´Ú©";s:3:"266";s:5:" عم";s:3:"267";s:5:" ÙŠÚ©";s:3:"268";s:5:"ا ت";s:3:"269";s:5:"ا د";s:3:"270";s:6:"ارج";s:3:"271";s:6:"بين";s:3:"272";s:5:"ت Ù…";s:3:"273";s:5:"ت Ùˆ";s:3:"274";s:6:"تاي";s:3:"275";s:6:"دست";s:3:"276";s:5:"ر Ø­";s:3:"277";s:5:"ر س";s:3:"278";s:6:"رنا";s:3:"279";s:5:"ز ب";s:3:"280";s:6:"شکا";s:3:"281";s:5:"لل ";s:3:"282";s:5:"Ù… Ú©";s:3:"283";s:5:"مز ";s:3:"284";s:6:"ندا";s:3:"285";s:6:"نوا";s:3:"286";s:5:"Ùˆ ا";s:3:"287";s:6:"وره";s:3:"288";s:5:"ون ";s:3:"289";s:6:"وند";s:3:"290";s:6:"يمز";s:3:"291";s:5:" آو";s:3:"292";s:5:" اع";s:3:"293";s:5:" Ùر";s:3:"294";s:5:" مت";s:3:"295";s:5:" نه";s:3:"296";s:5:" هر";s:3:"297";s:5:" وز";s:3:"298";s:5:" گز";s:3:"299";}s:7:"finnish";a:300:{s:3:"en ";s:1:"0";s:3:"in ";s:1:"1";s:3:"an ";s:1:"2";s:3:"on ";s:1:"3";s:3:"ist";s:1:"4";s:3:"ta ";s:1:"5";s:3:"ja ";s:1:"6";s:3:"n t";s:1:"7";s:3:"sa ";s:1:"8";s:3:"sta";s:1:"9";s:3:"aan";s:2:"10";s:3:"n p";s:2:"11";s:3:" on";s:2:"12";s:3:"ssa";s:2:"13";s:3:"tta";s:2:"14";s:4:"tä ";s:2:"15";s:3:" ka";s:2:"16";s:3:" pa";s:2:"17";s:3:"si ";s:2:"18";s:3:" ja";s:2:"19";s:3:"n k";s:2:"20";s:3:"lla";s:2:"21";s:4:"än ";s:2:"22";s:3:"een";s:2:"23";s:3:"n v";s:2:"24";s:3:"ksi";s:2:"25";s:3:"ett";s:2:"26";s:3:"nen";s:2:"27";s:3:"taa";s:2:"28";s:4:"ttä";s:2:"29";s:3:" va";s:2:"30";s:3:"ill";s:2:"31";s:3:"itt";s:2:"32";s:3:" jo";s:2:"33";s:3:" ko";s:2:"34";s:3:"n s";s:2:"35";s:3:" tu";s:2:"36";s:3:"ia ";s:2:"37";s:3:" su";s:2:"38";s:3:"a p";s:2:"39";s:3:"aa ";s:2:"40";s:3:"la ";s:2:"41";s:3:"lle";s:2:"42";s:3:"n m";s:2:"43";s:3:"le ";s:2:"44";s:3:"tte";s:2:"45";s:3:"na ";s:2:"46";s:3:" ta";s:2:"47";s:3:" ve";s:2:"48";s:3:"at ";s:2:"49";s:3:" vi";s:2:"50";s:3:"utt";s:2:"51";s:3:" sa";s:2:"52";s:3:"ise";s:2:"53";s:3:"sen";s:2:"54";s:3:" ku";s:2:"55";s:4:" nä";s:2:"56";s:4:" pä";s:2:"57";s:3:"ste";s:2:"58";s:3:" ol";s:2:"59";s:3:"a t";s:2:"60";s:3:"ais";s:2:"61";s:3:"maa";s:2:"62";s:3:"ti ";s:2:"63";s:3:"a o";s:2:"64";s:3:"oit";s:2:"65";s:5:"pää";s:2:"66";s:3:" pi";s:2:"67";s:3:"a v";s:2:"68";s:3:"ala";s:2:"69";s:3:"ine";s:2:"70";s:3:"isi";s:2:"71";s:3:"tel";s:2:"72";s:3:"tti";s:2:"73";s:3:" si";s:2:"74";s:3:"a k";s:2:"75";s:3:"all";s:2:"76";s:3:"iin";s:2:"77";s:3:"kin";s:2:"78";s:4:"stä";s:2:"79";s:3:"uom";s:2:"80";s:3:"vii";s:2:"81";s:3:" ma";s:2:"82";s:3:" se";s:2:"83";s:4:"enä";s:2:"84";s:3:" mu";s:2:"85";s:3:"a s";s:2:"86";s:3:"est";s:2:"87";s:3:"iss";s:2:"88";s:4:"llä";s:2:"89";s:3:"lok";s:2:"90";s:4:"lä ";s:2:"91";s:3:"n j";s:2:"92";s:3:"n o";s:2:"93";s:3:"toi";s:2:"94";s:3:"ven";s:2:"95";s:3:"ytt";s:2:"96";s:3:" li";s:2:"97";s:3:"ain";s:2:"98";s:3:"et ";s:2:"99";s:3:"ina";s:3:"100";s:3:"n a";s:3:"101";s:3:"n n";s:3:"102";s:3:"oll";s:3:"103";s:3:"plo";s:3:"104";s:3:"ten";s:3:"105";s:3:"ust";s:3:"106";s:4:"äll";s:3:"107";s:5:"ään";s:3:"108";s:3:" to";s:3:"109";s:3:"den";s:3:"110";s:3:"men";s:3:"111";s:3:"oki";s:3:"112";s:3:"suo";s:3:"113";s:4:"sä ";s:3:"114";s:5:"tää";s:3:"115";s:3:"uks";s:3:"116";s:3:"vat";s:3:"117";s:3:" al";s:3:"118";s:3:" ke";s:3:"119";s:3:" te";s:3:"120";s:3:"a e";s:3:"121";s:3:"lii";s:3:"122";s:3:"tai";s:3:"123";s:3:"tei";s:3:"124";s:4:"äis";s:3:"125";s:5:"ää ";s:3:"126";s:3:" pl";s:3:"127";s:3:"ell";s:3:"128";s:3:"i t";s:3:"129";s:3:"ide";s:3:"130";s:3:"ikk";s:3:"131";s:3:"ki ";s:3:"132";s:3:"nta";s:3:"133";s:3:"ova";s:3:"134";s:3:"yst";s:3:"135";s:3:"yt ";s:3:"136";s:4:"ä p";s:3:"137";s:4:"äyt";s:3:"138";s:3:" ha";s:3:"139";s:3:" pe";s:3:"140";s:4:" tä";s:3:"141";s:3:"a n";s:3:"142";s:3:"aik";s:3:"143";s:3:"i p";s:3:"144";s:3:"i v";s:3:"145";s:3:"nyt";s:3:"146";s:4:"näy";s:3:"147";s:3:"pal";s:3:"148";s:3:"tee";s:3:"149";s:3:"un ";s:3:"150";s:3:" me";s:3:"151";s:3:"a m";s:3:"152";s:3:"ess";s:3:"153";s:3:"kau";s:3:"154";s:3:"pai";s:3:"155";s:3:"stu";s:3:"156";s:3:"ut ";s:3:"157";s:3:"voi";s:3:"158";s:3:" et";s:3:"159";s:3:"a h";s:3:"160";s:3:"eis";s:3:"161";s:3:"hte";s:3:"162";s:3:"i o";s:3:"163";s:3:"iik";s:3:"164";s:3:"ita";s:3:"165";s:3:"jou";s:3:"166";s:3:"mis";s:3:"167";s:3:"nin";s:3:"168";s:3:"nut";s:3:"169";s:3:"sia";s:3:"170";s:4:"ssä";s:3:"171";s:3:"van";s:3:"172";s:3:" ty";s:3:"173";s:3:" yh";s:3:"174";s:3:"aks";s:3:"175";s:3:"ime";s:3:"176";s:3:"loi";s:3:"177";s:3:"me ";s:3:"178";s:3:"n e";s:3:"179";s:3:"n h";s:3:"180";s:3:"n l";s:3:"181";s:3:"oin";s:3:"182";s:3:"ome";s:3:"183";s:3:"ott";s:3:"184";s:3:"ouk";s:3:"185";s:3:"sit";s:3:"186";s:3:"sti";s:3:"187";s:3:"tet";s:3:"188";s:3:"tie";s:3:"189";s:3:"ukk";s:3:"190";s:4:"ä k";s:3:"191";s:3:" ra";s:3:"192";s:3:" ti";s:3:"193";s:3:"aja";s:3:"194";s:3:"asi";s:3:"195";s:3:"ent";s:3:"196";s:3:"iga";s:3:"197";s:3:"iig";s:3:"198";s:3:"ite";s:3:"199";s:3:"jan";s:3:"200";s:3:"kaa";s:3:"201";s:3:"kse";s:3:"202";s:3:"laa";s:3:"203";s:3:"lan";s:3:"204";s:3:"li ";s:3:"205";s:4:"näj";s:3:"206";s:3:"ole";s:3:"207";s:3:"tii";s:3:"208";s:3:"usi";s:3:"209";s:5:"äjä";s:3:"210";s:3:" ov";s:3:"211";s:3:"a a";s:3:"212";s:3:"ant";s:3:"213";s:3:"ava";s:3:"214";s:3:"ei ";s:3:"215";s:3:"eri";s:3:"216";s:3:"kan";s:3:"217";s:3:"kku";s:3:"218";s:3:"lai";s:3:"219";s:3:"lis";s:3:"220";s:4:"läi";s:3:"221";s:3:"mat";s:3:"222";s:3:"ois";s:3:"223";s:3:"pel";s:3:"224";s:3:"sil";s:3:"225";s:3:"sty";s:3:"226";s:3:"taj";s:3:"227";s:3:"tav";s:3:"228";s:3:"ttu";s:3:"229";s:4:"työ";s:3:"230";s:4:"yös";s:3:"231";s:4:"ä o";s:3:"232";s:3:" ai";s:3:"233";s:3:" pu";s:3:"234";s:3:"a j";s:3:"235";s:3:"a l";s:3:"236";s:3:"aal";s:3:"237";s:3:"arv";s:3:"238";s:3:"ass";s:3:"239";s:3:"ien";s:3:"240";s:3:"imi";s:3:"241";s:3:"imm";s:3:"242";s:4:"itä";s:3:"243";s:3:"ka ";s:3:"244";s:3:"kes";s:3:"245";s:3:"kue";s:3:"246";s:3:"lee";s:3:"247";s:3:"lin";s:3:"248";s:3:"llo";s:3:"249";s:3:"one";s:3:"250";s:3:"ri ";s:3:"251";s:3:"t o";s:3:"252";s:3:"t p";s:3:"253";s:3:"tu ";s:3:"254";s:3:"val";s:3:"255";s:3:"vuo";s:3:"256";s:3:" ei";s:3:"257";s:3:" he";s:3:"258";s:3:" hy";s:3:"259";s:3:" my";s:3:"260";s:3:" vo";s:3:"261";s:3:"ali";s:3:"262";s:3:"alo";s:3:"263";s:3:"ano";s:3:"264";s:3:"ast";s:3:"265";s:3:"att";s:3:"266";s:3:"auk";s:3:"267";s:3:"eli";s:3:"268";s:3:"ely";s:3:"269";s:3:"hti";s:3:"270";s:3:"ika";s:3:"271";s:3:"ken";s:3:"272";s:3:"kki";s:3:"273";s:3:"lys";s:3:"274";s:3:"min";s:3:"275";s:4:"myö";s:3:"276";s:3:"oht";s:3:"277";s:3:"oma";s:3:"278";s:3:"tus";s:3:"279";s:3:"umi";s:3:"280";s:3:"yks";s:3:"281";s:4:"ät ";s:3:"282";s:5:"ääl";s:3:"283";s:4:"ös ";s:3:"284";s:3:" ar";s:3:"285";s:3:" eu";s:3:"286";s:3:" hu";s:3:"287";s:3:" na";s:3:"288";s:3:"aat";s:3:"289";s:3:"alk";s:3:"290";s:3:"alu";s:3:"291";s:3:"ans";s:3:"292";s:3:"arj";s:3:"293";s:3:"enn";s:3:"294";s:3:"han";s:3:"295";s:3:"kuu";s:3:"296";s:3:"n y";s:3:"297";s:3:"set";s:3:"298";s:3:"sim";s:3:"299";}s:6:"french";a:300:{s:3:"es ";s:1:"0";s:3:" de";s:1:"1";s:3:"de ";s:1:"2";s:3:" le";s:1:"3";s:3:"ent";s:1:"4";s:3:"le ";s:1:"5";s:3:"nt ";s:1:"6";s:3:"la ";s:1:"7";s:3:"s d";s:1:"8";s:3:" la";s:1:"9";s:3:"ion";s:2:"10";s:3:"on ";s:2:"11";s:3:"re ";s:2:"12";s:3:" pa";s:2:"13";s:3:"e l";s:2:"14";s:3:"e d";s:2:"15";s:3:" l'";s:2:"16";s:3:"e p";s:2:"17";s:3:" co";s:2:"18";s:3:" pr";s:2:"19";s:3:"tio";s:2:"20";s:3:"ns ";s:2:"21";s:3:" en";s:2:"22";s:3:"ne ";s:2:"23";s:3:"que";s:2:"24";s:3:"r l";s:2:"25";s:3:"les";s:2:"26";s:3:"ur ";s:2:"27";s:3:"en ";s:2:"28";s:3:"ati";s:2:"29";s:3:"ue ";s:2:"30";s:3:" po";s:2:"31";s:3:" d'";s:2:"32";s:3:"par";s:2:"33";s:3:" a ";s:2:"34";s:3:"et ";s:2:"35";s:3:"it ";s:2:"36";s:3:" qu";s:2:"37";s:3:"men";s:2:"38";s:3:"ons";s:2:"39";s:3:"te ";s:2:"40";s:3:" et";s:2:"41";s:3:"t d";s:2:"42";s:3:" re";s:2:"43";s:3:"des";s:2:"44";s:3:" un";s:2:"45";s:3:"ie ";s:2:"46";s:3:"s l";s:2:"47";s:3:" su";s:2:"48";s:3:"pou";s:2:"49";s:3:" au";s:2:"50";s:4:" à ";s:2:"51";s:3:"con";s:2:"52";s:3:"er ";s:2:"53";s:3:" no";s:2:"54";s:3:"ait";s:2:"55";s:3:"e c";s:2:"56";s:3:"se ";s:2:"57";s:4:"té ";s:2:"58";s:3:"du ";s:2:"59";s:3:" du";s:2:"60";s:4:" dé";s:2:"61";s:3:"ce ";s:2:"62";s:3:"e e";s:2:"63";s:3:"is ";s:2:"64";s:3:"n d";s:2:"65";s:3:"s a";s:2:"66";s:3:" so";s:2:"67";s:3:"e r";s:2:"68";s:3:"e s";s:2:"69";s:3:"our";s:2:"70";s:3:"res";s:2:"71";s:3:"ssi";s:2:"72";s:3:"eur";s:2:"73";s:3:" se";s:2:"74";s:3:"eme";s:2:"75";s:3:"est";s:2:"76";s:3:"us ";s:2:"77";s:3:"sur";s:2:"78";s:3:"ant";s:2:"79";s:3:"iqu";s:2:"80";s:3:"s p";s:2:"81";s:3:"une";s:2:"82";s:3:"uss";s:2:"83";s:3:"l'a";s:2:"84";s:3:"pro";s:2:"85";s:3:"ter";s:2:"86";s:3:"tre";s:2:"87";s:3:"end";s:2:"88";s:3:"rs ";s:2:"89";s:3:" ce";s:2:"90";s:3:"e a";s:2:"91";s:3:"t p";s:2:"92";s:3:"un ";s:2:"93";s:3:" ma";s:2:"94";s:3:" ru";s:2:"95";s:4:" ré";s:2:"96";s:3:"ous";s:2:"97";s:3:"ris";s:2:"98";s:3:"rus";s:2:"99";s:3:"sse";s:3:"100";s:3:"ans";s:3:"101";s:3:"ar ";s:3:"102";s:3:"com";s:3:"103";s:3:"e m";s:3:"104";s:3:"ire";s:3:"105";s:3:"nce";s:3:"106";s:3:"nte";s:3:"107";s:3:"t l";s:3:"108";s:3:" av";s:3:"109";s:3:" mo";s:3:"110";s:3:" te";s:3:"111";s:3:"il ";s:3:"112";s:3:"me ";s:3:"113";s:3:"ont";s:3:"114";s:3:"ten";s:3:"115";s:3:"a p";s:3:"116";s:3:"dan";s:3:"117";s:3:"pas";s:3:"118";s:3:"qui";s:3:"119";s:3:"s e";s:3:"120";s:3:"s s";s:3:"121";s:3:" in";s:3:"122";s:3:"ist";s:3:"123";s:3:"lle";s:3:"124";s:3:"nou";s:3:"125";s:4:"pré";s:3:"126";s:3:"'un";s:3:"127";s:3:"air";s:3:"128";s:3:"d'a";s:3:"129";s:3:"ir ";s:3:"130";s:3:"n e";s:3:"131";s:3:"rop";s:3:"132";s:3:"ts ";s:3:"133";s:3:" da";s:3:"134";s:3:"a s";s:3:"135";s:3:"as ";s:3:"136";s:3:"au ";s:3:"137";s:3:"den";s:3:"138";s:3:"mai";s:3:"139";s:3:"mis";s:3:"140";s:3:"ori";s:3:"141";s:3:"out";s:3:"142";s:3:"rme";s:3:"143";s:3:"sio";s:3:"144";s:3:"tte";s:3:"145";s:3:"ux ";s:3:"146";s:3:"a d";s:3:"147";s:3:"ien";s:3:"148";s:3:"n a";s:3:"149";s:3:"ntr";s:3:"150";s:3:"omm";s:3:"151";s:3:"ort";s:3:"152";s:3:"ouv";s:3:"153";s:3:"s c";s:3:"154";s:3:"son";s:3:"155";s:3:"tes";s:3:"156";s:3:"ver";s:3:"157";s:4:"ère";s:3:"158";s:3:" il";s:3:"159";s:3:" m ";s:3:"160";s:3:" sa";s:3:"161";s:3:" ve";s:3:"162";s:3:"a r";s:3:"163";s:3:"ais";s:3:"164";s:3:"ava";s:3:"165";s:3:"di ";s:3:"166";s:3:"n p";s:3:"167";s:3:"sti";s:3:"168";s:3:"ven";s:3:"169";s:3:" mi";s:3:"170";s:3:"ain";s:3:"171";s:3:"enc";s:3:"172";s:3:"for";s:3:"173";s:4:"ité";s:3:"174";s:3:"lar";s:3:"175";s:3:"oir";s:3:"176";s:3:"rem";s:3:"177";s:3:"ren";s:3:"178";s:3:"rro";s:3:"179";s:4:"rés";s:3:"180";s:3:"sie";s:3:"181";s:3:"t a";s:3:"182";s:3:"tur";s:3:"183";s:3:" pe";s:3:"184";s:3:" to";s:3:"185";s:3:"d'u";s:3:"186";s:3:"ell";s:3:"187";s:3:"err";s:3:"188";s:3:"ers";s:3:"189";s:3:"ide";s:3:"190";s:3:"ine";s:3:"191";s:3:"iss";s:3:"192";s:3:"mes";s:3:"193";s:3:"por";s:3:"194";s:3:"ran";s:3:"195";s:3:"sit";s:3:"196";s:3:"st ";s:3:"197";s:3:"t r";s:3:"198";s:3:"uti";s:3:"199";s:3:"vai";s:3:"200";s:4:"é l";s:3:"201";s:4:"ési";s:3:"202";s:3:" di";s:3:"203";s:3:" n'";s:3:"204";s:4:" ét";s:3:"205";s:3:"a c";s:3:"206";s:3:"ass";s:3:"207";s:3:"e t";s:3:"208";s:3:"in ";s:3:"209";s:3:"nde";s:3:"210";s:3:"pre";s:3:"211";s:3:"rat";s:3:"212";s:3:"s m";s:3:"213";s:3:"ste";s:3:"214";s:3:"tai";s:3:"215";s:3:"tch";s:3:"216";s:3:"ui ";s:3:"217";s:3:"uro";s:3:"218";s:4:"ès ";s:3:"219";s:3:" es";s:3:"220";s:3:" fo";s:3:"221";s:3:" tr";s:3:"222";s:3:"'ad";s:3:"223";s:3:"app";s:3:"224";s:3:"aux";s:3:"225";s:4:"e à";s:3:"226";s:3:"ett";s:3:"227";s:3:"iti";s:3:"228";s:3:"lit";s:3:"229";s:3:"nal";s:3:"230";s:4:"opé";s:3:"231";s:3:"r d";s:3:"232";s:3:"ra ";s:3:"233";s:3:"rai";s:3:"234";s:3:"ror";s:3:"235";s:3:"s r";s:3:"236";s:3:"tat";s:3:"237";s:4:"uté";s:3:"238";s:4:"à l";s:3:"239";s:3:" af";s:3:"240";s:3:"anc";s:3:"241";s:3:"ara";s:3:"242";s:3:"art";s:3:"243";s:3:"bre";s:3:"244";s:4:"ché";s:3:"245";s:3:"dre";s:3:"246";s:3:"e f";s:3:"247";s:3:"ens";s:3:"248";s:3:"lem";s:3:"249";s:3:"n r";s:3:"250";s:3:"n t";s:3:"251";s:3:"ndr";s:3:"252";s:3:"nne";s:3:"253";s:3:"onn";s:3:"254";s:3:"pos";s:3:"255";s:3:"s t";s:3:"256";s:3:"tiq";s:3:"257";s:3:"ure";s:3:"258";s:3:" tu";s:3:"259";s:3:"ale";s:3:"260";s:3:"and";s:3:"261";s:3:"ave";s:3:"262";s:3:"cla";s:3:"263";s:3:"cou";s:3:"264";s:3:"e n";s:3:"265";s:3:"emb";s:3:"266";s:3:"ins";s:3:"267";s:3:"jou";s:3:"268";s:3:"mme";s:3:"269";s:3:"rie";s:3:"270";s:4:"rès";s:3:"271";s:3:"sem";s:3:"272";s:3:"str";s:3:"273";s:3:"t i";s:3:"274";s:3:"ues";s:3:"275";s:3:"uni";s:3:"276";s:3:"uve";s:3:"277";s:4:"é d";s:3:"278";s:4:"ée ";s:3:"279";s:3:" ch";s:3:"280";s:3:" do";s:3:"281";s:3:" eu";s:3:"282";s:3:" fa";s:3:"283";s:3:" lo";s:3:"284";s:3:" ne";s:3:"285";s:3:" ra";s:3:"286";s:3:"arl";s:3:"287";s:3:"att";s:3:"288";s:3:"ec ";s:3:"289";s:3:"ica";s:3:"290";s:3:"l a";s:3:"291";s:3:"l'o";s:3:"292";s:4:"l'é";s:3:"293";s:3:"mmi";s:3:"294";s:3:"nta";s:3:"295";s:3:"orm";s:3:"296";s:3:"ou ";s:3:"297";s:3:"r u";s:3:"298";s:3:"rle";s:3:"299";}s:6:"german";a:300:{s:3:"en ";s:1:"0";s:3:"er ";s:1:"1";s:3:" de";s:1:"2";s:3:"der";s:1:"3";s:3:"ie ";s:1:"4";s:3:" di";s:1:"5";s:3:"die";s:1:"6";s:3:"sch";s:1:"7";s:3:"ein";s:1:"8";s:3:"che";s:1:"9";s:3:"ich";s:2:"10";s:3:"den";s:2:"11";s:3:"in ";s:2:"12";s:3:"te ";s:2:"13";s:3:"ch ";s:2:"14";s:3:" ei";s:2:"15";s:3:"ung";s:2:"16";s:3:"n d";s:2:"17";s:3:"nd ";s:2:"18";s:3:" be";s:2:"19";s:3:"ver";s:2:"20";s:3:"es ";s:2:"21";s:3:" zu";s:2:"22";s:3:"eit";s:2:"23";s:3:"gen";s:2:"24";s:3:"und";s:2:"25";s:3:" un";s:2:"26";s:3:" au";s:2:"27";s:3:" in";s:2:"28";s:3:"cht";s:2:"29";s:3:"it ";s:2:"30";s:3:"ten";s:2:"31";s:3:" da";s:2:"32";s:3:"ent";s:2:"33";s:3:" ve";s:2:"34";s:3:"and";s:2:"35";s:3:" ge";s:2:"36";s:3:"ine";s:2:"37";s:3:" mi";s:2:"38";s:3:"r d";s:2:"39";s:3:"hen";s:2:"40";s:3:"ng ";s:2:"41";s:3:"nde";s:2:"42";s:3:" vo";s:2:"43";s:3:"e d";s:2:"44";s:3:"ber";s:2:"45";s:3:"men";s:2:"46";s:3:"ei ";s:2:"47";s:3:"mit";s:2:"48";s:3:" st";s:2:"49";s:3:"ter";s:2:"50";s:3:"ren";s:2:"51";s:3:"t d";s:2:"52";s:3:" er";s:2:"53";s:3:"ere";s:2:"54";s:3:"n s";s:2:"55";s:3:"ste";s:2:"56";s:3:" se";s:2:"57";s:3:"e s";s:2:"58";s:3:"ht ";s:2:"59";s:3:"des";s:2:"60";s:3:"ist";s:2:"61";s:3:"ne ";s:2:"62";s:3:"auf";s:2:"63";s:3:"e a";s:2:"64";s:3:"isc";s:2:"65";s:3:"on ";s:2:"66";s:3:"rte";s:2:"67";s:3:" re";s:2:"68";s:3:" we";s:2:"69";s:3:"ges";s:2:"70";s:3:"uch";s:2:"71";s:4:" fü";s:2:"72";s:3:" so";s:2:"73";s:3:"bei";s:2:"74";s:3:"e e";s:2:"75";s:3:"nen";s:2:"76";s:3:"r s";s:2:"77";s:3:"ach";s:2:"78";s:4:"für";s:2:"79";s:3:"ier";s:2:"80";s:3:"par";s:2:"81";s:4:"ür ";s:2:"82";s:3:" ha";s:2:"83";s:3:"as ";s:2:"84";s:3:"ert";s:2:"85";s:3:" an";s:2:"86";s:3:" pa";s:2:"87";s:3:" sa";s:2:"88";s:3:" sp";s:2:"89";s:3:" wi";s:2:"90";s:3:"for";s:2:"91";s:3:"tag";s:2:"92";s:3:"zu ";s:2:"93";s:3:"das";s:2:"94";s:3:"rei";s:2:"95";s:3:"he ";s:2:"96";s:3:"hre";s:2:"97";s:3:"nte";s:2:"98";s:3:"sen";s:2:"99";s:3:"vor";s:3:"100";s:3:" sc";s:3:"101";s:3:"ech";s:3:"102";s:3:"etz";s:3:"103";s:3:"hei";s:3:"104";s:3:"lan";s:3:"105";s:3:"n a";s:3:"106";s:3:"pd ";s:3:"107";s:3:"st ";s:3:"108";s:3:"sta";s:3:"109";s:3:"ese";s:3:"110";s:3:"lic";s:3:"111";s:3:" ab";s:3:"112";s:3:" si";s:3:"113";s:3:"gte";s:3:"114";s:3:" wa";s:3:"115";s:3:"iti";s:3:"116";s:3:"kei";s:3:"117";s:3:"n e";s:3:"118";s:3:"nge";s:3:"119";s:3:"sei";s:3:"120";s:3:"tra";s:3:"121";s:3:"zen";s:3:"122";s:3:" im";s:3:"123";s:3:" la";s:3:"124";s:3:"art";s:3:"125";s:3:"im ";s:3:"126";s:3:"lle";s:3:"127";s:3:"n w";s:3:"128";s:3:"rde";s:3:"129";s:3:"rec";s:3:"130";s:3:"set";s:3:"131";s:3:"str";s:3:"132";s:3:"tei";s:3:"133";s:3:"tte";s:3:"134";s:3:" ni";s:3:"135";s:3:"e p";s:3:"136";s:3:"ehe";s:3:"137";s:3:"ers";s:3:"138";s:3:"g d";s:3:"139";s:3:"nic";s:3:"140";s:3:"von";s:3:"141";s:3:" al";s:3:"142";s:3:" pr";s:3:"143";s:3:"an ";s:3:"144";s:3:"aus";s:3:"145";s:3:"erf";s:3:"146";s:3:"r e";s:3:"147";s:3:"tze";s:3:"148";s:4:"tür";s:3:"149";s:3:"uf ";s:3:"150";s:3:"ag ";s:3:"151";s:3:"als";s:3:"152";s:3:"ar ";s:3:"153";s:3:"chs";s:3:"154";s:3:"end";s:3:"155";s:3:"ge ";s:3:"156";s:3:"ige";s:3:"157";s:3:"ion";s:3:"158";s:3:"ls ";s:3:"159";s:3:"n m";s:3:"160";s:3:"ngs";s:3:"161";s:3:"nis";s:3:"162";s:3:"nt ";s:3:"163";s:3:"ord";s:3:"164";s:3:"s s";s:3:"165";s:3:"sse";s:3:"166";s:4:" tü";s:3:"167";s:3:"ahl";s:3:"168";s:3:"e b";s:3:"169";s:3:"ede";s:3:"170";s:3:"em ";s:3:"171";s:3:"len";s:3:"172";s:3:"n i";s:3:"173";s:3:"orm";s:3:"174";s:3:"pro";s:3:"175";s:3:"rke";s:3:"176";s:3:"run";s:3:"177";s:3:"s d";s:3:"178";s:3:"wah";s:3:"179";s:3:"wer";s:3:"180";s:4:"ürk";s:3:"181";s:3:" me";s:3:"182";s:3:"age";s:3:"183";s:3:"att";s:3:"184";s:3:"ell";s:3:"185";s:3:"est";s:3:"186";s:3:"hat";s:3:"187";s:3:"n b";s:3:"188";s:3:"oll";s:3:"189";s:3:"raf";s:3:"190";s:3:"s a";s:3:"191";s:3:"tsc";s:3:"192";s:3:" es";s:3:"193";s:3:" fo";s:3:"194";s:3:" gr";s:3:"195";s:3:" ja";s:3:"196";s:3:"abe";s:3:"197";s:3:"auc";s:3:"198";s:3:"ben";s:3:"199";s:3:"e n";s:3:"200";s:3:"ege";s:3:"201";s:3:"lie";s:3:"202";s:3:"n u";s:3:"203";s:3:"r v";s:3:"204";s:3:"re ";s:3:"205";s:3:"rit";s:3:"206";s:3:"sag";s:3:"207";s:3:" am";s:3:"208";s:3:"agt";s:3:"209";s:3:"ahr";s:3:"210";s:3:"bra";s:3:"211";s:3:"de ";s:3:"212";s:3:"erd";s:3:"213";s:3:"her";s:3:"214";s:3:"ite";s:3:"215";s:3:"le ";s:3:"216";s:3:"n p";s:3:"217";s:3:"n v";s:3:"218";s:3:"or ";s:3:"219";s:3:"rbe";s:3:"220";s:3:"rt ";s:3:"221";s:3:"sic";s:3:"222";s:3:"wie";s:3:"223";s:4:"übe";s:3:"224";s:3:" is";s:3:"225";s:4:" üb";s:3:"226";s:3:"cha";s:3:"227";s:3:"chi";s:3:"228";s:3:"e f";s:3:"229";s:3:"e m";s:3:"230";s:3:"eri";s:3:"231";s:3:"ied";s:3:"232";s:3:"mme";s:3:"233";s:3:"ner";s:3:"234";s:3:"r a";s:3:"235";s:3:"sti";s:3:"236";s:3:"t a";s:3:"237";s:3:"t s";s:3:"238";s:3:"tis";s:3:"239";s:3:" ko";s:3:"240";s:3:"arb";s:3:"241";s:3:"ds ";s:3:"242";s:3:"gan";s:3:"243";s:3:"n z";s:3:"244";s:3:"r f";s:3:"245";s:3:"r w";s:3:"246";s:3:"ran";s:3:"247";s:3:"se ";s:3:"248";s:3:"t i";s:3:"249";s:3:"wei";s:3:"250";s:3:"wir";s:3:"251";s:3:" br";s:3:"252";s:3:" np";s:3:"253";s:3:"am ";s:3:"254";s:3:"bes";s:3:"255";s:3:"d d";s:3:"256";s:3:"deu";s:3:"257";s:3:"e g";s:3:"258";s:3:"e k";s:3:"259";s:3:"efo";s:3:"260";s:3:"et ";s:3:"261";s:3:"eut";s:3:"262";s:3:"fen";s:3:"263";s:3:"hse";s:3:"264";s:3:"lte";s:3:"265";s:3:"n r";s:3:"266";s:3:"npd";s:3:"267";s:3:"r b";s:3:"268";s:3:"rhe";s:3:"269";s:3:"t w";s:3:"270";s:3:"tz ";s:3:"271";s:3:" fr";s:3:"272";s:3:" ih";s:3:"273";s:3:" ke";s:3:"274";s:3:" ma";s:3:"275";s:3:"ame";s:3:"276";s:3:"ang";s:3:"277";s:3:"d s";s:3:"278";s:3:"eil";s:3:"279";s:3:"el ";s:3:"280";s:3:"era";s:3:"281";s:3:"erh";s:3:"282";s:3:"h d";s:3:"283";s:3:"i d";s:3:"284";s:3:"kan";s:3:"285";s:3:"n f";s:3:"286";s:3:"n l";s:3:"287";s:3:"nts";s:3:"288";s:3:"och";s:3:"289";s:3:"rag";s:3:"290";s:3:"rd ";s:3:"291";s:3:"spd";s:3:"292";s:3:"spr";s:3:"293";s:3:"tio";s:3:"294";s:3:" ar";s:3:"295";s:3:" en";s:3:"296";s:3:" ka";s:3:"297";s:3:"ark";s:3:"298";s:3:"ass";s:3:"299";}s:5:"hausa";a:300:{s:3:" da";s:1:"0";s:3:"da ";s:1:"1";s:3:"in ";s:1:"2";s:3:"an ";s:1:"3";s:3:"ya ";s:1:"4";s:3:" wa";s:1:"5";s:3:" ya";s:1:"6";s:3:"na ";s:1:"7";s:3:"ar ";s:1:"8";s:3:"a d";s:1:"9";s:3:" ma";s:2:"10";s:3:"wa ";s:2:"11";s:3:"a a";s:2:"12";s:3:"a k";s:2:"13";s:3:"a s";s:2:"14";s:3:" ta";s:2:"15";s:3:"wan";s:2:"16";s:3:" a ";s:2:"17";s:3:" ba";s:2:"18";s:3:" ka";s:2:"19";s:3:"ta ";s:2:"20";s:3:"a y";s:2:"21";s:3:"n d";s:2:"22";s:3:" ha";s:2:"23";s:3:" na";s:2:"24";s:3:" su";s:2:"25";s:3:" sa";s:2:"26";s:3:"kin";s:2:"27";s:3:"sa ";s:2:"28";s:3:"ata";s:2:"29";s:3:" ko";s:2:"30";s:3:"a t";s:2:"31";s:3:"su ";s:2:"32";s:3:" ga";s:2:"33";s:3:"ai ";s:2:"34";s:3:" sh";s:2:"35";s:3:"a m";s:2:"36";s:3:"uwa";s:2:"37";s:3:"iya";s:2:"38";s:3:"ma ";s:2:"39";s:3:"a w";s:2:"40";s:3:"asa";s:2:"41";s:3:"yan";s:2:"42";s:3:"ka ";s:2:"43";s:3:"ani";s:2:"44";s:3:"shi";s:2:"45";s:3:"a b";s:2:"46";s:3:"a h";s:2:"47";s:3:"a c";s:2:"48";s:3:"ama";s:2:"49";s:3:"ba ";s:2:"50";s:3:"nan";s:2:"51";s:3:"n a";s:2:"52";s:3:" mu";s:2:"53";s:3:"ana";s:2:"54";s:3:" yi";s:2:"55";s:3:"a g";s:2:"56";s:3:" za";s:2:"57";s:3:"i d";s:2:"58";s:3:" ku";s:2:"59";s:3:"aka";s:2:"60";s:3:"yi ";s:2:"61";s:3:"n k";s:2:"62";s:3:"ann";s:2:"63";s:3:"ke ";s:2:"64";s:3:"tar";s:2:"65";s:3:" ci";s:2:"66";s:3:"iki";s:2:"67";s:3:"n s";s:2:"68";s:3:"ko ";s:2:"69";s:3:" ra";s:2:"70";s:3:"ki ";s:2:"71";s:3:"ne ";s:2:"72";s:3:"a z";s:2:"73";s:3:"mat";s:2:"74";s:3:"hak";s:2:"75";s:3:"nin";s:2:"76";s:3:"e d";s:2:"77";s:3:"nna";s:2:"78";s:3:"uma";s:2:"79";s:3:"nda";s:2:"80";s:3:"a n";s:2:"81";s:3:"ada";s:2:"82";s:3:"cik";s:2:"83";s:3:"ni ";s:2:"84";s:3:"rin";s:2:"85";s:3:"una";s:2:"86";s:3:"ara";s:2:"87";s:3:"kum";s:2:"88";s:3:"akk";s:2:"89";s:3:" ce";s:2:"90";s:3:" du";s:2:"91";s:3:"man";s:2:"92";s:3:"n y";s:2:"93";s:3:"nci";s:2:"94";s:3:"sar";s:2:"95";s:3:"aki";s:2:"96";s:3:"awa";s:2:"97";s:3:"ci ";s:2:"98";s:3:"kan";s:2:"99";s:3:"kar";s:3:"100";s:3:"ari";s:3:"101";s:3:"n m";s:3:"102";s:3:"and";s:3:"103";s:3:"hi ";s:3:"104";s:3:"n t";s:3:"105";s:3:"ga ";s:3:"106";s:3:"owa";s:3:"107";s:3:"ash";s:3:"108";s:3:"kam";s:3:"109";s:3:"dan";s:3:"110";s:3:"ewa";s:3:"111";s:3:"nsa";s:3:"112";s:3:"ali";s:3:"113";s:3:"ami";s:3:"114";s:3:" ab";s:3:"115";s:3:" do";s:3:"116";s:3:"anc";s:3:"117";s:3:"n r";s:3:"118";s:3:"aya";s:3:"119";s:3:"i n";s:3:"120";s:3:"sun";s:3:"121";s:3:"uka";s:3:"122";s:3:" al";s:3:"123";s:3:" ne";s:3:"124";s:3:"a'a";s:3:"125";s:3:"cew";s:3:"126";s:3:"cin";s:3:"127";s:3:"mas";s:3:"128";s:3:"tak";s:3:"129";s:3:"un ";s:3:"130";s:3:"aba";s:3:"131";s:3:"kow";s:3:"132";s:3:"a r";s:3:"133";s:3:"ra ";s:3:"134";s:3:" ja";s:3:"135";s:4:" Æ™a";s:3:"136";s:3:"en ";s:3:"137";s:3:"r d";s:3:"138";s:3:"sam";s:3:"139";s:3:"tsa";s:3:"140";s:3:" ru";s:3:"141";s:3:"ce ";s:3:"142";s:3:"i a";s:3:"143";s:3:"abi";s:3:"144";s:3:"ida";s:3:"145";s:3:"mut";s:3:"146";s:3:"n g";s:3:"147";s:3:"n j";s:3:"148";s:3:"san";s:3:"149";s:4:"a Æ™";s:3:"150";s:3:"har";s:3:"151";s:3:"on ";s:3:"152";s:3:"i m";s:3:"153";s:3:"suk";s:3:"154";s:3:" ak";s:3:"155";s:3:" ji";s:3:"156";s:3:"yar";s:3:"157";s:3:"'ya";s:3:"158";s:3:"kwa";s:3:"159";s:3:"min";s:3:"160";s:3:" 'y";s:3:"161";s:3:"ane";s:3:"162";s:3:"ban";s:3:"163";s:3:"ins";s:3:"164";s:3:"ruw";s:3:"165";s:3:"i k";s:3:"166";s:3:"n h";s:3:"167";s:3:" ad";s:3:"168";s:3:"ake";s:3:"169";s:3:"n w";s:3:"170";s:3:"sha";s:3:"171";s:3:"utu";s:3:"172";s:4:" Æ´a";s:3:"173";s:3:"bay";s:3:"174";s:3:"tan";s:3:"175";s:4:"Æ´an";s:3:"176";s:3:"bin";s:3:"177";s:3:"duk";s:3:"178";s:3:"e m";s:3:"179";s:3:"n n";s:3:"180";s:3:"oka";s:3:"181";s:3:"yin";s:3:"182";s:4:"É—an";s:3:"183";s:3:" fa";s:3:"184";s:3:"a i";s:3:"185";s:3:"kki";s:3:"186";s:3:"re ";s:3:"187";s:3:"za ";s:3:"188";s:3:"ala";s:3:"189";s:3:"asu";s:3:"190";s:3:"han";s:3:"191";s:3:"i y";s:3:"192";s:3:"mar";s:3:"193";s:3:"ran";s:3:"194";s:4:"Æ™as";s:3:"195";s:3:"add";s:3:"196";s:3:"ars";s:3:"197";s:3:"gab";s:3:"198";s:3:"ira";s:3:"199";s:3:"mma";s:3:"200";s:3:"u d";s:3:"201";s:3:" ts";s:3:"202";s:3:"abb";s:3:"203";s:3:"abu";s:3:"204";s:3:"aga";s:3:"205";s:3:"gar";s:3:"206";s:3:"n b";s:3:"207";s:4:" É—a";s:3:"208";s:3:"aci";s:3:"209";s:3:"aik";s:3:"210";s:3:"am ";s:3:"211";s:3:"dun";s:3:"212";s:3:"e s";s:3:"213";s:3:"i b";s:3:"214";s:3:"i w";s:3:"215";s:3:"kas";s:3:"216";s:3:"kok";s:3:"217";s:3:"wam";s:3:"218";s:3:" am";s:3:"219";s:3:"amf";s:3:"220";s:3:"bba";s:3:"221";s:3:"din";s:3:"222";s:3:"fan";s:3:"223";s:3:"gwa";s:3:"224";s:3:"i s";s:3:"225";s:3:"wat";s:3:"226";s:3:"ano";s:3:"227";s:3:"are";s:3:"228";s:3:"dai";s:3:"229";s:3:"iri";s:3:"230";s:3:"ma'";s:3:"231";s:3:" la";s:3:"232";s:3:"all";s:3:"233";s:3:"dam";s:3:"234";s:3:"ika";s:3:"235";s:3:"mi ";s:3:"236";s:3:"she";s:3:"237";s:3:"tum";s:3:"238";s:3:"uni";s:3:"239";s:3:" an";s:3:"240";s:3:" ai";s:3:"241";s:3:" ke";s:3:"242";s:3:" ki";s:3:"243";s:3:"dag";s:3:"244";s:3:"mai";s:3:"245";s:3:"mfa";s:3:"246";s:3:"no ";s:3:"247";s:3:"nsu";s:3:"248";s:3:"o d";s:3:"249";s:3:"sak";s:3:"250";s:3:"um ";s:3:"251";s:3:" bi";s:3:"252";s:3:" gw";s:3:"253";s:3:" kw";s:3:"254";s:3:"jam";s:3:"255";s:3:"yya";s:3:"256";s:3:"a j";s:3:"257";s:3:"fa ";s:3:"258";s:3:"uta";s:3:"259";s:3:" hu";s:3:"260";s:3:"'a ";s:3:"261";s:3:"ans";s:3:"262";s:4:"aÉ—a";s:3:"263";s:3:"dda";s:3:"264";s:3:"hin";s:3:"265";s:3:"niy";s:3:"266";s:3:"r s";s:3:"267";s:3:"bat";s:3:"268";s:3:"dar";s:3:"269";s:3:"gan";s:3:"270";s:3:"i t";s:3:"271";s:3:"nta";s:3:"272";s:3:"oki";s:3:"273";s:3:"omi";s:3:"274";s:3:"sal";s:3:"275";s:3:"a l";s:3:"276";s:3:"kac";s:3:"277";s:3:"lla";s:3:"278";s:3:"wad";s:3:"279";s:3:"war";s:3:"280";s:3:"amm";s:3:"281";s:3:"dom";s:3:"282";s:3:"r m";s:3:"283";s:3:"ras";s:3:"284";s:3:"sai";s:3:"285";s:3:" lo";s:3:"286";s:3:"ats";s:3:"287";s:3:"hal";s:3:"288";s:3:"kat";s:3:"289";s:3:"li ";s:3:"290";s:3:"lok";s:3:"291";s:3:"n c";s:3:"292";s:3:"nar";s:3:"293";s:3:"tin";s:3:"294";s:3:"afa";s:3:"295";s:3:"bub";s:3:"296";s:3:"i g";s:3:"297";s:3:"isa";s:3:"298";s:3:"mak";s:3:"299";}s:8:"hawaiian";a:300:{s:3:" ka";s:1:"0";s:3:"na ";s:1:"1";s:3:" o ";s:1:"2";s:3:"ka ";s:1:"3";s:3:" ma";s:1:"4";s:3:" a ";s:1:"5";s:3:" la";s:1:"6";s:3:"a i";s:1:"7";s:3:"a m";s:1:"8";s:3:" i ";s:1:"9";s:3:"la ";s:2:"10";s:3:"ana";s:2:"11";s:3:"ai ";s:2:"12";s:3:"ia ";s:2:"13";s:3:"a o";s:2:"14";s:3:"a k";s:2:"15";s:3:"a h";s:2:"16";s:3:"o k";s:2:"17";s:3:" ke";s:2:"18";s:3:"a a";s:2:"19";s:3:"i k";s:2:"20";s:3:" ho";s:2:"21";s:3:" ia";s:2:"22";s:3:"ua ";s:2:"23";s:3:" na";s:2:"24";s:3:" me";s:2:"25";s:3:"e k";s:2:"26";s:3:"e a";s:2:"27";s:3:"au ";s:2:"28";s:3:"ke ";s:2:"29";s:3:"ma ";s:2:"30";s:3:"mai";s:2:"31";s:3:"aku";s:2:"32";s:3:" ak";s:2:"33";s:3:"ahi";s:2:"34";s:3:" ha";s:2:"35";s:3:" ko";s:2:"36";s:3:" e ";s:2:"37";s:3:"a l";s:2:"38";s:3:" no";s:2:"39";s:3:"me ";s:2:"40";s:3:"ku ";s:2:"41";s:3:"aka";s:2:"42";s:3:"kan";s:2:"43";s:3:"no ";s:2:"44";s:3:"i a";s:2:"45";s:3:"ho ";s:2:"46";s:3:"ou ";s:2:"47";s:3:" ai";s:2:"48";s:3:"i o";s:2:"49";s:3:"a p";s:2:"50";s:3:"o l";s:2:"51";s:3:"o a";s:2:"52";s:3:"ama";s:2:"53";s:3:"a n";s:2:"54";s:3:" an";s:2:"55";s:3:"i m";s:2:"56";s:3:"han";s:2:"57";s:3:"i i";s:2:"58";s:3:"iho";s:2:"59";s:3:"kou";s:2:"60";s:3:"ne ";s:2:"61";s:3:" ih";s:2:"62";s:3:"o i";s:2:"63";s:3:"iki";s:2:"64";s:3:"ona";s:2:"65";s:3:"hoo";s:2:"66";s:3:"le ";s:2:"67";s:3:"e h";s:2:"68";s:3:" he";s:2:"69";s:3:"ina";s:2:"70";s:3:" wa";s:2:"71";s:3:"ea ";s:2:"72";s:3:"ako";s:2:"73";s:3:"u i";s:2:"74";s:3:"kah";s:2:"75";s:3:"oe ";s:2:"76";s:3:"i l";s:2:"77";s:3:"u a";s:2:"78";s:3:" pa";s:2:"79";s:3:"hoi";s:2:"80";s:3:"e i";s:2:"81";s:3:"era";s:2:"82";s:3:"ko ";s:2:"83";s:3:"u m";s:2:"84";s:3:"kua";s:2:"85";s:3:"mak";s:2:"86";s:3:"oi ";s:2:"87";s:3:"kai";s:2:"88";s:3:"i n";s:2:"89";s:3:"a e";s:2:"90";s:3:"hin";s:2:"91";s:3:"ane";s:2:"92";s:3:" ol";s:2:"93";s:3:"i h";s:2:"94";s:3:"mea";s:2:"95";s:3:"wah";s:2:"96";s:3:"lak";s:2:"97";s:3:"e m";s:2:"98";s:3:"o n";s:2:"99";s:3:"u l";s:3:"100";s:3:"ika";s:3:"101";s:3:"ki ";s:3:"102";s:3:"a w";s:3:"103";s:3:"mal";s:3:"104";s:3:"hi ";s:3:"105";s:3:"e n";s:3:"106";s:3:"u o";s:3:"107";s:3:"hik";s:3:"108";s:3:" ku";s:3:"109";s:3:"e l";s:3:"110";s:3:"ele";s:3:"111";s:3:"ra ";s:3:"112";s:3:"ber";s:3:"113";s:3:"ine";s:3:"114";s:3:"abe";s:3:"115";s:3:"ain";s:3:"116";s:3:"ala";s:3:"117";s:3:"lo ";s:3:"118";s:3:" po";s:3:"119";s:3:"kon";s:3:"120";s:3:" ab";s:3:"121";s:3:"ole";s:3:"122";s:3:"he ";s:3:"123";s:3:"pau";s:3:"124";s:3:"mah";s:3:"125";s:3:"va ";s:3:"126";s:3:"ela";s:3:"127";s:3:"kau";s:3:"128";s:3:"nak";s:3:"129";s:3:" oe";s:3:"130";s:3:"kei";s:3:"131";s:3:"oia";s:3:"132";s:3:" ie";s:3:"133";s:3:"ram";s:3:"134";s:3:" oi";s:3:"135";s:3:"oa ";s:3:"136";s:3:"eho";s:3:"137";s:3:"hov";s:3:"138";s:3:"ieh";s:3:"139";s:3:"ova";s:3:"140";s:3:" ua";s:3:"141";s:3:"una";s:3:"142";s:3:"ara";s:3:"143";s:3:"o s";s:3:"144";s:3:"awa";s:3:"145";s:3:"o o";s:3:"146";s:3:"nau";s:3:"147";s:3:"u n";s:3:"148";s:3:"wa ";s:3:"149";s:3:"wai";s:3:"150";s:3:"hel";s:3:"151";s:3:" ae";s:3:"152";s:3:" al";s:3:"153";s:3:"ae ";s:3:"154";s:3:"ta ";s:3:"155";s:3:"aik";s:3:"156";s:3:" hi";s:3:"157";s:3:"ale";s:3:"158";s:3:"ila";s:3:"159";s:3:"lel";s:3:"160";s:3:"ali";s:3:"161";s:3:"eik";s:3:"162";s:3:"olo";s:3:"163";s:3:"onu";s:3:"164";s:3:" lo";s:3:"165";s:3:"aua";s:3:"166";s:3:"e o";s:3:"167";s:3:"ola";s:3:"168";s:3:"hon";s:3:"169";s:3:"mam";s:3:"170";s:3:"nan";s:3:"171";s:3:" au";s:3:"172";s:3:"aha";s:3:"173";s:3:"lau";s:3:"174";s:3:"nua";s:3:"175";s:3:"oho";s:3:"176";s:3:"oma";s:3:"177";s:3:" ao";s:3:"178";s:3:"ii ";s:3:"179";s:3:"alu";s:3:"180";s:3:"ima";s:3:"181";s:3:"mau";s:3:"182";s:3:"ike";s:3:"183";s:3:"apa";s:3:"184";s:3:"elo";s:3:"185";s:3:"lii";s:3:"186";s:3:"poe";s:3:"187";s:3:"aia";s:3:"188";s:3:"noa";s:3:"189";s:3:" in";s:3:"190";s:3:"o m";s:3:"191";s:3:"oka";s:3:"192";s:3:"'u ";s:3:"193";s:3:"aho";s:3:"194";s:3:"ei ";s:3:"195";s:3:"eka";s:3:"196";s:3:"ha ";s:3:"197";s:3:"lu ";s:3:"198";s:3:"nei";s:3:"199";s:3:"hol";s:3:"200";s:3:"ino";s:3:"201";s:3:"o e";s:3:"202";s:3:"ema";s:3:"203";s:3:"iwa";s:3:"204";s:3:"olu";s:3:"205";s:3:"ada";s:3:"206";s:3:"naa";s:3:"207";s:3:"pa ";s:3:"208";s:3:"u k";s:3:"209";s:3:"ewa";s:3:"210";s:3:"hua";s:3:"211";s:3:"lam";s:3:"212";s:3:"lua";s:3:"213";s:3:"o h";s:3:"214";s:3:"ook";s:3:"215";s:3:"u h";s:3:"216";s:3:" li";s:3:"217";s:3:"ahu";s:3:"218";s:3:"amu";s:3:"219";s:3:"ui ";s:3:"220";s:3:" il";s:3:"221";s:3:" mo";s:3:"222";s:3:" se";s:3:"223";s:3:"eia";s:3:"224";s:3:"law";s:3:"225";s:3:" hu";s:3:"226";s:3:" ik";s:3:"227";s:3:"ail";s:3:"228";s:3:"e p";s:3:"229";s:3:"li ";s:3:"230";s:3:"lun";s:3:"231";s:3:"uli";s:3:"232";s:3:"io ";s:3:"233";s:3:"kik";s:3:"234";s:3:"noh";s:3:"235";s:3:"u e";s:3:"236";s:3:" sa";s:3:"237";s:3:"aaw";s:3:"238";s:3:"awe";s:3:"239";s:3:"ena";s:3:"240";s:3:"hal";s:3:"241";s:3:"kol";s:3:"242";s:3:"lan";s:3:"243";s:3:" le";s:3:"244";s:3:" ne";s:3:"245";s:3:"a'u";s:3:"246";s:3:"ilo";s:3:"247";s:3:"kap";s:3:"248";s:3:"oko";s:3:"249";s:3:"sa ";s:3:"250";s:3:" pe";s:3:"251";s:3:"hop";s:3:"252";s:3:"loa";s:3:"253";s:3:"ope";s:3:"254";s:3:"pe ";s:3:"255";s:3:" ad";s:3:"256";s:3:" pu";s:3:"257";s:3:"ahe";s:3:"258";s:3:"aol";s:3:"259";s:3:"ia'";s:3:"260";s:3:"lai";s:3:"261";s:3:"loh";s:3:"262";s:3:"na'";s:3:"263";s:3:"oom";s:3:"264";s:3:"aau";s:3:"265";s:3:"eri";s:3:"266";s:3:"kul";s:3:"267";s:3:"we ";s:3:"268";s:3:"ake";s:3:"269";s:3:"kek";s:3:"270";s:3:"laa";s:3:"271";s:3:"ri ";s:3:"272";s:3:"iku";s:3:"273";s:3:"kak";s:3:"274";s:3:"lim";s:3:"275";s:3:"nah";s:3:"276";s:3:"ner";s:3:"277";s:3:"nui";s:3:"278";s:3:"ono";s:3:"279";s:3:"a u";s:3:"280";s:3:"dam";s:3:"281";s:3:"kum";s:3:"282";s:3:"lok";s:3:"283";s:3:"mua";s:3:"284";s:3:"uma";s:3:"285";s:3:"wal";s:3:"286";s:3:"wi ";s:3:"287";s:3:"'i ";s:3:"288";s:3:"a'i";s:3:"289";s:3:"aan";s:3:"290";s:3:"alo";s:3:"291";s:3:"eta";s:3:"292";s:3:"mu ";s:3:"293";s:3:"ohe";s:3:"294";s:3:"u p";s:3:"295";s:3:"ula";s:3:"296";s:3:"uwa";s:3:"297";s:3:" nu";s:3:"298";s:3:"amo";s:3:"299";}s:5:"hindi";a:300:{s:7:"ें ";s:1:"0";s:7:" है";s:1:"1";s:9:"में";s:1:"2";s:7:" मे";s:1:"3";s:7:"ने ";s:1:"4";s:7:"की ";s:1:"5";s:7:"के ";s:1:"6";s:7:"है ";s:1:"7";s:7:" के";s:1:"8";s:7:" की";s:1:"9";s:7:" को";s:2:"10";s:7:"ों ";s:2:"11";s:7:"को ";s:2:"12";s:7:"ा ह";s:2:"13";s:7:" का";s:2:"14";s:7:"से ";s:2:"15";s:7:"ा क";s:2:"16";s:7:"े क";s:2:"17";s:7:"ं क";s:2:"18";s:7:"या ";s:2:"19";s:7:" कि";s:2:"20";s:7:" से";s:2:"21";s:7:"का ";s:2:"22";s:7:"ी क";s:2:"23";s:7:" ने";s:2:"24";s:7:" और";s:2:"25";s:7:"और ";s:2:"26";s:7:"ना ";s:2:"27";s:7:"कि ";s:2:"28";s:7:"भी ";s:2:"29";s:7:"ी स";s:2:"30";s:7:" जा";s:2:"31";s:7:" पर";s:2:"32";s:7:"ार ";s:2:"33";s:7:" कर";s:2:"34";s:7:"ी ह";s:2:"35";s:7:" हो";s:2:"36";s:7:"ही ";s:2:"37";s:9:"िया";s:2:"38";s:7:" इस";s:2:"39";s:7:" रह";s:2:"40";s:7:"र क";s:2:"41";s:9:"à¥à¤¨à¤¾";s:2:"42";s:7:"ता ";s:2:"43";s:7:"ान ";s:2:"44";s:7:"े स";s:2:"45";s:7:" भी";s:2:"46";s:7:" रा";s:2:"47";s:7:"े ह";s:2:"48";s:7:" चà¥";s:2:"49";s:7:" पा";s:2:"50";s:7:"पर ";s:2:"51";s:9:"चà¥à¤¨";s:2:"52";s:9:"नाव";s:2:"53";s:7:" कह";s:2:"54";s:9:"पà¥à¤°";s:2:"55";s:7:" भा";s:2:"56";s:9:"राज";s:2:"57";s:9:"हैं";s:2:"58";s:7:"ा स";s:2:"59";s:7:"ै क";s:2:"60";s:7:"ैं ";s:2:"61";s:7:"नी ";s:2:"62";s:7:"ल क";s:2:"63";s:7:"ीं ";s:2:"64";s:7:"़ी ";s:2:"65";s:7:"था ";s:2:"66";s:7:"री ";s:2:"67";s:7:"ाव ";s:2:"68";s:7:"े ब";s:2:"69";s:7:" पà¥";s:2:"70";s:9:"कà¥à¤·";s:2:"71";s:7:"पा ";s:2:"72";s:7:"ले ";s:2:"73";s:7:" दे";s:2:"74";s:7:"ला ";s:2:"75";s:7:"हा ";s:2:"76";s:9:"ाजप";s:2:"77";s:7:" था";s:2:"78";s:7:" नह";s:2:"79";s:7:"इस ";s:2:"80";s:7:"कर ";s:2:"81";s:9:"जपा";s:2:"82";s:9:"नही";s:2:"83";s:9:"भाज";s:2:"84";s:9:"यों";s:2:"85";s:7:"र स";s:2:"86";s:9:"हीं";s:2:"87";s:7:" अम";s:2:"88";s:7:" बा";s:2:"89";s:7:" मा";s:2:"90";s:7:" वि";s:2:"91";s:9:"रीक";s:2:"92";s:7:"िठ";s:2:"93";s:7:"े प";s:2:"94";s:9:"à¥à¤¯à¤¾";s:2:"95";s:7:" ही";s:2:"96";s:7:"ं म";s:2:"97";s:9:"कार";s:2:"98";s:7:"ा ज";s:2:"99";s:7:"े ल";s:3:"100";s:7:" ता";s:3:"101";s:7:" दि";s:3:"102";s:7:" सा";s:3:"103";s:7:" हम";s:3:"104";s:7:"ा न";s:3:"105";s:7:"ा म";s:3:"106";s:9:"ाक़";s:3:"107";s:9:"à¥à¤¤à¤¾";s:3:"108";s:7:" à¤à¤•";s:3:"109";s:7:" सं";s:3:"110";s:7:" सà¥";s:3:"111";s:9:"अमर";s:3:"112";s:9:"क़ी";s:3:"113";s:9:"ताज";s:3:"114";s:9:"मरी";s:3:"115";s:9:"सà¥à¤¥";s:3:"116";s:7:"ा थ";s:3:"117";s:9:"ारà¥";s:3:"118";s:7:" हà¥";s:3:"119";s:9:"इरा";s:3:"120";s:7:"à¤à¤• ";s:3:"121";s:7:"न क";s:3:"122";s:7:"र म";s:3:"123";s:9:"राक";s:3:"124";s:7:"ी ज";s:3:"125";s:7:"ी न";s:3:"126";s:7:" इर";s:3:"127";s:7:" उन";s:3:"128";s:7:" पह";s:3:"129";s:9:"कहा";s:3:"130";s:7:"ते ";s:3:"131";s:7:"े अ";s:3:"132";s:7:" तो";s:3:"133";s:7:" सà¥";s:3:"134";s:7:"ति ";s:3:"135";s:7:"ती ";s:3:"136";s:7:"तो ";s:3:"137";s:9:"मिल";s:3:"138";s:7:"िक ";s:3:"139";s:9:"ियो";s:3:"140";s:9:"à¥à¤°à¥‡";s:3:"141";s:7:" अप";s:3:"142";s:7:" फ़";s:3:"143";s:7:" लि";s:3:"144";s:7:" लो";s:3:"145";s:7:" सम";s:3:"146";s:7:"म क";s:3:"147";s:9:"रà¥à¤Ÿ";s:3:"148";s:7:"हो ";s:3:"149";s:7:"ा च";s:3:"150";s:7:"ाई ";s:3:"151";s:9:"ाने";s:3:"152";s:7:"िन ";s:3:"153";s:7:"à¥à¤¯ ";s:3:"154";s:7:" उस";s:3:"155";s:7:" क़";s:3:"156";s:7:" सक";s:3:"157";s:7:" सै";s:3:"158";s:7:"ं प";s:3:"159";s:7:"ं ह";s:3:"160";s:7:"गी ";s:3:"161";s:7:"त क";s:3:"162";s:9:"मान";s:3:"163";s:7:"र न";s:3:"164";s:9:"षà¥à¤Ÿ";s:3:"165";s:7:"स क";s:3:"166";s:9:"सà¥à¤¤";s:3:"167";s:7:"ाठ";s:3:"168";s:7:"ी ब";s:3:"169";s:7:"ी म";s:3:"170";s:9:"à¥à¤°à¥€";s:3:"171";s:7:" दो";s:3:"172";s:7:" मि";s:3:"173";s:7:" मà¥";s:3:"174";s:7:" ले";s:3:"175";s:7:" शा";s:3:"176";s:7:"ं स";s:3:"177";s:9:"ज़ा";s:3:"178";s:9:"तà¥à¤°";s:3:"179";s:7:"थी ";s:3:"180";s:9:"लिà¤";s:3:"181";s:7:"सी ";s:3:"182";s:7:"़ा ";s:3:"183";s:9:"़ार";s:3:"184";s:9:"ांग";s:3:"185";s:7:"े द";s:3:"186";s:7:"े म";s:3:"187";s:7:"à¥à¤µ ";s:3:"188";s:7:" ना";s:3:"189";s:7:" बन";s:3:"190";s:9:"ंगà¥";s:3:"191";s:9:"कां";s:3:"192";s:7:"गा ";s:3:"193";s:9:"गà¥à¤°";s:3:"194";s:7:"जा ";s:3:"195";s:9:"जà¥à¤¯";s:3:"196";s:7:"दी ";s:3:"197";s:7:"न म";s:3:"198";s:9:"पार";s:3:"199";s:7:"भा ";s:3:"200";s:9:"रही";s:3:"201";s:7:"रे ";s:3:"202";s:9:"रेस";s:3:"203";s:7:"ली ";s:3:"204";s:9:"सभा";s:3:"205";s:7:"ा र";s:3:"206";s:7:"ाल ";s:3:"207";s:7:"ी अ";s:3:"208";s:9:"ीकी";s:3:"209";s:7:"े त";s:3:"210";s:7:"ेश ";s:3:"211";s:7:" अं";s:3:"212";s:7:" तक";s:3:"213";s:7:" या";s:3:"214";s:7:"ई ह";s:3:"215";s:9:"करन";s:3:"216";s:7:"तक ";s:3:"217";s:9:"देश";s:3:"218";s:9:"वरà¥";s:3:"219";s:9:"ाया";s:3:"220";s:7:"ी भ";s:3:"221";s:7:"ेस ";s:3:"222";s:7:"à¥à¤· ";s:3:"223";s:7:" गय";s:3:"224";s:7:" जि";s:3:"225";s:7:" थी";s:3:"226";s:7:" बड";s:3:"227";s:7:" यह";s:3:"228";s:7:" वा";s:3:"229";s:9:"ंतर";s:3:"230";s:9:"अंत";s:3:"231";s:7:"क़ ";s:3:"232";s:9:"गया";s:3:"233";s:7:"टी ";s:3:"234";s:9:"निक";s:3:"235";s:9:"नà¥à¤¹";s:3:"236";s:9:"पहल";s:3:"237";s:9:"बड़";s:3:"238";s:9:"मार";s:3:"239";s:7:"र प";s:3:"240";s:9:"रने";s:3:"241";s:9:"ाज़";s:3:"242";s:7:"ि इ";s:3:"243";s:7:"ी र";s:3:"244";s:7:"े ज";s:3:"245";s:7:"े व";s:3:"246";s:7:"à¥à¤Ÿ ";s:3:"247";s:9:"à¥à¤Ÿà¥€";s:3:"248";s:7:" अब";s:3:"249";s:7:" लग";s:3:"250";s:7:" वर";s:3:"251";s:7:" सी";s:3:"252";s:7:"ं भ";s:3:"253";s:9:"उनà¥";s:3:"254";s:7:"क क";s:3:"255";s:9:"किय";s:3:"256";s:9:"देख";s:3:"257";s:9:"पूर";s:3:"258";s:9:"फ़à¥";s:3:"259";s:7:"यह ";s:3:"260";s:9:"यान";s:3:"261";s:9:"रिक";s:3:"262";s:9:"रिय";s:3:"263";s:9:"रà¥à¤¡";s:3:"264";s:9:"लेक";s:3:"265";s:9:"सकत";s:3:"266";s:9:"हों";s:3:"267";s:9:"होग";s:3:"268";s:7:"ा अ";s:3:"269";s:7:"ा द";s:3:"270";s:7:"ा प";s:3:"271";s:7:"ाद ";s:3:"272";s:9:"ारा";s:3:"273";s:7:"ित ";s:3:"274";s:7:"ी त";s:3:"275";s:7:"ी प";s:3:"276";s:7:"ो क";s:3:"277";s:7:"ो द";s:3:"278";s:7:" ते";s:3:"279";s:7:" नि";s:3:"280";s:7:" सर";s:3:"281";s:7:" हा";s:3:"282";s:7:"ं द";s:3:"283";s:9:"अपन";s:3:"284";s:9:"जान";s:3:"285";s:7:"त म";s:3:"286";s:9:"थित";s:3:"287";s:9:"पनी";s:3:"288";s:9:"महल";s:3:"289";s:7:"र ह";s:3:"290";s:9:"लोग";s:3:"291";s:7:"व क";s:3:"292";s:9:"हना";s:3:"293";s:7:"हल ";s:3:"294";s:9:"हाà¤";s:3:"295";s:9:"ाजà¥";s:3:"296";s:9:"ाना";s:3:"297";s:9:"िकà¥";s:3:"298";s:9:"िसà¥";s:3:"299";}s:9:"hungarian";a:300:{s:3:" a ";s:1:"0";s:3:" az";s:1:"1";s:3:" sz";s:1:"2";s:3:"az ";s:1:"3";s:3:" me";s:1:"4";s:3:"en ";s:1:"5";s:3:" el";s:1:"6";s:3:" ho";s:1:"7";s:3:"ek ";s:1:"8";s:3:"gy ";s:1:"9";s:3:"tt ";s:2:"10";s:3:"ett";s:2:"11";s:3:"sze";s:2:"12";s:3:" fe";s:2:"13";s:4:"és ";s:2:"14";s:3:" ki";s:2:"15";s:3:"tet";s:2:"16";s:3:" be";s:2:"17";s:3:"et ";s:2:"18";s:3:"ter";s:2:"19";s:4:" kö";s:2:"20";s:4:" és";s:2:"21";s:3:"hog";s:2:"22";s:3:"meg";s:2:"23";s:3:"ogy";s:2:"24";s:3:"szt";s:2:"25";s:3:"te ";s:2:"26";s:3:"t a";s:2:"27";s:3:"zet";s:2:"28";s:3:"a m";s:2:"29";s:3:"nek";s:2:"30";s:3:"nt ";s:2:"31";s:4:"ség";s:2:"32";s:4:"szá";s:2:"33";s:3:"ak ";s:2:"34";s:3:" va";s:2:"35";s:3:"an ";s:2:"36";s:3:"eze";s:2:"37";s:3:"ra ";s:2:"38";s:3:"ta ";s:2:"39";s:3:" mi";s:2:"40";s:3:"int";s:2:"41";s:4:"köz";s:2:"42";s:3:" is";s:2:"43";s:3:"esz";s:2:"44";s:3:"fel";s:2:"45";s:3:"min";s:2:"46";s:3:"nak";s:2:"47";s:3:"ors";s:2:"48";s:3:"zer";s:2:"49";s:3:" te";s:2:"50";s:3:"a a";s:2:"51";s:3:"a k";s:2:"52";s:3:"is ";s:2:"53";s:3:" cs";s:2:"54";s:3:"ele";s:2:"55";s:3:"er ";s:2:"56";s:3:"men";s:2:"57";s:3:"si ";s:2:"58";s:3:"tek";s:2:"59";s:3:"ti ";s:2:"60";s:3:" ne";s:2:"61";s:3:"csa";s:2:"62";s:3:"ent";s:2:"63";s:3:"z e";s:2:"64";s:3:"a t";s:2:"65";s:3:"ala";s:2:"66";s:3:"ere";s:2:"67";s:3:"es ";s:2:"68";s:3:"lom";s:2:"69";s:3:"lte";s:2:"70";s:3:"mon";s:2:"71";s:3:"ond";s:2:"72";s:3:"rsz";s:2:"73";s:3:"sza";s:2:"74";s:3:"tte";s:2:"75";s:4:"zág";s:2:"76";s:4:"ány";s:2:"77";s:3:" fo";s:2:"78";s:3:" ma";s:2:"79";s:3:"ai ";s:2:"80";s:3:"ben";s:2:"81";s:3:"el ";s:2:"82";s:3:"ene";s:2:"83";s:3:"ik ";s:2:"84";s:3:"jel";s:2:"85";s:4:"tás";s:2:"86";s:4:"áll";s:2:"87";s:3:" ha";s:2:"88";s:3:" le";s:2:"89";s:4:" ál";s:2:"90";s:3:"agy";s:2:"91";s:4:"alá";s:2:"92";s:3:"isz";s:2:"93";s:3:"y a";s:2:"94";s:3:"zte";s:2:"95";s:4:"ás ";s:2:"96";s:3:" al";s:2:"97";s:3:"e a";s:2:"98";s:3:"egy";s:2:"99";s:3:"ely";s:3:"100";s:3:"for";s:3:"101";s:3:"lat";s:3:"102";s:3:"lt ";s:3:"103";s:3:"n a";s:3:"104";s:3:"oga";s:3:"105";s:3:"on ";s:3:"106";s:3:"re ";s:3:"107";s:3:"st ";s:3:"108";s:4:"ság";s:3:"109";s:3:"t m";s:3:"110";s:4:"án ";s:3:"111";s:4:"ét ";s:3:"112";s:4:"ült";s:3:"113";s:3:" je";s:3:"114";s:3:"gi ";s:3:"115";s:3:"k a";s:3:"116";s:4:"kül";s:3:"117";s:3:"lam";s:3:"118";s:3:"len";s:3:"119";s:4:"lás";s:3:"120";s:4:"más";s:3:"121";s:3:"s k";s:3:"122";s:3:"vez";s:3:"123";s:4:"áso";s:3:"124";s:5:"özö";s:3:"125";s:3:" ta";s:3:"126";s:3:"a s";s:3:"127";s:3:"a v";s:3:"128";s:3:"asz";s:3:"129";s:4:"atá";s:3:"130";s:4:"etÅ‘";s:3:"131";s:3:"kez";s:3:"132";s:3:"let";s:3:"133";s:3:"mag";s:3:"134";s:3:"nem";s:3:"135";s:4:"szé";s:3:"136";s:3:"z m";s:3:"137";s:4:"át ";s:3:"138";s:4:"éte";s:3:"139";s:4:"ölt";s:3:"140";s:3:" de";s:3:"141";s:3:" gy";s:3:"142";s:4:" ké";s:3:"143";s:3:" mo";s:3:"144";s:4:" vá";s:3:"145";s:4:" ér";s:3:"146";s:3:"a b";s:3:"147";s:3:"a f";s:3:"148";s:3:"ami";s:3:"149";s:3:"at ";s:3:"150";s:3:"ato";s:3:"151";s:3:"att";s:3:"152";s:3:"bef";s:3:"153";s:3:"dta";s:3:"154";s:3:"gya";s:3:"155";s:3:"hat";s:3:"156";s:3:"i s";s:3:"157";s:3:"las";s:3:"158";s:3:"ndt";s:3:"159";s:3:"rt ";s:3:"160";s:3:"szo";s:3:"161";s:3:"t k";s:3:"162";s:4:"tár";s:3:"163";s:4:"tés";s:3:"164";s:3:"van";s:3:"165";s:5:"ásá";s:3:"166";s:4:"ól ";s:3:"167";s:4:" bé";s:3:"168";s:3:" eg";s:3:"169";s:3:" or";s:3:"170";s:4:" pá";s:3:"171";s:4:" pé";s:3:"172";s:3:" ve";s:3:"173";s:3:"ban";s:3:"174";s:3:"eke";s:3:"175";s:4:"ekü";s:3:"176";s:4:"elÅ‘";s:3:"177";s:3:"erv";s:3:"178";s:3:"ete";s:3:"179";s:3:"fog";s:3:"180";s:3:"i a";s:3:"181";s:3:"kis";s:3:"182";s:4:"lád";s:3:"183";s:3:"nte";s:3:"184";s:3:"nye";s:3:"185";s:3:"nyi";s:3:"186";s:3:"ok ";s:3:"187";s:4:"omá";s:3:"188";s:3:"os ";s:3:"189";s:4:"rán";s:3:"190";s:4:"rás";s:3:"191";s:3:"sal";s:3:"192";s:3:"t e";s:3:"193";s:4:"vál";s:3:"194";s:3:"yar";s:3:"195";s:4:"ágo";s:3:"196";s:4:"ála";s:3:"197";s:4:"ége";s:3:"198";s:4:"ény";s:3:"199";s:4:"ött";s:3:"200";s:4:" tá";s:3:"201";s:4:"adó";s:3:"202";s:3:"elh";s:3:"203";s:3:"fej";s:3:"204";s:3:"het";s:3:"205";s:3:"hoz";s:3:"206";s:3:"ill";s:3:"207";s:4:"jár";s:3:"208";s:4:"kés";s:3:"209";s:3:"llo";s:3:"210";s:3:"mi ";s:3:"211";s:3:"ny ";s:3:"212";s:3:"ont";s:3:"213";s:3:"ren";s:3:"214";s:3:"res";s:3:"215";s:3:"rin";s:3:"216";s:3:"s a";s:3:"217";s:3:"s e";s:3:"218";s:3:"ssz";s:3:"219";s:3:"zt ";s:3:"220";s:3:" ez";s:3:"221";s:3:" ka";s:3:"222";s:3:" ke";s:3:"223";s:3:" ko";s:3:"224";s:3:" re";s:3:"225";s:3:"a h";s:3:"226";s:3:"a n";s:3:"227";s:3:"den";s:3:"228";s:4:"dó ";s:3:"229";s:3:"efo";s:3:"230";s:3:"gad";s:3:"231";s:3:"gat";s:3:"232";s:3:"gye";s:3:"233";s:3:"hel";s:3:"234";s:3:"k e";s:3:"235";s:3:"ket";s:3:"236";s:3:"les";s:3:"237";s:4:"mán";s:3:"238";s:3:"nde";s:3:"239";s:3:"nis";s:3:"240";s:3:"ozz";s:3:"241";s:3:"t b";s:3:"242";s:3:"t i";s:3:"243";s:4:"t é";s:3:"244";s:3:"tat";s:3:"245";s:3:"tos";s:3:"246";s:3:"val";s:3:"247";s:3:"z o";s:3:"248";s:3:"zak";s:3:"249";s:4:"ád ";s:3:"250";s:4:"ály";s:3:"251";s:4:"ára";s:3:"252";s:4:"ési";s:3:"253";s:4:"ész";s:3:"254";s:3:" ak";s:3:"255";s:3:" am";s:3:"256";s:3:" es";s:3:"257";s:4:" há";s:3:"258";s:3:" ny";s:3:"259";s:4:" tö";s:3:"260";s:3:"aka";s:3:"261";s:3:"art";s:3:"262";s:4:"ató";s:3:"263";s:3:"azt";s:3:"264";s:3:"bbe";s:3:"265";s:3:"ber";s:3:"266";s:4:"ció";s:3:"267";s:3:"cso";s:3:"268";s:3:"em ";s:3:"269";s:3:"eti";s:3:"270";s:4:"eté";s:3:"271";s:3:"gal";s:3:"272";s:3:"i t";s:3:"273";s:3:"ini";s:3:"274";s:3:"ist";s:3:"275";s:3:"ja ";s:3:"276";s:3:"ker";s:3:"277";s:3:"ki ";s:3:"278";s:3:"kor";s:3:"279";s:3:"koz";s:3:"280";s:4:"l é";s:3:"281";s:4:"ljá";s:3:"282";s:3:"lye";s:3:"283";s:3:"n v";s:3:"284";s:3:"ni ";s:3:"285";s:4:"pál";s:3:"286";s:3:"ror";s:3:"287";s:4:"ról";s:3:"288";s:4:"rül";s:3:"289";s:3:"s c";s:3:"290";s:3:"s p";s:3:"291";s:3:"s s";s:3:"292";s:3:"s v";s:3:"293";s:3:"sok";s:3:"294";s:3:"t j";s:3:"295";s:3:"t t";s:3:"296";s:3:"tar";s:3:"297";s:3:"tel";s:3:"298";s:3:"vat";s:3:"299";}s:9:"icelandic";a:300:{s:4:"að ";s:1:"0";s:3:"um ";s:1:"1";s:4:" að";s:1:"2";s:3:"ir ";s:1:"3";s:4:"ið ";s:1:"4";s:3:"ur ";s:1:"5";s:3:" ve";s:1:"6";s:4:" í ";s:1:"7";s:3:"na ";s:1:"8";s:4:" á ";s:1:"9";s:3:" se";s:2:"10";s:3:" er";s:2:"11";s:3:" og";s:2:"12";s:3:"ar ";s:2:"13";s:3:"og ";s:2:"14";s:3:"ver";s:2:"15";s:3:" mi";s:2:"16";s:3:"inn";s:2:"17";s:3:"nn ";s:2:"18";s:3:" fy";s:2:"19";s:3:"er ";s:2:"20";s:3:"fyr";s:2:"21";s:3:" ek";s:2:"22";s:3:" en";s:2:"23";s:3:" ha";s:2:"24";s:3:" he";s:2:"25";s:3:"ekk";s:2:"26";s:3:" st";s:2:"27";s:3:"ki ";s:2:"28";s:3:"st ";s:2:"29";s:4:"ði ";s:2:"30";s:3:" ba";s:2:"31";s:3:" me";s:2:"32";s:3:" vi";s:2:"33";s:3:"ig ";s:2:"34";s:3:"rir";s:2:"35";s:3:"yri";s:2:"36";s:3:" um";s:2:"37";s:3:"g f";s:2:"38";s:3:"leg";s:2:"39";s:3:"lei";s:2:"40";s:3:"ns ";s:2:"41";s:4:"ð s";s:2:"42";s:3:" ei";s:2:"43";s:4:" þa";s:2:"44";s:3:"in ";s:2:"45";s:3:"kki";s:2:"46";s:3:"r h";s:2:"47";s:3:"r s";s:2:"48";s:3:"egi";s:2:"49";s:3:"ein";s:2:"50";s:3:"ga ";s:2:"51";s:3:"ing";s:2:"52";s:3:"ra ";s:2:"53";s:3:"sta";s:2:"54";s:3:" va";s:2:"55";s:4:" þe";s:2:"56";s:3:"ann";s:2:"57";s:3:"en ";s:2:"58";s:3:"mil";s:2:"59";s:3:"sem";s:2:"60";s:4:"tjó";s:2:"61";s:4:"arð";s:2:"62";s:3:"di ";s:2:"63";s:3:"eit";s:2:"64";s:3:"haf";s:2:"65";s:3:"ill";s:2:"66";s:3:"ins";s:2:"67";s:3:"ist";s:2:"68";s:3:"llj";s:2:"69";s:3:"ndi";s:2:"70";s:3:"r a";s:2:"71";s:3:"r e";s:2:"72";s:3:"seg";s:2:"73";s:3:"un ";s:2:"74";s:3:"var";s:2:"75";s:3:" bi";s:2:"76";s:3:" el";s:2:"77";s:3:" fo";s:2:"78";s:3:" ge";s:2:"79";s:3:" yf";s:2:"80";s:3:"and";s:2:"81";s:3:"aug";s:2:"82";s:3:"bau";s:2:"83";s:3:"big";s:2:"84";s:3:"ega";s:2:"85";s:3:"eld";s:2:"86";s:4:"erð";s:2:"87";s:3:"fir";s:2:"88";s:3:"foo";s:2:"89";s:3:"gin";s:2:"90";s:3:"itt";s:2:"91";s:3:"n s";s:2:"92";s:3:"ngi";s:2:"93";s:3:"num";s:2:"94";s:3:"od ";s:2:"95";s:3:"ood";s:2:"96";s:3:"sin";s:2:"97";s:3:"ta ";s:2:"98";s:3:"tt ";s:2:"99";s:4:"við";s:3:"100";s:3:"yfi";s:3:"101";s:4:"ð e";s:3:"102";s:4:"ð f";s:3:"103";s:3:" hr";s:3:"104";s:4:" sé";s:3:"105";s:4:" þv";s:3:"106";s:3:"a e";s:3:"107";s:4:"a á";s:3:"108";s:3:"em ";s:3:"109";s:3:"gi ";s:3:"110";s:3:"i f";s:3:"111";s:3:"jar";s:3:"112";s:4:"jór";s:3:"113";s:3:"lja";s:3:"114";s:3:"m e";s:3:"115";s:4:"r á";s:3:"116";s:3:"rei";s:3:"117";s:3:"rst";s:3:"118";s:4:"rða";s:3:"119";s:4:"rði";s:3:"120";s:4:"rðu";s:3:"121";s:3:"stj";s:3:"122";s:3:"und";s:3:"123";s:3:"veg";s:3:"124";s:4:"ví ";s:3:"125";s:4:"ð v";s:3:"126";s:5:"það";s:3:"127";s:5:"því";s:3:"128";s:3:" fj";s:3:"129";s:3:" ko";s:3:"130";s:3:" sl";s:3:"131";s:3:"eik";s:3:"132";s:3:"end";s:3:"133";s:3:"ert";s:3:"134";s:3:"ess";s:3:"135";s:4:"fjá";s:3:"136";s:3:"fur";s:3:"137";s:3:"gir";s:3:"138";s:4:"hús";s:3:"139";s:4:"jár";s:3:"140";s:3:"n e";s:3:"141";s:3:"ri ";s:3:"142";s:3:"tar";s:3:"143";s:5:"ð þ";s:3:"144";s:4:"ðar";s:3:"145";s:4:"ður";s:3:"146";s:4:"þes";s:3:"147";s:3:" br";s:3:"148";s:4:" hú";s:3:"149";s:3:" kr";s:3:"150";s:3:" le";s:3:"151";s:3:" up";s:3:"152";s:3:"a s";s:3:"153";s:3:"egg";s:3:"154";s:3:"i s";s:3:"155";s:3:"irt";s:3:"156";s:3:"ja ";s:3:"157";s:4:"kið";s:3:"158";s:3:"len";s:3:"159";s:4:"með";s:3:"160";s:3:"mik";s:3:"161";s:3:"n b";s:3:"162";s:3:"nar";s:3:"163";s:3:"nir";s:3:"164";s:3:"nun";s:3:"165";s:3:"r f";s:3:"166";s:3:"r v";s:3:"167";s:4:"rið";s:3:"168";s:3:"rt ";s:3:"169";s:3:"sti";s:3:"170";s:3:"t v";s:3:"171";s:3:"ti ";s:3:"172";s:3:"una";s:3:"173";s:3:"upp";s:3:"174";s:4:"ða ";s:3:"175";s:4:"óna";s:3:"176";s:3:" al";s:3:"177";s:3:" fr";s:3:"178";s:3:" gr";s:3:"179";s:3:"a v";s:3:"180";s:3:"all";s:3:"181";s:3:"an ";s:3:"182";s:3:"da ";s:3:"183";s:4:"eið";s:3:"184";s:4:"eð ";s:3:"185";s:3:"fa ";s:3:"186";s:3:"fra";s:3:"187";s:3:"g e";s:3:"188";s:3:"ger";s:3:"189";s:4:"gið";s:3:"190";s:3:"gt ";s:3:"191";s:3:"han";s:3:"192";s:3:"hef";s:3:"193";s:3:"hel";s:3:"194";s:3:"her";s:3:"195";s:3:"hra";s:3:"196";s:3:"i a";s:3:"197";s:3:"i e";s:3:"198";s:3:"i v";s:3:"199";s:4:"i þ";s:3:"200";s:3:"iki";s:3:"201";s:4:"jón";s:3:"202";s:4:"jör";s:3:"203";s:3:"ka ";s:3:"204";s:4:"kró";s:3:"205";s:4:"lík";s:3:"206";s:3:"m h";s:3:"207";s:3:"n a";s:3:"208";s:3:"nga";s:3:"209";s:3:"r l";s:3:"210";s:3:"ram";s:3:"211";s:3:"ru ";s:3:"212";s:5:"ráð";s:3:"213";s:4:"rón";s:3:"214";s:3:"svo";s:3:"215";s:3:"vin";s:3:"216";s:4:"í b";s:3:"217";s:4:"í h";s:3:"218";s:4:"ð h";s:3:"219";s:4:"ð k";s:3:"220";s:4:"ð m";s:3:"221";s:5:"örð";s:3:"222";s:3:" af";s:3:"223";s:3:" fa";s:3:"224";s:4:" lí";s:3:"225";s:4:" rá";s:3:"226";s:3:" sk";s:3:"227";s:3:" sv";s:3:"228";s:3:" te";s:3:"229";s:3:"a b";s:3:"230";s:3:"a f";s:3:"231";s:3:"a h";s:3:"232";s:3:"a k";s:3:"233";s:3:"a u";s:3:"234";s:3:"afi";s:3:"235";s:3:"agn";s:3:"236";s:3:"arn";s:3:"237";s:3:"ast";s:3:"238";s:3:"ber";s:3:"239";s:3:"efu";s:3:"240";s:3:"enn";s:3:"241";s:3:"erb";s:3:"242";s:3:"erg";s:3:"243";s:3:"fi ";s:3:"244";s:3:"g a";s:3:"245";s:3:"gar";s:3:"246";s:4:"iðs";s:3:"247";s:3:"ker";s:3:"248";s:3:"kke";s:3:"249";s:3:"lan";s:3:"250";s:4:"ljó";s:3:"251";s:3:"llt";s:3:"252";s:3:"ma ";s:3:"253";s:4:"mið";s:3:"254";s:3:"n v";s:3:"255";s:4:"n í";s:3:"256";s:3:"nan";s:3:"257";s:3:"nda";s:3:"258";s:3:"ndu";s:3:"259";s:4:"nið";s:3:"260";s:3:"nna";s:3:"261";s:3:"nnu";s:3:"262";s:3:"nu ";s:3:"263";s:3:"r o";s:3:"264";s:3:"rbe";s:3:"265";s:3:"rgi";s:3:"266";s:4:"slö";s:3:"267";s:4:"sé ";s:3:"268";s:3:"t a";s:3:"269";s:3:"t h";s:3:"270";s:3:"til";s:3:"271";s:3:"tin";s:3:"272";s:3:"ugu";s:3:"273";s:3:"vil";s:3:"274";s:3:"ygg";s:3:"275";s:4:"á s";s:3:"276";s:4:"ð a";s:3:"277";s:4:"ð b";s:3:"278";s:4:"órn";s:3:"279";s:4:"ögn";s:3:"280";s:4:"öku";s:3:"281";s:3:" at";s:3:"282";s:3:" fi";s:3:"283";s:4:" fé";s:3:"284";s:3:" ka";s:3:"285";s:3:" ma";s:3:"286";s:3:" no";s:3:"287";s:3:" sa";s:3:"288";s:3:" si";s:3:"289";s:3:" ti";s:3:"290";s:4:" ák";s:3:"291";s:3:"a m";s:3:"292";s:3:"a t";s:3:"293";s:4:"a í";s:3:"294";s:4:"a þ";s:3:"295";s:3:"afa";s:3:"296";s:3:"afs";s:3:"297";s:3:"ald";s:3:"298";s:3:"arf";s:3:"299";}s:10:"indonesian";a:300:{s:3:"an ";s:1:"0";s:3:" me";s:1:"1";s:3:"kan";s:1:"2";s:3:"ang";s:1:"3";s:3:"ng ";s:1:"4";s:3:" pe";s:1:"5";s:3:"men";s:1:"6";s:3:" di";s:1:"7";s:3:" ke";s:1:"8";s:3:" da";s:1:"9";s:3:" se";s:2:"10";s:3:"eng";s:2:"11";s:3:" be";s:2:"12";s:3:"nga";s:2:"13";s:3:"nya";s:2:"14";s:3:" te";s:2:"15";s:3:"ah ";s:2:"16";s:3:"ber";s:2:"17";s:3:"aka";s:2:"18";s:3:" ya";s:2:"19";s:3:"dan";s:2:"20";s:3:"di ";s:2:"21";s:3:"yan";s:2:"22";s:3:"n p";s:2:"23";s:3:"per";s:2:"24";s:3:"a m";s:2:"25";s:3:"ita";s:2:"26";s:3:" pa";s:2:"27";s:3:"da ";s:2:"28";s:3:"ata";s:2:"29";s:3:"ada";s:2:"30";s:3:"ya ";s:2:"31";s:3:"ta ";s:2:"32";s:3:" in";s:2:"33";s:3:"ala";s:2:"34";s:3:"eri";s:2:"35";s:3:"ia ";s:2:"36";s:3:"a d";s:2:"37";s:3:"n k";s:2:"38";s:3:"am ";s:2:"39";s:3:"ga ";s:2:"40";s:3:"at ";s:2:"41";s:3:"era";s:2:"42";s:3:"n d";s:2:"43";s:3:"ter";s:2:"44";s:3:" ka";s:2:"45";s:3:"a p";s:2:"46";s:3:"ari";s:2:"47";s:3:"emb";s:2:"48";s:3:"n m";s:2:"49";s:3:"ri ";s:2:"50";s:3:" ba";s:2:"51";s:3:"aan";s:2:"52";s:3:"ak ";s:2:"53";s:3:"ra ";s:2:"54";s:3:" it";s:2:"55";s:3:"ara";s:2:"56";s:3:"ela";s:2:"57";s:3:"ni ";s:2:"58";s:3:"ali";s:2:"59";s:3:"ran";s:2:"60";s:3:"ar ";s:2:"61";s:3:"eru";s:2:"62";s:3:"lah";s:2:"63";s:3:"a b";s:2:"64";s:3:"asi";s:2:"65";s:3:"awa";s:2:"66";s:3:"eba";s:2:"67";s:3:"gan";s:2:"68";s:3:"n b";s:2:"69";s:3:" ha";s:2:"70";s:3:"ini";s:2:"71";s:3:"mer";s:2:"72";s:3:" la";s:2:"73";s:3:" mi";s:2:"74";s:3:"and";s:2:"75";s:3:"ena";s:2:"76";s:3:"wan";s:2:"77";s:3:" sa";s:2:"78";s:3:"aha";s:2:"79";s:3:"lam";s:2:"80";s:3:"n i";s:2:"81";s:3:"nda";s:2:"82";s:3:" wa";s:2:"83";s:3:"a i";s:2:"84";s:3:"dua";s:2:"85";s:3:"g m";s:2:"86";s:3:"mi ";s:2:"87";s:3:"n a";s:2:"88";s:3:"rus";s:2:"89";s:3:"tel";s:2:"90";s:3:"yak";s:2:"91";s:3:" an";s:2:"92";s:3:"dal";s:2:"93";s:3:"h d";s:2:"94";s:3:"i s";s:2:"95";s:3:"ing";s:2:"96";s:3:"min";s:2:"97";s:3:"ngg";s:2:"98";s:3:"tak";s:2:"99";s:3:"ami";s:3:"100";s:3:"beb";s:3:"101";s:3:"den";s:3:"102";s:3:"gat";s:3:"103";s:3:"ian";s:3:"104";s:3:"ih ";s:3:"105";s:3:"pad";s:3:"106";s:3:"rga";s:3:"107";s:3:"san";s:3:"108";s:3:"ua ";s:3:"109";s:3:" de";s:3:"110";s:3:"a t";s:3:"111";s:3:"arg";s:3:"112";s:3:"dar";s:3:"113";s:3:"elu";s:3:"114";s:3:"har";s:3:"115";s:3:"i k";s:3:"116";s:3:"i m";s:3:"117";s:3:"i p";s:3:"118";s:3:"ika";s:3:"119";s:3:"in ";s:3:"120";s:3:"iny";s:3:"121";s:3:"itu";s:3:"122";s:3:"mba";s:3:"123";s:3:"n t";s:3:"124";s:3:"ntu";s:3:"125";s:3:"pan";s:3:"126";s:3:"pen";s:3:"127";s:3:"sah";s:3:"128";s:3:"tan";s:3:"129";s:3:"tu ";s:3:"130";s:3:"a k";s:3:"131";s:3:"ban";s:3:"132";s:3:"edu";s:3:"133";s:3:"eka";s:3:"134";s:3:"g d";s:3:"135";s:3:"ka ";s:3:"136";s:3:"ker";s:3:"137";s:3:"nde";s:3:"138";s:3:"nta";s:3:"139";s:3:"ora";s:3:"140";s:3:"usa";s:3:"141";s:3:" du";s:3:"142";s:3:" ma";s:3:"143";s:3:"a s";s:3:"144";s:3:"ai ";s:3:"145";s:3:"ant";s:3:"146";s:3:"bas";s:3:"147";s:3:"end";s:3:"148";s:3:"i d";s:3:"149";s:3:"ira";s:3:"150";s:3:"kam";s:3:"151";s:3:"lan";s:3:"152";s:3:"n s";s:3:"153";s:3:"uli";s:3:"154";s:3:"al ";s:3:"155";s:3:"apa";s:3:"156";s:3:"ere";s:3:"157";s:3:"ert";s:3:"158";s:3:"lia";s:3:"159";s:3:"mem";s:3:"160";s:3:"rka";s:3:"161";s:3:"si ";s:3:"162";s:3:"tal";s:3:"163";s:3:"ung";s:3:"164";s:3:" ak";s:3:"165";s:3:"a a";s:3:"166";s:3:"a w";s:3:"167";s:3:"ani";s:3:"168";s:3:"ask";s:3:"169";s:3:"ent";s:3:"170";s:3:"gar";s:3:"171";s:3:"haa";s:3:"172";s:3:"i i";s:3:"173";s:3:"isa";s:3:"174";s:3:"ked";s:3:"175";s:3:"mbe";s:3:"176";s:3:"ska";s:3:"177";s:3:"tor";s:3:"178";s:3:"uan";s:3:"179";s:3:"uk ";s:3:"180";s:3:"uka";s:3:"181";s:3:" ad";s:3:"182";s:3:" to";s:3:"183";s:3:"asa";s:3:"184";s:3:"aya";s:3:"185";s:3:"bag";s:3:"186";s:3:"dia";s:3:"187";s:3:"dun";s:3:"188";s:3:"erj";s:3:"189";s:3:"mas";s:3:"190";s:3:"na ";s:3:"191";s:3:"rek";s:3:"192";s:3:"rit";s:3:"193";s:3:"sih";s:3:"194";s:3:"us ";s:3:"195";s:3:" bi";s:3:"196";s:3:"a h";s:3:"197";s:3:"ama";s:3:"198";s:3:"dib";s:3:"199";s:3:"ers";s:3:"200";s:3:"g s";s:3:"201";s:3:"han";s:3:"202";s:3:"ik ";s:3:"203";s:3:"kem";s:3:"204";s:3:"ma ";s:3:"205";s:3:"n l";s:3:"206";s:3:"nit";s:3:"207";s:3:"r b";s:3:"208";s:3:"rja";s:3:"209";s:3:"sa ";s:3:"210";s:3:" ju";s:3:"211";s:3:" or";s:3:"212";s:3:" si";s:3:"213";s:3:" ti";s:3:"214";s:3:"a y";s:3:"215";s:3:"aga";s:3:"216";s:3:"any";s:3:"217";s:3:"as ";s:3:"218";s:3:"cul";s:3:"219";s:3:"eme";s:3:"220";s:3:"emu";s:3:"221";s:3:"eny";s:3:"222";s:3:"epa";s:3:"223";s:3:"erb";s:3:"224";s:3:"erl";s:3:"225";s:3:"gi ";s:3:"226";s:3:"h m";s:3:"227";s:3:"i a";s:3:"228";s:3:"kel";s:3:"229";s:3:"li ";s:3:"230";s:3:"mel";s:3:"231";s:3:"nia";s:3:"232";s:3:"opa";s:3:"233";s:3:"rta";s:3:"234";s:3:"sia";s:3:"235";s:3:"tah";s:3:"236";s:3:"ula";s:3:"237";s:3:"un ";s:3:"238";s:3:"unt";s:3:"239";s:3:" at";s:3:"240";s:3:" bu";s:3:"241";s:3:" pu";s:3:"242";s:3:" ta";s:3:"243";s:3:"agi";s:3:"244";s:3:"alu";s:3:"245";s:3:"amb";s:3:"246";s:3:"bah";s:3:"247";s:3:"bis";s:3:"248";s:3:"er ";s:3:"249";s:3:"i t";s:3:"250";s:3:"ibe";s:3:"251";s:3:"ir ";s:3:"252";s:3:"ja ";s:3:"253";s:3:"k m";s:3:"254";s:3:"kar";s:3:"255";s:3:"lai";s:3:"256";s:3:"lal";s:3:"257";s:3:"lu ";s:3:"258";s:3:"mpa";s:3:"259";s:3:"ngk";s:3:"260";s:3:"nja";s:3:"261";s:3:"or ";s:3:"262";s:3:"pa ";s:3:"263";s:3:"pas";s:3:"264";s:3:"pem";s:3:"265";s:3:"rak";s:3:"266";s:3:"rik";s:3:"267";s:3:"seb";s:3:"268";s:3:"tam";s:3:"269";s:3:"tem";s:3:"270";s:3:"top";s:3:"271";s:3:"tuk";s:3:"272";s:3:"uni";s:3:"273";s:3:"war";s:3:"274";s:3:" al";s:3:"275";s:3:" ga";s:3:"276";s:3:" ge";s:3:"277";s:3:" ir";s:3:"278";s:3:" ja";s:3:"279";s:3:" mu";s:3:"280";s:3:" na";s:3:"281";s:3:" pr";s:3:"282";s:3:" su";s:3:"283";s:3:" un";s:3:"284";s:3:"ad ";s:3:"285";s:3:"adi";s:3:"286";s:3:"akt";s:3:"287";s:3:"ann";s:3:"288";s:3:"apo";s:3:"289";s:3:"bel";s:3:"290";s:3:"bul";s:3:"291";s:3:"der";s:3:"292";s:3:"ega";s:3:"293";s:3:"eke";s:3:"294";s:3:"ema";s:3:"295";s:3:"emp";s:3:"296";s:3:"ene";s:3:"297";s:3:"enj";s:3:"298";s:3:"esa";s:3:"299";}s:7:"italian";a:300:{s:3:" di";s:1:"0";s:3:"to ";s:1:"1";s:3:"la ";s:1:"2";s:3:" de";s:1:"3";s:3:"di ";s:1:"4";s:3:"no ";s:1:"5";s:3:" co";s:1:"6";s:3:"re ";s:1:"7";s:3:"ion";s:1:"8";s:3:"e d";s:1:"9";s:3:" e ";s:2:"10";s:3:"le ";s:2:"11";s:3:"del";s:2:"12";s:3:"ne ";s:2:"13";s:3:"ti ";s:2:"14";s:3:"ell";s:2:"15";s:3:" la";s:2:"16";s:3:" un";s:2:"17";s:3:"ni ";s:2:"18";s:3:"i d";s:2:"19";s:3:"per";s:2:"20";s:3:" pe";s:2:"21";s:3:"ent";s:2:"22";s:3:" in";s:2:"23";s:3:"one";s:2:"24";s:3:"he ";s:2:"25";s:3:"ta ";s:2:"26";s:3:"zio";s:2:"27";s:3:"che";s:2:"28";s:3:"o d";s:2:"29";s:3:"a d";s:2:"30";s:3:"na ";s:2:"31";s:3:"ato";s:2:"32";s:3:"e s";s:2:"33";s:3:" so";s:2:"34";s:3:"i s";s:2:"35";s:3:"lla";s:2:"36";s:3:"a p";s:2:"37";s:3:"li ";s:2:"38";s:3:"te ";s:2:"39";s:3:" al";s:2:"40";s:3:" ch";s:2:"41";s:3:"er ";s:2:"42";s:3:" pa";s:2:"43";s:3:" si";s:2:"44";s:3:"con";s:2:"45";s:3:"sta";s:2:"46";s:3:" pr";s:2:"47";s:3:"a c";s:2:"48";s:3:" se";s:2:"49";s:3:"el ";s:2:"50";s:3:"ia ";s:2:"51";s:3:"si ";s:2:"52";s:3:"e p";s:2:"53";s:3:" da";s:2:"54";s:3:"e i";s:2:"55";s:3:"i p";s:2:"56";s:3:"ont";s:2:"57";s:3:"ano";s:2:"58";s:3:"i c";s:2:"59";s:3:"all";s:2:"60";s:3:"azi";s:2:"61";s:3:"nte";s:2:"62";s:3:"on ";s:2:"63";s:3:"nti";s:2:"64";s:3:"o s";s:2:"65";s:3:" ri";s:2:"66";s:3:"i a";s:2:"67";s:3:"o a";s:2:"68";s:3:"un ";s:2:"69";s:3:" an";s:2:"70";s:3:"are";s:2:"71";s:3:"ari";s:2:"72";s:3:"e a";s:2:"73";s:3:"i e";s:2:"74";s:3:"ita";s:2:"75";s:3:"men";s:2:"76";s:3:"ri ";s:2:"77";s:3:" ca";s:2:"78";s:3:" il";s:2:"79";s:3:" no";s:2:"80";s:3:" po";s:2:"81";s:3:"a s";s:2:"82";s:3:"ant";s:2:"83";s:3:"il ";s:2:"84";s:3:"in ";s:2:"85";s:3:"a l";s:2:"86";s:3:"ati";s:2:"87";s:3:"cia";s:2:"88";s:3:"e c";s:2:"89";s:3:"ro ";s:2:"90";s:3:"ann";s:2:"91";s:3:"est";s:2:"92";s:3:"gli";s:2:"93";s:4:"tà ";s:2:"94";s:3:" qu";s:2:"95";s:3:"e l";s:2:"96";s:3:"nta";s:2:"97";s:3:" a ";s:2:"98";s:3:"com";s:2:"99";s:3:"o c";s:3:"100";s:3:"ra ";s:3:"101";s:3:" le";s:3:"102";s:3:" ne";s:3:"103";s:3:"ali";s:3:"104";s:3:"ere";s:3:"105";s:3:"ist";s:3:"106";s:3:" ma";s:3:"107";s:4:" è ";s:3:"108";s:3:"io ";s:3:"109";s:3:"lle";s:3:"110";s:3:"me ";s:3:"111";s:3:"era";s:3:"112";s:3:"ica";s:3:"113";s:3:"ost";s:3:"114";s:3:"pro";s:3:"115";s:3:"tar";s:3:"116";s:3:"una";s:3:"117";s:3:" pi";s:3:"118";s:3:"da ";s:3:"119";s:3:"tat";s:3:"120";s:3:" mi";s:3:"121";s:3:"att";s:3:"122";s:3:"ca ";s:3:"123";s:3:"mo ";s:3:"124";s:3:"non";s:3:"125";s:3:"par";s:3:"126";s:3:"sti";s:3:"127";s:3:" fa";s:3:"128";s:3:" i ";s:3:"129";s:3:" re";s:3:"130";s:3:" su";s:3:"131";s:3:"ess";s:3:"132";s:3:"ini";s:3:"133";s:3:"nto";s:3:"134";s:3:"o l";s:3:"135";s:3:"ssi";s:3:"136";s:3:"tto";s:3:"137";s:3:"a e";s:3:"138";s:3:"ame";s:3:"139";s:3:"col";s:3:"140";s:3:"ei ";s:3:"141";s:3:"ma ";s:3:"142";s:3:"o i";s:3:"143";s:3:"za ";s:3:"144";s:3:" st";s:3:"145";s:3:"a a";s:3:"146";s:3:"ale";s:3:"147";s:3:"anc";s:3:"148";s:3:"ani";s:3:"149";s:3:"i m";s:3:"150";s:3:"ian";s:3:"151";s:3:"o p";s:3:"152";s:3:"oni";s:3:"153";s:3:"sio";s:3:"154";s:3:"tan";s:3:"155";s:3:"tti";s:3:"156";s:3:" lo";s:3:"157";s:3:"i r";s:3:"158";s:3:"oci";s:3:"159";s:3:"oli";s:3:"160";s:3:"ona";s:3:"161";s:3:"ono";s:3:"162";s:3:"tra";s:3:"163";s:3:" l ";s:3:"164";s:3:"a r";s:3:"165";s:3:"eri";s:3:"166";s:3:"ett";s:3:"167";s:3:"lo ";s:3:"168";s:3:"nza";s:3:"169";s:3:"que";s:3:"170";s:3:"str";s:3:"171";s:3:"ter";s:3:"172";s:3:"tta";s:3:"173";s:3:" ba";s:3:"174";s:3:" li";s:3:"175";s:3:" te";s:3:"176";s:3:"ass";s:3:"177";s:3:"e f";s:3:"178";s:3:"enz";s:3:"179";s:3:"for";s:3:"180";s:3:"nno";s:3:"181";s:3:"olo";s:3:"182";s:3:"ori";s:3:"183";s:3:"res";s:3:"184";s:3:"tor";s:3:"185";s:3:" ci";s:3:"186";s:3:" vo";s:3:"187";s:3:"a i";s:3:"188";s:3:"al ";s:3:"189";s:3:"chi";s:3:"190";s:3:"e n";s:3:"191";s:3:"lia";s:3:"192";s:3:"pre";s:3:"193";s:3:"ria";s:3:"194";s:3:"uni";s:3:"195";s:3:"ver";s:3:"196";s:3:" sp";s:3:"197";s:3:"imo";s:3:"198";s:3:"l a";s:3:"199";s:3:"l c";s:3:"200";s:3:"ran";s:3:"201";s:3:"sen";s:3:"202";s:3:"soc";s:3:"203";s:3:"tic";s:3:"204";s:3:" fi";s:3:"205";s:3:" mo";s:3:"206";s:3:"a n";s:3:"207";s:3:"ce ";s:3:"208";s:3:"dei";s:3:"209";s:3:"ggi";s:3:"210";s:3:"gio";s:3:"211";s:3:"iti";s:3:"212";s:3:"l s";s:3:"213";s:3:"lit";s:3:"214";s:3:"ll ";s:3:"215";s:3:"mon";s:3:"216";s:3:"ola";s:3:"217";s:3:"pac";s:3:"218";s:3:"sim";s:3:"219";s:3:"tit";s:3:"220";s:3:"utt";s:3:"221";s:3:"vol";s:3:"222";s:3:" ar";s:3:"223";s:3:" fo";s:3:"224";s:3:" ha";s:3:"225";s:3:" sa";s:3:"226";s:3:"acc";s:3:"227";s:3:"e r";s:3:"228";s:3:"ire";s:3:"229";s:3:"man";s:3:"230";s:3:"ntr";s:3:"231";s:3:"rat";s:3:"232";s:3:"sco";s:3:"233";s:3:"tro";s:3:"234";s:3:"tut";s:3:"235";s:3:"va ";s:3:"236";s:3:" do";s:3:"237";s:3:" gi";s:3:"238";s:3:" me";s:3:"239";s:3:" sc";s:3:"240";s:3:" tu";s:3:"241";s:3:" ve";s:3:"242";s:3:" vi";s:3:"243";s:3:"a m";s:3:"244";s:3:"ber";s:3:"245";s:3:"can";s:3:"246";s:3:"cit";s:3:"247";s:3:"i l";s:3:"248";s:3:"ier";s:3:"249";s:4:"ità";s:3:"250";s:3:"lli";s:3:"251";s:3:"min";s:3:"252";s:3:"n p";s:3:"253";s:3:"nat";s:3:"254";s:3:"nda";s:3:"255";s:3:"o e";s:3:"256";s:3:"o f";s:3:"257";s:3:"o u";s:3:"258";s:3:"ore";s:3:"259";s:3:"oro";s:3:"260";s:3:"ort";s:3:"261";s:3:"sto";s:3:"262";s:3:"ten";s:3:"263";s:3:"tiv";s:3:"264";s:3:"van";s:3:"265";s:3:"art";s:3:"266";s:3:"cco";s:3:"267";s:3:"ci ";s:3:"268";s:3:"cos";s:3:"269";s:3:"dal";s:3:"270";s:3:"e v";s:3:"271";s:3:"i i";s:3:"272";s:3:"ila";s:3:"273";s:3:"ino";s:3:"274";s:3:"l p";s:3:"275";s:3:"n c";s:3:"276";s:3:"nit";s:3:"277";s:3:"ole";s:3:"278";s:3:"ome";s:3:"279";s:3:"po ";s:3:"280";s:3:"rio";s:3:"281";s:3:"sa ";s:3:"282";s:3:" ce";s:3:"283";s:3:" es";s:3:"284";s:3:" tr";s:3:"285";s:3:"a b";s:3:"286";s:3:"and";s:3:"287";s:3:"ata";s:3:"288";s:3:"der";s:3:"289";s:3:"ens";s:3:"290";s:3:"ers";s:3:"291";s:3:"gi ";s:3:"292";s:3:"ial";s:3:"293";s:3:"ina";s:3:"294";s:3:"itt";s:3:"295";s:3:"izi";s:3:"296";s:3:"lan";s:3:"297";s:3:"lor";s:3:"298";s:3:"mil";s:3:"299";}s:6:"kazakh";a:300:{s:5:"ан ";s:1:"0";s:5:"ен ";s:1:"1";s:5:"Ñ‹Ò£ ";s:1:"2";s:5:" қа";s:1:"3";s:5:" ба";s:1:"4";s:5:"ай ";s:1:"5";s:6:"нда";s:1:"6";s:5:"ын ";s:1:"7";s:5:" Ñа";s:1:"8";s:5:" ал";s:1:"9";s:5:"ді ";s:2:"10";s:6:"ары";s:2:"11";s:5:"ды ";s:2:"12";s:5:"ып ";s:2:"13";s:5:" мұ";s:2:"14";s:5:" бі";s:2:"15";s:6:"аÑÑ‹";s:2:"16";s:5:"да ";s:2:"17";s:6:"най";s:2:"18";s:5:" жа";s:2:"19";s:6:"мұн";s:2:"20";s:6:"Ñта";s:2:"21";s:6:"ған";s:2:"22";s:5:"н б";s:2:"23";s:6:"ұна";s:2:"24";s:5:" бо";s:2:"25";s:6:"ның";s:2:"26";s:5:"ін ";s:2:"27";s:6:"лар";s:2:"28";s:6:"Ñын";s:2:"29";s:5:" де";s:2:"30";s:6:"аға";s:2:"31";s:6:"тан";s:2:"32";s:5:" кө";s:2:"33";s:6:"бір";s:2:"34";s:5:"ер ";s:2:"35";s:6:"мен";s:2:"36";s:6:"аза";s:2:"37";s:6:"ынд";s:2:"38";s:6:"ыны";s:2:"39";s:5:" ме";s:2:"40";s:6:"анд";s:2:"41";s:6:"ері";s:2:"42";s:6:"бол";s:2:"43";s:6:"дың";s:2:"44";s:6:"қаз";s:2:"45";s:6:"аты";s:2:"46";s:5:"ÑÑ‹ ";s:2:"47";s:6:"тын";s:2:"48";s:5:"Ò“Ñ‹ ";s:2:"49";s:5:" ке";s:2:"50";s:5:"ар ";s:2:"51";s:6:"зақ";s:2:"52";s:5:"Ñ‹Ò› ";s:2:"53";s:6:"ала";s:2:"54";s:6:"алы";s:2:"55";s:6:"аны";s:2:"56";s:6:"ара";s:2:"57";s:6:"ағы";s:2:"58";s:6:"ген";s:2:"59";s:6:"тар";s:2:"60";s:6:"тер";s:2:"61";s:6:"Ñ‚Ñ‹Ñ€";s:2:"62";s:6:"айд";s:2:"63";s:6:"ард";s:2:"64";s:5:"де ";s:2:"65";s:5:"ға ";s:2:"66";s:5:" қо";s:2:"67";s:6:"бар";s:2:"68";s:5:"Ñ–Ò£ ";s:2:"69";s:6:"қан";s:2:"70";s:5:" бе";s:2:"71";s:5:" қы";s:2:"72";s:6:"ақÑ";s:2:"73";s:6:"гер";s:2:"74";s:6:"дан";s:2:"75";s:6:"дар";s:2:"76";s:6:"лық";s:2:"77";s:6:"лға";s:2:"78";s:6:"ына";s:2:"79";s:5:"Ñ–Ñ€ ";s:2:"80";s:6:"ірі";s:2:"81";s:6:"ғаÑ";s:2:"82";s:5:" та";s:2:"83";s:5:"а б";s:2:"84";s:5:"гі ";s:2:"85";s:6:"еді";s:2:"86";s:6:"еле";s:2:"87";s:6:"йды";s:2:"88";s:5:"н к";s:2:"89";s:5:"н Ñ‚";s:2:"90";s:6:"ола";s:2:"91";s:6:"рын";s:2:"92";s:5:"іп ";s:2:"93";s:6:"Ò›ÑÑ‚";s:2:"94";s:6:"қта";s:2:"95";s:5:"Ò£ б";s:2:"96";s:5:" ай";s:2:"97";s:5:" ол";s:2:"98";s:5:" Ñо";s:2:"99";s:6:"айт";s:3:"100";s:6:"дағ";s:3:"101";s:6:"иге";s:3:"102";s:6:"лер";s:3:"103";s:6:"лып";s:3:"104";s:5:"н а";s:3:"105";s:5:"ік ";s:3:"106";s:6:"ақт";s:3:"107";s:6:"бағ";s:3:"108";s:6:"кен";s:3:"109";s:5:"н Ò›";s:3:"110";s:5:"ны ";s:3:"111";s:6:"рге";s:3:"112";s:6:"рға";s:3:"113";s:5:"Ñ‹Ñ€ ";s:3:"114";s:5:" ар";s:3:"115";s:6:"алғ";s:3:"116";s:6:"аÑа";s:3:"117";s:6:"баÑ";s:3:"118";s:6:"бер";s:3:"119";s:5:"ге ";s:3:"120";s:6:"еті";s:3:"121";s:5:"на ";s:3:"122";s:6:"нде";s:3:"123";s:5:"не ";s:3:"124";s:6:"ниг";s:3:"125";s:6:"рды";s:3:"126";s:5:"ры ";s:3:"127";s:6:"Ñай";s:3:"128";s:5:" ау";s:3:"129";s:5:" кү";s:3:"130";s:5:" ни";s:3:"131";s:5:" от";s:3:"132";s:5:" өз";s:3:"133";s:6:"ауд";s:3:"134";s:5:"еп ";s:3:"135";s:6:"иÑл";s:3:"136";s:6:"лты";s:3:"137";s:5:"н ж";s:3:"138";s:5:"н о";s:3:"139";s:6:"оÑÑ‹";s:3:"140";s:6:"оты";s:3:"141";s:6:"рып";s:3:"142";s:5:"рі ";s:3:"143";s:6:"тке";s:3:"144";s:5:"Ñ‚Ñ‹ ";s:3:"145";s:5:"Ñ‹ б";s:3:"146";s:5:"Ñ‹ ж";s:3:"147";s:6:"ылы";s:3:"148";s:6:"Ñ‹ÑÑ‹";s:3:"149";s:5:"Ñ– Ñ";s:3:"150";s:6:"қар";s:3:"151";s:5:" бұ";s:3:"152";s:5:" да";s:3:"153";s:5:" же";s:3:"154";s:5:" Ñ‚Ò±";s:3:"155";s:5:" Ò›Ò±";s:3:"156";s:6:"ады";s:3:"157";s:6:"айл";s:3:"158";s:5:"ап ";s:3:"159";s:6:"ата";s:3:"160";s:6:"ені";s:3:"161";s:6:"йла";s:3:"162";s:5:"н м";s:3:"163";s:5:"н Ñ";s:3:"164";s:6:"нды";s:3:"165";s:6:"нді";s:3:"166";s:5:"Ñ€ м";s:3:"167";s:6:"тай";s:3:"168";s:6:"тін";s:3:"169";s:5:"Ñ‹ Ñ‚";s:3:"170";s:5:"Ñ‹Ñ ";s:3:"171";s:6:"інд";s:3:"172";s:5:" би";s:3:"173";s:5:"а ж";s:3:"174";s:6:"ауы";s:3:"175";s:6:"деп";s:3:"176";s:6:"дің";s:3:"177";s:6:"еке";s:3:"178";s:6:"ери";s:3:"179";s:6:"йын";s:3:"180";s:6:"кел";s:3:"181";s:6:"лды";s:3:"182";s:5:"ма ";s:3:"183";s:6:"нан";s:3:"184";s:6:"оны";s:3:"185";s:5:"п ж";s:3:"186";s:5:"п о";s:3:"187";s:5:"Ñ€ б";s:3:"188";s:6:"риÑ";s:3:"189";s:6:"рла";s:3:"190";s:6:"уда";s:3:"191";s:6:"шыл";s:3:"192";s:5:"Ñ‹ а";s:3:"193";s:6:"ықт";s:3:"194";s:5:"Ñ– а";s:3:"195";s:5:"Ñ– б";s:3:"196";s:5:"із ";s:3:"197";s:6:"ілі";s:3:"198";s:5:"Ò£ Ò›";s:3:"199";s:5:" аÑ";s:3:"200";s:5:" ек";s:3:"201";s:5:" жо";s:3:"202";s:5:" мә";s:3:"203";s:5:" оÑ";s:3:"204";s:5:" ре";s:3:"205";s:5:" Ñе";s:3:"206";s:6:"алд";s:3:"207";s:6:"дал";s:3:"208";s:6:"дег";s:3:"209";s:6:"дей";s:3:"210";s:5:"е б";s:3:"211";s:5:"ет ";s:3:"212";s:6:"жаÑ";s:3:"213";s:5:"й б";s:3:"214";s:6:"лау";s:3:"215";s:6:"лда";s:3:"216";s:6:"мет";s:3:"217";s:6:"нын";s:3:"218";s:6:"Ñар";s:3:"219";s:5:"ÑÑ– ";s:3:"220";s:5:"Ñ‚Ñ– ";s:3:"221";s:6:"ыры";s:3:"222";s:6:"ыта";s:3:"223";s:6:"Ñ–ÑÑ–";s:3:"224";s:5:"Ò£ а";s:3:"225";s:6:"өте";s:3:"226";s:5:" ат";s:3:"227";s:5:" ел";s:3:"228";s:5:" жү";s:3:"229";s:5:" ма";s:3:"230";s:5:" то";s:3:"231";s:5:" шы";s:3:"232";s:5:"а а";s:3:"233";s:6:"алт";s:3:"234";s:6:"ама";s:3:"235";s:6:"арл";s:3:"236";s:6:"аÑÑ‚";s:3:"237";s:6:"бұл";s:3:"238";s:6:"дай";s:3:"239";s:6:"дық";s:3:"240";s:5:"ек ";s:3:"241";s:6:"ель";s:3:"242";s:6:"еÑÑ–";s:3:"243";s:6:"зді";s:3:"244";s:6:"көт";s:3:"245";s:6:"лем";s:3:"246";s:5:"ль ";s:3:"247";s:5:"н е";s:3:"248";s:5:"п а";s:3:"249";s:5:"Ñ€ а";s:3:"250";s:6:"реÑ";s:3:"251";s:5:"Ñа ";s:3:"252";s:5:"та ";s:3:"253";s:6:"тте";s:3:"254";s:6:"тұр";s:3:"255";s:5:"шы ";s:3:"256";s:5:"Ñ‹ д";s:3:"257";s:5:"Ñ‹ Ò›";s:3:"258";s:5:"ыз ";s:3:"259";s:6:"қыт";s:3:"260";s:5:" ко";s:3:"261";s:5:" не";s:3:"262";s:5:" ой";s:3:"263";s:5:" ор";s:3:"264";s:5:" ÑÒ±";s:3:"265";s:5:" Ñ‚Ò¯";s:3:"266";s:6:"аль";s:3:"267";s:6:"аре";s:3:"268";s:6:"атт";s:3:"269";s:6:"дір";s:3:"270";s:5:"ев ";s:3:"271";s:6:"егі";s:3:"272";s:6:"еда";s:3:"273";s:6:"екі";s:3:"274";s:6:"елд";s:3:"275";s:6:"ерг";s:3:"276";s:6:"ерд";s:3:"277";s:6:"иÑд";s:3:"278";s:6:"кер";s:3:"279";s:6:"кет";s:3:"280";s:6:"лыÑ";s:3:"281";s:6:"ліÑ";s:3:"282";s:6:"мед";s:3:"283";s:6:"мпи";s:3:"284";s:5:"н д";s:3:"285";s:5:"ні ";s:3:"286";s:6:"нін";s:3:"287";s:5:"п Ñ‚";s:3:"288";s:6:"пек";s:3:"289";s:6:"рел";s:3:"290";s:6:"рта";s:3:"291";s:6:"ріл";s:3:"292";s:6:"рін";s:3:"293";s:6:"Ñен";s:3:"294";s:6:"тал";s:3:"295";s:6:"шіл";s:3:"296";s:5:"Ñ‹ к";s:3:"297";s:5:"Ñ‹ м";s:3:"298";s:6:"Ñ‹ÑÑ‚";s:3:"299";}s:6:"kyrgyz";a:300:{s:5:"ын ";s:1:"0";s:5:"ан ";s:1:"1";s:5:" жа";s:1:"2";s:5:"ен ";s:1:"3";s:5:"да ";s:1:"4";s:5:" та";s:1:"5";s:5:"ар ";s:1:"6";s:5:"ин ";s:1:"7";s:5:" ка";s:1:"8";s:6:"ары";s:1:"9";s:5:" ал";s:2:"10";s:5:" ба";s:2:"11";s:5:" би";s:2:"12";s:6:"лар";s:2:"13";s:5:" бо";s:2:"14";s:5:" кы";s:2:"15";s:6:"ала";s:2:"16";s:5:"н к";s:2:"17";s:5:" Ñа";s:2:"18";s:6:"нда";s:2:"19";s:6:"ган";s:2:"20";s:6:"тар";s:2:"21";s:5:" де";s:2:"22";s:6:"анд";s:2:"23";s:5:"н б";s:2:"24";s:5:" ке";s:2:"25";s:6:"ард";s:2:"26";s:6:"мен";s:2:"27";s:5:"н Ñ‚";s:2:"28";s:6:"ара";s:2:"29";s:6:"нын";s:2:"30";s:5:" да";s:2:"31";s:5:" ме";s:2:"32";s:6:"кыр";s:2:"33";s:5:" че";s:2:"34";s:5:"н а";s:2:"35";s:5:"ры ";s:2:"36";s:5:" ко";s:2:"37";s:6:"ген";s:2:"38";s:6:"дар";s:2:"39";s:6:"кен";s:2:"40";s:6:"кта";s:2:"41";s:5:"уу ";s:2:"42";s:6:"ене";s:2:"43";s:6:"ери";s:2:"44";s:5:" ша";s:2:"45";s:6:"алы";s:2:"46";s:5:"ат ";s:2:"47";s:5:"на ";s:2:"48";s:5:" кө";s:2:"49";s:5:" Ñм";s:2:"50";s:6:"аты";s:2:"51";s:6:"дан";s:2:"52";s:6:"деп";s:2:"53";s:6:"дын";s:2:"54";s:5:"еп ";s:2:"55";s:6:"нен";s:2:"56";s:6:"рын";s:2:"57";s:5:" бе";s:2:"58";s:6:"кан";s:2:"59";s:6:"луу";s:2:"60";s:6:"ргы";s:2:"61";s:6:"тан";s:2:"62";s:6:"шай";s:2:"63";s:6:"ырг";s:2:"64";s:5:"үн ";s:2:"65";s:5:" ар";s:2:"66";s:5:" ма";s:2:"67";s:6:"агы";s:2:"68";s:6:"акт";s:2:"69";s:6:"аны";s:2:"70";s:5:"гы ";s:2:"71";s:6:"гыз";s:2:"72";s:5:"ды ";s:2:"73";s:6:"рда";s:2:"74";s:5:"ай ";s:2:"75";s:6:"бир";s:2:"76";s:6:"бол";s:2:"77";s:5:"ер ";s:2:"78";s:5:"н Ñ";s:2:"79";s:6:"нды";s:2:"80";s:5:"ун ";s:2:"81";s:5:"ча ";s:2:"82";s:6:"ынд";s:2:"83";s:5:"а к";s:2:"84";s:6:"ага";s:2:"85";s:6:"айл";s:2:"86";s:6:"ана";s:2:"87";s:5:"ап ";s:2:"88";s:5:"га ";s:2:"89";s:6:"лге";s:2:"90";s:6:"нча";s:2:"91";s:5:"п к";s:2:"92";s:6:"рды";s:2:"93";s:6:"туу";s:2:"94";s:6:"ыны";s:2:"95";s:5:" ан";s:2:"96";s:5:" өз";s:2:"97";s:6:"ама";s:2:"98";s:6:"ата";s:2:"99";s:6:"дин";s:3:"100";s:5:"йт ";s:3:"101";s:6:"лга";s:3:"102";s:6:"лоо";s:3:"103";s:5:"оо ";s:3:"104";s:5:"ри ";s:3:"105";s:6:"тин";s:3:"106";s:5:"ыз ";s:3:"107";s:5:"ып ";s:3:"108";s:6:"Ó©Ñ€Ò¯";s:3:"109";s:5:" па";s:3:"110";s:5:" Ñк";s:3:"111";s:5:"а б";s:3:"112";s:6:"алг";s:3:"113";s:6:"аÑÑ‹";s:3:"114";s:6:"ашт";s:3:"115";s:6:"биз";s:3:"116";s:6:"кел";s:3:"117";s:6:"кте";s:3:"118";s:6:"тал";s:3:"119";s:5:" не";s:3:"120";s:5:" Ñу";s:3:"121";s:6:"акы";s:3:"122";s:6:"ент";s:3:"123";s:6:"инд";s:3:"124";s:5:"ир ";s:3:"125";s:6:"кал";s:3:"126";s:5:"н д";s:3:"127";s:6:"нде";s:3:"128";s:6:"ого";s:3:"129";s:6:"онд";s:3:"130";s:6:"оюн";s:3:"131";s:5:"Ñ€ б";s:3:"132";s:5:"Ñ€ м";s:3:"133";s:6:"ран";s:3:"134";s:6:"Ñал";s:3:"135";s:6:"Ñта";s:3:"136";s:5:"ÑÑ‹ ";s:3:"137";s:6:"ура";s:3:"138";s:6:"ыгы";s:3:"139";s:5:" аш";s:3:"140";s:5:" ми";s:3:"141";s:5:" ÑÑ‹";s:3:"142";s:5:" ту";s:3:"143";s:5:"ал ";s:3:"144";s:6:"арт";s:3:"145";s:6:"бор";s:3:"146";s:6:"елг";s:3:"147";s:6:"ени";s:3:"148";s:5:"ет ";s:3:"149";s:6:"жат";s:3:"150";s:6:"йло";s:3:"151";s:6:"кар";s:3:"152";s:5:"н м";s:3:"153";s:6:"огу";s:3:"154";s:5:"п а";s:3:"155";s:5:"п ж";s:3:"156";s:5:"Ñ€ Ñ";s:3:"157";s:6:"Ñын";s:3:"158";s:5:"ык ";s:3:"159";s:6:"юнч";s:3:"160";s:5:" бу";s:3:"161";s:5:" ур";s:3:"162";s:5:"а а";s:3:"163";s:5:"ак ";s:3:"164";s:6:"алд";s:3:"165";s:6:"алу";s:3:"166";s:6:"бар";s:3:"167";s:6:"бер";s:3:"168";s:6:"бою";s:3:"169";s:5:"ге ";s:3:"170";s:6:"дон";s:3:"171";s:6:"еги";s:3:"172";s:6:"ект";s:3:"173";s:6:"ефт";s:3:"174";s:5:"из ";s:3:"175";s:6:"кат";s:3:"176";s:6:"лды";s:3:"177";s:5:"н ч";s:3:"178";s:5:"н Ñ";s:3:"179";s:5:"н Ó©";s:3:"180";s:6:"ндо";s:3:"181";s:6:"неф";s:3:"182";s:5:"он ";s:3:"183";s:6:"Ñат";s:3:"184";s:6:"тор";s:3:"185";s:5:"Ñ‚Ñ‹ ";s:3:"186";s:6:"уда";s:3:"187";s:5:"ул ";s:3:"188";s:6:"ула";s:3:"189";s:6:"ууд";s:3:"190";s:5:"Ñ‹ б";s:3:"191";s:5:"Ñ‹ ж";s:3:"192";s:5:"Ñ‹ к";s:3:"193";s:5:"ыл ";s:3:"194";s:6:"ына";s:3:"195";s:6:"Ñке";s:3:"196";s:6:"ÑÑÑ‹";s:3:"197";s:5:" ат";s:3:"198";s:5:" до";s:3:"199";s:5:" жы";s:3:"200";s:5:" Ñо";s:3:"201";s:5:" чы";s:3:"202";s:6:"ааÑ";s:3:"203";s:6:"айт";s:3:"204";s:6:"аÑÑ‚";s:3:"205";s:6:"баа";s:3:"206";s:6:"баш";s:3:"207";s:6:"гар";s:3:"208";s:6:"гын";s:3:"209";s:5:"дө ";s:3:"210";s:5:"е б";s:3:"211";s:5:"ек ";s:3:"212";s:6:"жыл";s:3:"213";s:5:"и б";s:3:"214";s:5:"ик ";s:3:"215";s:6:"иÑÑ";s:3:"216";s:6:"кыз";s:3:"217";s:6:"лда";s:3:"218";s:6:"лык";s:3:"219";s:6:"мда";s:3:"220";s:5:"н ж";s:3:"221";s:6:"нди";s:3:"222";s:5:"ни ";s:3:"223";s:6:"нин";s:3:"224";s:6:"орд";s:3:"225";s:6:"рдо";s:3:"226";s:6:"Ñто";s:3:"227";s:5:"та ";s:3:"228";s:6:"тер";s:3:"229";s:6:"тти";s:3:"230";s:6:"тур";s:3:"231";s:6:"тын";s:3:"232";s:5:"уп ";s:3:"233";s:6:"ушу";s:3:"234";s:6:"фти";s:3:"235";s:6:"ыкт";s:3:"236";s:5:"үп ";s:3:"237";s:5:"өн ";s:3:"238";s:5:" ай";s:3:"239";s:5:" бү";s:3:"240";s:5:" ич";s:3:"241";s:5:" иш";s:3:"242";s:5:" мо";s:3:"243";s:5:" пр";s:3:"244";s:5:" ре";s:3:"245";s:5:" өк";s:3:"246";s:5:" Ó©Ñ‚";s:3:"247";s:5:"а д";s:3:"248";s:5:"а у";s:3:"249";s:5:"а Ñ";s:3:"250";s:6:"айм";s:3:"251";s:6:"амд";s:3:"252";s:6:"атт";s:3:"253";s:6:"бек";s:3:"254";s:6:"бул";s:3:"255";s:6:"гол";s:3:"256";s:6:"дег";s:3:"257";s:6:"еге";s:3:"258";s:6:"ейт";s:3:"259";s:6:"еле";s:3:"260";s:6:"енд";s:3:"261";s:6:"жак";s:3:"262";s:5:"и к";s:3:"263";s:6:"ини";s:3:"264";s:6:"ири";s:3:"265";s:6:"йма";s:3:"266";s:6:"кто";s:3:"267";s:6:"лик";s:3:"268";s:6:"мак";s:3:"269";s:6:"меÑ";s:3:"270";s:5:"н у";s:3:"271";s:5:"н ш";s:3:"272";s:6:"нтт";s:3:"273";s:5:"ол ";s:3:"274";s:6:"оло";s:3:"275";s:6:"пар";s:3:"276";s:6:"рак";s:3:"277";s:6:"Ñ€Ò¯Ò¯";s:3:"278";s:6:"ÑÑ‹Ñ€";s:3:"279";s:5:"ти ";s:3:"280";s:6:"тик";s:3:"281";s:6:"тта";s:3:"282";s:6:"Ñ‚Ó©Ñ€";s:3:"283";s:5:"у ж";s:3:"284";s:5:"у Ñ";s:3:"285";s:6:"шка";s:3:"286";s:5:"Ñ‹ м";s:3:"287";s:6:"ызы";s:3:"288";s:6:"ылд";s:3:"289";s:6:"Ñме";s:3:"290";s:6:"үрү";s:3:"291";s:6:"өлү";s:3:"292";s:6:"Ó©Ñ‚Ó©";s:3:"293";s:5:" же";s:3:"294";s:5:" Ñ‚Ò¯";s:3:"295";s:5:" Ñл";s:3:"296";s:5:" өн";s:3:"297";s:5:"а ж";s:3:"298";s:6:"ады";s:3:"299";}s:5:"latin";a:300:{s:3:"um ";s:1:"0";s:3:"us ";s:1:"1";s:3:"ut ";s:1:"2";s:3:"et ";s:1:"3";s:3:"is ";s:1:"4";s:3:" et";s:1:"5";s:3:" in";s:1:"6";s:3:" qu";s:1:"7";s:3:"tur";s:1:"8";s:3:" pr";s:1:"9";s:3:"est";s:2:"10";s:3:"tio";s:2:"11";s:3:" au";s:2:"12";s:3:"am ";s:2:"13";s:3:"em ";s:2:"14";s:3:"aut";s:2:"15";s:3:" di";s:2:"16";s:3:"ent";s:2:"17";s:3:"in ";s:2:"18";s:3:"dic";s:2:"19";s:3:"t e";s:2:"20";s:3:" es";s:2:"21";s:3:"ur ";s:2:"22";s:3:"ati";s:2:"23";s:3:"ion";s:2:"24";s:3:"st ";s:2:"25";s:3:" ut";s:2:"26";s:3:"ae ";s:2:"27";s:3:"qua";s:2:"28";s:3:" de";s:2:"29";s:3:"nt ";s:2:"30";s:3:" su";s:2:"31";s:3:" si";s:2:"32";s:3:"itu";s:2:"33";s:3:"unt";s:2:"34";s:3:"rum";s:2:"35";s:3:"ia ";s:2:"36";s:3:"es ";s:2:"37";s:3:"ter";s:2:"38";s:3:" re";s:2:"39";s:3:"nti";s:2:"40";s:3:"rae";s:2:"41";s:3:"s e";s:2:"42";s:3:"qui";s:2:"43";s:3:"io ";s:2:"44";s:3:"pro";s:2:"45";s:3:"it ";s:2:"46";s:3:"per";s:2:"47";s:3:"ita";s:2:"48";s:3:"one";s:2:"49";s:3:"ici";s:2:"50";s:3:"ius";s:2:"51";s:3:" co";s:2:"52";s:3:"t d";s:2:"53";s:3:"bus";s:2:"54";s:3:"pra";s:2:"55";s:3:"m e";s:2:"56";s:3:" no";s:2:"57";s:3:"edi";s:2:"58";s:3:"tia";s:2:"59";s:3:"ue ";s:2:"60";s:3:"ibu";s:2:"61";s:3:" se";s:2:"62";s:3:" ad";s:2:"63";s:3:"er ";s:2:"64";s:3:" fi";s:2:"65";s:3:"ili";s:2:"66";s:3:"que";s:2:"67";s:3:"t i";s:2:"68";s:3:"de ";s:2:"69";s:3:"oru";s:2:"70";s:3:" te";s:2:"71";s:3:"ali";s:2:"72";s:3:" pe";s:2:"73";s:3:"aed";s:2:"74";s:3:"cit";s:2:"75";s:3:"m d";s:2:"76";s:3:"t s";s:2:"77";s:3:"tat";s:2:"78";s:3:"tem";s:2:"79";s:3:"tis";s:2:"80";s:3:"t p";s:2:"81";s:3:"sti";s:2:"82";s:3:"te ";s:2:"83";s:3:"cum";s:2:"84";s:3:"ere";s:2:"85";s:3:"ium";s:2:"86";s:3:" ex";s:2:"87";s:3:"rat";s:2:"88";s:3:"ta ";s:2:"89";s:3:"con";s:2:"90";s:3:"cti";s:2:"91";s:3:"oni";s:2:"92";s:3:"ra ";s:2:"93";s:3:"s i";s:2:"94";s:3:" cu";s:2:"95";s:3:" sa";s:2:"96";s:3:"eni";s:2:"97";s:3:"nis";s:2:"98";s:3:"nte";s:2:"99";s:3:"eri";s:3:"100";s:3:"omi";s:3:"101";s:3:"re ";s:3:"102";s:3:"s a";s:3:"103";s:3:"min";s:3:"104";s:3:"os ";s:3:"105";s:3:"ti ";s:3:"106";s:3:"uer";s:3:"107";s:3:" ma";s:3:"108";s:3:" ue";s:3:"109";s:3:"m s";s:3:"110";s:3:"nem";s:3:"111";s:3:"t m";s:3:"112";s:3:" mo";s:3:"113";s:3:" po";s:3:"114";s:3:" ui";s:3:"115";s:3:"gen";s:3:"116";s:3:"ict";s:3:"117";s:3:"m i";s:3:"118";s:3:"ris";s:3:"119";s:3:"s s";s:3:"120";s:3:"t a";s:3:"121";s:3:"uae";s:3:"122";s:3:" do";s:3:"123";s:3:"m a";s:3:"124";s:3:"t c";s:3:"125";s:3:" ge";s:3:"126";s:3:"as ";s:3:"127";s:3:"e i";s:3:"128";s:3:"e p";s:3:"129";s:3:"ne ";s:3:"130";s:3:" ca";s:3:"131";s:3:"ine";s:3:"132";s:3:"quo";s:3:"133";s:3:"s p";s:3:"134";s:3:" al";s:3:"135";s:3:"e e";s:3:"136";s:3:"ntu";s:3:"137";s:3:"ro ";s:3:"138";s:3:"tri";s:3:"139";s:3:"tus";s:3:"140";s:3:"uit";s:3:"141";s:3:"atu";s:3:"142";s:3:"ini";s:3:"143";s:3:"iqu";s:3:"144";s:3:"m p";s:3:"145";s:3:"ost";s:3:"146";s:3:"res";s:3:"147";s:3:"ura";s:3:"148";s:3:" ac";s:3:"149";s:3:" fu";s:3:"150";s:3:"a e";s:3:"151";s:3:"ant";s:3:"152";s:3:"nes";s:3:"153";s:3:"nim";s:3:"154";s:3:"sun";s:3:"155";s:3:"tra";s:3:"156";s:3:"e a";s:3:"157";s:3:"s d";s:3:"158";s:3:" pa";s:3:"159";s:3:" uo";s:3:"160";s:3:"ecu";s:3:"161";s:3:" om";s:3:"162";s:3:" tu";s:3:"163";s:3:"ad ";s:3:"164";s:3:"cut";s:3:"165";s:3:"omn";s:3:"166";s:3:"s q";s:3:"167";s:3:" ei";s:3:"168";s:3:"ex ";s:3:"169";s:3:"icu";s:3:"170";s:3:"tor";s:3:"171";s:3:"uid";s:3:"172";s:3:" ip";s:3:"173";s:3:" me";s:3:"174";s:3:"e s";s:3:"175";s:3:"era";s:3:"176";s:3:"eru";s:3:"177";s:3:"iam";s:3:"178";s:3:"ide";s:3:"179";s:3:"ips";s:3:"180";s:3:" iu";s:3:"181";s:3:"a s";s:3:"182";s:3:"do ";s:3:"183";s:3:"e d";s:3:"184";s:3:"eiu";s:3:"185";s:3:"ica";s:3:"186";s:3:"im ";s:3:"187";s:3:"m c";s:3:"188";s:3:"m u";s:3:"189";s:3:"tiu";s:3:"190";s:3:" ho";s:3:"191";s:3:"cat";s:3:"192";s:3:"ist";s:3:"193";s:3:"nat";s:3:"194";s:3:"on ";s:3:"195";s:3:"pti";s:3:"196";s:3:"reg";s:3:"197";s:3:"rit";s:3:"198";s:3:"s t";s:3:"199";s:3:"sic";s:3:"200";s:3:"spe";s:3:"201";s:3:" en";s:3:"202";s:3:" sp";s:3:"203";s:3:"dis";s:3:"204";s:3:"eli";s:3:"205";s:3:"liq";s:3:"206";s:3:"lis";s:3:"207";s:3:"men";s:3:"208";s:3:"mus";s:3:"209";s:3:"num";s:3:"210";s:3:"pos";s:3:"211";s:3:"sio";s:3:"212";s:3:" an";s:3:"213";s:3:" gr";s:3:"214";s:3:"abi";s:3:"215";s:3:"acc";s:3:"216";s:3:"ect";s:3:"217";s:3:"ri ";s:3:"218";s:3:"uan";s:3:"219";s:3:" le";s:3:"220";s:3:"ecc";s:3:"221";s:3:"ete";s:3:"222";s:3:"gra";s:3:"223";s:3:"non";s:3:"224";s:3:"se ";s:3:"225";s:3:"uen";s:3:"226";s:3:"uis";s:3:"227";s:3:" fa";s:3:"228";s:3:" tr";s:3:"229";s:3:"ate";s:3:"230";s:3:"e c";s:3:"231";s:3:"fil";s:3:"232";s:3:"na ";s:3:"233";s:3:"ni ";s:3:"234";s:3:"pul";s:3:"235";s:3:"s f";s:3:"236";s:3:"ui ";s:3:"237";s:3:"at ";s:3:"238";s:3:"cce";s:3:"239";s:3:"dam";s:3:"240";s:3:"i e";s:3:"241";s:3:"ina";s:3:"242";s:3:"leg";s:3:"243";s:3:"nos";s:3:"244";s:3:"ori";s:3:"245";s:3:"pec";s:3:"246";s:3:"rop";s:3:"247";s:3:"sta";s:3:"248";s:3:"uia";s:3:"249";s:3:"ene";s:3:"250";s:3:"iue";s:3:"251";s:3:"iui";s:3:"252";s:3:"siu";s:3:"253";s:3:"t t";s:3:"254";s:3:"t u";s:3:"255";s:3:"tib";s:3:"256";s:3:"tit";s:3:"257";s:3:" da";s:3:"258";s:3:" ne";s:3:"259";s:3:"a d";s:3:"260";s:3:"and";s:3:"261";s:3:"ege";s:3:"262";s:3:"equ";s:3:"263";s:3:"hom";s:3:"264";s:3:"imu";s:3:"265";s:3:"lor";s:3:"266";s:3:"m m";s:3:"267";s:3:"mni";s:3:"268";s:3:"ndo";s:3:"269";s:3:"ner";s:3:"270";s:3:"o e";s:3:"271";s:3:"r e";s:3:"272";s:3:"sit";s:3:"273";s:3:"tum";s:3:"274";s:3:"utu";s:3:"275";s:3:"a p";s:3:"276";s:3:"bis";s:3:"277";s:3:"bit";s:3:"278";s:3:"cer";s:3:"279";s:3:"cta";s:3:"280";s:3:"dom";s:3:"281";s:3:"fut";s:3:"282";s:3:"i s";s:3:"283";s:3:"ign";s:3:"284";s:3:"int";s:3:"285";s:3:"mod";s:3:"286";s:3:"ndu";s:3:"287";s:3:"nit";s:3:"288";s:3:"rib";s:3:"289";s:3:"rti";s:3:"290";s:3:"tas";s:3:"291";s:3:"und";s:3:"292";s:3:" ab";s:3:"293";s:3:"err";s:3:"294";s:3:"ers";s:3:"295";s:3:"ite";s:3:"296";s:3:"iti";s:3:"297";s:3:"m t";s:3:"298";s:3:"o p";s:3:"299";}s:7:"latvian";a:300:{s:3:"as ";s:1:"0";s:3:" la";s:1:"1";s:3:" pa";s:1:"2";s:3:" ne";s:1:"3";s:3:"es ";s:1:"4";s:3:" un";s:1:"5";s:3:"un ";s:1:"6";s:3:" ka";s:1:"7";s:3:" va";s:1:"8";s:3:"ar ";s:1:"9";s:3:"s p";s:2:"10";s:3:" ar";s:2:"11";s:3:" vi";s:2:"12";s:3:"is ";s:2:"13";s:3:"ai ";s:2:"14";s:3:" no";s:2:"15";s:3:"ja ";s:2:"16";s:3:"ija";s:2:"17";s:3:"iem";s:2:"18";s:3:"em ";s:2:"19";s:3:"tu ";s:2:"20";s:3:"tie";s:2:"21";s:3:"vie";s:2:"22";s:3:"lat";s:2:"23";s:3:"aks";s:2:"24";s:3:"ien";s:2:"25";s:3:"kst";s:2:"26";s:3:"ies";s:2:"27";s:3:"s a";s:2:"28";s:3:"rak";s:2:"29";s:3:"atv";s:2:"30";s:3:"tvi";s:2:"31";s:3:" ja";s:2:"32";s:3:" pi";s:2:"33";s:3:"ka ";s:2:"34";s:3:" ir";s:2:"35";s:3:"ir ";s:2:"36";s:3:"ta ";s:2:"37";s:3:" sa";s:2:"38";s:3:"ts ";s:2:"39";s:4:" kÄ";s:2:"40";s:4:"Äs ";s:2:"41";s:3:" ti";s:2:"42";s:3:"ot ";s:2:"43";s:3:"s n";s:2:"44";s:3:" ie";s:2:"45";s:3:" ta";s:2:"46";s:4:"arÄ«";s:2:"47";s:3:"par";s:2:"48";s:3:"pie";s:2:"49";s:3:" pr";s:2:"50";s:4:"kÄ ";s:2:"51";s:3:" at";s:2:"52";s:3:" ra";s:2:"53";s:3:"am ";s:2:"54";s:4:"inÄ";s:2:"55";s:4:"tÄ ";s:2:"56";s:3:" iz";s:2:"57";s:3:"jas";s:2:"58";s:3:"lai";s:2:"59";s:3:" na";s:2:"60";s:3:"aut";s:2:"61";s:4:"ieÅ¡";s:2:"62";s:3:"s s";s:2:"63";s:3:" ap";s:2:"64";s:3:" ko";s:2:"65";s:3:" st";s:2:"66";s:3:"iek";s:2:"67";s:3:"iet";s:2:"68";s:3:"jau";s:2:"69";s:3:"us ";s:2:"70";s:4:"rÄ« ";s:2:"71";s:3:"tik";s:2:"72";s:4:"Ä«ba";s:2:"73";s:3:"na ";s:2:"74";s:3:" ga";s:2:"75";s:3:"cij";s:2:"76";s:3:"s i";s:2:"77";s:3:" uz";s:2:"78";s:3:"jum";s:2:"79";s:3:"s v";s:2:"80";s:3:"ms ";s:2:"81";s:3:"var";s:2:"82";s:3:" ku";s:2:"83";s:3:" ma";s:2:"84";s:4:"jÄ ";s:2:"85";s:3:"sta";s:2:"86";s:3:"s u";s:2:"87";s:4:" tÄ";s:2:"88";s:3:"die";s:2:"89";s:3:"kai";s:2:"90";s:3:"kas";s:2:"91";s:3:"ska";s:2:"92";s:3:" ci";s:2:"93";s:3:" da";s:2:"94";s:3:"kur";s:2:"95";s:3:"lie";s:2:"96";s:3:"tas";s:2:"97";s:3:"a p";s:2:"98";s:3:"est";s:2:"99";s:4:"stÄ";s:3:"100";s:4:"Å¡an";s:3:"101";s:3:"nes";s:3:"102";s:3:"nie";s:3:"103";s:3:"s d";s:3:"104";s:3:"s m";s:3:"105";s:3:"val";s:3:"106";s:3:" di";s:3:"107";s:3:" es";s:3:"108";s:3:" re";s:3:"109";s:3:"no ";s:3:"110";s:3:"to ";s:3:"111";s:3:"umu";s:3:"112";s:3:"vai";s:3:"113";s:4:"Å¡i ";s:3:"114";s:4:" vÄ“";s:3:"115";s:3:"kum";s:3:"116";s:3:"nu ";s:3:"117";s:3:"rie";s:3:"118";s:3:"s t";s:3:"119";s:4:"Äm ";s:3:"120";s:3:"ad ";s:3:"121";s:3:"et ";s:3:"122";s:3:"mu ";s:3:"123";s:3:"s l";s:3:"124";s:3:" be";s:3:"125";s:3:"aud";s:3:"126";s:3:"tur";s:3:"127";s:3:"vij";s:3:"128";s:4:"viņ";s:3:"129";s:4:"Äju";s:3:"130";s:3:"bas";s:3:"131";s:3:"gad";s:3:"132";s:3:"i n";s:3:"133";s:3:"ika";s:3:"134";s:3:"os ";s:3:"135";s:3:"a v";s:3:"136";s:3:"not";s:3:"137";s:3:"oti";s:3:"138";s:3:"sts";s:3:"139";s:3:"aik";s:3:"140";s:3:"u a";s:3:"141";s:4:"Ä a";s:3:"142";s:4:"Äk ";s:3:"143";s:3:" to";s:3:"144";s:3:"ied";s:3:"145";s:3:"stu";s:3:"146";s:3:"ti ";s:3:"147";s:3:"u p";s:3:"148";s:4:"vÄ“l";s:3:"149";s:4:"Äci";s:3:"150";s:4:" Å¡o";s:3:"151";s:3:"gi ";s:3:"152";s:3:"ko ";s:3:"153";s:3:"pro";s:3:"154";s:3:"s r";s:3:"155";s:4:"tÄj";s:3:"156";s:3:"u s";s:3:"157";s:3:"u v";s:3:"158";s:3:"vis";s:3:"159";s:3:"aun";s:3:"160";s:3:"ks ";s:3:"161";s:3:"str";s:3:"162";s:3:"zin";s:3:"163";s:3:"a a";s:3:"164";s:4:"adÄ«";s:3:"165";s:3:"da ";s:3:"166";s:3:"dar";s:3:"167";s:3:"ena";s:3:"168";s:3:"ici";s:3:"169";s:3:"kra";s:3:"170";s:3:"nas";s:3:"171";s:4:"stÄ«";s:3:"172";s:4:"Å¡u ";s:3:"173";s:4:" mÄ“";s:3:"174";s:3:"a n";s:3:"175";s:3:"eci";s:3:"176";s:3:"i s";s:3:"177";s:3:"ie ";s:3:"178";s:4:"iņa";s:3:"179";s:3:"ju ";s:3:"180";s:3:"las";s:3:"181";s:3:"r t";s:3:"182";s:3:"ums";s:3:"183";s:4:"Å¡ie";s:3:"184";s:3:"bu ";s:3:"185";s:3:"cit";s:3:"186";s:3:"i a";s:3:"187";s:3:"ina";s:3:"188";s:3:"ma ";s:3:"189";s:3:"pus";s:3:"190";s:3:"ra ";s:3:"191";s:3:" au";s:3:"192";s:3:" se";s:3:"193";s:3:" sl";s:3:"194";s:3:"a s";s:3:"195";s:3:"ais";s:3:"196";s:4:"eÅ¡i";s:3:"197";s:3:"iec";s:3:"198";s:3:"iku";s:3:"199";s:4:"pÄr";s:3:"200";s:3:"s b";s:3:"201";s:3:"s k";s:3:"202";s:3:"sot";s:3:"203";s:5:"ÄdÄ";s:3:"204";s:3:" in";s:3:"205";s:3:" li";s:3:"206";s:3:" tr";s:3:"207";s:3:"ana";s:3:"208";s:3:"eso";s:3:"209";s:3:"ikr";s:3:"210";s:3:"man";s:3:"211";s:3:"ne ";s:3:"212";s:3:"u k";s:3:"213";s:3:" tu";s:3:"214";s:3:"an ";s:3:"215";s:3:"av ";s:3:"216";s:3:"bet";s:3:"217";s:4:"bÅ«t";s:3:"218";s:3:"im ";s:3:"219";s:3:"isk";s:3:"220";s:4:"lÄ«d";s:3:"221";s:3:"nav";s:3:"222";s:3:"ras";s:3:"223";s:3:"ri ";s:3:"224";s:3:"s g";s:3:"225";s:3:"sti";s:3:"226";s:4:"Ä«dz";s:3:"227";s:3:" ai";s:3:"228";s:3:"arb";s:3:"229";s:3:"cin";s:3:"230";s:3:"das";s:3:"231";s:3:"ent";s:3:"232";s:3:"gal";s:3:"233";s:3:"i p";s:3:"234";s:3:"lik";s:3:"235";s:4:"mÄ ";s:3:"236";s:3:"nek";s:3:"237";s:3:"pat";s:3:"238";s:4:"rÄ“t";s:3:"239";s:3:"si ";s:3:"240";s:3:"tra";s:3:"241";s:4:"uÅ¡i";s:3:"242";s:3:"vei";s:3:"243";s:3:" br";s:3:"244";s:3:" pu";s:3:"245";s:3:" sk";s:3:"246";s:3:"als";s:3:"247";s:3:"ama";s:3:"248";s:3:"edz";s:3:"249";s:3:"eka";s:3:"250";s:4:"eÅ¡u";s:3:"251";s:3:"ieg";s:3:"252";s:3:"jis";s:3:"253";s:3:"kam";s:3:"254";s:3:"lst";s:3:"255";s:4:"nÄk";s:3:"256";s:3:"oli";s:3:"257";s:3:"pre";s:3:"258";s:4:"pÄ“c";s:3:"259";s:3:"rot";s:3:"260";s:4:"tÄs";s:3:"261";s:3:"usi";s:3:"262";s:4:"Ä“l ";s:3:"263";s:4:"Ä“s ";s:3:"264";s:3:" bi";s:3:"265";s:3:" de";s:3:"266";s:3:" me";s:3:"267";s:4:" pÄ";s:3:"268";s:3:"a i";s:3:"269";s:3:"aid";s:3:"270";s:4:"ajÄ";s:3:"271";s:3:"ikt";s:3:"272";s:3:"kat";s:3:"273";s:3:"lic";s:3:"274";s:3:"lod";s:3:"275";s:3:"mi ";s:3:"276";s:3:"ni ";s:3:"277";s:3:"pri";s:3:"278";s:4:"rÄd";s:3:"279";s:4:"rÄ«g";s:3:"280";s:3:"sim";s:3:"281";s:4:"trÄ";s:3:"282";s:3:"u l";s:3:"283";s:3:"uto";s:3:"284";s:3:"uz ";s:3:"285";s:4:"Ä“c ";s:3:"286";s:5:"Ä«tÄ";s:3:"287";s:3:" ce";s:3:"288";s:4:" jÄ";s:3:"289";s:3:" sv";s:3:"290";s:3:"a t";s:3:"291";s:3:"aga";s:3:"292";s:3:"aiz";s:3:"293";s:3:"atu";s:3:"294";s:3:"ba ";s:3:"295";s:3:"cie";s:3:"296";s:3:"du ";s:3:"297";s:3:"dzi";s:3:"298";s:4:"dzÄ«";s:3:"299";}s:10:"lithuanian";a:300:{s:3:"as ";s:1:"0";s:3:" pa";s:1:"1";s:3:" ka";s:1:"2";s:3:"ai ";s:1:"3";s:3:"us ";s:1:"4";s:3:"os ";s:1:"5";s:3:"is ";s:1:"6";s:3:" ne";s:1:"7";s:3:" ir";s:1:"8";s:3:"ir ";s:1:"9";s:3:"ti ";s:2:"10";s:3:" pr";s:2:"11";s:3:"aus";s:2:"12";s:3:"ini";s:2:"13";s:3:"s p";s:2:"14";s:3:"pas";s:2:"15";s:4:"ių ";s:2:"16";s:3:" ta";s:2:"17";s:3:" vi";s:2:"18";s:3:"iau";s:2:"19";s:3:" ko";s:2:"20";s:3:" su";s:2:"21";s:3:"kai";s:2:"22";s:3:"o p";s:2:"23";s:3:"usi";s:2:"24";s:3:" sa";s:2:"25";s:3:"vo ";s:2:"26";s:3:"tai";s:2:"27";s:3:"ali";s:2:"28";s:4:"tų ";s:2:"29";s:3:"io ";s:2:"30";s:3:"jo ";s:2:"31";s:3:"s k";s:2:"32";s:3:"sta";s:2:"33";s:3:"iai";s:2:"34";s:3:" bu";s:2:"35";s:3:" nu";s:2:"36";s:3:"ius";s:2:"37";s:3:"mo ";s:2:"38";s:3:" po";s:2:"39";s:3:"ien";s:2:"40";s:3:"s s";s:2:"41";s:3:"tas";s:2:"42";s:3:" me";s:2:"43";s:3:"uvo";s:2:"44";s:3:"kad";s:2:"45";s:4:" iÅ¡";s:2:"46";s:3:" la";s:2:"47";s:3:"to ";s:2:"48";s:3:"ais";s:2:"49";s:3:"ie ";s:2:"50";s:3:"kur";s:2:"51";s:3:"uri";s:2:"52";s:3:" ku";s:2:"53";s:3:"ijo";s:2:"54";s:4:"Äia";s:2:"55";s:3:"au ";s:2:"56";s:3:"met";s:2:"57";s:3:"je ";s:2:"58";s:3:" va";s:2:"59";s:3:"ad ";s:2:"60";s:3:" ap";s:2:"61";s:3:"and";s:2:"62";s:3:" gr";s:2:"63";s:3:" ti";s:2:"64";s:3:"kal";s:2:"65";s:3:"asi";s:2:"66";s:3:"i p";s:2:"67";s:4:"iÄi";s:2:"68";s:3:"s i";s:2:"69";s:3:"s v";s:2:"70";s:3:"ink";s:2:"71";s:3:"o n";s:2:"72";s:4:"Ä—s ";s:2:"73";s:3:"buv";s:2:"74";s:3:"s a";s:2:"75";s:3:" ga";s:2:"76";s:3:"aip";s:2:"77";s:3:"avi";s:2:"78";s:3:"mas";s:2:"79";s:3:"pri";s:2:"80";s:3:"tik";s:2:"81";s:3:" re";s:2:"82";s:3:"etu";s:2:"83";s:3:"jos";s:2:"84";s:3:" da";s:2:"85";s:3:"ent";s:2:"86";s:3:"oli";s:2:"87";s:3:"par";s:2:"88";s:3:"ant";s:2:"89";s:3:"ara";s:2:"90";s:3:"tar";s:2:"91";s:3:"ama";s:2:"92";s:3:"gal";s:2:"93";s:3:"imo";s:2:"94";s:4:"iÅ¡k";s:2:"95";s:3:"o s";s:2:"96";s:3:" at";s:2:"97";s:3:" be";s:2:"98";s:4:" į ";s:2:"99";s:3:"min";s:3:"100";s:3:"tin";s:3:"101";s:3:" tu";s:3:"102";s:3:"s n";s:3:"103";s:3:" jo";s:3:"104";s:3:"dar";s:3:"105";s:3:"ip ";s:3:"106";s:3:"rei";s:3:"107";s:3:" te";s:3:"108";s:4:"dži";s:3:"109";s:3:"kas";s:3:"110";s:3:"nin";s:3:"111";s:3:"tei";s:3:"112";s:3:"vie";s:3:"113";s:3:" li";s:3:"114";s:3:" se";s:3:"115";s:3:"cij";s:3:"116";s:3:"gar";s:3:"117";s:3:"lai";s:3:"118";s:3:"art";s:3:"119";s:3:"lau";s:3:"120";s:3:"ras";s:3:"121";s:3:"no ";s:3:"122";s:3:"o k";s:3:"123";s:4:"tÄ… ";s:3:"124";s:3:" ar";s:3:"125";s:4:"Ä—jo";s:3:"126";s:4:"viÄ";s:3:"127";s:3:"iga";s:3:"128";s:3:"pra";s:3:"129";s:3:"vis";s:3:"130";s:3:" na";s:3:"131";s:3:"men";s:3:"132";s:3:"oki";s:3:"133";s:4:"raÅ¡";s:3:"134";s:3:"s t";s:3:"135";s:3:"iet";s:3:"136";s:3:"ika";s:3:"137";s:3:"int";s:3:"138";s:3:"kom";s:3:"139";s:3:"tam";s:3:"140";s:3:"aug";s:3:"141";s:3:"avo";s:3:"142";s:3:"rie";s:3:"143";s:3:"s b";s:3:"144";s:3:" st";s:3:"145";s:3:"eim";s:3:"146";s:3:"ko ";s:3:"147";s:3:"nus";s:3:"148";s:3:"pol";s:3:"149";s:3:"ria";s:3:"150";s:3:"sau";s:3:"151";s:3:"api";s:3:"152";s:3:"me ";s:3:"153";s:3:"ne ";s:3:"154";s:3:"sik";s:3:"155";s:4:" Å¡i";s:3:"156";s:3:"i n";s:3:"157";s:3:"ia ";s:3:"158";s:3:"ici";s:3:"159";s:3:"oja";s:3:"160";s:3:"sak";s:3:"161";s:3:"sti";s:3:"162";s:3:"ui ";s:3:"163";s:3:"ame";s:3:"164";s:3:"lie";s:3:"165";s:3:"o t";s:3:"166";s:3:"pie";s:3:"167";s:4:"Äiu";s:3:"168";s:3:" di";s:3:"169";s:3:" pe";s:3:"170";s:3:"gri";s:3:"171";s:3:"ios";s:3:"172";s:3:"lia";s:3:"173";s:3:"lin";s:3:"174";s:3:"s d";s:3:"175";s:3:"s g";s:3:"176";s:3:"ta ";s:3:"177";s:3:"uot";s:3:"178";s:3:" ja";s:3:"179";s:4:" už";s:3:"180";s:3:"aut";s:3:"181";s:3:"i s";s:3:"182";s:3:"ino";s:3:"183";s:4:"mÄ… ";s:3:"184";s:3:"oje";s:3:"185";s:3:"rav";s:3:"186";s:4:"dÄ—l";s:3:"187";s:3:"nti";s:3:"188";s:3:"o a";s:3:"189";s:3:"toj";s:3:"190";s:4:"Ä—l ";s:3:"191";s:3:" to";s:3:"192";s:3:" vy";s:3:"193";s:3:"ar ";s:3:"194";s:3:"ina";s:3:"195";s:3:"lic";s:3:"196";s:3:"o v";s:3:"197";s:3:"sei";s:3:"198";s:3:"su ";s:3:"199";s:3:" mi";s:3:"200";s:3:" pi";s:3:"201";s:3:"din";s:3:"202";s:4:"iÅ¡ ";s:3:"203";s:3:"lan";s:3:"204";s:3:"si ";s:3:"205";s:3:"tus";s:3:"206";s:3:" ba";s:3:"207";s:3:"asa";s:3:"208";s:3:"ata";s:3:"209";s:3:"kla";s:3:"210";s:3:"omi";s:3:"211";s:3:"tat";s:3:"212";s:3:" an";s:3:"213";s:3:" ji";s:3:"214";s:3:"als";s:3:"215";s:3:"ena";s:3:"216";s:4:"jų ";s:3:"217";s:3:"nuo";s:3:"218";s:3:"per";s:3:"219";s:3:"rig";s:3:"220";s:3:"s m";s:3:"221";s:3:"val";s:3:"222";s:3:"yta";s:3:"223";s:4:"Äio";s:3:"224";s:3:" ra";s:3:"225";s:3:"i k";s:3:"226";s:3:"lik";s:3:"227";s:3:"net";s:3:"228";s:4:"nÄ— ";s:3:"229";s:3:"tis";s:3:"230";s:3:"tuo";s:3:"231";s:3:"yti";s:3:"232";s:4:"Ä™s ";s:3:"233";s:4:"ų s";s:3:"234";s:3:"ada";s:3:"235";s:3:"ari";s:3:"236";s:3:"do ";s:3:"237";s:3:"eik";s:3:"238";s:3:"eis";s:3:"239";s:3:"ist";s:3:"240";s:3:"lst";s:3:"241";s:3:"ma ";s:3:"242";s:3:"nes";s:3:"243";s:3:"sav";s:3:"244";s:3:"sio";s:3:"245";s:3:"tau";s:3:"246";s:3:" ki";s:3:"247";s:3:"aik";s:3:"248";s:3:"aud";s:3:"249";s:3:"ies";s:3:"250";s:3:"ori";s:3:"251";s:3:"s r";s:3:"252";s:3:"ska";s:3:"253";s:3:" ge";s:3:"254";s:3:"ast";s:3:"255";s:3:"eig";s:3:"256";s:3:"et ";s:3:"257";s:3:"iam";s:3:"258";s:3:"isa";s:3:"259";s:3:"mis";s:3:"260";s:3:"nam";s:3:"261";s:3:"ome";s:3:"262";s:4:"žia";s:3:"263";s:3:"aba";s:3:"264";s:3:"aul";s:3:"265";s:3:"ikr";s:3:"266";s:4:"kÄ… ";s:3:"267";s:3:"nta";s:3:"268";s:3:"ra ";s:3:"269";s:3:"tur";s:3:"270";s:3:" ma";s:3:"271";s:3:"die";s:3:"272";s:3:"ei ";s:3:"273";s:3:"i t";s:3:"274";s:3:"nas";s:3:"275";s:3:"rin";s:3:"276";s:3:"sto";s:3:"277";s:3:"tie";s:3:"278";s:3:"tuv";s:3:"279";s:3:"vos";s:3:"280";s:4:"ų p";s:3:"281";s:4:" dÄ—";s:3:"282";s:3:"are";s:3:"283";s:3:"ats";s:3:"284";s:4:"enÄ—";s:3:"285";s:3:"ili";s:3:"286";s:3:"ima";s:3:"287";s:3:"kar";s:3:"288";s:3:"ms ";s:3:"289";s:3:"nia";s:3:"290";s:3:"r p";s:3:"291";s:3:"rod";s:3:"292";s:3:"s l";s:3:"293";s:3:" o ";s:3:"294";s:3:"e p";s:3:"295";s:3:"es ";s:3:"296";s:3:"ide";s:3:"297";s:3:"ik ";s:3:"298";s:3:"ja ";s:3:"299";}s:10:"macedonian";a:300:{s:5:"на ";s:1:"0";s:5:" на";s:1:"1";s:5:"та ";s:1:"2";s:6:"ата";s:1:"3";s:6:"ија";s:1:"4";s:5:" пр";s:1:"5";s:5:"то ";s:1:"6";s:5:"ја ";s:1:"7";s:5:" за";s:1:"8";s:5:"а н";s:1:"9";s:4:" и ";s:2:"10";s:5:"а Ñ";s:2:"11";s:5:"те ";s:2:"12";s:6:"ите";s:2:"13";s:5:" ко";s:2:"14";s:5:"от ";s:2:"15";s:5:" де";s:2:"16";s:5:" по";s:2:"17";s:5:"а д";s:2:"18";s:5:"во ";s:2:"19";s:5:"за ";s:2:"20";s:5:" во";s:2:"21";s:5:" од";s:2:"22";s:5:" Ñе";s:2:"23";s:5:" не";s:2:"24";s:5:"Ñе ";s:2:"25";s:5:" до";s:2:"26";s:5:"а в";s:2:"27";s:5:"ка ";s:2:"28";s:6:"ање";s:2:"29";s:5:"а п";s:2:"30";s:5:"о п";s:2:"31";s:6:"ува";s:2:"32";s:6:"циј";s:2:"33";s:5:"а о";s:2:"34";s:6:"ици";s:2:"35";s:6:"ето";s:2:"36";s:5:"о н";s:2:"37";s:6:"ани";s:2:"38";s:5:"ни ";s:2:"39";s:5:" вл";s:2:"40";s:6:"дек";s:2:"41";s:6:"ека";s:2:"42";s:6:"њет";s:2:"43";s:5:"ќе ";s:2:"44";s:4:" е ";s:2:"45";s:5:"а з";s:2:"46";s:5:"а и";s:2:"47";s:5:"ат ";s:2:"48";s:6:"вла";s:2:"49";s:5:"го ";s:2:"50";s:5:"е н";s:2:"51";s:5:"од ";s:2:"52";s:6:"пре";s:2:"53";s:5:" го";s:2:"54";s:5:" да";s:2:"55";s:5:" ма";s:2:"56";s:5:" ре";s:2:"57";s:5:" ќе";s:2:"58";s:6:"али";s:2:"59";s:5:"и д";s:2:"60";s:5:"и н";s:2:"61";s:6:"иот";s:2:"62";s:6:"нат";s:2:"63";s:6:"ово";s:2:"64";s:5:" па";s:2:"65";s:5:" ра";s:2:"66";s:5:" Ñо";s:2:"67";s:6:"ове";s:2:"68";s:6:"пра";s:2:"69";s:6:"што";s:2:"70";s:5:"ње ";s:2:"71";s:5:"а е";s:2:"72";s:5:"да ";s:2:"73";s:6:"дат";s:2:"74";s:6:"дон";s:2:"75";s:5:"е в";s:2:"76";s:5:"е д";s:2:"77";s:5:"е з";s:2:"78";s:5:"е Ñ";s:2:"79";s:6:"кон";s:2:"80";s:6:"нит";s:2:"81";s:5:"но ";s:2:"82";s:6:"они";s:2:"83";s:6:"ото";s:2:"84";s:6:"пар";s:2:"85";s:6:"при";s:2:"86";s:6:"Ñта";s:2:"87";s:5:"Ñ‚ н";s:2:"88";s:5:" шт";s:2:"89";s:5:"а к";s:2:"90";s:6:"аци";s:2:"91";s:5:"ва ";s:2:"92";s:6:"вањ";s:2:"93";s:5:"е п";s:2:"94";s:6:"ени";s:2:"95";s:5:"ла ";s:2:"96";s:6:"лад";s:2:"97";s:6:"мак";s:2:"98";s:6:"неÑ";s:2:"99";s:6:"ноÑ";s:3:"100";s:6:"про";s:3:"101";s:6:"рен";s:3:"102";s:6:"јат";s:3:"103";s:5:" ин";s:3:"104";s:5:" ме";s:3:"105";s:5:" то";s:3:"106";s:5:"а г";s:3:"107";s:5:"а м";s:3:"108";s:5:"а Ñ€";s:3:"109";s:6:"аке";s:3:"110";s:6:"ако";s:3:"111";s:6:"вор";s:3:"112";s:6:"гов";s:3:"113";s:6:"едо";s:3:"114";s:6:"ена";s:3:"115";s:5:"и и";s:3:"116";s:6:"ира";s:3:"117";s:6:"кед";s:3:"118";s:5:"не ";s:3:"119";s:6:"ниц";s:3:"120";s:6:"ниј";s:3:"121";s:6:"оÑÑ‚";s:3:"122";s:5:"ра ";s:3:"123";s:6:"рат";s:3:"124";s:6:"ред";s:3:"125";s:6:"Ñка";s:3:"126";s:6:"тен";s:3:"127";s:5:" ка";s:3:"128";s:5:" Ñп";s:3:"129";s:5:" ја";s:3:"130";s:5:"а Ñ‚";s:3:"131";s:6:"аде";s:3:"132";s:6:"арт";s:3:"133";s:5:"е г";s:3:"134";s:5:"е и";s:3:"135";s:6:"кат";s:3:"136";s:6:"лаÑ";s:3:"137";s:6:"нио";s:3:"138";s:5:"о Ñ";s:3:"139";s:5:"ри ";s:3:"140";s:5:" ба";s:3:"141";s:5:" би";s:3:"142";s:6:"ава";s:3:"143";s:6:"ате";s:3:"144";s:6:"вни";s:3:"145";s:5:"д н";s:3:"146";s:6:"ден";s:3:"147";s:6:"дов";s:3:"148";s:6:"држ";s:3:"149";s:6:"дув";s:3:"150";s:5:"е о";s:3:"151";s:5:"ен ";s:3:"152";s:6:"ере";s:3:"153";s:6:"ери";s:3:"154";s:5:"и п";s:3:"155";s:5:"и Ñ";s:3:"156";s:6:"ина";s:3:"157";s:6:"кој";s:3:"158";s:6:"нци";s:3:"159";s:5:"о м";s:3:"160";s:5:"о о";s:3:"161";s:6:"одн";s:3:"162";s:6:"пор";s:3:"163";s:6:"Ñки";s:3:"164";s:6:"Ñпо";s:3:"165";s:6:"Ñтв";s:3:"166";s:6:"Ñти";s:3:"167";s:6:"тво";s:3:"168";s:5:"ти ";s:3:"169";s:5:" об";s:3:"170";s:5:" ов";s:3:"171";s:5:"а б";s:3:"172";s:6:"алн";s:3:"173";s:6:"ара";s:3:"174";s:6:"бар";s:3:"175";s:5:"е к";s:3:"176";s:5:"ед ";s:3:"177";s:6:"ент";s:3:"178";s:6:"еѓу";s:3:"179";s:5:"и о";s:3:"180";s:5:"ии ";s:3:"181";s:6:"меѓ";s:3:"182";s:5:"о д";s:3:"183";s:6:"оја";s:3:"184";s:6:"пот";s:3:"185";s:6:"раз";s:3:"186";s:6:"раш";s:3:"187";s:6:"Ñпр";s:3:"188";s:6:"Ñто";s:3:"189";s:5:"Ñ‚ д";s:3:"190";s:5:"ци ";s:3:"191";s:5:" бе";s:3:"192";s:5:" гр";s:3:"193";s:5:" др";s:3:"194";s:5:" из";s:3:"195";s:5:" ÑÑ‚";s:3:"196";s:5:"аа ";s:3:"197";s:6:"бид";s:3:"198";s:6:"вед";s:3:"199";s:6:"гла";s:3:"200";s:6:"еко";s:3:"201";s:6:"енд";s:3:"202";s:6:"еÑе";s:3:"203";s:6:"етÑ";s:3:"204";s:6:"зац";s:3:"205";s:5:"и Ñ‚";s:3:"206";s:6:"иза";s:3:"207";s:6:"инÑ";s:3:"208";s:6:"иÑÑ‚";s:3:"209";s:5:"ки ";s:3:"210";s:6:"ков";s:3:"211";s:6:"кол";s:3:"212";s:5:"ку ";s:3:"213";s:6:"лиц";s:3:"214";s:5:"о з";s:3:"215";s:5:"о и";s:3:"216";s:6:"ова";s:3:"217";s:6:"олк";s:3:"218";s:6:"оре";s:3:"219";s:6:"ори";s:3:"220";s:6:"под";s:3:"221";s:6:"рањ";s:3:"222";s:6:"реф";s:3:"223";s:6:"ржа";s:3:"224";s:6:"ров";s:3:"225";s:6:"рти";s:3:"226";s:5:"Ñо ";s:3:"227";s:6:"тор";s:3:"228";s:6:"фер";s:3:"229";s:6:"цен";s:3:"230";s:6:"цит";s:3:"231";s:4:" а ";s:3:"232";s:5:" вр";s:3:"233";s:5:" гл";s:3:"234";s:5:" дп";s:3:"235";s:5:" мо";s:3:"236";s:5:" ни";s:3:"237";s:5:" но";s:3:"238";s:5:" оп";s:3:"239";s:5:" от";s:3:"240";s:5:"а Ñœ";s:3:"241";s:6:"або";s:3:"242";s:6:"ада";s:3:"243";s:6:"аÑа";s:3:"244";s:6:"аша";s:3:"245";s:5:"ба ";s:3:"246";s:6:"бот";s:3:"247";s:6:"ваа";s:3:"248";s:6:"ват";s:3:"249";s:6:"вот";s:3:"250";s:5:"ги ";s:3:"251";s:6:"гра";s:3:"252";s:5:"де ";s:3:"253";s:6:"дин";s:3:"254";s:6:"дум";s:3:"255";s:6:"евр";s:3:"256";s:6:"еду";s:3:"257";s:6:"ено";s:3:"258";s:6:"ера";s:3:"259";s:5:"ÐµÑ ";s:3:"260";s:6:"ење";s:3:"261";s:5:"же ";s:3:"262";s:6:"зак";s:3:"263";s:5:"и в";s:3:"264";s:6:"ила";s:3:"265";s:6:"иту";s:3:"266";s:6:"коа";s:3:"267";s:6:"кои";s:3:"268";s:6:"лан";s:3:"269";s:6:"лку";s:3:"270";s:6:"лож";s:3:"271";s:6:"мот";s:3:"272";s:6:"нду";s:3:"273";s:6:"нÑÑ‚";s:3:"274";s:5:"о в";s:3:"275";s:5:"оа ";s:3:"276";s:6:"оал";s:3:"277";s:6:"обр";s:3:"278";s:5:"ов ";s:3:"279";s:6:"ови";s:3:"280";s:6:"овн";s:3:"281";s:5:"ои ";s:3:"282";s:5:"ор ";s:3:"283";s:6:"орм";s:3:"284";s:5:"ој ";s:3:"285";s:6:"рет";s:3:"286";s:6:"Ñед";s:3:"287";s:5:"ÑÑ‚ ";s:3:"288";s:6:"тер";s:3:"289";s:6:"тиј";s:3:"290";s:6:"тоа";s:3:"291";s:6:"фор";s:3:"292";s:6:"ции";s:3:"293";s:5:"ѓу ";s:3:"294";s:5:" ал";s:3:"295";s:5:" ве";s:3:"296";s:5:" вм";s:3:"297";s:5:" ги";s:3:"298";s:5:" ду";s:3:"299";}s:9:"mongolian";a:300:{s:5:"ын ";s:1:"0";s:5:" ба";s:1:"1";s:5:"йн ";s:1:"2";s:6:"бай";s:1:"3";s:6:"ийн";s:1:"4";s:6:"уул";s:1:"5";s:5:" ул";s:1:"6";s:6:"улÑ";s:1:"7";s:5:"ан ";s:1:"8";s:5:" ха";s:1:"9";s:6:"ний";s:2:"10";s:5:"н Ñ…";s:2:"11";s:6:"гаа";s:2:"12";s:6:"Ñын";s:2:"13";s:5:"ий ";s:2:"14";s:6:"лÑÑ‹";s:2:"15";s:5:" бо";s:2:"16";s:5:"й б";s:2:"17";s:5:"Ñн ";s:2:"18";s:5:"ах ";s:2:"19";s:6:"бол";s:2:"20";s:5:"ол ";s:2:"21";s:5:"н б";s:2:"22";s:6:"оло";s:2:"23";s:5:" Ñ…Ñ";s:2:"24";s:6:"онг";s:2:"25";s:6:"гол";s:2:"26";s:6:"гуу";s:2:"27";s:6:"нго";s:2:"28";s:5:"ыг ";s:2:"29";s:6:"жил";s:2:"30";s:5:" мо";s:2:"31";s:6:"лаг";s:2:"32";s:6:"лла";s:2:"33";s:6:"мон";s:2:"34";s:5:" Ñ‚Ñ”";s:2:"35";s:5:" ху";s:2:"36";s:6:"айд";s:2:"37";s:5:"ны ";s:2:"38";s:5:"он ";s:2:"39";s:6:"Ñан";s:2:"40";s:6:"хий";s:2:"41";s:5:" аж";s:2:"42";s:5:" ор";s:2:"43";s:5:"л у";s:2:"44";s:5:"н Ñ‚";s:2:"45";s:6:"улг";s:2:"46";s:6:"айг";s:2:"47";s:6:"длы";s:2:"48";s:5:"йг ";s:2:"49";s:5:" за";s:2:"50";s:6:"дÑÑ";s:2:"51";s:5:"н а";s:2:"52";s:6:"ндÑ";s:2:"53";s:6:"ула";s:2:"54";s:5:"ÑÑ ";s:2:"55";s:6:"ага";s:2:"56";s:6:"ийг";s:2:"57";s:4:"vй ";s:2:"58";s:5:"аа ";s:2:"59";s:5:"й а";s:2:"60";s:6:"лын";s:2:"61";s:5:"н з";s:2:"62";s:5:" аю";s:2:"63";s:5:" зє";s:2:"64";s:6:"аар";s:2:"65";s:5:"ад ";s:2:"66";s:5:"ар ";s:2:"67";s:5:"гvй";s:2:"68";s:6:"зєв";s:2:"69";s:6:"ажи";s:2:"70";s:5:"ал ";s:2:"71";s:6:"аюу";s:2:"72";s:5:"г Ñ…";s:2:"73";s:5:"лгv";s:2:"74";s:5:"лж ";s:2:"75";s:6:"Ñни";s:2:"76";s:6:"ÑÑн";s:2:"77";s:6:"юул";s:2:"78";s:6:"йдл";s:2:"79";s:6:"лыг";s:2:"80";s:6:"нхи";s:2:"81";s:6:"ууд";s:2:"82";s:6:"хам";s:2:"83";s:5:" нÑ";s:2:"84";s:5:" Ñа";s:2:"85";s:6:"гий";s:2:"86";s:6:"лах";s:2:"87";s:6:"лєл";s:2:"88";s:6:"рєн";s:2:"89";s:6:"єгч";s:2:"90";s:5:" та";s:2:"91";s:6:"илл";s:2:"92";s:6:"лий";s:2:"93";s:6:"лÑÑ…";s:2:"94";s:6:"рий";s:2:"95";s:5:"ÑÑ… ";s:2:"96";s:5:" ер";s:2:"97";s:5:" ÑÑ€";s:2:"98";s:6:"влє";s:2:"99";s:6:"ерє";s:3:"100";s:6:"ийл";s:3:"101";s:6:"лон";s:3:"102";s:6:"лєг";s:3:"103";s:6:"євл";s:3:"104";s:6:"єнх";s:3:"105";s:5:" хо";s:3:"106";s:6:"ари";s:3:"107";s:5:"их ";s:3:"108";s:6:"хан";s:3:"109";s:5:"ÑÑ€ ";s:3:"110";s:5:"єн ";s:3:"111";s:4:"vvл";s:3:"112";s:5:"ж б";s:3:"113";s:6:"Ñ‚Ñй";s:3:"114";s:5:"Ñ… Ñ…";s:3:"115";s:6:"Ñрх";s:3:"116";s:4:" vн";s:3:"117";s:5:" нь";s:3:"118";s:5:"vнд";s:3:"119";s:6:"алт";s:3:"120";s:6:"йлє";s:3:"121";s:5:"нь ";s:3:"122";s:6:"тєр";s:3:"123";s:5:" га";s:3:"124";s:5:" Ñу";s:3:"125";s:6:"аан";s:3:"126";s:6:"даа";s:3:"127";s:6:"илц";s:3:"128";s:6:"йгу";s:3:"129";s:5:"л а";s:3:"130";s:6:"лаа";s:3:"131";s:5:"н н";s:3:"132";s:6:"руу";s:3:"133";s:5:"Ñй ";s:3:"134";s:5:" то";s:3:"135";s:5:"н Ñ";s:3:"136";s:6:"рил";s:3:"137";s:6:"єри";s:3:"138";s:6:"ааг";s:3:"139";s:5:"гч ";s:3:"140";s:6:"лÑÑ";s:3:"141";s:5:"н о";s:3:"142";s:6:"Ñ€Ñг";s:3:"143";s:6:"Ñуу";s:3:"144";s:6:"ÑÑ€Ñ";s:3:"145";s:6:"їїл";s:3:"146";s:4:" yн";s:3:"147";s:5:" бу";s:3:"148";s:5:" дÑ";s:3:"149";s:5:" ол";s:3:"150";s:5:" ту";s:3:"151";s:5:" ши";s:3:"152";s:5:"yнд";s:3:"153";s:6:"аши";s:3:"154";s:5:"г Ñ‚";s:3:"155";s:5:"иг ";s:3:"156";s:5:"йл ";s:3:"157";s:6:"хар";s:3:"158";s:6:"шин";s:3:"159";s:5:"Ñг ";s:3:"160";s:5:"єр ";s:3:"161";s:5:" их";s:3:"162";s:5:" Ñ…Ñ”";s:3:"163";s:5:" Ñ…Ñ—";s:3:"164";s:5:"ам ";s:3:"165";s:6:"анг";s:3:"166";s:5:"ин ";s:3:"167";s:6:"йга";s:3:"168";s:6:"лÑа";s:3:"169";s:4:"н v";s:3:"170";s:5:"н е";s:3:"171";s:6:"нал";s:3:"172";s:5:"нд ";s:3:"173";s:6:"хуу";s:3:"174";s:6:"цаа";s:3:"175";s:5:"Ñд ";s:3:"176";s:6:"ÑÑÑ€";s:3:"177";s:5:"єл ";s:3:"178";s:5:"vйл";s:3:"179";s:6:"ада";s:3:"180";s:6:"айн";s:3:"181";s:6:"ала";s:3:"182";s:6:"амт";s:3:"183";s:6:"гах";s:3:"184";s:5:"д Ñ…";s:3:"185";s:6:"дал";s:3:"186";s:6:"зар";s:3:"187";s:5:"л б";s:3:"188";s:6:"лан";s:3:"189";s:5:"н д";s:3:"190";s:6:"ÑÑн";s:3:"191";s:6:"улл";s:3:"192";s:5:"Ñ… б";s:3:"193";s:6:"Ñ…ÑÑ€";s:3:"194";s:4:" бv";s:3:"195";s:5:" да";s:3:"196";s:5:" зо";s:3:"197";s:5:"vÑ€Ñ";s:3:"198";s:6:"аад";s:3:"199";s:6:"гÑÑ";s:3:"200";s:6:"лÑн";s:3:"201";s:5:"н и";s:3:"202";s:5:"н Ñ";s:3:"203";s:6:"нга";s:3:"204";s:5:"Ð½Ñ ";s:3:"205";s:6:"тал";s:3:"206";s:6:"тын";s:3:"207";s:6:"хур";s:3:"208";s:5:"Ñл ";s:3:"209";s:5:" на";s:3:"210";s:5:" ни";s:3:"211";s:5:" он";s:3:"212";s:5:"vлÑ";s:3:"213";s:5:"аг ";s:3:"214";s:5:"аж ";s:3:"215";s:5:"ай ";s:3:"216";s:6:"ата";s:3:"217";s:6:"бар";s:3:"218";s:5:"г б";s:3:"219";s:6:"гад";s:3:"220";s:6:"гїй";s:3:"221";s:5:"й Ñ…";s:3:"222";s:5:"лт ";s:3:"223";s:5:"н м";s:3:"224";s:5:"на ";s:3:"225";s:6:"оро";s:3:"226";s:6:"уль";s:3:"227";s:6:"чин";s:3:"228";s:5:"Ñж ";s:3:"229";s:6:"ÑнÑ";s:3:"230";s:6:"ÑÑд";s:3:"231";s:5:"їй ";s:3:"232";s:6:"їлÑ";s:3:"233";s:5:" би";s:3:"234";s:5:" Ñ‚Ñ";s:3:"235";s:5:" Ñн";s:3:"236";s:6:"аны";s:3:"237";s:6:"дий";s:3:"238";s:6:"дÑÑ";s:3:"239";s:6:"лал";s:3:"240";s:6:"лга";s:3:"241";s:5:"лд ";s:3:"242";s:6:"лог";s:3:"243";s:5:"ль ";s:3:"244";s:5:"н у";s:3:"245";s:5:"н Ñ—";s:3:"246";s:5:"Ñ€ б";s:3:"247";s:6:"рал";s:3:"248";s:6:"Ñон";s:3:"249";s:6:"тай";s:3:"250";s:6:"удл";s:3:"251";s:6:"Ñлт";s:3:"252";s:6:"Ñрг";s:3:"253";s:6:"єлє";s:3:"254";s:4:" vй";s:3:"255";s:4:" в ";s:3:"256";s:5:" гÑ";s:3:"257";s:4:" Ñ…v";s:3:"258";s:6:"ара";s:3:"259";s:5:"бvÑ€";s:3:"260";s:5:"д н";s:3:"261";s:5:"д о";s:3:"262";s:5:"л Ñ…";s:3:"263";s:5:"Ð»Ñ ";s:3:"264";s:6:"лты";s:3:"265";s:5:"н г";s:3:"266";s:6:"нÑг";s:3:"267";s:6:"огт";s:3:"268";s:6:"олы";s:3:"269";s:6:"оёр";s:3:"270";s:5:"Ñ€ Ñ‚";s:3:"271";s:6:"Ñ€ÑÑ";s:3:"272";s:6:"тав";s:3:"273";s:6:"тог";s:3:"274";s:6:"уур";s:3:"275";s:6:"хоё";s:3:"276";s:6:"Ñ…Ñл";s:3:"277";s:6:"Ñ…ÑÑ";s:3:"278";s:6:"ÑлÑ";s:3:"279";s:5:"Ñ‘Ñ€ ";s:3:"280";s:5:" ав";s:3:"281";s:5:" аÑ";s:3:"282";s:5:" аш";s:3:"283";s:5:" ду";s:3:"284";s:5:" Ñо";s:3:"285";s:5:" чи";s:3:"286";s:5:" Ñв";s:3:"287";s:5:" єр";s:3:"288";s:6:"аал";s:3:"289";s:6:"алд";s:3:"290";s:6:"амж";s:3:"291";s:6:"анд";s:3:"292";s:6:"аÑу";s:3:"293";s:6:"вÑÑ€";s:3:"294";s:5:"г у";s:3:"295";s:6:"двÑ";s:3:"296";s:4:"жvv";s:3:"297";s:6:"лца";s:3:"298";s:6:"лÑл";s:3:"299";}s:6:"nepali";a:300:{s:7:"को ";s:1:"0";s:7:"का ";s:1:"1";s:7:"मा ";s:1:"2";s:9:"हरà¥";s:1:"3";s:7:" ने";s:1:"4";s:9:"नेप";s:1:"5";s:9:"पाल";s:1:"6";s:9:"ेपा";s:1:"7";s:7:" सम";s:1:"8";s:7:"ले ";s:1:"9";s:7:" पà¥";s:2:"10";s:9:"पà¥à¤°";s:2:"11";s:9:"कार";s:2:"12";s:7:"ा स";s:2:"13";s:9:"à¤à¤•à¥‹";s:2:"14";s:7:" भà¤";s:2:"15";s:5:" छ ";s:2:"16";s:7:" भा";s:2:"17";s:9:"à¥à¤°à¤®";s:2:"18";s:7:" गर";s:2:"19";s:9:"रà¥à¤•";s:2:"20";s:5:" र ";s:2:"21";s:9:"भार";s:2:"22";s:9:"ारत";s:2:"23";s:7:" का";s:2:"24";s:7:" वि";s:2:"25";s:9:"भà¤à¤•";s:2:"26";s:9:"ाली";s:2:"27";s:7:"ली ";s:2:"28";s:7:"ा प";s:2:"29";s:9:"ीहर";s:2:"30";s:9:"ारà¥";s:2:"31";s:7:"ो छ";s:2:"32";s:7:"ना ";s:2:"33";s:7:"रॠ";s:2:"34";s:9:"ालक";s:2:"35";s:9:"à¥à¤¯à¤¾";s:2:"36";s:7:" बा";s:2:"37";s:9:"à¤à¤•à¤¾";s:2:"38";s:7:"ने ";s:2:"39";s:9:"नà¥à¤¤";s:2:"40";s:7:"ा ब";s:2:"41";s:9:"ाको";s:2:"42";s:7:"ार ";s:2:"43";s:7:"ा भ";s:2:"44";s:9:"ाहर";s:2:"45";s:9:"à¥à¤°à¥‹";s:2:"46";s:9:"कà¥à¤·";s:2:"47";s:7:"नॠ";s:2:"48";s:9:"ारी";s:2:"49";s:7:" नि";s:2:"50";s:7:"ा न";s:2:"51";s:7:"ी स";s:2:"52";s:7:" डà¥";s:2:"53";s:9:"कà¥à¤°";s:2:"54";s:9:"जना";s:2:"55";s:7:"यो ";s:2:"56";s:7:"ा छ";s:2:"57";s:9:"ेवा";s:2:"58";s:9:"à¥à¤¤à¤¾";s:2:"59";s:7:" रा";s:2:"60";s:9:"तà¥à¤¯";s:2:"61";s:9:"नà¥à¤¦";s:2:"62";s:9:"हà¥à¤¨";s:2:"63";s:7:"ा क";s:2:"64";s:9:"ामा";s:2:"65";s:7:"ी न";s:2:"66";s:9:"à¥à¤¦à¤¾";s:2:"67";s:7:" से";s:2:"68";s:9:"छनà¥";s:2:"69";s:9:"मà¥à¤¬";s:2:"70";s:9:"रोत";s:2:"71";s:9:"सेव";s:2:"72";s:9:"सà¥à¤¤";s:2:"73";s:9:"सà¥à¤°";s:2:"74";s:9:"ेका";s:2:"75";s:7:"à¥à¤¤ ";s:2:"76";s:7:" बी";s:2:"77";s:7:" हà¥";s:2:"78";s:9:"कà¥à¤¤";s:2:"79";s:9:"तà¥à¤°";s:2:"80";s:7:"रत ";s:2:"81";s:9:"रà¥à¤¨";s:2:"82";s:9:"रà¥à¤¯";s:2:"83";s:7:"ा र";s:2:"84";s:9:"ाका";s:2:"85";s:9:"à¥à¤•à¥‹";s:2:"86";s:7:" à¤à¤•";s:2:"87";s:7:" सं";s:2:"88";s:7:" सà¥";s:2:"89";s:9:"बीब";s:2:"90";s:9:"बीस";s:2:"91";s:9:"लको";s:2:"92";s:9:"सà¥à¤¯";s:2:"93";s:9:"ीबी";s:2:"94";s:9:"ीसी";s:2:"95";s:9:"ेको";s:2:"96";s:7:"ो स";s:2:"97";s:9:"à¥à¤¯à¤•";s:2:"98";s:7:" छन";s:2:"99";s:7:" जन";s:3:"100";s:7:" बि";s:3:"101";s:7:" मà¥";s:3:"102";s:7:" सà¥";s:3:"103";s:9:"गरà¥";s:3:"104";s:9:"ताह";s:3:"105";s:9:"नà¥à¤§";s:3:"106";s:9:"बार";s:3:"107";s:9:"मनà¥";s:3:"108";s:9:"मसà¥";s:3:"109";s:9:"रà¥à¤²";s:3:"110";s:9:"लाई";s:3:"111";s:7:"ा व";s:3:"112";s:7:"ाई ";s:3:"113";s:7:"ाल ";s:3:"114";s:9:"िका";s:3:"115";s:7:" तà¥";s:3:"116";s:7:" मा";s:3:"117";s:7:" यस";s:3:"118";s:7:" रà¥";s:3:"119";s:9:"ताक";s:3:"120";s:9:"बनà¥";s:3:"121";s:7:"र ब";s:3:"122";s:7:"रण ";s:3:"123";s:9:"रà¥à¤ª";s:3:"124";s:9:"रेक";s:3:"125";s:9:"षà¥à¤Ÿ";s:3:"126";s:9:"समà¥";s:3:"127";s:7:"सी ";s:3:"128";s:9:"ाà¤à¤•";s:3:"129";s:9:"à¥à¤•à¤¾";s:3:"130";s:9:"à¥à¤•à¥";s:3:"131";s:7:" अध";s:3:"132";s:7:" अन";s:3:"133";s:7:" तथ";s:3:"134";s:7:" थि";s:3:"135";s:7:" दे";s:3:"136";s:7:" पर";s:3:"137";s:7:" बै";s:3:"138";s:9:"तथा";s:3:"139";s:7:"ता ";s:3:"140";s:7:"दा ";s:3:"141";s:9:"दà¥à¤¦";s:3:"142";s:7:"नी ";s:3:"143";s:9:"बाट";s:3:"144";s:9:"यकà¥";s:3:"145";s:7:"री ";s:3:"146";s:9:"रीह";s:3:"147";s:9:"रà¥à¤®";s:3:"148";s:9:"लका";s:3:"149";s:9:"समस";s:3:"150";s:7:"ा अ";s:3:"151";s:7:"ा à¤";s:3:"152";s:7:"ाट ";s:3:"153";s:7:"िय ";s:3:"154";s:7:"ो प";s:3:"155";s:7:"ो म";s:3:"156";s:7:"à¥à¤¨ ";s:3:"157";s:9:"à¥à¤¨à¥‡";s:3:"158";s:9:"à¥à¤·à¤¾";s:3:"159";s:7:" पा";s:3:"160";s:7:" यो";s:3:"161";s:7:" हा";s:3:"162";s:9:"अधि";s:3:"163";s:9:"डà¥à¤µ";s:3:"164";s:7:"त भ";s:3:"165";s:7:"त स";s:3:"166";s:7:"था ";s:3:"167";s:9:"धिक";s:3:"168";s:9:"पमा";s:3:"169";s:9:"बैठ";s:3:"170";s:9:"मà¥à¤¦";s:3:"171";s:7:"या ";s:3:"172";s:9:"यà¥à¤•";s:3:"173";s:7:"र न";s:3:"174";s:9:"रति";s:3:"175";s:9:"वान";s:3:"176";s:9:"सार";s:3:"177";s:7:"ा आ";s:3:"178";s:7:"ा ज";s:3:"179";s:7:"ा ह";s:3:"180";s:9:"à¥à¤¦à¥";s:3:"181";s:9:"à¥à¤ªà¤®";s:3:"182";s:9:"à¥à¤²à¥‡";s:3:"183";s:9:"à¥à¤µà¤¾";s:3:"184";s:9:"ैठक";s:3:"185";s:7:"ो ब";s:3:"186";s:9:"à¥à¤¤à¤°";s:3:"187";s:7:"à¥à¤¯ ";s:3:"188";s:9:"à¥à¤¯à¤¸";s:3:"189";s:7:" कà¥";s:3:"190";s:7:" मन";s:3:"191";s:7:" रह";s:3:"192";s:9:"चार";s:3:"193";s:9:"तिय";s:3:"194";s:7:"दै ";s:3:"195";s:9:"निर";s:3:"196";s:7:"नॠ";s:3:"197";s:9:"परà¥";s:3:"198";s:9:"रकà¥";s:3:"199";s:9:"रà¥à¤¦";s:3:"200";s:9:"समा";s:3:"201";s:9:"सà¥à¤°";s:3:"202";s:9:"ाउन";s:3:"203";s:7:"ान ";s:3:"204";s:9:"ानम";s:3:"205";s:9:"ारण";s:3:"206";s:9:"ाले";s:3:"207";s:7:"ि ब";s:3:"208";s:9:"ियो";s:3:"209";s:9:"à¥à¤¨à¥";s:3:"210";s:9:"à¥à¤°à¤•";s:3:"211";s:9:"à¥à¤¤à¥";s:3:"212";s:9:"à¥à¤¬à¤¨";s:3:"213";s:9:"à¥à¤°à¤¾";s:3:"214";s:7:"à¥à¤· ";s:3:"215";s:7:" आर";s:3:"216";s:7:" जल";s:3:"217";s:7:" बे";s:3:"218";s:7:" या";s:3:"219";s:7:" सा";s:3:"220";s:9:"आà¤à¤•";s:3:"221";s:7:"à¤à¤• ";s:3:"222";s:9:"करà¥";s:3:"223";s:9:"जलस";s:3:"224";s:9:"णका";s:3:"225";s:7:"त र";s:3:"226";s:9:"दà¥à¤°";s:3:"227";s:9:"धान";s:3:"228";s:7:"धि ";s:3:"229";s:9:"नका";s:3:"230";s:9:"नमा";s:3:"231";s:7:"नि ";s:3:"232";s:9:"ममा";s:3:"233";s:7:"रम ";s:3:"234";s:9:"रहे";s:3:"235";s:9:"राज";s:3:"236";s:9:"लसà¥";s:3:"237";s:7:"ला ";s:3:"238";s:9:"वार";s:3:"239";s:9:"सका";s:3:"240";s:9:"हिल";s:3:"241";s:9:"हेक";s:3:"242";s:7:"ा त";s:3:"243";s:9:"ारे";s:3:"244";s:9:"िनà¥";s:3:"245";s:9:"िसà¥";s:3:"246";s:7:"े स";s:3:"247";s:7:"ो न";s:3:"248";s:7:"ो र";s:3:"249";s:7:"ोत ";s:3:"250";s:9:"à¥à¤§à¤¿";s:3:"251";s:9:"à¥à¤®à¥€";s:3:"252";s:9:"à¥à¤°à¤¸";s:3:"253";s:7:" दà¥";s:3:"254";s:7:" पन";s:3:"255";s:7:" बत";s:3:"256";s:7:" बन";s:3:"257";s:7:" भन";s:3:"258";s:9:"ंयà¥";s:3:"259";s:9:"आरम";s:3:"260";s:7:"खि ";s:3:"261";s:9:"णà¥à¤¡";s:3:"262";s:9:"तका";s:3:"263";s:9:"ताल";s:3:"264";s:7:"दी ";s:3:"265";s:9:"देख";s:3:"266";s:9:"निय";s:3:"267";s:9:"पनि";s:3:"268";s:9:"पà¥à¤¤";s:3:"269";s:9:"बता";s:3:"270";s:7:"मी ";s:3:"271";s:9:"मà¥à¤­";s:3:"272";s:7:"र स";s:3:"273";s:9:"रमà¥";s:3:"274";s:9:"लमा";s:3:"275";s:9:"विश";s:3:"276";s:9:"षाक";s:3:"277";s:9:"संय";s:3:"278";s:7:"ा ड";s:3:"279";s:7:"ा म";s:3:"280";s:9:"ानक";s:3:"281";s:9:"ालम";s:3:"282";s:7:"ि भ";s:3:"283";s:7:"ित ";s:3:"284";s:7:"ी प";s:3:"285";s:7:"ी र";s:3:"286";s:7:"ॠभ";s:3:"287";s:9:"à¥à¤¨à¥‡";s:3:"288";s:7:"े ग";s:3:"289";s:9:"ेखि";s:3:"290";s:7:"ेर ";s:3:"291";s:7:"ो भ";s:3:"292";s:7:"ो व";s:3:"293";s:7:"ो ह";s:3:"294";s:7:"à¥à¤­ ";s:3:"295";s:7:"à¥à¤° ";s:3:"296";s:7:" ता";s:3:"297";s:7:" नम";s:3:"298";s:7:" ना";s:3:"299";}s:9:"norwegian";a:300:{s:3:"er ";s:1:"0";s:3:"en ";s:1:"1";s:3:"et ";s:1:"2";s:3:" de";s:1:"3";s:3:"det";s:1:"4";s:3:" i ";s:1:"5";s:3:"for";s:1:"6";s:3:"il ";s:1:"7";s:3:" fo";s:1:"8";s:3:" me";s:1:"9";s:3:"ing";s:2:"10";s:3:"om ";s:2:"11";s:3:" ha";s:2:"12";s:3:" og";s:2:"13";s:3:"ter";s:2:"14";s:3:" er";s:2:"15";s:3:" ti";s:2:"16";s:3:" st";s:2:"17";s:3:"og ";s:2:"18";s:3:"til";s:2:"19";s:3:"ne ";s:2:"20";s:3:" vi";s:2:"21";s:3:"re ";s:2:"22";s:3:" en";s:2:"23";s:3:" se";s:2:"24";s:3:"te ";s:2:"25";s:3:"or ";s:2:"26";s:3:"de ";s:2:"27";s:3:"kke";s:2:"28";s:3:"ke ";s:2:"29";s:3:"ar ";s:2:"30";s:3:"ng ";s:2:"31";s:3:"r s";s:2:"32";s:3:"ene";s:2:"33";s:3:" so";s:2:"34";s:3:"e s";s:2:"35";s:3:"der";s:2:"36";s:3:"an ";s:2:"37";s:3:"som";s:2:"38";s:3:"ste";s:2:"39";s:3:"at ";s:2:"40";s:3:"ed ";s:2:"41";s:3:"r i";s:2:"42";s:3:" av";s:2:"43";s:3:" in";s:2:"44";s:3:"men";s:2:"45";s:3:" at";s:2:"46";s:3:" ko";s:2:"47";s:4:" pÃ¥";s:2:"48";s:3:"har";s:2:"49";s:3:" si";s:2:"50";s:3:"ere";s:2:"51";s:4:"pÃ¥ ";s:2:"52";s:3:"nde";s:2:"53";s:3:"and";s:2:"54";s:3:"els";s:2:"55";s:3:"ett";s:2:"56";s:3:"tte";s:2:"57";s:3:"lig";s:2:"58";s:3:"t s";s:2:"59";s:3:"den";s:2:"60";s:3:"t i";s:2:"61";s:3:"ikk";s:2:"62";s:3:"med";s:2:"63";s:3:"n s";s:2:"64";s:3:"rt ";s:2:"65";s:3:"ser";s:2:"66";s:3:"ska";s:2:"67";s:3:"t e";s:2:"68";s:3:"ker";s:2:"69";s:3:"sen";s:2:"70";s:3:"av ";s:2:"71";s:3:"ler";s:2:"72";s:3:"r a";s:2:"73";s:3:"ten";s:2:"74";s:3:"e f";s:2:"75";s:3:"r e";s:2:"76";s:3:"r t";s:2:"77";s:3:"ede";s:2:"78";s:3:"ig ";s:2:"79";s:3:" re";s:2:"80";s:3:"han";s:2:"81";s:3:"lle";s:2:"82";s:3:"ner";s:2:"83";s:3:" bl";s:2:"84";s:3:" fr";s:2:"85";s:3:"le ";s:2:"86";s:3:" ve";s:2:"87";s:3:"e t";s:2:"88";s:3:"lan";s:2:"89";s:3:"mme";s:2:"90";s:3:"nge";s:2:"91";s:3:" be";s:2:"92";s:3:" ik";s:2:"93";s:3:" om";s:2:"94";s:4:" Ã¥ ";s:2:"95";s:3:"ell";s:2:"96";s:3:"sel";s:2:"97";s:3:"sta";s:2:"98";s:3:"ver";s:2:"99";s:3:" et";s:3:"100";s:3:" sk";s:3:"101";s:3:"nte";s:3:"102";s:3:"one";s:3:"103";s:3:"ore";s:3:"104";s:3:"r d";s:3:"105";s:3:"ske";s:3:"106";s:3:" an";s:3:"107";s:3:" la";s:3:"108";s:3:"del";s:3:"109";s:3:"gen";s:3:"110";s:3:"nin";s:3:"111";s:3:"r f";s:3:"112";s:3:"r v";s:3:"113";s:3:"se ";s:3:"114";s:3:" po";s:3:"115";s:3:"ir ";s:3:"116";s:3:"jon";s:3:"117";s:3:"mer";s:3:"118";s:3:"nen";s:3:"119";s:3:"omm";s:3:"120";s:3:"sjo";s:3:"121";s:3:" fl";s:3:"122";s:3:" sa";s:3:"123";s:3:"ern";s:3:"124";s:3:"kom";s:3:"125";s:3:"r m";s:3:"126";s:3:"r o";s:3:"127";s:3:"ren";s:3:"128";s:3:"vil";s:3:"129";s:3:"ale";s:3:"130";s:3:"es ";s:3:"131";s:3:"n a";s:3:"132";s:3:"t f";s:3:"133";s:3:" le";s:3:"134";s:3:"bli";s:3:"135";s:3:"e e";s:3:"136";s:3:"e i";s:3:"137";s:3:"e v";s:3:"138";s:3:"het";s:3:"139";s:3:"ye ";s:3:"140";s:3:" ir";s:3:"141";s:3:"al ";s:3:"142";s:3:"e o";s:3:"143";s:3:"ide";s:3:"144";s:3:"iti";s:3:"145";s:3:"lit";s:3:"146";s:3:"nne";s:3:"147";s:3:"ran";s:3:"148";s:3:"t o";s:3:"149";s:3:"tal";s:3:"150";s:3:"tat";s:3:"151";s:3:"tt ";s:3:"152";s:3:" ka";s:3:"153";s:3:"ans";s:3:"154";s:3:"asj";s:3:"155";s:3:"ge ";s:3:"156";s:3:"inn";s:3:"157";s:3:"kon";s:3:"158";s:3:"lse";s:3:"159";s:3:"pet";s:3:"160";s:3:"t d";s:3:"161";s:3:"vi ";s:3:"162";s:3:" ut";s:3:"163";s:3:"ent";s:3:"164";s:3:"eri";s:3:"165";s:3:"oli";s:3:"166";s:3:"r p";s:3:"167";s:3:"ret";s:3:"168";s:3:"ris";s:3:"169";s:3:"sto";s:3:"170";s:3:"str";s:3:"171";s:3:"t a";s:3:"172";s:3:" ga";s:3:"173";s:3:"all";s:3:"174";s:3:"ape";s:3:"175";s:3:"g s";s:3:"176";s:3:"ill";s:3:"177";s:3:"ira";s:3:"178";s:3:"kap";s:3:"179";s:3:"nn ";s:3:"180";s:3:"opp";s:3:"181";s:3:"r h";s:3:"182";s:3:"rin";s:3:"183";s:3:" br";s:3:"184";s:3:" op";s:3:"185";s:3:"e m";s:3:"186";s:3:"ert";s:3:"187";s:3:"ger";s:3:"188";s:3:"ion";s:3:"189";s:3:"kal";s:3:"190";s:3:"lsk";s:3:"191";s:3:"nes";s:3:"192";s:3:" gj";s:3:"193";s:3:" mi";s:3:"194";s:3:" pr";s:3:"195";s:3:"ang";s:3:"196";s:3:"e h";s:3:"197";s:3:"e r";s:3:"198";s:3:"elt";s:3:"199";s:3:"enn";s:3:"200";s:3:"i s";s:3:"201";s:3:"ist";s:3:"202";s:3:"jen";s:3:"203";s:3:"kan";s:3:"204";s:3:"lt ";s:3:"205";s:3:"nal";s:3:"206";s:3:"res";s:3:"207";s:3:"tor";s:3:"208";s:3:"ass";s:3:"209";s:3:"dre";s:3:"210";s:3:"e b";s:3:"211";s:3:"e p";s:3:"212";s:3:"mel";s:3:"213";s:3:"n t";s:3:"214";s:3:"nse";s:3:"215";s:3:"ort";s:3:"216";s:3:"per";s:3:"217";s:3:"reg";s:3:"218";s:3:"sje";s:3:"219";s:3:"t p";s:3:"220";s:3:"t v";s:3:"221";s:3:" hv";s:3:"222";s:4:" nÃ¥";s:3:"223";s:3:" va";s:3:"224";s:3:"ann";s:3:"225";s:3:"ato";s:3:"226";s:3:"e a";s:3:"227";s:3:"est";s:3:"228";s:3:"ise";s:3:"229";s:3:"isk";s:3:"230";s:3:"oil";s:3:"231";s:3:"ord";s:3:"232";s:3:"pol";s:3:"233";s:3:"ra ";s:3:"234";s:3:"rak";s:3:"235";s:3:"sse";s:3:"236";s:3:"toi";s:3:"237";s:3:" gr";s:3:"238";s:3:"ak ";s:3:"239";s:3:"eg ";s:3:"240";s:3:"ele";s:3:"241";s:3:"g a";s:3:"242";s:3:"ige";s:3:"243";s:3:"igh";s:3:"244";s:3:"m e";s:3:"245";s:3:"n f";s:3:"246";s:3:"n v";s:3:"247";s:3:"ndr";s:3:"248";s:3:"nsk";s:3:"249";s:3:"rer";s:3:"250";s:3:"t m";s:3:"251";s:3:"und";s:3:"252";s:3:"var";s:3:"253";s:4:"Ã¥r ";s:3:"254";s:3:" he";s:3:"255";s:3:" no";s:3:"256";s:3:" ny";s:3:"257";s:3:"end";s:3:"258";s:3:"ete";s:3:"259";s:3:"fly";s:3:"260";s:3:"g i";s:3:"261";s:3:"ghe";s:3:"262";s:3:"ier";s:3:"263";s:3:"ind";s:3:"264";s:3:"int";s:3:"265";s:3:"lin";s:3:"266";s:3:"n d";s:3:"267";s:3:"n p";s:3:"268";s:3:"rne";s:3:"269";s:3:"sak";s:3:"270";s:3:"sie";s:3:"271";s:3:"t b";s:3:"272";s:3:"tid";s:3:"273";s:3:" al";s:3:"274";s:3:" pa";s:3:"275";s:3:" tr";s:3:"276";s:3:"ag ";s:3:"277";s:3:"dig";s:3:"278";s:3:"e d";s:3:"279";s:3:"e k";s:3:"280";s:3:"ess";s:3:"281";s:3:"hol";s:3:"282";s:3:"i d";s:3:"283";s:3:"lag";s:3:"284";s:3:"led";s:3:"285";s:3:"n e";s:3:"286";s:3:"n i";s:3:"287";s:3:"n o";s:3:"288";s:3:"pri";s:3:"289";s:3:"r b";s:3:"290";s:3:"st ";s:3:"291";s:3:" fe";s:3:"292";s:3:" li";s:3:"293";s:3:" ry";s:3:"294";s:3:"air";s:3:"295";s:3:"ake";s:3:"296";s:3:"d s";s:3:"297";s:3:"eas";s:3:"298";s:3:"egi";s:3:"299";}s:6:"pashto";a:300:{s:4:" د ";s:1:"0";s:5:"اؤ ";s:1:"1";s:5:" اؤ";s:1:"2";s:5:"نو ";s:1:"3";s:5:"Û Ø¯";s:1:"4";s:5:"ره ";s:1:"5";s:5:" په";s:1:"6";s:5:"نه ";s:1:"7";s:5:"Ú†Û ";s:1:"8";s:5:" Ú†Û";s:1:"9";s:5:"په ";s:2:"10";s:5:"Ù‡ د";s:2:"11";s:5:"ته ";s:2:"12";s:5:"Ùˆ ا";s:2:"13";s:6:"ونو";s:2:"14";s:5:"Ùˆ د";s:2:"15";s:5:" او";s:2:"16";s:6:"انو";s:2:"17";s:6:"ونه";s:2:"18";s:5:"Ù‡ Ú©";s:2:"19";s:5:" دا";s:2:"20";s:5:"Ù‡ ا";s:2:"21";s:5:"Ø¯Û ";s:2:"22";s:5:"ÚšÛ ";s:2:"23";s:5:" Ú©Û";s:2:"24";s:5:"ان ";s:2:"25";s:5:"لو ";s:2:"26";s:5:"هم ";s:2:"27";s:5:"Ùˆ Ù…";s:2:"28";s:6:"Ú©ÚšÛ";s:2:"29";s:5:"Ù‡ Ù…";s:2:"30";s:5:"Ù‰ ا";s:2:"31";s:5:" نو";s:2:"32";s:5:" ته";s:2:"33";s:5:" Ú©Úš";s:2:"34";s:6:"رون";s:2:"35";s:5:"Ú©Û ";s:2:"36";s:5:"ده ";s:2:"37";s:5:"له ";s:2:"38";s:5:"به ";s:2:"39";s:5:"رو ";s:2:"40";s:5:" هم";s:2:"41";s:5:"Ù‡ Ùˆ";s:2:"42";s:5:"وى ";s:2:"43";s:5:"او ";s:2:"44";s:6:"تون";s:2:"45";s:5:"دا ";s:2:"46";s:5:" Ú©Ùˆ";s:2:"47";s:5:" Ú©Ú“";s:2:"48";s:6:"قام";s:2:"49";s:5:" تر";s:2:"50";s:6:"ران";s:2:"51";s:5:"Ù‡ Ù¾";s:2:"52";s:5:"Û Ùˆ";s:2:"53";s:5:"Û Ù¾";s:2:"54";s:5:" به";s:2:"55";s:5:" خو";s:2:"56";s:5:"تو ";s:2:"57";s:5:"د د";s:2:"58";s:5:"د ا";s:2:"59";s:5:"Ù‡ ت";s:2:"60";s:5:"Ùˆ Ù¾";s:2:"61";s:5:"يا ";s:2:"62";s:5:" خپ";s:2:"63";s:5:" دو";s:2:"64";s:5:" را";s:2:"65";s:5:" مش";s:2:"66";s:5:" پر";s:2:"67";s:6:"ارو";s:2:"68";s:5:"Ø±Û ";s:2:"69";s:5:"Ù… د";s:2:"70";s:6:"مشر";s:2:"71";s:5:" شو";s:2:"72";s:5:" ور";s:2:"73";s:5:"ار ";s:2:"74";s:5:"دى ";s:2:"75";s:5:" اد";s:2:"76";s:5:" دى";s:2:"77";s:5:" مو";s:2:"78";s:5:"د Ù¾";s:2:"79";s:5:"لي ";s:2:"80";s:5:"Ùˆ Ú©";s:2:"81";s:5:" مق";s:2:"82";s:5:" يو";s:2:"83";s:5:"ؤ د";s:2:"84";s:6:"خپل";s:2:"85";s:6:"سره";s:2:"86";s:5:"Ù‡ Ú†";s:2:"87";s:5:"ور ";s:2:"88";s:5:" تا";s:2:"89";s:5:" دÛ";s:2:"90";s:5:" رو";s:2:"91";s:5:" سر";s:2:"92";s:5:" مل";s:2:"93";s:5:" کا";s:2:"94";s:5:"ؤ ا";s:2:"95";s:6:"اره";s:2:"96";s:6:"برو";s:2:"97";s:5:"مه ";s:2:"98";s:5:"Ù‡ ب";s:2:"99";s:5:"Ùˆ ت";s:3:"100";s:6:"پښت";s:3:"101";s:5:" با";s:3:"102";s:5:" دغ";s:3:"103";s:5:" قب";s:3:"104";s:5:" له";s:3:"105";s:5:" وا";s:3:"106";s:5:" پا";s:3:"107";s:5:" Ù¾Úš";s:3:"108";s:5:"د Ù…";s:3:"109";s:5:"د Ù‡";s:3:"110";s:5:"Ù„Û ";s:3:"111";s:6:"مات";s:3:"112";s:5:"مو ";s:3:"113";s:5:"Ù‡ Ù‡";s:3:"114";s:5:"وي ";s:3:"115";s:5:"Û Ø¨";s:3:"116";s:5:"Û Ú©";s:3:"117";s:5:" ده";s:3:"118";s:5:" قا";s:3:"119";s:5:"ال ";s:3:"120";s:6:"اما";s:3:"121";s:5:"د Ù†";s:3:"122";s:6:"قبر";s:3:"123";s:5:"Ù‡ Ù†";s:3:"124";s:6:"پار";s:3:"125";s:5:" اث";s:3:"126";s:5:" بي";s:3:"127";s:5:" لا";s:3:"128";s:5:" لر";s:3:"129";s:6:"اثا";s:3:"130";s:5:"د Ø®";s:3:"131";s:6:"دار";s:3:"132";s:6:"ريخ";s:3:"133";s:6:"شرا";s:3:"134";s:6:"مقا";s:3:"135";s:5:"Ù†Û ";s:3:"136";s:5:"Ù‡ ر";s:3:"137";s:5:"Ù‡ Ù„";s:3:"138";s:6:"ولو";s:3:"139";s:5:"يو ";s:3:"140";s:6:"کوم";s:3:"141";s:5:" دد";s:3:"142";s:5:" لو";s:3:"143";s:5:" مح";s:3:"144";s:5:" مر";s:3:"145";s:5:" وو";s:3:"146";s:6:"اتو";s:3:"147";s:6:"اري";s:3:"148";s:6:"الو";s:3:"149";s:6:"اند";s:3:"150";s:6:"خان";s:3:"151";s:5:"د ت";s:3:"152";s:5:"Ø³Û ";s:3:"153";s:5:"لى ";s:3:"154";s:6:"نور";s:3:"155";s:5:"Ùˆ Ù„";s:3:"156";s:5:"ÙŠ Ú†";s:3:"157";s:5:"Ú“ÙŠ ";s:3:"158";s:6:"ښتو";s:3:"159";s:5:"Û Ù„";s:3:"160";s:5:" جو";s:3:"161";s:5:" سي";s:3:"162";s:5:"ام ";s:3:"163";s:6:"بان";s:3:"164";s:6:"تار";s:3:"165";s:5:"تر ";s:3:"166";s:6:"ثار";s:3:"167";s:5:"خو ";s:3:"168";s:5:"دو ";s:3:"169";s:5:"ر Ú©";s:3:"170";s:5:"Ù„ د";s:3:"171";s:6:"مون";s:3:"172";s:6:"ندÛ";s:3:"173";s:5:"Ùˆ Ù†";s:3:"174";s:5:"ول ";s:3:"175";s:5:"وه ";s:3:"176";s:5:"Ù‰ Ùˆ";s:3:"177";s:5:"ÙŠ د";s:3:"178";s:5:"Û Ø§";s:3:"179";s:5:"Û Øª";s:3:"180";s:5:"Û ÙŠ";s:3:"181";s:5:" Ø­Ú©";s:3:"182";s:5:" خب";s:3:"183";s:5:" نه";s:3:"184";s:5:" پو";s:3:"185";s:5:"ا د";s:3:"186";s:5:"ØªÛ ";s:3:"187";s:6:"جوړ";s:3:"188";s:6:"Ø­Ú©Ù…";s:3:"189";s:6:"Ø­Ú©Ùˆ";s:3:"190";s:6:"خبر";s:3:"191";s:6:"دان";s:3:"192";s:5:"ر د";s:3:"193";s:5:"غه ";s:3:"194";s:6:"قاÙ";s:3:"195";s:6:"محک";s:3:"196";s:6:"وال";s:3:"197";s:6:"ومت";s:3:"198";s:6:"ويل";s:3:"199";s:5:"Ù‰ د";s:3:"200";s:5:"Ù‰ Ù…";s:3:"201";s:6:"يره";s:3:"202";s:5:"پر ";s:3:"203";s:6:"کول";s:3:"204";s:5:"Û Ù‡";s:3:"205";s:5:" تي";s:3:"206";s:5:" خا";s:3:"207";s:5:" ÙˆÚ©";s:3:"208";s:5:" يا";s:3:"209";s:5:" Úا";s:3:"210";s:5:"ؤ Ù‚";s:3:"211";s:6:"انÛ";s:3:"212";s:5:"بى ";s:3:"213";s:5:"غو ";s:3:"214";s:5:"Ù‡ Ø®";s:3:"215";s:5:"Ùˆ ب";s:3:"216";s:6:"ودا";s:3:"217";s:6:"يدو";s:3:"218";s:5:"Ú“Û ";s:3:"219";s:6:"کال";s:3:"220";s:5:" بر";s:3:"221";s:5:" قد";s:3:"222";s:5:" مي";s:3:"223";s:5:" وي";s:3:"224";s:5:" کر";s:3:"225";s:5:"ؤ Ù…";s:3:"226";s:5:"ات ";s:3:"227";s:6:"ايي";s:3:"228";s:5:"تى ";s:3:"229";s:6:"تيا";s:3:"230";s:6:"تير";s:3:"231";s:6:"خوا";s:3:"232";s:6:"دغو";s:3:"233";s:5:"دم ";s:3:"234";s:6:"ديم";s:3:"235";s:5:"ر Ùˆ";s:3:"236";s:6:"قدي";s:3:"237";s:5:"Ù… Ø®";s:3:"238";s:6:"مان";s:3:"239";s:5:"Ù…Û ";s:3:"240";s:6:"نيو";s:3:"241";s:5:"Ù†Ú– ";s:3:"242";s:5:"Ù‡ ÙŠ";s:3:"243";s:5:"Ùˆ س";s:3:"244";s:5:"Ùˆ Ú†";s:3:"245";s:6:"وان";s:3:"246";s:6:"ورو";s:3:"247";s:6:"ونږ";s:3:"248";s:6:"پور";s:3:"249";s:5:"Ú“Ù‡ ";s:3:"250";s:5:"Ú“Ùˆ ";s:3:"251";s:5:"Û Ø¯";s:3:"252";s:5:"Û Ù†";s:3:"253";s:5:" اه";s:3:"254";s:5:" زي";s:3:"255";s:5:" سو";s:3:"256";s:5:" شي";s:3:"257";s:5:" هر";s:3:"258";s:5:" هغ";s:3:"259";s:5:" ښا";s:3:"260";s:6:"اتل";s:3:"261";s:5:"اق ";s:3:"262";s:6:"اني";s:3:"263";s:6:"بري";s:3:"264";s:5:"Ø¨Û ";s:3:"265";s:5:"ت ا";s:3:"266";s:5:"د ب";s:3:"267";s:5:"د س";s:3:"268";s:5:"ر Ù…";s:3:"269";s:5:"رى ";s:3:"270";s:6:"عرا";s:3:"271";s:6:"لان";s:3:"272";s:5:"مى ";s:3:"273";s:5:"نى ";s:3:"274";s:5:"Ùˆ Ø®";s:3:"275";s:5:"وئ ";s:3:"276";s:6:"ورک";s:3:"277";s:6:"ورÛ";s:3:"278";s:5:"ون ";s:3:"279";s:6:"ÙˆÚ©Ú“";s:3:"280";s:5:"Ù‰ Ú†";s:3:"281";s:6:"يمه";s:3:"282";s:5:"ÙŠÛ ";s:3:"283";s:6:"ښتن";s:3:"284";s:5:"Ú©Ù‡ ";s:3:"285";s:6:"Ú©Ú“ÙŠ";s:3:"286";s:5:"Û Ø®";s:3:"287";s:5:"Û’ Ø´";s:3:"288";s:5:" تح";s:3:"289";s:5:" تو";s:3:"290";s:5:" در";s:3:"291";s:5:" دپ";s:3:"292";s:5:" صو";s:3:"293";s:5:" عر";s:3:"294";s:5:" ول";s:3:"295";s:5:" يؤ";s:3:"296";s:5:" Ù¾Û€";s:3:"297";s:5:" Ú…Ùˆ";s:3:"298";s:5:"ا ا";s:3:"299";}s:6:"pidgin";a:300:{s:3:" de";s:1:"0";s:3:" we";s:1:"1";s:3:" di";s:1:"2";s:3:"di ";s:1:"3";s:3:"dem";s:1:"4";s:3:"em ";s:1:"5";s:3:"ay ";s:1:"6";s:3:" sa";s:1:"7";s:3:"or ";s:1:"8";s:3:"say";s:1:"9";s:3:"ke ";s:2:"10";s:3:"ey ";s:2:"11";s:3:" an";s:2:"12";s:3:" go";s:2:"13";s:3:" e ";s:2:"14";s:3:" to";s:2:"15";s:3:" ma";s:2:"16";s:3:"e d";s:2:"17";s:3:"wey";s:2:"18";s:3:"for";s:2:"19";s:3:"nd ";s:2:"20";s:3:"to ";s:2:"21";s:3:" be";s:2:"22";s:3:" fo";s:2:"23";s:3:"ake";s:2:"24";s:3:"im ";s:2:"25";s:3:" pe";s:2:"26";s:3:"le ";s:2:"27";s:3:"go ";s:2:"28";s:3:"ll ";s:2:"29";s:3:"de ";s:2:"30";s:3:"e s";s:2:"31";s:3:"on ";s:2:"32";s:3:"get";s:2:"33";s:3:"ght";s:2:"34";s:3:"igh";s:2:"35";s:3:" ri";s:2:"36";s:3:"et ";s:2:"37";s:3:"rig";s:2:"38";s:3:" ge";s:2:"39";s:3:"y d";s:2:"40";s:3:" na";s:2:"41";s:3:"mak";s:2:"42";s:3:"t t";s:2:"43";s:3:" no";s:2:"44";s:3:"and";s:2:"45";s:3:"tin";s:2:"46";s:3:"ing";s:2:"47";s:3:"eve";s:2:"48";s:3:"ri ";s:2:"49";s:3:" im";s:2:"50";s:3:" am";s:2:"51";s:3:" or";s:2:"52";s:3:"am ";s:2:"53";s:3:"be ";s:2:"54";s:3:" ev";s:2:"55";s:3:" ta";s:2:"56";s:3:"ht ";s:2:"57";s:3:"e w";s:2:"58";s:3:" li";s:2:"59";s:3:"eri";s:2:"60";s:3:"ng ";s:2:"61";s:3:"ver";s:2:"62";s:3:"all";s:2:"63";s:3:"e f";s:2:"64";s:3:"ers";s:2:"65";s:3:"ntr";s:2:"66";s:3:"ont";s:2:"67";s:3:" do";s:2:"68";s:3:"r d";s:2:"69";s:3:" ko";s:2:"70";s:3:" ti";s:2:"71";s:3:"an ";s:2:"72";s:3:"kon";s:2:"73";s:3:"per";s:2:"74";s:3:"tri";s:2:"75";s:3:"y e";s:2:"76";s:3:"rso";s:2:"77";s:3:"son";s:2:"78";s:3:"no ";s:2:"79";s:3:"ome";s:2:"80";s:3:"is ";s:2:"81";s:3:"do ";s:2:"82";s:3:"ne ";s:2:"83";s:3:"one";s:2:"84";s:3:"ion";s:2:"85";s:3:"m g";s:2:"86";s:3:"i k";s:2:"87";s:3:" al";s:2:"88";s:3:"bod";s:2:"89";s:3:"i w";s:2:"90";s:3:"odi";s:2:"91";s:3:" so";s:2:"92";s:3:" wo";s:2:"93";s:3:"o d";s:2:"94";s:3:"st ";s:2:"95";s:3:"t r";s:2:"96";s:3:" of";s:2:"97";s:3:"aim";s:2:"98";s:3:"e g";s:2:"99";s:3:"nai";s:3:"100";s:3:" co";s:3:"101";s:3:"dis";s:3:"102";s:3:"me ";s:3:"103";s:3:"of ";s:3:"104";s:3:" wa";s:3:"105";s:3:"e t";s:3:"106";s:3:" ar";s:3:"107";s:3:"e l";s:3:"108";s:3:"ike";s:3:"109";s:3:"lik";s:3:"110";s:3:"t a";s:3:"111";s:3:"wor";s:3:"112";s:3:"alk";s:3:"113";s:3:"ell";s:3:"114";s:3:"eop";s:3:"115";s:3:"lk ";s:3:"116";s:3:"opl";s:3:"117";s:3:"peo";s:3:"118";s:3:"ple";s:3:"119";s:3:"re ";s:3:"120";s:3:"tal";s:3:"121";s:3:"any";s:3:"122";s:3:"e a";s:3:"123";s:3:"o g";s:3:"124";s:3:"art";s:3:"125";s:3:"cle";s:3:"126";s:3:"i p";s:3:"127";s:3:"icl";s:3:"128";s:3:"rti";s:3:"129";s:3:"the";s:3:"130";s:3:"tic";s:3:"131";s:3:"we ";s:3:"132";s:3:"f d";s:3:"133";s:3:"in ";s:3:"134";s:3:" mu";s:3:"135";s:3:"e n";s:3:"136";s:3:"e o";s:3:"137";s:3:"mus";s:3:"138";s:3:"n d";s:3:"139";s:3:"na ";s:3:"140";s:3:"o m";s:3:"141";s:3:"ust";s:3:"142";s:3:"wel";s:3:"143";s:3:"e e";s:3:"144";s:3:"her";s:3:"145";s:3:"m d";s:3:"146";s:3:"nt ";s:3:"147";s:3:" fi";s:3:"148";s:3:"at ";s:3:"149";s:3:"e b";s:3:"150";s:3:"it ";s:3:"151";s:3:"m w";s:3:"152";s:3:"o t";s:3:"153";s:3:"wan";s:3:"154";s:3:"com";s:3:"155";s:3:"da ";s:3:"156";s:3:"fit";s:3:"157";s:3:"m b";s:3:"158";s:3:"so ";s:3:"159";s:3:" fr";s:3:"160";s:3:"ce ";s:3:"161";s:3:"er ";s:3:"162";s:3:"o a";s:3:"163";s:3:" if";s:3:"164";s:3:" on";s:3:"165";s:3:"ent";s:3:"166";s:3:"if ";s:3:"167";s:3:"ind";s:3:"168";s:3:"kin";s:3:"169";s:3:"l d";s:3:"170";s:3:"man";s:3:"171";s:3:"o s";s:3:"172";s:3:" se";s:3:"173";s:3:"y a";s:3:"174";s:3:"y m";s:3:"175";s:3:" re";s:3:"176";s:3:"ee ";s:3:"177";s:3:"k a";s:3:"178";s:3:"t s";s:3:"179";s:3:"ve ";s:3:"180";s:3:"y w";s:3:"181";s:3:" ki";s:3:"182";s:3:"eti";s:3:"183";s:3:"men";s:3:"184";s:3:"ta ";s:3:"185";s:3:"y n";s:3:"186";s:3:"d t";s:3:"187";s:3:"dey";s:3:"188";s:3:"e c";s:3:"189";s:3:"i o";s:3:"190";s:3:"ibo";s:3:"191";s:3:"ld ";s:3:"192";s:3:"m t";s:3:"193";s:3:"n b";s:3:"194";s:3:"o b";s:3:"195";s:3:"ow ";s:3:"196";s:3:"ree";s:3:"197";s:3:"rio";s:3:"198";s:3:"t d";s:3:"199";s:3:" hu";s:3:"200";s:3:" su";s:3:"201";s:3:"en ";s:3:"202";s:3:"hts";s:3:"203";s:3:"ive";s:3:"204";s:3:"m n";s:3:"205";s:3:"n g";s:3:"206";s:3:"ny ";s:3:"207";s:3:"oth";s:3:"208";s:3:"ts ";s:3:"209";s:3:" as";s:3:"210";s:3:" wh";s:3:"211";s:3:"as ";s:3:"212";s:3:"gom";s:3:"213";s:3:"hum";s:3:"214";s:3:"k s";s:3:"215";s:3:"oda";s:3:"216";s:3:"ork";s:3:"217";s:3:"se ";s:3:"218";s:3:"uma";s:3:"219";s:3:"ut ";s:3:"220";s:3:" ba";s:3:"221";s:3:" ot";s:3:"222";s:3:"ano";s:3:"223";s:3:"m a";s:3:"224";s:3:"m s";s:3:"225";s:3:"nod";s:3:"226";s:3:"om ";s:3:"227";s:3:"r a";s:3:"228";s:3:"r i";s:3:"229";s:3:"rk ";s:3:"230";s:3:" fa";s:3:"231";s:3:" si";s:3:"232";s:3:" th";s:3:"233";s:3:"ad ";s:3:"234";s:3:"e m";s:3:"235";s:3:"eac";s:3:"236";s:3:"m m";s:3:"237";s:3:"n w";s:3:"238";s:3:"nob";s:3:"239";s:3:"orl";s:3:"240";s:3:"out";s:3:"241";s:3:"own";s:3:"242";s:3:"r s";s:3:"243";s:3:"r w";s:3:"244";s:3:"rib";s:3:"245";s:3:"rld";s:3:"246";s:3:"s w";s:3:"247";s:3:"ure";s:3:"248";s:3:"wn ";s:3:"249";s:3:" ow";s:3:"250";s:3:"a d";s:3:"251";s:3:"bad";s:3:"252";s:3:"ch ";s:3:"253";s:3:"fre";s:3:"254";s:3:"gs ";s:3:"255";s:3:"m k";s:3:"256";s:3:"nce";s:3:"257";s:3:"ngs";s:3:"258";s:3:"o f";s:3:"259";s:3:"obo";s:3:"260";s:3:"rea";s:3:"261";s:3:"sur";s:3:"262";s:3:"y o";s:3:"263";s:3:" ab";s:3:"264";s:3:" un";s:3:"265";s:3:"abo";s:3:"266";s:3:"ach";s:3:"267";s:3:"bou";s:3:"268";s:3:"d m";s:3:"269";s:3:"dat";s:3:"270";s:3:"e p";s:3:"271";s:3:"g w";s:3:"272";s:3:"hol";s:3:"273";s:3:"i m";s:3:"274";s:3:"i r";s:3:"275";s:3:"m f";s:3:"276";s:3:"m o";s:3:"277";s:3:"n o";s:3:"278";s:3:"now";s:3:"279";s:3:"ry ";s:3:"280";s:3:"s a";s:3:"281";s:3:"t o";s:3:"282";s:3:"tay";s:3:"283";s:3:"wet";s:3:"284";s:3:" ag";s:3:"285";s:3:" bo";s:3:"286";s:3:" da";s:3:"287";s:3:" pr";s:3:"288";s:3:"arr";s:3:"289";s:3:"ati";s:3:"290";s:3:"d d";s:3:"291";s:3:"d p";s:3:"292";s:3:"i g";s:3:"293";s:3:"i t";s:3:"294";s:3:"liv";s:3:"295";s:3:"ly ";s:3:"296";s:3:"n a";s:3:"297";s:3:"od ";s:3:"298";s:3:"ok ";s:3:"299";}s:6:"polish";a:300:{s:3:"ie ";s:1:"0";s:3:"nie";s:1:"1";s:3:"em ";s:1:"2";s:3:" ni";s:1:"3";s:3:" po";s:1:"4";s:3:" pr";s:1:"5";s:3:"dzi";s:1:"6";s:3:" na";s:1:"7";s:4:"że ";s:1:"8";s:3:"rze";s:1:"9";s:3:"na ";s:2:"10";s:4:"Å‚em";s:2:"11";s:3:"wie";s:2:"12";s:3:" w ";s:2:"13";s:4:" że";s:2:"14";s:3:"go ";s:2:"15";s:3:" by";s:2:"16";s:3:"prz";s:2:"17";s:3:"owa";s:2:"18";s:4:"iÄ™ ";s:2:"19";s:3:" do";s:2:"20";s:3:" si";s:2:"21";s:3:"owi";s:2:"22";s:3:" pa";s:2:"23";s:3:" za";s:2:"24";s:3:"ch ";s:2:"25";s:3:"ego";s:2:"26";s:4:"aÅ‚ ";s:2:"27";s:4:"siÄ™";s:2:"28";s:3:"ej ";s:2:"29";s:4:"waÅ‚";s:2:"30";s:3:"ym ";s:2:"31";s:3:"ani";s:2:"32";s:4:"aÅ‚e";s:2:"33";s:3:"to ";s:2:"34";s:3:" i ";s:2:"35";s:3:" to";s:2:"36";s:3:" te";s:2:"37";s:3:"e p";s:2:"38";s:3:" je";s:2:"39";s:3:" z ";s:2:"40";s:3:"czy";s:2:"41";s:4:"byÅ‚";s:2:"42";s:3:"pan";s:2:"43";s:3:"sta";s:2:"44";s:3:"kie";s:2:"45";s:3:" ja";s:2:"46";s:3:"do ";s:2:"47";s:3:" ch";s:2:"48";s:3:" cz";s:2:"49";s:3:" wi";s:2:"50";s:4:"iaÅ‚";s:2:"51";s:3:"a p";s:2:"52";s:3:"pow";s:2:"53";s:3:" mi";s:2:"54";s:3:"li ";s:2:"55";s:3:"eni";s:2:"56";s:3:"zie";s:2:"57";s:3:" ta";s:2:"58";s:3:" wa";s:2:"59";s:4:"Å‚o ";s:2:"60";s:4:"ać ";s:2:"61";s:3:"dy ";s:2:"62";s:3:"ak ";s:2:"63";s:3:"e w";s:2:"64";s:3:" a ";s:2:"65";s:3:" od";s:2:"66";s:3:" st";s:2:"67";s:3:"nia";s:2:"68";s:3:"rzy";s:2:"69";s:3:"ied";s:2:"70";s:3:" kt";s:2:"71";s:3:"odz";s:2:"72";s:3:"cie";s:2:"73";s:3:"cze";s:2:"74";s:3:"ia ";s:2:"75";s:3:"iel";s:2:"76";s:4:"któ";s:2:"77";s:3:"o p";s:2:"78";s:4:"tór";s:2:"79";s:4:"Å›ci";s:2:"80";s:3:" sp";s:2:"81";s:3:" wy";s:2:"82";s:3:"jak";s:2:"83";s:3:"tak";s:2:"84";s:3:"zy ";s:2:"85";s:3:" mo";s:2:"86";s:5:"aÅ‚Ä™";s:2:"87";s:3:"pro";s:2:"88";s:3:"ski";s:2:"89";s:3:"tem";s:2:"90";s:5:"Å‚Ä™s";s:2:"91";s:3:" tr";s:2:"92";s:3:"e m";s:2:"93";s:3:"jes";s:2:"94";s:3:"my ";s:2:"95";s:3:" ro";s:2:"96";s:3:"edz";s:2:"97";s:3:"eli";s:2:"98";s:3:"iej";s:2:"99";s:3:" rz";s:3:"100";s:3:"a n";s:3:"101";s:3:"ale";s:3:"102";s:3:"an ";s:3:"103";s:3:"e s";s:3:"104";s:3:"est";s:3:"105";s:3:"le ";s:3:"106";s:3:"o s";s:3:"107";s:3:"i p";s:3:"108";s:3:"ki ";s:3:"109";s:3:" co";s:3:"110";s:3:"ada";s:3:"111";s:3:"czn";s:3:"112";s:3:"e t";s:3:"113";s:3:"e z";s:3:"114";s:3:"ent";s:3:"115";s:3:"ny ";s:3:"116";s:3:"pre";s:3:"117";s:4:"rzÄ…";s:3:"118";s:3:"y s";s:3:"119";s:3:" ko";s:3:"120";s:3:" o ";s:3:"121";s:3:"ach";s:3:"122";s:3:"am ";s:3:"123";s:3:"e n";s:3:"124";s:3:"o t";s:3:"125";s:3:"oli";s:3:"126";s:3:"pod";s:3:"127";s:3:"zia";s:3:"128";s:3:" go";s:3:"129";s:3:" ka";s:3:"130";s:3:"by ";s:3:"131";s:3:"ieg";s:3:"132";s:3:"ier";s:3:"133";s:4:"noÅ›";s:3:"134";s:3:"roz";s:3:"135";s:3:"spo";s:3:"136";s:3:"ych";s:3:"137";s:4:"zÄ…d";s:3:"138";s:3:" mn";s:3:"139";s:3:"acz";s:3:"140";s:3:"adz";s:3:"141";s:3:"bie";s:3:"142";s:3:"cho";s:3:"143";s:3:"mni";s:3:"144";s:3:"o n";s:3:"145";s:3:"ost";s:3:"146";s:3:"pra";s:3:"147";s:3:"ze ";s:3:"148";s:4:"Å‚a ";s:3:"149";s:3:" so";s:3:"150";s:3:"a m";s:3:"151";s:3:"cza";s:3:"152";s:3:"iem";s:3:"153";s:4:"ić ";s:3:"154";s:3:"obi";s:3:"155";s:4:"yÅ‚ ";s:3:"156";s:4:"yÅ‚o";s:3:"157";s:3:" mu";s:3:"158";s:4:" mó";s:3:"159";s:3:"a t";s:3:"160";s:3:"acj";s:3:"161";s:3:"ci ";s:3:"162";s:3:"e b";s:3:"163";s:3:"ich";s:3:"164";s:3:"kan";s:3:"165";s:3:"mi ";s:3:"166";s:3:"mie";s:3:"167";s:4:"oÅ›c";s:3:"168";s:3:"row";s:3:"169";s:3:"zen";s:3:"170";s:3:"zyd";s:3:"171";s:3:" al";s:3:"172";s:3:" re";s:3:"173";s:3:"a w";s:3:"174";s:3:"den";s:3:"175";s:3:"edy";s:3:"176";s:4:"iÅ‚ ";s:3:"177";s:3:"ko ";s:3:"178";s:3:"o w";s:3:"179";s:3:"rac";s:3:"180";s:4:"Å›my";s:3:"181";s:3:" ma";s:3:"182";s:3:" ra";s:3:"183";s:3:" sz";s:3:"184";s:3:" ty";s:3:"185";s:3:"e j";s:3:"186";s:3:"isk";s:3:"187";s:3:"ji ";s:3:"188";s:3:"ka ";s:3:"189";s:3:"m s";s:3:"190";s:3:"no ";s:3:"191";s:3:"o z";s:3:"192";s:3:"rez";s:3:"193";s:3:"wa ";s:3:"194";s:4:"ów ";s:3:"195";s:4:"Å‚ow";s:3:"196";s:5:"ść ";s:3:"197";s:3:" ob";s:3:"198";s:3:"ech";s:3:"199";s:3:"ecz";s:3:"200";s:3:"ezy";s:3:"201";s:3:"i w";s:3:"202";s:3:"ja ";s:3:"203";s:3:"kon";s:3:"204";s:4:"mów";s:3:"205";s:3:"ne ";s:3:"206";s:3:"ni ";s:3:"207";s:3:"now";s:3:"208";s:3:"nym";s:3:"209";s:3:"pol";s:3:"210";s:3:"pot";s:3:"211";s:3:"yde";s:3:"212";s:3:" dl";s:3:"213";s:3:" sy";s:3:"214";s:3:"a s";s:3:"215";s:3:"aki";s:3:"216";s:3:"ali";s:3:"217";s:3:"dla";s:3:"218";s:3:"icz";s:3:"219";s:3:"ku ";s:3:"220";s:3:"ocz";s:3:"221";s:3:"st ";s:3:"222";s:3:"str";s:3:"223";s:3:"szy";s:3:"224";s:3:"trz";s:3:"225";s:3:"wia";s:3:"226";s:3:"y p";s:3:"227";s:3:"za ";s:3:"228";s:3:" wt";s:3:"229";s:3:"chc";s:3:"230";s:3:"esz";s:3:"231";s:3:"iec";s:3:"232";s:3:"im ";s:3:"233";s:3:"la ";s:3:"234";s:3:"o m";s:3:"235";s:3:"sa ";s:3:"236";s:4:"wać";s:3:"237";s:3:"y n";s:3:"238";s:3:"zac";s:3:"239";s:3:"zec";s:3:"240";s:3:" gd";s:3:"241";s:3:"a z";s:3:"242";s:3:"ard";s:3:"243";s:3:"co ";s:3:"244";s:3:"dar";s:3:"245";s:3:"e r";s:3:"246";s:3:"ien";s:3:"247";s:3:"m n";s:3:"248";s:3:"m w";s:3:"249";s:3:"mia";s:3:"250";s:4:"moż";s:3:"251";s:3:"raw";s:3:"252";s:3:"rdz";s:3:"253";s:3:"tan";s:3:"254";s:3:"ted";s:3:"255";s:3:"teg";s:3:"256";s:4:"wiÅ‚";s:3:"257";s:3:"wte";s:3:"258";s:3:"y z";s:3:"259";s:3:"zna";s:3:"260";s:4:"zÅ‚o";s:3:"261";s:3:"a r";s:3:"262";s:3:"awi";s:3:"263";s:3:"bar";s:3:"264";s:3:"cji";s:3:"265";s:4:"czÄ…";s:3:"266";s:3:"dow";s:3:"267";s:4:"eż ";s:3:"268";s:3:"gdy";s:3:"269";s:3:"iek";s:3:"270";s:3:"je ";s:3:"271";s:3:"o d";s:3:"272";s:4:"taÅ‚";s:3:"273";s:3:"wal";s:3:"274";s:3:"wsz";s:3:"275";s:3:"zed";s:3:"276";s:4:"ówi";s:3:"277";s:4:"Ä™sa";s:3:"278";s:3:" ba";s:3:"279";s:3:" lu";s:3:"280";s:3:" wo";s:3:"281";s:3:"aln";s:3:"282";s:3:"arn";s:3:"283";s:3:"ba ";s:3:"284";s:3:"dzo";s:3:"285";s:3:"e c";s:3:"286";s:3:"hod";s:3:"287";s:3:"igi";s:3:"288";s:3:"lig";s:3:"289";s:3:"m p";s:3:"290";s:4:"myÅ›";s:3:"291";s:3:"o c";s:3:"292";s:3:"oni";s:3:"293";s:3:"rel";s:3:"294";s:3:"sku";s:3:"295";s:3:"ste";s:3:"296";s:3:"y w";s:3:"297";s:3:"yst";s:3:"298";s:3:"z w";s:3:"299";}s:10:"portuguese";a:300:{s:3:"de ";s:1:"0";s:3:" de";s:1:"1";s:3:"os ";s:1:"2";s:3:"as ";s:1:"3";s:3:"que";s:1:"4";s:3:" co";s:1:"5";s:4:"ão ";s:1:"6";s:3:"o d";s:1:"7";s:3:" qu";s:1:"8";s:3:"ue ";s:1:"9";s:3:" a ";s:2:"10";s:3:"do ";s:2:"11";s:3:"ent";s:2:"12";s:3:" se";s:2:"13";s:3:"a d";s:2:"14";s:3:"s d";s:2:"15";s:3:"e a";s:2:"16";s:3:"es ";s:2:"17";s:3:" pr";s:2:"18";s:3:"ra ";s:2:"19";s:3:"da ";s:2:"20";s:3:" es";s:2:"21";s:3:" pa";s:2:"22";s:3:"to ";s:2:"23";s:3:" o ";s:2:"24";s:3:"em ";s:2:"25";s:3:"con";s:2:"26";s:3:"o p";s:2:"27";s:3:" do";s:2:"28";s:3:"est";s:2:"29";s:3:"nte";s:2:"30";s:5:"ção";s:2:"31";s:3:" da";s:2:"32";s:3:" re";s:2:"33";s:3:"ma ";s:2:"34";s:3:"par";s:2:"35";s:3:" te";s:2:"36";s:3:"ara";s:2:"37";s:3:"ida";s:2:"38";s:3:" e ";s:2:"39";s:3:"ade";s:2:"40";s:3:"is ";s:2:"41";s:3:" um";s:2:"42";s:3:" po";s:2:"43";s:3:"a a";s:2:"44";s:3:"a p";s:2:"45";s:3:"dad";s:2:"46";s:3:"no ";s:2:"47";s:3:"te ";s:2:"48";s:3:" no";s:2:"49";s:5:"açã";s:2:"50";s:3:"pro";s:2:"51";s:3:"al ";s:2:"52";s:3:"com";s:2:"53";s:3:"e d";s:2:"54";s:3:"s a";s:2:"55";s:3:" as";s:2:"56";s:3:"a c";s:2:"57";s:3:"er ";s:2:"58";s:3:"men";s:2:"59";s:3:"s e";s:2:"60";s:3:"ais";s:2:"61";s:3:"nto";s:2:"62";s:3:"res";s:2:"63";s:3:"a s";s:2:"64";s:3:"ado";s:2:"65";s:3:"ist";s:2:"66";s:3:"s p";s:2:"67";s:3:"tem";s:2:"68";s:3:"e c";s:2:"69";s:3:"e s";s:2:"70";s:3:"ia ";s:2:"71";s:3:"o s";s:2:"72";s:3:"o a";s:2:"73";s:3:"o c";s:2:"74";s:3:"e p";s:2:"75";s:3:"sta";s:2:"76";s:3:"ta ";s:2:"77";s:3:"tra";s:2:"78";s:3:"ura";s:2:"79";s:3:" di";s:2:"80";s:3:" pe";s:2:"81";s:3:"ar ";s:2:"82";s:3:"e e";s:2:"83";s:3:"ser";s:2:"84";s:3:"uma";s:2:"85";s:3:"mos";s:2:"86";s:3:"se ";s:2:"87";s:3:" ca";s:2:"88";s:3:"o e";s:2:"89";s:3:" na";s:2:"90";s:3:"a e";s:2:"91";s:3:"des";s:2:"92";s:3:"ont";s:2:"93";s:3:"por";s:2:"94";s:3:" in";s:2:"95";s:3:" ma";s:2:"96";s:3:"ect";s:2:"97";s:3:"o q";s:2:"98";s:3:"ria";s:2:"99";s:3:"s c";s:3:"100";s:3:"ste";s:3:"101";s:3:"ver";s:3:"102";s:3:"cia";s:3:"103";s:3:"dos";s:3:"104";s:3:"ica";s:3:"105";s:3:"str";s:3:"106";s:3:" ao";s:3:"107";s:3:" em";s:3:"108";s:3:"das";s:3:"109";s:3:"e t";s:3:"110";s:3:"ito";s:3:"111";s:3:"iza";s:3:"112";s:3:"pre";s:3:"113";s:3:"tos";s:3:"114";s:4:" nã";s:3:"115";s:3:"ada";s:3:"116";s:4:"não";s:3:"117";s:3:"ess";s:3:"118";s:3:"eve";s:3:"119";s:3:"or ";s:3:"120";s:3:"ran";s:3:"121";s:3:"s n";s:3:"122";s:3:"s t";s:3:"123";s:3:"tur";s:3:"124";s:3:" ac";s:3:"125";s:3:" fa";s:3:"126";s:3:"a r";s:3:"127";s:3:"ens";s:3:"128";s:3:"eri";s:3:"129";s:3:"na ";s:3:"130";s:3:"sso";s:3:"131";s:3:" si";s:3:"132";s:4:" é ";s:3:"133";s:3:"bra";s:3:"134";s:3:"esp";s:3:"135";s:3:"mo ";s:3:"136";s:3:"nos";s:3:"137";s:3:"ro ";s:3:"138";s:3:"um ";s:3:"139";s:3:"a n";s:3:"140";s:3:"ao ";s:3:"141";s:3:"ico";s:3:"142";s:3:"liz";s:3:"143";s:3:"min";s:3:"144";s:3:"o n";s:3:"145";s:3:"ons";s:3:"146";s:3:"pri";s:3:"147";s:3:"ten";s:3:"148";s:3:"tic";s:3:"149";s:4:"ões";s:3:"150";s:3:" tr";s:3:"151";s:3:"a m";s:3:"152";s:3:"aga";s:3:"153";s:3:"e n";s:3:"154";s:3:"ili";s:3:"155";s:3:"ime";s:3:"156";s:3:"m a";s:3:"157";s:3:"nci";s:3:"158";s:3:"nha";s:3:"159";s:3:"nta";s:3:"160";s:3:"spe";s:3:"161";s:3:"tiv";s:3:"162";s:3:"am ";s:3:"163";s:3:"ano";s:3:"164";s:3:"arc";s:3:"165";s:3:"ass";s:3:"166";s:3:"cer";s:3:"167";s:3:"e o";s:3:"168";s:3:"ece";s:3:"169";s:3:"emo";s:3:"170";s:3:"ga ";s:3:"171";s:3:"o m";s:3:"172";s:3:"rag";s:3:"173";s:3:"so ";s:3:"174";s:4:"são";s:3:"175";s:3:" au";s:3:"176";s:3:" os";s:3:"177";s:3:" sa";s:3:"178";s:3:"ali";s:3:"179";s:3:"ca ";s:3:"180";s:3:"ema";s:3:"181";s:3:"emp";s:3:"182";s:3:"ici";s:3:"183";s:3:"ido";s:3:"184";s:3:"inh";s:3:"185";s:3:"iss";s:3:"186";s:3:"l d";s:3:"187";s:3:"la ";s:3:"188";s:3:"lic";s:3:"189";s:3:"m c";s:3:"190";s:3:"mai";s:3:"191";s:3:"onc";s:3:"192";s:3:"pec";s:3:"193";s:3:"ram";s:3:"194";s:3:"s q";s:3:"195";s:3:" ci";s:3:"196";s:3:" en";s:3:"197";s:3:" fo";s:3:"198";s:3:"a o";s:3:"199";s:3:"ame";s:3:"200";s:3:"car";s:3:"201";s:3:"co ";s:3:"202";s:3:"der";s:3:"203";s:3:"eir";s:3:"204";s:3:"ho ";s:3:"205";s:3:"io ";s:3:"206";s:3:"om ";s:3:"207";s:3:"ora";s:3:"208";s:3:"r a";s:3:"209";s:3:"sen";s:3:"210";s:3:"ter";s:3:"211";s:3:" br";s:3:"212";s:3:" ex";s:3:"213";s:3:"a u";s:3:"214";s:3:"cul";s:3:"215";s:3:"dev";s:3:"216";s:3:"e u";s:3:"217";s:3:"ha ";s:3:"218";s:3:"mpr";s:3:"219";s:3:"nce";s:3:"220";s:3:"oca";s:3:"221";s:3:"ove";s:3:"222";s:3:"rio";s:3:"223";s:3:"s o";s:3:"224";s:3:"sa ";s:3:"225";s:3:"sem";s:3:"226";s:3:"tes";s:3:"227";s:3:"uni";s:3:"228";s:3:"ven";s:3:"229";s:4:"zaç";s:3:"230";s:5:"çõe";s:3:"231";s:3:" ad";s:3:"232";s:3:" al";s:3:"233";s:3:" an";s:3:"234";s:3:" mi";s:3:"235";s:3:" mo";s:3:"236";s:3:" ve";s:3:"237";s:4:" à ";s:3:"238";s:3:"a i";s:3:"239";s:3:"a q";s:3:"240";s:3:"ala";s:3:"241";s:3:"amo";s:3:"242";s:3:"bli";s:3:"243";s:3:"cen";s:3:"244";s:3:"col";s:3:"245";s:3:"cos";s:3:"246";s:3:"cto";s:3:"247";s:3:"e m";s:3:"248";s:3:"e v";s:3:"249";s:3:"ede";s:3:"250";s:4:"gás";s:3:"251";s:3:"ias";s:3:"252";s:3:"ita";s:3:"253";s:3:"iva";s:3:"254";s:3:"ndo";s:3:"255";s:3:"o t";s:3:"256";s:3:"ore";s:3:"257";s:3:"r d";s:3:"258";s:3:"ral";s:3:"259";s:3:"rea";s:3:"260";s:3:"s f";s:3:"261";s:3:"sid";s:3:"262";s:3:"tro";s:3:"263";s:3:"vel";s:3:"264";s:3:"vid";s:3:"265";s:4:"ás ";s:3:"266";s:3:" ap";s:3:"267";s:3:" ar";s:3:"268";s:3:" ce";s:3:"269";s:3:" ou";s:3:"270";s:4:" pú";s:3:"271";s:3:" so";s:3:"272";s:3:" vi";s:3:"273";s:3:"a f";s:3:"274";s:3:"act";s:3:"275";s:3:"arr";s:3:"276";s:3:"bil";s:3:"277";s:3:"cam";s:3:"278";s:3:"e f";s:3:"279";s:3:"e i";s:3:"280";s:3:"el ";s:3:"281";s:3:"for";s:3:"282";s:3:"lem";s:3:"283";s:3:"lid";s:3:"284";s:3:"lo ";s:3:"285";s:3:"m d";s:3:"286";s:3:"mar";s:3:"287";s:3:"nde";s:3:"288";s:3:"o o";s:3:"289";s:3:"omo";s:3:"290";s:3:"ort";s:3:"291";s:3:"per";s:3:"292";s:4:"púb";s:3:"293";s:3:"r u";s:3:"294";s:3:"rei";s:3:"295";s:3:"rem";s:3:"296";s:3:"ros";s:3:"297";s:3:"rre";s:3:"298";s:3:"ssi";s:3:"299";}s:8:"romanian";a:300:{s:3:" de";s:1:"0";s:4:" în";s:1:"1";s:3:"de ";s:1:"2";s:3:" a ";s:1:"3";s:3:"ul ";s:1:"4";s:3:" co";s:1:"5";s:4:"în ";s:1:"6";s:3:"re ";s:1:"7";s:3:"e d";s:1:"8";s:3:"ea ";s:1:"9";s:3:" di";s:2:"10";s:3:" pr";s:2:"11";s:3:"le ";s:2:"12";s:4:"ÅŸi ";s:2:"13";s:3:"are";s:2:"14";s:3:"at ";s:2:"15";s:3:"con";s:2:"16";s:3:"ui ";s:2:"17";s:4:" ÅŸi";s:2:"18";s:3:"i d";s:2:"19";s:3:"ii ";s:2:"20";s:3:" cu";s:2:"21";s:3:"e a";s:2:"22";s:3:"lui";s:2:"23";s:3:"ern";s:2:"24";s:3:"te ";s:2:"25";s:3:"cu ";s:2:"26";s:3:" la";s:2:"27";s:3:"a c";s:2:"28";s:4:"că ";s:2:"29";s:3:"din";s:2:"30";s:3:"e c";s:2:"31";s:3:"or ";s:2:"32";s:3:"ulu";s:2:"33";s:3:"ne ";s:2:"34";s:3:"ter";s:2:"35";s:3:"la ";s:2:"36";s:4:"să ";s:2:"37";s:3:"tat";s:2:"38";s:3:"tre";s:2:"39";s:3:" ac";s:2:"40";s:4:" să";s:2:"41";s:3:"est";s:2:"42";s:3:"st ";s:2:"43";s:4:"tă ";s:2:"44";s:3:" ca";s:2:"45";s:3:" ma";s:2:"46";s:3:" pe";s:2:"47";s:3:"cur";s:2:"48";s:3:"ist";s:2:"49";s:4:"mân";s:2:"50";s:3:"a d";s:2:"51";s:3:"i c";s:2:"52";s:3:"nat";s:2:"53";s:3:" ce";s:2:"54";s:3:"i a";s:2:"55";s:3:"ia ";s:2:"56";s:3:"in ";s:2:"57";s:3:"scu";s:2:"58";s:3:" mi";s:2:"59";s:3:"ato";s:2:"60";s:4:"aÅ£i";s:2:"61";s:3:"ie ";s:2:"62";s:3:" re";s:2:"63";s:3:" se";s:2:"64";s:3:"a a";s:2:"65";s:3:"int";s:2:"66";s:3:"ntr";s:2:"67";s:3:"tru";s:2:"68";s:3:"uri";s:2:"69";s:4:"ă a";s:2:"70";s:3:" fo";s:2:"71";s:3:" pa";s:2:"72";s:3:"ate";s:2:"73";s:3:"ini";s:2:"74";s:3:"tul";s:2:"75";s:3:"ent";s:2:"76";s:3:"min";s:2:"77";s:3:"pre";s:2:"78";s:3:"pro";s:2:"79";s:3:"a p";s:2:"80";s:3:"e p";s:2:"81";s:3:"e s";s:2:"82";s:3:"ei ";s:2:"83";s:4:"nă ";s:2:"84";s:3:"par";s:2:"85";s:3:"rna";s:2:"86";s:3:"rul";s:2:"87";s:3:"tor";s:2:"88";s:3:" in";s:2:"89";s:3:" ro";s:2:"90";s:3:" tr";s:2:"91";s:3:" un";s:2:"92";s:3:"al ";s:2:"93";s:3:"ale";s:2:"94";s:3:"art";s:2:"95";s:3:"ce ";s:2:"96";s:3:"e e";s:2:"97";s:4:"e î";s:2:"98";s:3:"fos";s:2:"99";s:3:"ita";s:3:"100";s:3:"nte";s:3:"101";s:4:"omâ";s:3:"102";s:3:"ost";s:3:"103";s:3:"rom";s:3:"104";s:3:"ru ";s:3:"105";s:3:"str";s:3:"106";s:3:"ver";s:3:"107";s:3:" ex";s:3:"108";s:3:" na";s:3:"109";s:3:"a f";s:3:"110";s:3:"lor";s:3:"111";s:3:"nis";s:3:"112";s:3:"rea";s:3:"113";s:3:"rit";s:3:"114";s:3:" al";s:3:"115";s:3:" eu";s:3:"116";s:3:" no";s:3:"117";s:3:"ace";s:3:"118";s:3:"cer";s:3:"119";s:3:"ile";s:3:"120";s:3:"nal";s:3:"121";s:3:"pri";s:3:"122";s:3:"ri ";s:3:"123";s:3:"sta";s:3:"124";s:3:"ste";s:3:"125";s:4:"Å£ie";s:3:"126";s:3:" au";s:3:"127";s:3:" da";s:3:"128";s:3:" ju";s:3:"129";s:3:" po";s:3:"130";s:3:"ar ";s:3:"131";s:3:"au ";s:3:"132";s:3:"ele";s:3:"133";s:3:"ere";s:3:"134";s:3:"eri";s:3:"135";s:3:"ina";s:3:"136";s:3:"n a";s:3:"137";s:3:"n c";s:3:"138";s:3:"res";s:3:"139";s:3:"se ";s:3:"140";s:3:"t a";s:3:"141";s:3:"tea";s:3:"142";s:4:" că";s:3:"143";s:3:" do";s:3:"144";s:3:" fi";s:3:"145";s:3:"a s";s:3:"146";s:4:"ată";s:3:"147";s:3:"com";s:3:"148";s:4:"e ÅŸ";s:3:"149";s:3:"eur";s:3:"150";s:3:"guv";s:3:"151";s:3:"i s";s:3:"152";s:3:"ice";s:3:"153";s:3:"ili";s:3:"154";s:3:"na ";s:3:"155";s:3:"rec";s:3:"156";s:3:"rep";s:3:"157";s:3:"ril";s:3:"158";s:3:"rne";s:3:"159";s:3:"rti";s:3:"160";s:3:"uro";s:3:"161";s:3:"uve";s:3:"162";s:4:"ă p";s:3:"163";s:3:" ar";s:3:"164";s:3:" o ";s:3:"165";s:3:" su";s:3:"166";s:3:" vi";s:3:"167";s:3:"dec";s:3:"168";s:3:"dre";s:3:"169";s:3:"oar";s:3:"170";s:3:"ons";s:3:"171";s:3:"pe ";s:3:"172";s:3:"rii";s:3:"173";s:3:" ad";s:3:"174";s:3:" ge";s:3:"175";s:3:"a m";s:3:"176";s:3:"a r";s:3:"177";s:3:"ain";s:3:"178";s:3:"ali";s:3:"179";s:3:"car";s:3:"180";s:3:"cat";s:3:"181";s:3:"ecu";s:3:"182";s:3:"ene";s:3:"183";s:3:"ept";s:3:"184";s:3:"ext";s:3:"185";s:3:"ilo";s:3:"186";s:3:"iu ";s:3:"187";s:3:"n p";s:3:"188";s:3:"ori";s:3:"189";s:3:"sec";s:3:"190";s:3:"u p";s:3:"191";s:3:"une";s:3:"192";s:4:"ă c";s:3:"193";s:4:"ÅŸti";s:3:"194";s:4:"Å£ia";s:3:"195";s:3:" ch";s:3:"196";s:3:" gu";s:3:"197";s:3:"ai ";s:3:"198";s:3:"ani";s:3:"199";s:3:"cea";s:3:"200";s:3:"e f";s:3:"201";s:3:"isc";s:3:"202";s:3:"l a";s:3:"203";s:3:"lic";s:3:"204";s:3:"liu";s:3:"205";s:3:"mar";s:3:"206";s:3:"nic";s:3:"207";s:3:"nt ";s:3:"208";s:3:"nul";s:3:"209";s:3:"ris";s:3:"210";s:3:"t c";s:3:"211";s:3:"t p";s:3:"212";s:3:"tic";s:3:"213";s:3:"tid";s:3:"214";s:3:"u a";s:3:"215";s:3:"ucr";s:3:"216";s:3:" as";s:3:"217";s:3:" dr";s:3:"218";s:3:" fa";s:3:"219";s:3:" nu";s:3:"220";s:3:" pu";s:3:"221";s:3:" to";s:3:"222";s:3:"cra";s:3:"223";s:3:"dis";s:3:"224";s:4:"enÅ£";s:3:"225";s:3:"esc";s:3:"226";s:3:"gen";s:3:"227";s:3:"it ";s:3:"228";s:3:"ivi";s:3:"229";s:3:"l d";s:3:"230";s:3:"n d";s:3:"231";s:3:"nd ";s:3:"232";s:3:"nu ";s:3:"233";s:3:"ond";s:3:"234";s:3:"pen";s:3:"235";s:3:"ral";s:3:"236";s:3:"riv";s:3:"237";s:3:"rte";s:3:"238";s:3:"sti";s:3:"239";s:3:"t d";s:3:"240";s:3:"ta ";s:3:"241";s:3:"to ";s:3:"242";s:3:"uni";s:3:"243";s:3:"xte";s:3:"244";s:4:"ând";s:3:"245";s:4:"îns";s:3:"246";s:4:"ă s";s:3:"247";s:3:" bl";s:3:"248";s:3:" st";s:3:"249";s:3:" uc";s:3:"250";s:3:"a b";s:3:"251";s:3:"a i";s:3:"252";s:3:"a l";s:3:"253";s:3:"air";s:3:"254";s:3:"ast";s:3:"255";s:3:"bla";s:3:"256";s:3:"bri";s:3:"257";s:3:"che";s:3:"258";s:3:"duc";s:3:"259";s:3:"dul";s:3:"260";s:3:"e m";s:3:"261";s:3:"eas";s:3:"262";s:3:"edi";s:3:"263";s:3:"esp";s:3:"264";s:3:"i l";s:3:"265";s:3:"i p";s:3:"266";s:3:"ica";s:3:"267";s:4:"ică";s:3:"268";s:3:"ir ";s:3:"269";s:3:"iun";s:3:"270";s:3:"jud";s:3:"271";s:3:"lai";s:3:"272";s:3:"lul";s:3:"273";s:3:"mai";s:3:"274";s:3:"men";s:3:"275";s:3:"ni ";s:3:"276";s:3:"pus";s:3:"277";s:3:"put";s:3:"278";s:3:"ra ";s:3:"279";s:3:"rai";s:3:"280";s:3:"rop";s:3:"281";s:3:"sil";s:3:"282";s:3:"ti ";s:3:"283";s:3:"tra";s:3:"284";s:3:"u s";s:3:"285";s:3:"ua ";s:3:"286";s:3:"ude";s:3:"287";s:3:"urs";s:3:"288";s:4:"ân ";s:3:"289";s:4:"înt";s:3:"290";s:5:"ţă ";s:3:"291";s:3:" lu";s:3:"292";s:3:" mo";s:3:"293";s:3:" s ";s:3:"294";s:3:" sa";s:3:"295";s:3:" sc";s:3:"296";s:3:"a u";s:3:"297";s:3:"an ";s:3:"298";s:3:"atu";s:3:"299";}s:7:"russian";a:300:{s:5:" на";s:1:"0";s:5:" пр";s:1:"1";s:5:"то ";s:1:"2";s:5:" не";s:1:"3";s:5:"ли ";s:1:"4";s:5:" по";s:1:"5";s:5:"но ";s:1:"6";s:4:" в ";s:1:"7";s:5:"на ";s:1:"8";s:5:"Ñ‚ÑŒ ";s:1:"9";s:5:"не ";s:2:"10";s:4:" и ";s:2:"11";s:5:" ко";s:2:"12";s:5:"ом ";s:2:"13";s:6:"про";s:2:"14";s:5:" то";s:2:"15";s:5:"их ";s:2:"16";s:5:" ка";s:2:"17";s:6:"ать";s:2:"18";s:6:"ото";s:2:"19";s:5:" за";s:2:"20";s:5:"ие ";s:2:"21";s:6:"ова";s:2:"22";s:6:"тел";s:2:"23";s:6:"тор";s:2:"24";s:5:" де";s:2:"25";s:5:"ой ";s:2:"26";s:6:"Ñти";s:2:"27";s:5:" от";s:2:"28";s:5:"ах ";s:2:"29";s:5:"ми ";s:2:"30";s:6:"ÑÑ‚Ñ€";s:2:"31";s:5:" бе";s:2:"32";s:5:" во";s:2:"33";s:5:" ра";s:2:"34";s:5:"Ð°Ñ ";s:2:"35";s:6:"ват";s:2:"36";s:5:"ей ";s:2:"37";s:5:"ет ";s:2:"38";s:5:"же ";s:2:"39";s:6:"иче";s:2:"40";s:5:"Ð¸Ñ ";s:2:"41";s:5:"ов ";s:2:"42";s:6:"Ñто";s:2:"43";s:5:" об";s:2:"44";s:6:"вер";s:2:"45";s:5:"го ";s:2:"46";s:5:"и в";s:2:"47";s:5:"и п";s:2:"48";s:5:"и Ñ";s:2:"49";s:5:"ии ";s:2:"50";s:6:"иÑÑ‚";s:2:"51";s:5:"о в";s:2:"52";s:6:"оÑÑ‚";s:2:"53";s:6:"тра";s:2:"54";s:5:" те";s:2:"55";s:6:"ели";s:2:"56";s:6:"ере";s:2:"57";s:6:"кот";s:2:"58";s:6:"льн";s:2:"59";s:6:"ник";s:2:"60";s:6:"нти";s:2:"61";s:5:"о Ñ";s:2:"62";s:6:"рор";s:2:"63";s:6:"Ñтв";s:2:"64";s:6:"чеÑ";s:2:"65";s:5:" бо";s:2:"66";s:5:" ве";s:2:"67";s:5:" да";s:2:"68";s:5:" ин";s:2:"69";s:5:" но";s:2:"70";s:4:" Ñ ";s:2:"71";s:5:" Ñо";s:2:"72";s:5:" Ñп";s:2:"73";s:5:" ÑÑ‚";s:2:"74";s:5:" чт";s:2:"75";s:6:"али";s:2:"76";s:6:"ами";s:2:"77";s:6:"вид";s:2:"78";s:6:"дет";s:2:"79";s:5:"е н";s:2:"80";s:6:"ель";s:2:"81";s:6:"еÑк";s:2:"82";s:6:"еÑÑ‚";s:2:"83";s:6:"зал";s:2:"84";s:5:"и н";s:2:"85";s:6:"ива";s:2:"86";s:6:"кон";s:2:"87";s:6:"ого";s:2:"88";s:6:"одн";s:2:"89";s:6:"ожн";s:2:"90";s:6:"оль";s:2:"91";s:6:"ори";s:2:"92";s:6:"ров";s:2:"93";s:6:"Ñко";s:2:"94";s:5:"ÑÑ ";s:2:"95";s:6:"тер";s:2:"96";s:6:"что";s:2:"97";s:5:" мо";s:2:"98";s:5:" Ñа";s:2:"99";s:5:" ÑÑ‚";s:3:"100";s:6:"ант";s:3:"101";s:6:"вÑе";s:3:"102";s:6:"ерр";s:3:"103";s:6:"еÑл";s:3:"104";s:6:"иде";s:3:"105";s:6:"ина";s:3:"106";s:6:"ино";s:3:"107";s:6:"иро";s:3:"108";s:6:"ите";s:3:"109";s:5:"ка ";s:3:"110";s:5:"ко ";s:3:"111";s:6:"кол";s:3:"112";s:6:"ком";s:3:"113";s:5:"ла ";s:3:"114";s:6:"ниÑ";s:3:"115";s:5:"о Ñ‚";s:3:"116";s:6:"оло";s:3:"117";s:6:"ран";s:3:"118";s:6:"ред";s:3:"119";s:5:"ÑÑŒ ";s:3:"120";s:6:"тив";s:3:"121";s:6:"тич";s:3:"122";s:5:"Ñ‹Ñ… ";s:3:"123";s:5:" ви";s:3:"124";s:5:" вÑ";s:3:"125";s:5:" го";s:3:"126";s:5:" ма";s:3:"127";s:5:" Ñл";s:3:"128";s:6:"ако";s:3:"129";s:6:"ани";s:3:"130";s:6:"аÑÑ‚";s:3:"131";s:6:"без";s:3:"132";s:6:"дел";s:3:"133";s:5:"е д";s:3:"134";s:5:"е п";s:3:"135";s:5:"ем ";s:3:"136";s:6:"жно";s:3:"137";s:5:"и д";s:3:"138";s:6:"ика";s:3:"139";s:6:"каз";s:3:"140";s:6:"как";s:3:"141";s:5:"ки ";s:3:"142";s:6:"ноÑ";s:3:"143";s:5:"о н";s:3:"144";s:6:"опа";s:3:"145";s:6:"при";s:3:"146";s:6:"рро";s:3:"147";s:6:"Ñки";s:3:"148";s:5:"ти ";s:3:"149";s:6:"тов";s:3:"150";s:5:"ые ";s:3:"151";s:5:" вы";s:3:"152";s:5:" до";s:3:"153";s:5:" ме";s:3:"154";s:5:" ни";s:3:"155";s:5:" од";s:3:"156";s:5:" ро";s:3:"157";s:5:" Ñв";s:3:"158";s:5:" чи";s:3:"159";s:5:"а н";s:3:"160";s:6:"ает";s:3:"161";s:6:"аза";s:3:"162";s:6:"ате";s:3:"163";s:6:"беÑ";s:3:"164";s:5:"в п";s:3:"165";s:5:"ва ";s:3:"166";s:5:"е в";s:3:"167";s:5:"е м";s:3:"168";s:5:"е Ñ";s:3:"169";s:5:"ез ";s:3:"170";s:6:"ени";s:3:"171";s:5:"за ";s:3:"172";s:6:"зна";s:3:"173";s:6:"ини";s:3:"174";s:6:"кам";s:3:"175";s:6:"ках";s:3:"176";s:6:"кто";s:3:"177";s:6:"лов";s:3:"178";s:6:"мер";s:3:"179";s:6:"мож";s:3:"180";s:6:"нал";s:3:"181";s:6:"ниц";s:3:"182";s:5:"ны ";s:3:"183";s:6:"ным";s:3:"184";s:6:"ора";s:3:"185";s:6:"оро";s:3:"186";s:5:"от ";s:3:"187";s:6:"пор";s:3:"188";s:6:"рав";s:3:"189";s:6:"реÑ";s:3:"190";s:6:"риÑ";s:3:"191";s:6:"роÑ";s:3:"192";s:6:"Ñка";s:3:"193";s:5:"Ñ‚ н";s:3:"194";s:6:"том";s:3:"195";s:6:"чит";s:3:"196";s:6:"шко";s:3:"197";s:5:" бы";s:3:"198";s:4:" о ";s:3:"199";s:5:" Ñ‚Ñ€";s:3:"200";s:5:" уж";s:3:"201";s:5:" чу";s:3:"202";s:5:" шк";s:3:"203";s:5:"а б";s:3:"204";s:5:"а в";s:3:"205";s:5:"а Ñ€";s:3:"206";s:6:"аби";s:3:"207";s:6:"ала";s:3:"208";s:6:"ало";s:3:"209";s:6:"аль";s:3:"210";s:6:"анн";s:3:"211";s:6:"ати";s:3:"212";s:6:"бин";s:3:"213";s:6:"веÑ";s:3:"214";s:6:"вно";s:3:"215";s:5:"во ";s:3:"216";s:6:"вши";s:3:"217";s:6:"дал";s:3:"218";s:6:"дат";s:3:"219";s:6:"дно";s:3:"220";s:5:"е з";s:3:"221";s:6:"его";s:3:"222";s:6:"еле";s:3:"223";s:6:"енн";s:3:"224";s:6:"ент";s:3:"225";s:6:"ете";s:3:"226";s:5:"и о";s:3:"227";s:6:"или";s:3:"228";s:6:"иÑÑŒ";s:3:"229";s:5:"ит ";s:3:"230";s:6:"ици";s:3:"231";s:6:"ков";s:3:"232";s:6:"лен";s:3:"233";s:6:"льк";s:3:"234";s:6:"мен";s:3:"235";s:5:"мы ";s:3:"236";s:6:"нет";s:3:"237";s:5:"ни ";s:3:"238";s:6:"нны";s:3:"239";s:6:"ног";s:3:"240";s:6:"ной";s:3:"241";s:6:"ном";s:3:"242";s:5:"о п";s:3:"243";s:6:"обн";s:3:"244";s:6:"ове";s:3:"245";s:6:"овн";s:3:"246";s:6:"оры";s:3:"247";s:6:"пер";s:3:"248";s:5:"по ";s:3:"249";s:6:"пра";s:3:"250";s:6:"пре";s:3:"251";s:6:"раз";s:3:"252";s:6:"роп";s:3:"253";s:5:"ры ";s:3:"254";s:5:"Ñе ";s:3:"255";s:6:"Ñли";s:3:"256";s:6:"Ñов";s:3:"257";s:6:"тре";s:3:"258";s:6:"Ñ‚ÑÑ";s:3:"259";s:6:"уро";s:3:"260";s:6:"цел";s:3:"261";s:6:"чно";s:3:"262";s:5:"ÑŒ в";s:3:"263";s:6:"ько";s:3:"264";s:6:"ьно";s:3:"265";s:6:"Ñто";s:3:"266";s:5:"ÑŽÑ‚ ";s:3:"267";s:5:"Ñ Ð½";s:3:"268";s:5:" ан";s:3:"269";s:5:" еÑ";s:3:"270";s:5:" же";s:3:"271";s:5:" из";s:3:"272";s:5:" кт";s:3:"273";s:5:" ми";s:3:"274";s:5:" мы";s:3:"275";s:5:" пе";s:3:"276";s:5:" Ñе";s:3:"277";s:5:" це";s:3:"278";s:5:"а м";s:3:"279";s:5:"а п";s:3:"280";s:5:"а Ñ‚";s:3:"281";s:6:"авш";s:3:"282";s:6:"аже";s:3:"283";s:5:"ак ";s:3:"284";s:5:"ал ";s:3:"285";s:6:"але";s:3:"286";s:6:"ане";s:3:"287";s:6:"ачи";s:3:"288";s:6:"ают";s:3:"289";s:6:"бна";s:3:"290";s:6:"бол";s:3:"291";s:5:"бы ";s:3:"292";s:5:"в и";s:3:"293";s:5:"в Ñ";s:3:"294";s:6:"ван";s:3:"295";s:6:"гра";s:3:"296";s:6:"даж";s:3:"297";s:6:"ден";s:3:"298";s:5:"е к";s:3:"299";}s:7:"serbian";a:300:{s:5:" на";s:1:"0";s:5:" је";s:1:"1";s:5:" по";s:1:"2";s:5:"је ";s:1:"3";s:4:" и ";s:1:"4";s:5:" не";s:1:"5";s:5:" пр";s:1:"6";s:5:"га ";s:1:"7";s:5:" Ñв";s:1:"8";s:5:"ог ";s:1:"9";s:5:"а Ñ";s:2:"10";s:5:"их ";s:2:"11";s:5:"на ";s:2:"12";s:6:"кој";s:2:"13";s:6:"ога";s:2:"14";s:4:" у ";s:2:"15";s:5:"а п";s:2:"16";s:5:"не ";s:2:"17";s:5:"ни ";s:2:"18";s:5:"ти ";s:2:"19";s:5:" да";s:2:"20";s:5:"ом ";s:2:"21";s:5:" ве";s:2:"22";s:5:" ÑÑ€";s:2:"23";s:5:"и Ñ";s:2:"24";s:6:"Ñко";s:2:"25";s:5:" об";s:2:"26";s:5:"а н";s:2:"27";s:5:"да ";s:2:"28";s:5:"е н";s:2:"29";s:5:"но ";s:2:"30";s:6:"ног";s:2:"31";s:5:"о ј";s:2:"32";s:5:"ој ";s:2:"33";s:5:" за";s:2:"34";s:5:"ва ";s:2:"35";s:5:"е Ñ";s:2:"36";s:5:"и п";s:2:"37";s:5:"ма ";s:2:"38";s:6:"ник";s:2:"39";s:6:"обр";s:2:"40";s:6:"ова";s:2:"41";s:5:" ко";s:2:"42";s:5:"а и";s:2:"43";s:6:"диј";s:2:"44";s:5:"е п";s:2:"45";s:5:"ка ";s:2:"46";s:5:"ко ";s:2:"47";s:6:"ког";s:2:"48";s:6:"оÑÑ‚";s:2:"49";s:6:"Ñве";s:2:"50";s:6:"Ñтв";s:2:"51";s:6:"Ñти";s:2:"52";s:6:"тра";s:2:"53";s:6:"еди";s:2:"54";s:6:"има";s:2:"55";s:6:"пок";s:2:"56";s:6:"пра";s:2:"57";s:6:"раз";s:2:"58";s:5:"те ";s:2:"59";s:5:" бо";s:2:"60";s:5:" ви";s:2:"61";s:5:" Ñа";s:2:"62";s:6:"аво";s:2:"63";s:6:"бра";s:2:"64";s:6:"гоÑ";s:2:"65";s:5:"е и";s:2:"66";s:6:"ели";s:2:"67";s:6:"ени";s:2:"68";s:5:"за ";s:2:"69";s:6:"ики";s:2:"70";s:5:"ио ";s:2:"71";s:6:"пре";s:2:"72";s:6:"рав";s:2:"73";s:6:"рад";s:2:"74";s:5:"у Ñ";s:2:"75";s:5:"ју ";s:2:"76";s:5:"ња ";s:2:"77";s:5:" би";s:2:"78";s:5:" до";s:2:"79";s:5:" ÑÑ‚";s:2:"80";s:6:"аÑÑ‚";s:2:"81";s:6:"бој";s:2:"82";s:6:"ебо";s:2:"83";s:5:"и н";s:2:"84";s:5:"им ";s:2:"85";s:5:"ку ";s:2:"86";s:6:"лан";s:2:"87";s:6:"неб";s:2:"88";s:6:"ово";s:2:"89";s:6:"ого";s:2:"90";s:6:"оÑл";s:2:"91";s:6:"ојш";s:2:"92";s:6:"пед";s:2:"93";s:6:"ÑÑ‚Ñ€";s:2:"94";s:6:"чаÑ";s:2:"95";s:5:" го";s:2:"96";s:5:" кр";s:2:"97";s:5:" мо";s:2:"98";s:5:" чл";s:2:"99";s:5:"а м";s:3:"100";s:5:"а о";s:3:"101";s:6:"ако";s:3:"102";s:6:"ача";s:3:"103";s:6:"вел";s:3:"104";s:6:"вет";s:3:"105";s:6:"вог";s:3:"106";s:6:"еда";s:3:"107";s:6:"иÑÑ‚";s:3:"108";s:6:"ити";s:3:"109";s:6:"ије";s:3:"110";s:6:"око";s:3:"111";s:6:"Ñло";s:3:"112";s:6:"Ñрб";s:3:"113";s:6:"чла";s:3:"114";s:5:" бе";s:3:"115";s:5:" оÑ";s:3:"116";s:5:" от";s:3:"117";s:5:" ре";s:3:"118";s:5:" Ñе";s:3:"119";s:5:"а в";s:3:"120";s:5:"ан ";s:3:"121";s:6:"бог";s:3:"122";s:6:"бро";s:3:"123";s:6:"вен";s:3:"124";s:6:"гра";s:3:"125";s:5:"е о";s:3:"126";s:6:"ика";s:3:"127";s:6:"ија";s:3:"128";s:6:"ких";s:3:"129";s:6:"ком";s:3:"130";s:5:"ли ";s:3:"131";s:5:"ну ";s:3:"132";s:6:"ота";s:3:"133";s:6:"ојн";s:3:"134";s:6:"под";s:3:"135";s:6:"рбÑ";s:3:"136";s:6:"ред";s:3:"137";s:6:"рој";s:3:"138";s:5:"Ñа ";s:3:"139";s:6:"Ñни";s:3:"140";s:6:"тач";s:3:"141";s:6:"тва";s:3:"142";s:5:"ја ";s:3:"143";s:5:"ји ";s:3:"144";s:5:" ка";s:3:"145";s:5:" ов";s:3:"146";s:5:" Ñ‚Ñ€";s:3:"147";s:5:"а ј";s:3:"148";s:6:"ави";s:3:"149";s:5:"аз ";s:3:"150";s:6:"ано";s:3:"151";s:6:"био";s:3:"152";s:6:"вик";s:3:"153";s:5:"во ";s:3:"154";s:6:"гов";s:3:"155";s:6:"дни";s:3:"156";s:5:"е ч";s:3:"157";s:6:"его";s:3:"158";s:5:"и о";s:3:"159";s:6:"ива";s:3:"160";s:6:"иво";s:3:"161";s:5:"ик ";s:3:"162";s:6:"ине";s:3:"163";s:6:"ини";s:3:"164";s:6:"ипе";s:3:"165";s:6:"кип";s:3:"166";s:6:"лик";s:3:"167";s:5:"ло ";s:3:"168";s:6:"наш";s:3:"169";s:6:"ноÑ";s:3:"170";s:5:"о Ñ‚";s:3:"171";s:5:"од ";s:3:"172";s:6:"оди";s:3:"173";s:6:"она";s:3:"174";s:6:"оји";s:3:"175";s:6:"поч";s:3:"176";s:6:"про";s:3:"177";s:5:"ра ";s:3:"178";s:6:"риÑ";s:3:"179";s:6:"род";s:3:"180";s:6:"Ñ€ÑÑ‚";s:3:"181";s:5:"Ñе ";s:3:"182";s:6:"Ñпо";s:3:"183";s:6:"Ñта";s:3:"184";s:6:"тић";s:3:"185";s:5:"у д";s:3:"186";s:5:"у н";s:3:"187";s:5:"у о";s:3:"188";s:6:"чин";s:3:"189";s:5:"ша ";s:3:"190";s:6:"јед";s:3:"191";s:6:"јни";s:3:"192";s:5:"ће ";s:3:"193";s:4:" м ";s:3:"194";s:5:" ме";s:3:"195";s:5:" ни";s:3:"196";s:5:" он";s:3:"197";s:5:" па";s:3:"198";s:5:" Ñл";s:3:"199";s:5:" те";s:3:"200";s:5:"а у";s:3:"201";s:6:"ава";s:3:"202";s:6:"аве";s:3:"203";s:6:"авн";s:3:"204";s:6:"ана";s:3:"205";s:5:"ао ";s:3:"206";s:6:"ати";s:3:"207";s:6:"аци";s:3:"208";s:6:"ају";s:3:"209";s:6:"ања";s:3:"210";s:6:"бÑк";s:3:"211";s:6:"вор";s:3:"212";s:6:"воÑ";s:3:"213";s:6:"вÑк";s:3:"214";s:6:"дин";s:3:"215";s:5:"е у";s:3:"216";s:6:"едн";s:3:"217";s:6:"ези";s:3:"218";s:6:"ека";s:3:"219";s:6:"ено";s:3:"220";s:6:"ето";s:3:"221";s:6:"ења";s:3:"222";s:6:"жив";s:3:"223";s:5:"и г";s:3:"224";s:5:"и и";s:3:"225";s:5:"и к";s:3:"226";s:5:"и Ñ‚";s:3:"227";s:6:"ику";s:3:"228";s:6:"ичк";s:3:"229";s:5:"ки ";s:3:"230";s:6:"крÑ";s:3:"231";s:5:"ла ";s:3:"232";s:6:"лав";s:3:"233";s:6:"лит";s:3:"234";s:5:"ме ";s:3:"235";s:6:"мен";s:3:"236";s:6:"нац";s:3:"237";s:5:"о н";s:3:"238";s:5:"о п";s:3:"239";s:5:"о у";s:3:"240";s:6:"одн";s:3:"241";s:6:"оли";s:3:"242";s:6:"орн";s:3:"243";s:6:"оÑн";s:3:"244";s:6:"оÑп";s:3:"245";s:6:"оче";s:3:"246";s:6:"пÑк";s:3:"247";s:6:"реч";s:3:"248";s:6:"рпÑ";s:3:"249";s:6:"Ñво";s:3:"250";s:6:"Ñки";s:3:"251";s:6:"Ñла";s:3:"252";s:6:"Ñрп";s:3:"253";s:5:"Ñу ";s:3:"254";s:5:"та ";s:3:"255";s:6:"тав";s:3:"256";s:6:"тве";s:3:"257";s:5:"у б";s:3:"258";s:6:"јез";s:3:"259";s:5:"ћи ";s:3:"260";s:5:" ен";s:3:"261";s:5:" жи";s:3:"262";s:5:" им";s:3:"263";s:5:" му";s:3:"264";s:5:" од";s:3:"265";s:5:" Ñу";s:3:"266";s:5:" та";s:3:"267";s:5:" Ñ…Ñ€";s:3:"268";s:5:" ча";s:3:"269";s:5:" шт";s:3:"270";s:5:" ње";s:3:"271";s:5:"а д";s:3:"272";s:5:"а з";s:3:"273";s:5:"а к";s:3:"274";s:5:"а Ñ‚";s:3:"275";s:6:"аду";s:3:"276";s:6:"ало";s:3:"277";s:6:"ани";s:3:"278";s:6:"аÑо";s:3:"279";s:6:"ван";s:3:"280";s:6:"вач";s:3:"281";s:6:"вањ";s:3:"282";s:6:"вед";s:3:"283";s:5:"ви ";s:3:"284";s:6:"вно";s:3:"285";s:6:"вот";s:3:"286";s:6:"вој";s:3:"287";s:5:"ву ";s:3:"288";s:6:"доб";s:3:"289";s:6:"дру";s:3:"290";s:6:"дÑе";s:3:"291";s:5:"ду ";s:3:"292";s:5:"е б";s:3:"293";s:5:"е д";s:3:"294";s:5:"е м";s:3:"295";s:5:"ем ";s:3:"296";s:6:"ема";s:3:"297";s:6:"ент";s:3:"298";s:6:"енц";s:3:"299";}s:6:"slovak";a:300:{s:3:" pr";s:1:"0";s:3:" po";s:1:"1";s:3:" ne";s:1:"2";s:3:" a ";s:1:"3";s:3:"ch ";s:1:"4";s:3:" na";s:1:"5";s:3:" je";s:1:"6";s:4:"ní ";s:1:"7";s:3:"je ";s:1:"8";s:3:" do";s:1:"9";s:3:"na ";s:2:"10";s:3:"ova";s:2:"11";s:3:" v ";s:2:"12";s:3:"to ";s:2:"13";s:3:"ho ";s:2:"14";s:3:"ou ";s:2:"15";s:3:" to";s:2:"16";s:3:"ick";s:2:"17";s:3:"ter";s:2:"18";s:4:"že ";s:2:"19";s:3:" st";s:2:"20";s:3:" za";s:2:"21";s:3:"ost";s:2:"22";s:4:"ých";s:2:"23";s:3:" se";s:2:"24";s:3:"pro";s:2:"25";s:3:" te";s:2:"26";s:3:"e s";s:2:"27";s:4:" že";s:2:"28";s:3:"a p";s:2:"29";s:3:" kt";s:2:"30";s:3:"pre";s:2:"31";s:3:" by";s:2:"32";s:3:" o ";s:2:"33";s:3:"se ";s:2:"34";s:3:"kon";s:2:"35";s:4:" pÅ™";s:2:"36";s:3:"a s";s:2:"37";s:4:"né ";s:2:"38";s:4:"nÄ› ";s:2:"39";s:3:"sti";s:2:"40";s:3:"ako";s:2:"41";s:3:"ist";s:2:"42";s:3:"mu ";s:2:"43";s:3:"ame";s:2:"44";s:3:"ent";s:2:"45";s:3:"ky ";s:2:"46";s:3:"la ";s:2:"47";s:3:"pod";s:2:"48";s:3:" ve";s:2:"49";s:3:" ob";s:2:"50";s:3:"om ";s:2:"51";s:3:"vat";s:2:"52";s:3:" ko";s:2:"53";s:3:"sta";s:2:"54";s:3:"em ";s:2:"55";s:3:"le ";s:2:"56";s:3:"a v";s:2:"57";s:3:"by ";s:2:"58";s:3:"e p";s:2:"59";s:3:"ko ";s:2:"60";s:3:"eri";s:2:"61";s:3:"kte";s:2:"62";s:3:"sa ";s:2:"63";s:4:"ého";s:2:"64";s:3:"e v";s:2:"65";s:3:"mer";s:2:"66";s:3:"tel";s:2:"67";s:3:" ak";s:2:"68";s:3:" sv";s:2:"69";s:4:" zá";s:2:"70";s:3:"hla";s:2:"71";s:3:"las";s:2:"72";s:3:"lo ";s:2:"73";s:3:" ta";s:2:"74";s:3:"a n";s:2:"75";s:3:"ej ";s:2:"76";s:3:"li ";s:2:"77";s:3:"ne ";s:2:"78";s:3:" sa";s:2:"79";s:3:"ak ";s:2:"80";s:3:"ani";s:2:"81";s:3:"ate";s:2:"82";s:3:"ia ";s:2:"83";s:3:"sou";s:2:"84";s:3:" so";s:2:"85";s:4:"ení";s:2:"86";s:3:"ie ";s:2:"87";s:3:" re";s:2:"88";s:3:"ce ";s:2:"89";s:3:"e n";s:2:"90";s:3:"ori";s:2:"91";s:3:"tic";s:2:"92";s:3:" vy";s:2:"93";s:3:"a t";s:2:"94";s:4:"ké ";s:2:"95";s:3:"nos";s:2:"96";s:3:"o s";s:2:"97";s:3:"str";s:2:"98";s:3:"ti ";s:2:"99";s:3:"uje";s:3:"100";s:3:" sp";s:3:"101";s:3:"lov";s:3:"102";s:3:"o p";s:3:"103";s:3:"oli";s:3:"104";s:4:"ová";s:3:"105";s:4:" ná";s:3:"106";s:3:"ale";s:3:"107";s:3:"den";s:3:"108";s:3:"e o";s:3:"109";s:3:"ku ";s:3:"110";s:3:"val";s:3:"111";s:3:" am";s:3:"112";s:3:" ro";s:3:"113";s:3:" si";s:3:"114";s:3:"nie";s:3:"115";s:3:"pol";s:3:"116";s:3:"tra";s:3:"117";s:3:" al";s:3:"118";s:3:"ali";s:3:"119";s:3:"o v";s:3:"120";s:3:"tor";s:3:"121";s:3:" mo";s:3:"122";s:3:" ni";s:3:"123";s:3:"ci ";s:3:"124";s:3:"o n";s:3:"125";s:4:"ím ";s:3:"126";s:3:" le";s:3:"127";s:3:" pa";s:3:"128";s:3:" s ";s:3:"129";s:3:"al ";s:3:"130";s:3:"ati";s:3:"131";s:3:"ero";s:3:"132";s:3:"ove";s:3:"133";s:3:"rov";s:3:"134";s:4:"ván";s:3:"135";s:4:"ích";s:3:"136";s:3:" ja";s:3:"137";s:3:" z ";s:3:"138";s:4:"cké";s:3:"139";s:3:"e z";s:3:"140";s:3:" od";s:3:"141";s:3:"byl";s:3:"142";s:3:"de ";s:3:"143";s:3:"dob";s:3:"144";s:3:"nep";s:3:"145";s:3:"pra";s:3:"146";s:3:"ric";s:3:"147";s:3:"spo";s:3:"148";s:3:"tak";s:3:"149";s:4:" vÅ¡";s:3:"150";s:3:"a a";s:3:"151";s:3:"e t";s:3:"152";s:3:"lit";s:3:"153";s:3:"me ";s:3:"154";s:3:"nej";s:3:"155";s:3:"no ";s:3:"156";s:4:"nýc";s:3:"157";s:3:"o t";s:3:"158";s:3:"a j";s:3:"159";s:3:"e a";s:3:"160";s:3:"en ";s:3:"161";s:3:"est";s:3:"162";s:4:"jí ";s:3:"163";s:3:"mi ";s:3:"164";s:3:"slo";s:3:"165";s:4:"stá";s:3:"166";s:3:"u v";s:3:"167";s:3:"for";s:3:"168";s:3:"nou";s:3:"169";s:3:"pos";s:3:"170";s:4:"pÅ™e";s:3:"171";s:3:"si ";s:3:"172";s:3:"tom";s:3:"173";s:3:" vl";s:3:"174";s:3:"a z";s:3:"175";s:3:"ly ";s:3:"176";s:3:"orm";s:3:"177";s:3:"ris";s:3:"178";s:3:"za ";s:3:"179";s:4:"zák";s:3:"180";s:3:" k ";s:3:"181";s:3:"at ";s:3:"182";s:4:"cký";s:3:"183";s:3:"dno";s:3:"184";s:3:"dos";s:3:"185";s:3:"dy ";s:3:"186";s:3:"jak";s:3:"187";s:3:"kov";s:3:"188";s:3:"ny ";s:3:"189";s:3:"res";s:3:"190";s:3:"ror";s:3:"191";s:3:"sto";s:3:"192";s:3:"van";s:3:"193";s:3:" op";s:3:"194";s:3:"da ";s:3:"195";s:3:"do ";s:3:"196";s:3:"e j";s:3:"197";s:3:"hod";s:3:"198";s:3:"len";s:3:"199";s:4:"ný ";s:3:"200";s:3:"o z";s:3:"201";s:3:"poz";s:3:"202";s:3:"pri";s:3:"203";s:3:"ran";s:3:"204";s:3:"u s";s:3:"205";s:3:" ab";s:3:"206";s:3:"aj ";s:3:"207";s:3:"ast";s:3:"208";s:3:"it ";s:3:"209";s:3:"kto";s:3:"210";s:3:"o o";s:3:"211";s:3:"oby";s:3:"212";s:3:"odo";s:3:"213";s:3:"u p";s:3:"214";s:3:"va ";s:3:"215";s:5:"ání";s:3:"216";s:4:"í p";s:3:"217";s:4:"ým ";s:3:"218";s:3:" in";s:3:"219";s:3:" mi";s:3:"220";s:4:"aÅ¥ ";s:3:"221";s:3:"dov";s:3:"222";s:3:"ka ";s:3:"223";s:3:"nsk";s:3:"224";s:4:"áln";s:3:"225";s:3:" an";s:3:"226";s:3:" bu";s:3:"227";s:3:" sl";s:3:"228";s:3:" tr";s:3:"229";s:3:"e m";s:3:"230";s:3:"ech";s:3:"231";s:3:"edn";s:3:"232";s:3:"i n";s:3:"233";s:4:"kýc";s:3:"234";s:4:"níc";s:3:"235";s:3:"ov ";s:3:"236";s:5:"pří";s:3:"237";s:4:"í a";s:3:"238";s:3:" aj";s:3:"239";s:3:" bo";s:3:"240";s:3:"a d";s:3:"241";s:3:"ide";s:3:"242";s:3:"o a";s:3:"243";s:3:"o d";s:3:"244";s:3:"och";s:3:"245";s:3:"pov";s:3:"246";s:3:"svo";s:3:"247";s:4:"é s";s:3:"248";s:3:" kd";s:3:"249";s:3:" vo";s:3:"250";s:4:" vý";s:3:"251";s:3:"bud";s:3:"252";s:3:"ich";s:3:"253";s:3:"il ";s:3:"254";s:3:"ili";s:3:"255";s:3:"ni ";s:3:"256";s:4:"ním";s:3:"257";s:3:"od ";s:3:"258";s:3:"osl";s:3:"259";s:3:"ouh";s:3:"260";s:3:"rav";s:3:"261";s:3:"roz";s:3:"262";s:3:"st ";s:3:"263";s:3:"stv";s:3:"264";s:3:"tu ";s:3:"265";s:3:"u a";s:3:"266";s:4:"vál";s:3:"267";s:3:"y s";s:3:"268";s:4:"í s";s:3:"269";s:4:"í v";s:3:"270";s:3:" hl";s:3:"271";s:3:" li";s:3:"272";s:3:" me";s:3:"273";s:3:"a m";s:3:"274";s:3:"e b";s:3:"275";s:3:"h s";s:3:"276";s:3:"i p";s:3:"277";s:3:"i s";s:3:"278";s:3:"iti";s:3:"279";s:4:"lád";s:3:"280";s:3:"nem";s:3:"281";s:3:"nov";s:3:"282";s:3:"opo";s:3:"283";s:3:"uhl";s:3:"284";s:3:"eno";s:3:"285";s:3:"ens";s:3:"286";s:3:"men";s:3:"287";s:3:"nes";s:3:"288";s:3:"obo";s:3:"289";s:3:"te ";s:3:"290";s:3:"ved";s:3:"291";s:4:"vlá";s:3:"292";s:3:"y n";s:3:"293";s:3:" ma";s:3:"294";s:3:" mu";s:3:"295";s:4:" vá";s:3:"296";s:3:"bez";s:3:"297";s:3:"byv";s:3:"298";s:3:"cho";s:3:"299";}s:7:"slovene";a:300:{s:3:"je ";s:1:"0";s:3:" pr";s:1:"1";s:3:" po";s:1:"2";s:3:" je";s:1:"3";s:3:" v ";s:1:"4";s:3:" za";s:1:"5";s:3:" na";s:1:"6";s:3:"pre";s:1:"7";s:3:"da ";s:1:"8";s:3:" da";s:1:"9";s:3:"ki ";s:2:"10";s:3:"ti ";s:2:"11";s:3:"ja ";s:2:"12";s:3:"ne ";s:2:"13";s:3:" in";s:2:"14";s:3:"in ";s:2:"15";s:3:"li ";s:2:"16";s:3:"no ";s:2:"17";s:3:"na ";s:2:"18";s:3:"ni ";s:2:"19";s:3:" bi";s:2:"20";s:3:"jo ";s:2:"21";s:3:" ne";s:2:"22";s:3:"nje";s:2:"23";s:3:"e p";s:2:"24";s:3:"i p";s:2:"25";s:3:"pri";s:2:"26";s:3:"o p";s:2:"27";s:3:"red";s:2:"28";s:3:" do";s:2:"29";s:3:"anj";s:2:"30";s:3:"em ";s:2:"31";s:3:"ih ";s:2:"32";s:3:" bo";s:2:"33";s:3:" ki";s:2:"34";s:3:" iz";s:2:"35";s:3:" se";s:2:"36";s:3:" so";s:2:"37";s:3:"al ";s:2:"38";s:3:" de";s:2:"39";s:3:"e v";s:2:"40";s:3:"i s";s:2:"41";s:3:"ko ";s:2:"42";s:3:"bil";s:2:"43";s:3:"ira";s:2:"44";s:3:"ove";s:2:"45";s:3:" br";s:2:"46";s:3:" ob";s:2:"47";s:3:"e b";s:2:"48";s:3:"i n";s:2:"49";s:3:"ova";s:2:"50";s:3:"se ";s:2:"51";s:3:"za ";s:2:"52";s:3:"la ";s:2:"53";s:3:" ja";s:2:"54";s:3:"ati";s:2:"55";s:3:"so ";s:2:"56";s:3:"ter";s:2:"57";s:3:" ta";s:2:"58";s:3:"a s";s:2:"59";s:3:"del";s:2:"60";s:3:"e d";s:2:"61";s:3:" dr";s:2:"62";s:3:" od";s:2:"63";s:3:"a n";s:2:"64";s:3:"ar ";s:2:"65";s:3:"jal";s:2:"66";s:3:"ji ";s:2:"67";s:3:"rit";s:2:"68";s:3:" ka";s:2:"69";s:3:" ko";s:2:"70";s:3:" pa";s:2:"71";s:3:"a b";s:2:"72";s:3:"ani";s:2:"73";s:3:"e s";s:2:"74";s:3:"er ";s:2:"75";s:3:"ili";s:2:"76";s:3:"lov";s:2:"77";s:3:"o v";s:2:"78";s:3:"tov";s:2:"79";s:3:" ir";s:2:"80";s:3:" ni";s:2:"81";s:3:" vo";s:2:"82";s:3:"a j";s:2:"83";s:3:"bi ";s:2:"84";s:3:"bri";s:2:"85";s:3:"iti";s:2:"86";s:3:"let";s:2:"87";s:3:"o n";s:2:"88";s:3:"tan";s:2:"89";s:4:"Å¡e ";s:2:"90";s:3:" le";s:2:"91";s:3:" te";s:2:"92";s:3:"eni";s:2:"93";s:3:"eri";s:2:"94";s:3:"ita";s:2:"95";s:3:"kat";s:2:"96";s:3:"por";s:2:"97";s:3:"pro";s:2:"98";s:3:"ali";s:2:"99";s:3:"ke ";s:3:"100";s:3:"oli";s:3:"101";s:3:"ov ";s:3:"102";s:3:"pra";s:3:"103";s:3:"ri ";s:3:"104";s:3:"uar";s:3:"105";s:3:"ve ";s:3:"106";s:3:" to";s:3:"107";s:3:"a i";s:3:"108";s:3:"a v";s:3:"109";s:3:"ako";s:3:"110";s:3:"arj";s:3:"111";s:3:"ate";s:3:"112";s:3:"di ";s:3:"113";s:3:"do ";s:3:"114";s:3:"ga ";s:3:"115";s:3:"le ";s:3:"116";s:3:"lo ";s:3:"117";s:3:"mer";s:3:"118";s:3:"o s";s:3:"119";s:3:"oda";s:3:"120";s:3:"oro";s:3:"121";s:3:"pod";s:3:"122";s:3:" ma";s:3:"123";s:3:" mo";s:3:"124";s:3:" si";s:3:"125";s:3:"a p";s:3:"126";s:3:"bod";s:3:"127";s:3:"e n";s:3:"128";s:3:"ega";s:3:"129";s:3:"ju ";s:3:"130";s:3:"ka ";s:3:"131";s:3:"lje";s:3:"132";s:3:"rav";s:3:"133";s:3:"ta ";s:3:"134";s:3:"a o";s:3:"135";s:3:"e t";s:3:"136";s:3:"e z";s:3:"137";s:3:"i d";s:3:"138";s:3:"i v";s:3:"139";s:3:"ila";s:3:"140";s:3:"lit";s:3:"141";s:3:"nih";s:3:"142";s:3:"odo";s:3:"143";s:3:"sti";s:3:"144";s:3:"to ";s:3:"145";s:3:"var";s:3:"146";s:3:"ved";s:3:"147";s:3:"vol";s:3:"148";s:3:" la";s:3:"149";s:3:" no";s:3:"150";s:3:" vs";s:3:"151";s:3:"a d";s:3:"152";s:3:"agu";s:3:"153";s:3:"aja";s:3:"154";s:3:"dej";s:3:"155";s:3:"dnj";s:3:"156";s:3:"eda";s:3:"157";s:3:"gov";s:3:"158";s:3:"gua";s:3:"159";s:3:"jag";s:3:"160";s:3:"jem";s:3:"161";s:3:"kon";s:3:"162";s:3:"ku ";s:3:"163";s:3:"nij";s:3:"164";s:3:"omo";s:3:"165";s:4:"oÄi";s:3:"166";s:3:"pov";s:3:"167";s:3:"rak";s:3:"168";s:3:"rja";s:3:"169";s:3:"sta";s:3:"170";s:3:"tev";s:3:"171";s:3:"a t";s:3:"172";s:3:"aj ";s:3:"173";s:3:"ed ";s:3:"174";s:3:"eja";s:3:"175";s:3:"ent";s:3:"176";s:3:"ev ";s:3:"177";s:3:"i i";s:3:"178";s:3:"i o";s:3:"179";s:3:"ijo";s:3:"180";s:3:"ist";s:3:"181";s:3:"ost";s:3:"182";s:3:"ske";s:3:"183";s:3:"str";s:3:"184";s:3:" ra";s:3:"185";s:3:" s ";s:3:"186";s:3:" tr";s:3:"187";s:4:" Å¡e";s:3:"188";s:3:"arn";s:3:"189";s:3:"bo ";s:3:"190";s:4:"drž";s:3:"191";s:3:"i j";s:3:"192";s:3:"ilo";s:3:"193";s:3:"izv";s:3:"194";s:3:"jen";s:3:"195";s:3:"lja";s:3:"196";s:3:"nsk";s:3:"197";s:3:"o d";s:3:"198";s:3:"o i";s:3:"199";s:3:"om ";s:3:"200";s:3:"ora";s:3:"201";s:3:"ovo";s:3:"202";s:3:"raz";s:3:"203";s:4:"rža";s:3:"204";s:3:"tak";s:3:"205";s:3:"va ";s:3:"206";s:3:"ven";s:3:"207";s:4:"žav";s:3:"208";s:3:" me";s:3:"209";s:4:" Äe";s:3:"210";s:3:"ame";s:3:"211";s:3:"avi";s:3:"212";s:3:"e i";s:3:"213";s:3:"e o";s:3:"214";s:3:"eka";s:3:"215";s:3:"gre";s:3:"216";s:3:"i t";s:3:"217";s:3:"ija";s:3:"218";s:3:"il ";s:3:"219";s:3:"ite";s:3:"220";s:3:"kra";s:3:"221";s:3:"lju";s:3:"222";s:3:"mor";s:3:"223";s:3:"nik";s:3:"224";s:3:"o t";s:3:"225";s:3:"obi";s:3:"226";s:3:"odn";s:3:"227";s:3:"ran";s:3:"228";s:3:"re ";s:3:"229";s:3:"sto";s:3:"230";s:3:"stv";s:3:"231";s:3:"udi";s:3:"232";s:3:"v i";s:3:"233";s:3:"van";s:3:"234";s:3:" am";s:3:"235";s:3:" sp";s:3:"236";s:3:" st";s:3:"237";s:3:" tu";s:3:"238";s:3:" ve";s:3:"239";s:4:" že";s:3:"240";s:3:"ajo";s:3:"241";s:3:"ale";s:3:"242";s:3:"apo";s:3:"243";s:3:"dal";s:3:"244";s:3:"dru";s:3:"245";s:3:"e j";s:3:"246";s:3:"edn";s:3:"247";s:3:"ejo";s:3:"248";s:3:"elo";s:3:"249";s:3:"est";s:3:"250";s:3:"etj";s:3:"251";s:3:"eva";s:3:"252";s:3:"iji";s:3:"253";s:3:"ik ";s:3:"254";s:3:"im ";s:3:"255";s:3:"itv";s:3:"256";s:3:"mob";s:3:"257";s:3:"nap";s:3:"258";s:3:"nek";s:3:"259";s:3:"pol";s:3:"260";s:3:"pos";s:3:"261";s:3:"rat";s:3:"262";s:3:"ski";s:3:"263";s:4:"tiÄ";s:3:"264";s:3:"tom";s:3:"265";s:3:"ton";s:3:"266";s:3:"tra";s:3:"267";s:3:"tud";s:3:"268";s:3:"tve";s:3:"269";s:3:"v b";s:3:"270";s:3:"vil";s:3:"271";s:3:"vse";s:3:"272";s:4:"Äit";s:3:"273";s:3:" av";s:3:"274";s:3:" gr";s:3:"275";s:3:"a z";s:3:"276";s:3:"ans";s:3:"277";s:3:"ast";s:3:"278";s:3:"avt";s:3:"279";s:3:"dan";s:3:"280";s:3:"e m";s:3:"281";s:3:"eds";s:3:"282";s:3:"for";s:3:"283";s:3:"i z";s:3:"284";s:3:"kot";s:3:"285";s:3:"mi ";s:3:"286";s:3:"nim";s:3:"287";s:3:"o b";s:3:"288";s:3:"o o";s:3:"289";s:3:"od ";s:3:"290";s:3:"odl";s:3:"291";s:3:"oiz";s:3:"292";s:3:"ot ";s:3:"293";s:3:"par";s:3:"294";s:3:"pot";s:3:"295";s:3:"rje";s:3:"296";s:3:"roi";s:3:"297";s:3:"tem";s:3:"298";s:3:"val";s:3:"299";}s:6:"somali";a:300:{s:3:"ka ";s:1:"0";s:3:"ay ";s:1:"1";s:3:"da ";s:1:"2";s:3:" ay";s:1:"3";s:3:"aal";s:1:"4";s:3:"oo ";s:1:"5";s:3:"aan";s:1:"6";s:3:" ka";s:1:"7";s:3:"an ";s:1:"8";s:3:"in ";s:1:"9";s:3:" in";s:2:"10";s:3:"ada";s:2:"11";s:3:"maa";s:2:"12";s:3:"aba";s:2:"13";s:3:" so";s:2:"14";s:3:"ali";s:2:"15";s:3:"bad";s:2:"16";s:3:"add";s:2:"17";s:3:"soo";s:2:"18";s:3:" na";s:2:"19";s:3:"aha";s:2:"20";s:3:"ku ";s:2:"21";s:3:"ta ";s:2:"22";s:3:" wa";s:2:"23";s:3:"yo ";s:2:"24";s:3:"a s";s:2:"25";s:3:"oma";s:2:"26";s:3:"yaa";s:2:"27";s:3:" ba";s:2:"28";s:3:" ku";s:2:"29";s:3:" la";s:2:"30";s:3:" oo";s:2:"31";s:3:"iya";s:2:"32";s:3:"sha";s:2:"33";s:3:"a a";s:2:"34";s:3:"dda";s:2:"35";s:3:"nab";s:2:"36";s:3:"nta";s:2:"37";s:3:" da";s:2:"38";s:3:" ma";s:2:"39";s:3:"nka";s:2:"40";s:3:"uu ";s:2:"41";s:3:"y i";s:2:"42";s:3:"aya";s:2:"43";s:3:"ha ";s:2:"44";s:3:"raa";s:2:"45";s:3:" dh";s:2:"46";s:3:" qa";s:2:"47";s:3:"a k";s:2:"48";s:3:"ala";s:2:"49";s:3:"baa";s:2:"50";s:3:"doo";s:2:"51";s:3:"had";s:2:"52";s:3:"liy";s:2:"53";s:3:"oom";s:2:"54";s:3:" ha";s:2:"55";s:3:" sh";s:2:"56";s:3:"a d";s:2:"57";s:3:"a i";s:2:"58";s:3:"a n";s:2:"59";s:3:"aar";s:2:"60";s:3:"ee ";s:2:"61";s:3:"ey ";s:2:"62";s:3:"y k";s:2:"63";s:3:"ya ";s:2:"64";s:3:" ee";s:2:"65";s:3:" iy";s:2:"66";s:3:"aa ";s:2:"67";s:3:"aaq";s:2:"68";s:3:"gaa";s:2:"69";s:3:"lam";s:2:"70";s:3:" bu";s:2:"71";s:3:"a b";s:2:"72";s:3:"a m";s:2:"73";s:3:"ad ";s:2:"74";s:3:"aga";s:2:"75";s:3:"ama";s:2:"76";s:3:"iyo";s:2:"77";s:3:"la ";s:2:"78";s:3:"a c";s:2:"79";s:3:"a l";s:2:"80";s:3:"een";s:2:"81";s:3:"int";s:2:"82";s:3:"she";s:2:"83";s:3:"wax";s:2:"84";s:3:"yee";s:2:"85";s:3:" si";s:2:"86";s:3:" uu";s:2:"87";s:3:"a h";s:2:"88";s:3:"aas";s:2:"89";s:3:"alk";s:2:"90";s:3:"dha";s:2:"91";s:3:"gu ";s:2:"92";s:3:"hee";s:2:"93";s:3:"ii ";s:2:"94";s:3:"ira";s:2:"95";s:3:"mad";s:2:"96";s:3:"o a";s:2:"97";s:3:"o k";s:2:"98";s:3:"qay";s:2:"99";s:3:" ah";s:3:"100";s:3:" ca";s:3:"101";s:3:" wu";s:3:"102";s:3:"ank";s:3:"103";s:3:"ash";s:3:"104";s:3:"axa";s:3:"105";s:3:"eed";s:3:"106";s:3:"en ";s:3:"107";s:3:"ga ";s:3:"108";s:3:"haa";s:3:"109";s:3:"n a";s:3:"110";s:3:"n s";s:3:"111";s:3:"naa";s:3:"112";s:3:"nay";s:3:"113";s:3:"o d";s:3:"114";s:3:"taa";s:3:"115";s:3:"u b";s:3:"116";s:3:"uxu";s:3:"117";s:3:"wux";s:3:"118";s:3:"xuu";s:3:"119";s:3:" ci";s:3:"120";s:3:" do";s:3:"121";s:3:" ho";s:3:"122";s:3:" ta";s:3:"123";s:3:"a g";s:3:"124";s:3:"a u";s:3:"125";s:3:"ana";s:3:"126";s:3:"ayo";s:3:"127";s:3:"dhi";s:3:"128";s:3:"iin";s:3:"129";s:3:"lag";s:3:"130";s:3:"lin";s:3:"131";s:3:"lka";s:3:"132";s:3:"o i";s:3:"133";s:3:"san";s:3:"134";s:3:"u s";s:3:"135";s:3:"una";s:3:"136";s:3:"uun";s:3:"137";s:3:" ga";s:3:"138";s:3:" xa";s:3:"139";s:3:" xu";s:3:"140";s:3:"aab";s:3:"141";s:3:"abt";s:3:"142";s:3:"aq ";s:3:"143";s:3:"aqa";s:3:"144";s:3:"ara";s:3:"145";s:3:"arl";s:3:"146";s:3:"caa";s:3:"147";s:3:"cir";s:3:"148";s:3:"eeg";s:3:"149";s:3:"eel";s:3:"150";s:3:"isa";s:3:"151";s:3:"kal";s:3:"152";s:3:"lah";s:3:"153";s:3:"ney";s:3:"154";s:3:"qaa";s:3:"155";s:3:"rla";s:3:"156";s:3:"sad";s:3:"157";s:3:"sii";s:3:"158";s:3:"u d";s:3:"159";s:3:"wad";s:3:"160";s:3:" ad";s:3:"161";s:3:" ar";s:3:"162";s:3:" di";s:3:"163";s:3:" jo";s:3:"164";s:3:" ra";s:3:"165";s:3:" sa";s:3:"166";s:3:" u ";s:3:"167";s:3:" yi";s:3:"168";s:3:"a j";s:3:"169";s:3:"a q";s:3:"170";s:3:"aad";s:3:"171";s:3:"aat";s:3:"172";s:3:"aay";s:3:"173";s:3:"ah ";s:3:"174";s:3:"ale";s:3:"175";s:3:"amk";s:3:"176";s:3:"ari";s:3:"177";s:3:"as ";s:3:"178";s:3:"aye";s:3:"179";s:3:"bus";s:3:"180";s:3:"dal";s:3:"181";s:3:"ddu";s:3:"182";s:3:"dii";s:3:"183";s:3:"du ";s:3:"184";s:3:"duu";s:3:"185";s:3:"ed ";s:3:"186";s:3:"ege";s:3:"187";s:3:"gey";s:3:"188";s:3:"hay";s:3:"189";s:3:"hii";s:3:"190";s:3:"ida";s:3:"191";s:3:"ine";s:3:"192";s:3:"joo";s:3:"193";s:3:"laa";s:3:"194";s:3:"lay";s:3:"195";s:3:"mar";s:3:"196";s:3:"mee";s:3:"197";s:3:"n b";s:3:"198";s:3:"n d";s:3:"199";s:3:"n m";s:3:"200";s:3:"no ";s:3:"201";s:3:"o b";s:3:"202";s:3:"o l";s:3:"203";s:3:"oog";s:3:"204";s:3:"oon";s:3:"205";s:3:"rga";s:3:"206";s:3:"sh ";s:3:"207";s:3:"sid";s:3:"208";s:3:"u q";s:3:"209";s:3:"unk";s:3:"210";s:3:"ush";s:3:"211";s:3:"xa ";s:3:"212";s:3:"y d";s:3:"213";s:3:" bi";s:3:"214";s:3:" gu";s:3:"215";s:3:" is";s:3:"216";s:3:" ke";s:3:"217";s:3:" lo";s:3:"218";s:3:" me";s:3:"219";s:3:" mu";s:3:"220";s:3:" qo";s:3:"221";s:3:" ug";s:3:"222";s:3:"a e";s:3:"223";s:3:"a o";s:3:"224";s:3:"a w";s:3:"225";s:3:"adi";s:3:"226";s:3:"ado";s:3:"227";s:3:"agu";s:3:"228";s:3:"al ";s:3:"229";s:3:"ant";s:3:"230";s:3:"ark";s:3:"231";s:3:"asa";s:3:"232";s:3:"awi";s:3:"233";s:3:"bta";s:3:"234";s:3:"bul";s:3:"235";s:3:"d a";s:3:"236";s:3:"dag";s:3:"237";s:3:"dan";s:3:"238";s:3:"do ";s:3:"239";s:3:"e s";s:3:"240";s:3:"gal";s:3:"241";s:3:"gay";s:3:"242";s:3:"guu";s:3:"243";s:3:"h e";s:3:"244";s:3:"hal";s:3:"245";s:3:"iga";s:3:"246";s:3:"ihi";s:3:"247";s:3:"iri";s:3:"248";s:3:"iye";s:3:"249";s:3:"ken";s:3:"250";s:3:"lad";s:3:"251";s:3:"lid";s:3:"252";s:3:"lsh";s:3:"253";s:3:"mag";s:3:"254";s:3:"mun";s:3:"255";s:3:"n h";s:3:"256";s:3:"n i";s:3:"257";s:3:"na ";s:3:"258";s:3:"o n";s:3:"259";s:3:"o w";s:3:"260";s:3:"ood";s:3:"261";s:3:"oor";s:3:"262";s:3:"ora";s:3:"263";s:3:"qab";s:3:"264";s:3:"qor";s:3:"265";s:3:"rab";s:3:"266";s:3:"rit";s:3:"267";s:3:"rta";s:3:"268";s:3:"s o";s:3:"269";s:3:"sab";s:3:"270";s:3:"ska";s:3:"271";s:3:"to ";s:3:"272";s:3:"u a";s:3:"273";s:3:"u h";s:3:"274";s:3:"u u";s:3:"275";s:3:"ud ";s:3:"276";s:3:"ugu";s:3:"277";s:3:"uls";s:3:"278";s:3:"uud";s:3:"279";s:3:"waa";s:3:"280";s:3:"xus";s:3:"281";s:3:"y b";s:3:"282";s:3:"y q";s:3:"283";s:3:"y s";s:3:"284";s:3:"yad";s:3:"285";s:3:"yay";s:3:"286";s:3:"yih";s:3:"287";s:3:" aa";s:3:"288";s:3:" bo";s:3:"289";s:3:" br";s:3:"290";s:3:" go";s:3:"291";s:3:" ji";s:3:"292";s:3:" mi";s:3:"293";s:3:" of";s:3:"294";s:3:" ti";s:3:"295";s:3:" um";s:3:"296";s:3:" wi";s:3:"297";s:3:" xo";s:3:"298";s:3:"a x";s:3:"299";}s:7:"spanish";a:300:{s:3:" de";s:1:"0";s:3:"de ";s:1:"1";s:3:" la";s:1:"2";s:3:"os ";s:1:"3";s:3:"la ";s:1:"4";s:3:"el ";s:1:"5";s:3:"es ";s:1:"6";s:3:" qu";s:1:"7";s:3:" co";s:1:"8";s:3:"e l";s:1:"9";s:3:"as ";s:2:"10";s:3:"que";s:2:"11";s:3:" el";s:2:"12";s:3:"ue ";s:2:"13";s:3:"en ";s:2:"14";s:3:"ent";s:2:"15";s:3:" en";s:2:"16";s:3:" se";s:2:"17";s:3:"nte";s:2:"18";s:3:"res";s:2:"19";s:3:"con";s:2:"20";s:3:"est";s:2:"21";s:3:" es";s:2:"22";s:3:"s d";s:2:"23";s:3:" lo";s:2:"24";s:3:" pr";s:2:"25";s:3:"los";s:2:"26";s:3:" y ";s:2:"27";s:3:"do ";s:2:"28";s:4:"ón ";s:2:"29";s:4:"ión";s:2:"30";s:3:" un";s:2:"31";s:4:"ció";s:2:"32";s:3:"del";s:2:"33";s:3:"o d";s:2:"34";s:3:" po";s:2:"35";s:3:"a d";s:2:"36";s:3:"aci";s:2:"37";s:3:"sta";s:2:"38";s:3:"te ";s:2:"39";s:3:"ado";s:2:"40";s:3:"pre";s:2:"41";s:3:"to ";s:2:"42";s:3:"par";s:2:"43";s:3:"a e";s:2:"44";s:3:"a l";s:2:"45";s:3:"ra ";s:2:"46";s:3:"al ";s:2:"47";s:3:"e e";s:2:"48";s:3:"se ";s:2:"49";s:3:"pro";s:2:"50";s:3:"ar ";s:2:"51";s:3:"ia ";s:2:"52";s:3:"o e";s:2:"53";s:3:" re";s:2:"54";s:3:"ida";s:2:"55";s:3:"dad";s:2:"56";s:3:"tra";s:2:"57";s:3:"por";s:2:"58";s:3:"s p";s:2:"59";s:3:" a ";s:2:"60";s:3:"a p";s:2:"61";s:3:"ara";s:2:"62";s:3:"cia";s:2:"63";s:3:" pa";s:2:"64";s:3:"com";s:2:"65";s:3:"no ";s:2:"66";s:3:" di";s:2:"67";s:3:" in";s:2:"68";s:3:"ien";s:2:"69";s:3:"n l";s:2:"70";s:3:"ad ";s:2:"71";s:3:"ant";s:2:"72";s:3:"e s";s:2:"73";s:3:"men";s:2:"74";s:3:"a c";s:2:"75";s:3:"on ";s:2:"76";s:3:"un ";s:2:"77";s:3:"las";s:2:"78";s:3:"nci";s:2:"79";s:3:" tr";s:2:"80";s:3:"cio";s:2:"81";s:3:"ier";s:2:"82";s:3:"nto";s:2:"83";s:3:"tiv";s:2:"84";s:3:"n d";s:2:"85";s:3:"n e";s:2:"86";s:3:"or ";s:2:"87";s:3:"s c";s:2:"88";s:3:"enc";s:2:"89";s:3:"ern";s:2:"90";s:3:"io ";s:2:"91";s:3:"a s";s:2:"92";s:3:"ici";s:2:"93";s:3:"s e";s:2:"94";s:3:" ma";s:2:"95";s:3:"dos";s:2:"96";s:3:"e a";s:2:"97";s:3:"e c";s:2:"98";s:3:"emp";s:2:"99";s:3:"ica";s:3:"100";s:3:"ivo";s:3:"101";s:3:"l p";s:3:"102";s:3:"n c";s:3:"103";s:3:"r e";s:3:"104";s:3:"ta ";s:3:"105";s:3:"ter";s:3:"106";s:3:"e d";s:3:"107";s:3:"esa";s:3:"108";s:3:"ez ";s:3:"109";s:3:"mpr";s:3:"110";s:3:"o a";s:3:"111";s:3:"s a";s:3:"112";s:3:" ca";s:3:"113";s:3:" su";s:3:"114";s:3:"ion";s:3:"115";s:3:" cu";s:3:"116";s:3:" ju";s:3:"117";s:3:"an ";s:3:"118";s:3:"da ";s:3:"119";s:3:"ene";s:3:"120";s:3:"ero";s:3:"121";s:3:"na ";s:3:"122";s:3:"rec";s:3:"123";s:3:"ro ";s:3:"124";s:3:"tar";s:3:"125";s:3:" al";s:3:"126";s:3:" an";s:3:"127";s:3:"bie";s:3:"128";s:3:"e p";s:3:"129";s:3:"er ";s:3:"130";s:3:"l c";s:3:"131";s:3:"n p";s:3:"132";s:3:"omp";s:3:"133";s:3:"ten";s:3:"134";s:3:" em";s:3:"135";s:3:"ist";s:3:"136";s:3:"nes";s:3:"137";s:3:"nta";s:3:"138";s:3:"o c";s:3:"139";s:3:"so ";s:3:"140";s:3:"tes";s:3:"141";s:3:"era";s:3:"142";s:3:"l d";s:3:"143";s:3:"l m";s:3:"144";s:3:"les";s:3:"145";s:3:"ntr";s:3:"146";s:3:"o s";s:3:"147";s:3:"ore";s:3:"148";s:4:"rá ";s:3:"149";s:3:"s q";s:3:"150";s:3:"s y";s:3:"151";s:3:"sto";s:3:"152";s:3:"a a";s:3:"153";s:3:"a r";s:3:"154";s:3:"ari";s:3:"155";s:3:"des";s:3:"156";s:3:"e q";s:3:"157";s:3:"ivi";s:3:"158";s:3:"lic";s:3:"159";s:3:"lo ";s:3:"160";s:3:"n a";s:3:"161";s:3:"one";s:3:"162";s:3:"ora";s:3:"163";s:3:"per";s:3:"164";s:3:"pue";s:3:"165";s:3:"r l";s:3:"166";s:3:"re ";s:3:"167";s:3:"ren";s:3:"168";s:3:"una";s:3:"169";s:4:"ía ";s:3:"170";s:3:"ada";s:3:"171";s:3:"cas";s:3:"172";s:3:"ere";s:3:"173";s:3:"ide";s:3:"174";s:3:"min";s:3:"175";s:3:"n s";s:3:"176";s:3:"ndo";s:3:"177";s:3:"ran";s:3:"178";s:3:"rno";s:3:"179";s:3:" ac";s:3:"180";s:3:" ex";s:3:"181";s:3:" go";s:3:"182";s:3:" no";s:3:"183";s:3:"a t";s:3:"184";s:3:"aba";s:3:"185";s:3:"ble";s:3:"186";s:3:"ece";s:3:"187";s:3:"ect";s:3:"188";s:3:"l a";s:3:"189";s:3:"l g";s:3:"190";s:3:"lid";s:3:"191";s:3:"nsi";s:3:"192";s:3:"ons";s:3:"193";s:3:"rac";s:3:"194";s:3:"rio";s:3:"195";s:3:"str";s:3:"196";s:3:"uer";s:3:"197";s:3:"ust";s:3:"198";s:3:" ha";s:3:"199";s:3:" le";s:3:"200";s:3:" mi";s:3:"201";s:3:" mu";s:3:"202";s:3:" ob";s:3:"203";s:3:" pe";s:3:"204";s:3:" pu";s:3:"205";s:3:" so";s:3:"206";s:3:"a i";s:3:"207";s:3:"ale";s:3:"208";s:3:"ca ";s:3:"209";s:3:"cto";s:3:"210";s:3:"e i";s:3:"211";s:3:"e u";s:3:"212";s:3:"eso";s:3:"213";s:3:"fer";s:3:"214";s:3:"fic";s:3:"215";s:3:"gob";s:3:"216";s:3:"jo ";s:3:"217";s:3:"ma ";s:3:"218";s:3:"mpl";s:3:"219";s:3:"o p";s:3:"220";s:3:"obi";s:3:"221";s:3:"s m";s:3:"222";s:3:"sa ";s:3:"223";s:3:"sep";s:3:"224";s:3:"ste";s:3:"225";s:3:"sti";s:3:"226";s:3:"tad";s:3:"227";s:3:"tod";s:3:"228";s:3:"y s";s:3:"229";s:3:" ci";s:3:"230";s:3:"and";s:3:"231";s:3:"ces";s:3:"232";s:4:"có ";s:3:"233";s:3:"dor";s:3:"234";s:3:"e m";s:3:"235";s:3:"eci";s:3:"236";s:3:"eco";s:3:"237";s:3:"esi";s:3:"238";s:3:"int";s:3:"239";s:3:"iza";s:3:"240";s:3:"l e";s:3:"241";s:3:"lar";s:3:"242";s:3:"mie";s:3:"243";s:3:"ner";s:3:"244";s:3:"orc";s:3:"245";s:3:"rci";s:3:"246";s:3:"ria";s:3:"247";s:3:"tic";s:3:"248";s:3:"tor";s:3:"249";s:3:" as";s:3:"250";s:3:" si";s:3:"251";s:3:"ce ";s:3:"252";s:3:"den";s:3:"253";s:3:"e r";s:3:"254";s:3:"e t";s:3:"255";s:3:"end";s:3:"256";s:3:"eri";s:3:"257";s:3:"esp";s:3:"258";s:3:"ial";s:3:"259";s:3:"ido";s:3:"260";s:3:"ina";s:3:"261";s:3:"inc";s:3:"262";s:3:"mit";s:3:"263";s:3:"o l";s:3:"264";s:3:"ome";s:3:"265";s:3:"pli";s:3:"266";s:3:"ras";s:3:"267";s:3:"s t";s:3:"268";s:3:"sid";s:3:"269";s:3:"sup";s:3:"270";s:3:"tab";s:3:"271";s:3:"uen";s:3:"272";s:3:"ues";s:3:"273";s:3:"ura";s:3:"274";s:3:"vo ";s:3:"275";s:3:"vor";s:3:"276";s:3:" sa";s:3:"277";s:3:" ti";s:3:"278";s:3:"abl";s:3:"279";s:3:"ali";s:3:"280";s:3:"aso";s:3:"281";s:3:"ast";s:3:"282";s:3:"cor";s:3:"283";s:3:"cti";s:3:"284";s:3:"cue";s:3:"285";s:3:"div";s:3:"286";s:3:"duc";s:3:"287";s:3:"ens";s:3:"288";s:3:"eti";s:3:"289";s:3:"imi";s:3:"290";s:3:"ini";s:3:"291";s:3:"lec";s:3:"292";s:3:"o q";s:3:"293";s:3:"oce";s:3:"294";s:3:"ort";s:3:"295";s:3:"ral";s:3:"296";s:3:"rma";s:3:"297";s:3:"roc";s:3:"298";s:3:"rod";s:3:"299";}s:7:"swahili";a:300:{s:3:" wa";s:1:"0";s:3:"wa ";s:1:"1";s:3:"a k";s:1:"2";s:3:"a m";s:1:"3";s:3:" ku";s:1:"4";s:3:" ya";s:1:"5";s:3:"a w";s:1:"6";s:3:"ya ";s:1:"7";s:3:"ni ";s:1:"8";s:3:" ma";s:1:"9";s:3:"ka ";s:2:"10";s:3:"a u";s:2:"11";s:3:"na ";s:2:"12";s:3:"za ";s:2:"13";s:3:"ia ";s:2:"14";s:3:" na";s:2:"15";s:3:"ika";s:2:"16";s:3:"ma ";s:2:"17";s:3:"ali";s:2:"18";s:3:"a n";s:2:"19";s:3:" am";s:2:"20";s:3:"ili";s:2:"21";s:3:"kwa";s:2:"22";s:3:" kw";s:2:"23";s:3:"ini";s:2:"24";s:3:" ha";s:2:"25";s:3:"ame";s:2:"26";s:3:"ana";s:2:"27";s:3:"i n";s:2:"28";s:3:" za";s:2:"29";s:3:"a h";s:2:"30";s:3:"ema";s:2:"31";s:3:"i m";s:2:"32";s:3:"i y";s:2:"33";s:3:"kuw";s:2:"34";s:3:"la ";s:2:"35";s:3:"o w";s:2:"36";s:3:"a y";s:2:"37";s:3:"ata";s:2:"38";s:3:"sem";s:2:"39";s:3:" la";s:2:"40";s:3:"ati";s:2:"41";s:3:"chi";s:2:"42";s:3:"i w";s:2:"43";s:3:"uwa";s:2:"44";s:3:"aki";s:2:"45";s:3:"li ";s:2:"46";s:3:"eka";s:2:"47";s:3:"ira";s:2:"48";s:3:" nc";s:2:"49";s:3:"a s";s:2:"50";s:3:"iki";s:2:"51";s:3:"kat";s:2:"52";s:3:"nch";s:2:"53";s:3:" ka";s:2:"54";s:3:" ki";s:2:"55";s:3:"a b";s:2:"56";s:3:"aji";s:2:"57";s:3:"amb";s:2:"58";s:3:"ra ";s:2:"59";s:3:"ri ";s:2:"60";s:3:"rik";s:2:"61";s:3:"ada";s:2:"62";s:3:"mat";s:2:"63";s:3:"mba";s:2:"64";s:3:"mes";s:2:"65";s:3:"yo ";s:2:"66";s:3:"zi ";s:2:"67";s:3:"da ";s:2:"68";s:3:"hi ";s:2:"69";s:3:"i k";s:2:"70";s:3:"ja ";s:2:"71";s:3:"kut";s:2:"72";s:3:"tek";s:2:"73";s:3:"wan";s:2:"74";s:3:" bi";s:2:"75";s:3:"a a";s:2:"76";s:3:"aka";s:2:"77";s:3:"ao ";s:2:"78";s:3:"asi";s:2:"79";s:3:"cha";s:2:"80";s:3:"ese";s:2:"81";s:3:"eza";s:2:"82";s:3:"ke ";s:2:"83";s:3:"moj";s:2:"84";s:3:"oja";s:2:"85";s:3:" hi";s:2:"86";s:3:"a z";s:2:"87";s:3:"end";s:2:"88";s:3:"ha ";s:2:"89";s:3:"ji ";s:2:"90";s:3:"mu ";s:2:"91";s:3:"shi";s:2:"92";s:3:"wat";s:2:"93";s:3:" bw";s:2:"94";s:3:"ake";s:2:"95";s:3:"ara";s:2:"96";s:3:"bw ";s:2:"97";s:3:"i h";s:2:"98";s:3:"imb";s:2:"99";s:3:"tik";s:3:"100";s:3:"wak";s:3:"101";s:3:"wal";s:3:"102";s:3:" hu";s:3:"103";s:3:" mi";s:3:"104";s:3:" mk";s:3:"105";s:3:" ni";s:3:"106";s:3:" ra";s:3:"107";s:3:" um";s:3:"108";s:3:"a l";s:3:"109";s:3:"ate";s:3:"110";s:3:"esh";s:3:"111";s:3:"ina";s:3:"112";s:3:"ish";s:3:"113";s:3:"kim";s:3:"114";s:3:"o k";s:3:"115";s:3:" ir";s:3:"116";s:3:"a i";s:3:"117";s:3:"ala";s:3:"118";s:3:"ani";s:3:"119";s:3:"aq ";s:3:"120";s:3:"azi";s:3:"121";s:3:"hin";s:3:"122";s:3:"i a";s:3:"123";s:3:"idi";s:3:"124";s:3:"ima";s:3:"125";s:3:"ita";s:3:"126";s:3:"rai";s:3:"127";s:3:"raq";s:3:"128";s:3:"sha";s:3:"129";s:3:" ms";s:3:"130";s:3:" se";s:3:"131";s:3:"afr";s:3:"132";s:3:"ama";s:3:"133";s:3:"ano";s:3:"134";s:3:"ea ";s:3:"135";s:3:"ele";s:3:"136";s:3:"fri";s:3:"137";s:3:"go ";s:3:"138";s:3:"i i";s:3:"139";s:3:"ifa";s:3:"140";s:3:"iwa";s:3:"141";s:3:"iyo";s:3:"142";s:3:"kus";s:3:"143";s:3:"lia";s:3:"144";s:3:"lio";s:3:"145";s:3:"maj";s:3:"146";s:3:"mku";s:3:"147";s:3:"no ";s:3:"148";s:3:"tan";s:3:"149";s:3:"uli";s:3:"150";s:3:"uta";s:3:"151";s:3:"wen";s:3:"152";s:3:" al";s:3:"153";s:3:"a j";s:3:"154";s:3:"aad";s:3:"155";s:3:"aid";s:3:"156";s:3:"ari";s:3:"157";s:3:"awa";s:3:"158";s:3:"ba ";s:3:"159";s:3:"fa ";s:3:"160";s:3:"nde";s:3:"161";s:3:"nge";s:3:"162";s:3:"nya";s:3:"163";s:3:"o y";s:3:"164";s:3:"u w";s:3:"165";s:3:"ua ";s:3:"166";s:3:"umo";s:3:"167";s:3:"waz";s:3:"168";s:3:"ye ";s:3:"169";s:3:" ut";s:3:"170";s:3:" vi";s:3:"171";s:3:"a d";s:3:"172";s:3:"a t";s:3:"173";s:3:"aif";s:3:"174";s:3:"di ";s:3:"175";s:3:"ere";s:3:"176";s:3:"ing";s:3:"177";s:3:"kin";s:3:"178";s:3:"nda";s:3:"179";s:3:"o n";s:3:"180";s:3:"oa ";s:3:"181";s:3:"tai";s:3:"182";s:3:"toa";s:3:"183";s:3:"usa";s:3:"184";s:3:"uto";s:3:"185";s:3:"was";s:3:"186";s:3:"yak";s:3:"187";s:3:"zo ";s:3:"188";s:3:" ji";s:3:"189";s:3:" mw";s:3:"190";s:3:"a p";s:3:"191";s:3:"aia";s:3:"192";s:3:"amu";s:3:"193";s:3:"ang";s:3:"194";s:3:"bik";s:3:"195";s:3:"bo ";s:3:"196";s:3:"del";s:3:"197";s:3:"e w";s:3:"198";s:3:"ene";s:3:"199";s:3:"eng";s:3:"200";s:3:"ich";s:3:"201";s:3:"iri";s:3:"202";s:3:"iti";s:3:"203";s:3:"ito";s:3:"204";s:3:"ki ";s:3:"205";s:3:"kir";s:3:"206";s:3:"ko ";s:3:"207";s:3:"kuu";s:3:"208";s:3:"mar";s:3:"209";s:3:"mbo";s:3:"210";s:3:"mil";s:3:"211";s:3:"ngi";s:3:"212";s:3:"ngo";s:3:"213";s:3:"o l";s:3:"214";s:3:"ong";s:3:"215";s:3:"si ";s:3:"216";s:3:"ta ";s:3:"217";s:3:"tak";s:3:"218";s:3:"u y";s:3:"219";s:3:"umu";s:3:"220";s:3:"usi";s:3:"221";s:3:"uu ";s:3:"222";s:3:"wam";s:3:"223";s:3:" af";s:3:"224";s:3:" ba";s:3:"225";s:3:" li";s:3:"226";s:3:" si";s:3:"227";s:3:" zi";s:3:"228";s:3:"a v";s:3:"229";s:3:"ami";s:3:"230";s:3:"atu";s:3:"231";s:3:"awi";s:3:"232";s:3:"eri";s:3:"233";s:3:"fan";s:3:"234";s:3:"fur";s:3:"235";s:3:"ger";s:3:"236";s:3:"i z";s:3:"237";s:3:"isi";s:3:"238";s:3:"izo";s:3:"239";s:3:"lea";s:3:"240";s:3:"mbi";s:3:"241";s:3:"mwa";s:3:"242";s:3:"nye";s:3:"243";s:3:"o h";s:3:"244";s:3:"o m";s:3:"245";s:3:"oni";s:3:"246";s:3:"rez";s:3:"247";s:3:"saa";s:3:"248";s:3:"ser";s:3:"249";s:3:"sin";s:3:"250";s:3:"tat";s:3:"251";s:3:"tis";s:3:"252";s:3:"tu ";s:3:"253";s:3:"uin";s:3:"254";s:3:"uki";s:3:"255";s:3:"ur ";s:3:"256";s:3:"wi ";s:3:"257";s:3:"yar";s:3:"258";s:3:" da";s:3:"259";s:3:" en";s:3:"260";s:3:" mp";s:3:"261";s:3:" ny";s:3:"262";s:3:" ta";s:3:"263";s:3:" ul";s:3:"264";s:3:" we";s:3:"265";s:3:"a c";s:3:"266";s:3:"a f";s:3:"267";s:3:"ais";s:3:"268";s:3:"apo";s:3:"269";s:3:"ayo";s:3:"270";s:3:"bar";s:3:"271";s:3:"dhi";s:3:"272";s:3:"e a";s:3:"273";s:3:"eke";s:3:"274";s:3:"eny";s:3:"275";s:3:"eon";s:3:"276";s:3:"hai";s:3:"277";s:3:"han";s:3:"278";s:3:"hiy";s:3:"279";s:3:"hur";s:3:"280";s:3:"i s";s:3:"281";s:3:"imw";s:3:"282";s:3:"kal";s:3:"283";s:3:"kwe";s:3:"284";s:3:"lak";s:3:"285";s:3:"lam";s:3:"286";s:3:"mak";s:3:"287";s:3:"msa";s:3:"288";s:3:"ne ";s:3:"289";s:3:"ngu";s:3:"290";s:3:"ru ";s:3:"291";s:3:"sal";s:3:"292";s:3:"swa";s:3:"293";s:3:"te ";s:3:"294";s:3:"ti ";s:3:"295";s:3:"uku";s:3:"296";s:3:"uma";s:3:"297";s:3:"una";s:3:"298";s:3:"uru";s:3:"299";}s:7:"swedish";a:300:{s:3:"en ";s:1:"0";s:3:" de";s:1:"1";s:3:"et ";s:1:"2";s:3:"er ";s:1:"3";s:3:"tt ";s:1:"4";s:3:"om ";s:1:"5";s:4:"för";s:1:"6";s:3:"ar ";s:1:"7";s:3:"de ";s:1:"8";s:3:"att";s:1:"9";s:4:" fö";s:2:"10";s:3:"ing";s:2:"11";s:3:" in";s:2:"12";s:3:" at";s:2:"13";s:3:" i ";s:2:"14";s:3:"det";s:2:"15";s:3:"ch ";s:2:"16";s:3:"an ";s:2:"17";s:3:"gen";s:2:"18";s:3:" an";s:2:"19";s:3:"t s";s:2:"20";s:3:"som";s:2:"21";s:3:"te ";s:2:"22";s:3:" oc";s:2:"23";s:3:"ter";s:2:"24";s:3:" ha";s:2:"25";s:3:"lle";s:2:"26";s:3:"och";s:2:"27";s:3:" sk";s:2:"28";s:3:" so";s:2:"29";s:3:"ra ";s:2:"30";s:3:"r a";s:2:"31";s:3:" me";s:2:"32";s:3:"var";s:2:"33";s:3:"nde";s:2:"34";s:4:"är ";s:2:"35";s:3:" ko";s:2:"36";s:3:"on ";s:2:"37";s:3:"ans";s:2:"38";s:3:"int";s:2:"39";s:3:"n s";s:2:"40";s:3:"na ";s:2:"41";s:3:" en";s:2:"42";s:3:" fr";s:2:"43";s:4:" pÃ¥";s:2:"44";s:3:" st";s:2:"45";s:3:" va";s:2:"46";s:3:"and";s:2:"47";s:3:"nte";s:2:"48";s:4:"pÃ¥ ";s:2:"49";s:3:"ska";s:2:"50";s:3:"ta ";s:2:"51";s:3:" vi";s:2:"52";s:3:"der";s:2:"53";s:4:"äll";s:2:"54";s:4:"örs";s:2:"55";s:3:" om";s:2:"56";s:3:"da ";s:2:"57";s:3:"kri";s:2:"58";s:3:"ka ";s:2:"59";s:3:"nst";s:2:"60";s:3:" ho";s:2:"61";s:3:"as ";s:2:"62";s:4:"stä";s:2:"63";s:3:"r d";s:2:"64";s:3:"t f";s:2:"65";s:3:"upp";s:2:"66";s:3:" be";s:2:"67";s:3:"nge";s:2:"68";s:3:"r s";s:2:"69";s:3:"tal";s:2:"70";s:4:"täl";s:2:"71";s:4:"ör ";s:2:"72";s:3:" av";s:2:"73";s:3:"ger";s:2:"74";s:3:"ill";s:2:"75";s:3:"ng ";s:2:"76";s:3:"e s";s:2:"77";s:3:"ekt";s:2:"78";s:3:"ade";s:2:"79";s:3:"era";s:2:"80";s:3:"ers";s:2:"81";s:3:"har";s:2:"82";s:3:"ll ";s:2:"83";s:3:"lld";s:2:"84";s:3:"rin";s:2:"85";s:3:"rna";s:2:"86";s:4:"säk";s:2:"87";s:3:"und";s:2:"88";s:3:"inn";s:2:"89";s:3:"lig";s:2:"90";s:3:"ns ";s:2:"91";s:3:" ma";s:2:"92";s:3:" pr";s:2:"93";s:3:" up";s:2:"94";s:3:"age";s:2:"95";s:3:"av ";s:2:"96";s:3:"iva";s:2:"97";s:3:"kti";s:2:"98";s:3:"lda";s:2:"99";s:3:"orn";s:3:"100";s:3:"son";s:3:"101";s:3:"ts ";s:3:"102";s:3:"tta";s:3:"103";s:4:"äkr";s:3:"104";s:3:" sj";s:3:"105";s:3:" ti";s:3:"106";s:3:"avt";s:3:"107";s:3:"ber";s:3:"108";s:3:"els";s:3:"109";s:3:"eta";s:3:"110";s:3:"kol";s:3:"111";s:3:"men";s:3:"112";s:3:"n d";s:3:"113";s:3:"t k";s:3:"114";s:3:"vta";s:3:"115";s:4:"Ã¥r ";s:3:"116";s:3:"juk";s:3:"117";s:3:"man";s:3:"118";s:3:"n f";s:3:"119";s:3:"nin";s:3:"120";s:3:"r i";s:3:"121";s:4:"rsä";s:3:"122";s:3:"sju";s:3:"123";s:3:"sso";s:3:"124";s:4:" är";s:3:"125";s:3:"a s";s:3:"126";s:3:"ach";s:3:"127";s:3:"ag ";s:3:"128";s:3:"bac";s:3:"129";s:3:"den";s:3:"130";s:3:"ett";s:3:"131";s:3:"fte";s:3:"132";s:3:"hor";s:3:"133";s:3:"nba";s:3:"134";s:3:"oll";s:3:"135";s:3:"rnb";s:3:"136";s:3:"ste";s:3:"137";s:3:"til";s:3:"138";s:3:" ef";s:3:"139";s:3:" si";s:3:"140";s:3:"a a";s:3:"141";s:3:"e h";s:3:"142";s:3:"ed ";s:3:"143";s:3:"eft";s:3:"144";s:3:"ga ";s:3:"145";s:3:"ig ";s:3:"146";s:3:"it ";s:3:"147";s:3:"ler";s:3:"148";s:3:"med";s:3:"149";s:3:"n i";s:3:"150";s:3:"nd ";s:3:"151";s:4:"sÃ¥ ";s:3:"152";s:3:"tiv";s:3:"153";s:3:" bl";s:3:"154";s:3:" et";s:3:"155";s:3:" fi";s:3:"156";s:4:" sä";s:3:"157";s:3:"at ";s:3:"158";s:3:"des";s:3:"159";s:3:"e a";s:3:"160";s:3:"gar";s:3:"161";s:3:"get";s:3:"162";s:3:"lan";s:3:"163";s:3:"lss";s:3:"164";s:3:"ost";s:3:"165";s:3:"r b";s:3:"166";s:3:"r e";s:3:"167";s:3:"re ";s:3:"168";s:3:"ret";s:3:"169";s:3:"sta";s:3:"170";s:3:"t i";s:3:"171";s:3:" ge";s:3:"172";s:3:" he";s:3:"173";s:3:" re";s:3:"174";s:3:"a f";s:3:"175";s:3:"all";s:3:"176";s:3:"bos";s:3:"177";s:3:"ets";s:3:"178";s:3:"lek";s:3:"179";s:3:"let";s:3:"180";s:3:"ner";s:3:"181";s:3:"nna";s:3:"182";s:3:"nne";s:3:"183";s:3:"r f";s:3:"184";s:3:"rit";s:3:"185";s:3:"s s";s:3:"186";s:3:"sen";s:3:"187";s:3:"sto";s:3:"188";s:3:"tor";s:3:"189";s:3:"vav";s:3:"190";s:3:"ygg";s:3:"191";s:3:" ka";s:3:"192";s:4:" sÃ¥";s:3:"193";s:3:" tr";s:3:"194";s:3:" ut";s:3:"195";s:3:"ad ";s:3:"196";s:3:"al ";s:3:"197";s:3:"are";s:3:"198";s:3:"e o";s:3:"199";s:3:"gon";s:3:"200";s:3:"kom";s:3:"201";s:3:"n a";s:3:"202";s:3:"n h";s:3:"203";s:3:"nga";s:3:"204";s:3:"r h";s:3:"205";s:3:"ren";s:3:"206";s:3:"t d";s:3:"207";s:3:"tag";s:3:"208";s:3:"tar";s:3:"209";s:3:"tre";s:3:"210";s:4:"ätt";s:3:"211";s:4:" fÃ¥";s:3:"212";s:4:" hä";s:3:"213";s:3:" se";s:3:"214";s:3:"a d";s:3:"215";s:3:"a i";s:3:"216";s:3:"a p";s:3:"217";s:3:"ale";s:3:"218";s:3:"ann";s:3:"219";s:3:"ara";s:3:"220";s:3:"byg";s:3:"221";s:3:"gt ";s:3:"222";s:3:"han";s:3:"223";s:3:"igt";s:3:"224";s:3:"kan";s:3:"225";s:3:"la ";s:3:"226";s:3:"n o";s:3:"227";s:3:"nom";s:3:"228";s:3:"nsk";s:3:"229";s:3:"omm";s:3:"230";s:3:"r k";s:3:"231";s:3:"r p";s:3:"232";s:3:"r v";s:3:"233";s:3:"s f";s:3:"234";s:3:"s k";s:3:"235";s:3:"t a";s:3:"236";s:3:"t p";s:3:"237";s:3:"ver";s:3:"238";s:3:" bo";s:3:"239";s:3:" br";s:3:"240";s:3:" ku";s:3:"241";s:4:" nÃ¥";s:3:"242";s:3:"a b";s:3:"243";s:3:"a e";s:3:"244";s:3:"del";s:3:"245";s:3:"ens";s:3:"246";s:3:"es ";s:3:"247";s:3:"fin";s:3:"248";s:3:"ige";s:3:"249";s:3:"m s";s:3:"250";s:3:"n p";s:3:"251";s:4:"nÃ¥g";s:3:"252";s:3:"or ";s:3:"253";s:3:"r o";s:3:"254";s:3:"rbe";s:3:"255";s:3:"rs ";s:3:"256";s:3:"rt ";s:3:"257";s:3:"s a";s:3:"258";s:3:"s n";s:3:"259";s:3:"skr";s:3:"260";s:3:"t o";s:3:"261";s:3:"ten";s:3:"262";s:3:"tio";s:3:"263";s:3:"ven";s:3:"264";s:3:" al";s:3:"265";s:3:" ja";s:3:"266";s:3:" p ";s:3:"267";s:3:" r ";s:3:"268";s:3:" sa";s:3:"269";s:3:"a h";s:3:"270";s:3:"bet";s:3:"271";s:3:"cke";s:3:"272";s:3:"dra";s:3:"273";s:3:"e f";s:3:"274";s:3:"e i";s:3:"275";s:3:"eda";s:3:"276";s:3:"eno";s:3:"277";s:4:"erä";s:3:"278";s:3:"ess";s:3:"279";s:3:"ion";s:3:"280";s:3:"jag";s:3:"281";s:3:"m f";s:3:"282";s:3:"ne ";s:3:"283";s:3:"nns";s:3:"284";s:3:"pro";s:3:"285";s:3:"r t";s:3:"286";s:3:"rar";s:3:"287";s:3:"riv";s:3:"288";s:4:"rät";s:3:"289";s:3:"t e";s:3:"290";s:3:"t t";s:3:"291";s:3:"ust";s:3:"292";s:3:"vad";s:3:"293";s:4:"öre";s:3:"294";s:3:" ar";s:3:"295";s:3:" by";s:3:"296";s:3:" kr";s:3:"297";s:3:" mi";s:3:"298";s:3:"arb";s:3:"299";}s:7:"tagalog";a:300:{s:3:"ng ";s:1:"0";s:3:"ang";s:1:"1";s:3:" na";s:1:"2";s:3:" sa";s:1:"3";s:3:"an ";s:1:"4";s:3:"nan";s:1:"5";s:3:"sa ";s:1:"6";s:3:"na ";s:1:"7";s:3:" ma";s:1:"8";s:3:" ca";s:1:"9";s:3:"ay ";s:2:"10";s:3:"n g";s:2:"11";s:3:" an";s:2:"12";s:3:"ong";s:2:"13";s:3:" ga";s:2:"14";s:3:"at ";s:2:"15";s:3:" pa";s:2:"16";s:3:"ala";s:2:"17";s:3:" si";s:2:"18";s:3:"a n";s:2:"19";s:3:"ga ";s:2:"20";s:3:"g n";s:2:"21";s:3:"g m";s:2:"22";s:3:"ito";s:2:"23";s:3:"g c";s:2:"24";s:3:"man";s:2:"25";s:3:"san";s:2:"26";s:3:"g s";s:2:"27";s:3:"ing";s:2:"28";s:3:"to ";s:2:"29";s:3:"ila";s:2:"30";s:3:"ina";s:2:"31";s:3:" di";s:2:"32";s:3:" ta";s:2:"33";s:3:"aga";s:2:"34";s:3:"iya";s:2:"35";s:3:"aca";s:2:"36";s:3:"g t";s:2:"37";s:3:" at";s:2:"38";s:3:"aya";s:2:"39";s:3:"ama";s:2:"40";s:3:"lan";s:2:"41";s:3:"a a";s:2:"42";s:3:"qui";s:2:"43";s:3:"a c";s:2:"44";s:3:"a s";s:2:"45";s:3:"nag";s:2:"46";s:3:" ba";s:2:"47";s:3:"g i";s:2:"48";s:3:"tan";s:2:"49";s:3:"'t ";s:2:"50";s:3:" cu";s:2:"51";s:3:"aua";s:2:"52";s:3:"g p";s:2:"53";s:3:" ni";s:2:"54";s:3:"os ";s:2:"55";s:3:"'y ";s:2:"56";s:3:"a m";s:2:"57";s:3:" n ";s:2:"58";s:3:"la ";s:2:"59";s:3:" la";s:2:"60";s:3:"o n";s:2:"61";s:3:"yan";s:2:"62";s:3:" ay";s:2:"63";s:3:"usa";s:2:"64";s:3:"cay";s:2:"65";s:3:"on ";s:2:"66";s:3:"ya ";s:2:"67";s:3:" it";s:2:"68";s:3:"al ";s:2:"69";s:3:"apa";s:2:"70";s:3:"ata";s:2:"71";s:3:"t n";s:2:"72";s:3:"uan";s:2:"73";s:3:"aha";s:2:"74";s:3:"asa";s:2:"75";s:3:"pag";s:2:"76";s:3:" gu";s:2:"77";s:3:"g l";s:2:"78";s:3:"di ";s:2:"79";s:3:"mag";s:2:"80";s:3:"aba";s:2:"81";s:3:"g a";s:2:"82";s:3:"ara";s:2:"83";s:3:"a p";s:2:"84";s:3:"in ";s:2:"85";s:3:"ana";s:2:"86";s:3:"it ";s:2:"87";s:3:"si ";s:2:"88";s:3:"cus";s:2:"89";s:3:"g b";s:2:"90";s:3:"uin";s:2:"91";s:3:"a t";s:2:"92";s:3:"as ";s:2:"93";s:3:"n n";s:2:"94";s:3:"hin";s:2:"95";s:3:" hi";s:2:"96";s:3:"a't";s:2:"97";s:3:"ali";s:2:"98";s:3:" bu";s:2:"99";s:3:"gan";s:3:"100";s:3:"uma";s:3:"101";s:3:"a d";s:3:"102";s:3:"agc";s:3:"103";s:3:"aqu";s:3:"104";s:3:"g d";s:3:"105";s:3:" tu";s:3:"106";s:3:"aon";s:3:"107";s:3:"ari";s:3:"108";s:3:"cas";s:3:"109";s:3:"i n";s:3:"110";s:3:"niy";s:3:"111";s:3:"pin";s:3:"112";s:3:"a i";s:3:"113";s:3:"gca";s:3:"114";s:3:"siy";s:3:"115";s:3:"a'y";s:3:"116";s:3:"yao";s:3:"117";s:3:"ag ";s:3:"118";s:3:"ca ";s:3:"119";s:3:"han";s:3:"120";s:3:"ili";s:3:"121";s:3:"pan";s:3:"122";s:3:"sin";s:3:"123";s:3:"ual";s:3:"124";s:3:"n s";s:3:"125";s:3:"nam";s:3:"126";s:3:" lu";s:3:"127";s:3:"can";s:3:"128";s:3:"dit";s:3:"129";s:3:"gui";s:3:"130";s:3:"y n";s:3:"131";s:3:"gal";s:3:"132";s:3:"hat";s:3:"133";s:3:"nal";s:3:"134";s:3:" is";s:3:"135";s:3:"bag";s:3:"136";s:3:"fra";s:3:"137";s:3:" fr";s:3:"138";s:3:" su";s:3:"139";s:3:"a l";s:3:"140";s:3:" co";s:3:"141";s:3:"ani";s:3:"142";s:3:" bi";s:3:"143";s:3:" da";s:3:"144";s:3:"alo";s:3:"145";s:3:"isa";s:3:"146";s:3:"ita";s:3:"147";s:3:"may";s:3:"148";s:3:"o s";s:3:"149";s:3:"sil";s:3:"150";s:3:"una";s:3:"151";s:3:" in";s:3:"152";s:3:" pi";s:3:"153";s:3:"l n";s:3:"154";s:3:"nil";s:3:"155";s:3:"o a";s:3:"156";s:3:"pat";s:3:"157";s:3:"sac";s:3:"158";s:3:"t s";s:3:"159";s:3:" ua";s:3:"160";s:3:"agu";s:3:"161";s:3:"ail";s:3:"162";s:3:"bin";s:3:"163";s:3:"dal";s:3:"164";s:3:"g h";s:3:"165";s:3:"ndi";s:3:"166";s:3:"oon";s:3:"167";s:3:"ua ";s:3:"168";s:3:" ha";s:3:"169";s:3:"ind";s:3:"170";s:3:"ran";s:3:"171";s:3:"s n";s:3:"172";s:3:"tin";s:3:"173";s:3:"ulo";s:3:"174";s:3:"eng";s:3:"175";s:3:"g f";s:3:"176";s:3:"ini";s:3:"177";s:3:"lah";s:3:"178";s:3:"lo ";s:3:"179";s:3:"rai";s:3:"180";s:3:"rin";s:3:"181";s:3:"ton";s:3:"182";s:3:"g u";s:3:"183";s:3:"inu";s:3:"184";s:3:"lon";s:3:"185";s:3:"o'y";s:3:"186";s:3:"t a";s:3:"187";s:3:" ar";s:3:"188";s:3:"a b";s:3:"189";s:3:"ad ";s:3:"190";s:3:"bay";s:3:"191";s:3:"cal";s:3:"192";s:3:"gya";s:3:"193";s:3:"ile";s:3:"194";s:3:"mat";s:3:"195";s:3:"n a";s:3:"196";s:3:"pau";s:3:"197";s:3:"ra ";s:3:"198";s:3:"tay";s:3:"199";s:3:"y m";s:3:"200";s:3:"ant";s:3:"201";s:3:"ban";s:3:"202";s:3:"i m";s:3:"203";s:3:"nas";s:3:"204";s:3:"nay";s:3:"205";s:3:"no ";s:3:"206";s:3:"sti";s:3:"207";s:3:" ti";s:3:"208";s:3:"ags";s:3:"209";s:3:"g g";s:3:"210";s:3:"ta ";s:3:"211";s:3:"uit";s:3:"212";s:3:"uno";s:3:"213";s:3:" ib";s:3:"214";s:3:" ya";s:3:"215";s:3:"a u";s:3:"216";s:3:"abi";s:3:"217";s:3:"ati";s:3:"218";s:3:"cap";s:3:"219";s:3:"ig ";s:3:"220";s:3:"is ";s:3:"221";s:3:"la'";s:3:"222";s:3:" do";s:3:"223";s:3:" pu";s:3:"224";s:3:"api";s:3:"225";s:3:"ayo";s:3:"226";s:3:"gos";s:3:"227";s:3:"gul";s:3:"228";s:3:"lal";s:3:"229";s:3:"tag";s:3:"230";s:3:"til";s:3:"231";s:3:"tun";s:3:"232";s:3:"y c";s:3:"233";s:3:"y s";s:3:"234";s:3:"yon";s:3:"235";s:3:"ano";s:3:"236";s:3:"bur";s:3:"237";s:3:"iba";s:3:"238";s:3:"isi";s:3:"239";s:3:"lam";s:3:"240";s:3:"nac";s:3:"241";s:3:"nat";s:3:"242";s:3:"ni ";s:3:"243";s:3:"nto";s:3:"244";s:3:"od ";s:3:"245";s:3:"pa ";s:3:"246";s:3:"rgo";s:3:"247";s:3:"urg";s:3:"248";s:3:" m ";s:3:"249";s:3:"adr";s:3:"250";s:3:"ast";s:3:"251";s:3:"cag";s:3:"252";s:3:"gay";s:3:"253";s:3:"gsi";s:3:"254";s:3:"i p";s:3:"255";s:3:"ino";s:3:"256";s:3:"len";s:3:"257";s:3:"lin";s:3:"258";s:3:"m g";s:3:"259";s:3:"mar";s:3:"260";s:3:"nah";s:3:"261";s:3:"to'";s:3:"262";s:3:" de";s:3:"263";s:3:"a h";s:3:"264";s:3:"cat";s:3:"265";s:3:"cau";s:3:"266";s:3:"con";s:3:"267";s:3:"iqu";s:3:"268";s:3:"lac";s:3:"269";s:3:"mab";s:3:"270";s:3:"min";s:3:"271";s:3:"og ";s:3:"272";s:3:"par";s:3:"273";s:3:"sal";s:3:"274";s:3:" za";s:3:"275";s:3:"ao ";s:3:"276";s:3:"doo";s:3:"277";s:3:"ipi";s:3:"278";s:3:"nod";s:3:"279";s:3:"nte";s:3:"280";s:3:"uha";s:3:"281";s:3:"ula";s:3:"282";s:3:" re";s:3:"283";s:3:"ill";s:3:"284";s:3:"lit";s:3:"285";s:3:"mac";s:3:"286";s:3:"nit";s:3:"287";s:3:"o't";s:3:"288";s:3:"or ";s:3:"289";s:3:"ora";s:3:"290";s:3:"sum";s:3:"291";s:3:"y p";s:3:"292";s:3:" al";s:3:"293";s:3:" mi";s:3:"294";s:3:" um";s:3:"295";s:3:"aco";s:3:"296";s:3:"ada";s:3:"297";s:3:"agd";s:3:"298";s:3:"cab";s:3:"299";}s:7:"turkish";a:300:{s:3:"lar";s:1:"0";s:3:"en ";s:1:"1";s:3:"ler";s:1:"2";s:3:"an ";s:1:"3";s:3:"in ";s:1:"4";s:3:" bi";s:1:"5";s:3:" ya";s:1:"6";s:3:"eri";s:1:"7";s:3:"de ";s:1:"8";s:3:" ka";s:1:"9";s:3:"ir ";s:2:"10";s:4:"arı";s:2:"11";s:3:" ba";s:2:"12";s:3:" de";s:2:"13";s:3:" ha";s:2:"14";s:4:"ın ";s:2:"15";s:3:"ara";s:2:"16";s:3:"bir";s:2:"17";s:3:" ve";s:2:"18";s:3:" sa";s:2:"19";s:3:"ile";s:2:"20";s:3:"le ";s:2:"21";s:3:"nde";s:2:"22";s:3:"da ";s:2:"23";s:3:" bu";s:2:"24";s:3:"ana";s:2:"25";s:3:"ini";s:2:"26";s:5:"ını";s:2:"27";s:3:"er ";s:2:"28";s:3:"ve ";s:2:"29";s:4:" yı";s:2:"30";s:3:"lma";s:2:"31";s:4:"yıl";s:2:"32";s:3:" ol";s:2:"33";s:3:"ar ";s:2:"34";s:3:"n b";s:2:"35";s:3:"nda";s:2:"36";s:3:"aya";s:2:"37";s:3:"li ";s:2:"38";s:4:"ası";s:2:"39";s:3:" ge";s:2:"40";s:3:"ind";s:2:"41";s:3:"n k";s:2:"42";s:3:"esi";s:2:"43";s:3:"lan";s:2:"44";s:3:"nla";s:2:"45";s:3:"ak ";s:2:"46";s:4:"anı";s:2:"47";s:3:"eni";s:2:"48";s:3:"ni ";s:2:"49";s:4:"nı ";s:2:"50";s:4:"rın";s:2:"51";s:3:"san";s:2:"52";s:3:" ko";s:2:"53";s:3:" ye";s:2:"54";s:3:"maz";s:2:"55";s:4:"baÅŸ";s:2:"56";s:3:"ili";s:2:"57";s:3:"rin";s:2:"58";s:4:"alı";s:2:"59";s:3:"az ";s:2:"60";s:3:"hal";s:2:"61";s:4:"ınd";s:2:"62";s:3:" da";s:2:"63";s:4:" gü";s:2:"64";s:3:"ele";s:2:"65";s:4:"ılm";s:2:"66";s:6:"ığı";s:2:"67";s:3:"eki";s:2:"68";s:4:"gün";s:2:"69";s:3:"i b";s:2:"70";s:4:"içi";s:2:"71";s:3:"den";s:2:"72";s:3:"kar";s:2:"73";s:3:"si ";s:2:"74";s:3:" il";s:2:"75";s:3:"e y";s:2:"76";s:3:"na ";s:2:"77";s:3:"yor";s:2:"78";s:3:"ek ";s:2:"79";s:3:"n s";s:2:"80";s:4:" iç";s:2:"81";s:3:"bu ";s:2:"82";s:3:"e b";s:2:"83";s:3:"im ";s:2:"84";s:3:"ki ";s:2:"85";s:3:"len";s:2:"86";s:3:"ri ";s:2:"87";s:4:"sın";s:2:"88";s:3:" so";s:2:"89";s:4:"ün ";s:2:"90";s:3:" ta";s:2:"91";s:3:"nin";s:2:"92";s:4:"iÄŸi";s:2:"93";s:3:"tan";s:2:"94";s:3:"yan";s:2:"95";s:3:" si";s:2:"96";s:3:"nat";s:2:"97";s:4:"nın";s:2:"98";s:3:"kan";s:2:"99";s:4:"rı ";s:3:"100";s:4:"çin";s:3:"101";s:5:"ğı ";s:3:"102";s:3:"eli";s:3:"103";s:3:"n a";s:3:"104";s:4:"ır ";s:3:"105";s:3:" an";s:3:"106";s:3:"ine";s:3:"107";s:3:"n y";s:3:"108";s:3:"ola";s:3:"109";s:3:" ar";s:3:"110";s:3:"al ";s:3:"111";s:3:"e s";s:3:"112";s:3:"lik";s:3:"113";s:3:"n d";s:3:"114";s:3:"sin";s:3:"115";s:3:" al";s:3:"116";s:4:" dü";s:3:"117";s:3:"anl";s:3:"118";s:3:"ne ";s:3:"119";s:3:"ya ";s:3:"120";s:4:"ım ";s:3:"121";s:4:"ına";s:3:"122";s:3:" be";s:3:"123";s:3:"ada";s:3:"124";s:3:"ala";s:3:"125";s:3:"ama";s:3:"126";s:3:"ilm";s:3:"127";s:3:"or ";s:3:"128";s:4:"sı ";s:3:"129";s:3:"yen";s:3:"130";s:3:" me";s:3:"131";s:4:"atı";s:3:"132";s:3:"di ";s:3:"133";s:3:"eti";s:3:"134";s:3:"ken";s:3:"135";s:3:"la ";s:3:"136";s:4:"lı ";s:3:"137";s:3:"oru";s:3:"138";s:4:" gö";s:3:"139";s:3:" in";s:3:"140";s:3:"and";s:3:"141";s:3:"e d";s:3:"142";s:3:"men";s:3:"143";s:3:"un ";s:3:"144";s:4:"öne";s:3:"145";s:3:"a d";s:3:"146";s:3:"at ";s:3:"147";s:3:"e a";s:3:"148";s:3:"e g";s:3:"149";s:3:"yar";s:3:"150";s:3:" ku";s:3:"151";s:4:"ayı";s:3:"152";s:3:"dan";s:3:"153";s:3:"edi";s:3:"154";s:3:"iri";s:3:"155";s:5:"ünü";s:3:"156";s:4:"ÄŸi ";s:3:"157";s:5:"ılı";s:3:"158";s:3:"eme";s:3:"159";s:4:"eÄŸi";s:3:"160";s:3:"i k";s:3:"161";s:3:"i y";s:3:"162";s:4:"ıla";s:3:"163";s:4:" ça";s:3:"164";s:3:"a y";s:3:"165";s:3:"alk";s:3:"166";s:4:"dı ";s:3:"167";s:3:"ede";s:3:"168";s:3:"el ";s:3:"169";s:4:"ndı";s:3:"170";s:3:"ra ";s:3:"171";s:4:"üne";s:3:"172";s:4:" sü";s:3:"173";s:4:"dır";s:3:"174";s:3:"e k";s:3:"175";s:3:"ere";s:3:"176";s:3:"ik ";s:3:"177";s:3:"imi";s:3:"178";s:4:"iÅŸi";s:3:"179";s:3:"mas";s:3:"180";s:3:"n h";s:3:"181";s:4:"sür";s:3:"182";s:3:"yle";s:3:"183";s:3:" ad";s:3:"184";s:3:" fi";s:3:"185";s:3:" gi";s:3:"186";s:3:" se";s:3:"187";s:3:"a k";s:3:"188";s:3:"arl";s:3:"189";s:5:"aşı";s:3:"190";s:3:"iyo";s:3:"191";s:3:"kla";s:3:"192";s:5:"lığ";s:3:"193";s:3:"nem";s:3:"194";s:3:"ney";s:3:"195";s:3:"rme";s:3:"196";s:3:"ste";s:3:"197";s:4:"tı ";s:3:"198";s:3:"unl";s:3:"199";s:3:"ver";s:3:"200";s:4:" sı";s:3:"201";s:3:" te";s:3:"202";s:3:" to";s:3:"203";s:3:"a s";s:3:"204";s:4:"aÅŸk";s:3:"205";s:3:"ekl";s:3:"206";s:3:"end";s:3:"207";s:3:"kal";s:3:"208";s:4:"liÄŸ";s:3:"209";s:3:"min";s:3:"210";s:4:"tır";s:3:"211";s:3:"ulu";s:3:"212";s:3:"unu";s:3:"213";s:3:"yap";s:3:"214";s:3:"ye ";s:3:"215";s:4:"ı i";s:3:"216";s:4:"ÅŸka";s:3:"217";s:5:"ÅŸtı";s:3:"218";s:4:" bü";s:3:"219";s:3:" ke";s:3:"220";s:3:" ki";s:3:"221";s:3:"ard";s:3:"222";s:3:"art";s:3:"223";s:4:"aÅŸa";s:3:"224";s:3:"n i";s:3:"225";s:3:"ndi";s:3:"226";s:3:"ti ";s:3:"227";s:3:"top";s:3:"228";s:4:"ı b";s:3:"229";s:3:" va";s:3:"230";s:4:" ön";s:3:"231";s:3:"aki";s:3:"232";s:3:"cak";s:3:"233";s:3:"ey ";s:3:"234";s:3:"fil";s:3:"235";s:3:"isi";s:3:"236";s:3:"kle";s:3:"237";s:3:"kur";s:3:"238";s:3:"man";s:3:"239";s:3:"nce";s:3:"240";s:3:"nle";s:3:"241";s:3:"nun";s:3:"242";s:3:"rak";s:3:"243";s:4:"ık ";s:3:"244";s:3:" en";s:3:"245";s:3:" yo";s:3:"246";s:3:"a g";s:3:"247";s:3:"lis";s:3:"248";s:3:"mak";s:3:"249";s:3:"n g";s:3:"250";s:3:"tir";s:3:"251";s:3:"yas";s:3:"252";s:4:" iÅŸ";s:3:"253";s:4:" yö";s:3:"254";s:3:"ale";s:3:"255";s:3:"bil";s:3:"256";s:3:"bul";s:3:"257";s:3:"et ";s:3:"258";s:3:"i d";s:3:"259";s:3:"iye";s:3:"260";s:3:"kil";s:3:"261";s:3:"ma ";s:3:"262";s:3:"n e";s:3:"263";s:3:"n t";s:3:"264";s:3:"nu ";s:3:"265";s:3:"olu";s:3:"266";s:3:"rla";s:3:"267";s:3:"te ";s:3:"268";s:4:"yön";s:3:"269";s:5:"çık";s:3:"270";s:3:" ay";s:3:"271";s:4:" mü";s:3:"272";s:4:" ço";s:3:"273";s:5:" çı";s:3:"274";s:3:"a a";s:3:"275";s:3:"a b";s:3:"276";s:3:"ata";s:3:"277";s:3:"der";s:3:"278";s:3:"gel";s:3:"279";s:3:"i g";s:3:"280";s:3:"i i";s:3:"281";s:3:"ill";s:3:"282";s:3:"ist";s:3:"283";s:4:"ldı";s:3:"284";s:3:"lu ";s:3:"285";s:3:"mek";s:3:"286";s:3:"mle";s:3:"287";s:4:"n ç";s:3:"288";s:3:"onu";s:3:"289";s:3:"opl";s:3:"290";s:3:"ran";s:3:"291";s:3:"rat";s:3:"292";s:4:"rdı";s:3:"293";s:3:"rke";s:3:"294";s:3:"siy";s:3:"295";s:3:"son";s:3:"296";s:3:"ta ";s:3:"297";s:5:"tçı";s:3:"298";s:4:"tın";s:3:"299";}s:9:"ukrainian";a:300:{s:5:" на";s:1:"0";s:5:" за";s:1:"1";s:6:"ннÑ";s:1:"2";s:5:"Ð½Ñ ";s:1:"3";s:5:"на ";s:1:"4";s:5:" пр";s:1:"5";s:6:"ого";s:1:"6";s:5:"го ";s:1:"7";s:6:"Ñьк";s:1:"8";s:5:" по";s:1:"9";s:4:" у ";s:2:"10";s:6:"від";s:2:"11";s:6:"ере";s:2:"12";s:5:" мі";s:2:"13";s:5:" не";s:2:"14";s:5:"их ";s:2:"15";s:5:"Ñ‚ÑŒ ";s:2:"16";s:6:"пер";s:2:"17";s:5:" ві";s:2:"18";s:5:"ів ";s:2:"19";s:5:" пе";s:2:"20";s:5:" що";s:2:"21";s:6:"льн";s:2:"22";s:5:"ми ";s:2:"23";s:5:"ні ";s:2:"24";s:5:"не ";s:2:"25";s:5:"ти ";s:2:"26";s:6:"ати";s:2:"27";s:6:"енн";s:2:"28";s:6:"міÑ";s:2:"29";s:6:"пра";s:2:"30";s:6:"ува";s:2:"31";s:6:"ник";s:2:"32";s:6:"про";s:2:"33";s:6:"рав";s:2:"34";s:6:"івн";s:2:"35";s:5:" та";s:2:"36";s:6:"буд";s:2:"37";s:6:"влі";s:2:"38";s:6:"рів";s:2:"39";s:5:" ко";s:2:"40";s:5:" рі";s:2:"41";s:6:"аль";s:2:"42";s:5:"но ";s:2:"43";s:6:"ому";s:2:"44";s:5:"що ";s:2:"45";s:5:" ви";s:2:"46";s:5:"му ";s:2:"47";s:6:"рев";s:2:"48";s:5:"ÑÑ ";s:2:"49";s:6:"інн";s:2:"50";s:5:" до";s:2:"51";s:5:" уп";s:2:"52";s:6:"авл";s:2:"53";s:6:"анн";s:2:"54";s:6:"ком";s:2:"55";s:5:"ли ";s:2:"56";s:6:"лін";s:2:"57";s:6:"ног";s:2:"58";s:6:"упр";s:2:"59";s:5:" бу";s:2:"60";s:4:" з ";s:2:"61";s:5:" ро";s:2:"62";s:5:"за ";s:2:"63";s:5:"и н";s:2:"64";s:6:"нов";s:2:"65";s:6:"оро";s:2:"66";s:6:"оÑÑ‚";s:2:"67";s:6:"Ñта";s:2:"68";s:5:"Ñ‚Ñ– ";s:2:"69";s:6:"ÑŽÑ‚ÑŒ";s:2:"70";s:5:" мо";s:2:"71";s:5:" ні";s:2:"72";s:5:" Ñк";s:2:"73";s:6:"бор";s:2:"74";s:5:"ва ";s:2:"75";s:6:"ван";s:2:"76";s:6:"ень";s:2:"77";s:5:"и п";s:2:"78";s:5:"нь ";s:2:"79";s:6:"ові";s:2:"80";s:6:"рон";s:2:"81";s:6:"ÑÑ‚Ñ–";s:2:"82";s:5:"та ";s:2:"83";s:5:"у в";s:2:"84";s:6:"ько";s:2:"85";s:6:"Ñ–ÑÑ‚";s:2:"86";s:4:" в ";s:2:"87";s:5:" ре";s:2:"88";s:5:"до ";s:2:"89";s:5:"е п";s:2:"90";s:6:"заб";s:2:"91";s:5:"ий ";s:2:"92";s:6:"нÑÑŒ";s:2:"93";s:5:"о в";s:2:"94";s:5:"о п";s:2:"95";s:6:"при";s:2:"96";s:5:"Ñ– п";s:2:"97";s:5:" ку";s:2:"98";s:5:" пі";s:2:"99";s:5:" Ñп";s:3:"100";s:5:"а п";s:3:"101";s:6:"або";s:3:"102";s:6:"анÑ";s:3:"103";s:6:"аці";s:3:"104";s:6:"ват";s:3:"105";s:6:"вни";s:3:"106";s:5:"и в";s:3:"107";s:6:"ими";s:3:"108";s:5:"ка ";s:3:"109";s:6:"нен";s:3:"110";s:6:"ніч";s:3:"111";s:6:"она";s:3:"112";s:5:"ої ";s:3:"113";s:6:"пов";s:3:"114";s:6:"ьки";s:3:"115";s:6:"ьно";s:3:"116";s:6:"ізн";s:3:"117";s:6:"ічн";s:3:"118";s:5:" ав";s:3:"119";s:5:" ма";s:3:"120";s:5:" ор";s:3:"121";s:5:" Ñу";s:3:"122";s:5:" чи";s:3:"123";s:5:" ін";s:3:"124";s:5:"а з";s:3:"125";s:5:"ам ";s:3:"126";s:5:"ає ";s:3:"127";s:6:"вне";s:3:"128";s:6:"вто";s:3:"129";s:6:"дом";s:3:"130";s:6:"ент";s:3:"131";s:6:"жит";s:3:"132";s:6:"зни";s:3:"133";s:5:"им ";s:3:"134";s:6:"итл";s:3:"135";s:5:"ла ";s:3:"136";s:6:"них";s:3:"137";s:6:"ниц";s:3:"138";s:6:"ова";s:3:"139";s:6:"ови";s:3:"140";s:5:"ом ";s:3:"141";s:6:"пор";s:3:"142";s:6:"Ñ‚ÑŒÑ";s:3:"143";s:5:"у Ñ€";s:3:"144";s:6:"ÑŒÑÑ";s:3:"145";s:6:"ідо";s:3:"146";s:6:"іль";s:3:"147";s:6:"Ñ–ÑÑŒ";s:3:"148";s:5:" ва";s:3:"149";s:5:" ді";s:3:"150";s:5:" жи";s:3:"151";s:5:" че";s:3:"152";s:4:" Ñ– ";s:3:"153";s:5:"а в";s:3:"154";s:5:"а н";s:3:"155";s:6:"али";s:3:"156";s:6:"вез";s:3:"157";s:6:"вно";s:3:"158";s:6:"еве";s:3:"159";s:6:"езе";s:3:"160";s:6:"зен";s:3:"161";s:6:"ицт";s:3:"162";s:5:"ки ";s:3:"163";s:6:"ких";s:3:"164";s:6:"кон";s:3:"165";s:5:"ку ";s:3:"166";s:6:"лаÑ";s:3:"167";s:5:"Ð»Ñ ";s:3:"168";s:6:"мож";s:3:"169";s:6:"нач";s:3:"170";s:6:"ним";s:3:"171";s:6:"ної";s:3:"172";s:5:"о б";s:3:"173";s:6:"ову";s:3:"174";s:6:"оди";s:3:"175";s:5:"ою ";s:3:"176";s:5:"ро ";s:3:"177";s:6:"рок";s:3:"178";s:6:"Ñно";s:3:"179";s:6:"Ñпо";s:3:"180";s:6:"так";s:3:"181";s:6:"тва";s:3:"182";s:5:"ту ";s:3:"183";s:5:"у п";s:3:"184";s:6:"цтв";s:3:"185";s:6:"ьни";s:3:"186";s:5:"Ñ Ð·";s:3:"187";s:5:"Ñ– м";s:3:"188";s:5:"Ñ–Ñ— ";s:3:"189";s:5:" вÑ";s:3:"190";s:5:" гр";s:3:"191";s:5:" де";s:3:"192";s:5:" но";s:3:"193";s:5:" па";s:3:"194";s:5:" Ñе";s:3:"195";s:5:" ук";s:3:"196";s:5:" Ñ—Ñ…";s:3:"197";s:5:"а о";s:3:"198";s:6:"авт";s:3:"199";s:6:"аÑÑ‚";s:3:"200";s:6:"ают";s:3:"201";s:6:"вар";s:3:"202";s:6:"ден";s:3:"203";s:5:"ди ";s:3:"204";s:5:"ду ";s:3:"205";s:6:"зна";s:3:"206";s:5:"и з";s:3:"207";s:6:"ико";s:3:"208";s:6:"иÑÑ";s:3:"209";s:6:"ити";s:3:"210";s:6:"ког";s:3:"211";s:6:"мен";s:3:"212";s:6:"ном";s:3:"213";s:5:"ну ";s:3:"214";s:5:"о н";s:3:"215";s:5:"о Ñ";s:3:"216";s:6:"обу";s:3:"217";s:6:"ово";s:3:"218";s:6:"пла";s:3:"219";s:6:"ран";s:3:"220";s:6:"рив";s:3:"221";s:6:"роб";s:3:"222";s:6:"Ñка";s:3:"223";s:6:"тан";s:3:"224";s:6:"тим";s:3:"225";s:6:"тиÑ";s:3:"226";s:5:"то ";s:3:"227";s:6:"тра";s:3:"228";s:6:"удо";s:3:"229";s:6:"чин";s:3:"230";s:6:"чни";s:3:"231";s:5:"Ñ– в";s:3:"232";s:5:"Ñ–ÑŽ ";s:3:"233";s:4:" а ";s:3:"234";s:5:" во";s:3:"235";s:5:" да";s:3:"236";s:5:" кв";s:3:"237";s:5:" ме";s:3:"238";s:5:" об";s:3:"239";s:5:" Ñк";s:3:"240";s:5:" ти";s:3:"241";s:5:" Ñ„Ñ–";s:3:"242";s:4:" Ñ” ";s:3:"243";s:5:"а Ñ€";s:3:"244";s:5:"а Ñ";s:3:"245";s:5:"а у";s:3:"246";s:5:"ак ";s:3:"247";s:6:"ані";s:3:"248";s:6:"арт";s:3:"249";s:6:"аÑн";s:3:"250";s:5:"в у";s:3:"251";s:6:"вик";s:3:"252";s:6:"віз";s:3:"253";s:6:"дов";s:3:"254";s:6:"дпо";s:3:"255";s:6:"дів";s:3:"256";s:6:"еві";s:3:"257";s:6:"енÑ";s:3:"258";s:5:"же ";s:3:"259";s:5:"и м";s:3:"260";s:5:"и Ñ";s:3:"261";s:6:"ика";s:3:"262";s:6:"ичн";s:3:"263";s:5:"кі ";s:3:"264";s:6:"ків";s:3:"265";s:6:"між";s:3:"266";s:6:"нан";s:3:"267";s:6:"ноÑ";s:3:"268";s:5:"о у";s:3:"269";s:6:"обл";s:3:"270";s:6:"одн";s:3:"271";s:5:"ок ";s:3:"272";s:6:"оло";s:3:"273";s:6:"отр";s:3:"274";s:6:"рен";s:3:"275";s:6:"рим";s:3:"276";s:6:"роз";s:3:"277";s:5:"ÑÑŒ ";s:3:"278";s:5:"ÑÑ– ";s:3:"279";s:6:"тла";s:3:"280";s:6:"тів";s:3:"281";s:5:"у з";s:3:"282";s:6:"уго";s:3:"283";s:6:"уді";s:3:"284";s:5:"чи ";s:3:"285";s:5:"ше ";s:3:"286";s:5:"Ñ Ð½";s:3:"287";s:5:"Ñ Ñƒ";s:3:"288";s:6:"ідп";s:3:"289";s:5:"ій ";s:3:"290";s:6:"іна";s:3:"291";s:5:"Ñ–Ñ ";s:3:"292";s:5:" ка";s:3:"293";s:5:" ни";s:3:"294";s:5:" оÑ";s:3:"295";s:5:" Ñи";s:3:"296";s:5:" то";s:3:"297";s:5:" Ñ‚Ñ€";s:3:"298";s:5:" уг";s:3:"299";}s:4:"urdu";a:300:{s:5:"یں ";s:1:"0";s:5:" Ú©ÛŒ";s:1:"1";s:5:"Ú©Û’ ";s:1:"2";s:5:" Ú©Û’";s:1:"3";s:5:"Ù†Û’ ";s:1:"4";s:5:" Ú©Û";s:1:"5";s:5:"Û’ Ú©";s:1:"6";s:5:"Ú©ÛŒ ";s:1:"7";s:6:"میں";s:1:"8";s:5:" Ù…ÛŒ";s:1:"9";s:5:"ÛÛ’ ";s:2:"10";s:5:"ÙˆÚº ";s:2:"11";s:5:"Ú©Û ";s:2:"12";s:5:" ÛÛ’";s:2:"13";s:5:"ان ";s:2:"14";s:6:"Ûیں";s:2:"15";s:5:"ور ";s:2:"16";s:5:" Ú©Ùˆ";s:2:"17";s:5:"یا ";s:2:"18";s:5:" ان";s:2:"19";s:5:" Ù†Û’";s:2:"20";s:5:"سے ";s:2:"21";s:5:" سے";s:2:"22";s:5:" کر";s:2:"23";s:6:"ستا";s:2:"24";s:5:" او";s:2:"25";s:6:"اور";s:2:"26";s:6:"تان";s:2:"27";s:5:"ر Ú©";s:2:"28";s:5:"ÛŒ Ú©";s:2:"29";s:5:" اس";s:2:"30";s:5:"Û’ ا";s:2:"31";s:5:" پا";s:2:"32";s:5:" ÛÙˆ";s:2:"33";s:5:" پر";s:2:"34";s:5:"ر٠";s:2:"35";s:5:" کا";s:2:"36";s:5:"ا Ú©";s:2:"37";s:5:"ÛŒ ا";s:2:"38";s:5:" ÛÛŒ";s:2:"39";s:5:"در ";s:2:"40";s:5:"Ú©Ùˆ ";s:2:"41";s:5:" ای";s:2:"42";s:5:"Úº Ú©";s:2:"43";s:5:" مش";s:2:"44";s:5:" مل";s:2:"45";s:5:"ات ";s:2:"46";s:6:"صدر";s:2:"47";s:6:"اکس";s:2:"48";s:6:"شرÙ";s:2:"49";s:6:"مشر";s:2:"50";s:6:"پاک";s:2:"51";s:6:"کست";s:2:"52";s:5:"ÛŒ Ù…";s:2:"53";s:5:" دی";s:2:"54";s:5:" صد";s:2:"55";s:5:" ÛŒÛ";s:2:"56";s:5:"ا Û";s:2:"57";s:5:"Ù† Ú©";s:2:"58";s:6:"وال";s:2:"59";s:5:"ÛŒÛ ";s:2:"60";s:5:"Û’ Ùˆ";s:2:"61";s:5:" بھ";s:2:"62";s:5:" دو";s:2:"63";s:5:"اس ";s:2:"64";s:5:"ر ا";s:2:"65";s:6:"Ù†ÛÛŒ";s:2:"66";s:5:"کا ";s:2:"67";s:5:"Û’ س";s:2:"68";s:5:"ئی ";s:2:"69";s:5:"Û Ø§";s:2:"70";s:5:"یت ";s:2:"71";s:5:"Û’ Û";s:2:"72";s:5:"ت Ú©";s:2:"73";s:5:" سا";s:2:"74";s:5:"Ù„Û’ ";s:2:"75";s:5:"Ûا ";s:2:"76";s:5:"Û’ ب";s:2:"77";s:5:" وا";s:2:"78";s:5:"ار ";s:2:"79";s:5:"Ù†ÛŒ ";s:2:"80";s:6:"Ú©Ûا";s:2:"81";s:5:"ÛŒ Û";s:2:"82";s:5:"Û’ Ù…";s:2:"83";s:5:" سی";s:2:"84";s:5:" Ù„ÛŒ";s:2:"85";s:6:"انÛ";s:2:"86";s:6:"انی";s:2:"87";s:5:"ر Ù…";s:2:"88";s:5:"ر Ù¾";s:2:"89";s:6:"ریت";s:2:"90";s:5:"Ù† Ù…";s:2:"91";s:5:"ھا ";s:2:"92";s:5:"یر ";s:2:"93";s:5:" جا";s:2:"94";s:5:" جن";s:2:"95";s:5:"ئے ";s:2:"96";s:5:"پر ";s:2:"97";s:5:"Úº Ù†";s:2:"98";s:5:"Û Ú©";s:2:"99";s:5:"ÛŒ Ùˆ";s:3:"100";s:5:"Û’ د";s:3:"101";s:5:" تو";s:3:"102";s:5:" تھ";s:3:"103";s:5:" Ú¯ÛŒ";s:3:"104";s:6:"ایک";s:3:"105";s:5:"Ù„ Ú©";s:3:"106";s:5:"نا ";s:3:"107";s:5:"کر ";s:3:"108";s:5:"Úº Ù…";s:3:"109";s:5:"یک ";s:3:"110";s:5:" با";s:3:"111";s:5:"ا ت";s:3:"112";s:5:"دی ";s:3:"113";s:5:"Ù† س";s:3:"114";s:6:"کیا";s:3:"115";s:6:"یوں";s:3:"116";s:5:"Û’ ج";s:3:"117";s:5:"ال ";s:3:"118";s:5:"تو ";s:3:"119";s:5:"Úº ا";s:3:"120";s:5:"Û’ Ù¾";s:3:"121";s:5:" چا";s:3:"122";s:5:"ام ";s:3:"123";s:6:"بھی";s:3:"124";s:5:"تی ";s:3:"125";s:5:"تے ";s:3:"126";s:6:"دوس";s:3:"127";s:5:"س Ú©";s:3:"128";s:6:"ملک";s:3:"129";s:5:"Ù† ا";s:3:"130";s:6:"Ûور";s:3:"131";s:5:"یے ";s:3:"132";s:5:" مو";s:3:"133";s:5:" ÙˆÚ©";s:3:"134";s:6:"ائی";s:3:"135";s:6:"ارت";s:3:"136";s:6:"الے";s:3:"137";s:6:"بھا";s:3:"138";s:6:"ردی";s:3:"139";s:5:"ری ";s:3:"140";s:5:"ÙˆÛ ";s:3:"141";s:6:"ویز";s:3:"142";s:5:"Úº د";s:3:"143";s:5:"Ú¾ÛŒ ";s:3:"144";s:5:"ÛŒ س";s:3:"145";s:5:" رÛ";s:3:"146";s:5:" من";s:3:"147";s:5:" Ù†Û";s:3:"148";s:5:" ور";s:3:"149";s:5:" ÙˆÛ";s:3:"150";s:5:" ÛÙ†";s:3:"151";s:5:"ا ا";s:3:"152";s:6:"است";s:3:"153";s:5:"ت ا";s:3:"154";s:5:"ت Ù¾";s:3:"155";s:5:"د Ú©";s:3:"156";s:5:"ز Ù…";s:3:"157";s:5:"ند ";s:3:"158";s:6:"ورد";s:3:"159";s:6:"ÙˆÚ©Ù„";s:3:"160";s:5:"Ú¯ÛŒ ";s:3:"161";s:6:"گیا";s:3:"162";s:5:"Û Ù¾";s:3:"163";s:5:"یز ";s:3:"164";s:5:"Û’ ت";s:3:"165";s:5:" اع";s:3:"166";s:5:" اپ";s:3:"167";s:5:" جس";s:3:"168";s:5:" جم";s:3:"169";s:5:" جو";s:3:"170";s:5:" سر";s:3:"171";s:6:"اپن";s:3:"172";s:6:"اکث";s:3:"173";s:6:"تھا";s:3:"174";s:6:"ثری";s:3:"175";s:6:"دیا";s:3:"176";s:5:"ر د";s:3:"177";s:5:"رت ";s:3:"178";s:6:"روی";s:3:"179";s:5:"سی ";s:3:"180";s:6:"ملا";s:3:"181";s:6:"ندو";s:3:"182";s:6:"وست";s:3:"183";s:6:"پرو";s:3:"184";s:6:"چاÛ";s:3:"185";s:6:"کثر";s:3:"186";s:6:"کلا";s:3:"187";s:5:"Û Û";s:3:"188";s:6:"Ûند";s:3:"189";s:5:"ÛÙˆ ";s:3:"190";s:5:"Û’ Ù„";s:3:"191";s:5:" اک";s:3:"192";s:5:" دا";s:3:"193";s:5:" سن";s:3:"194";s:5:" وز";s:3:"195";s:5:" Ù¾ÛŒ";s:3:"196";s:5:"ا Ú†";s:3:"197";s:5:"اء ";s:3:"198";s:6:"اتھ";s:3:"199";s:6:"اقا";s:3:"200";s:5:"Ø§Û ";s:3:"201";s:5:"تھ ";s:3:"202";s:5:"دو ";s:3:"203";s:5:"ر ب";s:3:"204";s:6:"روا";s:3:"205";s:5:"رے ";s:3:"206";s:6:"سات";s:3:"207";s:5:"Ù Ú©";s:3:"208";s:6:"قات";s:3:"209";s:5:"لا ";s:3:"210";s:6:"لاء";s:3:"211";s:5:"Ù… Ù…";s:3:"212";s:5:"Ù… Ú©";s:3:"213";s:5:"من ";s:3:"214";s:6:"نوں";s:3:"215";s:5:"Ùˆ ا";s:3:"216";s:6:"کرن";s:3:"217";s:5:"Úº Û";s:3:"218";s:6:"ھار";s:3:"219";s:6:"Ûوئ";s:3:"220";s:5:"ÛÛŒ ";s:3:"221";s:5:"یش ";s:3:"222";s:5:" ام";s:3:"223";s:5:" لا";s:3:"224";s:5:" مس";s:3:"225";s:5:" پو";s:3:"226";s:5:" Ù¾Û";s:3:"227";s:6:"انے";s:3:"228";s:5:"ت Ù…";s:3:"229";s:5:"ت Û";s:3:"230";s:5:"ج Ú©";s:3:"231";s:6:"دون";s:3:"232";s:6:"زیر";s:3:"233";s:5:"س س";s:3:"234";s:5:"Ø´ Ú©";s:3:"235";s:5:"Ù Ù†";s:3:"236";s:5:"Ù„ Û";s:3:"237";s:6:"لاق";s:3:"238";s:5:"Ù„ÛŒ ";s:3:"239";s:6:"وری";s:3:"240";s:6:"وزی";s:3:"241";s:6:"ونو";s:3:"242";s:6:"Ú©Ú¾Ù†";s:3:"243";s:5:"گا ";s:3:"244";s:5:"Úº س";s:3:"245";s:5:"Úº Ú¯";s:3:"246";s:6:"Ú¾Ù†Û’";s:3:"247";s:5:"Ú¾Û’ ";s:3:"248";s:5:"Û Ø¨";s:3:"249";s:5:"Û Ø¬";s:3:"250";s:5:"Ûر ";s:3:"251";s:5:"ÛŒ Ø¢";s:3:"252";s:5:"ÛŒ Ù¾";s:3:"253";s:5:" حا";s:3:"254";s:5:" ÙˆÙ";s:3:"255";s:5:" گا";s:3:"256";s:5:"ا ج";s:3:"257";s:5:"ا Ú¯";s:3:"258";s:5:"اد ";s:3:"259";s:6:"ادی";s:3:"260";s:6:"اعظ";s:3:"261";s:6:"اÛت";s:3:"262";s:5:"جس ";s:3:"263";s:6:"جمÛ";s:3:"264";s:5:"جو ";s:3:"265";s:5:"ر س";s:3:"266";s:5:"ر Û";s:3:"267";s:6:"رنے";s:3:"268";s:5:"س Ù…";s:3:"269";s:5:"سا ";s:3:"270";s:6:"سند";s:3:"271";s:6:"سنگ";s:3:"272";s:5:"ظم ";s:3:"273";s:6:"عظم";s:3:"274";s:5:"Ù„ Ù…";s:3:"275";s:6:"لیے";s:3:"276";s:5:"مل ";s:3:"277";s:6:"موÛ";s:3:"278";s:6:"Ù…ÛÙˆ";s:3:"279";s:6:"Ù†Ú¯Ú¾";s:3:"280";s:5:"Ùˆ ص";s:3:"281";s:6:"ورٹ";s:3:"282";s:6:"ÙˆÛÙ†";s:3:"283";s:5:"Ú©Ù† ";s:3:"284";s:5:"Ú¯Ú¾ ";s:3:"285";s:5:"Ú¯Û’ ";s:3:"286";s:5:"Úº ج";s:3:"287";s:5:"Úº Ùˆ";s:3:"288";s:5:"Úº ÛŒ";s:3:"289";s:5:"Û Ø¯";s:3:"290";s:5:"ÛÙ† ";s:3:"291";s:6:"ÛÙˆÚº";s:3:"292";s:5:"Û’ Ø­";s:3:"293";s:5:"Û’ Ú¯";s:3:"294";s:5:"Û’ ÛŒ";s:3:"295";s:5:" اگ";s:3:"296";s:5:" بع";s:3:"297";s:5:" رو";s:3:"298";s:5:" شا";s:3:"299";}s:5:"uzbek";a:300:{s:5:"ан ";s:1:"0";s:6:"ган";s:1:"1";s:6:"лар";s:1:"2";s:5:"га ";s:1:"3";s:5:"нг ";s:1:"4";s:6:"инг";s:1:"5";s:6:"нин";s:1:"6";s:5:"да ";s:1:"7";s:5:"ни ";s:1:"8";s:6:"ида";s:1:"9";s:6:"ари";s:2:"10";s:6:"ига";s:2:"11";s:6:"ини";s:2:"12";s:5:"ар ";s:2:"13";s:5:"ди ";s:2:"14";s:5:" би";s:2:"15";s:6:"ани";s:2:"16";s:5:" бо";s:2:"17";s:6:"дан";s:2:"18";s:6:"лга";s:2:"19";s:5:" ҳа";s:2:"20";s:5:" ва";s:2:"21";s:5:" Ñа";s:2:"22";s:5:"ги ";s:2:"23";s:6:"ила";s:2:"24";s:5:"н б";s:2:"25";s:5:"и б";s:2:"26";s:5:" кў";s:2:"27";s:5:" та";s:2:"28";s:5:"ир ";s:2:"29";s:5:" ма";s:2:"30";s:6:"ага";s:2:"31";s:6:"ала";s:2:"32";s:6:"бир";s:2:"33";s:5:"ри ";s:2:"34";s:6:"тга";s:2:"35";s:6:"лан";s:2:"36";s:6:"лик";s:2:"37";s:5:"а к";s:2:"38";s:6:"аги";s:2:"39";s:6:"ати";s:2:"40";s:5:"та ";s:2:"41";s:6:"ади";s:2:"42";s:6:"даг";s:2:"43";s:6:"рга";s:2:"44";s:5:" йи";s:2:"45";s:5:" ми";s:2:"46";s:5:" па";s:2:"47";s:5:" бў";s:2:"48";s:5:" қа";s:2:"49";s:5:" қи";s:2:"50";s:5:"а б";s:2:"51";s:6:"илл";s:2:"52";s:5:"ли ";s:2:"53";s:6:"аÑи";s:2:"54";s:5:"и Ñ‚";s:2:"55";s:5:"ик ";s:2:"56";s:6:"или";s:2:"57";s:6:"лла";s:2:"58";s:6:"ард";s:2:"59";s:6:"вчи";s:2:"60";s:5:"ва ";s:2:"61";s:5:"иб ";s:2:"62";s:6:"ири";s:2:"63";s:6:"лиг";s:2:"64";s:6:"нга";s:2:"65";s:6:"ран";s:2:"66";s:5:" ке";s:2:"67";s:5:" ўз";s:2:"68";s:5:"а Ñ";s:2:"69";s:6:"ахт";s:2:"70";s:6:"бўл";s:2:"71";s:6:"иги";s:2:"72";s:6:"кўр";s:2:"73";s:6:"рда";s:2:"74";s:6:"рни";s:2:"75";s:5:"Ñа ";s:2:"76";s:5:" бе";s:2:"77";s:5:" бу";s:2:"78";s:5:" да";s:2:"79";s:5:" жа";s:2:"80";s:5:"а Ñ‚";s:2:"81";s:6:"ази";s:2:"82";s:6:"ери";s:2:"83";s:5:"и а";s:2:"84";s:6:"илг";s:2:"85";s:6:"йил";s:2:"86";s:6:"ман";s:2:"87";s:6:"пах";s:2:"88";s:6:"рид";s:2:"89";s:5:"ти ";s:2:"90";s:6:"увч";s:2:"91";s:6:"хта";s:2:"92";s:5:" не";s:2:"93";s:5:" Ñо";s:2:"94";s:5:" уч";s:2:"95";s:6:"айт";s:2:"96";s:6:"лли";s:2:"97";s:6:"тла";s:2:"98";s:5:" ай";s:2:"99";s:5:" Ñ„Ñ€";s:3:"100";s:5:" ÑÑ‚";s:3:"101";s:5:" ҳо";s:3:"102";s:5:"а Ò›";s:3:"103";s:6:"али";s:3:"104";s:6:"аро";s:3:"105";s:6:"бер";s:3:"106";s:6:"бил";s:3:"107";s:6:"бор";s:3:"108";s:6:"ими";s:3:"109";s:6:"иÑÑ‚";s:3:"110";s:5:"он ";s:3:"111";s:6:"рин";s:3:"112";s:6:"тер";s:3:"113";s:6:"тил";s:3:"114";s:5:"ун ";s:3:"115";s:6:"фра";s:3:"116";s:6:"қил";s:3:"117";s:5:" ба";s:3:"118";s:5:" ол";s:3:"119";s:6:"анÑ";s:3:"120";s:6:"ефт";s:3:"121";s:6:"зир";s:3:"122";s:6:"кат";s:3:"123";s:6:"мил";s:3:"124";s:6:"неф";s:3:"125";s:6:"Ñаг";s:3:"126";s:5:"чи ";s:3:"127";s:6:"ўра";s:3:"128";s:5:" на";s:3:"129";s:5:" те";s:3:"130";s:5:" Ñн";s:3:"131";s:5:"а Ñ";s:3:"132";s:5:"ам ";s:3:"133";s:6:"арн";s:3:"134";s:5:"ат ";s:3:"135";s:5:"иш ";s:3:"136";s:5:"ма ";s:3:"137";s:6:"нла";s:3:"138";s:6:"рли";s:3:"139";s:6:"чил";s:3:"140";s:6:"шга";s:3:"141";s:5:" иш";s:3:"142";s:5:" му";s:3:"143";s:5:" ÑžÒ›";s:3:"144";s:6:"ара";s:3:"145";s:6:"ваз";s:3:"146";s:5:"и у";s:3:"147";s:5:"иқ ";s:3:"148";s:6:"моқ";s:3:"149";s:6:"рим";s:3:"150";s:6:"учу";s:3:"151";s:6:"чун";s:3:"152";s:5:"ши ";s:3:"153";s:6:"Ñнг";s:3:"154";s:6:"қув";s:3:"155";s:6:"ҳам";s:3:"156";s:5:" ÑÑž";s:3:"157";s:5:" ши";s:3:"158";s:6:"бар";s:3:"159";s:6:"бек";s:3:"160";s:6:"дам";s:3:"161";s:5:"и Ò³";s:3:"162";s:6:"иши";s:3:"163";s:6:"лад";s:3:"164";s:6:"оли";s:3:"165";s:6:"олл";s:3:"166";s:6:"ори";s:3:"167";s:6:"оқд";s:3:"168";s:5:"Ñ€ б";s:3:"169";s:5:"ра ";s:3:"170";s:6:"рла";s:3:"171";s:6:"уни";s:3:"172";s:5:"Ñ„Ñ‚ ";s:3:"173";s:6:"ўлг";s:3:"174";s:6:"ўқу";s:3:"175";s:5:" де";s:3:"176";s:5:" ка";s:3:"177";s:5:" қў";s:3:"178";s:5:"а Ñž";s:3:"179";s:6:"аба";s:3:"180";s:6:"амм";s:3:"181";s:6:"атл";s:3:"182";s:5:"б к";s:3:"183";s:6:"бош";s:3:"184";s:6:"збе";s:3:"185";s:5:"и в";s:3:"186";s:5:"им ";s:3:"187";s:5:"ин ";s:3:"188";s:6:"ишл";s:3:"189";s:6:"лаб";s:3:"190";s:6:"лей";s:3:"191";s:6:"мин";s:3:"192";s:5:"н д";s:3:"193";s:6:"нда";s:3:"194";s:5:"оқ ";s:3:"195";s:5:"Ñ€ м";s:3:"196";s:6:"рил";s:3:"197";s:6:"Ñид";s:3:"198";s:6:"тал";s:3:"199";s:6:"тан";s:3:"200";s:6:"тид";s:3:"201";s:6:"тон";s:3:"202";s:6:"ўзб";s:3:"203";s:5:" ам";s:3:"204";s:5:" ки";s:3:"205";s:5:"а Ò³";s:3:"206";s:6:"анг";s:3:"207";s:6:"анд";s:3:"208";s:6:"арт";s:3:"209";s:6:"аёт";s:3:"210";s:6:"дир";s:3:"211";s:6:"ент";s:3:"212";s:5:"и д";s:3:"213";s:5:"и м";s:3:"214";s:5:"и о";s:3:"215";s:5:"и Ñ";s:3:"216";s:6:"иро";s:3:"217";s:6:"йти";s:3:"218";s:6:"нÑу";s:3:"219";s:6:"оди";s:3:"220";s:5:"ор ";s:3:"221";s:5:"Ñи ";s:3:"222";s:6:"тиш";s:3:"223";s:6:"тоб";s:3:"224";s:6:"Ñти";s:3:"225";s:6:"қар";s:3:"226";s:6:"қда";s:3:"227";s:5:" бл";s:3:"228";s:5:" ге";s:3:"229";s:5:" до";s:3:"230";s:5:" ду";s:3:"231";s:5:" но";s:3:"232";s:5:" пр";s:3:"233";s:5:" ра";s:3:"234";s:5:" фо";s:3:"235";s:5:" қо";s:3:"236";s:5:"а м";s:3:"237";s:5:"а о";s:3:"238";s:6:"айд";s:3:"239";s:6:"ало";s:3:"240";s:6:"ама";s:3:"241";s:6:"бле";s:3:"242";s:5:"г н";s:3:"243";s:6:"дол";s:3:"244";s:6:"ейр";s:3:"245";s:5:"ек ";s:3:"246";s:6:"ерг";s:3:"247";s:6:"жар";s:3:"248";s:6:"зид";s:3:"249";s:5:"и к";s:3:"250";s:5:"и Ñ„";s:3:"251";s:5:"ий ";s:3:"252";s:6:"ило";s:3:"253";s:6:"лди";s:3:"254";s:6:"либ";s:3:"255";s:6:"лин";s:3:"256";s:5:"ми ";s:3:"257";s:6:"мма";s:3:"258";s:5:"н в";s:3:"259";s:5:"н к";s:3:"260";s:5:"н Ñž";s:3:"261";s:5:"н Ò³";s:3:"262";s:6:"ози";s:3:"263";s:6:"ора";s:3:"264";s:6:"оÑи";s:3:"265";s:6:"раÑ";s:3:"266";s:6:"риш";s:3:"267";s:6:"рка";s:3:"268";s:6:"роқ";s:3:"269";s:6:"Ñто";s:3:"270";s:6:"тин";s:3:"271";s:6:"хат";s:3:"272";s:6:"шир";s:3:"273";s:5:" ав";s:3:"274";s:5:" рў";s:3:"275";s:5:" ту";s:3:"276";s:5:" ўт";s:3:"277";s:5:"а п";s:3:"278";s:6:"авт";s:3:"279";s:6:"ада";s:3:"280";s:6:"аза";s:3:"281";s:6:"анл";s:3:"282";s:5:"б б";s:3:"283";s:6:"бой";s:3:"284";s:5:"бу ";s:3:"285";s:6:"вто";s:3:"286";s:5:"г Ñ";s:3:"287";s:6:"гин";s:3:"288";s:6:"дар";s:3:"289";s:6:"ден";s:3:"290";s:6:"дун";s:3:"291";s:6:"иде";s:3:"292";s:6:"ион";s:3:"293";s:6:"ирл";s:3:"294";s:6:"ишг";s:3:"295";s:6:"йха";s:3:"296";s:6:"кел";s:3:"297";s:6:"кўп";s:3:"298";s:6:"лио";s:3:"299";}s:10:"vietnamese";a:300:{s:3:"ng ";s:1:"0";s:3:" th";s:1:"1";s:3:" ch";s:1:"2";s:3:"g t";s:1:"3";s:3:" nh";s:1:"4";s:4:"ông";s:1:"5";s:3:" kh";s:1:"6";s:3:" tr";s:1:"7";s:3:"nh ";s:1:"8";s:4:" cô";s:1:"9";s:4:"côn";s:2:"10";s:3:" ty";s:2:"11";s:3:"ty ";s:2:"12";s:3:"i t";s:2:"13";s:3:"n t";s:2:"14";s:3:" ng";s:2:"15";s:5:"ại ";s:2:"16";s:3:" ti";s:2:"17";s:3:"ch ";s:2:"18";s:3:"y l";s:2:"19";s:5:"á»n ";s:2:"20";s:5:" Ä‘Æ°";s:2:"21";s:3:"hi ";s:2:"22";s:5:" gở";s:2:"23";s:5:"gởi";s:2:"24";s:5:"iá»n";s:2:"25";s:5:"tiá»";s:2:"26";s:5:"ởi ";s:2:"27";s:3:" gi";s:2:"28";s:3:" le";s:2:"29";s:3:" vi";s:2:"30";s:3:"cho";s:2:"31";s:3:"ho ";s:2:"32";s:4:"khá";s:2:"33";s:4:" và";s:2:"34";s:4:"hác";s:2:"35";s:3:" ph";s:2:"36";s:3:"am ";s:2:"37";s:4:"hàn";s:2:"38";s:4:"ách";s:2:"39";s:4:"ôi ";s:2:"40";s:3:"i n";s:2:"41";s:6:"ược";s:2:"42";s:5:"ợc ";s:2:"43";s:4:" tô";s:2:"44";s:4:"chú";s:2:"45";s:5:"iệt";s:2:"46";s:4:"tôi";s:2:"47";s:4:"ên ";s:2:"48";s:4:"úng";s:2:"49";s:5:"ệt ";s:2:"50";s:4:" có";s:2:"51";s:3:"c t";s:2:"52";s:4:"có ";s:2:"53";s:4:"hún";s:2:"54";s:5:"việ";s:2:"55";s:7:"đượ";s:2:"56";s:3:" na";s:2:"57";s:3:"g c";s:2:"58";s:3:"i c";s:2:"59";s:3:"n c";s:2:"60";s:3:"n n";s:2:"61";s:3:"t n";s:2:"62";s:4:"và ";s:2:"63";s:3:"n l";s:2:"64";s:4:"n Ä‘";s:2:"65";s:4:"àng";s:2:"66";s:4:"ác ";s:2:"67";s:5:"ất ";s:2:"68";s:3:"h l";s:2:"69";s:3:"nam";s:2:"70";s:4:"ân ";s:2:"71";s:4:"ăm ";s:2:"72";s:4:" hà";s:2:"73";s:4:" là";s:2:"74";s:4:" nă";s:2:"75";s:3:" qu";s:2:"76";s:5:" tạ";s:2:"77";s:3:"g m";s:2:"78";s:4:"năm";s:2:"79";s:5:"tại";s:2:"80";s:5:"á»›i ";s:2:"81";s:5:" lẹ";s:2:"82";s:3:"ay ";s:2:"83";s:3:"e g";s:2:"84";s:3:"h h";s:2:"85";s:3:"i v";s:2:"86";s:4:"i Ä‘";s:2:"87";s:3:"le ";s:2:"88";s:5:"lẹ ";s:2:"89";s:5:"á»u ";s:2:"90";s:5:"á»i ";s:2:"91";s:4:"hân";s:2:"92";s:3:"nhi";s:2:"93";s:3:"t t";s:2:"94";s:5:" củ";s:2:"95";s:5:" má»™";s:2:"96";s:5:" vá»";s:2:"97";s:4:" Ä‘i";s:2:"98";s:3:"an ";s:2:"99";s:5:"của";s:3:"100";s:4:"là ";s:3:"101";s:5:"má»™t";s:3:"102";s:5:"vá» ";s:3:"103";s:4:"ành";s:3:"104";s:5:"ết ";s:3:"105";s:5:"á»™t ";s:3:"106";s:5:"ủa ";s:3:"107";s:3:" bi";s:3:"108";s:4:" cá";s:3:"109";s:3:"a c";s:3:"110";s:3:"anh";s:3:"111";s:4:"các";s:3:"112";s:3:"h c";s:3:"113";s:5:"iá»u";s:3:"114";s:3:"m t";s:3:"115";s:5:"ện ";s:3:"116";s:3:" ho";s:3:"117";s:3:"'s ";s:3:"118";s:3:"ave";s:3:"119";s:3:"e's";s:3:"120";s:3:"el ";s:3:"121";s:3:"g n";s:3:"122";s:3:"le'";s:3:"123";s:3:"n v";s:3:"124";s:3:"o c";s:3:"125";s:3:"rav";s:3:"126";s:3:"s t";s:3:"127";s:3:"thi";s:3:"128";s:3:"tra";s:3:"129";s:3:"vel";s:3:"130";s:5:"ận ";s:3:"131";s:5:"ến ";s:3:"132";s:3:" ba";s:3:"133";s:3:" cu";s:3:"134";s:3:" sa";s:3:"135";s:5:" đó";s:3:"136";s:6:" đế";s:3:"137";s:3:"c c";s:3:"138";s:3:"chu";s:3:"139";s:5:"hiá»";s:3:"140";s:3:"huy";s:3:"141";s:3:"khi";s:3:"142";s:4:"nhâ";s:3:"143";s:4:"nhÆ°";s:3:"144";s:3:"ong";s:3:"145";s:3:"ron";s:3:"146";s:3:"thu";s:3:"147";s:4:"thÆ°";s:3:"148";s:3:"tro";s:3:"149";s:3:"y c";s:3:"150";s:4:"ày ";s:3:"151";s:6:"đến";s:3:"152";s:6:"Æ°á»i";s:3:"153";s:6:"Æ°á»n";s:3:"154";s:5:"á» v";s:3:"155";s:5:"á»ng";s:3:"156";s:5:" vá»›";s:3:"157";s:5:"cuá»™";s:3:"158";s:4:"g Ä‘";s:3:"159";s:5:"iết";s:3:"160";s:5:"iện";s:3:"161";s:4:"ngà";s:3:"162";s:3:"o t";s:3:"163";s:3:"u c";s:3:"164";s:5:"uá»™c";s:3:"165";s:5:"vá»›i";s:3:"166";s:4:"à c";s:3:"167";s:4:"ài ";s:3:"168";s:4:"Æ¡ng";s:3:"169";s:5:"Æ°Æ¡n";s:3:"170";s:5:"ải ";s:3:"171";s:5:"á»™c ";s:3:"172";s:5:"ức ";s:3:"173";s:3:" an";s:3:"174";s:5:" lậ";s:3:"175";s:3:" ra";s:3:"176";s:5:" sẽ";s:3:"177";s:5:" số";s:3:"178";s:5:" tổ";s:3:"179";s:3:"a k";s:3:"180";s:5:"biế";s:3:"181";s:3:"c n";s:3:"182";s:4:"c Ä‘";s:3:"183";s:5:"chứ";s:3:"184";s:3:"g v";s:3:"185";s:3:"gia";s:3:"186";s:4:"gày";s:3:"187";s:4:"hán";s:3:"188";s:4:"hôn";s:3:"189";s:4:"hÆ° ";s:3:"190";s:5:"hức";s:3:"191";s:3:"i g";s:3:"192";s:3:"i h";s:3:"193";s:3:"i k";s:3:"194";s:3:"i p";s:3:"195";s:4:"iên";s:3:"196";s:4:"khô";s:3:"197";s:5:"lập";s:3:"198";s:3:"n k";s:3:"199";s:3:"ra ";s:3:"200";s:4:"rên";s:3:"201";s:5:"sẽ ";s:3:"202";s:3:"t c";s:3:"203";s:4:"thà";s:3:"204";s:4:"trê";s:3:"205";s:5:"tổ ";s:3:"206";s:3:"u n";s:3:"207";s:3:"y t";s:3:"208";s:4:"ình";s:3:"209";s:5:"ấy ";s:3:"210";s:5:"ập ";s:3:"211";s:5:"ổ c";s:3:"212";s:4:" má";s:3:"213";s:6:" để";s:3:"214";s:3:"ai ";s:3:"215";s:3:"c s";s:3:"216";s:6:"gÆ°á»";s:3:"217";s:3:"h v";s:3:"218";s:3:"hoa";s:3:"219";s:5:"hoạ";s:3:"220";s:3:"inh";s:3:"221";s:3:"m n";s:3:"222";s:4:"máy";s:3:"223";s:3:"n g";s:3:"224";s:4:"ngÆ°";s:3:"225";s:5:"nhậ";s:3:"226";s:3:"o n";s:3:"227";s:3:"oa ";s:3:"228";s:4:"oàn";s:3:"229";s:3:"p c";s:3:"230";s:5:"số ";s:3:"231";s:4:"t Ä‘";s:3:"232";s:3:"y v";s:3:"233";s:4:"ào ";s:3:"234";s:4:"áy ";s:3:"235";s:4:"ăn ";s:3:"236";s:5:"đó ";s:3:"237";s:6:"để ";s:3:"238";s:6:"Æ°á»›c";s:3:"239";s:5:"ần ";s:3:"240";s:5:"ển ";s:3:"241";s:5:"á»›c ";s:3:"242";s:4:" bá";s:3:"243";s:4:" cÆ¡";s:3:"244";s:5:" cả";s:3:"245";s:5:" cầ";s:3:"246";s:5:" há»";s:3:"247";s:5:" kỳ";s:3:"248";s:3:" li";s:3:"249";s:5:" mạ";s:3:"250";s:5:" sở";s:3:"251";s:5:" tặ";s:3:"252";s:4:" vé";s:3:"253";s:5:" vụ";s:3:"254";s:6:" đạ";s:3:"255";s:4:"a Ä‘";s:3:"256";s:3:"bay";s:3:"257";s:4:"cÆ¡ ";s:3:"258";s:3:"g s";s:3:"259";s:3:"han";s:3:"260";s:5:"hÆ°Æ¡";s:3:"261";s:3:"i s";s:3:"262";s:5:"kỳ ";s:3:"263";s:3:"m c";s:3:"264";s:3:"n m";s:3:"265";s:3:"n p";s:3:"266";s:3:"o b";s:3:"267";s:5:"oại";s:3:"268";s:3:"qua";s:3:"269";s:5:"sở ";s:3:"270";s:3:"tha";s:3:"271";s:4:"thá";s:3:"272";s:5:"tặn";s:3:"273";s:4:"vào";s:3:"274";s:4:"vé ";s:3:"275";s:5:"vụ ";s:3:"276";s:3:"y b";s:3:"277";s:4:"àn ";s:3:"278";s:4:"áng";s:3:"279";s:4:"Æ¡ s";s:3:"280";s:5:"ầu ";s:3:"281";s:5:"ật ";s:3:"282";s:5:"ặng";s:3:"283";s:5:"á»c ";s:3:"284";s:5:"ở t";s:3:"285";s:5:"ững";s:3:"286";s:3:" du";s:3:"287";s:3:" lu";s:3:"288";s:3:" ta";s:3:"289";s:3:" to";s:3:"290";s:5:" từ";s:3:"291";s:5:" ở ";s:3:"292";s:3:"a v";s:3:"293";s:3:"ao ";s:3:"294";s:3:"c v";s:3:"295";s:5:"cả ";s:3:"296";s:3:"du ";s:3:"297";s:3:"g l";s:3:"298";s:5:"giả";s:3:"299";}s:5:"welsh";a:300:{s:3:"yn ";s:1:"0";s:3:"dd ";s:1:"1";s:3:" yn";s:1:"2";s:3:" y ";s:1:"3";s:3:"ydd";s:1:"4";s:3:"eth";s:1:"5";s:3:"th ";s:1:"6";s:3:" i ";s:1:"7";s:3:"aet";s:1:"8";s:3:"d y";s:1:"9";s:3:"ch ";s:2:"10";s:3:"od ";s:2:"11";s:3:"ol ";s:2:"12";s:3:"edd";s:2:"13";s:3:" ga";s:2:"14";s:3:" gw";s:2:"15";s:3:"'r ";s:2:"16";s:3:"au ";s:2:"17";s:3:"ddi";s:2:"18";s:3:"ad ";s:2:"19";s:3:" cy";s:2:"20";s:3:" gy";s:2:"21";s:3:" ei";s:2:"22";s:3:" o ";s:2:"23";s:3:"iad";s:2:"24";s:3:"yr ";s:2:"25";s:3:"an ";s:2:"26";s:3:"bod";s:2:"27";s:3:"wed";s:2:"28";s:3:" bo";s:2:"29";s:3:" dd";s:2:"30";s:3:"el ";s:2:"31";s:3:"n y";s:2:"32";s:3:" am";s:2:"33";s:3:"di ";s:2:"34";s:3:"edi";s:2:"35";s:3:"on ";s:2:"36";s:3:" we";s:2:"37";s:3:" ym";s:2:"38";s:3:" ar";s:2:"39";s:3:" rh";s:2:"40";s:3:"odd";s:2:"41";s:3:" ca";s:2:"42";s:3:" ma";s:2:"43";s:3:"ael";s:2:"44";s:3:"oed";s:2:"45";s:3:"dae";s:2:"46";s:3:"n a";s:2:"47";s:3:"dda";s:2:"48";s:3:"er ";s:2:"49";s:3:"h y";s:2:"50";s:3:"all";s:2:"51";s:3:"ei ";s:2:"52";s:3:" ll";s:2:"53";s:3:"am ";s:2:"54";s:3:"eu ";s:2:"55";s:3:"fod";s:2:"56";s:3:"fyd";s:2:"57";s:3:"l y";s:2:"58";s:3:"n g";s:2:"59";s:3:"wyn";s:2:"60";s:3:"d a";s:2:"61";s:3:"i g";s:2:"62";s:3:"mae";s:2:"63";s:3:"neu";s:2:"64";s:3:"os ";s:2:"65";s:3:" ne";s:2:"66";s:3:"d i";s:2:"67";s:3:"dod";s:2:"68";s:3:"dol";s:2:"69";s:3:"n c";s:2:"70";s:3:"r h";s:2:"71";s:3:"wyd";s:2:"72";s:3:"wyr";s:2:"73";s:3:"ai ";s:2:"74";s:3:"ar ";s:2:"75";s:3:"in ";s:2:"76";s:3:"rth";s:2:"77";s:3:" fy";s:2:"78";s:3:" he";s:2:"79";s:3:" me";s:2:"80";s:3:" yr";s:2:"81";s:3:"'n ";s:2:"82";s:3:"dia";s:2:"83";s:3:"est";s:2:"84";s:3:"h c";s:2:"85";s:3:"hai";s:2:"86";s:3:"i d";s:2:"87";s:3:"id ";s:2:"88";s:3:"r y";s:2:"89";s:3:"y b";s:2:"90";s:3:" dy";s:2:"91";s:3:" ha";s:2:"92";s:3:"ada";s:2:"93";s:3:"i b";s:2:"94";s:3:"n i";s:2:"95";s:3:"ote";s:2:"96";s:3:"rot";s:2:"97";s:3:"tes";s:2:"98";s:3:"y g";s:2:"99";s:3:"yd ";s:3:"100";s:3:" ad";s:3:"101";s:3:" mr";s:3:"102";s:3:" un";s:3:"103";s:3:"cyn";s:3:"104";s:3:"dau";s:3:"105";s:3:"ddy";s:3:"106";s:3:"edo";s:3:"107";s:3:"i c";s:3:"108";s:3:"i w";s:3:"109";s:3:"ith";s:3:"110";s:3:"lae";s:3:"111";s:3:"lla";s:3:"112";s:3:"nd ";s:3:"113";s:3:"oda";s:3:"114";s:3:"ryd";s:3:"115";s:3:"tho";s:3:"116";s:3:" a ";s:3:"117";s:3:" dr";s:3:"118";s:3:"aid";s:3:"119";s:3:"ain";s:3:"120";s:3:"ddo";s:3:"121";s:3:"dyd";s:3:"122";s:3:"fyn";s:3:"123";s:3:"gyn";s:3:"124";s:3:"hol";s:3:"125";s:3:"io ";s:3:"126";s:3:"o a";s:3:"127";s:3:"wch";s:3:"128";s:3:"wyb";s:3:"129";s:3:"ybo";s:3:"130";s:3:"ych";s:3:"131";s:3:" br";s:3:"132";s:3:" by";s:3:"133";s:3:" di";s:3:"134";s:3:" fe";s:3:"135";s:3:" na";s:3:"136";s:3:" o'";s:3:"137";s:3:" pe";s:3:"138";s:3:"art";s:3:"139";s:3:"byd";s:3:"140";s:3:"dro";s:3:"141";s:3:"gal";s:3:"142";s:3:"l e";s:3:"143";s:3:"lai";s:3:"144";s:3:"mr ";s:3:"145";s:3:"n n";s:3:"146";s:3:"r a";s:3:"147";s:3:"rhy";s:3:"148";s:3:"wn ";s:3:"149";s:3:"ynn";s:3:"150";s:3:" on";s:3:"151";s:3:" r ";s:3:"152";s:3:"cae";s:3:"153";s:3:"d g";s:3:"154";s:3:"d o";s:3:"155";s:3:"d w";s:3:"156";s:3:"gan";s:3:"157";s:3:"gwy";s:3:"158";s:3:"n d";s:3:"159";s:3:"n f";s:3:"160";s:3:"n o";s:3:"161";s:3:"ned";s:3:"162";s:3:"ni ";s:3:"163";s:3:"o'r";s:3:"164";s:3:"r d";s:3:"165";s:3:"ud ";s:3:"166";s:3:"wei";s:3:"167";s:3:"wrt";s:3:"168";s:3:" an";s:3:"169";s:3:" cw";s:3:"170";s:3:" da";s:3:"171";s:3:" ni";s:3:"172";s:3:" pa";s:3:"173";s:3:" pr";s:3:"174";s:3:" wy";s:3:"175";s:3:"d e";s:3:"176";s:3:"dai";s:3:"177";s:3:"dim";s:3:"178";s:3:"eud";s:3:"179";s:3:"gwa";s:3:"180";s:3:"idd";s:3:"181";s:3:"im ";s:3:"182";s:3:"iri";s:3:"183";s:3:"lwy";s:3:"184";s:3:"n b";s:3:"185";s:3:"nol";s:3:"186";s:3:"r o";s:3:"187";s:3:"rwy";s:3:"188";s:3:" ch";s:3:"189";s:3:" er";s:3:"190";s:3:" fo";s:3:"191";s:3:" ge";s:3:"192";s:3:" hy";s:3:"193";s:3:" i'";s:3:"194";s:3:" ro";s:3:"195";s:3:" sa";s:3:"196";s:3:" tr";s:3:"197";s:3:"bob";s:3:"198";s:3:"cwy";s:3:"199";s:3:"cyf";s:3:"200";s:3:"dio";s:3:"201";s:3:"dyn";s:3:"202";s:3:"eit";s:3:"203";s:3:"hel";s:3:"204";s:3:"hyn";s:3:"205";s:3:"ich";s:3:"206";s:3:"ll ";s:3:"207";s:3:"mdd";s:3:"208";s:3:"n r";s:3:"209";s:3:"ond";s:3:"210";s:3:"pro";s:3:"211";s:3:"r c";s:3:"212";s:3:"r g";s:3:"213";s:3:"red";s:3:"214";s:3:"rha";s:3:"215";s:3:"u a";s:3:"216";s:3:"u c";s:3:"217";s:3:"u y";s:3:"218";s:3:"y c";s:3:"219";s:3:"ymd";s:3:"220";s:3:"ymr";s:3:"221";s:3:"yw ";s:3:"222";s:3:" ac";s:3:"223";s:3:" be";s:3:"224";s:3:" bl";s:3:"225";s:3:" co";s:3:"226";s:3:" os";s:3:"227";s:3:"adw";s:3:"228";s:3:"ae ";s:3:"229";s:3:"af ";s:3:"230";s:3:"d p";s:3:"231";s:3:"efn";s:3:"232";s:3:"eic";s:3:"233";s:3:"en ";s:3:"234";s:3:"eol";s:3:"235";s:3:"es ";s:3:"236";s:3:"fer";s:3:"237";s:3:"gel";s:3:"238";s:3:"h g";s:3:"239";s:3:"hod";s:3:"240";s:3:"ied";s:3:"241";s:3:"ir ";s:3:"242";s:3:"laf";s:3:"243";s:3:"n h";s:3:"244";s:3:"na ";s:3:"245";s:3:"nyd";s:3:"246";s:3:"odo";s:3:"247";s:3:"ofy";s:3:"248";s:3:"rdd";s:3:"249";s:3:"rie";s:3:"250";s:3:"ros";s:3:"251";s:3:"stw";s:3:"252";s:3:"twy";s:3:"253";s:3:"yda";s:3:"254";s:3:"yng";s:3:"255";s:3:" at";s:3:"256";s:3:" de";s:3:"257";s:3:" go";s:3:"258";s:3:" id";s:3:"259";s:3:" oe";s:3:"260";s:4:" â ";s:3:"261";s:3:"'ch";s:3:"262";s:3:"ac ";s:3:"263";s:3:"ach";s:3:"264";s:3:"ae'";s:3:"265";s:3:"al ";s:3:"266";s:3:"bl ";s:3:"267";s:3:"d c";s:3:"268";s:3:"d l";s:3:"269";s:3:"dan";s:3:"270";s:3:"dde";s:3:"271";s:3:"ddw";s:3:"272";s:3:"dir";s:3:"273";s:3:"dla";s:3:"274";s:3:"ed ";s:3:"275";s:3:"ela";s:3:"276";s:3:"ell";s:3:"277";s:3:"ene";s:3:"278";s:3:"ewn";s:3:"279";s:3:"gyd";s:3:"280";s:3:"hau";s:3:"281";s:3:"hyw";s:3:"282";s:3:"i a";s:3:"283";s:3:"i f";s:3:"284";s:3:"iol";s:3:"285";s:3:"ion";s:3:"286";s:3:"l a";s:3:"287";s:3:"l i";s:3:"288";s:3:"lia";s:3:"289";s:3:"med";s:3:"290";s:3:"mon";s:3:"291";s:3:"n s";s:3:"292";s:3:"no ";s:3:"293";s:3:"obl";s:3:"294";s:3:"ola";s:3:"295";s:3:"ref";s:3:"296";s:3:"rn ";s:3:"297";s:3:"thi";s:3:"298";s:3:"un ";s:3:"299";}}s:18:"trigram-unicodemap";a:13:{s:11:"Basic Latin";a:38:{s:8:"albanian";i:661;s:5:"azeri";i:653;s:7:"bengali";i:1;s:7:"cebuano";i:750;s:8:"croatian";i:733;s:5:"czech";i:652;s:6:"danish";i:734;s:5:"dutch";i:741;s:7:"english";i:723;s:8:"estonian";i:739;s:7:"finnish";i:743;s:6:"french";i:733;s:6:"german";i:750;s:5:"hausa";i:752;s:8:"hawaiian";i:751;s:9:"hungarian";i:693;s:9:"icelandic";i:662;s:10:"indonesian";i:776;s:7:"italian";i:741;s:5:"latin";i:764;s:7:"latvian";i:693;s:10:"lithuanian";i:738;s:9:"mongolian";i:19;s:9:"norwegian";i:742;s:6:"pidgin";i:702;s:6:"polish";i:701;s:10:"portuguese";i:726;s:8:"romanian";i:714;s:6:"slovak";i:677;s:7:"slovene";i:740;s:6:"somali";i:755;s:7:"spanish";i:749;s:7:"swahili";i:770;s:7:"swedish";i:717;s:7:"tagalog";i:767;s:7:"turkish";i:673;s:10:"vietnamese";i:503;s:5:"welsh";i:728;}s:18:"Latin-1 Supplement";a:21:{s:8:"albanian";i:68;s:5:"azeri";i:10;s:5:"czech";i:51;s:6:"danish";i:13;s:8:"estonian";i:19;s:7:"finnish";i:39;s:6:"french";i:21;s:6:"german";i:8;s:9:"hungarian";i:72;s:9:"icelandic";i:80;s:7:"italian";i:3;s:9:"norwegian";i:5;s:6:"polish";i:6;s:10:"portuguese";i:18;s:8:"romanian";i:9;s:6:"slovak";i:37;s:7:"spanish";i:6;s:7:"swedish";i:26;s:7:"turkish";i:25;s:10:"vietnamese";i:56;s:5:"welsh";i:1;}s:14:"[Malformatted]";a:42:{s:8:"albanian";i:68;s:6:"arabic";i:724;s:5:"azeri";i:109;s:7:"bengali";i:1472;s:9:"bulgarian";i:750;s:8:"croatian";i:10;s:5:"czech";i:78;s:6:"danish";i:13;s:8:"estonian";i:19;s:5:"farsi";i:706;s:7:"finnish";i:39;s:6:"french";i:21;s:6:"german";i:8;s:5:"hausa";i:8;s:5:"hindi";i:1386;s:9:"hungarian";i:74;s:9:"icelandic";i:80;s:7:"italian";i:3;s:6:"kazakh";i:767;s:6:"kyrgyz";i:767;s:7:"latvian";i:56;s:10:"lithuanian";i:30;s:10:"macedonian";i:755;s:9:"mongolian";i:743;s:6:"nepali";i:1514;s:9:"norwegian";i:5;s:6:"pashto";i:677;s:6:"polish";i:45;s:10:"portuguese";i:18;s:8:"romanian";i:31;s:7:"russian";i:759;s:7:"serbian";i:757;s:6:"slovak";i:45;s:7:"slovene";i:10;s:7:"spanish";i:6;s:7:"swedish";i:26;s:7:"turkish";i:87;s:9:"ukrainian";i:748;s:4:"urdu";i:682;s:5:"uzbek";i:773;s:10:"vietnamese";i:289;s:5:"welsh";i:1;}s:6:"Arabic";a:4:{s:6:"arabic";i:724;s:5:"farsi";i:706;s:6:"pashto";i:677;s:4:"urdu";i:682;}s:16:"Latin Extended-B";a:3:{s:5:"azeri";i:73;s:5:"hausa";i:8;s:10:"vietnamese";i:19;}s:16:"Latin Extended-A";a:12:{s:5:"azeri";i:25;s:8:"croatian";i:10;s:5:"czech";i:27;s:9:"hungarian";i:2;s:7:"latvian";i:56;s:10:"lithuanian";i:30;s:6:"polish";i:39;s:8:"romanian";i:22;s:6:"slovak";i:8;s:7:"slovene";i:10;s:7:"turkish";i:62;s:10:"vietnamese";i:20;}s:27:"Combining Diacritical Marks";a:1:{s:5:"azeri";i:1;}s:7:"Bengali";a:1:{s:7:"bengali";i:714;}s:8:"Gujarati";a:1:{s:7:"bengali";i:16;}s:8:"Gurmukhi";a:1:{s:7:"bengali";i:6;}s:8:"Cyrillic";a:9:{s:9:"bulgarian";i:750;s:6:"kazakh";i:767;s:6:"kyrgyz";i:767;s:10:"macedonian";i:755;s:9:"mongolian";i:743;s:7:"russian";i:759;s:7:"serbian";i:757;s:9:"ukrainian";i:748;s:5:"uzbek";i:773;}s:10:"Devanagari";a:2:{s:5:"hindi";i:693;s:6:"nepali";i:757;}s:25:"Latin Extended Additional";a:1:{s:10:"vietnamese";i:97;}}} \ No newline at end of file
diff --git a/library/langdet/data/unicode_blocks.dat b/library/langdet/data/unicode_blocks.dat
new file mode 100644
index 000000000..3b24cd2c1
--- /dev/null
+++ b/library/langdet/data/unicode_blocks.dat
@@ -0,0 +1 @@
+a:145:{i:0;a:3:{i:0;s:6:"0x0000";i:1;s:6:"0x007F";i:2;s:11:"Basic Latin";}i:1;a:3:{i:0;s:6:"0x0080";i:1;s:6:"0x00FF";i:2;s:18:"Latin-1 Supplement";}i:2;a:3:{i:0;s:6:"0x0100";i:1;s:6:"0x017F";i:2;s:16:"Latin Extended-A";}i:3;a:3:{i:0;s:6:"0x0180";i:1;s:6:"0x024F";i:2;s:16:"Latin Extended-B";}i:4;a:3:{i:0;s:6:"0x0250";i:1;s:6:"0x02AF";i:2;s:14:"IPA Extensions";}i:5;a:3:{i:0;s:6:"0x02B0";i:1;s:6:"0x02FF";i:2;s:24:"Spacing Modifier Letters";}i:6;a:3:{i:0;s:6:"0x0300";i:1;s:6:"0x036F";i:2;s:27:"Combining Diacritical Marks";}i:7;a:3:{i:0;s:6:"0x0370";i:1;s:6:"0x03FF";i:2;s:16:"Greek and Coptic";}i:8;a:3:{i:0;s:6:"0x0400";i:1;s:6:"0x04FF";i:2;s:8:"Cyrillic";}i:9;a:3:{i:0;s:6:"0x0500";i:1;s:6:"0x052F";i:2;s:19:"Cyrillic Supplement";}i:10;a:3:{i:0;s:6:"0x0530";i:1;s:6:"0x058F";i:2;s:8:"Armenian";}i:11;a:3:{i:0;s:6:"0x0590";i:1;s:6:"0x05FF";i:2;s:6:"Hebrew";}i:12;a:3:{i:0;s:6:"0x0600";i:1;s:6:"0x06FF";i:2;s:6:"Arabic";}i:13;a:3:{i:0;s:6:"0x0700";i:1;s:6:"0x074F";i:2;s:6:"Syriac";}i:14;a:3:{i:0;s:6:"0x0750";i:1;s:6:"0x077F";i:2;s:17:"Arabic Supplement";}i:15;a:3:{i:0;s:6:"0x0780";i:1;s:6:"0x07BF";i:2;s:6:"Thaana";}i:16;a:3:{i:0;s:6:"0x0900";i:1;s:6:"0x097F";i:2;s:10:"Devanagari";}i:17;a:3:{i:0;s:6:"0x0980";i:1;s:6:"0x09FF";i:2;s:7:"Bengali";}i:18;a:3:{i:0;s:6:"0x0A00";i:1;s:6:"0x0A7F";i:2;s:8:"Gurmukhi";}i:19;a:3:{i:0;s:6:"0x0A80";i:1;s:6:"0x0AFF";i:2;s:8:"Gujarati";}i:20;a:3:{i:0;s:6:"0x0B00";i:1;s:6:"0x0B7F";i:2;s:5:"Oriya";}i:21;a:3:{i:0;s:6:"0x0B80";i:1;s:6:"0x0BFF";i:2;s:5:"Tamil";}i:22;a:3:{i:0;s:6:"0x0C00";i:1;s:6:"0x0C7F";i:2;s:6:"Telugu";}i:23;a:3:{i:0;s:6:"0x0C80";i:1;s:6:"0x0CFF";i:2;s:7:"Kannada";}i:24;a:3:{i:0;s:6:"0x0D00";i:1;s:6:"0x0D7F";i:2;s:9:"Malayalam";}i:25;a:3:{i:0;s:6:"0x0D80";i:1;s:6:"0x0DFF";i:2;s:7:"Sinhala";}i:26;a:3:{i:0;s:6:"0x0E00";i:1;s:6:"0x0E7F";i:2;s:4:"Thai";}i:27;a:3:{i:0;s:6:"0x0E80";i:1;s:6:"0x0EFF";i:2;s:3:"Lao";}i:28;a:3:{i:0;s:6:"0x0F00";i:1;s:6:"0x0FFF";i:2;s:7:"Tibetan";}i:29;a:3:{i:0;s:6:"0x1000";i:1;s:6:"0x109F";i:2;s:7:"Myanmar";}i:30;a:3:{i:0;s:6:"0x10A0";i:1;s:6:"0x10FF";i:2;s:8:"Georgian";}i:31;a:3:{i:0;s:6:"0x1100";i:1;s:6:"0x11FF";i:2;s:11:"Hangul Jamo";}i:32;a:3:{i:0;s:6:"0x1200";i:1;s:6:"0x137F";i:2;s:8:"Ethiopic";}i:33;a:3:{i:0;s:6:"0x1380";i:1;s:6:"0x139F";i:2;s:19:"Ethiopic Supplement";}i:34;a:3:{i:0;s:6:"0x13A0";i:1;s:6:"0x13FF";i:2;s:8:"Cherokee";}i:35;a:3:{i:0;s:6:"0x1400";i:1;s:6:"0x167F";i:2;s:37:"Unified Canadian Aboriginal Syllabics";}i:36;a:3:{i:0;s:6:"0x1680";i:1;s:6:"0x169F";i:2;s:5:"Ogham";}i:37;a:3:{i:0;s:6:"0x16A0";i:1;s:6:"0x16FF";i:2;s:5:"Runic";}i:38;a:3:{i:0;s:6:"0x1700";i:1;s:6:"0x171F";i:2;s:7:"Tagalog";}i:39;a:3:{i:0;s:6:"0x1720";i:1;s:6:"0x173F";i:2;s:7:"Hanunoo";}i:40;a:3:{i:0;s:6:"0x1740";i:1;s:6:"0x175F";i:2;s:5:"Buhid";}i:41;a:3:{i:0;s:6:"0x1760";i:1;s:6:"0x177F";i:2;s:8:"Tagbanwa";}i:42;a:3:{i:0;s:6:"0x1780";i:1;s:6:"0x17FF";i:2;s:5:"Khmer";}i:43;a:3:{i:0;s:6:"0x1800";i:1;s:6:"0x18AF";i:2;s:9:"Mongolian";}i:44;a:3:{i:0;s:6:"0x1900";i:1;s:6:"0x194F";i:2;s:5:"Limbu";}i:45;a:3:{i:0;s:6:"0x1950";i:1;s:6:"0x197F";i:2;s:6:"Tai Le";}i:46;a:3:{i:0;s:6:"0x1980";i:1;s:6:"0x19DF";i:2;s:11:"New Tai Lue";}i:47;a:3:{i:0;s:6:"0x19E0";i:1;s:6:"0x19FF";i:2;s:13:"Khmer Symbols";}i:48;a:3:{i:0;s:6:"0x1A00";i:1;s:6:"0x1A1F";i:2;s:8:"Buginese";}i:49;a:3:{i:0;s:6:"0x1D00";i:1;s:6:"0x1D7F";i:2;s:19:"Phonetic Extensions";}i:50;a:3:{i:0;s:6:"0x1D80";i:1;s:6:"0x1DBF";i:2;s:30:"Phonetic Extensions Supplement";}i:51;a:3:{i:0;s:6:"0x1DC0";i:1;s:6:"0x1DFF";i:2;s:38:"Combining Diacritical Marks Supplement";}i:52;a:3:{i:0;s:6:"0x1E00";i:1;s:6:"0x1EFF";i:2;s:25:"Latin Extended Additional";}i:53;a:3:{i:0;s:6:"0x1F00";i:1;s:6:"0x1FFF";i:2;s:14:"Greek Extended";}i:54;a:3:{i:0;s:6:"0x2000";i:1;s:6:"0x206F";i:2;s:19:"General Punctuation";}i:55;a:3:{i:0;s:6:"0x2070";i:1;s:6:"0x209F";i:2;s:27:"Superscripts and Subscripts";}i:56;a:3:{i:0;s:6:"0x20A0";i:1;s:6:"0x20CF";i:2;s:16:"Currency Symbols";}i:57;a:3:{i:0;s:6:"0x20D0";i:1;s:6:"0x20FF";i:2;s:39:"Combining Diacritical Marks for Symbols";}i:58;a:3:{i:0;s:6:"0x2100";i:1;s:6:"0x214F";i:2;s:18:"Letterlike Symbols";}i:59;a:3:{i:0;s:6:"0x2150";i:1;s:6:"0x218F";i:2;s:12:"Number Forms";}i:60;a:3:{i:0;s:6:"0x2190";i:1;s:6:"0x21FF";i:2;s:6:"Arrows";}i:61;a:3:{i:0;s:6:"0x2200";i:1;s:6:"0x22FF";i:2;s:22:"Mathematical Operators";}i:62;a:3:{i:0;s:6:"0x2300";i:1;s:6:"0x23FF";i:2;s:23:"Miscellaneous Technical";}i:63;a:3:{i:0;s:6:"0x2400";i:1;s:6:"0x243F";i:2;s:16:"Control Pictures";}i:64;a:3:{i:0;s:6:"0x2440";i:1;s:6:"0x245F";i:2;s:29:"Optical Character Recognition";}i:65;a:3:{i:0;s:6:"0x2460";i:1;s:6:"0x24FF";i:2;s:22:"Enclosed Alphanumerics";}i:66;a:3:{i:0;s:6:"0x2500";i:1;s:6:"0x257F";i:2;s:11:"Box Drawing";}i:67;a:3:{i:0;s:6:"0x2580";i:1;s:6:"0x259F";i:2;s:14:"Block Elements";}i:68;a:3:{i:0;s:6:"0x25A0";i:1;s:6:"0x25FF";i:2;s:16:"Geometric Shapes";}i:69;a:3:{i:0;s:6:"0x2600";i:1;s:6:"0x26FF";i:2;s:21:"Miscellaneous Symbols";}i:70;a:3:{i:0;s:6:"0x2700";i:1;s:6:"0x27BF";i:2;s:8:"Dingbats";}i:71;a:3:{i:0;s:6:"0x27C0";i:1;s:6:"0x27EF";i:2;s:36:"Miscellaneous Mathematical Symbols-A";}i:72;a:3:{i:0;s:6:"0x27F0";i:1;s:6:"0x27FF";i:2;s:21:"Supplemental Arrows-A";}i:73;a:3:{i:0;s:6:"0x2800";i:1;s:6:"0x28FF";i:2;s:16:"Braille Patterns";}i:74;a:3:{i:0;s:6:"0x2900";i:1;s:6:"0x297F";i:2;s:21:"Supplemental Arrows-B";}i:75;a:3:{i:0;s:6:"0x2980";i:1;s:6:"0x29FF";i:2;s:36:"Miscellaneous Mathematical Symbols-B";}i:76;a:3:{i:0;s:6:"0x2A00";i:1;s:6:"0x2AFF";i:2;s:35:"Supplemental Mathematical Operators";}i:77;a:3:{i:0;s:6:"0x2B00";i:1;s:6:"0x2BFF";i:2;s:32:"Miscellaneous Symbols and Arrows";}i:78;a:3:{i:0;s:6:"0x2C00";i:1;s:6:"0x2C5F";i:2;s:10:"Glagolitic";}i:79;a:3:{i:0;s:6:"0x2C80";i:1;s:6:"0x2CFF";i:2;s:6:"Coptic";}i:80;a:3:{i:0;s:6:"0x2D00";i:1;s:6:"0x2D2F";i:2;s:19:"Georgian Supplement";}i:81;a:3:{i:0;s:6:"0x2D30";i:1;s:6:"0x2D7F";i:2;s:8:"Tifinagh";}i:82;a:3:{i:0;s:6:"0x2D80";i:1;s:6:"0x2DDF";i:2;s:17:"Ethiopic Extended";}i:83;a:3:{i:0;s:6:"0x2E00";i:1;s:6:"0x2E7F";i:2;s:24:"Supplemental Punctuation";}i:84;a:3:{i:0;s:6:"0x2E80";i:1;s:6:"0x2EFF";i:2;s:23:"CJK Radicals Supplement";}i:85;a:3:{i:0;s:6:"0x2F00";i:1;s:6:"0x2FDF";i:2;s:15:"Kangxi Radicals";}i:86;a:3:{i:0;s:6:"0x2FF0";i:1;s:6:"0x2FFF";i:2;s:34:"Ideographic Description Characters";}i:87;a:3:{i:0;s:6:"0x3000";i:1;s:6:"0x303F";i:2;s:27:"CJK Symbols and Punctuation";}i:88;a:3:{i:0;s:6:"0x3040";i:1;s:6:"0x309F";i:2;s:8:"Hiragana";}i:89;a:3:{i:0;s:6:"0x30A0";i:1;s:6:"0x30FF";i:2;s:8:"Katakana";}i:90;a:3:{i:0;s:6:"0x3100";i:1;s:6:"0x312F";i:2;s:8:"Bopomofo";}i:91;a:3:{i:0;s:6:"0x3130";i:1;s:6:"0x318F";i:2;s:25:"Hangul Compatibility Jamo";}i:92;a:3:{i:0;s:6:"0x3190";i:1;s:6:"0x319F";i:2;s:6:"Kanbun";}i:93;a:3:{i:0;s:6:"0x31A0";i:1;s:6:"0x31BF";i:2;s:17:"Bopomofo Extended";}i:94;a:3:{i:0;s:6:"0x31C0";i:1;s:6:"0x31EF";i:2;s:11:"CJK Strokes";}i:95;a:3:{i:0;s:6:"0x31F0";i:1;s:6:"0x31FF";i:2;s:28:"Katakana Phonetic Extensions";}i:96;a:3:{i:0;s:6:"0x3200";i:1;s:6:"0x32FF";i:2;s:31:"Enclosed CJK Letters and Months";}i:97;a:3:{i:0;s:6:"0x3300";i:1;s:6:"0x33FF";i:2;s:17:"CJK Compatibility";}i:98;a:3:{i:0;s:6:"0x3400";i:1;s:6:"0x4DBF";i:2;s:34:"CJK Unified Ideographs Extension A";}i:99;a:3:{i:0;s:6:"0x4DC0";i:1;s:6:"0x4DFF";i:2;s:23:"Yijing Hexagram Symbols";}i:100;a:3:{i:0;s:6:"0x4E00";i:1;s:6:"0x9FFF";i:2;s:22:"CJK Unified Ideographs";}i:101;a:3:{i:0;s:6:"0xA000";i:1;s:6:"0xA48F";i:2;s:12:"Yi Syllables";}i:102;a:3:{i:0;s:6:"0xA490";i:1;s:6:"0xA4CF";i:2;s:11:"Yi Radicals";}i:103;a:3:{i:0;s:6:"0xA700";i:1;s:6:"0xA71F";i:2;s:21:"Modifier Tone Letters";}i:104;a:3:{i:0;s:6:"0xA800";i:1;s:6:"0xA82F";i:2;s:12:"Syloti Nagri";}i:105;a:3:{i:0;s:6:"0xAC00";i:1;s:6:"0xD7AF";i:2;s:16:"Hangul Syllables";}i:106;a:3:{i:0;s:6:"0xD800";i:1;s:6:"0xDB7F";i:2;s:15:"High Surrogates";}i:107;a:3:{i:0;s:6:"0xDB80";i:1;s:6:"0xDBFF";i:2;s:27:"High Private Use Surrogates";}i:108;a:3:{i:0;s:6:"0xDC00";i:1;s:6:"0xDFFF";i:2;s:14:"Low Surrogates";}i:109;a:3:{i:0;s:6:"0xE000";i:1;s:6:"0xF8FF";i:2;s:16:"Private Use Area";}i:110;a:3:{i:0;s:6:"0xF900";i:1;s:6:"0xFAFF";i:2;s:28:"CJK Compatibility Ideographs";}i:111;a:3:{i:0;s:6:"0xFB00";i:1;s:6:"0xFB4F";i:2;s:29:"Alphabetic Presentation Forms";}i:112;a:3:{i:0;s:6:"0xFB50";i:1;s:6:"0xFDFF";i:2;s:27:"Arabic Presentation Forms-A";}i:113;a:3:{i:0;s:6:"0xFE00";i:1;s:6:"0xFE0F";i:2;s:19:"Variation Selectors";}i:114;a:3:{i:0;s:6:"0xFE10";i:1;s:6:"0xFE1F";i:2;s:14:"Vertical Forms";}i:115;a:3:{i:0;s:6:"0xFE20";i:1;s:6:"0xFE2F";i:2;s:20:"Combining Half Marks";}i:116;a:3:{i:0;s:6:"0xFE30";i:1;s:6:"0xFE4F";i:2;s:23:"CJK Compatibility Forms";}i:117;a:3:{i:0;s:6:"0xFE50";i:1;s:6:"0xFE6F";i:2;s:19:"Small Form Variants";}i:118;a:3:{i:0;s:6:"0xFE70";i:1;s:6:"0xFEFF";i:2;s:27:"Arabic Presentation Forms-B";}i:119;a:3:{i:0;s:6:"0xFF00";i:1;s:6:"0xFFEF";i:2;s:29:"Halfwidth and Fullwidth Forms";}i:120;a:3:{i:0;s:6:"0xFFF0";i:1;s:6:"0xFFFF";i:2;s:8:"Specials";}i:121;a:3:{i:0;s:7:"0x10000";i:1;s:7:"0x1007F";i:2;s:18:"Linear B Syllabary";}i:122;a:3:{i:0;s:7:"0x10080";i:1;s:7:"0x100FF";i:2;s:18:"Linear B Ideograms";}i:123;a:3:{i:0;s:7:"0x10100";i:1;s:7:"0x1013F";i:2;s:14:"Aegean Numbers";}i:124;a:3:{i:0;s:7:"0x10140";i:1;s:7:"0x1018F";i:2;s:21:"Ancient Greek Numbers";}i:125;a:3:{i:0;s:7:"0x10300";i:1;s:7:"0x1032F";i:2;s:10:"Old Italic";}i:126;a:3:{i:0;s:7:"0x10330";i:1;s:7:"0x1034F";i:2;s:6:"Gothic";}i:127;a:3:{i:0;s:7:"0x10380";i:1;s:7:"0x1039F";i:2;s:8:"Ugaritic";}i:128;a:3:{i:0;s:7:"0x103A0";i:1;s:7:"0x103DF";i:2;s:11:"Old Persian";}i:129;a:3:{i:0;s:7:"0x10400";i:1;s:7:"0x1044F";i:2;s:7:"Deseret";}i:130;a:3:{i:0;s:7:"0x10450";i:1;s:7:"0x1047F";i:2;s:7:"Shavian";}i:131;a:3:{i:0;s:7:"0x10480";i:1;s:7:"0x104AF";i:2;s:7:"Osmanya";}i:132;a:3:{i:0;s:7:"0x10800";i:1;s:7:"0x1083F";i:2;s:17:"Cypriot Syllabary";}i:133;a:3:{i:0;s:7:"0x10A00";i:1;s:7:"0x10A5F";i:2;s:10:"Kharoshthi";}i:134;a:3:{i:0;s:7:"0x1D000";i:1;s:7:"0x1D0FF";i:2;s:25:"Byzantine Musical Symbols";}i:135;a:3:{i:0;s:7:"0x1D100";i:1;s:7:"0x1D1FF";i:2;s:15:"Musical Symbols";}i:136;a:3:{i:0;s:7:"0x1D200";i:1;s:7:"0x1D24F";i:2;s:30:"Ancient Greek Musical Notation";}i:137;a:3:{i:0;s:7:"0x1D300";i:1;s:7:"0x1D35F";i:2;s:21:"Tai Xuan Jing Symbols";}i:138;a:3:{i:0;s:7:"0x1D400";i:1;s:7:"0x1D7FF";i:2;s:33:"Mathematical Alphanumeric Symbols";}i:139;a:3:{i:0;s:7:"0x20000";i:1;s:7:"0x2A6DF";i:2;s:34:"CJK Unified Ideographs Extension B";}i:140;a:3:{i:0;s:7:"0x2F800";i:1;s:7:"0x2FA1F";i:2;s:39:"CJK Compatibility Ideographs Supplement";}i:141;a:3:{i:0;s:7:"0xE0000";i:1;s:7:"0xE007F";i:2;s:4:"Tags";}i:142;a:3:{i:0;s:7:"0xE0100";i:1;s:7:"0xE01EF";i:2;s:30:"Variation Selectors Supplement";}i:143;a:3:{i:0;s:7:"0xF0000";i:1;s:7:"0xFFFFF";i:2;s:32:"Supplementary Private Use Area-A";}i:144;a:3:{i:0;s:8:"0x100000";i:1;s:8:"0x10FFFF";i:2;s:32:"Supplementary Private Use Area-B";}} \ No newline at end of file
diff --git a/library/langdet/docs/example_clui.php b/library/langdet/docs/example_clui.php
new file mode 100644
index 000000000..8e7d8577d
--- /dev/null
+++ b/library/langdet/docs/example_clui.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * example usage (CLI)
+ *
+ * @package Text_LanguageDetect
+ * @version CVS: $Id: example_clui.php 322305 2012-01-15 00:04:17Z clockwerx $
+ */
+
+require_once 'Text/LanguageDetect.php';
+
+$l = new Text_LanguageDetect;
+
+$stdin = fopen('php://stdin', 'r');
+
+echo "Supported languages:\n";
+$langs = $l->getLanguages();
+sort($langs);
+echo join(', ', $langs);
+
+echo "\ntotal ", count($langs), "\n\n";
+
+while ($line = fgets($stdin)) {
+ $result = $l->detect($line, 4);
+ print_r($result);
+ $blocks = $l->detectUnicodeBlocks($line, true);
+ print_r($blocks);
+}
+
+fclose($stdin);
+unset($l);
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+?>
diff --git a/library/langdet/docs/example_web.php b/library/langdet/docs/example_web.php
new file mode 100644
index 000000000..1e155fef2
--- /dev/null
+++ b/library/langdet/docs/example_web.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * example usage (web)
+ *
+ * @package Text_LanguageDetect
+ * @version CVS: $Id: example_web.php 205493 2006-01-18 00:26:57Z taak $
+ */
+
+// browsers will encode multi-byte characters wrong unless they think the page is utf8-encoded
+header('Content-type: text/html; charset=utf-8', true);
+
+require_once 'Text/LanguageDetect.php';
+
+$l = new Text_LanguageDetect;
+if (isset($_REQUEST['q'])) {
+ $q = stripslashes($_REQUEST['q']);
+}
+
+?>
+<html>
+<head>
+<title>Text_LanguageDetect demonstration</title>
+</head>
+<body>
+<h2>Text_LanguageDetect</h2>
+<?
+echo "<small>Supported languages:\n";
+$langs = $l->getLanguages();
+sort($langs);
+foreach ($langs as $lang) {
+ echo ucfirst($lang), ', ';
+ $i++;
+}
+
+echo "<br />total $i</small><br /><br />";
+
+?>
+<form method="post">
+Enter text to identify language (at least a couple of sentences):<br />
+<textarea name="q" wrap="virtual" cols="80" rows="8"><?= $q ?></textarea>
+<br />
+<input type="submit" value="Submit" />
+</form>
+<?
+if (isset($q) && strlen($q)) {
+ $len = $l->utf8strlen($q);
+ if ($len < 20) { // this value picked somewhat arbitrarily
+ echo "Warning: string not very long ($len chars)<br />\n";
+ }
+
+ $result = $l->detectConfidence($q);
+
+ if ($result == null) {
+ echo "Text_LanguageDetect cannot identify this piece of text. <br /><br />\n";
+ } else {
+ echo "Text_LanguageDetect thinks this text is written in <b>{$result['language']}</b> ({$result['similarity']}, {$result['confidence']})<br /><br />\n";
+ }
+
+ $result = $l->detectUnicodeBlocks($q, false);
+ if (!empty($result)) {
+ arsort($result);
+ echo "Unicode blocks present: ", join(', ', array_keys($result)), "\n<br /><br />";
+ }
+}
+
+unset($l);
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+?>
+</body></html>
diff --git a/library/langdet/docs/iso.php b/library/langdet/docs/iso.php
new file mode 100644
index 000000000..6d7ec1d2e
--- /dev/null
+++ b/library/langdet/docs/iso.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Demonstrates how to use ISO language codes.
+ *
+ * The "name mode" changes the way languages are accepted and returned.
+ */
+require_once 'Text/LanguageDetect.php';
+$l = new Text_LanguageDetect();
+
+
+//will output the ISO 639-1 two-letter language code
+// "de"
+$l->setNameMode(2);
+echo $l->detectSimple('Das ist ein kleiner Text') . "\n";
+
+//will output the ISO 639-2 three-letter language code
+// "deu"
+$l->setNameMode(3);
+echo $l->detectSimple('Das ist ein kleiner Text') . "\n";
+
+?> \ No newline at end of file
diff --git a/library/langdet/tests/Text_LanguageDetectTest.php b/library/langdet/tests/Text_LanguageDetectTest.php
new file mode 100644
index 000000000..bbf4dd779
--- /dev/null
+++ b/library/langdet/tests/Text_LanguageDetectTest.php
@@ -0,0 +1,2056 @@
+<?php
+
+/**
+ * @package Text_LanguageDetect
+ * @version CVS: $Id: Text_LanguageDetectTest.php 322353 2012-01-16 08:41:43Z cweiske $
+ */
+set_include_path(
+ __DIR__ . '/../' . PATH_SEPARATOR . get_include_path()
+);
+error_reporting(E_ALL|E_STRICT);
+
+require_once 'Text/LanguageDetect.php';
+require_once 'PHPUnit/Framework/TestCase.php';
+
+class Text_LanguageDetectTest extends PHPUnit_Framework_TestCase {
+
+ function setup ()
+ {
+ ini_set('magic_quotes_runtime', 0);
+ $this->x = new Text_LanguageDetect();
+ }
+
+ function tearDown ()
+ {
+ unset($this->x);
+ }
+
+ function test_get_data_locAbsolute()
+ {
+ $this->assertEquals(
+ '/path/to/file',
+ $this->x->_get_data_loc('/path/to/file')
+ );
+ }
+
+ function test_get_data_locPearPath()
+ {
+ $this->x->_data_dir = '/path/to/pear/data';
+ $this->assertEquals(
+ '/path/to/pear/data/Text_LanguageDetect/file',
+ $this->x->_get_data_loc('file')
+ );
+ }
+
+ /**
+ * @expectedException Text_LanguageDetect_Exception
+ * @expectedExceptionMessage Language database does not exist:
+ */
+ function test_readdbNonexistingFile()
+ {
+ $this->x->_readdb('thisfiledoesnotexist');
+ }
+
+ /**
+ * @expectedException Text_LanguageDetect_Exception
+ * @expectedExceptionMessage Language database is not readable:
+ */
+ function test_readdbUnreadableFile()
+ {
+ $name = tempnam(sys_get_temp_dir(), 'unittest-Text_LanguageDetect-');
+ chmod($name, 0000);
+ $this->x->_readdb($name);
+ }
+
+ /**
+ * @expectedException Text_LanguageDetect_Exception
+ * @expectedExceptionMessage Language database has no elements.
+ */
+ function test_checkTrigramEmpty()
+ {
+ $this->x->_checkTrigram(array());
+ }
+
+ /**
+ * @expectedException Text_LanguageDetect_Exception
+ * @expectedExceptionMessage Language database is not an array
+ */
+ function test_checkTrigramNoArray()
+ {
+ $this->x->_checkTrigram('foo');
+ }
+
+ /**
+ * @expectedException Text_LanguageDetect_Exception
+ * @expectedExceptionMessage Error loading database. Try turning magic_quotes_runtime off
+ */
+ function test_checkTrigramNoArrayMagicQuotes()
+ {
+ if (version_compare(PHP_VERSION, '5.4.0-dev') >= 0) {
+ $this->markTestSkipped('5.4.0 has no magic quotes anymore');
+ }
+ ini_set('magic_quotes_runtime', 1);
+ $this->x->_checkTrigram('foo');
+ }
+
+ function test_splitter ()
+ {
+ $str = 'hello';
+
+ $result = $this->x->_trigram($str);
+
+ $this->assertEquals(array(' he' => 1, 'hel' => 1, 'ell' => 1, 'llo' => 1, 'lo ' => 1), $result);
+
+ $str = 'aa aa whatever';
+
+ $result = $this->x->_trigram($str);
+ $this->assertEquals(2, $result[' aa']);
+ $this->assertEquals(2, $result['aa ']);
+ $this->assertEquals(1, $result['a a']);
+
+ $str = 'aa aa';
+ $result = $this->x->_trigram($str);
+ $this->assertArrayNotHasKey(' a', $result, ' a');
+ $this->assertArrayNotHasKey('a ', $result, 'a ');
+ }
+
+ function test_splitter2 ()
+ {
+ $str = 'resumé';
+
+ $result = $this->x->_trigram($str);
+
+ $this->assertTrue(isset($result['mé ']), 'mé ');
+ $this->assertTrue(isset($result['umé']), 'umé');
+ $this->assertTrue(!isset($result['é ']), 'é');
+
+ // tests lower-casing accented characters
+ $str = 'resumÉ';
+
+ $result = $this->x->_trigram($str);
+
+ $this->assertTrue(isset($result['mé ']),'mé ');
+ $this->assertTrue(isset($result['umé']),'umé');
+ $this->assertTrue(!isset($result['é ']),'é');
+ }
+
+ function test_sort ()
+ {
+ $arr = array('a' => 1, 'b' => 2, 'c' => 2);
+ $this->x->_bub_sort($arr);
+
+ $final_arr = array('b' => 2, 'c' => 2, 'a' => 1);
+
+ $this->assertEquals($final_arr, $arr);
+ }
+
+ function test_error ()
+ {
+ // this test passes the object a series of bad strings to see how it handles them
+
+ $result = $this->x->detectSimple("");
+
+ $this->assertTrue(!$result);
+
+ $result = $this->x->detectSimple("\n");
+
+ $this->assertTrue(!$result);
+
+ // should fail on extremely short strings
+ $result = $this->x->detectSimple("a");
+
+ $this->assertTrue(!$result);
+
+ $result = $this->x->detectSimple("aa");
+
+ $this->assertTrue(!$result);
+
+ $result = $this->x->detectSimple('xxxxxxxxxxxxxxxxxxx');
+
+ $this->assertEquals(null, $result);
+ }
+
+ function testOmitLanguages()
+ {
+ $str = 'This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.';
+
+ $myobj = new Text_LanguageDetect;
+
+ $myobj->_use_unicode_narrowing = false;
+
+ $count = $myobj->getLanguageCount();
+ $returnval = $myobj->omitLanguages('english');
+ $newcount = $myobj->getLanguageCount();
+
+ $this->assertEquals(1, $returnval);
+ $this->assertEquals(1, $count - $newcount);
+
+ $result = strtolower($myobj->detectSimple($str));
+
+ $this->assertTrue($result != 'english', $result);
+
+ $myobj = new Text_LanguageDetect;
+
+ $count = $myobj->getLanguageCount();
+ $returnval = $myobj->omitLanguages(array('danish', 'italian'), true);
+ $newcount = $myobj->getLanguageCount();
+
+ $this->assertEquals($count - $newcount, $returnval);
+ $this->assertEquals($count - $returnval, $newcount);
+
+ $result = strtolower($myobj->detectSimple($str));
+
+ $this->assertTrue($result == 'danish' || $result == 'italian', $result);
+
+ $result = $myobj->detect($str);
+
+ $this->assertEquals(2, count($result));
+ $this->assertTrue(isset($result['danish']));
+ $this->assertTrue(isset($result['italian']));
+
+ unset($myobj);
+ }
+
+ function testOmitLanguagesNameMode2()
+ {
+ $this->x->setNameMode(2);
+ $this->assertEquals(1, $this->x->omitLanguages('en'));
+ }
+
+ function testOmitLanguagesIncludeString()
+ {
+ $this->assertGreaterThan(1, $this->x->omitLanguages('english', true));
+ $langs = $this->x->getLanguages();
+ $this->assertEquals(1, count($langs));
+ $this->assertContains('english', $langs);
+ }
+
+ function testOmitLanguagesClearsClusterCache()
+ {
+ $this->x->omitLanguages(array('english', 'german'), true);
+ $this->assertNull($this->x->_clusters);
+ $this->x->clusterLanguages();
+ $this->assertNotNull($this->x->_clusters);
+ $this->x->omitLanguages('german');
+ $this->assertNull($this->x->_clusters, 'cluster cache be empty now');
+ }
+
+ function test_perl_compatibility()
+ {
+ // if this test fails, then many of the others will
+
+ $myobj = new Text_LanguageDetect;
+ $myobj->setPerlCompatible(true);
+
+ $testtext = "hello";
+
+ $result = $myobj->_trigram($testtext);
+
+ $this->assertTrue(!isset($result[' he']));
+ }
+
+ function test_french_db ()
+ {
+
+ $safe_model = array(
+ "es " => 0, " de" => 1, "de " => 2, " le" => 3, "ent" => 4,
+ "le " => 5, "nt " => 6, "la " => 7, "s d" => 8, " la" => 9,
+ "ion" => 10, "on " => 11, "re " => 12, " pa" => 13, "e l" => 14,
+ "e d" => 15, " l'" => 16, "e p" => 17, " co" => 18, " pr" => 19,
+ "tio" => 20, "ns " => 21, " en" => 22, "ne " => 23, "que" => 24,
+ "r l" => 25, "les" => 26, "ur " => 27, "en " => 28, "ati" => 29,
+ "ue " => 30, " po" => 31, " d'" => 32, "par" => 33, " a " => 34,
+ "et " => 35, "it " => 36, " qu" => 37, "men" => 38, "ons" => 39,
+ "te " => 40, " et" => 41, "t d" => 42, " re" => 43, "des" => 44,
+ " un" => 45, "ie " => 46, "s l" => 47, " su" => 48, "pou" => 49,
+ " au" => 50, " à " => 51, "con" => 52, "er " => 53, " no" => 54,
+ "ait" => 55, "e c" => 56, "se " => 57, "té " => 58, "du " => 59,
+ " du" => 60, " dé" => 61, "ce " => 62, "e e" => 63, "is " => 64,
+ "n d" => 65, "s a" => 66, " so" => 67, "e r" => 68, "e s" => 69,
+ "our" => 70, "res" => 71, "ssi" => 72, "eur" => 73, " se" => 74,
+ "eme" => 75, "est" => 76, "us " => 77, "sur" => 78, "ant" => 79,
+ "iqu" => 80, "s p" => 81, "une" => 82, "uss" => 83, "l'a" => 84,
+ "pro" => 85, "ter" => 86, "tre" => 87, "end" => 88, "rs " => 89,
+ " ce" => 90, "e a" => 91, "t p" => 92, "un " => 93, " ma" => 94,
+ " ru" => 95, " ré" => 96, "ous" => 97, "ris" => 98, "rus" => 99,
+ "sse" => 100, "ans" => 101, "ar " => 102, "com" => 103, "e m" => 104,
+ "ire" => 105, "nce" => 106, "nte" => 107, "t l" => 108, " av" => 109,
+ " mo" => 110, " te" => 111, "il " => 112, "me " => 113, "ont" => 114,
+ "ten" => 115, "a p" => 116, "dan" => 117, "pas" => 118, "qui" => 119,
+ "s e" => 120, "s s" => 121, " in" => 122, "ist" => 123, "lle" => 124,
+ "nou" => 125, "pré" => 126, "'un" => 127, "air" => 128, "d'a" => 129,
+ "ir " => 130, "n e" => 131, "rop" => 132, "ts " => 133, " da" => 134,
+ "a s" => 135, "as " => 136, "au " => 137, "den" => 138, "mai" => 139,
+ "mis" => 140, "ori" => 141, "out" => 142, "rme" => 143, "sio" => 144,
+ "tte" => 145, "ux " => 146, "a d" => 147, "ien" => 148, "n a" => 149,
+ "ntr" => 150, "omm" => 151, "ort" => 152, "ouv" => 153, "s c" => 154,
+ "son" => 155, "tes" => 156, "ver" => 157, "ère" => 158, " il" => 159,
+ " m " => 160, " sa" => 161, " ve" => 162, "a r" => 163, "ais" => 164,
+ "ava" => 165, "di " => 166, "n p" => 167, "sti" => 168, "ven" => 169,
+ " mi" => 170, "ain" => 171, "enc" => 172, "for" => 173, "ité" => 174,
+ "lar" => 175, "oir" => 176, "rem" => 177, "ren" => 178, "rro" => 179,
+ "rés" => 180, "sie" => 181, "t a" => 182, "tur" => 183, " pe" => 184,
+ " to" => 185, "d'u" => 186, "ell" => 187, "err" => 188, "ers" => 189,
+ "ide" => 190, "ine" => 191, "iss" => 192, "mes" => 193, "por" => 194,
+ "ran" => 195, "sit" => 196, "st " => 197, "t r" => 198, "uti" => 199,
+ "vai" => 200, "é l" => 201, "ési" => 202, " di" => 203, " n'" => 204,
+ " ét" => 205, "a c" => 206, "ass" => 207, "e t" => 208, "in " => 209,
+ "nde" => 210, "pre" => 211, "rat" => 212, "s m" => 213, "ste" => 214,
+ "tai" => 215, "tch" => 216, "ui " => 217, "uro" => 218, "ès " => 219,
+ " es" => 220, " fo" => 221, " tr" => 222, "'ad" => 223, "app" => 224,
+ "aux" => 225, "e à" => 226, "ett" => 227, "iti" => 228, "lit" => 229,
+ "nal" => 230, "opé" => 231, "r d" => 232, "ra " => 233, "rai" => 234,
+ "ror" => 235, "s r" => 236, "tat" => 237, "uté" => 238, "à l" => 239,
+ " af" => 240, "anc" => 241, "ara" => 242, "art" => 243, "bre" => 244,
+ "ché" => 245, "dre" => 246, "e f" => 247, "ens" => 248, "lem" => 249,
+ "n r" => 250, "n t" => 251, "ndr" => 252, "nne" => 253, "onn" => 254,
+ "pos" => 255, "s t" => 256, "tiq" => 257, "ure" => 258, " tu" => 259,
+ "ale" => 260, "and" => 261, "ave" => 262, "cla" => 263, "cou" => 264,
+ "e n" => 265, "emb" => 266, "ins" => 267, "jou" => 268, "mme" => 269,
+ "rie" => 270, "rès" => 271, "sem" => 272, "str" => 273, "t i" => 274,
+ "ues" => 275, "uni" => 276, "uve" => 277, "é d" => 278, "ée " => 279,
+ " ch" => 280, " do" => 281, " eu" => 282, " fa" => 283, " lo" => 284,
+ " ne" => 285, " ra" => 286, "arl" => 287, "att" => 288, "ec " => 289,
+ "ica" => 290, "l a" => 291, "l'o" => 292, "l'é" => 293, "mmi" => 294,
+ "nta" => 295, "orm" => 296, "ou " => 297, "r u" => 298, "rle" => 299
+ );
+
+
+ $my_arr = $this->x->_lang_db['french'];
+
+ foreach ($safe_model as $key => $value) {
+ $this->assertTrue(isset($my_arr[$key]),$key);
+ if (isset($my_arr[$key])) {
+ $this->assertEquals($value, $my_arr[$key], $key);
+ }
+ }
+ }
+
+ function test_english_db ()
+ {
+
+ $realdb = array(
+ " th" => 0, "the" => 1, "he " => 2, "ed " => 3, " to" => 4,
+ " in" => 5, "er " => 6, "ing" => 7, "ng " => 8, " an" => 9,
+ "nd " => 10, " of" => 11, "and" => 12, "to " => 13, "of " => 14,
+ " co" => 15, "at " => 16, "on " => 17, "in " => 18, " a " => 19,
+ "d t" => 20, " he" => 21, "e t" => 22, "ion" => 23, "es " => 24,
+ " re" => 25, "re " => 26, "hat" => 27, " sa" => 28, " st" => 29,
+ " ha" => 30, "her" => 31, "tha" => 32, "tio" => 33, "or " => 34,
+ " ''" => 35, "en " => 36, " wh" => 37, "e s" => 38, "ent" => 39,
+ "n t" => 40, "s a" => 41, "as " => 42, "for" => 43, "is " => 44,
+ "t t" => 45, " be" => 46, "ld " => 47, "e a" => 48, "rs " => 49,
+ " wa" => 50, "ut " => 51, "ve " => 52, "ll " => 53, "al " => 54,
+ " ma" => 55, "e i" => 56, " fo" => 57, "'s " => 58, "an " => 59,
+ "est" => 60, " hi" => 61, " mo" => 62, " se" => 63, " pr" => 64,
+ "s t" => 65, "ate" => 66, "st " => 67, "ter" => 68, "ere" => 69,
+ "ted" => 70, "nt " => 71, "ver" => 72, "d a" => 73, " wi" => 74,
+ "se " => 75, "e c" => 76, "ect" => 77, "ns " => 78, " on" => 79,
+ "ly " => 80, "tol" => 81, "ey " => 82, "r t" => 83, " ca" => 84,
+ "ati" => 85, "ts " => 86, "all" => 87, " no" => 88, "his" => 89,
+ "s o" => 90, "ers" => 91, "con" => 92, "e o" => 93, "ear" => 94,
+ "f t" => 95, "e w" => 96, "was" => 97, "ons" => 98, "sta" => 99,
+ "'' " => 100, "sti" => 101, "n a" => 102, "sto" => 103, "t h" => 104,
+ " we" => 105, "id " => 106, "th " => 107, " it" => 108, "ce " => 109,
+ " di" => 110, "ave" => 111, "d h" => 112, "cou" => 113, "pro" => 114,
+ "ad " => 115, "oll" => 116, "ry " => 117, "d s" => 118, "e m" => 119,
+ " so" => 120, "ill" => 121, "cti" => 122, "te " => 123, "tor" => 124,
+ "eve" => 125, "g t" => 126, "it " => 127, " ch" => 128, " de" => 129,
+ "hav" => 130, "oul" => 131, "ty " => 132, "uld" => 133, "use" => 134,
+ " al" => 135, "are" => 136, "ch " => 137, "me " => 138, "out" => 139,
+ "ove" => 140, "wit" => 141, "ys " => 142, "chi" => 143, "t a" => 144,
+ "ith" => 145, "oth" => 146, " ab" => 147, " te" => 148, " wo" => 149,
+ "s s" => 150, "res" => 151, "t w" => 152, "tin" => 153, "e b" => 154,
+ "e h" => 155, "nce" => 156, "t s" => 157, "y t" => 158, "e p" => 159,
+ "ele" => 160, "hin" => 161, "s i" => 162, "nte" => 163, " li" => 164,
+ "le " => 165, " do" => 166, "aid" => 167, "hey" => 168, "ne " => 169,
+ "s w" => 170, " as" => 171, " fr" => 172, " tr" => 173, "end" => 174,
+ "sai" => 175, " el" => 176, " ne" => 177, " su" => 178, "'t " => 179,
+ "ay " => 180, "hou" => 181, "ive" => 182, "lec" => 183, "n't" => 184,
+ " ye" => 185, "but" => 186, "d o" => 187, "o t" => 188, "y o" => 189,
+ " ho" => 190, " me" => 191, "be " => 192, "cal" => 193, "e e" => 194,
+ "had" => 195, "ple" => 196, " at" => 197, " bu" => 198, " la" => 199,
+ "d b" => 200, "s h" => 201, "say" => 202, "t i" => 203, " ar" => 204,
+ "e f" => 205, "ght" => 206, "hil" => 207, "igh" => 208, "int" => 209,
+ "not" => 210, "ren" => 211, " is" => 212, " pa" => 213, " sh" => 214,
+ "ays" => 215, "com" => 216, "n s" => 217, "r a" => 218, "rin" => 219,
+ "y a" => 220, " un" => 221, "n c" => 222, "om " => 223, "thi" => 224,
+ " mi" => 225, "by " => 226, "d i" => 227, "e d" => 228, "e n" => 229,
+ "t o" => 230, " by" => 231, "e r" => 232, "eri" => 233, "old" => 234,
+ "ome" => 235, "whe" => 236, "yea" => 237, " gr" => 238, "ar " => 239,
+ "ity" => 240, "mpl" => 241, "oun" => 242, "one" => 243, "ow " => 244,
+ "r s" => 245, "s f" => 246, "tat" => 247, " ba" => 248, " vo" => 249,
+ "bou" => 250, "sam" => 251, "tim" => 252, "vot" => 253, "abo" => 254,
+ "ant" => 255, "ds " => 256, "ial" => 257, "ine" => 258, "man" => 259,
+ "men" => 260, " or" => 261, " po" => 262, "amp" => 263, "can" => 264,
+ "der" => 265, "e l" => 266, "les" => 267, "ny " => 268, "ot " => 269,
+ "rec" => 270, "tes" => 271, "tho" => 272, "ica" => 273, "ild" => 274,
+ "ir " => 275, "nde" => 276, "ose" => 277, "ous" => 278, "pre" => 279,
+ "ste" => 280, "era" => 281, "per" => 282, "r o" => 283, "red" => 284,
+ "rie" => 285, " bo" => 286, " le" => 287, "ali" => 288, "ars" => 289,
+ "ore" => 290, "ric" => 291, "s m" => 292, "str" => 293, " fa" => 294,
+ "ess" => 295, "ie " => 296, "ist" => 297, "lat" => 298, "uri" => 299,
+ );
+
+ $mod = $this->x->_lang_db['english'];
+
+ foreach ($realdb as $key => $value) {
+ $this->assertTrue(isset($mod[$key]), $key);
+ if (isset($mod[$key])) {
+ $this->assertEquals($value, $mod[$key], $key);
+ }
+ }
+
+ foreach ($mod as $key => $value) {
+ $this->assertTrue(isset($realdb[$key]));
+ if (isset($realdb[$key])) {
+ $this->assertEquals($value, $realdb[$key], $key);
+ }
+ }
+ }
+
+ function test_confidence ()
+ {
+ $str = 'The next thing to notice is the Content-length header. The Content-length header notifies the server of the size of the data that you intend to send. This prevents unexpected end-of-data errors from the server when dealing with binary data, because the server will read the specified number of bytes from the data stream regardless of any spurious end-of-data characters.';
+
+ $result = $this->x->detectConfidence($str);
+
+ $this->assertEquals(3, count($result));
+ $this->assertTrue(isset($result['language']), 'language');
+ $this->assertTrue(isset($result['similarity']), 'similarity');
+ $this->assertTrue(isset($result['confidence']), 'confidence');
+ $this->assertEquals('english', $result['language']);
+ $this->assertTrue($result['similarity'] <= 300 && $result['similarity'] >= 0, $result['similarity']);
+ $this->assertTrue($result['confidence'] <= 1 && $result['confidence'] >= 0, $result['confidence']);
+
+ // todo: tests for Danish and Norwegian should have lower confidence
+ }
+
+ function test_long_example ()
+ {
+ // an example that is more than 300 trigrams long
+ $str = 'The Italian Renaissance began the opening phase of the Renaissance, a period of great cultural change and achievement from the 14th to the 16th century. The word renaissance means "rebirth," and the era is best known for the renewed interest in the culture of classical antiquity. The Italian Renaissance began in northern Italy, centering in Florence. It then spread south, having an especially significant impact on Rome, which was largely rebuilt by the Renaissance popes. The Italian Renaissance is best known for its cultural achievements. This includes works of literature by such figures as Petrarch, Castiglione, and Machiavelli; artists such as Michaelangelo and Leonardo da Vinci, and great works of architecture such as The Duomo in Florence and St. Peter\'s Basilica in Rome. At the same time, present-day historians also see the era as one of economic regression and of little progress in science. Furthermore, some historians argue that the lot of the peasants and urban poor, the majority of the population, worsened during this period.';
+
+ $this->x->setPerlCompatible();
+ $tri = $this->x->_trigram($str);
+
+ $exp_tri = array(
+ ' th',
+ 'the',
+ 'he ',
+ ' an',
+ ' re',
+ ' of',
+ 'ce ',
+ 'nce',
+ 'of ',
+ 'ren',
+ ' in',
+ 'and',
+ 'nd ',
+ 'an ',
+ 'san',
+ ' it',
+ 'ais',
+ 'anc',
+ 'ena',
+ 'in ',
+ 'iss',
+ 'nai',
+ 'ssa',
+ 'tur',
+ ' pe',
+ 'as ',
+ 'ch ',
+ 'ent',
+ 'ian',
+ 'me ',
+ 'n r',
+ 'res',
+ ' as',
+ ' be',
+ ' wo',
+ 'at ',
+ 'chi',
+ 'e i',
+ 'e o',
+ 'e p',
+ 'gre',
+ 'his',
+ 'ing',
+ 'is ',
+ 'ita',
+ 'n f',
+ 'ng ',
+ 're ',
+ 's a',
+ 'st ',
+ 'tal',
+ 'ter',
+ 'th ',
+ 'ts ',
+ 'ure',
+ 'wor',
+ ' ar',
+ ' cu',
+ ' po',
+ ' su',
+ 'ach',
+ 'al ',
+ 'ali',
+ 'ans',
+ 'ant',
+ 'cul',
+ 'e b',
+ 'e r',
+ 'e t',
+ 'enc',
+ 'era',
+ 'eri',
+ 'es ',
+ 'est',
+ 'f t',
+ 'ica',
+ 'ion',
+ 'ist',
+ 'lia',
+ 'ltu',
+ 'ly ',
+ 'ns ',
+ 'nt ',
+ 'ome',
+ 'on ',
+ 'or ',
+ 'ore',
+ 'ori',
+ 'rea',
+ 'rom',
+ 'rth',
+ 's b',
+ 's o',
+ 'suc',
+ 't t',
+ 'uch',
+ 'ult',
+ ' ac',
+ ' by',
+ ' ce',
+ ' da',
+ ' du',
+ ' er',
+ ' fl',
+ ' fo',
+ ' gr',
+ ' hi',
+ ' is',
+ ' kn',
+ ' li',
+ ' ma',
+ ' on',
+ ' pr',
+ ' ro',
+ ' so',
+ 'a i',
+ 'ang',
+ 'arc',
+ 'arg',
+ 'beg',
+ 'bes',
+ 'by ',
+ 'cen',
+ 'cha',
+ 'd o',
+ 'd s',
+ 'e a',
+ 'e e',
+ 'e m',
+ 'e s',
+ 'eat',
+ 'ed ',
+ 'ega',
+ 'eme',
+ 'ene',
+ 'ess',
+ 'eve',
+ 'f l',
+ 'flo',
+ 'for',
+ 'gan',
+ 'gel',
+ 'h a',
+ 'her',
+ 'hie',
+ 'ich',
+ 'iev',
+ 'inc',
+ 'iod',
+ 'ite',
+ 'ity',
+ 'kno',
+ 'ks ',
+ 'l a',
+ 'lit',
+ 'lor',
+ 'men',
+ 'mic',
+ 'n i',
+ 'n s',
+ 'n t',
+ 'ne ',
+ 'nge',
+ 'now',
+ 'nte',
+ 'nts',
+ 'od ',
+ 'one',
+ 'ope',
+ 'ork',
+ 'own',
+ 'per',
+ 'pet',
+ 'pop',
+ 'pre',
+ 'ra ',
+ 'ral',
+ 'rch',
+ 'reb',
+ 'ria',
+ 'rin',
+ 'rio',
+ 'rks',
+ 's i',
+ 's p',
+ 'sen',
+ 'ssi',
+ 'sto',
+ 't i',
+ 't k',
+ 't o',
+ 'thi',
+ 'tor',
+ 'ty ',
+ 'ura',
+ 'vem',
+ 'vin',
+ 'wn ',
+ 'y s',
+ ' a ',
+ ' al',
+ ' at',
+ ' ba',
+ ' ca',
+ ' ch',
+ ' cl',
+ ' ec',
+ ' es',
+ ' fi',
+ ' fr',
+ ' fu',
+ ' ha',
+ ' im',
+ ' la',
+ ' le',
+ ' lo',
+ ' me',
+ ' mi',
+ ' no',
+ ' op',
+ ' ph',
+ ' sa',
+ ' sc',
+ ' se',
+ ' si',
+ ' sp',
+ ' st',
+ ' ti',
+ ' to',
+ ' ur',
+ ' vi',
+ ' wa',
+ ' wh',
+ '\'s ',
+ 'a a',
+ 'a p',
+ 'a v',
+ 'act',
+ 'ad ',
+ 'ael',
+ 'ajo',
+ 'all',
+ 'als',
+ 'aly',
+ 'ame',
+ 'ard',
+ 'art',
+ 'asa',
+ 'ase',
+ 'asi',
+ 'ass',
+ 'ast',
+ 'ati',
+ 'atu',
+ 'ave',
+ 'avi',
+ 'ay ',
+ 'ban',
+ 'bas',
+ 'bir',
+ 'bui',
+ 'c r',
+ 'ca ',
+ 'cal',
+ 'can',
+ 'cas',
+ 'ci ',
+ 'cia',
+ 'cie',
+ 'cla',
+ 'clu',
+ 'con',
+ 'ct ',
+ 'ctu',
+ 'd a',
+ 'd d',
+ 'd g',
+ 'd i',
+ 'd l',
+ 'd m',
+ 'd r',
+ 'd t',
+ 'd u',
+ 'da ',
+ 'day',
+ 'des',
+ 'do ',
+ 'duo',
+ 'dur',
+ 'e c',
+ 'e d',
+ 'e h',
+ 'e l',
+ 'e w',
+ 'ead',
+ 'ean',
+ 'eas',
+ 'ebi',
+ 'ebu',
+ 'eci',
+ 'eco',
+ 'ect',
+ 'ee ',
+ 'egr',
+ 'ela',
+ 'ell',
+ 'elo',
+ 'ely',
+ 'en ',
+ 'eni',
+ 'eon',
+ 'er\'',
+ 'ere',
+ 'erm',
+ 'ern',
+ 'ese',
+ 'esp',
+ 'ete',
+ 'etr',
+ 'ewe',
+ 'f a',
+ 'f c',
+ 'f e',
+ 'f g',
+ 'fic',
+ 'fig',
+ 'fro',
+ 'fur',
+ 'g a',
+ 'g i',
+ 'g p',
+ 'g t',
+ 'ge ',
+ 'gli',
+ 'gni',
+ 'gue',
+ 'gur',
+ 'h c',
+ 'h f',
+ 'h t',
+ 'h w',
+ 'hae',
+ 'han',
+ 'has',
+ 'hat',
+ 'hav',
+ 'hen',
+ 'hia',
+ 'hic',
+ 'hit',
+ 'ial',
+ 'iav',
+ 'ic ',
+ 'ien',
+ 'ifi',
+ 'igl',
+ 'ign',
+ 'igu',
+ 'ili',
+ 'ilt',
+ 'ime',
+ 'imp',
+ 'int',
+ 'iqu',
+ 'irt',
+ 'it ',
+ 'its',
+ 'itt',
+ 'jor',
+ 'l c',
+ 'lan',
+ 'lar',
+ 'las',
+ 'lat',
+ 'le ',
+ 'leo',
+ 'li ',
+ 'lic',
+ 'lio',
+ 'lli',
+ 'lly',
+ 'lo ',
+ 'lot',
+ 'lso',
+ 'lt ',
+ 'lud',
+ 'm t',
+ 'mac',
+ 'maj',
+ 'mea',
+ 'mo ',
+ 'mor',
+ 'mpa',
+ 'n a',
+ 'n e',
+ 'n n',
+ 'n p',
+ 'nar',
+ 'nci',
+ 'ncl',
+ 'ned',
+ 'new',
+ 'nif',
+ 'nin',
+ 'nom',
+ 'nor',
+ 'nti',
+ 'ntu',
+ 'o a',
+ 'o d',
+ 'o i',
+ 'o s',
+ 'o t',
+ 'ogr',
+ 'om ',
+ 'omi',
+ 'omo',
+ 'ona',
+ 'ono',
+ 'oor',
+ 'opu',
+ 'ord',
+ 'ors',
+ 'ort',
+ 'ot ',
+ 'out',
+ 'pac',
+ 'pea',
+ 'pec',
+ 'pen',
+ 'pes',
+ 'pha',
+ 'poo',
+ 'pro',
+ 'pul',
+ 'qui',
+ 'r i',
+ 'r t',
+ 'r\'s',
+ 'rar',
+ 'rat',
+ 'rba',
+ 'rd ',
+ 'rdo',
+ 'reg',
+ 'rge',
+ 'rgu',
+ 'rit',
+ 'rmo',
+ 'rn ',
+ 'rog',
+ 'rse',
+ 'rti',
+ 'ry ',
+ 's c',
+ 's l',
+ 's m',
+ 's s',
+ 's t',
+ 's w',
+ 'sam',
+ 'sci',
+ 'se ',
+ 'see',
+ 'sic',
+ 'sig',
+ 'sil',
+ 'sio',
+ 'so ',
+ 'som',
+ 'sou',
+ 'spe',
+ 'spr',
+ 'ss ',
+ 'sti',
+ 'sts',
+ 't b',
+ 't c',
+ 't d',
+ 't f',
+ 't w',
+ 'tec',
+ 'tha',
+ 'tig',
+ 'tim',
+ 'tio',
+ 'tiq',
+ 'tis',
+ 'tle',
+ 'to ',
+ 'tra',
+ 'ttl',
+ 'ude',
+ 'ue ',
+ 'uil',
+ 'uit',
+ 'ula',
+ 'uom',
+ 'urb',
+ 'uri',
+ 'urt',
+ 'ury',
+ 'uth',
+ 'vel',
+ 'was',
+ 'wed',
+ 'whi',
+ 'y h',
+ 'y o',
+ 'y r',
+ 'y t'
+ );
+
+ $differences = array_diff(array_keys($tri), $exp_tri);
+ $this->assertEquals(0, count($differences));
+ $this->assertEquals(0, count(array_diff($exp_tri, array_keys($tri))));
+ $this->assertEquals(count($exp_tri), count($tri));
+ //print_r(array_diff($exp_tri, array_keys($tri)));
+ //print_r(array_diff(array_keys($tri), $exp_tri));
+
+ // tests the bubble sort mechanism
+ $this->x->_bub_sort($tri);
+ $this->assertEquals($exp_tri, array_keys($tri));
+
+ $true_differences = array(
+ "cas" => array('change' => 300, 'baserank' => 265, 'refrank' => null), "s i" => array('change' => 21, 'baserank' => 183, 'refrank' => 162),
+ "e b" => array('change' => 88, 'baserank' => 66, 'refrank' => 154), "ent" => array('change' => 12, 'baserank' => 27, 'refrank' => 39),
+ "ome" => array('change' => 152, 'baserank' => 83, 'refrank' => 235), "ral" => array('change' => 300, 'baserank' => 176, 'refrank' => null),
+ "ita" => array('change' => 300, 'baserank' => 44, 'refrank' => null), "bas" => array('change' => 300, 'baserank' => 258, 'refrank' => null),
+ " ar" => array('change' => 148, 'baserank' => 56, 'refrank' => 204), " in" => array('change' => 5, 'baserank' => 10, 'refrank' => 5),
+ " ti" => array('change' => 300, 'baserank' => 227, 'refrank' => null), "ty " => array('change' => 61, 'baserank' => 193, 'refrank' => 132),
+ "tur" => array('change' => 300, 'baserank' => 23, 'refrank' => null), "iss" => array('change' => 300, 'baserank' => 20, 'refrank' => null),
+ "ria" => array('change' => 300, 'baserank' => 179, 'refrank' => null), " me" => array('change' => 25, 'baserank' => 216, 'refrank' => 191),
+ "t k" => array('change' => 300, 'baserank' => 189, 'refrank' => null), " es" => array('change' => 300, 'baserank' => 207, 'refrank' => null),
+ "ren" => array('change' => 202, 'baserank' => 9, 'refrank' => 211), "in " => array('change' => 1, 'baserank' => 19, 'refrank' => 18),
+ "ly " => array('change' => 0, 'baserank' => 80, 'refrank' => 80), "st " => array('change' => 18, 'baserank' => 49, 'refrank' => 67),
+ "ne " => array('change' => 8, 'baserank' => 161, 'refrank' => 169), "all" => array('change' => 154, 'baserank' => 241, 'refrank' => 87),
+ "vin" => array('change' => 300, 'baserank' => 196, 'refrank' => null), " op" => array('change' => 300, 'baserank' => 219, 'refrank' => null),
+ "chi" => array('change' => 107, 'baserank' => 36, 'refrank' => 143), "e w" => array('change' => 197, 'baserank' => 293, 'refrank' => 96),
+ " ro" => array('change' => 300, 'baserank' => 113, 'refrank' => null), "act" => array('change' => 300, 'baserank' => 237, 'refrank' => null),
+ "d r" => array('change' => 300, 'baserank' => 280, 'refrank' => null), "nt " => array('change' => 11, 'baserank' => 82, 'refrank' => 71),
+ "can" => array('change' => 0, 'baserank' => 264, 'refrank' => 264), "rea" => array('change' => 300, 'baserank' => 88, 'refrank' => null),
+ "ssa" => array('change' => 300, 'baserank' => 22, 'refrank' => null), " fo" => array('change' => 47, 'baserank' => 104, 'refrank' => 57),
+ "eas" => array('change' => 300, 'baserank' => 296, 'refrank' => null), "mic" => array('change' => 300, 'baserank' => 157, 'refrank' => null),
+ "cul" => array('change' => 300, 'baserank' => 65, 'refrank' => null), " an" => array('change' => 6, 'baserank' => 3, 'refrank' => 9),
+ "n t" => array('change' => 120, 'baserank' => 160, 'refrank' => 40), "arg" => array('change' => 300, 'baserank' => 118, 'refrank' => null),
+ " it" => array('change' => 93, 'baserank' => 15, 'refrank' => 108), "ebi" => array('change' => 300, 'baserank' => 297, 'refrank' => null),
+ " re" => array('change' => 21, 'baserank' => 4, 'refrank' => 25), "res" => array('change' => 120, 'baserank' => 31, 'refrank' => 151),
+ " be" => array('change' => 13, 'baserank' => 33, 'refrank' => 46), "rom" => array('change' => 300, 'baserank' => 89, 'refrank' => null),
+ "'s " => array('change' => 175, 'baserank' => 233, 'refrank' => 58), "arc" => array('change' => 300, 'baserank' => 117, 'refrank' => null),
+ " su" => array('change' => 119, 'baserank' => 59, 'refrank' => 178), "s p" => array('change' => 300, 'baserank' => 184, 'refrank' => null),
+ "ich" => array('change' => 300, 'baserank' => 145, 'refrank' => null), "d d" => array('change' => 300, 'baserank' => 275, 'refrank' => null),
+ "cal" => array('change' => 70, 'baserank' => 263, 'refrank' => 193), "ci " => array('change' => 300, 'baserank' => 266, 'refrank' => null),
+ "ssi" => array('change' => 300, 'baserank' => 186, 'refrank' => null), "bes" => array('change' => 300, 'baserank' => 120, 'refrank' => null),
+ "des" => array('change' => 300, 'baserank' => 285, 'refrank' => null), "e s" => array('change' => 91, 'baserank' => 129, 'refrank' => 38),
+ "ch " => array('change' => 111, 'baserank' => 26, 'refrank' => 137), "san" => array('change' => 300, 'baserank' => 14, 'refrank' => null),
+ "asi" => array('change' => 300, 'baserank' => 249, 'refrank' => null), "ajo" => array('change' => 300, 'baserank' => 240, 'refrank' => null),
+ "ase" => array('change' => 300, 'baserank' => 248, 'refrank' => null), " wa" => array('change' => 181, 'baserank' => 231, 'refrank' => 50),
+ "vem" => array('change' => 300, 'baserank' => 195, 'refrank' => null), "ed " => array('change' => 128, 'baserank' => 131, 'refrank' => 3),
+ "ant" => array('change' => 191, 'baserank' => 64, 'refrank' => 255), "a p" => array('change' => 300, 'baserank' => 235, 'refrank' => null),
+ "lor" => array('change' => 300, 'baserank' => 155, 'refrank' => null), "kno" => array('change' => 300, 'baserank' => 151, 'refrank' => null),
+ "ais" => array('change' => 300, 'baserank' => 16, 'refrank' => null), " pe" => array('change' => 300, 'baserank' => 24, 'refrank' => null),
+ "or " => array('change' => 51, 'baserank' => 85, 'refrank' => 34), "e i" => array('change' => 19, 'baserank' => 37, 'refrank' => 56),
+ " sp" => array('change' => 300, 'baserank' => 225, 'refrank' => null), "ad " => array('change' => 123, 'baserank' => 238, 'refrank' => 115),
+ " kn" => array('change' => 300, 'baserank' => 108, 'refrank' => null), "ega" => array('change' => 300, 'baserank' => 132, 'refrank' => null),
+ " ba" => array('change' => 46, 'baserank' => 202, 'refrank' => 248), "d t" => array('change' => 261, 'baserank' => 281, 'refrank' => 20),
+ "ork" => array('change' => 300, 'baserank' => 169, 'refrank' => null), "lia" => array('change' => 300, 'baserank' => 78, 'refrank' => null),
+ "ard" => array('change' => 300, 'baserank' => 245, 'refrank' => null), "iev" => array('change' => 300, 'baserank' => 146, 'refrank' => null),
+ "of " => array('change' => 6, 'baserank' => 8, 'refrank' => 14), " cu" => array('change' => 300, 'baserank' => 57, 'refrank' => null),
+ "day" => array('change' => 300, 'baserank' => 284, 'refrank' => null), "cen" => array('change' => 300, 'baserank' => 122, 'refrank' => null),
+ "re " => array('change' => 21, 'baserank' => 47, 'refrank' => 26), "ist" => array('change' => 220, 'baserank' => 77, 'refrank' => 297),
+ " fl" => array('change' => 300, 'baserank' => 103, 'refrank' => null), "anc" => array('change' => 300, 'baserank' => 17, 'refrank' => null),
+ "at " => array('change' => 19, 'baserank' => 35, 'refrank' => 16), "rch" => array('change' => 300, 'baserank' => 177, 'refrank' => null),
+ "ang" => array('change' => 300, 'baserank' => 116, 'refrank' => null), " mi" => array('change' => 8, 'baserank' => 217, 'refrank' => 225),
+ "y s" => array('change' => 300, 'baserank' => 198, 'refrank' => null), "ca " => array('change' => 300, 'baserank' => 262, 'refrank' => null),
+ " ma" => array('change' => 55, 'baserank' => 110, 'refrank' => 55), " lo" => array('change' => 300, 'baserank' => 215, 'refrank' => null),
+ "rin" => array('change' => 39, 'baserank' => 180, 'refrank' => 219), " im" => array('change' => 300, 'baserank' => 212, 'refrank' => null),
+ " er" => array('change' => 300, 'baserank' => 102, 'refrank' => null), "ce " => array('change' => 103, 'baserank' => 6, 'refrank' => 109),
+ "bui" => array('change' => 300, 'baserank' => 260, 'refrank' => null), "lit" => array('change' => 300, 'baserank' => 154, 'refrank' => null),
+ "iod" => array('change' => 300, 'baserank' => 148, 'refrank' => null), "ame" => array('change' => 300, 'baserank' => 244, 'refrank' => null),
+ "ter" => array('change' => 17, 'baserank' => 51, 'refrank' => 68), "e a" => array('change' => 78, 'baserank' => 126, 'refrank' => 48),
+ "f l" => array('change' => 300, 'baserank' => 137, 'refrank' => null), "eri" => array('change' => 162, 'baserank' => 71, 'refrank' => 233),
+ "ra " => array('change' => 300, 'baserank' => 175, 'refrank' => null), "ng " => array('change' => 38, 'baserank' => 46, 'refrank' => 8),
+ "d i" => array('change' => 50, 'baserank' => 277, 'refrank' => 227), "asa" => array('change' => 300, 'baserank' => 247, 'refrank' => null),
+ "wn " => array('change' => 300, 'baserank' => 197, 'refrank' => null), " at" => array('change' => 4, 'baserank' => 201, 'refrank' => 197),
+ "now" => array('change' => 300, 'baserank' => 163, 'refrank' => null), " by" => array('change' => 133, 'baserank' => 98, 'refrank' => 231),
+ "n s" => array('change' => 58, 'baserank' => 159, 'refrank' => 217), " li" => array('change' => 55, 'baserank' => 109, 'refrank' => 164),
+ "l a" => array('change' => 300, 'baserank' => 153, 'refrank' => null), "da " => array('change' => 300, 'baserank' => 283, 'refrank' => null),
+ "ean" => array('change' => 300, 'baserank' => 295, 'refrank' => null), "tal" => array('change' => 300, 'baserank' => 50, 'refrank' => null),
+ "d a" => array('change' => 201, 'baserank' => 274, 'refrank' => 73), "ct " => array('change' => 300, 'baserank' => 272, 'refrank' => null),
+ "ali" => array('change' => 226, 'baserank' => 62, 'refrank' => 288), "ian" => array('change' => 300, 'baserank' => 28, 'refrank' => null),
+ " sa" => array('change' => 193, 'baserank' => 221, 'refrank' => 28), "do " => array('change' => 300, 'baserank' => 286, 'refrank' => null),
+ "t o" => array('change' => 40, 'baserank' => 190, 'refrank' => 230), "ure" => array('change' => 300, 'baserank' => 54, 'refrank' => null),
+ "e c" => array('change' => 213, 'baserank' => 289, 'refrank' => 76), "ing" => array('change' => 35, 'baserank' => 42, 'refrank' => 7),
+ "d o" => array('change' => 63, 'baserank' => 124, 'refrank' => 187), " ha" => array('change' => 181, 'baserank' => 211, 'refrank' => 30),
+ "ts " => array('change' => 33, 'baserank' => 53, 'refrank' => 86), "rth" => array('change' => 300, 'baserank' => 90, 'refrank' => null),
+ "cla" => array('change' => 300, 'baserank' => 269, 'refrank' => null), " ac" => array('change' => 300, 'baserank' => 97, 'refrank' => null),
+ "th " => array('change' => 55, 'baserank' => 52, 'refrank' => 107), "rio" => array('change' => 300, 'baserank' => 181, 'refrank' => null),
+ "al " => array('change' => 7, 'baserank' => 61, 'refrank' => 54), "sto" => array('change' => 84, 'baserank' => 187, 'refrank' => 103),
+ "e o" => array('change' => 55, 'baserank' => 38, 'refrank' => 93), "bir" => array('change' => 300, 'baserank' => 259, 'refrank' => null),
+ " pr" => array('change' => 48, 'baserank' => 112, 'refrank' => 64), " le" => array('change' => 73, 'baserank' => 214, 'refrank' => 287),
+ "nai" => array('change' => 300, 'baserank' => 21, 'refrank' => null), "t i" => array('change' => 15, 'baserank' => 188, 'refrank' => 203),
+ " po" => array('change' => 204, 'baserank' => 58, 'refrank' => 262), "f t" => array('change' => 21, 'baserank' => 74, 'refrank' => 95),
+ "ban" => array('change' => 300, 'baserank' => 257, 'refrank' => null), "an " => array('change' => 46, 'baserank' => 13, 'refrank' => 59),
+ "wor" => array('change' => 300, 'baserank' => 55, 'refrank' => null), "pet" => array('change' => 300, 'baserank' => 172, 'refrank' => null),
+ "ael" => array('change' => 300, 'baserank' => 239, 'refrank' => null), "ura" => array('change' => 300, 'baserank' => 194, 'refrank' => null),
+ "eve" => array('change' => 11, 'baserank' => 136, 'refrank' => 125), "ion" => array('change' => 53, 'baserank' => 76, 'refrank' => 23),
+ "nge" => array('change' => 300, 'baserank' => 162, 'refrank' => null), "cha" => array('change' => 300, 'baserank' => 123, 'refrank' => null),
+ "ity" => array('change' => 90, 'baserank' => 150, 'refrank' => 240), " se" => array('change' => 160, 'baserank' => 223, 'refrank' => 63),
+ " on" => array('change' => 32, 'baserank' => 111, 'refrank' => 79), "s b" => array('change' => 300, 'baserank' => 91, 'refrank' => null),
+ "ans" => array('change' => 300, 'baserank' => 63, 'refrank' => null), "own" => array('change' => 300, 'baserank' => 170, 'refrank' => null),
+ " si" => array('change' => 300, 'baserank' => 224, 'refrank' => null), "e r" => array('change' => 165, 'baserank' => 67, 'refrank' => 232),
+ "est" => array('change' => 13, 'baserank' => 73, 'refrank' => 60), "hie" => array('change' => 300, 'baserank' => 144, 'refrank' => null),
+ "aly" => array('change' => 300, 'baserank' => 243, 'refrank' => null), "and" => array('change' => 1, 'baserank' => 11, 'refrank' => 12),
+ "beg" => array('change' => 300, 'baserank' => 119, 'refrank' => null), "dur" => array('change' => 300, 'baserank' => 288, 'refrank' => null),
+ "reb" => array('change' => 300, 'baserank' => 178, 'refrank' => null), "e e" => array('change' => 67, 'baserank' => 127, 'refrank' => 194),
+ "men" => array('change' => 104, 'baserank' => 156, 'refrank' => 260), " la" => array('change' => 14, 'baserank' => 213, 'refrank' => 199),
+ "con" => array('change' => 179, 'baserank' => 271, 'refrank' => 92), " fu" => array('change' => 300, 'baserank' => 210, 'refrank' => null),
+ "e l" => array('change' => 26, 'baserank' => 292, 'refrank' => 266), "s a" => array('change' => 7, 'baserank' => 48, 'refrank' => 41),
+ "art" => array('change' => 300, 'baserank' => 246, 'refrank' => null), "ltu" => array('change' => 300, 'baserank' => 79, 'refrank' => null),
+ "a i" => array('change' => 300, 'baserank' => 115, 'refrank' => null), "ctu" => array('change' => 300, 'baserank' => 273, 'refrank' => null),
+ "tor" => array('change' => 68, 'baserank' => 192, 'refrank' => 124), "ach" => array('change' => 300, 'baserank' => 60, 'refrank' => null),
+ "d g" => array('change' => 300, 'baserank' => 276, 'refrank' => null), "od " => array('change' => 300, 'baserank' => 166, 'refrank' => null),
+ "nte" => array('change' => 1, 'baserank' => 164, 'refrank' => 163), "ena" => array('change' => 300, 'baserank' => 18, 'refrank' => null),
+ "d l" => array('change' => 300, 'baserank' => 278, 'refrank' => null), "ene" => array('change' => 300, 'baserank' => 134, 'refrank' => null),
+ "e h" => array('change' => 136, 'baserank' => 291, 'refrank' => 155), "era" => array('change' => 211, 'baserank' => 70, 'refrank' => 281),
+ "on " => array('change' => 67, 'baserank' => 84, 'refrank' => 17), " ce" => array('change' => 300, 'baserank' => 99, 'refrank' => null),
+ "ay " => array('change' => 76, 'baserank' => 256, 'refrank' => 180), " da" => array('change' => 300, 'baserank' => 100, 'refrank' => null),
+ "ori" => array('change' => 300, 'baserank' => 87, 'refrank' => null), "atu" => array('change' => 300, 'baserank' => 253, 'refrank' => null),
+ "ave" => array('change' => 143, 'baserank' => 254, 'refrank' => 111), "rks" => array('change' => 300, 'baserank' => 182, 'refrank' => null),
+ "e d" => array('change' => 62, 'baserank' => 290, 'refrank' => 228), "ns " => array('change' => 3, 'baserank' => 81, 'refrank' => 78),
+ " ca" => array('change' => 119, 'baserank' => 203, 'refrank' => 84), "d s" => array('change' => 7, 'baserank' => 125, 'refrank' => 118),
+ "uch" => array('change' => 300, 'baserank' => 95, 'refrank' => null), "a v" => array('change' => 300, 'baserank' => 236, 'refrank' => null),
+ "nce" => array('change' => 149, 'baserank' => 7, 'refrank' => 156), "his" => array('change' => 48, 'baserank' => 41, 'refrank' => 89),
+ "flo" => array('change' => 300, 'baserank' => 138, 'refrank' => null), "ead" => array('change' => 300, 'baserank' => 294, 'refrank' => null),
+ " vi" => array('change' => 300, 'baserank' => 230, 'refrank' => null), "me " => array('change' => 109, 'baserank' => 29, 'refrank' => 138),
+ "suc" => array('change' => 300, 'baserank' => 93, 'refrank' => null), "e p" => array('change' => 120, 'baserank' => 39, 'refrank' => 159),
+ "eci" => array('change' => 300, 'baserank' => 299, 'refrank' => null), "eme" => array('change' => 300, 'baserank' => 133, 'refrank' => null),
+ "sen" => array('change' => 300, 'baserank' => 185, 'refrank' => null), "ks " => array('change' => 300, 'baserank' => 152, 'refrank' => null),
+ " to" => array('change' => 224, 'baserank' => 228, 'refrank' => 4), " gr" => array('change' => 133, 'baserank' => 105, 'refrank' => 238),
+ " ch" => array('change' => 76, 'baserank' => 204, 'refrank' => 128), "ati" => array('change' => 167, 'baserank' => 252, 'refrank' => 85),
+ " th" => array('change' => 0, 'baserank' => 0, 'refrank' => 0), " ec" => array('change' => 300, 'baserank' => 206, 'refrank' => null),
+ " wo" => array('change' => 115, 'baserank' => 34, 'refrank' => 149), "ope" => array('change' => 300, 'baserank' => 168, 'refrank' => null),
+ " a " => array('change' => 180, 'baserank' => 199, 'refrank' => 19), "one" => array('change' => 76, 'baserank' => 167, 'refrank' => 243),
+ "n f" => array('change' => 300, 'baserank' => 45, 'refrank' => null), "eat" => array('change' => 300, 'baserank' => 130, 'refrank' => null),
+ "ica" => array('change' => 198, 'baserank' => 75, 'refrank' => 273), "inc" => array('change' => 300, 'baserank' => 147, 'refrank' => null),
+ "enc" => array('change' => 300, 'baserank' => 69, 'refrank' => null), "ore" => array('change' => 204, 'baserank' => 86, 'refrank' => 290),
+ "is " => array('change' => 1, 'baserank' => 43, 'refrank' => 44), " as" => array('change' => 139, 'baserank' => 32, 'refrank' => 171),
+ "nts" => array('change' => 300, 'baserank' => 165, 'refrank' => null), "d m" => array('change' => 300, 'baserank' => 279, 'refrank' => null),
+ "her" => array('change' => 112, 'baserank' => 143, 'refrank' => 31), " al" => array('change' => 65, 'baserank' => 200, 'refrank' => 135),
+ " is" => array('change' => 105, 'baserank' => 107, 'refrank' => 212), "e t" => array('change' => 46, 'baserank' => 68, 'refrank' => 22),
+ "c r" => array('change' => 300, 'baserank' => 261, 'refrank' => null), " hi" => array('change' => 45, 'baserank' => 106, 'refrank' => 61),
+ "cia" => array('change' => 300, 'baserank' => 267, 'refrank' => null), " fr" => array('change' => 37, 'baserank' => 209, 'refrank' => 172),
+ "ult" => array('change' => 300, 'baserank' => 96, 'refrank' => null), "e m" => array('change' => 9, 'baserank' => 128, 'refrank' => 119),
+ "ass" => array('change' => 300, 'baserank' => 250, 'refrank' => null), "s o" => array('change' => 2, 'baserank' => 92, 'refrank' => 90),
+ "pop" => array('change' => 300, 'baserank' => 173, 'refrank' => null), "nd " => array('change' => 2, 'baserank' => 12, 'refrank' => 10),
+ "the" => array('change' => 0, 'baserank' => 1, 'refrank' => 1), " st" => array('change' => 197, 'baserank' => 226, 'refrank' => 29),
+ " no" => array('change' => 130, 'baserank' => 218, 'refrank' => 88), "ast" => array('change' => 300, 'baserank' => 251, 'refrank' => null),
+ " fi" => array('change' => 300, 'baserank' => 208, 'refrank' => null), "ess" => array('change' => 160, 'baserank' => 135, 'refrank' => 295),
+ "gre" => array('change' => 300, 'baserank' => 40, 'refrank' => null), "h a" => array('change' => 300, 'baserank' => 142, 'refrank' => null),
+ "duo" => array('change' => 300, 'baserank' => 287, 'refrank' => null), " so" => array('change' => 6, 'baserank' => 114, 'refrank' => 120),
+ "es " => array('change' => 48, 'baserank' => 72, 'refrank' => 24), "for" => array('change' => 96, 'baserank' => 139, 'refrank' => 43),
+ "gan" => array('change' => 300, 'baserank' => 140, 'refrank' => null), "per" => array('change' => 111, 'baserank' => 171, 'refrank' => 282),
+ "thi" => array('change' => 33, 'baserank' => 191, 'refrank' => 224), " of" => array('change' => 6, 'baserank' => 5, 'refrank' => 11),
+ " cl" => array('change' => 300, 'baserank' => 205, 'refrank' => null), " sc" => array('change' => 300, 'baserank' => 222, 'refrank' => null),
+ "t t" => array('change' => 49, 'baserank' => 94, 'refrank' => 45), "als" => array('change' => 300, 'baserank' => 242, 'refrank' => null),
+ "avi" => array('change' => 300, 'baserank' => 255, 'refrank' => null), "cie" => array('change' => 300, 'baserank' => 268, 'refrank' => null),
+ " du" => array('change' => 300, 'baserank' => 101, 'refrank' => null), "pre" => array('change' => 105, 'baserank' => 174, 'refrank' => 279),
+ "as " => array('change' => 17, 'baserank' => 25, 'refrank' => 42), "a a" => array('change' => 300, 'baserank' => 234, 'refrank' => null),
+ "gel" => array('change' => 300, 'baserank' => 141, 'refrank' => null), "ite" => array('change' => 300, 'baserank' => 149, 'refrank' => null),
+ "n r" => array('change' => 300, 'baserank' => 30, 'refrank' => null), "by " => array('change' => 105, 'baserank' => 121, 'refrank' => 226),
+ "d u" => array('change' => 300, 'baserank' => 282, 'refrank' => null), "clu" => array('change' => 300, 'baserank' => 270, 'refrank' => null),
+ " ur" => array('change' => 300, 'baserank' => 229, 'refrank' => null), "ebu" => array('change' => 300, 'baserank' => 298, 'refrank' => null),
+ "n i" => array('change' => 300, 'baserank' => 158, 'refrank' => null), "he " => array('change' => 0, 'baserank' => 2, 'refrank' => 2),
+ " wh" => array('change' => 195, 'baserank' => 232, 'refrank' => 37), " ph" => array('change' => 300, 'baserank' => 220, 'refrank' => null),
+ );
+
+ $ranked = $this->x->_arr_rank($this->x->_trigram($str));
+ $results = $this->x->detect($str);
+
+ $count = count($ranked);
+ $sum = 0;
+
+ //foreach ($this->x->_lang_db['english'] as $key => $value) {
+ foreach ($ranked as $key => $value) {
+ if (isset($ranked[$key]) && isset($this->x->_lang_db['english'][$key])) {
+ $difference = abs($this->x->_lang_db['english'][$key] - $ranked[$key]);
+ } else {
+ $difference = 300;
+ }
+
+ $this->assertTrue(isset($true_differences[$key]), "'$key'");
+ if (isset($true_differences[$key])) {
+ $this->assertEquals($true_differences[$key]['change'], $difference, "'$key'");
+ }
+ $sum += $difference;
+ }
+
+ $this->assertEquals(300, $count);
+ $this->assertEquals(59490, $sum);
+
+ $this->assertEquals('english', key($results));
+ $this->assertEquals(198, floor(current($results)));
+ next($results);
+ $this->assertEquals('italian', key($results));
+ $this->assertEquals(228, floor(current($results)));
+ }
+
+ function test_french ()
+ {
+ $this->x->setPerlCompatible();
+ $str = "Verifions que le détecteur de langues marche";
+
+ $trigrams = $this->x->_trigram($str);
+ $this->assertEquals(42, count($trigrams));
+ // verified in Language::Guess
+
+ $ranked = $this->x->_arr_rank($trigrams);
+ $this->assertEquals(0, $ranked['e l']);
+
+ $correct_ranks = array(
+ ' de' => 1,
+ "éte" => 41,
+ "dét" => 12,
+ 'fio' => 18,
+ 'de ' => 11,
+ 'ons' => 28,
+ 'ect' => 14,
+ 'le ' => 24,
+ 'arc' => 8,
+ 'lan' => 23,
+ 'es ' => 16,
+ 'mar' => 25,
+ " dé" => 2,
+ 'ifi' => 21,
+ 'gue' => 19,
+ 'ur ' => 39,
+ 'rch' => 31,
+ 'ang' => 7,
+ 'que' => 29,
+ 'ngu' => 26,
+ 'e d' => 13,
+ 'rif' => 32,
+ ' ma' => 5,
+ 'tec' => 35,
+ 'ns ' => 27,
+ ' la' => 3,
+ ' le' => 4,
+ 'r d' => 30,
+ 'e l' => 0,
+ 'che' => 9,
+ 's m' => 33,
+ 'ue ' => 37,
+ 'ver' => 40,
+ 'teu' => 36,
+ 'eri' => 15,
+ 'cte' => 10,
+ 'ues' => 38,
+ 's q' => 34,
+ 'eur' => 17,
+ ' qu' => 6,
+ 'he ' => 20,
+ 'ion' => 22
+ );
+
+
+ $this->assertEquals(count($correct_ranks), count($ranked), "different number of trigrams found");
+
+ $distances = array(
+ ' de' => array('change' => 0, 'baserank' => 1, 'refrank' => 1),
+ 'éte' => array('change' => 300, 'baserank' => 41, 'refrank' => null),
+ 'dét' => array('change' => 300, 'baserank' => 12, 'refrank' => null),
+ 'fio' => array('change' => 300, 'baserank' => 18, 'refrank' => null),
+ 'de ' => array('change' => 9, 'baserank' => 11, 'refrank' => 2),
+ 'ons' => array('change' => 11, 'baserank' => 28, 'refrank' => 39),
+ 'ect' => array('change' => 300, 'baserank' => 14, 'refrank' => null),
+ 'le ' => array('change' => 19, 'baserank' => 24, 'refrank' => 5),
+ 'arc' => array('change' => 300, 'baserank' => 8, 'refrank' => null),
+ 'lan' => array('change' => 300, 'baserank' => 23, 'refrank' => null),
+ 'es ' => array('change' => 16, 'baserank' => 16, 'refrank' => 0),
+ 'mar' => array('change' => 300, 'baserank' => 25, 'refrank' => null),
+ ' dé' => array('change' => 59, 'baserank' => 2, 'refrank' => 61),
+ 'ifi' => array('change' => 300, 'baserank' => 21, 'refrank' => null),
+ 'gue' => array('change' => 300, 'baserank' => 19, 'refrank' => null),
+ 'ur ' => array('change' => 12, 'baserank' => 39, 'refrank' => 27),
+ 'rch' => array('change' => 300, 'baserank' => 31, 'refrank' => null),
+ 'ang' => array('change' => 300, 'baserank' => 7, 'refrank' => null),
+ 'que' => array('change' => 5, 'baserank' => 29, 'refrank' => 24),
+ 'ngu' => array('change' => 300, 'baserank' => 26, 'refrank' => null),
+ 'e d' => array('change' => 2, 'baserank' => 13, 'refrank' => 15),
+ 'rif' => array('change' => 300, 'baserank' => 32, 'refrank' => null),
+ ' ma' => array('change' => 89, 'baserank' => 5, 'refrank' => 94),
+ 'tec' => array('change' => 300, 'baserank' => 35, 'refrank' => null),
+ 'ns ' => array('change' => 6, 'baserank' => 27, 'refrank' => 21),
+ ' la' => array('change' => 6, 'baserank' => 3, 'refrank' => 9),
+ ' le' => array('change' => 1, 'baserank' => 4, 'refrank' => 3),
+ 'r d' => array('change' => 202, 'baserank' => 30, 'refrank' => 232),
+ 'e l' => array('change' => 14, 'baserank' => 0, 'refrank' => 14),
+ 'che' => array('change' => 300, 'baserank' => 9, 'refrank' => null),
+ 's m' => array('change' => 180, 'baserank' => 33, 'refrank' => 213),
+ 'ue ' => array('change' => 7, 'baserank' => 37, 'refrank' => 30),
+ 'ver' => array('change' => 117, 'baserank' => 40, 'refrank' => 157),
+ 'teu' => array('change' => 300, 'baserank' => 36, 'refrank' => null),
+ 'eri' => array('change' => 300, 'baserank' => 15, 'refrank' => null),
+ 'cte' => array('change' => 300, 'baserank' => 10, 'refrank' => null),
+ 'ues' => array('change' => 237, 'baserank' => 38, 'refrank' => 275),
+ 's q' => array('change' => 300, 'baserank' => 34, 'refrank' => null),
+ 'eur' => array('change' => 56, 'baserank' => 17, 'refrank' => 73),
+ ' qu' => array('change' => 31, 'baserank' => 6, 'refrank' => 37),
+ 'he ' => array('change' => 300, 'baserank' => 20, 'refrank' => null),
+ 'ion' => array('change' => 12, 'baserank' => 22, 'refrank' => 10),
+ );
+
+
+
+ $french_ranks = $this->x->_lang_db['french'];
+
+ $sumchange = 0;
+ foreach ($ranked as $key => $value) {
+ if (isset($french_ranks[$key])) {
+ $difference = abs($french_ranks[$key] - $ranked[$key]);
+ } else {
+ $difference = 300;
+ }
+ $this->assertTrue(isset($distances[$key]), $key);
+ if (isset($distances[$key])) {
+ $this->assertEquals($distances[$key]['baserank'], $ranked[$key], "baserank for $key");
+ if ($distances[$key]['refrank'] === null) {
+ $this->assertArrayNotHasKey($key, $french_ranks);
+ } else {
+ $this->assertEquals($distances[$key]['refrank'], $french_ranks[$key], "refrank for $key");
+ }
+ $this->assertEquals($distances[$key]['change'], $difference, "difference for $key");
+ }
+
+ $sumchange += $difference;
+ }
+
+ $actual_result = $this->x->_distance($french_ranks, $ranked);
+ $this->assertEquals($sumchange, $actual_result);
+ $this->assertEquals(7091, $actual_result);
+ $this->assertEquals(168, floor($sumchange/count($trigrams)));
+
+ $final_result = $this->x->detect($str);
+ $this->assertEquals(168, floor($final_result['french']));
+ $this->assertEquals(211, $final_result['spanish']);
+ }
+
+ function test_russian ()
+ {
+ $str = 'авай проверить узнает ли наш угадатель руÑÑки Ñзык';
+
+ $this->x->setPerlCompatible();
+ $trigrams = $this->x->_trigram($str);
+ $ranked = $this->x->_arr_rank($trigrams);
+
+ $correct_ranks = array(
+ ' ру' => array('change' => 300, 'baserank' => 3, 'refrank' => null),
+ 'ай ' => array('change' => 300, 'baserank' => 10, 'refrank' => null),
+ 'ада' => array('change' => 300, 'baserank' => 8, 'refrank' => null),
+ ' пр' => array('change' => 1, 'baserank' => 2, 'refrank' => 1),
+ ' Ñз' => array('change' => 300, 'baserank' => 6, 'refrank' => null),
+ 'ить' => array('change' => 300, 'baserank' => 24, 'refrank' => null),
+ ' на' => array('change' => 1, 'baserank' => 1, 'refrank' => 0),
+ 'зна' => array('change' => 153, 'baserank' => 20, 'refrank' => 173),
+ 'вай' => array('change' => 300, 'baserank' => 13, 'refrank' => null),
+ 'ш у' => array('change' => 300, 'baserank' => 44, 'refrank' => null),
+ 'ль ' => array('change' => 300, 'baserank' => 28, 'refrank' => null),
+ ' ли' => array('change' => 300, 'baserank' => 0, 'refrank' => null),
+ 'ÑÑк' => array('change' => 300, 'baserank' => 37, 'refrank' => null),
+ 'ть ' => array('change' => 31, 'baserank' => 40, 'refrank' => 9),
+ 'ава' => array('change' => 300, 'baserank' => 7, 'refrank' => null),
+ 'про' => array('change' => 18, 'baserank' => 32, 'refrank' => 14),
+ 'гад' => array('change' => 300, 'baserank' => 15, 'refrank' => null),
+ 'уÑÑ' => array('change' => 300, 'baserank' => 43, 'refrank' => null),
+ 'ык ' => array('change' => 300, 'baserank' => 45, 'refrank' => null),
+ 'ель' => array('change' => 64, 'baserank' => 17, 'refrank' => 81),
+ 'Ñзы' => array('change' => 300, 'baserank' => 47, 'refrank' => null),
+ ' уг' => array('change' => 300, 'baserank' => 4, 'refrank' => null),
+ 'ате' => array('change' => 152, 'baserank' => 11, 'refrank' => 163),
+ 'и н' => array('change' => 63, 'baserank' => 22, 'refrank' => 85),
+ 'и Ñ' => array('change' => 300, 'baserank' => 23, 'refrank' => null),
+ 'ает' => array('change' => 152, 'baserank' => 9, 'refrank' => 161),
+ 'узн' => array('change' => 300, 'baserank' => 42, 'refrank' => null),
+ 'ери' => array('change' => 300, 'baserank' => 18, 'refrank' => null),
+ 'ли ' => array('change' => 23, 'baserank' => 27, 'refrank' => 4),
+ 'т л' => array('change' => 300, 'baserank' => 38, 'refrank' => null),
+ ' уз' => array('change' => 300, 'baserank' => 5, 'refrank' => null),
+ 'дат' => array('change' => 203, 'baserank' => 16, 'refrank' => 219),
+ 'зык' => array('change' => 300, 'baserank' => 21, 'refrank' => null),
+ 'ров' => array('change' => 59, 'baserank' => 34, 'refrank' => 93),
+ 'рит' => array('change' => 300, 'baserank' => 33, 'refrank' => null),
+ 'ь р' => array('change' => 300, 'baserank' => 46, 'refrank' => null),
+ 'ет ' => array('change' => 19, 'baserank' => 19, 'refrank' => 38),
+ 'ки ' => array('change' => 116, 'baserank' => 26, 'refrank' => 142),
+ 'руÑ' => array('change' => 300, 'baserank' => 35, 'refrank' => null),
+ 'тел' => array('change' => 16, 'baserank' => 39, 'refrank' => 23),
+ 'нае' => array('change' => 300, 'baserank' => 29, 'refrank' => null),
+ 'й п' => array('change' => 300, 'baserank' => 25, 'refrank' => null),
+ 'наш' => array('change' => 300, 'baserank' => 30, 'refrank' => null),
+ 'уга' => array('change' => 300, 'baserank' => 41, 'refrank' => null),
+ 'ове' => array('change' => 214, 'baserank' => 31, 'refrank' => 245),
+ 'Ñки' => array('change' => 112, 'baserank' => 36, 'refrank' => 148),
+ 'вер' => array('change' => 31, 'baserank' => 14, 'refrank' => 45),
+ 'аш ' => array('change' => 300, 'baserank' => 12, 'refrank' => null),
+ );
+
+ $this->assertEquals(48, count($ranked));
+
+
+ $russian = $this->x->_lang_db['russian'];
+
+ $sumchange = 0;
+ foreach ($ranked as $key => $value) {
+ if (isset($russian[$key])) {
+ $difference = abs($russian[$key] - $ranked[$key]);
+ } else {
+ $difference = 300;
+ }
+ $this->assertTrue(isset($correct_ranks[$key], $key));
+ if (isset($correct_ranks[$key])) {
+ $this->assertEquals($correct_ranks[$key]['baserank'], $ranked[$key], "baserank for $key");
+ if ($correct_ranks[$key]['refrank'] === null) {
+ $this->assertArrayNotHasKey($key, $russian);
+ } else {
+ $this->assertEquals($correct_ranks[$key]['refrank'], $russian[$key], "refrank for $key");
+ }
+ $this->assertEquals($correct_ranks[$key]['change'], $difference, "difference for $key");
+ }
+
+ $sumchange += $difference;
+ }
+
+ $actual_result = $this->x->_distance($russian, $ranked);
+ $this->assertEquals($sumchange, $actual_result);
+ $this->assertEquals(10428, $actual_result);
+ $this->assertEquals(217, floor($sumchange/count($trigrams)));
+
+ $final_result = $this->x->detect($str);
+ $this->assertEquals(217,floor($final_result['russian']));
+ }
+
+ function test_ranker ()
+ {
+ $str = 'is it s i';
+
+ $result = $this->x->_arr_rank($this->x->_trigram($str));
+
+ $this->assertEquals(0, $result['s i']);
+ }
+
+
+ function test_count ()
+ {
+ $langs = $this->x->getLanguages();
+
+ $count = $this->x->getLanguageCount();
+
+ $this->assertEquals(count($langs), $count);
+
+ foreach ($langs as $lang) {
+ $this->assertTrue($this->x->languageExists($lang), $lang);
+ }
+ }
+
+ function testLanguageExistsNameMode2()
+ {
+ $this->x->setNameMode(2);
+ $this->assertTrue($this->x->languageExists('en'));
+ $this->assertFalse($this->x->languageExists('english'));
+ }
+
+ function testLanguageExistsArrayNameMode2()
+ {
+ $this->x->setNameMode(2);
+ $this->assertTrue($this->x->languageExists(array('en', 'de')));
+ $this->assertFalse($this->x->languageExists(array('en', 'doesnotexist')));
+ }
+
+ /**
+ * @expectedException Text_LanguageDetect_Exception
+ * @expectedExceptionMessage Unsupported parameter type passed to languageExists()
+ */
+ function testLanguageExistsUnsupportedType()
+ {
+ $this->x->languageExists(1.23);
+ }
+
+ function testGetLanguages()
+ {
+ $langs = $this->x->getLanguages();
+ $this->assertContains('english', $langs);
+ $this->assertContains('swedish', $langs);
+ }
+
+ function testGetLanguagesNameMode2()
+ {
+ $this->x->setNameMode(2);
+ $langs = $this->x->getLanguages();
+ $this->assertContains('en', $langs);
+ $this->assertContains('sv', $langs);
+ }
+
+ function testDetect()
+ {
+ $scores = $this->x->detect('Das ist ein kleiner Text für euch alle');
+ $this->assertInternalType('array', $scores);
+ $this->assertGreaterThan(5, count($scores));
+
+ list($key, $value) = each($scores);
+ $this->assertEquals('german', $key, 'text is german');
+ }
+
+ function testDetectNameMode2()
+ {
+ $this->x->setNameMode(2);
+ $scores = $this->x->detect('Das ist ein kleiner Text für euch alle');
+ list($key, $value) = each($scores);
+ $this->assertEquals('de', $key, 'text is german');
+ }
+
+ function testDetectNameMode2Limit()
+ {
+ $this->x->setNameMode(2);
+ $scores = $this->x->detect('Das ist ein kleiner Text für euch alle', 1);
+ list($key, $value) = each($scores);
+ $this->assertEquals('de', $key, 'text is german');
+ }
+
+ function testDetectSimple()
+ {
+ $lang = $this->x->detectSimple('Das ist ein kleiner Text für euch alle');
+ $this->assertInternalType('string', $lang);
+ $this->assertEquals('german', $lang, 'text is german');
+ }
+
+ function testDetectSimpleNameMode2()
+ {
+ $this->x->setNameMode(2);
+ $lang = $this->x->detectSimple('Das ist ein kleiner Text für euch alle');
+ $this->assertInternalType('string', $lang);
+ $this->assertEquals('de', $lang, 'text is german');
+ }
+
+ function testDetectSimpleNoLanguages()
+ {
+ $this->x->omitLanguages('english', true);
+ $this->x->omitLanguages('english', false);
+ $this->assertNull(
+ $this->x->detectSimple('Das ist ein kleiner Text für euch alle')
+ );
+ }
+
+ function testLanguageSimilarity()
+ {
+ $this->x->setPerlCompatible(true);
+ $eng_dan = $this->x->languageSimilarity('english', 'danish');
+ $nor_dan = $this->x->languageSimilarity('norwegian', 'danish');
+ $swe_dan = $this->x->languageSimilarity('swedish', 'danish');
+
+ // remember, lower means more similar
+ $this->assertTrue($eng_dan > $nor_dan); // english is less similar to danish than norwegian is
+ $this->assertTrue($eng_dan > $swe_dan); // english is less similar to danish than swedish is
+ $this->assertTrue($nor_dan < $swe_dan); // norwegian is more similar to danish than swedish
+
+ // test the range of the results
+ $this->assertTrue($eng_dan <= 300, $eng_dan);
+ $this->assertTrue($eng_dan >= 0, $eng_dan);
+
+ // test it in perl compatible mode
+ $this->x->setPerlCompatible(false);
+
+ $eng_dan = $this->x->languageSimilarity('english', 'danish');
+ $nor_dan = $this->x->languageSimilarity('norwegian', 'danish');
+ $swe_dan = $this->x->languageSimilarity('swedish', 'danish');
+
+ // now higher is more similar
+ $this->assertTrue($eng_dan < $nor_dan);
+ $this->assertTrue($eng_dan < $swe_dan);
+ $this->assertTrue($nor_dan > $swe_dan);
+
+ $this->assertTrue($eng_dan <= 1, $eng_dan);
+ $this->assertTrue($eng_dan >= 0, $eng_dan);
+
+ $this->x->setPerlCompatible(true);
+
+ $eng_all = $this->x->languageSimilarity('english');
+ $this->assertEquals($this->x->getLanguageCount() - 1, count($eng_all));
+ $this->assertTrue(!isset($eng_all['english']));
+
+ $this->assertTrue($eng_all['italian'] < $eng_all['turkish']);
+ $this->assertTrue($eng_all['french'] < $eng_all['kyrgyz']);
+
+ $all = $this->x->languageSimilarity();
+ $this->assertTrue(!isset($all['english']['english']));
+ $this->assertTrue($all['french']['spanish'] < $all['french']['mongolian']);
+ $this->assertTrue($all['spanish']['latin'] < $all['hindi']['finnish']);
+ $this->assertTrue($all['russian']['uzbek'] < $all['russian']['english']);
+ }
+
+
+ function testLanguageSimilarityNameMode2()
+ {
+ $this->x->setNameMode(2);
+ $this->x->setPerlCompatible(true);
+ $eng_dan = $this->x->languageSimilarity('en', 'dk');
+ $nor_dan = $this->x->languageSimilarity('no', 'dk');
+
+ // remember, lower means more similar
+ $this->assertTrue($eng_dan > $nor_dan); // english is less similar to danish than norwegian is
+ }
+
+ function testLanguageSimilarityUnknownLanguage()
+ {
+ $this->assertNull($this->x->languageSimilarity('doesnotexist'));
+ }
+
+ function testLanguageSimilarityUnknownLanguage2()
+ {
+ $this->assertNull($this->x->languageSimilarity('english', 'doesnotexist'));
+ }
+
+ function test_compatibility ()
+ {
+ $str = "I am the very model of a modern major general.";
+
+
+ $this->x->setPerlCompatible(false);
+ $result = $this->x->detectConfidence($str);
+
+ $this->assertTrue(!is_null($result));
+ $this->assertTrue(is_array($result));
+ extract($result);
+ $this->assertEquals('english', $language);
+ $this->assertTrue($similarity <= 1 && $similarity >= 0, $similarity);
+ $this->assertTrue($confidence <= 1 && $confidence >= 0, $confidence);
+
+ $this->x->setPerlCompatible(true);
+ $result = $this->x->detectConfidence($str);
+ extract($result, EXTR_OVERWRITE);
+
+ $this->assertEquals('english', $language);
+
+ // technically the lowest possible score is 0 but it's extremely unlikely to hit that
+ $this->assertTrue($similarity <= 300 && $similarity >= 1, $similarity);
+ $this->assertTrue($confidence <= 1 && $confidence >= 0, $confidence);
+
+ }
+
+ function testDetectConfidenceNoText()
+ {
+ $this->assertNull($this->x->detectConfidence(''));
+ }
+
+ function test_omit_error ()
+ {
+ $str = 'On January 29, 1737, Thomas Paine was born in Thetford, England. His father, a corseter, had grand visions for his son, but by the age of 12, Thomas had failed out of school. The young Paine began apprenticing for his father, but again, he failed.';
+
+ $myobj = new Text_LanguageDetect;
+
+ $result = $myobj->detectSimple($str);
+ $this->assertEquals('english', $result);
+
+ // omit all languages and you should get an error
+ $myobj->omitLanguages($myobj->getLanguages());
+
+ $result = $myobj->detectSimple($str);
+
+ $this->assertNull($result, gettype($result));
+ }
+
+ function test_cyrillic ()
+ {
+ // tests whether the cyrillic lower-casing works
+
+ $uppercased = 'РБ В Г Д Е Ж З И Й К Л М РО П'
+ . 'Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я';
+
+ $lowercased = 'а б в г д е ж з и й к л м н о п'
+ . 'Ñ€ Ñ Ñ‚ у Ñ„ Ñ… ц ч ш щ ÑŠ Ñ‹ ÑŒ Ñ ÑŽ Ñ';
+
+ $this->assertEquals(strlen($uppercased), strlen($lowercased));
+
+ $i = 0;
+ $j = 0;
+ $new_u = '';
+ while ($i < strlen($uppercased)) {
+ $u = Text_LanguageDetect::_next_char($uppercased, $i, true);
+ $l = Text_LanguageDetect::_next_char($lowercased, $j, true);
+ $this->assertEquals($u, $l);
+
+ $new_u .= $u;
+ }
+
+ $this->assertEquals($i, $j);
+ $this->assertEquals($i, strlen($lowercased));
+ if (function_exists('mb_strtolower')) {
+ $this->assertEquals($new_u, mb_strtolower($uppercased, 'UTF-8'));
+ }
+ }
+
+ function test_block_detection()
+ {
+ $exp_output = <<<EOF
+Array
+(
+ [Basic Latin] => 37
+ [CJK Unified Ideographs] => 2
+ [Hiragana] => 1
+ [Latin-1 Supplement] => 4
+)
+EOF;
+ $teststr = 'lsdkfj ゠葉 å¶ slskdfj s Ã…j;sdklf ÿjs;kdjÃ¥f î';
+ $result = $this->x->detectUnicodeBlocks($teststr, false);
+
+ ksort($result);
+ ob_start();
+ print_r($result);
+ $str_result = ob_get_contents();
+ ob_end_clean();
+ $this->assertEquals(trim($exp_output), trim($str_result));
+
+ // test whether skipping the spaces reduces the basic latin count
+ $result2 = $this->x->detectUnicodeBlocks($teststr, true);
+ $this->assertTrue($result2['Basic Latin'] < $result['Basic Latin']);
+
+ $result3 = $this->x->unicodeBlockName('и');
+ $this->assertEquals('Cyrillic', $result3);
+
+ $this->assertEquals('Basic Latin', $this->x->unicodeBlockName('A'));
+
+ // see what happens when you try an unassigned range
+ $utf8 = $this->code2utf(0x0800);
+
+ $this->assertEquals(false, $this->x->unicodeBlockName($utf8));
+
+ // try unicode vals in several different ranges
+ $unicode['Supplementary Private Use Area-A'] = 0xF0001;
+ $unicode['Supplementary Private Use Area-B'] = 0x100001;
+ $unicode['CJK Unified Ideographs Extension B'] = 0x20001;
+ $unicode['Ugaritic'] = 0x10381;
+ $unicode['Gothic'] = 0x10331;
+ $unicode['Low Surrogates'] = 0xDC01;
+ $unicode['CJK Unified Ideographs'] = 0x4E00;
+ $unicode['Glagolitic'] = 0x2C00;
+ $unicode['Latin Extended Additional'] = 0x1EFF;
+ $unicode['Devanagari'] = 0x0900;
+ $unicode['Hebrew'] = 0x0590;
+ $unicode['Latin Extended-B'] = 0x024F;
+ $unicode['Latin-1 Supplement'] = 0x00FF;
+ $unicode['Basic Latin'] = 0x007F;
+
+ foreach ($unicode as $range => $codepoint) {
+ $result = $this->x->unicodeBlockName($this->code2utf($codepoint));
+ $this->assertEquals($range, $result, $codepoint);
+ }
+ }
+
+ /**
+ * @expectedException Text_LanguageDetect_Exception
+ * @expectedExceptionMessage Pass a single char only to this method
+ */
+ function testUnicodeBlockNameParamString()
+ {
+ $this->x->unicodeBlockName('foo bar baz');
+ }
+
+ /**
+ * @expectedException Text_LanguageDetect_Exception
+ * @expectedExceptionMessage Input must be of type string or int
+ */
+ function testUnicodeBlockNameUnsupportedParamType()
+ {
+ $this->x->unicodeBlockName(1.23);
+ }
+
+
+ // utility function
+ // found in http://www.php.net/manual/en/function.utf8-encode.php#49336
+ function code2utf($num)
+ {
+ if ($num < 128) {
+ return chr($num);
+
+ } elseif ($num < 2048) {
+ return chr(($num >> 6) + 192) . chr(($num & 63) + 128);
+
+ } elseif ($num < 65536) {
+ return chr(($num >> 12) + 224) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
+
+ } elseif ($num < 2097152) {
+ return chr(($num >> 18) + 240) . chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
+ } else {
+ return '';
+ }
+ }
+
+ function test_utf8len()
+ {
+ $str = 'Iñtërnâtiônàlizætiøn';
+ $this->assertEquals(20, $this->x->utf8strlen($str), utf8_decode($str));
+
+ $str = '時期日';
+ $this->assertEquals(3, $this->x->utf8strlen($str), utf8_decode($str));
+ }
+
+ function test_unicode()
+ {
+ // test whether it can get the right unicode values for utf8 chars
+
+ $chars['ת'] = 0x5EA;
+
+ $chars['ç'] = 0x00E7;
+
+ $chars['a'] = 0x0061;
+
+ $chars['Φ'] = 0x03A6;
+
+ $chars['И'] = 0x0418;
+
+ $chars['Ú°'] = 0x6B0;
+
+ $chars['Ụ'] = 0x1EE4;
+
+ $chars['놔'] = 0xB194;
+
+ $chars['é®'] = 0x906E;
+
+ $chars['怀'] = 0x6000;
+
+ $chars['ฤ'] = 0x0E24;
+
+ $chars['Я'] = 0x042F;
+
+ $chars['ü'] = 0x00FC;
+
+ $chars['Ä'] = 0x0110;
+
+ $chars['×'] = 0x05D0;
+
+
+ foreach ($chars as $utf8 => $unicode) {
+ $this->assertEquals($unicode, $this->x->_utf8char2unicode($utf8), $utf8);
+ }
+ }
+
+ function test_unicode_off()
+ {
+
+ // see what happens when you turn the unicode setting off
+
+ $myobj = new Text_LanguageDetect;
+
+ $str = 'This is a delightful sample of English text';
+
+ $myobj->useUnicodeBlocks(true);
+ $result1 = $myobj->detectConfidence($str);
+
+ $myobj->useUnicodeBlocks(false);
+ $result2 = $myobj->detectConfidence($str);
+
+ $this->assertEquals($result1, $result2);
+
+ // note this test doesn't tell if unicode narrowing was actually used or not
+ }
+
+
+ function test_detection()
+ {
+
+ // WARNING: the below lines may make your terminal go ape! be warned
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // test strings from the test module used by perl's Language::Guess
+
+ $testarr = array(
+ "english" => "This is a test of the language checker",
+ "french" => "Verifions que le détecteur de langues marche",
+ "polish" => "Sprawdźmy, czy odgadywacz języków pracuje",
+ "russian" => "Давай проверим узнает ли нашь угадыватель руÑÑкий Ñзык",
+ "spanish" => "La respuesta de los acreedores a la oferta argentina para salir del default no ha sido muy positiv",
+ "romanian" => "în acest sens aparţinînd Adunării Generale a organizaţiei, în ciuda faptului că mai multe dintre solicitările organizaţiei privind organizarea scrutinului nu au fost soluţionate",
+ "albanian" => "kaluan ditën e fundit të fushatës në shtetet kryesore për të siguruar sa më shumë votues.",
+ "danish" => "På denne side bringer vi billeder fra de mange forskellige forberedelser til arrangementet, efterhånden som vi får dem ",
+ "swedish" => "Vi säger att Frälsningen är en gåva till alla, fritt och för intet. Men som vi nämnt så finns det två villkor som måste",
+ "norwegian" => "Nominasjonskomiteen i Akershus KrF har skviset ut Einar Holstad fra stortingslisten. Ytre Enebakk-mannen har plass p Stortinget s lenge Valgerd Svarstad Haugland sitter i",
+ "finnish" => "on julkishallinnon verkkopalveluiden yhteinen osoite. Kansalaisten arkielämää helpottavaa tietoa on koottu eri aihealueisiin",
+ "estonian" => "Ennetamaks reisil ebameeldivaid vahejuhtumeid vii end kurssi reisidokumentide ja viisade reeglitega ning muu praktilise informatsiooniga",
+ "hungarian" => "Hiába jön létre az önkéntes magyar haderő, hiába nem lesz többé bevonulás, változatlanul fennmarad a hadkötelezettség intézménye",
+ "uzbek" => "Ð¼Ð¸Ð»Ð¸Ñ†Ð¸Ñ Ð²Ð° уч Ñолиқ идораÑи ходимлари Ñраланган. Шаҳарда хавфÑизлик чоралари кучайтирилган.",
+
+
+ "czech" => "Francouzský ministr financí zmírnil výhrady vůÄi nízkým firemním daním v nových Älenských státech EU",
+ "dutch" => "Die kritiek was volgens hem bitter hard nodig, omdat Nederland binnen een paar jaar in een soort Belfast zou dreigen te nderen",
+
+ "croatian" => "biće priliÄno izjednaÄena, sugeriÅ¡u najnovije ankete. Oba kandidata tvrde da su sposobni da dobiju rat protiv terorizma",
+
+ "romanian" => "în acest sens aparţinînd Adunării Generale a organizaţiei, în ciuda faptului că mai multe dintre solicitările organizaţiei ivind organizarea scrutinului nu au fost soluţionate",
+
+ "turkish" => "yakın tarihin en çekişmeli başkanlık seçiminde oy verme işlemi sürerken, katılımda rekor bekleniyor.",
+
+ "kyrgyz" => "көрбөгөндөй Ñлдик толкундоо болуп, Кокон шаарынын көчөлөрүндө бир нече миң киши нааразылык билдирди.",
+
+
+ "albanian" => "kaluan ditën e fundit të fushatës në shtetet kryesore për të siguruar sa më shumë votues.",
+
+
+ "azeri" => "Daxil olan xəbərlərdə deyilir ki, 6 nəfər Bağdadın mərkəzində yerləşən Təhsil Nazirliyinin binası yaxınlığında baş vermiş partlayış zamanı həlak olub.",
+
+
+ "macedonian" => "на јавното миÑлење покажуваат дека трката е толку теÑна, што Ñе очекува двајцата Ñоперници да ја прекршат традицијата и да Ñе појават и на Ñамиот изборен ден.",
+
+
+
+ "kazakh" => "Сайлау нәтижеÑінде дауыÑтардың баÑым бөлігін ел премьер миниÑтрі Виктор Янукович пен оның қарÑылаÑÑ‹, Ð¾Ð¿Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð¶ÐµÑ‚ÐµÐºÑˆÑ–ÑÑ– Виктор Ющенко алды.",
+
+
+ "bulgarian" => " е готов да даде гаранции, че нÑма да прави Ñдрено оръжие, ако му Ñе разреши мирна атомна програма",
+
+
+ "arabic" => " ملايين الناخبين الأمريكيين يدلون بأصواتهم وسط إقبال قياسي على انتخابات هي الأشد تناÙسا منذ عقود",
+
+ );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // should be safe at this point
+
+
+ $languages = $this->x->getLanguages();
+ foreach (array_keys($testarr) as $key) {
+ $this->assertTrue(in_array($key, $languages), "$key was not in known languages");
+ }
+
+ foreach ($testarr as $key=>$value) {
+ $this->assertEquals($key, $this->x->detectSimple($value));
+ }
+ }
+
+
+ public function test_convertFromNameMode0()
+ {
+ $this->assertEquals(
+ 'english',
+ $this->x->_convertFromNameMode('english')
+ );
+ }
+
+ public function test_convertFromNameMode2String()
+ {
+ $this->x->setNameMode(2);
+ $this->assertEquals(
+ 'english',
+ $this->x->_convertFromNameMode('en')
+ );
+ }
+
+ public function test_convertFromNameMode3String()
+ {
+ $this->x->setNameMode(3);
+ $this->assertEquals(
+ 'english',
+ $this->x->_convertFromNameMode('eng')
+ );
+ }
+
+ public function test_convertFromNameMode2ArrayVal()
+ {
+ $this->x->setNameMode(2);
+ $this->assertEquals(
+ array('english', 'german'),
+ $this->x->_convertFromNameMode(array('en', 'de'))
+ );
+ }
+
+ public function test_convertFromNameMode2ArrayKey()
+ {
+ $this->x->setNameMode(2);
+ $this->assertEquals(
+ array('english' => 'foo', 'german' => 'test'),
+ $this->x->_convertFromNameMode(
+ array('en' => 'foo', 'de' => 'test'),
+ true
+ )
+ );
+ }
+
+ public function test_convertFromNameMode3ArrayVal()
+ {
+ $this->x->setNameMode(3);
+ $this->assertEquals(
+ array('english', 'german'),
+ $this->x->_convertFromNameMode(array('eng', 'deu'))
+ );
+ }
+
+ public function test_convertFromNameMode3ArrayKey()
+ {
+ $this->x->setNameMode(3);
+ $this->assertEquals(
+ array('english' => 'foo', 'german' => 'test'),
+ $this->x->_convertFromNameMode(
+ array('eng' => 'foo', 'deu' => 'test'),
+ true
+ )
+ );
+ }
+
+ public function test_convertToNameMode0()
+ {
+ $this->assertEquals(
+ 'english',
+ $this->x->_convertToNameMode('english')
+ );
+ }
+
+ public function test_convertToNameMode2String()
+ {
+ $this->x->setNameMode(2);
+ $this->assertEquals(
+ 'en',
+ $this->x->_convertToNameMode('english')
+ );
+ }
+
+ public function test_convertToNameMode3String()
+ {
+ $this->x->setNameMode(3);
+ $this->assertEquals(
+ 'eng',
+ $this->x->_convertToNameMode('english')
+ );
+ }
+
+ public function test_convertToNameMode2ArrayVal()
+ {
+ $this->x->setNameMode(2);
+ $this->assertEquals(
+ array('en', 'de'),
+ $this->x->_convertToNameMode(array('english', 'german'))
+ );
+ }
+
+ public function test_convertToNameMode2ArrayKey()
+ {
+ $this->x->setNameMode(2);
+ $this->assertEquals(
+ array('en' => 'foo', 'de' => 'test'),
+ $this->x->_convertToNameMode(
+ array('english' => 'foo', 'german' => 'test'),
+ true
+ )
+ );
+ }
+
+ public function test_convertToNameMode3ArrayVal()
+ {
+ $this->x->setNameMode(3);
+ $this->assertEquals(
+ array('eng', 'deu'),
+ $this->x->_convertToNameMode(array('english', 'german'))
+ );
+ }
+
+ public function test_convertToNameMode3ArrayKey()
+ {
+ $this->x->setNameMode(3);
+ $this->assertEquals(
+ array('eng' => 'foo', 'deu' => 'test'),
+ $this->x->_convertToNameMode(
+ array('english' => 'foo', 'german' => 'test'),
+ true
+ )
+ );
+ }
+}
diff --git a/library/langdet/tests/Text_LanguageDetect_ISO639Test.php b/library/langdet/tests/Text_LanguageDetect_ISO639Test.php
new file mode 100644
index 000000000..e01d715e1
--- /dev/null
+++ b/library/langdet/tests/Text_LanguageDetect_ISO639Test.php
@@ -0,0 +1,72 @@
+<?php
+set_include_path(
+ __DIR__ . '/../' . PATH_SEPARATOR . get_include_path()
+);
+
+require_once 'Text/LanguageDetect/ISO639.php';
+
+class Text_LanguageDetect_ISO639Test extends PHPUnit_Framework_TestCase
+{
+ public function testNameToCode2()
+ {
+ $this->assertEquals(
+ 'de',
+ Text_LanguageDetect_ISO639::nameToCode2('german')
+ );
+ }
+
+ public function testNameToCode2Fail()
+ {
+ $this->assertNull(
+ Text_LanguageDetect_ISO639::nameToCode2('doesnotexist')
+ );
+ }
+
+ public function testNameToCode3()
+ {
+ $this->assertEquals(
+ 'fra',
+ Text_LanguageDetect_ISO639::nameToCode3('french')
+ );
+ }
+
+ public function testNameToCode3Fail()
+ {
+ $this->assertNull(
+ Text_LanguageDetect_ISO639::nameToCode3('doesnotexist')
+ );
+ }
+
+ public function testCode2ToName()
+ {
+ $this->assertEquals(
+ 'english',
+ Text_LanguageDetect_ISO639::code2ToName('en')
+ );
+ }
+
+ public function testCode2ToNameFail()
+ {
+ $this->assertNull(
+ Text_LanguageDetect_ISO639::code2ToName('nx')
+ );
+ }
+
+ public function testCode3ToName()
+ {
+ $this->assertEquals(
+ 'romanian',
+ Text_LanguageDetect_ISO639::code3ToName('rom')
+ );
+ }
+
+ public function testCode3ToNameFail()
+ {
+ $this->assertNull(
+ Text_LanguageDetect_ISO639::code3ToName('nxx')
+ );
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/library/tinymce/changelog.txt b/library/tinymce/changelog.txt
index ec712077a..7285b7424 100644
--- a/library/tinymce/changelog.txt
+++ b/library/tinymce/changelog.txt
@@ -1,1528 +1,1562 @@
-Version 3.5b2 (2012-03-15)
- Rewrote the enter key logic to normalize browser behavior.
- Fixed so enter within PRE elements produces a BR and shift+enter breaks/end the PRE. Can be disabled using the br_in_pre option.
- Fixed bug where the selection wouldn't be correct after applying formatting and having the caret at the end of the new format node.
- Fixed bug where the noneditable plugin would process contents on raw input calls for example on undo/redo calls.
- Fixed bug where WebKit could produce an exception when a bookmark was requested when there wasn't a proper selection.
- Fixed bug where WebKit would fail to open the image dialog since it would be returning false for a class name instead of a string.
- Fixed so alignment and indentation works properly when forced_root_blocks is set to false. It will produce a DIV by default.
-Version 3.5b1 (2012-03-08)
- Added new event class that is faster and enables support for faking events.
- Added new self_closing_elements, short_ended_elements, boolean_attributes, non_empty_elements and block_elements options to control the HTML Schema.
- Added new schema option and support for the HTML5 schema.
- Added new visualblocks plugin that shows html5 blocks with visual borders.
- Added new types and selector options to make it easier to create editor instances with different configs.
- Added new preview of formatting options in various listboxes.
- Added new preview_styles option that enables control over what gets previewed.
- Fixed bug where content css would be loaded twice into iframe.
- Fixed bug where start elements with only whitespace in the attribute part wouldn't be correctly parsed.
- Fixed bug where the advlink dialog would produce an error about the addSelectAccessibility function not being defined.
- Fixed bug where the caret would be placed at an incorrect position if span was removed by the invalid_elements setting.
- Fixed bug where elements inside a white space preserve element like pre didn't inherit the behavior while parsing.
-Version 3.4.9.x (2012-02-xx)
- Improved behaviour of backspacing into a table to be consistant across browsers and disable backspace when cursor immediately follows a table.
- Improved edit CSS style plugin for single and multiple block selection and provide option to apply style to only selected text.
- Fixed bug in Chrome where moving caret down in table and pasting throws errors.
- Corrected reference to TinyMCE trim function.
- Fixed bug where Ignore All in IE did not remove the underline from the selected word.
- Fixed bug in html source editor word wrap option not wrapping text in Webkit browsers.
- Fixed bug where it was possible to insert an invalid colour in the color pop-up dialog.
- Fixed bug in Webkit where if anchor is on last line by itself caret can not be placed after it.
-Version 3.4.9 (2012-02-23)
- Added settings to wordcount plugin to configure update rate and checking wordcount on backspace and delete using wordcount_update_rate and wordcount_update_on_delete.
- Fixed bug in Webkit and IE where deleting empty paragraphs would remove entire editor contents.
- Fixed bug where pressing enter on end of list item with a heading would create a new item with heading.
- Fixed edit css style dialog text-decoration none checkbox so it disables other text-decoration options when enabled.
- Fixed bug in Gecko where undo wasn't added when focus was lost.
- Fixed bug in Gecko where shift-enter in table cell ending with BR doesn't move caret to new line.
- Fixed bug where right-click on formatted text in IE selected the entire line.
- Fixed bug where text ending with space could not be unformatted in IE.
- Fixed bug where caret formatting would be removed when moving the caret when a selector expression was used.
- Fixed bug where formatting would be applied to the body element when all contents where selected and format had both inline and selector parts.
- Fixed bug where the media plugin would throw errors if you had iframe set as an invalid element in config.
- Fixed bug where the caret would be placed at the top of the document if you inserted a table and undo:ed that operation. Patch contributed by Wesley Walser.
- Fixed bug where content css files where loaded twice into the iframe.
- Fixed so elements with comments would be trated as non empty elements. Patch contributed by Arjan Scherpenisse.
-Version 3.4.8 (2012-02-02)
- Fixed bug in IE where selected text ending with space cannot be formatted then formatted again to get original text.
- Fixed bug in IE where images larger than editor area were being deselected when toolbar buttons are clicked.
- Fixed bug where wrong text align buttons are active when multiple block elements are selected.
- Fixed bug where selected link not showing in target field of link dialog in some selection cases.
- Use settings for remove_trailing_br so this can be turned off instead of hard coding the value.
- Fixed bug in IE where the media plugin displayed null text when some values aren't filled in.
- Added API method 'onSetAttrib' that fires when the attribute value on a node changes.
- Fix font size dropdown value not being updated when text already has a font size in the advanced template.
- Fixed bug in IE where IE doesn't use ARIA attributes properly on options - causing labels to be read out 2 times.
- Fixed bug where caret cannot be placed after table if table is at end of document in IE.
- Fixed bug where adding range isn't always successful so we need to check range count otherwise an exception can occur.
- Added spacebar onclick handler to toolbar buttons to ensure that the accessibility behaviour works correctly.
- Fixed bug where a stranded bullet point would get created in WebKit.
- Fixed bug where selecting text in a blockquote and pressing backspace toggles the style.
- Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property.
- Fix white space in between spans from being deleted.
- Fixed bug where scrollbars where visible in the character map dialog on Gecko.
- Fixed issue with missing translation for one of the emoticons.
- Fixed bug where dots in id:s where causing problems. Patch provided by Abhishek Dev.
- Fixed bug where urls with an at sign in the path wouldn't be parsed correctly. Patch contributed by Jason Grout.
- Fixed bug where Opera would remove the first character of a inline formatted word if you pressed backspace.
- Fixed bugs with the autoresize plugin on various browsers and removed the need for the throbber.
- Fixed performance issue where the contextmenu plugin would try to remove the menu even if it was removed. Patch contributed by mhu.
-Version 3.4.7 (2011-11-03)
- Modified the caret formatting behavior to word similar to common desktop wordprocessors like Word or Libre Office.
- Fixed bug in Webkit - Cursor positioning does not work vertically within a table cell with multiple lines of text.
- Fixed bug in IE where Inserting a table in IE8 places cursor in the second cell of the first row.
- Fixed bug in IE where editor in a frame doesn't give focus to the toolbar using ALT-F10.
- Fix for webkit and gecko so that deleting bullet from start of list outdents inner list items and moves first item into paragraph.
- Fix new list items in IE8 not displayed on a new line when list contains nested list items.
- Clear formatting in table cell breaks the cell.
- Made media type list localisable.
- Fix out of memory error when using prototype in media dialog.
- Fixed bug where could not add a space in the middle of a th cell.
- Fixed bug where adding a bullet between two existing bullets adds an extra one
- Fixed bug where trying to insert a new entry midway through a bulleted list fails dismally when the next entry is tabbed in.
- Fixed bug where pressing enter on an empty list item does not outdent properly in FF
- Fixed bug where adding a heading after a list item in a table cell changes all styles in that cell
- Fixed bug where hitting enter to exit from a bullet list moves cursor to the top of the page in Firefox.
- Fixed bug where pressing backspace would not delete HRs in Firefox and IE when next to an empty paragraph.
- Fixed bug where deleting part of the link text can cause a link with no destination to be saved.
- Fixed bug where css style border widths wasn't handled correctly in table dialog.
- Fixed bug where parsing invalid html contents on IE or WebKit could produce an infinite loop.
- Fixed bug where scripts with custom script types wasn't properly passed though the editor.
- Fixed issue where some Japanese kanji characters wasn't properly entity encoded when numeric entity mode was enabled.
- Made emoticons dialog use the keyboard naviation.
- Added navigation instructions to the symbols dialog.
- Added ability to set default values for the media plugin.
- Added new font_size_legacy_values option for converting old font element sizes to span with font-size properties.
- Fixed bug where the symbols dialog was not accessible.
- Added quirk for IE ensuring that the body of the document containing tinyMCE has a role="application" for accessibility.
- Fixed bug where the advanced color picker wasn't working properly on FF 7.
- Fixed issue where the advanced color picker was producing uppercase hex codes.
- Fixed bug where IE 8 could throw exceptions if the contents contained resizable content elements.
- Fixed bug where caret formatting wouldn't be correctly applied to previous sibling on WebKit.
- Fixed bug where the select boxes for font size/family would loose it's value on WebKit due to recent iOS fixes.
-Version 3.4.6 (2011-09-29)
- Fixed bug where list items were being created for empty divs.
- Added support in Media plugin for audio media using the embed tag
- Fixed accessibility bugs in WebKit and IE8 where toolbar items were not being read.
- Added new use_accessible_selects option to ensure accessible list boxes are used in all browsers (custom widget in firefox native on other browsers)
- Fixed bug where classid attribute was not being checked from embed objects.
- Fixed bug in jsrobot tests with intermittently failing.
- Fixed bug where anchors wasn't updated properly if you edited them using IE 8.
- Fixed bug where input method on WebKit on Mac OS X would fail to initialize when sometimes focusing the editor.
- Fixed bug where it wasn't possible to select HR elements on WebKit by simply clicking on them.
- Fixed bug where the media plugin wouldn't work on IE9 when not using the inlinepopups plugin.
- Fixed bug where hspace,vspace,align and bgcolor would be removed from object elements in the media plugin.
- Fixed bug where the new youtube format wouldn't be properly parsed by the media plugin.
- Fixed bug where the style attribute of layers wasn't properly updated on IE and Gecko.
- Fixed bug where editing contents in a layer would fail on Gecko since contentEditable doesn't inherit properly.
- Fixed bug where IE 6/7 would produce JS errors when serializing contents containing layers.
-Version 3.4.5 (2011-09-06)
- Fixed accessibility bug in WebKit where the right and left arrow keys would update native list boxes.
- Added new whitespace_elements option to enable users to specify specific elements where the whitespace is preserved.
- Added new merge_siblings option to formats. This option makes it possible to disable the auto merging of siblings when applying formats.
- Fixed bug in IE where trailing comma in paste plugin would cause plugin to not run correctly.
- Fixed bug in WebKit where console messages would be logged when deleting an empty document.
- Fixed bug in IE8 where caret positioned is on list item instead of paragraph when outdent splits the list
- Fixed bug with image dialogs not inserting an image if id was omitted from valid_elements.
- Fixed bug where the selection normalization logic wouldn't properly handle image elements in specific config cases.
- Fixed bug where the map elements coords attribute would be messed up by IE when serializing the DOM.
- Fixed bug where IE wouldn't properly handle custom elements when the contents was serialized.
- Fixed bug where you couldn't move the caret in Gecko if you focused the editor using the API or a UI control.
- Fixed bug where adjacent links would get merged on IE due to bugs in their link command.
- Fixed bug where the color split buttons would loose the selection on IE if the editor was placed in a frame/iframe.
- Fixed bug where floated images in WebKit wouldn't get properly linked.
- Fixed bug where the fullscreen mode in a separate window wasn't forced into IE9+ standards mode.
- Fixed bug where pressing enter in an empty editor on WebKit could produce DIV elements instead of P.
- Fixed bug where spans would get removed incorrectly when merging two blocks on backspace/delete on WebKit.
- Fixed bug where the editor contents wouldn't be completely removed on backspace/delete on WebKit.
- Fixed bug where the fullpage plugin wouldn't properly render style elements in the head on IE 6/7.
- Fixed bug where the nonbreaking_force_tab option in the nonbreaking plugin wouldn't work on Gecko/WebKit.
- Fixed bug where the isDirty state would become true on non IE browsers if there was an table at the end of the contents.
- Fixed bug where entities wasn't properly encoded on WebKit when pasting text as plain text.
- Fixed bug where empty editors would produce an exception of valid_elements didn't include body and forced_root_blocks where disabled.
- Fixed bug where the fullscreen mode wouldn't retain the header/footer in the fullpage plugin.
- Fixed issue where the plaintext_mode and plaintext_mode_sticky language keys where swapped.
-Version 3.4.4 (2011-08-04)
- Added new html5 audio support. Patch contributed by Ronald M. Clifford.
- Added mute option for video elements and preload options for video/audio patch contributed by Dmitry Kalinkin.
- Fixed selection to match visual selection before applying formatting changes.
- Fixed browser specific bugs in lists for WebKit and IE.
- Fixed bug where IE would scroll the window if you closed an inline dialog that was larger than the viewport. Patch by Laurence Keijmel.
- Fixed bug where pasting contents near a span element could remove parts of that span. Patch contributed by Wesley Walser.
- Fixed bug where formatting change would be lost after pressing enter.
- Fixed bug in WebKit where deleting across blocks would add extra styles.
- Fixed bug where moving cursor vertically in tables in WebKit wasn't working.
- Fixed bug in IE where deleting would cause error in console.
- Fixed bug where the formatter was not applying formats across list elements.
- Fixed bug where the wordcount plugin would try and update the wordcount if tinymce had been destroyed.
- Fixed bug where tabfocus plugin would attempt to focus elements not displayed when their parent element was hidden.
- Fixed bug where the contentEditable state would sometimes be removed if you deleted contents in Gecko.
- Fixed bug where inserting contents using mceInsertContent would fail if "span" was disabled in valid_elements.
- Fixed bug where initialization might fail if some resource on gecko wouldn't load properly and fire the onload event.
- Fixed bug where ctrl+7/8/9 keys wouldn't properly add the specific formats associated with them.
- Fixed bug where the HTML tags wasn't properly closed in the style plugins properties dialog.
- Fixed bug where the list plugin would produce an exception if the user tried to delete an element at the very first location.
-Version 3.4.3.2 (2011-06-30)
- Fixed bug where deleting all of a paragraph inside a table cell would behave badly in webkit.
- Fixed bugs in tests in firefox5 and WebKit.
- Fixed bug where selection of table cells would produce an exception on Gecko.
- Fixed bug where the caret wasn't properly rendered on Gecko when the editor was hidden.
- Fixed bug where pasting plain text into WebKit would produce a pre element it will now produce more semantic markup.
- Fixed bug where selecting list type formats using the advlist plugin on IE8 would loose editor selection.
- Fixed bug where forced root blocks logic wouldn't properly pad elements created if they contained data attributes.
- Fixed bug where it would remove all contents of the editor if you inserted an image when not having a caret in the document.
- Fixed bug where the YUI compressor wouldn't properly encode strings with only a quote in them.
- Fixed bug where WebKit on iOS5 wouldn't call nodeChanged when the selection was changed.
- Fixed bug where mceFocus command wouldn't work properly on Gecko since it didn't focus the body element.
- Fixed performance issue with the noneditable plugin where it would enable/disable controls to often.
-Version 3.4.3.1 (2011-06-16)
- Fixed bug where listboxes were not being handled correctly by JAWS in firefox with the o2k7 skin.
- Fixed bug where custom buttons were not being rendered correctly when in high contrast mode.
- Added support for iOS 5 that now supporting contentEditable in it's latest beta.
- Fixed bug where urls in style attributes with a _ character followed by a number would cause incorrect output.
- Fixed bug where custom_elements option wasn't working properly on IE browsers.
- Fixed bug where custom_elements marked as block elements wouldn't get correctly treated as block elements.
- Fixed bug where attributes with </> wasn't properly encoded as XML entities.
-Version 3.4.3 (2011-06-09)
- Fixed bug where deleting backwards before an image into a list would put the cursor in the wrong location.
- Fixed bug where styles plugin would not apply styles across multiple selected block elements correctly.
- Fixed bug where cursor would jump to start of document when selection contained empty table cells in IE8.
- Fixed bug where applied styles wouldn't be kept if you pressed enter twice to produce two paragraphs.
- Fixed bug where a ghost like caret would appear on Gecko when pressing enter while having a text color applied.
- Fixed bug where IE would produce absolute urls if you inserted a image/link and reloaded the page.
- Fixed bug where applying a heading style to a list item would cascade style to children list items.
- Fixed bug where Editor loses focus when backspacing and changing styles in WebKit.
- Fixed bug where exception was thrown in tinymce.util.URI when parsing a relative URI and no base_uri setting was provided.
- Fixed bug where alt-f10 was not always giving focus to the toolbar on Safari.
- Added new 'allow_html_in_named_anchor' option to allow html to occur within a named anchor tag. Use at own risk.
- Added plugin dependency support. Will autoload plugins specified as a dependency if they haven't been loaded.
- Fixed bug where the autolink plugin didn't work with non-English keyboards when pressing ).
- Added possibility to change properties of all table cells in a column.
- Added external_image_list option to get images list from user-defined variable or function.
- Fixed bug where the autoresize plugin wouldn't reduce the editors height on Chrome.
- Fixed bug where table size inputs were to small for values with size units.
- Fixed bug where table cell/row size input values were not validated.
- Fixed bug where menu item line-height would be set to wrong value by external styles.
- Fixed bug where hasUndo() would return wrong answer.
- Fixed bug where page title would be set to undefined by fullpage plugin.
- Fixed bug where HTML5 video properties were not updated in embedded media settings.
- Fixed bug where HTML comment on the first line would cause an error.
- Fixed bug where spellchecker menu was positioned incorrectly on IE.
- Fixed bug where breaking out of list elements on WebKit would produce a DIV instead of P after the list.
- Fixed bug where pasting from Word in IE9 would add extra BR elements when text was word wrapped.
- Fixed bug where numeric entities with leading zeros would produce incorrect decoding.
- Fixed bug where hexadecimal entities wasn't properly decoded.
- Fixed bug where bookmarks wasn't properly stored/restored on undo/redo.
- Fixed bug where the mceInsertCommand didn't retain the values of links if they contained non url contents.
- Fixed bug where the valid_styles option wouldn't be properly used on styles for specific elements.
- Fixed so contentEditable is used for the body of the editor if it's supported.
- Fixed so trailing BR elements gets removed even when forced_root_blocks option was set to false/null.
- Fixed performance issue with mceInsertCommand and inserting very simple contents.
- Fixed performance issue with older IE version and huge documents by optimizing the forced root blocks logic.
- Fixed performance issue with table plugin where it checked for selected cells to often.
- Fixed bug where creating a link on centered/floated image would produce an error on WebKit browsers.
- Fixed bug where Gecko would remove single paragraphs if there where contents before/after it.
- Fixed bug where the scrollbar would move up/down when pasting contents using the paste plugin.
-Version 3.4.2 (2011-04-07)
- Added new 'paste_text_sticky_default' option to paste plugin, enables you to set the default state for paste as plain text.
- Added new autoresize_bottom_margin option to autoresize plugin that enables you to add an extra margin at the bottom. Patch contributed by Andrew Ozz.
- Rewritten the fullpage plugin to handle style contents better and have a more normalized behavior across browsers.
- Fixed bug where contents inserted with mceInsertContent wasn't parsed using the default dom parser.
- Fixed bug where blocks containing a single anchor element would be treated as empty.
- Fixed bug where merging of table cells on IE 6, 7 wouldn't look correctly until the contents was refreshed.
- Fixed bug where context menu wouldn't work properly on Safari since it was passing out the ctrl key as pressed.
- Fixed bug where image border color/style values were overwritten by advimage plugin.
- Fixed bug where setting border in advimage plugin would throw error in IE.
- Fixed bug where empty anchors list in link settings wasn't hidden.
- Fixed bug where xhtmlextras popups were missing localized popup-size parameters.
- Fixed bug where the context menu wouldn't select images on WebKit browsers.
- Fixed bug where paste plugin wouldn't properly extract the contents on WebKit due to recent changes in browser behavior.
- Fixed bug where focus of the editor would get on control contents on IE lost due to a bug in the ColorSplitButton control.
- Fixed bug where contextmenu wasn't disabled on noneditable elements.
- Fixed bug where getStyle function would trigger error when called on element without style property.
- Fixed bug where editor fail to load if Javascript Compressor was used.
- Fixed bug where list-style-type=lower-greek would produce errors in IE<8.
- Fixed bug where spellchecker plugin would produce errors on IE6-7.
- Fixed bug where theme_advanced_containers configuration option causes error.
- Fixed bug where the mceReplaceContent command would produce an error since it didn't correctly handle a return value.
- Fixed bug where you couldn't enter float point values for em in dialog input fields since it wouldn't be considered a valid size.
- Fixed bug in xhtmlxtras plugin where it wasn't possible to remove some attributes in the attributes dialog.
-Version 3.4.1 (2011-03-24)
- Added significantly improved list handling via the new 'lists' plugin.
- Added 'autolink' plugin to enable automatically linking URLs. Similar to the behavior IE has by default.
- Added 'theme_advanced_show_current_color' setting to enable the forecolor and backcolor buttons to continuously show the current text color.
- Added 'contextmenu_never_use_native' setting to disable the ctrl-right-click showing the native browser context menu behaviour.
- Added 'paste_enable_default_filters' setting to enable the default paste filters to be disabled.
- Fixed bug where selection locations on undo/redo didn't work correctly on specific contents.
- Fixed bug where an exception would be trown on IE when loading TinyMCE inside an iframe.
- Fixed bug where some ascii numeric entities wasn't properly decoded.
- Fixed bug where some non western language codes wasn't properly decoded/encoded.
- Fixed bug where undo levels wasn't created when deleting contents on IE.
- Fixed bug where the initial undo levels bookmark wasn't updated correctly.
- Fixed bug where search/replace wouldn't be scoped to editor instances on IE8.
- Fixed bug where IE9 would produce two br elements after block elements when pasting.
- Fixed bug where IE would place the caret at an incorrect position after a paste operation.
- Fixed bug where a paste operation using the keyboard would add an extra undo level.
- Fixed bug where some attributes/elements wasn't correctly filtered when invalid contents was inserted.
- Fixed bug where the table plugin couldn't correctly handle invalid table structures.
- Fixed bug where charset and title of the page were handled incorrectly by the fullpage plugin.
- Fixed bug where toggle states on some of the list boxes didn't update correctly.
- Fixed bug where sub/sub wouldn't work correctly when done as a caret action in Chrome 10.
- Fixed bug where the constrain proportions checkbox wouldn't work in the media plugin.
- Fixed bug where block elements containing trailing br elements wouldn't treated properly if they where invalid.
- Fixed bug where the color picker dialog wouldn't be rendered correctly when using the o2k7 theme.
- Fixed bug where setting border=0 using advimage plugin invalid style attribute content was created in Chrome.
- Fixed bug with references to non-existing images in css of fullpage plugin.
- Fixed bug where item could be unselected in spellchecker's language selector.
- Fixed bug where some mispelled words could be not highlighted using spellchecker plugin.
- Fixed bug where spellchecking would merge some words on IE.
- Fixed bug where spellchecker context menu was not always positioned correctly.
- Fixed bug with empty anchors list in advlink popup when Invisible Elements feature was disabled.
- Fixed bug where older IE versions wouldn't properly handle some elements if they where placed at the top of editor contents.
- Fixed bug where selecting the whole table would enable table tools for cells and rows.
- Fixed bug where it wasn't possible to replace selected contents on IE when pasting using the paste plugin.
- Fixed bug where setting text color in fullpage plugin doesn't work.
- Fixed bug where the state of checkboxes in media plugin wouldn't be set correctly.
- Fixed bug where black spade suit character was not included in special character selector.
- Fixed bug where setting invalid values for table cell size would throw an error in IE.
- Fixed bug where spellchecking would remove whitespace characters from PRE block in IE.
- Fixed bug where HR was inserted inside P elements instead of splitting them.
- Fixed bug where extra, empty span tags were added when using a format with both selector and inline modes.
- Fixed bug where bullet lists weren't always detected correctly.
- Fixed bug where deleting some paragraphs on IE would cause an exception.
- Fixed bug where the json encoder logic wouldn't properly encode \ characters.
- Fixed bug where the onChange event would be fired when the editor was first initialized.
- Fixed bug where mceSelected wouldn't be removed properly from output even if it's an internal class.
- Fixed issue with table background colors not being transparent. This improves compliance with users browser color preferences.
- Fixed issue where styles were not included when using the full page plugin.
- Fixed issue where drag/drop operations wasn't properly added to the undo levels.
- Fixed issue where colors wasn't correctly applied to elements with underline decoration.
- Fixed issue where deleting some paragraphs on IE would cause an exception.
-Version 3.4 (2011-03-10)
- Added accessibility example with various accessibility options contributed by Ephox.
- Fixed bug where attributes wasn't properly handled in the xhtmlxtras plugin.
- Fixed bug where the image.htm had some strange td artifacts probably due to auto merging.
- Fixed bug where the ToolbarGroup had an missing reference to this in it's destroy method.
- Fixed bug with the resizeBy function in the advanced theme where it was scaled by the wrong parent.
- Fixed bug where an exception would be thrown by the element if the page was served in xhtml mode.
- Fixed bug where mceInsertContent would throw an exception when page was served in xhtml mode.
- Fixed bug where you couldn't select a forground/background color when page was served in xhtml mode.
- Fixed bug where the editor would scroll to the toolbar when clicked due to a call to focus in ListBox.
- Fixed bug where pages with rtl dir wouldn't render split buttons correctly when using the o2k7 theme.
- Fixed bug where anchor elements with names wasn't properly collapsed as they where in 3.3.x.
- Fixed bug where WebKit wouldn't properly handle image selection if it was done left to right.
- Fixed bug where the formatter would align images when the selection range was collapsed.
- Fixed bug where the image button would be active when the selection range was collapsed.
- Fixed bug where the element_format option wasn't used by the new (X)HTML serializer logic.
- Fixed bug where the table cell/row dialogs would produce empty attributes.
- Fixed bug where the tfoot wouldn't be added to the top of the table.
- Fixed bug where the formatter would merge siblings with white space between them.
- Fixed bug where pasting headers and paragraphs would produce an extra paragraph.
- Fixed bug where the ColorSplitButton would throw an exception if you clicked out side a color.
- Fixed bug where IE9 wouldn't properly produce new paragraphs on enter if the current paragraph had formatting.
- Fixed bug where multiple BR elements at end of block elements where removed.
- Fixed bug where fullscreen plugin wouldn't correctly display the edit area on IE6 for long pages.
- Fixed bug where paste plugin wouldn't properly encode raw entities when pasting in plain text mode.
- Fixed bug where the search/replace plugin wouldn't work correctly on IE 9.
- Fixed so the drop menus doesn't get an outline border visible when focused, patch contributed by Ephox.
- Fixed so the values entered in the color picker are forced to hex values.
- Removed dialog workaround for IE 9 beta since the RC is now out and people should upgrade.
- Removed obsolete calls in various plugins to the mceBeginUndoLevel command.
-Version 3.4b3 (2011-02-10)
- Added WAI-ARIA support for the main UI and dialogs this feature was contributed by Ephox.
- Added iframe support to media plugin in order to handle the new YouTube HTML5 video formats.
- Fixed bug where anchors would wrap the text contents after it due to a bug in the DomParser logic.
- Fixed bug where the selected state wouldn't be removed on ListBox controls when a menu item was selected.
- Fixed bug where IE could throw an unspecified error exception when the getBookmark logic was executed.
- Fixed bug where IE would throw an invalid argument error when focus was applied to an empty editor instance.
- Fixed bug where applying inline format wouldn't work if the start cell in the selection was empty.
- Fixed bug where auto detection logic for YouTube and Google Video wouldn't work in the new media plugin.
- Fixed bug where td elements would get a colspan/rowspan of 1 when created by the table plugin.
- Fixed bug where removal/padding of empty elements wasn't handled correctly.
- Fixed bug where internal elements would show up in element path.
- Fixed bug where internal elements would get serialized as valid output.
- Fixed bug where color wasn't correctly applied to anchor elements.
- Fixed bug where float option in the style plugin dialog wouldn't be handled correctly on WebKit.
- Fixed bug where the tinymce.dom.TreeWalker prev function wouldn't walk the DOM correctly.
- Fixed bug where mceInsertContent command could produce empty block elements after the inserted content.
- Fixed bug where mceInsertContent command wouldn't apply visual aids on tables and similar elements.
- Fixed bug where empty block elements would get double br bogus elements in them.
- Fixed bug where the color menu wouldn't apply the color correctly on IE when the viewport was to small.
- Fixed bug where right clicking out side the body element of the editor iframe would prevent paste from working on IE.
- Fixed bug where the onContextMenu event wouldn't fire correctly on IE if you clicked out side the body element.
- Fixed bug where the onContextMenu event wouldn't fire correctly on modern Opera versions that now support it by default.
- Fixed bug where legacy content wasn't converted correctly when inserted using mceInsertContent or through the source dialog.
- Fixed bug where resizing images or tables wouldn't update the style attribute correctly or leave data-mce prefixed attributes.
- Fixed bug where adding links wouldn't work correctly when using TinyMCE jQuery version with jQuery 1.5.
- Fixed bug where single quotes inside param elements wasn't treated correctly by the media plugin.
- Fixed bug where pasting plain text in WebKit wouldn't work correctly. It will now auto detect the WebKit bug and use plain text mode.
- Fixed bug where the DomParser would fail to move out invalid elements within invalid elements on complex contents.
- Fixed bug where paste as plain text would not decode html entities properly.
- Fixed bug where large paragraphs would cause incorrect scrolling behavior if you would split them using enter.
- Fixed bug where the SaxParser wouldn't properly parse some specific short ended elements.
- Fixed so mceReplaceContent supports caret position and makes sure that the contents inserted gets validated.
- Fixed so unnecessary traling br elements in blocks gets removed on Gecko/WebKit when using mceInsertContent command.
- Moved some plugin css contents into the skin content css files to reduce the number of http requests.
- Moved some plugin specific images into the theme img directory since they can then be shared.
-Version 3.4b2 (2011-01-13)
- Added new custom flash player, this player supports mp4 and flv and has skin support.
- Fixed so mceInsertContent handles context correctly to enforce valid nesting of elements.
- Fixed bug where scrolling would become jerky on IE on some contents.
- Fixed bug where paste as plain text would throw exception of missing entities setting.
- Fixed bug where anchor nodes where removed by the new serializer engine.
- Fixed bug where IE would crash if when backspace where used on some specific contents.
- Fixed bug where pasting of plain text in WebKit would result in merging of text lines.
- Fixed bug where it wasn't possible to delete images or tables using backspace on IE9.
- Fixed bug where urls in styles would generate a JS error due to incorrect scope.
- Fixed bug where copy paste from Java applications would produce extra contents in FF on Mac.
- Fixed bug where the verify_html option wouldn't allow all elements and attributes.
-Version 3.4b1 (2010-12-20)
- Added new serialization engine that increases performance and enforces valid output according to the specified schema settings.
- Added new HTML parser logic used by the serialization engine and can handle malformed html contents.
- Added new valid_children config option, enables more fine grain control of elements can be inside other elements.
- Added new entities encoding logic boost performance and will only encode entities based on context i.e. attributes/text nodes.
- Added new protect setting that enables users to protect template items from being removed by the serializer logic.
- Added new {$caret} marker for the mceInsertContent command. Makes it possible to move the caret to a specific position when inserting contents.
- Added new validation of anchor names. Only valid W3C names will be accepted.
- Replaced the internal _mce_ prefixed attributes to the more standard HTML5 data-mce- prefix. This will also resolve future browser santiaztion issues.
- Fixed bug where the paste plugin wouldn't convert Word lists with more than 9 items to real ol lists. Patch contributed by Mike (yogaboy).
- Fixed bug where clicking on a format title would produce errors if the current selection didn't have any formats.
- Fixed bug where paste of simple texts wouldn't work correctly in Gecko using the paste plugin since it keeps block formatting.
- Fixed bug where confirm dialogs didn't display correctly due to resent IE9 fixes.
- Fixed bug where spaces in URLs wouldn't be properly encoded to %20 if the user entered them in the link dialogs. Patch contributed by Ephox.
- Fixed bug where the image alignment buttons wouldn't reposition the resize handles on FF due to a browser issue. Patch contributed by Ephox.
- Fixed bug where the compareBoundaryPoints method of the IE Range class didn't work correctly. Patch contributed by Ephox.
- Fixed bug where selection of elements using double click wouldn't select the clicked element but rather the parent node on FF. Patch contributed by Ephox.
- Fixed bug where IE would scroll the user to the current selection causing parent document to scroll as well. Patch contributed by Ephox.
- Fixed bug where style compression would incorrectly compress items with different values. It now only compresses if the values are the same. Patch contributed by Ephox.
- Fixed bug where FF would add non breaking spaces outside TD elements if formatting was applied to table cells. Patch contributed by Ephox.
- Fixed bug where the caret position would be lost on WebKit browsers if you pasted images multiple times. Patch contributed by Ephox.
- Fixed bug where non word contents like * would be counted as words in the wordcount pluging. Patch contributed by David Balatero.
- Fixed bug where the toggle absolute button in the layer plugin wouldn't remove the existing internal style attribute first.
- Fixed bug where the autosave plugin would generate an exception on IE if the user had disabled userdata persistence.
- Fixed bug where the paste plugin would remove dashed classes on IE since the regexps didn't include that character.
- Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
- Fixed bug where applying block formats to empty elements wouldn't render correctly on IE.
- Fixed bug where the searchreplace plugin would add a f or r character when shortcuts where used on IE while using default dialogs.
- Fixed bug where Opera wouldn't load scripts correctly since the onreadystate would fire even though the script wasn't loaded.
- Fixed issue where &nbsp; wouldn't be handled correctly in the bbcode plugin if entity_encoding was set to raw.
- Fixed issue where contents would flicker since the content css files where asynchronously loaded.
- Fixed bug where WebKit wouldn't create links on images with a float style.
-Version 3.3.9.3 (2010-12-20)
- Fixed issue where WebKit wouldn't correctly apply ins/del in xhtmlxtras plugin.
- Fixed bug where paste as plaintext on WebKit wouldn't produce br and p elements correctly.
- Fixed bug where the confirm dialog texts would be incorrectly placed due to recent IE 9 workarounds in the window.css.
- Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
-Version 3.3.9.2 (2010-09-29)
- Fixed bug where placing the caret in IE 9 beta 1 would not work correctly if you clicked out side the document body element.
- Fixed bug where IE 9 beta 1 wouldn't resize the editor correctly since the events didn't fire as previous versions did.
- Fixed bug where FF would produce an error message when being rendered inside a hidden div element.
- Fixed bug where resize logic could produce a cookie with a width/height less than the size of the container.
- Fixed bug where content_css wouldn't populate the styles dropdown correctly.
-Version 3.3.9.1 (2010-09-23)
- Fixed bug where WebKit browsers wouldn't activate the image button when images where selected.
- Fixed bug where Opera Presto 10.60 deletes elements when restoring bookmarks.
- Fixed bug where IE9 beta1 doesn't handle regexp replacement values correctly.
- Fixed bug where IE9 beta1 didn't render the inline dialogs correctly due to a bug with CSS clip.
- Fixed bug where IE9 beta1 would produce error messages on load since they removed the document.recalc method.
- Fixed bug where IE9 beta1 would produce <html xmlns=""> since they haven't implemented document.implementation.createDocument correctly.
- Fixed bug where IE9 beta1 would searchreplace doesn't work since their native DOM Range doesn't have a find method.
- Fixed bug where IE9 beta1 would render the source view incorrectly due to incorrect viewport size measurements.
- Fixed bug where IE9 beta1 would crash when running the basic functionality unit tests.
- Fixed bug where IE9 beta1 would wrap elements in blocks correctly due to changes to the selection object.
- Fixed bug where IE9 beta1 would fail to insert contents since they havn't implemented the createContextualFragment method in their DOM Range.
- Fixed bug where IE9 beta1 would fail to handle image selection since they currently doesn't support control selections in their DOM Range.
- Fixed bug where IE9 beta1 would fail to load scripts since they fire the onload event before the scripts are parsed and executed.
-Version 3.3.9 (2010-09-08)
- Fixed bug where inserting table rows into a table with subtable would produce an incorrect column count.
- Fixed bug where the selection of cells in a table with subtables could produce invalid selections.
- Fixed bug where the table plugin would produce a script error if you tried to move the caret before a first child table.
- Fixed bug where the keep_styles feature on IE would move the caret to an incorrect location at the end of list blocks.
- Fixed so attributes from legacy elements such as font gets retained when they get converted to spans.
- Fixed minor issue where the select boxes wouldn't be set the not set by default in the table dialog.
-Version 3.3.8 (2010-06-30)
- On IE8+ and FireFox 3.5+, dragging an image now correctly adds an undo
- event.
- Fixed bug where WebKit would not move the caret to a correct position after a paste operation.
- Fixed bug where WebKit would produce a div wrapper element when pasting some contents.
- Fixed bug where the visual chars and nonbreaking plugin wouldn't show nbsp elements correctly.
- Fixed bug where the format states would be enabled even after the format was removed.
- Fixed bug where the delete key would move the caret to an incorrect position.
- Fixed bug where it wasn't possible to toggle of the current font size/family/style by clicking the title item.
- Fixed bug where the abbr element wouldn't get serialized correctly on IE6.
- Fixed so that the examples checks if they are executed from the local file system since that might not work properly.
-Version 3.3.7 (2010-06-10)
- Fixed bug where context menu would produce an error on IE if you right clicked twice and left clicked once.
- Fixed bug where resizing of the window on WebKit browsers in fullscreen mode wouldn't position the statusbar correctly.
- Fixed bug where IE would produce an error if the editor was empty and you where undoing to that initial level.
- Fixed bug where setting the table background on gecko would produce \" entities inside the url style property.
- Fixed bug where the button states wouldn't be updated correctly on IE if you placed the caret inside the new element.
- Fixed bug where undo levels wasn't properly added after applying styles or font sizes.
- Fixed bug where IE would throw an error if you used "select all" on empty elements and applied formatting to that.
- Fixed bug where IE could select one extra character when you did a bookmark call on a caret location.
- Fixed bug where IE could produce a script error on delete since it would sometimes produce an invalid DOM.
- Fixed bug where IE would return the wrong start element if the whole element was selected.
- Fixed bug where formatting states wasn't updated on IE if you pressed enter at the end of a block with formatting.
- Fixed bug where submenus for the context menu wasn't removed correctly when the editor was destroyed.
- Fixed bug where Gecko could select the wrong element after applying format to multiple elements.
- Fixed bug where Gecko would delete parts of the previous element if the selection range was a element selection.
- Fixed bug where Gecko would not merge paragraph elements correctly if they contained br elements.
- Fixed bug where the cleanup button could produce span artifacts if you pressed it twice in a row.
- Fixed bug where the fullpage plugin header/footer would be have it's header reseted to it's initial state on undo.
- Fixed bug where an empty paragraph would be collapsed if you performed a cleanup while having the caret inside it.
- Fixed a few memory leaks on IE especially with drop menus in listboxes and the spellchecker.
- Fixed so formats applied to the current caret gets merged to reduce the number of output elements.
- Added the latest version of Sizzle for the CSS selector logic to fix a compatibility issue with prototype.
-Version 3.3.6 (2010-05-20)
- Fixed bug where a editor.focus call could produce errors on IE in very specific scenarios.
- Fixed bug where Gecko would produce an error if you unformatted text inside an empty element.
- Fixed bug where IE would produce an error if the caret was placed before a table and you used the align buttons.
- Fixed bug where the font size drop down didn't display the a preview correctly.
- Fixed bug where the paste plugin wouldn't include all contents some times on WebKit browsers.
- Fixed bug where the plain text mode toggle wouldn't work properly on WebKit.
- Fixed bug where the editors statusbar would become invisible when you resized the window in fullscreen mode.
-Version 3.3.5.1 (2010-05-07)
- Fixed a critical bug with the fullscreen plugin. Produced error messages when the state was toggled on/off.
-Version 3.3.5 (2010-05-06)
- Added new merge_with_parents option to formats, enables the control of removal of elements with similar parents.
- Fixed so the default behavior for applying classes isn't a toggle state but the old behavior from before the 3.3 release.
- Fixed bug where selecting contents using double click on Gecko would produce errors when using removing format.
- Fixed bug where the IE DOM could get messed up when non valid contents was pasted into the editor.
- Fixed bug where merging selected table cells using the context menu didn't work as expected.
- Fixed bug where some nestled formatting would be applied incorrectly.
- Fixed bug with enter in list items when using the force_br_newlines mode on WebKit patch contributed by Ryan Koopmans.
- Fixed bug where undo/redo could produce js errors on some specific operations.
- Fixed bug where the theme_advanced_font_sizes didn't work as before 3.3 when complex settings where used.
- Fixed bug where the table plugin would copy cell/row id attributes when making new rows/cells.
-Version 3.3.4 (2010-04-27)
- Fixed bug where fullscreen plugin would add two editor instances to EditorManager collection.
- Fixed bug where it was difficult to enter text on non western languages such as Japanese on IE.
- Fixed bug where removing contents from nodes could result in an exception when using undo/redo.
- Fixed bug with selection of images inside layers or other resizable containers on IE.
- Fixed so editors isn't initialized on iPhone/iPad devices since they don't have caret support.
-Version 3.3.3 (2010-04-19)
- Added new script_loaded callback function setting for the jQuery plugin.
- Added various fixes and new rpc methods for the spellchecker plugin. Patch contributed by Michael Peters.
- Removed some unnecessary inline style information from some of the dialogs.
- Fixed some issues with the chaining for the TinyMCE jQuery plugin.
- Fixed so any extra arguments passed to patched jQuery functions gets passed through. Patch contributed by Lee Henson.
- Fixed so spellchecking/contextmenu can be toggled on/off if the browser has native spellchecker support.
- Fixed bug where some texts in the new paste plugin wasn't placed in language pack.
- Fixed bug where IE would produce an incorrect information message when cutting.
- Fixed bug where removing items using the xhtmlxtras plugin wouldn't work correctly.
- Fixed bug where setting table background images would add extra quotes on Gecko.
- Fixed bug where shortcut for bold/italic/underline wouldn't work properly on WebKit.
- Fixed bug where IE would produce an error message if only contents was an image tag and bold was used.
- Fixed bug where the caret would move if alignment was applied to empty block elements.
- Fixed bug where some shortcut key commands wouldn't apply formatting correctly.
-Version 3.3.2 (2010-03-25)
- Fixed bug where it was possible to scale the editor iframe smaller than the editor UI.
- Fixed bug where some of the resizing option didn't work with the new live resize.
- Fixed bug where the format listbox didn't show nestled formats correctly.
- Fixed bug where the native listboxes didn't work correctly.
- Fixed bug where font size selection in using the legacyoutput plugin would produce errors.
- Fixed so block and blockquote formats remove their matching element regardless of it's attributes.
-Version 3.3.1 (2010-03-18)
- Added new live resize feature, the editor contents is now visible while resizing.
- Fixed bug where some valid_element patterns would produce an unknown property error.
- Fixed bug where it wasn't possible to toggle off blockquotes.
- Fixed bug where an undo level wasn't produced when applying formatting using the styles dropdown.
- Fixed bug where IE 6/7 wouldn't perform caret formatting due to a focus/event bug in IE.
- Fixed bug where undo/redo wasn't restoring the previous selection correctly.
- Fixed bug where the caret would become invisible if you resized the editor in latest Gecko.
- Fixed bug where the class attribute wasn't completely removed in IE 6/7 when the removeClass function was used.
- Fixed so the matchNode method of the Formatter class returns the matched format rule.
- Fixed so it's possible to apply formatting to both blocks and as inline elements.
-Version 3.3 (2010-03-10)
- Fixed bug where backspace on a table on IE would produce an empty tbody and some JS exceptions.
- Fixed bug where some redundant children wasn't removed properly when applying inline styles to them.
- Fixed bug where Chrome would produce incorect dialog sizes if the inlinepopups plugin wasn't used.
- Fixed bug where spans with different classes would get merged if they where siblings to each other.
- Fixed bug where IE 8 would crash if you used the spellchecker.
- Fixed bug where Input Method for non western languages didn't work correctly.
- Fixed bug where the UI would render incorrectly in FF 3.6 on Mac due to a bug n their rendering engine.
- Fixed bug where WebKit wouldn't scroll down correctly if Shift+Enter was used. Patch contributed by Thomas Andersen.
-Version 3.3rc1 (2010-02-23)
- Fixed bug with new legacyoutput plugin not working correctly on it's own.
- Fixed bug some performance issues with removing text formats.
- Fixed bug where TinyMCE specific attributes wasn't removed properly by remove format.
- Fixed bug where it wasn't possible to align images within inline elements.
- Fixed bug where Ctrl+Delete/Backspace would produce an invalid argument exception on IE.
- Fixed bug where the search/replace logic could produce an infinite loop on IE for reverse searches.
- Fixed bug where cloning formats in cells didn't work properly on IE.
- Fixed bug where IE6 would produce a horizontal scroll bar.
- Fixed so remove jQuery method removes the TinyMCE instance as well as the specified textarea.
- Fixed so selected rows and cells gets updated using the row/cell properties dialogs.
-Version 3.3b2 (2010-02-04)
- Fixed bug where sometimes img elements would be removed by split method in DOMUtils.
- Fixed bug where merging of span elements could occur on bookmark nodes.
- Fixed bug where classes wasn't properly removed when removeformat was used on IE 6.
- Fixed bug where multiple calls to an tinyMCE.init with mode set to exact could produce the same unique ID.
- Fixed bug with the IE selection implementation when it was feeded an document range.
- Fixed bug where block elements formatting wasn't properly removed by removeformat on all browsers.
- Fixed bug where selection location was lost if you performed a manual cleanup.
- Fixed bug where removeformat wouldn't remove span elements within styled block elements.
- Fixed bug where an error would be thrown if you clicked on the separator lines in menus.
- Fixed bug with the jQuery plugin adding always adding a querystring value to other resources.
- Fixed bug where IE would produce an error message if you had an empty editor instance.
- Fixed bug where Shift+Enter didn't produce br elements on WebKit browsers.
- Fixed bug where a temporary marker element wasn't removed by the paste plugin.
- Fixed bug where inserting a table would produce two undo levels instead of one.
-Version 3.3b1 (2010-01-25)
- Added new text formatting engine. Fixes a lot of browser quirks and adds new possibilities.
- Added new advlist plugin that enables you to set the formats of list elements.
- Added new paste plugin logic that enables you to retain style information from Office.
- Added new autosave plugin logic that automatically saves contents in local storage.
- Added new valid_styles option. Adds the possibility to restrict styles and their order.
- Added new theme_advanced_runtime_fontsize option to display the runtime font size in font size select box.
- Added new jquery plugin version that handles the gzip compressor amongst other things. Contributed by Speednet.
- Added new $ function to tinymce namespace and editor instances for the jQuery build.
- Added the possibility to get editors by index as well as name in the tinyMCE.editors collection.
- Fixed so the contents inside the editor renders in standards mode by default.
- Fixed bug where it wasn't possible to move the caret on short documents running in standards mode on IE.
- Fixed bug where the decode method of the DOMUtils class could end up in an endless loop.
- Fixed bug where it was possible to bypass the paste cleanup on non IE browsers if you clicked while pasting.
- Fixed bug where some attributes wasn't serialized correctly on IE if wildcard attribute patters where used.
- Fixed bug where entity decoding was performed on strings that didn't have any valid entities in them.
- Fixed bugs with the insertNode method of the IE DOMRange implementation. Patch contributed by Scott McNaught.
- Rewrote the getBookmark/moveToBookmark selection logic to boost performance on larger documents.
- Rewrote the table plugin to include new cell selection logic and fixed various bugs and issues.
- Merged the tinyMCE, tinymce and tinymce.EditorManager into the same instance makes more sense.
- Removed browser setting since the browser support for TinyMCE is not far better than it was when that setting was introduced.
- Changed the mce_ attribute prefix to the more standard _mce_ prefix. This is similar to browser vendors prefixes.
- Optimized performance with named entities on Gecko. Regexp replace was executing very slowly probably due to a Gecko bug.
- Optimized performance of the IE specific selection/range implementation.
- Removed the safari plugin since we now replaced all text formatting logic to custom code.
-Version 3.2.7 (2009-09-22)
- Fixed bug where uppercase paragraphs could still produce an invalid DOM tree on IE.
- Fixed bug where split command didn't work on WebKit since the node serializer needs a real document to work with.
- Fixed bug where it was impossible in Gecko to place the caret before a table if it was the first one.
- Fixed bug where linking to urls like ../../ would produce an extra traling slash ../..//.
- Fixed bug where the template cdate functionality was using an old 2.x API call. Patch contributed by vectorjohn.
- Fixed bug where urls to the same site but different protocol would be converted when relative_urls where set to false. Patch contributed by Ted Rust.
- Fixed bug where the paste plugin would remove mceItem prefixed classes.
- Fixed bug where the paste plugin would sometimes add items in a reverse order on WebKit.
- Fixed bug where the paste buttons would present an error message on Gecko even if you changed user.js. Patch contributed by Todd (teeaykay).
- Fixed bug where Opera would crash if you had tables incorrectly placed inside paragraphs.
- Fixed bug where styles elements wasn't properly processed if you had bad input HTML.
- Fixed bug where style attributes wasn't properly forced into a specific format.
- Fixed bug and issues with boolean attributes like checked, nowrap etc.
- Fixed bug where input elements could override attributes on form elements.
- Fixed bug where script or style elements could get modified by the DOMUtils processHTML method.
- Fixed bug where the selected attribute could get lost when force root blocks logic got executed on IE. Patch contributed by Attila Mezei-Horvati.
- Fixed bug where getAttribs method didn't handle boolean attributes correctly on IE.
- Fixed so the paste from word dialog is presented if you paste content on an IE with to restrictive security settings.
- Fixed so the paste_strip_class_attributes option is set to none by default in the paste plugin.
- Removed default border=0 on tables for the default value of valid_elements.
-Version 3.2.6 (2009-08-19)
- Added new wordcount plugin, this will display the number of typed words as you write. Contributed by Andrew Ozz.
- Added new getNext and getPrev methods to DOM utils. These will return the first matching sibling.
- Fixed bug where it was impossible to place the caret after a table on Gecko. It will now add a paragraph after tables.
- Fixed bug where inline dialogs would fail if used in a window opened using a showModalDialog. Patch contributed by Derek Britt.
- Fixed bug where IE could sometimes render a unknown runtime error on invalid input HTML.
- Fixed bug where some incorrectly placed tables wouldn't be moved outside the paragraphs on IE.
- Fixed bug where uppercase script/style element wouldn't be handled correctly and converted to valid lowercase.
- Fixed bug where some WebKit versions on Mac OS X would produce issues with hidden select fields.
- Fixed bug where the media plugin would fail on WebKit since the node wasn't properly imported to the right document.
- Fixed bug where absolute URLs for the TinyMCE script using a base href element would cause loading problems in IE 6/7.
- Fixed bug where pasting using the paste plugin wasn't possible on IE with to restrictive security settings.
- Fixed bug where pasting of whitespace was impossible using the new custom paste method.
- Fixed bug where pasting on some WebKit browsers would not work if you pasted specific contents due to a WebKit bug.
- Fixed bug where doctypes with multiple lines would not be parsed correctly by the fullpage plugin. Patch contributed by Colin.
- Fixed bug where the autoresize plugin would break the fullscreen functionality.
- Fixed bug where tables would be chopped up running on IE using invalid contents and pasting paragraphs into a cell.
- Fixed bug where the each method of jQuery build didn't iterate styleSheets. We now use the TinyMCE API one instead.
- Fixed bug where auto switching to paragraphs after headers some times failed in Gecko.
- Fixed so all editor options gets passed to the Serializer class. Patch contributed by Jasper Mattsson.
- Fixed so script/style blocks isn't wrapped in paragraphs as other inline elements.
- Fixed so the XHR requests sends the X-Requested-With HTTP header.
- Fixed so the data url scheme is handled in the tinymce.util.URI class.
- Changed inline documentation to use moxiedoc style comments.
- Removed the compat2x plugin people should have upgraded to the 3.x API by now. 3.0 was released more then a year ago.
- Re-added Gecko specific message for users who doesn't understand the security concept regarding paste.
-Version 3.2.5 (2009-06-29)
- Added new jQuery plugin for the jQuery specific package. This enables you to more easily load and use TinyMCE.
- Added new autoresize plugin contributed by Peter Dekkers. This plugin will auto resize the editor to the size of the contents.
- Fixed so all packages have the same directory structure. Previous releases had a different structure for the production package.
- Fixed so the paste from word dialog forces the contents to be processed as word contents even if it's not.
- Fixed so the jQuery build adapter build works. It's currently only excluding Sizzle.
- Fixed so noscript element contents is retained during the editing process.
- Fixed bug where the getBookmark method would need a "simple" string input when the documented way is a boolean.
- Fixed bug where invalid contents could break the fix_table_elements logic.
- Fixed bug where Sizzle specific attributes would be serialized if the valid_elements was set to *[*].
- Fixed bug where IE would produce an error if you specified a relative content_css and opened the paste dialog.
- Fixed bug where pasting images on IE would produce broken images if they came from an external site.
- Fixed bug where memory was leaked if you add/remove controls dynamically. Some event handlers wasn't removed properly.
- Fixed bug where domain relaxing wasn't treated correctly if you added it after the TinyMCE script element.
- Fixed bug where the activeEditor wasn't set to null if the last editor instance was removed.
- Fixed bug where IE was leaking memory on the onbeforeunload event due to some recently introduced logic. Patch contributed by Options.
- Fixed bug where inserting tables in Safari 4 didn't work due to a new WebKit bug where some element names are reserved.
- Fixed bug where URLs having a :// value in the query string would make it absolute regardless of URL settings.
- Fixed the WebKit specific bug where DOM Ranges would fail if the node wasn't attached to something in a different way.
- Removed the auto_resize option and the resizeToContent method from the tinymce.Editor class. Use the new autoresize plugin instead.
-Version 3.2.4.1 (2009-05-25)
- Fixed bug where Gecko browsers would produce an extra space after for example strong when loaded from sub domains.
- Fixed bug where script elements would be removed if they where placed inside a paragraph element.
- Fixed bug where IE 8 would produce 1 item remaining when loading CSS files dynamically with an empty cache.
- Fixed bug where bound events would be removed from other editor instances if a specific one was removed.
- Fixed various bugs and issues with script and style elements inside the editor.
- Fixed so all script contents gets wrapped in CDATA sections so that they can be parsed using a XML parser.
- Fixed so it's impossible for elements marked as closed to have child nodes rendered in output.
-Version 3.2.4 (2009-05-21)
- Added new paste_remove_styles/paste_remove_styles_if_webkit option to paste plugin concept contributed by Hadrien Gardeur.
- Added new functionality to paste plugin contributed by Scott Eade aka monkeybrain.
- Added new paste_block_drop option to the paste plugin this is disabled by default and will block any drag/drop event.
- Added new bind/unbind methods to DOMUtils these works like Event.add/Event.remove but is easier to access.
- Added new paste_dialog_width/paste_dialog_height options to paste pluign. Enables you to change the dialog sizes.
- Fixed bug on IE 8 where it would sometimes produce a "1 item remaining" status message that would never finish.
- Fixed bug on Safari 4 beta that would produce DOM Range exceptions on the DOMUtils split method since the browser has a bug.
- Fixed bug where the paste plugin could accidentally think that some word sentences was supposed to be list elements.
- Fixed bug where paste plugin would produce one extra empty undo level on some browsers.
- Fixed bug where spans wasn't produced correctly on new line when the keep_styles option was enabled.
- Fixed bug where the caret would be placed at the beginning of contents in IE 8 if you selected colors from the color pickers.
- Fixed so the Event class is a normal class instead of a static one. The tinymce.dom.Event is now a global instance of that class.
- Fixed so internal events for instances gets removed when the DOMUtils instance is removed.
- Fixed so preventDefault and stopPropagation methods can be used on the event object in all browsers.
-Version 3.2.3.1 (2009-05-05)
- Fixed bug where paragraphs containing form elements such as input or textarea would be removed.
- Fixed bug where some IE versions would produce a wrapper function for events attributes.
- Fixed bug where table cell contents could be removed if you pressed return/enter at the end of the cell contents.
- Fixed bug where the paste plugin would remove a extra character if the selection range was collapsed.
- Fixed bug where creating tables with % width wouldn't be handled correctly on WebKit browsers.
-Version 3.2.3 (2009-04-23)
- Added new paste plugin logic. This new version will autodetect Word contents and clean it up.
- Added a optional root element argument to getPos so you can tell it where to stop the calculation.
- Added new DOM ready logic to remove the usage of document.write. We now use basically the same method as jQuery.
- Fixed bug where WebKit browsers would fail when selecting all contents in the area using Ctrl+A.
- Fixed bug where IE would produce paragraphs with empty inline style elements.
- Fixed bug where WebKit browsers would fail when inserting tables with a non pixel width.
- Fixed bug where block elements could get a redundant br element at the end of the element.
- Fixed bug where the tabfocus plugin only worked with a single editor instance on page.
- Fixed bug where IE 8 was loosing caret position if the selection was collapsed and a menu was clicked.
- Fixed bug with application/xhtml+xml mode where menus wasn't working properly.
- Fixed bug where the onstop workaround fix for IE would produce errors in an ASP update panel.
- Fixed bug where the submit function override could produce errors if executed in the wrong scope.
- Fixed bug where the area element wasn't closed by a short ending.
- Fixed various number issues in the style plugins properties dialog. Contributed by datpaulchen.
- Fixed issues with size suffix values in the style plugin dialog.
- Fixed issue where hasDuplicate variable would leak out to the global space due to a bug in the Sizzle engine.
- Fixed issue where the paste event would fire a dialog warning on IE since we extracted the text contents.
- Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
-Version 3.2.2.3 (2009-03-26)
- Fixed regression bug with the getPos method, it would return invalid if the view port was to small.
-Version 3.2.2.2 (2009-03-25)
- Fixed so the DOMUtils getPos method can be used cross documents if needed.
- Fixed bug where undo/redo wasn't working correctly in Gecko browsers.
-Version 3.2.2.1 (2009-03-19)
- Added support for tel: URL prefixes. Even though this doesn't match any official RFC.
- Fixed so the select method of the Selection class selects the first best suitable contents.
- Fixed bug where the regexps for www. prefixes for link and advlink dialogs would match wwwX.
- Fixed bug where the preview dialog would fail to open if the content_css wasn't defined. Patch contributed by David Bildström (ChronoZ).
- Fixed bug where editors wasn't converted in application/xhtml+xml mode due to an issue with Sizzle.
- Fixed bug where alignment would fail if multiple lines where selected.
- Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
-Version 3.2.2 (2009-03-05)
- Added new CSS selector engine. Sizzle the same one that jQuery and other libraries are using.
- Added new is and getParents methods to the DOMUtils class. These use the new Sizzle engine to select elements.
- Added new removeformat_selector option, enables you to specify a CSS selector pattern of elements to remove when using removeformat.
- Fixed so the getParent method can take CSS expressions when selecting it's parents.
- Added new ant based build process, includes a new javabased preprocessor and a yuicompressor ant task.
- Moved the tab_focus logic into a plugin called tabfocus, so the old tab_focus option has been removed from the core.
- Replaced the TinyMCE custom unit testing framework with Qunit and rewrote all tests to match the new logic.
- Moved the examples/testcases to a root directory called tests since it now includes slickspeed.
- Fixed bug where nbsp wasn't replaced correctly in ForceBlocks.js. Patch contributed by thorn.
- Fixed bug where an dom exception would be thrown in Gecko when the theme_advanced_path path was set to false under xml application mode.
- Fixed bug where it was impossible to get out of a link at the end of a block element in Gecko.
- Fixed bug where the latest WebKit nightly would fail when changing font size and font family.
- Fixed bug where the latest WebKit nightly would fail when opening dialogs due to changes to the arguments object.
- Fixed bug where paragraphs wasn't added to elements positioned absolute using classes.
- Fixed bug where font size values with dot's like 1.4em would produce a class instead of the style value.
- Fixed bug where IE 8 would return an incorrect position for elements.
- Fixed bug where IE 8 would render colorpicker/filepicker icons incorrectly.
- Fixed bug where trailing slashes for directories in URLs would be removed.
- Fixed bug where autostart and other boolean values in the media dialog wouldn't be stored/parsed correctly.
- Fixed bug where the repaint call for the media plugin wouldn't be executed due to a typo in the source.
- Fixed bug where id attribute of object elements wasn't kept intact by the media plugin.
- Fixed bug where preview of embeded elements when the media_use_script option was used would fail.
- Fixed bug where inlinepopups could be rendered at an incorrect location on IE 6 while dragging.
- Fixed bug where the blocker shim could be placed at an incorrect location on IE 6.
- Fixed bug where the multiple and size attributes of select elements would produce incorrect values while running in IE.
- Fixed bug where IE would loose the caret position is you selected a color from the color drop down.
- Fixed bug where remove format wouldn't work on IE since it couldn't remove span elements that had style information.
- Fixed bug where Opera was removing links when removing formatting from selected contents.
- Fixed bug where paragraphs could be produced inside non positional elements styled with the CSS position value of static.
- Fixed bug where removeformat wouldn't work if you selected part of a span in IE.
- Fixed bug where media plugin didn't retain the style attribute on embed/object elements.
- Fixed bug where auto focus on empty editor instances could produce strange results if you inserted an image into it.
- Fixed bug where &nbsp; characters would be removed in FF when inserted with the mceInsertContent or selection.setContent methods.
- Fixed bug where warning message of missing paste support wasn't displayed on WebKit browsers.
- Fixed bug where anchor links could include other links. The selected range is now unlinked before adding news links to it.
- Fixed memory leak when TinyMCE was used with prototype. Patch contributed by James Ots.
- Fixed so the non documented fullpage_hide_in_source_view option for the fullpage plugin works again in the 3.x branch.
- Fixed so tables doesn't get inserted into paragraphs by default since it's not W3C valid. Can be disabled by using the fix_table_elements option.
- Fixed so the source view dialog sets a source_view state to the event object. Enables plugins to intercept the source view mode.
- Fixed various validation issues with the html dialogs and pages.
- Removed ask mode option since there is way better ways of doing this now. Use the add/remove control methods instead.
- Removed logic for compatibility with Safari 2.x, this browser is no longer supported since no one is using it.
- Removed the auto domain relaxing feature. If loading scripts cross sub domains it's better to specify the document.domain by hand.
-Version 3.2.1.1 (2008-11-27)
- Added new theme_advanced_default_background_color/theme_advanced_default_foreground_color options. Patch contributed by David Bildström (ChronoZ).
- Fixed font style formatting compatibility issue with Adobe Air.
- Fixed so legacy font elements get converted into spans even if cleanup_on_startup isn't enabled.
- Fixed bug where pre elements could be incorrectly modified by an IE bug workaround. Patch contributed by hu vime.
- Fixed bug where input elements inside inlinepopups wasn't editable in Firefox 2.
- Fixed bug where the xhtmlxtras plugin wasn't replacing attribute values correctly.
- Fixed bug where menu buttons in skin variants would look strange due to IE 8 fixes.
- Fixed bug where WebKit browsers would on backspace take you back to the previous page if the editor was empty.
- Fixed bug where DOMUtils decode method wouldn't handle strings larger than 4096kb due to node chunking.
- Fixed bug where meta key wasn't handled as ctrl key on Mac OS X for custom keyboard short cuts.
- Fixed bug where init event would get fired twice on WebKit on Mac OS X.
-Version 3.2.1 (2008-11-04)
- Added support for custom icon image for drop menus. Use icon_src to set a custom image directly.
- Added new media_strict option to media plugin. Enables you to control if the flash embed is strict or not. Enabled by default.
- Fixed so the editors script files gets dynamically loaded without using XHR or eval.
- Fixed so the media plugin outputs valid XHTML object elements for Flash movies. Can be disabled with the media_strict option.
- Fixed so dynamic loading doesn't require eval calls on non IE browsers for better Air support.
- Fixed bug where the editor wasn't treated as empty if the remaining paragraph had attributes.
- Fixed bug where id's of elements was removed ones they got wrapped in paragraphs. Patch contributed by ChronoZ.
- Fixed bug where WebKit browsers where placing list elements inside paragraph elements.
- Fixed bug where inserting images or links would produce absolute urls on WebKit browsers.
- Fixed bug where values for checked, readonly, disabled and selected attributes was incorrect on IE.
- Fixed bug where positive values for checked, readonly, disabled and selected attributes wasn't forced to valid values.
- Fixed bug where selecting the first option in a native select box would produce an undefined error.
- Fixed bug where tabindex 32768 could be outputted on IE if element attributes where cloned.
- Fixed bug where the media dialogs preview window would display incorrect contents due to duplicate clsid prefixes.
- Fixed bug where non pixel or percent heights for textarea elements would produce errors on IE.
- Fixed bug where cdata sections in script elements wasn't handled correctly.
- Fixed bug where nowrap of table cells would produce a 65535 value output.
- Fixed bug where media plugin would produce an error if you selected the first item in the items list.
- Fixed bug where media plugin would modify links with the item _value in them.
- Fixed so table width/height is better forced if inline_styles is enabled. Patch contributed by daKmoR.
- Fixed css for IE 8 such as opacity and other rendering quirks.
-Version 3.2.0.2 (2008-10-02)
- Fixed bug where the SelectBox and NativeSelectBox wasn't updated correctly if undefined was passed to them.
- Fixed bug where the style dropdown wasn't correctly changed back to it's original state when element had no class.
- Fixed bug where multiple pending font styles wasn't handled correctly.
- Fixed so you can disable all auto css loading for dialogs by setting the popups_css option to false.
-Version 3.2.0.1 (2008-09-17)
- Fixed bug where font sizes and faces wouldn't be changed correctly when there was a parent with a different style.
- Fixed bug where adding fonts to the same selection would produce redundant spans.
-Version 3.2 (2008-09-11)
- Added new text style support, it will now use span elements internally instead of font elements.
- Added new improved support for the theme_advanced_font_sizes option, check the Wiki for details.
- Added new keep_style setting that maintains the text style on return/enter on non IE browsers, enabled by default.
- Added new onBeforeSetContent/onBeforeGetContent/onSetContent/onGetContent events to the Selection class.
- Added new selectByIndex method to ListBox class. This enables you to select list items by an index instead of a value.
- Added new possibility to the select method of the ListBox class. This can now have a selector function as it's value argument.
- Added new possibility to skip the loading of popups css by setting the feature popup_css to the value false.
- Added new possibility to skip translation of popups by setting the translate_i18n feature to false.
- Added new element_format option enables you to produce HTML element endings instead of XHTML. But we are still in the XHTML is better camp.
- Added missing allowfullscreen and quality options for flash elements, this will now get correctly stored.
- Fixed bug where table cell dialog didn't close properly unless the accessibility_warnings option was set to false.
- Fixed bug where the modal dialog blocker element for inlinepopups wasn't placed at a correct location if the page had scroll.
- Fixed bug where non inline dialogs didn't close correctly if the inlinepopups plugin was used.
- Fixed bug where non inline dialogs could make the modal dialog blocker to work incorrectly.
- Fixed bug where style select wasn't populated correctly if you pressed the arrow. Patch by Hari Karam Singh.
- Fixed bug where toggling the fullscreen mode didn't restore scrollbars on IE when the editor was inside a frame. Patch by Jacob Barrett.
- Fixed bug where inserting flash contents using the template plugin didn't work correctly.
- Fixed bug where inserting flash contents using the selection.setContent or mceInsertContent command didn't work correctly.
- Fixed bug where IE would produce an exception if a comment started with -.
- Fixed bug where the blockquote button would wrap lists incorrectly on non IE browsers.
- Fixed bug where Opera would display BR elements in the element path.
- Fixed bug where xhtmlxtras didn't insert elements correctly on IE.
- Fixed bug where the buttons wasn't activated correctly in the xhtmlxtras plugin.
- Fixed bug where adding an object as the style attribute for the dom setAttribs method wouldn't work.
- Fixed bug where the background color would bleed out to parent container element in Gecko.
- Fixed bug where the insert column actions for tables would fail if you did it in a thead or tfoot. Patch contributed by T Andersen (tan73).
- Fixed bug where event blocker element wasn't positioned correctly for the inlinepopups plugin.
- Fixed bug where pasting from Office 2007 would produce an odd comment in the contents.
- Fixed bug where the paste as plain text could remove an extra character. Patch contributed by Speednet.
- Fixed bug where some characters where missing for the paste_replace_list option. Patch contributed by Speednet.
- Fixed bug where removing non existing editor instances by the mceRemoveControl command would produce an error.
- Fixed bug where meta elements with the name description would produce errors in IE.
- Fixed bug where color and background colors wouldn't be updated properly.
- Fixed bug where the createMenuButton of tinymce.ControlManager didn't implement the last class argument.
- Fixed bug where the editor_css option was relative from the TinyMCE installation directory not the current page.
- Fixed bug where elements wouldn't be padded if the element contained bogus br elements. For example TD elements.
- Fixed bug where parsing of <body > in fullpage plugin would produce an error.
- Fixed bug where relative urls with just ./ would become an empty string.
- Fixed bug where outdent button would be disabled if inline_styles where set to false.
- Fixed bug where replace with an empty search string would produce an error on IE.
- Fixed bug where restoring the overflow state of the body in fullscreen plugin running on IE would produce vertical scrollbars.
- Fixed bug where pressing return/enter in list items would sometimes move the caret the to top of the content area in FF.
- Fixed bug where the style listbox wouldn't be updated correctly if you used the use_native_selects option.
- Fixed bug where WebKit browsers would produce a div element when ending list elements using return.
- Fixed so translation of popup contents only occurs if it's needed.
- Optimized the URI object in regards or converting absolute URIs to relative URIs.
-Version 3.1.1 (2008-08-18)
- Added new getSize method to DOMUtils it will return the dimensions only of an element.
- Added new alert/confirm methods to the tinyMCEPopup class to prevent focus problems and also to shorten method calls.
- Added new plugin_preview_inline option to preview plugin to enable/disable native/inline dialogs.
- Added new readonly option. If this is set the editor will only display the contents for the user.
- Added missing tabindex and accesskey to input elements in the default valid_elements setup.
- Updated firebug lite to 1.2, to enable it use the tiny_mce_dev.js?debug=1 on the development package.
- Fixed so the preview dialog in the preview plugin uses inline dialogs/popups.
- Fixed so CDATA sections remains intact through the serialization process of the DOM tree.
- Fixed various issues with the getAttrib command. It will now return more correct values.
- Fixed bug where the embed element wasn't properly parsed in the media plugin it now supports 3 formats.
- Fixed bug where the noshade attribute was serialized incorrectly on IE.
- Fixed bug where editing an existing link element didn't force it relative.
- Fixed bug where image link creation fails on Safari if the image is aligned.
- Fixed bug where it was possible to scroll the fullscreen mode in Opera 9.50.
- Fixed bug where removal of center image alignment would fail. Patch contributed by Andrew Ozz.
- Fixed bug where inlinedialogs didn't work properly if the doctype was incorrect in IE.
- Fixed bug where cross domain loading didn't work correctly in Opera 9.50.
- Fixed bug where breaking huge text blocks with return/enter key would scroll to end of block.
- Fixed bug where replace button kept inserting the replacement text even if there is no more matches.
- Fixed bug with fullpage plugin where value wasn't set correctly. Patch contributed by Pascal Chantelois.
- Fixed bug where the dom utils setAttrib method call could produce an exception if the input was null/false.
- Fixed bug where pressing backspace would sometimes remove one extra character in Gecko browsers.
- Fixed bug where the native confirm/alert boxes would move focus to parent document if fired in dialogs.
- Fixed bug where Opera 9.50 was telling you that the selection is collapsed even when it isn't.
- Fixed bug where mceInsertContent would break up existing elements in Opera and Gecko.
- Fixed bug where TinyMCE fails to detect some keyboard combos on Mac, contributed by MattyRob.
- Fixed bug where replace all didn't move the caret to beginning of text before searching.
- Fixed bug where the oninit callback wasn't executed correctly when the strict_loading_mode option was used, thanks goes to Nicholas Oxhoej.
- Fixed bug where a access denied exception was thrown if some other script specified document.domain before loading TinyMCE.
- Fixed so setting language to empty string will skip language loading if translations are made by some backend.
- Fixed so dialog_type is automatically modal if you use the inlinepopups plugin use dialog_type : "window" to re-enable the old behavior.
-Version 3.1.0.1 (2008-06-18)
- Fixed bug where the Opera line break fix didn't work correctly on Mac OS X and Unix.
- Fixed bug where IE was producing the default value the maxlength attribute of input elements.
-Version 3.1.0 (2008-06-17)
- Fixed bug where the paste as text didn't work correctly it encoded produced paragraphs and br elements.
- Fixed bug where embed element in XHTML style didn't work correctly in the media plugin.
- Fixed bug where style elements was forced empty in IE. The will now be wrapped in a comment just like script elements.
- Fixed bug where some script elements wrapped in CDATA could fail to be serialized correctly.
- Fixed bug where FF 3 produced -moz- internal styles in some style attributes.
- Fixed bug where query strings and external URLs didn't work correctly in style attributes.
- Fixed bug where shape attribute of area elements got serialized as rect regardless of it's initial value in IE 6.
- Fixed bug where selection of elements inside layers would fail in IE since focus was moved to the document body.
- Fixed bug where pressing enter/return in an editable select box would produce an __mce_add_custom__ class value.
- Fixed bug where changing font size of text placed inside a colored text chunk would remove the parent node.
- Fixed bug where Opera 9.5 final produced a strange line break behavior due to a workaround for previous Opera versions.
- Fixed bug where text/background color would produce a strange focus problem when you tried to click on the body in IE.
- Fixed issue where selecting the title of an listbox equals the old 2.x behavior of changing the value to an empty string.
- Fixed issue where it was common for the media plugin to break if the _value attribute wasn't added for the param element.
- Fixed issue where the wrong parent editor instance might be updated if you use fullscreen mode in an incorrect way.
- Fixed issue where Safari was producing a warning about the base element not being closed correctly.
- Removed redundant form element name matching from regexp in the DOMUtils class.
-Version 3.0.9 (2008-06-02)
- Added new contextmenu_offset_x/contextmenu_offset_y options for the contextmenu plugin.
- Added cite attribute to the default rule for the blockquote element.
- Added support for using arrow keys for selection of items in listboxes.
- Added support for using arrow keys for selection of items in dropmenus.
- Fixed bug where blockformat change on elements with BR inside them didn't change correctly on Firefox.
- Fixed bug where removing table rows inside thead or tfoot would remove the whole table if it was the last one.
- Fixed bug where XHR synchronous mode didn't execute the callback handlers synchronously.
- Fixed bug where setting border to 0 didn't add border: 0 to the style attribute when using the advimage dialog.
- Fixed bug where the selection of images and table cells didn't work correctly when the editor is placed in a frame and running on IE.
- Fixed bug where the store/restore of a selection didn't work correctly in non IE browsers.
- Fixed bug where only the first element would be invalid for the invalid_elements option.
- Fixed bug where paste as plain text didn't encode the characters correctly when they where inserted.
- Fixed bug where HTML source window couldn't be maximized on Gecko when the maximizable feature was enabled.
- Fixed bug where color selection using the color picker could produce exception in IE.
- Fixed bug where font size changes could produce produce extra redundant elements.
- Fixed bug where IE could produce unknown runtime error if you replaced a image with another image from a separate frame.
- Fixed bug where the domLoaded state for the Event class wasn't set correctly if the editor was loaded dynamically using the gzip compressor.
- Fixed bug where handling of the base element for a page would produce incorrect urls. Based on a patch contributed by John LeSueur.
- Fixed bug where table constraint alert boxes was presented with an empty value and wasn't the skinned inline ones.
- Fixed bug where the onChange event wasn't fired when the form was submitted. It's now also triggered when the save method is called.
- Fixed bug where encoding set to xml didn't work as expected. It now encodes the contents into XML entities.
- Fixed bug where numrows didn't work correctly for the merge cells dialog of the table plugin.
- Fixed bug where the onGetContent event was fired even when the no_events flag was set.
- Fixed bug where the preview panels for the advimage and the media plugin could overflow on Safari and FF 3.
- Fixed bug where the editing and removal of abbr elements using the xhtmlxtras plugin working correctly on IE.
- Fixed bug where save button in the save plugin didn't work correctly on IE.
- Fixed bug where dragging layers didn't work as expected since it would snap back to it's original location if you saved.
- Fixed bug where the description of the template plugin dialog wasn't updated correctly.
- Fixed bug where the values for frame and rules in the table dialogs where swapped.
- Fixed bug where the elements like ins, del, cite, acronym and abbr didn't have the default editing style as the old 2.x branch.
- Fixed bug where ask mode would lock the focused textarea if you pressed cancel in the confirm dialog on FF 3.
- Fixed bug where ask mode would produce contents for empty textareas if you reloaded the page.
- Fixed so the onGetContent event gets the full pass through object just like the other events.
- Fixed so attributes for block elements remains the same when you change format of a element.
-Version 3.0.8 (2008-04-30)
- Fixed bug where IE would produce an error if textareas without names where converted.
- Fixed bug where editor wasn't forced empty when there was only a single br or empty paragraph left.
- Fixed bug where IE would produce an warning message if object elements where produced in the media plugins preview running on https.
- Fixed bug where new addVer function didn't handle hash items correctly. Patch contributed by Mirek Burkon.
- Fixed bug where font_size_style_values option wasn't applied correctly to fonts inside the editor.
- Fixed bug where image selection could be lost if a image was edited using context menu on IE.
- Fixed bug where style values wasn't updated properly due to an invalid regexp.
- Fixed bug where IE 6 where displaying warning message about insecure items when inserting an image while using https. Patch contributed by Norifumi Sunaoka.
- Fixed bug where IE was producing an auto save message if you selected a color from the color split button.
- Fixed bug where backspace sometimes would move the caret to the end of the previous block in Gecko.
- Fixed bug where the rowlayout manager didn't work as described in the documentation.
- Fixed bug where the default options for the fullpage plugin wasn't applied correctly.
- Fixed bug where selection would jump one character if you applied a styles to a words in non IE browsers.
- Fixed bug where undo levels wasn't added correctly if you went back in undo history and added a new event.
- Fixed bug where font size dropdown didn't mark the selected size in IE.
- Fixed bug where the size of the editor was determined using clientWidth instead of offsetWidth.
- Fixed so the onchange event doesn't fire on the initial undo level, it will also fire when the editor is blurred.
- Fixed so the advhr plugin produces XHTML valid output instead of non standard attributes.
- Fixed so blockquote gets converted into [quote] in when the bbcode plugin is enabled.
- Fixed so theme_advanced_font_sizes can be named for example Font 1=1, Font 2=2 etc.
- Fixed so editor_selector/editor_deselector can be regexps. By default only strings are allowed not part regexps like before.
- Fixed so that the version suffix is optional. It still requires the build process so you need to export it manually.
- Fixed so it's possible to tab to table cells in non Gecko browsers and also produce new rows if you tab at the end of a table. Contributed by Josh Peek.
-Version 3.0.7 (2008-04-14)
- Added new version suffix to all internal GET requests to make sure that the users cache gets cleared correctly.
- Fixed issue with isDirty returning true event if it wasn't dirty on IE due to changes in tables during initialization.
- Fixed memory leak in IE where if a page was unloaded before all images on the page was loaded it would leak.
- Fixed bug in IE where underline and strikethrough could produce an exception error message.
- Fixed bug where inserting paragraphs in totally empty table cells would produce odd effects.
- Fixed bug where layer style data wasn't updated correctly due to some performance enhancements with the DOM serializer.
- Fixed bug where it would convert the wrong element if there was two elements with the same name and id on the page.
- Fixed bug where it was possible to add style information to the body element using the style plugin.
- Fixed bug where Gecko would add an extra undo level some times due to the blur event.
- Fixed bug where the underline icon would get active if the caret was inside a link element.
- Fixed bug where merging th cells not working correctly. Patch contributed by André R.
- Fixed bug where forecolorpicker and backcolorpicker buttons where rendered incorrectly when the o2k7 skin was used.
- Fixed bug where comment couldn't contain -- since it's invalid markup. It will now at least not break on those invalid comments.
- Fixed bug where apos wasn't handled correctly in IE. It will now convert apos to &#39; on IE since that browser doesn't support that entity.
- Fixed bug where entities wasn't encoded correctly inside pre elements since they where protected from whitespace removal.
- Fixed bug where color split buttons where rendered incorrectly on IE6 when using the non default theme.
- Fixed so caret is placed after links ones they are created, to improve usability of the editor.
- Fixed so you can select tables by clicking on it's borders in non IE browsers to normalize the behavior.
- Fixed so the menus can be toggled by clicking once more on the icon in listboxes, menubuttons and splitbuttons based on code contributed by Josh Peek.
- Fixed so buttons can be labeled, currently only works with the default skin, so it's kind of experimental. Patch contributed by Daniel Insley.
- Fixed so forecolorpicker and backcolorpicker remembers the last selected color. Patch contributed by Shane Tomlinson.
- Fixed so that you can only execute the mceAddEditor command once for the same instance name.
- Fixed so command functions added with addCommand can pass though the call to default handles if it returns true.
-Version 3.0.6.2 (2008-04-07)
- Fixed bug where empty tables couldn't be edited correctly on non IE browsers if they where loaded into the editor.
- Fixed bug where it was impossible to resize layers correctly in IE since it thought it was an image.
- Fixed bug where an editor instance was stealing focus in IE resulting in a scroll to the editor on page reloads.
- Fixed bug where Safari was crashing on Mac OS X if you closed dialogs using the Esc key.
-Version 3.0.6.1 (2008-04-04)
- Added support for the missing mceAddFrameControl command. The input for this command has changed so consult the Wiki.
- Fixed bug where sub menus for the drop menus would leave an empty element behind.
- Fixed memory leak in IE if the editor was placed in a frame or iframe.
-Version 3.0.6 (2008-04-03)
- Added elements to the default value of valid_elements option. It now contains all XHTML strict elements and a few transitional.
- Added more accessibility fixes, it's now possible to navigate and close list boxes and split button menus with the keyboard.
- Added missing getInfo method to the contextmenu and safari plugin, this caused problems for the Drupal module.
- Added new inlinepopups_zindex option to the inlinepopups plugin so that you can configure the default start z-index.
- Added new setControlType method to the tinymce.ControlManager class. This method enables you to override the default classes.
- Added ability to specific an optional control class to use instead of the default one for the ControlManager methods. Based on concept by Josh Peek.
- Fixed bug where attribute rules for the DOM Serializer couldn't contain - or _ characters in their names.
- Fixed bug where inlinepopups event blocker and modal dialog blocker elements produced vertical scrollbars.
- Fixed bug where there was a rendering issue with quirks mode in Safari moving the resize handle to an incorrect position.
- Fixed bug with forecolor/backcolor controls on IE. Sometimes elements positioned relative will generate display errors.
- Fixed bug where a p2 was leaking out in the global name space when you selected a color from the forecolor/backcolor controls.
- Fixed bug where empty paragraphs didn't work as expected in browsers other than IE.
- Fixed bug where the load method of the tinymce.dom.ScriptLoader didn't check if the file was already loaded.
- Fixed bug where the load method for the PluginManager and ThemeManager didn't check if a plugin/theme by a specific name was all ready loaded.
- Fixed bug where the theme_advanced_link_targets option didn't work correctly with the advanced themes link dialog. Patch contributed by Arnold B.
- Fixed bug where the style command would merge classes into empty span elements.
- Fixed bug where the style command would remove empty span elements outside the current selection.
- Fixed bug where the fix for the Safari backspace bug removed all editor contents if it was filled with empty paragraphs.
- Fixed bug where alert and confirm boxes opened by the inlinepopups plugin would produce an exception if domain relaxing was used.
- Fixed bug where Safari was adding style attributes to all elements when you paste them into the editor.
- Fixed bug where the spellchecker menus was visually incorrect since the space for the non existing icon was still there.
- Fixed bug where remove_linebreaks option didn't remove line breaks inside the text contents of a element.
- Fixed bug where Safari 3.1 was introducing _mc_tmp into paragraphs due to the new querySelectorAll and a TinyMCE specific workaround.
- Fixed bug where getParam method in the Editor class was returning incorrect objects and would mess up the font drop down. Patch contributed by speednet.
- Fixed bug where the table dialog would produce an exception in IE when you edited tables since it tried to place focus in a disabled field.
- Fixed bug where class attribute on some span elements was removed on cleanup.
- Fixed bug where resizing the editor in IE could produce an exception if the editor width/height got to be a negative value.
- Fixed bug where wmv files wouldn't play since the src param was used instead of the url param.
- Fixed bug where br elements would be added here and there in Gecko. Geckos internal _moz_dirty br elements where serialized as well.
- Fixed bug where editing named anchors would produce two anchors instead of one updated one.
- Fixed bug where arrow and function keys didn't work when an noneditable element was focused within the editor.
- Fixed bug where the dispatcher could produce an exception if the listener list was altered inside an event callback.
- Fixed bug where it was impossible to totally empty the editor contents on Safari due to an mistreatment of nbsp as whitespace. Patch contributed by Andrew Ozz.
- Fixed bug where TinyMCE would not convert textareas with the same name attribute value. It will now generate an unique id for those textareas.
- Fixed bug where backspace/delete key was deleting td elements inside tables while running on Gecko.
- Fixed bug where Firefox 3.0b4 and Opera 9.26 where scrolling to the top of document when pressing return/enter.
- Fixed bug where the template plugin wasn't just inserting the mceTmpl tagged element.
- Fixed bug where the alert method of the default WindowManager implementation didn't translate input language strings like the inlinepopups dialog does.
- Fixed bugs with the backspace behavior in Gecko. The caret was placed on incorrect locations in the DOM sometimes.
- Fixed so advimage dialog and table dialogs has support for editable select boxes for the class value.
- Fixed so the media, pagebreak and spellchecker doesn't load it's default content.css file if the content_css option is set to false.
- Fixed so the paste_use_dialog option works again it's enabled by default but can be disabled on IE. Patch contributed by Speednet.
- Fixed so that the fullscreen editor is focused when switching fullscreen editing on.
- Fixed so it's possible to edit images and links inside tables using the context menu.
- Fixed so table dialogs and the advanced image dialog doesn't loose selection in IE if the dialogs where navigated/submitted with the keyboard.
- Fixed so the theme_advanced_blockformats options can have named items for example title 1=h1;title 2=h2.
- Fixed so it's possible to add a custom editor_css for the simple theme.
- Fixed quirks with directionality rtl, patch contributed by Andrew Ozz.
- Fixed so the inlinepopups default start zIndex is 300000.
- Fixed typo in media plugin Shockware is now replaced with Shockwave.
- Fixed psuedo memory leak in IE with the replaceChild method inside the DOMUtils.replace method.
- Fixed so memory is released when an editor instance is removed from page.
- Optimized the color split button menus so that they use less event handlers.
- Removed the util/mclayer.js file since it's no longer used by any of the TinyMCE dialogs and is considered deprecated.
-Version 3.0.5 (2008-03-12)
- Added new black skin variant to the o2k7 skin contributed by Stefan Moonen.
- Added new explode method to the tinymce core class. This does a split but removed whitespace it also defaults to a , delimiter.
- Added new detection logic for IE 8 standards mode into the DOMUtils class strMode can now be checked to see if that mode is on/off.
- Added new noscale option value for the scale select box for Flash in the media plugin.
- Fixed bug where the menu for the ColorSplitButton wasn't removed when the editor was removed.
- Fixed bug where font colors couldn't be edited correctly since the style of the element didn't get updated correctly.
- Fixed bug where class of elements would get lost when TinyMCE was fixing incorrect HTML markup.
- Fixed bug where table editing would produce double height values.
- Fixed bug where width style value wouldn't be removed if you switched width unit from cm/em to pixels or percent.
- Fixed bug where the search/replace input box wasn't auto focused like the other dialogs.
- Fixed bug where the old mceAddControl command would use the fullscreen settings next time it created an instance.
- Fixed bug where multiple lines where added to the target cell if you merged multiple empty cells.
- Fixed bug where drop down menus would be incorrectly positioned inside scrollable divs.
- Fixed bug where the separators of the silver skin variant didn't display correctly in IE 6.
- Fixed bug where createStyleSheet seems to load scripts at opposite order in some IE versions.
- Fixed bug where directionality could produce odd results for the UI and the dialogs.
- Fixed bug where the DOM serializer wouldn't serialize custom namespaced attributes in IE 6 using the *[*] valid elements rule.
- Fixed bug where table caption would be inserted after the thead element if you swapped a tr to be inside the thead.
- Fixed bug where the youtube detection logic for the media plugin was to generic.
- Fixed so the deprecated and undocumented theme_advanced_path_location set to none won't hide the whole statusbar.
- Fixed so most input lists can have whitespace in them they are now split using the new tinymce.explode method.
- Fixed so the popup_css and popup_css_add URLs are relative to where the current document is located.
- Fixed various bugs and quirks with the store/restore selection logic.
- Fixed so the editor starts in IE 8 standards mode but still that browser is very very buggy.
- Fixed so dialog_type set to modal will block the background and other inline windows and only give access to the front most window.
-Version 3.0.4.1 (2008-03-08)
- Fixed critical bug where it was impossible to edit images when inlinepopups where used due to lost selection in IE.
-Version 3.0.4 (2008-03-07)
- Added new option constrain_menus, this enables you to force view port constraints on all menus. Contributed by Shane Tomlinson.
- Fixed bug where table background wasn't visible inside the editor due to a default CSS rule overriding the style attribute.
- Fixed bug where links would get a null class added if no styles was used in IE.
- Fixed bug where spellchecker was auto focusing the editor in IE.
- Fixed bug where document.domain would produce invalid argument if the editor was loaded in IE6 over a network UNC path.
- Fixed bug where table height attribute was used, this is deprecated in XHTML so it now adds it as an style.
- Fixed bug where textareas with style values would produce error in IE.
- Fixed so the first element in each dialog is focused by default to enhance keyboard usage.
- Fixed so you can add a mceFocus class to elements to make it auto focused.
- Fixed so you can close dialogs using the esc key.
- Fixed so you can press return/enter to submit the action of each dialog.
- Fixed so tabbing inside an inline popups wont focus the resize anchor elements.
- Fixed so you can press ok in inline alert messages using the return/enter key.
- Fixed so textareas can be set to non px or % sizes for example em, cm, pt etc.
- Fixed so non pixel values can be used in width/height properties for tables.
- Fixed so the custom context menu can be disabled by holding down ctrl key while clicking.
- Fixed so the layout for the o2k7 skin looks better if you don't have separators before and after list boxes.
- Fixed so the sub classes get a copy of the super class constructor function to ease up type checking.
- Fixed so font sizes for the format block previews are normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
- Fixed so font sizes for h1-h6 in the default content.css is normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
-Version 3.0.3 (2008-03-03)
- Fixed bug where an error about document.domain would be thrown if TinyMCE was loaded using a different port.
- Fixed bug where mode exact would convert textareas without id or name if the elements option was omitted.
- Fixed bug where the caret could be placed at an incorrect location when backspace was used in Gecko.
- Fixed bug where local file:// URLs where converted into absolute domain URLs.
- Fixed bug where an error was produced if a editor was removed inside an editor command.
- Fixed bug where force_p_newlines didn't effect the paste plugin correctly.
- Fixed bug where the paste plugin was producing an exception on IE if you pasted contents with middots.
- Fixed bug where delete key could produce exceptions in Gecko sometimes due to the fix for the table cell bug.
- Fixed bug where the layer plugin would produce an visual add class called mceVisualAid this one is now renamed to mceItemVisualAid to mark it internal.
- Fixed bug where TinyMCE wouldn't initialize properly if ActiveX controls was disabled in IE.
- Fixed bug where tables and other elements that had visual aids on them would produce an extra space after any custom class names.
- Fixed bug where search with an empty string would produce some odd "invalid pointer" error in IE.
- Fixed bug where elements like menus where placed at incorrect positions in Opera 9.26.
- Fixed bug where IE was loosing focus of the editor when you clicked some dropmenu and if it was placed in a frame or iframe.
- Fixed bug where focus of images could be lost in IE if you focused the accessibility confirm dialog in the advimage plugin.
- Fixed bug where nestled font elements would produce odd output like missing font elements.
- Fixed bug where text colors and styles got removed if invalid_elements included the font element.
- Fixed bug where text-decoration set to underline or line-through would remove other styles from span elements.
- Fixed bug where editor contents like \n\n would be incorrectly handled and processed as real line feeds.
- Fixed bug where incorrectly encoded urls with ampersands in them would be decoded incorrectly.
- Optimized the DOMUtils decode method to be a lot faster if the string doesn't have any entities to decode.
-Version 3.0.2.1 (2008-02-26)
- Fixed alert/confirm dialogs so they display correctly.
-Version 3.0.2 (2008-02-26)
- Added new body_id option that enables you to specify the id of the body inside the editor iframe based on ideas by David Bildström (ChronoZ).
- Added new body_class option that enables you to set the class for the body of the editor iframe based on ideas by David Bildström (ChronoZ).
- Added new CSS class to the default content.css files mceForceColors that forces white background and black text can be used with the body_class option.
- Added new type parameter to the Editor.getParam function to reduce redundant logic for parsing hash tables.
- Added new isDone method to the ScriptLoaded class, this enables you to check if a script has been loaded or not.
- Added new resizeTo and resizeBy methods for the advanced theme. Can be called using tinyMCE.activeEditor.theme.resizeTo(w, h);
- Added new skin_variant option this can be used to extend existing skins with slight modifications like color.
- Added new variant of the o2k7 skin called "silver" based on a contribution made by Stefan Moonen.
- Fixed bug where the template plugin might produce errors if the template_mdate_classes wasn't configured.
- Fixed bug where the media plugin didn't convert the URLs for movies once they where inserted.
- Fixed bug where the style field for the advlink dialog didn't work correctly if you edited an existing link.
- Fixed bug where alignment of toolbars would fail in editor was uses in a quirks mode on IE, fix contributed by Peter Wood & Art Lawry.
- Fixed bug where initialization of multiple editors at the same time using the mceAddControl method would produce errors.
- Fixed bug where initialization of editors using mceAddControl command or new tinymce.Editor calls would fail during page load.
- Fixed bug where the check for domain relaxing could fail if the document.domain property was changed by another script.
- Fixed bug where textareas couldn't be named description or any other name that matches the meta elements in IE and Opera.
- Fixed bug where the element path would fail sometimes in IE due to "unknown runtime error" on innerHTML.
- Fixed bug where Safari would crash if you was hiding the editor before serializing the contents.
- Fixed bug where the editor wasn't scaled propertly in fullscreen mode using the old fullscreen_new_window option.
- Fixed bug where render method didn't load language packs in IE and Opera if you rendered an editor during page load.
- Fixed bug where resizing the browser window in fullscreen didn't resize the editor.
- Fixed bug where the blockquote command didn't move the caret inside the new empty blockquote if you used it on an empty document.
- Fixed bug where auto in a style width/height for the textarea would produce an editor with the size value of 100. Fix contributed by Shane Tomlinson.
- Fixed bug where restoration of selection at the beginning of an element could fail in Gecko.
- Fixed bug where caret restoration after a cleanup could place the it at an incorrect location.
- Fixed bug where delete key inside td elements would delete the cell in Gecko.
- Fixed so the blockquote button toggles individual lines. This behavior is a bit more like the old indentation behavior in the 2.x branch.
- Fixed so the dialog language packs only gets loaded the first time you open a dialog.
- Fixed so all classes in the whole UI is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
- Fixed so all classes in the inlinepopups logic is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
- Fixed so that the window in fullscreen mode can be resized when fullscreen_new_window option is enabled.
- Fixed so blockquote elements are formatted in the source output with an linefeed before and after it.
- Optimized the editor initialization by reducing the number of calls to getBookmark/moveToBookmark.
-Version 3.0.1 (2008-02-21)
- Added spellchecker plugin into the main package, but without any backend can be specified with the spellchecker_rpc_url option.
- Added src attribute for script elements to the default valid_elements option value.
- Added extra parameter to the class_filter callback it can now also filter out classes based on the whole CSS rule.
- Added support for domain relaxing, TinyMCE can now be loaded from an remote domain as long as they are on the same root domain.
- Added support for custom elements the new custom_elements option enables you to add non HTML elements to the editor.
- Added support for the W3C Selectors API that was added to latest nightly build of WebKit.
- Fixed bug where some object param element wasn't stored correctly using the media plugin.
- Fixed bug where Opera was scrolling to top of page is drop menus on list boxes where displayed.
- Fixed bug where IE6 was crashing if a format block was used on a container with anchor elements.
- Fixed bug where spans with font sizes wasn't handled correctly when editor was loading contents.
- Fixed bug where mode exact couldn't convert editors with name only. Id is no longer required but recommended.
- Fixed bug where the mceInsertRawHTML command produced an extra undo level.
- Fixed bug where the specific_textareas mode didn't work correctly this is the same thing as textareas now.
- Fixed bug where the values of input elements in the HTML page of dialogs pages where changed in IE.
- Fixed bug where fullscreen and fullpage plugins didn't work well together.
- Fixed bug where embed elements wasn't handled properly in the media plugin.
- Fixed bug where style information on span elements gets munged when fonts are converted to spans.
- Fixed bug where some entities in element attributes where encoded incorrectly in the latest WebKit build.
- Fixed bug where initialization would fail in IE if there where two input elements with the name submit in the form.
- Fixed bug where fullscreen mode didn't work correctly in IE when the fullscreen_new_window option was used.
- Fixed bug where invalid contents like an ul inside a p element would produce odd results in IE.
- Fixed bug where Opera 9.2x was placing the drop menus at incorrect locations if the editor was placed in a table.
- Fixed bug where Opera was producing odd results if enter/return was pressed while having forced_root_blocks disabled.
- Fixed bug where layer plugin was stealing focus in IE on initialization.
- Fixed bug where body attributes wasn't set properly in the fullpage plugin, fix contributed by Hiroaki Kawai.
- Fixed bug where insert image and insert link dialogs where producing an extra level in the undo history.
- Fixed bug where Gecko would produce an error if empty elements like <div></div> where inserted using mceInsertContent.
- Fixed bug where center alignment of images produced odd results inside table cells.
- Fixed bug where center alignment of images couldn't be toggled correctly.
- Fixed bug where alignment of images inside tables would produce double float style items in IE if the fix_table_elements option was enabled.
- Fixed bug where a variable called 'v' was polluting the global namespace. Objects tinymce and tinyMCE are the only ones allowed to be global.
- Fixed bug where insert table from context menu couldn't insert new tables inside existing tables.
- Fixed bug where Safari wouldn't produce br elements on enter when the force_br_newlines option was enabled.
- Fixed bug where switching cell type in table cell dialog would produce odd attributes in IE.
- Fixed bug where Gecko was outputting internal attributes if valid_elements where set to "*[*]".
- Fixed bug where the style plugin would produce non hex colors inside the dialog when running on Gecko.
- Fixed bug where an empty src value for insert image would remove the currently selected image if it wasn't and image element.
- Fixed bug where hidden input elements would break the logic for the tab_focus option.
- Fixed bug where save button wasn't working correctly in fullscreen mode.
- Fixed bug where the editor was forced to be placed in a form element if the save_onsavecallback option was used.
- Fixed bug where upper case param attributes wasn't parsed correctly in the media plugin.
- Fixed bug where render method of tinymce.Editor class would produce an exception if the strict_loading_mode option was omitted.
- Fixed bug where nodeChanged event could be fired while the editor was loading and there for produce an exception in FF.
- Fixed bug where no undo levels where added if the user created new table rows using the tab key on Gecko.
- Fixed bug where tables would be broken if you selected a different block format for contents withing an table cell.
- Fixed bug where the render method of the tinymce.Editor class didn't setup the tinymce.EditorManager.settings object correctly.
- Fixed bug where the advanced image dialog would go to the first tab if the alternative image was changed using the file browser link.
- Fixed bug where the forced_root_block option would produce BR elements inside empty blocks if the block wasn't a paragraph.
- Fixed bug where the forced_root_block doesn't work correctly on IE if the specified element was something else than paragraphs.
- Fixed bug where selection of images would get lost if user selected something from the context menu in IE.
- Fixed bug where the context menu plugin would pollute the global namespace with two variables p1 and p2.
- Fixed compatibility issue with Mootools, it is destroying document.getElementById on unload in IE. (Mantra: You don't own the internal objects).
- Fixed bugs where dialogs/tabs and other UI elements where rendered incorrectly in Firefox 3.
- Fixed so the auto CSS class importer is compatible with 2.x.
- Fixed so the editor UI and inlinedialogs works correctly with the YUI CSS reset package.
- Fixed so header and footer elements are forced to lower case when the fullpage plugin is used.
- Fixed so load prefixes "-" for plugins and themes isn't required if the plugin/theme was loaded by the ThemeManager/PluginManager.
- Fixed so the JSONRequest uses application/json content type to make Ruby on rails happy.
- Fixed so the CSS rule is more exact for the body in the default content.css files. Body is now defined as "body.mceContentBody" instead of just "body".
- Fixed so the tiny_mce_dev.js uses XHR instead of document.write to load scripts to resolve an issue with Opera 9.50.
- Fixed so language pack loading can be disabled by setting the language option to false. Can be useful for systems with their own language pack management.
-Version 3.0 (2008-01-30)
- Added map and area elements to the default valid_elements list and also some indentation rules.
- Fixed bug where empty paragraphs wasn't padded when loading contents.
- Fixed bug where the RowLayout manager didn't work at all.
- Fixed bug where style attribute data would get messed up in advimage dialog.
- Fixed bug where the table dialogs class select wasn't updated correctly.
- Fixed bug where elements would get extra whitespace around on insert when body was present in valid_elements.
- Fixed bug where coords attribute of the area element wasn't handled properly in IE.
- Fixed bug where Safari didn't produce BR elements on shift+return.
- Fixed bug where force blocks would cast odd invalid attribute exception in IE.
- Fixed bug where media plugin would produce extra whitespace before and after objects.
- Fixed bug where cleanup_callback could break the contents of the editor. But use the new event system instead of this option.
- Fixed bug where the tab_focus option didn't work between editor instanced. You can now tab between editors.
- Fixed bug where the load function of the ScriptLoader class didn't load single files without the load que as it was supposed to.
- Fixed bug where the execcommand_callback parameter order was incorrect. Recommendation use the new addCommand method.
- Fixed bug where range.select calls sometimes failed on some IE versions.
- Fixed bug where Safari was scrolling to top of document when enter/returned was pressed.
- Fixed bug where fullscreen_new_window option didn't work correctly.
- Fixed bug where the nonbreaking plugin inserted an space instead of an non breaking space the first time.
- Fixed bug where the visualization of non breaking spaces where visual in element path.
- Fixed so the focus is restored to the editor after inserting an custom character.
- Fixed so the isNotDirty state is set to false if a new undo level is added.
- Fixed so pointless style information for borders gets removed in IE.
- Fixed so the resize button has a se-resize cursor css value.
-Version 3.0rc2 (2008-01-18)
- Added new fix_nesting option to fix bug #1867292, this is disabled by default.
- Added new indentation option enables you to specify how much each indent/outdent call will add/remove.
- Added easier support for enabling/disabling icon columns on drop menues.
- Added new menu button control class. This control is very similar to the splitbutton but without any onclick action.
- Added support for previous tab focus (shift+tab). The tab_focus setting now takes two items next and previous element.
- Fixed bug where iframes inside the editor got removed in Firefox on initial load.
- Fixed bug where the CSS for abbr elements wasn't applied correctly in IE.
- Fixed bug where mceAddControl on element inside a hidden container produced errors.
- Fixed bug where closed anchors like <a /> produced strange results.
- Fixed bug where caret would jump to the top of the editor if enter was pressed a the end of a list.
- Fixed bug where remove editor failed if the editor wasn't properly initialized.
- Fixed bug where render call on for a non existing element produced exception.
- Fixed bug where parent window was hidden when the color picker was used in a non inlinepopups setup.
- Fixed bug where onchange event wasn't fired correctly on IE when color picker was used in dialogs.
- Fixed bug where save plugin could not save contents if the converted element wasn't an textarea.
- Fixed bug where events might be fired even after an editor instance was removed such as blur events.
- Fixed bug where an exception about undefined undo levels could be throwed sometimes.
- Fixed bug where the plugin_preview_pageurl option didn't work.
- Fixed bug where adding/removing an editor instance very fast could produce problems.
- Fixed bug where the link button was highlighted when an anchor element was selected.
- Fixed bug where the selected contents where removed if a new anchor element was added.
- Fixed bug where splitbuttons where rendered one pixel down in the default theme.
- Fixed bug where some buttons where placed at incorrect positions in the o2k7 theme.
- Fixed bug that made it impossible to visually disable a custom button that used an image instead of CSS sprites.
- Fixed bug where it wasn't possible to press delete/backspace if the editor was added+removed and re-added due to a FF bug.
- Fixed bug where an entities option with only 38,amp,60,lt,62,gt would fail in IE.
- Fixed bug where innerHTML sometimes generated unknown runtime error on IE.
- Fixed bug where content_css files wasn't loaded in the template preview iframe.
- Fixed bug where scroll position was incorrect when toggling fullscreen mode.
- Fixed bug where restoration of overflow didn't work correctly when disabling fullscreen mode in Opera.
- Fixed bug where drop menus where places at incorrect locations if the editor was placed in a scrollable container element.
- Fixed bug where hideMenu didn't hide sub menus correctly. It will now hide all menus recursively.
- Fixed so theme_advanced_path_location can be used in init options for compatibility reasons.
- Fixed so the drop menu colors matches the rest of o2k7 theme.
- Fixed so the preview example.html file is updated to the new 3.x API.
- Fixed so the margins are the same by default inside the editable area between IE and other browsers.
- Fixed so editor contents gets stored before it the onSubmit event is fired.
-Version 3.0rc1 (2008-01-08)
- Added new classes for toolbar rows in advanced theme mceToolbarRow1..n enabled you to change appearance of individual rows.
- Added auto detection for the strict_loading_mode option when running in application/xhtml+xml mode on Gecko.
- Optimized the HTML serializer by bundling some post process methods together.
- Fixed so that the toolbars have unique IDs, enables you to alter the toolbars using the ControlManager and the DOM.
- Fixed bug where delta values for dialog sizes in language packs didn't work correctly due to missing string to number casting.
- Fixed bug where paragraph generation logic didn't handle hr or table elements correctly if they where the only element.
- Fixed bug where some elements got extra linebreaks added after or before it in HTML output.
- Fixed bug where it was hard to modify existing style data on table rows and table cells.
- Fixed bug where the dom.getRect method didn't handle non pixel values correctly.
- Fixed bug where strikethrough and underline couldn't be toggled on existing span elements.
- Fixed bug where the postprocessor searched for nsbp instead of nbsp entities.
- Fixed bug where it was impossible to edit links that had child elements within them.
- Fixed bug where it was possible to click on the parent item of a submenu.
- Fixed bug where mouseover/mouseout images couldn't be removed in advimage dialog.
- Fixed bug where drop menus didn't work when running in application/xhtml+xml mode.
- Fixed bug where Opera added doctype to output in application/xhtml+xml mode.
- Fixed bug where some DOM methods didn't work correctly in the application/xhtml+xml mode.
- Fixed bug where the inlinepopups didn't work correctly in the application/xhtml+xml mode.
- Fixed bug where the ColorSplitButton didn't display correctly in the application/xhtml+xml mode.
- Fixed bug where the UI layout was incorrect on Gecko browsers when running in application/xhtml+xml mode.
- Fixed bug where the word paste plugin produced exception while running in application/xhtml+xml mode.
- Fixed bug where there wasn't any hidden input element generated for divs while running in application/xhtml+xml mode.
- Fixed bug where indentation of script/style/pre elements where incorrect.
- Fixed bug where script element contents was removed in IE.
- Fixed bug where script element contents got entity encoded.
- Fixed bug where you couldn't edit existing element styles using the styles plugin.
- Fixed bug where styles wasn't updated properly sometimes due to an performance enhancement.
- Fixed bug where font sizes couldn't be changed using the style plugin.
- Fixed bug where an error was produced in Gecko browsers when switching back from fullscreen mode.
- Fixed bug where Opera was producing br elements after elements like h3.
- Fixed bug where TinyMCE couldn't be loaded on a page using - characters in it's URL.
- Fixed bug where the editor container element was forced to have a specific name.
- Fixed bug with force_br_newlines option on Firefox, even though it should never be used (Read FAQ).
- Fixed bug where onclick event had an return true; prefix added when creating an popup.
- Fixed bug where the theme_advanced_statusbar_location option couldn't handle the value "none".
- Fixed issue with URLs with multiple at characters for example an Zope URI.
- Fixed so simple and advanced themes doesn't collide.
- Fixed so a elements gets removed when the href field is left empty, the href attribute is required in a link after all.
- Fixed so img elements gets removed when the src field is left empty, the src attribute is required for all images after all.
- Removed the indent and encode methods from the tinymce.dom.Serializer class due to performance enhancement and reduction of the API size.
-Version 3.0b3 (2007-12-14)
- Added new getElement method to Editor class, returns the element that was replaced with the editor instance.
- Added new unavailable prefix for disabled controls for accessibility reasons.
- Fixed bug where regexp patterns couldn't be used for the editor_selector/editor_deselector options.
- Fixed bug where the DOM wasn't properly initialized before the onInit event was executed in popups.
- Fixed bug where font sizes where reduced by font size actions on previous spans in Safari.
- Fixed bug where HR elements got places at the wrong location in IE.
- Fixed bug where align/justify didn't work correctly on multiple paragraphs.
- Fixed bug with missing translation for cell scope settings.
- Fixed bug where selection/caret position was lost on some table actions.
- Fixed bug where editor instances couldn't be added to hidden div elements.
- Fixed bug where list elements in Safari would get an odd ID attribute.
- Fixed bug where IE would return <html/> when the editor was completely empty.
- Fixed bug where accessibility title attribute for access keys wasn't setup properly.
- Fixed bug where forecolorpicker and backcolorpicker control names wasn't working.
- Fixed bug where inserting template content didn't work in Safari due to selection exception.
- Fixed bug where absolute URLs to remote hosts couldn't be used for background images.
- Fixed bug where mysterious span elements where produced in Safari when injecting HTML contents.
- Fixed bug where the media plugin didn't work correctly on the latest Opera 9.24.
- Fixed bug where indentation of HTML output wasn't applied to all block elements.
- Fixed bug where Safari was production DOM exception if you pressed enter in an empty editor.
- Fixed bug where media plugin didn't parse script tags correctly patch contributed by Mathieu Campagna.
- Fixed bug where the drop menus of list boxes like blockformat could produce scrolling of the page.
- Fixed bug where the drop menus where placed at an incorrect location if TinyMCE was placed in a scrollable div.
- Fixed bug where submit buttons couldn't be named submit, it's not recommended to name submit buttons submit anyway.
- Fixed bug where the stylelistbox produced an exception if there was only one class in the list box.
- Fixed bug where the stylelistbox wasn't updated correctly when the current class was removed.
- Fixed bug where the formatblock command sometimes removed the body element.
- Fixed bug where fullscreen switching in IE sometimes produced an exception when the spellchecker plugin was enabled.
- Fixed issue where FF produced an empty paragraph when the editor was completely empty.
- Fixed issue with size of image dialog in the advanced theme.
- Fixed issues with the bbcode plugin it now also handles spans and the [font] rule.
- Fixed so the style compression feature is a bit smarter to resolve issues with Opera.
- Reintroduced the remove_linebreaks option, this is enabled by default.
-Version 3.0b2 (2007-11-29)
- Added type and compact attributes to the default valid_elements list for the ul and ol elements.
- Added missing accessibility support to native list boxes in both the toolbar and dialogs.
- Added missing access key for the element path for accessibility reasons.
- Fixed support for loading themes from external URLs.
- Fixed bug where setOuterHTML didn't work correctly when multiple elements where passed to it.
- Fixed bug with visualchars plugin was moving elements around in the DOM.
- Fixed bug with DIV elements that got converted into editors on IE.
- Fixed bug with paste plugin using the old event API.
- Fixed bug where the spellchecker was removing the word when it was ignored.
- Fixed bug where fullscreen wasn't working properly.
- Fixed bug where the base href element and attribute was ignored.
- Fixed bug where redo function didn't work in IE.
- Fixed bug where content_css didn't work as previous 2.x branch.
- Fixed bug where preview dialog was throwing errors if the content_css wasn't defined.
- Fixed bug where the theme_advanced_path option didn't work like the 2.x branch.
- Fixed bug where the theme_advanced_statusbar_location was called theme_advanced_status_location.
- Fixed bug where the strict_loading_mode option didn't work if you created editors dynamically without using the EditorManager.
- Fixed bug where some language values wasn't translated such as insert and update in dialogs.
- Fixed bug where some image attributes wasn't stored correctly when inserting an image.
- Fixed bug where fullscreen mode didn't restore scrollbars when disabled.
- Fixed bug where there was no visual representation for tab focus in toolbars on IE.
- Fixed bug where HR elements wasn't treated as block elements so forced_root_block would fail on these.
- Fixed bug where autosave presented warning message even when the form was submitted normally.
- Fixed typo of openBrower it's now openBrowser in form_utils.js.
- Fixed various HTML problems like missing TD elements and duplicated doctypes.
- Fixed default values for theme_advanced_resize_horizontal, theme_advanced_resizing_use_cookie to be 2.x compatible.
- Moved spellchecker JS files into the development package.
- Removed support for theme_advanced_path_location since the theme_advanced_statusbar_location is the correct option name.
-Version 3.0b1 (2007-11-21)
- Added new tab_focus option, that enables you to specify a element id or that the next element to be focused on tab key down.
- Added new addQueryValueHandler method to the tinymce.Editor class.
- Added new class_filter option, this enables you to specify a function that can filter out CSS classes for the styles list box.
- Added support form [url=url]title[/url] to the bbcode plugin.
- Renamed the addCommandQueryState method in the tinymce.Editor class to addQueryStateHandler.
- Renamed loadQue to loadQueue, to correct spelling.
- Removed the createDOM method from the window manager and replace it with a createInstance method.
- Removed the add to beginning of class attribute parameter of the DOMUtils.addClass method.
- Fixed bug with the forced_root_block option, didn't work correctly with multiple inline elements.
- Fixed bug where image dialogs replaced the current image element with a new one even when it was updated.
- Fixed bug where the submit trigger wasn't executed when divs where converted into editor instances.
- Fixed bug where div elements that got converted into editors didn't get a hidden input element generated for them.
- Fixed bug where the the media_use_script option for the media plugin wasn't working correctly.
- Fixed bug where the font size and font family listboxes wasn't updated correctly on Safari.
- Fixed bug where the height of the fieldset in default image dialog for the advanced theme was to small.
- Fixed bug where the font sizes behaved incorrectly after a cleanup on Safari.
- Fixed bug where formatblock didn't work correctly in Safari on some elements.
- Fixed bug where template plugin didn't insert content correctly unless some options where specified.
- Fixed bug where charmap on Safari produced scrollbars.
- Fixed bug where there was white artifacts in some dialogs due to missing background color.
- Fixed bug where port was added to all external URLs if the editor was loaded from a custom port.
- Fixed bug where the context menus got duplicated on Safari 3.0.4 on Mac OS X.
- Fixed bug where dialogs like paste from word was huge on Firefox.
- Fixed bug with media plugin not working with windows media objects.
- Fixed bug where a forever loop was created if multiple instances where submitted using form.submit.
- Fixed bug with editing a table produce error in IE when inlinepopups where used.
- Fixed bug where the style plugin generated ugly looking style information in IE.
- Fixed bug where the inline dialogs that got opened while in fullscreen mode wasn't visible.
- Fixed bug where it was difficult to place the caret inside the word paste dialog.
- Fixed bug where Opera produced strange border in the word paste dialog.
- Fixed bug where viewport constraints could move a inlinepopup to a negative x, y position if the viewport was to small.
- Fixed bug where template plugin was producing an error due to a deprecated API call.
- Fixed bug where drag drop of images failed in Gecko if a document_base_url was specified.
- Fixed bug where Firefox 3 failed to apply block formats like H1-H6 it still breaks on DIVs this has been reported to bugzilla.
- Fixed bug where IE was producing a warning dialog about non secure items when running TinyMCE over HTTPS.
- Fixed bug where the onbeforeunload event was triggered when menus or dialogs where opened.
- Fixed bug where the fullscreen mode of the HTML view source box threw an error.
- Fixed bug where the mceFocus command didn't work correctly.
- Fixed bug where the selection could get lost in IE using inlinepopups.
- Fixed so the body of the editor area has the mceContentBody class just like the 2.x branch.
- Fixed so the media icon gets active when a media element is selected.
-Version 3.0a3 (2007-11-13)
- Added new experimental jQuery and Prototype framework adapters to the development package.
- Added new translation.html file for the development package. Helps with the internationalization of TinyMCE.
- Added new setup callback option, use this callback to add events to TinyMCE. This method is recommended over the old callbacks.
- Added new API documetation to all classes, functions, events, properties to the Wiki with examples etc.
- Added new init method to all plugins and themes, since it's shorter to write and it mimics interface capable languages better.
- Fixed various CSS issues in the default skin such as alignment of split buttons and separators.
- Fixed issues with mod_security. It didn't like that a content type of text/javascript was forced in a XHR.
- Fixed all events so that they now pass the sender object as it's first argument.
- Fixed some DOM methods so they now can take an array as input.
- Fixed so addButton and the methods of the ControlManager uses less arguments and it now uses a settings object instead.
- Fixed various issues with the tinymce.util.URI class.
- Fixed bug in IE and Safari and the on demand gzip loading feature.
- Fixed bug with moving inline windows sometimes failed in IE6.
- Fixed bug where save_callback function wasn't executed at all.
- Fixed bug where inlinepopups produces scrollbars if windows where moved to the corners of the browser.
- Fixed bug where view HTML source failed when inserting a embedded media object.
- Fixed bug where the listbox menus didn't display correctly on IE6.
- Fixed bug where undo level wasn't added when editor was blurred.
- Fixed bug where spellchecker wasn't disabled when fullscreen mode was enabled.
- Fixed bug where Firefox could crash some times when the user switched to fullscreen mode.
- Fixed bug where tinymce.ui.DropMenu didn't remove all item data when an item was removed from the menu.
- Fixed bug where anchor list in advlink dialog wasn't populated correctly in Safari.
- Fixed bug where it wasn't possible to edit tables in IE when inlinepopups was enabled.
- Fixed bug where it wasn't possible to change the table width of an existing table.
- Fixed bug where xhtmlxtras like abbr didn't work correctly on IE.
- Fixed bug where IE6 had some graphics rendering issues with the inlinepopups.
- Fixed bug where inlinepopup windows where moved incorrectly when they were boundary checked for min width.
- Fixed bug where textareas without id or name couldn't be converted into editor instances.
- Fixed bug where TinyMCE was stealing element focus on IE.
- Fixed bug where the getParam method didn't handle false values correctly.
- Fixed bug where inlinepopups was clipped by other TinyMCE instances or relative elements in IE.
- Fixed bug where the contextmenu was clipped by other TinyMCE instances or relative elements in IE.
- Fixed bug where listbox menus was clipped by other TinyMCE instances or relative elements in IE.
- Fixed bug where listboxes wasn't updated correctly when the a value wasn't found by select.
- Fixed various CSS issues that produced odd rendering bugs in IE.
- Fixed issues with tinymce.ui.DropMenu class, it required some optional settings to be specified.
- Fixed so multiple blockquotes can be removed with a easier method than before.
- Optimized some of the core API to boost performance.
- Removed some functions from the core API that wasn't needed.
-Version 3.0a2 (2007-11-02)
- Fixed critical bug where IE generaded an error on a hasAttribute call in the serialization engine.
- Fixed critical bug where some dialogs didn't open in the non dev package.
- Fixed bug when using the theme_advanced_styles option. Error was thrown in some dialogs.
- Fixed bug where the close buttons produced an error when native windows where used.
- Fixed bug in default skin so that split buttons gets activated correctly.
- Fixed so plugins can be loaded from external urls outsite the plugins directory.
-Version 3.0a1 (2007-11-01)
- Rewrote the core and most of the plugins and themes from scratch.
- Added new and improved serialization engine, faster and more powerful.
- Added new internal event system, things like editor.onClick.add(func).
- Added new inlinepopups plugin, the dialogs are now skinnable and uses clearlooks2 as default.
- Added new contextmenu plugin, context menus can now have submenus and plugins can add items on the fly.
- Added new skin support for the simple and advanced themes you can alter the whole UI using CSS.
- Added new o2k7 skin for the simple and advanced themes.
- Added new custom list boxes for font size/format/style etc with preview support.
- Added new UI management, enabled plugins to create controls like splitbuttons or menus easier.
- Added new JSON parser/serializer and JSON-RPC class to the core API.
- Added new cookie utility class to the core API.
- Added new Unit testing class to the core API only available in dev mode.
- Added new firebug lite integration when loading the dev version of TinyMCE.
- Added new Safari plugin, fixes lots compatibility of issues with Safari 3.x.
- Added new URI/URL parsing it now handles the hole RFC and even some exceptions.
- Added new pagebreak plugin, enables you to insert pagebreak comments like <!-- pagebreak -->
- Added new on demand loading of plugins and themes. Enables you to load and init TinyMCE at any time.
- Added new throbber/progress visualization a plugin can show/hide this when it's needed.
- Added new blockquote button. Enables you to wrap paragraphs in blockquotes.
- Added new compat2x plugin. Will provide a TinyMCE 2.x API for older plugins.
- Added new theme_advanced_resizing_min_width, theme_advanced_resizing_min_height options.
- Added new theme_advanced_resizing_max_height, theme_advanced_resizing_max_height options.
- Added new use_native_selects option. Enables you to toggle native listboxes on and off.
- Added new docs_url option enables you to specify where the TinyMCE user documentation is located.
- Added new frame and rules options for the table dialog.
- Added new global rule for valid_elements/extended_valid_elements enables you to specify global attributes for all elements.
- Added new deny attribute rule characher so it's possible to deny global attribute rules on specific elements.
- Added new unit tests in the dev package of TinyMCE. Runs tests on the core API, commands and settings of the editor.
- Readded the inline_styles option and enabled it by default so deprecated attributes are no longer used.
- Removed all button images and replaced them with CSS sprite images. Reduces the number of requests needed.
- Removed lots of language files and merged them into the base language files. Reduces the number of requests needed.
- Removed lots of unnecessary files and merged many of them together to reduce requests and improve loading speed.
- Reduced the over all script size by 33% and the number of files/requests by 75% so it loads a lot faster.
- Fixed so convert_fonts_to_spans are enabled by default. So no more font tags.
- Fixed so underline and strikethrough uses spans instread of deprecated U and STRIKE elements.
- Fixed so indent/outdent adds/removed margin-left instead of blockquotes.
- Fixed so alignment of paragraphs results in a text-align style value instead of the deprecated align attribute.
- Fixed so alignment of images uses float or vertical-align style values instead of the deprecated align attribute.
- Fixed so all classes from @import stylesheets gets imported into the editor.
- Fixed so the directionality can toggle the dir attribute on and off.
- Fixed so the fullscreen_settings can be used for all types of fullscreen modes.
- Fixed so the advanced HR dialog gets displayed when inserting a HR not only on edit.
- Fixed bug where word wrap didn't work in the source editor on Safari.
- Fixed so non HTML elements can be used within the editor such as <myns:tag>
- Fixed various memory leaks in IE and reduced the unload cleanups needed.
- Fixed so the preformatted option adds an invisible container pre tag inside the editor.
- Renamed the _template plugin to example and updated it to use the new 3.x API.
+Version 3.5.0.1 (2012-05-10)
+ Fixed bug where selection normalization logic would break the selections of parent elements using the element path.
+ Fixed bug where the autolink plugin would include trailing dots in domain names in the link creation.
+ Fixed bug where the autolink plugin would produce an error on older IE versions when pressing enter.
+ Fixed bug where old IE versions would throw an error during initialization when the editor was placed in an size restricted div.
+Version 3.5 (2012-05-03)
+ Fixed menu rendering issue if the document was in rtl mode.
+ Fixed bug where the hide function would throw an error about a missing variable.
+ Fixed bug where autolink wouldn't convert URLs when hitting enter on IE due to the new enter key logic.
+ Fixed bug where formatting using shortcuts like ctrl+b wouldn't work properly the first time.
+ Fixed bug where selection.setContent after a formatter call wouldn't generate formatted contents.
+ Fixed bug where whitespace would be removed before/after invalid_elements when they where removed.
+ Fixed bug where updating styles using the theme image dialog in non inline mode on IE9 would produce errors.
+ Fixed bug where IE 8 would produce an error when using the contextmenu plugin.
+ Fixed bug where delete/backspace could remove contents of noneditable elements.
+ Fixed so background color in style preview gets computed from body element if the current style element is transparent.
+Version 3.5b3 (2012-03-29)
+ Added cancel button to colour picker dialog.
+ Added figure and figcaption to the html5 visualblocks plugin.
+ Added default alignment options for the figure element.
+ Fixed bug where empty inline elements within block elements would sometimes produce a br child element.
+ Fixed bug where urls pointing to the same domain as the current one would cause undefined errors. Patch contributed by Paul Giberson.
+ Fixed bug where enter inside an editable element inside an non editable element would split the element.
+ Fixed bug where cut/copy/paste of noneditable elements didn't work.
+ Fixed bug where backspace would sometimes produce font elements on WebKit.
+ Fixed bug where WebKit would produce spans out of various inline elements when using backspace.
+ Fixed bug where IE9 wouldn't properly update image styles when images where resized.
+ Fixed bug where drag/drop of noneditable elements didn't work correctly.
+ Fixed bug where applying formatting to all contents wouldn't work correctly when an end point was inside an empty bock. Patch contributed by Jose Luiz.
+ Fixed bug where IE10 removed the scopeName from the DOM element interface and there for it produced an undefined string in element path.
+ Fixed bug where the caret would be placed at an incorrect location if you applied block formatting while having the caret at the end of the block.
+ Fixed bug where applying column changes using the cell dialog would only update the first column. Patch contributed by krzyko.
+ Fixed bug where the visualblocks plugin would force editor focus if it was turned on by default.
+ Fixed bug where the tabfocus plugin would tab to iframes these are now ignored.
+ Fixed bug where format drop down list wouldn't show the currently active format for a parent element.
+ Fixed bug where paste of plain text in IE 9 would remove the new line characters from text.
+ Fixed bug where the menu buttons/split button menus wouldn't be opened at the right location on older IE versions.
+ Fixed bug where Gecko browsers wouldn't properly display the right format when having the selection as specific places.
+ Fixed bug where shift+enter inside the body when having forced_root_blocks set to false would throw an error.
+ Fixed bug where the jQuery plugin would break the attr method of jQuery 1.7.2. Patch contributed by Markus Kemmerling.
+ Fixed so options like content_css accepts and array as well as a comma separated string as input.
+ Restructured the internal logic to make it more separate from Editor.js.
+ Updated the Sizzle engine to the latest version.
+Version 3.5b2 (2012-03-15)
+ Rewrote the enter key logic to normalize browser behavior.
+ Fixed so enter within PRE elements produces a BR and shift+enter breaks/end the PRE. Can be disabled using the br_in_pre option.
+ Fixed bug where the selection wouldn't be correct after applying formatting and having the caret at the end of the new format node.
+ Fixed bug where the noneditable plugin would process contents on raw input calls for example on undo/redo calls.
+ Fixed bug where WebKit could produce an exception when a bookmark was requested when there wasn't a proper selection.
+ Fixed bug where WebKit would fail to open the image dialog since it would be returning false for a class name instead of a string.
+ Fixed so alignment and indentation works properly when forced_root_blocks is set to false. It will produce a DIV by default.
+Version 3.5b1 (2012-03-08)
+ Added new event class that is faster and enables support for faking events.
+ Added new self_closing_elements, short_ended_elements, boolean_attributes, non_empty_elements and block_elements options to control the HTML Schema.
+ Added new schema option and support for the HTML5 schema.
+ Added new visualblocks plugin that shows html5 blocks with visual borders.
+ Added new types and selector options to make it easier to create editor instances with different configs.
+ Added new preview of formatting options in various listboxes.
+ Added new preview_styles option that enables control over what gets previewed.
+ Fixed bug where content css would be loaded twice into iframe.
+ Fixed bug where start elements with only whitespace in the attribute part wouldn't be correctly parsed.
+ Fixed bug where the advlink dialog would produce an error about the addSelectAccessibility function not being defined.
+ Fixed bug where the caret would be placed at an incorrect position if span was removed by the invalid_elements setting.
+ Fixed bug where elements inside a white space preserve element like pre didn't inherit the behavior while parsing.
+Version 3.4.9 (2012-02-23)
+ Added settings to wordcount plugin to configure update rate and checking wordcount on backspace and delete using wordcount_update_rate and wordcount_update_on_delete.
+ Fixed bug in Webkit and IE where deleting empty paragraphs would remove entire editor contents.
+ Fixed bug where pressing enter on end of list item with a heading would create a new item with heading.
+ Fixed edit css style dialog text-decoration none checkbox so it disables other text-decoration options when enabled.
+ Fixed bug in Gecko where undo wasn't added when focus was lost.
+ Fixed bug in Gecko where shift-enter in table cell ending with BR doesn't move caret to new line.
+ Fixed bug where right-click on formatted text in IE selected the entire line.
+ Fixed bug where text ending with space could not be unformatted in IE.
+ Fixed bug where caret formatting would be removed when moving the caret when a selector expression was used.
+ Fixed bug where formatting would be applied to the body element when all contents where selected and format had both inline and selector parts.
+ Fixed bug where the media plugin would throw errors if you had iframe set as an invalid element in config.
+ Fixed bug where the caret would be placed at the top of the document if you inserted a table and undo:ed that operation. Patch contributed by Wesley Walser.
+ Fixed bug where content css files where loaded twice into the iframe.
+ Fixed so elements with comments would be trated as non empty elements. Patch contributed by Arjan Scherpenisse.
+Version 3.4.8 (2012-02-02)
+ Fixed bug in IE where selected text ending with space cannot be formatted then formatted again to get original text.
+ Fixed bug in IE where images larger than editor area were being deselected when toolbar buttons are clicked.
+ Fixed bug where wrong text align buttons are active when multiple block elements are selected.
+ Fixed bug where selected link not showing in target field of link dialog in some selection cases.
+ Use settings for remove_trailing_br so this can be turned off instead of hard coding the value.
+ Fixed bug in IE where the media plugin displayed null text when some values aren't filled in.
+ Added API method 'onSetAttrib' that fires when the attribute value on a node changes.
+ Fix font size dropdown value not being updated when text already has a font size in the advanced template.
+ Fixed bug in IE where IE doesn't use ARIA attributes properly on options - causing labels to be read out 2 times.
+ Fixed bug where caret cannot be placed after table if table is at end of document in IE.
+ Fixed bug where adding range isn't always successful so we need to check range count otherwise an exception can occur.
+ Added spacebar onclick handler to toolbar buttons to ensure that the accessibility behaviour works correctly.
+ Fixed bug where a stranded bullet point would get created in WebKit.
+ Fixed bug where selecting text in a blockquote and pressing backspace toggles the style.
+ Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property.
+ Fix white space in between spans from being deleted.
+ Fixed bug where scrollbars where visible in the character map dialog on Gecko.
+ Fixed issue with missing translation for one of the emoticons.
+ Fixed bug where dots in id:s where causing problems. Patch provided by Abhishek Dev.
+ Fixed bug where urls with an at sign in the path wouldn't be parsed correctly. Patch contributed by Jason Grout.
+ Fixed bug where Opera would remove the first character of a inline formatted word if you pressed backspace.
+ Fixed bugs with the autoresize plugin on various browsers and removed the need for the throbber.
+ Fixed performance issue where the contextmenu plugin would try to remove the menu even if it was removed. Patch contributed by mhu.
+Version 3.4.7 (2011-11-03)
+ Modified the caret formatting behavior to word similar to common desktop wordprocessors like Word or Libre Office.
+ Fixed bug in Webkit - Cursor positioning does not work vertically within a table cell with multiple lines of text.
+ Fixed bug in IE where Inserting a table in IE8 places cursor in the second cell of the first row.
+ Fixed bug in IE where editor in a frame doesn't give focus to the toolbar using ALT-F10.
+ Fix for webkit and gecko so that deleting bullet from start of list outdents inner list items and moves first item into paragraph.
+ Fix new list items in IE8 not displayed on a new line when list contains nested list items.
+ Clear formatting in table cell breaks the cell.
+ Made media type list localisable.
+ Fix out of memory error when using prototype in media dialog.
+ Fixed bug where could not add a space in the middle of a th cell.
+ Fixed bug where adding a bullet between two existing bullets adds an extra one
+ Fixed bug where trying to insert a new entry midway through a bulleted list fails dismally when the next entry is tabbed in.
+ Fixed bug where pressing enter on an empty list item does not outdent properly in FF
+ Fixed bug where adding a heading after a list item in a table cell changes all styles in that cell
+ Fixed bug where hitting enter to exit from a bullet list moves cursor to the top of the page in Firefox.
+ Fixed bug where pressing backspace would not delete HRs in Firefox and IE when next to an empty paragraph.
+ Fixed bug where deleting part of the link text can cause a link with no destination to be saved.
+ Fixed bug where css style border widths wasn't handled correctly in table dialog.
+ Fixed bug where parsing invalid html contents on IE or WebKit could produce an infinite loop.
+ Fixed bug where scripts with custom script types wasn't properly passed though the editor.
+ Fixed issue where some Japanese kanji characters wasn't properly entity encoded when numeric entity mode was enabled.
+ Made emoticons dialog use the keyboard naviation.
+ Added navigation instructions to the symbols dialog.
+ Added ability to set default values for the media plugin.
+ Added new font_size_legacy_values option for converting old font element sizes to span with font-size properties.
+ Fixed bug where the symbols dialog was not accessible.
+ Added quirk for IE ensuring that the body of the document containing tinyMCE has a role="application" for accessibility.
+ Fixed bug where the advanced color picker wasn't working properly on FF 7.
+ Fixed issue where the advanced color picker was producing uppercase hex codes.
+ Fixed bug where IE 8 could throw exceptions if the contents contained resizable content elements.
+ Fixed bug where caret formatting wouldn't be correctly applied to previous sibling on WebKit.
+ Fixed bug where the select boxes for font size/family would loose it's value on WebKit due to recent iOS fixes.
+Version 3.4.6 (2011-09-29)
+ Fixed bug where list items were being created for empty divs.
+ Added support in Media plugin for audio media using the embed tag
+ Fixed accessibility bugs in WebKit and IE8 where toolbar items were not being read.
+ Added new use_accessible_selects option to ensure accessible list boxes are used in all browsers (custom widget in firefox native on other browsers)
+ Fixed bug where classid attribute was not being checked from embed objects.
+ Fixed bug in jsrobot tests with intermittently failing.
+ Fixed bug where anchors wasn't updated properly if you edited them using IE 8.
+ Fixed bug where input method on WebKit on Mac OS X would fail to initialize when sometimes focusing the editor.
+ Fixed bug where it wasn't possible to select HR elements on WebKit by simply clicking on them.
+ Fixed bug where the media plugin wouldn't work on IE9 when not using the inlinepopups plugin.
+ Fixed bug where hspace,vspace,align and bgcolor would be removed from object elements in the media plugin.
+ Fixed bug where the new youtube format wouldn't be properly parsed by the media plugin.
+ Fixed bug where the style attribute of layers wasn't properly updated on IE and Gecko.
+ Fixed bug where editing contents in a layer would fail on Gecko since contentEditable doesn't inherit properly.
+ Fixed bug where IE 6/7 would produce JS errors when serializing contents containing layers.
+Version 3.4.5 (2011-09-06)
+ Fixed accessibility bug in WebKit where the right and left arrow keys would update native list boxes.
+ Added new whitespace_elements option to enable users to specify specific elements where the whitespace is preserved.
+ Added new merge_siblings option to formats. This option makes it possible to disable the auto merging of siblings when applying formats.
+ Fixed bug in IE where trailing comma in paste plugin would cause plugin to not run correctly.
+ Fixed bug in WebKit where console messages would be logged when deleting an empty document.
+ Fixed bug in IE8 where caret positioned is on list item instead of paragraph when outdent splits the list
+ Fixed bug with image dialogs not inserting an image if id was omitted from valid_elements.
+ Fixed bug where the selection normalization logic wouldn't properly handle image elements in specific config cases.
+ Fixed bug where the map elements coords attribute would be messed up by IE when serializing the DOM.
+ Fixed bug where IE wouldn't properly handle custom elements when the contents was serialized.
+ Fixed bug where you couldn't move the caret in Gecko if you focused the editor using the API or a UI control.
+ Fixed bug where adjacent links would get merged on IE due to bugs in their link command.
+ Fixed bug where the color split buttons would loose the selection on IE if the editor was placed in a frame/iframe.
+ Fixed bug where floated images in WebKit wouldn't get properly linked.
+ Fixed bug where the fullscreen mode in a separate window wasn't forced into IE9+ standards mode.
+ Fixed bug where pressing enter in an empty editor on WebKit could produce DIV elements instead of P.
+ Fixed bug where spans would get removed incorrectly when merging two blocks on backspace/delete on WebKit.
+ Fixed bug where the editor contents wouldn't be completely removed on backspace/delete on WebKit.
+ Fixed bug where the fullpage plugin wouldn't properly render style elements in the head on IE 6/7.
+ Fixed bug where the nonbreaking_force_tab option in the nonbreaking plugin wouldn't work on Gecko/WebKit.
+ Fixed bug where the isDirty state would become true on non IE browsers if there was an table at the end of the contents.
+ Fixed bug where entities wasn't properly encoded on WebKit when pasting text as plain text.
+ Fixed bug where empty editors would produce an exception of valid_elements didn't include body and forced_root_blocks where disabled.
+ Fixed bug where the fullscreen mode wouldn't retain the header/footer in the fullpage plugin.
+ Fixed issue where the plaintext_mode and plaintext_mode_sticky language keys where swapped.
+Version 3.4.4 (2011-08-04)
+ Added new html5 audio support. Patch contributed by Ronald M. Clifford.
+ Added mute option for video elements and preload options for video/audio patch contributed by Dmitry Kalinkin.
+ Fixed selection to match visual selection before applying formatting changes.
+ Fixed browser specific bugs in lists for WebKit and IE.
+ Fixed bug where IE would scroll the window if you closed an inline dialog that was larger than the viewport. Patch by Laurence Keijmel.
+ Fixed bug where pasting contents near a span element could remove parts of that span. Patch contributed by Wesley Walser.
+ Fixed bug where formatting change would be lost after pressing enter.
+ Fixed bug in WebKit where deleting across blocks would add extra styles.
+ Fixed bug where moving cursor vertically in tables in WebKit wasn't working.
+ Fixed bug in IE where deleting would cause error in console.
+ Fixed bug where the formatter was not applying formats across list elements.
+ Fixed bug where the wordcount plugin would try and update the wordcount if tinymce had been destroyed.
+ Fixed bug where tabfocus plugin would attempt to focus elements not displayed when their parent element was hidden.
+ Fixed bug where the contentEditable state would sometimes be removed if you deleted contents in Gecko.
+ Fixed bug where inserting contents using mceInsertContent would fail if "span" was disabled in valid_elements.
+ Fixed bug where initialization might fail if some resource on gecko wouldn't load properly and fire the onload event.
+ Fixed bug where ctrl+7/8/9 keys wouldn't properly add the specific formats associated with them.
+ Fixed bug where the HTML tags wasn't properly closed in the style plugins properties dialog.
+ Fixed bug where the list plugin would produce an exception if the user tried to delete an element at the very first location.
+Version 3.4.3.2 (2011-06-30)
+ Fixed bug where deleting all of a paragraph inside a table cell would behave badly in webkit.
+ Fixed bugs in tests in firefox5 and WebKit.
+ Fixed bug where selection of table cells would produce an exception on Gecko.
+ Fixed bug where the caret wasn't properly rendered on Gecko when the editor was hidden.
+ Fixed bug where pasting plain text into WebKit would produce a pre element it will now produce more semantic markup.
+ Fixed bug where selecting list type formats using the advlist plugin on IE8 would loose editor selection.
+ Fixed bug where forced root blocks logic wouldn't properly pad elements created if they contained data attributes.
+ Fixed bug where it would remove all contents of the editor if you inserted an image when not having a caret in the document.
+ Fixed bug where the YUI compressor wouldn't properly encode strings with only a quote in them.
+ Fixed bug where WebKit on iOS5 wouldn't call nodeChanged when the selection was changed.
+ Fixed bug where mceFocus command wouldn't work properly on Gecko since it didn't focus the body element.
+ Fixed performance issue with the noneditable plugin where it would enable/disable controls to often.
+Version 3.4.3.1 (2011-06-16)
+ Fixed bug where listboxes were not being handled correctly by JAWS in firefox with the o2k7 skin.
+ Fixed bug where custom buttons were not being rendered correctly when in high contrast mode.
+ Added support for iOS 5 that now supporting contentEditable in it's latest beta.
+ Fixed bug where urls in style attributes with a _ character followed by a number would cause incorrect output.
+ Fixed bug where custom_elements option wasn't working properly on IE browsers.
+ Fixed bug where custom_elements marked as block elements wouldn't get correctly treated as block elements.
+ Fixed bug where attributes with </> wasn't properly encoded as XML entities.
+Version 3.4.3 (2011-06-09)
+ Fixed bug where deleting backwards before an image into a list would put the cursor in the wrong location.
+ Fixed bug where styles plugin would not apply styles across multiple selected block elements correctly.
+ Fixed bug where cursor would jump to start of document when selection contained empty table cells in IE8.
+ Fixed bug where applied styles wouldn't be kept if you pressed enter twice to produce two paragraphs.
+ Fixed bug where a ghost like caret would appear on Gecko when pressing enter while having a text color applied.
+ Fixed bug where IE would produce absolute urls if you inserted a image/link and reloaded the page.
+ Fixed bug where applying a heading style to a list item would cascade style to children list items.
+ Fixed bug where Editor loses focus when backspacing and changing styles in WebKit.
+ Fixed bug where exception was thrown in tinymce.util.URI when parsing a relative URI and no base_uri setting was provided.
+ Fixed bug where alt-f10 was not always giving focus to the toolbar on Safari.
+ Added new 'allow_html_in_named_anchor' option to allow html to occur within a named anchor tag. Use at own risk.
+ Added plugin dependency support. Will autoload plugins specified as a dependency if they haven't been loaded.
+ Fixed bug where the autolink plugin didn't work with non-English keyboards when pressing ).
+ Added possibility to change properties of all table cells in a column.
+ Added external_image_list option to get images list from user-defined variable or function.
+ Fixed bug where the autoresize plugin wouldn't reduce the editors height on Chrome.
+ Fixed bug where table size inputs were to small for values with size units.
+ Fixed bug where table cell/row size input values were not validated.
+ Fixed bug where menu item line-height would be set to wrong value by external styles.
+ Fixed bug where hasUndo() would return wrong answer.
+ Fixed bug where page title would be set to undefined by fullpage plugin.
+ Fixed bug where HTML5 video properties were not updated in embedded media settings.
+ Fixed bug where HTML comment on the first line would cause an error.
+ Fixed bug where spellchecker menu was positioned incorrectly on IE.
+ Fixed bug where breaking out of list elements on WebKit would produce a DIV instead of P after the list.
+ Fixed bug where pasting from Word in IE9 would add extra BR elements when text was word wrapped.
+ Fixed bug where numeric entities with leading zeros would produce incorrect decoding.
+ Fixed bug where hexadecimal entities wasn't properly decoded.
+ Fixed bug where bookmarks wasn't properly stored/restored on undo/redo.
+ Fixed bug where the mceInsertCommand didn't retain the values of links if they contained non url contents.
+ Fixed bug where the valid_styles option wouldn't be properly used on styles for specific elements.
+ Fixed so contentEditable is used for the body of the editor if it's supported.
+ Fixed so trailing BR elements gets removed even when forced_root_blocks option was set to false/null.
+ Fixed performance issue with mceInsertCommand and inserting very simple contents.
+ Fixed performance issue with older IE version and huge documents by optimizing the forced root blocks logic.
+ Fixed performance issue with table plugin where it checked for selected cells to often.
+ Fixed bug where creating a link on centered/floated image would produce an error on WebKit browsers.
+ Fixed bug where Gecko would remove single paragraphs if there where contents before/after it.
+ Fixed bug where the scrollbar would move up/down when pasting contents using the paste plugin.
+Version 3.4.2 (2011-04-07)
+ Added new 'paste_text_sticky_default' option to paste plugin, enables you to set the default state for paste as plain text.
+ Added new autoresize_bottom_margin option to autoresize plugin that enables you to add an extra margin at the bottom. Patch contributed by Andrew Ozz.
+ Rewritten the fullpage plugin to handle style contents better and have a more normalized behavior across browsers.
+ Fixed bug where contents inserted with mceInsertContent wasn't parsed using the default dom parser.
+ Fixed bug where blocks containing a single anchor element would be treated as empty.
+ Fixed bug where merging of table cells on IE 6, 7 wouldn't look correctly until the contents was refreshed.
+ Fixed bug where context menu wouldn't work properly on Safari since it was passing out the ctrl key as pressed.
+ Fixed bug where image border color/style values were overwritten by advimage plugin.
+ Fixed bug where setting border in advimage plugin would throw error in IE.
+ Fixed bug where empty anchors list in link settings wasn't hidden.
+ Fixed bug where xhtmlextras popups were missing localized popup-size parameters.
+ Fixed bug where the context menu wouldn't select images on WebKit browsers.
+ Fixed bug where paste plugin wouldn't properly extract the contents on WebKit due to recent changes in browser behavior.
+ Fixed bug where focus of the editor would get on control contents on IE lost due to a bug in the ColorSplitButton control.
+ Fixed bug where contextmenu wasn't disabled on noneditable elements.
+ Fixed bug where getStyle function would trigger error when called on element without style property.
+ Fixed bug where editor fail to load if Javascript Compressor was used.
+ Fixed bug where list-style-type=lower-greek would produce errors in IE<8.
+ Fixed bug where spellchecker plugin would produce errors on IE6-7.
+ Fixed bug where theme_advanced_containers configuration option causes error.
+ Fixed bug where the mceReplaceContent command would produce an error since it didn't correctly handle a return value.
+ Fixed bug where you couldn't enter float point values for em in dialog input fields since it wouldn't be considered a valid size.
+ Fixed bug in xhtmlxtras plugin where it wasn't possible to remove some attributes in the attributes dialog.
+Version 3.4.1 (2011-03-24)
+ Added significantly improved list handling via the new 'lists' plugin.
+ Added 'autolink' plugin to enable automatically linking URLs. Similar to the behavior IE has by default.
+ Added 'theme_advanced_show_current_color' setting to enable the forecolor and backcolor buttons to continuously show the current text color.
+ Added 'contextmenu_never_use_native' setting to disable the ctrl-right-click showing the native browser context menu behaviour.
+ Added 'paste_enable_default_filters' setting to enable the default paste filters to be disabled.
+ Fixed bug where selection locations on undo/redo didn't work correctly on specific contents.
+ Fixed bug where an exception would be trown on IE when loading TinyMCE inside an iframe.
+ Fixed bug where some ascii numeric entities wasn't properly decoded.
+ Fixed bug where some non western language codes wasn't properly decoded/encoded.
+ Fixed bug where undo levels wasn't created when deleting contents on IE.
+ Fixed bug where the initial undo levels bookmark wasn't updated correctly.
+ Fixed bug where search/replace wouldn't be scoped to editor instances on IE8.
+ Fixed bug where IE9 would produce two br elements after block elements when pasting.
+ Fixed bug where IE would place the caret at an incorrect position after a paste operation.
+ Fixed bug where a paste operation using the keyboard would add an extra undo level.
+ Fixed bug where some attributes/elements wasn't correctly filtered when invalid contents was inserted.
+ Fixed bug where the table plugin couldn't correctly handle invalid table structures.
+ Fixed bug where charset and title of the page were handled incorrectly by the fullpage plugin.
+ Fixed bug where toggle states on some of the list boxes didn't update correctly.
+ Fixed bug where sub/sub wouldn't work correctly when done as a caret action in Chrome 10.
+ Fixed bug where the constrain proportions checkbox wouldn't work in the media plugin.
+ Fixed bug where block elements containing trailing br elements wouldn't treated properly if they where invalid.
+ Fixed bug where the color picker dialog wouldn't be rendered correctly when using the o2k7 theme.
+ Fixed bug where setting border=0 using advimage plugin invalid style attribute content was created in Chrome.
+ Fixed bug with references to non-existing images in css of fullpage plugin.
+ Fixed bug where item could be unselected in spellchecker's language selector.
+ Fixed bug where some mispelled words could be not highlighted using spellchecker plugin.
+ Fixed bug where spellchecking would merge some words on IE.
+ Fixed bug where spellchecker context menu was not always positioned correctly.
+ Fixed bug with empty anchors list in advlink popup when Invisible Elements feature was disabled.
+ Fixed bug where older IE versions wouldn't properly handle some elements if they where placed at the top of editor contents.
+ Fixed bug where selecting the whole table would enable table tools for cells and rows.
+ Fixed bug where it wasn't possible to replace selected contents on IE when pasting using the paste plugin.
+ Fixed bug where setting text color in fullpage plugin doesn't work.
+ Fixed bug where the state of checkboxes in media plugin wouldn't be set correctly.
+ Fixed bug where black spade suit character was not included in special character selector.
+ Fixed bug where setting invalid values for table cell size would throw an error in IE.
+ Fixed bug where spellchecking would remove whitespace characters from PRE block in IE.
+ Fixed bug where HR was inserted inside P elements instead of splitting them.
+ Fixed bug where extra, empty span tags were added when using a format with both selector and inline modes.
+ Fixed bug where bullet lists weren't always detected correctly.
+ Fixed bug where deleting some paragraphs on IE would cause an exception.
+ Fixed bug where the json encoder logic wouldn't properly encode \ characters.
+ Fixed bug where the onChange event would be fired when the editor was first initialized.
+ Fixed bug where mceSelected wouldn't be removed properly from output even if it's an internal class.
+ Fixed issue with table background colors not being transparent. This improves compliance with users browser color preferences.
+ Fixed issue where styles were not included when using the full page plugin.
+ Fixed issue where drag/drop operations wasn't properly added to the undo levels.
+ Fixed issue where colors wasn't correctly applied to elements with underline decoration.
+ Fixed issue where deleting some paragraphs on IE would cause an exception.
+Version 3.4 (2011-03-10)
+ Added accessibility example with various accessibility options contributed by Ephox.
+ Fixed bug where attributes wasn't properly handled in the xhtmlxtras plugin.
+ Fixed bug where the image.htm had some strange td artifacts probably due to auto merging.
+ Fixed bug where the ToolbarGroup had an missing reference to this in it's destroy method.
+ Fixed bug with the resizeBy function in the advanced theme where it was scaled by the wrong parent.
+ Fixed bug where an exception would be thrown by the element if the page was served in xhtml mode.
+ Fixed bug where mceInsertContent would throw an exception when page was served in xhtml mode.
+ Fixed bug where you couldn't select a forground/background color when page was served in xhtml mode.
+ Fixed bug where the editor would scroll to the toolbar when clicked due to a call to focus in ListBox.
+ Fixed bug where pages with rtl dir wouldn't render split buttons correctly when using the o2k7 theme.
+ Fixed bug where anchor elements with names wasn't properly collapsed as they where in 3.3.x.
+ Fixed bug where WebKit wouldn't properly handle image selection if it was done left to right.
+ Fixed bug where the formatter would align images when the selection range was collapsed.
+ Fixed bug where the image button would be active when the selection range was collapsed.
+ Fixed bug where the element_format option wasn't used by the new (X)HTML serializer logic.
+ Fixed bug where the table cell/row dialogs would produce empty attributes.
+ Fixed bug where the tfoot wouldn't be added to the top of the table.
+ Fixed bug where the formatter would merge siblings with white space between them.
+ Fixed bug where pasting headers and paragraphs would produce an extra paragraph.
+ Fixed bug where the ColorSplitButton would throw an exception if you clicked out side a color.
+ Fixed bug where IE9 wouldn't properly produce new paragraphs on enter if the current paragraph had formatting.
+ Fixed bug where multiple BR elements at end of block elements where removed.
+ Fixed bug where fullscreen plugin wouldn't correctly display the edit area on IE6 for long pages.
+ Fixed bug where paste plugin wouldn't properly encode raw entities when pasting in plain text mode.
+ Fixed bug where the search/replace plugin wouldn't work correctly on IE 9.
+ Fixed so the drop menus doesn't get an outline border visible when focused, patch contributed by Ephox.
+ Fixed so the values entered in the color picker are forced to hex values.
+ Removed dialog workaround for IE 9 beta since the RC is now out and people should upgrade.
+ Removed obsolete calls in various plugins to the mceBeginUndoLevel command.
+Version 3.4b3 (2011-02-10)
+ Added WAI-ARIA support for the main UI and dialogs this feature was contributed by Ephox.
+ Added iframe support to media plugin in order to handle the new YouTube HTML5 video formats.
+ Fixed bug where anchors would wrap the text contents after it due to a bug in the DomParser logic.
+ Fixed bug where the selected state wouldn't be removed on ListBox controls when a menu item was selected.
+ Fixed bug where IE could throw an unspecified error exception when the getBookmark logic was executed.
+ Fixed bug where IE would throw an invalid argument error when focus was applied to an empty editor instance.
+ Fixed bug where applying inline format wouldn't work if the start cell in the selection was empty.
+ Fixed bug where auto detection logic for YouTube and Google Video wouldn't work in the new media plugin.
+ Fixed bug where td elements would get a colspan/rowspan of 1 when created by the table plugin.
+ Fixed bug where removal/padding of empty elements wasn't handled correctly.
+ Fixed bug where internal elements would show up in element path.
+ Fixed bug where internal elements would get serialized as valid output.
+ Fixed bug where color wasn't correctly applied to anchor elements.
+ Fixed bug where float option in the style plugin dialog wouldn't be handled correctly on WebKit.
+ Fixed bug where the tinymce.dom.TreeWalker prev function wouldn't walk the DOM correctly.
+ Fixed bug where mceInsertContent command could produce empty block elements after the inserted content.
+ Fixed bug where mceInsertContent command wouldn't apply visual aids on tables and similar elements.
+ Fixed bug where empty block elements would get double br bogus elements in them.
+ Fixed bug where the color menu wouldn't apply the color correctly on IE when the viewport was to small.
+ Fixed bug where right clicking out side the body element of the editor iframe would prevent paste from working on IE.
+ Fixed bug where the onContextMenu event wouldn't fire correctly on IE if you clicked out side the body element.
+ Fixed bug where the onContextMenu event wouldn't fire correctly on modern Opera versions that now support it by default.
+ Fixed bug where legacy content wasn't converted correctly when inserted using mceInsertContent or through the source dialog.
+ Fixed bug where resizing images or tables wouldn't update the style attribute correctly or leave data-mce prefixed attributes.
+ Fixed bug where adding links wouldn't work correctly when using TinyMCE jQuery version with jQuery 1.5.
+ Fixed bug where single quotes inside param elements wasn't treated correctly by the media plugin.
+ Fixed bug where pasting plain text in WebKit wouldn't work correctly. It will now auto detect the WebKit bug and use plain text mode.
+ Fixed bug where the DomParser would fail to move out invalid elements within invalid elements on complex contents.
+ Fixed bug where paste as plain text would not decode html entities properly.
+ Fixed bug where large paragraphs would cause incorrect scrolling behavior if you would split them using enter.
+ Fixed bug where the SaxParser wouldn't properly parse some specific short ended elements.
+ Fixed so mceReplaceContent supports caret position and makes sure that the contents inserted gets validated.
+ Fixed so unnecessary traling br elements in blocks gets removed on Gecko/WebKit when using mceInsertContent command.
+ Moved some plugin css contents into the skin content css files to reduce the number of http requests.
+ Moved some plugin specific images into the theme img directory since they can then be shared.
+Version 3.4b2 (2011-01-13)
+ Added new custom flash player, this player supports mp4 and flv and has skin support.
+ Fixed so mceInsertContent handles context correctly to enforce valid nesting of elements.
+ Fixed bug where scrolling would become jerky on IE on some contents.
+ Fixed bug where paste as plain text would throw exception of missing entities setting.
+ Fixed bug where anchor nodes where removed by the new serializer engine.
+ Fixed bug where IE would crash if when backspace where used on some specific contents.
+ Fixed bug where pasting of plain text in WebKit would result in merging of text lines.
+ Fixed bug where it wasn't possible to delete images or tables using backspace on IE9.
+ Fixed bug where urls in styles would generate a JS error due to incorrect scope.
+ Fixed bug where copy paste from Java applications would produce extra contents in FF on Mac.
+ Fixed bug where the verify_html option wouldn't allow all elements and attributes.
+Version 3.4b1 (2010-12-20)
+ Added new serialization engine that increases performance and enforces valid output according to the specified schema settings.
+ Added new HTML parser logic used by the serialization engine and can handle malformed html contents.
+ Added new valid_children config option, enables more fine grain control of elements can be inside other elements.
+ Added new entities encoding logic boost performance and will only encode entities based on context i.e. attributes/text nodes.
+ Added new protect setting that enables users to protect template items from being removed by the serializer logic.
+ Added new {$caret} marker for the mceInsertContent command. Makes it possible to move the caret to a specific position when inserting contents.
+ Added new validation of anchor names. Only valid W3C names will be accepted.
+ Replaced the internal _mce_ prefixed attributes to the more standard HTML5 data-mce- prefix. This will also resolve future browser santiaztion issues.
+ Fixed bug where the paste plugin wouldn't convert Word lists with more than 9 items to real ol lists. Patch contributed by Mike (yogaboy).
+ Fixed bug where clicking on a format title would produce errors if the current selection didn't have any formats.
+ Fixed bug where paste of simple texts wouldn't work correctly in Gecko using the paste plugin since it keeps block formatting.
+ Fixed bug where confirm dialogs didn't display correctly due to resent IE9 fixes.
+ Fixed bug where spaces in URLs wouldn't be properly encoded to %20 if the user entered them in the link dialogs. Patch contributed by Ephox.
+ Fixed bug where the image alignment buttons wouldn't reposition the resize handles on FF due to a browser issue. Patch contributed by Ephox.
+ Fixed bug where the compareBoundaryPoints method of the IE Range class didn't work correctly. Patch contributed by Ephox.
+ Fixed bug where selection of elements using double click wouldn't select the clicked element but rather the parent node on FF. Patch contributed by Ephox.
+ Fixed bug where IE would scroll the user to the current selection causing parent document to scroll as well. Patch contributed by Ephox.
+ Fixed bug where style compression would incorrectly compress items with different values. It now only compresses if the values are the same. Patch contributed by Ephox.
+ Fixed bug where FF would add non breaking spaces outside TD elements if formatting was applied to table cells. Patch contributed by Ephox.
+ Fixed bug where the caret position would be lost on WebKit browsers if you pasted images multiple times. Patch contributed by Ephox.
+ Fixed bug where non word contents like * would be counted as words in the wordcount pluging. Patch contributed by David Balatero.
+ Fixed bug where the toggle absolute button in the layer plugin wouldn't remove the existing internal style attribute first.
+ Fixed bug where the autosave plugin would generate an exception on IE if the user had disabled userdata persistence.
+ Fixed bug where the paste plugin would remove dashed classes on IE since the regexps didn't include that character.
+ Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
+ Fixed bug where applying block formats to empty elements wouldn't render correctly on IE.
+ Fixed bug where the searchreplace plugin would add a f or r character when shortcuts where used on IE while using default dialogs.
+ Fixed bug where Opera wouldn't load scripts correctly since the onreadystate would fire even though the script wasn't loaded.
+ Fixed issue where &nbsp; wouldn't be handled correctly in the bbcode plugin if entity_encoding was set to raw.
+ Fixed issue where contents would flicker since the content css files where asynchronously loaded.
+ Fixed bug where WebKit wouldn't create links on images with a float style.
+Version 3.3.9.3 (2010-12-20)
+ Fixed issue where WebKit wouldn't correctly apply ins/del in xhtmlxtras plugin.
+ Fixed bug where paste as plaintext on WebKit wouldn't produce br and p elements correctly.
+ Fixed bug where the confirm dialog texts would be incorrectly placed due to recent IE 9 workarounds in the window.css.
+ Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
+Version 3.3.9.2 (2010-09-29)
+ Fixed bug where placing the caret in IE 9 beta 1 would not work correctly if you clicked out side the document body element.
+ Fixed bug where IE 9 beta 1 wouldn't resize the editor correctly since the events didn't fire as previous versions did.
+ Fixed bug where FF would produce an error message when being rendered inside a hidden div element.
+ Fixed bug where resize logic could produce a cookie with a width/height less than the size of the container.
+ Fixed bug where content_css wouldn't populate the styles dropdown correctly.
+Version 3.3.9.1 (2010-09-23)
+ Fixed bug where WebKit browsers wouldn't activate the image button when images where selected.
+ Fixed bug where Opera Presto 10.60 deletes elements when restoring bookmarks.
+ Fixed bug where IE9 beta1 doesn't handle regexp replacement values correctly.
+ Fixed bug where IE9 beta1 didn't render the inline dialogs correctly due to a bug with CSS clip.
+ Fixed bug where IE9 beta1 would produce error messages on load since they removed the document.recalc method.
+ Fixed bug where IE9 beta1 would produce <html xmlns=""> since they haven't implemented document.implementation.createDocument correctly.
+ Fixed bug where IE9 beta1 would searchreplace doesn't work since their native DOM Range doesn't have a find method.
+ Fixed bug where IE9 beta1 would render the source view incorrectly due to incorrect viewport size measurements.
+ Fixed bug where IE9 beta1 would crash when running the basic functionality unit tests.
+ Fixed bug where IE9 beta1 would wrap elements in blocks correctly due to changes to the selection object.
+ Fixed bug where IE9 beta1 would fail to insert contents since they havn't implemented the createContextualFragment method in their DOM Range.
+ Fixed bug where IE9 beta1 would fail to handle image selection since they currently doesn't support control selections in their DOM Range.
+ Fixed bug where IE9 beta1 would fail to load scripts since they fire the onload event before the scripts are parsed and executed.
+Version 3.3.9 (2010-09-08)
+ Fixed bug where inserting table rows into a table with subtable would produce an incorrect column count.
+ Fixed bug where the selection of cells in a table with subtables could produce invalid selections.
+ Fixed bug where the table plugin would produce a script error if you tried to move the caret before a first child table.
+ Fixed bug where the keep_styles feature on IE would move the caret to an incorrect location at the end of list blocks.
+ Fixed so attributes from legacy elements such as font gets retained when they get converted to spans.
+ Fixed minor issue where the select boxes wouldn't be set the not set by default in the table dialog.
+Version 3.3.8 (2010-06-30)
+ On IE8+ and FireFox 3.5+, dragging an image now correctly adds an undo
+ event.
+ Fixed bug where WebKit would not move the caret to a correct position after a paste operation.
+ Fixed bug where WebKit would produce a div wrapper element when pasting some contents.
+ Fixed bug where the visual chars and nonbreaking plugin wouldn't show nbsp elements correctly.
+ Fixed bug where the format states would be enabled even after the format was removed.
+ Fixed bug where the delete key would move the caret to an incorrect position.
+ Fixed bug where it wasn't possible to toggle of the current font size/family/style by clicking the title item.
+ Fixed bug where the abbr element wouldn't get serialized correctly on IE6.
+ Fixed so that the examples checks if they are executed from the local file system since that might not work properly.
+Version 3.3.7 (2010-06-10)
+ Fixed bug where context menu would produce an error on IE if you right clicked twice and left clicked once.
+ Fixed bug where resizing of the window on WebKit browsers in fullscreen mode wouldn't position the statusbar correctly.
+ Fixed bug where IE would produce an error if the editor was empty and you where undoing to that initial level.
+ Fixed bug where setting the table background on gecko would produce \" entities inside the url style property.
+ Fixed bug where the button states wouldn't be updated correctly on IE if you placed the caret inside the new element.
+ Fixed bug where undo levels wasn't properly added after applying styles or font sizes.
+ Fixed bug where IE would throw an error if you used "select all" on empty elements and applied formatting to that.
+ Fixed bug where IE could select one extra character when you did a bookmark call on a caret location.
+ Fixed bug where IE could produce a script error on delete since it would sometimes produce an invalid DOM.
+ Fixed bug where IE would return the wrong start element if the whole element was selected.
+ Fixed bug where formatting states wasn't updated on IE if you pressed enter at the end of a block with formatting.
+ Fixed bug where submenus for the context menu wasn't removed correctly when the editor was destroyed.
+ Fixed bug where Gecko could select the wrong element after applying format to multiple elements.
+ Fixed bug where Gecko would delete parts of the previous element if the selection range was a element selection.
+ Fixed bug where Gecko would not merge paragraph elements correctly if they contained br elements.
+ Fixed bug where the cleanup button could produce span artifacts if you pressed it twice in a row.
+ Fixed bug where the fullpage plugin header/footer would be have it's header reseted to it's initial state on undo.
+ Fixed bug where an empty paragraph would be collapsed if you performed a cleanup while having the caret inside it.
+ Fixed a few memory leaks on IE especially with drop menus in listboxes and the spellchecker.
+ Fixed so formats applied to the current caret gets merged to reduce the number of output elements.
+ Added the latest version of Sizzle for the CSS selector logic to fix a compatibility issue with prototype.
+Version 3.3.6 (2010-05-20)
+ Fixed bug where a editor.focus call could produce errors on IE in very specific scenarios.
+ Fixed bug where Gecko would produce an error if you unformatted text inside an empty element.
+ Fixed bug where IE would produce an error if the caret was placed before a table and you used the align buttons.
+ Fixed bug where the font size drop down didn't display the a preview correctly.
+ Fixed bug where the paste plugin wouldn't include all contents some times on WebKit browsers.
+ Fixed bug where the plain text mode toggle wouldn't work properly on WebKit.
+ Fixed bug where the editors statusbar would become invisible when you resized the window in fullscreen mode.
+Version 3.3.5.1 (2010-05-07)
+ Fixed a critical bug with the fullscreen plugin. Produced error messages when the state was toggled on/off.
+Version 3.3.5 (2010-05-06)
+ Added new merge_with_parents option to formats, enables the control of removal of elements with similar parents.
+ Fixed so the default behavior for applying classes isn't a toggle state but the old behavior from before the 3.3 release.
+ Fixed bug where selecting contents using double click on Gecko would produce errors when using removing format.
+ Fixed bug where the IE DOM could get messed up when non valid contents was pasted into the editor.
+ Fixed bug where merging selected table cells using the context menu didn't work as expected.
+ Fixed bug where some nestled formatting would be applied incorrectly.
+ Fixed bug with enter in list items when using the force_br_newlines mode on WebKit patch contributed by Ryan Koopmans.
+ Fixed bug where undo/redo could produce js errors on some specific operations.
+ Fixed bug where the theme_advanced_font_sizes didn't work as before 3.3 when complex settings where used.
+ Fixed bug where the table plugin would copy cell/row id attributes when making new rows/cells.
+Version 3.3.4 (2010-04-27)
+ Fixed bug where fullscreen plugin would add two editor instances to EditorManager collection.
+ Fixed bug where it was difficult to enter text on non western languages such as Japanese on IE.
+ Fixed bug where removing contents from nodes could result in an exception when using undo/redo.
+ Fixed bug with selection of images inside layers or other resizable containers on IE.
+ Fixed so editors isn't initialized on iPhone/iPad devices since they don't have caret support.
+Version 3.3.3 (2010-04-19)
+ Added new script_loaded callback function setting for the jQuery plugin.
+ Added various fixes and new rpc methods for the spellchecker plugin. Patch contributed by Michael Peters.
+ Removed some unnecessary inline style information from some of the dialogs.
+ Fixed some issues with the chaining for the TinyMCE jQuery plugin.
+ Fixed so any extra arguments passed to patched jQuery functions gets passed through. Patch contributed by Lee Henson.
+ Fixed so spellchecking/contextmenu can be toggled on/off if the browser has native spellchecker support.
+ Fixed bug where some texts in the new paste plugin wasn't placed in language pack.
+ Fixed bug where IE would produce an incorrect information message when cutting.
+ Fixed bug where removing items using the xhtmlxtras plugin wouldn't work correctly.
+ Fixed bug where setting table background images would add extra quotes on Gecko.
+ Fixed bug where shortcut for bold/italic/underline wouldn't work properly on WebKit.
+ Fixed bug where IE would produce an error message if only contents was an image tag and bold was used.
+ Fixed bug where the caret would move if alignment was applied to empty block elements.
+ Fixed bug where some shortcut key commands wouldn't apply formatting correctly.
+Version 3.3.2 (2010-03-25)
+ Fixed bug where it was possible to scale the editor iframe smaller than the editor UI.
+ Fixed bug where some of the resizing option didn't work with the new live resize.
+ Fixed bug where the format listbox didn't show nestled formats correctly.
+ Fixed bug where the native listboxes didn't work correctly.
+ Fixed bug where font size selection in using the legacyoutput plugin would produce errors.
+ Fixed so block and blockquote formats remove their matching element regardless of it's attributes.
+Version 3.3.1 (2010-03-18)
+ Added new live resize feature, the editor contents is now visible while resizing.
+ Fixed bug where some valid_element patterns would produce an unknown property error.
+ Fixed bug where it wasn't possible to toggle off blockquotes.
+ Fixed bug where an undo level wasn't produced when applying formatting using the styles dropdown.
+ Fixed bug where IE 6/7 wouldn't perform caret formatting due to a focus/event bug in IE.
+ Fixed bug where undo/redo wasn't restoring the previous selection correctly.
+ Fixed bug where the caret would become invisible if you resized the editor in latest Gecko.
+ Fixed bug where the class attribute wasn't completely removed in IE 6/7 when the removeClass function was used.
+ Fixed so the matchNode method of the Formatter class returns the matched format rule.
+ Fixed so it's possible to apply formatting to both blocks and as inline elements.
+Version 3.3 (2010-03-10)
+ Fixed bug where backspace on a table on IE would produce an empty tbody and some JS exceptions.
+ Fixed bug where some redundant children wasn't removed properly when applying inline styles to them.
+ Fixed bug where Chrome would produce incorect dialog sizes if the inlinepopups plugin wasn't used.
+ Fixed bug where spans with different classes would get merged if they where siblings to each other.
+ Fixed bug where IE 8 would crash if you used the spellchecker.
+ Fixed bug where Input Method for non western languages didn't work correctly.
+ Fixed bug where the UI would render incorrectly in FF 3.6 on Mac due to a bug n their rendering engine.
+ Fixed bug where WebKit wouldn't scroll down correctly if Shift+Enter was used. Patch contributed by Thomas Andersen.
+Version 3.3rc1 (2010-02-23)
+ Fixed bug with new legacyoutput plugin not working correctly on it's own.
+ Fixed bug some performance issues with removing text formats.
+ Fixed bug where TinyMCE specific attributes wasn't removed properly by remove format.
+ Fixed bug where it wasn't possible to align images within inline elements.
+ Fixed bug where Ctrl+Delete/Backspace would produce an invalid argument exception on IE.
+ Fixed bug where the search/replace logic could produce an infinite loop on IE for reverse searches.
+ Fixed bug where cloning formats in cells didn't work properly on IE.
+ Fixed bug where IE6 would produce a horizontal scroll bar.
+ Fixed so remove jQuery method removes the TinyMCE instance as well as the specified textarea.
+ Fixed so selected rows and cells gets updated using the row/cell properties dialogs.
+Version 3.3b2 (2010-02-04)
+ Fixed bug where sometimes img elements would be removed by split method in DOMUtils.
+ Fixed bug where merging of span elements could occur on bookmark nodes.
+ Fixed bug where classes wasn't properly removed when removeformat was used on IE 6.
+ Fixed bug where multiple calls to an tinyMCE.init with mode set to exact could produce the same unique ID.
+ Fixed bug with the IE selection implementation when it was feeded an document range.
+ Fixed bug where block elements formatting wasn't properly removed by removeformat on all browsers.
+ Fixed bug where selection location was lost if you performed a manual cleanup.
+ Fixed bug where removeformat wouldn't remove span elements within styled block elements.
+ Fixed bug where an error would be thrown if you clicked on the separator lines in menus.
+ Fixed bug with the jQuery plugin adding always adding a querystring value to other resources.
+ Fixed bug where IE would produce an error message if you had an empty editor instance.
+ Fixed bug where Shift+Enter didn't produce br elements on WebKit browsers.
+ Fixed bug where a temporary marker element wasn't removed by the paste plugin.
+ Fixed bug where inserting a table would produce two undo levels instead of one.
+Version 3.3b1 (2010-01-25)
+ Added new text formatting engine. Fixes a lot of browser quirks and adds new possibilities.
+ Added new advlist plugin that enables you to set the formats of list elements.
+ Added new paste plugin logic that enables you to retain style information from Office.
+ Added new autosave plugin logic that automatically saves contents in local storage.
+ Added new valid_styles option. Adds the possibility to restrict styles and their order.
+ Added new theme_advanced_runtime_fontsize option to display the runtime font size in font size select box.
+ Added new jquery plugin version that handles the gzip compressor amongst other things. Contributed by Speednet.
+ Added new $ function to tinymce namespace and editor instances for the jQuery build.
+ Added the possibility to get editors by index as well as name in the tinyMCE.editors collection.
+ Fixed so the contents inside the editor renders in standards mode by default.
+ Fixed bug where it wasn't possible to move the caret on short documents running in standards mode on IE.
+ Fixed bug where the decode method of the DOMUtils class could end up in an endless loop.
+ Fixed bug where it was possible to bypass the paste cleanup on non IE browsers if you clicked while pasting.
+ Fixed bug where some attributes wasn't serialized correctly on IE if wildcard attribute patters where used.
+ Fixed bug where entity decoding was performed on strings that didn't have any valid entities in them.
+ Fixed bugs with the insertNode method of the IE DOMRange implementation. Patch contributed by Scott McNaught.
+ Rewrote the getBookmark/moveToBookmark selection logic to boost performance on larger documents.
+ Rewrote the table plugin to include new cell selection logic and fixed various bugs and issues.
+ Merged the tinyMCE, tinymce and tinymce.EditorManager into the same instance makes more sense.
+ Removed browser setting since the browser support for TinyMCE is not far better than it was when that setting was introduced.
+ Changed the mce_ attribute prefix to the more standard _mce_ prefix. This is similar to browser vendors prefixes.
+ Optimized performance with named entities on Gecko. Regexp replace was executing very slowly probably due to a Gecko bug.
+ Optimized performance of the IE specific selection/range implementation.
+ Removed the safari plugin since we now replaced all text formatting logic to custom code.
+Version 3.2.7 (2009-09-22)
+ Fixed bug where uppercase paragraphs could still produce an invalid DOM tree on IE.
+ Fixed bug where split command didn't work on WebKit since the node serializer needs a real document to work with.
+ Fixed bug where it was impossible in Gecko to place the caret before a table if it was the first one.
+ Fixed bug where linking to urls like ../../ would produce an extra traling slash ../..//.
+ Fixed bug where the template cdate functionality was using an old 2.x API call. Patch contributed by vectorjohn.
+ Fixed bug where urls to the same site but different protocol would be converted when relative_urls where set to false. Patch contributed by Ted Rust.
+ Fixed bug where the paste plugin would remove mceItem prefixed classes.
+ Fixed bug where the paste plugin would sometimes add items in a reverse order on WebKit.
+ Fixed bug where the paste buttons would present an error message on Gecko even if you changed user.js. Patch contributed by Todd (teeaykay).
+ Fixed bug where Opera would crash if you had tables incorrectly placed inside paragraphs.
+ Fixed bug where styles elements wasn't properly processed if you had bad input HTML.
+ Fixed bug where style attributes wasn't properly forced into a specific format.
+ Fixed bug and issues with boolean attributes like checked, nowrap etc.
+ Fixed bug where input elements could override attributes on form elements.
+ Fixed bug where script or style elements could get modified by the DOMUtils processHTML method.
+ Fixed bug where the selected attribute could get lost when force root blocks logic got executed on IE. Patch contributed by Attila Mezei-Horvati.
+ Fixed bug where getAttribs method didn't handle boolean attributes correctly on IE.
+ Fixed so the paste from word dialog is presented if you paste content on an IE with to restrictive security settings.
+ Fixed so the paste_strip_class_attributes option is set to none by default in the paste plugin.
+ Removed default border=0 on tables for the default value of valid_elements.
+Version 3.2.6 (2009-08-19)
+ Added new wordcount plugin, this will display the number of typed words as you write. Contributed by Andrew Ozz.
+ Added new getNext and getPrev methods to DOM utils. These will return the first matching sibling.
+ Fixed bug where it was impossible to place the caret after a table on Gecko. It will now add a paragraph after tables.
+ Fixed bug where inline dialogs would fail if used in a window opened using a showModalDialog. Patch contributed by Derek Britt.
+ Fixed bug where IE could sometimes render a unknown runtime error on invalid input HTML.
+ Fixed bug where some incorrectly placed tables wouldn't be moved outside the paragraphs on IE.
+ Fixed bug where uppercase script/style element wouldn't be handled correctly and converted to valid lowercase.
+ Fixed bug where some WebKit versions on Mac OS X would produce issues with hidden select fields.
+ Fixed bug where the media plugin would fail on WebKit since the node wasn't properly imported to the right document.
+ Fixed bug where absolute URLs for the TinyMCE script using a base href element would cause loading problems in IE 6/7.
+ Fixed bug where pasting using the paste plugin wasn't possible on IE with to restrictive security settings.
+ Fixed bug where pasting of whitespace was impossible using the new custom paste method.
+ Fixed bug where pasting on some WebKit browsers would not work if you pasted specific contents due to a WebKit bug.
+ Fixed bug where doctypes with multiple lines would not be parsed correctly by the fullpage plugin. Patch contributed by Colin.
+ Fixed bug where the autoresize plugin would break the fullscreen functionality.
+ Fixed bug where tables would be chopped up running on IE using invalid contents and pasting paragraphs into a cell.
+ Fixed bug where the each method of jQuery build didn't iterate styleSheets. We now use the TinyMCE API one instead.
+ Fixed bug where auto switching to paragraphs after headers some times failed in Gecko.
+ Fixed so all editor options gets passed to the Serializer class. Patch contributed by Jasper Mattsson.
+ Fixed so script/style blocks isn't wrapped in paragraphs as other inline elements.
+ Fixed so the XHR requests sends the X-Requested-With HTTP header.
+ Fixed so the data url scheme is handled in the tinymce.util.URI class.
+ Changed inline documentation to use moxiedoc style comments.
+ Removed the compat2x plugin people should have upgraded to the 3.x API by now. 3.0 was released more then a year ago.
+ Re-added Gecko specific message for users who doesn't understand the security concept regarding paste.
+Version 3.2.5 (2009-06-29)
+ Added new jQuery plugin for the jQuery specific package. This enables you to more easily load and use TinyMCE.
+ Added new autoresize plugin contributed by Peter Dekkers. This plugin will auto resize the editor to the size of the contents.
+ Fixed so all packages have the same directory structure. Previous releases had a different structure for the production package.
+ Fixed so the paste from word dialog forces the contents to be processed as word contents even if it's not.
+ Fixed so the jQuery build adapter build works. It's currently only excluding Sizzle.
+ Fixed so noscript element contents is retained during the editing process.
+ Fixed bug where the getBookmark method would need a "simple" string input when the documented way is a boolean.
+ Fixed bug where invalid contents could break the fix_table_elements logic.
+ Fixed bug where Sizzle specific attributes would be serialized if the valid_elements was set to *[*].
+ Fixed bug where IE would produce an error if you specified a relative content_css and opened the paste dialog.
+ Fixed bug where pasting images on IE would produce broken images if they came from an external site.
+ Fixed bug where memory was leaked if you add/remove controls dynamically. Some event handlers wasn't removed properly.
+ Fixed bug where domain relaxing wasn't treated correctly if you added it after the TinyMCE script element.
+ Fixed bug where the activeEditor wasn't set to null if the last editor instance was removed.
+ Fixed bug where IE was leaking memory on the onbeforeunload event due to some recently introduced logic. Patch contributed by Options.
+ Fixed bug where inserting tables in Safari 4 didn't work due to a new WebKit bug where some element names are reserved.
+ Fixed bug where URLs having a :// value in the query string would make it absolute regardless of URL settings.
+ Fixed the WebKit specific bug where DOM Ranges would fail if the node wasn't attached to something in a different way.
+ Removed the auto_resize option and the resizeToContent method from the tinymce.Editor class. Use the new autoresize plugin instead.
+Version 3.2.4.1 (2009-05-25)
+ Fixed bug where Gecko browsers would produce an extra space after for example strong when loaded from sub domains.
+ Fixed bug where script elements would be removed if they where placed inside a paragraph element.
+ Fixed bug where IE 8 would produce 1 item remaining when loading CSS files dynamically with an empty cache.
+ Fixed bug where bound events would be removed from other editor instances if a specific one was removed.
+ Fixed various bugs and issues with script and style elements inside the editor.
+ Fixed so all script contents gets wrapped in CDATA sections so that they can be parsed using a XML parser.
+ Fixed so it's impossible for elements marked as closed to have child nodes rendered in output.
+Version 3.2.4 (2009-05-21)
+ Added new paste_remove_styles/paste_remove_styles_if_webkit option to paste plugin concept contributed by Hadrien Gardeur.
+ Added new functionality to paste plugin contributed by Scott Eade aka monkeybrain.
+ Added new paste_block_drop option to the paste plugin this is disabled by default and will block any drag/drop event.
+ Added new bind/unbind methods to DOMUtils these works like Event.add/Event.remove but is easier to access.
+ Added new paste_dialog_width/paste_dialog_height options to paste pluign. Enables you to change the dialog sizes.
+ Fixed bug on IE 8 where it would sometimes produce a "1 item remaining" status message that would never finish.
+ Fixed bug on Safari 4 beta that would produce DOM Range exceptions on the DOMUtils split method since the browser has a bug.
+ Fixed bug where the paste plugin could accidentally think that some word sentences was supposed to be list elements.
+ Fixed bug where paste plugin would produce one extra empty undo level on some browsers.
+ Fixed bug where spans wasn't produced correctly on new line when the keep_styles option was enabled.
+ Fixed bug where the caret would be placed at the beginning of contents in IE 8 if you selected colors from the color pickers.
+ Fixed so the Event class is a normal class instead of a static one. The tinymce.dom.Event is now a global instance of that class.
+ Fixed so internal events for instances gets removed when the DOMUtils instance is removed.
+ Fixed so preventDefault and stopPropagation methods can be used on the event object in all browsers.
+Version 3.2.3.1 (2009-05-05)
+ Fixed bug where paragraphs containing form elements such as input or textarea would be removed.
+ Fixed bug where some IE versions would produce a wrapper function for events attributes.
+ Fixed bug where table cell contents could be removed if you pressed return/enter at the end of the cell contents.
+ Fixed bug where the paste plugin would remove a extra character if the selection range was collapsed.
+ Fixed bug where creating tables with % width wouldn't be handled correctly on WebKit browsers.
+Version 3.2.3 (2009-04-23)
+ Added new paste plugin logic. This new version will autodetect Word contents and clean it up.
+ Added a optional root element argument to getPos so you can tell it where to stop the calculation.
+ Added new DOM ready logic to remove the usage of document.write. We now use basically the same method as jQuery.
+ Fixed bug where WebKit browsers would fail when selecting all contents in the area using Ctrl+A.
+ Fixed bug where IE would produce paragraphs with empty inline style elements.
+ Fixed bug where WebKit browsers would fail when inserting tables with a non pixel width.
+ Fixed bug where block elements could get a redundant br element at the end of the element.
+ Fixed bug where the tabfocus plugin only worked with a single editor instance on page.
+ Fixed bug where IE 8 was loosing caret position if the selection was collapsed and a menu was clicked.
+ Fixed bug with application/xhtml+xml mode where menus wasn't working properly.
+ Fixed bug where the onstop workaround fix for IE would produce errors in an ASP update panel.
+ Fixed bug where the submit function override could produce errors if executed in the wrong scope.
+ Fixed bug where the area element wasn't closed by a short ending.
+ Fixed various number issues in the style plugins properties dialog. Contributed by datpaulchen.
+ Fixed issues with size suffix values in the style plugin dialog.
+ Fixed issue where hasDuplicate variable would leak out to the global space due to a bug in the Sizzle engine.
+ Fixed issue where the paste event would fire a dialog warning on IE since we extracted the text contents.
+ Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
+Version 3.2.2.3 (2009-03-26)
+ Fixed regression bug with the getPos method, it would return invalid if the view port was to small.
+Version 3.2.2.2 (2009-03-25)
+ Fixed so the DOMUtils getPos method can be used cross documents if needed.
+ Fixed bug where undo/redo wasn't working correctly in Gecko browsers.
+Version 3.2.2.1 (2009-03-19)
+ Added support for tel: URL prefixes. Even though this doesn't match any official RFC.
+ Fixed so the select method of the Selection class selects the first best suitable contents.
+ Fixed bug where the regexps for www. prefixes for link and advlink dialogs would match wwwX.
+ Fixed bug where the preview dialog would fail to open if the content_css wasn't defined. Patch contributed by David Bildström (ChronoZ).
+ Fixed bug where editors wasn't converted in application/xhtml+xml mode due to an issue with Sizzle.
+ Fixed bug where alignment would fail if multiple lines where selected.
+ Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
+Version 3.2.2 (2009-03-05)
+ Added new CSS selector engine. Sizzle the same one that jQuery and other libraries are using.
+ Added new is and getParents methods to the DOMUtils class. These use the new Sizzle engine to select elements.
+ Added new removeformat_selector option, enables you to specify a CSS selector pattern of elements to remove when using removeformat.
+ Fixed so the getParent method can take CSS expressions when selecting it's parents.
+ Added new ant based build process, includes a new javabased preprocessor and a yuicompressor ant task.
+ Moved the tab_focus logic into a plugin called tabfocus, so the old tab_focus option has been removed from the core.
+ Replaced the TinyMCE custom unit testing framework with Qunit and rewrote all tests to match the new logic.
+ Moved the examples/testcases to a root directory called tests since it now includes slickspeed.
+ Fixed bug where nbsp wasn't replaced correctly in ForceBlocks.js. Patch contributed by thorn.
+ Fixed bug where an dom exception would be thrown in Gecko when the theme_advanced_path path was set to false under xml application mode.
+ Fixed bug where it was impossible to get out of a link at the end of a block element in Gecko.
+ Fixed bug where the latest WebKit nightly would fail when changing font size and font family.
+ Fixed bug where the latest WebKit nightly would fail when opening dialogs due to changes to the arguments object.
+ Fixed bug where paragraphs wasn't added to elements positioned absolute using classes.
+ Fixed bug where font size values with dot's like 1.4em would produce a class instead of the style value.
+ Fixed bug where IE 8 would return an incorrect position for elements.
+ Fixed bug where IE 8 would render colorpicker/filepicker icons incorrectly.
+ Fixed bug where trailing slashes for directories in URLs would be removed.
+ Fixed bug where autostart and other boolean values in the media dialog wouldn't be stored/parsed correctly.
+ Fixed bug where the repaint call for the media plugin wouldn't be executed due to a typo in the source.
+ Fixed bug where id attribute of object elements wasn't kept intact by the media plugin.
+ Fixed bug where preview of embeded elements when the media_use_script option was used would fail.
+ Fixed bug where inlinepopups could be rendered at an incorrect location on IE 6 while dragging.
+ Fixed bug where the blocker shim could be placed at an incorrect location on IE 6.
+ Fixed bug where the multiple and size attributes of select elements would produce incorrect values while running in IE.
+ Fixed bug where IE would loose the caret position is you selected a color from the color drop down.
+ Fixed bug where remove format wouldn't work on IE since it couldn't remove span elements that had style information.
+ Fixed bug where Opera was removing links when removing formatting from selected contents.
+ Fixed bug where paragraphs could be produced inside non positional elements styled with the CSS position value of static.
+ Fixed bug where removeformat wouldn't work if you selected part of a span in IE.
+ Fixed bug where media plugin didn't retain the style attribute on embed/object elements.
+ Fixed bug where auto focus on empty editor instances could produce strange results if you inserted an image into it.
+ Fixed bug where &nbsp; characters would be removed in FF when inserted with the mceInsertContent or selection.setContent methods.
+ Fixed bug where warning message of missing paste support wasn't displayed on WebKit browsers.
+ Fixed bug where anchor links could include other links. The selected range is now unlinked before adding news links to it.
+ Fixed memory leak when TinyMCE was used with prototype. Patch contributed by James Ots.
+ Fixed so the non documented fullpage_hide_in_source_view option for the fullpage plugin works again in the 3.x branch.
+ Fixed so tables doesn't get inserted into paragraphs by default since it's not W3C valid. Can be disabled by using the fix_table_elements option.
+ Fixed so the source view dialog sets a source_view state to the event object. Enables plugins to intercept the source view mode.
+ Fixed various validation issues with the html dialogs and pages.
+ Removed ask mode option since there is way better ways of doing this now. Use the add/remove control methods instead.
+ Removed logic for compatibility with Safari 2.x, this browser is no longer supported since no one is using it.
+ Removed the auto domain relaxing feature. If loading scripts cross sub domains it's better to specify the document.domain by hand.
+Version 3.2.1.1 (2008-11-27)
+ Added new theme_advanced_default_background_color/theme_advanced_default_foreground_color options. Patch contributed by David Bildström (ChronoZ).
+ Fixed font style formatting compatibility issue with Adobe Air.
+ Fixed so legacy font elements get converted into spans even if cleanup_on_startup isn't enabled.
+ Fixed bug where pre elements could be incorrectly modified by an IE bug workaround. Patch contributed by hu vime.
+ Fixed bug where input elements inside inlinepopups wasn't editable in Firefox 2.
+ Fixed bug where the xhtmlxtras plugin wasn't replacing attribute values correctly.
+ Fixed bug where menu buttons in skin variants would look strange due to IE 8 fixes.
+ Fixed bug where WebKit browsers would on backspace take you back to the previous page if the editor was empty.
+ Fixed bug where DOMUtils decode method wouldn't handle strings larger than 4096kb due to node chunking.
+ Fixed bug where meta key wasn't handled as ctrl key on Mac OS X for custom keyboard short cuts.
+ Fixed bug where init event would get fired twice on WebKit on Mac OS X.
+Version 3.2.1 (2008-11-04)
+ Added support for custom icon image for drop menus. Use icon_src to set a custom image directly.
+ Added new media_strict option to media plugin. Enables you to control if the flash embed is strict or not. Enabled by default.
+ Fixed so the editors script files gets dynamically loaded without using XHR or eval.
+ Fixed so the media plugin outputs valid XHTML object elements for Flash movies. Can be disabled with the media_strict option.
+ Fixed so dynamic loading doesn't require eval calls on non IE browsers for better Air support.
+ Fixed bug where the editor wasn't treated as empty if the remaining paragraph had attributes.
+ Fixed bug where id's of elements was removed ones they got wrapped in paragraphs. Patch contributed by ChronoZ.
+ Fixed bug where WebKit browsers where placing list elements inside paragraph elements.
+ Fixed bug where inserting images or links would produce absolute urls on WebKit browsers.
+ Fixed bug where values for checked, readonly, disabled and selected attributes was incorrect on IE.
+ Fixed bug where positive values for checked, readonly, disabled and selected attributes wasn't forced to valid values.
+ Fixed bug where selecting the first option in a native select box would produce an undefined error.
+ Fixed bug where tabindex 32768 could be outputted on IE if element attributes where cloned.
+ Fixed bug where the media dialogs preview window would display incorrect contents due to duplicate clsid prefixes.
+ Fixed bug where non pixel or percent heights for textarea elements would produce errors on IE.
+ Fixed bug where cdata sections in script elements wasn't handled correctly.
+ Fixed bug where nowrap of table cells would produce a 65535 value output.
+ Fixed bug where media plugin would produce an error if you selected the first item in the items list.
+ Fixed bug where media plugin would modify links with the item _value in them.
+ Fixed so table width/height is better forced if inline_styles is enabled. Patch contributed by daKmoR.
+ Fixed css for IE 8 such as opacity and other rendering quirks.
+Version 3.2.0.2 (2008-10-02)
+ Fixed bug where the SelectBox and NativeSelectBox wasn't updated correctly if undefined was passed to them.
+ Fixed bug where the style dropdown wasn't correctly changed back to it's original state when element had no class.
+ Fixed bug where multiple pending font styles wasn't handled correctly.
+ Fixed so you can disable all auto css loading for dialogs by setting the popups_css option to false.
+Version 3.2.0.1 (2008-09-17)
+ Fixed bug where font sizes and faces wouldn't be changed correctly when there was a parent with a different style.
+ Fixed bug where adding fonts to the same selection would produce redundant spans.
+Version 3.2 (2008-09-11)
+ Added new text style support, it will now use span elements internally instead of font elements.
+ Added new improved support for the theme_advanced_font_sizes option, check the Wiki for details.
+ Added new keep_style setting that maintains the text style on return/enter on non IE browsers, enabled by default.
+ Added new onBeforeSetContent/onBeforeGetContent/onSetContent/onGetContent events to the Selection class.
+ Added new selectByIndex method to ListBox class. This enables you to select list items by an index instead of a value.
+ Added new possibility to the select method of the ListBox class. This can now have a selector function as it's value argument.
+ Added new possibility to skip the loading of popups css by setting the feature popup_css to the value false.
+ Added new possibility to skip translation of popups by setting the translate_i18n feature to false.
+ Added new element_format option enables you to produce HTML element endings instead of XHTML. But we are still in the XHTML is better camp.
+ Added missing allowfullscreen and quality options for flash elements, this will now get correctly stored.
+ Fixed bug where table cell dialog didn't close properly unless the accessibility_warnings option was set to false.
+ Fixed bug where the modal dialog blocker element for inlinepopups wasn't placed at a correct location if the page had scroll.
+ Fixed bug where non inline dialogs didn't close correctly if the inlinepopups plugin was used.
+ Fixed bug where non inline dialogs could make the modal dialog blocker to work incorrectly.
+ Fixed bug where style select wasn't populated correctly if you pressed the arrow. Patch by Hari Karam Singh.
+ Fixed bug where toggling the fullscreen mode didn't restore scrollbars on IE when the editor was inside a frame. Patch by Jacob Barrett.
+ Fixed bug where inserting flash contents using the template plugin didn't work correctly.
+ Fixed bug where inserting flash contents using the selection.setContent or mceInsertContent command didn't work correctly.
+ Fixed bug where IE would produce an exception if a comment started with -.
+ Fixed bug where the blockquote button would wrap lists incorrectly on non IE browsers.
+ Fixed bug where Opera would display BR elements in the element path.
+ Fixed bug where xhtmlxtras didn't insert elements correctly on IE.
+ Fixed bug where the buttons wasn't activated correctly in the xhtmlxtras plugin.
+ Fixed bug where adding an object as the style attribute for the dom setAttribs method wouldn't work.
+ Fixed bug where the background color would bleed out to parent container element in Gecko.
+ Fixed bug where the insert column actions for tables would fail if you did it in a thead or tfoot. Patch contributed by T Andersen (tan73).
+ Fixed bug where event blocker element wasn't positioned correctly for the inlinepopups plugin.
+ Fixed bug where pasting from Office 2007 would produce an odd comment in the contents.
+ Fixed bug where the paste as plain text could remove an extra character. Patch contributed by Speednet.
+ Fixed bug where some characters where missing for the paste_replace_list option. Patch contributed by Speednet.
+ Fixed bug where removing non existing editor instances by the mceRemoveControl command would produce an error.
+ Fixed bug where meta elements with the name description would produce errors in IE.
+ Fixed bug where color and background colors wouldn't be updated properly.
+ Fixed bug where the createMenuButton of tinymce.ControlManager didn't implement the last class argument.
+ Fixed bug where the editor_css option was relative from the TinyMCE installation directory not the current page.
+ Fixed bug where elements wouldn't be padded if the element contained bogus br elements. For example TD elements.
+ Fixed bug where parsing of <body > in fullpage plugin would produce an error.
+ Fixed bug where relative urls with just ./ would become an empty string.
+ Fixed bug where outdent button would be disabled if inline_styles where set to false.
+ Fixed bug where replace with an empty search string would produce an error on IE.
+ Fixed bug where restoring the overflow state of the body in fullscreen plugin running on IE would produce vertical scrollbars.
+ Fixed bug where pressing return/enter in list items would sometimes move the caret the to top of the content area in FF.
+ Fixed bug where the style listbox wouldn't be updated correctly if you used the use_native_selects option.
+ Fixed bug where WebKit browsers would produce a div element when ending list elements using return.
+ Fixed so translation of popup contents only occurs if it's needed.
+ Optimized the URI object in regards or converting absolute URIs to relative URIs.
+Version 3.1.1 (2008-08-18)
+ Added new getSize method to DOMUtils it will return the dimensions only of an element.
+ Added new alert/confirm methods to the tinyMCEPopup class to prevent focus problems and also to shorten method calls.
+ Added new plugin_preview_inline option to preview plugin to enable/disable native/inline dialogs.
+ Added new readonly option. If this is set the editor will only display the contents for the user.
+ Added missing tabindex and accesskey to input elements in the default valid_elements setup.
+ Updated firebug lite to 1.2, to enable it use the tiny_mce_dev.js?debug=1 on the development package.
+ Fixed so the preview dialog in the preview plugin uses inline dialogs/popups.
+ Fixed so CDATA sections remains intact through the serialization process of the DOM tree.
+ Fixed various issues with the getAttrib command. It will now return more correct values.
+ Fixed bug where the embed element wasn't properly parsed in the media plugin it now supports 3 formats.
+ Fixed bug where the noshade attribute was serialized incorrectly on IE.
+ Fixed bug where editing an existing link element didn't force it relative.
+ Fixed bug where image link creation fails on Safari if the image is aligned.
+ Fixed bug where it was possible to scroll the fullscreen mode in Opera 9.50.
+ Fixed bug where removal of center image alignment would fail. Patch contributed by Andrew Ozz.
+ Fixed bug where inlinedialogs didn't work properly if the doctype was incorrect in IE.
+ Fixed bug where cross domain loading didn't work correctly in Opera 9.50.
+ Fixed bug where breaking huge text blocks with return/enter key would scroll to end of block.
+ Fixed bug where replace button kept inserting the replacement text even if there is no more matches.
+ Fixed bug with fullpage plugin where value wasn't set correctly. Patch contributed by Pascal Chantelois.
+ Fixed bug where the dom utils setAttrib method call could produce an exception if the input was null/false.
+ Fixed bug where pressing backspace would sometimes remove one extra character in Gecko browsers.
+ Fixed bug where the native confirm/alert boxes would move focus to parent document if fired in dialogs.
+ Fixed bug where Opera 9.50 was telling you that the selection is collapsed even when it isn't.
+ Fixed bug where mceInsertContent would break up existing elements in Opera and Gecko.
+ Fixed bug where TinyMCE fails to detect some keyboard combos on Mac, contributed by MattyRob.
+ Fixed bug where replace all didn't move the caret to beginning of text before searching.
+ Fixed bug where the oninit callback wasn't executed correctly when the strict_loading_mode option was used, thanks goes to Nicholas Oxhoej.
+ Fixed bug where a access denied exception was thrown if some other script specified document.domain before loading TinyMCE.
+ Fixed so setting language to empty string will skip language loading if translations are made by some backend.
+ Fixed so dialog_type is automatically modal if you use the inlinepopups plugin use dialog_type : "window" to re-enable the old behavior.
+Version 3.1.0.1 (2008-06-18)
+ Fixed bug where the Opera line break fix didn't work correctly on Mac OS X and Unix.
+ Fixed bug where IE was producing the default value the maxlength attribute of input elements.
+Version 3.1.0 (2008-06-17)
+ Fixed bug where the paste as text didn't work correctly it encoded produced paragraphs and br elements.
+ Fixed bug where embed element in XHTML style didn't work correctly in the media plugin.
+ Fixed bug where style elements was forced empty in IE. The will now be wrapped in a comment just like script elements.
+ Fixed bug where some script elements wrapped in CDATA could fail to be serialized correctly.
+ Fixed bug where FF 3 produced -moz- internal styles in some style attributes.
+ Fixed bug where query strings and external URLs didn't work correctly in style attributes.
+ Fixed bug where shape attribute of area elements got serialized as rect regardless of it's initial value in IE 6.
+ Fixed bug where selection of elements inside layers would fail in IE since focus was moved to the document body.
+ Fixed bug where pressing enter/return in an editable select box would produce an __mce_add_custom__ class value.
+ Fixed bug where changing font size of text placed inside a colored text chunk would remove the parent node.
+ Fixed bug where Opera 9.5 final produced a strange line break behavior due to a workaround for previous Opera versions.
+ Fixed bug where text/background color would produce a strange focus problem when you tried to click on the body in IE.
+ Fixed issue where selecting the title of an listbox equals the old 2.x behavior of changing the value to an empty string.
+ Fixed issue where it was common for the media plugin to break if the _value attribute wasn't added for the param element.
+ Fixed issue where the wrong parent editor instance might be updated if you use fullscreen mode in an incorrect way.
+ Fixed issue where Safari was producing a warning about the base element not being closed correctly.
+ Removed redundant form element name matching from regexp in the DOMUtils class.
+Version 3.0.9 (2008-06-02)
+ Added new contextmenu_offset_x/contextmenu_offset_y options for the contextmenu plugin.
+ Added cite attribute to the default rule for the blockquote element.
+ Added support for using arrow keys for selection of items in listboxes.
+ Added support for using arrow keys for selection of items in dropmenus.
+ Fixed bug where blockformat change on elements with BR inside them didn't change correctly on Firefox.
+ Fixed bug where removing table rows inside thead or tfoot would remove the whole table if it was the last one.
+ Fixed bug where XHR synchronous mode didn't execute the callback handlers synchronously.
+ Fixed bug where setting border to 0 didn't add border: 0 to the style attribute when using the advimage dialog.
+ Fixed bug where the selection of images and table cells didn't work correctly when the editor is placed in a frame and running on IE.
+ Fixed bug where the store/restore of a selection didn't work correctly in non IE browsers.
+ Fixed bug where only the first element would be invalid for the invalid_elements option.
+ Fixed bug where paste as plain text didn't encode the characters correctly when they where inserted.
+ Fixed bug where HTML source window couldn't be maximized on Gecko when the maximizable feature was enabled.
+ Fixed bug where color selection using the color picker could produce exception in IE.
+ Fixed bug where font size changes could produce produce extra redundant elements.
+ Fixed bug where IE could produce unknown runtime error if you replaced a image with another image from a separate frame.
+ Fixed bug where the domLoaded state for the Event class wasn't set correctly if the editor was loaded dynamically using the gzip compressor.
+ Fixed bug where handling of the base element for a page would produce incorrect urls. Based on a patch contributed by John LeSueur.
+ Fixed bug where table constraint alert boxes was presented with an empty value and wasn't the skinned inline ones.
+ Fixed bug where the onChange event wasn't fired when the form was submitted. It's now also triggered when the save method is called.
+ Fixed bug where encoding set to xml didn't work as expected. It now encodes the contents into XML entities.
+ Fixed bug where numrows didn't work correctly for the merge cells dialog of the table plugin.
+ Fixed bug where the onGetContent event was fired even when the no_events flag was set.
+ Fixed bug where the preview panels for the advimage and the media plugin could overflow on Safari and FF 3.
+ Fixed bug where the editing and removal of abbr elements using the xhtmlxtras plugin working correctly on IE.
+ Fixed bug where save button in the save plugin didn't work correctly on IE.
+ Fixed bug where dragging layers didn't work as expected since it would snap back to it's original location if you saved.
+ Fixed bug where the description of the template plugin dialog wasn't updated correctly.
+ Fixed bug where the values for frame and rules in the table dialogs where swapped.
+ Fixed bug where the elements like ins, del, cite, acronym and abbr didn't have the default editing style as the old 2.x branch.
+ Fixed bug where ask mode would lock the focused textarea if you pressed cancel in the confirm dialog on FF 3.
+ Fixed bug where ask mode would produce contents for empty textareas if you reloaded the page.
+ Fixed so the onGetContent event gets the full pass through object just like the other events.
+ Fixed so attributes for block elements remains the same when you change format of a element.
+Version 3.0.8 (2008-04-30)
+ Fixed bug where IE would produce an error if textareas without names where converted.
+ Fixed bug where editor wasn't forced empty when there was only a single br or empty paragraph left.
+ Fixed bug where IE would produce an warning message if object elements where produced in the media plugins preview running on https.
+ Fixed bug where new addVer function didn't handle hash items correctly. Patch contributed by Mirek Burkon.
+ Fixed bug where font_size_style_values option wasn't applied correctly to fonts inside the editor.
+ Fixed bug where image selection could be lost if a image was edited using context menu on IE.
+ Fixed bug where style values wasn't updated properly due to an invalid regexp.
+ Fixed bug where IE 6 where displaying warning message about insecure items when inserting an image while using https. Patch contributed by Norifumi Sunaoka.
+ Fixed bug where IE was producing an auto save message if you selected a color from the color split button.
+ Fixed bug where backspace sometimes would move the caret to the end of the previous block in Gecko.
+ Fixed bug where the rowlayout manager didn't work as described in the documentation.
+ Fixed bug where the default options for the fullpage plugin wasn't applied correctly.
+ Fixed bug where selection would jump one character if you applied a styles to a words in non IE browsers.
+ Fixed bug where undo levels wasn't added correctly if you went back in undo history and added a new event.
+ Fixed bug where font size dropdown didn't mark the selected size in IE.
+ Fixed bug where the size of the editor was determined using clientWidth instead of offsetWidth.
+ Fixed so the onchange event doesn't fire on the initial undo level, it will also fire when the editor is blurred.
+ Fixed so the advhr plugin produces XHTML valid output instead of non standard attributes.
+ Fixed so blockquote gets converted into [quote] in when the bbcode plugin is enabled.
+ Fixed so theme_advanced_font_sizes can be named for example Font 1=1, Font 2=2 etc.
+ Fixed so editor_selector/editor_deselector can be regexps. By default only strings are allowed not part regexps like before.
+ Fixed so that the version suffix is optional. It still requires the build process so you need to export it manually.
+ Fixed so it's possible to tab to table cells in non Gecko browsers and also produce new rows if you tab at the end of a table. Contributed by Josh Peek.
+Version 3.0.7 (2008-04-14)
+ Added new version suffix to all internal GET requests to make sure that the users cache gets cleared correctly.
+ Fixed issue with isDirty returning true event if it wasn't dirty on IE due to changes in tables during initialization.
+ Fixed memory leak in IE where if a page was unloaded before all images on the page was loaded it would leak.
+ Fixed bug in IE where underline and strikethrough could produce an exception error message.
+ Fixed bug where inserting paragraphs in totally empty table cells would produce odd effects.
+ Fixed bug where layer style data wasn't updated correctly due to some performance enhancements with the DOM serializer.
+ Fixed bug where it would convert the wrong element if there was two elements with the same name and id on the page.
+ Fixed bug where it was possible to add style information to the body element using the style plugin.
+ Fixed bug where Gecko would add an extra undo level some times due to the blur event.
+ Fixed bug where the underline icon would get active if the caret was inside a link element.
+ Fixed bug where merging th cells not working correctly. Patch contributed by André R.
+ Fixed bug where forecolorpicker and backcolorpicker buttons where rendered incorrectly when the o2k7 skin was used.
+ Fixed bug where comment couldn't contain -- since it's invalid markup. It will now at least not break on those invalid comments.
+ Fixed bug where apos wasn't handled correctly in IE. It will now convert apos to &#39; on IE since that browser doesn't support that entity.
+ Fixed bug where entities wasn't encoded correctly inside pre elements since they where protected from whitespace removal.
+ Fixed bug where color split buttons where rendered incorrectly on IE6 when using the non default theme.
+ Fixed so caret is placed after links ones they are created, to improve usability of the editor.
+ Fixed so you can select tables by clicking on it's borders in non IE browsers to normalize the behavior.
+ Fixed so the menus can be toggled by clicking once more on the icon in listboxes, menubuttons and splitbuttons based on code contributed by Josh Peek.
+ Fixed so buttons can be labeled, currently only works with the default skin, so it's kind of experimental. Patch contributed by Daniel Insley.
+ Fixed so forecolorpicker and backcolorpicker remembers the last selected color. Patch contributed by Shane Tomlinson.
+ Fixed so that you can only execute the mceAddEditor command once for the same instance name.
+ Fixed so command functions added with addCommand can pass though the call to default handles if it returns true.
+Version 3.0.6.2 (2008-04-07)
+ Fixed bug where empty tables couldn't be edited correctly on non IE browsers if they where loaded into the editor.
+ Fixed bug where it was impossible to resize layers correctly in IE since it thought it was an image.
+ Fixed bug where an editor instance was stealing focus in IE resulting in a scroll to the editor on page reloads.
+ Fixed bug where Safari was crashing on Mac OS X if you closed dialogs using the Esc key.
+Version 3.0.6.1 (2008-04-04)
+ Added support for the missing mceAddFrameControl command. The input for this command has changed so consult the Wiki.
+ Fixed bug where sub menus for the drop menus would leave an empty element behind.
+ Fixed memory leak in IE if the editor was placed in a frame or iframe.
+Version 3.0.6 (2008-04-03)
+ Added elements to the default value of valid_elements option. It now contains all XHTML strict elements and a few transitional.
+ Added more accessibility fixes, it's now possible to navigate and close list boxes and split button menus with the keyboard.
+ Added missing getInfo method to the contextmenu and safari plugin, this caused problems for the Drupal module.
+ Added new inlinepopups_zindex option to the inlinepopups plugin so that you can configure the default start z-index.
+ Added new setControlType method to the tinymce.ControlManager class. This method enables you to override the default classes.
+ Added ability to specific an optional control class to use instead of the default one for the ControlManager methods. Based on concept by Josh Peek.
+ Fixed bug where attribute rules for the DOM Serializer couldn't contain - or _ characters in their names.
+ Fixed bug where inlinepopups event blocker and modal dialog blocker elements produced vertical scrollbars.
+ Fixed bug where there was a rendering issue with quirks mode in Safari moving the resize handle to an incorrect position.
+ Fixed bug with forecolor/backcolor controls on IE. Sometimes elements positioned relative will generate display errors.
+ Fixed bug where a p2 was leaking out in the global name space when you selected a color from the forecolor/backcolor controls.
+ Fixed bug where empty paragraphs didn't work as expected in browsers other than IE.
+ Fixed bug where the load method of the tinymce.dom.ScriptLoader didn't check if the file was already loaded.
+ Fixed bug where the load method for the PluginManager and ThemeManager didn't check if a plugin/theme by a specific name was all ready loaded.
+ Fixed bug where the theme_advanced_link_targets option didn't work correctly with the advanced themes link dialog. Patch contributed by Arnold B.
+ Fixed bug where the style command would merge classes into empty span elements.
+ Fixed bug where the style command would remove empty span elements outside the current selection.
+ Fixed bug where the fix for the Safari backspace bug removed all editor contents if it was filled with empty paragraphs.
+ Fixed bug where alert and confirm boxes opened by the inlinepopups plugin would produce an exception if domain relaxing was used.
+ Fixed bug where Safari was adding style attributes to all elements when you paste them into the editor.
+ Fixed bug where the spellchecker menus was visually incorrect since the space for the non existing icon was still there.
+ Fixed bug where remove_linebreaks option didn't remove line breaks inside the text contents of a element.
+ Fixed bug where Safari 3.1 was introducing _mc_tmp into paragraphs due to the new querySelectorAll and a TinyMCE specific workaround.
+ Fixed bug where getParam method in the Editor class was returning incorrect objects and would mess up the font drop down. Patch contributed by speednet.
+ Fixed bug where the table dialog would produce an exception in IE when you edited tables since it tried to place focus in a disabled field.
+ Fixed bug where class attribute on some span elements was removed on cleanup.
+ Fixed bug where resizing the editor in IE could produce an exception if the editor width/height got to be a negative value.
+ Fixed bug where wmv files wouldn't play since the src param was used instead of the url param.
+ Fixed bug where br elements would be added here and there in Gecko. Geckos internal _moz_dirty br elements where serialized as well.
+ Fixed bug where editing named anchors would produce two anchors instead of one updated one.
+ Fixed bug where arrow and function keys didn't work when an noneditable element was focused within the editor.
+ Fixed bug where the dispatcher could produce an exception if the listener list was altered inside an event callback.
+ Fixed bug where it was impossible to totally empty the editor contents on Safari due to an mistreatment of nbsp as whitespace. Patch contributed by Andrew Ozz.
+ Fixed bug where TinyMCE would not convert textareas with the same name attribute value. It will now generate an unique id for those textareas.
+ Fixed bug where backspace/delete key was deleting td elements inside tables while running on Gecko.
+ Fixed bug where Firefox 3.0b4 and Opera 9.26 where scrolling to the top of document when pressing return/enter.
+ Fixed bug where the template plugin wasn't just inserting the mceTmpl tagged element.
+ Fixed bug where the alert method of the default WindowManager implementation didn't translate input language strings like the inlinepopups dialog does.
+ Fixed bugs with the backspace behavior in Gecko. The caret was placed on incorrect locations in the DOM sometimes.
+ Fixed so advimage dialog and table dialogs has support for editable select boxes for the class value.
+ Fixed so the media, pagebreak and spellchecker doesn't load it's default content.css file if the content_css option is set to false.
+ Fixed so the paste_use_dialog option works again it's enabled by default but can be disabled on IE. Patch contributed by Speednet.
+ Fixed so that the fullscreen editor is focused when switching fullscreen editing on.
+ Fixed so it's possible to edit images and links inside tables using the context menu.
+ Fixed so table dialogs and the advanced image dialog doesn't loose selection in IE if the dialogs where navigated/submitted with the keyboard.
+ Fixed so the theme_advanced_blockformats options can have named items for example title 1=h1;title 2=h2.
+ Fixed so it's possible to add a custom editor_css for the simple theme.
+ Fixed quirks with directionality rtl, patch contributed by Andrew Ozz.
+ Fixed so the inlinepopups default start zIndex is 300000.
+ Fixed typo in media plugin Shockware is now replaced with Shockwave.
+ Fixed psuedo memory leak in IE with the replaceChild method inside the DOMUtils.replace method.
+ Fixed so memory is released when an editor instance is removed from page.
+ Optimized the color split button menus so that they use less event handlers.
+ Removed the util/mclayer.js file since it's no longer used by any of the TinyMCE dialogs and is considered deprecated.
+Version 3.0.5 (2008-03-12)
+ Added new black skin variant to the o2k7 skin contributed by Stefan Moonen.
+ Added new explode method to the tinymce core class. This does a split but removed whitespace it also defaults to a , delimiter.
+ Added new detection logic for IE 8 standards mode into the DOMUtils class strMode can now be checked to see if that mode is on/off.
+ Added new noscale option value for the scale select box for Flash in the media plugin.
+ Fixed bug where the menu for the ColorSplitButton wasn't removed when the editor was removed.
+ Fixed bug where font colors couldn't be edited correctly since the style of the element didn't get updated correctly.
+ Fixed bug where class of elements would get lost when TinyMCE was fixing incorrect HTML markup.
+ Fixed bug where table editing would produce double height values.
+ Fixed bug where width style value wouldn't be removed if you switched width unit from cm/em to pixels or percent.
+ Fixed bug where the search/replace input box wasn't auto focused like the other dialogs.
+ Fixed bug where the old mceAddControl command would use the fullscreen settings next time it created an instance.
+ Fixed bug where multiple lines where added to the target cell if you merged multiple empty cells.
+ Fixed bug where drop down menus would be incorrectly positioned inside scrollable divs.
+ Fixed bug where the separators of the silver skin variant didn't display correctly in IE 6.
+ Fixed bug where createStyleSheet seems to load scripts at opposite order in some IE versions.
+ Fixed bug where directionality could produce odd results for the UI and the dialogs.
+ Fixed bug where the DOM serializer wouldn't serialize custom namespaced attributes in IE 6 using the *[*] valid elements rule.
+ Fixed bug where table caption would be inserted after the thead element if you swapped a tr to be inside the thead.
+ Fixed bug where the youtube detection logic for the media plugin was to generic.
+ Fixed so the deprecated and undocumented theme_advanced_path_location set to none won't hide the whole statusbar.
+ Fixed so most input lists can have whitespace in them they are now split using the new tinymce.explode method.
+ Fixed so the popup_css and popup_css_add URLs are relative to where the current document is located.
+ Fixed various bugs and quirks with the store/restore selection logic.
+ Fixed so the editor starts in IE 8 standards mode but still that browser is very very buggy.
+ Fixed so dialog_type set to modal will block the background and other inline windows and only give access to the front most window.
+Version 3.0.4.1 (2008-03-08)
+ Fixed critical bug where it was impossible to edit images when inlinepopups where used due to lost selection in IE.
+Version 3.0.4 (2008-03-07)
+ Added new option constrain_menus, this enables you to force view port constraints on all menus. Contributed by Shane Tomlinson.
+ Fixed bug where table background wasn't visible inside the editor due to a default CSS rule overriding the style attribute.
+ Fixed bug where links would get a null class added if no styles was used in IE.
+ Fixed bug where spellchecker was auto focusing the editor in IE.
+ Fixed bug where document.domain would produce invalid argument if the editor was loaded in IE6 over a network UNC path.
+ Fixed bug where table height attribute was used, this is deprecated in XHTML so it now adds it as an style.
+ Fixed bug where textareas with style values would produce error in IE.
+ Fixed so the first element in each dialog is focused by default to enhance keyboard usage.
+ Fixed so you can add a mceFocus class to elements to make it auto focused.
+ Fixed so you can close dialogs using the esc key.
+ Fixed so you can press return/enter to submit the action of each dialog.
+ Fixed so tabbing inside an inline popups wont focus the resize anchor elements.
+ Fixed so you can press ok in inline alert messages using the return/enter key.
+ Fixed so textareas can be set to non px or % sizes for example em, cm, pt etc.
+ Fixed so non pixel values can be used in width/height properties for tables.
+ Fixed so the custom context menu can be disabled by holding down ctrl key while clicking.
+ Fixed so the layout for the o2k7 skin looks better if you don't have separators before and after list boxes.
+ Fixed so the sub classes get a copy of the super class constructor function to ease up type checking.
+ Fixed so font sizes for the format block previews are normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
+ Fixed so font sizes for h1-h6 in the default content.css is normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
+Version 3.0.3 (2008-03-03)
+ Fixed bug where an error about document.domain would be thrown if TinyMCE was loaded using a different port.
+ Fixed bug where mode exact would convert textareas without id or name if the elements option was omitted.
+ Fixed bug where the caret could be placed at an incorrect location when backspace was used in Gecko.
+ Fixed bug where local file:// URLs where converted into absolute domain URLs.
+ Fixed bug where an error was produced if a editor was removed inside an editor command.
+ Fixed bug where force_p_newlines didn't effect the paste plugin correctly.
+ Fixed bug where the paste plugin was producing an exception on IE if you pasted contents with middots.
+ Fixed bug where delete key could produce exceptions in Gecko sometimes due to the fix for the table cell bug.
+ Fixed bug where the layer plugin would produce an visual add class called mceVisualAid this one is now renamed to mceItemVisualAid to mark it internal.
+ Fixed bug where TinyMCE wouldn't initialize properly if ActiveX controls was disabled in IE.
+ Fixed bug where tables and other elements that had visual aids on them would produce an extra space after any custom class names.
+ Fixed bug where search with an empty string would produce some odd "invalid pointer" error in IE.
+ Fixed bug where elements like menus where placed at incorrect positions in Opera 9.26.
+ Fixed bug where IE was loosing focus of the editor when you clicked some dropmenu and if it was placed in a frame or iframe.
+ Fixed bug where focus of images could be lost in IE if you focused the accessibility confirm dialog in the advimage plugin.
+ Fixed bug where nestled font elements would produce odd output like missing font elements.
+ Fixed bug where text colors and styles got removed if invalid_elements included the font element.
+ Fixed bug where text-decoration set to underline or line-through would remove other styles from span elements.
+ Fixed bug where editor contents like \n\n would be incorrectly handled and processed as real line feeds.
+ Fixed bug where incorrectly encoded urls with ampersands in them would be decoded incorrectly.
+ Optimized the DOMUtils decode method to be a lot faster if the string doesn't have any entities to decode.
+Version 3.0.2.1 (2008-02-26)
+ Fixed alert/confirm dialogs so they display correctly.
+Version 3.0.2 (2008-02-26)
+ Added new body_id option that enables you to specify the id of the body inside the editor iframe based on ideas by David Bildström (ChronoZ).
+ Added new body_class option that enables you to set the class for the body of the editor iframe based on ideas by David Bildström (ChronoZ).
+ Added new CSS class to the default content.css files mceForceColors that forces white background and black text can be used with the body_class option.
+ Added new type parameter to the Editor.getParam function to reduce redundant logic for parsing hash tables.
+ Added new isDone method to the ScriptLoaded class, this enables you to check if a script has been loaded or not.
+ Added new resizeTo and resizeBy methods for the advanced theme. Can be called using tinyMCE.activeEditor.theme.resizeTo(w, h);
+ Added new skin_variant option this can be used to extend existing skins with slight modifications like color.
+ Added new variant of the o2k7 skin called "silver" based on a contribution made by Stefan Moonen.
+ Fixed bug where the template plugin might produce errors if the template_mdate_classes wasn't configured.
+ Fixed bug where the media plugin didn't convert the URLs for movies once they where inserted.
+ Fixed bug where the style field for the advlink dialog didn't work correctly if you edited an existing link.
+ Fixed bug where alignment of toolbars would fail in editor was uses in a quirks mode on IE, fix contributed by Peter Wood & Art Lawry.
+ Fixed bug where initialization of multiple editors at the same time using the mceAddControl method would produce errors.
+ Fixed bug where initialization of editors using mceAddControl command or new tinymce.Editor calls would fail during page load.
+ Fixed bug where the check for domain relaxing could fail if the document.domain property was changed by another script.
+ Fixed bug where textareas couldn't be named description or any other name that matches the meta elements in IE and Opera.
+ Fixed bug where the element path would fail sometimes in IE due to "unknown runtime error" on innerHTML.
+ Fixed bug where Safari would crash if you was hiding the editor before serializing the contents.
+ Fixed bug where the editor wasn't scaled propertly in fullscreen mode using the old fullscreen_new_window option.
+ Fixed bug where render method didn't load language packs in IE and Opera if you rendered an editor during page load.
+ Fixed bug where resizing the browser window in fullscreen didn't resize the editor.
+ Fixed bug where the blockquote command didn't move the caret inside the new empty blockquote if you used it on an empty document.
+ Fixed bug where auto in a style width/height for the textarea would produce an editor with the size value of 100. Fix contributed by Shane Tomlinson.
+ Fixed bug where restoration of selection at the beginning of an element could fail in Gecko.
+ Fixed bug where caret restoration after a cleanup could place the it at an incorrect location.
+ Fixed bug where delete key inside td elements would delete the cell in Gecko.
+ Fixed so the blockquote button toggles individual lines. This behavior is a bit more like the old indentation behavior in the 2.x branch.
+ Fixed so the dialog language packs only gets loaded the first time you open a dialog.
+ Fixed so all classes in the whole UI is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
+ Fixed so all classes in the inlinepopups logic is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
+ Fixed so that the window in fullscreen mode can be resized when fullscreen_new_window option is enabled.
+ Fixed so blockquote elements are formatted in the source output with an linefeed before and after it.
+ Optimized the editor initialization by reducing the number of calls to getBookmark/moveToBookmark.
+Version 3.0.1 (2008-02-21)
+ Added spellchecker plugin into the main package, but without any backend can be specified with the spellchecker_rpc_url option.
+ Added src attribute for script elements to the default valid_elements option value.
+ Added extra parameter to the class_filter callback it can now also filter out classes based on the whole CSS rule.
+ Added support for domain relaxing, TinyMCE can now be loaded from an remote domain as long as they are on the same root domain.
+ Added support for custom elements the new custom_elements option enables you to add non HTML elements to the editor.
+ Added support for the W3C Selectors API that was added to latest nightly build of WebKit.
+ Fixed bug where some object param element wasn't stored correctly using the media plugin.
+ Fixed bug where Opera was scrolling to top of page is drop menus on list boxes where displayed.
+ Fixed bug where IE6 was crashing if a format block was used on a container with anchor elements.
+ Fixed bug where spans with font sizes wasn't handled correctly when editor was loading contents.
+ Fixed bug where mode exact couldn't convert editors with name only. Id is no longer required but recommended.
+ Fixed bug where the mceInsertRawHTML command produced an extra undo level.
+ Fixed bug where the specific_textareas mode didn't work correctly this is the same thing as textareas now.
+ Fixed bug where the values of input elements in the HTML page of dialogs pages where changed in IE.
+ Fixed bug where fullscreen and fullpage plugins didn't work well together.
+ Fixed bug where embed elements wasn't handled properly in the media plugin.
+ Fixed bug where style information on span elements gets munged when fonts are converted to spans.
+ Fixed bug where some entities in element attributes where encoded incorrectly in the latest WebKit build.
+ Fixed bug where initialization would fail in IE if there where two input elements with the name submit in the form.
+ Fixed bug where fullscreen mode didn't work correctly in IE when the fullscreen_new_window option was used.
+ Fixed bug where invalid contents like an ul inside a p element would produce odd results in IE.
+ Fixed bug where Opera 9.2x was placing the drop menus at incorrect locations if the editor was placed in a table.
+ Fixed bug where Opera was producing odd results if enter/return was pressed while having forced_root_blocks disabled.
+ Fixed bug where layer plugin was stealing focus in IE on initialization.
+ Fixed bug where body attributes wasn't set properly in the fullpage plugin, fix contributed by Hiroaki Kawai.
+ Fixed bug where insert image and insert link dialogs where producing an extra level in the undo history.
+ Fixed bug where Gecko would produce an error if empty elements like <div></div> where inserted using mceInsertContent.
+ Fixed bug where center alignment of images produced odd results inside table cells.
+ Fixed bug where center alignment of images couldn't be toggled correctly.
+ Fixed bug where alignment of images inside tables would produce double float style items in IE if the fix_table_elements option was enabled.
+ Fixed bug where a variable called 'v' was polluting the global namespace. Objects tinymce and tinyMCE are the only ones allowed to be global.
+ Fixed bug where insert table from context menu couldn't insert new tables inside existing tables.
+ Fixed bug where Safari wouldn't produce br elements on enter when the force_br_newlines option was enabled.
+ Fixed bug where switching cell type in table cell dialog would produce odd attributes in IE.
+ Fixed bug where Gecko was outputting internal attributes if valid_elements where set to "*[*]".
+ Fixed bug where the style plugin would produce non hex colors inside the dialog when running on Gecko.
+ Fixed bug where an empty src value for insert image would remove the currently selected image if it wasn't and image element.
+ Fixed bug where hidden input elements would break the logic for the tab_focus option.
+ Fixed bug where save button wasn't working correctly in fullscreen mode.
+ Fixed bug where the editor was forced to be placed in a form element if the save_onsavecallback option was used.
+ Fixed bug where upper case param attributes wasn't parsed correctly in the media plugin.
+ Fixed bug where render method of tinymce.Editor class would produce an exception if the strict_loading_mode option was omitted.
+ Fixed bug where nodeChanged event could be fired while the editor was loading and there for produce an exception in FF.
+ Fixed bug where no undo levels where added if the user created new table rows using the tab key on Gecko.
+ Fixed bug where tables would be broken if you selected a different block format for contents withing an table cell.
+ Fixed bug where the render method of the tinymce.Editor class didn't setup the tinymce.EditorManager.settings object correctly.
+ Fixed bug where the advanced image dialog would go to the first tab if the alternative image was changed using the file browser link.
+ Fixed bug where the forced_root_block option would produce BR elements inside empty blocks if the block wasn't a paragraph.
+ Fixed bug where the forced_root_block doesn't work correctly on IE if the specified element was something else than paragraphs.
+ Fixed bug where selection of images would get lost if user selected something from the context menu in IE.
+ Fixed bug where the context menu plugin would pollute the global namespace with two variables p1 and p2.
+ Fixed compatibility issue with Mootools, it is destroying document.getElementById on unload in IE. (Mantra: You don't own the internal objects).
+ Fixed bugs where dialogs/tabs and other UI elements where rendered incorrectly in Firefox 3.
+ Fixed so the auto CSS class importer is compatible with 2.x.
+ Fixed so the editor UI and inlinedialogs works correctly with the YUI CSS reset package.
+ Fixed so header and footer elements are forced to lower case when the fullpage plugin is used.
+ Fixed so load prefixes "-" for plugins and themes isn't required if the plugin/theme was loaded by the ThemeManager/PluginManager.
+ Fixed so the JSONRequest uses application/json content type to make Ruby on rails happy.
+ Fixed so the CSS rule is more exact for the body in the default content.css files. Body is now defined as "body.mceContentBody" instead of just "body".
+ Fixed so the tiny_mce_dev.js uses XHR instead of document.write to load scripts to resolve an issue with Opera 9.50.
+ Fixed so language pack loading can be disabled by setting the language option to false. Can be useful for systems with their own language pack management.
+Version 3.0 (2008-01-30)
+ Added map and area elements to the default valid_elements list and also some indentation rules.
+ Fixed bug where empty paragraphs wasn't padded when loading contents.
+ Fixed bug where the RowLayout manager didn't work at all.
+ Fixed bug where style attribute data would get messed up in advimage dialog.
+ Fixed bug where the table dialogs class select wasn't updated correctly.
+ Fixed bug where elements would get extra whitespace around on insert when body was present in valid_elements.
+ Fixed bug where coords attribute of the area element wasn't handled properly in IE.
+ Fixed bug where Safari didn't produce BR elements on shift+return.
+ Fixed bug where force blocks would cast odd invalid attribute exception in IE.
+ Fixed bug where media plugin would produce extra whitespace before and after objects.
+ Fixed bug where cleanup_callback could break the contents of the editor. But use the new event system instead of this option.
+ Fixed bug where the tab_focus option didn't work between editor instanced. You can now tab between editors.
+ Fixed bug where the load function of the ScriptLoader class didn't load single files without the load que as it was supposed to.
+ Fixed bug where the execcommand_callback parameter order was incorrect. Recommendation use the new addCommand method.
+ Fixed bug where range.select calls sometimes failed on some IE versions.
+ Fixed bug where Safari was scrolling to top of document when enter/returned was pressed.
+ Fixed bug where fullscreen_new_window option didn't work correctly.
+ Fixed bug where the nonbreaking plugin inserted an space instead of an non breaking space the first time.
+ Fixed bug where the visualization of non breaking spaces where visual in element path.
+ Fixed so the focus is restored to the editor after inserting an custom character.
+ Fixed so the isNotDirty state is set to false if a new undo level is added.
+ Fixed so pointless style information for borders gets removed in IE.
+ Fixed so the resize button has a se-resize cursor css value.
+Version 3.0rc2 (2008-01-18)
+ Added new fix_nesting option to fix bug #1867292, this is disabled by default.
+ Added new indentation option enables you to specify how much each indent/outdent call will add/remove.
+ Added easier support for enabling/disabling icon columns on drop menues.
+ Added new menu button control class. This control is very similar to the splitbutton but without any onclick action.
+ Added support for previous tab focus (shift+tab). The tab_focus setting now takes two items next and previous element.
+ Fixed bug where iframes inside the editor got removed in Firefox on initial load.
+ Fixed bug where the CSS for abbr elements wasn't applied correctly in IE.
+ Fixed bug where mceAddControl on element inside a hidden container produced errors.
+ Fixed bug where closed anchors like <a /> produced strange results.
+ Fixed bug where caret would jump to the top of the editor if enter was pressed a the end of a list.
+ Fixed bug where remove editor failed if the editor wasn't properly initialized.
+ Fixed bug where render call on for a non existing element produced exception.
+ Fixed bug where parent window was hidden when the color picker was used in a non inlinepopups setup.
+ Fixed bug where onchange event wasn't fired correctly on IE when color picker was used in dialogs.
+ Fixed bug where save plugin could not save contents if the converted element wasn't an textarea.
+ Fixed bug where events might be fired even after an editor instance was removed such as blur events.
+ Fixed bug where an exception about undefined undo levels could be throwed sometimes.
+ Fixed bug where the plugin_preview_pageurl option didn't work.
+ Fixed bug where adding/removing an editor instance very fast could produce problems.
+ Fixed bug where the link button was highlighted when an anchor element was selected.
+ Fixed bug where the selected contents where removed if a new anchor element was added.
+ Fixed bug where splitbuttons where rendered one pixel down in the default theme.
+ Fixed bug where some buttons where placed at incorrect positions in the o2k7 theme.
+ Fixed bug that made it impossible to visually disable a custom button that used an image instead of CSS sprites.
+ Fixed bug where it wasn't possible to press delete/backspace if the editor was added+removed and re-added due to a FF bug.
+ Fixed bug where an entities option with only 38,amp,60,lt,62,gt would fail in IE.
+ Fixed bug where innerHTML sometimes generated unknown runtime error on IE.
+ Fixed bug where content_css files wasn't loaded in the template preview iframe.
+ Fixed bug where scroll position was incorrect when toggling fullscreen mode.
+ Fixed bug where restoration of overflow didn't work correctly when disabling fullscreen mode in Opera.
+ Fixed bug where drop menus where places at incorrect locations if the editor was placed in a scrollable container element.
+ Fixed bug where hideMenu didn't hide sub menus correctly. It will now hide all menus recursively.
+ Fixed so theme_advanced_path_location can be used in init options for compatibility reasons.
+ Fixed so the drop menu colors matches the rest of o2k7 theme.
+ Fixed so the preview example.html file is updated to the new 3.x API.
+ Fixed so the margins are the same by default inside the editable area between IE and other browsers.
+ Fixed so editor contents gets stored before it the onSubmit event is fired.
+Version 3.0rc1 (2008-01-08)
+ Added new classes for toolbar rows in advanced theme mceToolbarRow1..n enabled you to change appearance of individual rows.
+ Added auto detection for the strict_loading_mode option when running in application/xhtml+xml mode on Gecko.
+ Optimized the HTML serializer by bundling some post process methods together.
+ Fixed so that the toolbars have unique IDs, enables you to alter the toolbars using the ControlManager and the DOM.
+ Fixed bug where delta values for dialog sizes in language packs didn't work correctly due to missing string to number casting.
+ Fixed bug where paragraph generation logic didn't handle hr or table elements correctly if they where the only element.
+ Fixed bug where some elements got extra linebreaks added after or before it in HTML output.
+ Fixed bug where it was hard to modify existing style data on table rows and table cells.
+ Fixed bug where the dom.getRect method didn't handle non pixel values correctly.
+ Fixed bug where strikethrough and underline couldn't be toggled on existing span elements.
+ Fixed bug where the postprocessor searched for nsbp instead of nbsp entities.
+ Fixed bug where it was impossible to edit links that had child elements within them.
+ Fixed bug where it was possible to click on the parent item of a submenu.
+ Fixed bug where mouseover/mouseout images couldn't be removed in advimage dialog.
+ Fixed bug where drop menus didn't work when running in application/xhtml+xml mode.
+ Fixed bug where Opera added doctype to output in application/xhtml+xml mode.
+ Fixed bug where some DOM methods didn't work correctly in the application/xhtml+xml mode.
+ Fixed bug where the inlinepopups didn't work correctly in the application/xhtml+xml mode.
+ Fixed bug where the ColorSplitButton didn't display correctly in the application/xhtml+xml mode.
+ Fixed bug where the UI layout was incorrect on Gecko browsers when running in application/xhtml+xml mode.
+ Fixed bug where the word paste plugin produced exception while running in application/xhtml+xml mode.
+ Fixed bug where there wasn't any hidden input element generated for divs while running in application/xhtml+xml mode.
+ Fixed bug where indentation of script/style/pre elements where incorrect.
+ Fixed bug where script element contents was removed in IE.
+ Fixed bug where script element contents got entity encoded.
+ Fixed bug where you couldn't edit existing element styles using the styles plugin.
+ Fixed bug where styles wasn't updated properly sometimes due to an performance enhancement.
+ Fixed bug where font sizes couldn't be changed using the style plugin.
+ Fixed bug where an error was produced in Gecko browsers when switching back from fullscreen mode.
+ Fixed bug where Opera was producing br elements after elements like h3.
+ Fixed bug where TinyMCE couldn't be loaded on a page using - characters in it's URL.
+ Fixed bug where the editor container element was forced to have a specific name.
+ Fixed bug with force_br_newlines option on Firefox, even though it should never be used (Read FAQ).
+ Fixed bug where onclick event had an return true; prefix added when creating an popup.
+ Fixed bug where the theme_advanced_statusbar_location option couldn't handle the value "none".
+ Fixed issue with URLs with multiple at characters for example an Zope URI.
+ Fixed so simple and advanced themes doesn't collide.
+ Fixed so a elements gets removed when the href field is left empty, the href attribute is required in a link after all.
+ Fixed so img elements gets removed when the src field is left empty, the src attribute is required for all images after all.
+ Removed the indent and encode methods from the tinymce.dom.Serializer class due to performance enhancement and reduction of the API size.
+Version 3.0b3 (2007-12-14)
+ Added new getElement method to Editor class, returns the element that was replaced with the editor instance.
+ Added new unavailable prefix for disabled controls for accessibility reasons.
+ Fixed bug where regexp patterns couldn't be used for the editor_selector/editor_deselector options.
+ Fixed bug where the DOM wasn't properly initialized before the onInit event was executed in popups.
+ Fixed bug where font sizes where reduced by font size actions on previous spans in Safari.
+ Fixed bug where HR elements got places at the wrong location in IE.
+ Fixed bug where align/justify didn't work correctly on multiple paragraphs.
+ Fixed bug with missing translation for cell scope settings.
+ Fixed bug where selection/caret position was lost on some table actions.
+ Fixed bug where editor instances couldn't be added to hidden div elements.
+ Fixed bug where list elements in Safari would get an odd ID attribute.
+ Fixed bug where IE would return <html/> when the editor was completely empty.
+ Fixed bug where accessibility title attribute for access keys wasn't setup properly.
+ Fixed bug where forecolorpicker and backcolorpicker control names wasn't working.
+ Fixed bug where inserting template content didn't work in Safari due to selection exception.
+ Fixed bug where absolute URLs to remote hosts couldn't be used for background images.
+ Fixed bug where mysterious span elements where produced in Safari when injecting HTML contents.
+ Fixed bug where the media plugin didn't work correctly on the latest Opera 9.24.
+ Fixed bug where indentation of HTML output wasn't applied to all block elements.
+ Fixed bug where Safari was production DOM exception if you pressed enter in an empty editor.
+ Fixed bug where media plugin didn't parse script tags correctly patch contributed by Mathieu Campagna.
+ Fixed bug where the drop menus of list boxes like blockformat could produce scrolling of the page.
+ Fixed bug where the drop menus where placed at an incorrect location if TinyMCE was placed in a scrollable div.
+ Fixed bug where submit buttons couldn't be named submit, it's not recommended to name submit buttons submit anyway.
+ Fixed bug where the stylelistbox produced an exception if there was only one class in the list box.
+ Fixed bug where the stylelistbox wasn't updated correctly when the current class was removed.
+ Fixed bug where the formatblock command sometimes removed the body element.
+ Fixed bug where fullscreen switching in IE sometimes produced an exception when the spellchecker plugin was enabled.
+ Fixed issue where FF produced an empty paragraph when the editor was completely empty.
+ Fixed issue with size of image dialog in the advanced theme.
+ Fixed issues with the bbcode plugin it now also handles spans and the [font] rule.
+ Fixed so the style compression feature is a bit smarter to resolve issues with Opera.
+ Reintroduced the remove_linebreaks option, this is enabled by default.
+Version 3.0b2 (2007-11-29)
+ Added type and compact attributes to the default valid_elements list for the ul and ol elements.
+ Added missing accessibility support to native list boxes in both the toolbar and dialogs.
+ Added missing access key for the element path for accessibility reasons.
+ Fixed support for loading themes from external URLs.
+ Fixed bug where setOuterHTML didn't work correctly when multiple elements where passed to it.
+ Fixed bug with visualchars plugin was moving elements around in the DOM.
+ Fixed bug with DIV elements that got converted into editors on IE.
+ Fixed bug with paste plugin using the old event API.
+ Fixed bug where the spellchecker was removing the word when it was ignored.
+ Fixed bug where fullscreen wasn't working properly.
+ Fixed bug where the base href element and attribute was ignored.
+ Fixed bug where redo function didn't work in IE.
+ Fixed bug where content_css didn't work as previous 2.x branch.
+ Fixed bug where preview dialog was throwing errors if the content_css wasn't defined.
+ Fixed bug where the theme_advanced_path option didn't work like the 2.x branch.
+ Fixed bug where the theme_advanced_statusbar_location was called theme_advanced_status_location.
+ Fixed bug where the strict_loading_mode option didn't work if you created editors dynamically without using the EditorManager.
+ Fixed bug where some language values wasn't translated such as insert and update in dialogs.
+ Fixed bug where some image attributes wasn't stored correctly when inserting an image.
+ Fixed bug where fullscreen mode didn't restore scrollbars when disabled.
+ Fixed bug where there was no visual representation for tab focus in toolbars on IE.
+ Fixed bug where HR elements wasn't treated as block elements so forced_root_block would fail on these.
+ Fixed bug where autosave presented warning message even when the form was submitted normally.
+ Fixed typo of openBrower it's now openBrowser in form_utils.js.
+ Fixed various HTML problems like missing TD elements and duplicated doctypes.
+ Fixed default values for theme_advanced_resize_horizontal, theme_advanced_resizing_use_cookie to be 2.x compatible.
+ Moved spellchecker JS files into the development package.
+ Removed support for theme_advanced_path_location since the theme_advanced_statusbar_location is the correct option name.
+Version 3.0b1 (2007-11-21)
+ Added new tab_focus option, that enables you to specify a element id or that the next element to be focused on tab key down.
+ Added new addQueryValueHandler method to the tinymce.Editor class.
+ Added new class_filter option, this enables you to specify a function that can filter out CSS classes for the styles list box.
+ Added support form [url=url]title[/url] to the bbcode plugin.
+ Renamed the addCommandQueryState method in the tinymce.Editor class to addQueryStateHandler.
+ Renamed loadQue to loadQueue, to correct spelling.
+ Removed the createDOM method from the window manager and replace it with a createInstance method.
+ Removed the add to beginning of class attribute parameter of the DOMUtils.addClass method.
+ Fixed bug with the forced_root_block option, didn't work correctly with multiple inline elements.
+ Fixed bug where image dialogs replaced the current image element with a new one even when it was updated.
+ Fixed bug where the submit trigger wasn't executed when divs where converted into editor instances.
+ Fixed bug where div elements that got converted into editors didn't get a hidden input element generated for them.
+ Fixed bug where the the media_use_script option for the media plugin wasn't working correctly.
+ Fixed bug where the font size and font family listboxes wasn't updated correctly on Safari.
+ Fixed bug where the height of the fieldset in default image dialog for the advanced theme was to small.
+ Fixed bug where the font sizes behaved incorrectly after a cleanup on Safari.
+ Fixed bug where formatblock didn't work correctly in Safari on some elements.
+ Fixed bug where template plugin didn't insert content correctly unless some options where specified.
+ Fixed bug where charmap on Safari produced scrollbars.
+ Fixed bug where there was white artifacts in some dialogs due to missing background color.
+ Fixed bug where port was added to all external URLs if the editor was loaded from a custom port.
+ Fixed bug where the context menus got duplicated on Safari 3.0.4 on Mac OS X.
+ Fixed bug where dialogs like paste from word was huge on Firefox.
+ Fixed bug with media plugin not working with windows media objects.
+ Fixed bug where a forever loop was created if multiple instances where submitted using form.submit.
+ Fixed bug with editing a table produce error in IE when inlinepopups where used.
+ Fixed bug where the style plugin generated ugly looking style information in IE.
+ Fixed bug where the inline dialogs that got opened while in fullscreen mode wasn't visible.
+ Fixed bug where it was difficult to place the caret inside the word paste dialog.
+ Fixed bug where Opera produced strange border in the word paste dialog.
+ Fixed bug where viewport constraints could move a inlinepopup to a negative x, y position if the viewport was to small.
+ Fixed bug where template plugin was producing an error due to a deprecated API call.
+ Fixed bug where drag drop of images failed in Gecko if a document_base_url was specified.
+ Fixed bug where Firefox 3 failed to apply block formats like H1-H6 it still breaks on DIVs this has been reported to bugzilla.
+ Fixed bug where IE was producing a warning dialog about non secure items when running TinyMCE over HTTPS.
+ Fixed bug where the onbeforeunload event was triggered when menus or dialogs where opened.
+ Fixed bug where the fullscreen mode of the HTML view source box threw an error.
+ Fixed bug where the mceFocus command didn't work correctly.
+ Fixed bug where the selection could get lost in IE using inlinepopups.
+ Fixed so the body of the editor area has the mceContentBody class just like the 2.x branch.
+ Fixed so the media icon gets active when a media element is selected.
+Version 3.0a3 (2007-11-13)
+ Added new experimental jQuery and Prototype framework adapters to the development package.
+ Added new translation.html file for the development package. Helps with the internationalization of TinyMCE.
+ Added new setup callback option, use this callback to add events to TinyMCE. This method is recommended over the old callbacks.
+ Added new API documetation to all classes, functions, events, properties to the Wiki with examples etc.
+ Added new init method to all plugins and themes, since it's shorter to write and it mimics interface capable languages better.
+ Fixed various CSS issues in the default skin such as alignment of split buttons and separators.
+ Fixed issues with mod_security. It didn't like that a content type of text/javascript was forced in a XHR.
+ Fixed all events so that they now pass the sender object as it's first argument.
+ Fixed some DOM methods so they now can take an array as input.
+ Fixed so addButton and the methods of the ControlManager uses less arguments and it now uses a settings object instead.
+ Fixed various issues with the tinymce.util.URI class.
+ Fixed bug in IE and Safari and the on demand gzip loading feature.
+ Fixed bug with moving inline windows sometimes failed in IE6.
+ Fixed bug where save_callback function wasn't executed at all.
+ Fixed bug where inlinepopups produces scrollbars if windows where moved to the corners of the browser.
+ Fixed bug where view HTML source failed when inserting a embedded media object.
+ Fixed bug where the listbox menus didn't display correctly on IE6.
+ Fixed bug where undo level wasn't added when editor was blurred.
+ Fixed bug where spellchecker wasn't disabled when fullscreen mode was enabled.
+ Fixed bug where Firefox could crash some times when the user switched to fullscreen mode.
+ Fixed bug where tinymce.ui.DropMenu didn't remove all item data when an item was removed from the menu.
+ Fixed bug where anchor list in advlink dialog wasn't populated correctly in Safari.
+ Fixed bug where it wasn't possible to edit tables in IE when inlinepopups was enabled.
+ Fixed bug where it wasn't possible to change the table width of an existing table.
+ Fixed bug where xhtmlxtras like abbr didn't work correctly on IE.
+ Fixed bug where IE6 had some graphics rendering issues with the inlinepopups.
+ Fixed bug where inlinepopup windows where moved incorrectly when they were boundary checked for min width.
+ Fixed bug where textareas without id or name couldn't be converted into editor instances.
+ Fixed bug where TinyMCE was stealing element focus on IE.
+ Fixed bug where the getParam method didn't handle false values correctly.
+ Fixed bug where inlinepopups was clipped by other TinyMCE instances or relative elements in IE.
+ Fixed bug where the contextmenu was clipped by other TinyMCE instances or relative elements in IE.
+ Fixed bug where listbox menus was clipped by other TinyMCE instances or relative elements in IE.
+ Fixed bug where listboxes wasn't updated correctly when the a value wasn't found by select.
+ Fixed various CSS issues that produced odd rendering bugs in IE.
+ Fixed issues with tinymce.ui.DropMenu class, it required some optional settings to be specified.
+ Fixed so multiple blockquotes can be removed with a easier method than before.
+ Optimized some of the core API to boost performance.
+ Removed some functions from the core API that wasn't needed.
+Version 3.0a2 (2007-11-02)
+ Fixed critical bug where IE generaded an error on a hasAttribute call in the serialization engine.
+ Fixed critical bug where some dialogs didn't open in the non dev package.
+ Fixed bug when using the theme_advanced_styles option. Error was thrown in some dialogs.
+ Fixed bug where the close buttons produced an error when native windows where used.
+ Fixed bug in default skin so that split buttons gets activated correctly.
+ Fixed so plugins can be loaded from external urls outsite the plugins directory.
+Version 3.0a1 (2007-11-01)
+ Rewrote the core and most of the plugins and themes from scratch.
+ Added new and improved serialization engine, faster and more powerful.
+ Added new internal event system, things like editor.onClick.add(func).
+ Added new inlinepopups plugin, the dialogs are now skinnable and uses clearlooks2 as default.
+ Added new contextmenu plugin, context menus can now have submenus and plugins can add items on the fly.
+ Added new skin support for the simple and advanced themes you can alter the whole UI using CSS.
+ Added new o2k7 skin for the simple and advanced themes.
+ Added new custom list boxes for font size/format/style etc with preview support.
+ Added new UI management, enabled plugins to create controls like splitbuttons or menus easier.
+ Added new JSON parser/serializer and JSON-RPC class to the core API.
+ Added new cookie utility class to the core API.
+ Added new Unit testing class to the core API only available in dev mode.
+ Added new firebug lite integration when loading the dev version of TinyMCE.
+ Added new Safari plugin, fixes lots compatibility of issues with Safari 3.x.
+ Added new URI/URL parsing it now handles the hole RFC and even some exceptions.
+ Added new pagebreak plugin, enables you to insert pagebreak comments like <!-- pagebreak -->
+ Added new on demand loading of plugins and themes. Enables you to load and init TinyMCE at any time.
+ Added new throbber/progress visualization a plugin can show/hide this when it's needed.
+ Added new blockquote button. Enables you to wrap paragraphs in blockquotes.
+ Added new compat2x plugin. Will provide a TinyMCE 2.x API for older plugins.
+ Added new theme_advanced_resizing_min_width, theme_advanced_resizing_min_height options.
+ Added new theme_advanced_resizing_max_height, theme_advanced_resizing_max_height options.
+ Added new use_native_selects option. Enables you to toggle native listboxes on and off.
+ Added new docs_url option enables you to specify where the TinyMCE user documentation is located.
+ Added new frame and rules options for the table dialog.
+ Added new global rule for valid_elements/extended_valid_elements enables you to specify global attributes for all elements.
+ Added new deny attribute rule characher so it's possible to deny global attribute rules on specific elements.
+ Added new unit tests in the dev package of TinyMCE. Runs tests on the core API, commands and settings of the editor.
+ Readded the inline_styles option and enabled it by default so deprecated attributes are no longer used.
+ Removed all button images and replaced them with CSS sprite images. Reduces the number of requests needed.
+ Removed lots of language files and merged them into the base language files. Reduces the number of requests needed.
+ Removed lots of unnecessary files and merged many of them together to reduce requests and improve loading speed.
+ Reduced the over all script size by 33% and the number of files/requests by 75% so it loads a lot faster.
+ Fixed so convert_fonts_to_spans are enabled by default. So no more font tags.
+ Fixed so underline and strikethrough uses spans instread of deprecated U and STRIKE elements.
+ Fixed so indent/outdent adds/removed margin-left instead of blockquotes.
+ Fixed so alignment of paragraphs results in a text-align style value instead of the deprecated align attribute.
+ Fixed so alignment of images uses float or vertical-align style values instead of the deprecated align attribute.
+ Fixed so all classes from @import stylesheets gets imported into the editor.
+ Fixed so the directionality can toggle the dir attribute on and off.
+ Fixed so the fullscreen_settings can be used for all types of fullscreen modes.
+ Fixed so the advanced HR dialog gets displayed when inserting a HR not only on edit.
+ Fixed bug where word wrap didn't work in the source editor on Safari.
+ Fixed so non HTML elements can be used within the editor such as <myns:tag>
+ Fixed various memory leaks in IE and reduced the unload cleanups needed.
+ Fixed so the preformatted option adds an invisible container pre tag inside the editor.
+ Renamed the _template plugin to example and updated it to use the new 3.x API.
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js
index d54e37a8e..8c164ff9f 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js
@@ -1 +1 @@
-(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;if(tinyMCE.isIE){return}a.onKeyDown.add(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng().cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f-2);a.setEnd(n,f-1);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})(); \ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng(true).cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f-2);a.setEnd(n,f-1);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})(); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
index 4db4acf6c..ad9d7007a 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
@@ -1,174 +1,180 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2011, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
-
-(function() {
- tinymce.create('tinymce.plugins.AutolinkPlugin', {
- /**
- * Initializes the plugin, this will be executed after the plugin has been created.
- * This call is done before the editor instance has finished it's initialization so use the onInit event
- * of the editor instance to intercept that event.
- *
- * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
- * @param {string} url Absolute URL to where the plugin is located.
- */
-
- init : function(ed, url) {
- var t = this;
-
- // Internet Explorer has built-in automatic linking
- if (tinyMCE.isIE)
- return;
-
- // Add a key down handler
- ed.onKeyDown.add(function(ed, e) {
- if (e.keyCode == 13)
- return t.handleEnter(ed);
- });
-
- ed.onKeyPress.add(function(ed, e) {
- if (e.which == 41)
- return t.handleEclipse(ed);
- });
-
- // Add a key up handler
- ed.onKeyUp.add(function(ed, e) {
- if (e.keyCode == 32)
- return t.handleSpacebar(ed);
- });
- },
-
- handleEclipse : function(ed) {
- this.parseCurrentLine(ed, -1, '(', true);
- },
-
- handleSpacebar : function(ed) {
- this.parseCurrentLine(ed, 0, '', true);
- },
-
- handleEnter : function(ed) {
- this.parseCurrentLine(ed, -1, '', false);
- },
-
- parseCurrentLine : function(ed, end_offset, delimiter, goback) {
- var r, end, start, endContainer, bookmark, text, matches, prev, len;
-
- // We need at least five characters to form a URL,
- // hence, at minimum, five characters from the beginning of the line.
- r = ed.selection.getRng().cloneRange();
- if (r.startOffset < 5) {
- // During testing, the caret is placed inbetween two text nodes.
- // The previous text node contains the URL.
- prev = r.endContainer.previousSibling;
- if (prev == null) {
- if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null)
- return;
-
- prev = r.endContainer.firstChild.nextSibling;
- }
- len = prev.length;
- r.setStart(prev, len);
- r.setEnd(prev, len);
-
- if (r.endOffset < 5)
- return;
-
- end = r.endOffset;
- endContainer = prev;
- } else {
- endContainer = r.endContainer;
-
- // Get a text node
- if (endContainer.nodeType != 3 && endContainer.firstChild) {
- while (endContainer.nodeType != 3 && endContainer.firstChild)
- endContainer = endContainer.firstChild;
-
- r.setStart(endContainer, 0);
- r.setEnd(endContainer, endContainer.nodeValue.length);
- }
-
- if (r.endOffset == 1)
- end = 2;
- else
- end = r.endOffset - 1 - end_offset;
- }
-
- start = end;
-
- do
- {
- // Move the selection one character backwards.
- r.setStart(endContainer, end - 2);
- r.setEnd(endContainer, end - 1);
- end -= 1;
-
- // Loop until one of the following is found: a blank space, &nbsp;, delimeter, (end-2) >= 0
- } while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter);
-
- if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) {
- r.setStart(endContainer, end);
- r.setEnd(endContainer, start);
- end += 1;
- } else if (r.startOffset == 0) {
- r.setStart(endContainer, 0);
- r.setEnd(endContainer, start);
- }
- else {
- r.setStart(endContainer, end);
- r.setEnd(endContainer, start);
- }
-
- text = r.toString();
- matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|[A-Z0-9._%+-]+@)(.+)$/i);
-
- if (matches) {
- if (matches[1] == 'www.') {
- matches[1] = 'http://www.';
- } else if (/@$/.test(matches[1])) {
- matches[1] = 'mailto:' + matches[1];
- }
-
- bookmark = ed.selection.getBookmark();
-
- ed.selection.setRng(r);
- tinyMCE.execCommand('createlink',false, matches[1] + matches[2]);
- ed.selection.moveToBookmark(bookmark);
-
- // TODO: Determine if this is still needed.
- if (tinyMCE.isWebKit) {
- // move the caret to its original position
- ed.selection.collapse(false);
- var max = Math.min(endContainer.length, start + 1);
- r.setStart(endContainer, max);
- r.setEnd(endContainer, max);
- ed.selection.setRng(r);
- }
- }
- },
-
- /**
- * Returns information about the plugin as a name/value array.
- * The current keys are longname, author, authorurl, infourl and version.
- *
- * @return {Object} Name/value array containing information about the plugin.
- */
- getInfo : function() {
- return {
- longname : 'Autolink',
- author : 'Moxiecode Systems AB',
- authorurl : 'http://tinymce.moxiecode.com',
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink',
- version : tinymce.majorVersion + "." + tinymce.minorVersion
- };
- }
- });
-
- // Register plugin
- tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin);
-})();
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2011, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+ tinymce.create('tinymce.plugins.AutolinkPlugin', {
+ /**
+ * Initializes the plugin, this will be executed after the plugin has been created.
+ * This call is done before the editor instance has finished it's initialization so use the onInit event
+ * of the editor instance to intercept that event.
+ *
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
+ * @param {string} url Absolute URL to where the plugin is located.
+ */
+
+ init : function(ed, url) {
+ var t = this;
+
+ // Add a key down handler
+ ed.onKeyDown.addToTop(function(ed, e) {
+ if (e.keyCode == 13)
+ return t.handleEnter(ed);
+ });
+
+ // Internet Explorer has built-in automatic linking for most cases
+ if (tinyMCE.isIE)
+ return;
+
+ ed.onKeyPress.add(function(ed, e) {
+ if (e.which == 41)
+ return t.handleEclipse(ed);
+ });
+
+ // Add a key up handler
+ ed.onKeyUp.add(function(ed, e) {
+ if (e.keyCode == 32)
+ return t.handleSpacebar(ed);
+ });
+ },
+
+ handleEclipse : function(ed) {
+ this.parseCurrentLine(ed, -1, '(', true);
+ },
+
+ handleSpacebar : function(ed) {
+ this.parseCurrentLine(ed, 0, '', true);
+ },
+
+ handleEnter : function(ed) {
+ this.parseCurrentLine(ed, -1, '', false);
+ },
+
+ parseCurrentLine : function(ed, end_offset, delimiter, goback) {
+ var r, end, start, endContainer, bookmark, text, matches, prev, len;
+
+ // We need at least five characters to form a URL,
+ // hence, at minimum, five characters from the beginning of the line.
+ r = ed.selection.getRng(true).cloneRange();
+ if (r.startOffset < 5) {
+ // During testing, the caret is placed inbetween two text nodes.
+ // The previous text node contains the URL.
+ prev = r.endContainer.previousSibling;
+ if (prev == null) {
+ if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null)
+ return;
+
+ prev = r.endContainer.firstChild.nextSibling;
+ }
+ len = prev.length;
+ r.setStart(prev, len);
+ r.setEnd(prev, len);
+
+ if (r.endOffset < 5)
+ return;
+
+ end = r.endOffset;
+ endContainer = prev;
+ } else {
+ endContainer = r.endContainer;
+
+ // Get a text node
+ if (endContainer.nodeType != 3 && endContainer.firstChild) {
+ while (endContainer.nodeType != 3 && endContainer.firstChild)
+ endContainer = endContainer.firstChild;
+
+ r.setStart(endContainer, 0);
+ r.setEnd(endContainer, endContainer.nodeValue.length);
+ }
+
+ if (r.endOffset == 1)
+ end = 2;
+ else
+ end = r.endOffset - 1 - end_offset;
+ }
+
+ start = end;
+
+ do
+ {
+ // Move the selection one character backwards.
+ r.setStart(endContainer, end - 2);
+ r.setEnd(endContainer, end - 1);
+ end -= 1;
+
+ // Loop until one of the following is found: a blank space, &nbsp;, delimeter, (end-2) >= 0
+ } while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter);
+
+ if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) {
+ r.setStart(endContainer, end);
+ r.setEnd(endContainer, start);
+ end += 1;
+ } else if (r.startOffset == 0) {
+ r.setStart(endContainer, 0);
+ r.setEnd(endContainer, start);
+ }
+ else {
+ r.setStart(endContainer, end);
+ r.setEnd(endContainer, start);
+ }
+
+ // Exclude last . from word like "www.site.com."
+ var text = r.toString();
+ if (text.charAt(text.length - 1) == '.') {
+ r.setEnd(endContainer, start - 1);
+ }
+
+ text = r.toString();
+ matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|[A-Z0-9._%+-]+@)(.+)$/i);
+
+ if (matches) {
+ if (matches[1] == 'www.') {
+ matches[1] = 'http://www.';
+ } else if (/@$/.test(matches[1])) {
+ matches[1] = 'mailto:' + matches[1];
+ }
+
+ bookmark = ed.selection.getBookmark();
+
+ ed.selection.setRng(r);
+ tinyMCE.execCommand('createlink',false, matches[1] + matches[2]);
+ ed.selection.moveToBookmark(bookmark);
+
+ // TODO: Determine if this is still needed.
+ if (tinyMCE.isWebKit) {
+ // move the caret to its original position
+ ed.selection.collapse(false);
+ var max = Math.min(endContainer.length, start + 1);
+ r.setStart(endContainer, max);
+ r.setEnd(endContainer, max);
+ ed.selection.setRng(r);
+ }
+ }
+ },
+
+ /**
+ * Returns information about the plugin as a name/value array.
+ * The current keys are longname, author, authorurl, infourl and version.
+ *
+ * @return {Object} Name/value array containing information about the plugin.
+ */
+ getInfo : function() {
+ return {
+ longname : 'Autolink',
+ author : 'Moxiecode Systems AB',
+ authorurl : 'http://tinymce.moxiecode.com',
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink',
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin);
+})();
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
index a6456f89d..7b65e733c 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
@@ -1 +1 @@
-(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().firstChild);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); \ No newline at end of file
+(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().firstChild);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
index afa4f9b46..6622f924a 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
@@ -79,7 +79,7 @@
vp.h -= 1;
// Use fixed position if it exists
- if (tinymce.isIE6)
+ if (tinymce.isIE6 || document.compatMode == 'BackCompat')
posCss = 'absolute;top:' + vp.y;
else
posCss = 'fixed;top:0';
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
index fa10b7483..e711d5301 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
@@ -1,951 +1,951 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2011, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
-
-(function() {
- var each = tinymce.each, Event = tinymce.dom.Event, bookmark;
-
- // Skips text nodes that only contain whitespace since they aren't semantically important.
- function skipWhitespaceNodes(e, next) {
- while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) {
- e = next(e);
- }
- return e;
- }
-
- function skipWhitespaceNodesBackwards(e) {
- return skipWhitespaceNodes(e, function(e) {
- return e.previousSibling;
- });
- }
-
- function skipWhitespaceNodesForwards(e) {
- return skipWhitespaceNodes(e, function(e) {
- return e.nextSibling;
- });
- }
-
- function hasParentInList(ed, e, list) {
- return ed.dom.getParent(e, function(p) {
- return tinymce.inArray(list, p) !== -1;
- });
- }
-
- function isList(e) {
- return e && (e.tagName === 'OL' || e.tagName === 'UL');
- }
-
- function splitNestedLists(element, dom) {
- var tmp, nested, wrapItem;
- tmp = skipWhitespaceNodesBackwards(element.lastChild);
- while (isList(tmp)) {
- nested = tmp;
- tmp = skipWhitespaceNodesBackwards(nested.previousSibling);
- }
- if (nested) {
- wrapItem = dom.create('li', { style: 'list-style-type: none;'});
- dom.split(element, nested);
- dom.insertAfter(wrapItem, nested);
- wrapItem.appendChild(nested);
- wrapItem.appendChild(nested);
- element = wrapItem.previousSibling;
- }
- return element;
- }
-
- function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) {
- e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs);
- return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs);
- }
-
- function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) {
- var prev = skipWhitespaceNodesBackwards(e.previousSibling);
- if (prev) {
- return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs);
- } else {
- return e;
- }
- }
-
- function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) {
- var next = skipWhitespaceNodesForwards(e.nextSibling);
- if (next) {
- return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs);
- } else {
- return e;
- }
- }
-
- function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) {
- if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) {
- return merge(e1, e2, differentStylesMasterElement);
- } else if (e1 && e1.tagName === 'LI' && isList(e2)) {
- // Fix invalidly nested lists.
- e1.appendChild(e2);
- }
- return e2;
- }
-
- function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) {
- if (!e1 || !e2) {
- return false;
- } else if (e1.tagName === 'LI' && e2.tagName === 'LI') {
- return e2.style.listStyleType === 'none' || containsOnlyAList(e2);
- } else if (isList(e1)) {
- return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2);
- } else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P';
- }
-
- function isListForIndent(e) {
- var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild);
- return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none' || containsOnlyAList(firstLI));
- }
-
- function containsOnlyAList(e) {
- var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild);
- return firstChild && lastChild && firstChild === lastChild && isList(firstChild);
- }
-
- function merge(e1, e2, masterElement) {
- var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild);
- if (e1.tagName === 'P') {
- e1.appendChild(e1.ownerDocument.createElement('br'));
- }
- while (e2.firstChild) {
- e1.appendChild(e2.firstChild);
- }
- if (masterElement) {
- e1.style.listStyleType = masterElement.style.listStyleType;
- }
- e2.parentNode.removeChild(e2);
- attemptMerge(lastOriginal, firstNew, false);
- return e1;
- }
-
- function findItemToOperateOn(e, dom) {
- var item;
- if (!dom.is(e, 'li,ol,ul')) {
- item = dom.getParent(e, 'li');
- if (item) {
- e = item;
- }
- }
- return e;
- }
-
- tinymce.create('tinymce.plugins.Lists', {
- init: function(ed) {
- var LIST_TABBING = 'TABBING';
- var LIST_EMPTY_ITEM = 'EMPTY';
- var LIST_ESCAPE = 'ESCAPE';
- var LIST_PARAGRAPH = 'PARAGRAPH';
- var LIST_UNKNOWN = 'UNKNOWN';
- var state = LIST_UNKNOWN;
-
- function isTabInList(e) {
- // Don't indent on Ctrl+Tab or Alt+Tab
- return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) &&
- (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
- }
-
- function isOnLastListItem() {
- var li = getLi();
- var grandParent = li.parentNode.parentNode;
- var isLastItem = li.parentNode.lastChild === li;
- return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li);
- }
-
- function isNestedList(grandParent) {
- if (isList(grandParent)) {
- return grandParent.parentNode && grandParent.parentNode.tagName === 'LI';
- } else {
- return grandParent.tagName === 'LI';
- }
- }
-
- function isInEmptyListItem() {
- return ed.selection.isCollapsed() && isEmptyListItem(getLi());
- }
-
- function getLi() {
- var n = ed.selection.getStart();
- // Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position
- return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n;
- }
-
- function isEmptyListItem(li) {
- var numChildren = li.childNodes.length;
- if (li.tagName === 'LI') {
- return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li));
- }
- return false;
- }
-
- function isEmptyIE9Li(li) {
- // only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these
- var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'});
- var isLastLi = li == lis[lis.length - 1];
- var child = li.firstChild;
- return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32));
- }
-
- function isEnter(e) {
- return e.keyCode === tinymce.VK.ENTER;
- }
-
- function isEnterWithoutShift(e) {
- return isEnter(e) && !e.shiftKey;
- }
-
- function getListKeyState(e) {
- if (isTabInList(e)) {
- return LIST_TABBING;
- } else if (isEnterWithoutShift(e) && isOnLastListItem()) {
- // Returns LIST_UNKNOWN since breaking out of lists is handled by the EnterKey.js logic now
- //return LIST_ESCAPE;
- return LIST_UNKNOWN;
- } else if (isEnterWithoutShift(e) && isInEmptyListItem()) {
- return LIST_EMPTY_ITEM;
- } else {
- return LIST_UNKNOWN;
- }
- }
-
- function cancelDefaultEvents(ed, e) {
- // list escape is done manually using outdent as it does not create paragraphs correctly in td's
- if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) {
- Event.cancel(e);
- }
- }
-
- function isCursorAtEndOfContainer() {
- var range = ed.selection.getRng(true);
- var startContainer = range.startContainer;
- if (startContainer.nodeType == 3) {
- var value = startContainer.nodeValue;
- if (tinymce.isIE9 && value.length > 1 && value.charCodeAt(value.length-1) == 32) {
- // IE9 places a space on the end of the text in some cases so ignore last char
- return (range.endOffset == value.length-1);
- } else {
- return (range.endOffset == value.length);
- }
- } else if (startContainer.nodeType == 1) {
- return range.endOffset == startContainer.childNodes.length;
- }
- return false;
- }
-
- /*
- If we are at the end of a list item surrounded with an element, pressing enter should create a
- new list item instead without splitting the element e.g. don't want to create new P or H1 tag
- */
- function isEndOfListItem() {
- var node = ed.selection.getNode();
- var validElements = 'h1,h2,h3,h4,h5,h6,p,div';
- var isLastParagraphOfLi = ed.dom.is(node, validElements) && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node;
- return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer();
- }
-
- // Creates a new list item after the current selection's list item parent
- function createNewLi(ed, e) {
- if (isEnterWithoutShift(e) && isEndOfListItem()) {
- var node = ed.selection.getNode();
- var li = ed.dom.create("li");
- var parentLi = ed.dom.getParent(node, 'li');
- ed.dom.insertAfter(li, parentLi);
-
- // Move caret to new list element.
- if (tinymce.isIE6 || tinymce.isIE7 || tinyMCE.isIE8) {
- // Removed this line since it would create an odd <&nbsp;> tag and placing the caret inside an empty LI is handled and should be handled by the selection logic
- //li.appendChild(ed.dom.create("&nbsp;")); // IE needs an element within the bullet point
- ed.selection.setCursorLocation(li, 1);
- } else {
- ed.selection.setCursorLocation(li, 0);
- }
- e.preventDefault();
- }
- }
-
- function imageJoiningListItem(ed, e) {
- var prevSibling;
-
- if (!tinymce.isGecko)
- return;
-
- var n = ed.selection.getStart();
- if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG')
- return;
-
- function lastLI(node) {
- var child = node.firstChild;
- var li = null;
- do {
- if (!child)
- break;
-
- if (child.tagName === 'LI')
- li = child;
- } while (child = child.nextSibling);
-
- return li;
- }
-
- function addChildren(parentNode, destination) {
- while (parentNode.childNodes.length > 0)
- destination.appendChild(parentNode.childNodes[0]);
- }
-
- // Check if there is a previous sibling
- prevSibling = n.parentNode.previousSibling;
- if (!prevSibling)
- return;
-
- var ul;
- if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL')
- ul = prevSibling;
- else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL'))
- ul = prevSibling.previousSibling;
- else
- return;
-
- var li = lastLI(ul);
-
- // move the caret to the end of the list item
- var rng = ed.dom.createRng();
- rng.setStart(li, 1);
- rng.setEnd(li, 1);
- ed.selection.setRng(rng);
- ed.selection.collapse(true);
-
- // save a bookmark at the end of the list item
- var bookmark = ed.selection.getBookmark();
-
- // copy the image an its text to the list item
- var clone = n.parentNode.cloneNode(true);
- if (clone.tagName === 'P' || clone.tagName === 'DIV')
- addChildren(clone, li);
- else
- li.appendChild(clone);
-
- // remove the old copy of the image
- n.parentNode.parentNode.removeChild(n.parentNode);
-
- // move the caret where we saved the bookmark
- ed.selection.moveToBookmark(bookmark);
- }
-
- // fix the cursor position to ensure it is correct in IE
- function setCursorPositionToOriginalLi(li) {
- var list = ed.dom.getParent(li, 'ol,ul');
- if (list != null) {
- var lastLi = list.lastChild;
- // Removed this line since IE9 would report an DOM character error and placing the caret inside an empty LI is handled and should be handled by the selection logic
- //lastLi.appendChild(ed.getDoc().createElement(''));
- ed.selection.setCursorLocation(lastLi, 0);
- }
- }
-
- this.ed = ed;
- ed.addCommand('Indent', this.indent, this);
- ed.addCommand('Outdent', this.outdent, this);
- ed.addCommand('InsertUnorderedList', function() {
- this.applyList('UL', 'OL');
- }, this);
- ed.addCommand('InsertOrderedList', function() {
- this.applyList('OL', 'UL');
- }, this);
-
- ed.onInit.add(function() {
- ed.editorCommands.addCommands({
- 'outdent': function() {
- var sel = ed.selection, dom = ed.dom;
-
- function hasStyleIndent(n) {
- n = dom.getParent(n, dom.isBlock);
- return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0;
- }
-
- return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList');
- }
- }, 'state');
- });
-
- ed.onKeyUp.add(function(ed, e) {
- if (state == LIST_TABBING) {
- ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null);
- state = LIST_UNKNOWN;
- return Event.cancel(e);
- } else if (state == LIST_EMPTY_ITEM) {
- var li = getLi();
- var shouldOutdent = ed.settings.list_outdent_on_enter === true || e.shiftKey;
- ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null);
- if (tinymce.isIE) {
- setCursorPositionToOriginalLi(li);
- }
-
- return Event.cancel(e);
- } else if (state == LIST_ESCAPE) {
- if (tinymce.isIE6 || tinymce.isIE7 || tinymce.isIE8) {
- // append a zero sized nbsp so that caret is positioned correctly in IE after escaping and applying formatting.
- // if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after
- // escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag.
- var n = ed.getDoc().createTextNode('\uFEFF');
- ed.selection.getNode().appendChild(n);
- } else if (tinymce.isIE9 || tinymce.isGecko) {
- // IE9 does not escape the list so we use outdent to do this and cancel the default behaviour
- // Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves
- ed.execCommand('Outdent');
- return Event.cancel(e);
- }
- }
- });
-
- function fixListItem(parent, reference) {
- // a zero-sized non-breaking space is placed in the empty list item so that the nested list is
- // displayed on the below line instead of next to it
- var n = ed.getDoc().createTextNode('\uFEFF');
- parent.insertBefore(n, reference);
- ed.selection.setCursorLocation(n, 0);
- // repaint to remove rendering artifact. only visible when creating new list
- ed.execCommand('mceRepaint');
- }
-
- function fixIndentedListItemForGecko(ed, e) {
- if (isEnter(e)) {
- var li = getLi();
- if (li) {
- var parent = li.parentNode;
- var grandParent = parent && parent.parentNode;
- if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) {
- fixListItem(grandParent, parent);
- }
- }
- }
- }
-
- function fixIndentedListItemForIE8(ed, e) {
- if (isEnter(e)) {
- var li = getLi();
- if (ed.dom.select('ul li', li).length === 1) {
- var list = li.firstChild;
- fixListItem(li, list);
- }
- }
- }
-
- function fixDeletingFirstCharOfList(ed, e) {
- function listElements(list, li) {
- var elements = [];
- var walker = new tinymce.dom.TreeWalker(li, list);
- for (var node = walker.current(); node; node = walker.next()) {
- if (ed.dom.is(node, 'ol,ul,li')) {
- elements.push(node);
- }
- }
- return elements;
- }
-
- if (e.keyCode == tinymce.VK.BACKSPACE) {
- var li = getLi();
- if (li) {
- var list = ed.dom.getParent(li, 'ol,ul');
- if (list && list.firstChild === li) {
- var elements = listElements(list, li);
- ed.execCommand("Outdent", false, elements);
- ed.undoManager.add();
- return Event.cancel(e);
- }
- }
- }
- }
-
- function fixDeletingEmptyLiInWebkit(ed, e) {
- var li = getLi();
- if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) {
- if (ed.dom.select('ul,ol', li).length === 1) {
- var prevLi = li.previousSibling;
- ed.dom.remove(ed.dom.select('br', li));
- ed.dom.remove(li, true);
- var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 });
- if (textNodes.length === 1) {
- var textNode = textNodes[0]
- ed.selection.setCursorLocation(textNode, textNode.length);
- }
- ed.undoManager.add();
- return Event.cancel(e);
- }
- }
- }
-
- ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); });
- ed.onKeyDown.add(cancelDefaultEvents);
- ed.onKeyDown.add(imageJoiningListItem);
- ed.onKeyDown.add(createNewLi);
-
- if (tinymce.isGecko) {
- ed.onKeyUp.add(fixIndentedListItemForGecko);
- }
- if (tinymce.isIE8) {
- ed.onKeyUp.add(fixIndentedListItemForIE8);
- }
- if (tinymce.isGecko || tinymce.isWebKit) {
- ed.onKeyDown.add(fixDeletingFirstCharOfList);
- }
- if (tinymce.isWebKit) {
- ed.onKeyDown.add(fixDeletingEmptyLiInWebkit);
- }
- },
-
- applyList: function(targetListType, oppositeListType) {
- var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions,
- selectedBlocks = ed.selection.getSelectedBlocks();
-
- function cleanupBr(e) {
- if (e && e.tagName === 'BR') {
- dom.remove(e);
- }
- }
-
- function makeList(element) {
- var list = dom.create(targetListType), li;
-
- function adjustIndentForNewList(element) {
- // If there's a margin-left, outdent one level to account for the extra list margin.
- if (element.style.marginLeft || element.style.paddingLeft) {
- t.adjustPaddingFunction(false)(element);
- }
- }
-
- if (element.tagName === 'LI') {
- // No change required.
- } else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') {
- processBrs(element, function(startSection, br) {
- doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode);
- li = startSection.parentNode;
- adjustIndentForNewList(li);
- cleanupBr(br);
- });
- if (li) {
- if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) {
- dom.split(li.parentNode.parentNode, li.parentNode);
- }
- attemptMergeWithAdjacent(li.parentNode, true);
- }
- return;
- } else {
- // Put the list around the element.
- li = dom.create('li');
- dom.insertAfter(li, element);
- li.appendChild(element);
- adjustIndentForNewList(element);
- element = li;
- }
- dom.insertAfter(list, element);
- list.appendChild(element);
- attemptMergeWithAdjacent(list, true);
- applied.push(element);
- }
-
- function doWrapList(start, end, template) {
- var li, n = start, tmp;
- while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) {
- start = dom.split(start.parentNode, start.previousSibling);
- start = start.nextSibling;
- n = start;
- }
- if (template) {
- li = template.cloneNode(true);
- start.parentNode.insertBefore(li, start);
- while (li.firstChild) dom.remove(li.firstChild);
- li = dom.rename(li, 'li');
- } else {
- li = dom.create('li');
- start.parentNode.insertBefore(li, start);
- }
- while (n && n != end) {
- tmp = n.nextSibling;
- li.appendChild(n);
- n = tmp;
- }
- if (li.childNodes.length === 0) {
- li.innerHTML = '<br _mce_bogus="1" />';
- }
- makeList(li);
- }
-
- function processBrs(element, callback) {
- var startSection, previousBR, END_TO_START = 3, START_TO_END = 1,
- breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl';
-
- function isAnyPartSelected(start, end) {
- var r = dom.createRng(), sel;
- bookmark.keep = true;
- ed.selection.moveToBookmark(bookmark);
- bookmark.keep = false;
- sel = ed.selection.getRng(true);
- if (!end) {
- end = start.parentNode.lastChild;
- }
- r.setStartBefore(start);
- r.setEndAfter(end);
- return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0);
- }
-
- function nextLeaf(br) {
- if (br.nextSibling)
- return br.nextSibling;
- if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot())
- return nextLeaf(br.parentNode);
- }
-
- // Split on BRs within the range and process those.
- startSection = element.firstChild;
- // First mark the BRs that have any part of the previous section selected.
- var trailingContentSelected = false;
- each(dom.select(breakElements, element), function(br) {
- if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
- return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
- }
- if (isAnyPartSelected(startSection, br)) {
- dom.addClass(br, '_mce_tagged_br');
- startSection = nextLeaf(br);
- }
- });
- trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined));
- startSection = element.firstChild;
- each(dom.select(breakElements, element), function(br) {
- // Got a section from start to br.
- var tmp = nextLeaf(br);
- if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
- return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
- }
- if (dom.hasClass(br, '_mce_tagged_br')) {
- callback(startSection, br, previousBR);
- previousBR = null;
- } else {
- previousBR = br;
- }
- startSection = tmp;
- });
- if (trailingContentSelected) {
- callback(startSection, undefined, previousBR);
- }
- }
-
- function wrapList(element) {
- processBrs(element, function(startSection, br, previousBR) {
- // Need to indent this part
- doWrapList(startSection, br);
- cleanupBr(br);
- cleanupBr(previousBR);
- });
- }
-
- function changeList(element) {
- if (tinymce.inArray(applied, element) !== -1) {
- return;
- }
- if (element.parentNode.tagName === oppositeListType) {
- dom.split(element.parentNode, element);
- makeList(element);
- attemptMergeWithNext(element.parentNode, false);
- }
- applied.push(element);
- }
-
- function convertListItemToParagraph(element) {
- var child, nextChild, mergedElement, splitLast;
- if (tinymce.inArray(applied, element) !== -1) {
- return;
- }
- element = splitNestedLists(element, dom);
- while (dom.is(element.parentNode, 'ol,ul,li')) {
- dom.split(element.parentNode, element);
- }
- // Push the original element we have from the selection, not the renamed one.
- applied.push(element);
- element = dom.rename(element, 'p');
- mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines);
- if (mergedElement === element) {
- // Now split out any block elements that can't be contained within a P.
- // Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each)
- child = element.firstChild;
- while (child) {
- if (dom.isBlock(child)) {
- child = dom.split(child.parentNode, child);
- splitLast = true;
- nextChild = child.nextSibling && child.nextSibling.firstChild;
- } else {
- nextChild = child.nextSibling;
- if (splitLast && child.tagName === 'BR') {
- dom.remove(child);
- }
- splitLast = false;
- }
- child = nextChild;
- }
- }
- }
-
- each(selectedBlocks, function(e) {
- e = findItemToOperateOn(e, dom);
- if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) {
- hasOppositeType = true;
- } else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) {
- hasSameType = true;
- } else {
- hasNonList = true;
- }
- });
-
- if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) {
- actions = {
- 'LI': changeList,
- 'H1': makeList,
- 'H2': makeList,
- 'H3': makeList,
- 'H4': makeList,
- 'H5': makeList,
- 'H6': makeList,
- 'P': makeList,
- 'BODY': makeList,
- 'DIV': selectedBlocks.length > 1 ? makeList : wrapList,
- defaultAction: wrapList,
- elements: this.selectedBlocks()
- };
- } else {
- actions = {
- defaultAction: convertListItemToParagraph,
- elements: this.selectedBlocks()
- };
- }
- this.process(actions);
- },
-
- indent: function() {
- var ed = this.ed, dom = ed.dom, indented = [];
-
- function createWrapItem(element) {
- var wrapItem = dom.create('li', { style: 'list-style-type: none;'});
- dom.insertAfter(wrapItem, element);
- return wrapItem;
- }
-
- function createWrapList(element) {
- var wrapItem = createWrapItem(element),
- list = dom.getParent(element, 'ol,ul'),
- listType = list.tagName,
- listStyle = dom.getStyle(list, 'list-style-type'),
- attrs = {},
- wrapList;
- if (listStyle !== '') {
- attrs.style = 'list-style-type: ' + listStyle + ';';
- }
- wrapList = dom.create(listType, attrs);
- wrapItem.appendChild(wrapList);
- return wrapList;
- }
-
- function indentLI(element) {
- if (!hasParentInList(ed, element, indented)) {
- element = splitNestedLists(element, dom);
- var wrapList = createWrapList(element);
- wrapList.appendChild(element);
- attemptMergeWithAdjacent(wrapList.parentNode, false);
- attemptMergeWithAdjacent(wrapList, false);
- indented.push(element);
- }
- }
-
- this.process({
- 'LI': indentLI,
- defaultAction: this.adjustPaddingFunction(true),
- elements: this.selectedBlocks()
- });
-
- },
-
- outdent: function(ui, elements) {
- var t = this, ed = t.ed, dom = ed.dom, outdented = [];
-
- function outdentLI(element) {
- var listElement, targetParent, align;
- if (!hasParentInList(ed, element, outdented)) {
- if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') {
- return t.adjustPaddingFunction(false)(element);
- }
- align = dom.getStyle(element, 'text-align', true);
- if (align === 'center' || align === 'right') {
- dom.setStyle(element, 'text-align', 'left');
- return;
- }
- element = splitNestedLists(element, dom);
- listElement = element.parentNode;
- targetParent = element.parentNode.parentNode;
- if (targetParent.tagName === 'P') {
- dom.split(targetParent, element.parentNode);
- } else {
- dom.split(listElement, element);
- if (targetParent.tagName === 'LI') {
- // Nested list, need to split the LI and go back out to the OL/UL element.
- dom.split(targetParent, element);
- } else if (!dom.is(targetParent, 'ol,ul')) {
- dom.rename(element, 'p');
- }
- }
- outdented.push(element);
- }
- }
-
- var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks();
- this.process({
- 'LI': outdentLI,
- defaultAction: this.adjustPaddingFunction(false),
- elements: listElements
- });
-
- each(outdented, attemptMergeWithAdjacent);
- },
-
- process: function(actions) {
- var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r;
-
- function isEmptyElement(element) {
- var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) {
- return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark'
- || n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == ''));
- });
- return excludeBrsAndBookmarks.length === 0;
- }
-
- function processElement(element) {
- dom.removeClass(element, '_mce_act_on');
- if (!element || element.nodeType !== 1 || selectedBlocks.length > 1 && isEmptyElement(element)) {
- return;
- }
- element = findItemToOperateOn(element, dom);
- var action = actions[element.tagName];
- if (!action) {
- action = actions.defaultAction;
- }
- action(element);
- }
-
- function recurse(element) {
- t.splitSafeEach(element.childNodes, processElement);
- }
-
- function brAtEdgeOfSelection(container, offset) {
- return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length &&
- container.childNodes[offset].tagName === 'BR';
- }
-
- function isInTable() {
- var n = sel.getNode();
- var p = dom.getParent(n, 'td');
- return p !== null;
- }
-
- selectedBlocks = actions.elements;
-
- r = sel.getRng(true);
- if (!r.collapsed) {
- if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) {
- r.setEnd(r.endContainer, r.endOffset - 1);
- sel.setRng(r);
- }
- if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) {
- r.setStart(r.startContainer, r.startOffset + 1);
- sel.setRng(r);
- }
- }
-
-
- if (tinymce.isIE8) {
- // append a zero sized nbsp so that caret is restored correctly using bookmark
- var s = t.ed.selection.getNode();
- if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) {
- var i = t.ed.getDoc().createTextNode('\uFEFF');
- s.appendChild(i);
- }
- }
-
- bookmark = sel.getBookmark();
- actions.OL = actions.UL = recurse;
- t.splitSafeEach(selectedBlocks, processElement);
- sel.moveToBookmark(bookmark);
- bookmark = null;
-
- // we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6
- if (!isInTable()) {
- // Avoids table or image handles being left behind in Firefox.
- t.ed.execCommand('mceRepaint');
- }
- },
-
- splitSafeEach: function(elements, f) {
- if (tinymce.isGecko && (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) ||
- /Firefox\/3\.[0-4]/.test(navigator.userAgent))) {
- this.classBasedEach(elements, f);
- } else {
- each(elements, f);
- }
- },
-
- classBasedEach: function(elements, f) {
- var dom = this.ed.dom, nodes, element;
- // Mark nodes
- each(elements, function(element) {
- dom.addClass(element, '_mce_act_on');
- });
- nodes = dom.select('._mce_act_on');
- while (nodes.length > 0) {
- element = nodes.shift();
- dom.removeClass(element, '_mce_act_on');
- f(element);
- nodes = dom.select('._mce_act_on');
- }
- },
-
- adjustPaddingFunction: function(isIndent) {
- var indentAmount, indentUnits, ed = this.ed;
- indentAmount = ed.settings.indentation;
- indentUnits = /[a-z%]+/i.exec(indentAmount);
- indentAmount = parseInt(indentAmount, 10);
- return function(element) {
- var currentIndent, newIndentAmount;
- currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10);
- if (isIndent) {
- newIndentAmount = currentIndent + indentAmount;
- } else {
- newIndentAmount = currentIndent - indentAmount;
- }
- ed.dom.setStyle(element, 'padding-left', '');
- ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : '');
- };
- },
-
- selectedBlocks: function() {
- var ed = this.ed
- var selectedBlocks = ed.selection.getSelectedBlocks();
- return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks;
- },
-
- getInfo: function() {
- return {
- longname : 'Lists',
- author : 'Moxiecode Systems AB',
- authorurl : 'http://tinymce.moxiecode.com',
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists',
- version : tinymce.majorVersion + "." + tinymce.minorVersion
- };
- }
- });
- tinymce.PluginManager.add("lists", tinymce.plugins.Lists);
-}());
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2011, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+ var each = tinymce.each, Event = tinymce.dom.Event, bookmark;
+
+ // Skips text nodes that only contain whitespace since they aren't semantically important.
+ function skipWhitespaceNodes(e, next) {
+ while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) {
+ e = next(e);
+ }
+ return e;
+ }
+
+ function skipWhitespaceNodesBackwards(e) {
+ return skipWhitespaceNodes(e, function(e) {
+ return e.previousSibling;
+ });
+ }
+
+ function skipWhitespaceNodesForwards(e) {
+ return skipWhitespaceNodes(e, function(e) {
+ return e.nextSibling;
+ });
+ }
+
+ function hasParentInList(ed, e, list) {
+ return ed.dom.getParent(e, function(p) {
+ return tinymce.inArray(list, p) !== -1;
+ });
+ }
+
+ function isList(e) {
+ return e && (e.tagName === 'OL' || e.tagName === 'UL');
+ }
+
+ function splitNestedLists(element, dom) {
+ var tmp, nested, wrapItem;
+ tmp = skipWhitespaceNodesBackwards(element.lastChild);
+ while (isList(tmp)) {
+ nested = tmp;
+ tmp = skipWhitespaceNodesBackwards(nested.previousSibling);
+ }
+ if (nested) {
+ wrapItem = dom.create('li', { style: 'list-style-type: none;'});
+ dom.split(element, nested);
+ dom.insertAfter(wrapItem, nested);
+ wrapItem.appendChild(nested);
+ wrapItem.appendChild(nested);
+ element = wrapItem.previousSibling;
+ }
+ return element;
+ }
+
+ function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) {
+ e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs);
+ return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs);
+ }
+
+ function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) {
+ var prev = skipWhitespaceNodesBackwards(e.previousSibling);
+ if (prev) {
+ return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs);
+ } else {
+ return e;
+ }
+ }
+
+ function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) {
+ var next = skipWhitespaceNodesForwards(e.nextSibling);
+ if (next) {
+ return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs);
+ } else {
+ return e;
+ }
+ }
+
+ function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) {
+ if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) {
+ return merge(e1, e2, differentStylesMasterElement);
+ } else if (e1 && e1.tagName === 'LI' && isList(e2)) {
+ // Fix invalidly nested lists.
+ e1.appendChild(e2);
+ }
+ return e2;
+ }
+
+ function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) {
+ if (!e1 || !e2) {
+ return false;
+ } else if (e1.tagName === 'LI' && e2.tagName === 'LI') {
+ return e2.style.listStyleType === 'none' || containsOnlyAList(e2);
+ } else if (isList(e1)) {
+ return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2);
+ } else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P';
+ }
+
+ function isListForIndent(e) {
+ var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild);
+ return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none' || containsOnlyAList(firstLI));
+ }
+
+ function containsOnlyAList(e) {
+ var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild);
+ return firstChild && lastChild && firstChild === lastChild && isList(firstChild);
+ }
+
+ function merge(e1, e2, masterElement) {
+ var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild);
+ if (e1.tagName === 'P') {
+ e1.appendChild(e1.ownerDocument.createElement('br'));
+ }
+ while (e2.firstChild) {
+ e1.appendChild(e2.firstChild);
+ }
+ if (masterElement) {
+ e1.style.listStyleType = masterElement.style.listStyleType;
+ }
+ e2.parentNode.removeChild(e2);
+ attemptMerge(lastOriginal, firstNew, false);
+ return e1;
+ }
+
+ function findItemToOperateOn(e, dom) {
+ var item;
+ if (!dom.is(e, 'li,ol,ul')) {
+ item = dom.getParent(e, 'li');
+ if (item) {
+ e = item;
+ }
+ }
+ return e;
+ }
+
+ tinymce.create('tinymce.plugins.Lists', {
+ init: function(ed) {
+ var LIST_TABBING = 'TABBING';
+ var LIST_EMPTY_ITEM = 'EMPTY';
+ var LIST_ESCAPE = 'ESCAPE';
+ var LIST_PARAGRAPH = 'PARAGRAPH';
+ var LIST_UNKNOWN = 'UNKNOWN';
+ var state = LIST_UNKNOWN;
+
+ function isTabInList(e) {
+ // Don't indent on Ctrl+Tab or Alt+Tab
+ return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) &&
+ (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
+ }
+
+ function isOnLastListItem() {
+ var li = getLi();
+ var grandParent = li.parentNode.parentNode;
+ var isLastItem = li.parentNode.lastChild === li;
+ return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li);
+ }
+
+ function isNestedList(grandParent) {
+ if (isList(grandParent)) {
+ return grandParent.parentNode && grandParent.parentNode.tagName === 'LI';
+ } else {
+ return grandParent.tagName === 'LI';
+ }
+ }
+
+ function isInEmptyListItem() {
+ return ed.selection.isCollapsed() && isEmptyListItem(getLi());
+ }
+
+ function getLi() {
+ var n = ed.selection.getStart();
+ // Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position
+ return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n;
+ }
+
+ function isEmptyListItem(li) {
+ var numChildren = li.childNodes.length;
+ if (li.tagName === 'LI') {
+ return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li));
+ }
+ return false;
+ }
+
+ function isEmptyIE9Li(li) {
+ // only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these
+ var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'});
+ var isLastLi = li == lis[lis.length - 1];
+ var child = li.firstChild;
+ return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32));
+ }
+
+ function isEnter(e) {
+ return e.keyCode === tinymce.VK.ENTER;
+ }
+
+ function isEnterWithoutShift(e) {
+ return isEnter(e) && !e.shiftKey;
+ }
+
+ function getListKeyState(e) {
+ if (isTabInList(e)) {
+ return LIST_TABBING;
+ } else if (isEnterWithoutShift(e) && isOnLastListItem()) {
+ // Returns LIST_UNKNOWN since breaking out of lists is handled by the EnterKey.js logic now
+ //return LIST_ESCAPE;
+ return LIST_UNKNOWN;
+ } else if (isEnterWithoutShift(e) && isInEmptyListItem()) {
+ return LIST_EMPTY_ITEM;
+ } else {
+ return LIST_UNKNOWN;
+ }
+ }
+
+ function cancelDefaultEvents(ed, e) {
+ // list escape is done manually using outdent as it does not create paragraphs correctly in td's
+ if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) {
+ Event.cancel(e);
+ }
+ }
+
+ function isCursorAtEndOfContainer() {
+ var range = ed.selection.getRng(true);
+ var startContainer = range.startContainer;
+ if (startContainer.nodeType == 3) {
+ var value = startContainer.nodeValue;
+ if (tinymce.isIE9 && value.length > 1 && value.charCodeAt(value.length-1) == 32) {
+ // IE9 places a space on the end of the text in some cases so ignore last char
+ return (range.endOffset == value.length-1);
+ } else {
+ return (range.endOffset == value.length);
+ }
+ } else if (startContainer.nodeType == 1) {
+ return range.endOffset == startContainer.childNodes.length;
+ }
+ return false;
+ }
+
+ /*
+ If we are at the end of a list item surrounded with an element, pressing enter should create a
+ new list item instead without splitting the element e.g. don't want to create new P or H1 tag
+ */
+ function isEndOfListItem() {
+ var node = ed.selection.getNode();
+ var validElements = 'h1,h2,h3,h4,h5,h6,p,div';
+ var isLastParagraphOfLi = ed.dom.is(node, validElements) && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node;
+ return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer();
+ }
+
+ // Creates a new list item after the current selection's list item parent
+ function createNewLi(ed, e) {
+ if (isEnterWithoutShift(e) && isEndOfListItem()) {
+ var node = ed.selection.getNode();
+ var li = ed.dom.create("li");
+ var parentLi = ed.dom.getParent(node, 'li');
+ ed.dom.insertAfter(li, parentLi);
+
+ // Move caret to new list element.
+ if (tinymce.isIE6 || tinymce.isIE7 || tinyMCE.isIE8) {
+ // Removed this line since it would create an odd <&nbsp;> tag and placing the caret inside an empty LI is handled and should be handled by the selection logic
+ //li.appendChild(ed.dom.create("&nbsp;")); // IE needs an element within the bullet point
+ ed.selection.setCursorLocation(li, 1);
+ } else {
+ ed.selection.setCursorLocation(li, 0);
+ }
+ e.preventDefault();
+ }
+ }
+
+ function imageJoiningListItem(ed, e) {
+ var prevSibling;
+
+ if (!tinymce.isGecko)
+ return;
+
+ var n = ed.selection.getStart();
+ if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG')
+ return;
+
+ function lastLI(node) {
+ var child = node.firstChild;
+ var li = null;
+ do {
+ if (!child)
+ break;
+
+ if (child.tagName === 'LI')
+ li = child;
+ } while (child = child.nextSibling);
+
+ return li;
+ }
+
+ function addChildren(parentNode, destination) {
+ while (parentNode.childNodes.length > 0)
+ destination.appendChild(parentNode.childNodes[0]);
+ }
+
+ // Check if there is a previous sibling
+ prevSibling = n.parentNode.previousSibling;
+ if (!prevSibling)
+ return;
+
+ var ul;
+ if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL')
+ ul = prevSibling;
+ else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL'))
+ ul = prevSibling.previousSibling;
+ else
+ return;
+
+ var li = lastLI(ul);
+
+ // move the caret to the end of the list item
+ var rng = ed.dom.createRng();
+ rng.setStart(li, 1);
+ rng.setEnd(li, 1);
+ ed.selection.setRng(rng);
+ ed.selection.collapse(true);
+
+ // save a bookmark at the end of the list item
+ var bookmark = ed.selection.getBookmark();
+
+ // copy the image an its text to the list item
+ var clone = n.parentNode.cloneNode(true);
+ if (clone.tagName === 'P' || clone.tagName === 'DIV')
+ addChildren(clone, li);
+ else
+ li.appendChild(clone);
+
+ // remove the old copy of the image
+ n.parentNode.parentNode.removeChild(n.parentNode);
+
+ // move the caret where we saved the bookmark
+ ed.selection.moveToBookmark(bookmark);
+ }
+
+ // fix the cursor position to ensure it is correct in IE
+ function setCursorPositionToOriginalLi(li) {
+ var list = ed.dom.getParent(li, 'ol,ul');
+ if (list != null) {
+ var lastLi = list.lastChild;
+ // Removed this line since IE9 would report an DOM character error and placing the caret inside an empty LI is handled and should be handled by the selection logic
+ //lastLi.appendChild(ed.getDoc().createElement(''));
+ ed.selection.setCursorLocation(lastLi, 0);
+ }
+ }
+
+ this.ed = ed;
+ ed.addCommand('Indent', this.indent, this);
+ ed.addCommand('Outdent', this.outdent, this);
+ ed.addCommand('InsertUnorderedList', function() {
+ this.applyList('UL', 'OL');
+ }, this);
+ ed.addCommand('InsertOrderedList', function() {
+ this.applyList('OL', 'UL');
+ }, this);
+
+ ed.onInit.add(function() {
+ ed.editorCommands.addCommands({
+ 'outdent': function() {
+ var sel = ed.selection, dom = ed.dom;
+
+ function hasStyleIndent(n) {
+ n = dom.getParent(n, dom.isBlock);
+ return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0;
+ }
+
+ return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList');
+ }
+ }, 'state');
+ });
+
+ ed.onKeyUp.add(function(ed, e) {
+ if (state == LIST_TABBING) {
+ ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null);
+ state = LIST_UNKNOWN;
+ return Event.cancel(e);
+ } else if (state == LIST_EMPTY_ITEM) {
+ var li = getLi();
+ var shouldOutdent = ed.settings.list_outdent_on_enter === true || e.shiftKey;
+ ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null);
+ if (tinymce.isIE) {
+ setCursorPositionToOriginalLi(li);
+ }
+
+ return Event.cancel(e);
+ } else if (state == LIST_ESCAPE) {
+ if (tinymce.isIE6 || tinymce.isIE7 || tinymce.isIE8) {
+ // append a zero sized nbsp so that caret is positioned correctly in IE after escaping and applying formatting.
+ // if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after
+ // escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag.
+ var n = ed.getDoc().createTextNode('\uFEFF');
+ ed.selection.getNode().appendChild(n);
+ } else if (tinymce.isIE9 || tinymce.isGecko) {
+ // IE9 does not escape the list so we use outdent to do this and cancel the default behaviour
+ // Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves
+ ed.execCommand('Outdent');
+ return Event.cancel(e);
+ }
+ }
+ });
+
+ function fixListItem(parent, reference) {
+ // a zero-sized non-breaking space is placed in the empty list item so that the nested list is
+ // displayed on the below line instead of next to it
+ var n = ed.getDoc().createTextNode('\uFEFF');
+ parent.insertBefore(n, reference);
+ ed.selection.setCursorLocation(n, 0);
+ // repaint to remove rendering artifact. only visible when creating new list
+ ed.execCommand('mceRepaint');
+ }
+
+ function fixIndentedListItemForGecko(ed, e) {
+ if (isEnter(e)) {
+ var li = getLi();
+ if (li) {
+ var parent = li.parentNode;
+ var grandParent = parent && parent.parentNode;
+ if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) {
+ fixListItem(grandParent, parent);
+ }
+ }
+ }
+ }
+
+ function fixIndentedListItemForIE8(ed, e) {
+ if (isEnter(e)) {
+ var li = getLi();
+ if (ed.dom.select('ul li', li).length === 1) {
+ var list = li.firstChild;
+ fixListItem(li, list);
+ }
+ }
+ }
+
+ function fixDeletingFirstCharOfList(ed, e) {
+ function listElements(list, li) {
+ var elements = [];
+ var walker = new tinymce.dom.TreeWalker(li, list);
+ for (var node = walker.current(); node; node = walker.next()) {
+ if (ed.dom.is(node, 'ol,ul,li')) {
+ elements.push(node);
+ }
+ }
+ return elements;
+ }
+
+ if (e.keyCode == tinymce.VK.BACKSPACE) {
+ var li = getLi();
+ if (li) {
+ var list = ed.dom.getParent(li, 'ol,ul');
+ if (list && list.firstChild === li) {
+ var elements = listElements(list, li);
+ ed.execCommand("Outdent", false, elements);
+ ed.undoManager.add();
+ return Event.cancel(e);
+ }
+ }
+ }
+ }
+
+ function fixDeletingEmptyLiInWebkit(ed, e) {
+ var li = getLi();
+ if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) {
+ if (ed.dom.select('ul,ol', li).length === 1) {
+ var prevLi = li.previousSibling;
+ ed.dom.remove(ed.dom.select('br', li));
+ ed.dom.remove(li, true);
+ var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 });
+ if (textNodes.length === 1) {
+ var textNode = textNodes[0]
+ ed.selection.setCursorLocation(textNode, textNode.length);
+ }
+ ed.undoManager.add();
+ return Event.cancel(e);
+ }
+ }
+ }
+
+ ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); });
+ ed.onKeyDown.add(cancelDefaultEvents);
+ ed.onKeyDown.add(imageJoiningListItem);
+ ed.onKeyDown.add(createNewLi);
+
+ if (tinymce.isGecko) {
+ ed.onKeyUp.add(fixIndentedListItemForGecko);
+ }
+ if (tinymce.isIE8) {
+ ed.onKeyUp.add(fixIndentedListItemForIE8);
+ }
+ if (tinymce.isGecko || tinymce.isWebKit) {
+ ed.onKeyDown.add(fixDeletingFirstCharOfList);
+ }
+ if (tinymce.isWebKit) {
+ ed.onKeyDown.add(fixDeletingEmptyLiInWebkit);
+ }
+ },
+
+ applyList: function(targetListType, oppositeListType) {
+ var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions,
+ selectedBlocks = ed.selection.getSelectedBlocks();
+
+ function cleanupBr(e) {
+ if (e && e.tagName === 'BR') {
+ dom.remove(e);
+ }
+ }
+
+ function makeList(element) {
+ var list = dom.create(targetListType), li;
+
+ function adjustIndentForNewList(element) {
+ // If there's a margin-left, outdent one level to account for the extra list margin.
+ if (element.style.marginLeft || element.style.paddingLeft) {
+ t.adjustPaddingFunction(false)(element);
+ }
+ }
+
+ if (element.tagName === 'LI') {
+ // No change required.
+ } else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') {
+ processBrs(element, function(startSection, br) {
+ doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode);
+ li = startSection.parentNode;
+ adjustIndentForNewList(li);
+ cleanupBr(br);
+ });
+ if (li) {
+ if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) {
+ dom.split(li.parentNode.parentNode, li.parentNode);
+ }
+ attemptMergeWithAdjacent(li.parentNode, true);
+ }
+ return;
+ } else {
+ // Put the list around the element.
+ li = dom.create('li');
+ dom.insertAfter(li, element);
+ li.appendChild(element);
+ adjustIndentForNewList(element);
+ element = li;
+ }
+ dom.insertAfter(list, element);
+ list.appendChild(element);
+ attemptMergeWithAdjacent(list, true);
+ applied.push(element);
+ }
+
+ function doWrapList(start, end, template) {
+ var li, n = start, tmp;
+ while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) {
+ start = dom.split(start.parentNode, start.previousSibling);
+ start = start.nextSibling;
+ n = start;
+ }
+ if (template) {
+ li = template.cloneNode(true);
+ start.parentNode.insertBefore(li, start);
+ while (li.firstChild) dom.remove(li.firstChild);
+ li = dom.rename(li, 'li');
+ } else {
+ li = dom.create('li');
+ start.parentNode.insertBefore(li, start);
+ }
+ while (n && n != end) {
+ tmp = n.nextSibling;
+ li.appendChild(n);
+ n = tmp;
+ }
+ if (li.childNodes.length === 0) {
+ li.innerHTML = '<br _mce_bogus="1" />';
+ }
+ makeList(li);
+ }
+
+ function processBrs(element, callback) {
+ var startSection, previousBR, END_TO_START = 3, START_TO_END = 1,
+ breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl';
+
+ function isAnyPartSelected(start, end) {
+ var r = dom.createRng(), sel;
+ bookmark.keep = true;
+ ed.selection.moveToBookmark(bookmark);
+ bookmark.keep = false;
+ sel = ed.selection.getRng(true);
+ if (!end) {
+ end = start.parentNode.lastChild;
+ }
+ r.setStartBefore(start);
+ r.setEndAfter(end);
+ return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0);
+ }
+
+ function nextLeaf(br) {
+ if (br.nextSibling)
+ return br.nextSibling;
+ if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot())
+ return nextLeaf(br.parentNode);
+ }
+
+ // Split on BRs within the range and process those.
+ startSection = element.firstChild;
+ // First mark the BRs that have any part of the previous section selected.
+ var trailingContentSelected = false;
+ each(dom.select(breakElements, element), function(br) {
+ if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
+ return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
+ }
+ if (isAnyPartSelected(startSection, br)) {
+ dom.addClass(br, '_mce_tagged_br');
+ startSection = nextLeaf(br);
+ }
+ });
+ trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined));
+ startSection = element.firstChild;
+ each(dom.select(breakElements, element), function(br) {
+ // Got a section from start to br.
+ var tmp = nextLeaf(br);
+ if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
+ return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
+ }
+ if (dom.hasClass(br, '_mce_tagged_br')) {
+ callback(startSection, br, previousBR);
+ previousBR = null;
+ } else {
+ previousBR = br;
+ }
+ startSection = tmp;
+ });
+ if (trailingContentSelected) {
+ callback(startSection, undefined, previousBR);
+ }
+ }
+
+ function wrapList(element) {
+ processBrs(element, function(startSection, br, previousBR) {
+ // Need to indent this part
+ doWrapList(startSection, br);
+ cleanupBr(br);
+ cleanupBr(previousBR);
+ });
+ }
+
+ function changeList(element) {
+ if (tinymce.inArray(applied, element) !== -1) {
+ return;
+ }
+ if (element.parentNode.tagName === oppositeListType) {
+ dom.split(element.parentNode, element);
+ makeList(element);
+ attemptMergeWithNext(element.parentNode, false);
+ }
+ applied.push(element);
+ }
+
+ function convertListItemToParagraph(element) {
+ var child, nextChild, mergedElement, splitLast;
+ if (tinymce.inArray(applied, element) !== -1) {
+ return;
+ }
+ element = splitNestedLists(element, dom);
+ while (dom.is(element.parentNode, 'ol,ul,li')) {
+ dom.split(element.parentNode, element);
+ }
+ // Push the original element we have from the selection, not the renamed one.
+ applied.push(element);
+ element = dom.rename(element, 'p');
+ mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines);
+ if (mergedElement === element) {
+ // Now split out any block elements that can't be contained within a P.
+ // Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each)
+ child = element.firstChild;
+ while (child) {
+ if (dom.isBlock(child)) {
+ child = dom.split(child.parentNode, child);
+ splitLast = true;
+ nextChild = child.nextSibling && child.nextSibling.firstChild;
+ } else {
+ nextChild = child.nextSibling;
+ if (splitLast && child.tagName === 'BR') {
+ dom.remove(child);
+ }
+ splitLast = false;
+ }
+ child = nextChild;
+ }
+ }
+ }
+
+ each(selectedBlocks, function(e) {
+ e = findItemToOperateOn(e, dom);
+ if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) {
+ hasOppositeType = true;
+ } else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) {
+ hasSameType = true;
+ } else {
+ hasNonList = true;
+ }
+ });
+
+ if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) {
+ actions = {
+ 'LI': changeList,
+ 'H1': makeList,
+ 'H2': makeList,
+ 'H3': makeList,
+ 'H4': makeList,
+ 'H5': makeList,
+ 'H6': makeList,
+ 'P': makeList,
+ 'BODY': makeList,
+ 'DIV': selectedBlocks.length > 1 ? makeList : wrapList,
+ defaultAction: wrapList,
+ elements: this.selectedBlocks()
+ };
+ } else {
+ actions = {
+ defaultAction: convertListItemToParagraph,
+ elements: this.selectedBlocks()
+ };
+ }
+ this.process(actions);
+ },
+
+ indent: function() {
+ var ed = this.ed, dom = ed.dom, indented = [];
+
+ function createWrapItem(element) {
+ var wrapItem = dom.create('li', { style: 'list-style-type: none;'});
+ dom.insertAfter(wrapItem, element);
+ return wrapItem;
+ }
+
+ function createWrapList(element) {
+ var wrapItem = createWrapItem(element),
+ list = dom.getParent(element, 'ol,ul'),
+ listType = list.tagName,
+ listStyle = dom.getStyle(list, 'list-style-type'),
+ attrs = {},
+ wrapList;
+ if (listStyle !== '') {
+ attrs.style = 'list-style-type: ' + listStyle + ';';
+ }
+ wrapList = dom.create(listType, attrs);
+ wrapItem.appendChild(wrapList);
+ return wrapList;
+ }
+
+ function indentLI(element) {
+ if (!hasParentInList(ed, element, indented)) {
+ element = splitNestedLists(element, dom);
+ var wrapList = createWrapList(element);
+ wrapList.appendChild(element);
+ attemptMergeWithAdjacent(wrapList.parentNode, false);
+ attemptMergeWithAdjacent(wrapList, false);
+ indented.push(element);
+ }
+ }
+
+ this.process({
+ 'LI': indentLI,
+ defaultAction: this.adjustPaddingFunction(true),
+ elements: this.selectedBlocks()
+ });
+
+ },
+
+ outdent: function(ui, elements) {
+ var t = this, ed = t.ed, dom = ed.dom, outdented = [];
+
+ function outdentLI(element) {
+ var listElement, targetParent, align;
+ if (!hasParentInList(ed, element, outdented)) {
+ if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') {
+ return t.adjustPaddingFunction(false)(element);
+ }
+ align = dom.getStyle(element, 'text-align', true);
+ if (align === 'center' || align === 'right') {
+ dom.setStyle(element, 'text-align', 'left');
+ return;
+ }
+ element = splitNestedLists(element, dom);
+ listElement = element.parentNode;
+ targetParent = element.parentNode.parentNode;
+ if (targetParent.tagName === 'P') {
+ dom.split(targetParent, element.parentNode);
+ } else {
+ dom.split(listElement, element);
+ if (targetParent.tagName === 'LI') {
+ // Nested list, need to split the LI and go back out to the OL/UL element.
+ dom.split(targetParent, element);
+ } else if (!dom.is(targetParent, 'ol,ul')) {
+ dom.rename(element, 'p');
+ }
+ }
+ outdented.push(element);
+ }
+ }
+
+ var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks();
+ this.process({
+ 'LI': outdentLI,
+ defaultAction: this.adjustPaddingFunction(false),
+ elements: listElements
+ });
+
+ each(outdented, attemptMergeWithAdjacent);
+ },
+
+ process: function(actions) {
+ var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r;
+
+ function isEmptyElement(element) {
+ var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) {
+ return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark'
+ || n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == ''));
+ });
+ return excludeBrsAndBookmarks.length === 0;
+ }
+
+ function processElement(element) {
+ dom.removeClass(element, '_mce_act_on');
+ if (!element || element.nodeType !== 1 || selectedBlocks.length > 1 && isEmptyElement(element)) {
+ return;
+ }
+ element = findItemToOperateOn(element, dom);
+ var action = actions[element.tagName];
+ if (!action) {
+ action = actions.defaultAction;
+ }
+ action(element);
+ }
+
+ function recurse(element) {
+ t.splitSafeEach(element.childNodes, processElement);
+ }
+
+ function brAtEdgeOfSelection(container, offset) {
+ return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length &&
+ container.childNodes[offset].tagName === 'BR';
+ }
+
+ function isInTable() {
+ var n = sel.getNode();
+ var p = dom.getParent(n, 'td');
+ return p !== null;
+ }
+
+ selectedBlocks = actions.elements;
+
+ r = sel.getRng(true);
+ if (!r.collapsed) {
+ if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) {
+ r.setEnd(r.endContainer, r.endOffset - 1);
+ sel.setRng(r);
+ }
+ if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) {
+ r.setStart(r.startContainer, r.startOffset + 1);
+ sel.setRng(r);
+ }
+ }
+
+
+ if (tinymce.isIE8) {
+ // append a zero sized nbsp so that caret is restored correctly using bookmark
+ var s = t.ed.selection.getNode();
+ if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) {
+ var i = t.ed.getDoc().createTextNode('\uFEFF');
+ s.appendChild(i);
+ }
+ }
+
+ bookmark = sel.getBookmark();
+ actions.OL = actions.UL = recurse;
+ t.splitSafeEach(selectedBlocks, processElement);
+ sel.moveToBookmark(bookmark);
+ bookmark = null;
+
+ // we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6
+ if (!isInTable()) {
+ // Avoids table or image handles being left behind in Firefox.
+ t.ed.execCommand('mceRepaint');
+ }
+ },
+
+ splitSafeEach: function(elements, f) {
+ if (tinymce.isGecko && (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) ||
+ /Firefox\/3\.[0-4]/.test(navigator.userAgent))) {
+ this.classBasedEach(elements, f);
+ } else {
+ each(elements, f);
+ }
+ },
+
+ classBasedEach: function(elements, f) {
+ var dom = this.ed.dom, nodes, element;
+ // Mark nodes
+ each(elements, function(element) {
+ dom.addClass(element, '_mce_act_on');
+ });
+ nodes = dom.select('._mce_act_on');
+ while (nodes.length > 0) {
+ element = nodes.shift();
+ dom.removeClass(element, '_mce_act_on');
+ f(element);
+ nodes = dom.select('._mce_act_on');
+ }
+ },
+
+ adjustPaddingFunction: function(isIndent) {
+ var indentAmount, indentUnits, ed = this.ed;
+ indentAmount = ed.settings.indentation;
+ indentUnits = /[a-z%]+/i.exec(indentAmount);
+ indentAmount = parseInt(indentAmount, 10);
+ return function(element) {
+ var currentIndent, newIndentAmount;
+ currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10);
+ if (isIndent) {
+ newIndentAmount = currentIndent + indentAmount;
+ } else {
+ newIndentAmount = currentIndent - indentAmount;
+ }
+ ed.dom.setStyle(element, 'padding-left', '');
+ ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : '');
+ };
+ },
+
+ selectedBlocks: function() {
+ var ed = this.ed
+ var selectedBlocks = ed.selection.getSelectedBlocks();
+ return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks;
+ },
+
+ getInfo: function() {
+ return {
+ longname : 'Lists',
+ author : 'Moxiecode Systems AB',
+ authorurl : 'http://tinymce.moxiecode.com',
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists',
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ }
+ });
+ tinymce.PluginManager.add("lists", tinymce.plugins.Lists);
+}());
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
index e7f301dbc..e204328d9 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
@@ -1 +1 @@
-(function(){var c=tinymce.dom.TreeWalker;var a="contenteditable",d="data-mce-"+a;var e=tinymce.VK;function b(n){var j=n.dom,p=n.selection,r,o="mce_noneditablecaret";r=tinymce.isGecko?"\u200B":"\uFEFF";function m(t){var s;if(t.nodeType===1){s=t.getAttribute(d);if(s&&s!=="inherit"){return s}s=t.contentEditable;if(s!=="inherit"){return s}}return null}function g(s){var t;while(s){t=m(s);if(t){return t==="false"?s:null}s=s.parentNode}}function l(s){while(s){if(s.id===o){return s}s=s.parentNode}}function k(s){var t;if(s){t=new c(s,s);for(s=t.current();s;s=t.next()){if(s.nodeType===3){return s}}}}function f(v,u){var s,t;if(m(v)==="false"){if(j.isBlock(v)){p.select(v);return}}t=j.createRng();if(m(v)==="true"){if(!v.firstChild){v.appendChild(n.getDoc().createTextNode("\u00a0"))}v=v.firstChild;u=true}s=j.create("span",{id:o,"data-mce-bogus":true},r);if(u){v.parentNode.insertBefore(s,v)}else{j.insertAfter(s,v)}t.setStart(s.firstChild,1);t.collapse(true);p.setRng(t);return s}function i(s){var v,t,u;if(s){rng=p.getRng(true);rng.setStartBefore(s);rng.setEndBefore(s);v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true);p.setRng(rng)}else{t=l(p.getStart());while((s=j.get(o))&&s!==u){if(t!==s){v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true)}u=s}}}function q(){var s,w,u,t,v;function x(B,D){var A,F,E,C,z;A=t.startContainer;F=t.startOffset;if(A.nodeType==3){z=A.nodeValue.length;if((F>0&&F<z)||(D?F==z:F==0)){return}}else{if(F<A.childNodes.length){var G=!D&&F>0?F-1:F;A=A.childNodes[G];if(A.hasChildNodes()){A=A.firstChild}}else{return !D?B:null}}E=new c(A,B);while(C=E[D?"prev":"next"]()){if(C.nodeType===3&&C.nodeValue.length>0){return}else{if(m(C)==="true"){return C}}}return B}i();u=p.isCollapsed();s=g(p.getStart());w=g(p.getEnd());if(s||w){t=p.getRng(true);if(u){s=s||w;var y=p.getStart();if(v=x(s,true)){f(v,true)}else{if(v=x(s,false)){f(v,false)}else{p.select(s)}}}else{t=p.getRng(true);if(s){t.setStartBefore(s)}if(w){t.setEndAfter(w)}p.setRng(t)}}}function h(y,A){var E=A.keyCode,w,B,C,u;function t(G,F){while(G=G[F?"previousSibling":"nextSibling"]){if(G.nodeType!==3||G.nodeValue.length>0){return G}}}function x(F,G){p.select(F);p.collapse(G)}C=p.getStart();u=p.getEnd();w=g(C)||g(u);if(w&&(E<112||E>124)&&E!=e.DELETE&&E!=e.BACKSPACE){A.preventDefault();if(E==e.LEFT||E==e.RIGHT){var v=E==e.LEFT;if(y.dom.isBlock(w)){var z=v?w.previousSibling:w.nextSibling;var s=new c(z,z);var D=v?s.prev():s.next();x(D,!v)}else{x(w,v)}}}else{if(E==e.LEFT||E==e.RIGHT||E==e.BACKSPACE||E==e.DELETE){B=l(C);if(B){if(E==e.LEFT||E==e.BACKSPACE){w=t(B,true);if(w&&m(w)==="false"){A.preventDefault();if(E==e.LEFT){x(w,true)}else{j.remove(w)}}else{i(B)}}if(E==e.RIGHT||E==e.DELETE){w=t(B);if(w&&m(w)==="false"){A.preventDefault();if(E==e.RIGHT){x(w,false)}else{j.remove(w)}}else{i(B)}}}}}}n.onMouseDown.addToTop(function(s,u){var t=s.selection.getNode();if(m(t)==="false"&&t==u.target){u.preventDefault()}});n.onMouseUp.addToTop(q);n.onKeyDown.addToTop(h);n.onKeyUp.addToTop(q)}tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(h,j){var g,f,i;g=" "+tinymce.trim(h.getParam("noneditable_editable_class","mceEditable"))+" ";f=" "+tinymce.trim(h.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";i=h.getParam("noneditable_regexp");if(i&&!i.length){i=[i]}h.onPreInit.add(function(){b(h);if(i){h.onBeforeSetContent.add(function(l,m){var n=i.length,o=m.content,k=tinymce.trim(f);if(m.format=="raw"){return}while(n--){o=o.replace(i[n],function(){var p=arguments;return'<span class="'+k+'" data-mce-content="'+l.dom.encode(p[0])+'">'+l.dom.encode(typeof(p[1])==="string"?p[1]:p[0])+"</span>"})}m.content=o})}h.parser.addAttributeFilter("class",function(k){var l=k.length,m,n;while(l--){n=k[l];m=" "+n.attr("class")+" ";if(m.indexOf(g)!==-1){n.attr(d,"true")}else{if(m.indexOf(f)!==-1){n.attr(d,"false")}}}});h.serializer.addAttributeFilter(d,function(k,l){var m=k.length,n;while(m--){n=k[m];if(i&&n.attr("data-mce-content")){n.name="#text";n.type=3;n.raw=true;n.value=n.attr("data-mce-content")}else{n.attr(a,null);n.attr(d,null)}}});h.parser.addAttributeFilter(a,function(k,l){var m=k.length,n;while(m--){n=k[m];n.attr(d,n.attr(a));n.attr(a,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file
+(function(){var c=tinymce.dom.TreeWalker;var a="contenteditable",d="data-mce-"+a;var e=tinymce.VK;function b(n){var j=n.dom,p=n.selection,r,o="mce_noneditablecaret";r=tinymce.isGecko?"\u200B":"\uFEFF";function m(t){var s;if(t.nodeType===1){s=t.getAttribute(d);if(s&&s!=="inherit"){return s}s=t.contentEditable;if(s!=="inherit"){return s}}return null}function g(s){var t;while(s){t=m(s);if(t){return t==="false"?s:null}s=s.parentNode}}function l(s){while(s){if(s.id===o){return s}s=s.parentNode}}function k(s){var t;if(s){t=new c(s,s);for(s=t.current();s;s=t.next()){if(s.nodeType===3){return s}}}}function f(v,u){var s,t;if(m(v)==="false"){if(j.isBlock(v)){p.select(v);return}}t=j.createRng();if(m(v)==="true"){if(!v.firstChild){v.appendChild(n.getDoc().createTextNode("\u00a0"))}v=v.firstChild;u=true}s=j.create("span",{id:o,"data-mce-bogus":true},r);if(u){v.parentNode.insertBefore(s,v)}else{j.insertAfter(s,v)}t.setStart(s.firstChild,1);t.collapse(true);p.setRng(t);return s}function i(s){var v,t,u;if(s){rng=p.getRng(true);rng.setStartBefore(s);rng.setEndBefore(s);v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true);p.setRng(rng)}else{t=l(p.getStart());while((s=j.get(o))&&s!==u){if(t!==s){v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true)}u=s}}}function q(){var s,w,u,t,v;function x(B,D){var A,F,E,C,z;A=t.startContainer;F=t.startOffset;if(A.nodeType==3){z=A.nodeValue.length;if((F>0&&F<z)||(D?F==z:F==0)){return}}else{if(F<A.childNodes.length){var G=!D&&F>0?F-1:F;A=A.childNodes[G];if(A.hasChildNodes()){A=A.firstChild}}else{return !D?B:null}}E=new c(A,B);while(C=E[D?"prev":"next"]()){if(C.nodeType===3&&C.nodeValue.length>0){return}else{if(m(C)==="true"){return C}}}return B}i();u=p.isCollapsed();s=g(p.getStart());w=g(p.getEnd());if(s||w){t=p.getRng(true);if(u){s=s||w;var y=p.getStart();if(v=x(s,true)){f(v,true)}else{if(v=x(s,false)){f(v,false)}else{p.select(s)}}}else{t=p.getRng(true);if(s){t.setStartBefore(s)}if(w){t.setEndAfter(w)}p.setRng(t)}}}function h(z,B){var F=B.keyCode,x,C,D,v;function u(H,G){while(H=H[G?"previousSibling":"nextSibling"]){if(H.nodeType!==3||H.nodeValue.length>0){return H}}}function y(G,H){p.select(G);p.collapse(H)}function t(K){var J,I,M,H;function G(O){var N=I;while(N){if(N===O){return}N=N.parentNode}j.remove(O);q()}function L(){var O,P,N=z.schema.getNonEmptyElements();P=new tinymce.dom.TreeWalker(I,z.getBody());while(O=(K?P.prev():P.next())){if(N[O.nodeName.toLowerCase()]){break}if(O.nodeType===3&&tinymce.trim(O.nodeValue).length>0){break}if(m(O)==="false"){G(O);return true}}if(g(O)){return true}return false}if(p.isCollapsed()){J=p.getRng(true);I=J.startContainer;M=J.startOffset;I=l(I)||I;if(H=g(I)){G(H);return false}if(I.nodeType==3&&(K?M>0:M<I.nodeValue.length)){return true}if(I.nodeType==1){I=I.childNodes[M]||I}if(L()){return false}}return true}D=p.getStart();v=p.getEnd();x=g(D)||g(v);if(x&&(F<112||F>124)&&F!=e.DELETE&&F!=e.BACKSPACE){if((tinymce.isMac?B.metaKey:B.ctrlKey)&&(F==67||F==88||F==86)){return}B.preventDefault();if(F==e.LEFT||F==e.RIGHT){var w=F==e.LEFT;if(z.dom.isBlock(x)){var A=w?x.previousSibling:x.nextSibling;var s=new c(A,A);var E=w?s.prev():s.next();y(E,!w)}else{y(x,w)}}}else{if(F==e.LEFT||F==e.RIGHT||F==e.BACKSPACE||F==e.DELETE){C=l(D);if(C){if(F==e.LEFT||F==e.BACKSPACE){x=u(C,true);if(x&&m(x)==="false"){B.preventDefault();if(F==e.LEFT){y(x,true)}else{j.remove(x);return}}else{i(C)}}if(F==e.RIGHT||F==e.DELETE){x=u(C);if(x&&m(x)==="false"){B.preventDefault();if(F==e.RIGHT){y(x,false)}else{j.remove(x);return}}else{i(C)}}}if((F==e.BACKSPACE||F==e.DELETE)&&!t(F==e.BACKSPACE)){B.preventDefault();return false}}}}n.onMouseDown.addToTop(function(s,u){var t=s.selection.getNode();if(m(t)==="false"&&t==u.target){q()}});n.onMouseUp.addToTop(q);n.onKeyDown.addToTop(h);n.onKeyUp.addToTop(q)}tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(i,k){var h,g,j;function f(m,n){var o=j.length,p=n.content,l=tinymce.trim(g);if(n.format=="raw"){return}while(o--){p=p.replace(j[o],function(s){var r=arguments,q=r[r.length-2];if(q>0&&p.charAt(q-1)=='"'){return s}return'<span class="'+l+'" data-mce-content="'+m.dom.encode(r[0])+'">'+m.dom.encode(typeof(r[1])==="string"?r[1]:r[0])+"</span>"})}n.content=p}h=" "+tinymce.trim(i.getParam("noneditable_editable_class","mceEditable"))+" ";g=" "+tinymce.trim(i.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";j=i.getParam("noneditable_regexp");if(j&&!j.length){j=[j]}i.onPreInit.add(function(){b(i);if(j){i.selection.onBeforeSetContent.add(f);i.onBeforeSetContent.add(f)}i.parser.addAttributeFilter("class",function(l){var m=l.length,n,o;while(m--){o=l[m];n=" "+o.attr("class")+" ";if(n.indexOf(h)!==-1){o.attr(d,"true")}else{if(n.indexOf(g)!==-1){o.attr(d,"false")}}}});i.serializer.addAttributeFilter(d,function(l,m){var n=l.length,o;while(n--){o=l[n];if(j&&o.attr("data-mce-content")){o.name="#text";o.type=3;o.raw=true;o.value=o.attr("data-mce-content")}else{o.attr(a,null);o.attr(d,null)}}});i.parser.addAttributeFilter(a,function(l,m){var n=l.length,o;while(n--){o=l[n];o.attr(d,o.attr(a));o.attr(a,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
index c87d241bd..c0efe749c 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
@@ -261,12 +261,96 @@
selection.collapse(start);
}
+ function canDelete(backspace) {
+ var rng, container, offset, nonEditableParent;
+
+ function removeNodeIfNotParent(node) {
+ var parent = container;
+
+ while (parent) {
+ if (parent === node) {
+ return;
+ }
+
+ parent = parent.parentNode;
+ }
+
+ dom.remove(node);
+ moveSelection();
+ }
+
+ function isNextPrevTreeNodeNonEditable() {
+ var node, walker, nonEmptyElements = ed.schema.getNonEmptyElements();
+
+ walker = new tinymce.dom.TreeWalker(container, ed.getBody());
+ while (node = (backspace ? walker.prev() : walker.next())) {
+ // Found IMG/INPUT etc
+ if (nonEmptyElements[node.nodeName.toLowerCase()]) {
+ break;
+ }
+
+ // Found text node with contents
+ if (node.nodeType === 3 && tinymce.trim(node.nodeValue).length > 0) {
+ break;
+ }
+
+ // Found non editable node
+ if (getContentEditable(node) === "false") {
+ removeNodeIfNotParent(node);
+ return true;
+ }
+ }
+
+ // Check if the content node is within a non editable parent
+ if (getNonEditableParent(node)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ if (selection.isCollapsed()) {
+ rng = selection.getRng(true);
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ container = getParentCaretContainer(container) || container;
+
+ // Is in noneditable parent
+ if (nonEditableParent = getNonEditableParent(container)) {
+ removeNodeIfNotParent(nonEditableParent);
+ return false;
+ }
+
+ // Check if the caret is in the middle of a text node
+ if (container.nodeType == 3 && (backspace ? offset > 0 : offset < container.nodeValue.length)) {
+ return true;
+ }
+
+ // Resolve container index
+ if (container.nodeType == 1) {
+ container = container.childNodes[offset] || container;
+ }
+
+ // Check if previous or next tree node is non editable then block the event
+ if (isNextPrevTreeNodeNonEditable()) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
startElement = selection.getStart()
endElement = selection.getEnd();
// Disable all key presses in contentEditable=false except delete or backspace
nonEditableParent = getNonEditableParent(startElement) || getNonEditableParent(endElement);
if (nonEditableParent && (keyCode < 112 || keyCode > 124) && keyCode != VK.DELETE && keyCode != VK.BACKSPACE) {
+ // Is Ctrl+c, Ctrl+v or Ctrl+x then use default browser behavior
+ if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) {
+ return;
+ }
+
e.preventDefault();
// Arrow left/right select the element and collapse left/right
@@ -298,6 +382,7 @@
positionCaretOnElement(nonEditableParent, true);
} else {
dom.remove(nonEditableParent);
+ return;
}
} else {
removeCaretContainer(caretContainer);
@@ -315,23 +400,31 @@
positionCaretOnElement(nonEditableParent, false);
} else {
dom.remove(nonEditableParent);
+ return;
}
} else {
removeCaretContainer(caretContainer);
}
}
}
+
+ if ((keyCode == VK.BACKSPACE || keyCode == VK.DELETE) && !canDelete(keyCode == VK.BACKSPACE)) {
+ e.preventDefault();
+ return false;
+ }
}
}
};
- ed.onMouseDown.addToTop(function(ed, e){
- // prevent collapsing selection to caret when clicking in a non-editable section
+ ed.onMouseDown.addToTop(function(ed, e) {
var node = ed.selection.getNode();
+
if (getContentEditable(node) === "false" && node == e.target) {
- e.preventDefault();
+ // Expand selection on mouse down we can't block the default event since it's used for drag/drop
+ moveSelection();
}
});
+
ed.onMouseUp.addToTop(moveSelection);
ed.onKeyDown.addToTop(handleKey);
ed.onKeyUp.addToTop(moveSelection);
@@ -341,6 +434,31 @@
init : function(ed, url) {
var editClass, nonEditClass, nonEditableRegExps;
+ // Converts configured regexps to noneditable span items
+ function convertRegExpsToNonEditable(ed, args) {
+ var i = nonEditableRegExps.length, content = args.content, cls = tinymce.trim(nonEditClass);
+
+ // Don't replace the variables when raw is used for example on undo/redo
+ if (args.format == "raw") {
+ return;
+ }
+
+ while (i--) {
+ content = content.replace(nonEditableRegExps[i], function(match) {
+ var args = arguments, index = args[args.length - 2];
+
+ // Is value inside an attribute then don't replace
+ if (index > 0 && content.charAt(index - 1) == '"') {
+ return match;
+ }
+
+ return '<span class="' + cls + '" data-mce-content="' + ed.dom.encode(args[0]) + '">' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + '</span>';
+ });
+ }
+
+ args.content = content;
+ };
+
editClass = " " + tinymce.trim(ed.getParam("noneditable_editable_class", "mceEditable")) + " ";
nonEditClass = " " + tinymce.trim(ed.getParam("noneditable_noneditable_class", "mceNonEditable")) + " ";
@@ -354,26 +472,10 @@
handleContentEditableSelection(ed);
if (nonEditableRegExps) {
- ed.onBeforeSetContent.add(function(ed, args) {
- var i = nonEditableRegExps.length, content = args.content, cls = tinymce.trim(nonEditClass);
-
- // Don't replace the variables when raw is used for example on undo/redo
- if (args.format == "raw") {
- return;
- }
-
- while (i--) {
- content = content.replace(nonEditableRegExps[i], function() {
- var args = arguments;
-
- return '<span class="' + cls + '" data-mce-content="' + ed.dom.encode(args[0]) + '">' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + '</span>';
- });
- }
-
- args.content = content;
- });
+ ed.selection.onBeforeSetContent.add(convertRegExpsToNonEditable);
+ ed.onBeforeSetContent.add(convertRegExpsToNonEditable);
}
-
+
// Apply contentEditable true/false on elements with the noneditable/editable classes
ed.parser.addAttributeFilter('class', function(nodes) {
var i = nodes.length, className, node;
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js
index e47a5c630..be7eee8f1 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js
@@ -1 +1 @@
-(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},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}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(g){var d=this.editor,e=b(d,"paste_text_linebreaktype"),i=b(d,"paste_text_replacements"),f=tinymce.is;function h(j){c(j,function(k){if(k.constructor==RegExp){g=g.replace(k,"")}else{g=g.replace(k[0],k[1])}})}if((typeof(g)==="string")&&(g.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(g)){h([/[\n\r]+/g])}else{h([/\r+/g])}h([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"]]);g=d.dom.decode(tinymce.html.Entities.encodeRaw(g));if(f(i,"array")){h(i)}else{if(f(i,"string")){h(new RegExp(i,"gi"))}}if(e=="none"){h([[/\n+/g," "]])}else{if(e=="br"){h([[/\n/g,"<br />"]])}else{if(e=="p"){h([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{h([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}d.execCommand("mceInsertContent",false,g)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file
+(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},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}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(g){var d=this.editor,e=b(d,"paste_text_linebreaktype"),i=b(d,"paste_text_replacements"),f=tinymce.is;function h(j){c(j,function(k){if(k.constructor==RegExp){g=g.replace(k,"")}else{g=g.replace(k[0],k[1])}})}if((typeof(g)==="string")&&(g.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(g)){h([/[\n\r]+/g])}else{h([/\r+/g])}h([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"]]);g=d.dom.decode(tinymce.html.Entities.encodeRaw(g));if(f(i,"array")){h(i)}else{if(f(i,"string")){h(new RegExp(i,"gi"))}}if(e=="none"){h([[/\n+/g," "]])}else{if(e=="br"){h([[/\n/g,"<br />"]])}else{if(e=="p"){h([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{h([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}d.execCommand("mceInsertContent",false,g)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
index 73fe7fe9a..9f1c35476 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
@@ -359,7 +359,7 @@
}
// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
- if (tinymce.isIE && document.documentMode >= 9) {
+ if (tinymce.isIE && document.documentMode >= 9 && /<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(o.content)) {
// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
process([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g, '$1']]);
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js
index 42a82d112..2c5129161 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js
@@ -1 +1 @@
-(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(t){n=c.select(":input:enabled,*[tabindex]");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m<n.length;m++){if(r(n[m])){return n[m]}}}else{for(m=j-1;m>=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); \ No newline at end of file
+(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(t){n=c.select(":input:enabled,*[tabindex]:not(iframe)");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m<n.length;m++){if(r(n[m])){return n[m]}}}else{for(m=j-1;m>=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
index a1579c85f..94f45320d 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
@@ -22,7 +22,7 @@
var x, i, f, el, v;
function find(d) {
- el = DOM.select(':input:enabled,*[tabindex]');
+ el = DOM.select(':input:enabled,*[tabindex]:not(iframe)');
function canSelectRecursive(e) {
return e.nodeName==="BODY" || (e.type != 'hidden' &&
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js b/library/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js
index d6f329059..02ecf22c8 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js
@@ -137,7 +137,7 @@ function updateAction() {
do {
if (cell == tdElm)
break;
- col += cell.getAttribute("colspan");
+ col += cell.getAttribute("colspan")?cell.getAttribute("colspan"):1;
} while ((cell = nextCell(cell)) != null);
for (var i=0; i<rows.length; i++) {
@@ -152,7 +152,7 @@ function updateAction() {
cell = updateCell(cell, true);
break;
}
- curr += cell.getAttribute("colspan");
+ curr += cell.getAttribute("colspan")?cell.getAttribute("colspan"):1;
} while ((cell = nextCell(cell)) != null);
}
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css b/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css
index 17b9aeff1..76bc92b50 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css
+++ b/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css
@@ -1,6 +1,6 @@
-p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, blockquote, address, pre {display: block; padding-top: 10px; border: 1px dashed #BBB; background: transparent no-repeat}
-p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, address, pre {margin-left: 3px}
-section, article, address, hgroup, aside {margin: 1em 0 0 3px}
+p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, blockquote, address, pre, figure {display: block; padding-top: 10px; border: 1px dashed #BBB; background: transparent no-repeat}
+p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, address, pre, figure {margin-left: 3px}
+section, article, address, hgroup, aside, figure {margin: 0 0 1em 3px}
p {background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}
h1 {background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}
@@ -17,3 +17,5 @@ address {background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH
pre {background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}
hgroup {background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}
aside {background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}
+figure {background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}
+figcaption {border: 1px dashed #BBB}
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js
index 62cc2e4ce..c65eaf2b4 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js
@@ -1 +1 @@
-(function(){tinymce.create("tinymce.plugins.VisualBlocks",{init:function(a,b){var c;if(!window.NodeList){return}a.addCommand("mceVisualBlocks",function(){var e=a.dom,d;if(!c){c=e.uniqueId();d=e.create("link",{id:c,rel:"stylesheet",href:b+"/css/visualblocks.css"});a.getDoc().getElementsByTagName("head")[0].appendChild(d)}else{d=e.get(c);d.disabled=!d.disabled}a.controlManager.setActive("visualblocks",!d.disabled)});a.addButton("visualblocks",{title:"visualblocks.desc",cmd:"mceVisualBlocks"});a.onInit.add(function(){if(a.settings.visualblocks_default_state){a.execCommand("mceVisualBlocks")}})},getInfo:function(){return{longname:"Visual blocks",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("visualblocks",tinymce.plugins.VisualBlocks)})(); \ No newline at end of file
+(function(){tinymce.create("tinymce.plugins.VisualBlocks",{init:function(a,b){var c;if(!window.NodeList){return}a.addCommand("mceVisualBlocks",function(){var e=a.dom,d;if(!c){c=e.uniqueId();d=e.create("link",{id:c,rel:"stylesheet",href:b+"/css/visualblocks.css"});a.getDoc().getElementsByTagName("head")[0].appendChild(d)}else{d=e.get(c);d.disabled=!d.disabled}a.controlManager.setActive("visualblocks",!d.disabled)});a.addButton("visualblocks",{title:"visualblocks.desc",cmd:"mceVisualBlocks"});a.onInit.add(function(){if(a.settings.visualblocks_default_state){a.execCommand("mceVisualBlocks",false,null,{skip_focus:true})}})},getInfo:function(){return{longname:"Visual blocks",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("visualblocks",tinymce.plugins.VisualBlocks)})(); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js
index e74c0bdc0..b9d2ab2e1 100644
--- a/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js
+++ b/library/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js
@@ -42,7 +42,7 @@
ed.onInit.add(function() {
if (ed.settings.visualblocks_default_state) {
- ed.execCommand('mceVisualBlocks');
+ ed.execCommand('mceVisualBlocks', false, null, {skip_focus : true});
}
});
},
diff --git a/library/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm b/library/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm
index ad1bb0f6c..b625531a6 100644
--- a/library/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm
+++ b/library/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm
@@ -62,12 +62,8 @@
<div class="mceActionPanel">
<input type="submit" id="insert" name="insert" value="{#apply}" />
-
- <div id="preview"></div>
-
- <div id="previewblock">
- <label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" class="text mceFocus" aria-required="true" />
- </div>
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();"/>
+ <div id="preview_wrapper"><div id="previewblock"><label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" class="text mceFocus" aria-required="true" /></div><span id="preview"></span></div>
</div>
</form>
</body>
diff --git a/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js
index a88701812..5e9deec89 100644
--- a/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js
+++ b/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js
@@ -1 +1 @@
-(function(h){var i=h.DOM,g=h.dom.Event,c=h.extend,f=h.each,a=h.util.Cookie,e,d=h.explode;function b(m,k){var q,p=m.dom,n="",o,l;previewStyles=m.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function j(r){return r.replace(/%(\w+)/g,"")}name=k.block||k.inline||"span";q=p.create(name);f(k.styles,function(s,r){s=j(s);if(s){p.setStyle(q,r,s)}});f(k.attributes,function(s,r){s=j(s);if(s){p.setAttrib(q,r,s)}});f(k.classes,function(r){r=j(r);if(!p.hasClass(q,r)){p.addClass(q,r)}});p.setStyles(q,{position:"absolute",left:-65535});m.getBody().appendChild(q);o=p.getStyle(m.getBody(),"fontSize",true);o=/px$/.test(o)?parseInt(o,10):0;f(previewStyles.split(" "),function(r){var s=p.getStyle(q,r,true);if(r=="font-size"){if(/em|%$/.test(s)){if(o===0){return}s=parseFloat(s,10)/(/%$/.test(s)?100:1);s=(s*o)+"px"}}n+=r+":"+s+";"});p.remove(q);return n}h.ThemeManager.requireLangPack("advanced");h.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],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(k,l){var m=this,n,j,p;m.editor=k;m.url=l;m.onResolveName=new h.util.Dispatcher(this);k.forcedHighContrastMode=k.settings.detect_highcontrast&&m._isHighContrast();k.settings.skin=k.forcedHighContrastMode?"highcontrast":k.settings.skin;m.settings=n=c({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_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:k.settings.readonly},k.settings);if(!n.font_size_style_values){n.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(h.is(n.theme_advanced_font_sizes,"string")){n.font_size_style_values=h.explode(n.font_size_style_values);n.font_size_classes=h.explode(n.font_size_classes||"");p={};k.settings.theme_advanced_font_sizes=n.theme_advanced_font_sizes;f(k.getParam("theme_advanced_font_sizes","","hash"),function(r,q){var o;if(q==r&&r>=1&&r<=7){q=r+" ("+m.sizes[r-1]+"pt)";o=n.font_size_classes[r-1];r=n.font_size_style_values[r-1]||(m.sizes[r-1]+"pt")}if(/^\s*\./.test(r)){o=r.replace(/\./g,"")}p[q]=o?{"class":o}:{fontSize:r}});n.theme_advanced_font_sizes=p}if((j=n.theme_advanced_path_location)&&j!="none"){n.theme_advanced_statusbar_location=n.theme_advanced_path_location}if(n.theme_advanced_statusbar_location=="none"){n.theme_advanced_statusbar_location=0}if(k.settings.content_css!==false){k.contentCSS.push(k.baseURI.toAbsolute(l+"/skins/"+k.settings.skin+"/content.css"))}k.onInit.add(function(){if(!k.settings.readonly){k.onNodeChange.add(m._nodeChanged,m);k.onKeyUp.add(m._updateUndoStatus,m);k.onMouseUp.add(m._updateUndoStatus,m);k.dom.bind(k.dom.getRoot(),"dragend",function(){m._updateUndoStatus(k)})}});k.onSetProgressState.add(function(r,o,s){var t,u=r.id,q;if(o){m.progressTimer=setTimeout(function(){t=r.getContainer();t=t.insertBefore(i.create("DIV",{style:"position:relative"}),t.firstChild);q=i.get(r.id+"_tbl");i.add(t,"div",{id:u+"_blocker","class":"mceBlocker",style:{width:q.clientWidth+2,height:q.clientHeight+2}});i.add(t,"div",{id:u+"_progress","class":"mceProgress",style:{left:q.clientWidth/2,top:q.clientHeight/2}})},s||0)}else{i.remove(u+"_blocker");i.remove(u+"_progress");clearTimeout(m.progressTimer)}});i.loadCSS(n.editor_css?k.documentBaseURI.toAbsolute(n.editor_css):l+"/skins/"+k.settings.skin+"/ui.css");if(n.skin_variant){i.loadCSS(l+"/skins/"+k.settings.skin+"/ui_"+n.skin_variant+".css")}},_isHighContrast:function(){var j,k=i.add(i.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});j=(i.getStyle(k,"background-color",true)+"").toLowerCase().replace(/ /g,"");i.remove(k);return j!="rgb(171,239,86)"&&j!="#abef56"},createControl:function(m,j){var k,l;if(l=j.createControl(m)){return l}switch(m){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((k=this.controls[m])){return j.createButton(m,{title:"advanced."+k[0],cmd:k[1],ui:k[2],value:k[3]})}},execCommand:function(l,k,m){var j=this["_"+l];if(j){j.call(this,k,m);return true}return false},_importClasses:function(l){var j=this.editor,k=j.controlManager.get("styleselect");if(k.getLength()==0){f(j.dom.getClasses(),function(q,m){var p="style_"+m,n;n={inline:"span",attributes:{"class":q["class"]},selector:"*"};j.formatter.register(p,n);k.add(q["class"],p,{style:function(){return b(j,n)}})})}},_createStyleSelect:function(o){var l=this,j=l.editor,k=j.controlManager,m;m=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(q){var r,n=[],p;f(m.items,function(s){n.push(s.value)});j.focus();j.undoManager.add();r=j.formatter.matchAll(n);h.each(r,function(s){if(!q||s==q){if(s){j.formatter.remove(s)}p=true}});if(!p){j.formatter.apply(q)}j.undoManager.add();j.nodeChanged();return false}});j.onPreInit.add(function(){var p=0,n=j.getParam("style_formats");if(n){f(n,function(q){var r,s=0;f(q,function(){s++});if(s>1){r=q.name=q.name||"style_"+(p++);j.formatter.register(r,q);m.add(q.title,r,{style:function(){return b(j,q)}})}else{m.add(q.title)}})}else{f(j.getParam("theme_advanced_styles","","hash"),function(t,s){var r,q;if(t){r="style_"+(p++);q={inline:"span",classes:t,selector:"*"};j.formatter.register(r,q);m.add(l.editor.translate(s),r,{style:function(){return b(j,q)}})}})}});if(m.getLength()==0){m.onPostRender.add(function(p,q){if(!m.NativeListBox){g.add(q.id+"_text","focus",l._importClasses,l);g.add(q.id+"_text","mousedown",l._importClasses,l);g.add(q.id+"_open","focus",l._importClasses,l);g.add(q.id+"_open","mousedown",l._importClasses,l)}else{g.add(q.id,"focus",l._importClasses,l)}})}return m},_createFontSelect:function(){var l,k=this,j=k.editor;l=j.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(m){var n=l.items[l.selectedIndex];if(!m&&n){j.execCommand("FontName",false,n.value);return}j.execCommand("FontName",false,m);l.select(function(o){return m==o});if(n&&n.value==m){l.select(null)}return false}});if(l){f(j.getParam("theme_advanced_fonts",k.settings.theme_advanced_fonts,"hash"),function(n,m){l.add(j.translate(m),n,{style:n.indexOf("dings")==-1?"font-family:"+n:""})})}return l},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){p=p.value;if(p["class"]){k.formatter.toggle("fontsize_class",{value:p["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,p.fontSize)}return}if(o["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}n.select(function(q){return o==q});if(p&&(p.value.fontSize==o.fontSize||p.value["class"]&&p.value["class"]==o["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(p,o){var q=p.fontSize;if(q>=1&&q<=7){q=m.sizes[parseInt(q)-1]+"pt"}n.add(o,p,{style:"font-size:"+q,"class":"mceFontSize"+(l++)+(" "+(p["class"]||""))})})}return n},_createBlockFormats:function(){var l,j={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"},k=this;l=k.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(m){k.editor.execCommand("FormatBlock",false,m);return false}});if(l){f(k.editor.getParam("theme_advanced_blockformats",k.settings.theme_advanced_blockformats,"hash"),function(n,m){l.add(k.editor.translate(m!=n?m:j[n]),n,{"class":"mce_formatPreview mce_"+n,style:function(){return b(k.editor,{block:n})}})})}return l},_createForeColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_text_colors){m.colors=j}if(l.theme_advanced_default_foreground_color){m.default_color=l.theme_advanced_default_foreground_color}m.title="advanced.forecolor_desc";m.cmd="ForeColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("forecolor",m);return n},_createBackColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_background_colors){m.colors=j}if(l.theme_advanced_default_background_color){m.default_color=l.theme_advanced_default_background_color}m.title="advanced.backcolor_desc";m.cmd="HiliteColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("backcolor",m);return n},renderUI:function(l){var q,m,r,w=this,u=w.editor,x=w.settings,v,k,j;if(u.settings){u.settings.aria_label=x.aria_label+u.getLang("advanced.help_shortcut")}q=k=i.create("span",{role:"application","aria-labelledby":u.id+"_voice",id:u.id+"_parent","class":"mceEditor "+u.settings.skin+"Skin"+(x.skin_variant?" "+u.settings.skin+"Skin"+w._ufirst(x.skin_variant):"")});i.add(q,"span",{"class":"mceVoiceLabel",style:"display:none;",id:u.id+"_voice"},x.aria_label);if(!i.boxModel){q=i.add(q,"div",{"class":"mceOldBoxModel"})}q=v=i.add(q,"table",{role:"presentation",id:u.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});q=r=i.add(q,"tbody");switch((x.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":m=w._rowLayout(x,r,l);break;case"customlayout":m=u.execCallback("theme_advanced_custom_layout",x,r,l,k);break;default:m=w._simpleLayout(x,r,l,k)}q=l.targetNode;j=v.rows;i.addClass(j[0],"mceFirst");i.addClass(j[j.length-1],"mceLast");f(i.select("tr",r),function(o){i.addClass(o.firstChild,"mceFirst");i.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(i.get(x.theme_advanced_toolbar_container)){i.get(x.theme_advanced_toolbar_container).appendChild(k)}else{i.insertAfter(k,q)}g.add(u.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){w._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!u.getParam("accessibility_focus")){g.add(i.add(k,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(u.id).focus()})}if(x.theme_advanced_toolbar_location=="external"){l.deltaHeight=0}w.deltaHeight=l.deltaHeight;l.targetNode=null;u.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(h.isWebKit){window.focus()}w.toolbarGroup.focus();return g.cancel(n)}else{if(n.keyCode===o){i.get(p.id+"_path_row").focus();return g.cancel(n)}}}});u.addShortcut("alt+0","","mceShortcuts",w);return{iframeContainer:m,editorContainer:u.id+"_parent",sizeContainer:v,deltaHeight:l.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:h.majorVersion+"."+h.minorVersion}},resizeBy:function(j,k){var l=i.get(this.editor.id+"_ifr");this.resizeTo(l.clientWidth+j,l.clientHeight+k)},resizeTo:function(j,n,l){var k=this.editor,m=this.settings,o=i.get(k.id+"_tbl"),p=i.get(k.id+"_ifr");j=Math.max(m.theme_advanced_resizing_min_width||100,j);n=Math.max(m.theme_advanced_resizing_min_height||100,n);j=Math.min(m.theme_advanced_resizing_max_width||65535,j);n=Math.min(m.theme_advanced_resizing_max_height||65535,n);i.setStyle(o,"height","");i.setStyle(p,"height",n);if(m.theme_advanced_resize_horizontal){i.setStyle(o,"width","");i.setStyle(p,"width",j);if(j<o.clientWidth){j=o.clientWidth;i.setStyle(p,"width",o.clientWidth)}}if(l&&m.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+k.id+"_size",{cw:j,ch:n})}},destroy:function(){var j=this.editor.id;g.clear(j+"_resize");g.clear(j+"_path_row");g.clear(j+"_external_close")},_simpleLayout:function(z,u,l,j){var y=this,v=y.editor,w=z.theme_advanced_toolbar_location,q=z.theme_advanced_statusbar_location,m,k,r,x;if(z.readonly){m=i.add(u,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"});return k}if(w=="top"){y._addToolbars(u,l)}if(w=="external"){m=x=i.create("div",{style:"position:relative"});m=i.add(m,"div",{id:v.id+"_external","class":"mceExternalToolbar"});i.add(m,"a",{id:v.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});m=i.add(m,"table",{id:v.id+"_tblext",cellSpacing:0,cellPadding:0});r=i.add(m,"tbody");if(j.firstChild.className=="mceOldBoxModel"){j.firstChild.appendChild(x)}else{j.insertBefore(x,j.firstChild)}y._addToolbars(r,l);v.onMouseUp.add(function(){var o=i.get(v.id+"_external");i.show(o);i.hide(e);var n=g.add(v.id+"_external_close","click",function(){i.hide(v.id+"_external");g.remove(v.id+"_external_close","click",n)});i.show(o);i.setStyle(o,"top",0-i.getRect(v.id+"_tblext").h-1);i.hide(o);i.show(o);o.style.filter="";e=v.id+"_external";o=null})}if(q=="top"){y._addStatusBar(u,l)}if(!z.theme_advanced_toolbar_container){m=i.add(u,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"})}if(w=="bottom"){y._addToolbars(u,l)}if(q=="bottom"){y._addStatusBar(u,l)}return k},_rowLayout:function(x,p,l){var w=this,q=w.editor,v,y,j=q.controlManager,m,k,u,r;v=x.theme_advanced_containers_default_class||"";y=x.theme_advanced_containers_default_align||"center";f(d(x.theme_advanced_containers||""),function(s,o){var n=x["theme_advanced_container_"+s]||"";switch(s.toLowerCase()){case"mceeditor":m=i.add(p,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":w._addStatusBar(p,l);break;default:r=(x["theme_advanced_container_"+s+"_align"]||y).toLowerCase();r="mce"+w._ufirst(r);m=i.add(i.add(p,"tr"),"td",{"class":"mceToolbar "+(x["theme_advanced_container_"+s+"_class"]||v)+" "+r||y});u=j.createToolbar("toolbar"+o);w._addControls(n,u);i.setHTML(m,u.renderHTML());l.deltaHeight-=x.theme_advanced_row_height}});return k},_addControls:function(k,j){var l=this,m=l.settings,n,o=l.editor.controlManager;if(m.theme_advanced_disable&&!l._disabled){n={};f(d(m.theme_advanced_disable),function(p){n[p]=1});l._disabled=n}else{n=l._disabled}f(d(k),function(q){var p;if(n&&n[q]){return}if(q=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(r){r=l.createControl(r,o);if(r){j.add(r)}});return}p=l.createControl(q,o);if(p){j.add(p)}})},_addToolbars:function(x,k){var A=this,p,m,r=A.editor,B=A.settings,z,j=r.controlManager,u,l,q=[],y,w;w=j.createToolbarGroup("toolbargroup",{name:r.getLang("advanced.toolbar"),tab_focus_toolbar:r.getParam("theme_advanced_tab_focus_toolbar")});A.toolbarGroup=w;y=B.theme_advanced_toolbar_align.toLowerCase();y="mce"+A._ufirst(y);l=i.add(i.add(x,"tr",{role:"presentation"}),"td",{"class":"mceToolbar "+y,role:"presentation"});for(p=1;(z=B["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(B["theme_advanced_buttons"+p+"_add"]){z+=","+B["theme_advanced_buttons"+p+"_add"]}if(B["theme_advanced_buttons"+p+"_add_before"]){z=B["theme_advanced_buttons"+p+"_add_before"]+","+z}A._addControls(z,m);w.add(m);k.deltaHeight-=B.theme_advanced_row_height}q.push(w.renderHTML());q.push(i.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));i.setHTML(l,q.join(""))},_addStatusBar:function(p,k){var l,w=this,q=w.editor,x=w.settings,j,u,v,m;l=i.add(p,"tr");l=m=i.add(l,"td",{"class":"mceStatusbar"});l=i.add(l,"div",{id:q.id+"_path_row",role:"group","aria-labelledby":q.id+"_path_voice"});if(x.theme_advanced_path){i.add(l,"span",{id:q.id+"_path_voice"},q.translate("advanced.path"));i.add(l,"span",{},": ")}else{i.add(l,"span",{},"&#160;")}if(x.theme_advanced_resizing){i.add(m,"a",{id:q.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(x.theme_advanced_resizing_use_cookie){q.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+q.id+"_size"),r=i.get(q.id+"_tbl");if(!n){return}w.resizeTo(n.cw,n.ch)})}q.onPostRender.add(function(){g.add(q.id+"_resize","click",function(n){n.preventDefault()});g.add(q.id+"_resize","mousedown",function(E){var t,r,s,o,D,A,B,G,n,F,y;function z(H){H.preventDefault();n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F)}function C(H){g.remove(i.doc,"mousemove",t);g.remove(q.getDoc(),"mousemove",r);g.remove(i.doc,"mouseup",s);g.remove(q.getDoc(),"mouseup",o);n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F,true)}E.preventDefault();D=E.screenX;A=E.screenY;y=i.get(w.editor.id+"_ifr");B=n=y.clientWidth;G=F=y.clientHeight;t=g.add(i.doc,"mousemove",z);r=g.add(q.getDoc(),"mousemove",z);s=g.add(i.doc,"mouseup",C);o=g.add(q.getDoc(),"mouseup",C)})})}k.deltaHeight-=21;l=p=null},_updateUndoStatus:function(k){var j=k.controlManager,l=k.undoManager;j.setDisabled("undo",!l.hasUndo()&&!l.typing);j.setDisabled("redo",!l.hasRedo())},_nodeChanged:function(o,u,E,r,F){var z=this,D,G=0,y,H,A=z.settings,x,l,w,C,m,k,j;h.each(z.stateControls,function(n){u.setActive(n,o.queryCommandState(z.controls[n][1]))});function q(p){var s,n=F.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}u.setActive("visualaid",o.hasVisual);z._updateUndoStatus(o);u.setDisabled("outdent",!o.queryCommandState("Outdent"));D=q("A");if(H=u.get("link")){if(!D||!D.name){H.setDisabled(!D&&r);H.setActive(!!D)}}if(H=u.get("unlink")){H.setDisabled(!D&&r);H.setActive(!!D&&!D.name)}if(H=u.get("anchor")){H.setActive(!r&&!!D&&D.name)}D=q("IMG");if(H=u.get("image")){H.setActive(!r&&!!D&&E.className.indexOf("mceItem")==-1)}if(H=u.get("styleselect")){z._importClasses();k=[];f(H.items,function(n){k.push(n.value)});j=o.formatter.matchAll(k);H.select(j[0]);h.each(j,function(p,n){if(n>0){H.mark(p)}})}if(H=u.get("formatselect")){D=q(i.isBlock);if(D){H.select(D.nodeName.toLowerCase())}}q(function(p){if(p.nodeName==="SPAN"){if(!x&&p.className){x=p.className}}if(o.dom.is(p,A.theme_advanced_font_selector)){if(!l&&p.style.fontSize){l=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!C&&p.style.color){C=p.style.color}if(!m&&p.style.backgroundColor){m=p.style.backgroundColor}}return false});if(H=u.get("fontselect")){H.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(H=u.get("fontsizeselect")){if(A.theme_advanced_runtime_fontsize&&!l&&!x){l=o.dom.getStyle(E,"fontSize",true)}H.select(function(n){if(n.fontSize&&n.fontSize===l){return true}if(n["class"]&&n["class"]===x){return true}})}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_path&&A.theme_advanced_statusbar_location){D=i.get(o.id+"_path")||i.add(o.id+"_path_row","span",{id:o.id+"_path"});if(z.statusKeyboardNavigation){z.statusKeyboardNavigation.destroy();z.statusKeyboardNavigation=null}i.setHTML(D,"");q(function(I){var p=I.nodeName.toLowerCase(),s,v,t="";if(I.nodeType!=1||p==="br"||I.getAttribute("data-mce-bogus")||i.hasClass(I,"mceItemHidden")||i.hasClass(I,"mceItemRemoved")){return}if(h.isIE&&I.scopeName!=="HTML"){p=I.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(y=i.getAttrib(I,"src")){t+="src: "+y+" "}break;case"a":if(y=i.getAttrib(I,"name")){t+="name: "+y+" ";p+="#"+y}if(y=i.getAttrib(I,"href")){t+="href: "+y+" "}break;case"font":if(y=i.getAttrib(I,"face")){t+="font: "+y+" "}if(y=i.getAttrib(I,"size")){t+="size: "+y+" "}if(y=i.getAttrib(I,"color")){t+="color: "+y+" "}break;case"span":if(y=i.getAttrib(I,"style")){t+="style: "+y+" "}break}if(y=i.getAttrib(I,"id")){t+="id: "+y+" "}if(y=I.className){y=y.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(y){t+="class: "+y+" ";if(i.isBlock(I)||p=="img"||p=="span"){p+="."+y}}}p=p.replace(/(html:)/g,"");p={name:p,node:I,title:t};z.onResolveName.dispatch(z,p);t=p.title;p=p.name;v=i.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(G++)},p);if(D.hasChildNodes()){D.insertBefore(i.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),D.firstChild);D.insertBefore(v,D.firstChild)}else{D.appendChild(v)}},o.getBody());if(i.select("a",D).length>0){z.statusKeyboardNavigation=new h.ui.KeyboardNavigation({root:o.id+"_path_row",items:i.select("a",D),excludeFromTabOrder:true,onCancel:function(){o.focus()}},i)}}},_sel:function(j){this.editor.execCommand("mceSelectNodeDepth",false,j)},_mceInsertAnchor:function(l,k){var j=this.editor;j.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(j.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(j.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var j=this.editor;j.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(j.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(j.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var j=this.editor;j.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var j=this.editor;j.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(l,k){var j=this.editor;k=k||{};j.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(j.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(j.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:k.color,func:k.func,theme_url:this.url})},_mceCodeEditor:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(j.getParam("theme_advanced_source_editor_width",720)),height:parseInt(j.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(k,l){var j=this.editor;if(j.dom.getAttrib(j.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}j.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(j.getLang("advanced.image_delta_width",0)),height:275+parseInt(j.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(j.getLang("advanced.link_delta_width",0)),height:200+parseInt(j.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var j=this.editor;j.windowManager.confirm("advanced.newdocument",function(k){if(k){j.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var j=this;this._mceColorPicker(0,{color:j.fgColor,func:function(k){j.fgColor=k;j.editor.execCommand("ForeColor",false,k)}})},_mceBackColor:function(){var j=this;this._mceColorPicker(0,{color:j.bgColor,func:function(k){j.bgColor=k;j.editor.execCommand("HiliteColor",false,k)}})},_ufirst:function(j){return j.substring(0,1).toUpperCase()+j.substring(1)}});h.ThemeManager.add("advanced",h.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file
+(function(h){var i=h.DOM,g=h.dom.Event,c=h.extend,f=h.each,a=h.util.Cookie,e,d=h.explode;function b(m,k){var q,p=m.dom,n="",o,l;previewStyles=m.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function j(r){return r.replace(/%(\w+)/g,"")}name=k.block||k.inline||"span";q=p.create(name);f(k.styles,function(s,r){s=j(s);if(s){p.setStyle(q,r,s)}});f(k.attributes,function(s,r){s=j(s);if(s){p.setAttrib(q,r,s)}});f(k.classes,function(r){r=j(r);if(!p.hasClass(q,r)){p.addClass(q,r)}});p.setStyles(q,{position:"absolute",left:-65535});m.getBody().appendChild(q);o=p.getStyle(m.getBody(),"fontSize",true);o=/px$/.test(o)?parseInt(o,10):0;f(previewStyles.split(" "),function(r){var s=p.getStyle(q,r,true);if(r=="background-color"&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(s)){s=p.getStyle(m.getBody(),r,true);if(p.toHex(s).toLowerCase()=="#ffffff"){return}}if(r=="font-size"){if(/em|%$/.test(s)){if(o===0){return}s=parseFloat(s,10)/(/%$/.test(s)?100:1);s=(s*o)+"px"}}n+=r+":"+s+";"});p.remove(q);return n}h.ThemeManager.requireLangPack("advanced");h.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],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(k,l){var m=this,n,j,p;m.editor=k;m.url=l;m.onResolveName=new h.util.Dispatcher(this);k.forcedHighContrastMode=k.settings.detect_highcontrast&&m._isHighContrast();k.settings.skin=k.forcedHighContrastMode?"highcontrast":k.settings.skin;m.settings=n=c({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_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:k.settings.readonly},k.settings);if(!n.font_size_style_values){n.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(h.is(n.theme_advanced_font_sizes,"string")){n.font_size_style_values=h.explode(n.font_size_style_values);n.font_size_classes=h.explode(n.font_size_classes||"");p={};k.settings.theme_advanced_font_sizes=n.theme_advanced_font_sizes;f(k.getParam("theme_advanced_font_sizes","","hash"),function(r,q){var o;if(q==r&&r>=1&&r<=7){q=r+" ("+m.sizes[r-1]+"pt)";o=n.font_size_classes[r-1];r=n.font_size_style_values[r-1]||(m.sizes[r-1]+"pt")}if(/^\s*\./.test(r)){o=r.replace(/\./g,"")}p[q]=o?{"class":o}:{fontSize:r}});n.theme_advanced_font_sizes=p}if((j=n.theme_advanced_path_location)&&j!="none"){n.theme_advanced_statusbar_location=n.theme_advanced_path_location}if(n.theme_advanced_statusbar_location=="none"){n.theme_advanced_statusbar_location=0}if(k.settings.content_css!==false){k.contentCSS.push(k.baseURI.toAbsolute(l+"/skins/"+k.settings.skin+"/content.css"))}k.onInit.add(function(){if(!k.settings.readonly){k.onNodeChange.add(m._nodeChanged,m);k.onKeyUp.add(m._updateUndoStatus,m);k.onMouseUp.add(m._updateUndoStatus,m);k.dom.bind(k.dom.getRoot(),"dragend",function(){m._updateUndoStatus(k)})}});k.onSetProgressState.add(function(r,o,s){var t,u=r.id,q;if(o){m.progressTimer=setTimeout(function(){t=r.getContainer();t=t.insertBefore(i.create("DIV",{style:"position:relative"}),t.firstChild);q=i.get(r.id+"_tbl");i.add(t,"div",{id:u+"_blocker","class":"mceBlocker",style:{width:q.clientWidth+2,height:q.clientHeight+2}});i.add(t,"div",{id:u+"_progress","class":"mceProgress",style:{left:q.clientWidth/2,top:q.clientHeight/2}})},s||0)}else{i.remove(u+"_blocker");i.remove(u+"_progress");clearTimeout(m.progressTimer)}});i.loadCSS(n.editor_css?k.documentBaseURI.toAbsolute(n.editor_css):l+"/skins/"+k.settings.skin+"/ui.css");if(n.skin_variant){i.loadCSS(l+"/skins/"+k.settings.skin+"/ui_"+n.skin_variant+".css")}},_isHighContrast:function(){var j,k=i.add(i.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});j=(i.getStyle(k,"background-color",true)+"").toLowerCase().replace(/ /g,"");i.remove(k);return j!="rgb(171,239,86)"&&j!="#abef56"},createControl:function(m,j){var k,l;if(l=j.createControl(m)){return l}switch(m){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((k=this.controls[m])){return j.createButton(m,{title:"advanced."+k[0],cmd:k[1],ui:k[2],value:k[3]})}},execCommand:function(l,k,m){var j=this["_"+l];if(j){j.call(this,k,m);return true}return false},_importClasses:function(l){var j=this.editor,k=j.controlManager.get("styleselect");if(k.getLength()==0){f(j.dom.getClasses(),function(q,m){var p="style_"+m,n;n={inline:"span",attributes:{"class":q["class"]},selector:"*"};j.formatter.register(p,n);k.add(q["class"],p,{style:function(){return b(j,n)}})})}},_createStyleSelect:function(o){var l=this,j=l.editor,k=j.controlManager,m;m=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(q){var r,n=[],p;f(m.items,function(s){n.push(s.value)});j.focus();j.undoManager.add();r=j.formatter.matchAll(n);h.each(r,function(s){if(!q||s==q){if(s){j.formatter.remove(s)}p=true}});if(!p){j.formatter.apply(q)}j.undoManager.add();j.nodeChanged();return false}});j.onPreInit.add(function(){var p=0,n=j.getParam("style_formats");if(n){f(n,function(q){var r,s=0;f(q,function(){s++});if(s>1){r=q.name=q.name||"style_"+(p++);j.formatter.register(r,q);m.add(q.title,r,{style:function(){return b(j,q)}})}else{m.add(q.title)}})}else{f(j.getParam("theme_advanced_styles","","hash"),function(t,s){var r,q;if(t){r="style_"+(p++);q={inline:"span",classes:t,selector:"*"};j.formatter.register(r,q);m.add(l.editor.translate(s),r,{style:function(){return b(j,q)}})}})}});if(m.getLength()==0){m.onPostRender.add(function(p,q){if(!m.NativeListBox){g.add(q.id+"_text","focus",l._importClasses,l);g.add(q.id+"_text","mousedown",l._importClasses,l);g.add(q.id+"_open","focus",l._importClasses,l);g.add(q.id+"_open","mousedown",l._importClasses,l)}else{g.add(q.id,"focus",l._importClasses,l)}})}return m},_createFontSelect:function(){var l,k=this,j=k.editor;l=j.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(m){var n=l.items[l.selectedIndex];if(!m&&n){j.execCommand("FontName",false,n.value);return}j.execCommand("FontName",false,m);l.select(function(o){return m==o});if(n&&n.value==m){l.select(null)}return false}});if(l){f(j.getParam("theme_advanced_fonts",k.settings.theme_advanced_fonts,"hash"),function(n,m){l.add(j.translate(m),n,{style:n.indexOf("dings")==-1?"font-family:"+n:""})})}return l},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){p=p.value;if(p["class"]){k.formatter.toggle("fontsize_class",{value:p["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,p.fontSize)}return}if(o["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}n.select(function(q){return o==q});if(p&&(p.value.fontSize==o.fontSize||p.value["class"]&&p.value["class"]==o["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(p,o){var q=p.fontSize;if(q>=1&&q<=7){q=m.sizes[parseInt(q)-1]+"pt"}n.add(o,p,{style:"font-size:"+q,"class":"mceFontSize"+(l++)+(" "+(p["class"]||""))})})}return n},_createBlockFormats:function(){var l,j={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"},k=this;l=k.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(m){k.editor.execCommand("FormatBlock",false,m);return false}});if(l){f(k.editor.getParam("theme_advanced_blockformats",k.settings.theme_advanced_blockformats,"hash"),function(n,m){l.add(k.editor.translate(m!=n?m:j[n]),n,{"class":"mce_formatPreview mce_"+n,style:function(){return b(k.editor,{block:n})}})})}return l},_createForeColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_text_colors){m.colors=j}if(l.theme_advanced_default_foreground_color){m.default_color=l.theme_advanced_default_foreground_color}m.title="advanced.forecolor_desc";m.cmd="ForeColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("forecolor",m);return n},_createBackColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_background_colors){m.colors=j}if(l.theme_advanced_default_background_color){m.default_color=l.theme_advanced_default_background_color}m.title="advanced.backcolor_desc";m.cmd="HiliteColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("backcolor",m);return n},renderUI:function(l){var q,m,r,w=this,u=w.editor,x=w.settings,v,k,j;if(u.settings){u.settings.aria_label=x.aria_label+u.getLang("advanced.help_shortcut")}q=k=i.create("span",{role:"application","aria-labelledby":u.id+"_voice",id:u.id+"_parent","class":"mceEditor "+u.settings.skin+"Skin"+(x.skin_variant?" "+u.settings.skin+"Skin"+w._ufirst(x.skin_variant):"")+(u.settings.directionality=="rtl"?" mceRtl":"")});i.add(q,"span",{"class":"mceVoiceLabel",style:"display:none;",id:u.id+"_voice"},x.aria_label);if(!i.boxModel){q=i.add(q,"div",{"class":"mceOldBoxModel"})}q=v=i.add(q,"table",{role:"presentation",id:u.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});q=r=i.add(q,"tbody");switch((x.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":m=w._rowLayout(x,r,l);break;case"customlayout":m=u.execCallback("theme_advanced_custom_layout",x,r,l,k);break;default:m=w._simpleLayout(x,r,l,k)}q=l.targetNode;j=v.rows;i.addClass(j[0],"mceFirst");i.addClass(j[j.length-1],"mceLast");f(i.select("tr",r),function(o){i.addClass(o.firstChild,"mceFirst");i.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(i.get(x.theme_advanced_toolbar_container)){i.get(x.theme_advanced_toolbar_container).appendChild(k)}else{i.insertAfter(k,q)}g.add(u.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){w._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!u.getParam("accessibility_focus")){g.add(i.add(k,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(u.id).focus()})}if(x.theme_advanced_toolbar_location=="external"){l.deltaHeight=0}w.deltaHeight=l.deltaHeight;l.targetNode=null;u.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(h.isWebKit){window.focus()}w.toolbarGroup.focus();return g.cancel(n)}else{if(n.keyCode===o){i.get(p.id+"_path_row").focus();return g.cancel(n)}}}});u.addShortcut("alt+0","","mceShortcuts",w);return{iframeContainer:m,editorContainer:u.id+"_parent",sizeContainer:v,deltaHeight:l.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:h.majorVersion+"."+h.minorVersion}},resizeBy:function(j,k){var l=i.get(this.editor.id+"_ifr");this.resizeTo(l.clientWidth+j,l.clientHeight+k)},resizeTo:function(j,n,l){var k=this.editor,m=this.settings,o=i.get(k.id+"_tbl"),p=i.get(k.id+"_ifr");j=Math.max(m.theme_advanced_resizing_min_width||100,j);n=Math.max(m.theme_advanced_resizing_min_height||100,n);j=Math.min(m.theme_advanced_resizing_max_width||65535,j);n=Math.min(m.theme_advanced_resizing_max_height||65535,n);i.setStyle(o,"height","");i.setStyle(p,"height",n);if(m.theme_advanced_resize_horizontal){i.setStyle(o,"width","");i.setStyle(p,"width",j);if(j<o.clientWidth){j=o.clientWidth;i.setStyle(p,"width",o.clientWidth)}}if(l&&m.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+k.id+"_size",{cw:j,ch:n})}},destroy:function(){var j=this.editor.id;g.clear(j+"_resize");g.clear(j+"_path_row");g.clear(j+"_external_close")},_simpleLayout:function(z,u,l,j){var y=this,v=y.editor,w=z.theme_advanced_toolbar_location,q=z.theme_advanced_statusbar_location,m,k,r,x;if(z.readonly){m=i.add(u,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"});return k}if(w=="top"){y._addToolbars(u,l)}if(w=="external"){m=x=i.create("div",{style:"position:relative"});m=i.add(m,"div",{id:v.id+"_external","class":"mceExternalToolbar"});i.add(m,"a",{id:v.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});m=i.add(m,"table",{id:v.id+"_tblext",cellSpacing:0,cellPadding:0});r=i.add(m,"tbody");if(j.firstChild.className=="mceOldBoxModel"){j.firstChild.appendChild(x)}else{j.insertBefore(x,j.firstChild)}y._addToolbars(r,l);v.onMouseUp.add(function(){var o=i.get(v.id+"_external");i.show(o);i.hide(e);var n=g.add(v.id+"_external_close","click",function(){i.hide(v.id+"_external");g.remove(v.id+"_external_close","click",n)});i.show(o);i.setStyle(o,"top",0-i.getRect(v.id+"_tblext").h-1);i.hide(o);i.show(o);o.style.filter="";e=v.id+"_external";o=null})}if(q=="top"){y._addStatusBar(u,l)}if(!z.theme_advanced_toolbar_container){m=i.add(u,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"})}if(w=="bottom"){y._addToolbars(u,l)}if(q=="bottom"){y._addStatusBar(u,l)}return k},_rowLayout:function(x,p,l){var w=this,q=w.editor,v,y,j=q.controlManager,m,k,u,r;v=x.theme_advanced_containers_default_class||"";y=x.theme_advanced_containers_default_align||"center";f(d(x.theme_advanced_containers||""),function(s,o){var n=x["theme_advanced_container_"+s]||"";switch(s.toLowerCase()){case"mceeditor":m=i.add(p,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":w._addStatusBar(p,l);break;default:r=(x["theme_advanced_container_"+s+"_align"]||y).toLowerCase();r="mce"+w._ufirst(r);m=i.add(i.add(p,"tr"),"td",{"class":"mceToolbar "+(x["theme_advanced_container_"+s+"_class"]||v)+" "+r||y});u=j.createToolbar("toolbar"+o);w._addControls(n,u);i.setHTML(m,u.renderHTML());l.deltaHeight-=x.theme_advanced_row_height}});return k},_addControls:function(k,j){var l=this,m=l.settings,n,o=l.editor.controlManager;if(m.theme_advanced_disable&&!l._disabled){n={};f(d(m.theme_advanced_disable),function(p){n[p]=1});l._disabled=n}else{n=l._disabled}f(d(k),function(q){var p;if(n&&n[q]){return}if(q=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(r){r=l.createControl(r,o);if(r){j.add(r)}});return}p=l.createControl(q,o);if(p){j.add(p)}})},_addToolbars:function(y,k){var B=this,q,p,u=B.editor,C=B.settings,A,j=u.controlManager,w,l,r=[],z,x,m=false;x=j.createToolbarGroup("toolbargroup",{name:u.getLang("advanced.toolbar"),tab_focus_toolbar:u.getParam("theme_advanced_tab_focus_toolbar")});B.toolbarGroup=x;z=C.theme_advanced_toolbar_align.toLowerCase();z="mce"+B._ufirst(z);l=i.add(i.add(y,"tr",{role:"presentation"}),"td",{"class":"mceToolbar "+z,role:"presentation"});for(q=1;(A=C["theme_advanced_buttons"+q]);q++){m=true;p=j.createToolbar("toolbar"+q,{"class":"mceToolbarRow"+q});if(C["theme_advanced_buttons"+q+"_add"]){A+=","+C["theme_advanced_buttons"+q+"_add"]}if(C["theme_advanced_buttons"+q+"_add_before"]){A=C["theme_advanced_buttons"+q+"_add_before"]+","+A}B._addControls(A,p);x.add(p);k.deltaHeight-=C.theme_advanced_row_height}if(!m){k.deltaHeight-=C.theme_advanced_row_height}r.push(x.renderHTML());r.push(i.createHTML("a",{href:"#",accesskey:"z",title:u.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+u.id+"').focus();"},"<!-- IE -->"));i.setHTML(l,r.join(""))},_addStatusBar:function(p,k){var l,w=this,q=w.editor,x=w.settings,j,u,v,m;l=i.add(p,"tr");l=m=i.add(l,"td",{"class":"mceStatusbar"});l=i.add(l,"div",{id:q.id+"_path_row",role:"group","aria-labelledby":q.id+"_path_voice"});if(x.theme_advanced_path){i.add(l,"span",{id:q.id+"_path_voice"},q.translate("advanced.path"));i.add(l,"span",{},": ")}else{i.add(l,"span",{},"&#160;")}if(x.theme_advanced_resizing){i.add(m,"a",{id:q.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(x.theme_advanced_resizing_use_cookie){q.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+q.id+"_size"),r=i.get(q.id+"_tbl");if(!n){return}w.resizeTo(n.cw,n.ch)})}q.onPostRender.add(function(){g.add(q.id+"_resize","click",function(n){n.preventDefault()});g.add(q.id+"_resize","mousedown",function(E){var t,r,s,o,D,A,B,G,n,F,y;function z(H){H.preventDefault();n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F)}function C(H){g.remove(i.doc,"mousemove",t);g.remove(q.getDoc(),"mousemove",r);g.remove(i.doc,"mouseup",s);g.remove(q.getDoc(),"mouseup",o);n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F,true)}E.preventDefault();D=E.screenX;A=E.screenY;y=i.get(w.editor.id+"_ifr");B=n=y.clientWidth;G=F=y.clientHeight;t=g.add(i.doc,"mousemove",z);r=g.add(q.getDoc(),"mousemove",z);s=g.add(i.doc,"mouseup",C);o=g.add(q.getDoc(),"mouseup",C)})})}k.deltaHeight-=21;l=p=null},_updateUndoStatus:function(k){var j=k.controlManager,l=k.undoManager;j.setDisabled("undo",!l.hasUndo()&&!l.typing);j.setDisabled("redo",!l.hasRedo())},_nodeChanged:function(o,u,E,r,F){var z=this,D,G=0,y,H,A=z.settings,x,l,w,C,m,k,j;h.each(z.stateControls,function(n){u.setActive(n,o.queryCommandState(z.controls[n][1]))});function q(p){var s,n=F.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}u.setActive("visualaid",o.hasVisual);z._updateUndoStatus(o);u.setDisabled("outdent",!o.queryCommandState("Outdent"));D=q("A");if(H=u.get("link")){if(!D||!D.name){H.setDisabled(!D&&r);H.setActive(!!D)}}if(H=u.get("unlink")){H.setDisabled(!D&&r);H.setActive(!!D&&!D.name)}if(H=u.get("anchor")){H.setActive(!r&&!!D&&D.name)}D=q("IMG");if(H=u.get("image")){H.setActive(!r&&!!D&&E.className.indexOf("mceItem")==-1)}if(H=u.get("styleselect")){z._importClasses();k=[];f(H.items,function(n){k.push(n.value)});j=o.formatter.matchAll(k);H.select(j[0]);h.each(j,function(p,n){if(n>0){H.mark(p)}})}if(H=u.get("formatselect")){D=q(o.dom.isBlock);if(D){H.select(D.nodeName.toLowerCase())}}q(function(p){if(p.nodeName==="SPAN"){if(!x&&p.className){x=p.className}}if(o.dom.is(p,A.theme_advanced_font_selector)){if(!l&&p.style.fontSize){l=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!C&&p.style.color){C=p.style.color}if(!m&&p.style.backgroundColor){m=p.style.backgroundColor}}return false});if(H=u.get("fontselect")){H.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(H=u.get("fontsizeselect")){if(A.theme_advanced_runtime_fontsize&&!l&&!x){l=o.dom.getStyle(E,"fontSize",true)}H.select(function(n){if(n.fontSize&&n.fontSize===l){return true}if(n["class"]&&n["class"]===x){return true}})}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_path&&A.theme_advanced_statusbar_location){D=i.get(o.id+"_path")||i.add(o.id+"_path_row","span",{id:o.id+"_path"});if(z.statusKeyboardNavigation){z.statusKeyboardNavigation.destroy();z.statusKeyboardNavigation=null}i.setHTML(D,"");q(function(I){var p=I.nodeName.toLowerCase(),s,v,t="";if(I.nodeType!=1||p==="br"||I.getAttribute("data-mce-bogus")||i.hasClass(I,"mceItemHidden")||i.hasClass(I,"mceItemRemoved")){return}if(h.isIE&&I.scopeName!=="HTML"&&I.scopeName){p=I.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(y=i.getAttrib(I,"src")){t+="src: "+y+" "}break;case"a":if(y=i.getAttrib(I,"name")){t+="name: "+y+" ";p+="#"+y}if(y=i.getAttrib(I,"href")){t+="href: "+y+" "}break;case"font":if(y=i.getAttrib(I,"face")){t+="font: "+y+" "}if(y=i.getAttrib(I,"size")){t+="size: "+y+" "}if(y=i.getAttrib(I,"color")){t+="color: "+y+" "}break;case"span":if(y=i.getAttrib(I,"style")){t+="style: "+y+" "}break}if(y=i.getAttrib(I,"id")){t+="id: "+y+" "}if(y=I.className){y=y.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(y){t+="class: "+y+" ";if(o.dom.isBlock(I)||p=="img"||p=="span"){p+="."+y}}}p=p.replace(/(html:)/g,"");p={name:p,node:I,title:t};z.onResolveName.dispatch(z,p);t=p.title;p=p.name;v=i.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(G++)},p);if(D.hasChildNodes()){D.insertBefore(i.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),D.firstChild);D.insertBefore(v,D.firstChild)}else{D.appendChild(v)}},o.getBody());if(i.select("a",D).length>0){z.statusKeyboardNavigation=new h.ui.KeyboardNavigation({root:o.id+"_path_row",items:i.select("a",D),excludeFromTabOrder:true,onCancel:function(){o.focus()}},i)}}},_sel:function(j){this.editor.execCommand("mceSelectNodeDepth",false,j)},_mceInsertAnchor:function(l,k){var j=this.editor;j.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(j.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(j.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var j=this.editor;j.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(j.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(j.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var j=this.editor;j.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var j=this.editor;j.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(l,k){var j=this.editor;k=k||{};j.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(j.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(j.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:k.color,func:k.func,theme_url:this.url})},_mceCodeEditor:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(j.getParam("theme_advanced_source_editor_width",720)),height:parseInt(j.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(k,l){var j=this.editor;if(j.dom.getAttrib(j.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}j.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(j.getLang("advanced.image_delta_width",0)),height:275+parseInt(j.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(j.getLang("advanced.link_delta_width",0)),height:200+parseInt(j.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var j=this.editor;j.windowManager.confirm("advanced.newdocument",function(k){if(k){j.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var j=this;this._mceColorPicker(0,{color:j.fgColor,func:function(k){j.fgColor=k;j.editor.execCommand("ForeColor",false,k)}})},_mceBackColor:function(){var j=this;this._mceColorPicker(0,{color:j.bgColor,func:function(k){j.bgColor=k;j.editor.execCommand("HiliteColor",false,k)}})},_ufirst:function(j){return j.substring(0,1).toUpperCase()+j.substring(1)}});h.ThemeManager.add("advanced",h.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js
index d94c8e499..61fe53707 100644
--- a/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js
+++ b/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js
@@ -69,6 +69,16 @@
each(previewStyles.split(' '), function(name) {
var value = dom.getStyle(previewElm, name, true);
+ // If background is transparent then check if the body has a background color we can use
+ if (name == 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) {
+ value = dom.getStyle(ed.getBody(), name, true);
+
+ // Ignore white since it's the default color, not the nicest fix
+ if (dom.toHex(value).toLowerCase() == '#ffffff') {
+ return;
+ }
+ }
+
// Old IE won't calculate the font size so we need to do that manually
if (name == 'font-size') {
if (/em|%$/.test(value)) {
@@ -608,7 +618,7 @@
// TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for.
// Maybe actually inherit it from the original textara?
- n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')});
+ n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '') + (ed.settings.directionality == "rtl" ? ' mceRtl' : '')});
DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label);
if (!DOM.boxModel)
@@ -925,7 +935,7 @@
},
_addToolbars : function(c, o) {
- var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup;
+ var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup, toolbarsExist = false;
toolbarGroup = cf.createToolbarGroup('toolbargroup', {
'name': ed.getLang('advanced.toolbar'),
@@ -941,6 +951,7 @@
// Create toolbar and add the controls
for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {
+ toolbarsExist = true;
tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});
if (s['theme_advanced_buttons' + i + '_add'])
@@ -954,6 +965,9 @@
o.deltaHeight -= s.theme_advanced_row_height;
}
+ // Handle case when there are no toolbar buttons and ensure editor height is adjusted accordingly
+ if (!toolbarsExist)
+ o.deltaHeight -= s.theme_advanced_row_height;
h.push(toolbarGroup.renderHTML());
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(''));
@@ -1112,7 +1126,7 @@
}
if (c = cm.get('formatselect')) {
- p = getParent(DOM.isBlock);
+ p = getParent(ed.dom.isBlock);
if (p)
c.select(p.nodeName.toLowerCase());
@@ -1210,7 +1224,7 @@
return;
// Handle prefix
- if (tinymce.isIE && n.scopeName !== 'HTML')
+ if (tinymce.isIE && n.scopeName !== 'HTML' && n.scopeName)
na = n.scopeName + ':' + na;
// Remove internal prefix
@@ -1271,7 +1285,7 @@
if (v) {
ti += 'class: ' + v + ' ';
- if (DOM.isBlock(n) || na == 'img' || na == 'span')
+ if (ed.dom.isBlock(n) || na == 'img' || na == 'span')
na += '.' + v;
}
}
diff --git a/library/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js
index 6c2489a16..bb09e75bf 100644
--- a/library/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js
+++ b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js
@@ -104,10 +104,12 @@ var ImageDialog = {
},
updateStyle : function() {
- var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
+ var dom = tinyMCEPopup.dom, st = {}, v, f = document.forms[0];
if (tinyMCEPopup.editor.settings.inline_styles) {
- st = tinyMCEPopup.dom.parseStyle(this.styleVal);
+ tinymce.each(tinyMCEPopup.dom.parseStyle(this.styleVal), function(value, key) {
+ st[key] = value;
+ });
// Handle align
v = getSelectValue(f, 'align');
diff --git a/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css
index b2ed097cd..6d9fc8dd6 100644
--- a/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css
+++ b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css
@@ -1,7 +1,7 @@
/* Generic */
body {
font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
-background:#F0F0EE;
+background:#F0F0EE;
color: black;
padding:0;
margin:8px 8px 0 8px;
@@ -94,11 +94,12 @@ h3 {font-size:14px;}
#plugintable, #about #plugintable td {border:1px solid #919B9C;}
#plugintable {width:96%; margin-top:10px;}
#pluginscontainer {height:290px; overflow:auto;}
-#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
+#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px}
+#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline}
+#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap}
#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
#colorpicker #light div {overflow:hidden;}
-#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
#colorpicker .panel_wrapper div.current {height:175px;}
#colorpicker #namedcolors {width:150px;}
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
diff --git a/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css
index a2cfcc393..effbbe158 100644
--- a/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css
+++ b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css
@@ -58,7 +58,7 @@
/* Menu */
.highcontrastSkin .mceNoIcons span.mceIcon {width:0;}
-.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; }
+.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; direction:ltr}
.highcontrastSkin .mceMenu table {background:white; color: black}
.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px}
.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black}
@@ -90,6 +90,10 @@
.highcontrastSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}
.highcontrastSkin .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}
+/* Rtl */
+.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0}
+.mceRtl .mceMenuItem .mceText {text-align: right}
+
/* Formats */
.highcontrastSkin .mce_p span.mceText {}
.highcontrastSkin .mce_address span.mceText {font-style:italic}
diff --git a/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
index ec0877224..a54db98df 100644
--- a/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
+++ b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
@@ -105,11 +105,12 @@ h3 {font-size:14px;}
#plugintable, #about #plugintable td {border:1px solid #919B9C;}
#plugintable {width:96%; margin-top:10px;}
#pluginscontainer {height:290px; overflow:auto;}
-#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
+#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px}
+#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline}
+#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap}
#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
#colorpicker #light div {overflow:hidden;}
-#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
#colorpicker .panel_wrapper div.current {height:175px;}
#colorpicker #namedcolors {width:150px;}
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
diff --git a/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
index 7b5103be2..a31022371 100644
--- a/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
+++ b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
@@ -86,7 +86,7 @@
.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden}
/* Menu */
-.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}
+.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD; direction:ltr}
.o2k7Skin .mceNoIcons span.mceIcon {width:0;}
.o2k7Skin .mceNoIcons a .mceText {padding-left:10px}
.o2k7Skin .mceMenu table {background:#FFF}
@@ -112,6 +112,10 @@
.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}
.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}
+/* Rtl */
+.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0}
+.mceRtl .mceMenuItem .mceText {text-align: right}
+
/* Formats */
.o2k7Skin .mce_formatPreview a {font-size:10px}
.o2k7Skin .mce_p span.mceText {}
diff --git a/library/tinymce/jscripts/tiny_mce/tiny_mce.js b/library/tinymce/jscripts/tiny_mce/tiny_mce.js
index 2d09557a1..f52fd836f 100644
--- a/library/tinymce/jscripts/tiny_mce/tiny_mce.js
+++ b/library/tinymce/jscripts/tiny_mce/tiny_mce.js
@@ -1 +1 @@
-(function(d){var a=/^\s*|\s*$/g,e,c="B".replace(/A(.)|B/,"$1")==="$1";var b={majorVersion:"3",minorVersion:"5b2",releaseDate:"2012-03-15",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=d.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(d.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){if(r=f[m].href){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==e}if(f=="array"&&(g.hasOwnProperty&&g instanceof Array)){return true}return typeof(g)==f},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==e){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];b.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];b.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(k,j){var h,g,f=arguments;for(h=1,g=f.length;h<g;h++){j=f[h];b.each(j,function(i,l){if(i!==e){k[l]=i}})}return k},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}b.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}b.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this;j={func:j,scope:i||this};if(!h.unloads){function g(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(d.detachEvent){d.detachEvent("onbeforeunload",k);d.detachEvent("onunload",g)}else{if(d.removeEventListener){d.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(d.CollectGarbage){CollectGarbage()}}}function k(){var l=document;if(l.readyState=="interactive"){function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l){l.attachEvent("onstop",f)}d.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}if(d.attachEvent){d.attachEvent("onunload",g);d.attachEvent("onbeforeunload",k)}else{if(d.addEventListener){d.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;b.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){return f?b.map(f.split(g||","),b.trim):f},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(c){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===e){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};b._init();d.tinymce=d.tinyMCE=b})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d.length>0?d:[g.scope]);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();(function(){function serialize(o,quote){var i,v,t;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&o instanceof Array){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(i in o){if(o.hasOwnProperty(i)){v+=typeof o[i]!="function"?(v.length>1?","+quote:quote)+i+quote+":"+serialize(o[i],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey}}})(tinymce);(function(n){var l=n.VK,m=l.BACKSPACE,j=l.DELETE;function p(r,t,s){try{r.getDoc().execCommand(t,false,s)}catch(q){}}function d(q){var s=q.dom,r=q.selection;q.onKeyDown.add(function(u,z){var t,A,x,y,v;if(z.isDefaultPrevented()){return}v=z.keyCode==j;if((v||z.keyCode==m)&&!l.modifierPressed(z)){z.preventDefault();t=r.getRng();A=s.getParent(t.startContainer,s.isBlock);if(v){A=s.getNext(A,s.isBlock)}if(A){x=A.firstChild;while(x&&x.nodeType==3&&x.nodeValue.length==0){x=x.nextSibling}if(x&&x.nodeName==="SPAN"){y=x.cloneNode(false)}}u.getDoc().execCommand(v?"ForwardDelete":"Delete",false,null);A=s.getParent(t.startContainer,s.isBlock);n.each(s.select("span.Apple-style-span,font.Apple-style-span",A),function(B){var C=r.getBookmark();if(y){s.replace(y.cloneNode(false),B,true)}else{s.remove(B,true)}r.moveToBookmark(C)})}})}function e(q){function r(u){var t=q.dom.create("body");var v=u.cloneContents();t.appendChild(v);return q.selection.serializer.serialize(t,{format:"html"})}function s(t){var v=r(t);var x=q.dom.createRng();x.selectNode(q.getBody());var u=r(x);return v===u}q.onKeyDown.addToTop(function(u,x){var v=x.keyCode;if(v==j||v==m){var t=u.selection.getRng(true);if(!t.collapsed&&s(t)){u.setContent("",{format:"raw"});u.nodeChanged();x.preventDefault()}}})}function c(q){q.dom.bind(q.getDoc(),"focusin",function(){q.selection.setRng(q.selection.getRng())})}function g(q){q.onKeyDown.add(function(r,u){if(u.keyCode===m){if(r.selection.isCollapsed()&&r.selection.getRng(true).startOffset===0){var t=r.selection.getNode();var s=t.previousSibling;if(s&&s.nodeName&&s.nodeName.toLowerCase()==="hr"){r.dom.remove(s);n.dom.Event.cancel(u)}}}})}function i(q){if(!Range.prototype.getClientRects){q.onMouseDown.add(function(s,t){if(t.target.nodeName==="HTML"){var r=s.getBody();r.blur();setTimeout(function(){r.focus()},0)}})}}function h(q){q.onClick.add(function(r,s){s=s.target;if(/^(IMG|HR)$/.test(s.nodeName)){r.selection.getSel().setBaseAndExtent(s,0,s,1)}if(s.nodeName=="A"&&r.dom.hasClass(s,"mceItemAnchor")){r.selection.select(s)}r.nodeChanged()})}function b(q){var s=q.selection,v=q.dom;function t(){var x=v.getAttribs(s.getStart().cloneNode(false));return function(){var y=s.getStart();if(y!==q.getBody()){v.setAttrib(y,"style",null);n.each(x,function(z){y.setAttributeNode(z.cloneNode(true))})}}}function r(){return !s.isCollapsed()&&s.getStart()!=s.getEnd()}function u(x,y){y.preventDefault();return false}q.onKeyPress.add(function(x,z){var y;if((z.keyCode==8||z.keyCode==46)&&r()){y=t();x.getDoc().execCommand("delete",false,null);y();z.preventDefault();return false}});v.bind(q.getDoc(),"cut",function(y){var x;if(r()){x=t();q.onKeyUp.addToTop(u);setTimeout(function(){x();q.onKeyUp.remove(u)},0)}})}function o(q){var s,r;q.dom.bind(q.getDoc(),"selectionchange",function(){if(r){clearTimeout(r);r=0}r=window.setTimeout(function(){var t=q.selection.getRng();if(!s||!n.dom.RangeUtils.compareRanges(t,s)){q.nodeChanged();s=t}},50)})}function a(q){document.body.setAttribute("role","application")}function f(q){q.onKeyDown.add(function(r,t){if(t.keyCode===m){if(r.selection.isCollapsed()&&r.selection.getRng(true).startOffset===0){var s=r.selection.getNode().previousSibling;if(s&&s.nodeName&&s.nodeName.toLowerCase()==="table"){return n.dom.Event.cancel(t)}}}})}function k(r){var q=r.getDoc().documentMode;if(q&&q>7){return}p(r,"RespectVisibilityInDesign",true);r.dom.addClass(r.getBody(),"mceHideBrInPre");r.parser.addNodeFilter("pre",function(s,u){var v=s.length,y,t,z,x;while(v--){y=s[v].getAll("br");t=y.length;while(t--){z=y[t];x=z.prev;if(x&&x.type===3&&x.value.charAt(x.value-1)!="\n"){x.value+="\n"}else{z.parent.insert(new n.html.Node("#text",3),z,true).value="\n"}}}});r.serializer.addNodeFilter("pre",function(s,u){var v=s.length,y,t,z,x;while(v--){y=s[v].getAll("br");t=y.length;while(t--){z=y[t];x=z.prev;if(x&&x.type==3){x.value=x.value.replace(/\r?\n$/,"")}}}})}n.create("tinymce.util.Quirks",{Quirks:function(q){f(q);if(n.isWebKit){d(q);e(q);c(q);h(q);if(n.isIDevice){o(q)}}if(n.isIE){g(q);e(q);a(q);k(q)}if(n.isGecko){g(q);i(q);b(q)}}})})(tinymce);(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;"};d={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(r){var y={},p,n,v,q,u=d.url_converter,x=d.url_converter_scope||this;function o(C,F){var E,B,A,D;E=y[C+"-top"+F];if(!E){return}B=y[C+"-right"+F];if(E!=B){return}A=y[C+"-bottom"+F];if(B!=A){return}D=y[C+"-left"+F];if(A!=D){return}y[C+F]=D;delete y[C+"-top"+F];delete y[C+"-right"+F];delete y[C+"-bottom"+F];delete y[C+"-left"+F]}function t(B){var C=y[B],A;if(!C||C.indexOf(" ")<0){return}C=C.split(" ");A=C.length;while(A--){if(C[A]!==C[0]){return false}}y[B]=C[0];return true}function z(C,B,A,D){if(!t(B)){return}if(!t(A)){return}if(!t(D)){return}y[C]=y[B]+" "+y[A]+" "+y[D];delete y[B];delete y[A];delete y[D]}function s(A){q=true;return a[A]}function i(B,A){if(q){B=B.replace(/\uFEFF[0-9]/g,function(C){return a[C]})}if(!A){B=B.replace(/\\([\'\";:])/g,"$1")}return B}if(r){r=r.replace(/\\[\"\';:\uFEFF]/g,s).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(A){return A.replace(/[;:]/g,s)});while(p=b.exec(r)){n=p[1].replace(l,"").toLowerCase();v=p[2].replace(l,"");if(n&&v.length>0){if(n==="font-weight"&&v==="700"){v="bold"}else{if(n==="color"||n==="background-color"){v=v.toLowerCase()}}v=v.replace(k,c);v=v.replace(h,function(B,A,E,D,F,C){F=F||C;if(F){F=i(F);return"'"+F.replace(/\'/g,"\\'")+"'"}A=i(A||E||D);if(u){A=u.call(x,A,"style")}return"url('"+A.replace(/\'/g,"\\'")+"')"});y[n]=q?i(v,true):v}b.lastIndex=p.index+p[0].length}o("border","");o("border","-width");o("border","-color");o("border","-style");o("padding","");o("margin","");z("border","border-width","border-style","border-color");if(y.border==="medium none"){delete y.border}}return y},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][C]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|summary][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script style textarea");q=m("self_closing_elements","colgroup dd dt li options p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object",z);v=m("block_elements","h1 h2 h3 h4 h5 h6 hr p div address pre form table tbody thead tfoot th tr td li ol ul caption blockquote center dl dt dd dir fieldset noscript menu isindex samp header footer article section hgroup aside nav");function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K<G;K++){F=N.exec(L[K]);if(F){W=F[1];Q=F[2];E=F[3];X=F[4];O={};J=[];I={attributes:O,attributesOrder:J};if(W==="#"){I.paddEmpty=true}if(W==="-"){I.removeEmpty=true}if(S){for(ad in S){O[ad]=S[ad]}J.push.apply(J,H)}if(X){X=d(X,"|");for(Z=0,V=X.length;Z<V;Z++){F=R.exec(X[Z]);if(F){U={};ac=F[1];Y=F[2].replace(/::/g,":");W=F[3];T=F[4];if(ac==="!"){I.attributesRequired=I.attributesRequired||[];I.attributesRequired.push(Y);U.required=true}if(ac==="-"){delete O[Y];J.splice(f.inArray(J,Y),1);continue}if(W){if(W==="="){I.attributesDefault=I.attributesDefault||[];I.attributesDefault.push({name:Y,value:T});U.defaultValue=T}if(W===":"){I.attributesForced=I.attributesForced||[];I.attributesForced.push({name:Y,value:T});U.forcedValue=T}if(W==="<"){U.validValues=e(T,"?")}}if(M.test(Y)){I.attributePatterns=I.attributePatterns||[];U.pattern=i(Y);I.attributePatterns.push(U)}else{if(!O[Y]){J.push(Y)}O[Y]=U}}}}if(!S&&Q=="@"){S=O;H=J}if(E){I.outputName=Q;s[E]=I}if(M.test(Q)){I.pattern=i(Q);j.push(I)}else{s[Q]=I}}}}}function t(E){s={};j=[];C(E);g(y,function(G,F){k[F]=G.children})}function l(F){var E=/^(~)?(.+)$/;if(F){g(d(F),function(J){var H=E.exec(J),I=H[1]==="~",K=I?"span":"div",G=H[2];k[G]=k[K];p[G]=K;if(!I){v[G]={}}g(k,function(L,M){if(L[K]){L[G]=L[K]}})})}}function x(F){var E=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(F){g(d(F),function(J){var I=E.exec(J),G,H;if(I){H=I[1];if(H){G=k[I[2]]}else{G=k[I[2]]={"#comment":{}}}G=k[I[2]];g(d(I[3],"|"),function(K){if(H==="-"){delete G[K]}else{G[K]={}}})}})}}function B(E){var G=s[E],F;if(G){return G}F=j.length;while(F--){G=j[F];if(G.pattern.test(E)){return G}}}if(!A.valid_elements){g(y,function(F,E){s[E]={attributes:F.attributes,attributesOrder:F.attributesOrder};k[E]=F.children});if(A.schema!="html5"){g(d("strong/b,em/i"),function(E){E=d(E,"/");s[E[1]].outputName=E[0]})}s.img.attributesDefault=[{name:"alt",value:""}];g(d("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr,strong,em,b,i"),function(E){if(s[E]){s[E].removeEmpty=true}});g(d("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(E){s[E].paddEmpty=true})}else{t(A.valid_elements)}l(A.custom_elements);x(A.valid_children);C(A.extended_valid_elements);x("+ol[ul|ol],+ul[ul|ol]");if(A.invalid_elements){f.each(f.explode(A.invalid_elements),function(E){if(s[E]){delete s[E]}})}if(!B("span")){C("span[!data-mce-type|*]")}u.children=k;u.styles=D;u.getBoolAttrs=function(){return r};u.getBlockElements=function(){return v};u.getShortEndedElements=function(){return z};u.getSelfClosingElements=function(){return q};u.getNonEmptyElements=function(){return n};u.getWhiteSpaceElements=function(){return o};u.isValidChild=function(E,G){var F=k[E];return !!(F&&F[G])};u.getElementRule=B;u.getCustomElements=function(){return p};u.addValidElements=C;u.setValidElements=t;u.addCustomElements=l;u.addValidChildren=x}})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(D){var n=this,g,F=0,H,A,z=[],M,P,B,q,y,r,L,G,N,u,m,k,s,Q,o,O,E,R,K,f,I,l,C,J,h,v=0,j=a.html.Entities.decode,x,p;function t(S){var U,T;U=z.length;while(U--){if(z[U].name===S){break}}if(U>=0){for(T=z.length-1;T>=U;T--){S=z[T];if(S.valid){n.end(S.name)}}z.length=U}}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9-:]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");C=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;J={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};L=e.getShortEndedElements();I=e.getSelfClosingElements();G=e.getBoolAttrs();u=c.validate;r=c.remove_internals;x=c.fix_self_closing;p=a.isIE;o=/^:/;while(g=l.exec(D)){if(F<g.index){n.text(j(D.substr(F,g.index-F)))}if(H=g[6]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}t(H)}else{if(H=g[7]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}N=H in L;if(x&&I[H]&&z.length>0&&z[z.length-1].name===H){t(H)}if(!u||(m=e.getElementRule(H))){k=true;if(u){O=m.attributes;E=m.attributePatterns}if(Q=g[8]){y=Q.indexOf("data-mce-type")!==-1;if(y&&r){k=false}M=[];M.map={};Q.replace(C,function(T,S,X,W,V){var Y,U;S=S.toLowerCase();X=S in G?S:j(X||W||V||"");if(u&&!y&&S.indexOf("data-")!==0){Y=O[S];if(!Y&&E){U=E.length;while(U--){Y=E[U];if(Y.pattern.test(S)){break}}if(U===-1){Y=null}}if(!Y){return}if(Y.validValues&&!(X in Y.validValues)){return}}M.map[S]=X;M.push({name:S,value:X})})}else{M=[];M.map={}}if(u&&!y){R=m.attributesRequired;K=m.attributesDefault;f=m.attributesForced;if(f){P=f.length;while(P--){s=f[P];q=s.name;h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}if(K){P=K.length;while(P--){s=K[P];q=s.name;if(!(q in M.map)){h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}}if(R){P=R.length;while(P--){if(R[P] in M.map){break}}if(P===-1){k=false}}if(M.map["data-mce-bogus"]){k=false}}if(k){n.start(H,M,N)}}else{k=false}if(A=J[H]){A.lastIndex=F=g.index+g[0].length;if(g=A.exec(D)){if(k){B=D.substr(F,g.index-F)}F=g.index+g[0].length}else{B=D.substr(F);F=D.length}if(k&&B.length>0){n.text(B,true)}if(k){n.end(H)}l.lastIndex=F;continue}if(!N){if(!Q||Q.indexOf("/")!=Q.length-1){z.push({name:H,valid:k})}else{if(k){n.end(H)}}}}else{if(H=g[1]){n.comment(H)}else{if(H=g[2]){n.cdata(H)}else{if(H=g[3]){n.doctype(H)}else{if(H=g[4]){n.pi(H,g[5])}}}}}}F=g.index+g[0].length}if(F<D.length){n.text(j(D.substr(F)))}for(P=z.length-1;P>=0;P--){H=z[P];if(H.valid){n.end(H.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-")===0){return false}}}if(j.type===8){return false}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(m){var o,p,x,v,z,n,q,l,t,u,k,s,y,r;s=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();for(o=0;o<m.length;o++){p=m[o];if(!p.parent){continue}v=[p];for(x=p.parent;x&&!h.isValidChild(x.name,p.name)&&!s[x.name];x=x.parent){v.push(x)}if(x&&v.length>1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t<v.length-1;t++){if(h.isValidChild(n.name,v[t].name)){q=f.filterNode(v[t].clone());n.append(q)}else{q=n}for(l=v[t].firstChild;l&&l!=v[t+1];){r=l.next;q.append(l);l=r}n=q}if(!z.isEmpty(k)){x.insert(z,v[0],true);x.insert(p,z)}else{x.insert(p,v[0],true)}x=v[0];if(x.isEmpty(k)||x.firstChild===x.lastChild&&x.firstChild.name==="br"){x.empty().remove()}}else{if(p.parent){if(p.name==="li"){y=p.prev;if(y&&(y.name==="ul"||y.name==="ul")){y.append(p);continue}y=p.next;if(y&&(y.name==="ul"||y.name==="ul")){y.insert(p,y.firstChild,true);continue}p.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(p.parent.name,"div")&&h.isValidChild("div",p.name)){p.wrap(f.filterNode(new a("div",1)))}else{if(p.name==="style"||p.name==="script"){p.empty().remove()}else{p.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,H,A,z,C,B,x,r,E,L,y,o,D,K=[],J,t,k,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;y=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();D=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;function F(){var M=H.firstChild,l,N;while(M){l=M.next;if(M.type==3||(M.type==1&&M.name!=="p"&&!o[M.name]&&!M.attr("data-mce-type"))){if(!N){N=I(q,1);H.insert(N,M);N.append(M)}else{N.append(M)}}else{N=null}M=l}}function I(l,M){var N=new a(l,M),O;if(l in e){O=i[l];if(O){O.push(N)}else{i[l]=[N]}}return N}function G(N){var O,l,M;for(O=N.prev;O&&O.type===3;){l=O.value.replace(t,"");if(l.length>0){O.value=l;O=O.prev}else{M=O.prev;O.remove();O=M}}}n=new b.html.SaxParser({validate:y,fix_self_closing:!y,cdata:function(l){A.append(I("#cdata",4)).value=l},text:function(N,l){var M;if(!J){N=N.replace(k," ");if(A.lastChild&&o[A.lastChild.name]){N=N.replace(D,"")}}if(N.length!==0){M=I("#text",3);M.raw=!!l;A.append(M).value=N}},comment:function(l){A.append(I("#comment",8)).value=l},pi:function(l,M){A.append(I(l,7)).value=M;G(A)},doctype:function(M){var l;l=A.append(I("#doctype",10));l.value=M;G(A)},start:function(l,U,N){var S,P,O,M,Q,V,T,R;O=y?h.getElementRule(l):{};if(O){S=I(O.outputName||l,1);S.attributes=U;S.shortEnded=N;A.append(S);R=p[A.name];if(R&&p[S.name]&&!R[S.name]){K.push(S)}P=d.length;while(P--){Q=d[P].name;if(Q in U.map){E=c[Q];if(E){E.push(S)}else{c[Q]=[S]}}}if(o[l]){G(S)}if(!N){A=S}if(!J&&s[l]){J=true}}},end:function(l){var Q,N,P,M,O;N=y?h.getElementRule(l):{};if(N){if(o[l]){if(!J){for(Q=A.firstChild;Q&&Q.type===3;){P=Q.value.replace(D,"");if(P.length>0){Q.value=P;Q=Q.next}else{M=Q.next;Q.remove();Q=M}}for(Q=A.lastChild;Q&&Q.type===3;){P=Q.value.replace(t,"");if(P.length>0){Q.value=P;Q=Q.prev}else{M=Q.prev;Q.remove();Q=M}}}Q=A.prev;if(Q&&Q.type===3){P=Q.value.replace(D,"");if(P.length>0){Q.value=P}else{Q.remove()}}}if(J&&s[l]){J=false}if(N.removeEmpty||N.paddEmpty){if(A.isEmpty(u)){if(N.paddEmpty){A.empty().append(new a("#text","3")).value="\u00a0"}else{if(!A.attributes.map.name){O=A.parent;A.empty().remove();A=O;return}}}}A=A.parent}}},h);H=A=new a(m.context||g.root_name,11);n.parse(v);if(y&&K.length){if(!m.context){j(K)}else{m.invalid=true}}if(q&&H.name=="body"){F()}if(!m.invalid){for(L in i){E=e[L];z=i[L];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(C=0,B=E.length;C<B;C++){E[C](z,L,m)}}for(C=0,B=d.length;C<B;C++){E=d[C];if(E.name in c){z=c[E.name];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(x=0,r=E.callbacks.length;x<r;x++){E.callbacks[x](z,E.name,m)}}}}return H};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,u=h.getBlockElements(),k=h.getNonEmptyElements(),s,p,t;u.body=1;for(r=0;r<q;r++){o=n[r];s=o.parent;if(u[o.parent.name]&&o===s.lastChild){p=o.prev;while(p){t=p.name;if(t!=="span"||p.attr("data-mce-type")!=="bookmark"){if(t!=="br"){break}if(t==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(s.isEmpty(k)){elementRule=h.getElementRule(s.name);if(elementRule){if(elementRule.removeEmpty){s.remove()}else{if(elementRule.paddEmpty){s.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);tinymce.dom={};(function(b,h){var g=!!document.addEventListener;function c(k,j,l,i){if(k.addEventListener){k.addEventListener(j,l,i||false)}else{if(k.attachEvent){k.attachEvent("on"+j,l)}}}function e(k,j,l,i){if(k.removeEventListener){k.removeEventListener(j,l,i||false)}else{if(k.detachEvent){k.detachEvent("on"+j,l)}}}function a(n,l){var i,k=l||{};function j(){return false}function m(){return true}for(i in n){if(i!=="layerX"&&i!=="layerY"){k[i]=n[i]}}if(!k.target){k.target=k.srcElement||document}k.preventDefault=function(){k.isDefaultPrevented=m;if(n){if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}}};k.stopPropagation=function(){k.isPropagationStopped=m;if(n){if(n.stopPropagation){n.stopPropagation()}else{n.cancelBubble=true}}};k.stopImmediatePropagation=function(){k.isImmediatePropagationStopped=m;k.stopPropagation()};if(!k.isDefaultPrevented){k.isDefaultPrevented=j;k.isPropagationStopped=j;k.isImmediatePropagationStopped=j}return k}function d(m,n,l){var k=m.document,j={type:"ready"};function i(){if(!l.domLoaded){l.domLoaded=true;n(j)}}if(g){c(m,"DOMContentLoaded",i)}else{c(k,"readystatechange",function(){if(k.readyState==="complete"){e(k,"readystatechange",arguments.callee);i()}});if(k.documentElement.doScroll&&m===m.top){(function(){try{k.documentElement.doScroll("left")}catch(o){setTimeout(arguments.callee,0);return}i()})()}}c(m,"load",i)}function f(k){var q=this,p={},i,o,n,m,l;m="onmouseenter" in document.documentElement;n="onfocusin" in document.documentElement;l={mouseenter:"mouseover",mouseleave:"mouseout"};i=1;q.domLoaded=false;q.events=p;function j(t,x){var s,u,r,v;s=p[x][t.type];if(s){for(u=0,r=s.length;u<r;u++){v=s[u];if(v&&v.func.call(v.scope,t)===false){t.preventDefault()}if(t.isImmediatePropagationStopped()){return}}}}q.bind=function(x,A,D,E){var s,t,u,r,B,z,C,v=window;function y(F){j(a(F||v.event),s)}if(!x||x.nodeType===3||x.nodeType===8){return}if(!x[h]){s=i++;x[h]=s;p[s]={}}else{s=x[h];if(!p[s]){p[s]={}}}E=E||x;A=A.split(" ");u=A.length;while(u--){r=A[u];z=y;B=C=false;if(r==="DOMContentLoaded"){r="ready"}if((q.domLoaded||x.readyState=="complete")&&r==="ready"){q.domLoaded=true;D.call(E,a({type:r}));continue}if(!m){B=l[r];if(B){z=function(F){var H,G;H=F.currentTarget;G=F.relatedTarget;if(G&&H.contains){G=H.contains(G)}else{while(G&&G!==H){G=G.parentNode}}if(!G){F=a(F||v.event);F.type=F.type==="mouseout"?"mouseleave":"mouseenter";F.target=H;j(F,s)}}}}if(!n&&(r==="focusin"||r==="focusout")){C=true;B=r==="focusin"?"focus":"blur";z=function(F){F=a(F||v.event);F.type=F.type==="focus"?"focusin":"focusout";j(F,s)}}t=p[s][r];if(!t){p[s][r]=t=[{func:D,scope:E}];t.fakeName=B;t.capture=C;t.nativeHandler=z;if(!g){t.proxyHandler=k(s)}if(r==="ready"){d(x,z,q)}else{c(x,B||r,g?z:t.proxyHandler,C)}}else{t.push({func:D,scope:E})}}x=t=0;return D};q.unbind=function(x,z,A){var s,u,v,B,r,t;if(!x||x.nodeType===3||x.nodeType===8){return q}s=x[h];if(s){t=p[s];if(z){z=z.split(" ");v=z.length;while(v--){r=z[v];u=t[r];if(u){if(A){B=u.length;while(B--){if(u[B].func===A){u.splice(B,1)}}}if(!A||u.length===0){delete t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}}}}else{for(r in t){u=t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}t={}}for(r in t){return q}delete p[s];try{delete x[h]}catch(y){x[h]=null}}return q};q.fire=function(u,s,r){var v,t;if(!u||u.nodeType===3||u.nodeType===8){return q}t=a(null,r);t.type=s;do{v=u[h];if(v){j(t,v)}u=u.parentNode||u.ownerDocument||u.defaultView||u.parentWindow}while(u&&!t.isPropagationStopped());return q};q.clean=function(u){var s,r,t=q.unbind;if(!u||u.nodeType===3||u.nodeType===8){return q}if(u[h]){t(u)}if(!u.getElementsByTagName){u=u.document}if(u&&u.getElementsByTagName){t(u);r=u.getElementsByTagName("*");s=r.length;while(s--){u=r[s];if(u[h]){t(u)}}}return q};q.callNativeHandler=function(s,r){if(p){p[s][r.type].nativeHandler(r)}};q.destory=function(){p={}};q.add=function(v,s,u,t){if(typeof(v)==="string"){v=document.getElementById(v)}if(v&&v instanceof Array){var r=v;while(r--){q.add(v[r],s,u,t)}return}if(s==="init"){s="ready"}return q.bind(v,s instanceof Array?s.join(" "):s,u,t)};q.remove=function(u,s,t){if(typeof(u)==="string"){u=document.getElementById(u)}if(u instanceof Array){var r=u;while(r--){q.remove(u[r],s,t,scope)}return q}return q.unbind(u,s instanceof Array?s.join(" "):s,t)};q.clear=function(r){if(typeof(r)==="string"){r=document.getElementById(r)}return q.clean(r)};q.cancel=function(r){if(r){q.prevent(r);q.stop(r)}return false};q.prevent=function(r){r.preventDefault();return false};q.stop=function(r){r.stopPropagation();return false}}b.EventUtils=f;b.Event=new f(function(i){return function(j){tinymce.dom.Event.callNativeHandler(i,j)}});b.Event.bind(window,"ready",function(){});b=0})(tinymce.dom,"data-mce-expando");(function(e){var g=e.each,d=e.is,f=e.isWebKit,b=e.isIE,h=e.html.Entities,c=/^([a-z0-9],?)+$/i,a=/^[ \t\r\n]*$/;e.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(o,l){var k=this,i,j,n;k.doc=o;k.win=window;k.files={};k.cssFlicker=false;k.counter=0;k.stdMode=!e.isIE||o.documentMode>=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i)||l.offsetWidth||l.clientWidth,h:parseInt(k)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+"</"+q+">"}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":b?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=k.select("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="<br />"+j;m.removeChild(m.firstChild)}catch(l){m=i.create("div");m.innerHTML="<br />"+j;g(m.childNodes,function(o,n){if(n){m.appendChild(o)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){g(s.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:q(s.styleSheet);break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r==0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,T=0,F=1,j=2,E=true,S=false,V="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L});function x(){return e.createDocumentFragment()}function q(W,t){C(E,W,t)}function s(W,t){C(S,W,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[V]}else{O[h]=O[Q];O[V]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(Z,t){var ac=O[h],X=O[V],ab=O[Q],W=O[A],aa=t.startContainer,ae=t.startOffset,Y=t.endContainer,ad=t.endOffset;if(Z===0){return H(ac,X,aa,ae)}if(Z===1){return H(ab,W,aa,ae)}if(Z===2){return H(ab,W,Y,ad)}if(Z===3){return H(ac,X,Y,ad)}}function p(){l(j)}function I(){return l(T)}function d(){return l(F)}function D(Z){var W=this[h],t=this[V],Y,X;if((W.nodeType===3||W.nodeType===4)&&W.nodeValue){if(!t){W.parentNode.insertBefore(Z,W)}else{if(t>=W.nodeValue.length){c.insertAfter(Z,W)}else{Y=W.splitText(t);W.parentNode.insertBefore(Z,Y)}}}else{if(W.childNodes.length>0){X=W.childNodes[t]}if(X){W.insertBefore(Z,X)}else{W.appendChild(Z)}}}function N(W){var t=O.extractContents();O.insertNode(W);W.appendChild(t);O.selectNode(W)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[V],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,W){var X;if(t.nodeType==3){return t}if(W<0){return t}X=t.firstChild;while(X&&W>0){--W;X=X.nextSibling}if(X){return X}return t}function m(){return(O[h]==O[Q]&&O[V]==O[A])}function H(Y,aa,W,Z){var ab,X,t,ac,ae,ad;if(Y==W){if(aa==Z){return 0}if(aa<Z){return -1}return 1}ab=W;while(ab&&ab.parentNode!=Y){ab=ab.parentNode}if(ab){X=0;t=Y.firstChild;while(t!=ab&&X<aa){X++;t=t.nextSibling}if(aa<=X){return -1}return 1}ab=Y;while(ab&&ab.parentNode!=W){ab=ab.parentNode}if(ab){X=0;t=W.firstChild;while(t!=ab&&X<Z){X++;t=t.nextSibling}if(X<Z){return -1}return 1}ac=c.findCommonAncestor(Y,W);ae=Y;while(ae&&ae.parentNode!=ac){ae=ae.parentNode}if(!ae){ae=ac}ad=W;while(ad&&ad.parentNode!=ac){ad=ad.parentNode}if(!ad){ad=ac}if(ae==ad){return 0}t=ac.firstChild;while(t){if(t==ae){return -1}if(t==ad){return 1}t=t.nextSibling}}function C(W,Z,Y){var t,X;if(W){O[h]=Z;O[V]=Y}else{O[Q]=Z;O[A]=Y}t=O[Q];while(t.parentNode){t=t.parentNode}X=O[h];while(X.parentNode){X=X.parentNode}if(X==t){if(H(O[h],O[V],O[Q],O[A])>0){O.collapse(W)}}else{O.collapse(W)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ac){var ab,Y=0,ae=0,W,aa,X,Z,t,ad;if(O[h]==O[Q]){return f(ac)}for(ab=O[Q],W=ab.parentNode;W;ab=W,W=W.parentNode){if(W==O[h]){return r(ab,ac)}++Y}for(ab=O[h],W=ab.parentNode;W;ab=W,W=W.parentNode){if(W==O[Q]){return U(ab,ac)}++ae}aa=ae-Y;X=O[h];while(aa>0){X=X.parentNode;aa--}Z=O[Q];while(aa<0){Z=Z.parentNode;aa++}for(t=X.parentNode,ad=Z.parentNode;t!=ad;t=t.parentNode,ad=ad.parentNode){X=t;Z=ad}return o(X,Z,ac)}function f(ab){var ad,ae,t,X,Y,ac,Z,W,aa;if(ab!=j){ad=x()}if(O[V]==O[A]){return ad}if(O[h].nodeType==3){ae=O[h].nodeValue;t=ae.substring(O[V],O[A]);if(ab!=F){X=O[h];W=O[V];aa=O[A]-O[V];if(W===0&&aa>=X.nodeValue.length-1){X.parentNode.removeChild(X)}else{X.deleteData(W,aa)}O.collapse(E)}if(ab==j){return}if(t.length>0){ad.appendChild(e.createTextNode(t))}return ad}X=P(O[h],O[V]);Y=O[A]-O[V];while(X&&Y>0){ac=X.nextSibling;Z=z(X,ab);if(ad){ad.appendChild(Z)}--Y;X=ac}if(ab!=F){O.collapse(E)}return ad}function r(ac,Z){var ab,aa,W,t,Y,X;if(Z!=j){ab=x()}aa=i(ac,Z);if(ab){ab.appendChild(aa)}W=n(ac);t=W-O[V];if(t<=0){if(Z!=F){O.setEndBefore(ac);O.collapse(S)}return ab}aa=ac.previousSibling;while(t>0){Y=aa.previousSibling;X=z(aa,Z);if(ab){ab.insertBefore(X,ab.firstChild)}--t;aa=Y}if(Z!=F){O.setEndBefore(ac);O.collapse(S)}return ab}function U(aa,Z){var ac,W,ab,t,Y,X;if(Z!=j){ac=x()}ab=R(aa,Z);if(ac){ac.appendChild(ab)}W=n(aa);++W;t=O[A]-W;ab=aa.nextSibling;while(ab&&t>0){Y=ab.nextSibling;X=z(ab,Z);if(ac){ac.appendChild(X)}--t;ab=Y}if(Z!=F){O.setStartAfter(aa);O.collapse(E)}return ac}function o(aa,t,ad){var X,af,Z,ab,ac,W,ae,Y;if(ad!=j){af=x()}X=R(aa,ad);if(af){af.appendChild(X)}Z=aa.parentNode;ab=n(aa);ac=n(t);++ab;W=ac-ab;ae=aa.nextSibling;while(W>0){Y=ae.nextSibling;X=z(ae,ad);if(af){af.appendChild(X)}ae=Y;--W}X=i(t,ad);if(af){af.appendChild(X)}if(ad!=F){O.setStartAfter(aa);O.collapse(E)}return af}function i(ab,ac){var X=P(O[Q],O[A]-1),ad,aa,Z,t,W,Y=X!=O[Q];if(X==ab){return M(X,Y,S,ac)}ad=X.parentNode;aa=M(ad,S,S,ac);while(ad){while(X){Z=X.previousSibling;t=M(X,Y,S,ac);if(ac!=j){aa.insertBefore(t,aa.firstChild)}Y=E;X=Z}if(ad==ab){return aa}X=ad.previousSibling;ad=ad.parentNode;W=M(ad,S,S,ac);if(ac!=j){W.appendChild(aa)}aa=W}}function R(ab,ac){var Y=P(O[h],O[V]),Z=Y!=O[h],ad,aa,X,t,W;if(Y==ab){return M(Y,Z,E,ac)}ad=Y.parentNode;aa=M(ad,S,E,ac);while(ad){while(Y){X=Y.nextSibling;t=M(Y,Z,E,ac);if(ac!=j){aa.appendChild(t)}Z=E;Y=X}if(ad==ab){return aa}Y=ad.nextSibling;ad=ad.parentNode;W=M(ad,S,E,ac);if(ac!=j){W.appendChild(aa)}aa=W}}function M(t,Z,ac,ad){var Y,X,aa,W,ab;if(Z){return z(t,ad)}if(t.nodeType==3){Y=t.nodeValue;if(ac){W=O[V];X=Y.substring(W);aa=Y.substring(0,W)}else{W=O[A];X=Y.substring(0,W);aa=Y.substring(W)}if(ad!=F){t.nodeValue=aa}if(ad==j){return}ab=c.clone(t,S);ab.nodeValue=X;return ab}if(ad==j){return}return c.clone(t,S)}function z(W,t){if(t!=j){return t==F?c.clone(W,E):W}W.parentNode.removeChild(W)}}a.Range=b})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)==0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)==0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var u,t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,s,q,r=d.dom.doc,m=r.body;function j(z){var u,y,t,x,v;t=h.create("a");u=z?k:s;y=z?p:q;x=n.duplicate();if(u==r||u==r.documentElement){u=m;y=0}if(u.nodeType==3){u.parentNode.insertBefore(t,u);x.moveToElementText(t);x.moveStart("character",y);h.remove(t);n.setEndPoint(z?"StartToStart":"EndToEnd",x)}else{v=u.childNodes;if(v.length){if(y>=v.length){h.insertAfter(t,v[v.length-1])}else{u.insertBefore(t,v[y])}x.moveToElementText(t)}else{if(u.canHaveHTML){u.innerHTML="<span>\uFEFF</span>";t=u.firstChild;x.moveToElementText(t);x.collapse(f)}}n.setEndPoint(z?"StartToStart":"EndToEnd",x);h.remove(t)}}k=i.startContainer;p=i.startOffset;s=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==s&&k.nodeType==1){if(!k.hasChildNodes()){k.innerHTML="<span>\uFEFF</span><span>\uFEFF</span>";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";return}if(p==q-1){try{l=m.createControlRange();l.addElement(k.childNodes[p]);l.select();return}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e<r.length;e++){if(r[e]===r[e-1]){r.splice(e--,1)}}}}return r};b.matches=function(e,r){return b(e,null,null,r)};b.find=function(y,e,z){var x;if(!y){return[]}for(var t=0,s=f.order.length;t<s;t++){var v=f.order[t],u;if((u=f.leftMatch[v].exec(y))){var r=u[1];u.splice(1,1);if(r.substr(r.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");x=f.find[v](u,e,z);if(x!=null){y=y.replace(f.match[v],"");break}}}}if(!x){x=e.getElementsByTagName("*")}return{set:x,expr:y}};b.filter=function(C,B,F,u){var s=C,H=[],z=B,x,e,y=B&&B[0]&&b.isXML(B[0]);while(C&&B.length){for(var A in f.filter){if((x=f.leftMatch[A].exec(C))!=null&&x[2]){var r=f.filter[A],G,E,t=x[1];e=false;x.splice(1,1);if(t.substr(t.length-1)==="\\"){continue}if(z===H){H=[]}if(f.preFilter[A]){x=f.preFilter[A](x,z,F,H,u,y);if(!x){e=G=true}else{if(x===true){continue}}}if(x){for(var v=0;(E=z[v])!=null;v++){if(E){G=r(E,x,v,z);var D=u^!!G;if(F&&G!=null){if(D){e=true}else{z[v]=false}}else{if(D){H.push(E);e=true}}}}}if(G!==undefined){if(!F){z=H}C=C.replace(f.match[A],"");if(!e){return[]}break}}}if(C===s){if(e==null){b.error(C)}else{break}}s=C}return z};b.error=function(e){throw"Syntax error, unrecognized expression: "+e};var f=b.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(x,r){var t=typeof r==="string",v=t&&!/\W/.test(r),y=t&&!v;if(v){r=r.toLowerCase()}for(var s=0,e=x.length,u;s<e;s++){if((u=x[s])){while((u=u.previousSibling)&&u.nodeType!==1){}x[s]=y||u&&u.nodeName.toLowerCase()===r?u||false:u===r}}if(y){b.filter(r,x,true)}},">":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s<e;s++){v=x[s];if(v){var t=v.parentNode;x[s]=t.nodeName.toLowerCase()===r?t:false}}}else{for(;s<e;s++){v=x[s];if(v){x[s]=u?v.parentNode:v.parentNode===r}}if(u){b.filter(r,x,true)}}},"":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("parentNode",r,s,t,u,v)},"~":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("previousSibling",r,s,t,u,v)}},find:{ID:function(r,s,t){if(typeof s.getElementById!=="undefined"&&!t){var e=s.getElementById(r[1]);return e?[e]:[]}},NAME:function(s,v){if(typeof v.getElementsByName!=="undefined"){var r=[],u=v.getElementsByName(s[1]);for(var t=0,e=u.length;t<e;t++){if(u[t].getAttribute("name")===s[1]){r.push(u[t])}}return r.length===0?null:r}},TAG:function(e,r){return r.getElementsByTagName(e[1])}},preFilter:{CLASS:function(t,r,s,e,x,y){t=" "+t[1].replace(/\\/g,"")+" ";if(y){return t}for(var u=0,v;(v=r[u])!=null;u++){if(v){if(x^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(t)>=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return r<e[3]-0},gt:function(s,r,e){return r>e[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v<u;v++){if(t[v]===s){return false}}return true}else{b.error("Syntax error, unrecognized expression: "+e)}}}},CHILD:function(e,t){var x=t[1],r=e;switch(x){case"only":case"first":while((r=r.previousSibling)){if(r.nodeType===1){return false}}if(x==="first"){return true}r=e;case"last":while((r=r.nextSibling)){if(r.nodeType===1){return false}}return true;case"nth":var s=t[2],A=t[3];if(s===1&&A===0){return true}var v=t[0],z=e.parentNode;if(z&&(z.sizcache!==v||!e.nodeIndex)){var u=0;for(r=z.firstChild;r;r=r.nextSibling){if(r.nodeType===1){r.nodeIndex=++u}}z.sizcache=v}var y=e.nodeIndex-A;if(s===0){return y===0}else{return(y%s===0&&y/s>=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s<e;s++){r.push(u[s])}}else{for(;u[s];s++){r.push(u[s])}}}return r}}var c;if(document.documentElement.compareDocumentPosition){c=function(r,e){if(!r.compareDocumentPosition||!e.compareDocumentPosition){if(r==e){o=true}return r.compareDocumentPosition?-1:1}var s=r.compareDocumentPosition(e)&4?-1:r===e?0:1;if(s===0){o=true}return s}}else{if("sourceIndex" in document.documentElement){c=function(r,e){if(!r.sourceIndex||!e.sourceIndex){if(r==e){o=true}return r.sourceIndex?-1:1}var s=r.sourceIndex-e.sourceIndex;if(s===0){o=true}return s}}else{if(document.createRange){c=function(t,r){if(!t.ownerDocument||!r.ownerDocument){if(t==r){o=true}return t.ownerDocument?-1:1}var s=t.ownerDocument.createRange(),e=r.ownerDocument.createRange();s.setStart(t,0);s.setEnd(t,0);e.setStart(r,0);e.setEnd(r,0);var u=s.compareBoundaryPoints(Range.START_TO_END,e);if(u===0){o=true}return u}}}}b.getText=function(e){var r="",t;for(var s=0;e[s];s++){t=e[s];if(t.nodeType===3||t.nodeType===4){r+=t.nodeValue}else{if(t.nodeType!==8){r+=b.getText(t.childNodes)}}}return r};(function(){var r=document.createElement("div"),s="script"+(new Date()).getTime();r.innerHTML="<a name='"+s+"'/>";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="<p class='TEST'></p>";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1&&!z){e.sizcache=v;e.sizset=t}if(e.nodeName.toLowerCase()===x){u=e;break}e=e[r]}A[t]=u}}}function q(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1){if(!z){e.sizcache=v;e.sizset=t}if(typeof x!=="string"){if(e===x){u=true;break}}else{if(b.filter(x,[e]).length>0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x<r;x++){b(e,s[x],t)}return b.filter(u,t)};window.tinymce.dom.Sizzle=b})();(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}if(c.isIE&&i.boxModel){this._fixIESelection()}c.addUnload(f.destroy,f)},setCursorLocation:function(h,i){var f=this;var g=f.dom.createRng();g.setStart(h,i);g.setEnd(h,i);f.setRng(g);f.collapse(false)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";g.forced_root_block="";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML="<br>"+(h.item?h.item(0).outerHTML:h.htmlText);l.removeChild(l.firstChild)}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(g,i){var n=this,f=n.getRng(),j,k=n.win.document,m,l;i=i||{format:"html"};i.set=true;g=i.content=g;if(!i.no_events){n.onBeforeSetContent.dispatch(n,i)}g=i.content;if(f.insertNode){g+='<span id="__caret">_</span>';if(f.startContainer==k&&f.endContainer==k){k.body.innerHTML=g}else{f.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=g}else{if(f.createContextualFragment){f.insertNode(f.createContextualFragment(g))}else{m=k.createDocumentFragment();l=k.createElement("div");m.appendChild(l);l.outerHTML=g;f.insertNode(m)}}}j=n.dom.get("__caret");f=k.createRange();f.setStartBefore(j);f.setEndBefore(j);n.setRng(f);n.dom.remove("__caret");try{n.setRng(f)}catch(h){}}else{if(f.item){k.execCommand("Delete",false,null);f=n.getRng()}if(/^\s+/.test(g)){f.pasteHTML('<span id="__mce_tmp">_</span>'+g);n.dom.remove("__mce_tmp")}else{f.pasteHTML(g)}}if(!i.no_events){n.onSetContent.dispatch(n,i)}},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(r,s){var v=this,m=v.dom,g,j,i,n,h,o,p,l="\uFEFF",u;function f(x,y){var t=0;d(m.select(x),function(A,z){if(A==y){t=z}});return t}if(r==2){function k(){var x=v.getRng(true),t=m.getRoot(),y={};function z(C,H){var B=C[H?"startContainer":"endContainer"],G=C[H?"startOffset":"endOffset"],A=[],D,F,E=0;if(B.nodeType==3){if(s){for(D=B.previousSibling;D&&D.nodeType==3;D=D.previousSibling){G+=D.nodeValue.length}}A.push(G)}else{F=B.childNodes;if(G>=F.length&&F.length){E=1;G=Math.max(0,F.length-1)}A.push(v.dom.nodeIndex(F[G],s)+E)}for(;B&&B!=t;B=B.parentNode){A.push(v.dom.nodeIndex(B,s))}return A}y.start=z(x,true);if(!v.isCollapsed()){y.end=z(x)}return y}if(v.tridentSel){return v.tridentSel.getBookmark(r)}return k()}if(r){return{rng:v.getRng()}}g=v.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();u="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();try{g.collapse();g.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_start" style="'+u+'">'+l+"</span>");if(!n){j.collapse(false);g.moveToElementText(j.parentElement());if(g.compareEndPoints("StartToEnd",j)==0){j.move("character",-1)}j.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_end" style="'+u+'">'+l+"</span>")}}catch(q){return null}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=v.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}if(g.startContainer.nodeType==9){return}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_end",style:u},l))}g.collapse(true);g.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_start",style:u},l))}v.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){y=t[0];for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(t[v]>u.length-1){return}x=u[t[v]]}if(x.nodeType===3){y=Math.min(t[0],x.nodeValue.length)}if(x.nodeType===1){y=Math.min(t[0],x.childNodes.length)}if(z){f.setStart(x,y)}else{f.setEnd(x,y)}}return true}if(r.tridentSel){return r.tridentSel.moveToBookmark(n)}if(g(true)&&g()){r.setRng(f)}}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3&&!c.isOpera){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(l.isBlock(t)&&!t.innerHTML){t.innerHTML=!a?'<br data-mce-bogus="1" />':" "}return t}k("start");k("end");if(j){f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;if(k){f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g)}return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var h=this,g=h.getRng(),i;if(g.item){i=g.item(0);g=h.win.document.body.createTextRange();g.moveToElementText(i)}g.collapse(!!f);h.setRng(g)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(l){var g=this,h,i,k,j=g.win.document;if(l&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():j.createRange())}}catch(f){}if(c.isIE&&i&&i.setStart&&j.selection.createRange().item){k=j.selection.createRange().item(0);i=j.createRange();i.setStartBefore(k);i.setEndAfter(k)}if(!i){i=j.createRange?j.createRange():j.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;try{h.removeAllRanges()}catch(f){}h.addRange(i);g.selectedRange=h.rangeCount>0?h.getRangeAt(0):null}}else{if(i.cloneRange){try{g.tridentSel.addRange(i);return}catch(f){}}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var h=this,g=h.getRng(),i=h.getSel(),l,k=g.startContainer,f=g.endContainer;if(!g){return h.dom.getRoot()}if(g.setStart){l=g.commonAncestorContainer;if(!g.collapsed){if(g.startContainer==g.endContainer){if(g.endOffset-g.startOffset<2){if(g.startContainer.hasChildNodes()){l=g.startContainer.childNodes[g.startOffset]}}}if(k.nodeType===3&&f.nodeType===3){function j(p,m){var o=p;while(p&&p.nodeType===3&&p.length===0){p=m?p.nextSibling:p.previousSibling}return p||o}if(k.length===g.startOffset){k=j(k.nextSibling,true)}else{k=k.parentNode}if(g.endOffset===0){f=j(f.previousSibling,false)}else{f=f.parentNode}if(k&&k===f){return k}}}if(l&&l.nodeType==3){return l.parentNode}return l}return g.item?g.item(0):g.parentElement()},getSelectedBlocks:function(o,g){var m=this,j=m.dom,l,k,h,i=[];l=j.getParent(o||m.getStart(),j.isBlock);k=j.getParent(g||m.getEnd(),j.isBlock);if(l){i.push(l)}if(l&&k&&l!=k){h=l;var f=new c.dom.TreeWalker(l,j.getRoot());while((h=f.next())&&h!=k){if(j.isBlock(h)){i.push(h)}}}if(k&&l!=k){i.push(k)}return i},normalize:function(){var g=this,f,i;if(c.isIE){return}function h(p){var k,o,n,m=g.dom,j=m.getRoot(),l;k=f[(p?"start":"end")+"Container"];o=f[(p?"start":"end")+"Offset"];if(k.nodeType===9){k=k.body;o=0}if(k===j){if(k.hasChildNodes()){k=k.childNodes[Math.min(!p&&o>0?o-1:o,k.childNodes.length-1)];o=0;if(k.hasChildNodes()){l=k;n=new c.dom.TreeWalker(k,j);do{if(l.nodeType===3){o=p?0:l.nodeValue.length-1;k=l;i=true;break}if(/^(BR|IMG)$/.test(l.nodeName)){o=m.nodeIndex(l);k=l.parentNode;if(l.nodeName=="IMG"&&!p){o++}i=true;break}}while(l=(p?n.next():n.prev()))}}}if(i){f["set"+(p?"Start":"End")](k,o)}}f=g.getRng();h(true);if(!f.collapsed){h()}if(i){g.setRng(f)}},destroy:function(g){var f=this;f.win=null;if(!g){c.removeUnload(f.destroy)}},_fixIESelection:function(){var g=this.dom,m=g.doc,h=m.body,j,n,f;m.documentElement.unselectable=true;function i(o,r){var p=h.createTextRange();try{p.moveToPoint(o,r)}catch(q){p=null}return p}function l(p){var o;if(p.button){o=i(p.x,p.y);if(o){if(o.compareEndPoints("StartToStart",n)>0){o.setEndPoint("StartToStart",n)}else{o.setEndPoint("EndToEnd",n)}o.select()}}else{k()}}function k(){var o=m.selection.createRange();if(n&&!o.item&&o.compareEndPoints("StartToEnd",o)===0){n.select()}g.unbind(m,"mouseup",k);g.unbind(m,"mousemove",l);n=j=0}g.bind(m,["mousedown","contextmenu"],function(o){if(o.target.nodeName==="HTML"){if(j){k()}f=m.documentElement;if(f.scrollHeight>f.clientHeight){return}j=1;n=i(o.x,o.y);if(n){g.bind(m,"mouseup",k);g.bind(m,"mousemove",l);g.win.focus();n.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/\s*mce(Item\w+|Selected)\s*/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(m.getInner?o.innerHTML:a.trim(i.getOuterHTML(o),m),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF|\u200B/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],f={},d=[],g=0,e;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==e){j.push(m);l[m]=c}if(q){if(!f[m]){f[m]=[]}f[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(f[r],function(s){s.func.call(s.scope)});f[r]=e}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&d<h.nodeValue.length){i=f(h,d);h=i.previousSibling;if(g>d){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d<h.nodeValue.length){h=f(h,d);d=0}if(i.nodeType==3&&g>0&&g<i.nodeValue.length){i=f(i,g).previousSibling;g=i.nodeValue.length}}return{startContainer:h,startOffset:d,endContainer:i,endOffset:g}}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var p=this,m=e.root,l=e.items,n=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,k=e.excludeFromTabOrder,j,h,o,d,g;f=f||b.DOM;j=function(q){g=q.target.id};h=function(q){f.setAttrib(q.target.id,"tabindex","-1")};d=function(q){var r=f.get(g);f.setAttrib(r,"tabindex","0");r.focus()};p.focus=function(){f.get(g).focus()};p.destroy=function(){c(l,function(q){f.unbind(f.get(q.id),"focus",j);f.unbind(f.get(q.id),"blur",h)});f.unbind(f.get(m),"focus",d);f.unbind(f.get(m),"keydown",o);l=f=m=p.focus=j=h=o=d=null;p.destroy=function(){}};p.moveFocus=function(u,r){var q=-1,t=p.controls,s;if(!g){return}c(l,function(x,v){if(x.id===g){q=v;return false}});q+=u;if(q<0){q=l.length-1}else{if(q>=l.length){q=0}}s=l[q];f.setAttrib(g,"tabindex","-1");f.setAttrib(s.id,"tabindex","0");f.get(s.id).focus();if(e.actOnFocus){e.onAction(s.id)}if(r){a.cancel(r)}};o=function(y){var u=37,t=39,x=38,z=40,q=27,s=14,r=13,v=32;switch(y.keyCode){case u:if(i){p.moveFocus(-1)}break;case t:if(i){p.moveFocus(1)}break;case x:if(n){p.moveFocus(-1)}break;case z:if(n){p.moveFocus(1)}break;case q:if(e.onCancel){e.onCancel();a.cancel(y)}break;case s:case r:case v:if(e.onAction){e.onAction(g);a.cancel(y)}break}};c(l,function(s,q){var r;if(!s.id){s.id=f.uniqueId("_mce_item_")}if(k){f.bind(s.id,"blur",h);r="-1"}else{r=(q===0?"0":"-1")}f.setAttrib(s.id,"tabindex",r);f.bind(f.get(s.id),"focus",j)});if(l[0]){g=l[0].id}f.setAttrib(m,"tabindex","-1");f.bind(f.get(m),"focus",d);f.bind(f.get(m),"keydown",o)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" />'+c}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keyup",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(i,h,f){var g=this;g.parent(i,h,f);g.items=[];g.onChange=new a(g);g.onPostRender=new a(g);g.onAdd=new a(g);g.onRenderMenu=new d.util.Dispatcher(this);g.classPrefix="mceListBox";g.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==undefined){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var h=this,i,j,g;h.marked={};if(f!=h.selectedIndex){i=c.get(h.id+"_text");g=c.get(h.id+"_voiceDesc");j=h.items[f];if(j){h.selectedValue=j.value;h.selectedIndex=f;c.setHTML(i,c.encode(j.title));c.setHTML(g,h.settings.title+" - "+j.title);c.removeClass(i,"mceTitle");c.setAttrib(h.id,"aria-valuenow",j.title)}else{c.setHTML(i,c.encode(h.settings.title));c.setHTML(g,c.encode(h.settings.title));c.addClass(i,"mceTitle");h.selectedValue=h.selectedIndex=null;c.setAttrib(h.id,"aria-valuenow",h.settings.title)}i=0}},mark:function(f){this.marked[f]=true},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<span role="listbox" aria-haspopup="true" aria-labelledby="'+f.id+'_voiceDesc" aria-describedby="'+f.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("span",{id:f.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},f.settings.title);i+=c.createHTML("a",{id:f.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";i+="</tr></tbody></table></span>";return i},showMenu:function(){var g=this,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;e(g.items,function(j){if(f.items[j.id]){f.items[j.id].setSelected(0)}});e(g.items,function(j){if(f.items[j.id]&&g.marked[j.value]){f.items[j.id].setSelected(1)}if(j.value===g.selectedValue){f.items[j.id].setSelected(1)}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(f.menu&&f.menu.isMenuVisible){c.removeClass(f.id,f.classPrefix+"Selected");if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(function(){g.hideMenu();g.focus()});f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){if(h.value===undefined){f.add({title:h.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.role="option";h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)}});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id,"keydown",function(h){if(h.keyCode==32){f.showMenu(h);b.cancel(h)}});b.add(f.id,"focus",function(){if(!f._focused){f.keyDownHandler=b.add(f.id,"keydown",function(h){if(h.keyCode==40){f.showMenu();b.cancel(h)}});f.keyPressHandler=b.add(f.id,"keypress",function(i){var h;if(i.keyCode==13){h=f.selectedValue;f.selectedValue=null;b.cancel(i);f.settings.onselect(h)}})}f._focused=1});b.add(f.id,"blur",function(){b.remove(f.id,"keydown",f.keyDownHandler);b.remove(f.id,"keypress",f.keyPressHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f;this.setAriaProperty("disabled",f)},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox","aria-labelledby":f.id+"_aria"},g);g+=c.createHTML("span",{id:f.id+"_aria",style:"display: none"},f.settings.title);return g},postRender:function(){var g=this,h,i=true;g.rendered=true;function f(k){var j=g.items[k.target.selectedIndex-1];if(j&&(j=j.value)){g.onChange.dispatch(g,j);if(g.settings.onselect){g.settings.onselect(j)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(k){var j;b.remove(g.id,"change",h);i=false;j=b.add(g.id,"blur",function(){if(i){return}i=true;b.add(g.id,"change",f);b.remove(g.id,"blur",j)});if(d.isWebKit&&(k.keyCode==37||k.keyCode==39)){return b.prevent(k)}if(k.keyCode==13||k.keyCode==32){f(k);return b.cancel(k)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.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"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");new d.ui.KeyboardNavigation({root:p.id+"_menu",items:c.select("a",p.id+"_menu"),onCancel:function(){p.hideMenu();p.focus()}});a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(v){var u=this,o,n=j.ScriptLoader,r,l=[],q;function p(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(y,z,t){var x=y[z];if(!x){return}if(j.is(x,"string")){t=x.replace(/\.\w+$/,"");t=t?j.resolve(t):0;x=j.resolve(x)}return x.apply(t||this,Array.prototype.slice.call(arguments,2))}v=d({theme:"simple",language:"en"},v);u.settings=v;i.bind(window,"ready",function(){var s,x;m(v,"onpageload");switch(v.mode){case"exact":s=v.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){q=new j.Editor(y,v);l.push(q);q.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);q=new j.Editor(y,v);l.push(q);q.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(z,y){return y.constructor===RegExp?y.test(z.className):k.hasClass(z,y)}g(k.select("textarea"),function(y){if(v.editor_deselector&&t(y,v.editor_deselector)){return}if(!v.editor_selector||t(y,v.editor_selector)){q=new j.Editor(p(y),v);l.push(q);q.render(1)}});break;default:if(v.types){g(v.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(p(A),j.extend({},v,y));l.push(z);z.render(1)})})}else{if(v.selector){g(k.select(v.selector),function(z){var y=new j.Editor(p(z),v);l.push(y);y.render(1)})}}}if(v.oninit){s=x=0;g(l,function(y){x++;if(!y.initialized){y.onInit.add(function(){s++;if(s==x){m(v,"oninit")}})}else{s++}if(s==x){m(v,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(n){var o=n.DOM,k=n.dom.Event,f=n.extend,l=n.util.Dispatcher,i=n.each,a=n.isGecko,b=n.isIE,e=n.isWebKit,d=n.is,h=n.ThemeManager,c=n.PluginManager,p=n.inArray,m=n.grep,g=n.explode,j=n.VK;n.create("tinymce.Editor",{Editor:function(u,r){var q=this;q.id=q.editorId=u;q.execCommands={};q.queryStateCommands={};q.queryValueCommands={};q.isNotDirty=false;q.plugins={};i(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","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","onSetAttrib"],function(s){q[s]=new l(q)});q.settings=r=f({id:u,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:n.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:n.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,inline_styles:1,convert_fonts_to_spans:true,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside",validate:true,entity_encoding:"named",url_converter:q.convertURL,url_converter_scope:q,ie7_compat:true},r);q.documentBaseURI=new n.util.URI(r.document_base_url||n.documentBaseURL,{base_uri:tinyMCE.baseURI});q.baseURI=n.baseURI;q.contentCSS=[];q.execCallback("setup",q)},render:function(u){var v=this,x=v.settings,y=v.id,q=n.ScriptLoader;if(!k.domLoaded){k.add(window,"ready",function(){v.render()});return}tinyMCE.settings=x;if(!v.getElement()){return}if(n.isIDevice&&!n.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(v.getElement().nodeName)&&x.hidden_input&&o.getParent(y,"form")){o.insertAfter(o.create("input",{type:"hidden",name:y}),y)}if(n.WindowManager){v.windowManager=new n.WindowManager(v)}if(x.encoding=="xml"){v.onGetContent.add(function(s,t){if(t.save){t.content=o.encode(t.content)}})}if(x.add_form_submit_trigger){v.onSubmit.addToTop(function(){if(v.initialized){v.save();v.isNotDirty=1}})}if(x.add_unload_trigger){v._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(v.initialized&&!v.destroyed&&!v.isHidden()){v.save({format:"raw",no_events:true})}})}n.addUnload(v.destroy,v);if(x.submit_patch){v.onBeforeRenderUI.add(function(){var s=v.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){v.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){n.triggerSave();v.isNotDirty=1;return v.formElement._mceOldSubmit(v.formElement)}}s=null})}function r(){if(x.language&&x.language_load!==false){q.add(n.baseURL+"/langs/"+x.language+".js")}if(x.theme&&x.theme.charAt(0)!="-"&&!h.urls[x.theme]){h.load(x.theme,"themes/"+x.theme+"/editor_template"+n.suffix+".js")}i(g(x.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(A){var z={prefix:"plugins/",resource:A,suffix:"/editor_plugin"+n.suffix+".js"};var A=c.createUrl(z,A);c.load(A.resource,A)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+n.suffix+".js"})}}});q.loadQueue(function(){if(!v.removed){v.init()}})}r()},init:function(){var v,I=this,J=I.settings,F,B,E=I.getElement(),r,q,G,z,D,H,A,x=[];n.add(I);J.aria_label=J.aria_label||o.getAttrib(E,"aria-label",I.getLang("aria.rich_text_area"));if(J.theme){J.theme=J.theme.replace(/-/,"");r=h.get(J.theme);I.theme=new r();if(I.theme.init&&J.init_theme){I.theme.init(I,h.urls[J.theme]||n.documentBaseURL.replace(/\/$/,""))}}function C(K){var L=c.get(K),t=c.urls[K]||n.documentBaseURL.replace(/\/$/,""),s;if(L&&n.inArray(x,K)===-1){i(c.dependencies(K),function(u){C(u)});s=new L(I,t);I.plugins[K]=s;if(s.init){s.init(I,t);x.push(K)}}}i(g(J.plugins.replace(/\-/g,"")),C);if(J.popup_css!==false){if(J.popup_css){J.popup_css=I.documentBaseURI.toAbsolute(J.popup_css)}else{J.popup_css=I.baseURI.toAbsolute("themes/"+J.theme+"/skins/"+J.skin+"/dialog.css")}}if(J.popup_css_add){J.popup_css+=","+I.documentBaseURI.toAbsolute(J.popup_css_add)}I.controlManager=new n.ControlManager(I);if(J.custom_undo_redo){I.onBeforeExecCommand.add(function(t,K,u,L,s){if(K!="Undo"&&K!="Redo"&&K!="mceRepaint"&&(!s||!s.skip_undo)){I.undoManager.beforeChange()}});I.onExecCommand.add(function(t,K,u,L,s){if(K!="Undo"&&K!="Redo"&&K!="mceRepaint"&&(!s||!s.skip_undo)){I.undoManager.add()}})}I.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){I.nodeChanged()}});if(a){function y(s,t){if(!t||!t.initial){I.execCommand("mceRepaint")}}I.onUndo.add(y);I.onRedo.add(y);I.onSetContent.add(y)}I.onBeforeRenderUI.dispatch(I,I.controlManager);if(J.render_ui){F=J.width||E.style.width||E.offsetWidth;B=J.height||E.style.height||E.offsetHeight;I.orgDisplay=E.style.display;H=/^[0-9\.]+(|px)$/i;if(H.test(""+F)){F=Math.max(parseInt(F)+(r.deltaWidth||0),100)}if(H.test(""+B)){B=Math.max(parseInt(B)+(r.deltaHeight||0),100)}r=I.theme.renderUI({targetNode:E,width:F,height:B,deltaWidth:J.delta_width,deltaHeight:J.delta_height});I.editorContainer=r.editorContainer}if(document.domain&&location.hostname!=document.domain){n.relaxedDomain=document.domain}o.setStyles(r.sizeContainer||r.editorContainer,{width:F,height:B});if(J.content_css){n.each(g(J.content_css),function(s){I.contentCSS.push(I.documentBaseURI.toAbsolute(s))})}B=(r.iframeHeight||B)+(typeof(B)=="number"?(r.deltaHeight||0):"");if(B<100){B=100}I.iframeHTML=J.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(J.document_base_url!=n.documentBaseURL){I.iframeHTML+='<base href="'+I.documentBaseURI.getURI()+'" />'}if(J.ie7_compat){I.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{I.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}I.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';for(A=0;A<I.contentCSS.length;A++){I.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+I.contentCSS[A]+'" />'}I.contentCSS=[];z=J.body_id||"tinymce";if(z.indexOf("=")!=-1){z=I.getParam("body_id","","hash");z=z[I.id]||z}D=J.body_class||"";if(D.indexOf("=")!=-1){D=I.getParam("body_class","","hash");D=D[I.id]||""}I.iframeHTML+='</head><body id="'+z+'" class="mceContentBody '+D+'" onload="window.parent.tinyMCE.get(\''+I.id+"').onLoad.dispatch();\"><br></body></html>";if(n.relaxedDomain&&(b||(n.isOpera&&parseFloat(opera.version())<11))){G='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+I.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}v=o.add(r.iframeContainer,"iframe",{id:I.id+"_ifr",src:G||'javascript:""',frameBorder:"0",allowTransparency:"true",title:J.aria_label,style:{width:"100%",height:B,display:"block"}});I.contentAreaContainer=r.iframeContainer;o.get(r.editorContainer).style.display=I.orgDisplay;o.get(I.id).style.display="none";o.setAttrib(I.id,"aria-hidden",true);if(!n.relaxedDomain||!G){I.setupIframe()}E=v=r=null},setupIframe:function(){var r=this,x=r.settings,y=o.get(r.id),z=r.getDoc(),v,q;if(!b||!n.relaxedDomain){z.open();z.write(r.iframeHTML);z.close();if(n.relaxedDomain){z.domain=n.relaxedDomain}}q=r.getBody();q.disabled=true;if(!x.readonly){q.contentEditable=true}q.disabled=false;r.schema=new n.html.Schema(x);r.dom=new n.dom.DOMUtils(r.getDoc(),{keep_values:true,url_converter:r.convertURL,url_converter_scope:r,hex_colors:x.force_hex_style_colors,class_filter:x.class_filter,update_styles:1,fix_ie_paragraphs:1,schema:r.schema});r.parser=new n.html.DomParser(x,r.schema);if(!r.settings.allow_html_in_named_anchor){r.parser.addAttributeFilter("name",function(s,t){var B=s.length,D,A,C,E;while(B--){E=s[B];if(E.name==="a"&&E.firstChild){C=E.parent;D=E.lastChild;do{A=D.prev;C.insert(D,E);D=A}while(D)}}})}r.parser.addAttributeFilter("src,href,style",function(s,t){var A=s.length,C,E=r.dom,D,B;while(A--){C=s[A];D=C.attr(t);B="data-mce-"+t;if(!C.attributes.map[B]){if(t==="style"){C.attr(B,E.serializeStyle(E.parseStyle(D),C.name))}else{C.attr(B,r.convertURL(D,t,C.name))}}}});r.parser.addNodeFilter("script",function(s,t){var A=s.length,B;while(A--){B=s[A];B.attr("type","mce-"+(B.attr("type")||"text/javascript"))}});r.parser.addNodeFilter("#cdata",function(s,t){var A=s.length,B;while(A--){B=s[A];B.type=8;B.name="#comment";B.value="[CDATA["+B.value+"]]"}});r.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(t,A){var B=t.length,C,s=r.schema.getNonEmptyElements();while(B--){C=t[B];if(C.isEmpty(s)){C.empty().append(new n.html.Node("br",1)).shortEnded=true}}});r.serializer=new n.dom.Serializer(x,r.dom,r.schema);r.selection=new n.dom.Selection(r.dom,r.getWin(),r.serializer);r.formatter=new n.Formatter(this);r.formatter.register({alignleft:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(s){return true},onformat:function(A,s,t){i(t,function(C,B){r.dom.setAttrib(A,B,C)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(s){r.formatter.register(s,{block:s,remove:"all"})});r.formatter.register(r.settings.formats);r.undoManager=new n.UndoManager(r);r.undoManager.onAdd.add(function(t,s){if(t.hasUndo()){return r.onChange.dispatch(r,s,t)}});r.undoManager.onUndo.add(function(t,s){return r.onUndo.dispatch(r,s,t)});r.undoManager.onRedo.add(function(t,s){return r.onRedo.dispatch(r,s,t)});r.forceBlocks=new n.ForceBlocks(r);r.enterKey=new n.EnterKey(r);r.editorCommands=new n.EditorCommands(r);r.serializer.onPreProcess.add(function(s,t){return r.onPreProcess.dispatch(r,t,s)});r.serializer.onPostProcess.add(function(s,t){return r.onPostProcess.dispatch(r,t,s)});r.onPreInit.dispatch(r);if(!x.gecko_spellcheck){r.getBody().spellcheck=0}if(!x.readonly){r._addEvents()}r.controlManager.onPostRender.dispatch(r,r.controlManager);r.onPostRender.dispatch(r);r.quirks=new n.util.Quirks(this);if(x.directionality){r.getBody().dir=x.directionality}if(x.nowrap){r.getBody().style.whiteSpace="nowrap"}if(x.handle_node_change_callback){r.onNodeChange.add(function(t,s,A){r.execCallback("handle_node_change_callback",r.id,A,-1,-1,true,r.selection.isCollapsed())})}if(x.save_callback){r.onSaveContent.add(function(s,A){var t=r.execCallback("save_callback",r.id,A.content,r.getBody());if(t){A.content=t}})}if(x.onchange_callback){r.onChange.add(function(t,s){r.execCallback("onchange_callback",r,s)})}if(x.protect){r.onBeforeSetContent.add(function(s,t){if(x.protect){i(x.protect,function(A){t.content=t.content.replace(A,function(B){return"<!--mce:protected "+escape(B)+"-->"})})}})}if(x.convert_newlines_to_brs){r.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(x.preformatted){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(x.verify_css_classes){r.serializer.attribValueFilter=function(C,A){var B,t;if(C=="class"){if(!r.classesRE){t=r.dom.getClasses();if(t.length>0){B="";i(t,function(s){B+=(B?"|":"")+s["class"]});r.classesRE=new RegExp("("+B+")","gi")}}return !r.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(A)||r.classesRE.test(A)?A:""}return A}}if(x.cleanup_callback){r.onBeforeSetContent.add(function(s,t){t.content=r.execCallback("cleanup_callback","insert_to_editor",t.content,t)});r.onPreProcess.add(function(s,t){if(t.set){r.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){r.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});r.onPostProcess.add(function(s,t){if(t.set){t.content=r.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=r.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(x.save_callback){r.onGetContent.add(function(s,t){if(t.save){t.content=r.execCallback("save_callback",r.id,t.content,r.getBody())}})}if(x.handle_event_callback){r.onEvent.add(function(s,t,A){if(r.execCallback("handle_event_callback",t,s,A)===false){k.cancel(t)}})}r.onSetContent.add(function(){r.addVisual(r.getBody())});if(x.padd_empty_editor){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function u(s,t){i(s.dom.select("a"),function(B){var A=B.parentNode;if(s.dom.isBlock(A)&&A.lastChild===B){s.dom.add(A,"br",{"data-mce-bogus":1})}})}r.onExecCommand.add(function(s,t){if(t==="CreateLink"){u(s)}});r.onSetContent.add(r.selection.onSetContent.add(u))}r.load({initial:true,format:"html"});r.startContent=r.getContent({format:"raw"});r.undoManager.add();r.initialized=true;r.onInit.dispatch(r);r.execCallback("setupcontent_callback",r.id,r.getBody(),r.getDoc());r.execCallback("init_instance_callback",r);r.focus(true);r.nodeChanged({initial:1});i(r.contentCSS,function(s){r.dom.loadCSS(s)});if(x.auto_focus){setTimeout(function(){var s=n.get(x.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getBody().focus();s.getWin().focus()},100)}y=null},focus:function(v){var z,r=this,u=r.selection,y=r.settings.content_editable,s,q,x=r.getDoc();if(!v){s=u.getRng();if(s.item){q=s.item(0)}r._refreshContentEditable();if(!y){r.getWin().focus()}if(n.isGecko){r.getBody().focus()}if(q&&q.ownerDocument==x){s=x.body.createControlRange();s.addElement(q);s.select()}}if(n.activeEditor!=r){if((z=n.activeEditor)!=null){z.onDeactivate.dispatch(z,r)}r.onActivate.dispatch(r,z)}n._setActive(r)},execCallback:function(v){var q=this,u=q.settings[v],r;if(!u){return}if(q.callbackLookup&&(r=q.callbackLookup[v])){u=r.func;r=r.scope}if(d(u,"string")){r=u.replace(/\.\w+$/,"");r=r?n.resolve(r):0;u=n.resolve(u);q.callbackLookup=q.callbackLookup||{};q.callbackLookup[v]={func:u,scope:r}}return u.apply(r||q,Array.prototype.slice.call(arguments,1))},translate:function(q){var t=this.settings.language||"en",r=n.i18n;if(!q){return""}return r[t+"."+q]||q.replace(/{\#([^}]+)\}/g,function(u,s){return r[t+"."+s]||"{#"+s+"}"})},getLang:function(r,q){return n.i18n[(this.settings.language||"en")+"."+r]||(d(q)?q:"{#"+r+"}")},getParam:function(x,s,q){var t=n.trim,r=d(this.settings[x])?this.settings[x]:s,u;if(q==="hash"){u={};if(d(r,"string")){i(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(y){y=y.split("=");if(y.length>1){u[t(y[0])]=t(y[1])}else{u[t(y[0])]=t(y)}})}else{u=r}return u}return r},nodeChanged:function(u){var q=this,r=q.selection,v=r.getStart()||q.getBody();if(q.initialized){u=u||{};v=b&&v.ownerDocument!=q.getDoc()?q.getBody():v;u.parents=[];q.dom.getParent(v,function(s){if(s.nodeName=="BODY"){return true}u.parents.push(s)});q.onNodeChange.dispatch(q,u?u.controlManager||q.controlManager:q.controlManager,v,r.isCollapsed(),u)}},addButton:function(u,r){var q=this;q.buttons=q.buttons||{};q.buttons[u]=r},addCommand:function(q,s,r){this.execCommands[q]={func:s,scope:r||this}},addQueryStateHandler:function(q,s,r){this.queryStateCommands[q]={func:s,scope:r||this}},addQueryValueHandler:function(q,s,r){this.queryValueCommands[q]={func:s,scope:r||this}},addShortcut:function(s,v,q,u){var r=this,x;if(!r.settings.custom_shortcuts){return false}r.shortcuts=r.shortcuts||{};if(d(q,"string")){x=q;q=function(){r.execCommand(x,false,null)}}if(d(q,"object")){x=q;q=function(){r.execCommand(x[0],x[1],x[2])}}i(g(s),function(t){var y={func:q,scope:u||this,desc:v,alt:false,ctrl:false,shift:false};i(g(t,"+"),function(z){switch(z){case"alt":case"ctrl":case"shift":y[z]=true;break;default:y.charCode=z.charCodeAt(0);y.keyCode=z.toUpperCase().charCodeAt(0)}});r.shortcuts[(y.ctrl?"ctrl":"")+","+(y.alt?"alt":"")+","+(y.shift?"shift":"")+","+y.keyCode]=y});return true},execCommand:function(y,x,A,q){var u=this,v=0,z,r;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(y)&&(!q||!q.skip_focus)){u.focus()}q=f({},q);u.onBeforeExecCommand.dispatch(u,y,x,A,q);if(q.terminate){return false}if(u.execCallback("execcommand_callback",u.id,u.selection.getNode(),y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}if(z=u.execCommands[y]){r=z.func.call(z.scope,x,A);if(r!==true){u.onExecCommand.dispatch(u,y,x,A,q);return r}}i(u.plugins,function(s){if(s.execCommand&&s.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);v=1;return false}});if(v){return true}if(u.theme&&u.theme.execCommand&&u.theme.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}if(u.editorCommands.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}u.getDoc().execCommand(y,x,A);u.onExecCommand.dispatch(u,y,x,A,q)},queryCommandState:function(v){var r=this,x,u;if(r._isHidden()){return}if(x=r.queryStateCommands[v]){u=x.func.call(x.scope);if(u!==true){return u}}x=r.editorCommands.queryCommandState(v);if(x!==-1){return x}try{return this.getDoc().queryCommandState(v)}catch(q){}},queryCommandValue:function(x){var r=this,v,u;if(r._isHidden()){return}if(v=r.queryValueCommands[x]){u=v.func.call(v.scope);if(u!==true){return u}}v=r.editorCommands.queryCommandValue(x);if(d(v)){return v}try{return this.getDoc().queryCommandValue(x)}catch(q){}},show:function(){var q=this;o.show(q.getContainer());o.hide(q.id);q.load()},hide:function(){var q=this,r=q.getDoc();if(b&&r){r.execCommand("SelectAll")}q.save();o.hide(q.getContainer());o.setStyle(q.id,"display",q.orgDisplay)},isHidden:function(){return !o.isHidden(this.id)},setProgressState:function(q,r,s){this.onSetProgressState.dispatch(this,q,r,s);return q},load:function(u){var q=this,s=q.getElement(),r;if(s){u=u||{};u.load=true;r=q.setContent(d(s.value)?s.value:s.innerHTML,u);u.element=s;if(!u.no_events){q.onLoadContent.dispatch(q,u)}u.element=s=null;return r}},save:function(v){var q=this,u=q.getElement(),r,s;if(!u||!q.initialized){return}v=v||{};v.save=true;if(!v.no_events){q.undoManager.typing=false;q.undoManager.add()}v.element=u;r=v.content=q.getContent(v);if(!v.no_events){q.onSaveContent.dispatch(q,v)}r=v.content;if(!/TEXTAREA|INPUT/i.test(u.nodeName)){u.innerHTML=r;if(s=o.getParent(q.id,"form")){i(s.elements,function(t){if(t.name==q.id){t.value=r;return false}})}}else{u.value=r}v.element=u=null;return r},setContent:function(v,t){var s=this,r,q=s.getBody(),u;t=t||{};t.format=t.format||"html";t.set=true;t.content=v;if(!t.no_events){s.onBeforeSetContent.dispatch(s,t)}v=t.content;if(!n.isIE&&(v.length===0||/^\s+$/.test(v))){u=s.settings.forced_root_block;if(u){v="<"+u+'><br data-mce-bogus="1"></'+u+">"}else{v='<br data-mce-bogus="1">'}q.innerHTML=v;s.selection.select(q,true);s.selection.collapse(true);return}if(t.format!=="raw"){v=new n.html.Serializer({},s.schema).serialize(s.parser.parse(v))}t.content=n.trim(v);s.dom.setHTML(q,t.content);if(!t.no_events){s.onSetContent.dispatch(s,t)}s.selection.normalize();return t.content},getContent:function(r){var q=this,s;r=r||{};r.format=r.format||"html";r.get=true;if(!r.no_events){q.onBeforeGetContent.dispatch(q,r)}if(r.format=="raw"){s=q.getBody().innerHTML}else{s=q.serializer.serialize(q.getBody(),r)}r.content=n.trim(s);if(!r.no_events){q.onGetContent.dispatch(q,r)}return r.content},isDirty:function(){var q=this;return n.trim(q.startContent)!=n.trim(q.getContent({format:"raw",no_events:1}))&&!q.isNotDirty},getContainer:function(){var q=this;if(!q.container){q.container=o.get(q.editorContainer||q.id+"_parent")}return q.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return o.get(this.settings.content_element||this.id)},getWin:function(){var q=this,r;if(!q.contentWindow){r=o.get(q.id+"_ifr");if(r){q.contentWindow=r.contentWindow}}return q.contentWindow},getDoc:function(){var r=this,q;if(!r.contentDocument){q=r.getWin();if(q){r.contentDocument=q.document}}return r.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(q,y,x){var r=this,v=r.settings;if(v.urlconverter_callback){return r.execCallback("urlconverter_callback",q,x,true,y)}if(!v.convert_urls||(x&&x.nodeName=="LINK")||q.indexOf("file:")===0){return q}if(v.relative_urls){return r.documentBaseURI.toRelative(q)}q=r.documentBaseURI.toAbsolute(q,v.remove_script_host);return q},addVisual:function(u){var q=this,r=q.settings;u=u||q.getBody();if(!d(q.hasVisual)){q.hasVisual=r.visual}i(q.dom.select("table,a",u),function(t){var s;switch(t.nodeName){case"TABLE":s=q.dom.getAttrib(t,"border");if(!s||s=="0"){if(q.hasVisual){q.dom.addClass(t,r.visual_table_class)}else{q.dom.removeClass(t,r.visual_table_class)}}return;case"A":s=q.dom.getAttrib(t,"name");if(s){if(q.hasVisual){q.dom.addClass(t,"mceItemAnchor")}else{q.dom.removeClass(t,"mceItemAnchor")}}return}});q.onVisualAid.dispatch(q,u,q.hasVisual)},remove:function(){var q=this,r=q.getContainer();if(!q.removed){q.removed=1;q.hide();if(!q.settings.content_editable){k.clear(q.getWin());k.clear(q.getDoc())}k.clear(q.getBody());k.clear(q.formElement);k.unbind(r);q.execCallback("remove_instance_callback",q);q.onRemove.dispatch(q);q.onExecCommand.listeners=[];n.remove(q);o.remove(r)}},destroy:function(r){var q=this;if(q.destroyed){return}if(a){k.unbind(q.getDoc());k.unbind(q.getWin());k.unbind(q.getBody())}if(!r){n.removeUnload(q.destroy);tinyMCE.onBeforeUnload.remove(q._beforeUnload);if(q.theme&&q.theme.destroy){q.theme.destroy()}q.controlManager.destroy();q.selection.destroy();q.dom.destroy()}if(q.formElement){q.formElement.submit=q.formElement._mceOldSubmit;q.formElement._mceOldSubmit=null}q.contentAreaContainer=q.formElement=q.container=q.settings.content_element=q.bodyElement=q.contentDocument=q.contentWindow=null;if(q.selection){q.selection=q.selection.win=q.selection.dom=q.selection.dom.doc=null}q.destroyed=1},_addEvents:function(){var B=this,u,C=B.settings,r=B.dom,y={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function q(t,D){var s=t.type;if(B.removed){return}if(B.onEvent.dispatch(B,t,D)!==false){B[y[t.fakeType||t.type]].dispatch(B,t,D)}}i(y,function(t,s){switch(s){case"contextmenu":r.bind(B.getDoc(),s,q);break;case"paste":r.bind(B.getBody(),s,function(D){q(D)});break;case"submit":case"reset":r.bind(B.getElement().form||o.getParent(B.id,"form"),s,q);break;default:r.bind(C.content_editable?B.getBody():B.getDoc(),s,q)}});r.bind(C.content_editable?B.getBody():(a?B.getDoc():B.getWin()),"focus",function(s){B.focus(true)});if(n.isGecko){r.bind(B.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("data-mce-src"))){t.src=B.documentBaseURI.toAbsolute(s)}})}if(a){function v(){var E=this,G=E.getDoc(),F=E.settings;if(a&&!F.readonly){E._refreshContentEditable();try{G.execCommand("styleWithCSS",0,false)}catch(D){if(!E._isHidden()){try{G.execCommand("useCSS",0,true)}catch(D){}}}if(!F.table_inline_editing){try{G.execCommand("enableInlineTableEditing",false,false)}catch(D){}}if(!F.object_resizing){try{G.execCommand("enableObjectResizing",false,false)}catch(D){}}}}B.onBeforeExecCommand.add(v);B.onMouseDown.add(v)}B.onMouseUp.add(B.nodeChanged);B.onKeyUp.add(function(s,t){var D=t.keyCode;if((D>=33&&D<=36)||(D>=37&&D<=40)||D==13||D==45||D==46||D==8||(n.isMac&&(D==91||D==93))||t.ctrlKey){B.nodeChanged()}});B.onKeyDown.add(function(t,D){if(D.keyCode!=j.BACKSPACE){return}var s=t.selection.getRng();if(!s.collapsed){return}var F=s.startContainer;var E=s.startOffset;while(F&&F.nodeType&&F.nodeType!=1&&F.parentNode){F=F.parentNode}if(F&&F.parentNode&&F.parentNode.tagName==="BLOCKQUOTE"&&F.parentNode.firstChild==F&&E==0){t.formatter.toggle("blockquote",null,F.parentNode);s.setStart(F,0);s.setEnd(F,0);t.selection.setRng(s);t.selection.collapse(false)}});B.onReset.add(function(){B.setContent(B.startContent,{format:"raw"})});if(C.custom_shortcuts){if(C.custom_undo_redo_keyboard_shortcuts){B.addShortcut("ctrl+z",B.getLang("undo_desc"),"Undo");B.addShortcut("ctrl+y",B.getLang("redo_desc"),"Redo")}B.addShortcut("ctrl+b",B.getLang("bold_desc"),"Bold");B.addShortcut("ctrl+i",B.getLang("italic_desc"),"Italic");B.addShortcut("ctrl+u",B.getLang("underline_desc"),"Underline");for(u=1;u<=6;u++){B.addShortcut("ctrl+"+u,"",["FormatBlock",false,"h"+u])}B.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);B.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);B.addShortcut("ctrl+9","",["FormatBlock",false,"address"]);function x(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}i(B.shortcuts,function(D){if(n.isMac&&D.ctrl!=t.metaKey){return}else{if(!n.isMac&&D.ctrl!=t.ctrlKey){return}}if(D.alt!=t.altKey){return}if(D.shift!=t.shiftKey){return}if(t.keyCode==D.keyCode||(t.charCode&&t.charCode==D.charCode)){s=D;return false}});return s}B.onKeyUp.add(function(s,t){var D=x(t);if(D){return k.cancel(t)}});B.onKeyPress.add(function(s,t){var D=x(t);if(D){return k.cancel(t)}});B.onKeyDown.add(function(s,t){var D=x(t);if(D){D.func.call(D.scope);return k.cancel(t)}})}if(n.isIE){r.bind(B.getDoc(),"controlselect",function(D){var t=B.resizeInfo,s;D=D.target;if(D.nodeName!=="IMG"){return}if(t){r.unbind(t.node,t.ev,t.cb)}if(!r.hasClass(D,"mceItemNoResize")){ev="resizeend";s=r.bind(D,ev,function(F){var E;F=F.target;if(E=r.getStyle(F,"width")){r.setAttrib(F,"width",E.replace(/[^0-9%]+/g,""));r.setStyle(F,"width","")}if(E=r.getStyle(F,"height")){r.setAttrib(F,"height",E.replace(/[^0-9%]+/g,""));r.setStyle(F,"height","")}})}else{ev="resizestart";s=r.bind(D,"resizestart",k.cancel,k)}t=B.resizeInfo={node:D,ev:ev,cb:s}})}if(n.isOpera){B.onClick.add(function(s,t){k.prevent(t)})}if(C.custom_undo_redo){function A(){B.undoManager.typing=false;B.undoManager.add()}var z=n.isGecko?"blur":"focusout";r.bind(B.getDoc(),z,function(s){if(!B.removed&&B.undoManager.typing){A()}});B.dom.bind(B.dom.getRoot(),"dragend",function(s){A()});B.onKeyUp.add(function(s,D){var t=D.keyCode;if((t>=33&&t<=36)||(t>=37&&t<=40)||t==13||t==45||D.ctrlKey){A()}});B.onKeyDown.add(function(s,E){var D=E.keyCode,t;if(D==8){t=B.getDoc().selection;if(t&&t.createRange&&t.createRange().item){B.undoManager.beforeChange();s.dom.remove(t.createRange().item(0));A();return k.cancel(E)}}if((D>=33&&D<=36)||(D>=37&&D<=40)||D==13||D==45){if(n.isIE&&D==13){B.undoManager.beforeChange()}if(B.undoManager.typing){A()}return}if((D<16||D>20)&&D!=224&&D!=91&&!B.undoManager.typing){B.undoManager.beforeChange();B.undoManager.typing=true;B.undoManager.add()}});B.onMouseDown.add(function(){if(B.undoManager.typing){A()}})}},_refreshContentEditable:function(){var r=this,q,s;if(r._isHidden()){q=r.getBody();s=q.parentNode;s.removeChild(q);s.appendChild(q);q.focus()}},_isHidden:function(){var q;if(!a){return 0}q=this.selection.getSel();return(!q||!q.rangeCount||q.rangeCount==0)}})})(tinymce);(function(c){var d=c.each,e,a=true,b=false;c.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return b}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return b}function u(v,x){x=x||"exec";d(v,function(z,y){d(y.toLowerCase().split(","),function(A){j[x][A]=z})})}c.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===e){x=b}if(v===e){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:e)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);d("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=c.explode(k.font_size_style_values);v=c.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return b}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new c.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=n.selection.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=c.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){if(!k.forced_root_block&&!m.getParent(p.getNode(),m.isBlock)){q.apply("div")}d(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();v.setStart(x,0);v.setEnd(x,x.childNodes.length);n.selection.setRng(v)}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[p.getNode()]:p.getSelectedBlocks();var y=c.map(v,function(A){return !!q.matchNode(A,x)});return c.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(v){return m.getParent(p.getNode(),v=="insertunorderedlist"?"UL":"OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");if(k.custom_undo_redo){u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(f){var d,e=0,h=[],c;function g(){return b.trim(f.getContent({format:"raw",no_events:1}).replace(/<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}return d={typing:false,onAdd:new a(d),onUndo:new a(d),onRedo:new a(d),beforeChange:function(){c=f.selection.getBookmark(2,true)},add:function(m){var j,k=f.settings,l;m=m||{};m.content=g();l=h[e];if(l&&l.content==m.content){return null}if(h[e]){h[e].beforeBookmark=c}if(k.custom_undo_redo_levels){if(h.length>k.custom_undo_redo_levels){for(j=0;j<h.length-1;j++){h[j]=h[j+1]}h.length--;e=h.length}}m.bookmark=f.selection.getBookmark(2,true);if(e<h.length-1){h.length=e+1}h.push(m);e=h.length-1;d.onAdd.dispatch(d,m);f.isNotDirty=0;return m},undo:function(){var k,j;if(d.typing){d.add();d.typing=false}if(e>0){k=h[--e];f.setContent(k.content,{format:"raw"});f.selection.moveToBookmark(k.beforeBookmark);d.onUndo.dispatch(d,k)}return k},redo:function(){var i;if(e<h.length-1){i=h[++e];f.setContent(i.content,{format:"raw"});f.selection.moveToBookmark(i.bookmark);d.onRedo.dispatch(d,i)}return i},clear:function(){h=[];e=0;d.typing=false},hasUndo:function(){return e>0||this.typing},hasRedo:function(){return e<h.length-1&&!this.typing}}}})(tinymce);tinymce.ForceBlocks=function(c){var b=c.settings,e=c.dom,a=c.selection,d=c.schema.getBlockElements();if(b.forced_root_block){function f(){var j=a.getStart(),h=c.getBody(),g,k,o,q,p,i,l,m=-16777215;if(!j||j.nodeType!==1||!b.forced_root_block){return}while(j!=h){if(d[j.nodeName]){return}j=j.parentNode}g=a.getRng();if(g.setStart){k=g.startContainer;o=g.startOffset;q=g.endContainer;p=g.endOffset}else{if(g.item){j=g.item(0);g=c.getDoc().body.createTextRange();g.moveToElementText(j)}tmpRng=g.duplicate();tmpRng.collapse(true);o=tmpRng.move("character",m)*-1;if(!tmpRng.collapsed){tmpRng=g.duplicate();tmpRng.collapse(false);p=(tmpRng.move("character",m)*-1)-o}}for(j=h.firstChild;j;j){if(j.nodeType===3||(j.nodeType==1&&!d[j.nodeName])){if(!i){i=e.create(b.forced_root_block);j.parentNode.insertBefore(i,j)}l=j;j=j.nextSibling;i.appendChild(l)}else{i=null;j=j.nextSibling}}if(g.setStart){g.setStart(k,o);g.setEnd(q,p);a.setRng(g)}else{try{g=c.getDoc().body.createTextRange();g.moveToElementText(h);g.collapse(true);g.moveStart("character",o);if(p>0){g.moveEnd("character",p)}g.select()}catch(n){}}c.nodeChanged()}c.onKeyUp.add(f);c.onClick.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(f,n,h){var l=this,j=l.editor,i,k,m;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,scope:n.scope,control_manager:l},n);f=l.prefix+f;function g(o){return o.settings.use_accessible_selects&&!c.isGecko}if(j.settings.use_native_selects||g(j)){k=new c.ui.NativeListBox(f,n)}else{m=h||l._cls.listbox||c.ui.ListBox;k=new m(f,n,j)}l.controls[f]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){j.bookmark=j.selection.getBookmark(1)});a.add(o,"focus",function(){j.selection.moveToBookmark(j.bookmark);j.bookmark=null})})}if(k.hideMenu){j.onMouseDown.add(k.hideMenu,k)}return l.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(W){var N={},Q=a.each,c=W.dom,q=W.selection,t=a.dom.TreeWalker,L=new a.dom.RangeUtils(c),d=W.schema.isValidChild,G=c.isBlock,l=W.settings.forced_root_block,s=c.nodeIndex,F=a.isGecko?"\u200B":"\uFEFF",e=/^(src|href|style)$/,T=false,C=true,p;function x(Y){var X=Y.getAttribute("data-mce-contenteditable");if(X&&X!=="inherit"){return X}return Y.contentEditable!=="inherit"?Y.contentEditable:null}function A(X){return X instanceof Array}function m(Y,X){return c.getParents(Y,X,c.getRoot())}function b(X){return X.nodeType===1&&X.id==="_mce_caret"}function S(X){return X?N[X]:N}function k(X,Y){if(X){if(typeof(X)!=="string"){Q(X,function(aa,Z){k(Z,aa)})}else{Y=Y.length?Y:[Y];Q(Y,function(Z){if(Z.deep===p){Z.deep=!Z.selector}if(Z.split===p){Z.split=!Z.selector||Z.inline}if(Z.remove===p&&Z.selector&&!Z.inline){Z.remove="none"}if(Z.selector&&Z.inline){Z.mixed=true;Z.block_expand=true}if(typeof(Z.classes)==="string"){Z.classes=Z.classes.split(/\s+/)}});N[X]=Y}}}var i=function(Y){var X;W.dom.getParent(Y,function(Z){X=W.dom.getStyle(Z,"text-decoration");return X&&X!=="none"});return X};var J=function(X){var Y;if(X.nodeType===1&&X.parentNode&&X.parentNode.nodeType===1){Y=i(X.parentNode);if(W.dom.getStyle(X,"color")&&Y){W.dom.setStyle(X,"text-decoration",Y)}else{if(W.dom.getStyle(X,"textdecoration")===Y){W.dom.setStyle(X,"text-decoration",null)}}}};function U(aa,ah,ac){var ad=S(aa),ai=ad[0],ag,Y,af,ae=q.isCollapsed();function X(am,al){al=al||ai;if(am){if(al.onformat){al.onformat(am,al,ah,ac)}Q(al.styles,function(ao,an){c.setStyle(am,an,r(ao,ah))});Q(al.attributes,function(ao,an){c.setAttrib(am,an,r(ao,ah))});Q(al.classes,function(an){an=r(an,ah);if(!c.hasClass(am,an)){c.addClass(am,an)}})}}function ab(){function an(au,ar){var at=new t(ar);for(ac=at.current();ac;ac=at.prev()){if(ac.childNodes.length>1||ac==au){return ac}}}var am=W.selection.getRng();var aq=am.startContainer;var al=am.endContainer;if(aq!=al&&am.endOffset==0){var ap=an(aq,al);var ao=ap.nodeType==3?ap.length:ap.childNodes.length;am.setEnd(ap,ao)}return am}function Z(ao,au,ar,aq,am){var al=[],an=-1,at,aw=-1,ap=-1,av;Q(ao.childNodes,function(ay,ax){if(ay.nodeName==="UL"||ay.nodeName==="OL"){an=ax;at=ay;return false}});Q(ao.childNodes,function(ay,ax){if(ay.nodeName==="SPAN"&&c.getAttrib(ay,"data-mce-type")=="bookmark"){if(ay.id==au.id+"_start"){aw=ax}else{if(ay.id==au.id+"_end"){ap=ax}}}});if(an<=0||(aw<an&&ap>an)){Q(a.grep(ao.childNodes),am);return 0}else{av=c.clone(ar,T);Q(a.grep(ao.childNodes),function(ay,ax){if((aw<an&&ax<an)||(aw>an&&ax>an)){al.push(ay);ay.parentNode.removeChild(ay)}});if(aw<an){ao.insertBefore(av,at)}else{if(aw>an){ao.insertBefore(av,at.nextSibling)}}aq.push(av);Q(al,function(ax){av.appendChild(ax)});return av}}function aj(am,ao,ar){var al=[],aq,an,ap=true;aq=ai.inline||ai.block;an=c.create(aq);X(an);L.walk(am,function(at){var au;function av(aw){var aB,az,ax,ay,aA;aA=ap;aB=aw.nodeName.toLowerCase();az=aw.parentNode.nodeName.toLowerCase();if(aw.nodeType===1&&x(aw)){aA=ap;ap=x(aw)==="true";ay=true}if(g(aB,"br")){au=0;if(ai.block){c.remove(aw)}return}if(ai.wrapper&&y(aw,aa,ah)){au=0;return}if(ap&&!ay&&ai.block&&!ai.wrapper&&H(aB)){aw=c.rename(aw,aq);X(aw);al.push(aw);au=0;return}if(ai.selector){Q(ad,function(aC){if("collapsed" in aC&&aC.collapsed!==ae){return}if(c.is(aw,aC.selector)&&!b(aw)){X(aw,aC);ax=true}});if(!ai.inline||ax){au=0;return}}if(ap&&!ay&&d(aq,aB)&&d(az,aq)&&!(!ar&&aw.nodeType===3&&aw.nodeValue.length===1&&aw.nodeValue.charCodeAt(0)===65279)&&!b(aw)){if(!au){au=c.clone(an,T);aw.parentNode.insertBefore(au,aw);al.push(au)}au.appendChild(aw)}else{if(aB=="li"&&ao){au=Z(aw,ao,an,al,av)}else{au=0;Q(a.grep(aw.childNodes),av);if(ay){ap=aA}au=0}}}Q(at,av)});if(ai.wrap_links===false){Q(al,function(at){function au(ay){var ax,aw,av;if(ay.nodeName==="A"){aw=c.clone(an,T);al.push(aw);av=a.grep(ay.childNodes);for(ax=0;ax<av.length;ax++){aw.appendChild(av[ax])}ay.appendChild(aw)}Q(a.grep(ay.childNodes),au)}au(at)})}Q(al,function(av){var at;function aw(ay){var ax=0;Q(ay.childNodes,function(az){if(!f(az)&&!I(az)){ax++}});return ax}function au(ax){var az,ay;Q(ax.childNodes,function(aA){if(aA.nodeType==1&&!I(aA)&&!b(aA)){az=aA;return T}});if(az&&h(az,ai)){ay=c.clone(az,T);X(ay);c.replace(ay,ax,C);c.remove(az,1)}return ay||ax}at=aw(av);if((al.length>1||!G(av))&&at===0){c.remove(av,1);return}if(ai.inline||ai.wrapper){if(!ai.exact&&at===1){av=au(av)}Q(ad,function(ax){Q(c.select(ax.inline,av),function(az){var ay;if(ax.wrap_links===false){ay=az.parentNode;do{if(ay.nodeName==="A"){return}}while(ay=ay.parentNode)}V(ax,ah,az,ax.exact?az:null)})});if(y(av.parentNode,aa,ah)){c.remove(av,1);av=0;return C}if(ai.merge_with_parents){c.getParent(av.parentNode,function(ax){if(y(ax,aa,ah)){c.remove(av,1);av=0;return C}})}if(av&&ai.merge_siblings!==false){av=u(D(av),av);av=u(av,D(av,C))}}})}if(ai){if(ac){if(ac.nodeType){Y=c.createRng();Y.setStartBefore(ac);Y.setEndAfter(ac);aj(o(Y,ad),null,true)}else{aj(ac,null,true)}}else{if(!ae||!ai.inline||c.select("td.mceSelected,th.mceSelected").length){var ak=W.selection.getNode();if(!l&&ad[0].defaultBlock&&!c.getParent(ak,c.isBlock)){U(ad[0].defaultBlock)}W.selection.setRng(ab());ag=q.getBookmark();aj(o(q.getRng(C),ad),ag);if(ai.styles&&(ai.styles.color||ai.styles.textDecoration)){a.walk(ak,J,"childNodes");J(ak)}q.moveToBookmark(ag);O(q.getRng(C));W.nodeChanged()}else{R("apply",aa,ah)}}}}function B(Z,ai,ab){var ac=S(Z),ak=ac[0],ag,af,Y,ah=true;function aa(aq){var ap,ao,an,am,at,ar;if(aq.nodeType===1&&x(aq)){at=ah;ah=x(aq)==="true";ar=true}ap=a.grep(aq.childNodes);if(ah&&!ar){for(ao=0,an=ac.length;ao<an;ao++){if(V(ac[ao],ai,aq,aq)){break}}}if(ak.deep){if(ap.length){for(ao=0,an=ap.length;ao<an;ao++){aa(ap[ao])}if(ar){ah=at}}}}function ad(am){var an;Q(m(am.parentNode).reverse(),function(ao){var ap;if(!an&&ao.id!="_start"&&ao.id!="_end"){ap=y(ao,Z,ai);if(ap&&ap.split!==false){an=ao}}});return an}function X(ap,am,ar,av){var aw,au,at,ao,aq,an;if(ap){an=ap.parentNode;for(aw=am.parentNode;aw&&aw!=an;aw=aw.parentNode){au=c.clone(aw,T);for(aq=0;aq<ac.length;aq++){if(V(ac[aq],ai,au,au)){au=0;break}}if(au){if(at){au.appendChild(at)}if(!ao){ao=au}at=au}}if(av&&(!ak.mixed||!G(ap))){am=c.split(ap,am)}if(at){ar.parentNode.insertBefore(at,ar);ao.appendChild(ar)}}return am}function aj(am){return X(ad(am),am,am,true)}function ae(ao){var an=c.get(ao?"_start":"_end"),am=an[ao?"firstChild":"lastChild"];if(I(am)){am=am[ao?"firstChild":"lastChild"]}c.remove(an,true);return am}function al(am){var an,ao;am=o(am,ac,C);if(ak.split){an=K(am,C);ao=K(am);if(an!=ao){an=P(an,"span",{id:"_start","data-mce-type":"bookmark"});ao=P(ao,"span",{id:"_end","data-mce-type":"bookmark"});aj(an);aj(ao);an=ae(C);ao=ae()}else{an=ao=aj(an)}am.startContainer=an.parentNode;am.startOffset=s(an);am.endContainer=ao.parentNode;am.endOffset=s(ao)+1}L.walk(am,function(ap){Q(ap,function(aq){aa(aq);if(aq.nodeType===1&&W.dom.getStyle(aq,"text-decoration")==="underline"&&aq.parentNode&&i(aq.parentNode)==="underline"){V({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,aq)}})})}if(ab){if(ab.nodeType){Y=c.createRng();Y.setStartBefore(ab);Y.setEndAfter(ab);al(Y)}else{al(ab)}return}if(!q.isCollapsed()||!ak.inline||c.select("td.mceSelected,th.mceSelected").length){ag=q.getBookmark();al(q.getRng(C));q.moveToBookmark(ag);if(ak.inline&&j(Z,ai,q.getStart())){O(q.getRng(true))}W.nodeChanged()}else{R("remove",Z,ai)}}function E(Y,aa,Z){var X=S(Y);if(j(Y,aa,Z)&&(!("toggle" in X[0])||X[0]["toggle"])){B(Y,aa,Z)}else{U(Y,aa,Z)}}function y(Y,X,ad,ab){var Z=S(X),ae,ac,aa;function af(aj,al,am){var ai,ak,ag=al[am],ah;if(al.onmatch){return al.onmatch(aj,al,am)}if(ag){if(ag.length===p){for(ai in ag){if(ag.hasOwnProperty(ai)){if(am==="attributes"){ak=c.getAttrib(aj,ai)}else{ak=M(aj,ai)}if(ab&&!ak&&!al.exact){return}if((!ab||al.exact)&&!g(ak,r(ag[ai],ad))){return}}}}else{for(ah=0;ah<ag.length;ah++){if(am==="attributes"?c.getAttrib(aj,ag[ah]):M(aj,ag[ah])){return al}}}}return al}if(Z&&Y){for(ac=0;ac<Z.length;ac++){ae=Z[ac];if(h(Y,ae)&&af(Y,ae,"attributes")&&af(Y,ae,"styles")){if(aa=ae.classes){for(ac=0;ac<aa.length;ac++){if(!c.hasClass(Y,aa[ac])){return}}}return ae}}}}function j(Z,ab,aa){var Y;function X(ac){ac=c.getParent(ac,function(ad){return !!y(ad,Z,ab,true)});return y(ac,Z,ab)}if(aa){return X(aa)}aa=q.getNode();if(X(aa)){return C}Y=q.getStart();if(Y!=aa){if(X(Y)){return C}}return T}function v(ae,ad){var ab,ac=[],aa={},Z,Y,X;ab=q.getStart();c.getParent(ab,function(ah){var ag,af;for(ag=0;ag<ae.length;ag++){af=ae[ag];if(!aa[af]&&y(ah,af,ad)){aa[af]=true;ac.push(af)}}});return ac}function z(ab){var ad=S(ab),aa,Z,ac,Y,X;if(ad){aa=q.getStart();Z=m(aa);for(Y=ad.length-1;Y>=0;Y--){X=ad[Y].selector;if(!X){return C}for(ac=Z.length-1;ac>=0;ac--){if(c.is(Z[ac],X)){return C}}}}return T}a.extend(this,{get:S,register:k,apply:U,remove:B,toggle:E,match:j,matchAll:v,matchNode:y,canApply:z});function h(X,Y){if(g(X,Y.inline)){return C}if(g(X,Y.block)){return C}if(Y.selector){return c.is(X,Y.selector)}}function g(Y,X){Y=Y||"";X=X||"";Y=""+(Y.nodeName||Y);X=""+(X.nodeName||X);return Y.toLowerCase()==X.toLowerCase()}function M(Y,X){var Z=c.getStyle(Y,X);if(X=="color"||X=="backgroundColor"){Z=c.toHex(Z)}if(X=="fontWeight"&&Z==700){Z="bold"}return""+Z}function r(X,Y){if(typeof(X)!="string"){X=X(Y)}else{if(Y){X=X.replace(/%(\w+)/g,function(aa,Z){return Y[Z]||aa})}}return X}function f(X){return X&&X.nodeType===3&&/^([\t \r\n]+|)$/.test(X.nodeValue)}function P(Z,Y,X){var aa=c.create(Y,X);Z.parentNode.insertBefore(aa,Z);aa.appendChild(Z);return aa}function o(X,ai,aa){var al,aj,ad,Z=X.startContainer,ae=X.startOffset,an=X.endContainer,ag=X.endOffset,al,aj,ad,ah;function ak(au){var ao,ar,at,aq,ap;ao=ar=au?Z:an;ap=au?"previousSibling":"nextSibling";root=c.getRoot();if(ao.nodeType==3&&!f(ao)){if(au?ae>0:ag<ao.nodeValue.length){return ao}}for(;;){if(!ai[0].block_expand&&G(ar)){return ar}for(aq=ar[ap];aq;aq=aq[ap]){if(!I(aq)&&!f(aq)){return ar}}if(ar.parentNode==root){ao=ar;break}ar=ar.parentNode}return ao}function ac(ao,ap){if(ap===p){ap=ao.nodeType===3?ao.length:ao.childNodes.length}while(ao&&ao.hasChildNodes()){ao=ao.childNodes[ap];if(ao){ap=ao.nodeType===3?ao.length:ao.childNodes.length}}return{node:ao,offset:ap}}if(Z.nodeType==1&&Z.hasChildNodes()){aj=Z.childNodes.length-1;Z=Z.childNodes[ae>aj?aj:ae];if(Z.nodeType==3){ae=0}}if(an.nodeType==1&&an.hasChildNodes()){aj=an.childNodes.length-1;an=an.childNodes[ag>aj?aj:ag-1];if(an.nodeType==3){ag=an.nodeValue.length}}function am(ap){var ao=ap;while(ao){if(ao.nodeType===1&&x(ao)){return x(ao)==="false"?ao:ap}ao=ao.parentNode}return ap}Z=am(Z);an=am(an);if(I(Z.parentNode)||I(Z)){Z=I(Z)?Z:Z.parentNode;Z=Z.nextSibling||Z;if(Z.nodeType==3){ae=0}}if(I(an.parentNode)||I(an)){an=I(an)?an:an.parentNode;an=an.previousSibling||an;if(an.nodeType==3){ag=an.length}}if(ai[0].inline){if(X.collapsed){function af(ap,au,aw){var at,aq,av,ao;function ar(ay,aA){var aB,ax,az=ay.nodeValue;if(typeof(aA)=="undefined"){aA=aw?az.length:0}if(aw){aB=az.lastIndexOf(" ",aA);ax=az.lastIndexOf("\u00a0",aA);aB=aB>ax?aB:ax;if(aB!==-1&&!aa){aB++}}else{aB=az.indexOf(" ",aA);ax=az.indexOf("\u00a0",aA);aB=aB!==-1&&(ax===-1||aB<ax)?aB:ax}return aB}if(ap.nodeType===3){av=ar(ap,au);if(av!==-1){return{container:ap,offset:av}}ao=ap}at=new t(ap,c.getParent(ap,G)||W.getBody());while(aq=at[aw?"prev":"next"]()){if(aq.nodeType===3){ao=aq;av=ar(aq);if(av!==-1){return{container:aq,offset:av}}}else{if(G(aq)){break}}}if(ao){if(aw){au=0}else{au=ao.length}return{container:ao,offset:au}}}ah=af(Z,ae,true);if(ah){Z=ah.container;ae=ah.offset}ah=af(an,ag);if(ah){an=ah.container;ag=ah.offset}}ad=ac(an,ag);if(ad.node){while(ad.node&&ad.offset===0&&ad.node.previousSibling){ad=ac(ad.node.previousSibling)}if(ad.node&&ad.offset>0&&ad.node.nodeType===3&&ad.node.nodeValue.charAt(ad.offset-1)===" "){if(ad.offset>1){an=ad.node;an.splitText(ad.offset-1)}else{if(ad.node.previousSibling){}}}}}if(ai[0].inline||ai[0].block_expand){if(!ai[0].inline||(Z.nodeType!=3||ae===0)){Z=ak(true)}if(!ai[0].inline||(an.nodeType!=3||ag===an.nodeValue.length)){an=ak()}}if(ai[0].selector&&ai[0].expand!==T&&!ai[0].inline){function ab(ap,ao){var aq,ar,au,at;if(ap.nodeType==3&&ap.nodeValue.length==0&&ap[ao]){ap=ap[ao]}aq=m(ap);for(ar=0;ar<aq.length;ar++){for(au=0;au<ai.length;au++){at=ai[au];if("collapsed" in at&&at.collapsed!==X.collapsed){continue}if(c.is(aq[ar],at.selector)){return aq[ar]}}}return ap}Z=ab(Z,"previousSibling");an=ab(an,"nextSibling")}if(ai[0].block||ai[0].selector){function Y(ap,ao,ar){var aq;if(!ai[0].wrapper){aq=c.getParent(ap,ai[0].block)}if(!aq){aq=c.getParent(ap.nodeType==3?ap.parentNode:ap,G)}if(aq&&ai[0].wrapper){aq=m(aq,"ul,ol").reverse()[0]||aq}if(!aq){aq=ap;while(aq[ao]&&!G(aq[ao])){aq=aq[ao];if(g(aq,"br")){break}}}return aq||ap}Z=Y(Z,"previousSibling");an=Y(an,"nextSibling");if(ai[0].block){if(!G(Z)){Z=ak(true)}if(!G(an)){an=ak()}}}if(Z.nodeType==1){ae=s(Z);Z=Z.parentNode}if(an.nodeType==1){ag=s(an)+1;an=an.parentNode}return{startContainer:Z,startOffset:ae,endContainer:an,endOffset:ag}}function V(ad,ac,aa,X){var Z,Y,ab;if(!h(aa,ad)){return T}if(ad.remove!="all"){Q(ad.styles,function(af,ae){af=r(af,ac);if(typeof(ae)==="number"){ae=af;X=0}if(!X||g(M(X,ae),af)){c.setStyle(aa,ae,"")}ab=1});if(ab&&c.getAttrib(aa,"style")==""){aa.removeAttribute("style");aa.removeAttribute("data-mce-style")}Q(ad.attributes,function(ag,ae){var af;ag=r(ag,ac);if(typeof(ae)==="number"){ae=ag;X=0}if(!X||g(c.getAttrib(X,ae),ag)){if(ae=="class"){ag=c.getAttrib(aa,ae);if(ag){af="";Q(ag.split(/\s+/),function(ah){if(/mce\w+/.test(ah)){af+=(af?" ":"")+ah}});if(af){c.setAttrib(aa,ae,af);return}}}if(ae=="class"){aa.removeAttribute("className")}if(e.test(ae)){aa.removeAttribute("data-mce-"+ae)}aa.removeAttribute(ae)}});Q(ad.classes,function(ae){ae=r(ae,ac);if(!X||c.hasClass(X,ae)){c.removeClass(aa,ae)}});Y=c.getAttribs(aa);for(Z=0;Z<Y.length;Z++){if(Y[Z].nodeName.indexOf("_")!==0){return T}}}if(ad.remove!="none"){n(aa,ad);return C}}function n(Z,aa){var X=Z.parentNode,Y;if(aa.block){if(!l){function ab(ad,ac,ae){ad=D(ad,ac,ae);return !ad||(ad.nodeName=="BR"||G(ad))}if(G(Z)&&!G(X)){if(!ab(Z,T)&&!ab(Z.firstChild,C,1)){Z.insertBefore(c.create("br"),Z.firstChild)}if(!ab(Z,C)&&!ab(Z.lastChild,T,1)){Z.appendChild(c.create("br"))}}}else{if(X==c.getRoot()){if(!aa.list_block||!g(Z,aa.list_block)){Q(a.grep(Z.childNodes),function(ac){if(d(l,ac.nodeName.toLowerCase())){if(!Y){Y=P(ac,l)}else{Y.appendChild(ac)}}else{Y=0}})}}}}if(aa.selector&&aa.inline&&!g(aa.inline,Z)){return}c.remove(Z,1)}function D(Y,X,Z){if(Y){X=X?"nextSibling":"previousSibling";for(Y=Z?Y:Y[X];Y;Y=Y[X]){if(Y.nodeType==1||!f(Y)){return Y}}}}function I(X){return X&&X.nodeType==1&&X.getAttribute("data-mce-type")=="bookmark"}function u(ab,aa){var X,Z,Y;function ad(ag,af){if(ag.nodeName!=af.nodeName){return T}function ae(ai){var aj={};Q(c.getAttribs(ai),function(ak){var al=ak.nodeName.toLowerCase();if(al.indexOf("_")!==0&&al!=="style"){aj[al]=c.getAttrib(ai,al)}});return aj}function ah(al,ak){var aj,ai;for(ai in al){if(al.hasOwnProperty(ai)){aj=ak[ai];if(aj===p){return T}if(al[ai]!=aj){return T}delete ak[ai]}}for(ai in ak){if(ak.hasOwnProperty(ai)){return T}}return C}if(!ah(ae(ag),ae(af))){return T}if(!ah(c.parseStyle(c.getAttrib(ag,"style")),c.parseStyle(c.getAttrib(af,"style")))){return T}return C}if(ab&&aa){function ac(af,ae){for(Z=af;Z;Z=Z[ae]){if(Z.nodeType==3&&Z.nodeValue.length!==0){return af}if(Z.nodeType==1&&!I(Z)){return Z}}return af}ab=ac(ab,"previousSibling");aa=ac(aa,"nextSibling");if(ad(ab,aa)){for(Z=ab.nextSibling;Z&&Z!=aa;){Y=Z;Z=Z.nextSibling;ab.appendChild(Y)}c.remove(aa);Q(a.grep(aa.childNodes),function(ae){ab.appendChild(ae)});return ab}}return aa}function H(X){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(X)}function K(Y,ac){var X,ab,Z,aa;X=Y[ac?"startContainer":"endContainer"];ab=Y[ac?"startOffset":"endOffset"];if(X.nodeType==1){Z=X.childNodes.length-1;if(!ac&&ab){ab--}X=X.childNodes[ab>Z?Z:ab]}if(X.nodeType===3&&ac&&ab>=X.nodeValue.length){X=new t(X,W.getBody()).next()||X}if(X.nodeType===3&&!ac&&ab==0){X=new t(X,W.getBody()).prev()||X}return X}function R(ag,X,ae){var ah="_mce_caret",Y=W.settings.caret_debug;function Z(ak){var aj=c.create("span",{id:ah,"data-mce-bogus":true,style:Y?"color:red":""});if(ak){aj.appendChild(W.getDoc().createTextNode(F))}return aj}function af(ak,aj){while(ak){if((ak.nodeType===3&&ak.nodeValue!==F)||ak.childNodes.length>1){return false}if(aj&&ak.nodeType===1){aj.push(ak)}ak=ak.firstChild}return true}function ac(aj){while(aj){if(aj.id===ah){return aj}aj=aj.parentNode}}function ab(aj){var ak;if(aj){ak=new t(aj,aj);for(aj=ak.current();aj;aj=ak.next()){if(aj.nodeType===3){return aj}}}}function aa(al,ak){var am,aj;if(!al){al=ac(q.getStart());if(!al){while(al=c.get(ah)){aa(al,false)}}}else{aj=q.getRng(true);if(af(al)){if(ak!==false){aj.setStartBefore(al);aj.setEndBefore(al)}c.remove(al)}else{am=ab(al);if(am.nodeValue.charAt(0)===F){am=am.deleteData(0,1)}c.remove(al,1)}q.setRng(aj)}}function ad(){var al,aj,ap,ao,am,ak,an;al=q.getRng(true);ao=al.startOffset;ak=al.startContainer;an=ak.nodeValue;aj=ac(q.getStart());if(aj){ap=ab(aj)}if(an&&ao>0&&ao<an.length&&/\w/.test(an.charAt(ao))&&/\w/.test(an.charAt(ao-1))){am=q.getBookmark();al.collapse(true);al=o(al,S(X));al=L.split(al);U(X,ae,al);q.moveToBookmark(am)}else{if(!aj||ap.nodeValue!==F){aj=Z(true);ap=aj.firstChild;al.insertNode(aj);ao=1;U(X,ae,aj)}else{U(X,ae,aj)}q.setCursorLocation(ap,ao)}}function ai(){var aj=q.getRng(true),ak,am,ap,ao,al,at,ar=[],an,aq;ak=aj.startContainer;am=aj.startOffset;al=ak;if(ak.nodeType==3){if(am!=ak.nodeValue.length||ak.nodeValue===F){ao=true}al=al.parentNode}while(al){if(y(al,X,ae)){at=al;break}if(al.nextSibling){ao=true}ar.push(al);al=al.parentNode}if(!at){return}if(ao){ap=q.getBookmark();aj.collapse(true);aj=o(aj,S(X),true);aj=L.split(aj);B(X,ae,aj);q.moveToBookmark(ap)}else{aq=Z();al=aq;for(an=ar.length-1;an>=0;an--){al.appendChild(c.clone(ar[an],false));al=al.firstChild}al.appendChild(c.doc.createTextNode(F));al=al.firstChild;c.insertAfter(aq,at);q.setCursorLocation(al,1)}}if(!self._hasCaretEvents){W.onBeforeGetContent.addToTop(function(){var aj=[],ak;if(af(ac(q.getStart()),aj)){ak=aj.length;while(ak--){c.setAttrib(aj[ak],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(aj){W[aj].addToTop(function(){aa()})});W.onKeyDown.addToTop(function(aj,al){var ak=al.keyCode;if(ak==8||ak==37||ak==39){aa(ac(q.getStart()))}});self._hasCaretEvents=true}if(ag=="apply"){ad()}else{ai()}}function O(Y){var X=Y.startContainer,ad=Y.startOffset,ac,ab,Z,aa;if(X.nodeType==3&&ad>=X.nodeValue.length){X=X.parentNode;ad=s(X)+1}if(X.nodeType==1){Z=X.childNodes;X=Z[Math.min(ad,Z.length-1)];ac=new t(X,c.getParent(X,c.isBlock));if(ad>Z.length-1){ac.next()}for(ab=ac.current();ab;ab=ac.next()){if(ab.nodeType==3&&!f(ab)){aa=c.create("a",null,F);ab.parentNode.insertBefore(aa,ab);Y.setStart(ab,0);q.setRng(Y);c.remove(aa);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_legacy_values);function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(e){var h=e.dom,d=e.selection,c=e.settings,g=e.undoManager;function f(x){var t=d.getRng(true),A,v,s,n,m,i,k,r,C,u;function z(E){return E&&h.isBlock(E)&&!/^(TD|TH|CAPTION)$/.test(E.nodeName)&&!/^(fixed|absolute)/i.test(E.style.position)}function l(F){var J,H,E,K,I,G=F;E=h.createRng();if(F.hasChildNodes()){J=new a(F,F);while(H=J.current()){if(H.nodeType==3){E.setStart(H,0);E.setEnd(H,0);break}if(/^(BR|IMG)$/.test(H.nodeName)){E.setStartBefore(H);E.setEndBefore(H);break}G=H;H=J.next()}if(!H){E.setStart(G,0);E.setEnd(G,0)}}else{if(F.nodeName=="BR"){E.setStartAfter(F);E.setEndAfter(F)}else{E.setStart(F,0);E.setEnd(F,0)}}d.setRng(E);I=h.getViewPort(e.getWin());K=h.getPos(F).y;if(K<I.y||K+25>I.y+I.h){e.getWin().scrollTo(0,K<I.y?K:K-I.h+25)}}function p(F){var G=v,I,H,E;I=F?h.create(F):n.cloneNode(false);E=I;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(G.nodeName)){H=G.cloneNode(false);h.setAttrib(H,"id","");if(I.hasChildNodes()){H.appendChild(I.firstChild);I.appendChild(H)}else{E=H;I.appendChild(H)}}}while(G=G.parentNode);if(!b.isIE){E.innerHTML="<br>"}return I}function o(G){var F,E;if(v.nodeType==3&&(G?s>0:s<v.nodeValue.length)){return false}F=new a(v,n);while(E=(G?F.prev():F.next())){if(E.nodeType===1){if(E.getAttribute("data-mce-bogus")){continue}name=E.nodeName.toLowerCase();if(name==="IMG"){return false}}else{if(E.nodeType===3&&!/^[ \t\r\n]*$/.test(E.nodeValue)){return false}}}return true}function j(E,J){var K,I,F,H,G;I=h.getParent(E,h.isBlock);if(u&&!x.shiftKey&&(!I||!z(I))){I=I||h.getRoot();if(!I.hasChildNodes()){K=h.create(u);I.appendChild(K);t.setStart(K,0);t.setEnd(K,0);return K}H=E;while(H.parentNode!=I){H=H.parentNode}while(H&&!h.isBlock(H)){F=H;H=H.previousSibling}if(F){K=h.create(u);F.parentNode.insertBefore(K,F);H=F;while(H&&!h.isBlock(H)){G=H.nextSibling;K.appendChild(H);H=G}t.setStart(E,J);t.setEnd(E,J)}}return E}function B(){function E(G){var F=k[G?"firstChild":"lastChild"];while(F){if(F.nodeType==1){break}F=F[G?"nextSibling":"previousSibling"]}return F===n}m=u?p(u):h.create("BR");if(E(true)&&E()){h.replace(m,k)}else{if(E(true)){k.parentNode.insertBefore(m,k)}else{if(E()){h.insertAfter(m,k)}else{A=t.cloneRange();A.setStartAfter(n);A.setEndAfter(k);i=A.extractContents();h.insertAfter(i,k);h.insertAfter(m,k)}}}h.remove(n);l(m);g.add()}function y(){var F=new a(v,n),E;while(E=F.current()){if(E.nodeName=="BR"){return true}E=F.next()}}function D(){var G,F,E;if(v&&v.nodeType==3&&s>=v.nodeValue.length){if(!b.isIE&&!y()){G=h.create("br");t.insertNode(G);t.setStartAfter(G);t.setEndAfter(G);F=true}}G=h.create("br");t.insertNode(G);E=h.doc.documentMode;if(b.isIE&&r=="PRE"&&(!E||E<8)){G.parentNode.insertBefore(h.doc.createTextNode("\r"),G)}if(!F){t.setStartAfter(G);t.setEndAfter(G)}else{t.setStartBefore(G);t.setEndBefore(G)}d.setRng(t);g.add()}function q(E){do{if(E.nodeType===3){E.nodeValue=E.nodeValue.replace(/^[\r\n]+/,"")}E=E.firstChild}while(E)}if(!t.collapsed){e.execCommand("Delete");return}if(x.isDefaultPrevented()){return}v=t.startContainer;s=t.startOffset;u=c.forced_root_block;u=u?u.toUpperCase():"";if(v.nodeType==1&&v.hasChildNodes()){v=v.childNodes[Math.min(s,v.childNodes.length-1)]||v;s=0}g.beforeChange();v=j(v,s);n=h.getParent(v,h.isBlock);k=n?h.getParent(n.parentNode,h.isBlock):null;r=n?n.nodeName.toUpperCase():"";C=k?k.nodeName.toUpperCase():"";if(r=="LI"&&h.isEmpty(n)){if(/^(UL|OL|LI)$/.test(k.parentNode.nodeName)){return false}B();return}if(r=="PRE"&&c.br_in_pre!==false){if(!x.shiftKey){D();return}}else{if((!u&&!x.shiftKey&&r!="LI")||(u&&x.shiftKey)){D();return}}u=u||"P";if(o()){if(/^(H[1-6]|PRE)$/.test(r)&&C!="HGROUP"){m=p(u)}else{m=p()}if(c.end_container_on_empty_block&&z(k)&&h.isEmpty(n)){m=h.split(k,n)}else{h.insertAfter(m,n)}}else{if(o(true)){m=n.parentNode.insertBefore(p(),n)}else{A=t.cloneRange();A.setEndAfter(n);i=A.extractContents();q(i);m=i.firstChild;h.insertAfter(i,n)}}h.setAttrib(m,"id","");l(m);g.add()}e.onKeyDown.add(function(j,i){if(i.keyCode==13){if(f(i)!==false){i.preventDefault()}}})}})(tinymce); \ No newline at end of file
+(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.0.1",releaseDate:"2012-05-10",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){r=f[m].href;if(r){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==b}if(f=="array"&&(g.hasOwnProperty&&g instanceof Array)){return true}return typeof(g)==f},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==b){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];c.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];c.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(n,k){var j,f,h,g=arguments,m;for(j=1,f=g.length;j<f;j++){k=g[j];for(h in k){if(k.hasOwnProperty(h)){m=k[h];if(m!==b){n[h]=m}}}}return n},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}c.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}c.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||e;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||e;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this,g;g=function(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(e.detachEvent){e.detachEvent("onbeforeunload",k);e.detachEvent("onunload",g)}else{if(e.removeEventListener){e.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(e.CollectGarbage){CollectGarbage()}}};function k(){var l=document;function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l.readyState=="interactive"){if(l){l.attachEvent("onstop",f)}e.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}j={func:j,scope:i||this};if(!h.unloads){if(e.attachEvent){e.attachEvent("onunload",g);e.attachEvent("onbeforeunload",k)}else{if(e.addEventListener){e.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;c.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){if(!f||c.is(f,"array")){return f}return c.map(f.split(g||","),c.trim)},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(d){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===b){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};c._init();e.tinymce=e.tinyMCE=c})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,inDispatch:false,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(b,a){this.listeners.push({cb:b,scope:a||this.scope});return b},addToTop:function(d,b){var a=this,c={cb:d,scope:b||a.scope};if(a.inDispatch){a.listeners=[c].concat(a.listeners)}else{a.listeners.unshift(c)}return d},remove:function(c){var b=this.listeners,a=null;tinymce.each(b,function(e,d){if(c==e.cb){a=e;b.splice(d,1);return false}});return a},dispatch:function(){var a=this,e,b=arguments,c,d=a.listeners,f;a.inDispatch=true;for(c=0;c<d.length;c++){f=d[c];e=f.cb.apply(f.scope,b.length>0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&o instanceof Array){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey}}})(tinymce);tinymce.util.Quirks=function(d){var l=tinymce.VK,r=l.BACKSPACE,s=l.DELETE,o=d.dom,z=d.selection,q=d.settings;function c(D,C){try{d.getDoc().execCommand(D,false,C)}catch(B){}}function h(){function B(E){var C,G,D,F;C=z.getRng();G=o.getParent(C.startContainer,o.isBlock);if(E){G=o.getNext(G,o.isBlock)}if(G){D=G.firstChild;while(D&&D.nodeType==3&&D.nodeValue.length===0){D=D.nextSibling}if(D&&D.nodeName==="SPAN"){F=D.cloneNode(false)}}d.getDoc().execCommand(E?"ForwardDelete":"Delete",false,null);G=o.getParent(C.startContainer,o.isBlock);tinymce.each(o.select("span.Apple-style-span,font.Apple-style-span",G),function(H){var I=z.getBookmark();if(F){o.replace(F.cloneNode(false),H,true)}else{o.remove(H,true)}z.moveToBookmark(I)})}d.onKeyDown.add(function(C,E){var D;D=E.keyCode==s;if(!E.isDefaultPrevented()&&(D||E.keyCode==r)&&!l.modifierPressed(E)){E.preventDefault();B(D)}});d.addCommand("Delete",function(){B()})}function A(){function C(E,H){var D,G,F=H?"start":"end";D=E[F+"Container"];G=E[F+"Offset"];if(D.nodeType==1&&D.hasChildNodes()){D=D.childNodes[Math.min(H?G:(G>0?G-1:0),D.childNodes.length-1)]}return D}function B(G,K){var F,J,E,H,I=K?"start":"end",D;F=G[I+"Container"];J=G[I+"Offset"];E=o.getRoot();if(F.nodeType==1){D=J>=F.childNodes.length;F=C(G,K);if(F.nodeType==3){J=K&&!D?0:F.nodeValue.length}}if(F.nodeType==3&&((K&&J>0)||(!K&&J<F.nodeValue.length))){return false}while(F!==E){H=F.parentNode[K?"firstChild":"lastChild"];if(H.nodeName=="BR"){H=H[K?"nextSibling":"previousSibling"]||H}if(H!==F){return false}F=F.parentNode}return true}d.onKeyDown.addToTop(function(E,G){var D,F=G.keyCode;if(!G.isDefaultPrevented()&&(F==s||F==r)){D=z.getRng(true);if(B(D,true)&&B(D,false)&&(D.collapsed||o.findCommonAncestor(C(D,true),C(D))===o.getRoot())){E.setContent("");E.nodeChanged();G.preventDefault()}}})}function t(){if(!d.settings.content_editable){o.bind(d.getDoc(),"focusin",function(B){z.setRng(z.getRng())});o.bind(d.getDoc(),"mousedown",function(B){if(B.target==d.getDoc().documentElement){d.getWin().focus();z.setRng(z.getRng())}})}}function m(){d.onKeyDown.add(function(B,E){if(!E.isDefaultPrevented()&&E.keyCode===r){if(z.isCollapsed()&&z.getRng(true).startOffset===0){var D=z.getNode();var C=D.previousSibling;if(C&&C.nodeName&&C.nodeName.toLowerCase()==="hr"){o.remove(C);tinymce.dom.Event.cancel(E)}}}})}function b(){if(!Range.prototype.getClientRects){d.onMouseDown.add(function(C,D){if(D.target.nodeName==="HTML"){var B=C.getBody();B.blur();setTimeout(function(){B.focus()},0)}})}}function v(){d.onClick.add(function(B,C){C=C.target;if(/^(IMG|HR)$/.test(C.nodeName)){z.getSel().setBaseAndExtent(C,0,C,1)}if(C.nodeName=="A"&&o.hasClass(C,"mceItemAnchor")){z.select(C)}B.nodeChanged()})}function x(){function C(){var E=o.getAttribs(z.getStart().cloneNode(false));return function(){var F=z.getStart();if(F!==d.getBody()){o.setAttrib(F,"style",null);tinymce.each(E,function(G){F.setAttributeNode(G.cloneNode(true))})}}}function B(){return !z.isCollapsed()&&z.getStart()!=z.getEnd()}function D(E,F){F.preventDefault();return false}d.onKeyPress.add(function(E,G){var F;if((G.keyCode==8||G.keyCode==46)&&B()){F=C();E.getDoc().execCommand("delete",false,null);F();G.preventDefault();return false}});o.bind(d.getDoc(),"cut",function(F){var E;if(B()){E=C();d.onKeyUp.addToTop(D);setTimeout(function(){E();d.onKeyUp.remove(D)},0)}})}function i(){var C,B;o.bind(d.getDoc(),"selectionchange",function(){if(B){clearTimeout(B);B=0}B=window.setTimeout(function(){var D=z.getRng();if(!C||!tinymce.dom.RangeUtils.compareRanges(D,C)){d.nodeChanged();C=D}},50)})}function y(){document.body.setAttribute("role","application")}function u(){d.onKeyDown.add(function(B,D){if(!D.isDefaultPrevented()&&D.keyCode===r){if(z.isCollapsed()&&z.getRng(true).startOffset===0){var C=z.getNode().previousSibling;if(C&&C.nodeName&&C.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(D)}}}})}function g(){var B=d.getDoc().documentMode;if(B&&B>7){return}c("RespectVisibilityInDesign",true);o.addClass(d.getBody(),"mceHideBrInPre");d.parser.addNodeFilter("pre",function(C,E){var F=C.length,H,D,I,G;while(F--){H=C[F].getAll("br");D=H.length;while(D--){I=H[D];G=I.prev;if(G&&G.type===3&&G.value.charAt(G.value-1)!="\n"){G.value+="\n"}else{I.parent.insert(new tinymce.html.Node("#text",3),I,true).value="\n"}}}});d.serializer.addNodeFilter("pre",function(C,E){var F=C.length,H,D,I,G;while(F--){H=C[F].getAll("br");D=H.length;while(D--){I=H[D];G=I.prev;if(G&&G.type==3){G.value=G.value.replace(/\r?\n$/,"")}}}})}function f(){o.bind(d.getBody(),"mouseup",function(D){var C,B=z.getNode();if(B.nodeName=="IMG"){if(C=o.getStyle(B,"width")){o.setAttrib(B,"width",C.replace(/[^0-9%]+/g,""));o.setStyle(B,"width","")}if(C=o.getStyle(B,"height")){o.setAttrib(B,"height",C.replace(/[^0-9%]+/g,""));o.setStyle(B,"height","")}}})}function p(){d.onKeyDown.add(function(H,I){var G,B,C,E,F,J,D;G=I.keyCode==s;if(!I.isDefaultPrevented()&&(G||I.keyCode==r)&&!l.modifierPressed(I)){B=z.getRng();C=B.startContainer;E=B.startOffset;D=B.collapsed;if(C.nodeType==3&&C.nodeValue.length>0&&((E===0&&!D)||(D&&E===(G?0:1)))){nonEmptyElements=H.schema.getNonEmptyElements();I.preventDefault();F=o.create("br",{id:"__tmp"});C.parentNode.insertBefore(F,C);H.getDoc().execCommand(G?"ForwardDelete":"Delete",false,null);C=z.getRng().startContainer;J=C.previousSibling;if(J&&J.nodeType==1&&!o.isBlock(J)&&o.isEmpty(J)&&!nonEmptyElements[J.nodeName.toLowerCase()]){o.remove(J)}o.remove("__tmp")}}})}function e(){d.onKeyDown.add(function(F,G){var D,C,H,B,E;if(G.isDefaultPrevented()||G.keyCode!=l.BACKSPACE){return}D=z.getRng();C=D.startContainer;H=D.startOffset;B=o.getRoot();E=C;if(!D.collapsed||H!==0){return}while(E&&E.parentNode&&E.parentNode.firstChild==E&&E.parentNode!=B){E=E.parentNode}if(E.tagName==="BLOCKQUOTE"){F.formatter.toggle("blockquote",null,E);D.setStart(C,0);D.setEnd(C,0);z.setRng(D);z.collapse(false)}})}function k(){function B(){d._refreshContentEditable();c("StyleWithCSS",false);c("enableInlineTableEditing",false);if(!q.object_resizing){c("enableObjectResizing",false)}}if(!q.readonly){d.onBeforeExecCommand.add(B);d.onMouseDown.add(B)}}function n(){function B(C,D){tinymce.each(o.select("a"),function(G){var E=G.parentNode,F=o.getRoot();if(E.lastChild===G){while(E&&!o.isBlock(E)){if(E.parentNode.lastChild!==E||E===F){return}E=E.parentNode}o.add(E,"br",{"data-mce-bogus":1})}})}d.onExecCommand.add(function(C,D){if(D==="CreateLink"){B(C)}});d.onSetContent.add(z.onSetContent.add(B))}function a(){function B(D,C){if(!D||!C.initial){d.execCommand("mceRepaint")}}d.onUndo.add(B);d.onRedo.add(B);d.onSetContent.add(B)}function j(){d.onKeyDown.add(function(B,C){if(!C.isDefaultPrevented()&&C.keyCode==8&&z.getNode().nodeName=="IMG"){C.preventDefault();B.undoManager.beforeChange();o.remove(z.getNode());B.undoManager.add()}})}u();e();A();if(tinymce.isWebKit){p();h();t();v();if(tinymce.isIDevice){i()}}if(tinymce.isIE){m();y();g();f();j()}if(tinymce.isGecko){m();b();x();k();n();a()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;"};d={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][C]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|summary][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script style textarea");q=m("self_closing_elements","colgroup dd dt li options p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object",z);v=m("block_elements","h1 h2 h3 h4 h5 h6 hr p div address pre form table tbody thead tfoot th tr td li ol ul caption blockquote center dl dt dd dir fieldset noscript menu isindex samp header footer article section hgroup aside nav figure");function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K<G;K++){F=N.exec(L[K]);if(F){W=F[1];Q=F[2];E=F[3];X=F[4];O={};J=[];I={attributes:O,attributesOrder:J};if(W==="#"){I.paddEmpty=true}if(W==="-"){I.removeEmpty=true}if(S){for(ad in S){O[ad]=S[ad]}J.push.apply(J,H)}if(X){X=d(X,"|");for(Z=0,V=X.length;Z<V;Z++){F=R.exec(X[Z]);if(F){U={};ac=F[1];Y=F[2].replace(/::/g,":");W=F[3];T=F[4];if(ac==="!"){I.attributesRequired=I.attributesRequired||[];I.attributesRequired.push(Y);U.required=true}if(ac==="-"){delete O[Y];J.splice(f.inArray(J,Y),1);continue}if(W){if(W==="="){I.attributesDefault=I.attributesDefault||[];I.attributesDefault.push({name:Y,value:T});U.defaultValue=T}if(W===":"){I.attributesForced=I.attributesForced||[];I.attributesForced.push({name:Y,value:T});U.forcedValue=T}if(W==="<"){U.validValues=e(T,"?")}}if(M.test(Y)){I.attributePatterns=I.attributePatterns||[];U.pattern=i(Y);I.attributePatterns.push(U)}else{if(!O[Y]){J.push(Y)}O[Y]=U}}}}if(!S&&Q=="@"){S=O;H=J}if(E){I.outputName=Q;s[E]=I}if(M.test(Q)){I.pattern=i(Q);j.push(I)}else{s[Q]=I}}}}}function t(E){s={};j=[];C(E);g(y,function(G,F){k[F]=G.children})}function l(F){var E=/^(~)?(.+)$/;if(F){g(d(F),function(J){var H=E.exec(J),I=H[1]==="~",K=I?"span":"div",G=H[2];k[G]=k[K];p[G]=K;if(!I){v[G]={}}g(k,function(L,M){if(L[K]){L[G]=L[K]}})})}}function x(F){var E=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(F){g(d(F),function(J){var I=E.exec(J),G,H;if(I){H=I[1];if(H){G=k[I[2]]}else{G=k[I[2]]={"#comment":{}}}G=k[I[2]];g(d(I[3],"|"),function(K){if(H==="-"){delete G[K]}else{G[K]={}}})}})}}function B(E){var G=s[E],F;if(G){return G}F=j.length;while(F--){G=j[F];if(G.pattern.test(E)){return G}}}if(!A.valid_elements){g(y,function(F,E){s[E]={attributes:F.attributes,attributesOrder:F.attributesOrder};k[E]=F.children});if(A.schema!="html5"){g(d("strong/b,em/i"),function(E){E=d(E,"/");s[E[1]].outputName=E[0]})}s.img.attributesDefault=[{name:"alt",value:""}];g(d("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr,strong,em,b,i"),function(E){if(s[E]){s[E].removeEmpty=true}});g(d("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(E){s[E].paddEmpty=true})}else{t(A.valid_elements)}l(A.custom_elements);x(A.valid_children);C(A.extended_valid_elements);x("+ol[ul|ol],+ul[ul|ol]");if(A.invalid_elements){f.each(f.explode(A.invalid_elements),function(E){if(s[E]){delete s[E]}})}if(!B("span")){C("span[!data-mce-type|*]")}u.children=k;u.styles=D;u.getBoolAttrs=function(){return r};u.getBlockElements=function(){return v};u.getShortEndedElements=function(){return z};u.getSelfClosingElements=function(){return q};u.getNonEmptyElements=function(){return n};u.getWhiteSpaceElements=function(){return o};u.isValidChild=function(E,G){var F=k[E];return !!(F&&F[G])};u.getElementRule=B;u.getCustomElements=function(){return p};u.addValidElements=C;u.setValidElements=t;u.addCustomElements=l;u.addValidChildren=x}})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(E){var n=this,g,G=0,I,B,A=[],N,Q,C,r,z,s,M,H,O,v,m,k,t,R,o,P,F,S,L,f,J,l,D,K,h,x=0,j=a.html.Entities.decode,y,q;function u(T){var V,U;V=A.length;while(V--){if(A[V].name===T){break}}if(V>=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G<g.index){n.text(j(E.substr(G,g.index-G)))}if(I=g[6]){I=I.toLowerCase();if(q&&o.test(I)){I=I.substr(1)}u(I)}else{if(I=g[7]){I=I.toLowerCase();if(q&&o.test(I)){I=I.substr(1)}O=I in M;if(y&&J[I]&&A.length>0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G<E.length){n.text(j(E.substr(G)))}for(Q=A.length-1;Q>=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-")===0){return false}}}if(j.type===8){return false}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(m){var o,p,x,v,z,n,q,l,t,u,k,s,y,r;s=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();for(o=0;o<m.length;o++){p=m[o];if(!p.parent){continue}v=[p];for(x=p.parent;x&&!h.isValidChild(x.name,p.name)&&!s[x.name];x=x.parent){v.push(x)}if(x&&v.length>1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t<v.length-1;t++){if(h.isValidChild(n.name,v[t].name)){q=f.filterNode(v[t].clone());n.append(q)}else{q=n}for(l=v[t].firstChild;l&&l!=v[t+1];){r=l.next;q.append(l);l=r}n=q}if(!z.isEmpty(k)){x.insert(z,v[0],true);x.insert(p,z)}else{x.insert(p,v[0],true)}x=v[0];if(x.isEmpty(k)||x.firstChild===x.lastChild&&x.firstChild.name==="br"){x.empty().remove()}}else{if(p.parent){if(p.name==="li"){y=p.prev;if(y&&(y.name==="ul"||y.name==="ul")){y.append(p);continue}y=p.next;if(y&&(y.name==="ul"||y.name==="ul")){y.insert(p,y.firstChild,true);continue}p.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(p.parent.name,"div")&&h.isValidChild("div",p.name)){p.wrap(f.filterNode(new a("div",1)))}else{if(p.name==="style"||p.name==="script"){p.empty().remove()}else{p.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,I,B,A,D,C,x,r,F,M,z,o,E,L=[],K,t,k,y,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;z=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();E=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;y=/^[ \t\r\n]+$/;function G(){var N=I.firstChild,l,O;while(N){l=N.next;if(N.type==3||(N.type==1&&N.name!=="p"&&!o[N.name]&&!N.attr("data-mce-type"))){if(!O){O=J(q,1);I.insert(O,N);O.append(N)}else{O.append(N)}}else{O=null}N=l}}function J(l,N){var O=new a(l,N),P;if(l in e){P=i[l];if(P){P.push(O)}else{i[l]=[O]}}return O}function H(O){var P,l,N;for(P=O.prev;P&&P.type===3;){l=P.value.replace(t,"");if(l.length>0){P.value=l;P=P.prev}else{N=P.prev;P.remove();P=N}}}n=new b.html.SaxParser({validate:z,fix_self_closing:!z,cdata:function(l){B.append(J("#cdata",4)).value=l},text:function(O,l){var N;if(!K){O=O.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){O=O.replace(E,"")}}if(O.length!==0){N=J("#text",3);N.raw=!!l;B.append(N).value=O}},comment:function(l){B.append(J("#comment",8)).value=l},pi:function(l,N){B.append(J(l,7)).value=N;H(B)},doctype:function(N){var l;l=B.append(J("#doctype",10));l.value=N;H(B)},start:function(l,V,O){var T,Q,P,N,R,W,U,S;P=z?h.getElementRule(l):{};if(P){T=J(P.outputName||l,1);T.attributes=V;T.shortEnded=O;B.append(T);S=p[B.name];if(S&&p[T.name]&&!S[T.name]){L.push(T)}Q=d.length;while(Q--){R=d[Q].name;if(R in V.map){F=c[R];if(F){F.push(T)}else{c[R]=[T]}}}if(o[l]){H(T)}if(!O){B=T}if(!K&&s[l]){K=true}}},end:function(l){var R,O,Q,N,P;O=z?h.getElementRule(l):{};if(O){if(o[l]){if(!K){R=B.firstChild;if(R&&R.type===3){Q=R.value.replace(E,"");if(Q.length>0){R.value=Q;R=R.next}else{N=R.next;R.remove();R=N}while(R&&R.type===3){Q=R.value;N=R.next;if(Q.length===0||y.test(Q)){R.remove();R=N}R=N}}R=B.lastChild;if(R&&R.type===3){Q=R.value.replace(t,"");if(Q.length>0){R.value=Q;R=R.prev}else{N=R.prev;R.remove();R=N}while(R&&R.type===3){Q=R.value;N=R.prev;if(Q.length===0||y.test(Q)){R.remove();R=N}R=N}}}R=B.prev;if(R&&R.type===3){Q=R.value.replace(E,"");if(Q.length>0){R.value=Q}else{R.remove()}}}if(K&&s[l]){K=false}if(O.removeEmpty||O.paddEmpty){if(B.isEmpty(u)){if(O.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name){P=B.parent;B.empty().remove();B=P;return}}}}B=B.parent}}},h);I=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&L.length){if(!m.context){j(L)}else{m.invalid=true}}if(q&&I.name=="body"){G()}if(!m.invalid){for(M in i){F=e[M];A=i[M];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D<C;D++){F[D](A,M,m)}}for(D=0,C=d.length;D<C;D++){F=d[D];if(F.name in c){A=c[F.name];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(x=0,r=F.callbacks.length;x<r;x++){F.callbacks[x](A,F.name,m)}}}}return I};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,v=b.extend({},h.getBlockElements()),k=h.getNonEmptyElements(),t,s,p,u;v.body=1;for(r=0;r<q;r++){o=n[r];t=o.parent;if(v[o.parent.name]&&o===t.lastChild){p=o.prev;while(p){u=p.name;if(u!=="span"||p.attr("data-mce-type")!=="bookmark"){if(u!=="br"){break}if(u==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(t.isEmpty(k)){elementRule=h.getElementRule(t.name);if(elementRule){if(elementRule.removeEmpty){t.remove()}else{if(elementRule.paddEmpty){t.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}else{s=o;while(t.firstChild===s&&t.lastChild===s){s=t;if(v[t.name]){break}t=t.parent}if(s===t){textNode=new b.html.Node("#text",3);textNode.value="\u00a0";o.replace(textNode)}}}})}if(!g.allow_html_in_named_anchor){f.addAttributeFilter("name",function(k,l){var n=k.length,p,m,o,q;while(n--){q=k[n];if(q.name==="a"&&q.firstChild){o=q.parent;p=q.lastChild;do{m=p.prev;o.insert(p,q);p=m}while(p)}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);tinymce.dom={};(function(b,h){var g=!!document.addEventListener;function c(k,j,l,i){if(k.addEventListener){k.addEventListener(j,l,i||false)}else{if(k.attachEvent){k.attachEvent("on"+j,l)}}}function e(k,j,l,i){if(k.removeEventListener){k.removeEventListener(j,l,i||false)}else{if(k.detachEvent){k.detachEvent("on"+j,l)}}}function a(n,l){var i,k=l||{};function j(){return false}function m(){return true}for(i in n){if(i!=="layerX"&&i!=="layerY"){k[i]=n[i]}}if(!k.target){k.target=k.srcElement||document}k.preventDefault=function(){k.isDefaultPrevented=m;if(n){if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}}};k.stopPropagation=function(){k.isPropagationStopped=m;if(n){if(n.stopPropagation){n.stopPropagation()}else{n.cancelBubble=true}}};k.stopImmediatePropagation=function(){k.isImmediatePropagationStopped=m;k.stopPropagation()};if(!k.isDefaultPrevented){k.isDefaultPrevented=j;k.isPropagationStopped=j;k.isImmediatePropagationStopped=j}return k}function d(m,n,l){var k=m.document,j={type:"ready"};function i(){if(!l.domLoaded){l.domLoaded=true;n(j)}}if(g){c(m,"DOMContentLoaded",i)}else{c(k,"readystatechange",function(){if(k.readyState==="complete"){e(k,"readystatechange",arguments.callee);i()}});if(k.documentElement.doScroll&&m===m.top){(function(){try{k.documentElement.doScroll("left")}catch(o){setTimeout(arguments.callee,0);return}i()})()}}c(m,"load",i)}function f(k){var q=this,p={},i,o,n,m,l;m="onmouseenter" in document.documentElement;n="onfocusin" in document.documentElement;l={mouseenter:"mouseover",mouseleave:"mouseout"};i=1;q.domLoaded=false;q.events=p;function j(t,x){var s,u,r,v;s=p[x][t.type];if(s){for(u=0,r=s.length;u<r;u++){v=s[u];if(v&&v.func.call(v.scope,t)===false){t.preventDefault()}if(t.isImmediatePropagationStopped()){return}}}}q.bind=function(x,A,D,E){var s,t,u,r,B,z,C,v=window;function y(F){j(a(F||v.event),s)}if(!x||x.nodeType===3||x.nodeType===8){return}if(!x[h]){s=i++;x[h]=s;p[s]={}}else{s=x[h];if(!p[s]){p[s]={}}}E=E||x;A=A.split(" ");u=A.length;while(u--){r=A[u];z=y;B=C=false;if(r==="DOMContentLoaded"){r="ready"}if((q.domLoaded||x.readyState=="complete")&&r==="ready"){q.domLoaded=true;D.call(E,a({type:r}));continue}if(!m){B=l[r];if(B){z=function(F){var H,G;H=F.currentTarget;G=F.relatedTarget;if(G&&H.contains){G=H.contains(G)}else{while(G&&G!==H){G=G.parentNode}}if(!G){F=a(F||v.event);F.type=F.type==="mouseout"?"mouseleave":"mouseenter";F.target=H;j(F,s)}}}}if(!n&&(r==="focusin"||r==="focusout")){C=true;B=r==="focusin"?"focus":"blur";z=function(F){F=a(F||v.event);F.type=F.type==="focus"?"focusin":"focusout";j(F,s)}}t=p[s][r];if(!t){p[s][r]=t=[{func:D,scope:E}];t.fakeName=B;t.capture=C;t.nativeHandler=z;if(!g){t.proxyHandler=k(s)}if(r==="ready"){d(x,z,q)}else{c(x,B||r,g?z:t.proxyHandler,C)}}else{t.push({func:D,scope:E})}}x=t=0;return D};q.unbind=function(x,z,A){var s,u,v,B,r,t;if(!x||x.nodeType===3||x.nodeType===8){return q}s=x[h];if(s){t=p[s];if(z){z=z.split(" ");v=z.length;while(v--){r=z[v];u=t[r];if(u){if(A){B=u.length;while(B--){if(u[B].func===A){u.splice(B,1)}}}if(!A||u.length===0){delete t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}}}}else{for(r in t){u=t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}t={}}for(r in t){return q}delete p[s];try{delete x[h]}catch(y){x[h]=null}}return q};q.fire=function(u,s,r){var v,t;if(!u||u.nodeType===3||u.nodeType===8){return q}t=a(null,r);t.type=s;do{v=u[h];if(v){j(t,v)}u=u.parentNode||u.ownerDocument||u.defaultView||u.parentWindow}while(u&&!t.isPropagationStopped());return q};q.clean=function(u){var s,r,t=q.unbind;if(!u||u.nodeType===3||u.nodeType===8){return q}if(u[h]){t(u)}if(!u.getElementsByTagName){u=u.document}if(u&&u.getElementsByTagName){t(u);r=u.getElementsByTagName("*");s=r.length;while(s--){u=r[s];if(u[h]){t(u)}}}return q};q.callNativeHandler=function(s,r){if(p){p[s][r.type].nativeHandler(r)}};q.destory=function(){p={}};q.add=function(v,s,u,t){if(typeof(v)==="string"){v=document.getElementById(v)}if(v&&v instanceof Array){var r=v;while(r--){q.add(v[r],s,u,t)}return}if(s==="init"){s="ready"}return q.bind(v,s instanceof Array?s.join(" "):s,u,t)};q.remove=function(v,s,u,t){if(!v){return q}if(typeof(v)==="string"){v=document.getElementById(v)}if(v instanceof Array){var r=v.length;while(r--){q.remove(v[r],s,u,t)}return q}return q.unbind(v,s instanceof Array?s.join(" "):s,u)};q.clear=function(r){if(typeof(r)==="string"){r=document.getElementById(r)}return q.clean(r)};q.cancel=function(r){if(r){q.prevent(r);q.stop(r)}return false};q.prevent=function(r){r.preventDefault();return false};q.stop=function(r){r.stopPropagation();return false}}b.EventUtils=f;b.Event=new f(function(i){return function(j){tinymce.dom.Event.callNativeHandler(i,j)}});b.Event.bind(window,"ready",function(){});b=0})(tinymce.dom,"data-mce-expando");tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(e){var g=e.each,d=e.is,f=e.isWebKit,b=e.isIE,h=e.html.Entities,c=/^([a-z0-9],?)+$/i,a=/^[ \t\r\n]*$/;e.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(o,l){var k=this,i,j,n;k.doc=o;k.win=window;k.files={};k.cssFlicker=false;k.counter=0;k.stdMode=!e.isIE||o.documentMode>=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+"</"+q+">"}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":b?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="<br />"+j;m.removeChild(m.firstChild)}catch(l){m=i.create("div");m.innerHTML="<br />"+j;g(m.childNodes,function(o,n){if(n){m.appendChild(o)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){g(s.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:q(s.styleSheet);break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,T=0,F=1,j=2,E=true,S=false,V="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L});function x(){return e.createDocumentFragment()}function q(W,t){C(E,W,t)}function s(W,t){C(S,W,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[V]}else{O[h]=O[Q];O[V]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(Z,t){var ac=O[h],X=O[V],ab=O[Q],W=O[A],aa=t.startContainer,ae=t.startOffset,Y=t.endContainer,ad=t.endOffset;if(Z===0){return H(ac,X,aa,ae)}if(Z===1){return H(ab,W,aa,ae)}if(Z===2){return H(ab,W,Y,ad)}if(Z===3){return H(ac,X,Y,ad)}}function p(){l(j)}function I(){return l(T)}function d(){return l(F)}function D(Z){var W=this[h],t=this[V],Y,X;if((W.nodeType===3||W.nodeType===4)&&W.nodeValue){if(!t){W.parentNode.insertBefore(Z,W)}else{if(t>=W.nodeValue.length){c.insertAfter(Z,W)}else{Y=W.splitText(t);W.parentNode.insertBefore(Z,Y)}}}else{if(W.childNodes.length>0){X=W.childNodes[t]}if(X){W.insertBefore(Z,X)}else{W.appendChild(Z)}}}function N(W){var t=O.extractContents();O.insertNode(W);W.appendChild(t);O.selectNode(W)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[V],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,W){var X;if(t.nodeType==3){return t}if(W<0){return t}X=t.firstChild;while(X&&W>0){--W;X=X.nextSibling}if(X){return X}return t}function m(){return(O[h]==O[Q]&&O[V]==O[A])}function H(Y,aa,W,Z){var ab,X,t,ac,ae,ad;if(Y==W){if(aa==Z){return 0}if(aa<Z){return -1}return 1}ab=W;while(ab&&ab.parentNode!=Y){ab=ab.parentNode}if(ab){X=0;t=Y.firstChild;while(t!=ab&&X<aa){X++;t=t.nextSibling}if(aa<=X){return -1}return 1}ab=Y;while(ab&&ab.parentNode!=W){ab=ab.parentNode}if(ab){X=0;t=W.firstChild;while(t!=ab&&X<Z){X++;t=t.nextSibling}if(X<Z){return -1}return 1}ac=c.findCommonAncestor(Y,W);ae=Y;while(ae&&ae.parentNode!=ac){ae=ae.parentNode}if(!ae){ae=ac}ad=W;while(ad&&ad.parentNode!=ac){ad=ad.parentNode}if(!ad){ad=ac}if(ae==ad){return 0}t=ac.firstChild;while(t){if(t==ae){return -1}if(t==ad){return 1}t=t.nextSibling}}function C(W,Z,Y){var t,X;if(W){O[h]=Z;O[V]=Y}else{O[Q]=Z;O[A]=Y}t=O[Q];while(t.parentNode){t=t.parentNode}X=O[h];while(X.parentNode){X=X.parentNode}if(X==t){if(H(O[h],O[V],O[Q],O[A])>0){O.collapse(W)}}else{O.collapse(W)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ac){var ab,Y=0,ae=0,W,aa,X,Z,t,ad;if(O[h]==O[Q]){return f(ac)}for(ab=O[Q],W=ab.parentNode;W;ab=W,W=W.parentNode){if(W==O[h]){return r(ab,ac)}++Y}for(ab=O[h],W=ab.parentNode;W;ab=W,W=W.parentNode){if(W==O[Q]){return U(ab,ac)}++ae}aa=ae-Y;X=O[h];while(aa>0){X=X.parentNode;aa--}Z=O[Q];while(aa<0){Z=Z.parentNode;aa++}for(t=X.parentNode,ad=Z.parentNode;t!=ad;t=t.parentNode,ad=ad.parentNode){X=t;Z=ad}return o(X,Z,ac)}function f(ab){var ad,ae,t,X,Y,ac,Z,W,aa;if(ab!=j){ad=x()}if(O[V]==O[A]){return ad}if(O[h].nodeType==3){ae=O[h].nodeValue;t=ae.substring(O[V],O[A]);if(ab!=F){X=O[h];W=O[V];aa=O[A]-O[V];if(W===0&&aa>=X.nodeValue.length-1){X.parentNode.removeChild(X)}else{X.deleteData(W,aa)}O.collapse(E)}if(ab==j){return}if(t.length>0){ad.appendChild(e.createTextNode(t))}return ad}X=P(O[h],O[V]);Y=O[A]-O[V];while(X&&Y>0){ac=X.nextSibling;Z=z(X,ab);if(ad){ad.appendChild(Z)}--Y;X=ac}if(ab!=F){O.collapse(E)}return ad}function r(ac,Z){var ab,aa,W,t,Y,X;if(Z!=j){ab=x()}aa=i(ac,Z);if(ab){ab.appendChild(aa)}W=n(ac);t=W-O[V];if(t<=0){if(Z!=F){O.setEndBefore(ac);O.collapse(S)}return ab}aa=ac.previousSibling;while(t>0){Y=aa.previousSibling;X=z(aa,Z);if(ab){ab.insertBefore(X,ab.firstChild)}--t;aa=Y}if(Z!=F){O.setEndBefore(ac);O.collapse(S)}return ab}function U(aa,Z){var ac,W,ab,t,Y,X;if(Z!=j){ac=x()}ab=R(aa,Z);if(ac){ac.appendChild(ab)}W=n(aa);++W;t=O[A]-W;ab=aa.nextSibling;while(ab&&t>0){Y=ab.nextSibling;X=z(ab,Z);if(ac){ac.appendChild(X)}--t;ab=Y}if(Z!=F){O.setStartAfter(aa);O.collapse(E)}return ac}function o(aa,t,ad){var X,af,Z,ab,ac,W,ae,Y;if(ad!=j){af=x()}X=R(aa,ad);if(af){af.appendChild(X)}Z=aa.parentNode;ab=n(aa);ac=n(t);++ab;W=ac-ab;ae=aa.nextSibling;while(W>0){Y=ae.nextSibling;X=z(ae,ad);if(af){af.appendChild(X)}ae=Y;--W}X=i(t,ad);if(af){af.appendChild(X)}if(ad!=F){O.setStartAfter(aa);O.collapse(E)}return af}function i(ab,ac){var X=P(O[Q],O[A]-1),ad,aa,Z,t,W,Y=X!=O[Q];if(X==ab){return M(X,Y,S,ac)}ad=X.parentNode;aa=M(ad,S,S,ac);while(ad){while(X){Z=X.previousSibling;t=M(X,Y,S,ac);if(ac!=j){aa.insertBefore(t,aa.firstChild)}Y=E;X=Z}if(ad==ab){return aa}X=ad.previousSibling;ad=ad.parentNode;W=M(ad,S,S,ac);if(ac!=j){W.appendChild(aa)}aa=W}}function R(ab,ac){var Y=P(O[h],O[V]),Z=Y!=O[h],ad,aa,X,t,W;if(Y==ab){return M(Y,Z,E,ac)}ad=Y.parentNode;aa=M(ad,S,E,ac);while(ad){while(Y){X=Y.nextSibling;t=M(Y,Z,E,ac);if(ac!=j){aa.appendChild(t)}Z=E;Y=X}if(ad==ab){return aa}Y=ad.nextSibling;ad=ad.parentNode;W=M(ad,S,E,ac);if(ac!=j){W.appendChild(aa)}aa=W}}function M(t,Z,ac,ad){var Y,X,aa,W,ab;if(Z){return z(t,ad)}if(t.nodeType==3){Y=t.nodeValue;if(ac){W=O[V];X=Y.substring(W);aa=Y.substring(0,W)}else{W=O[A];X=Y.substring(0,W);aa=Y.substring(W)}if(ad!=F){t.nodeValue=aa}if(ad==j){return}ab=c.clone(t,S);ab.nodeValue=X;return ab}if(ad==j){return}return c.clone(t,S)}function z(W,t){if(t!=j){return t==F?c.clone(W,E):W}W.parentNode.removeChild(W)}}a.Range=b})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,s,q,r=d.dom.doc,m=r.body;function j(z){var u,y,t,x,v;t=h.create("a");u=z?k:s;y=z?p:q;x=n.duplicate();if(u==r||u==r.documentElement){u=m;y=0}if(u.nodeType==3){u.parentNode.insertBefore(t,u);x.moveToElementText(t);x.moveStart("character",y);h.remove(t);n.setEndPoint(z?"StartToStart":"EndToEnd",x)}else{v=u.childNodes;if(v.length){if(y>=v.length){h.insertAfter(t,v[v.length-1])}else{u.insertBefore(t,v[y])}x.moveToElementText(t)}else{if(u.canHaveHTML){u.innerHTML="<span>\uFEFF</span>";t=u.firstChild;x.moveToElementText(t);x.collapse(f)}}n.setEndPoint(z?"StartToStart":"EndToEnd",x);h.remove(t)}}k=i.startContainer;p=i.startOffset;s=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==s&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){k.innerHTML="<span>\uFEFF</span><span>\uFEFF</span>";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{l=m.createControlRange();l.addElement(k.childNodes[p]);l.select();return}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e<y.length;e++){if(y[e]===y[e-1]){y.splice(e--,1)}}}}return y};d.matches=function(e,y){return d(e,null,null,y)};d.matchesSelector=function(e,y){return d(y,null,null,[e]).length>0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z<B;z++){C=k.order[z];if((A=k.leftMatch[C].exec(E))){y=A[1];A.splice(1,1);if(y.substr(y.length-1)!=="\\"){A[1]=(A[1]||"").replace(q,"");D=k.find[C](A,e,F);if(D!=null){E=E.replace(k.match[C],"");break}}}}if(!D){D=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:D,expr:E}};d.filter=function(I,H,L,B){var D,e,G,N,K,y,A,C,J,z=I,M=[],F=H,E=H&&H[0]&&d.isXML(H[0]);while(I&&H.length){for(G in k.filter){if((D=k.leftMatch[G].exec(I))!=null&&D[2]){y=k.filter[G];A=D[1];e=false;D.splice(1,1);if(A.substr(A.length-1)==="\\"){continue}if(F===M){M=[]}if(k.preFilter[G]){D=k.preFilter[G](D,F,L,M,B,E);if(!D){e=N=true}else{if(D===true){continue}}}if(D){for(C=0;(K=F[C])!=null;C++){if(K){N=y(K,D,C,F);J=B^N;if(L&&N!=null){if(J){e=true}else{F[C]=false}}else{if(J){M.push(K);e=true}}}}}if(N!==undefined){if(!L){F=M}I=I.replace(k.match[G],"");if(!e){return[]}break}}}if(I===z){if(e==null){d.error(I)}else{break}}z=I}return F};d.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var b=d.getText=function(B){var z,A,e=B.nodeType,y="";if(e){if(e===1||e===9||e===11){if(typeof B.textContent==="string"){return B.textContent}else{if(typeof B.innerText==="string"){return B.innerText.replace(u,"")}else{for(B=B.firstChild;B;B=B.nextSibling){y+=b(B)}}}}else{if(e===3||e===4){return B.nodeValue}}}else{for(z=0;(A=B[z]);z++){if(A.nodeType!==8){y+=b(A)}}}return y};var k=d.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(D,y){var A=typeof y==="string",C=A&&!x.test(y),E=A&&!C;if(C){y=y.toLowerCase()}for(var z=0,e=D.length,B;z<e;z++){if((B=D[z])){while((B=B.previousSibling)&&B.nodeType!==1){}D[z]=E||B&&B.nodeName.toLowerCase()===y?B||false:B===y}}if(E){d.filter(y,D,true)}},">":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z<e;z++){C=D[z];if(C){var A=C.parentNode;D[z]=A.nodeName.toLowerCase()===y?A:false}}}else{for(;z<e;z++){C=D[z];if(C){D[z]=B?C.parentNode:C.parentNode===y}}if(B){d.filter(y,D,true)}}},"":function(A,y,C){var B,z=o++,e=t;if(typeof y==="string"&&!x.test(y)){y=y.toLowerCase();B=y;e=a}e("parentNode",y,z,A,B,C)},"~":function(A,y,C){var B,z=o++,e=t;if(typeof y==="string"&&!x.test(y)){y=y.toLowerCase();B=y;e=a}e("previousSibling",y,z,A,B,C)}},find:{ID:function(y,z,A){if(typeof z.getElementById!=="undefined"&&!A){var e=z.getElementById(y[1]);return e&&e.parentNode?[e]:[]}},NAME:function(z,C){if(typeof C.getElementsByName!=="undefined"){var y=[],B=C.getElementsByName(z[1]);for(var A=0,e=B.length;A<e;A++){if(B[A].getAttribute("name")===z[1]){y.push(B[A])}}return y.length===0?null:y}},TAG:function(e,y){if(typeof y.getElementsByTagName!=="undefined"){return y.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(A,y,z,e,D,E){A=" "+A[1].replace(q,"")+" ";if(E){return A}for(var B=0,C;(C=y[B])!=null;B++){if(C){if(D^(C.className&&(" "+C.className+" ").replace(/[\t\n\r]/g," ").indexOf(A)>=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return y<e[3]-0},gt:function(z,y,e){return y>e[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C<B;C++){if(A[C]===z){return false}}return true}else{d.error(e)}}}},CHILD:function(z,B){var A,H,D,G,e,C,F,E=B[1],y=z;switch(E){case"only":case"first":while((y=y.previousSibling)){if(y.nodeType===1){return false}}if(E==="first"){return true}y=z;case"last":while((y=y.nextSibling)){if(y.nodeType===1){return false}}return true;case"nth":A=B[2];H=B[3];if(A===1&&H===0){return true}D=B[0];G=z.parentNode;if(G&&(G[i]!==D||!z.nodeIndex)){C=0;for(y=G.firstChild;y;y=y.nextSibling){if(y.nodeType===1){y.nodeIndex=++C}}G[i]=D}F=z.nodeIndex-H;if(A===0){return F===0}else{return(F%A===0&&F/A>=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z<e;z++){y.push(B[z])}}else{for(;B[z];z++){y.push(B[z])}}}return y}}var p,m;if(document.documentElement.compareDocumentPosition){p=function(y,e){if(y===e){h=true;return 0}if(!y.compareDocumentPosition||!e.compareDocumentPosition){return y.compareDocumentPosition?-1:1}return y.compareDocumentPosition(e)&4?-1:1}}else{p=function(F,E){if(F===E){h=true;return 0}else{if(F.sourceIndex&&E.sourceIndex){return F.sourceIndex-E.sourceIndex}}var C,y,z=[],e=[],B=F.parentNode,D=E.parentNode,G=B;if(B===D){return m(F,E)}else{if(!B){return -1}else{if(!D){return 1}}}while(G){z.unshift(G);G=G.parentNode}G=D;while(G){e.unshift(G);G=G.parentNode}C=z.length;y=e.length;for(var A=0;A<C&&A<y;A++){if(z[A]!==e[A]){return m(z[A],e[A])}}return A===C?m(F,e[A],-1):m(z[A],E,1)};m=function(y,e,z){if(y===e){return z}var A=y.nextSibling;while(A){if(A===e){return -1}A=A.nextSibling}return 1}}(function(){var y=document.createElement("div"),z="script"+(new Date()).getTime(),e=document.documentElement;y.innerHTML="<a name='"+z+"'/>";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="<p class='TEST'></p>";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A<z;A++){var e=G[A];if(e){var B=false;e=e[y];while(e){if(e[i]===C){B=G[e.sizset];break}if(e.nodeType===1&&!F){e[i]=C;e.sizset=A}if(e.nodeName.toLowerCase()===D){B=e;break}e=e[y]}G[A]=B}}}function t(y,D,C,G,E,F){for(var A=0,z=G.length;A<z;A++){var e=G[A];if(e){var B=false;e=e[y];while(e){if(e[i]===C){B=G[e.sizset];break}if(e.nodeType===1){if(!F){e[i]=C;e.sizset=A}if(typeof D!=="string"){if(e===D){B=true;break}}else{if(d.filter(D,[e]).length>0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A<y;A++){d(z,F[A],E,D)}return d.filter(B,E)};window.tinymce.dom.Sizzle=d})();(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(d){function f(g){return g.replace(/[\n\r]+/g,"")}var c=d.is,b=d.isIE,e=d.each,a=d.dom.TreeWalker;d.create("tinymce.dom.Selection",{Selection:function(j,i,h){var g=this;g.dom=j;g.win=i;g.serializer=h;e(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(k){g[k]=new d.util.Dispatcher(g)});if(!g.win.getSelection){g.tridentSel=new d.dom.TridentSelection(g)}if(d.isIE&&j.boxModel){this._fixIESelection()}d.addUnload(g.destroy,g)},setCursorLocation:function(i,j){var g=this;var h=g.dom.createRng();h.setStart(i,j);h.setEnd(i,j);g.setRng(h);g.collapse(false)},getContent:function(h){var g=this,i=g.getRng(),m=g.dom.create("body"),k=g.getSel(),j,l,o;h=h||{};j=l="";h.get=true;h.format=h.format||"html";h.forced_root_block="";g.onBeforeGetContent.dispatch(g,h);if(h.format=="text"){return g.isCollapsed()?"":(i.text||(k.toString?k.toString():""))}if(i.cloneContents){o=i.cloneContents();if(o){m.appendChild(o)}}else{if(c(i.item)||c(i.htmlText)){m.innerHTML="<br>"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='<span id="__caret">_</span>';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('<span id="__mce_tmp">_</span>'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var h=this.getRng(),i,g,k,j;if(h.duplicate||h.item){if(h.item){return h.item(0)}k=h.duplicate();k.collapse(1);i=k.parentElement();g=j=h.parentElement();while(j=j.parentNode){if(j==i){i=g;break}}return i}else{i=h.startContainer;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[Math.min(i.childNodes.length-1,h.startOffset)]}if(i&&i.nodeType==3){return i.parentNode}return i}},getEnd:function(){var h=this,i=h.getRng(),j,g;if(i.duplicate||i.item){if(i.item){return i.item(0)}i=i.duplicate();i.collapse(0);j=i.parentElement();if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=i.endContainer;g=i.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[g>0?g-1:g]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){return{rng:y.getRng()}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML('<span data-mce-type="bookmark" id="'+j+'_start" style="'+x+'">'+m+"</span>");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML('<span data-mce-type="bookmark" id="'+j+'_end" style="'+x+'">'+m+"</span>")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(o){var s=this,m=s.dom,j,i,g,r,k,u,p,q;function h(A){var t=o[A?"start":"end"],x,y,z,v;if(t){z=t[0];for(y=r,x=t.length-1;x>=1;x--){v=y.childNodes;if(t[x]>v.length-1){return}y=v[t[x]]}if(y.nodeType===3){z=Math.min(t[0],y.nodeValue.length)}if(y.nodeType===1){z=Math.min(t[0],y.childNodes.length)}if(A){g.setStart(y,z)}else{g.setEnd(y,z)}}return true}function l(B){var v=m.get(o.id+"_"+B),A,t,y,z,x=o.keep;if(v){A=v.parentNode;if(B=="start"){if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}k=u=A;p=q=t}else{if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}u=A;q=t}if(!x){z=v.previousSibling;y=v.nextSibling;e(d.grep(v.childNodes),function(C){if(C.nodeType==3){C.nodeValue=C.nodeValue.replace(/\uFEFF/g,"")}});while(v=m.get(o.id+"_"+B)){m.remove(v,1)}if(z&&y&&z.nodeType==y.nodeType&&z.nodeType==3&&!d.isOpera){t=z.nodeValue.length;z.appendData(y.nodeValue);m.remove(y);if(B=="start"){k=u=z;p=q=t}else{u=z;q=t}}}}}function n(t){if(m.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='<br data-mce-bogus="1" />'}return t}if(o){if(o.start){g=m.createRng();r=m.getRoot();if(s.tridentSel){return s.tridentSel.moveToBookmark(o)}if(h(true)&&h()){s.setRng(g)}}else{if(o.id){l("start");l("end");if(k){g=m.createRng();g.setStart(n(k),p);g.setEnd(n(u),q);s.setRng(g)}}else{if(o.name){s.select(m.select(o.name)[o.index])}else{if(o.rng){s.setRng(o.rng)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},destroy:function(h){var g=this;g.win=null;if(!h){d.removeUnload(g.destroy)}},_fixIESelection:function(){var h=this.dom,n=h.doc,i=n.body,k,o,g;function j(p,s){var q=i.createTextRange();try{q.moveToPoint(p,s)}catch(r){q=null}return q}function m(q){var p;if(q.button){p=j(q.x,q.y);if(p){if(p.compareEndPoints("StartToStart",o)>0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF|\u200B/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&d<h.nodeValue.length){i=f(h,d);h=i.previousSibling;if(g>d){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d<h.nodeValue.length){h=f(h,d);d=0}if(i.nodeType==3&&g>0&&g<i.nodeValue.length){i=f(i,g).previousSibling;g=i.nodeValue.length}}return{startContainer:h,startOffset:d,endContainer:i,endOffset:g}}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var p=this,m=e.root,l=e.items,n=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,k=e.excludeFromTabOrder,j,h,o,d,g;f=f||b.DOM;j=function(q){g=q.target.id};h=function(q){f.setAttrib(q.target.id,"tabindex","-1")};d=function(q){var r=f.get(g);f.setAttrib(r,"tabindex","0");r.focus()};p.focus=function(){f.get(g).focus()};p.destroy=function(){c(l,function(q){f.unbind(f.get(q.id),"focus",j);f.unbind(f.get(q.id),"blur",h)});f.unbind(f.get(m),"focus",d);f.unbind(f.get(m),"keydown",o);l=f=m=p.focus=j=h=o=d=null;p.destroy=function(){}};p.moveFocus=function(u,r){var q=-1,t=p.controls,s;if(!g){return}c(l,function(x,v){if(x.id===g){q=v;return false}});q+=u;if(q<0){q=l.length-1}else{if(q>=l.length){q=0}}s=l[q];f.setAttrib(g,"tabindex","-1");f.setAttrib(s.id,"tabindex","0");f.get(s.id).focus();if(e.actOnFocus){e.onAction(s.id)}if(r){a.cancel(r)}};o=function(y){var u=37,t=39,x=38,z=40,q=27,s=14,r=13,v=32;switch(y.keyCode){case u:if(i){p.moveFocus(-1)}break;case t:if(i){p.moveFocus(1)}break;case x:if(n){p.moveFocus(-1)}break;case z:if(n){p.moveFocus(1)}break;case q:if(e.onCancel){e.onCancel();a.cancel(y)}break;case s:case r:case v:if(e.onAction){e.onAction(g);a.cancel(y)}break}};c(l,function(s,q){var r;if(!s.id){s.id=f.uniqueId("_mce_item_")}if(k){f.bind(s.id,"blur",h);r="-1"}else{r=(q===0?"0":"-1")}f.setAttrib(s.id,"tabindex",r);f.bind(f.get(s.id),"focus",j)});if(l[0]){g=l[0].id}f.setAttrib(m,"tabindex","-1");f.bind(f.get(m),"focus",d);f.bind(f.get(m),"keydown",o)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" />'+c}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keyup",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='<span role="listbox" aria-haspopup="true" aria-labelledby="'+g.id+'_voiceDesc" aria-describedby="'+g.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+g.id+'" cellpadding="0" cellspacing="0" class="'+k+" "+k+"Enabled"+(i["class"]?(" "+i["class"]):"")+'"><tbody><tr>';j+="<td>"+d.createHTML("span",{id:g.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},g.settings.title);j+=d.createHTML("a",{id:g.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},d.encode(g.settings.title))+"</td>";j+="<td>"+d.createHTML("a",{id:g.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";j+="</tr></tbody></table></span>";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(l){var k;b.remove(h.id,"change",i);j=false;k=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",k)});if(e.isWebKit&&(l.keyCode==37||l.keyCode==39)){return b.prevent(l)}if(l.keyCode==13||l.keyCode==32){g(l);return b.cancel(l)}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.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"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");new d.ui.KeyboardNavigation({root:p.id+"_menu",items:c.select("a",p.id+"_menu"),onCancel:function(){p.hideMenu();p.focus()}});a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}x=d({theme:"simple",language:"en"},x);v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(k){var l=k.DOM,j=k.dom.Event,f=k.extend,i=k.each,a=k.isGecko,b=k.isIE,e=k.isWebKit,d=k.is,h=k.ThemeManager,c=k.PluginManager,g=k.explode;k.create("tinymce.Editor",{Editor:function(p,o){var m=this,n=true;m.settings=o=f({id:p,language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:k.documentBaseURL,add_form_submit_trigger:n,submit_patch:n,add_unload_trigger:n,convert_urls:n,relative_urls:n,remove_script_host:n,table_inline_editing:false,object_resizing:n,accessibility_focus:n,doctype:k.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,F=this,G=F.settings,C,y,B=F.getElement(),p,m,D,v,A,E,x,r=[];k.add(F);G.aria_label=G.aria_label||l.getAttrib(B,"aria-label",F.getLang("aria.rich_text_area"));if(G.theme){G.theme=G.theme.replace(/-/,"");p=h.get(G.theme);F.theme=new p();if(F.theme.init){F.theme.init(F,h.urls[G.theme]||k.documentBaseURL.replace(/\/$/,""))}}function z(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){z(u)});n=new t(F,o);F.plugins[s]=n;if(n.init){n.init(F,o);r.push(s)}}}i(g(G.plugins.replace(/\-/g,"")),z);if(G.popup_css!==false){if(G.popup_css){G.popup_css=F.documentBaseURI.toAbsolute(G.popup_css)}else{G.popup_css=F.baseURI.toAbsolute("themes/"+G.theme+"/skins/"+G.skin+"/dialog.css")}}if(G.popup_css_add){G.popup_css+=","+F.documentBaseURI.toAbsolute(G.popup_css_add)}F.controlManager=new k.ControlManager(F);F.onExecCommand.add(function(n,o){if(!/^(FontName|FontSize)$/.test(o)){F.nodeChanged()}});F.onBeforeRenderUI.dispatch(F,F.controlManager);if(G.render_ui&&F.theme){C=G.width||B.style.width||B.offsetWidth;y=G.height||B.style.height||B.offsetHeight;F.orgDisplay=B.style.display;E=/^[0-9\.]+(|px)$/i;if(E.test(""+C)){C=Math.max(parseInt(C,10)+(p.deltaWidth||0),100)}if(E.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),100)}p=F.theme.renderUI({targetNode:B,width:C,height:y,deltaWidth:G.delta_width,deltaHeight:G.delta_height});F.editorContainer=p.editorContainer}if(G.content_css){i(g(G.content_css),function(n){F.contentCSS.push(F.documentBaseURI.toAbsolute(n))})}if(G.content_editable){B=q=p=null;return F.initContentBody()}if(document.domain&&location.hostname!=document.domain){k.relaxedDomain=document.domain}l.setStyles(p.sizeContainer||p.editorContainer,{width:C,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y<100){y=100}F.iframeHTML=G.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(G.document_base_url!=k.documentBaseURL){F.iframeHTML+='<base href="'+F.documentBaseURI.getURI()+'" />'}if(G.ie7_compat){F.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{F.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}F.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';for(x=0;x<F.contentCSS.length;x++){F.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+F.contentCSS[x]+'" />'}F.contentCSS=[];v=G.body_id||"tinymce";if(v.indexOf("=")!=-1){v=F.getParam("body_id","","hash");v=v[F.id]||v}A=G.body_class||"";if(A.indexOf("=")!=-1){A=F.getParam("body_class","","hash");A=A[F.id]||""}F.iframeHTML+='</head><body id="'+v+'" class="mceContentBody '+A+'" onload="window.parent.tinyMCE.get(\''+F.id+"').onLoad.dispatch();\"><br></body></html>";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){D='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+F.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:F.id+"_ifr",src:D||'javascript:""',frameBorder:"0",allowTransparency:"true",title:G.aria_label,style:{width:"100%",height:y,display:"block"}});F.contentAreaContainer=p.iframeContainer;l.get(p.editorContainer).style.display=F.orgDisplay;l.get(F.id).style.display="none";l.setAttrib(F.id,"aria-hidden",true);if(!k.relaxedDomain||!D){F.initContentBody()}B=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(s,t){var u=s.length,x,z=n.dom,y,v;while(u--){x=s[u];y=x.attr(t);v="data-mce-"+t;if(!x.attributes.map[v]){if(t==="style"){x.attr(v,z.serializeStyle(z.parseStyle(y),x.name))}else{x.attr(v,n.convertURL(y,t,x.name))}}}});n.parser.addNodeFilter("script",function(s,t){var u=s.length,v;while(u--){v=s[u];v.attr("type","mce-"+(v.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(s,t){var u=s.length,v;while(u--){v=s[u];v.type=8;v.name="#comment";v.value="[CDATA["+v.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(t,u){var v=t.length,x,s=n.schema.getNonEmptyElements();while(v--){x=t[v];if(x.isEmpty(s)){x.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.serializer.onPreProcess.add(function(s,t){return n.onPreProcess.dispatch(n,t,s)});n.serializer.onPostProcess.add(function(s,t){return n.onPostProcess.dispatch(n,t,s)});n.onPreInit.dispatch(n);if(!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(s,t){i(p.protect,function(u){t.content=t.content.replace(u,function(v){return"<!--mce:protected "+escape(v)+"-->"})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});i(n.contentCSS,function(s){n.dom.loadCSS(s)});if(p.auto_focus){setTimeout(function(){var s=k.get(p.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getBody().focus();s.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'><br data-mce-bogus="1"></'+q+">"}else{r='<br data-mce-bogus="1">'}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}o.selection.normalize();return p.content},getContent:function(n){var m=this,o;n=n||{};n.format=n.format||"html";n.get=true;n.getInner=true;if(!n.no_events){m.onBeforeGetContent.dispatch(m,n)}if(n.format=="raw"){o=m.getBody().innerHTML}else{o=m.serializer.serialize(m.getBody(),n)}n.content=k.trim(o);if(!n.no_events){m.onGetContent.dispatch(m,n)}return n.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":r=p.getAttrib(s,"name");m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,n=m.getContainer();if(!m.removed){m.removed=1;m.hide();if(!m.settings.content_editable){j.clear(m.getWin());j.clear(m.getDoc())}j.clear(m.getBody());j.clear(m.formElement);j.unbind(n);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(n)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","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","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){Event.cancel(g)}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(){l.selection.normalize();l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k()}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=n.selection.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=d.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){if(!k.forced_root_block&&!m.getParent(p.getNode(),m.isBlock)){q.apply("div")}e(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(d.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();v.setStart(x,0);v.setEnd(x,x.childNodes.length);n.selection.setRng(v)}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(v){return m.getParent(p.getNode(),v=="insertunorderedlist"?"UL":"OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getDoc(),b.isGecko?"blur":"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m<e.length-1;m++){e[m]=e[m+1]}e.length--;i=e.length}}p.bookmark=h.selection.getBookmark(2,true);if(i<e.length-1){e.length=i+1}e.push(p);i=e.length-1;l.onAdd.dispatch(l,p);h.isNotDirty=0;return p},undo:function(){var n,m;if(l.typing){l.add();l.typing=false}if(i>0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i<e.length-1){m=e[++i];h.setContent(m.content,{format:"raw"});h.selection.moveToBookmark(m.bookmark);l.onRedo.dispatch(l,m)}return m},clear:function(){e=[];i=0;l.typing=false},hasUndo:function(){return i>0||this.typing},hasRedo:function(){return i<e.length-1&&!this.typing}};return l}})(tinymce);tinymce.ForceBlocks=function(c){var b=c.settings,e=c.dom,a=c.selection,d=c.schema.getBlockElements();function f(){var j=a.getStart(),h=c.getBody(),g,k,o,r,q,i,l,m=-16777215,p;if(!j||j.nodeType!==1||!b.forced_root_block){return}while(j&&j!=h){if(d[j.nodeName]){return}j=j.parentNode}g=a.getRng();if(g.setStart){k=g.startContainer;o=g.startOffset;r=g.endContainer;q=g.endOffset}else{if(g.item){j=g.item(0);g=c.getDoc().body.createTextRange();g.moveToElementText(j)}tmpRng=g.duplicate();tmpRng.collapse(true);o=tmpRng.move("character",m)*-1;if(!tmpRng.collapsed){tmpRng=g.duplicate();tmpRng.collapse(false);q=(tmpRng.move("character",m)*-1)-o}}j=h.firstChild;while(j){if(j.nodeType===3||(j.nodeType==1&&!d[j.nodeName])){if(!i){i=e.create(b.forced_root_block);j.parentNode.insertBefore(i,j);p=true}l=j;j=j.nextSibling;i.appendChild(l)}else{i=null;j=j.nextSibling}}if(g.setStart){g.setStart(k,o);g.setEnd(r,q);a.setRng(g)}else{try{g=c.getDoc().body.createTextRange();g.moveToElementText(h);g.collapse(true);g.moveStart("character",o);if(q>0){g.moveEnd("character",q)}g.select()}catch(n){}}if(p){c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}n["class"]+=i.settings.directionality=="rtl"?" mceRtl":"";f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(f,n,h){var l=this,j=l.editor,i,k,m;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,scope:n.scope,control_manager:l},n);f=l.prefix+f;function g(o){return o.settings.use_accessible_selects&&!c.isGecko}if(j.settings.use_native_selects||g(j)){k=new c.ui.NativeListBox(f,n)}else{m=h||l._cls.listbox||c.ui.ListBox;k=new m(f,n,j)}l.controls[f]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){j.bookmark=j.selection.getBookmark(1)});a.add(o,"focus",function(){j.selection.moveToBookmark(j.bookmark);j.bookmark=null})})}if(k.hideMenu){j.onMouseDown.add(k.hideMenu,k)}return l.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(Y){var O={},R=a.each,c=Y.dom,r=Y.selection,t=a.dom.TreeWalker,M=new a.dom.RangeUtils(c),d=Y.schema.isValidChild,H=c.isBlock,m=Y.settings.forced_root_block,s=c.nodeIndex,G=a.isGecko?"\u200B":"\uFEFF",e=/^(src|href|style)$/,V=false,C=true,D,x=c.getContentEditable;function A(Z){return Z instanceof Array}function n(aa,Z){return c.getParents(aa,Z,c.getRoot())}function b(Z){return Z.nodeType===1&&Z.id==="_mce_caret"}function j(){l({alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(Z){return true},onformat:function(ab,Z,aa){R(aa,function(ad,ac){c.setAttrib(ab,ac,ad)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});R("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(Z){l(Z,{block:Z,remove:"all"})});l(Y.settings.formats)}function U(){Y.addShortcut("ctrl+b","bold_desc","Bold");Y.addShortcut("ctrl+i","italic_desc","Italic");Y.addShortcut("ctrl+u","underline_desc","Underline");for(var Z=1;Z<=6;Z++){Y.addShortcut("ctrl+"+Z,"",["FormatBlock",false,"h"+Z])}Y.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);Y.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);Y.addShortcut("ctrl+9","",["FormatBlock",false,"address"])}function T(Z){return Z?O[Z]:O}function l(Z,aa){if(Z){if(typeof(Z)!=="string"){R(Z,function(ac,ab){l(ab,ac)})}else{aa=aa.length?aa:[aa];R(aa,function(ab){if(ab.deep===D){ab.deep=!ab.selector}if(ab.split===D){ab.split=!ab.selector||ab.inline}if(ab.remove===D&&ab.selector&&!ab.inline){ab.remove="none"}if(ab.selector&&ab.inline){ab.mixed=true;ab.block_expand=true}if(typeof(ab.classes)==="string"){ab.classes=ab.classes.split(/\s+/)}});O[Z]=aa}}}var i=function(aa){var Z;Y.dom.getParent(aa,function(ab){Z=Y.dom.getStyle(ab,"text-decoration");return Z&&Z!=="none"});return Z};var K=function(Z){var aa;if(Z.nodeType===1&&Z.parentNode&&Z.parentNode.nodeType===1){aa=i(Z.parentNode);if(Y.dom.getStyle(Z,"color")&&aa){Y.dom.setStyle(Z,"text-decoration",aa)}else{if(Y.dom.getStyle(Z,"textdecoration")===aa){Y.dom.setStyle(Z,"text-decoration",null)}}}};function W(ac,aj,ae){var af=T(ac),ak=af[0],ai,aa,ah,ag=r.isCollapsed();function Z(ao,an){an=an||ak;if(ao){if(an.onformat){an.onformat(ao,an,aj,ae)}R(an.styles,function(aq,ap){c.setStyle(ao,ap,q(aq,aj))});R(an.attributes,function(aq,ap){c.setAttrib(ao,ap,q(aq,aj))});R(an.classes,function(ap){ap=q(ap,aj);if(!c.hasClass(ao,ap)){c.addClass(ao,ap)}})}}function ad(){function ap(aw,au){var av=new t(au);for(ae=av.current();ae;ae=av.prev()){if(ae.childNodes.length>1||ae==aw||ae.tagName=="BR"){return ae}}}var ao=Y.selection.getRng();var at=ao.startContainer;var an=ao.endContainer;if(at!=an&&ao.endOffset===0){var ar=ap(at,an);var aq=ar.nodeType==3?ar.length:ar.childNodes.length;ao.setEnd(ar,aq)}return ao}function ab(aq,aw,au,at,ao){var an=[],ap=-1,av,ay=-1,ar=-1,ax;R(aq.childNodes,function(aA,az){if(aA.nodeName==="UL"||aA.nodeName==="OL"){ap=az;av=aA;return false}});R(aq.childNodes,function(aA,az){if(aA.nodeName==="SPAN"&&c.getAttrib(aA,"data-mce-type")=="bookmark"){if(aA.id==aw.id+"_start"){ay=az}else{if(aA.id==aw.id+"_end"){ar=az}}}});if(ap<=0||(ay<ap&&ar>ap)){R(a.grep(aq.childNodes),ao);return 0}else{ax=c.clone(au,V);R(a.grep(aq.childNodes),function(aA,az){if((ay<ap&&az<ap)||(ay>ap&&az>ap)){an.push(aA);aA.parentNode.removeChild(aA)}});if(ay<ap){aq.insertBefore(ax,av)}else{if(ay>ap){aq.insertBefore(ax,av.nextSibling)}}at.push(ax);R(an,function(az){ax.appendChild(az)});return ax}}function al(ao,aq,au){var an=[],at,ap,ar=true;at=ak.inline||ak.block;ap=c.create(at);Z(ap);M.walk(ao,function(av){var aw;function ax(ay){var aD,aB,az,aA,aC;aC=ar;aD=ay.nodeName.toLowerCase();aB=ay.parentNode.nodeName.toLowerCase();if(ay.nodeType===1&&x(ay)){aC=ar;ar=x(ay)==="true";aA=true}if(g(aD,"br")){aw=0;if(ak.block){c.remove(ay)}return}if(ak.wrapper&&y(ay,ac,aj)){aw=0;return}if(ar&&!aA&&ak.block&&!ak.wrapper&&I(aD)){ay=c.rename(ay,at);Z(ay);an.push(ay);aw=0;return}if(ak.selector){R(af,function(aE){if("collapsed" in aE&&aE.collapsed!==ag){return}if(c.is(ay,aE.selector)&&!b(ay)){Z(ay,aE);az=true}});if(!ak.inline||az){aw=0;return}}if(ar&&!aA&&d(at,aD)&&d(aB,at)&&!(!au&&ay.nodeType===3&&ay.nodeValue.length===1&&ay.nodeValue.charCodeAt(0)===65279)&&!b(ay)){if(!aw){aw=c.clone(ap,V);ay.parentNode.insertBefore(aw,ay);an.push(aw)}aw.appendChild(ay)}else{if(aD=="li"&&aq){aw=ab(ay,aq,ap,an,ax)}else{aw=0;R(a.grep(ay.childNodes),ax);if(aA){ar=aC}aw=0}}}R(av,ax)});if(ak.wrap_links===false){R(an,function(av){function aw(aA){var az,ay,ax;if(aA.nodeName==="A"){ay=c.clone(ap,V);an.push(ay);ax=a.grep(aA.childNodes);for(az=0;az<ax.length;az++){ay.appendChild(ax[az])}aA.appendChild(ay)}R(a.grep(aA.childNodes),aw)}aw(av)})}R(an,function(ax){var av;function ay(aA){var az=0;R(aA.childNodes,function(aB){if(!f(aB)&&!J(aB)){az++}});return az}function aw(az){var aB,aA;R(az.childNodes,function(aC){if(aC.nodeType==1&&!J(aC)&&!b(aC)){aB=aC;return V}});if(aB&&h(aB,ak)){aA=c.clone(aB,V);Z(aA);c.replace(aA,az,C);c.remove(aB,1)}return aA||az}av=ay(ax);if((an.length>1||!H(ax))&&av===0){c.remove(ax,1);return}if(ak.inline||ak.wrapper){if(!ak.exact&&av===1){ax=aw(ax)}R(af,function(az){R(c.select(az.inline,ax),function(aB){var aA;if(az.wrap_links===false){aA=aB.parentNode;do{if(aA.nodeName==="A"){return}}while(aA=aA.parentNode)}X(az,aj,aB,az.exact?aB:null)})});if(y(ax.parentNode,ac,aj)){c.remove(ax,1);ax=0;return C}if(ak.merge_with_parents){c.getParent(ax.parentNode,function(az){if(y(az,ac,aj)){c.remove(ax,1);ax=0;return C}})}if(ax&&ak.merge_siblings!==false){ax=u(E(ax),ax);ax=u(ax,E(ax,C))}}})}if(ak){if(ae){if(ae.nodeType){aa=c.createRng();aa.setStartBefore(ae);aa.setEndAfter(ae);al(p(aa,af),null,true)}else{al(ae,null,true)}}else{if(!ag||!ak.inline||c.select("td.mceSelected,th.mceSelected").length){var am=Y.selection.getNode();if(!m&&af[0].defaultBlock&&!c.getParent(am,c.isBlock)){W(af[0].defaultBlock)}Y.selection.setRng(ad());ai=r.getBookmark();al(p(r.getRng(C),af),ai);if(ak.styles&&(ak.styles.color||ak.styles.textDecoration)){a.walk(am,K,"childNodes");K(am)}r.moveToBookmark(ai);P(r.getRng(C));Y.nodeChanged()}else{S("apply",ac,aj)}}}}function B(ab,ak,ad){var ae=T(ab),am=ae[0],ai,ah,aa,aj=true;function ac(at){var ar,aq,ap,ao,av,au;if(at.nodeType===1&&x(at)){av=aj;aj=x(at)==="true";au=true}ar=a.grep(at.childNodes);if(aj&&!au){for(aq=0,ap=ae.length;aq<ap;aq++){if(X(ae[aq],ak,at,at)){break}}}if(am.deep){if(ar.length){for(aq=0,ap=ar.length;aq<ap;aq++){ac(ar[aq])}if(au){aj=av}}}}function af(ao){var ap;R(n(ao.parentNode).reverse(),function(aq){var ar;if(!ap&&aq.id!="_start"&&aq.id!="_end"){ar=y(aq,ab,ak);if(ar&&ar.split!==false){ap=aq}}});return ap}function Z(ar,ao,au,ax){var ay,aw,av,aq,at,ap;if(ar){ap=ar.parentNode;for(ay=ao.parentNode;ay&&ay!=ap;ay=ay.parentNode){aw=c.clone(ay,V);for(at=0;at<ae.length;at++){if(X(ae[at],ak,aw,aw)){aw=0;break}}if(aw){if(av){aw.appendChild(av)}if(!aq){aq=aw}av=aw}}if(ax&&(!am.mixed||!H(ar))){ao=c.split(ar,ao)}if(av){au.parentNode.insertBefore(av,au);aq.appendChild(au)}}return ao}function al(ao){return Z(af(ao),ao,ao,true)}function ag(aq){var ap=c.get(aq?"_start":"_end"),ao=ap[aq?"firstChild":"lastChild"];if(J(ao)){ao=ao[aq?"firstChild":"lastChild"]}c.remove(ap,true);return ao}function an(ao){var aq,ar,ap;ao=p(ao,ae,C);if(am.split){aq=L(ao,C);ar=L(ao);if(aq!=ar){if(/^(TR|TD)$/.test(aq.nodeName)&&aq.firstChild){aq=(aq.nodeName=="TD"?aq.firstChild:aq.firstChild.firstChild)||aq}aq=Q(aq,"span",{id:"_start","data-mce-type":"bookmark"});ar=Q(ar,"span",{id:"_end","data-mce-type":"bookmark"});al(aq);al(ar);aq=ag(C);ar=ag()}else{aq=ar=al(aq)}ao.startContainer=aq.parentNode;ao.startOffset=s(aq);ao.endContainer=ar.parentNode;ao.endOffset=s(ar)+1}M.walk(ao,function(at){R(at,function(au){ac(au);if(au.nodeType===1&&Y.dom.getStyle(au,"text-decoration")==="underline"&&au.parentNode&&i(au.parentNode)==="underline"){X({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,au)}})})}if(ad){if(ad.nodeType){aa=c.createRng();aa.setStartBefore(ad);aa.setEndAfter(ad);an(aa)}else{an(ad)}return}if(!r.isCollapsed()||!am.inline||c.select("td.mceSelected,th.mceSelected").length){ai=r.getBookmark();an(r.getRng(C));r.moveToBookmark(ai);if(am.inline&&k(ab,ak,r.getStart())){P(r.getRng(true))}Y.nodeChanged()}else{S("remove",ab,ak)}}function F(aa,ac,ab){var Z=T(aa);if(k(aa,ac,ab)&&(!("toggle" in Z[0])||Z[0].toggle)){B(aa,ac,ab)}else{W(aa,ac,ab)}}function y(aa,Z,af,ad){var ab=T(Z),ag,ae,ac;function ah(al,an,ao){var ak,am,ai=an[ao],aj;if(an.onmatch){return an.onmatch(al,an,ao)}if(ai){if(ai.length===D){for(ak in ai){if(ai.hasOwnProperty(ak)){if(ao==="attributes"){am=c.getAttrib(al,ak)}else{am=N(al,ak)}if(ad&&!am&&!an.exact){return}if((!ad||an.exact)&&!g(am,q(ai[ak],af))){return}}}}else{for(aj=0;aj<ai.length;aj++){if(ao==="attributes"?c.getAttrib(al,ai[aj]):N(al,ai[aj])){return an}}}}return an}if(ab&&aa){for(ae=0;ae<ab.length;ae++){ag=ab[ae];if(h(aa,ag)&&ah(aa,ag,"attributes")&&ah(aa,ag,"styles")){if(ac=ag.classes){for(ae=0;ae<ac.length;ae++){if(!c.hasClass(aa,ac[ae])){return}}}return ag}}}}function k(ab,ad,ac){var aa;function Z(ae){ae=c.getParent(ae,function(af){return !!y(af,ab,ad,true)});return y(ae,ab,ad)}if(ac){return Z(ac)}ac=r.getNode();if(Z(ac)){return C}aa=r.getStart();if(aa!=ac){if(Z(aa)){return C}}return V}function v(ag,af){var ad,ae=[],ac={},ab,aa,Z;ad=r.getStart();c.getParent(ad,function(aj){var ai,ah;for(ai=0;ai<ag.length;ai++){ah=ag[ai];if(!ac[ah]&&y(aj,ah,af)){ac[ah]=true;ae.push(ah)}}});return ae}function z(ad){var af=T(ad),ac,ab,ae,aa,Z;if(af){ac=r.getStart();ab=n(ac);for(aa=af.length-1;aa>=0;aa--){Z=af[aa].selector;if(!Z){return C}for(ae=ab.length-1;ae>=0;ae--){if(c.is(ab[ae],Z)){return C}}}}return V}a.extend(this,{get:T,register:l,apply:W,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z});j();U();function h(Z,aa){if(g(Z,aa.inline)){return C}if(g(Z,aa.block)){return C}if(aa.selector){return c.is(Z,aa.selector)}}function g(aa,Z){aa=aa||"";Z=Z||"";aa=""+(aa.nodeName||aa);Z=""+(Z.nodeName||Z);return aa.toLowerCase()==Z.toLowerCase()}function N(aa,Z){var ab=c.getStyle(aa,Z);if(Z=="color"||Z=="backgroundColor"){ab=c.toHex(ab)}if(Z=="fontWeight"&&ab==700){ab="bold"}return""+ab}function q(Z,aa){if(typeof(Z)!="string"){Z=Z(aa)}else{if(aa){Z=Z.replace(/%(\w+)/g,function(ac,ab){return aa[ab]||ac})}}return Z}function f(Z){return Z&&Z.nodeType===3&&/^([\t \r\n]+|)$/.test(Z.nodeValue)}function Q(ab,aa,Z){var ac=c.create(aa,Z);ab.parentNode.insertBefore(ac,ab);ac.appendChild(ab);return ac}function p(Z,ak,ac){var an,al,af,aj,ab=Z.startContainer,ag=Z.startOffset,ap=Z.endContainer,ai=Z.endOffset;function am(ax){var ar,av,aw,au,at,aq;ar=av=ax?ab:ap;at=ax?"previousSibling":"nextSibling";aq=c.getRoot();if(ar.nodeType==3&&!f(ar)){if(ax?ag>0:ai<ar.nodeValue.length){return ar}}for(;;){if(!ak[0].block_expand&&H(av)){return av}for(au=av[at];au;au=au[at]){if(!J(au)&&!f(au)){return av}}if(av.parentNode==aq){ar=av;break}av=av.parentNode}return ar}function ae(aq,ar){if(ar===D){ar=aq.nodeType===3?aq.length:aq.childNodes.length}while(aq&&aq.hasChildNodes()){aq=aq.childNodes[ar];if(aq){ar=aq.nodeType===3?aq.length:aq.childNodes.length}}return{node:aq,offset:ar}}if(ab.nodeType==1&&ab.hasChildNodes()){al=ab.childNodes.length-1;ab=ab.childNodes[ag>al?al:ag];if(ab.nodeType==3){ag=0}}if(ap.nodeType==1&&ap.hasChildNodes()){al=ap.childNodes.length-1;ap=ap.childNodes[ai>al?al:ai-1];if(ap.nodeType==3){ai=ap.nodeValue.length}}function ao(ar){var aq=ar;while(aq){if(aq.nodeType===1&&x(aq)){return x(aq)==="false"?aq:ar}aq=aq.parentNode}return ar}function ah(ar,aw,ay){var av,at,ax,aq;function au(aA,aC){var aD,az,aB=aA.nodeValue;if(typeof(aC)=="undefined"){aC=ay?aB.length:0}if(ay){aD=aB.lastIndexOf(" ",aC);az=aB.lastIndexOf("\u00a0",aC);aD=aD>az?aD:az;if(aD!==-1&&!ac){aD++}}else{aD=aB.indexOf(" ",aC);az=aB.indexOf("\u00a0",aC);aD=aD!==-1&&(az===-1||aD<az)?aD:az}return aD}if(ar.nodeType===3){ax=au(ar,aw);if(ax!==-1){return{container:ar,offset:ax}}aq=ar}av=new t(ar,c.getParent(ar,H)||Y.getBody());while(at=av[ay?"prev":"next"]()){if(at.nodeType===3){aq=at;ax=au(at);if(ax!==-1){return{container:at,offset:ax}}}else{if(H(at)){break}}}if(aq){if(ay){aw=0}else{aw=aq.length}return{container:aq,offset:aw}}}function ad(ar,aq){var at,au,aw,av;if(ar.nodeType==3&&ar.nodeValue.length===0&&ar[aq]){ar=ar[aq]}at=n(ar);for(au=0;au<at.length;au++){for(aw=0;aw<ak.length;aw++){av=ak[aw];if("collapsed" in av&&av.collapsed!==Z.collapsed){continue}if(c.is(at[au],av.selector)){return at[au]}}}return ar}function aa(ar,aq,au){var at;if(!ak[0].wrapper){at=c.getParent(ar,ak[0].block)}if(!at){at=c.getParent(ar.nodeType==3?ar.parentNode:ar,H)}if(at&&ak[0].wrapper){at=n(at,"ul,ol").reverse()[0]||at}if(!at){at=ar;while(at[aq]&&!H(at[aq])){at=at[aq];if(g(at,"br")){break}}}return at||ar}ab=ao(ab);ap=ao(ap);if(J(ab.parentNode)||J(ab)){ab=J(ab)?ab:ab.parentNode;ab=ab.nextSibling||ab;if(ab.nodeType==3){ag=0}}if(J(ap.parentNode)||J(ap)){ap=J(ap)?ap:ap.parentNode;ap=ap.previousSibling||ap;if(ap.nodeType==3){ai=ap.length}}if(ak[0].inline){if(Z.collapsed){aj=ah(ab,ag,true);if(aj){ab=aj.container;ag=aj.offset}aj=ah(ap,ai);if(aj){ap=aj.container;ai=aj.offset}}af=ae(ap,ai);if(af.node){while(af.node&&af.offset===0&&af.node.previousSibling){af=ae(af.node.previousSibling)}if(af.node&&af.offset>0&&af.node.nodeType===3&&af.node.nodeValue.charAt(af.offset-1)===" "){if(af.offset>1){ap=af.node;ap.splitText(af.offset-1)}}}}if(ak[0].inline||ak[0].block_expand){if(!ak[0].inline||(ab.nodeType!=3||ag===0)){ab=am(true)}if(!ak[0].inline||(ap.nodeType!=3||ai===ap.nodeValue.length)){ap=am()}}if(ak[0].selector&&ak[0].expand!==V&&!ak[0].inline){ab=ad(ab,"previousSibling");ap=ad(ap,"nextSibling")}if(ak[0].block||ak[0].selector){ab=aa(ab,"previousSibling");ap=aa(ap,"nextSibling");if(ak[0].block){if(!H(ab)){ab=am(true)}if(!H(ap)){ap=am()}}}if(ab.nodeType==1){ag=s(ab);ab=ab.parentNode}if(ap.nodeType==1){ai=s(ap)+1;ap=ap.parentNode}return{startContainer:ab,startOffset:ag,endContainer:ap,endOffset:ai}}function X(af,ae,ac,Z){var ab,aa,ad;if(!h(ac,af)){return V}if(af.remove!="all"){R(af.styles,function(ah,ag){ah=q(ah,ae);if(typeof(ag)==="number"){ag=ah;Z=0}if(!Z||g(N(Z,ag),ah)){c.setStyle(ac,ag,"")}ad=1});if(ad&&c.getAttrib(ac,"style")==""){ac.removeAttribute("style");ac.removeAttribute("data-mce-style")}R(af.attributes,function(ai,ag){var ah;ai=q(ai,ae);if(typeof(ag)==="number"){ag=ai;Z=0}if(!Z||g(c.getAttrib(Z,ag),ai)){if(ag=="class"){ai=c.getAttrib(ac,ag);if(ai){ah="";R(ai.split(/\s+/),function(aj){if(/mce\w+/.test(aj)){ah+=(ah?" ":"")+aj}});if(ah){c.setAttrib(ac,ag,ah);return}}}if(ag=="class"){ac.removeAttribute("className")}if(e.test(ag)){ac.removeAttribute("data-mce-"+ag)}ac.removeAttribute(ag)}});R(af.classes,function(ag){ag=q(ag,ae);if(!Z||c.hasClass(Z,ag)){c.removeClass(ac,ag)}});aa=c.getAttribs(ac);for(ab=0;ab<aa.length;ab++){if(aa[ab].nodeName.indexOf("_")!==0){return V}}}if(af.remove!="none"){o(ac,af);return C}}function o(ab,ac){var Z=ab.parentNode,aa;function ad(af,ae,ag){af=E(af,ae,ag);return !af||(af.nodeName=="BR"||H(af))}if(ac.block){if(!m){if(H(ab)&&!H(Z)){if(!ad(ab,V)&&!ad(ab.firstChild,C,1)){ab.insertBefore(c.create("br"),ab.firstChild)}if(!ad(ab,C)&&!ad(ab.lastChild,V,1)){ab.appendChild(c.create("br"))}}}else{if(Z==c.getRoot()){if(!ac.list_block||!g(ab,ac.list_block)){R(a.grep(ab.childNodes),function(ae){if(d(m,ae.nodeName.toLowerCase())){if(!aa){aa=Q(ae,m)}else{aa.appendChild(ae)}}else{aa=0}})}}}}if(ac.selector&&ac.inline&&!g(ac.inline,ab)){return}c.remove(ab,1)}function E(aa,Z,ab){if(aa){Z=Z?"nextSibling":"previousSibling";for(aa=ab?aa:aa[Z];aa;aa=aa[Z]){if(aa.nodeType==1||!f(aa)){return aa}}}}function J(Z){return Z&&Z.nodeType==1&&Z.getAttribute("data-mce-type")=="bookmark"}function u(ad,ac){var Z,ab,aa;function af(ai,ah){if(ai.nodeName!=ah.nodeName){return V}function ag(ak){var al={};R(c.getAttribs(ak),function(am){var an=am.nodeName.toLowerCase();if(an.indexOf("_")!==0&&an!=="style"){al[an]=c.getAttrib(ak,an)}});return al}function aj(an,am){var al,ak;for(ak in an){if(an.hasOwnProperty(ak)){al=am[ak];if(al===D){return V}if(an[ak]!=al){return V}delete am[ak]}}for(ak in am){if(am.hasOwnProperty(ak)){return V}}return C}if(!aj(ag(ai),ag(ah))){return V}if(!aj(c.parseStyle(c.getAttrib(ai,"style")),c.parseStyle(c.getAttrib(ah,"style")))){return V}return C}function ae(ah,ag){for(ab=ah;ab;ab=ab[ag]){if(ab.nodeType==3&&ab.nodeValue.length!==0){return ah}if(ab.nodeType==1&&!J(ab)){return ab}}return ah}if(ad&&ac){ad=ae(ad,"previousSibling");ac=ae(ac,"nextSibling");if(af(ad,ac)){for(ab=ad.nextSibling;ab&&ab!=ac;){aa=ab;ab=ab.nextSibling;ad.appendChild(aa)}c.remove(ac);R(a.grep(ac.childNodes),function(ag){ad.appendChild(ag)});return ad}}return ac}function I(Z){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(Z)}function L(aa,ae){var Z,ad,ab,ac;Z=aa[ae?"startContainer":"endContainer"];ad=aa[ae?"startOffset":"endOffset"];if(Z.nodeType==1){ab=Z.childNodes.length-1;if(!ae&&ad){ad--}Z=Z.childNodes[ad>ab?ab:ad]}if(Z.nodeType===3&&ae&&ad>=Z.nodeValue.length){Z=new t(Z,Y.getBody()).next()||Z}if(Z.nodeType===3&&!ae&&ad===0){Z=new t(Z,Y.getBody()).prev()||Z}return Z}function S(ai,Z,ag){var aj="_mce_caret",aa=Y.settings.caret_debug;function ab(am){var al=c.create("span",{id:aj,"data-mce-bogus":true,style:aa?"color:red":""});if(am){al.appendChild(Y.getDoc().createTextNode(G))}return al}function ah(am,al){while(am){if((am.nodeType===3&&am.nodeValue!==G)||am.childNodes.length>1){return false}if(al&&am.nodeType===1){al.push(am)}am=am.firstChild}return true}function ae(al){while(al){if(al.id===aj){return al}al=al.parentNode}}function ad(al){var am;if(al){am=new t(al,al);for(al=am.current();al;al=am.next()){if(al.nodeType===3){return al}}}}function ac(an,am){var ao,al;if(!an){an=ae(r.getStart());if(!an){while(an=c.get(aj)){ac(an,false)}}}else{al=r.getRng(true);if(ah(an)){if(am!==false){al.setStartBefore(an);al.setEndBefore(an)}c.remove(an)}else{ao=ad(an);if(ao.nodeValue.charAt(0)===G){ao=ao.deleteData(0,1)}c.remove(an,1)}r.setRng(al)}}function af(){var an,al,ar,aq,ao,am,ap;an=r.getRng(true);aq=an.startOffset;am=an.startContainer;ap=am.nodeValue;al=ae(r.getStart());if(al){ar=ad(al)}if(ap&&aq>0&&aq<ap.length&&/\w/.test(ap.charAt(aq))&&/\w/.test(ap.charAt(aq-1))){ao=r.getBookmark();an.collapse(true);an=p(an,T(Z));an=M.split(an);W(Z,ag,an);r.moveToBookmark(ao)}else{if(!al||ar.nodeValue!==G){al=ab(true);ar=al.firstChild;an.insertNode(al);aq=1;W(Z,ag,al)}else{W(Z,ag,al)}r.setCursorLocation(ar,aq)}}function ak(){var al=r.getRng(true),am,ao,ar,aq,an,av,au=[],ap,at;am=al.startContainer;ao=al.startOffset;an=am;if(am.nodeType==3){if(ao!=am.nodeValue.length||am.nodeValue===G){aq=true}an=an.parentNode}while(an){if(y(an,Z,ag)){av=an;break}if(an.nextSibling){aq=true}au.push(an);an=an.parentNode}if(!av){return}if(aq){ar=r.getBookmark();al.collapse(true);al=p(al,T(Z),true);al=M.split(al);B(Z,ag,al);r.moveToBookmark(ar)}else{at=ab();an=at;for(ap=au.length-1;ap>=0;ap--){an.appendChild(c.clone(au[ap],false));an=an.firstChild}an.appendChild(c.doc.createTextNode(G));an=an.firstChild;c.insertAfter(at,av);r.setCursorLocation(an,1)}}if(!self._hasCaretEvents){Y.onBeforeGetContent.addToTop(function(){var al=[],am;if(ah(ae(r.getStart()),al)){am=al.length;while(am--){c.setAttrib(al[am],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(al){Y[al].addToTop(function(){ac()})});Y.onKeyDown.addToTop(function(al,an){var am=an.keyCode;if(am==8||am==37||am==39){ac(ae(r.getStart()))}});r.onSetContent.add(function(){c.getParent(r.getStart(),function(al){if(al.id!==aj&&c.getAttrib(al,"data-mce-bogus")&&!c.isEmpty(al)){c.setAttrib(al,"data-mce-bogus",null)}})});self._hasCaretEvents=true}if(ai=="apply"){af()}else{ak()}}function P(aa){var Z=aa.startContainer,ag=aa.startOffset,ac,af,ae,ab,ad;if(Z.nodeType==3&&ag>=Z.nodeValue.length){ag=s(Z);Z=Z.parentNode;ac=true}if(Z.nodeType==1){ab=Z.childNodes;Z=ab[Math.min(ag,ab.length-1)];af=new t(Z,c.getParent(Z,c.isBlock));if(ag>ab.length-1||ac){af.next()}for(ae=af.current();ae;ae=af.next()){if(ae.nodeType==3&&!f(ae)){ad=c.create("a",null,G);ae.parentNode.insertBefore(ad,ae);aa.setStart(ae,0);r.setRng(aa);c.remove(ad);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(e){var h=e.dom,d=e.selection,c=e.settings,g=e.undoManager;function f(y){var u=d.getRng(true),C,i,x,t,o,H,n,j,l,s,E,v,z;function B(I){return I&&h.isBlock(I)&&!/^(TD|TH|CAPTION)$/.test(I.nodeName)&&!/^(fixed|absolute)/i.test(I.style.position)&&h.getContentEditable(I)!=="true"}function m(J){var O,M,I,P,N,L=J,K;I=h.createRng();if(J.hasChildNodes()){O=new a(J,J);while(M=O.current()){if(M.nodeType==3){I.setStart(M,0);I.setEnd(M,0);break}if(/^(BR|IMG)$/.test(M.nodeName)){I.setStartBefore(M);I.setEndBefore(M);break}L=M;M=O.next()}if(!M){I.setStart(L,0);I.setEnd(L,0)}}else{if(J.nodeName=="BR"){if(J.nextSibling&&h.isBlock(J.nextSibling)){if(!H||H<9){K=h.create("br");J.parentNode.insertBefore(K,J)}I.setStartBefore(J);I.setEndBefore(J)}else{I.setStartAfter(J);I.setEndAfter(J)}}else{I.setStart(J,0);I.setEnd(J,0)}}d.setRng(I);h.remove(K);N=h.getViewPort(e.getWin());P=h.getPos(J).y;if(P<N.y||P+25>N.y+N.h){e.getWin().scrollTo(0,P<N.y?P:P-N.h+25)}}function q(J){var K=x,M,L,I;M=J||s=="TABLE"?h.create(J||v):o.cloneNode(false);I=M;if(c.keep_styles!==false){do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(K.nodeName)){L=K.cloneNode(false);h.setAttrib(L,"id","");if(M.hasChildNodes()){L.appendChild(M.firstChild);M.appendChild(L)}else{I=L;M.appendChild(L)}}}while(K=K.parentNode)}if(!b.isIE){I.innerHTML="<br>"}return M}function p(L){var K,J,I;if(x.nodeType==3&&(L?t>0:t<x.nodeValue.length)){return false}if(x.parentNode==o&&z&&!L){return true}if(x.nodeName==="TABLE"||(x.previousSibling&&x.previousSibling.nodeName=="TABLE")){return(z&&!L)||(!z&&L)}K=new a(x,o);while(J=(L?K.prev():K.next())){if(J.nodeType===1){if(J.getAttribute("data-mce-bogus")){continue}I=J.nodeName.toLowerCase();if(I==="IMG"){return false}}else{if(J.nodeType===3&&!/^[ \t\r\n]*$/.test(J.nodeValue)){return false}}}return true}function k(I,O){var P,N,K,M,L,J=v||"P";N=h.getParent(I,h.isBlock);if(!N||!B(N)){N=N||i;if(!N.hasChildNodes()){P=h.create(J);N.appendChild(P);u.setStart(P,0);u.setEnd(P,0);return P}M=I;while(M.parentNode!=N){M=M.parentNode}while(M&&!h.isBlock(M)){K=M;M=M.previousSibling}if(K){P=h.create(J);K.parentNode.insertBefore(P,K);M=K;while(M&&!h.isBlock(M)){L=M.nextSibling;P.appendChild(M);M=L}u.setStart(I,O);u.setEnd(I,O)}}return I}function D(){function I(K){var J=l[K?"firstChild":"lastChild"];while(J){if(J.nodeType==1){break}J=J[K?"nextSibling":"previousSibling"]}return J===o}n=v?q(v):h.create("BR");if(I(true)&&I()){h.replace(n,l)}else{if(I(true)){l.parentNode.insertBefore(n,l)}else{if(I()){h.insertAfter(n,l)}else{C=u.cloneRange();C.setStartAfter(o);C.setEndAfter(l);j=C.extractContents();h.insertAfter(j,l);h.insertAfter(n,l)}}}h.remove(o);m(n);g.add()}function A(){var J=new a(x,o),I;while(I=J.current()){if(I.nodeName=="BR"){return true}I=J.next()}}function G(){var J,I;if(x&&x.nodeType==3&&t>=x.nodeValue.length){if(!b.isIE&&!A()){J=h.create("br");u.insertNode(J);u.setStartAfter(J);u.setEndAfter(J);I=true}}J=h.create("br");u.insertNode(J);if(b.isIE&&s=="PRE"&&(!H||H<8)){J.parentNode.insertBefore(h.doc.createTextNode("\r"),J)}if(!I){u.setStartAfter(J);u.setEndAfter(J)}else{u.setStartBefore(J);u.setEndBefore(J)}d.setRng(u);g.add()}function r(I){do{if(I.nodeType===3){I.nodeValue=I.nodeValue.replace(/^[\r\n]+/,"")}I=I.firstChild}while(I)}function F(K){var I=h.getRoot(),J,L;J=K;while(J!==I&&h.getContentEditable(J)!=="false"){if(h.getContentEditable(J)==="true"){L=J}J=J.parentNode}return J!==I?L:I}if(!u.collapsed){e.execCommand("Delete");return}if(y.isDefaultPrevented()){return}x=u.startContainer;t=u.startOffset;v=c.forced_root_block;v=v?v.toUpperCase():"";H=h.doc.documentMode;if(x.nodeType==1&&x.hasChildNodes()){z=t>x.childNodes.length-1;x=x.childNodes[Math.min(t,x.childNodes.length-1)]||x;t=0}i=F(x);if(!i){return}g.beforeChange();if(!h.isBlock(i)&&i!=h.getRoot()){if(!v||y.shiftKey){G()}return}if((v&&!y.shiftKey)||(!v&&y.shiftKey)){x=k(x,t)}o=h.getParent(x,h.isBlock);l=o?h.getParent(o.parentNode,h.isBlock):null;s=o?o.nodeName.toUpperCase():"";E=l?l.nodeName.toUpperCase():"";if(s=="LI"&&h.isEmpty(o)){if(/^(UL|OL|LI)$/.test(l.parentNode.nodeName)){return false}D();return}if(s=="PRE"&&c.br_in_pre!==false){if(!y.shiftKey){G();return}}else{if((!v&&!y.shiftKey&&s!="LI")||(v&&y.shiftKey)){G();return}}v=v||"P";if(p()){if(/^(H[1-6]|PRE)$/.test(s)&&E!="HGROUP"){n=q(v)}else{n=q()}if(c.end_container_on_empty_block&&B(l)&&h.isEmpty(o)){n=h.split(l,o)}else{h.insertAfter(n,o)}}else{if(p(true)){n=o.parentNode.insertBefore(q(),o)}else{C=u.cloneRange();C.setEndAfter(o);j=C.extractContents();r(j);n=j.firstChild;h.insertAfter(j,o)}}h.setAttrib(n,"id","");m(n);g.add()}e.onKeyDown.add(function(j,i){if(i.keyCode==13){if(f(i)!==false){i.preventDefault()}}})}})(tinymce); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js b/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js
index 42f01a58c..a0e114bea 100644
--- a/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js
+++ b/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js
@@ -1,13 +1,14 @@
+// FILE IS GENERATED BY COMBINING THE SOURCES IN THE "classes" DIRECTORY SO DON'T MODIFY THIS FILE DIRECTLY
(function(win) {
var whiteSpaceRe = /^\s*|\s*$/g,
- undefined, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';
+ undef, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';
var tinymce = {
majorVersion : '3',
- minorVersion : '5b2',
+ minorVersion : '5.0.1',
- releaseDate : '2012-03-15',
+ releaseDate : '2012-05-10',
_init : function() {
var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;
@@ -50,7 +51,8 @@
// If base element found, add that infront of baseURL
nl = d.getElementsByTagName('base');
for (i=0; i<nl.length; i++) {
- if (v = nl[i].href) {
+ v = nl[i].href;
+ if (v) {
// Host only value like http://site.com or http://site.com:8008
if (/^https?:\/\/[^\/]+$/.test(v))
v += '/';
@@ -103,7 +105,7 @@
is : function(o, t) {
if (!t)
- return o !== undefined;
+ return o !== undef;
if (t == 'array' && (o.hasOwnProperty && o instanceof Array))
return true;
@@ -137,7 +139,7 @@
s = s || o;
- if (o.length !== undefined) {
+ if (o.length !== undef) {
// Indexed arrays, needed for Safari
for (n=0, l = o.length; n < l; n++) {
if (cb.call(s, o[n], n, o) === false)
@@ -191,19 +193,23 @@
return -1;
},
- extend : function(o, e) {
- var i, l, a = arguments;
+ extend : function(obj, ext) {
+ var i, l, name, args = arguments, value;
- for (i = 1, l = a.length; i < l; i++) {
- e = a[i];
+ for (i = 1, l = args.length; i < l; i++) {
+ ext = args[i];
+ for (name in ext) {
+ if (ext.hasOwnProperty(name)) {
+ value = ext[name];
- tinymce.each(e, function(v, n) {
- if (v !== undefined)
- o[n] = v;
- });
+ if (value !== undef) {
+ obj[name] = value;
+ }
+ }
+ }
}
- return o;
+ return obj;
},
@@ -346,69 +352,69 @@
},
addUnload : function(f, s) {
- var t = this;
+ var t = this, unload;
- f = {func : f, scope : s || this};
+ unload = function() {
+ var li = t.unloads, o, n;
- if (!t.unloads) {
- function unload() {
- var li = t.unloads, o, n;
+ if (li) {
+ // Call unload handlers
+ for (n in li) {
+ o = li[n];
- if (li) {
- // Call unload handlers
- for (n in li) {
- o = li[n];
+ if (o && o.func)
+ o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy
+ }
- if (o && o.func)
- o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy
- }
+ // Detach unload function
+ if (win.detachEvent) {
+ win.detachEvent('onbeforeunload', fakeUnload);
+ win.detachEvent('onunload', unload);
+ } else if (win.removeEventListener)
+ win.removeEventListener('unload', unload, false);
- // Detach unload function
- if (win.detachEvent) {
- win.detachEvent('onbeforeunload', fakeUnload);
- win.detachEvent('onunload', unload);
- } else if (win.removeEventListener)
- win.removeEventListener('unload', unload, false);
+ // Destroy references
+ t.unloads = o = li = w = unload = 0;
- // Destroy references
- t.unloads = o = li = w = unload = 0;
+ // Run garbarge collector on IE
+ if (win.CollectGarbage)
+ CollectGarbage();
+ }
+ };
- // Run garbarge collector on IE
- if (win.CollectGarbage)
- CollectGarbage();
- }
- };
+ function fakeUnload() {
+ var d = document;
- function fakeUnload() {
- var d = document;
+ function stop() {
+ // Prevent memory leak
+ d.detachEvent('onstop', stop);
- // Is there things still loading, then do some magic
- if (d.readyState == 'interactive') {
- function stop() {
- // Prevent memory leak
- d.detachEvent('onstop', stop);
+ // Call unload handler
+ if (unload)
+ unload();
- // Call unload handler
- if (unload)
- unload();
+ d = 0;
+ };
- d = 0;
- };
+ // Is there things still loading, then do some magic
+ if (d.readyState == 'interactive') {
+ // Fire unload when the currently loading page is stopped
+ if (d)
+ d.attachEvent('onstop', stop);
- // Fire unload when the currently loading page is stopped
+ // Remove onstop listener after a while to prevent the unload function
+ // to execute if the user presses cancel in an onbeforeunload
+ // confirm dialog and then presses the browser stop button
+ win.setTimeout(function() {
if (d)
- d.attachEvent('onstop', stop);
-
- // Remove onstop listener after a while to prevent the unload function
- // to execute if the user presses cancel in an onbeforeunload
- // confirm dialog and then presses the browser stop button
- win.setTimeout(function() {
- if (d)
- d.detachEvent('onstop', stop);
- }, 0);
- }
- };
+ d.detachEvent('onstop', stop);
+ }, 0);
+ }
+ };
+
+ f = {func : f, scope : s || this};
+ if (!t.unloads) {
// Attach unload handler
if (win.attachEvent) {
win.attachEvent('onunload', unload);
@@ -439,7 +445,11 @@
},
explode : function(s, d) {
- return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;
+ if (!s || tinymce.is(s, 'array')) {
+ return s;
+ }
+
+ return tinymce.map(s.split(d || ','), tinymce.trim);
},
_addVer : function(u) {
@@ -465,7 +475,7 @@
var val = replace, args = arguments, i;
for (i = 0; i < args.length - 2; i++) {
- if (args[i] === undefined) {
+ if (args[i] === undef) {
val = val.replace(new RegExp('\\$' + i, 'g'), '');
} else {
val = val.replace(new RegExp('\\$' + i, 'g'), args[i]);
@@ -496,52 +506,64 @@
tinymce.create('tinymce.util.Dispatcher', {
scope : null,
listeners : null,
+ inDispatch: false,
- Dispatcher : function(s) {
- this.scope = s || this;
+ Dispatcher : function(scope) {
+ this.scope = scope || this;
this.listeners = [];
},
- add : function(cb, s) {
- this.listeners.push({cb : cb, scope : s || this.scope});
+ add : function(callback, scope) {
+ this.listeners.push({cb : callback, scope : scope || this.scope});
- return cb;
+ return callback;
},
- addToTop : function(cb, s) {
- this.listeners.unshift({cb : cb, scope : s || this.scope});
+ addToTop : function(callback, scope) {
+ var self = this, listener = {cb : callback, scope : scope || self.scope};
+
+ // Create new listeners if addToTop is executed in a dispatch loop
+ if (self.inDispatch) {
+ self.listeners = [listener].concat(self.listeners);
+ } else {
+ self.listeners.unshift(listener);
+ }
- return cb;
+ return callback;
},
- remove : function(cb) {
- var l = this.listeners, o = null;
+ remove : function(callback) {
+ var listeners = this.listeners, output = null;
- tinymce.each(l, function(c, i) {
- if (cb == c.cb) {
- o = cb;
- l.splice(i, 1);
+ tinymce.each(listeners, function(listener, i) {
+ if (callback == listener.cb) {
+ output = listener;
+ listeners.splice(i, 1);
return false;
}
});
- return o;
+ return output;
},
dispatch : function() {
- var s, a = arguments, i, li = this.listeners, c;
+ var self = this, returnValue, args = arguments, i, listeners = self.listeners, listener;
+ self.inDispatch = true;
+
// Needs to be a real loop since the listener count might change while looping
// And this is also more efficient
- for (i = 0; i<li.length; i++) {
- c = li[i];
- s = c.cb.apply(c.scope, a.length > 0 ? a : [c.scope]);
+ for (i = 0; i < listeners.length; i++) {
+ listener = listeners[i];
+ returnValue = listener.cb.apply(listener.scope, args.length > 0 ? args : [listener.scope]);
- if (s === false)
+ if (returnValue === false)
break;
}
- return s;
+ self.inDispatch = false;
+
+ return returnValue;
}
});
@@ -571,7 +593,7 @@ tinymce.create('tinymce.util.Dispatcher', {
u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;
// Relative path http:// or protocol relative //path
- if (!/^[\w-]*:?\/\//.test(u)) {
+ if (!/^[\w\-]*:?\/\//.test(u)) {
base_url = s.base_uri ? s.base_uri.path : new tinymce.util.URI(location.href).directory;
u = ((s.base_uri && s.base_uri.protocol) || 'http') + '://mce_host' + t.toAbsPath(base_url, u);
}
@@ -589,17 +611,18 @@ tinymce.create('tinymce.util.Dispatcher', {
t[v] = s;
});
- if (b = s.base_uri) {
+ b = s.base_uri;
+ if (b) {
if (!t.protocol)
t.protocol = b.protocol;
if (!t.userInfo)
t.userInfo = b.userInfo;
- if (!t.port && t.host == 'mce_host')
+ if (!t.port && t.host === 'mce_host')
t.port = b.port;
- if (!t.host || t.host == 'mce_host')
+ if (!t.host || t.host === 'mce_host')
t.host = b.host;
t.source = '';
@@ -635,6 +658,12 @@ tinymce.create('tinymce.util.Dispatcher', {
if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol)
return u.getURI();
+ var tu = t.getURI(), uu = u.getURI();
+
+ // Allow usage of the base_uri when relative_urls = true
+ if(tu == uu || (tu.charAt(tu.length - 1) == "/" && tu.substr(0, tu.length - 1) == uu))
+ return tu;
+
o = t.toRelPath(t.path, u.path);
// Add query
@@ -649,7 +678,7 @@ tinymce.create('tinymce.util.Dispatcher', {
},
toAbsolute : function(u, nh) {
- var u = new tinymce.util.URI(u, {base_uri : this});
+ u = new tinymce.util.URI(u, {base_uri : this});
return u.getURI(this.host == u.host && this.protocol == u.protocol ? nh : 0);
},
@@ -680,7 +709,7 @@ tinymce.create('tinymce.util.Dispatcher', {
}
}
- if (bp == 1)
+ if (bp === 1)
return path;
for (i = 0, l = base.length - (bp - 1); i < l; i++)
@@ -715,11 +744,11 @@ tinymce.create('tinymce.util.Dispatcher', {
// Merge relURLParts chunks
for (i = path.length - 1, o = []; i >= 0; i--) {
// Ignore empty or .
- if (path[i].length == 0 || path[i] == ".")
+ if (path[i].length === 0 || path[i] === ".")
continue;
// Is parent
- if (path[i] == '..') {
+ if (path[i] === '..') {
nb++;
continue;
}
@@ -830,7 +859,7 @@ tinymce.create('tinymce.util.Dispatcher', {
if (b == -1) {
b = c.indexOf(p);
- if (b != 0)
+ if (b !== 0)
return null;
} else
b += 2;
@@ -863,7 +892,7 @@ tinymce.create('tinymce.util.Dispatcher', {
(function() {
function serialize(o, quote) {
- var i, v, t;
+ var i, v, t, name;
quote = quote || '"';
@@ -901,9 +930,9 @@ tinymce.create('tinymce.util.Dispatcher', {
v = '{';
- for (i in o) {
- if (o.hasOwnProperty(i)) {
- v += typeof o[i] != 'function' ? (v.length > 1 ? ',' + quote : quote) + i + quote +':' + serialize(o[i], quote) : '';
+ for (name in o) {
+ if (o.hasOwnProperty(name)) {
+ v += typeof o[name] != 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote +':' + serialize(o[name], quote) : '';
}
}
@@ -931,6 +960,18 @@ tinymce.create('static tinymce.util.XHR', {
send : function(o) {
var x, t, w = window, c = 0;
+ function ready() {
+ if (!o.async || x.readyState == 4 || c++ > 10000) {
+ 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;
+ } else
+ w.setTimeout(ready, 10);
+ };
+
// Default settings
o.scope = o.scope || this;
o.success_scope = o.success_scope || o.scope;
@@ -964,18 +1005,6 @@ tinymce.create('static tinymce.util.XHR', {
x.send(o.data);
- function ready() {
- if (!o.async || x.readyState == 4 || c++ > 10000) {
- 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;
- } else
- w.setTimeout(ready, 10);
- };
-
// Syncronous request
if (!o.async)
return ready();
@@ -1055,13 +1084,13 @@ tinymce.create('static tinymce.util.XHR', {
modifierPressed: function (e) {
return e.shiftKey || e.ctrlKey || e.altKey;
}
- }
+ };
})(tinymce);
-(function(tinymce) {
- var VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE;
+tinymce.util.Quirks = function(editor) {
+ var VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings;
- function setEditorCommandState(editor, cmd, state) {
+ function setEditorCommandState(cmd, state) {
try {
editor.getDoc().execCommand(cmd, false, state);
} catch (ex) {
@@ -1069,107 +1098,163 @@ tinymce.create('static tinymce.util.XHR', {
}
}
- function cleanupStylesWhenDeleting(ed) {
- var dom = ed.dom, selection = ed.selection;
+ function cleanupStylesWhenDeleting() {
+ function removeMergedFormatSpans(isDelete) {
+ var rng, blockElm, node, clonedSpan;
+
+ rng = selection.getRng();
- ed.onKeyDown.add(function(ed, e) {
- var rng, blockElm, node, clonedSpan, isDelete;
+ // Find root block
+ blockElm = dom.getParent(rng.startContainer, dom.isBlock);
- if (e.isDefaultPrevented()) {
- return;
+ // On delete clone the root span of the next block element
+ if (isDelete)
+ blockElm = dom.getNext(blockElm, dom.isBlock);
+
+ // Locate root span element and clone it since it would otherwise get merged by the "apple-style-span" on delete/backspace
+ if (blockElm) {
+ node = blockElm.firstChild;
+
+ // Ignore empty text nodes
+ while (node && node.nodeType == 3 && node.nodeValue.length === 0)
+ node = node.nextSibling;
+
+ if (node && node.nodeName === 'SPAN') {
+ clonedSpan = node.cloneNode(false);
+ }
}
+ // Do the backspace/delete action
+ editor.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);
+
+ // Find all odd apple-style-spans
+ blockElm = dom.getParent(rng.startContainer, dom.isBlock);
+ tinymce.each(dom.select('span.Apple-style-span,font.Apple-style-span', blockElm), function(span) {
+ var bm = selection.getBookmark();
+
+ if (clonedSpan) {
+ dom.replace(clonedSpan.cloneNode(false), span, true);
+ } else {
+ dom.remove(span, true);
+ }
+
+ // Restore the selection
+ selection.moveToBookmark(bm);
+ });
+ };
+
+ editor.onKeyDown.add(function(editor, e) {
+ var isDelete;
+
isDelete = e.keyCode == DELETE;
- if ((isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) {
+ if (!e.isDefaultPrevented() && (isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) {
e.preventDefault();
- rng = selection.getRng();
+ removeMergedFormatSpans(isDelete);
+ }
+ });
- // Find root block
- blockElm = dom.getParent(rng.startContainer, dom.isBlock);
+ editor.addCommand('Delete', function() {removeMergedFormatSpans();});
+ };
+
+ function emptyEditorWhenDeleting() {
+ function getEndPointNode(rng, start) {
+ var container, offset, prefix = start ? 'start' : 'end';
- // On delete clone the root span of the next block element
- if (isDelete)
- blockElm = dom.getNext(blockElm, dom.isBlock);
+ container = rng[prefix + 'Container'];
+ offset = rng[prefix + 'Offset'];
- // Locate root span element and clone it since it would otherwise get merged by the "apple-style-span" on delete/backspace
- if (blockElm) {
- node = blockElm.firstChild;
+ // Resolve indexed container
+ if (container.nodeType == 1 && container.hasChildNodes()) {
+ container = container.childNodes[Math.min(start ? offset : (offset > 0 ? offset - 1 : 0), container.childNodes.length - 1)]
+ }
- // Ignore empty text nodes
- while (node && node.nodeType == 3 && node.nodeValue.length == 0)
- node = node.nextSibling;
+ return container;
+ };
- if (node && node.nodeName === 'SPAN') {
- clonedSpan = node.cloneNode(false);
- }
- }
+ function isAtStartEndOfBody(rng, start) {
+ var container, offset, root, childNode, prefix = start ? 'start' : 'end', isAfter;
- // Do the backspace/delete action
- ed.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);
+ container = rng[prefix + 'Container'];
+ offset = rng[prefix + 'Offset'];
+ root = dom.getRoot();
- // Find all odd apple-style-spans
- blockElm = dom.getParent(rng.startContainer, dom.isBlock);
- tinymce.each(dom.select('span.Apple-style-span,font.Apple-style-span', blockElm), function(span) {
- var bm = selection.getBookmark();
+ // Resolve indexed container
+ if (container.nodeType == 1) {
+ isAfter = offset >= container.childNodes.length;
+ container = getEndPointNode(rng, start);
- if (clonedSpan) {
- dom.replace(clonedSpan.cloneNode(false), span, true);
- } else {
- dom.remove(span, true);
- }
+ if (container.nodeType == 3) {
+ offset = start && !isAfter ? 0 : container.nodeValue.length;
+ }
+ }
- // Restore the selection
- selection.moveToBookmark(bm);
- });
+ // Check if start/end is in the middle of text
+ if (container.nodeType == 3 && ((start && offset > 0) || (!start && offset < container.nodeValue.length))) {
+ return false;
}
- });
- };
- function emptyEditorWhenDeleting(ed) {
- function serializeRng(rng) {
- var body = ed.dom.create("body");
- var contents = rng.cloneContents();
- body.appendChild(contents);
- return ed.selection.serializer.serialize(body, {format: 'html'});
- }
+ // Walk up the DOM tree to see if the endpoint is at the beginning/end of body
+ while (container !== root) {
+ childNode = container.parentNode[start ? 'firstChild' : 'lastChild'];
- function allContentsSelected(rng) {
- var selection = serializeRng(rng);
+ // If first/last element is a BR then jump to it's sibling in case: <p>x<br></p>
+ if (childNode.nodeName == "BR") {
+ childNode = childNode[start ? 'nextSibling' : 'previousSibling'] || childNode;
+ }
- var allRng = ed.dom.createRng();
- allRng.selectNode(ed.getBody());
+ // If the childNode isn't the container node then break in case <p><span>A</span>[X]</p>
+ if (childNode !== container) {
+ return false;
+ }
- var allSelection = serializeRng(allRng);
- return selection === allSelection;
- }
+ container = container.parentNode;
+ }
- ed.onKeyDown.addToTop(function(ed, e) {
- var keyCode = e.keyCode;
- if (keyCode == DELETE || keyCode == BACKSPACE) {
- var rng = ed.selection.getRng(true);
- if (!rng.collapsed && allContentsSelected(rng)) {
- ed.setContent('', {format : 'raw'});
- ed.nodeChanged();
+ return true;
+ };
+
+ editor.onKeyDown.addToTop(function(editor, e) {
+ var rng, keyCode = e.keyCode;
+
+ if (!e.isDefaultPrevented() && (keyCode == DELETE || keyCode == BACKSPACE)) {
+ rng = selection.getRng(true);
+
+ if (isAtStartEndOfBody(rng, true) && isAtStartEndOfBody(rng, false) &&
+ (rng.collapsed || dom.findCommonAncestor(getEndPointNode(rng, true), getEndPointNode(rng)) === dom.getRoot())) {
+ editor.setContent('');
+ editor.nodeChanged();
e.preventDefault();
}
}
});
};
- function inputMethodFocus(ed) {
- ed.dom.bind(ed.getDoc(), 'focusin', function() {
- ed.selection.setRng(ed.selection.getRng());
- });
+ function inputMethodFocus() {
+ if (!editor.settings.content_editable) {
+ // Case 1 IME doesn't initialize if you focus the document
+ dom.bind(editor.getDoc(), 'focusin', function(e) {
+ selection.setRng(selection.getRng());
+ });
+
+ // Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event
+ dom.bind(editor.getDoc(), 'mousedown', function(e) {
+ if (e.target == editor.getDoc().documentElement) {
+ editor.getWin().focus();
+ selection.setRng(selection.getRng());
+ }
+ });
+ }
};
- function removeHrOnBackspace(ed) {
- ed.onKeyDown.add(function(ed, e) {
- if (e.keyCode === BACKSPACE) {
- if (ed.selection.isCollapsed() && ed.selection.getRng(true).startOffset === 0) {
- var node = ed.selection.getNode();
+ function removeHrOnBackspace() {
+ editor.onKeyDown.add(function(editor, e) {
+ if (!e.isDefaultPrevented() && e.keyCode === BACKSPACE) {
+ if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) {
+ var node = selection.getNode();
var previousSibling = node.previousSibling;
+
if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") {
- ed.dom.remove(previousSibling);
+ dom.remove(previousSibling);
tinymce.dom.Event.cancel(e);
}
}
@@ -1177,13 +1262,13 @@ tinymce.create('static tinymce.util.XHR', {
})
}
- function focusBody(ed) {
+ function focusBody() {
// Fix for a focus bug in FF 3.x where the body element
// wouldn't get proper focus if the user clicked on the HTML element
if (!Range.prototype.getClientRects) { // Detect getClientRects got introduced in FF 4
- ed.onMouseDown.add(function(ed, e) {
+ editor.onMouseDown.add(function(editor, e) {
if (e.target.nodeName === "HTML") {
- var body = ed.getBody();
+ var body = editor.getBody();
// Blur the body it's focused but not correctly focused
body.blur();
@@ -1197,38 +1282,38 @@ tinymce.create('static tinymce.util.XHR', {
}
};
- function selectControlElements(ed) {
- ed.onClick.add(function(ed, e) {
+ function selectControlElements() {
+ editor.onClick.add(function(editor, e) {
e = e.target;
// Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250
// WebKit can't even do simple things like selecting an image
// Needs tobe the setBaseAndExtend or it will fail to select floated images
- if (/^(IMG|HR)$/.test(e.nodeName))
- ed.selection.getSel().setBaseAndExtent(e, 0, e, 1);
+ if (/^(IMG|HR)$/.test(e.nodeName)) {
+ selection.getSel().setBaseAndExtent(e, 0, e, 1);
+ }
- if (e.nodeName == 'A' && ed.dom.hasClass(e, 'mceItemAnchor'))
- ed.selection.select(e);
+ if (e.nodeName == 'A' && dom.hasClass(e, 'mceItemAnchor')) {
+ selection.select(e);
+ }
- ed.nodeChanged();
+ editor.nodeChanged();
});
};
- function removeStylesWhenDeletingAccrossBlockElements(ed) {
- var selection = ed.selection, dom = ed.dom;
-
+ function removeStylesWhenDeletingAccrossBlockElements() {
function getAttributeApplyFunction() {
var template = dom.getAttribs(selection.getStart().cloneNode(false));
return function() {
var target = selection.getStart();
- if (target !== ed.getBody()) {
+ if (target !== editor.getBody()) {
dom.setAttrib(target, "style", null);
- tinymce.each(template, function(attr) {
- target.setAttributeNode(attr.cloneNode(true));
- });
+ tinymce.each(template, function(attr) {
+ target.setAttributeNode(attr.cloneNode(true));
+ });
}
};
}
@@ -1237,91 +1322,68 @@ tinymce.create('static tinymce.util.XHR', {
return !selection.isCollapsed() && selection.getStart() != selection.getEnd();
}
- function blockEvent(ed, e) {
+ function blockEvent(editor, e) {
e.preventDefault();
return false;
}
- ed.onKeyPress.add(function(ed, e) {
+ editor.onKeyPress.add(function(editor, e) {
var applyAttributes;
if ((e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) {
applyAttributes = getAttributeApplyFunction();
- ed.getDoc().execCommand('delete', false, null);
+ editor.getDoc().execCommand('delete', false, null);
applyAttributes();
e.preventDefault();
return false;
}
});
- dom.bind(ed.getDoc(), 'cut', function(e) {
+ dom.bind(editor.getDoc(), 'cut', function(e) {
var applyAttributes;
if (isSelectionAcrossElements()) {
applyAttributes = getAttributeApplyFunction();
- ed.onKeyUp.addToTop(blockEvent);
+ editor.onKeyUp.addToTop(blockEvent);
setTimeout(function() {
applyAttributes();
- ed.onKeyUp.remove(blockEvent);
- }, 0);
- }
- });
- }
-
- /*
- function removeStylesOnPTagsInheritedFromHeadingTag(ed) {
- ed.onKeyDown.add(function(ed, event) {
- function checkInHeadingTag(ed) {
- var currentNode = ed.selection.getNode();
- var headingTags = 'h1,h2,h3,h4,h5,h6';
- return ed.dom.is(currentNode, headingTags) || ed.dom.getParent(currentNode, headingTags) !== null;
- }
-
- if (event.keyCode === VK.ENTER && !VK.modifierPressed(event) && checkInHeadingTag(ed)) {
- setTimeout(function() {
- var currentNode = ed.selection.getNode();
- if (ed.dom.is(currentNode, 'p')) {
- ed.dom.setAttrib(currentNode, 'style', null);
- // While tiny's content is correct after this method call, the content shown is not representative of it and needs to be 'repainted'
- ed.execCommand('mceCleanup');
- }
+ editor.onKeyUp.remove(blockEvent);
}, 0);
}
});
}
- */
- function selectionChangeNodeChanged(ed) {
+ function selectionChangeNodeChanged() {
var lastRng, selectionTimer;
- ed.dom.bind(ed.getDoc(), 'selectionchange', function() {
+ dom.bind(editor.getDoc(), 'selectionchange', function() {
if (selectionTimer) {
clearTimeout(selectionTimer);
selectionTimer = 0;
}
selectionTimer = window.setTimeout(function() {
- var rng = ed.selection.getRng();
+ var rng = selection.getRng();
// Compare the ranges to see if it was a real change or not
if (!lastRng || !tinymce.dom.RangeUtils.compareRanges(rng, lastRng)) {
- ed.nodeChanged();
+ editor.nodeChanged();
lastRng = rng;
}
}, 50);
});
}
- function ensureBodyHasRoleApplication(ed) {
+ function ensureBodyHasRoleApplication() {
document.body.setAttribute("role", "application");
}
-
- function disableBackspaceIntoATable(ed) {
- ed.onKeyDown.add(function(ed, e) {
- if (e.keyCode === BACKSPACE) {
- if (ed.selection.isCollapsed() && ed.selection.getRng(true).startOffset === 0) {
- var previousSibling = ed.selection.getNode().previousSibling;
+
+ function disableBackspaceIntoATable() {
+ editor.onKeyDown.add(function(editor, e) {
+ if (!e.isDefaultPrevented() && e.keyCode === BACKSPACE) {
+ if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) {
+ var previousSibling = selection.getNode().previousSibling;
if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "table") {
return tinymce.dom.Event.cancel(e);
}
@@ -1330,7 +1392,7 @@ tinymce.create('static tinymce.util.XHR', {
})
}
- function addNewLinesBeforeBrInPre(editor) {
+ function addNewLinesBeforeBrInPre() {
var documentMode = editor.getDoc().documentMode;
// IE8+ rendering mode does the right thing with BR in PRE
@@ -1340,8 +1402,8 @@ tinymce.create('static tinymce.util.XHR', {
// Enable display: none in area and add a specific class that hides all BR elements in PRE to
// avoid the caret from getting stuck at the BR elements while pressing the right arrow key
- setEditorCommandState(editor, 'RespectVisibilityInDesign', true);
- editor.dom.addClass(editor.getBody(), 'mceHideBrInPre');
+ setEditorCommandState('RespectVisibilityInDesign', true);
+ dom.addClass(editor.getBody(), 'mceHideBrInPre');
// Adds a \n before all BR elements in PRE to get them visual
editor.parser.addNodeFilter('pre', function(nodes, name) {
@@ -1382,43 +1444,210 @@ tinymce.create('static tinymce.util.XHR', {
});
}
- tinymce.create('tinymce.util.Quirks', {
- Quirks: function(ed) {
- // All browsers
- disableBackspaceIntoATable(ed);
+ function removePreSerializedStylesWhenSelectingControls() {
+ dom.bind(editor.getBody(), 'mouseup', function(e) {
+ var value, node = selection.getNode();
- // WebKit
- if (tinymce.isWebKit) {
- cleanupStylesWhenDeleting(ed);
- emptyEditorWhenDeleting(ed);
- inputMethodFocus(ed);
- selectControlElements(ed);
+ // Moved styles to attributes on IMG eements
+ if (node.nodeName == 'IMG') {
+ // Convert style width to width attribute
+ if (value = dom.getStyle(node, 'width')) {
+ dom.setAttrib(node, 'width', value.replace(/[^0-9%]+/g, ''));
+ dom.setStyle(node, 'width', '');
+ }
- // iOS
- if (tinymce.isIDevice) {
- selectionChangeNodeChanged(ed);
+ // Convert style height to height attribute
+ if (value = dom.getStyle(node, 'height')) {
+ dom.setAttrib(node, 'height', value.replace(/[^0-9%]+/g, ''));
+ dom.setStyle(node, 'height', '');
}
}
+ });
+ }
- // IE
- if (tinymce.isIE) {
- removeHrOnBackspace(ed);
- emptyEditorWhenDeleting(ed);
- ensureBodyHasRoleApplication(ed);
- //removeStylesOnPTagsInheritedFromHeadingTag(ed)
- addNewLinesBeforeBrInPre(ed);
+ function keepInlineElementOnDeleteBackspace() {
+ editor.onKeyDown.add(function(editor, e) {
+ var isDelete, rng, container, offset, brElm, sibling, collapsed;
+
+ isDelete = e.keyCode == DELETE;
+ if (!e.isDefaultPrevented() && (isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) {
+ rng = selection.getRng();
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ collapsed = rng.collapsed;
+
+ // Override delete if the start container is a text node and is at the beginning of text or
+ // just before/after the last character to be deleted in collapsed mode
+ if (container.nodeType == 3 && container.nodeValue.length > 0 && ((offset === 0 && !collapsed) || (collapsed && offset === (isDelete ? 0 : 1)))) {
+ nonEmptyElements = editor.schema.getNonEmptyElements();
+
+ // Prevent default logic since it's broken
+ e.preventDefault();
+
+ // Insert a BR before the text node this will prevent the containing element from being deleted/converted
+ brElm = dom.create('br', {id: '__tmp'});
+ container.parentNode.insertBefore(brElm, container);
+
+ // Do the browser delete
+ editor.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);
+
+ // Check if the previous sibling is empty after deleting for example: <p><b></b>|</p>
+ container = selection.getRng().startContainer;
+ sibling = container.previousSibling;
+ if (sibling && sibling.nodeType == 1 && !dom.isBlock(sibling) && dom.isEmpty(sibling) && !nonEmptyElements[sibling.nodeName.toLowerCase()]) {
+ dom.remove(sibling);
+ }
+
+ // Remove the temp element we inserted
+ dom.remove('__tmp');
+ }
}
+ });
+ }
- // Gecko
- if (tinymce.isGecko) {
- removeHrOnBackspace(ed);
- focusBody(ed);
- removeStylesWhenDeletingAccrossBlockElements(ed);
+ function removeBlockQuoteOnBackSpace() {
+ // Add block quote deletion handler
+ editor.onKeyDown.add(function(editor, e) {
+ var rng, container, offset, root, parent;
+
+ if (e.isDefaultPrevented() || e.keyCode != VK.BACKSPACE) {
+ return;
}
+
+ rng = selection.getRng();
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ root = dom.getRoot();
+ parent = container;
+
+ if (!rng.collapsed || offset !== 0) {
+ return;
+ }
+
+ while (parent && parent.parentNode && parent.parentNode.firstChild == parent && parent.parentNode != root) {
+ parent = parent.parentNode;
+ }
+
+ // Is the cursor at the beginning of a blockquote?
+ if (parent.tagName === 'BLOCKQUOTE') {
+ // Remove the blockquote
+ editor.formatter.toggle('blockquote', null, parent);
+
+ // Move the caret to the beginning of container
+ rng.setStart(container, 0);
+ rng.setEnd(container, 0);
+ selection.setRng(rng);
+ selection.collapse(false);
+ }
+ });
+ };
+
+ function setGeckoEditingOptions() {
+ function setOpts() {
+ editor._refreshContentEditable();
+
+ setEditorCommandState("StyleWithCSS", false);
+ setEditorCommandState("enableInlineTableEditing", false);
+
+ if (!settings.object_resizing) {
+ setEditorCommandState("enableObjectResizing", false);
+ }
+ };
+
+ if (!settings.readonly) {
+ editor.onBeforeExecCommand.add(setOpts);
+ editor.onMouseDown.add(setOpts);
}
- });
-})(tinymce);
+ };
+
+ function addBrAfterLastLinks() {
+ function fixLinks(editor, o) {
+ tinymce.each(dom.select('a'), function(node) {
+ var parentNode = node.parentNode, root = dom.getRoot();
+
+ if (parentNode.lastChild === node) {
+ while (parentNode && !dom.isBlock(parentNode)) {
+ if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {
+ return;
+ }
+
+ parentNode = parentNode.parentNode;
+ }
+
+ dom.add(parentNode, 'br', {'data-mce-bogus' : 1});
+ }
+ });
+ };
+
+ editor.onExecCommand.add(function(editor, cmd) {
+ if (cmd === 'CreateLink') {
+ fixLinks(editor);
+ }
+ });
+
+ editor.onSetContent.add(selection.onSetContent.add(fixLinks));
+ };
+
+ function removeGhostSelection() {
+ function repaint(sender, args) {
+ if (!sender || !args.initial) {
+ editor.execCommand('mceRepaint');
+ }
+ };
+
+ editor.onUndo.add(repaint);
+ editor.onRedo.add(repaint);
+ editor.onSetContent.add(repaint);
+ };
+
+ function deleteImageOnBackSpace() {
+ editor.onKeyDown.add(function(editor, e) {
+ if (!e.isDefaultPrevented() && e.keyCode == 8 && selection.getNode().nodeName == 'IMG') {
+ e.preventDefault();
+ editor.undoManager.beforeChange();
+ dom.remove(selection.getNode());
+ editor.undoManager.add();
+ }
+ });
+ };
+
+ // All browsers
+ disableBackspaceIntoATable();
+ removeBlockQuoteOnBackSpace();
+ emptyEditorWhenDeleting();
+
+ // WebKit
+ if (tinymce.isWebKit) {
+ keepInlineElementOnDeleteBackspace();
+ cleanupStylesWhenDeleting();
+ inputMethodFocus();
+ selectControlElements();
+
+ // iOS
+ if (tinymce.isIDevice) {
+ selectionChangeNodeChanged();
+ }
+ }
+
+ // IE
+ if (tinymce.isIE) {
+ removeHrOnBackspace();
+ ensureBodyHasRoleApplication();
+ addNewLinesBeforeBrInPre();
+ removePreSerializedStylesWhenSelectingControls();
+ deleteImageOnBackSpace();
+ }
+ // Gecko
+ if (tinymce.isGecko) {
+ removeHrOnBackspace();
+ focusBody();
+ removeStylesWhenDeletingAccrossBlockElements();
+ setGeckoEditingOptions();
+ addBrAfterLastLinks();
+ removeGhostSelection();
+ }
+};
(function(tinymce) {
var namedEntities, baseEntities, reverseEntities,
attrsCharsRegExp = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
@@ -1511,8 +1740,7 @@ tinymce.create('static tinymce.util.XHR', {
'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' +
'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' +
'80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' +
- '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro'
- , 32);
+ '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);
tinymce.html = tinymce.html || {};
@@ -1723,7 +1951,27 @@ tinymce.html.Styles = function(settings, schema) {
str = str.replace(/\\([\'\";:])/g, "$1");
return str;
- }
+ };
+
+ function processUrl(match, url, url2, url3, str, str2) {
+ str = str || str2;
+
+ if (str) {
+ str = decode(str);
+
+ // Force strings into single quote format
+ return "'" + str.replace(/\'/g, "\\'") + "'";
+ }
+
+ url = decode(url || url2 || url3);
+
+ // Convert the URL to relative/absolute depending on config
+ if (urlConverter)
+ url = urlConverter.call(urlConverterScope, url, 'style');
+
+ // Output new URL format
+ return "url('" + url.replace(/\'/g, "\\'") + "')";
+ };
if (css) {
// Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing
@@ -1747,26 +1995,7 @@ tinymce.html.Styles = function(settings, schema) {
value = value.replace(rgbRegExp, toHex);
// Convert URLs and force them into url('value') format
- value = value.replace(urlOrStrRegExp, function(match, url, url2, url3, str, str2) {
- str = str || str2;
-
- if (str) {
- str = decode(str);
-
- // Force strings into single quote format
- return "'" + str.replace(/\'/g, "\\'") + "'";
- }
-
- url = decode(url || url2 || url3);
-
- // Convert the URL to relative/absolute depending on config
- if (urlConverter)
- url = urlConverter.call(urlConverterScope, url, 'style');
-
- // Output new URL format
- return "url('" + url.replace(/\'/g, "\\'") + "')";
- });
-
+ value = value.replace(urlOrStrRegExp, processUrl);
styles[name] = isEncoded ? decode(value, true) : value;
}
@@ -1934,7 +2163,8 @@ tinymce.html.Styles = function(settings, schema) {
'span[A][B]' +
'ins[A|cite|datetime][B]' +
'del[A|cite|datetime][B]' +
- 'figure[A][C|legend]' +
+ 'figure[A][C|legend|figcaption]' +
+ 'figcaption[A][C]' +
'img[A|alt|src|height|width|usemap|ismap][]' +
'iframe[A|name|src|height|width|sandbox|seamless][]' +
'embed[A|src|height|width|type][]' +
@@ -2161,7 +2391,7 @@ tinymce.html.Styles = function(settings, schema) {
nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object', shortEndedElementsMap);
blockElementsMap = createLookupTable('block_elements', 'h1 h2 h3 h4 h5 h6 hr p div address pre form table tbody thead tfoot ' +
'th tr td li ol ul caption blockquote center dl dt dd dir fieldset ' +
- 'noscript menu isindex samp header footer article section hgroup aside nav');
+ 'noscript menu isindex samp header footer article section hgroup aside nav figure');
// Converts a wildcard expression string to a regexp for example *a will become /.*a/.
function patternToRegExp(str) {
@@ -2173,7 +2403,7 @@ tinymce.html.Styles = function(settings, schema) {
function addValidElements(valid_elements) {
var ei, el, ai, al, yl, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder,
prefix, outputName, globalAttributes, globalAttributesOrder, transElement, key, childKey, value,
- elementRuleRegExp = /^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,
+ elementRuleRegExp = /^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,
attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,
hasPatternsRegExp = /[*?+]/;
@@ -2546,6 +2776,47 @@ tinymce.html.Styles = function(settings, schema) {
}
};
+ function parseAttribute(match, name, value, val2, val3) {
+ var attrRule, i;
+
+ name = name.toLowerCase();
+ value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute
+
+ // Validate name and value
+ if (validate && !isInternalElement && name.indexOf('data-') !== 0) {
+ attrRule = validAttributesMap[name];
+
+ // Find rule by pattern matching
+ if (!attrRule && validAttributePatterns) {
+ i = validAttributePatterns.length;
+ while (i--) {
+ attrRule = validAttributePatterns[i];
+ if (attrRule.pattern.test(name))
+ break;
+ }
+
+ // No rule matched
+ if (i === -1)
+ attrRule = null;
+ }
+
+ // No attribute rule found
+ if (!attrRule)
+ return;
+
+ // Validate value
+ if (attrRule.validValues && !(value in attrRule.validValues))
+ return;
+ }
+
+ // Add attribute to list and map
+ attrList.map[name] = value;
+ attrList.push({
+ name: name,
+ value: value
+ });
+ };
+
// Precompile RegExps and map objects
tokenRegExp = new RegExp('<(?:' +
'(?:!--([\\w\\W]*?)-->)|' + // Comment
@@ -2553,7 +2824,7 @@ tinymce.html.Styles = function(settings, schema) {
'(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE
'(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI
'(?:\\/([^>]+)>)|' + // End element
- '(?:([A-Za-z0-9\-\:]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + // Start element
+ '(?:([A-Za-z0-9\\-\\:]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + // Start element
')', 'g');
attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;
@@ -2620,46 +2891,7 @@ tinymce.html.Styles = function(settings, schema) {
attrList = [];
attrList.map = {};
- attribsValue.replace(attrRegExp, function(match, name, value, val2, val3) {
- var attrRule, i;
-
- name = name.toLowerCase();
- value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute
-
- // Validate name and value
- if (validate && !isInternalElement && name.indexOf('data-') !== 0) {
- attrRule = validAttributesMap[name];
-
- // Find rule by pattern matching
- if (!attrRule && validAttributePatterns) {
- i = validAttributePatterns.length;
- while (i--) {
- attrRule = validAttributePatterns[i];
- if (attrRule.pattern.test(name))
- break;
- }
-
- // No rule matched
- if (i === -1)
- attrRule = null;
- }
-
- // No attribute rule found
- if (!attrRule)
- return;
-
- // Validate value
- if (attrRule.validValues && !(value in attrRule.validValues))
- return;
- }
-
- // Add attribute to list and map
- attrList.map[name] = value;
- attrList.push({
- name: name,
- value: value
- });
- });
+ attribsValue.replace(attrRegExp, parseAttribute);
} else {
attrList = [];
attrList.map = {};
@@ -3281,7 +3513,7 @@ tinymce.html.Styles = function(settings, schema) {
self.parse = function(html, args) {
var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate,
blockElements, startWhiteSpaceRegExp, invalidChildren = [], isInWhiteSpacePreservedElement,
- endWhiteSpaceRegExp, allWhiteSpaceRegExp, whiteSpaceElements, children, nonEmptyElements, rootBlockName;
+ endWhiteSpaceRegExp, allWhiteSpaceRegExp, isAllWhiteSpaceRegExp, whiteSpaceElements, children, nonEmptyElements, rootBlockName;
args = args || {};
matchedNodes = {};
@@ -3296,6 +3528,7 @@ tinymce.html.Styles = function(settings, schema) {
startWhiteSpaceRegExp = /^[ \t\r\n]+/;
endWhiteSpaceRegExp = /[ \t\r\n]+$/;
allWhiteSpaceRegExp = /[ \t\r\n]+/g;
+ isAllWhiteSpaceRegExp = /^[ \t\r\n]+$/;
function addRootBlocks() {
var node = rootNode.firstChild, next, rootBlockNode;
@@ -3448,10 +3681,12 @@ tinymce.html.Styles = function(settings, schema) {
if (elementRule) {
if (blockElements[name]) {
if (!isInWhiteSpacePreservedElement) {
- // Trim whitespace at beginning of block
- for (textNode = node.firstChild; textNode && textNode.type === 3; ) {
+ // Trim whitespace of the first node in a block
+ textNode = node.firstChild;
+ if (textNode && textNode.type === 3) {
text = textNode.value.replace(startWhiteSpaceRegExp, '');
+ // Any characters left after trim or should we remove it
if (text.length > 0) {
textNode.value = text;
textNode = textNode.next;
@@ -3460,12 +3695,27 @@ tinymce.html.Styles = function(settings, schema) {
textNode.remove();
textNode = sibling;
}
+
+ // Remove any pure whitespace siblings
+ while (textNode && textNode.type === 3) {
+ text = textNode.value;
+ sibling = textNode.next;
+
+ if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {
+ textNode.remove();
+ textNode = sibling;
+ }
+
+ textNode = sibling;
+ }
}
- // Trim whitespace at end of block
- for (textNode = node.lastChild; textNode && textNode.type === 3; ) {
+ // Trim whitespace of the last node in a block
+ textNode = node.lastChild;
+ if (textNode && textNode.type === 3) {
text = textNode.value.replace(endWhiteSpaceRegExp, '');
+ // Any characters left after trim or should we remove it
if (text.length > 0) {
textNode.value = text;
textNode = textNode.prev;
@@ -3474,6 +3724,19 @@ tinymce.html.Styles = function(settings, schema) {
textNode.remove();
textNode = sibling;
}
+
+ // Remove any pure whitespace siblings
+ while (textNode && textNode.type === 3) {
+ text = textNode.value;
+ sibling = textNode.prev;
+
+ if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {
+ textNode.remove();
+ textNode = sibling;
+ }
+
+ textNode = sibling;
+ }
}
}
@@ -3578,8 +3841,8 @@ tinymce.html.Styles = function(settings, schema) {
// these elements and keep br elements that where intended to be there intact
if (settings.remove_trailing_brs) {
self.addNodeFilter('br', function(nodes, name) {
- var i, l = nodes.length, node, blockElements = schema.getBlockElements(),
- nonEmptyElements = schema.getNonEmptyElements(), parent, prev, prevName;
+ var i, l = nodes.length, node, blockElements = tinymce.extend({}, schema.getBlockElements()),
+ nonEmptyElements = schema.getNonEmptyElements(), parent, lastParent, prev, prevName;
// Remove brs from body element as well
blockElements.body = 1;
@@ -3590,7 +3853,7 @@ tinymce.html.Styles = function(settings, schema) {
parent = node.parent;
if (blockElements[node.parent.name] && node === parent.lastChild) {
- // Loop all nodes to the right of the current node and check for other BR elements
+ // Loop all nodes to the left of the current node and check for other BR elements
// excluding bookmarks since they are invisible
prev = node.prev;
while (prev) {
@@ -3628,6 +3891,46 @@ tinymce.html.Styles = function(settings, schema) {
}
}
}
+ } else {
+ // Replaces BR elements inside inline elements like <p><b><i><br></i></b></p> so they become <p><b><i>&nbsp;</i></b></p>
+ lastParent = node;
+ while (parent.firstChild === lastParent && parent.lastChild === lastParent) {
+ lastParent = parent;
+
+ if (blockElements[parent.name]) {
+ break;
+ }
+
+ parent = parent.parent;
+ }
+
+ if (lastParent === parent) {
+ textNode = new tinymce.html.Node('#text', 3);
+ textNode.value = '\u00a0';
+ node.replace(textNode);
+ }
+ }
+ }
+ });
+ }
+
+ // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included.
+ if (!settings.allow_html_in_named_anchor) {
+ self.addAttributeFilter('name', function(nodes, name) {
+ var i = nodes.length, sibling, prevSibling, parent, node;
+
+ while (i--) {
+ node = nodes[i];
+ if (node.name === 'a' && node.firstChild) {
+ parent = node.parent;
+
+ // Move children after current node
+ sibling = node.lastChild;
+ do {
+ prevSibling = sibling.prev;
+ parent.insert(sibling, node);
+ sibling = prevSibling;
+ } while (sibling);
}
}
});
@@ -3776,7 +4079,7 @@ tinymce.html.Writer = function(settings) {
writer.cdata(node.value);
},
- // Document fragment
+ // Document fragment
11: function(node) {
if ((node = node.firstChild)) {
do {
@@ -4314,7 +4617,11 @@ tinymce.dom = {};
return self.bind(target, events instanceof Array ? events.join(' ') : events, func, scope);
};
- self.remove = function(target, events, func) {
+ self.remove = function(target, events, func, scope) {
+ if (!target) {
+ return self;
+ }
+
// Old API supported direct ID assignment
if (typeof(target) === "string") {
target = document.getElementById(target);
@@ -4322,7 +4629,7 @@ tinymce.dom = {};
// Old API supported multiple targets
if (target instanceof Array) {
- var i = target;
+ var i = target.length;
while (i--) {
self.remove(target[i], events, func, scope);
@@ -4379,6 +4686,46 @@ tinymce.dom = {};
namespace = 0;
})(tinymce.dom, 'data-mce-expando'); // Namespace and expando
+tinymce.dom.TreeWalker = function(start_node, root_node) {
+ var node = start_node;
+
+ function findSibling(node, start_name, sibling_name, shallow) {
+ var sibling, parent;
+
+ if (node) {
+ // Walk into nodes if it has a start
+ if (!shallow && node[start_name])
+ return node[start_name];
+
+ // Return the sibling if it has one
+ if (node != root_node) {
+ sibling = node[sibling_name];
+ if (sibling)
+ return sibling;
+
+ // Walk up the parents to look for siblings
+ for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {
+ sibling = parent[sibling_name];
+ if (sibling)
+ return sibling;
+ }
+ }
+ }
+ };
+
+ this.current = function() {
+ return node;
+ };
+
+ this.next = function(shallow) {
+ return (node = findSibling(node, 'firstChild', 'nextSibling', shallow));
+ };
+
+ this.prev = function(shallow) {
+ return (node = findSibling(node, 'lastChild', 'previousSibling', shallow));
+ };
+};
+
(function(tinymce) {
// Shorten names
var each = tinymce.each,
@@ -4568,8 +4915,8 @@ tinymce.dom = {};
h = 0;
return {
- w : parseInt(w) || e.offsetWidth || e.clientWidth,
- h : parseInt(h) || e.offsetHeight || e.clientHeight
+ w : parseInt(w, 10) || e.offsetWidth || e.clientWidth,
+ h : parseInt(h, 10) || e.offsetHeight || e.clientHeight
};
},
@@ -5093,7 +5440,7 @@ tinymce.dom = {};
if (!u)
u = '';
- head = t.select('head')[0];
+ head = d.getElementsByTagName('head')[0];
each(u.split(','), function(u) {
var link;
@@ -5369,7 +5716,7 @@ tinymce.dom = {};
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);
+ s = parseInt(s, 10).toString(16);
return s.length > 1 ? s : '0' + s; // 0 -> 00
};
@@ -5622,7 +5969,7 @@ tinymce.dom = {};
// Also keep text nodes with only spaces if surrounded by spans.
// eg. "<p><span>a</span> <span>b</span></p>" should keep space between a and b
var trimmedLength = tinymce.trim(node.nodeValue).length;
- if (!t.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength == 0 && surroundedBySpans(node))
+ if (!t.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength === 0 && surroundedBySpans(node))
return;
} else if (type == 1) {
// If the only child is a bookmark then move it up
@@ -5683,6 +6030,25 @@ tinymce.dom = {};
return this.events.fire(target, name, evt);
},
+ // Returns the content editable state of a node
+ getContentEditable: function(node) {
+ var contentEditable;
+
+ // Check type
+ if (node.nodeType != 1) {
+ return null;
+ }
+
+ // Check for fake content editable
+ contentEditable = node.getAttribute("data-mce-contenteditable");
+ if (contentEditable && contentEditable !== "inherit") {
+ return contentEditable;
+ }
+
+ // Check for real content editable
+ return node.contentEditable !== "inherit" ? node.contentEditable : null;
+ },
+
_findSib : function(node, selector, name) {
var t = this, f = selector;
@@ -6502,7 +6868,7 @@ tinymce.dom = {};
// We need to walk char by char since rng.text or rng.htmlText will trim line endings
offset = 0;
while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) {
- if (checkRng.move('character', 1) == 0 || parent != checkRng.parentElement()) {
+ if (checkRng.move('character', 1) === 0 || parent != checkRng.parentElement()) {
break;
}
@@ -6515,7 +6881,7 @@ tinymce.dom = {};
// Walk character by character in text node until we hit the selected range endpoint, hit the end of document or parent isn't the right one
offset = 0;
while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) {
- if (checkRng.move('character', -1) == 0 || parent != checkRng.parentElement()) {
+ if (checkRng.move('character', -1) === 0 || parent != checkRng.parentElement()) {
break;
}
@@ -6681,7 +7047,7 @@ tinymce.dom = {};
var rng = selection.getRng(), start, end, bookmark = {};
function getIndexes(node) {
- var node, parent, root, children, i, indexes = [];
+ var parent, root, children, i, indexes = [];
parent = node.parentNode;
root = dom.getRoot().parentNode;
@@ -6846,13 +7212,18 @@ tinymce.dom = {};
// If single element selection then try making a control selection out of it
if (startContainer == endContainer && startContainer.nodeType == 1) {
// Trick to place the caret inside an empty block element like <p></p>
- if (!startContainer.hasChildNodes()) {
- startContainer.innerHTML = '<span>\uFEFF</span><span>\uFEFF</span>';
- ieRng.moveToElementText(startContainer.lastChild);
- ieRng.select();
- dom.doc.selection.clear();
- startContainer.innerHTML = '';
- return;
+ if (startOffset == endOffset && !startContainer.hasChildNodes()) {
+ if (startContainer.canHaveHTML) {
+ startContainer.innerHTML = '<span>\uFEFF</span><span>\uFEFF</span>';
+ ieRng.moveToElementText(startContainer.lastChild);
+ ieRng.select();
+ dom.doc.selection.clear();
+ startContainer.innerHTML = '';
+ return;
+ } else {
+ startOffset = dom.nodeIndex(startContainer);
+ startContainer = startContainer.parentNode;
+ }
}
if (startOffset == endOffset - 1) {
@@ -6885,29 +7256,33 @@ tinymce.dom = {};
/*
- * Sizzle CSS Selector Engine - v1.0
- * Copyright 2009, The Dojo Foundation
+ * Sizzle CSS Selector Engine
+ * Copyright, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://sizzlejs.com/
*/
(function(){
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ expando = "sizcache",
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
- baseHasDuplicate = true;
+ baseHasDuplicate = true,
+ rBackslash = /\\/g,
+ rReturn = /\r\n/g,
+ rNonWord = /\W/;
// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
// function. If that is the case, discard the hasDuplicate value.
// Thus far that includes Google Chrome.
-[0, 0].sort(function(){
+[0, 0].sort(function() {
baseHasDuplicate = false;
return 0;
});
-var Sizzle = function(selector, context, results, seed) {
+var Sizzle = function( selector, context, results, seed ) {
results = results || [];
context = context || document;
@@ -6916,24 +7291,27 @@ var Sizzle = function(selector, context, results, seed) {
if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
return [];
}
-
+
if ( !selector || typeof selector !== "string" ) {
return results;
}
- var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),
- soFar = selector, ret, cur, pop, i;
-
+ var m, set, checkSet, extra, ret, cur, pop, i,
+ prune = true,
+ contextXML = Sizzle.isXML( context ),
+ parts = [],
+ soFar = selector;
+
// Reset the position of the chunker regexp (start from head)
do {
- chunker.exec("");
- m = chunker.exec(soFar);
+ chunker.exec( "" );
+ m = chunker.exec( soFar );
if ( m ) {
soFar = m[3];
-
+
parts.push( m[1] );
-
+
if ( m[2] ) {
extra = m[3];
break;
@@ -6942,8 +7320,10 @@ var Sizzle = function(selector, context, results, seed) {
} while ( m );
if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context );
+ set = posProcess( parts[0] + parts[1], context, seed );
+
} else {
set = Expr.relative[ parts[0] ] ?
[ context ] :
@@ -6955,27 +7335,35 @@ var Sizzle = function(selector, context, results, seed) {
if ( Expr.relative[ selector ] ) {
selector += parts.shift();
}
-
- set = posProcess( selector, set );
+
+ set = posProcess( selector, set, seed );
}
}
+
} else {
// Take a shortcut and set the context if the root selector is an ID
// (but not if it'll be faster if the inner selector is an ID)
if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+ context = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set )[0] :
+ ret.set[0];
}
if ( context ) {
ret = seed ?
{ expr: parts.pop(), set: makeArray(seed) } :
Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
- set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+ set = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set ) :
+ ret.set;
if ( parts.length > 0 ) {
- checkSet = makeArray(set);
+ checkSet = makeArray( set );
+
} else {
prune = false;
}
@@ -6996,6 +7384,7 @@ var Sizzle = function(selector, context, results, seed) {
Expr.relative[ cur ]( checkSet, pop, contextXML );
}
+
} else {
checkSet = parts = [];
}
@@ -7012,12 +7401,14 @@ var Sizzle = function(selector, context, results, seed) {
if ( toString.call(checkSet) === "[object Array]" ) {
if ( !prune ) {
results.push.apply( results, checkSet );
+
} else if ( context && context.nodeType === 1 ) {
for ( i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
results.push( set[i] );
}
}
+
} else {
for ( i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
@@ -7025,6 +7416,7 @@ var Sizzle = function(selector, context, results, seed) {
}
}
}
+
} else {
makeArray( checkSet, results );
}
@@ -7037,15 +7429,15 @@ var Sizzle = function(selector, context, results, seed) {
return results;
};
-Sizzle.uniqueSort = function(results){
+Sizzle.uniqueSort = function( results ) {
if ( sortOrder ) {
hasDuplicate = baseHasDuplicate;
- results.sort(sortOrder);
+ results.sort( sortOrder );
if ( hasDuplicate ) {
for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
+ if ( results[i] === results[ i - 1 ] ) {
+ results.splice( i--, 1 );
}
}
}
@@ -7054,27 +7446,32 @@ Sizzle.uniqueSort = function(results){
return results;
};
-Sizzle.matches = function(expr, set){
- return Sizzle(expr, null, null, set);
+Sizzle.matches = function( expr, set ) {
+ return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+ return Sizzle( expr, null, null, [node] ).length > 0;
};
-Sizzle.find = function(expr, context, isXML){
- var set;
+Sizzle.find = function( expr, context, isXML ) {
+ var set, i, len, match, type, left;
if ( !expr ) {
return [];
}
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i], match;
-
+ for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+ type = Expr.order[i];
+
if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice(1,1);
+ left = match[1];
+ match.splice( 1, 1 );
if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
+ match[1] = (match[1] || "").replace( rBackslash, "" );
set = Expr.find[ type ]( match, context, isXML );
+
if ( set != null ) {
expr = expr.replace( Expr.match[ type ], "" );
break;
@@ -7084,20 +7481,29 @@ Sizzle.find = function(expr, context, isXML){
}
if ( !set ) {
- set = context.getElementsByTagName("*");
+ set = typeof context.getElementsByTagName !== "undefined" ?
+ context.getElementsByTagName( "*" ) :
+ [];
}
- return {set: set, expr: expr};
+ return { set: set, expr: expr };
};
-Sizzle.filter = function(expr, set, inplace, not){
- var old = expr, result = [], curLoop = set, match, anyFound,
- isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);
+Sizzle.filter = function( expr, set, inplace, not ) {
+ var match, anyFound,
+ type, found, item, filter, left,
+ i, pass,
+ old = expr,
+ result = [],
+ curLoop = set,
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
+ for ( type in Expr.filter ) {
if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- var filter = Expr.filter[ type ], found, item, left = match[1];
+ filter = Expr.filter[ type ];
+ left = match[1];
+
anyFound = false;
match.splice(1,1);
@@ -7115,23 +7521,26 @@ Sizzle.filter = function(expr, set, inplace, not){
if ( !match ) {
anyFound = found = true;
+
} else if ( match === true ) {
continue;
}
}
if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+ for ( i = 0; (item = curLoop[i]) != null; i++ ) {
if ( item ) {
found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
+ pass = not ^ found;
if ( inplace && found != null ) {
if ( pass ) {
anyFound = true;
+
} else {
curLoop[i] = false;
}
+
} else if ( pass ) {
result.push( item );
anyFound = true;
@@ -7160,6 +7569,7 @@ Sizzle.filter = function(expr, set, inplace, not){
if ( expr === old ) {
if ( anyFound == null ) {
Sizzle.error( expr );
+
} else {
break;
}
@@ -7172,35 +7582,78 @@ Sizzle.filter = function(expr, set, inplace, not){
};
Sizzle.error = function( msg ) {
- throw "Syntax error, unrecognized expression: " + msg;
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+var getText = Sizzle.getText = function( elem ) {
+ var i, node,
+ nodeType = elem.nodeType,
+ ret = "";
+
+ if ( nodeType ) {
+ if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent || innerText for elements
+ if ( typeof elem.textContent === 'string' ) {
+ return elem.textContent;
+ } else if ( typeof elem.innerText === 'string' ) {
+ // Replace IE's carriage returns
+ return elem.innerText.replace( rReturn, '' );
+ } else {
+ // Traverse it's children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ } else {
+
+ // If no nodeType, this is expected to be an array
+ for ( i = 0; (node = elem[i]); i++ ) {
+ // Do not traverse comment nodes
+ if ( node.nodeType !== 8 ) {
+ ret += getText( node );
+ }
+ }
+ }
+ return ret;
};
var Expr = Sizzle.selectors = {
order: [ "ID", "NAME", "TAG" ],
+
match: {
ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
},
+
leftMatch: {},
+
attrMap: {
"class": "className",
"for": "htmlFor"
},
+
attrHandle: {
- href: function(elem){
- return elem.getAttribute("href");
+ href: function( elem ) {
+ return elem.getAttribute( "href" );
+ },
+ type: function( elem ) {
+ return elem.getAttribute( "type" );
}
},
+
relative: {
"+": function(checkSet, part){
var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test(part),
+ isTag = isPartStr && !rNonWord.test( part ),
isPartStrNotTag = isPartStr && !isTag;
if ( isTag ) {
@@ -7221,23 +7674,29 @@ var Expr = Sizzle.selectors = {
Sizzle.filter( part, checkSet, true );
}
},
- ">": function(checkSet, part){
- var isPartStr = typeof part === "string",
- elem, i = 0, l = checkSet.length;
- if ( isPartStr && !/\W/.test(part) ) {
+ ">": function( checkSet, part ) {
+ var elem,
+ isPartStr = typeof part === "string",
+ i = 0,
+ l = checkSet.length;
+
+ if ( isPartStr && !rNonWord.test( part ) ) {
part = part.toLowerCase();
for ( ; i < l; i++ ) {
elem = checkSet[i];
+
if ( elem ) {
var parent = elem.parentNode;
checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
}
}
+
} else {
for ( ; i < l; i++ ) {
elem = checkSet[i];
+
if ( elem ) {
checkSet[i] = isPartStr ?
elem.parentNode :
@@ -7250,39 +7709,50 @@ var Expr = Sizzle.selectors = {
}
}
},
+
"": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck, nodeCheck;
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
- if ( typeof part === "string" && !/\W/.test(part) ) {
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
part = part.toLowerCase();
nodeCheck = part;
checkFn = dirNodeCheck;
}
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
},
- "~": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck, nodeCheck;
- if ( typeof part === "string" && !/\W/.test(part) ) {
+ "~": function( checkSet, part, isXML ) {
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
part = part.toLowerCase();
nodeCheck = part;
checkFn = dirNodeCheck;
}
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+ checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
}
},
+
find: {
- ID: function(match, context, isXML){
+ ID: function( match, context, isXML ) {
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
- return m ? [m] : [];
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
}
},
- NAME: function(match, context){
+
+ NAME: function( match, context ) {
if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [], results = context.getElementsByName(match[1]);
+ var ret = [],
+ results = context.getElementsByName( match[1] );
for ( var i = 0, l = results.length; i < l; i++ ) {
if ( results[i].getAttribute("name") === match[1] ) {
@@ -7293,13 +7763,16 @@ var Expr = Sizzle.selectors = {
return ret.length === 0 ? null : ret;
}
},
- TAG: function(match, context){
- return context.getElementsByTagName(match[1]);
+
+ TAG: function( match, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( match[1] );
+ }
}
},
preFilter: {
- CLASS: function(match, curLoop, inplace, result, not, isXML){
- match = " " + match[1].replace(/\\/g, "") + " ";
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+ match = " " + match[1].replace( rBackslash, "" ) + " ";
if ( isXML ) {
return match;
@@ -7307,10 +7780,11 @@ var Expr = Sizzle.selectors = {
for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
if ( !inplace ) {
result.push( elem );
}
+
} else if ( inplace ) {
curLoop[i] = false;
}
@@ -7319,16 +7793,25 @@ var Expr = Sizzle.selectors = {
return false;
},
- ID: function(match){
- return match[1].replace(/\\/g, "");
+
+ ID: function( match ) {
+ return match[1].replace( rBackslash, "" );
},
- TAG: function(match, curLoop){
- return match[1].toLowerCase();
+
+ TAG: function( match, curLoop ) {
+ return match[1].replace( rBackslash, "" ).toLowerCase();
},
- CHILD: function(match){
+
+ CHILD: function( match ) {
if ( match[1] === "nth" ) {
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ match[2] = match[2].replace(/^\+|\s*/g, '');
+
// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+ var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
@@ -7336,141 +7819,196 @@ var Expr = Sizzle.selectors = {
match[2] = (test[1] + (test[2] || 1)) - 0;
match[3] = test[3] - 0;
}
+ else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
// TODO: Move to normal caching system
match[0] = done++;
return match;
},
- ATTR: function(match, curLoop, inplace, result, not, isXML){
- var name = match[1].replace(/\\/g, "");
-
+
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+ var name = match[1] = match[1].replace( rBackslash, "" );
+
if ( !isXML && Expr.attrMap[name] ) {
match[1] = Expr.attrMap[name];
}
+ // Handle if an un-quoted value was used
+ match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
if ( match[2] === "~=" ) {
match[4] = " " + match[4] + " ";
}
return match;
},
- PSEUDO: function(match, curLoop, inplace, result, not){
+
+ PSEUDO: function( match, curLoop, inplace, result, not ) {
if ( match[1] === "not" ) {
// If we're dealing with a complex expression, or a simple one
if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
match[3] = Sizzle(match[3], null, null, curLoop);
+
} else {
var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
if ( !inplace ) {
result.push.apply( result, ret );
}
+
return false;
}
+
} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
return true;
}
-
+
return match;
},
- POS: function(match){
+
+ POS: function( match ) {
match.unshift( true );
+
return match;
}
},
+
filters: {
- enabled: function(elem){
+ enabled: function( elem ) {
return elem.disabled === false && elem.type !== "hidden";
},
- disabled: function(elem){
+
+ disabled: function( elem ) {
return elem.disabled === true;
},
- checked: function(elem){
+
+ checked: function( elem ) {
return elem.checked === true;
},
- selected: function(elem){
+
+ selected: function( elem ) {
// Accessing this property makes selected-by-default
// options in Safari work properly
- elem.parentNode.selectedIndex;
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
return elem.selected === true;
},
- parent: function(elem){
+
+ parent: function( elem ) {
return !!elem.firstChild;
},
- empty: function(elem){
+
+ empty: function( elem ) {
return !elem.firstChild;
},
- has: function(elem, i, match){
+
+ has: function( elem, i, match ) {
return !!Sizzle( match[3], elem ).length;
},
- header: function(elem){
+
+ header: function( elem ) {
return (/h\d/i).test( elem.nodeName );
},
- text: function(elem){
- return "text" === elem.type;
+
+ text: function( elem ) {
+ var attr = elem.getAttribute( "type" ), type = elem.type;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
},
- radio: function(elem){
- return "radio" === elem.type;
+
+ radio: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
},
- checkbox: function(elem){
- return "checkbox" === elem.type;
+
+ checkbox: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+ },
+
+ file: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
},
- file: function(elem){
- return "file" === elem.type;
+
+ password: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
},
- password: function(elem){
- return "password" === elem.type;
+
+ submit: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "submit" === elem.type;
},
- submit: function(elem){
- return "submit" === elem.type;
+
+ image: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
},
- image: function(elem){
- return "image" === elem.type;
+
+ reset: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "reset" === elem.type;
},
- reset: function(elem){
- return "reset" === elem.type;
+
+ button: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && "button" === elem.type || name === "button";
},
- button: function(elem){
- return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+
+ input: function( elem ) {
+ return (/input|select|textarea|button/i).test( elem.nodeName );
},
- input: function(elem){
- return (/input|select|textarea|button/i).test(elem.nodeName);
+
+ focus: function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
}
},
setFilters: {
- first: function(elem, i){
+ first: function( elem, i ) {
return i === 0;
},
- last: function(elem, i, match, array){
+
+ last: function( elem, i, match, array ) {
return i === array.length - 1;
},
- even: function(elem, i){
+
+ even: function( elem, i ) {
return i % 2 === 0;
},
- odd: function(elem, i){
+
+ odd: function( elem, i ) {
return i % 2 === 1;
},
- lt: function(elem, i, match){
+
+ lt: function( elem, i, match ) {
return i < match[3] - 0;
},
- gt: function(elem, i, match){
+
+ gt: function( elem, i, match ) {
return i > match[3] - 0;
},
- nth: function(elem, i, match){
+
+ nth: function( elem, i, match ) {
return match[3] - 0 === i;
},
- eq: function(elem, i, match){
+
+ eq: function( elem, i, match ) {
return match[3] - 0 === i;
}
},
filter: {
- PSEUDO: function(elem, match, i, array){
- var name = match[1], filter = Expr.filters[ name ];
+ PSEUDO: function( elem, match, i, array ) {
+ var name = match[1],
+ filter = Expr.filters[ name ];
if ( filter ) {
return filter( elem, i, match, array );
+
} else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+ return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
} else if ( name === "not" ) {
var not = match[3];
@@ -7481,72 +8019,96 @@ var Expr = Sizzle.selectors = {
}
return true;
+
} else {
- Sizzle.error( "Syntax error, unrecognized expression: " + name );
+ Sizzle.error( name );
}
},
- CHILD: function(elem, match){
- var type = match[1], node = elem;
- switch (type) {
- case 'only':
- case 'first':
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
+
+ CHILD: function( elem, match ) {
+ var first, last,
+ doneName, parent, cache,
+ count, diff,
+ type = match[1],
+ node = elem;
+
+ switch ( type ) {
+ case "only":
+ case "first":
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
}
}
- if ( type === "first" ) {
- return true;
+
+ if ( type === "first" ) {
+ return true;
}
+
node = elem;
- case 'last':
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
+
+ /* falls through */
+ case "last":
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
}
}
+
return true;
- case 'nth':
- var first = match[2], last = match[3];
+
+ case "nth":
+ first = match[2];
+ last = match[3];
if ( first === 1 && last === 0 ) {
return true;
}
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
+
+ doneName = match[0];
+ parent = elem.parentNode;
+
+ if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+ count = 0;
+
for ( node = parent.firstChild; node; node = node.nextSibling ) {
if ( node.nodeType === 1 ) {
node.nodeIndex = ++count;
}
- }
- parent.sizcache = doneName;
+ }
+
+ parent[ expando ] = doneName;
}
-
- var diff = elem.nodeIndex - last;
+
+ diff = elem.nodeIndex - last;
+
if ( first === 0 ) {
return diff === 0;
+
} else {
return ( diff % first === 0 && diff / first >= 0 );
}
}
},
- ID: function(elem, match){
+
+ ID: function( elem, match ) {
return elem.nodeType === 1 && elem.getAttribute("id") === match;
},
- TAG: function(elem, match){
- return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+
+ TAG: function( elem, match ) {
+ return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
},
- CLASS: function(elem, match){
+
+ CLASS: function( elem, match ) {
return (" " + (elem.className || elem.getAttribute("class")) + " ")
.indexOf( match ) > -1;
},
- ATTR: function(elem, match){
+
+ ATTR: function( elem, match ) {
var name = match[1],
- result = Expr.attrHandle[ name ] ?
+ result = Sizzle.attr ?
+ Sizzle.attr( elem, name ) :
+ Expr.attrHandle[ name ] ?
Expr.attrHandle[ name ]( elem ) :
elem[ name ] != null ?
elem[ name ] :
@@ -7557,6 +8119,8 @@ var Expr = Sizzle.selectors = {
return result == null ?
type === "!=" :
+ !type && Sizzle.attr ?
+ result != null :
type === "=" ?
value === check :
type === "*=" ?
@@ -7575,8 +8139,10 @@ var Expr = Sizzle.selectors = {
value === check || value.substr(0, check.length + 1) === check + "-" :
false;
},
- POS: function(elem, match, i, array){
- var name = match[2], filter = Expr.setFilters[ name ];
+
+ POS: function( elem, match, i, array ) {
+ var name = match[2],
+ filter = Expr.setFilters[ name ];
if ( filter ) {
return filter( elem, i, match, array );
@@ -7594,15 +8160,18 @@ for ( var type in Expr.match ) {
Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
}
+// Expose origPOS
+// "global" as in regardless of relation to brackets/parens
+Expr.match.globalPOS = origPOS;
-var makeArray = function(array, results) {
+var makeArray = function( array, results ) {
array = Array.prototype.slice.call( array, 0 );
if ( results ) {
results.push.apply( results, array );
return results;
}
-
+
return array;
};
@@ -7614,17 +8183,20 @@ try {
Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
// Provide a fallback method if it does not work
-} catch(e){
- makeArray = function(array, results) {
- var ret = results || [], i = 0;
+} catch( e ) {
+ makeArray = function( array, results ) {
+ var i = 0,
+ ret = results || [];
if ( toString.call(array) === "[object Array]" ) {
Array.prototype.push.apply( ret, array );
+
} else {
if ( typeof array.length === "number" ) {
for ( var l = array.length; i < l; i++ ) {
ret.push( array[i] );
}
+
} else {
for ( ; array[i]; i++ ) {
ret.push( array[i] );
@@ -7636,110 +8208,141 @@ try {
};
}
-var sortOrder;
+var sortOrder, siblingCheck;
if ( document.documentElement.compareDocumentPosition ) {
sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
return a.compareDocumentPosition ? -1 : 1;
}
- var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1;
};
-} else if ( "sourceIndex" in document.documentElement ) {
+
+} else {
sortOrder = function( a, b ) {
- if ( !a.sourceIndex || !b.sourceIndex ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return a.sourceIndex ? -1 : 1;
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
+ } else if ( a.sourceIndex && b.sourceIndex ) {
+ return a.sourceIndex - b.sourceIndex;
}
- var ret = a.sourceIndex - b.sourceIndex;
- if ( ret === 0 ) {
- hasDuplicate = true;
+ var al, bl,
+ ap = [],
+ bp = [],
+ aup = a.parentNode,
+ bup = b.parentNode,
+ cur = aup;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ if ( aup === bup ) {
+ return siblingCheck( a, b );
+
+ // If no parents were found then the nodes are disconnected
+ } else if ( !aup ) {
+ return -1;
+
+ } else if ( !bup ) {
+ return 1;
}
- return ret;
- };
-} else if ( document.createRange ) {
- sortOrder = function( a, b ) {
- if ( !a.ownerDocument || !b.ownerDocument ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return a.ownerDocument ? -1 : 1;
+
+ // Otherwise they're somewhere else in the tree so we need
+ // to build up a full list of the parentNodes for comparison
+ while ( cur ) {
+ ap.unshift( cur );
+ cur = cur.parentNode;
}
- var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.setStart(a, 0);
- aRange.setEnd(a, 0);
- bRange.setStart(b, 0);
- bRange.setEnd(b, 0);
- var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
- if ( ret === 0 ) {
- hasDuplicate = true;
+ cur = bup;
+
+ while ( cur ) {
+ bp.unshift( cur );
+ cur = cur.parentNode;
}
- return ret;
+
+ al = ap.length;
+ bl = bp.length;
+
+ // Start walking down the tree looking for a discrepancy
+ for ( var i = 0; i < al && i < bl; i++ ) {
+ if ( ap[i] !== bp[i] ) {
+ return siblingCheck( ap[i], bp[i] );
+ }
+ }
+
+ // We ended someplace up the tree so do a sibling check
+ return i === al ?
+ siblingCheck( a, bp[i], -1 ) :
+ siblingCheck( ap[i], b, 1 );
};
-}
-// Utility function for retreiving the text value of an array of DOM nodes
-Sizzle.getText = function( elems ) {
- var ret = "", elem;
+ siblingCheck = function( a, b, ret ) {
+ if ( a === b ) {
+ return ret;
+ }
- for ( var i = 0; elems[i]; i++ ) {
- elem = elems[i];
+ var cur = a.nextSibling;
- // Get the text from text nodes and CDATA nodes
- if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
- ret += elem.nodeValue;
+ while ( cur ) {
+ if ( cur === b ) {
+ return -1;
+ }
- // Traverse everything else, except comment nodes
- } else if ( elem.nodeType !== 8 ) {
- ret += Sizzle.getText( elem.childNodes );
+ cur = cur.nextSibling;
}
- }
- return ret;
-};
+ return 1;
+ };
+}
// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
// We're going to inject a fake input element with a specified name
var form = document.createElement("div"),
- id = "script" + (new Date()).getTime();
+ id = "script" + (new Date()).getTime(),
+ root = document.documentElement;
+
form.innerHTML = "<a name='" + id + "'/>";
// Inject it into the root element, check its status, and remove it quickly
- var root = document.documentElement;
root.insertBefore( form, root.firstChild );
// The workaround has to do additional checks after a getElementById
// Which slows things down for other browsers (hence the branching)
if ( document.getElementById( id ) ) {
- Expr.find.ID = function(match, context, isXML){
+ Expr.find.ID = function( match, context, isXML ) {
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
- return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+
+ return m ?
+ m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+ [m] :
+ undefined :
+ [];
}
};
- Expr.filter.ID = function(elem, match){
+ Expr.filter.ID = function( elem, match ) {
var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
return elem.nodeType === 1 && node && node.nodeValue === match;
};
}
root.removeChild( form );
- root = form = null; // release memory in IE
+
+ // release memory in IE
+ root = form = null;
})();
(function(){
@@ -7752,8 +8355,8 @@ Sizzle.getText = function( elems ) {
// Make sure no comments are found
if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function(match, context){
- var results = context.getElementsByTagName(match[1]);
+ Expr.find.TAG = function( match, context ) {
+ var results = context.getElementsByTagName( match[1] );
// Filter out possible comments
if ( match[1] === "*" ) {
@@ -7774,19 +8377,25 @@ Sizzle.getText = function( elems ) {
// Check to see if an attribute returns normalized href attributes
div.innerHTML = "<a href='#'></a>";
+
if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
div.firstChild.getAttribute("href") !== "#" ) {
- Expr.attrHandle.href = function(elem){
- return elem.getAttribute("href", 2);
+
+ Expr.attrHandle.href = function( elem ) {
+ return elem.getAttribute( "href", 2 );
};
}
- div = null; // release memory in IE
+ // release memory in IE
+ div = null;
})();
if ( document.querySelectorAll ) {
(function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
+ var oldSizzle = Sizzle,
+ div = document.createElement("div"),
+ id = "__sizzle__";
+
div.innerHTML = "<p class='TEST'></p>";
// Safari can't handle uppercase or unicode characters when
@@ -7794,18 +8403,89 @@ if ( document.querySelectorAll ) {
if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
return;
}
-
- Sizzle = function(query, context, extra, seed){
+
+ Sizzle = function( query, context, extra, seed ) {
context = context || document;
// Only use querySelectorAll on non-XML documents
// (ID selectors don't work in non-HTML documents)
- if ( !seed && context.nodeType === 9 && !Sizzle.isXML(context) ) {
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(e){}
+ if ( !seed && !Sizzle.isXML(context) ) {
+ // See if we find a selector to speed up
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+ // Speed-up: Sizzle("TAG")
+ if ( match[1] ) {
+ return makeArray( context.getElementsByTagName( query ), extra );
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
+ }
+ }
+
+ if ( context.nodeType === 9 ) {
+ // Speed-up: Sizzle("body")
+ // The body element only exists once, optimize finding it
+ if ( query === "body" && context.body ) {
+ return makeArray( [ context.body ], extra );
+
+ // Speed-up: Sizzle("#ID")
+ } else if ( match && match[3] ) {
+ var elem = context.getElementById( match[3] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id === match[3] ) {
+ return makeArray( [ elem ], extra );
+ }
+
+ } else {
+ return makeArray( [], extra );
+ }
+ }
+
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(qsaError) {}
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ var oldContext = context,
+ old = context.getAttribute( "id" ),
+ nid = old || id,
+ hasParent = context.parentNode,
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+ if ( !old ) {
+ context.setAttribute( "id", nid );
+ } else {
+ nid = nid.replace( /'/g, "\\$&" );
+ }
+ if ( relativeHierarchySelector && hasParent ) {
+ context = context.parentNode;
+ }
+
+ try {
+ if ( !relativeHierarchySelector || hasParent ) {
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+ }
+
+ } catch(pseudoError) {
+ } finally {
+ if ( !old ) {
+ oldContext.removeAttribute( "id" );
+ }
+ }
+ }
}
-
+
return oldSizzle(query, context, extra, seed);
};
@@ -7813,11 +8493,56 @@ if ( document.querySelectorAll ) {
Sizzle[ prop ] = oldSizzle[ prop ];
}
- div = null; // release memory in IE
+ // release memory in IE
+ div = null;
})();
}
(function(){
+ var html = document.documentElement,
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+ if ( matches ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9 fails this)
+ var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+ pseudoWorks = false;
+
+ try {
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( document.documentElement, "[test!='']:sizzle" );
+
+ } catch( pseudoError ) {
+ pseudoWorks = true;
+ }
+
+ Sizzle.matchesSelector = function( node, expr ) {
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+ if ( !Sizzle.isXML( node ) ) {
+ try {
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+ var ret = matches.call( node, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || !disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9, so check for that
+ node.document && node.document.nodeType !== 11 ) {
+ return ret;
+ }
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle(expr, null, null, [node]).length > 0;
+ };
+ }
+})();
+
+(function(){
var div = document.createElement("div");
div.innerHTML = "<div class='test e'></div><div class='test'></div>";
@@ -7834,32 +8559,35 @@ if ( document.querySelectorAll ) {
if ( div.getElementsByClassName("e").length === 1 ) {
return;
}
-
+
Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function(match, context, isXML) {
+ Expr.find.CLASS = function( match, context, isXML ) {
if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
return context.getElementsByClassName(match[1]);
}
};
- div = null; // release memory in IE
+ // release memory in IE
+ div = null;
})();
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
+
if ( elem ) {
- elem = elem[dir];
var match = false;
+ elem = elem[dir];
+
while ( elem ) {
- if ( elem.sizcache === doneName ) {
+ if ( elem[ expando ] === doneName ) {
match = checkSet[elem.sizset];
break;
}
if ( elem.nodeType === 1 && !isXML ){
- elem.sizcache = doneName;
+ elem[ expando ] = doneName;
elem.sizset = i;
}
@@ -7879,21 +8607,24 @@ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
+
if ( elem ) {
- elem = elem[dir];
var match = false;
+ elem = elem[dir];
+
while ( elem ) {
- if ( elem.sizcache === doneName ) {
+ if ( elem[ expando ] === doneName ) {
match = checkSet[elem.sizset];
break;
}
if ( elem.nodeType === 1 ) {
if ( !isXML ) {
- elem.sizcache = doneName;
+ elem[ expando ] = doneName;
elem.sizset = i;
}
+
if ( typeof cur !== "string" ) {
if ( elem === cur ) {
match = true;
@@ -7914,21 +8645,34 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
}
}
-Sizzle.contains = document.compareDocumentPosition ? function(a, b){
- return !!(a.compareDocumentPosition(b) & 16);
-} : function(a, b){
- return a !== b && (a.contains ? a.contains(b) : true);
-};
+if ( document.documentElement.contains ) {
+ Sizzle.contains = function( a, b ) {
+ return a !== b && (a.contains ? a.contains(b) : true);
+ };
-Sizzle.isXML = function(elem){
+} else if ( document.documentElement.compareDocumentPosition ) {
+ Sizzle.contains = function( a, b ) {
+ return !!(a.compareDocumentPosition(b) & 16);
+ };
+
+} else {
+ Sizzle.contains = function() {
+ return false;
+ };
+}
+
+Sizzle.isXML = function( elem ) {
// documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
+ // (such as loading iframes in IE - #4833)
var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
return documentElement ? documentElement.nodeName !== "HTML" : false;
};
-var posProcess = function(selector, context){
- var tmpSet = [], later = "", match,
+var posProcess = function( selector, context, seed ) {
+ var match,
+ tmpSet = [],
+ later = "",
root = context.nodeType ? [context] : context;
// Position selectors must be done after the filter
@@ -7941,7 +8685,7 @@ var posProcess = function(selector, context){
selector = Expr.relative[selector] ? selector + "*" : selector;
for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet );
+ Sizzle( selector, root[i], tmpSet, seed );
}
return Sizzle.filter( later, tmpSet );
@@ -7970,20 +8714,20 @@ window.tinymce.dom.Sizzle = Sizzle;
('getPos,getRect,getParent,add,setStyle,getStyle,setStyles,' +
'setAttrib,setAttribs,getAttrib,addClass,removeClass,' +
'hasClass,getOuterHTML,setOuterHTML,remove,show,hide,' +
- 'isHidden,setHTML,get').split(/,/)
- , function(k) {
- t[k] = function() {
- var a = [id], i;
+ 'isHidden,setHTML,get').split(/,/), function(k) {
+ t[k] = function() {
+ var a = [id], i;
- for (i = 0; i < arguments.length; i++)
- a.push(arguments[i]);
+ for (i = 0; i < arguments.length; i++)
+ a.push(arguments[i]);
- a = dom[k].apply(dom, a);
- t.update(k);
+ a = dom[k].apply(dom, a);
+ t.update(k);
- return a;
- };
- });
+ return a;
+ };
+ }
+ );
tinymce.extend(t, {
on : function(n, f, s) {
@@ -8069,7 +8813,7 @@ window.tinymce.dom.Sizzle = Sizzle;
};
// Shorten names
- var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;
+ var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each, TreeWalker = tinymce.dom.TreeWalker;
tinymce.create('tinymce.dom.Selection', {
Selection : function(dom, win, serializer) {
@@ -8176,7 +8920,7 @@ window.tinymce.dom.Sizzle = Sizzle;
} else {
rng.deleteContents();
- if (doc.body.childNodes.length == 0) {
+ if (doc.body.childNodes.length === 0) {
doc.body.innerHTML = content;
} else {
// createContextualFragment doesn't exists in IE 9 DOMRanges
@@ -8312,46 +9056,69 @@ window.tinymce.dom.Sizzle = Sizzle;
return index;
};
- if (type == 2) {
- function getLocation() {
- var rng = t.getRng(true), root = dom.getRoot(), bookmark = {};
+ function normalizeTableCellSelection(rng) {
+ function moveEndPoint(start) {
+ var container, offset, childNodes, prefix = start ? 'start' : 'end';
- function getPoint(rng, start) {
- var container = rng[start ? 'startContainer' : 'endContainer'],
- offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0;
+ container = rng[prefix + 'Container'];
+ offset = rng[prefix + 'Offset'];
- if (container.nodeType == 3) {
- if (normalized) {
- for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling)
- offset += node.nodeValue.length;
- }
+ if (container.nodeType == 1 && container.nodeName == "TR") {
+ childNodes = container.childNodes;
+ container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];
+ if (container) {
+ offset = start ? 0 : container.childNodes.length;
+ rng['set' + (start ? 'Start' : 'End')](container, offset);
+ }
+ }
+ };
- point.push(offset);
- } else {
- childNodes = container.childNodes;
+ moveEndPoint(true);
+ moveEndPoint();
- if (offset >= childNodes.length && childNodes.length) {
- after = 1;
- offset = Math.max(0, childNodes.length - 1);
- }
+ return rng;
+ };
+
+ function getLocation() {
+ var rng = t.getRng(true), root = dom.getRoot(), bookmark = {};
+
+ function getPoint(rng, start) {
+ var container = rng[start ? 'startContainer' : 'endContainer'],
+ offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0;
- point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after);
+ if (container.nodeType == 3) {
+ if (normalized) {
+ for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling)
+ offset += node.nodeValue.length;
}
- for (; container && container != root; container = container.parentNode)
- point.push(t.dom.nodeIndex(container, normalized));
+ point.push(offset);
+ } else {
+ childNodes = container.childNodes;
- return point;
- };
+ if (offset >= childNodes.length && childNodes.length) {
+ after = 1;
+ offset = Math.max(0, childNodes.length - 1);
+ }
- bookmark.start = getPoint(rng, true);
+ point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after);
+ }
- if (!t.isCollapsed())
- bookmark.end = getPoint(rng);
+ for (; container && container != root; container = container.parentNode)
+ point.push(t.dom.nodeIndex(container, normalized));
- return bookmark;
+ return point;
};
+ bookmark.start = getPoint(rng, true);
+
+ if (!t.isCollapsed())
+ bookmark.end = getPoint(rng);
+
+ return bookmark;
+ };
+
+ if (type == 2) {
if (t.tridentSel)
return t.tridentSel.getBookmark(type);
@@ -8384,7 +9151,7 @@ window.tinymce.dom.Sizzle = Sizzle;
// Detect the empty space after block elements in IE and move the end back one character <p></p>] becomes <p>]</p>
rng.moveToElementText(rng2.parentElement());
- if (rng.compareEndPoints('StartToEnd', rng2) == 0)
+ if (rng.compareEndPoints('StartToEnd', rng2) === 0)
rng2.move('character', -1);
rng2.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_end" style="' + styles + '">' + chr + '</span>');
@@ -8406,13 +9173,8 @@ window.tinymce.dom.Sizzle = Sizzle;
if (name == 'IMG')
return {name : name, index : findIndex(name, element)};
- // Can't insert a node into the root of document WebKit defaults to document
- if (rng.startContainer.nodeType == 9) {
- return;
- }
-
// W3C method
- rng2 = rng.cloneRange();
+ rng2 = normalizeTableCellSelection(rng.cloneRange());
// Insert end marker
if (!collapsed) {
@@ -8420,6 +9182,7 @@ window.tinymce.dom.Sizzle = Sizzle;
rng2.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_end', style : styles}, chr));
}
+ rng = normalizeTableCellSelection(rng);
rng.collapse(true);
rng.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_start', style : styles}, chr));
}
@@ -8432,122 +9195,122 @@ window.tinymce.dom.Sizzle = Sizzle;
moveToBookmark : function(bookmark) {
var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset;
- if (bookmark) {
- if (bookmark.start) {
- rng = dom.createRng();
- root = dom.getRoot();
+ function setEndPoint(start) {
+ var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;
- function setEndPoint(start) {
- var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;
+ if (point) {
+ offset = point[0];
- if (point) {
- offset = point[0];
+ // Find container node
+ for (node = root, i = point.length - 1; i >= 1; i--) {
+ children = node.childNodes;
- // Find container node
- for (node = root, i = point.length - 1; i >= 1; i--) {
- children = node.childNodes;
+ if (point[i] > children.length - 1)
+ return;
- if (point[i] > children.length - 1)
- return;
+ node = children[point[i]];
+ }
- node = children[point[i]];
- }
+ // Move text offset to best suitable location
+ if (node.nodeType === 3)
+ offset = Math.min(point[0], node.nodeValue.length);
- // Move text offset to best suitable location
- if (node.nodeType === 3)
- offset = Math.min(point[0], node.nodeValue.length);
+ // Move element offset to best suitable location
+ if (node.nodeType === 1)
+ offset = Math.min(point[0], node.childNodes.length);
- // Move element offset to best suitable location
- if (node.nodeType === 1)
- offset = Math.min(point[0], node.childNodes.length);
+ // Set offset within container node
+ if (start)
+ rng.setStart(node, offset);
+ else
+ rng.setEnd(node, offset);
+ }
- // Set offset within container node
- if (start)
- rng.setStart(node, offset);
- else
- rng.setEnd(node, offset);
- }
+ return true;
+ };
- return true;
- };
+ function restoreEndPoint(suffix) {
+ var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep;
- if (t.tridentSel)
- return t.tridentSel.moveToBookmark(bookmark);
+ if (marker) {
+ node = marker.parentNode;
- if (setEndPoint(true) && setEndPoint()) {
- t.setRng(rng);
+ if (suffix == 'start') {
+ if (!keep) {
+ idx = dom.nodeIndex(marker);
+ } else {
+ node = marker.firstChild;
+ idx = 1;
+ }
+
+ startContainer = endContainer = node;
+ startOffset = endOffset = idx;
+ } else {
+ if (!keep) {
+ idx = dom.nodeIndex(marker);
+ } else {
+ node = marker.firstChild;
+ idx = 1;
+ }
+
+ endContainer = node;
+ endOffset = idx;
}
- } else if (bookmark.id) {
- function restoreEndPoint(suffix) {
- var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep;
- if (marker) {
- node = marker.parentNode;
+ if (!keep) {
+ prev = marker.previousSibling;
+ next = marker.nextSibling;
- if (suffix == 'start') {
- if (!keep) {
- idx = dom.nodeIndex(marker);
- } else {
- node = marker.firstChild;
- idx = 1;
- }
+ // Remove all marker text nodes
+ each(tinymce.grep(marker.childNodes), function(node) {
+ if (node.nodeType == 3)
+ node.nodeValue = node.nodeValue.replace(/\uFEFF/g, '');
+ });
+
+ // Remove marker but keep children if for example contents where inserted into the marker
+ // Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature
+ while (marker = dom.get(bookmark.id + '_' + suffix))
+ dom.remove(marker, 1);
- startContainer = endContainer = node;
+ // If siblings are text nodes then merge them unless it's Opera since it some how removes the node
+ // and we are sniffing since adding a lot of detection code for a browser with 3% of the market isn't worth the effort. Sorry, Opera but it's just a fact
+ if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !tinymce.isOpera) {
+ idx = prev.nodeValue.length;
+ prev.appendData(next.nodeValue);
+ dom.remove(next);
+
+ if (suffix == 'start') {
+ startContainer = endContainer = prev;
startOffset = endOffset = idx;
} else {
- if (!keep) {
- idx = dom.nodeIndex(marker);
- } else {
- node = marker.firstChild;
- idx = 1;
- }
-
- endContainer = node;
+ endContainer = prev;
endOffset = idx;
}
+ }
+ }
+ }
+ };
- if (!keep) {
- prev = marker.previousSibling;
- next = marker.nextSibling;
-
- // Remove all marker text nodes
- each(tinymce.grep(marker.childNodes), function(node) {
- if (node.nodeType == 3)
- node.nodeValue = node.nodeValue.replace(/\uFEFF/g, '');
- });
+ function addBogus(node) {
+ // Adds a bogus BR element for empty block elements
+ if (dom.isBlock(node) && !node.innerHTML && !isIE)
+ node.innerHTML = '<br data-mce-bogus="1" />';
- // Remove marker but keep children if for example contents where inserted into the marker
- // Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature
- while (marker = dom.get(bookmark.id + '_' + suffix))
- dom.remove(marker, 1);
-
- // If siblings are text nodes then merge them unless it's Opera since it some how removes the node
- // and we are sniffing since adding a lot of detection code for a browser with 3% of the market isn't worth the effort. Sorry, Opera but it's just a fact
- if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !tinymce.isOpera) {
- idx = prev.nodeValue.length;
- prev.appendData(next.nodeValue);
- dom.remove(next);
-
- if (suffix == 'start') {
- startContainer = endContainer = prev;
- startOffset = endOffset = idx;
- } else {
- endContainer = prev;
- endOffset = idx;
- }
- }
- }
- }
- };
+ return node;
+ };
- function addBogus(node) {
- // Adds a bogus BR element for empty block elements or just a space on IE since it renders BR elements incorrectly
- if (dom.isBlock(node) && !node.innerHTML)
- node.innerHTML = !isIE ? '<br data-mce-bogus="1" />' : ' ';
+ if (bookmark) {
+ if (bookmark.start) {
+ rng = dom.createRng();
+ root = dom.getRoot();
- return node;
- };
+ if (t.tridentSel)
+ return t.tridentSel.moveToBookmark(bookmark);
+ if (setEndPoint(true) && setEndPoint()) {
+ t.setRng(rng);
+ }
+ } else if (bookmark.id) {
// Restore start/end points
restoreEndPoint('start');
restoreEndPoint('end');
@@ -8568,6 +9331,32 @@ window.tinymce.dom.Sizzle = Sizzle;
select : function(node, content) {
var t = this, dom = t.dom, rng = dom.createRng(), idx;
+ function setPoint(node, start) {
+ var walker = new TreeWalker(node, node);
+
+ do {
+ // Text node
+ if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length !== 0) {
+ if (start)
+ rng.setStart(node, 0);
+ else
+ rng.setEnd(node, node.nodeValue.length);
+
+ return;
+ }
+
+ // BR element
+ if (node.nodeName == 'BR') {
+ if (start)
+ rng.setStartBefore(node);
+ else
+ rng.setEndBefore(node);
+
+ return;
+ }
+ } while (node = (start ? walker.next() : walker.prev()));
+ };
+
if (node) {
idx = dom.nodeIndex(node);
rng.setStart(node.parentNode, idx);
@@ -8575,32 +9364,6 @@ window.tinymce.dom.Sizzle = Sizzle;
// Find first/last text node or BR element
if (content) {
- function setPoint(node, start) {
- var walker = new tinymce.dom.TreeWalker(node, node);
-
- do {
- // Text node
- if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {
- if (start)
- rng.setStart(node, 0);
- else
- rng.setEnd(node, node.nodeValue.length);
-
- return;
- }
-
- // BR element
- if (node.nodeName == 'BR') {
- if (start)
- rng.setStartBefore(node);
- else
- rng.setEndBefore(node);
-
- return;
- }
- } while (node = (start ? walker.next() : walker.prev()));
- };
-
setPoint(node, 1);
setPoint(node);
}
@@ -8644,48 +9407,58 @@ window.tinymce.dom.Sizzle = Sizzle;
},
getRng : function(w3c) {
- var t = this, s, r, elm, doc = t.win.document;
+ var self = this, selection, rng, elm, doc = self.win.document;
// Found tridentSel object then we need to use that one
- if (w3c && t.tridentSel)
- return t.tridentSel.getRangeAt(0);
+ if (w3c && self.tridentSel) {
+ return self.tridentSel.getRangeAt(0);
+ }
try {
- if (s = t.getSel())
- r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : doc.createRange());
+ if (selection = self.getSel()) {
+ rng = selection.rangeCount > 0 ? selection.getRangeAt(0) : (selection.createRange ? selection.createRange() : doc.createRange());
+ }
} catch (ex) {
// IE throws unspecified error here if TinyMCE is placed in a frame/iframe
}
// We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet
- if (tinymce.isIE && r && r.setStart && doc.selection.createRange().item) {
+ if (tinymce.isIE && rng && rng.setStart && doc.selection.createRange().item) {
elm = doc.selection.createRange().item(0);
- r = doc.createRange();
- r.setStartBefore(elm);
- r.setEndAfter(elm);
+ rng = doc.createRange();
+ rng.setStartBefore(elm);
+ rng.setEndAfter(elm);
}
// No range found then create an empty one
// This can occur when the editor is placed in a hidden container element on Gecko
// Or on IE when there was an exception
- if (!r)
- r = doc.createRange ? doc.createRange() : doc.body.createTextRange();
+ if (!rng) {
+ rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();
+ }
+
+ // If range is at start of document then move it to start of body
+ if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {
+ elm = self.dom.getRoot();
+ rng.setStart(elm, 0);
+ rng.setEnd(elm, 0);
+ }
- if (t.selectedRange && t.explicitRange) {
- if (r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) === 0 && r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) === 0) {
+ if (self.selectedRange && self.explicitRange) {
+ if (rng.compareBoundaryPoints(rng.START_TO_START, self.selectedRange) === 0 && rng.compareBoundaryPoints(rng.END_TO_END, self.selectedRange) === 0) {
// Safari, Opera and Chrome only ever select text which causes the range to change.
// This lets us use the originally set range if the selection hasn't been changed by the user.
- r = t.explicitRange;
+ rng = self.explicitRange;
} else {
- t.selectedRange = null;
- t.explicitRange = null;
+ self.selectedRange = null;
+ self.explicitRange = null;
}
}
- return r;
+ return rng;
},
- setRng : function(r) {
+ setRng : function(r, forward) {
var s, t = this;
if (!t.tridentSel) {
@@ -8701,6 +9474,13 @@ window.tinymce.dom.Sizzle = Sizzle;
}
s.addRange(r);
+
+ // Forward is set to false and we have an extend function
+ if (forward === false && s.extend) {
+ s.collapse(r.endContainer, r.endOffset);
+ s.extend(r.startContainer, r.startOffset);
+ }
+
// adding range isn't always successful so we need to check range count otherwise an exception can occur
t.selectedRange = s.rangeCount > 0 ? s.getRangeAt(0) : null;
}
@@ -8735,6 +9515,14 @@ window.tinymce.dom.Sizzle = Sizzle;
getNode : function() {
var t = this, rng = t.getRng(), sel = t.getSel(), elm, start = rng.startContainer, end = rng.endContainer;
+ function skipEmptyTextNodes(n, forwards) {
+ var orig = n;
+ while (n && n.nodeType === 3 && n.length === 0) {
+ n = forwards ? n.nextSibling : n.previousSibling;
+ }
+ return n || orig;
+ };
+
// Range maybe lost after the editor is made visible again
if (!rng)
return t.dom.getRoot();
@@ -8758,13 +9546,6 @@ window.tinymce.dom.Sizzle = Sizzle;
// Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent.
// This happens when you double click an underlined word in FireFox.
if (start.nodeType === 3 && end.nodeType === 3) {
- function skipEmptyTextNodes(n, forwards) {
- var orig = n;
- while (n && n.nodeType === 3 && n.length === 0) {
- n = forwards ? n.nextSibling : n.previousSibling;
- }
- return n || orig;
- }
if (start.length === rng.startOffset) {
start = skipEmptyTextNodes(start.nextSibling, true);
} else {
@@ -8802,7 +9583,7 @@ window.tinymce.dom.Sizzle = Sizzle;
if (sb && eb && sb != eb) {
n = sb;
- var walker = new tinymce.dom.TreeWalker(sb, dom.getRoot());
+ var walker = new TreeWalker(sb, dom.getRoot());
while ((n = walker.next()) && n != eb) {
if (dom.isBlock(n))
bl.push(n);
@@ -8815,54 +9596,120 @@ window.tinymce.dom.Sizzle = Sizzle;
return bl;
},
- normalize : function() {
- var self = this, rng, normalized;
+ isForward: function(){
+ var dom = this.dom, sel = this.getSel(), anchorRange, focusRange;
- // TODO:
- // Retain selection direction.
- // Lean left/right on Gecko for inline elements.
- // Run this on mouse up/key up when the user manually moves the selection
+ // No support for selection direction then always return true
+ if (!sel || sel.anchorNode == null || sel.focusNode == null) {
+ return true;
+ }
- // Normalize only on non IE browsers for now
- if (tinymce.isIE)
- return;
+ anchorRange = dom.createRng();
+ anchorRange.setStart(sel.anchorNode, sel.anchorOffset);
+ anchorRange.collapse(true);
+
+ focusRange = dom.createRng();
+ focusRange.setStart(sel.focusNode, sel.focusOffset);
+ focusRange.collapse(true);
+
+ return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;
+ },
+
+ normalize : function() {
+ var self = this, rng, normalized, collapsed, node, sibling;
function normalizeEndPoint(start) {
- var container, offset, walker, dom = self.dom, body = dom.getRoot(), node;
+ var container, offset, walker, dom = self.dom, body = dom.getRoot(), node, nonEmptyElementsMap, nodeName;
+
+ function hasBrBeforeAfter(node, left) {
+ var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || body);
+
+ while (node = walker[left ? 'prev' : 'next']()) {
+ if (node.nodeName === "BR") {
+ return true;
+ }
+ }
+ };
+
+ // Walks the dom left/right to find a suitable text node to move the endpoint into
+ // It will only walk within the current parent block or body and will stop if it hits a block or a BR/IMG
+ function findTextNodeRelative(left, startNode) {
+ var walker, lastInlineElement;
+
+ startNode = startNode || container;
+ walker = new TreeWalker(startNode, dom.getParent(startNode.parentNode, dom.isBlock) || body);
+
+ // Walk left until we hit a text node we can move to or a block/br/img
+ while (node = walker[left ? 'prev' : 'next']()) {
+ // Found text node that has a length
+ if (node.nodeType === 3 && node.nodeValue.length > 0) {
+ container = node;
+ offset = left ? node.nodeValue.length : 0;
+ normalized = true;
+ return;
+ }
+
+ // Break if we find a block or a BR/IMG/INPUT etc
+ if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
+ return;
+ }
+
+ lastInlineElement = node;
+ }
+
+ // Only fetch the last inline element when in caret mode for now
+ if (collapsed && lastInlineElement) {
+ container = lastInlineElement;
+ normalized = true;
+ offset = 0;
+ }
+ };
container = rng[(start ? 'start' : 'end') + 'Container'];
offset = rng[(start ? 'start' : 'end') + 'Offset'];
+ nonEmptyElementsMap = dom.schema.getNonEmptyElements();
// If the container is a document move it to the body element
if (container.nodeType === 9) {
- container = container.body;
+ container = dom.getRoot();
offset = 0;
}
// If the container is body try move it into the closest text node or position
- // TODO: Add more logic here to handle element selection cases
if (container === body) {
+ // If start is before/after a image, table etc
+ if (start) {
+ node = container.childNodes[offset > 0 ? offset - 1 : 0];
+ if (node) {
+ nodeName = node.nodeName.toLowerCase();
+ if (nonEmptyElementsMap[node.nodeName] || node.nodeName == "TABLE") {
+ return;
+ }
+ }
+ }
+
// Resolve the index
if (container.hasChildNodes()) {
container = container.childNodes[Math.min(!start && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1)];
offset = 0;
// Don't walk into elements that doesn't have any child nodes like a IMG
- if (container.hasChildNodes()) {
+ if (container.hasChildNodes() && !/TABLE/.test(container.nodeName)) {
// Walk the DOM to find a text node to place the caret at or a BR
node = container;
- walker = new tinymce.dom.TreeWalker(container, body);
+ walker = new TreeWalker(container, body);
+
do {
// Found a text node use that position
- if (node.nodeType === 3) {
- offset = start ? 0 : node.nodeValue.length - 1;
+ if (node.nodeType === 3 && node.nodeValue.length > 0) {
+ offset = start ? 0 : node.nodeValue.length;
container = node;
normalized = true;
break;
}
// Found a BR/IMG element that we can place the caret before
- if (/^(BR|IMG)$/.test(node.nodeName)) {
+ if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
offset = dom.nodeIndex(node);
container = node.parentNode;
@@ -8879,23 +9726,61 @@ window.tinymce.dom.Sizzle = Sizzle;
}
}
+ // Lean the caret to the left if possible
+ if (collapsed) {
+ // So this: <b>x</b><i>|x</i>
+ // Becomes: <b>x|</b><i>x</i>
+ // Seems that only gecko has issues with this
+ if (container.nodeType === 3 && offset === 0) {
+ findTextNodeRelative(true);
+ }
+
+ // Lean left into empty inline elements when the caret is before a BR
+ // So this: <i><b></b><i>|<br></i>
+ // Becomes: <i><b>|</b><i><br></i>
+ // Seems that only gecko has issues with this
+ if (container.nodeType === 1) {
+ node = container.childNodes[offset];
+ if(node && node.nodeName === 'BR' && !hasBrBeforeAfter(node) && !hasBrBeforeAfter(node, true)) {
+ findTextNodeRelative(true, container.childNodes[offset]);
+ }
+ }
+ }
+
+ // Lean the start of the selection right if possible
+ // So this: x[<b>x]</b>
+ // Becomes: x<b>[x]</b>
+ if (start && !collapsed && container.nodeType === 3 && offset === container.nodeValue.length) {
+ findTextNodeRelative(false);
+ }
+
// Set endpoint if it was normalized
if (normalized)
rng['set' + (start ? 'Start' : 'End')](container, offset);
};
+ // Normalize only on non IE browsers for now
+ if (tinymce.isIE)
+ return;
+
rng = self.getRng();
+ collapsed = rng.collapsed;
// Normalize the end points
normalizeEndPoint(true);
- if (!rng.collapsed)
+ if (!collapsed)
normalizeEndPoint();
// Set the selection if it was normalized
if (normalized) {
+ // If it was collapsed then make sure it still is
+ if (collapsed) {
+ rng.collapse(true);
+ }
+
//console.log(self.dom.dumpRng(rng));
- self.setRng(rng);
+ self.setRng(rng, self.isForward());
}
},
@@ -8913,9 +9798,6 @@ window.tinymce.dom.Sizzle = Sizzle;
_fixIESelection : function() {
var dom = this.dom, doc = dom.doc, body = doc.body, started, startRng, htmlElm;
- // Make HTML element unselectable since we are going to handle selection by hand
- doc.documentElement.unselectable = true;
-
// Return range from point or null if it failed
function rngFromPoint(x, y) {
var rng = body.createTextRange();
@@ -8965,6 +9847,9 @@ window.tinymce.dom.Sizzle = Sizzle;
startRng = started = 0;
};
+ // Make HTML element unselectable since we are going to handle selection by hand
+ doc.documentElement.unselectable = true;
+
// Detect when user selects outside BODY
dom.bind(doc, ['mousedown', 'contextmenu'], function(e) {
if (e.target.nodeName === 'HTML') {
@@ -9039,13 +9924,13 @@ window.tinymce.dom.Sizzle = Sizzle;
}
});
- // Remove internal classes mceItem<..>
+ // Remove internal classes mceItem<..> or mceSelected
htmlParser.addAttributeFilter('class', function(nodes, name) {
var i = nodes.length, node, value;
while (i--) {
node = nodes[i];
- value = node.attr('class').replace(/\s*mce(Item\w+|Selected)\s*/g, '');
+ value = node.attr('class').replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g, '');
node.attr('class', value.length > 0 ? value : null);
}
});
@@ -9223,7 +10108,7 @@ window.tinymce.dom.Sizzle = Sizzle;
// Parse and serialize HTML
args.content = htmlSerializer.serialize(
- htmlParser.parse(args.getInner ? node.innerHTML : tinymce.trim(dom.getOuterHTML(node), args), args)
+ htmlParser.parse(tinymce.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node)), args)
);
// Replace all BOM characters for now until we can find a better solution
@@ -9263,7 +10148,7 @@ window.tinymce.dom.Sizzle = Sizzle;
scriptLoadedCallbacks = {},
queueLoadedCallbacks = [],
loading = 0,
- undefined;
+ undef;
function loadScript(url, callback) {
var t = this, dom = tinymce.DOM, elm, uri, loc, id;
@@ -9372,7 +10257,7 @@ window.tinymce.dom.Sizzle = Sizzle;
var item, state = states[url];
// Add url to load queue
- if (state == undefined) {
+ if (state == undef) {
queue.push(url);
states[url] = QUEUED;
}
@@ -9402,7 +10287,7 @@ window.tinymce.dom.Sizzle = Sizzle;
callback.func.call(callback.scope);
});
- scriptLoadedCallbacks[url] = undefined;
+ scriptLoadedCallbacks[url] = undef;
};
queueLoadedCallbacks.push({
@@ -9459,46 +10344,6 @@ window.tinymce.dom.Sizzle = Sizzle;
tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();
})(tinymce);
-tinymce.dom.TreeWalker = function(start_node, root_node) {
- var node = start_node;
-
- function findSibling(node, start_name, sibling_name, shallow) {
- var sibling, parent;
-
- if (node) {
- // Walk into nodes if it has a start
- if (!shallow && node[start_name])
- return node[start_name];
-
- // Return the sibling if it has one
- if (node != root_node) {
- sibling = node[sibling_name];
- if (sibling)
- return sibling;
-
- // Walk up the parents to look for siblings
- for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {
- sibling = parent[sibling_name];
- if (sibling)
- return sibling;
- }
- }
- }
- };
-
- this.current = function() {
- return node;
- };
-
- this.next = function(shallow) {
- return (node = findSibling(node, 'firstChild', 'nextSibling', shallow));
- };
-
- this.prev = function(shallow) {
- return (node = findSibling(node, 'lastChild', 'previousSibling', shallow));
- };
-};
-
(function(tinymce) {
tinymce.dom.RangeUtils = function(dom) {
var INVISIBLE_CHAR = '\uFEFF';
@@ -10159,8 +11004,8 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
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;
+ tw = s.max_width ? Math.min(tb.offsetWidth, s.max_width) : tb.offsetWidth;
+ th = s.max_height ? Math.min(tb.offsetHeight, s.max_height) : tb.offsetHeight;
if (!DOM.boxModel)
t.element.setStyles({width : tw + 2, height : th + 2});
@@ -10519,7 +11364,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
})(tinymce);
(function(tinymce) {
- var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, undef;
tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {
ListBox : function(id, s, ed) {
@@ -10546,7 +11391,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
t.marked = {};
- if (va == undefined)
+ if (va == undef)
return t.selectByIndex(-1);
// Is string or number make function selector
@@ -10638,7 +11483,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
showMenu : function() {
var t = this, p2, e = DOM.get(this.id), m;
- if (t.isDisabled() || t.items.length == 0)
+ if (t.isDisabled() || t.items.length === 0)
return;
if (t.menu && t.menu.isMenuVisible)
@@ -10705,7 +11550,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
m = t.settings.control_manager.createDropMenu(t.id + '_menu', {
menu_line : 1,
'class' : t.classPrefix + 'Menu mceNoIcons',
- max_width : 150,
+ max_width : 250,
max_height : 150
});
@@ -10725,7 +11570,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
each(t.items, function(o) {
// No value then treat it as a title
- if (o.value === undefined) {
+ if (o.value === undef) {
m.add({
title : o.title,
role : "option",
@@ -10815,7 +11660,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
})(tinymce);
(function(tinymce) {
- var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, undef;
tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {
NativeListBox : function(id, s) {
@@ -10835,7 +11680,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
select : function(va) {
var t = this, fv, f;
- if (va == undefined)
+ if (va == undef)
return t.selectByIndex(-1);
// Is string or number make function selector
@@ -10988,7 +11833,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
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);
+ m.showMenu(0, e.firstChild.clientHeight);
Event.add(DOM.doc, 'mousedown', t.hideMenu, t);
t.setState('Selected', 1);
@@ -11172,7 +12017,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
p2 = DOM.getPos(e);
DOM.setStyles(t.id + '_menu', {
left : p2.x,
- top : p2.y + e.clientHeight,
+ top : p2.y + e.firstChild.clientHeight,
zIndex : 200000
});
e = 0;
@@ -11215,7 +12060,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
renderMenu : function() {
var t = this, m, i = 0, s = t.settings, n, tb, tr, w, context;
- w = DOM.add(s.menu_container, 'div', {role: 'listbox', id : t.id + '_menu', 'class' : s['menu_class'] + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'});
+ w = DOM.add(s.menu_container, 'div', {role: 'listbox', 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'});
@@ -11244,7 +12089,7 @@ tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
// adding a proper ARIA role = button causes JAWS to read things incorrectly on IE.
if (!tinymce.isIE ) {
- settings['role']= 'option';
+ settings.role = 'option';
}
n = DOM.add(n, 'a', settings);
@@ -11540,7 +12385,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
if (typeof u === "object")
url = u.prefix + u.resource + u.suffix;
- if (url.indexOf('/') != 0 && url.indexOf('://') == -1)
+ if (url.indexOf('/') !== 0 && url.indexOf('://') == -1)
url = tinymce.baseURL + '/' + url;
t.urls[n] = url.substring(0, url.lastIndexOf('/'));
@@ -11564,7 +12409,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
DOM = tinymce.DOM, Event = tinymce.dom.Event,
ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,
explode = tinymce.explode,
- Dispatcher = tinymce.util.Dispatcher, undefined, instanceCounter = 0;
+ Dispatcher = tinymce.util.Dispatcher, undef, instanceCounter = 0;
// Setup some URLs where the editor API is located and where the document is
tinymce.documentBaseURL = window.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
@@ -11634,6 +12479,10 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
return f.apply(s || this, Array.prototype.slice.call(arguments, 2));
};
+ function hasClass(n, c) {
+ return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);
+ };
+
s = extend({
theme : "simple",
language : "en"
@@ -11677,10 +12526,6 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
case "textareas":
case "specific_textareas":
- function hasClass(n, c) {
- return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);
- };
-
each(DOM.select('textarea'), function(elm) {
if (s.editor_deselector && hasClass(elm, s.editor_deselector))
return;
@@ -11741,7 +12586,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
},
get : function(id) {
- if (id === undefined)
+ if (id === undef)
return this.editors;
return this.editors[id];
@@ -11794,6 +12639,12 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
execCommand : function(c, u, v) {
var t = this, ed = t.get(v), w;
+ function clr() {
+ ed.destroy();
+ w.detachEvent('onunload', clr);
+ w = w.tinyMCE = w.tinymce = null; // IE leak
+ };
+
// Manager commands
switch (c) {
case "mceFocus":
@@ -11822,12 +12673,6 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
// Fix IE memory leaks
if (tinymce.isIE) {
- function clr() {
- ed.destroy();
- w.detachEvent('onunload', clr);
- w = w.tinyMCE = w.tinymce = null; // IE leak
- };
-
w.attachEvent('onunload', clr);
}
@@ -11910,108 +12755,18 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
(function(tinymce) {
// Shorten these names
var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend,
- Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isGecko = tinymce.isGecko,
+ each = tinymce.each, isGecko = tinymce.isGecko,
isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is,
ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,
- inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode, VK = tinymce.VK;
+ 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.isNotDirty = false;
-
- t.plugins = {};
-
- // Add events to the editor
- each([
- 'onPreInit',
-
- 'onBeforeRenderUI',
-
- 'onPostRender',
-
- 'onLoad',
-
- 'onInit',
-
- 'onRemove',
-
- 'onActivate',
-
- 'onDeactivate',
-
- 'onClick',
-
- 'onEvent',
-
- 'onMouseUp',
-
- 'onMouseDown',
-
- 'onDblClick',
-
- 'onKeyDown',
-
- 'onKeyUp',
-
- 'onKeyPress',
+ Editor : function(id, settings) {
+ var self = this, TRUE = true;
- 'onContextMenu',
-
- 'onSubmit',
-
- 'onReset',
-
- 'onPaste',
-
- 'onPreProcess',
-
- 'onPostProcess',
-
- 'onBeforeSetContent',
-
- 'onBeforeGetContent',
-
- 'onSetContent',
-
- 'onGetContent',
-
- 'onLoadContent',
-
- 'onSaveContent',
-
- 'onNodeChange',
-
- 'onChange',
-
- 'onBeforeExecCommand',
-
- 'onExecCommand',
-
- 'onUndo',
-
- 'onRedo',
-
- 'onVisualAid',
-
- 'onSetProgressState',
-
- 'onSetAttrib'
- ], function(e) {
- t[e] = new Dispatcher(t);
- });
-
- t.settings = s = extend({
+ self.settings = settings = extend({
id : id,
language : 'en',
- docs_language : 'en',
theme : 'simple',
skin : 'default',
delta_width : 0,
@@ -12019,58 +12774,63 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
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,
+ add_form_submit_trigger : TRUE,
+ submit_patch : TRUE,
+ add_unload_trigger : TRUE,
+ convert_urls : TRUE,
+ relative_urls : TRUE,
+ remove_script_host : TRUE,
+ table_inline_editing : false,
+ object_resizing : TRUE,
+ accessibility_focus : TRUE,
doctype : tinymce.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : '<!DOCTYPE>', // Use old doctype on IE 6 to avoid horizontal scroll
- visual_table_class : 'mceItemTable',
- visual : 1,
+ visual : TRUE,
font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',
font_size_legacy_values : 'xx-small,small,medium,large,x-large,xx-large,300%', // See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size
- apply_source_formatting : 1,
+ apply_source_formatting : TRUE,
directionality : 'ltr',
forced_root_block : 'p',
- hidden_input : 1,
- padd_empty_editor : 1,
- render_ui : 1,
- init_theme : 1,
- force_p_newlines : 1,
+ hidden_input : TRUE,
+ padd_empty_editor : TRUE,
+ render_ui : TRUE,
indentation : '30px',
- keep_styles : 1,
- fix_table_elements : 1,
- inline_styles : 1,
- convert_fonts_to_spans : true,
+ fix_table_elements : TRUE,
+ inline_styles : TRUE,
+ convert_fonts_to_spans : TRUE,
indent : 'simple',
- indent_before : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside',
- indent_after : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside',
- validate : true,
+ indent_before : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure',
+ indent_after : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure',
+ validate : TRUE,
entity_encoding : 'named',
- url_converter : t.convertURL,
- url_converter_scope : t,
- ie7_compat : true
- }, s);
+ url_converter : self.convertURL,
+ url_converter_scope : self,
+ ie7_compat : TRUE
+ }, settings);
+
+ self.id = self.editorId = id;
+
+ self.isNotDirty = false;
+
+ self.plugins = {};
- t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {
+ self.documentBaseURI = new tinymce.util.URI(settings.document_base_url || tinymce.documentBaseURL, {
base_uri : tinyMCE.baseURI
});
- t.baseURI = tinymce.baseURI;
+ self.baseURI = tinymce.baseURI;
- t.contentCSS = [];
+ self.contentCSS = [];
+
+ // Creates all events like onClick, onSetContent etc see Editor.Events.js for the actual logic
+ self.setupEvents();
+
+ // Internal command handler objects
+ self.execCommands = {};
+ self.queryStateCommands = {};
+ self.queryValueCommands = {};
// Call setup
- t.execCallback('setup', t);
+ self.execCallback('setup', self);
},
render : function(nst) {
@@ -12091,8 +12851,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
return;
// Is a iPad/iPhone and not on iOS5, then skip initialization. We need to sniff
- // here since the browser says it has contentEditable support but there is no visible
- // caret We will remove this check ones Apple implements full contentEditable support
+ // here since the browser says it has contentEditable support but there is no visible caret.
if (tinymce.isIDevice && !tinymce.isIOS5)
return;
@@ -12171,9 +12930,8 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
var dependencies = PluginManager.dependencies(p);
each(dependencies, function(dep) {
var defaultSettings = {prefix:'plugins/', resource: dep, suffix:'/editor_plugin' + tinymce.suffix + '.js'};
- var dep = PluginManager.createUrl(defaultSettings, dep);
+ dep = PluginManager.createUrl(defaultSettings, dep);
PluginManager.load(dep.resource, dep);
-
});
} else {
// Skip safari plugin, since it is removed as of 3.3b1
@@ -12207,7 +12965,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
o = ThemeManager.get(s.theme);
t.theme = new o();
- if (t.theme.init && s.init_theme)
+ if (t.theme.init)
t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));
}
function initPlugin(p) {
@@ -12243,51 +13001,27 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
t.controlManager = new tinymce.ControlManager(t);
- if (s.custom_undo_redo) {
- t.onBeforeExecCommand.add(function(ed, cmd, ui, val, a) {
- if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))
- t.undoManager.beforeChange();
- });
-
- 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) {
// Don't refresh the select lists until caret move
if (!/^(FontName|FontSize)$/.test(c))
t.nodeChanged();
});
- // Remove ghost selections on images and tables in Gecko
- 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);
- }
-
// Enables users to override the control factory
t.onBeforeRenderUI.dispatch(t, t.controlManager);
// Measure box
- if (s.render_ui) {
+ if (s.render_ui && t.theme) {
w = s.width || e.style.width || e.offsetWidth;
h = s.height || e.style.height || e.offsetHeight;
t.orgDisplay = e.style.display;
re = /^[0-9\.]+(|px)$/i;
if (re.test('' + w))
- w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100);
+ w = Math.max(parseInt(w, 10) + (o.deltaWidth || 0), 100);
if (re.test('' + h))
- h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100);
+ h = Math.max(parseInt(h, 10) + (o.deltaHeight || 0), 100);
// Render UI
o = t.theme.renderUI({
@@ -12301,6 +13035,18 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
t.editorContainer = o.editorContainer;
}
+ // Load specified content CSS last
+ if (s.content_css) {
+ each(explode(s.content_css), function(u) {
+ t.contentCSS.push(t.documentBaseURI.toAbsolute(u));
+ });
+ }
+
+ // Content editable mode ends here
+ if (s.content_editable) {
+ e = n = o = null; // Fix IE leak
+ return t.initContentBody();
+ }
// User specified a document.domain value
if (document.domain && location.hostname != document.domain)
@@ -12312,13 +13058,6 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
height : h
});
- // Load specified content CSS last
- if (s.content_css) {
- tinymce.each(explode(s.content_css), function(u) {
- t.contentCSS.push(t.documentBaseURI.toAbsolute(u));
- });
- }
-
h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : '');
if (h < 100)
h = 100;
@@ -12362,7 +13101,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
// Domain relaxing enabled, then set document domain
if (tinymce.relaxedDomain && (isIE || (tinymce.isOpera && parseFloat(opera.version()) < 11))) {
// We need to write the contents here in IE since multiple writes messes up refresh button and back button
- 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();})()';
+ u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()';
}
// Create iframe
@@ -12386,73 +13125,61 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
DOM.setAttrib(t.id, 'aria-hidden', true);
if (!tinymce.relaxedDomain || !u)
- t.setupIframe();
+ t.initContentBody();
e = n = o = null; // Cleanup
},
- setupIframe : function() {
- var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b;
+ initContentBody : function() {
+ var self = this, settings = self.settings, targetElm = DOM.get(self.id), doc = self.getDoc(), html, body;
// Setup iframe body
- if (!isIE || !tinymce.relaxedDomain) {
- d.open();
- d.write(t.iframeHTML);
- d.close();
+ if ((!isIE || !tinymce.relaxedDomain) && !settings.content_editable) {
+ doc.open();
+ doc.write(self.iframeHTML);
+ doc.close();
if (tinymce.relaxedDomain)
- d.domain = tinymce.relaxedDomain;
+ doc.domain = tinymce.relaxedDomain;
+ }
+
+ if (settings.content_editable) {
+ DOM.addClass(targetElm, 'mceContentBody');
+ self.contentDocument = doc = settings.content_document || document;
+ self.contentWindow = settings.content_window || window;
+ self.bodyElement = targetElm;
+
+ // Prevent leak in IE
+ settings.content_document = settings.content_window = null;
}
// It will not steal focus while setting contentEditable
- b = t.getBody();
- b.disabled = true;
+ body = self.getBody();
+ body.disabled = true;
- if (!s.readonly)
- b.contentEditable = true;
+ if (!settings.readonly)
+ body.contentEditable = self.getParam('content_editable_state', true);
- b.disabled = false;
+ body.disabled = false;
- t.schema = new tinymce.html.Schema(s);
+ self.schema = new tinymce.html.Schema(settings);
- t.dom = new tinymce.dom.DOMUtils(t.getDoc(), {
+ self.dom = new tinymce.dom.DOMUtils(doc, {
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,
- schema : t.schema
+ url_converter : self.convertURL,
+ url_converter_scope : self,
+ hex_colors : settings.force_hex_style_colors,
+ class_filter : settings.class_filter,
+ update_styles : true,
+ root_element : settings.content_editable ? self.id : null,
+ schema : self.schema
});
- t.parser = new tinymce.html.DomParser(s, t.schema);
-
- // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included.
- if (!t.settings.allow_html_in_named_anchor) {
- t.parser.addAttributeFilter('name', function(nodes, name) {
- var i = nodes.length, sibling, prevSibling, parent, node;
-
- while (i--) {
- node = nodes[i];
- if (node.name === 'a' && node.firstChild) {
- parent = node.parent;
-
- // Move children after current node
- sibling = node.lastChild;
- do {
- prevSibling = sibling.prev;
- parent.insert(sibling, node);
- sibling = prevSibling;
- } while (sibling);
- }
- }
- });
- }
+ self.parser = new tinymce.html.DomParser(settings, self.schema);
// Convert src and href into data-mce-src, data-mce-href and data-mce-style
- t.parser.addAttributeFilter('src,href,style', function(nodes, name) {
- var i = nodes.length, node, dom = t.dom, value, internalName;
+ self.parser.addAttributeFilter('src,href,style', function(nodes, name) {
+ var i = nodes.length, node, dom = self.dom, value, internalName;
while (i--) {
node = nodes[i];
@@ -12464,13 +13191,13 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
if (name === "style")
node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name));
else
- node.attr(internalName, t.convertURL(value, name, node.name));
+ node.attr(internalName, self.convertURL(value, name, node.name));
}
}
});
// Keep scripts from executing
- t.parser.addNodeFilter('script', function(nodes, name) {
+ self.parser.addNodeFilter('script', function(nodes, name) {
var i = nodes.length, node;
while (i--) {
@@ -12479,7 +13206,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
}
});
- t.parser.addNodeFilter('#cdata', function(nodes, name) {
+ self.parser.addNodeFilter('#cdata', function(nodes, name) {
var i = nodes.length, node;
while (i--) {
@@ -12490,8 +13217,8 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
}
});
- t.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes, name) {
- var i = nodes.length, node, nonEmptyElements = t.schema.getNonEmptyElements();
+ self.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes, name) {
+ var i = nodes.length, node, nonEmptyElements = self.schema.getNonEmptyElements();
while (i--) {
node = nodes[i];
@@ -12501,306 +13228,89 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
}
});
- t.serializer = new tinymce.dom.Serializer(s, t.dom, t.schema);
-
- t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);
-
- t.formatter = new tinymce.Formatter(this);
-
- // Register default formats
- t.formatter.register({
- alignleft : [
- {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}, defaultBlock: 'div'},
- {selector : 'img,table', collapsed : false, styles : {'float' : 'left'}}
- ],
-
- aligncenter : [
- {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}, defaultBlock: 'div'},
- {selector : 'img', collapsed : false, styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}},
- {selector : 'table', collapsed : false, styles : {marginLeft : 'auto', marginRight : 'auto'}}
- ],
-
- alignright : [
- {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}, defaultBlock: 'div'},
- {selector : 'img,table', collapsed : false, styles : {'float' : 'right'}}
- ],
+ self.serializer = new tinymce.dom.Serializer(settings, self.dom, self.schema);
- alignfull : [
- {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}, defaultBlock: 'div'}
- ],
+ self.selection = new tinymce.dom.Selection(self.dom, self.getWin(), self.serializer);
- bold : [
- {inline : 'strong', remove : 'all'},
- {inline : 'span', styles : {fontWeight : 'bold'}},
- {inline : 'b', remove : 'all'}
- ],
+ self.formatter = new tinymce.Formatter(self);
- italic : [
- {inline : 'em', remove : 'all'},
- {inline : 'span', styles : {fontStyle : 'italic'}},
- {inline : 'i', remove : 'all'}
- ],
+ self.undoManager = new tinymce.UndoManager(self);
- underline : [
- {inline : 'span', styles : {textDecoration : 'underline'}, exact : true},
- {inline : 'u', remove : 'all'}
- ],
-
- strikethrough : [
- {inline : 'span', styles : {textDecoration : 'line-through'}, exact : true},
- {inline : 'strike', remove : 'all'}
- ],
-
- forecolor : {inline : 'span', styles : {color : '%value'}, wrap_links : false},
- hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}, wrap_links : false},
- fontname : {inline : 'span', styles : {fontFamily : '%value'}},
- fontsize : {inline : 'span', styles : {fontSize : '%value'}},
- fontsize_class : {inline : 'span', attributes : {'class' : '%value'}},
- blockquote : {block : 'blockquote', wrapper : 1, remove : 'all'},
- subscript : {inline : 'sub'},
- superscript : {inline : 'sup'},
-
- link : {inline : 'a', selector : 'a', remove : 'all', split : true, deep : true,
- onmatch : function(node) {
- return true;
- },
-
- onformat : function(elm, fmt, vars) {
- each(vars, function(value, key) {
- t.dom.setAttrib(elm, key, value);
- });
- }
- },
-
- removeformat : [
- {selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true},
- {selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true},
- {selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true}
- ]
- });
-
- // Register default block formats
- each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) {
- t.formatter.register(name, {block : name, remove : 'all'});
- });
-
- // Register user defined formats
- t.formatter.register(t.settings.formats);
-
- t.undoManager = new tinymce.UndoManager(t);
+ self.forceBlocks = new tinymce.ForceBlocks(self);
+ self.enterKey = new tinymce.EnterKey(self);
+ self.editorCommands = new tinymce.EditorCommands(self);
// Pass through
- t.undoManager.onAdd.add(function(um, l) {
- if (um.hasUndo())
- return t.onChange.dispatch(t, l, um);
- });
-
- t.undoManager.onUndo.add(function(um, l) {
- return t.onUndo.dispatch(t, l, um);
+ self.serializer.onPreProcess.add(function(se, o) {
+ return self.onPreProcess.dispatch(self, o, se);
});
- t.undoManager.onRedo.add(function(um, l) {
- return t.onRedo.dispatch(t, l, um);
+ self.serializer.onPostProcess.add(function(se, o) {
+ return self.onPostProcess.dispatch(self, o, se);
});
- t.forceBlocks = new tinymce.ForceBlocks(t);
- t.enterKey = new tinymce.EnterKey(t);
+ self.onPreInit.dispatch(self);
- t.editorCommands = new tinymce.EditorCommands(t);
+ if (!settings.gecko_spellcheck)
+ doc.body.spellcheck = false;
- // Pass through
- 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;
-
- if (!s.readonly)
- t._addEvents();
-
- t.controlManager.onPostRender.dispatch(t, t.controlManager);
- t.onPostRender.dispatch(t);
-
- t.quirks = new tinymce.util.Quirks(this);
-
- if (s.directionality)
- t.getBody().dir = s.directionality;
-
- if (s.nowrap)
- t.getBody().style.whiteSpace = "nowrap";
-
- 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 (!settings.readonly) {
+ self.bindNativeEvents();
}
- if (s.save_callback) {
- t.onSaveContent.add(function(ed, o) {
- var h = t.execCallback('save_callback', t.id, o.content, t.getBody());
+ self.controlManager.onPostRender.dispatch(self, self.controlManager);
+ self.onPostRender.dispatch(self);
- if (h)
- o.content = h;
- });
- }
-
- if (s.onchange_callback) {
- t.onChange.add(function(ed, l) {
- t.execCallback('onchange_callback', t, l);
- });
- }
-
- if (s.protect) {
- t.onBeforeSetContent.add(function(ed, o) {
- if (s.protect) {
- each(s.protect, function(pattern) {
- o.content = o.content.replace(pattern, function(str) {
- return '<!--mce:protected ' + escape(str) + '-->';
- });
- });
- }
- });
- }
-
- 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.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') {
- // Build regexp for classes
- 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.cleanup_callback) {
- t.onBeforeSetContent.add(function(ed, o) {
- o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
- });
+ self.quirks = tinymce.util.Quirks(self);
- 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 (settings.directionality)
+ body.dir = settings.directionality;
- 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 (settings.nowrap)
+ body.style.whiteSpace = "nowrap";
- 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);
+ if (settings.protect) {
+ self.onBeforeSetContent.add(function(ed, o) {
+ each(settings.protect, function(pattern) {
+ o.content = o.content.replace(pattern, function(str) {
+ return '<!--mce:protected ' + escape(str) + '-->';
+ });
+ });
});
}
// Add visual aids when new contents is added
- t.onSetContent.add(function() {
- t.addVisual(t.getBody());
+ self.onSetContent.add(function() {
+ self.addVisual(self.getBody());
});
// Remove empty contents
- if (s.padd_empty_editor) {
- t.onPostProcess.add(function(ed, o) {
+ if (settings.padd_empty_editor) {
+ self.onPostProcess.add(function(ed, o) {
o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, '');
});
}
- if (isGecko) {
- // Fix gecko link bug, when a link is placed at the end of block elements there is
- // no way to move the caret behind the link. This fix adds a bogus br element after the link
- function fixLinks(ed, o) {
- each(ed.dom.select('a'), function(n) {
- var pn = n.parentNode;
-
- if (ed.dom.isBlock(pn) && pn.lastChild === n)
- ed.dom.add(pn, 'br', {'data-mce-bogus' : 1});
- });
- };
-
- t.onExecCommand.add(function(ed, cmd) {
- if (cmd === 'CreateLink')
- fixLinks(ed);
- });
-
- t.onSetContent.add(t.selection.onSetContent.add(fixLinks));
- }
+ self.load({initial : true, format : 'html'});
+ self.startContent = self.getContent({format : 'raw'});
- t.load({initial : true, format : 'html'});
- t.startContent = t.getContent({format : 'raw'});
- t.undoManager.add();
- t.initialized = true;
+ self.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});
+ self.onInit.dispatch(self);
+ self.execCallback('setupcontent_callback', self.id, body, doc);
+ self.execCallback('init_instance_callback', self);
+ self.focus(true);
+ self.nodeChanged({initial : true});
// Load specified content CSS last
- each(t.contentCSS, function(u) {
- t.dom.loadCSS(u);
+ each(self.contentCSS, function(url) {
+ self.dom.loadCSS(url);
});
// Handle auto focus
- if (s.auto_focus) {
+ if (settings.auto_focus) {
setTimeout(function () {
- var ed = tinymce.get(s.auto_focus);
+ var ed = tinymce.get(settings.auto_focus);
ed.selection.select(ed.getBody(), 1);
ed.selection.collapse(1);
@@ -12809,29 +13319,41 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
}, 100);
}
- e = null;
+ // Clean up references for IE
+ targetElm = doc = body = null;
},
+ focus : function(skip_focus) {
+ var oed, self = this, selection = self.selection, contentEditable = self.settings.content_editable, ieRng, controlElm, doc = self.getDoc(), body;
- focus : function(sf) {
- var oed, t = this, selection = t.selection, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc();
-
- if (!sf) {
+ if (!skip_focus) {
// Get selected control element
ieRng = selection.getRng();
if (ieRng.item) {
controlElm = ieRng.item(0);
}
- t._refreshContentEditable();
+ self._refreshContentEditable();
- // Is not content editable
- if (!ce)
- t.getWin().focus();
+ // Focus the window iframe
+ if (!contentEditable) {
+ self.getWin().focus();
+ }
// Focus the body as well since it's contentEditable
- if (tinymce.isGecko) {
- t.getBody().focus();
+ if (tinymce.isGecko || contentEditable) {
+ body = self.getBody();
+
+ // Check for setActive since it doesn't scroll to the element
+ if (body.setActive) {
+ body.setActive();
+ } else {
+ body.focus();
+ }
+
+ if (contentEditable) {
+ selection.normalize();
+ }
}
// Restore selected control element
@@ -12842,17 +13364,16 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
ieRng.addElement(controlElm);
ieRng.select();
}
-
}
- if (tinymce.activeEditor != t) {
+ if (tinymce.activeEditor != self) {
if ((oed = tinymce.activeEditor) != null)
- oed.onDeactivate.dispatch(oed, t);
+ oed.onDeactivate.dispatch(oed, self);
- t.onActivate.dispatch(t, oed);
+ self.onActivate.dispatch(self, oed);
}
- tinymce._setActive(t);
+ tinymce._setActive(self);
},
execCallback : function(n) {
@@ -12884,7 +13405,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
if (!s)
return '';
- return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {
+ return i18n[c + '.' + s] || s.replace(/\{\#([^\}]+)\}/g, function(a, b) {
return i18n[c + '.' + b] || '{#' + b + '}';
});
},
@@ -12918,37 +13439,40 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
},
nodeChanged : function(o) {
- var t = this, s = t.selection, n = s.getStart() || t.getBody();
+ var self = this, selection = self.selection, node;
// Fix for bug #1896577 it seems that this can not be fired while the editor is loading
- if (t.initialized) {
+ if (self.initialized) {
o = o || {};
- n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state
+
+ // Get start node
+ node = selection.getStart() || self.getBody();
+ node = isIE && node.ownerDocument != self.getDoc() ? self.getBody() : node; // Fix for IE initial state
// Get parents and add them to object
o.parents = [];
- t.dom.getParent(n, function(node) {
+ self.dom.getParent(node, function(node) {
if (node.nodeName == 'BODY')
return true;
o.parents.push(node);
});
- t.onNodeChange.dispatch(
- t,
- o ? o.controlManager || t.controlManager : t.controlManager,
- n,
- s.isCollapsed(),
+ self.onNodeChange.dispatch(
+ self,
+ o ? o.controlManager || self.controlManager : self.controlManager,
+ node,
+ selection.isCollapsed(),
o
);
}
},
- addButton : function(n, s) {
- var t = this;
+ addButton : function(name, settings) {
+ var self = this;
- t.buttons = t.buttons || {};
- t.buttons[n] = s;
+ self.buttons = self.buttons || {};
+ self.buttons[name] = settings;
},
addCommand : function(name, callback, scope) {
@@ -12966,7 +13490,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
addShortcut : function(pa, desc, cmd_func, sc) {
var t = this, c;
- if (!t.settings.custom_shortcuts)
+ if (t.settings.custom_shortcuts === false)
return false;
t.shortcuts = t.shortcuts || {};
@@ -12991,7 +13515,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
var o = {
func : cmd_func,
scope : sc || this,
- desc : desc,
+ desc : t.translate(desc),
alt : false,
ctrl : false,
shift : false
@@ -13133,24 +13657,24 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
},
show : function() {
- var t = this;
+ var self = this;
- DOM.show(t.getContainer());
- DOM.hide(t.id);
- t.load();
+ DOM.show(self.getContainer());
+ DOM.hide(self.id);
+ self.load();
},
hide : function() {
- var t = this, d = t.getDoc();
+ var self = this, doc = self.getDoc();
// Fixed bug where IE has a blinking cursor left from the editor
- if (isIE && d)
- d.execCommand('SelectAll');
+ if (isIE && doc)
+ doc.execCommand('SelectAll');
// We must save before we hide so Safari doesn't crash
- t.save();
- DOM.hide(t.getContainer());
- DOM.setStyle(t.id, 'display', t.orgDisplay);
+ self.save();
+ DOM.hide(self.getContainer());
+ DOM.setStyle(self.id, 'display', self.orgDisplay);
},
isHidden : function() {
@@ -13192,12 +13716,6 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
o = o || {};
o.save = true;
- // Add undo level will trigger onchange event
- if (!o.no_events) {
- t.undoManager.typing = false;
- t.undoManager.add();
- }
-
o.element = e;
h = o.content = t.getContent(o);
@@ -13283,6 +13801,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
args = args || {};
args.format = args.format || 'html';
args.get = true;
+ args.getInner = true;
// Do preprocessing
if (!args.no_events)
@@ -13310,12 +13829,12 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
},
getContainer : function() {
- var t = this;
+ var self = this;
- if (!t.container)
- t.container = DOM.get(t.editorContainer || t.id + '_parent');
+ if (!self.container)
+ self.container = DOM.get(self.editorContainer || self.id + '_parent');
- return t.container;
+ return self.container;
},
getContentAreaContainer : function() {
@@ -13327,125 +13846,125 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
},
getWin : function() {
- var t = this, e;
+ var self = this, elm;
- if (!t.contentWindow) {
- e = DOM.get(t.id + "_ifr");
+ if (!self.contentWindow) {
+ elm = DOM.get(self.id + "_ifr");
- if (e)
- t.contentWindow = e.contentWindow;
+ if (elm)
+ self.contentWindow = elm.contentWindow;
}
- return t.contentWindow;
+ return self.contentWindow;
},
getDoc : function() {
- var t = this, w;
+ var self = this, win;
- if (!t.contentDocument) {
- w = t.getWin();
+ if (!self.contentDocument) {
+ win = self.getWin();
- if (w)
- t.contentDocument = w.document;
+ if (win)
+ self.contentDocument = win.document;
}
- return t.contentDocument;
+ return self.contentDocument;
},
getBody : function() {
return this.bodyElement || this.getDoc().body;
},
- convertURL : function(u, n, e) {
- var t = this, s = t.settings;
+ convertURL : function(url, name, elm) {
+ var self = this, settings = self.settings;
// Use callback instead
- if (s.urlconverter_callback)
- return t.execCallback('urlconverter_callback', u, e, true, n);
+ if (settings.urlconverter_callback)
+ return self.execCallback('urlconverter_callback', url, elm, true, name);
// Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs
- if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0)
- return u;
+ if (!settings.convert_urls || (elm && elm.nodeName == 'LINK') || url.indexOf('file:') === 0)
+ return url;
// Convert to relative
- if (s.relative_urls)
- return t.documentBaseURI.toRelative(u);
+ if (settings.relative_urls)
+ return self.documentBaseURI.toRelative(url);
// Convert to absolute
- u = t.documentBaseURI.toAbsolute(u, s.remove_script_host);
+ url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);
- return u;
+ return url;
},
- addVisual : function(e) {
- var t = this, s = t.settings;
+ addVisual : function(elm) {
+ var self = this, settings = self.settings, dom = self.dom, cls;
- e = e || t.getBody();
+ elm = elm || self.getBody();
- if (!is(t.hasVisual))
- t.hasVisual = s.visual;
+ if (!is(self.hasVisual))
+ self.hasVisual = settings.visual;
- each(t.dom.select('table,a', e), function(e) {
- var v;
+ each(dom.select('table,a', elm), function(elm) {
+ var value;
- switch (e.nodeName) {
+ switch (elm.nodeName) {
case 'TABLE':
- v = t.dom.getAttrib(e, 'border');
+ cls = settings.visual_table_class || 'mceItemTable';
+ value = dom.getAttrib(elm, 'border');
- if (!v || v == '0') {
- if (t.hasVisual)
- t.dom.addClass(e, s.visual_table_class);
+ if (!value || value == '0') {
+ if (self.hasVisual)
+ dom.addClass(elm, cls);
else
- t.dom.removeClass(e, s.visual_table_class);
+ dom.removeClass(elm, cls);
}
return;
case 'A':
- v = t.dom.getAttrib(e, 'name');
+ value = dom.getAttrib(elm, 'name');
+ cls = 'mceItemAnchor';
- if (v) {
- if (t.hasVisual)
- t.dom.addClass(e, 'mceItemAnchor');
+ if (value) {
+ if (self.hasVisual)
+ dom.addClass(elm, cls);
else
- t.dom.removeClass(e, 'mceItemAnchor');
+ dom.removeClass(elm, cls);
}
return;
}
});
- t.onVisualAid.dispatch(t, e, t.hasVisual);
+ self.onVisualAid.dispatch(self, elm, self.hasVisual);
},
remove : function() {
- var t = this, e = t.getContainer();
-
- if (!t.removed) {
- t.removed = 1; // Cancels post remove event execution
- t.hide();
+ var self = this, elm = self.getContainer();
- // Remove all events
+ if (!self.removed) {
+ self.removed = 1; // Cancels post remove event execution
+ self.hide();
// Don't clear the window or document if content editable
// is enabled since other instances might still be present
- if (!t.settings.content_editable) {
- Event.clear(t.getWin());
- Event.clear(t.getDoc());
+ if (!self.settings.content_editable) {
+ Event.clear(self.getWin());
+ Event.clear(self.getDoc());
}
- Event.clear(t.getBody());
- Event.clear(t.formElement);
- Event.unbind(e);
+ Event.clear(self.getBody());
+ Event.clear(self.formElement);
+ Event.unbind(elm);
- t.execCallback('remove_instance_callback', t);
- t.onRemove.dispatch(t);
+ self.execCallback('remove_instance_callback', self);
+ self.onRemove.dispatch(self);
// Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command
- t.onExecCommand.listeners = [];
+ self.onExecCommand.listeners = [];
- tinymce.remove(t);
- DOM.remove(e);
+ tinymce.remove(self);
+ DOM.remove(elm);
}
},
@@ -13492,374 +14011,317 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
// Internal functions
- _addEvents : function() {
- // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset
- var t = this, i, s = t.settings, dom = t.dom, lo = {
- mouseup : 'onMouseUp',
- mousedown : 'onMouseDown',
- click : 'onClick',
- keyup : 'onKeyUp',
- keydown : 'onKeyDown',
- keypress : 'onKeyPress',
- submit : 'onSubmit',
- reset : 'onReset',
- contextmenu : 'onContextMenu',
- dblclick : 'onDblClick',
- paste : 'onPaste' // Doesn't work in all browsers yet
- };
+ _refreshContentEditable : function() {
+ var self = this, body, parent;
- function eventHandler(e, o) {
- var ty = e.type;
+ // Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again
+ if (self._isHidden()) {
+ body = self.getBody();
+ parent = body.parentNode;
- // Don't fire events when it's removed
- if (t.removed)
- return;
+ parent.removeChild(body);
+ parent.appendChild(body);
- // Generic event handler
- if (t.onEvent.dispatch(t, e, o) !== false) {
- // Specific event handler
- t[lo[e.fakeType || e.type]].dispatch(t, e, o);
- }
- };
+ body.focus();
+ }
+ },
- // Add DOM events
- each(lo, function(v, k) {
- switch (k) {
- case 'contextmenu':
- dom.bind(t.getDoc(), k, eventHandler);
- break;
+ _isHidden : function() {
+ var s;
- case 'paste':
- dom.bind(t.getBody(), k, function(e) {
- eventHandler(e);
- });
- break;
+ if (!isGecko)
+ return 0;
- case 'submit':
- case 'reset':
- dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);
- break;
+ // Weird, wheres that cursor selection?
+ s = this.selection.getSel();
+ return (!s || !s.rangeCount || s.rangeCount === 0);
+ }
+ });
+})(tinymce);
+(function(tinymce) {
+ var each = tinymce.each;
- default:
- dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);
- }
- });
+ tinymce.Editor.prototype.setupEvents = function() {
+ var self = this, settings = self.settings;
- dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {
- t.focus(true);
- });
+ // Add events to the editor
+ each([
+ 'onPreInit',
+ 'onBeforeRenderUI',
- // Fixes bug where a specified document_base_uri could result in broken images
- // This will also fix drag drop of images in Gecko
- if (tinymce.isGecko) {
- dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) {
- var v;
+ 'onPostRender',
- e = e.target;
+ 'onLoad',
- if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('data-mce-src')))
- e.src = t.documentBaseURI.toAbsolute(v);
- });
- }
+ 'onInit',
- // Set various midas options in Gecko
- if (isGecko) {
- function setOpts() {
- var t = this, d = t.getDoc(), s = t.settings;
+ 'onRemove',
- if (isGecko && !s.readonly) {
- t._refreshContentEditable();
+ 'onActivate',
- try {
- // Try new Gecko method
- d.execCommand("styleWithCSS", 0, false);
- } catch (ex) {
- // Use old method
- if (!t._isHidden())
- try {d.execCommand("useCSS", 0, true);} catch (ex) {}
- }
+ 'onDeactivate',
- if (!s.table_inline_editing)
- try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {}
+ 'onClick',
- if (!s.object_resizing)
- try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {}
- }
- };
+ 'onEvent',
- t.onBeforeExecCommand.add(setOpts);
- t.onMouseDown.add(setOpts);
- }
+ 'onMouseUp',
- // Add node change handlers
- t.onMouseUp.add(t.nodeChanged);
- //t.onClick.add(t.nodeChanged);
- t.onKeyUp.add(function(ed, e) {
- var c = e.keyCode;
+ 'onMouseDown',
- if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey)
- t.nodeChanged();
- });
+ 'onDblClick',
+ 'onKeyDown',
- // Add block quote deletion handler
- t.onKeyDown.add(function(ed, e) {
- if (e.keyCode != VK.BACKSPACE)
- return;
+ 'onKeyUp',
- var rng = ed.selection.getRng();
- if (!rng.collapsed)
- return;
+ 'onKeyPress',
- var n = rng.startContainer;
- var offset = rng.startOffset;
+ 'onContextMenu',
- while (n && n.nodeType && n.nodeType != 1 && n.parentNode)
- n = n.parentNode;
+ 'onSubmit',
- // Is the cursor at the beginning of a blockquote?
- if (n && n.parentNode && n.parentNode.tagName === 'BLOCKQUOTE' && n.parentNode.firstChild == n && offset == 0) {
- // Remove the blockquote
- ed.formatter.toggle('blockquote', null, n.parentNode);
+ 'onReset',
- // Move the caret to the beginning of n
- rng.setStart(n, 0);
- rng.setEnd(n, 0);
- ed.selection.setRng(rng);
- ed.selection.collapse(false);
- }
- });
+ 'onPaste',
+ 'onPreProcess',
+ 'onPostProcess',
- // Add reset handler
- t.onReset.add(function() {
- t.setContent(t.startContent, {format : 'raw'});
- });
+ 'onBeforeSetContent',
- // Add shortcuts
- 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');
- }
+ 'onBeforeGetContent',
- // Add default shortcuts for gecko
- 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');
+ 'onSetContent',
- // BlockFormat shortcuts keys
- for (i=1; i<=6; i++)
- t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);
+ 'onGetContent',
- t.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']);
- t.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']);
- t.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']);
+ 'onLoadContent',
- function find(e) {
- var v = null;
+ 'onSaveContent',
- if (!e.altKey && !e.ctrlKey && !e.metaKey)
- return v;
+ 'onNodeChange',
- each(t.shortcuts, function(o) {
- if (tinymce.isMac && o.ctrl != e.metaKey)
- return;
- else if (!tinymce.isMac && o.ctrl != e.ctrlKey)
- return;
+ 'onChange',
- if (o.alt != e.altKey)
- return;
+ 'onBeforeExecCommand',
- if (o.shift != e.shiftKey)
- return;
+ 'onExecCommand',
- if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) {
- v = o;
- return false;
- }
- });
+ 'onUndo',
- return v;
- };
+ 'onRedo',
- t.onKeyUp.add(function(ed, e) {
- var o = find(e);
+ 'onVisualAid',
- if (o)
- return Event.cancel(e);
- });
+ 'onSetProgressState',
- t.onKeyPress.add(function(ed, e) {
- var o = find(e);
+ 'onSetAttrib'
+ ], function(name) {
+ self[name] = new tinymce.util.Dispatcher(self);
+ });
- if (o)
- return Event.cancel(e);
- });
+ // Handle legacy cleanup_callback option
+ if (settings.cleanup_callback) {
+ self.onBeforeSetContent.add(function(ed, o) {
+ o.content = ed.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
+ });
- t.onKeyDown.add(function(ed, e) {
- var o = find(e);
+ self.onPreProcess.add(function(ed, o) {
+ if (o.set)
+ ed.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);
- if (o) {
- o.func.call(o.scope);
- return Event.cancel(e);
- }
- });
- }
+ if (o.get)
+ ed.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);
+ });
- if (tinymce.isIE) {
- // Fix so resize will only update the width and height attributes not the styles of an image
- // It will also block mceItemNoResize items
- dom.bind(t.getDoc(), 'controlselect', function(e) {
- var re = t.resizeInfo, cb;
+ self.onPostProcess.add(function(ed, o) {
+ if (o.set)
+ o.content = ed.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
- e = e.target;
+ if (o.get)
+ o.content = ed.execCallback('cleanup_callback', 'get_from_editor', o.content, o);
+ });
+ }
- // Don't do this action for non image elements
- if (e.nodeName !== 'IMG')
- return;
+ // Handle legacy save_callback option
+ if (settings.save_callback) {
+ self.onGetContent.add(function(ed, o) {
+ if (o.save)
+ o.content = ed.execCallback('save_callback', ed.id, o.content, ed.getBody());
+ });
+ }
- if (re)
- dom.unbind(re.node, re.ev, re.cb);
+ // Handle legacy handle_event_callback option
+ if (settings.handle_event_callback) {
+ self.onEvent.add(function(ed, e, o) {
+ if (self.execCallback('handle_event_callback', e, ed, o) === false)
+ Event.cancel(e);
+ });
+ }
- if (!dom.hasClass(e, 'mceItemNoResize')) {
- ev = 'resizeend';
- cb = dom.bind(e, ev, function(e) {
- var v;
+ // Handle legacy handle_node_change_callback option
+ if (settings.handle_node_change_callback) {
+ self.onNodeChange.add(function(ed, cm, n) {
+ ed.execCallback('handle_node_change_callback', ed.id, n, -1, -1, true, ed.selection.isCollapsed());
+ });
+ }
- e = e.target;
+ // Handle legacy save_callback option
+ if (settings.save_callback) {
+ self.onSaveContent.add(function(ed, o) {
+ var h = ed.execCallback('save_callback', ed.id, o.content, ed.getBody());
- if (v = dom.getStyle(e, 'width')) {
- dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));
- dom.setStyle(e, 'width', '');
- }
+ if (h)
+ o.content = h;
+ });
+ }
- if (v = dom.getStyle(e, 'height')) {
- dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));
- dom.setStyle(e, 'height', '');
- }
- });
- } else {
- ev = 'resizestart';
- cb = dom.bind(e, 'resizestart', Event.cancel, Event);
- }
+ // Handle legacy onchange_callback option
+ if (settings.onchange_callback) {
+ self.onChange.add(function(ed, l) {
+ ed.execCallback('onchange_callback', ed, l);
+ });
+ }
+ };
- re = t.resizeInfo = {
- node : e,
- ev : ev,
- cb : cb
- };
- });
- }
+ tinymce.Editor.prototype.bindNativeEvents = function() {
+ // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset
+ var self = this, i, settings = self.settings, dom = self.dom, nativeToDispatcherMap;
+
+ nativeToDispatcherMap = {
+ mouseup : 'onMouseUp',
+ mousedown : 'onMouseDown',
+ click : 'onClick',
+ keyup : 'onKeyUp',
+ keydown : 'onKeyDown',
+ keypress : 'onKeyPress',
+ submit : 'onSubmit',
+ reset : 'onReset',
+ contextmenu : 'onContextMenu',
+ dblclick : 'onDblClick',
+ paste : 'onPaste' // Doesn't work in all browsers yet
+ };
- if (tinymce.isOpera) {
- t.onClick.add(function(ed, e) {
- Event.prevent(e);
- });
+ // Handler that takes a native event and sends it out to a dispatcher like onKeyDown
+ function eventHandler(evt, args) {
+ var type = evt.type;
+
+ // Don't fire events when it's removed
+ if (self.removed)
+ return;
+
+ // Sends the native event out to a global dispatcher then to the specific event dispatcher
+ if (self.onEvent.dispatch(self, evt, args) !== false) {
+ self[nativeToDispatcherMap[evt.fakeType || evt.type]].dispatch(self, evt, args);
}
+ };
- // Add custom undo/redo handlers
- if (s.custom_undo_redo) {
- function addUndo() {
- t.undoManager.typing = false;
- t.undoManager.add();
- };
+ // Opera doesn't support focus event for contentEditable elements so we need to fake it
+ function doOperaFocus(e) {
+ self.focus(true);
+ };
- var focusLostFunc = tinymce.isGecko ? 'blur' : 'focusout';
- dom.bind(t.getDoc(), focusLostFunc, function(e){
- if (!t.removed && t.undoManager.typing)
- addUndo();
- });
+ function nodeChanged() {
+ // Normalize selection for example <b>a</b><i>|a</i> becomes <b>a|</b><i>a</i>
+ self.selection.normalize();
+ self.nodeChanged();
+ }
- // Add undo level when contents is drag/dropped within the editor
- t.dom.bind(t.dom.getRoot(), 'dragend', function(e) {
- addUndo();
- });
+ // Add DOM events
+ each(nativeToDispatcherMap, function(dispatcherName, nativeName) {
+ var root = settings.content_editable ? self.getBody() : self.getDoc();
- t.onKeyUp.add(function(ed, e) {
- var keyCode = e.keyCode;
+ switch (nativeName) {
+ case 'contextmenu':
+ dom.bind(root, nativeName, eventHandler);
+ break;
- if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || e.ctrlKey)
- addUndo();
- });
+ case 'paste':
+ dom.bind(self.getBody(), nativeName, eventHandler);
+ break;
- t.onKeyDown.add(function(ed, e) {
- var keyCode = e.keyCode, sel;
+ case 'submit':
+ case 'reset':
+ dom.bind(self.getElement().form || tinymce.DOM.getParent(self.id, 'form'), nativeName, eventHandler);
+ break;
- if (keyCode == 8) {
- sel = t.getDoc().selection;
+ default:
+ dom.bind(root, nativeName, eventHandler);
+ }
+ });
- // Fix IE control + backspace browser bug
- if (sel && sel.createRange && sel.createRange().item) {
- t.undoManager.beforeChange();
- ed.dom.remove(sel.createRange().item(0));
- addUndo();
+ // Set the editor as active when focused
+ dom.bind(settings.content_editable ? self.getBody() : (tinymce.isGecko ? self.getDoc() : self.getWin()), 'focus', function(e) {
+ self.focus(true);
+ });
- return Event.cancel(e);
- }
- }
+ if (settings.content_editable && tinymce.isOpera) {
+ dom.bind(self.getBody(), 'click', doOperaFocus);
+ dom.bind(self.getBody(), 'keydown', doOperaFocus);
+ }
- // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter
- if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45) {
- // Add position before enter key is pressed, used by IE since it still uses the default browser behavior
- // Todo: Remove this once we normalize enter behavior on IE
- if (tinymce.isIE && keyCode == 13)
- t.undoManager.beforeChange();
+ // Add node change handler
+ self.onMouseUp.add(nodeChanged);
- if (t.undoManager.typing)
- addUndo();
+ self.onKeyUp.add(function(ed, e) {
+ var keyCode = e.keyCode;
- return;
- }
+ if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || keyCode == 46 || keyCode == 8 || (tinymce.isMac && (keyCode == 91 || keyCode == 93)) || e.ctrlKey)
+ nodeChanged();
+ });
- // If key isn't shift,ctrl,alt,capslock,metakey
- if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !t.undoManager.typing) {
- t.undoManager.beforeChange();
- t.undoManager.typing = true;
- t.undoManager.add();
- }
- });
+ // Add reset handler
+ self.onReset.add(function() {
+ self.setContent(self.startContent, {format : 'raw'});
+ });
- t.onMouseDown.add(function() {
- if (t.undoManager.typing)
- addUndo();
- });
- }
- },
+ // Add shortcuts
+ function handleShortcut(e, execute) {
+ if (e.altKey || e.ctrlKey || e.metaKey) {
+ each(self.shortcuts, function(shortcut) {
+ var ctrlState = tinymce.isMac ? e.metaKey : e.ctrlKey;
- _refreshContentEditable : function() {
- var self = this, body, parent;
+ if (shortcut.ctrl != ctrlState || shortcut.alt != e.altKey || shortcut.shift != e.shiftKey)
+ return;
- // Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again
- if (self._isHidden()) {
- body = self.getBody();
- parent = body.parentNode;
+ if (e.keyCode == shortcut.keyCode || (e.charCode && e.charCode == shortcut.charCode)) {
+ e.preventDefault();
- parent.removeChild(body);
- parent.appendChild(body);
+ if (execute) {
+ shortcut.func.call(shortcut.scope);
+ }
- body.focus();
+ return true;
+ }
+ });
}
- },
+ };
- _isHidden : function() {
- var s;
+ self.onKeyUp.add(function(ed, e) {
+ handleShortcut(e);
+ });
- if (!isGecko)
- return 0;
+ self.onKeyPress.add(function(ed, e) {
+ handleShortcut(e);
+ });
- // Weird, wheres that cursor selection?
- s = this.selection.getSel();
- return (!s || !s.rangeCount || s.rangeCount == 0);
+ self.onKeyDown.add(function(ed, e) {
+ handleShortcut(e, true);
+ });
+
+ if (tinymce.isOpera) {
+ self.onClick.add(function(ed, e) {
+ e.preventDefault();
+ });
}
- });
+ };
})(tinymce);
-
(function(tinymce) {
// Added for compression purposes
- var each = tinymce.each, undefined, TRUE = true, FALSE = false;
+ var each = tinymce.each, undef, TRUE = true, FALSE = false;
tinymce.EditorCommands = function(editor) {
var dom = editor.dom,
@@ -13922,10 +14384,10 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
// Private methods
function execNativeCommand(command, ui, value) {
- if (ui === undefined)
+ if (ui === undef)
ui = FALSE;
- if (value === undefined)
+ if (value === undef)
value = null;
return editor.getDoc().execCommand(command, ui, value);
@@ -13936,7 +14398,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
};
function toggleFormat(name, value) {
- formatter.toggle(name, value ? {value : value} : undefined);
+ formatter.toggle(name, value ? {value : value} : undef);
};
function storeSelection(type) {
@@ -14336,9 +14798,7 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
// Override justify commands
'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {
var name = 'align' + command.substring(7);
- // Use Formatter.matchNode instead of Formatter.match so that we don't match on parent node. This fixes bug where for both left
- // and right align buttons can be active. This could occur when selected nodes have align right and the parent has align left.
- var nodes = selection.isCollapsed() ? [selection.getNode()] : selection.getSelectedBlocks();
+ var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();
var matches = tinymce.map(nodes, function(node) {
return !!formatter.matchNode(node, name);
});
@@ -14389,17 +14849,15 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
}, 'value');
// Add undo manager logic
- if (settings.custom_undo_redo) {
- addCommands({
- Undo : function() {
- editor.undoManager.undo();
- },
+ addCommands({
+ Undo : function() {
+ editor.undoManager.undo();
+ },
- Redo : function() {
- editor.undoManager.redo();
- }
- });
- }
+ Redo : function() {
+ editor.undoManager.redo();
+ }
+ });
};
})(tinymce);
@@ -14407,21 +14865,116 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
var Dispatcher = tinymce.util.Dispatcher;
tinymce.UndoManager = function(editor) {
- var self, index = 0, data = [], beforeBookmark;
+ var self, index = 0, data = [], beforeBookmark, onAdd, onUndo, onRedo;
function getContent() {
// Remove whitespace before/after and remove pure bogus nodes
return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}).replace(/<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g, ''));
};
- return self = {
+ function addNonTypingUndoLevel() {
+ self.typing = false;
+ self.add();
+ };
+
+ // Create event instances
+ onAdd = new Dispatcher(self);
+ onUndo = new Dispatcher(self);
+ onRedo = new Dispatcher(self);
+
+ // Pass though onAdd event from UndoManager to Editor as onChange
+ onAdd.add(function(undoman, level) {
+ if (undoman.hasUndo())
+ return editor.onChange.dispatch(editor, level, undoman);
+ });
+
+ // Pass though onUndo event from UndoManager to Editor
+ onUndo.add(function(undoman, level) {
+ return editor.onUndo.dispatch(editor, level, undoman);
+ });
+
+ // Pass though onRedo event from UndoManager to Editor
+ onRedo.add(function(undoman, level) {
+ return editor.onRedo.dispatch(editor, level, undoman);
+ });
+
+ // Add initial undo level when the editor is initialized
+ editor.onInit.add(function() {
+ self.add();
+ });
+
+ // Get position before an execCommand is processed
+ editor.onBeforeExecCommand.add(function(ed, cmd, ui, val, args) {
+ if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!args || !args.skip_undo)) {
+ self.beforeChange();
+ }
+ });
+
+ // Add undo level after an execCommand call was made
+ editor.onExecCommand.add(function(ed, cmd, ui, val, args) {
+ if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!args || !args.skip_undo)) {
+ self.add();
+ }
+ });
+
+ // Add undo level on save contents, drag end and blur/focusout
+ editor.onSaveContent.add(addNonTypingUndoLevel);
+ editor.dom.bind(editor.dom.getRoot(), 'dragend', addNonTypingUndoLevel);
+ editor.dom.bind(editor.getDoc(), tinymce.isGecko ? 'blur' : 'focusout', function(e) {
+ if (!editor.removed && self.typing) {
+ addNonTypingUndoLevel();
+ }
+ });
+
+ editor.onKeyUp.add(function(editor, e) {
+ var keyCode = e.keyCode;
+
+ if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45 || keyCode == 13 || e.ctrlKey) {
+ addNonTypingUndoLevel();
+ }
+ });
+
+ editor.onKeyDown.add(function(editor, e) {
+ var keyCode = e.keyCode;
+
+ // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter
+ if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45) {
+ if (self.typing) {
+ addNonTypingUndoLevel();
+ }
+
+ return;
+ }
+
+ // If key isn't shift,ctrl,alt,capslock,metakey
+ if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !self.typing) {
+ self.beforeChange();
+ self.typing = true;
+ self.add();
+ }
+ });
+
+ editor.onMouseDown.add(function(editor, e) {
+ if (self.typing) {
+ addNonTypingUndoLevel();
+ }
+ });
+
+ // Add keyboard shortcuts for undo/redo keys
+ editor.addShortcut('ctrl+z', 'undo_desc', 'Undo');
+ editor.addShortcut('ctrl+y', 'redo_desc', 'Redo');
+
+ self = {
+ // Explose for debugging reasons
+ data : data,
+
typing : false,
- onAdd : new Dispatcher(self),
+ onAdd : onAdd,
- onUndo : new Dispatcher(self),
+ onUndo : onUndo,
- onRedo : new Dispatcher(self),
+ onRedo : onRedo,
beforeChange : function() {
beforeBookmark = editor.selection.getBookmark(2, true);
@@ -14518,96 +15071,103 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
return index < data.length - 1 && !this.typing;
}
};
+
+ return self;
};
})(tinymce);
tinymce.ForceBlocks = function(editor) {
var settings = editor.settings, dom = editor.dom, selection = editor.selection, blockElements = editor.schema.getBlockElements();
- // Force root blocks
- if (settings.forced_root_block) {
- function addRootBlocks() {
- var node = selection.getStart(), rootNode = editor.getBody(), rng, startContainer, startOffset, endContainer, endOffset, rootBlockNode, tempNode, offset = -0xFFFFFF;
+ function addRootBlocks() {
+ var node = selection.getStart(), rootNode = editor.getBody(), rng, startContainer, startOffset, endContainer, endOffset, rootBlockNode, tempNode, offset = -0xFFFFFF, wrapped;
+
+ if (!node || node.nodeType !== 1 || !settings.forced_root_block)
+ return;
- if (!node || node.nodeType !== 1 || !settings.forced_root_block)
+ // Check if node is wrapped in block
+ while (node && node != rootNode) {
+ if (blockElements[node.nodeName])
return;
- // Check if node is wrapped in block
- while (node != rootNode) {
- if (blockElements[node.nodeName])
- return;
+ node = node.parentNode;
+ }
- node = node.parentNode;
+ // Get current selection
+ rng = selection.getRng();
+ if (rng.setStart) {
+ startContainer = rng.startContainer;
+ startOffset = rng.startOffset;
+ endContainer = rng.endContainer;
+ endOffset = rng.endOffset;
+ } else {
+ // Force control range into text range
+ if (rng.item) {
+ node = rng.item(0);
+ rng = editor.getDoc().body.createTextRange();
+ rng.moveToElementText(node);
}
- // Get current selection
- rng = selection.getRng();
- if (rng.setStart) {
- startContainer = rng.startContainer;
- startOffset = rng.startOffset;
- endContainer = rng.endContainer;
- endOffset = rng.endOffset;
- } else {
- // Force control range into text range
- if (rng.item) {
- node = rng.item(0);
- rng = editor.getDoc().body.createTextRange();
- rng.moveToElementText(node);
- }
+ tmpRng = rng.duplicate();
+ tmpRng.collapse(true);
+ startOffset = tmpRng.move('character', offset) * -1;
+ if (!tmpRng.collapsed) {
tmpRng = rng.duplicate();
- tmpRng.collapse(true);
- startOffset = tmpRng.move('character', offset) * -1;
-
- if (!tmpRng.collapsed) {
- tmpRng = rng.duplicate();
- tmpRng.collapse(false);
- endOffset = (tmpRng.move('character', offset) * -1) - startOffset;
- }
+ tmpRng.collapse(false);
+ endOffset = (tmpRng.move('character', offset) * -1) - startOffset;
}
+ }
- // Wrap non block elements and text nodes
- for (node = rootNode.firstChild; node; node) {
- if (node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName])) {
- if (!rootBlockNode) {
- rootBlockNode = dom.create(settings.forced_root_block);
- node.parentNode.insertBefore(rootBlockNode, node);
- }
-
- tempNode = node;
- node = node.nextSibling;
- rootBlockNode.appendChild(tempNode);
- } else {
- rootBlockNode = null;
- node = node.nextSibling;
+ // Wrap non block elements and text nodes
+ node = rootNode.firstChild;
+ while (node) {
+ if (node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName])) {
+ if (!rootBlockNode) {
+ rootBlockNode = dom.create(settings.forced_root_block);
+ node.parentNode.insertBefore(rootBlockNode, node);
+ wrapped = true;
}
- }
- if (rng.setStart) {
- rng.setStart(startContainer, startOffset);
- rng.setEnd(endContainer, endOffset);
- selection.setRng(rng);
+ tempNode = node;
+ node = node.nextSibling;
+ rootBlockNode.appendChild(tempNode);
} else {
- try {
- rng = editor.getDoc().body.createTextRange();
- rng.moveToElementText(rootNode);
- rng.collapse(true);
- rng.moveStart('character', startOffset);
+ rootBlockNode = null;
+ node = node.nextSibling;
+ }
+ }
- if (endOffset > 0)
- rng.moveEnd('character', endOffset);
+ if (rng.setStart) {
+ rng.setStart(startContainer, startOffset);
+ rng.setEnd(endContainer, endOffset);
+ selection.setRng(rng);
+ } else {
+ try {
+ rng = editor.getDoc().body.createTextRange();
+ rng.moveToElementText(rootNode);
+ rng.collapse(true);
+ rng.moveStart('character', startOffset);
- rng.select();
- } catch (ex) {
- // Ignore
- }
+ if (endOffset > 0)
+ rng.moveEnd('character', endOffset);
+
+ rng.select();
+ } catch (ex) {
+ // Ignore
}
+ }
+ // Only trigger nodeChange when we wrapped nodes to prevent a forever loop
+ if (wrapped) {
editor.nodeChanged();
- };
+ }
+ };
+ // Force root blocks
+ if (settings.forced_root_block) {
editor.onKeyUp.add(addRootBlocks);
- editor.onClick.add(addRootBlocks);
+ editor.onNodeChange.add(addRootBlocks);
}
};
@@ -14703,6 +15263,8 @@ tinymce.ForceBlocks = function(editor) {
if (v = ed.getParam('skin_variant'))
s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);
+ s['class'] += ed.settings.directionality == "rtl" ? ' mceRtl' : '';
+
id = t.prefix + id;
cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;
c = t.controls[id] = new cls(id, s);
@@ -15121,20 +15683,8 @@ tinymce.ForceBlocks = function(editor) {
MCE_ATTR_RE = /^(src|href|style)$/,
FALSE = false,
TRUE = true,
- undefined;
-
- // Returns the content editable state of a node
- function getContentEditable(node) {
- var contentEditable = node.getAttribute("data-mce-contenteditable");
-
- // Check for fake content editable
- if (contentEditable && contentEditable !== "inherit") {
- return contentEditable;
- }
-
- // Check for real content editable
- return node.contentEditable !== "inherit" ? node.contentEditable : null;
- };
+ undef,
+ getContentEditable = dom.getContentEditable;
function isArray(obj) {
return obj instanceof Array;
@@ -15148,6 +15698,103 @@ tinymce.ForceBlocks = function(editor) {
return node.nodeType === 1 && node.id === '_mce_caret';
};
+ function defaultFormats() {
+ register({
+ alignleft : [
+ {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}, defaultBlock: 'div'},
+ {selector : 'img,table', collapsed : false, styles : {'float' : 'left'}}
+ ],
+
+ aligncenter : [
+ {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}, defaultBlock: 'div'},
+ {selector : 'img', collapsed : false, styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}},
+ {selector : 'table', collapsed : false, styles : {marginLeft : 'auto', marginRight : 'auto'}}
+ ],
+
+ alignright : [
+ {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}, defaultBlock: 'div'},
+ {selector : 'img,table', collapsed : false, styles : {'float' : 'right'}}
+ ],
+
+ alignfull : [
+ {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}, defaultBlock: 'div'}
+ ],
+
+ bold : [
+ {inline : 'strong', remove : 'all'},
+ {inline : 'span', styles : {fontWeight : 'bold'}},
+ {inline : 'b', remove : 'all'}
+ ],
+
+ italic : [
+ {inline : 'em', remove : 'all'},
+ {inline : 'span', styles : {fontStyle : 'italic'}},
+ {inline : 'i', remove : 'all'}
+ ],
+
+ underline : [
+ {inline : 'span', styles : {textDecoration : 'underline'}, exact : true},
+ {inline : 'u', remove : 'all'}
+ ],
+
+ strikethrough : [
+ {inline : 'span', styles : {textDecoration : 'line-through'}, exact : true},
+ {inline : 'strike', remove : 'all'}
+ ],
+
+ forecolor : {inline : 'span', styles : {color : '%value'}, wrap_links : false},
+ hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}, wrap_links : false},
+ fontname : {inline : 'span', styles : {fontFamily : '%value'}},
+ fontsize : {inline : 'span', styles : {fontSize : '%value'}},
+ fontsize_class : {inline : 'span', attributes : {'class' : '%value'}},
+ blockquote : {block : 'blockquote', wrapper : 1, remove : 'all'},
+ subscript : {inline : 'sub'},
+ superscript : {inline : 'sup'},
+
+ link : {inline : 'a', selector : 'a', remove : 'all', split : true, deep : true,
+ onmatch : function(node) {
+ return true;
+ },
+
+ onformat : function(elm, fmt, vars) {
+ each(vars, function(value, key) {
+ dom.setAttrib(elm, key, value);
+ });
+ }
+ },
+
+ removeformat : [
+ {selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true},
+ {selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true},
+ {selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true}
+ ]
+ });
+
+ // Register default block formats
+ each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) {
+ register(name, {block : name, remove : 'all'});
+ });
+
+ // Register user defined formats
+ register(ed.settings.formats);
+ };
+
+ function addKeyboardShortcuts() {
+ // Add some inline shortcuts
+ ed.addShortcut('ctrl+b', 'bold_desc', 'Bold');
+ ed.addShortcut('ctrl+i', 'italic_desc', 'Italic');
+ ed.addShortcut('ctrl+u', 'underline_desc', 'Underline');
+
+ // BlockFormat shortcuts keys
+ for (var i = 1; i <= 6; i++) {
+ ed.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);
+ }
+
+ ed.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']);
+ ed.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']);
+ ed.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']);
+ };
+
// Public functions
function get(name) {
@@ -15167,15 +15814,15 @@ tinymce.ForceBlocks = function(editor) {
each(format, function(format) {
// Set deep to false by default on selector formats this to avoid removing
// alignment on images inside paragraphs when alignment is changed on paragraphs
- if (format.deep === undefined)
+ if (format.deep === undef)
format.deep = !format.selector;
// Default to true
- if (format.split === undefined)
+ if (format.split === undef)
format.split = !format.selector || format.inline;
// Default to true
- if (format.remove === undefined && format.selector && !format.inline)
+ if (format.remove === undef && format.selector && !format.inline)
format.remove = 'none';
// Mark format as a mixed format inline + block level
@@ -15248,7 +15895,7 @@ tinymce.ForceBlocks = function(editor) {
function findSelectionEnd(start, end) {
var walker = new TreeWalker(end);
for (node = walker.current(); node; node = walker.prev()) {
- if (node.childNodes.length > 1 || node == start) {
+ if (node.childNodes.length > 1 || node == start || node.tagName == 'BR') {
return node;
}
}
@@ -15260,7 +15907,7 @@ tinymce.ForceBlocks = function(editor) {
var start = rng.startContainer;
var end = rng.endContainer;
- if (start != end && rng.endOffset == 0) {
+ if (start != end && rng.endOffset === 0) {
var newEnd = findSelectionEnd(start, end);
var endOffset = newEnd.nodeType == 3 ? newEnd.length : newEnd.childNodes.length;
@@ -15720,7 +16367,7 @@ tinymce.ForceBlocks = function(editor) {
};
function removeRngStyle(rng) {
- var startContainer, endContainer;
+ var startContainer, endContainer, node;
rng = expandRng(rng, formatList, TRUE);
@@ -15729,6 +16376,12 @@ tinymce.ForceBlocks = function(editor) {
endContainer = getContainer(rng);
if (startContainer != endContainer) {
+ // WebKit will render the table incorrectly if we wrap a TD in a SPAN so lets see if the can use the first child instead
+ // This will happen if you tripple click a table cell and use remove formatting
+ if (/^(TR|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {
+ startContainer = (startContainer.nodeName == "TD" ? startContainer.firstChild : startContainer.firstChild.firstChild) || startContainer;
+ }
+
// Wrap start/end nodes in span element since these might be cloned/moved
startContainer = wrap(startContainer, 'span', {id : '_start', 'data-mce-type' : 'bookmark'});
endContainer = wrap(endContainer, 'span', {id : '_end', 'data-mce-type' : 'bookmark'});
@@ -15790,20 +16443,12 @@ tinymce.ForceBlocks = function(editor) {
ed.nodeChanged();
} else
performCaretAction('remove', name, vars);
-
- // Removed this logic since it breaks unit tests and produces empty caret elements since they will be destroyed in the cleanup process
- // Also there must be a better way to rerender a table and I couldn't reproduce the case causing this might be some old WebKit
- /*
- // When you remove formatting from a table cell in WebKit (cell, not the contents of a cell) there is a rendering issue with column width
- if (tinymce.isWebKit) {
- ed.execCommand('mceCleanup');
- }*/
};
function toggle(name, vars, node) {
var fmt = get(name);
- if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0]['toggle']))
+ if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle))
remove(name, vars, node);
else
apply(name, vars, node);
@@ -15823,7 +16468,7 @@ tinymce.ForceBlocks = function(editor) {
// Check all items
if (items) {
// Non indexed object
- if (items.length === undefined) {
+ if (items.length === undef) {
for (key in items) {
if (items.hasOwnProperty(key)) {
if (item_name === 'attributes')
@@ -15961,6 +16606,10 @@ tinymce.ForceBlocks = function(editor) {
canApply : canApply
});
+ // Initialize
+ defaultFormats();
+ addKeyboardShortcuts();
+
// Private functions
function matchName(node, format) {
@@ -16027,15 +16676,15 @@ tinymce.ForceBlocks = function(editor) {
};
function expandRng(rng, format, remove) {
- var sibling, lastIdx, leaf,
+ var sibling, lastIdx, leaf, endPoint,
startContainer = rng.startContainer,
startOffset = rng.startOffset,
endContainer = rng.endContainer,
- endOffset = rng.endOffset, sibling, lastIdx, leaf, endPoint;
+ endOffset = rng.endOffset;
// This function walks up the tree if there is no siblings before/after the node
function findParentContainer(start) {
- var container, parent, child, sibling, siblingName;
+ var container, parent, child, sibling, siblingName, root;
container = parent = start ? startContainer : endContainer;
siblingName = start ? 'previousSibling' : 'nextSibling';
@@ -16075,7 +16724,7 @@ tinymce.ForceBlocks = function(editor) {
// This function walks down the tree to find the leaf at the selection.
// The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node.
function findLeaf(node, offset) {
- if (offset === undefined)
+ if (offset === undef)
offset = node.nodeType === 3 ? node.length : node.childNodes.length;
while (node && node.hasChildNodes()) {
node = node.childNodes[offset];
@@ -16118,6 +16767,125 @@ tinymce.ForceBlocks = function(editor) {
return node;
};
+ function findWordEndPoint(container, offset, start) {
+ var walker, node, pos, lastTextNode;
+
+ function findSpace(node, offset) {
+ var pos, pos2, str = node.nodeValue;
+
+ if (typeof(offset) == "undefined") {
+ offset = start ? str.length : 0;
+ }
+
+ if (start) {
+ pos = str.lastIndexOf(' ', offset);
+ pos2 = str.lastIndexOf('\u00a0', offset);
+ pos = pos > pos2 ? pos : pos2;
+
+ // Include the space on remove to avoid tag soup
+ if (pos !== -1 && !remove) {
+ pos++;
+ }
+ } else {
+ pos = str.indexOf(' ', offset);
+ pos2 = str.indexOf('\u00a0', offset);
+ pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;
+ }
+
+ return pos;
+ };
+
+ if (container.nodeType === 3) {
+ pos = findSpace(container, offset);
+
+ if (pos !== -1) {
+ return {container : container, offset : pos};
+ }
+
+ lastTextNode = container;
+ }
+
+ // Walk the nodes inside the block
+ walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody());
+ while (node = walker[start ? 'prev' : 'next']()) {
+ if (node.nodeType === 3) {
+ lastTextNode = node;
+ pos = findSpace(node);
+
+ if (pos !== -1) {
+ return {container : node, offset : pos};
+ }
+ } else if (isBlock(node)) {
+ break;
+ }
+ }
+
+ if (lastTextNode) {
+ if (start) {
+ offset = 0;
+ } else {
+ offset = lastTextNode.length;
+ }
+
+ return {container: lastTextNode, offset: offset};
+ }
+ };
+
+ function findSelectorEndPoint(container, sibling_name) {
+ var parents, i, y, curFormat;
+
+ if (container.nodeType == 3 && container.nodeValue.length === 0 && container[sibling_name])
+ container = container[sibling_name];
+
+ parents = getParents(container);
+ for (i = 0; i < parents.length; i++) {
+ for (y = 0; y < format.length; y++) {
+ curFormat = format[y];
+
+ // If collapsed state is set then skip formats that doesn't match that
+ if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed)
+ continue;
+
+ if (dom.is(parents[i], curFormat.selector))
+ return parents[i];
+ }
+ }
+
+ return container;
+ };
+
+ function findBlockEndPoint(container, sibling_name, sibling_name2) {
+ var node;
+
+ // Expand to block of similar type
+ if (!format[0].wrapper)
+ node = dom.getParent(container, format[0].block);
+
+ // Expand to first wrappable block element or any block element
+ if (!node)
+ node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock);
+
+ // Exclude inner lists from wrapping
+ if (node && format[0].wrapper)
+ node = getParents(node, 'ul,ol').reverse()[0] || node;
+
+ // Didn't find a block element look for first/last wrappable element
+ if (!node) {
+ node = container;
+
+ while (node[sibling_name] && !isBlock(node[sibling_name])) {
+ node = node[sibling_name];
+
+ // Break on BR but include it will be removed later on
+ // we can't remove it now since we need to check if it can be wrapped
+ if (isEq(node, 'br'))
+ break;
+ }
+ }
+
+ return node || container;
+ };
+
// Expand to closest contentEditable element
startContainer = findParentContentEditable(startContainer);
endContainer = findParentContentEditable(endContainer);
@@ -16141,70 +16909,6 @@ tinymce.ForceBlocks = function(editor) {
if (format[0].inline) {
if (rng.collapsed) {
- function findWordEndPoint(container, offset, start) {
- var walker, node, pos, lastTextNode;
-
- function findSpace(node, offset) {
- var pos, pos2, str = node.nodeValue;
-
- if (typeof(offset) == "undefined") {
- offset = start ? str.length : 0;
- }
-
- if (start) {
- pos = str.lastIndexOf(' ', offset);
- pos2 = str.lastIndexOf('\u00a0', offset);
- pos = pos > pos2 ? pos : pos2;
-
- // Include the space on remove to avoid tag soup
- if (pos !== -1 && !remove) {
- pos++;
- }
- } else {
- pos = str.indexOf(' ', offset);
- pos2 = str.indexOf('\u00a0', offset);
- pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;
- }
-
- return pos;
- };
-
- if (container.nodeType === 3) {
- pos = findSpace(container, offset);
-
- if (pos !== -1) {
- return {container : container, offset : pos};
- }
-
- lastTextNode = container;
- }
-
- // Walk the nodes inside the block
- walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody());
- while (node = walker[start ? 'prev' : 'next']()) {
- if (node.nodeType === 3) {
- lastTextNode = node;
- pos = findSpace(node);
-
- if (pos !== -1) {
- return {container : node, offset : pos};
- }
- } else if (isBlock(node)) {
- break;
- }
- }
-
- if (lastTextNode) {
- if (start) {
- offset = 0;
- } else {
- offset = lastTextNode.length;
- }
-
- return {container: lastTextNode, offset: offset};
- }
- }
-
// Expand left to closest word boundery
endPoint = findWordEndPoint(startContainer, startOffset, true);
if (endPoint) {
@@ -16232,9 +16936,6 @@ tinymce.ForceBlocks = function(editor) {
if (leaf.offset > 1) {
endContainer = leaf.node;
endContainer.splitText(leaf.offset - 1);
- } else if (leaf.node.previousSibling) {
- // TODO: Figure out why this is in here
- //endContainer = leaf.node.previousSibling;
}
}
}
@@ -16256,29 +16957,6 @@ tinymce.ForceBlocks = function(editor) {
// Expand start/end container to matching selector
if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) {
- function findSelectorEndPoint(container, sibling_name) {
- var parents, i, y, curFormat;
-
- if (container.nodeType == 3 && container.nodeValue.length == 0 && container[sibling_name])
- container = container[sibling_name];
-
- parents = getParents(container);
- for (i = 0; i < parents.length; i++) {
- for (y = 0; y < format.length; y++) {
- curFormat = format[y];
-
- // If collapsed state is set then skip formats that doesn't match that
- if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed)
- continue;
-
- if (dom.is(parents[i], curFormat.selector))
- return parents[i];
- }
- }
-
- return container;
- };
-
// Find new startContainer/endContainer if there is better one
startContainer = findSelectorEndPoint(startContainer, 'previousSibling');
endContainer = findSelectorEndPoint(endContainer, 'nextSibling');
@@ -16286,38 +16964,6 @@ tinymce.ForceBlocks = function(editor) {
// Expand start/end container to matching block element or text node
if (format[0].block || format[0].selector) {
- function findBlockEndPoint(container, sibling_name, sibling_name2) {
- var node;
-
- // Expand to block of similar type
- if (!format[0].wrapper)
- node = dom.getParent(container, format[0].block);
-
- // Expand to first wrappable block element or any block element
- if (!node)
- node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock);
-
- // Exclude inner lists from wrapping
- if (node && format[0].wrapper)
- node = getParents(node, 'ul,ol').reverse()[0] || node;
-
- // Didn't find a block element look for first/last wrappable element
- if (!node) {
- node = container;
-
- while (node[sibling_name] && !isBlock(node[sibling_name])) {
- node = node[sibling_name];
-
- // Break on BR but include it will be removed later on
- // we can't remove it now since we need to check if it can be wrapped
- if (isEq(node, 'br'))
- break;
- }
- }
-
- return node || container;
- };
-
// Find new startContainer/endContainer if there is better one
startContainer = findBlockEndPoint(startContainer, 'previousSibling');
endContainer = findBlockEndPoint(endContainer, 'nextSibling');
@@ -16454,14 +17100,14 @@ tinymce.ForceBlocks = function(editor) {
function removeNode(node, format) {
var parentNode = node.parentNode, rootBlockElm;
- if (format.block) {
- if (!forcedRootBlock) {
- function find(node, next, inc) {
- node = getNonWhiteSpaceSibling(node, next, inc);
+ function find(node, next, inc) {
+ node = getNonWhiteSpaceSibling(node, next, inc);
- return !node || (node.nodeName == 'BR' || isBlock(node));
- };
+ return !node || (node.nodeName == 'BR' || isBlock(node));
+ };
+ if (format.block) {
+ if (!forcedRootBlock) {
// Append BR elements if needed before we remove the block
if (isBlock(node) && !isBlock(parentNode)) {
if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1))
@@ -16541,7 +17187,7 @@ tinymce.ForceBlocks = function(editor) {
value = obj2[name];
// Obj2 doesn't have obj1 item
- if (value === undefined)
+ if (value === undef)
return FALSE;
// Obj2 item has a different value
@@ -16574,20 +17220,20 @@ tinymce.ForceBlocks = function(editor) {
return TRUE;
};
- // Check if next/prev exists and that they are elements
- if (prev && next) {
- function findElementSibling(node, sibling_name) {
- for (sibling = node; sibling; sibling = sibling[sibling_name]) {
- if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0)
- return node;
+ function findElementSibling(node, sibling_name) {
+ for (sibling = node; sibling; sibling = sibling[sibling_name]) {
+ if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0)
+ return node;
- if (sibling.nodeType == 1 && !isBookmarkNode(sibling))
- return sibling;
- }
+ if (sibling.nodeType == 1 && !isBookmarkNode(sibling))
+ return sibling;
+ }
- return node;
- };
+ return node;
+ };
+ // Check if next/prev exists and that they are elements
+ if (prev && next) {
// If previous sibling is empty then jump over it
prev = findElementSibling(prev, 'previousSibling');
next = findElementSibling(next, 'nextSibling');
@@ -16641,7 +17287,7 @@ tinymce.ForceBlocks = function(editor) {
}
// If end text node is excluded then walk to the previous node
- if (container.nodeType === 3 && !start && offset == 0) {
+ if (container.nodeType === 3 && !start && offset === 0) {
container = new TreeWalker(container, ed.getBody()).prev() || container;
}
@@ -16894,6 +17540,15 @@ tinymce.ForceBlocks = function(editor) {
}
});
+ // Remove bogus state if they got filled by contents using editor.selection.setContent
+ selection.onSetContent.add(function() {
+ dom.getParent(selection.getStart(), function(node) {
+ if (node.id !== caretContainerId && dom.getAttrib(node, 'data-mce-bogus') && !dom.isEmpty(node)) {
+ dom.setAttrib(node, 'data-mce-bogus', null);
+ }
+ });
+ });
+
self._hasCaretEvents = true;
}
@@ -16907,14 +17562,15 @@ tinymce.ForceBlocks = function(editor) {
function moveStart(rng) {
var container = rng.startContainer,
- offset = rng.startOffset,
+ offset = rng.startOffset, isAtEndOfText,
walker, node, nodes, tmpNode;
// Convert text node into index if possible
if (container.nodeType == 3 && offset >= container.nodeValue.length) {
// Get the parent container location and walk from there
+ offset = nodeIndex(container);
container = container.parentNode;
- offset = nodeIndex(container) + 1;
+ isAtEndOfText = true;
}
// Move startContainer/startOffset in to a suitable node
@@ -16924,7 +17580,7 @@ tinymce.ForceBlocks = function(editor) {
walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));
// If offset is at end of the parent node walk to the next one
- if (offset > nodes.length - 1)
+ if (offset > nodes.length - 1 || isAtEndOfText)
walker.next();
for (node = walker.current(); node; node = walker.next()) {
@@ -16950,17 +17606,27 @@ tinymce.ForceBlocks = function(editor) {
tinymce.onAddEditor.add(function(tinymce, ed) {
var filters, fontSizes, dom, settings = ed.settings;
- if (settings.inline_styles) {
- fontSizes = tinymce.explode(settings.font_size_legacy_values);
+ function replaceWithSpan(node, styles) {
+ tinymce.each(styles, function(value, name) {
+ if (value)
+ dom.setStyle(node, name, value);
+ });
+
+ dom.rename(node, 'span');
+ };
+
+ function convert(editor, params) {
+ dom = editor.dom;
- function replaceWithSpan(node, styles) {
- tinymce.each(styles, function(value, name) {
- if (value)
- dom.setStyle(node, name, value);
+ if (settings.convert_fonts_to_spans) {
+ tinymce.each(dom.select('font,u,strike', params.node), function(node) {
+ filters[node.nodeName.toLowerCase()](ed.dom, node);
});
+ }
+ };
- dom.rename(node, 'span');
- };
+ if (settings.inline_styles) {
+ fontSizes = tinymce.explode(settings.font_size_legacy_values);
filters = {
font : function(dom, node) {
@@ -16968,7 +17634,7 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
backgroundColor : node.style.backgroundColor,
color : node.color,
fontFamily : node.face,
- fontSize : fontSizes[parseInt(node.size) - 1]
+ fontSize : fontSizes[parseInt(node.size, 10) - 1]
});
},
@@ -16985,16 +17651,6 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
}
};
- function convert(editor, params) {
- dom = editor.dom;
-
- if (settings.convert_fonts_to_spans) {
- tinymce.each(dom.select('font,u,strike', params.node), function(node) {
- filters[node.nodeName.toLowerCase()](ed.dom, node);
- });
- }
- };
-
ed.onPreProcess.add(convert);
ed.onSetContent.add(convert);
@@ -17011,16 +17667,21 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
var dom = editor.dom, selection = editor.selection, settings = editor.settings, undoManager = editor.undoManager;
function handleEnterKey(evt) {
- var rng = selection.getRng(true), tmpRng, container, offset, parentBlock, newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName;
+ var rng = selection.getRng(true), tmpRng, editableRoot, container, offset, parentBlock, documentMode,
+ newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;
// Returns true if the block can be split into two blocks or not
function canSplitBlock(node) {
- return node && dom.isBlock(node) && !/^(TD|TH|CAPTION)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position);
+ return node &&
+ dom.isBlock(node) &&
+ !/^(TD|TH|CAPTION)$/.test(node.nodeName) &&
+ !/^(fixed|absolute)/i.test(node.style.position) &&
+ dom.getContentEditable(node) !== "true";
};
// Moves the caret to a suitable position within the root for example in the first non pure whitespace text node or before an image
function moveToCaretPosition(root) {
- var walker, node, rng, y, viewPort, lastNode = root;
+ var walker, node, rng, y, viewPort, lastNode = root, tempElm;
rng = dom.createRng();
@@ -17050,8 +17711,19 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
}
} else {
if (root.nodeName == 'BR') {
- rng.setStartAfter(root);
- rng.setEndAfter(root);
+ if (root.nextSibling && dom.isBlock(root.nextSibling)) {
+ // Trick on older IE versions to render the caret before the BR between two lists
+ if (!documentMode || documentMode < 9) {
+ tempElm = dom.create('br');
+ root.parentNode.insertBefore(tempElm, root);
+ }
+
+ rng.setStartBefore(root);
+ rng.setEndBefore(root);
+ } else {
+ rng.setStartAfter(root);
+ rng.setEndAfter(root);
+ }
} else {
rng.setStart(root, 0);
rng.setEnd(root, 0);
@@ -17060,6 +17732,9 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
selection.setRng(rng);
+ // Remove tempElm created for old IE:s
+ dom.remove(tempElm);
+
viewPort = dom.getViewPort(editor.getWin());
// 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
@@ -17074,24 +17749,26 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
function createNewBlock(name) {
var node = container, block, clonedNode, caretNode;
- block = name ? dom.create(name) : parentBlock.cloneNode(false);
+ block = name || parentBlockName == "TABLE" ? dom.create(name || newBlockName) : parentBlock.cloneNode(false);
caretNode = block;
// Clone any parent styles
- do {
- if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {
- clonedNode = node.cloneNode(false);
- dom.setAttrib(clonedNode, 'id', ''); // Remove ID since it needs to be document unique
-
- if (block.hasChildNodes()) {
- clonedNode.appendChild(block.firstChild);
- block.appendChild(clonedNode);
- } else {
- caretNode = clonedNode;
- block.appendChild(clonedNode);
+ if (settings.keep_styles !== false) {
+ do {
+ if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {
+ clonedNode = node.cloneNode(false);
+ dom.setAttrib(clonedNode, 'id', ''); // Remove ID since it needs to be document unique
+
+ if (block.hasChildNodes()) {
+ clonedNode.appendChild(block.firstChild);
+ block.appendChild(clonedNode);
+ } else {
+ caretNode = clonedNode;
+ block.appendChild(clonedNode);
+ }
}
- }
- } while (node = node.parentNode);
+ } while (node = node.parentNode);
+ }
// BR is needed in empty blocks on non IE browsers
if (!tinymce.isIE) {
@@ -17103,13 +17780,23 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
// Returns true/false if the caret is at the start/end of the parent block element
function isCaretAtStartOrEndOfBlock(start) {
- var walker, node;
+ var walker, node, name;
// Caret is in the middle of a text node like "a|b"
if (container.nodeType == 3 && (start ? offset > 0 : offset < container.nodeValue.length)) {
return false;
}
+ // If after the last element in block node edge case for #5091
+ if (container.parentNode == parentBlock && isAfterLastNodeInContainer && !start) {
+ return true;
+ }
+
+ // Caret can be before/after a table
+ if (container.nodeName === "TABLE" || (container.previousSibling && container.previousSibling.nodeName == "TABLE")) {
+ return (isAfterLastNodeInContainer && !start) || (!isAfterLastNodeInContainer && start);
+ }
+
// Walk the DOM and look for text nodes or non empty elements
walker = new TreeWalker(container, parentBlock);
while (node = (start ? walker.prev() : walker.next())) {
@@ -17134,15 +17821,15 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
// Wraps any text nodes or inline elements in the specified forced root block name
function wrapSelfAndSiblingsInDefaultBlock(container, offset) {
- var newBlock, parentBlock, startNode, node, next;
+ var newBlock, parentBlock, startNode, node, next, blockName = newBlockName || 'P';
// Not in a block element or in a table cell or caption
parentBlock = dom.getParent(container, dom.isBlock);
- if (newBlockName && !evt.shiftKey && (!parentBlock || !canSplitBlock(parentBlock))) {
- parentBlock = parentBlock || dom.getRoot();
+ if (!parentBlock || !canSplitBlock(parentBlock)) {
+ parentBlock = parentBlock || editableRoot;
if (!parentBlock.hasChildNodes()) {
- newBlock = dom.create(newBlockName);
+ newBlock = dom.create(blockName);
parentBlock.appendChild(newBlock);
rng.setStart(newBlock, 0);
rng.setEnd(newBlock, 0);
@@ -17162,7 +17849,7 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
}
if (startNode) {
- newBlock = dom.create(newBlockName);
+ newBlock = dom.create(blockName);
startNode.parentNode.insertBefore(newBlock, startNode);
// Start wrapping until we hit a block
@@ -17241,7 +17928,7 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
// Inserts a BR element if the forced_root_block option is set to false or empty string
function insertBr() {
- var brElm, extraBr, documentMode;
+ var brElm, extraBr;
if (container && container.nodeType == 3 && offset >= container.nodeValue.length) {
// Insert extra BR element at the end block elements
@@ -17258,7 +17945,6 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
rng.insertNode(brElm);
// Rendering modes below IE8 doesn't display BR elements in PRE unless we have a \n before it
- documentMode = dom.doc.documentMode;
if (tinymce.isIE && parentBlockName == 'PRE' && (!documentMode || documentMode < 8)) {
brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'), brElm);
}
@@ -17285,7 +17971,23 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
node = node.firstChild;
} while (node);
};
-
+
+ function getEditableRoot(node) {
+ var root = dom.getRoot(), parent, editableRoot;
+
+ // Get all parents until we hit a non editable parent or the root
+ parent = node;
+ while (parent !== root && dom.getContentEditable(parent) !== "false") {
+ if (dom.getContentEditable(parent) === "true") {
+ editableRoot = parent;
+ }
+
+ parent = parent.parentNode;
+ }
+
+ return parent !== root ? editableRoot : root;
+ };
+
// Delete any selected contents
if (!rng.collapsed) {
editor.execCommand('Delete');
@@ -17302,18 +18004,40 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
offset = rng.startOffset;
newBlockName = settings.forced_root_block;
newBlockName = newBlockName ? newBlockName.toUpperCase() : '';
+ documentMode = dom.doc.documentMode;
// Resolve node index
if (container.nodeType == 1 && container.hasChildNodes()) {
+ isAfterLastNodeInContainer = offset > container.childNodes.length - 1;
container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
offset = 0;
}
+ // Get editable root node normaly the body element but sometimes a div or span
+ editableRoot = getEditableRoot(container);
+
+ // If there is no editable root then enter is done inside a contentEditable false element
+ if (!editableRoot) {
+ return;
+ }
+
undoManager.beforeChange();
+ // If editable root isn't block nor the root of the editor
+ if (!dom.isBlock(editableRoot) && editableRoot != dom.getRoot()) {
+ if (!newBlockName || evt.shiftKey) {
+ insertBr();
+ }
+
+ return;
+ }
+
// Wrap the current node and it's sibling in a default block if it's needed.
// for example this <td>text|<b>text2</b></td> will become this <td><p>text|<b>text2</p></b></td>
- container = wrapSelfAndSiblingsInDefaultBlock(container, offset);
+ // This won't happen if root blocks are disabled or the shiftKey is pressed
+ if ((newBlockName && !evt.shiftKey) || (!newBlockName && evt.shiftKey)) {
+ container = wrapSelfAndSiblingsInDefaultBlock(container, offset);
+ }
// Find parent block and setup empty block paddings
parentBlock = dom.getParent(container, dom.isBlock);
@@ -17394,3 +18118,4 @@ tinymce.onAddEditor.add(function(tinymce, ed) {
});
};
})(tinymce);
+
diff --git a/mod/acctlink.php b/mod/acctlink.php
new file mode 100644
index 000000000..a2365803a
--- /dev/null
+++ b/mod/acctlink.php
@@ -0,0 +1,16 @@
+<?php
+
+require_once('include/Scrape.php');
+
+function acctlink_init(&$a) {
+
+ if(x($_GET,'addr')) {
+ $addr = trim($_GET['addr']);
+ $res = probe_url($addr);
+ //logger('acctlink: ' . print_r($res,true));
+ if($res['url']) {
+ goaway($res['url']);
+ killme();
+ }
+ }
+}
diff --git a/mod/acl.php b/mod/acl.php
index 168b1f59f..1e8898ab6 100644
--- a/mod/acl.php
+++ b/mod/acl.php
@@ -135,7 +135,7 @@ function acl_init(&$a){
foreach($r as $g) {
$x['photos'][] = $g['micro'];
$x['links'][] = $g['url'];
- $x['suggestions'][] = $g['name']; // sprintf( t('%s [%s]'),$g['name'],$g['url']);
+ $x['suggestions'][] = $g['name'];
$x['data'][] = intval($g['id']);
}
}
diff --git a/mod/admin.php b/mod/admin.php
index 2810c8a8a..6b1a53a30 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -98,7 +98,7 @@ function admin_content(&$a) {
'plugins'=> Array($a->get_baseurl(true)."/admin/plugins/", t("Plugins") , "plugins"),
'themes' => Array($a->get_baseurl(true)."/admin/themes/", t("Themes") , "themes"),
'dbsync' => Array($a->get_baseurl(true)."/admin/dbsync/", t('DB updates'), "dbsync"),
- 'update' => Array($a->get_baseurl(true)."/admin/update/", t("Software Update") , "update")
+ //'update' => Array($a->get_baseurl(true)."/admin/update/", t("Software Update") , "update")
);
/* get plugins admin page */
@@ -115,7 +115,7 @@ function admin_content(&$a) {
$aside['logs'] = Array($a->get_baseurl(true)."/admin/logs/", t("Logs"), "logs");
$t = get_markup_template("admin_aside.tpl");
- $a->page['aside'] = replace_macros( $t, array(
+ $a->page['aside'] .= replace_macros( $t, array(
'$admin' => $aside,
'$h_pending' => t('User registrations waiting for confirmation'),
'$admurl'=> $a->get_baseurl(true)."/admin/"
@@ -182,6 +182,7 @@ function admin_page_summary(&$a) {
Array( t('Community/Celebrity Account'), 0),
Array( t('Automatic Friend Account'), 0)
);
+
$users=0;
foreach ($r as $u){ $accounts[$u['page-flags']][1] = $u['count']; $users+= $u['count']; }
@@ -190,10 +191,22 @@ function admin_page_summary(&$a) {
$r = q("SELECT COUNT(id) as `count` FROM `register`");
$pending = $r[0]['count'];
+ $r = q("select count(*) as total from deliverq where 1");
+ $deliverq = (($r) ? $r[0]['total'] : 0);
+
+ $r = q("select count(*) as total from queue where 1");
+ $queue = (($r) ? $r[0]['total'] : 0);
+
+ // We can do better, but this is a quick queue status
+
+ $queues = array( 'label' => t('Message queues'), 'deliverq' => $deliverq, 'queue' => $queue );
+
+
$t = get_markup_template("admin_summary.tpl");
return replace_macros($t, array(
'$title' => t('Administration'),
'$page' => t('Summary'),
+ '$queues' => $queues,
'$users' => Array( t('Registered users'), $users),
'$accounts' => $accounts,
'$pending' => Array( t('Pending registrations'), $pending),
@@ -417,7 +430,7 @@ function admin_page_site(&$a) {
'$maximagesize' => array('maximagesize', t("Maximum image size"), get_config('system','maximagesize'), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")),
'$register_policy' => array('register_policy', t("Register policy"), $a->config['register_policy'], "", $register_choices),
- '$register_text' => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES), t("Will be displayed prominently on the registration page.")),
+ '$register_text' => array('register_text', t("Register text"), htmlentities($a->config['register_text'], ENT_QUOTES, 'UTF-8'), t("Will be displayed prominently on the registration page.")),
'$abandon_days' => array('abandon_days', t('Accounts abandoned after x days'), get_config('system','account_abandon_days'), t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')),
'$allowed_sites' => array('allowed_sites', t("Allowed friend domains"), get_config('system','allowed_sites'), t("Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains")),
'$allowed_email' => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")),
diff --git a/mod/community.php b/mod/community.php
index bfe5a3089..fb28f7805 100644
--- a/mod/community.php
+++ b/mod/community.php
@@ -63,7 +63,7 @@ function community_content(&$a, $update = 0) {
}
$r = q("SELECT distinct(`item`.`uri`), `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,
`user`.`nickname`, `user`.`hidewall`
diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php
index 2b25095fd..76b99cbca 100644
--- a/mod/dfrn_confirm.php
+++ b/mod/dfrn_confirm.php
@@ -144,19 +144,12 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
* worried about key leakage than anybody cracking it.
*
*/
+ require_once('include/crypto.php');
- $res = openssl_pkey_new(array(
- 'digest_alg' => 'sha1',
- 'private_key_bits' => 4096,
- 'encrypt_key' => false )
- );
-
- $private_key = '';
-
- openssl_pkey_export($res, $private_key);
+ $res = new_keypair(1024);
- $pubkey = openssl_pkey_get_details($res);
- $public_key = $pubkey["key"];
+ $private_key = $res['prvkey'];
+ $public_key = $res['pubkey'];
// Save the private key. Send them the public key.
@@ -209,6 +202,8 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if($user[0]['page-flags'] == PAGE_COMMUNITY)
$params['page'] = 1;
+ if($user[0]['page-flags'] == PAGE_PRVGROUP)
+ $params['page'] = 2;
logger('dfrn_confirm: Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params,true), LOGGER_DATA);
@@ -500,6 +495,16 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
}
}
}
+
+
+ $g = q("select def_gid from user where uid = %d limit 1",
+ intval($uid)
+ );
+ if($contact && $g && intval($g[0]['def_gid'])) {
+ require_once('include/group.php');
+ group_add_member($uid,'',$contact['id'],$g[0]['def_gid']);
+ }
+
// Let's send our user to the contact editor in case they want to
// do anything special with this new friend.
@@ -534,6 +539,9 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$page = ((x($_POST,'page')) ? intval($_POST['page']) : 0 );
$version_id = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0);
+ $forum = (($page == 1) ? 1 : 0);
+ $prv = (($page == 2) ? 1 : 0);
+
logger('dfrn_confirm: requestee contacted: ' . $node);
logger('dfrn_confirm: request: POST=' . print_r($_POST,true), LOGGER_DATA);
@@ -688,6 +696,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
`pending` = 0,
`duplex` = %d,
`forum` = %d,
+ `prv` = %d,
`network` = '%s' WHERE `id` = %d LIMIT 1
",
dbesc($photos[0]),
@@ -698,7 +707,8 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
dbesc(datetime_convert()),
dbesc(datetime_convert()),
intval($duplex),
- intval($page),
+ intval($forum),
+ intval($prv),
dbesc(NETWORK_DFRN),
intval($dfrn_record)
);
diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php
index 65d39d5fe..e55da5572 100644
--- a/mod/dfrn_notify.php
+++ b/mod/dfrn_notify.php
@@ -17,6 +17,9 @@ function dfrn_notify_post(&$a) {
$ssl_policy = ((x($_POST,'ssl_policy')) ? notags(trim($_POST['ssl_policy'])): 'none');
$page = ((x($_POST,'page')) ? intval($_POST['page']) : 0);
+ $forum = (($page == 1) ? 1 : 0);
+ $prv = (($page == 2) ? 1 : 0);
+
$writable = (-1);
if($dfrn_version >= 2.21) {
$writable = (($perm === 'rw') ? 1 : 0);
@@ -88,10 +91,11 @@ function dfrn_notify_post(&$a) {
$importer = $r[0];
- if((($writable != (-1)) && ($writable != $importer['writable'])) || ($importer['forum'] != $page)) {
- q("UPDATE `contact` SET `writable` = %d, forum = %d WHERE `id` = %d LIMIT 1",
+ if((($writable != (-1)) && ($writable != $importer['writable'])) || ($importer['forum'] != $forum) || ($importer['prv'] != $prv)) {
+ q("UPDATE `contact` SET `writable` = %d, forum = %d, prv = %d WHERE `id` = %d LIMIT 1",
intval(($writable == (-1)) ? $importer['writable'] : $writable),
- intval($page),
+ intval($forum),
+ intval($prv),
intval($importer['id'])
);
if($writable != (-1))
diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php
index 2169c494c..896fe1792 100644
--- a/mod/dfrn_request.php
+++ b/mod/dfrn_request.php
@@ -68,7 +68,7 @@ function dfrn_request_post(&$a) {
$dfrn_url = notags(trim($_POST['dfrn_url']));
$aes_allow = (((x($_POST,'aes_allow')) && ($_POST['aes_allow'] == 1)) ? 1 : 0);
$confirm_key = ((x($_POST,'confirm_key')) ? $_POST['confirm_key'] : "");
-
+ $hidden = ((x($_POST,'hidden-contact')) ? intval($_POST['hidden-contact']) : 0);
$contact_record = null;
if(x($dfrn_url)) {
@@ -98,8 +98,9 @@ function dfrn_request_post(&$a) {
}
if(is_array($contact_record)) {
- $r = q("UPDATE `contact` SET `ret-aes` = %d WHERE `id` = %d LIMIT 1",
+ $r = q("UPDATE `contact` SET `ret-aes` = %d, hidden = %d WHERE `id` = %d LIMIT 1",
intval($aes_allow),
+ intval($hidden),
intval($contact_record['id'])
);
}
@@ -144,8 +145,8 @@ function dfrn_request_post(&$a) {
*/
$r = q("INSERT INTO `contact` ( `uid`, `created`,`url`, `nurl`, `name`, `nick`, `photo`, `site-pubkey`,
- `request`, `confirm`, `notify`, `poll`, `poco`, `network`, `aes_allow`)
- VALUES ( %d, '%s', '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d)",
+ `request`, `confirm`, `notify`, `poll`, `poco`, `network`, `aes_allow`, `hidden`)
+ VALUES ( %d, '%s', '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
intval(local_user()),
datetime_convert(),
dbesc($dfrn_url),
@@ -160,7 +161,8 @@ function dfrn_request_post(&$a) {
$parms['dfrn-poll'],
$parms['dfrn-poco'],
dbesc(NETWORK_DFRN),
- intval($aes_allow)
+ intval($aes_allow),
+ intval($hidden)
);
}
@@ -370,6 +372,14 @@ function dfrn_request_post(&$a) {
if(count($r)) {
$contact_id = $r[0]['id'];
+ $g = q("select def_gid from user where uid = %d limit 1",
+ intval($uid)
+ );
+ if($g && intval($g[0]['def_gid'])) {
+ require_once('include/group.php');
+ group_add_member($uid,'',$contact_id,$g[0]['def_gid']);
+ }
+
$photo = avatar_img($addr);
$r = q("UPDATE `contact` SET
@@ -641,6 +651,8 @@ function dfrn_request_content(&$a) {
$o = replace_macros($tpl,array(
'$dfrn_url' => $dfrn_url,
'$aes_allow' => (($aes_allow) ? '<input type="hidden" name="aes_allow" value="1" />' : "" ),
+ '$hidethem' => t('Hide this contact'),
+ '$hidechecked' => '',
'$confirm_key' => $confirm_key,
'$welcome' => sprintf( t('Welcome home %s.'), $a->user['username']),
'$please' => sprintf( t('Please confirm your introduction/connection request to %s.'), $dfrn_url),
@@ -672,7 +684,7 @@ function dfrn_request_content(&$a) {
$auto_confirm = false;
if(count($r)) {
- if($r[0]['page-flags'] != PAGE_NORMAL)
+ if(($r[0]['page-flags'] != PAGE_NORMAL) && ($r[0]['page-flags'] != PAGE_PRVGROUP))
$auto_confirm = true;
if(! $auto_confirm) {
diff --git a/mod/dirfind.php b/mod/dirfind.php
index 34c54dd91..5c5d0e933 100644
--- a/mod/dirfind.php
+++ b/mod/dirfind.php
@@ -17,6 +17,9 @@ function dirfind_init(&$a) {
function dirfind_content(&$a) {
$search = notags(trim($_REQUEST['search']));
+
+ if(strpos($search,'@') === 0)
+ $search = substr($search,1);
$o = '';
diff --git a/mod/follow.php b/mod/follow.php
index 4a7f99bf0..5e48174c9 100644
--- a/mod/follow.php
+++ b/mod/follow.php
@@ -1,6 +1,7 @@
<?php
require_once('Scrape.php');
+require_once('include/follow.php');
function follow_init(&$a) {
@@ -11,220 +12,19 @@ function follow_init(&$a) {
}
$uid = local_user();
- $url = $orig_url = notags(trim($_REQUEST['url']));
+ $url = notags(trim($_REQUEST['url']));
$return_url = $_SESSION['return_url'];
- // remove ajax junk, e.g. Twitter
+ $result = new_contact($uid,$url,true);
- $url = str_replace('/#!/','/',$url);
-
- if(! allowed_url($url)) {
- notice( t('Disallowed profile URL.') . EOL);
- goaway($return_url);
- // NOTREACHED
- }
-
-
- if(! $url) {
- notice( t('Connect URL missing.') . EOL);
- goaway($return_url);
- // NOTREACHED
- }
-
- $arr = array('url' => $url, 'contact' => array());
-
- call_hooks('follow', $arr);
-
- if(x($arr['contact'],'name'))
- $ret = $arr['contact'];
- else
- $ret = probe_url($url);
-
- if($ret['network'] === NETWORK_DFRN) {
- if(strlen($a->path))
- $myaddr = bin2hex($a->get_baseurl() . '/profile/' . $a->user['nickname']);
- else
- $myaddr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname());
-
- goaway($ret['request'] . "&addr=$myaddr");
-
- // NOTREACHED
- }
- else {
- if(get_config('system','dfrn_only')) {
- notice( t('This site is not configured to allow communications with other networks.') . EOL);
- notice( t('No compatible communication protocols or feeds were discovered.') . EOL);
- goaway($return_url);
- }
- }
-
- // This extra param just confuses things, remove it
- if($ret['network'] === NETWORK_DIASPORA)
- $ret['url'] = str_replace('?absolute=true','',$ret['url']);
-
-
- // do we have enough information?
-
- if(! ((x($ret,'name')) && (x($ret,'poll')) && ((x($ret,'url')) || (x($ret,'addr'))))) {
- notice( t('The profile address specified does not provide adequate information.') . EOL);
- if(! x($ret,'poll'))
- notice( t('No compatible communication protocols or feeds were discovered.') . EOL);
- if(! x($ret,'name'))
- notice( t('An author or name was not found.') . EOL);
- if(! x($ret,'url'))
- notice( t('No browser URL could be matched to this address.') . EOL);
- if(strpos($url,'@') !== false) {
- notice( t('Unable to match @-style Identity Address with a known protocol or email contact.') . EOL);
- notice( t('Use mailto: in front of address to force email check.') . EOL);
- }
- goaway($return_url);
- }
-
- if($ret['network'] === NETWORK_OSTATUS && get_config('system','ostatus_disabled')) {
- notice( t('The profile address specified belongs to a network which has been disabled on this site.') . EOL);
- $ret['notify'] = '';
- }
-
- if(! $ret['notify']) {
- notice( t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . EOL);
- }
-
- $writeable = ((($ret['network'] === NETWORK_OSTATUS) && ($ret['notify'])) ? 1 : 0);
- $hidden = (($ret['network'] === NETWORK_MAIL) ? 1 : 0);
-
- if($ret['network'] === NETWORK_MAIL) {
- $writeable = 1;
-
- }
- if($ret['network'] === NETWORK_DIASPORA)
- $writeable = 1;
-
- // check if we already have a contact
- // the poll url is more reliable than the profile url, as we may have
- // indirect links or webfinger links
-
- $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` = '%s' LIMIT 1",
- intval($uid),
- dbesc($ret['poll'])
- );
-
- if(count($r)) {
- // update contact
- if($r[0]['rel'] == CONTACT_IS_FOLLOWER || ($network === NETWORK_DIASPORA && $r[0]['rel'] == CONTACT_IS_SHARING)) {
- q("UPDATE `contact` SET `rel` = %d , `readonly` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1",
- intval(CONTACT_IS_FRIEND),
- intval($r[0]['id']),
- intval($uid)
- );
- }
- }
- else {
-
- $new_relation = (($ret['network'] === NETWORK_MAIL) ? CONTACT_IS_FRIEND : CONTACT_IS_SHARING);
- if($ret['network'] === NETWORK_DIASPORA)
- $new_relation = CONTACT_IS_FOLLOWER;
-
- // create contact record
- $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `batch`, `notify`, `poll`, `poco`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`,
- `writable`, `hidden`, `blocked`, `readonly`, `pending` )
- VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, 0, 0, 0 ) ",
- intval($uid),
- dbesc(datetime_convert()),
- dbesc($ret['url']),
- dbesc(normalise_link($ret['url'])),
- dbesc($ret['addr']),
- dbesc($ret['alias']),
- dbesc($ret['batch']),
- dbesc($ret['notify']),
- dbesc($ret['poll']),
- dbesc($ret['poco']),
- dbesc($ret['name']),
- dbesc($ret['nick']),
- dbesc($ret['photo']),
- dbesc($ret['network']),
- dbesc($ret['pubkey']),
- intval($new_relation),
- intval($ret['priority']),
- intval($writeable),
- intval($hidden)
- );
- }
-
- $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($ret['url']),
- intval($uid)
- );
-
- if(! count($r)) {
- notice( t('Unable to retrieve contact information.') . EOL);
+ if($result['success'] == false) {
+ if($result['message'])
+ notice($result['message']);
goaway($return_url);
- // NOTREACHED
}
- $contact = $r[0];
- $contact_id = $r[0]['id'];
-
- require_once("Photo.php");
-
- $photos = import_profile_photo($ret['photo'],$uid,$contact_id);
-
- $r = q("UPDATE `contact` SET `photo` = '%s',
- `thumb` = '%s',
- `micro` = '%s',
- `name-date` = '%s',
- `uri-date` = '%s',
- `avatar-date` = '%s'
- WHERE `id` = %d LIMIT 1
- ",
- dbesc($photos[0]),
- dbesc($photos[1]),
- dbesc($photos[2]),
- dbesc(datetime_convert()),
- dbesc(datetime_convert()),
- dbesc(datetime_convert()),
- intval($contact_id)
- );
-
-
- // pull feed and consume it, which should subscribe to the hub.
-
- proc_run('php',"include/poller.php","$contact_id");
-
- // create a follow slap
-
- $tpl = get_markup_template('follow_slap.tpl');
- $slap = replace_macros($tpl, array(
- '$name' => $a->user['username'],
- '$profile_page' => $a->get_baseurl() . '/profile/' . $a->user['nickname'],
- '$photo' => $a->contact['photo'],
- '$thumb' => $a->contact['thumb'],
- '$published' => datetime_convert('UTC','UTC', 'now', ATOM_TIME),
- '$item_id' => 'urn:X-dfrn:' . $a->get_hostname() . ':follow:' . random_string(),
- '$title' => '',
- '$type' => 'text',
- '$content' => t('following'),
- '$nick' => $a->user['nickname'],
- '$verb' => ACTIVITY_FOLLOW,
- '$ostat_follow' => ''
- ));
-
- $r = q("SELECT `contact`.*, `user`.* FROM `contact` LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid`
- WHERE `user`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
- intval($uid)
- );
-
- if(count($r)) {
- if(($contact['network'] == NETWORK_OSTATUS) && (strlen($contact['notify']))) {
- require_once('include/salmon.php');
- slapper($r[0],$contact['notify'],$slap);
- }
- if($contact['network'] == NETWORK_DIASPORA) {
- require_once('include/diaspora.php');
- $ret = diaspora_share($a->user,$contact);
- logger('mod_follow: diaspora_share returns: ' . $ret);
- }
- }
+ info( t('Contact added') . EOL);
if(strstr($return_url,'contacts'))
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
diff --git a/mod/hostxrd.php b/mod/hostxrd.php
index fe61a874c..9b2411f26 100644
--- a/mod/hostxrd.php
+++ b/mod/hostxrd.php
@@ -8,26 +8,10 @@ function hostxrd_init(&$a) {
$pubkey = get_config('system','site_pubkey');
if(! $pubkey) {
+ $res = new_keypair(1024);
- // should only have to ever do this once.
-
- $res=openssl_pkey_new(array(
- 'digest_alg' => 'sha1',
- 'private_key_bits' => 4096,
- 'encrypt_key' => false ));
-
-
- $prvkey = '';
-
- openssl_pkey_export($res, $prvkey);
-
- // Get public key
-
- $pkey = openssl_pkey_get_details($res);
- $pubkey = $pkey["key"];
-
- set_config('system','site_prvkey', $prvkey);
- set_config('system','site_pubkey', $pubkey);
+ set_config('system','site_prvkey', $res['prvkey']);
+ set_config('system','site_pubkey', $res['pubkey']);
}
$tpl = file_get_contents('view/xrd_host.tpl');
diff --git a/mod/install.php b/mod/install.php
index 6f5552076..cb21a71eb 100644..100755
--- a/mod/install.php
+++ b/mod/install.php
@@ -4,6 +4,12 @@ $install_wizard_pass=1;
function install_init(&$a){
+
+ // $baseurl/install/testrwrite to test if rewite in .htaccess is working
+ if ($a->argc==2 && $a->argv[1]=="testrewrite") {
+ echo "ok";
+ killme();
+ }
global $install_wizard_pass;
if (x($_POST,'pass'))
$install_wizard_pass = intval($_POST['pass']);
@@ -110,14 +116,7 @@ function install_content(&$a) {
$wizard_status = "";
$install_title = t('Friendica Social Communications Server - Setup');
- if(x($a->data,'txt') && strlen($a->data['txt'])) {
- $tpl = get_markup_template('install.tpl');
- return replace_macros($tpl, array(
- '$title' => $install_title,
- '$pass' => t('Database connection'),
- '$text' => manual_config($a),
- ));
- }
+
if(x($a->data,'db_conn_failed')) {
$install_wizard_pass = 2;
@@ -128,39 +127,20 @@ function install_content(&$a) {
$wizard_status = t('Could not create table.');
}
+ $db_return_text="";
if(x($a->data,'db_installed')) {
$txt = '<p style="font-size: 130%;">';
$txt .= t('Your Friendica site database has been installed.') . EOL;
- $txt .= t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.') . EOL ;
- $txt .= t('Please see the file "INSTALL.txt".') . EOL ;
- $txt .= '<br />';
- $txt .= '<a href="' . $a->get_baseurl() . '/register' . '">' . t('Proceed to registration') . '</a>' ;
- $txt .= '</p>';
-
- $tpl = get_markup_template('install.tpl');
- return replace_macros($tpl, array(
- '$title' => $install_title,
- '$pass' => t('Proceed with Installation'),
- '$text' => $txt,
- ));
-
+ $db_return_text .= $txt;
}
if(x($a->data,'db_failed')) {
$txt = t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL;
$txt .= t('Please see the file "INSTALL.txt".') . EOL ."<hr>" ;
$txt .= "<pre>".$a->data['db_failed'] . "</pre>". EOL ;
-
- $tpl = get_markup_template('install.tpl');
- return replace_macros($tpl, array(
- '$title' => $install_title,
- '$pass' => t('Database connection'),
- '$status' => t('Database import failed.'),
- '$text' => $txt,
- ));
-
+ $db_return_text .= $txt;
}
-
+
if($db && $db->connected) {
$r = q("SELECT COUNT(*) as `total` FROM `user`");
if($r && count($r) && $r[0]['total']) {
@@ -174,6 +154,19 @@ function install_content(&$a) {
}
}
+ if(x($a->data,'txt') && strlen($a->data['txt'])) {
+ $tpl = get_markup_template('install.tpl');
+ $db_return_text .= manual_config($a);
+ }
+
+ if ($db_return_text!="") {
+ return replace_macros($tpl, array(
+ '$title' => $install_title,
+ '$pass' => "",
+ '$text' => $db_return_text . what_next(),
+ ));
+ }
+
switch ($install_wizard_pass){
case 1: { // System check
@@ -191,14 +184,16 @@ function install_content(&$a) {
check_php($phpath, $checks);
-
+ check_htaccess($checks);
+
function check_passed($v, $c){
if ($c['required'])
$v = $v && $c['status'];
return $v;
}
$checkspassed = array_reduce($checks, "check_passed", true);
-
+
+
$tpl = get_markup_template('install_checks.tpl');
$o .= replace_macros($tpl, array(
@@ -321,14 +316,16 @@ function check_php(&$phpath, &$checks) {
$help = "";
if(!$passed) {
$help .= t('Could not find a command line version of PHP in the web server PATH.'). EOL;
+ $help .= t("If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See <a href='http://friendica.com/node/27'>'Activating scheduled tasks'</a>") . EOL ;
+ $help .= EOL . EOL ;
$tpl = get_markup_template('field_input.tpl');
$help .= replace_macros($tpl, array(
- '$field' => array('phpath', t('PHP executable path'), $phpath, t('Enter full path to php executable')),
+ '$field' => array('phpath', t('PHP executable path'), $phpath, t('Enter full path to php executable. You can leave this blank to continue the installation.')),
));
$phpath="";
}
- check_add($checks, t('Command line PHP'), $passed, true, $help);
+ check_add($checks, t('Command line PHP').($passed?" (<tt>$phpath</tt>)":""), $passed, false, $help);
if($passed) {
$str = autoname(8);
@@ -385,6 +382,7 @@ function check_funcs(&$checks) {
check_add($ck_funcs, t('Apache mod_rewrite module'), true, true, "");
}
}
+
if(! function_exists('curl_init')){
$ck_funcs[0]['status']= false;
$ck_funcs[0]['help']= t('Error: libCURL PHP module required but not installed.');
@@ -422,11 +420,28 @@ function check_htconfig(&$checks) {
$status=false;
$help = t('The web installer needs to be able to create a file called ".htconfig.php" in the top folder of your web server and it is unable to do so.') .EOL;
$help .= t('This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can.').EOL;
- $help .= t('Please check with your site documentation or support people to see if this situation can be corrected.').EOL;
- $help .= t('If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.').EOL;
+ $help .= t('At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder.').EOL;
+ $help .= t('You can alternatively skip this procedure and perform a manual installation. Please see the file "INSTALL.txt" for instructions.').EOL;
}
+
+ check_add($checks, t('.htconfig.php is writable'), $status, false, $help);
- check_add($checks, t('.htconfig.php is writable'), $status, true, $help);
+}
+
+function check_htaccess(&$checks) {
+ $a = get_app();
+ $status = true;
+ $help = "";
+ if (function_exists('curl_init')){
+ $test = fetch_url($a->get_baseurl()."/install/testrewrite");
+ if ($test!="ok") {
+ $status = false;
+ $help = t('Url rewrite in .htaccess is not working. Check your server configuration.');
+ }
+ check_add($checks, t('Url rewrite is working'), $status, true, $help);
+ } else {
+ // cannot check modrewrite if libcurl is not installed
+ }
}
@@ -465,5 +480,16 @@ function load_database($db) {
return $errors;
}
+function what_next() {
+ $a = get_app();
+ $baseurl = $a->get_baseurl();
+ return
+ t('<h1>What next</h1>')
+ ."<p>".t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.')
+ .t('Please see the file "INSTALL.txt".')
+ ."</p><p>"
+ .t("Go to your new Firendica node <a href='$baseurl/register'>registration page</a> and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel.")
+ ."</p>";
+}
diff --git a/mod/item.php b/mod/item.php
index 639379fe0..c1c0b14ec 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -218,14 +218,23 @@ function item_post(&$a) {
$private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 1 : 0);
- if(($parent_item) &&
- (($parent_item['private'])
+ // If this is a comment, set the permissions from the parent.
+
+ if($parent_item) {
+ $private = 0;
+
+ if(($parent_item['private'])
|| strlen($parent_item['allow_cid'])
|| strlen($parent_item['allow_gid'])
|| strlen($parent_item['deny_cid'])
- || strlen($parent_item['deny_gid'])
- )) {
- $private = 1;
+ || strlen($parent_item['deny_gid'])) {
+ $private = 1;
+ }
+
+ $str_contact_allow = $parent_item['allow_cid'];
+ $str_group_allow = $parent_item['allow_gid'];
+ $str_contact_deny = $parent_item['deny_cid'];
+ $str_group_deny = $parent_item['deny_gid'];
}
$pubmail_enable = ((x($_REQUEST,'pubmail_enable') && intval($_REQUEST['pubmail_enable']) && (! $private)) ? 1 : 0);
@@ -253,17 +262,17 @@ function item_post(&$a) {
}
}
- if(strlen($categories)) {
- // get the "fileas" tags for this post
- $filedas = file_tag_file_to_list($categories, 'file');
+ if(strlen($categories)) {
+ // get the "fileas" tags for this post
+ $filedas = file_tag_file_to_list($categories, 'file');
}
- // save old and new categories, so we can determine what needs to be deleted from pconfig
- $categories_old = $categories;
- $categories = file_tag_list_to_file(trim($_REQUEST['category']), 'category');
- $categories_new = $categories;
- if(strlen($filedas)) {
- // append the fileas stuff to the new categories list
- $categories .= file_tag_list_to_file($filedas, 'file');
+ // save old and new categories, so we can determine what needs to be deleted from pconfig
+ $categories_old = $categories;
+ $categories = file_tag_list_to_file(trim($_REQUEST['category']), 'category');
+ $categories_new = $categories;
+ if(strlen($filedas)) {
+ // append the fileas stuff to the new categories list
+ $categories .= file_tag_list_to_file($filedas, 'file');
}
// Work around doubled linefeeds in Tinymce 3.5b2
@@ -281,18 +290,16 @@ function item_post(&$a) {
$author = null;
$self = false;
- if(($_SESSION['uid']) && ($_SESSION['uid'] == $profile_uid)) {
+ if((local_user()) && (local_user() == $profile_uid)) {
$self = true;
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
intval($_SESSION['uid'])
);
}
- else {
- if((x($_SESSION,'visitor_id')) && (intval($_SESSION['visitor_id']))) {
- $r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
- intval($_SESSION['visitor_id'])
- );
- }
+ elseif(remote_user()) {
+ $r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
+ intval(remote_user())
+ );
}
if(count($r)) {
@@ -302,7 +309,7 @@ function item_post(&$a) {
// get contact info for owner
- if($profile_uid == $_SESSION['uid']) {
+ if($profile_uid == local_user()) {
$contact_record = $author;
}
else {
@@ -313,8 +320,6 @@ function item_post(&$a) {
$contact_record = $r[0];
}
-
-
$post_type = notags(trim($_REQUEST['type']));
if($post_type === 'net-comment') {
@@ -350,13 +355,15 @@ function item_post(&$a) {
$image_uri = substr($image_uri,0, strpos($image_uri,'-'));
if(! strlen($image_uri))
continue;
- $srch = '<' . intval($contact_record['id']) . '>';
+ $srch = '<' . intval($contact_id) . '>';
+
$r = q("SELECT `id` FROM `photo` WHERE `allow_cid` = '%s' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = ''
AND `resource-id` = '%s' AND `uid` = %d LIMIT 1",
dbesc($srch),
dbesc($image_uri),
intval($profile_uid)
);
+
if(! count($r))
continue;
@@ -446,6 +453,7 @@ function item_post(&$a) {
$tagged = array();
+ $private_forum = false;
if(count($tags)) {
foreach($tags as $tag) {
@@ -464,11 +472,22 @@ function item_post(&$a) {
continue;
$success = handle_tag($a, $body, $inform, $str_tags, (local_user()) ? local_user() : $profile_uid , $tag);
- if($success)
+ if($success['replaced'])
$tagged[] = $tag;
+ if(is_array($success['contact']) && intval($success['contact']['prv'])) {
+ $private_forum = true;
+ $private_id = $success['contact']['id'];
+ }
}
}
+ if(($private_forum) && (! $parent) && (! $private)) {
+ // we tagged a private forum in a top level post and the message was public.
+ // Restrict it.
+ $private = 1;
+ $str_contact_allow = '<' . $private_id . '>';
+ }
+
$attachments = '';
$match = false;
@@ -718,16 +737,16 @@ function item_post(&$a) {
if($datarray['verb'] === ACTIVITY_LIKE)
$signed_text = $datarray['guid'] . ';' . 'Post' . ';' . $parent_item['guid'] . ';' . 'true' . ';' . $myaddr;
else
- $signed_text = $datarray['guid'] . ';' . $parent_item['guid'] . ';' . $signed_body . ';' . $myaddr;
+ $signed_text = $datarray['guid'] . ';' . $parent_item['guid'] . ';' . $signed_body . ';' . $myaddr;
$authorsig = base64_encode(rsa_sign($signed_text,$a->user['prvkey'],'sha256'));
q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
intval($post_id),
- dbesc($signed_text),
- dbesc(base64_encode($authorsig)),
- dbesc($myaddr)
- );
+ dbesc($signed_text),
+ dbesc(base64_encode($authorsig)),
+ dbesc($myaddr)
+ );
}
}
else {
@@ -886,6 +905,7 @@ function item_content(&$a) {
function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag) {
$replaced = false;
+ $r = null;
//is it a hash tag?
if(strpos($tag,'#') === 0) {
@@ -1016,5 +1036,5 @@ function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag) {
}
}
- return $replaced;
+ return array('replaced' => $replaced, 'contact' => $r[0]);
}
diff --git a/mod/like.php b/mod/like.php
index 6b97fafb5..942a04fe7 100644..100755
--- a/mod/like.php
+++ b/mod/like.php
@@ -104,7 +104,8 @@ function like_content(&$a) {
return;
}
- $r = q("SELECT `id` FROM `item` WHERE `verb` = '%s' AND `deleted` = 0
+
+ $r = q("SELECT * FROM `item` WHERE `verb` = '%s' AND `deleted` = 0
AND `contact-id` = %d AND ( `parent` = '%s' OR `parent-uri` = '%s') LIMIT 1",
dbesc($activity),
intval($contact['id']),
@@ -112,13 +113,70 @@ function like_content(&$a) {
dbesc($item_id)
);
if(count($r)) {
+ $like_item = $r[0];
+
// Already voted, undo it
$r = q("UPDATE `item` SET `deleted` = 1, `changed` = '%s' WHERE `id` = %d LIMIT 1",
dbesc(datetime_convert()),
- intval($r[0]['id'])
+ intval($like_item['id'])
);
- proc_run('php',"include/notifier.php","like","$post_id");
+ // Clean up the `sign` table
+ $r = q("DELETE FROM `sign` WHERE `iid` = %d",
+ intval($like_item['id'])
+ );
+
+ // Save the author information for the unlike in case we need to relay to Diaspora
+ // Note that we can only create a signature for a user of the local server. We don't have
+ // a key for remote users. That is ok, because if a remote user is "unlike"ing a post, it
+ // means we are the relay, and for relayable_retractions, Diaspora
+ // only checks the parent_author_signature if it doesn't have to relay further
+ //
+ // If $item['resource-id'] exists, it means the item is a photo. Diaspora doesn't support
+ // likes on photos, so don't bother.
+
+ if(($activity === ACTIVITY_LIKE) && (! $item['resource-id'])) {
+ $signed_text = $like_item['guid'] . ';' . 'Like';
+
+ if( $contact['network'] === NETWORK_DIASPORA)
+ $diaspora_handle = $contact['addr'];
+ else { // Only works for NETWORK_DFRN
+ $contact_baseurl_start = strpos($contact['url'],'://') + 3;
+ $contact_baseurl_length = strpos($contact['url'],'/profile') - $contact_baseurl_start;
+ $contact_baseurl = substr($contact['url'], $contact_baseurl_start, $contact_baseurl_length);
+ $diaspora_handle = $contact['nick'] . '@' . $contact_baseurl;
+
+ // Get contact's private key if he's a user of the local Friendica server
+ $r = q("SELECT `contact`.`uid` FROM `contact` WHERE `url` = '%s' AND `self` = 1 LIMIT 1",
+ dbesc($contact['url'])
+ );
+
+ if( $r) {
+ $contact_uid = $r['uid'];
+ $r = q("SELECT prvkey FROM user WHERE uid = %d LIMIT 1",
+ intval($contact_uid)
+ );
+
+ if( $r)
+ $authorsig = base64_encode(rsa_sign($signed_text,$r['prvkey'],'sha256'));
+ }
+ }
+
+ if(! isset($authorsig))
+ $authorsig = '';
+
+ q("insert into sign (`retract_iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+ intval($like_item['id']),
+ dbesc($signed_text),
+ dbesc($authorsig),
+ dbesc($diaspora_handle)
+ );
+ }
+
+
+// proc_run('php',"include/notifier.php","like","$post_id"); // $post_id isn't defined here!
+ $like_item_id = $like_item['id'];
+ proc_run('php',"include/notifier.php","like","$like_item_id");
return;
}
@@ -191,6 +249,65 @@ EOT;
);
}
+
+ // Save the author information for the like in case we need to relay to Diaspora
+ // Note that we can only create a signature for a user of the local server. We don't have
+ // a key for remote users. That is ok, because if a remote user is "unlike"ing a post, it
+ // means we are the relay, and for relayable_retractions, Diaspora
+ // only checks the parent_author_signature if it doesn't have to relay further
+
+ if(($activity === ACTIVITY_LIKE) && ($post_type === t('status'))) {
+ if( $contact['network'] === NETWORK_DIASPORA)
+ $diaspora_handle = $contact['addr'];
+ else { // Only works for NETWORK_DFRN
+ $contact_baseurl_start = strpos($contact['url'],'://') + 3;
+ $contact_baseurl_length = strpos($contact['url'],'/profile') - $contact_baseurl_start;
+ $contact_baseurl = substr($contact['url'], $contact_baseurl_start, $contact_baseurl_length);
+ $diaspora_handle = $contact['nick'] . '@' . $contact_baseurl;
+
+ // Get contact's private key if he's a user of the local Friendica server
+ $r = q("SELECT `contact`.`uid` FROM `contact` WHERE `url` = '%s' AND `self` = 1 LIMIT 1",
+ dbesc($contact['url'])
+ );
+
+ if( $r) {
+ $contact_uid = $r['uid'];
+ $r = q("SELECT prvkey FROM user WHERE uid = %d LIMIT 1",
+ intval($contact_uid)
+ );
+
+ if( $r)
+ $contact_uprvkey = $r['prvkey'];
+ }
+ }
+
+ $r = q("SELECT guid, parent FROM `item` WHERE id = %d LIMIT 1",
+ intval($post_id)
+ );
+ if( $r) {
+ $p = q("SELECT guid FROM `item` WHERE id = %d AND parent = %d LIMIT 1",
+ intval($r[0]['parent']),
+ intval($r[0]['parent'])
+ );
+ if( $p) {
+ $signed_text = $r[0]['guid'] . ';Post;' . $p[0]['guid'] . ';true;' . $diaspora_handle;
+
+ if(isset($contact_uprvkey))
+ $authorsig = base64_encode(rsa_sign($signed_text,$contact_uprvkey,'sha256'));
+ else
+ $authorsig = '';
+
+ q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+ intval($post_id),
+ dbesc($signed_text),
+ dbesc($authorsig),
+ dbesc($diaspora_handle)
+ );
+ }
+ }
+ }
+
+
$arr['id'] = $post_id;
call_hooks('post_local_end', $arr);
@@ -199,4 +316,4 @@ EOT;
killme();
// return; // NOTREACHED
-} \ No newline at end of file
+}
diff --git a/mod/message.php b/mod/message.php
index 71f83b47a..fb2241985 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -211,7 +211,8 @@ function message_content(&$a) {
'$parent' => '',
'$upload' => t('Upload photo'),
'$insert' => t('Insert web link'),
- '$wait' => t('Please wait')
+ '$wait' => t('Please wait'),
+ '$submit' => t('Submit')
));
return $o;
diff --git a/mod/network.php b/mod/network.php
index e59839ccc..b998a3107 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -108,6 +108,10 @@ function network_content(&$a, $update = 0) {
return login(false);
}
+ $arr = array('query' => $a->query_string);
+
+ call_hooks('network_content_init', $arr);
+
$o = '';
// item filter tabs
@@ -157,7 +161,7 @@ function network_content(&$a, $update = 0) {
$all_active = 'active';
}
-
+
$postord_active = '';
if($all_active && x($_GET,'order') && $_GET['order'] !== 'comment') {
@@ -398,10 +402,22 @@ function network_content(&$a, $update = 0) {
if(x($_GET,'search')) {
$search = escape_tags($_GET['search']);
- $sql_extra .= sprintf(" AND ( `item`.`body` like '%s' OR `item`.`tag` like '%s' ) ",
- dbesc(protect_sprintf('%' . $search . '%')),
- dbesc(protect_sprintf('%]' . $search . '[%'))
- );
+ if (get_config('system','use_fulltext_engine')) {
+ if(strpos($search,'#') === 0)
+ $sql_extra .= sprintf(" AND (MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode)) ",
+ dbesc(protect_sprintf($search))
+ );
+ else
+ $sql_extra .= sprintf(" AND (MATCH(`item`.`body`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode)) ",
+ dbesc(protect_sprintf($search)),
+ dbesc(protect_sprintf($search))
+ );
+ } else {
+ $sql_extra .= sprintf(" AND ( `item`.`body` like '%s' OR `item`.`tag` like '%s' ) ",
+ dbesc(protect_sprintf('%' . $search . '%')),
+ dbesc(protect_sprintf('%]' . $search . '[%'))
+ );
+ }
}
if(strlen($file)) {
$sql_extra .= file_tag_file_query('item',unxmlify($file));
@@ -410,15 +426,22 @@ function network_content(&$a, $update = 0) {
if($conv) {
$myurl = $a->get_baseurl() . '/profile/'. $a->user['nickname'];
$myurl = substr($myurl,strpos($myurl,'://')+3);
- $myurl = str_replace(array('www.','.'),array('','\\.'),$myurl);
+ $myurl = str_replace('www.','',$myurl);
$diasp_url = str_replace('/profile/','/u/',$myurl);
- $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` like '%s' or `tag` like '%s' or tag like '%s' )) ",
- dbesc(protect_sprintf('%s' . $myurl)),
- dbesc(protect_sprintf('%' . $myurl . '\\]%')),
- dbesc(protect_sprintf('%' . $diasp_url . '\\]%'))
- );
- }
+ if (get_config('system','use_fulltext_engine'))
+ $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where (MATCH(`author-link`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(`tag`) AGAINST ('".'"%s"'."' in boolean mode) or MATCH(tag) AGAINST ('".'"%s"'."' in boolean mode))) ",
+ dbesc(protect_sprintf($myurl)),
+ dbesc(protect_sprintf($myurl)),
+ dbesc(protect_sprintf($diasp_url))
+ );
+ else
+ $sql_extra .= sprintf(" AND `item`.`parent` IN (SELECT distinct(`parent`) from item where ( `author-link` like '%s' or `tag` like '%s' or tag like '%s' )) ",
+ dbesc(protect_sprintf('%' . $myurl)),
+ dbesc(protect_sprintf('%' . $myurl . ']%')),
+ dbesc(protect_sprintf('%' . $diasp_url . ']%'))
+ );
+ }
if($update) {
@@ -511,7 +534,7 @@ function network_content(&$a, $update = 0) {
$parents_str = implode(', ', $parents_arr);
$items = q("SELECT `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`, `contact`.`writable`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item`, `contact`
diff --git a/mod/notes.php b/mod/notes.php
index e6e2b44fb..625bbd2ee 100644
--- a/mod/notes.php
+++ b/mod/notes.php
@@ -80,8 +80,9 @@ function notes_content(&$a,$update = false) {
$r = q("SELECT COUNT(*) AS `total`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
- WHERE `item`.`uid` = %d AND `item`.`visible` = 1 and `item`.`moderated` = 0 AND `item`.`deleted` = 0
- AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ WHERE `item`.`uid` = %d AND `item`.`visible` = 1 and `item`.`moderated` = 0
+ AND `item`.`deleted` = 0 AND `item`.`type` = 'note'
+ AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `contact`.`self` = 1
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 0
$sql_extra ",
intval(local_user())
@@ -95,8 +96,9 @@ function notes_content(&$a,$update = false) {
$r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
- WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0
- AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+ and `item`.`moderated` = 0 AND `item`.`type` = 'note'
+ AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `contact`.`self` = 1
AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 0
$sql_extra
ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
@@ -115,7 +117,7 @@ function notes_content(&$a,$update = false) {
$parents_str = implode(', ', $parents_arr);
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`network`, `contact`.`rel`,
`contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
diff --git a/mod/photo.php b/mod/photo.php
index 1d38fe8e4..3cd8250a9 100644
--- a/mod/photo.php
+++ b/mod/photo.php
@@ -28,6 +28,8 @@ function photo_init(&$a) {
}
}*/
+ $prvcachecontrol = false;
+
switch($a->argc) {
case 4:
$person = $a->argv[3];
@@ -134,6 +136,7 @@ function photo_init(&$a) {
);
if(count($r)) {
$data = file_get_contents('images/nosign.jpg');
+ $prvcachecontrol = true;
}
}
}
@@ -179,8 +182,22 @@ function photo_init(&$a) {
}
header("Content-type: image/jpeg");
- header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT");
- header("Cache-Control: max-age=" . (3600*24));
+
+ if($prvcachecontrol) {
+
+ // it is a private photo that they have no permission to view.
+ // tell the browser not to cache it, in case they authenticate
+ // and subsequently have permission to see it
+
+ header("Cache-Control: no-store, no-cache, must-revalidate");
+
+ }
+ else {
+
+ header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT");
+ header("Cache-Control: max-age=" . (3600*24));
+
+ }
echo $data;
killme();
// NOTREACHED
diff --git a/mod/photos.php b/mod/photos.php
index 8da94841e..3ce6f9934 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -287,6 +287,7 @@ function photos_post(&$a) {
if(($a->argc > 2) && ((x($_POST,'desc') !== false) || (x($_POST,'newtag') !== false)) || (x($_POST,'albname') !== false)) {
+
$desc = ((x($_POST,'desc')) ? notags(trim($_POST['desc'])) : '');
$rawtags = ((x($_POST,'newtag')) ? notags(trim($_POST['newtag'])) : '');
$item_id = ((x($_POST,'item_id')) ? intval($_POST['item_id']) : 0);
@@ -300,7 +301,61 @@ function photos_post(&$a) {
if(! strlen($albname))
$albname = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y');
+
+
+ if((x($_POST,'rotate') !== false) && (intval($_POST['rotate']) == 1)) {
+ logger('rotate');
+
+ $r = q("select * from photo where `resource-id` = '%s' and uid = %d and scale = 0 limit 1",
+ dbesc($resource_id),
+ intval($page_owner_uid)
+ );
+ if(count($r)) {
+ $ph = new Photo($r[0]['data']);
+ if($ph->is_valid()) {
+ $ph->rotate(270);
+
+ $width = $ph->getWidth();
+ $height = $ph->getHeight();
+
+ $x = q("update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 0 limit 1",
+ dbesc($ph->imageString()),
+ intval($height),
+ intval($width),
+ dbesc($resource_id),
+ intval($page_owner_uid)
+ );
+
+ if($width > 640 || $height > 640) {
+ $ph->scaleImage(640);
+ $width = $ph->getWidth();
+ $height = $ph->getHeight();
+ $x = q("update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 1 limit 1",
+ dbesc($ph->imageString()),
+ intval($height),
+ intval($width),
+ dbesc($resource_id),
+ intval($page_owner_uid)
+ );
+ }
+
+ if($width > 320 || $height > 320) {
+ $ph->scaleImage(320);
+ $width = $ph->getWidth();
+ $height = $ph->getHeight();
+
+ $x = q("update photo set data = '%s', height = %d, width = %d where `resource-id` = '%s' and uid = %d and scale = 2 limit 1",
+ dbesc($ph->imageString()),
+ intval($height),
+ intval($width),
+ dbesc($resource_id),
+ intval($page_owner_uid)
+ );
+ }
+ }
+ }
+ }
$p = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ORDER BY `scale` DESC",
dbesc($resource_id),
@@ -977,9 +1032,16 @@ function photos_content(&$a) {
$tpl = get_markup_template('photo_album.tpl');
if(count($r))
+ $twist = 'rotright';
foreach($r as $rr) {
+ if($twist == 'rotright')
+ $twist = 'rotleft';
+ else
+ $twist = 'rotright';
+
$o .= replace_macros($tpl,array(
'$id' => $rr['id'],
+ '$twist' => ' ' . $twist . rand(2,4),
'$photolink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'],
'$phototitle' => t('View Photo'),
'$imgsrc' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.jpg',
@@ -1098,7 +1160,7 @@ function photos_content(&$a) {
$photo = array(
'href' => $a->get_baseurl() . '/photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg',
'title'=> t('View Full Size'),
- 'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg'
+ 'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg' . '?f=&_u=' . datetime_convert('','','','ymdhis')
);
if($nextlink)
@@ -1178,6 +1240,7 @@ function photos_content(&$a) {
$edit_tpl = get_markup_template('photo_edit.tpl');
$edit = replace_macros($edit_tpl, array(
'$id' => $ph[0]['id'],
+ '$rotate' => t('Rotate CW'),
'$album' => template_escape($ph[0]['album']),
'$newalbum' => t('New album name'),
'$nickname' => $a->data['user']['nickname'],
@@ -1400,9 +1463,16 @@ function photos_content(&$a) {
$photos = array();
if(count($r)) {
+ $twist = 'rotright';
foreach($r as $rr) {
+ if($twist == 'rotright')
+ $twist = 'rotleft';
+ else
+ $twist = 'rotright';
+
$photos[] = array(
'id' => $rr['id'],
+ 'twist' => ' ' . $twist . rand(2,4),
'link' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'],
'title' => t('View Photo'),
'src' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.jpg',
diff --git a/mod/ping.php b/mod/ping.php
index 63aaa0f45..55dcb26bb 100644
--- a/mod/ping.php
+++ b/mod/ping.php
@@ -10,8 +10,16 @@ function ping_init(&$a) {
<result>";
$xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">";
+
if(local_user()){
+ // Different login session than the page that is calling us.
+
+ if(intval($_GET['uid']) && intval($_GET['uid']) != local_user()) {
+ echo '<invalid>1</invalid></result>';
+ killme();
+ }
+
$firehose = intval(get_pconfig(local_user(),'system','notify_full'));
$t = q("select count(*) as total from notify where uid = %d and seen = 0",
diff --git a/mod/profile.php b/mod/profile.php
index 69f044e89..7658a9647 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -242,7 +242,7 @@ function profile_content(&$a, $update = 0) {
$parents_str = implode(', ', $parents_arr);
$items = q("SELECT `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`network`, `contact`.`rel`,
`contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item`, `contact`
diff --git a/mod/profiles.php b/mod/profiles.php
index c72a233c2..6a8ce9e1e 100644
--- a/mod/profiles.php
+++ b/mod/profiles.php
@@ -62,9 +62,15 @@ function profiles_post(&$a) {
$pub_keywords = notags(trim($_POST['pub_keywords']));
$prv_keywords = notags(trim($_POST['prv_keywords']));
$marital = notags(trim($_POST['marital']));
+ $howlong = notags(trim($_POST['howlong']));
$with = ((x($_POST,'with')) ? notags(trim($_POST['with'])) : '');
+ if(! strlen($howlong))
+ $howlong = '0000-00-00 00:00:00';
+ else
+ $howlong = datetime_convert(date_default_timezone_get(),'UTC',$howlong);
+
// linkify the relationship target if applicable
$withchanged = false;
@@ -120,6 +126,7 @@ function profiles_post(&$a) {
$sexual = notags(trim($_POST['sexual']));
$homepage = notags(trim($_POST['homepage']));
+ $hometown = notags(trim($_POST['hometown']));
$politic = notags(trim($_POST['politic']));
$religion = notags(trim($_POST['religion']));
@@ -146,7 +153,7 @@ function profiles_post(&$a) {
$value = $marital;
}
if($withchanged) {
- $changes[] = '&hearts; ' . t('Romantic Partner');
+ $changes[] = '[color=#ff0000]&hearts;[/color] ' . t('Romantic Partner');
$value = strip_tags($with);
}
if($work != $orig[0]['work']) {
@@ -176,9 +183,18 @@ function profiles_post(&$a) {
$changes[] = t('Interests');
$value = $interest;
}
- if($address != $orig[0]['address'] || $locality != $orig[0]['locality'] || $region != $orig[0]['region']
+ if($address != $orig[0]['address']) {
+ $changes[] = t('Address');
+ // New address not sent in notifications, potential privacy issues
+ // in case this leaks to unintended recipients. Yes, it's in the public
+ // profile but that doesn't mean we have to broadcast it to everybody.
+ }
+ if($locality != $orig[0]['locality'] || $region != $orig[0]['region']
|| $country_name != $orig[0]['country-name']) {
$changes[] = t('Location');
+ $comma1 = ((($locality) && ($region || $country_name)) ? ', ' : ' ');
+ $comma2 = (($region && $country_name) ? ', ' : '');
+ $value = $locality . $comma1 . $region . $comma2 . $country_name;
}
profile_activity($changes,$value);
@@ -198,8 +214,10 @@ function profiles_post(&$a) {
`country-name` = '%s',
`marital` = '%s',
`with` = '%s',
+ `howlong` = '%s',
`sexual` = '%s',
`homepage` = '%s',
+ `hometown` = '%s',
`politic` = '%s',
`religion` = '%s',
`pub_keywords` = '%s',
@@ -228,8 +246,10 @@ function profiles_post(&$a) {
dbesc($country_name),
dbesc($marital),
dbesc($with),
+ dbesc($howlong),
dbesc($sexual),
dbesc($homepage),
+ dbesc($hometown),
dbesc($politic),
dbesc($religion),
dbesc($pub_keywords),
@@ -329,7 +349,7 @@ function profile_activity($changed, $value) {
if($t == 1 && strlen($value)) {
$message = sprintf( t('%1$s changed %2$s to &ldquo;%3$s&rdquo;'), $A, $changes, $value);
- $message .= "\n\n" . sprintf( t(" - Visit %1$s\'s %2$s"), $A, $prof);
+ $message .= "\n\n" . sprintf( t(' - Visit %1$s\'s %2$s'), $A, $prof);
}
else
$message = sprintf( t('%1$s has an updated %2$s, changing %3$s.'), $A, $prof, $changes);
@@ -549,8 +569,10 @@ function profiles_content(&$a) {
'$lbl_marital' => t('<span class="heart">&hearts;</span> Marital Status:'),
'$lbl_with' => t("Who: \x28if applicable\x29"),
'$lbl_ex1' => t('Examples: cathy123, Cathy Williams, cathy@example.com'),
+ '$lbl_howlong' => t('Since [date]:'),
'$lbl_sexual' => t('Sexual Preference:'),
'$lbl_homepage' => t('Homepage URL:'),
+ '$lbl_hometown' => t('Hometown:'),
'$lbl_politic' => t('Political Views:'),
'$lbl_religion' => t('Religious Views:'),
'$lbl_pubkey' => t('Public Keywords:'),
@@ -586,9 +608,11 @@ function profiles_content(&$a) {
'$gender' => gender_selector($r[0]['gender']),
'$marital' => marital_selector($r[0]['marital']),
'$with' => strip_tags($r[0]['with']),
+ '$howlong' => ($r[0]['howlong'] === '0000-00-00 00:00:00' ? '' : datetime_convert('UTC',date_default_timezone_get(),$r[0]['howlong'])),
'$sexual' => sexpref_selector($r[0]['sexual']),
'$about' => $r[0]['about'],
'$homepage' => $r[0]['homepage'],
+ '$hometown' => $r[0]['hometown'],
'$politic' => $r[0]['politic'],
'$religion' => $r[0]['religion'],
'$pub_keywords' => $r[0]['pub_keywords'],
diff --git a/mod/redir.php b/mod/redir.php
index 9223e5483..0f7b5cc23 100644
--- a/mod/redir.php
+++ b/mod/redir.php
@@ -6,7 +6,7 @@ function redir_init(&$a) {
// traditional DFRN
- if(local_user() && $a->argc == 2 && intval($a->argv[1])) {
+ if(local_user() && $a->argc > 1 && intval($a->argv[1])) {
$cid = $a->argv[1];
diff --git a/mod/register.php b/mod/register.php
index b60707d45..d52b5a6e1 100644
--- a/mod/register.php
+++ b/mod/register.php
@@ -43,347 +43,49 @@ function register_post(&$a) {
break;
}
- $using_invites = get_config('system','invitation_only');
- $num_invites = get_config('system','number_invites');
-
-
- $invite_id = ((x($_POST,'invite_id')) ? notags(trim($_POST['invite_id'])) : '');
- $username = ((x($_POST,'username')) ? notags(trim($_POST['username'])) : '');
- $nickname = ((x($_POST,'nickname')) ? notags(trim($_POST['nickname'])) : '');
- $email = ((x($_POST,'email')) ? notags(trim($_POST['email'])) : '');
- $openid_url = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url'])) : '');
- $photo = ((x($_POST,'photo')) ? notags(trim($_POST['photo'])) : '');
- $publish = ((x($_POST,'profile_publish_reg') && intval($_POST['profile_publish_reg'])) ? 1 : 0);
-
- $netpublish = ((strlen(get_config('system','directory_submit_url'))) ? $publish : 0);
-
- $tmp_str = $openid_url;
-
- if($using_invites) {
- if(! $invite_id) {
- notice( t('An invitation is required.') . EOL);
- return;
- }
- $r = q("select * from register where `hash` = '%s' limit 1", dbesc($invite_id));
- if(! results($r)) {
- notice( t('Invitation could not be verified.') . EOL);
- return;
- }
- }
-
- if((! x($username)) || (! x($email)) || (! x($nickname))) {
- if($openid_url) {
- if(! validate_url($tmp_str)) {
- notice( t('Invalid OpenID url') . EOL);
- return;
- }
- $_SESSION['register'] = 1;
- $_SESSION['openid'] = $openid_url;
- require_once('library/openid.php');
- $openid = new LightOpenID;
- $openid->identity = $openid_url;
- $openid->returnUrl = $a->get_baseurl() . '/openid';
- $openid->required = array('namePerson/friendly', 'contact/email', 'namePerson');
- $openid->optional = array('namePerson/first','media/image/aspect11','media/image/default');
- goaway($openid->authUrl());
- // NOTREACHED
- }
-
- notice( t('Please enter the required information.') . EOL );
- return;
- }
-
- if(! validate_url($tmp_str))
- $openid_url = '';
-
-
- $err = '';
+ require_once('include/user.php');
- // collapse multiple spaces in name
- $username = preg_replace('/ +/',' ',$username);
+ $arr = $_POST;
- if(mb_strlen($username) > 48)
- $err .= t('Please use a shorter name.') . EOL;
- if(mb_strlen($username) < 3)
- $err .= t('Name too short.') . EOL;
-
- // I don't really like having this rule, but it cuts down
- // on the number of auto-registrations by Russian spammers
-
- // Using preg_match was completely unreliable, due to mixed UTF-8 regex support
- // $no_utf = get_config('system','no_utf');
- // $pat = (($no_utf) ? '/^[a-zA-Z]* [a-zA-Z]*$/' : '/^\p{L}* \p{L}*$/u' );
-
- // So now we are just looking for a space in the full name.
-
- $loose_reg = get_config('system','no_regfullname');
- if(! $loose_reg) {
- $username = mb_convert_case($username,MB_CASE_TITLE,'UTF-8');
- if(! strpos($username,' '))
- $err .= t("That doesn't appear to be your full \x28First Last\x29 name.") . EOL;
- }
+ $arr['blocked'] = $blocked;
+ $arr['verified'] = $verified;
+ $result = create_user($arr);
- if(! allowed_email($email))
- $err .= t('Your email domain is not among those allowed on this site.') . EOL;
-
- if((! valid_email($email)) || (! validate_email($email)))
- $err .= t('Not a valid email address.') . EOL;
-
- // Disallow somebody creating an account using openid that uses the admin email address,
- // since openid bypasses email verification. We'll allow it if there is not yet an admin account.
-
- if((x($a->config,'admin_email')) && (strcasecmp($email,$a->config['admin_email']) == 0) && strlen($openid_url)) {
- $r = q("SELECT * FROM `user` WHERE `email` = '%s' LIMIT 1",
- dbesc($email)
- );
- if(count($r))
- $err .= t('Cannot use that email.') . EOL;
- }
-
- $nickname = $_POST['nickname'] = strtolower($nickname);
-
- if(! preg_match("/^[a-z][a-z0-9\-\_]*$/",$nickname))
- $err .= t('Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.') . EOL;
- $r = q("SELECT `uid` FROM `user`
- WHERE `nickname` = '%s' LIMIT 1",
- dbesc($nickname)
- );
- if(count($r))
- $err .= t('Nickname is already registered. Please choose another.') . EOL;
-
- // Check deleted accounts that had this nickname. Doesn't matter to us,
- // but could be a security issue for federated platforms.
-
- $r = q("SELECT * FROM `userd`
- WHERE `username` = '%s' LIMIT 1",
- dbesc($nickname)
- );
- if(count($r))
- $err .= t('Nickname was once registered here and may not be re-used. Please choose another.') . EOL;
-
- if(strlen($err)) {
- notice( $err );
+ if(! $result['success']) {
+ notice($result['message']);
return;
}
-
- $new_password = autoname(6) . mt_rand(100,9999);
- $new_password_encoded = hash('whirlpool',$new_password);
-
- $res=openssl_pkey_new(array(
- 'digest_alg' => 'sha1',
- 'private_key_bits' => 4096,
- 'encrypt_key' => false ));
-
- // Get private key
-
- if(empty($res)) {
- notice( t('SERIOUS ERROR: Generation of security keys failed.') . EOL);
- return;
- }
-
- $prvkey = '';
-
- openssl_pkey_export($res, $prvkey);
-
- // Get public key
-
- $pkey = openssl_pkey_get_details($res);
- $pubkey = $pkey["key"];
-
- /**
- *
- * Create another keypair for signing/verifying
- * salmon protocol messages. We have to use a slightly
- * less robust key because this won't be using openssl
- * but the phpseclib. Since it is PHP interpreted code
- * it is not nearly as efficient, and the larger keys
- * will take several minutes each to process.
- *
- */
-
- $sres=openssl_pkey_new(array(
- 'digest_alg' => 'sha1',
- 'private_key_bits' => 512,
- 'encrypt_key' => false ));
-
- // Get private key
-
- $sprvkey = '';
-
- openssl_pkey_export($sres, $sprvkey);
-
- // Get public key
-
- $spkey = openssl_pkey_get_details($sres);
- $spubkey = $spkey["key"];
-
- $r = q("INSERT INTO `user` ( `guid`, `username`, `password`, `email`, `openid`, `nickname`,
- `pubkey`, `prvkey`, `spubkey`, `sprvkey`, `register_date`, `verified`, `blocked`, `timezone` )
- VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, 'UTC' )",
- dbesc(generate_user_guid()),
- dbesc($username),
- dbesc($new_password_encoded),
- dbesc($email),
- dbesc($openid_url),
- dbesc($nickname),
- dbesc($pubkey),
- dbesc($prvkey),
- dbesc($spubkey),
- dbesc($sprvkey),
- dbesc(datetime_convert()),
- intval($verified),
- intval($blocked)
- );
-
- if($r) {
- $r = q("SELECT `uid` FROM `user`
- WHERE `username` = '%s' AND `password` = '%s' LIMIT 1",
- dbesc($username),
- dbesc($new_password_encoded)
- );
- if($r !== false && count($r))
- $newuid = intval($r[0]['uid']);
- }
- else {
- notice( t('An error occurred during registration. Please try again.') . EOL );
- return;
- }
-
- /**
- * if somebody clicked submit twice very quickly, they could end up with two accounts
- * due to race condition. Remove this one.
- */
-
- $r = q("SELECT `uid` FROM `user`
- WHERE `nickname` = '%s' ",
- dbesc($nickname)
- );
- if((count($r) > 1) && $newuid) {
- $err .= t('Nickname is already registered. Please choose another.') . EOL;
- q("DELETE FROM `user` WHERE `uid` = %d LIMIT 1",
- intval($newuid)
- );
- notice ($err);
- return;
- }
-
- if(x($newuid) !== false) {
- $r = q("INSERT INTO `profile` ( `uid`, `profile-name`, `is-default`, `name`, `photo`, `thumb`, `publish`, `net-publish` )
- VALUES ( %d, '%s', %d, '%s', '%s', '%s', %d, %d ) ",
- intval($newuid),
- 'default',
- 1,
- dbesc($username),
- dbesc($a->get_baseurl() . "/photo/profile/{$newuid}.jpg"),
- dbesc($a->get_baseurl() . "/photo/avatar/{$newuid}.jpg"),
- intval($publish),
- intval($netpublish)
-
- );
- if($r === false) {
- notice( t('An error occurred creating your default profile. Please try again.') . EOL );
- // Start fresh next time.
- $r = q("DELETE FROM `user` WHERE `uid` = %d",
- intval($newuid));
- return;
- }
- $r = q("INSERT INTO `contact` ( `uid`, `created`, `self`, `name`, `nick`, `photo`, `thumb`, `micro`, `blocked`, `pending`, `url`, `nurl`,
- `request`, `notify`, `poll`, `confirm`, `poco`, `name-date`, `uri-date`, `avatar-date`, `closeness` )
- VALUES ( %d, '%s', 1, '%s', '%s', '%s', '%s', '%s', 0, 0, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 0 ) ",
- intval($newuid),
- datetime_convert(),
- dbesc($username),
- dbesc($nickname),
- dbesc($a->get_baseurl() . "/photo/profile/{$newuid}.jpg"),
- dbesc($a->get_baseurl() . "/photo/avatar/{$newuid}.jpg"),
- dbesc($a->get_baseurl() . "/photo/micro/{$newuid}.jpg"),
- dbesc($a->get_baseurl() . "/profile/$nickname"),
- dbesc(normalise_link($a->get_baseurl() . "/profile/$nickname")),
- dbesc($a->get_baseurl() . "/dfrn_request/$nickname"),
- dbesc($a->get_baseurl() . "/dfrn_notify/$nickname"),
- dbesc($a->get_baseurl() . "/dfrn_poll/$nickname"),
- dbesc($a->get_baseurl() . "/dfrn_confirm/$nickname"),
- dbesc($a->get_baseurl() . "/poco/$nickname"),
- dbesc(datetime_convert()),
- dbesc(datetime_convert()),
- dbesc(datetime_convert())
- );
-
-
- }
-
- // if we have no OpenID photo try to look up an avatar
- if(! strlen($photo))
- $photo = avatar_img($email);
-
- // unless there is no avatar-plugin loaded
- if(strlen($photo)) {
- require_once('include/Photo.php');
- $photo_failure = false;
-
- $filename = basename($photo);
- $img_str = fetch_url($photo,true);
- $img = new Photo($img_str);
- if($img->is_valid()) {
-
- $img->scaleImageSquare(175);
-
- $hash = photo_new_resource();
-
- $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 4 );
-
- if($r === false)
- $photo_failure = true;
-
- $img->scaleImage(80);
-
- $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 5 );
-
- if($r === false)
- $photo_failure = true;
-
- $img->scaleImage(48);
-
- $r = $img->store($newuid, 0, $hash, $filename, t('Profile Photos'), 6 );
-
- if($r === false)
- $photo_failure = true;
-
- if(! $photo_failure) {
- q("UPDATE `photo` SET `profile` = 1 WHERE `resource-id` = '%s' ",
- dbesc($hash)
- );
- }
- }
- }
-
+ $user = $result['user'];
+
if($netpublish && $a->config['register_policy'] != REGISTER_APPROVE) {
- $url = $a->get_baseurl() . "/profile/$nickname";
+ $url = $a->get_baseurl() . '/profile/' . $user['nickname'];
proc_run('php',"include/directory.php","$url");
}
+ $using_invites = get_config('system','invitation_only');
+ $num_invites = get_config('system','number_invites');
+ $invite_id = ((x($_POST,'invite_id')) ? notags(trim($_POST['invite_id'])) : '');
- call_hooks('register_account', $newuid);
if( $a->config['register_policy'] == REGISTER_OPEN ) {
if($using_invites && $invite_id) {
q("delete * from register where hash = '%s' limit 1", dbesc($invite_id));
- set_pconfig($newuid,'system','invites_remaining',$num_invites);
+ set_pconfig($user['uid'],'system','invites_remaining',$num_invites);
}
$email_tpl = get_intltext_template("register_open_eml.tpl");
$email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
- '$username' => $username,
- '$email' => $email,
- '$password' => $new_password,
- '$uid' => $newuid ));
+ '$username' => $user['username'],
+ '$email' => $user['email'],
+ '$password' => $result['password'],
+ '$uid' => $user['uid'] ));
- $res = mail($email, sprintf(t('Registration details for %s'), $a->config['sitename']),
+ $res = mail($user['email'], sprintf(t('Registration details for %s'), $a->config['sitename']),
$email_tpl,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
@@ -408,8 +110,8 @@ function register_post(&$a) {
$r = q("INSERT INTO `register` ( `hash`, `created`, `uid`, `password`, `language` ) VALUES ( '%s', '%s', %d, '%s', '%s' ) ",
dbesc($hash),
dbesc(datetime_convert()),
- intval($newuid),
- dbesc($new_password),
+ intval($user['uid']),
+ dbesc($result['password']),
dbesc($lang)
);
@@ -423,17 +125,17 @@ function register_post(&$a) {
if($using_invites && $invite_id) {
q("delete * from register where hash = '%s' limit 1", dbesc($invite_id));
- set_pconfig($newuid,'system','invites_remaining',$num_invites);
+ set_pconfig($user['uid'],'system','invites_remaining',$num_invites);
}
$email_tpl = get_intltext_template("register_verify_eml.tpl");
$email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
- '$username' => $username,
- '$email' => $email,
- '$password' => $new_password,
- '$uid' => $newuid,
+ '$username' => $user['username'],
+ '$email' => $user['email'],
+ '$password' => $result['password'],
+ '$uid' => $user['uid'],
'$hash' => $hash
));
diff --git a/mod/search.php b/mod/search.php
index d467764b0..320ffddce 100644
--- a/mod/search.php
+++ b/mod/search.php
@@ -71,7 +71,7 @@ function search_content(&$a) {
notice( t('Public access denied.') . EOL);
return;
}
-
+
nav_set_selected('search');
require_once("include/bbcode.php");
@@ -80,7 +80,7 @@ function search_content(&$a) {
$o = '<div id="live-search"></div>' . "\r\n";
- $o .= '<h3>' . t('Search This Site') . '</h3>';
+ $o .= '<h3>' . t('Search') . '</h3>';
if(x($a->data,'search'))
$search = notags(trim($a->data['search']));
@@ -96,13 +96,29 @@ function search_content(&$a) {
$o .= search($search,'search-box','/search',((local_user()) ? true : false));
+ if(strpos($search,'#') === 0) {
+ $tag = true;
+ $search = substr($search,1);
+ }
+ if(strpos($search,'@') === 0) {
+ require_once('mod/dirfind.php');
+ return dirfind_content($a);
+ }
+
if(! $search)
return $o;
- if($tag)
- $sql_extra = sprintf(" AND `item`.`tag` REGEXP '%s' ", dbesc('\\]' . preg_quote($search) . '\\['));
- else
- $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(preg_quote($search)));
+ if (get_config('system','use_fulltext_engine')) {
+ if($tag)
+ $sql_extra = sprintf(" AND MATCH (`item`.`tag`) AGAINST ('".'"%s"'."' in boolean mode) ", '#'.dbesc(protect_sprintf($search)));
+ else
+ $sql_extra = sprintf(" AND MATCH (`item`.`body`) AGAINST ('".'"%s"'."' in boolean mode) ", dbesc(protect_sprintf($search)));
+ } else {
+ if($tag)
+ $sql_extra = sprintf(" AND `item`.`tag` REGEXP '%s' ", dbesc('\\]' . protect_sprintf(preg_quote($search)) . '\\['));
+ else
+ $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search))));
+ }
@@ -130,7 +146,7 @@ function search_content(&$a) {
}
$r = q("SELECT distinct(`item`.`uri`), `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`alias`, `contact`.`rel`,
`contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,
`user`.`nickname`
diff --git a/mod/settings.php b/mod/settings.php
index 5f5b2ab2e..92593d7a8 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -15,6 +15,7 @@ function get_theme_config_file($theme){
}
function settings_init(&$a) {
+
// These lines provide the javascript needed by the acl selector
$a->page['htmlhead'] .= "<script> var ispublic = '" . t('everybody') . "';" ;
@@ -86,6 +87,7 @@ EOT;
$tabtpl = get_markup_template("generic_links_widget.tpl");
$a->page['aside'] = replace_macros($tabtpl, array(
'$title' => t('Settings'),
+ '$class' => 'settings-widget',
'$items' => $tabs,
));
@@ -330,14 +332,14 @@ function settings_post(&$a) {
$openid = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url'])) : '');
$maxreq = ((x($_POST,'maxreq')) ? intval($_POST['maxreq']) : 0);
$expire = ((x($_POST,'expire')) ? intval($_POST['expire']) : 0);
+ $def_gid = ((x($_POST,'group-selection')) ? intval($_POST['group-selection']) : 0);
$expire_items = ((x($_POST,'expire_items')) ? intval($_POST['expire_items']) : 0);
$expire_notes = ((x($_POST,'expire_notes')) ? intval($_POST['expire_notes']) : 0);
$expire_starred = ((x($_POST,'expire_starred')) ? intval($_POST['expire_starred']) : 0);
$expire_photos = ((x($_POST,'expire_photos'))? intval($_POST['expire_photos']) : 0);
-
-
+ $expire_network_only = ((x($_POST,'expire_network_only'))? intval($_POST['expire_network_only']) : 0);
$allow_location = (((x($_POST,'allow_location')) && (intval($_POST['allow_location']) == 1)) ? 1: 0);
$publish = (((x($_POST,'profile_in_directory')) && (intval($_POST['profile_in_directory']) == 1)) ? 1: 0);
@@ -355,7 +357,6 @@ function settings_post(&$a) {
$post_joingroup = (($_POST['post_joingroup'] == 1) ? 1: 0);
$post_profilechange = (($_POST['post_profilechange'] == 1) ? 1: 0);
-
$notify = 0;
if(x($_POST,'notify1'))
@@ -434,6 +435,7 @@ function settings_post(&$a) {
set_pconfig(local_user(),'expire','notes', $expire_notes);
set_pconfig(local_user(),'expire','starred', $expire_starred);
set_pconfig(local_user(),'expire','photos', $expire_photos);
+ set_pconfig(local_user(),'expire','network_only', $expire_network_only);
set_pconfig(local_user(),'system','suggestme', $suggestme);
set_pconfig(local_user(),'system','post_newfriend', $post_newfriend);
@@ -441,7 +443,20 @@ function settings_post(&$a) {
set_pconfig(local_user(),'system','post_profilechange', $post_profilechange);
- $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `blockwall` = %d, `hidewall` = %d, `blocktags` = %d, `unkmail` = %d, `cntunkmail` = %d WHERE `uid` = %d LIMIT 1",
+ if($page_flags == PAGE_PRVGROUP) {
+ $hidewall = 1;
+ if((! $str_contact_allow) && (! $str_group_allow) && (! $str_contact_deny) && (! $str_group_deny)) {
+ if($def_gid) {
+ info( t('Private forum has no privacy permissions. Using default privacy group.'). EOL);
+ $str_group_allow = '<' . $def_gid . '>';
+ }
+ else {
+ notice( t('Private forum has no privacy permissions and no default privacy group.') . EOL);
+ }
+ }
+ }
+
+ $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `def_gid` = %d, `blockwall` = %d, `hidewall` = %d, `blocktags` = %d, `unkmail` = %d, `cntunkmail` = %d WHERE `uid` = %d LIMIT 1",
dbesc($username),
dbesc($email),
dbesc($openid),
@@ -457,6 +472,7 @@ function settings_post(&$a) {
intval($maxreq),
intval($expire),
dbesc($openidserver),
+ intval($def_gid),
intval($blockwall),
intval($hidewall),
intval($blocktags),
@@ -797,6 +813,9 @@ function settings_content(&$a) {
$expire_photos = get_pconfig(local_user(), 'expire','photos');
$expire_photos = (($expire_photos===false)? '0' : $expire_photos); // default if not set: 0
+ $expire_network_only = get_pconfig(local_user(), 'expire','network_only');
+ $expire_network_only = (($expire_network_only===false)? '0' : $expire_network_only); // default if not set: 0
+
$suggestme = get_pconfig(local_user(), 'system','suggestme');
$suggestme = (($suggestme===false)? '0': $suggestme); // default if not set: 0
@@ -818,21 +837,27 @@ function settings_content(&$a) {
$pageset_tpl = get_markup_template('pagetypes.tpl');
$pagetype = replace_macros($pageset_tpl,array(
- '$page_normal' => array('page-flags', t('Normal Account'), PAGE_NORMAL,
+ '$page_normal' => array('page-flags', t('Normal Account Page'), PAGE_NORMAL,
t('This account is a normal personal profile'),
($a->user['page-flags'] == PAGE_NORMAL)),
- '$page_soapbox' => array('page-flags', t('Soapbox Account'), PAGE_SOAPBOX,
+ '$page_soapbox' => array('page-flags', t('Soapbox Page'), PAGE_SOAPBOX,
t('Automatically approve all connection/friend requests as read-only fans'),
($a->user['page-flags'] == PAGE_SOAPBOX)),
- '$page_community' => array('page-flags', t('Community/Celebrity Account'), PAGE_COMMUNITY,
+ '$page_community' => array('page-flags', t('Community Forum/Celebrity Account'), PAGE_COMMUNITY,
t('Automatically approve all connection/friend requests as read-write fans'),
($a->user['page-flags'] == PAGE_COMMUNITY)),
- '$page_freelove' => array('page-flags', t('Automatic Friend Account'), PAGE_FREELOVE,
+ '$page_freelove' => array('page-flags', t('Automatic Friend Page'), PAGE_FREELOVE,
t('Automatically approve all connection/friend requests as friends'),
($a->user['page-flags'] == PAGE_FREELOVE)),
+
+ '$page_prvgroup' => array('page-flags', t('Private Forum [Experimental]'), PAGE_PRVGROUP,
+ t('Private forum - approved members only'),
+ ($a->user['page-flags'] == PAGE_PRVGROUP)),
+
+
));
$noid = get_config('system','no_openid');
@@ -932,8 +957,12 @@ function settings_content(&$a) {
'notes' => array('expire_notes', t("Expire personal notes:"), $expire_notes, '', array(t('No'),t('Yes'))),
'starred' => array('expire_starred', t("Expire starred posts:"), $expire_starred, '', array(t('No'),t('Yes'))),
'photos' => array('expire_photos', t("Expire photos:"), $expire_photos, '', array(t('No'),t('Yes'))),
+ 'network_only' => array('expire_network_only', t("Only expire posts by others:"), $expire_network_only, '', array(t('No'),t('Yes'))),
);
+ require_once('include/group.php');
+ $group_select = mini_group_select(local_user(),$a->user['def_gid']);
+
$o .= replace_macros($stpl,array(
'$ptitle' => t('Account Settings'),
@@ -941,7 +970,6 @@ function settings_content(&$a) {
'$baseurl' => $a->get_baseurl(true),
'$uid' => local_user(),
'$form_security_token' => get_form_security_token("settings"),
-
'$nickname_block' => $prof_addr,
'$h_pass' => t('Password Settings'),
@@ -968,6 +996,10 @@ function settings_content(&$a) {
'$suggestme' => $suggestme,
'$blockwall'=> $blockwall, // array('blockwall', t('Allow friends to post to your profile page:'), !$blockwall, ''),
'$blocktags'=> $blocktags, // array('blocktags', t('Allow friends to tag your posts:'), !$blocktags, ''),
+
+ '$group_select' => $group_select,
+
+
'$expire' => $expire_arr,
'$profile_in_dir' => $profile_in_dir,
@@ -993,7 +1025,8 @@ function settings_content(&$a) {
'$notify7' => array('notify7', t('You are tagged in a post'), ($notify & NOTIFY_TAGSELF), NOTIFY_TAGSELF, ''),
- '$h_advn' => t('Advanced Page Settings'),
+ '$h_advn' => t('Advanced Account/Page Type Settings'),
+ '$h_descadvn' => t('Change the behaviour of this account for special situations'),
'$pagetype' => $pagetype,
diff --git a/mod/wallmessage.php b/mod/wallmessage.php
index 1a4882b64..cf349775c 100644
--- a/mod/wallmessage.php
+++ b/mod/wallmessage.php
@@ -44,7 +44,7 @@ function wallmessage_post(&$a) {
}
// Work around doubled linefeeds in Tinymce 3.5b2
-dbg(1);
+
$body = str_replace("\r\n","\n",$body);
$body = str_replace("\n\n","\n",$body);
@@ -67,7 +67,7 @@ dbg(1);
default:
info( t('Message sent.') . EOL );
}
-dbg(0);
+
// goaway($a->get_baseurl() . '/profile/' . $user['nickname']);
}
diff --git a/update.php b/update.php
index e363aa942..35a6771b0 100644
--- a/update.php
+++ b/update.php
@@ -1,6 +1,6 @@
<?php
-define( 'UPDATE_VERSION' , 1143 );
+define( 'UPDATE_VERSION' , 1148 );
/**
*
@@ -1137,8 +1137,8 @@ INDEX ( `username` )
}
function update_1133() {
-q("ALTER TABLE `user` ADD `unkmail` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `blocktags` , ADD INDEX ( `unkmail` ) ");
-q("ALTER TABLE `user` ADD `cntunkmail` INT NOT NULL DEFAULT '10' AFTER `unkmail` , ADD INDEX ( `cntunkmail` ) ");
+q("ALTER TABLE `user` ADD `unkmail` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `blocktags` , ADD INDEX ( `unkmail` ) ");
+q("ALTER TABLE `user` ADD `cntunkmail` INT NOT NULL DEFAULT '10' AFTER `unkmail` , ADD INDEX ( `cntunkmail` ) ");
q("ALTER TABLE `mail` ADD `unknown` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `replied` , ADD INDEX ( `unknown` ) ");
}
@@ -1246,5 +1246,40 @@ function update_1142() {
return UPDATE_SUCCESS ;
}
+function update_1143() {
+ $r = q("alter table user add def_gid int(11) not null default '0' after service_class");
+ if(! $r)
+ return UPDATE_FAILED ;
+ return UPDATE_SUCCESS ;
+}
+
+function update_1144() {
+ $r = q("alter table contact add prv tinyint(1) not null default '0' after forum");
+ if(! $r)
+ return UPDATE_FAILED ;
+ return UPDATE_SUCCESS ;
+}
+
+function update_1145() {
+ $r = q("alter table profile add howlong datetime not null default '0000-00-00 00:00:00' after `with`");
+ if(! $r)
+ return UPDATE_FAILED ;
+ return UPDATE_SUCCESS ;
+}
+function update_1146() {
+ $r = q("alter table profile add hometown char(255) not null after `country-name`, add index ( `hometown` ) ");
+ if(! $r)
+ return UPDATE_FAILED ;
+ return UPDATE_SUCCESS ;
+}
+
+function update_1147() {
+ $r1 = q("ALTER TABLE `sign` ALTER `iid` SET DEFAULT '0'");
+ $r2 = q("ALTER TABLE `sign` ADD `retract_iid` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `iid`");
+ $r3 = q("ALTER TABLE `sign` ADD INDEX ( `retract_iid` )");
+ if((! $r1) || (! $r2) || (! $r3))
+ return UPDATE_FAILED ;
+ return UPDATE_SUCCESS ;
+}
diff --git a/util/db_update.php b/util/db_update.php
index 35620e80b..978594ab9 100644
--- a/util/db_update.php
+++ b/util/db_update.php
@@ -11,7 +11,7 @@ require_once("boot.php");
$a = new App;
@include(".htconfig.php");
-$lang = get_language();
+$lang = get_browser_language();
load_translation_table($lang);
require_once("dba.php");
diff --git a/util/messages.po b/util/messages.po
index 485dfd7b7..43368ced0 100644
--- a/util/messages.po
+++ b/util/messages.po
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 3.0.1338\n"
+"Project-Id-Version: 3.0.1363\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-10 10:00-0700\n"
+"POT-Creation-Date: 2012-06-03 10:00-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -36,11 +36,11 @@ msgstr ""
#: ../../mod/crepair.php:115 ../../mod/wall_attach.php:44
#: ../../mod/fsuggest.php:78 ../../mod/events.php:138 ../../mod/api.php:26
-#: ../../mod/api.php:31 ../../mod/photos.php:130 ../../mod/photos.php:865
-#: ../../mod/editpost.php:10 ../../mod/install.php:171
+#: ../../mod/api.php:31 ../../mod/photos.php:130 ../../mod/photos.php:920
+#: ../../mod/editpost.php:10 ../../mod/install.php:151
#: ../../mod/notifications.php:66 ../../mod/contacts.php:125
-#: ../../mod/settings.php:104 ../../mod/settings.php:521
-#: ../../mod/settings.php:526 ../../mod/manage.php:86 ../../mod/network.php:6
+#: ../../mod/settings.php:106 ../../mod/settings.php:537
+#: ../../mod/settings.php:542 ../../mod/manage.php:86 ../../mod/network.php:6
#: ../../mod/notes.php:20 ../../mod/wallmessage.php:9
#: ../../mod/wallmessage.php:33 ../../mod/wallmessage.php:79
#: ../../mod/wallmessage.php:103 ../../mod/attach.php:33
@@ -51,11 +51,11 @@ msgstr ""
#: ../../mod/profile_photo.php:163 ../../mod/message.php:44
#: ../../mod/message.php:96 ../../mod/allfriends.php:9
#: ../../mod/nogroup.php:25 ../../mod/wall_upload.php:53
-#: ../../mod/follow.php:8 ../../mod/display.php:138 ../../mod/profiles.php:7
-#: ../../mod/profiles.php:365 ../../mod/delegate.php:6
+#: ../../mod/follow.php:9 ../../mod/display.php:138 ../../mod/profiles.php:7
+#: ../../mod/profiles.php:385 ../../mod/delegate.php:6
#: ../../mod/suggest.php:28 ../../mod/invite.php:13 ../../mod/invite.php:81
-#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:495
-#: ../../include/items.php:3202 ../../index.php:306
+#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:503
+#: ../../include/items.php:3297 ../../index.php:306
msgid "Permission denied."
msgstr ""
@@ -84,8 +84,8 @@ msgstr ""
msgid "Return to contact editor"
msgstr ""
-#: ../../mod/crepair.php:148 ../../mod/settings.php:541
-#: ../../mod/settings.php:567 ../../mod/admin.php:643 ../../mod/admin.php:652
+#: ../../mod/crepair.php:148 ../../mod/settings.php:557
+#: ../../mod/settings.php:583 ../../mod/admin.php:656 ../../mod/admin.php:665
msgid "Name"
msgstr ""
@@ -122,27 +122,28 @@ msgid "New photo from this URL"
msgstr ""
#: ../../mod/crepair.php:166 ../../mod/fsuggest.php:107
-#: ../../mod/events.php:428 ../../mod/photos.php:900 ../../mod/photos.php:958
-#: ../../mod/photos.php:1193 ../../mod/photos.php:1233
-#: ../../mod/photos.php:1273 ../../mod/photos.php:1304
-#: ../../mod/install.php:251 ../../mod/install.php:289
+#: ../../mod/events.php:428 ../../mod/photos.php:955 ../../mod/photos.php:1013
+#: ../../mod/photos.php:1256 ../../mod/photos.php:1296
+#: ../../mod/photos.php:1336 ../../mod/photos.php:1367
+#: ../../mod/install.php:246 ../../mod/install.php:284
#: ../../mod/localtime.php:45 ../../mod/contacts.php:322
-#: ../../mod/settings.php:539 ../../mod/settings.php:685
-#: ../../mod/settings.php:746 ../../mod/settings.php:940
-#: ../../mod/manage.php:109 ../../mod/group.php:85 ../../mod/admin.php:404
-#: ../../mod/admin.php:640 ../../mod/admin.php:776 ../../mod/admin.php:975
-#: ../../mod/admin.php:1062 ../../mod/profiles.php:534
-#: ../../mod/invite.php:119 ../../addon/facebook/facebook.php:597
+#: ../../mod/settings.php:555 ../../mod/settings.php:701
+#: ../../mod/settings.php:762 ../../mod/settings.php:969
+#: ../../mod/manage.php:109 ../../mod/group.php:85 ../../mod/admin.php:417
+#: ../../mod/admin.php:653 ../../mod/admin.php:789 ../../mod/admin.php:988
+#: ../../mod/admin.php:1075 ../../mod/profiles.php:554
+#: ../../mod/invite.php:119 ../../addon/facebook/facebook.php:605
#: ../../addon/yourls/yourls.php:76 ../../addon/ljpost/ljpost.php:93
#: ../../addon/nsfw/nsfw.php:57 ../../addon/planets/planets.php:158
#: ../../addon/uhremotestorage/uhremotestorage.php:89
#: ../../addon/randplace/randplace.php:177 ../../addon/dwpost/dwpost.php:93
-#: ../../addon/drpost/drpost.php:110 ../../addon/geonames/geonames.php:187
-#: ../../addon/oembed.old/oembed.php:41 ../../addon/impressum/impressum.php:82
-#: ../../addon/blockem/blockem.php:57 ../../addon/qcomment/qcomment.php:61
+#: ../../addon/drpost/drpost.php:110 ../../addon/startpage/startpage.php:92
+#: ../../addon/geonames/geonames.php:187 ../../addon/oembed.old/oembed.php:41
+#: ../../addon/impressum/impressum.php:82 ../../addon/blockem/blockem.php:57
+#: ../../addon/qcomment/qcomment.php:61
#: ../../addon/openstreetmap/openstreetmap.php:70
#: ../../addon/mathjax/mathjax.php:42 ../../addon/editplain/editplain.php:84
-#: ../../addon/blackout/blackout.php:94 ../../addon/gravatar/gravatar.php:86
+#: ../../addon/blackout/blackout.php:98 ../../addon/gravatar/gravatar.php:86
#: ../../addon/pageheader/pageheader.php:55 ../../addon/ijpost/ijpost.php:93
#: ../../addon/jappixmini/jappixmini.php:302
#: ../../addon/statusnet/statusnet.php:278
@@ -150,18 +151,18 @@ msgstr ""
#: ../../addon/statusnet/statusnet.php:318
#: ../../addon/statusnet/statusnet.php:325
#: ../../addon/statusnet/statusnet.php:353
-#: ../../addon/statusnet/statusnet.php:553 ../../addon/tumblr/tumblr.php:90
+#: ../../addon/statusnet/statusnet.php:561 ../../addon/tumblr/tumblr.php:90
#: ../../addon/numfriends/numfriends.php:85 ../../addon/gnot/gnot.php:88
-#: ../../addon/wppost/wppost.php:102 ../../addon/showmore/showmore.php:48
+#: ../../addon/wppost/wppost.php:109 ../../addon/showmore/showmore.php:48
#: ../../addon/piwik/piwik.php:89 ../../addon/twitter/twitter.php:180
-#: ../../addon/twitter/twitter.php:209 ../../addon/twitter/twitter.php:375
+#: ../../addon/twitter/twitter.php:209 ../../addon/twitter/twitter.php:381
#: ../../addon/irc/irc.php:55 ../../addon/blogger/blogger.php:102
#: ../../addon/posterous/posterous.php:103
#: ../../view/theme/cleanzero/config.php:80
-#: ../../view/theme/diabook/theme.php:685
+#: ../../view/theme/diabook/theme.php:757
#: ../../view/theme/diabook/config.php:190
#: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70
-#: ../../include/conversation.php:555
+#: ../../include/conversation.php:580
msgid "Submit"
msgstr ""
@@ -215,12 +216,12 @@ msgstr ""
msgid "Edit event"
msgstr ""
-#: ../../mod/events.php:300 ../../include/text.php:1054
+#: ../../mod/events.php:300 ../../include/text.php:1065
msgid "link to source"
msgstr ""
-#: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:127
-#: ../../include/nav.php:52 ../../boot.php:1499
+#: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:131
+#: ../../include/nav.php:52 ../../boot.php:1520
msgid "Events"
msgstr ""
@@ -232,7 +233,7 @@ msgstr ""
msgid "Previous"
msgstr ""
-#: ../../mod/events.php:327 ../../mod/install.php:210
+#: ../../mod/events.php:327 ../../mod/install.php:205
msgid "Next"
msgstr ""
@@ -270,7 +271,7 @@ msgid "Description:"
msgstr ""
#: ../../mod/events.php:423 ../../include/event.php:37
-#: ../../include/bb2diaspora.php:260 ../../boot.php:1098
+#: ../../include/bb2diaspora.php:265 ../../boot.php:1100
msgid "Location:"
msgstr ""
@@ -279,8 +280,8 @@ msgid "Share this event"
msgstr ""
#: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94
-#: ../../mod/dfrn_request.php:818 ../../mod/settings.php:540
-#: ../../mod/settings.php:566 ../../addon/js_upload/js_upload.php:45
+#: ../../mod/dfrn_request.php:830 ../../mod/settings.php:556
+#: ../../mod/settings.php:582 ../../addon/js_upload/js_upload.php:45
msgid "Cancel"
msgstr ""
@@ -323,44 +324,47 @@ msgid ""
"and/or create new posts for you?"
msgstr ""
-#: ../../mod/api.php:105 ../../mod/dfrn_request.php:806
-#: ../../mod/settings.php:854 ../../mod/settings.php:860
-#: ../../mod/settings.php:868 ../../mod/settings.php:872
-#: ../../mod/settings.php:877 ../../mod/settings.php:883
-#: ../../mod/settings.php:889 ../../mod/settings.php:895
-#: ../../mod/settings.php:931 ../../mod/settings.php:932
-#: ../../mod/settings.php:933 ../../mod/settings.php:934
-#: ../../mod/register.php:532 ../../mod/profiles.php:511
+#: ../../mod/api.php:105 ../../mod/dfrn_request.php:818
+#: ../../mod/settings.php:879 ../../mod/settings.php:885
+#: ../../mod/settings.php:893 ../../mod/settings.php:897
+#: ../../mod/settings.php:902 ../../mod/settings.php:908
+#: ../../mod/settings.php:914 ../../mod/settings.php:920
+#: ../../mod/settings.php:956 ../../mod/settings.php:957
+#: ../../mod/settings.php:958 ../../mod/settings.php:959
+#: ../../mod/settings.php:960 ../../mod/register.php:234
+#: ../../mod/profiles.php:531
msgid "Yes"
msgstr ""
-#: ../../mod/api.php:106 ../../mod/dfrn_request.php:807
-#: ../../mod/settings.php:854 ../../mod/settings.php:860
-#: ../../mod/settings.php:868 ../../mod/settings.php:872
-#: ../../mod/settings.php:877 ../../mod/settings.php:883
-#: ../../mod/settings.php:889 ../../mod/settings.php:895
-#: ../../mod/settings.php:931 ../../mod/settings.php:932
-#: ../../mod/settings.php:933 ../../mod/settings.php:934
-#: ../../mod/register.php:533 ../../mod/profiles.php:512
+#: ../../mod/api.php:106 ../../mod/dfrn_request.php:819
+#: ../../mod/settings.php:879 ../../mod/settings.php:885
+#: ../../mod/settings.php:893 ../../mod/settings.php:897
+#: ../../mod/settings.php:902 ../../mod/settings.php:908
+#: ../../mod/settings.php:914 ../../mod/settings.php:920
+#: ../../mod/settings.php:956 ../../mod/settings.php:957
+#: ../../mod/settings.php:958 ../../mod/settings.php:959
+#: ../../mod/settings.php:960 ../../mod/register.php:235
+#: ../../mod/profiles.php:532
msgid "No"
msgstr ""
-#: ../../mod/photos.php:43 ../../boot.php:1493
+#: ../../mod/photos.php:43 ../../boot.php:1514
msgid "Photo Albums"
msgstr ""
-#: ../../mod/photos.php:51 ../../mod/photos.php:151 ../../mod/photos.php:879
-#: ../../mod/photos.php:950 ../../mod/photos.php:965 ../../mod/photos.php:1382
-#: ../../mod/photos.php:1394 ../../addon/communityhome/communityhome.php:110
-#: ../../view/theme/diabook/theme.php:526
+#: ../../mod/photos.php:51 ../../mod/photos.php:151 ../../mod/photos.php:934
+#: ../../mod/photos.php:1005 ../../mod/photos.php:1020
+#: ../../mod/photos.php:1445 ../../mod/photos.php:1457
+#: ../../addon/communityhome/communityhome.php:110
+#: ../../view/theme/diabook/theme.php:598
msgid "Contact Photos"
msgstr ""
-#: ../../mod/photos.php:58 ../../mod/photos.php:975 ../../mod/photos.php:1424
+#: ../../mod/photos.php:58 ../../mod/photos.php:1030 ../../mod/photos.php:1494
msgid "Upload New Photos"
msgstr ""
-#: ../../mod/photos.php:69 ../../mod/settings.php:20
+#: ../../mod/photos.php:69 ../../mod/settings.php:21
msgid "everybody"
msgstr ""
@@ -368,14 +372,14 @@ msgstr ""
msgid "Contact information unavailable"
msgstr ""
-#: ../../mod/photos.php:151 ../../mod/photos.php:597 ../../mod/photos.php:950
-#: ../../mod/photos.php:965 ../../mod/register.php:335
-#: ../../mod/register.php:342 ../../mod/register.php:349
-#: ../../mod/profile_photo.php:60 ../../mod/profile_photo.php:67
-#: ../../mod/profile_photo.php:74 ../../mod/profile_photo.php:174
-#: ../../mod/profile_photo.php:252 ../../mod/profile_photo.php:261
+#: ../../mod/photos.php:151 ../../mod/photos.php:652 ../../mod/photos.php:1005
+#: ../../mod/photos.php:1020 ../../mod/profile_photo.php:60
+#: ../../mod/profile_photo.php:67 ../../mod/profile_photo.php:74
+#: ../../mod/profile_photo.php:174 ../../mod/profile_photo.php:252
+#: ../../mod/profile_photo.php:261
#: ../../addon/communityhome/communityhome.php:111
-#: ../../view/theme/diabook/theme.php:527
+#: ../../view/theme/diabook/theme.php:599 ../../include/user.php:294
+#: ../../include/user.php:301 ../../include/user.php:308
msgid "Profile Photos"
msgstr ""
@@ -383,188 +387,192 @@ msgstr ""
msgid "Album not found."
msgstr ""
-#: ../../mod/photos.php:179 ../../mod/photos.php:959
+#: ../../mod/photos.php:179 ../../mod/photos.php:1014
msgid "Delete Album"
msgstr ""
-#: ../../mod/photos.php:242 ../../mod/photos.php:1194
+#: ../../mod/photos.php:242 ../../mod/photos.php:1257
msgid "Delete Photo"
msgstr ""
-#: ../../mod/photos.php:528
+#: ../../mod/photos.php:583
msgid "was tagged in a"
msgstr ""
-#: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70
+#: ../../mod/photos.php:583 ../../mod/like.php:127 ../../mod/tagger.php:70
#: ../../addon/communityhome/communityhome.php:163
-#: ../../view/theme/diabook/theme.php:498 ../../include/text.php:1305
-#: ../../include/diaspora.php:1654 ../../include/conversation.php:53
+#: ../../view/theme/diabook/theme.php:570 ../../include/text.php:1316
+#: ../../include/diaspora.php:1662 ../../include/conversation.php:53
#: ../../include/conversation.php:126
msgid "photo"
msgstr ""
-#: ../../mod/photos.php:528
+#: ../../mod/photos.php:583
msgid "by"
msgstr ""
-#: ../../mod/photos.php:631 ../../addon/js_upload/js_upload.php:315
+#: ../../mod/photos.php:686 ../../addon/js_upload/js_upload.php:315
msgid "Image exceeds size limit of "
msgstr ""
-#: ../../mod/photos.php:639
+#: ../../mod/photos.php:694
msgid "Image file is empty."
msgstr ""
-#: ../../mod/photos.php:653 ../../mod/profile_photo.php:124
+#: ../../mod/photos.php:708 ../../mod/profile_photo.php:124
#: ../../mod/wall_upload.php:83
msgid "Unable to process image."
msgstr ""
-#: ../../mod/photos.php:673 ../../mod/profile_photo.php:257
+#: ../../mod/photos.php:728 ../../mod/profile_photo.php:257
#: ../../mod/wall_upload.php:102
msgid "Image upload failed."
msgstr ""
-#: ../../mod/photos.php:759 ../../mod/community.php:16
-#: ../../mod/dfrn_request.php:732 ../../mod/viewcontacts.php:17
+#: ../../mod/photos.php:814 ../../mod/community.php:16
+#: ../../mod/dfrn_request.php:744 ../../mod/viewcontacts.php:17
#: ../../mod/display.php:7 ../../mod/search.php:71 ../../mod/directory.php:29
msgid "Public access denied."
msgstr ""
-#: ../../mod/photos.php:769
+#: ../../mod/photos.php:824
msgid "No photos selected"
msgstr ""
-#: ../../mod/photos.php:846
+#: ../../mod/photos.php:901
msgid "Access to this item is restricted."
msgstr ""
-#: ../../mod/photos.php:907
+#: ../../mod/photos.php:962
msgid "Upload Photos"
msgstr ""
-#: ../../mod/photos.php:910 ../../mod/photos.php:954
+#: ../../mod/photos.php:965 ../../mod/photos.php:1009
msgid "New album name: "
msgstr ""
-#: ../../mod/photos.php:911
+#: ../../mod/photos.php:966
msgid "or existing album name: "
msgstr ""
-#: ../../mod/photos.php:912
+#: ../../mod/photos.php:967
msgid "Do not show a status post for this upload"
msgstr ""
-#: ../../mod/photos.php:914 ../../mod/photos.php:1189
+#: ../../mod/photos.php:969 ../../mod/photos.php:1252
msgid "Permissions"
msgstr ""
-#: ../../mod/photos.php:969
+#: ../../mod/photos.php:1024
msgid "Edit Album"
msgstr ""
-#: ../../mod/photos.php:984 ../../mod/photos.php:1407
+#: ../../mod/photos.php:1046 ../../mod/photos.php:1477
msgid "View Photo"
msgstr ""
-#: ../../mod/photos.php:1019
+#: ../../mod/photos.php:1081
msgid "Permission denied. Access to this item may be restricted."
msgstr ""
-#: ../../mod/photos.php:1021
+#: ../../mod/photos.php:1083
msgid "Photo not available"
msgstr ""
-#: ../../mod/photos.php:1071
+#: ../../mod/photos.php:1133
msgid "View photo"
msgstr ""
-#: ../../mod/photos.php:1071
+#: ../../mod/photos.php:1133
msgid "Edit photo"
msgstr ""
-#: ../../mod/photos.php:1072
+#: ../../mod/photos.php:1134
msgid "Use as profile photo"
msgstr ""
-#: ../../mod/photos.php:1078 ../../include/conversation.php:480
+#: ../../mod/photos.php:1140 ../../include/conversation.php:490
msgid "Private Message"
msgstr ""
-#: ../../mod/photos.php:1100
+#: ../../mod/photos.php:1162
msgid "View Full Size"
msgstr ""
-#: ../../mod/photos.php:1168
+#: ../../mod/photos.php:1230
msgid "Tags: "
msgstr ""
-#: ../../mod/photos.php:1171
+#: ../../mod/photos.php:1233
msgid "[Remove any tag]"
msgstr ""
-#: ../../mod/photos.php:1182
+#: ../../mod/photos.php:1243
+msgid "Rotate CW"
+msgstr ""
+
+#: ../../mod/photos.php:1245
msgid "New album name"
msgstr ""
-#: ../../mod/photos.php:1185
+#: ../../mod/photos.php:1248
msgid "Caption"
msgstr ""
-#: ../../mod/photos.php:1187
+#: ../../mod/photos.php:1250
msgid "Add a Tag"
msgstr ""
-#: ../../mod/photos.php:1191
+#: ../../mod/photos.php:1254
msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
msgstr ""
-#: ../../mod/photos.php:1211 ../../include/conversation.php:529
+#: ../../mod/photos.php:1274 ../../include/conversation.php:554
msgid "I like this (toggle)"
msgstr ""
-#: ../../mod/photos.php:1212 ../../include/conversation.php:530
+#: ../../mod/photos.php:1275 ../../include/conversation.php:555
msgid "I don't like this (toggle)"
msgstr ""
-#: ../../mod/photos.php:1213 ../../include/conversation.php:964
+#: ../../mod/photos.php:1276 ../../include/conversation.php:989
msgid "Share"
msgstr ""
-#: ../../mod/photos.php:1214 ../../mod/editpost.php:104
-#: ../../mod/wallmessage.php:145 ../../mod/message.php:213
-#: ../../mod/message.php:405 ../../include/conversation.php:361
-#: ../../include/conversation.php:706 ../../include/conversation.php:983
+#: ../../mod/photos.php:1277 ../../mod/editpost.php:104
+#: ../../mod/wallmessage.php:145 ../../mod/message.php:214
+#: ../../mod/message.php:408 ../../include/conversation.php:371
+#: ../../include/conversation.php:731 ../../include/conversation.php:1008
msgid "Please wait"
msgstr ""
-#: ../../mod/photos.php:1230 ../../mod/photos.php:1270
-#: ../../mod/photos.php:1301 ../../include/conversation.php:552
+#: ../../mod/photos.php:1293 ../../mod/photos.php:1333
+#: ../../mod/photos.php:1364 ../../include/conversation.php:577
msgid "This is you"
msgstr ""
-#: ../../mod/photos.php:1232 ../../mod/photos.php:1272
-#: ../../mod/photos.php:1303 ../../include/conversation.php:554
-#: ../../boot.php:512
+#: ../../mod/photos.php:1295 ../../mod/photos.php:1335
+#: ../../mod/photos.php:1366 ../../include/conversation.php:579
+#: ../../boot.php:514
msgid "Comment"
msgstr ""
-#: ../../mod/photos.php:1234 ../../mod/editpost.php:125
-#: ../../include/conversation.php:564 ../../include/conversation.php:1001
+#: ../../mod/photos.php:1297 ../../mod/editpost.php:125
+#: ../../include/conversation.php:589 ../../include/conversation.php:1026
msgid "Preview"
msgstr ""
-#: ../../mod/photos.php:1331 ../../mod/settings.php:602
-#: ../../mod/settings.php:683 ../../mod/group.php:168 ../../mod/admin.php:647
-#: ../../include/conversation.php:318 ../../include/conversation.php:584
+#: ../../mod/photos.php:1394 ../../mod/settings.php:618
+#: ../../mod/settings.php:699 ../../mod/group.php:168 ../../mod/admin.php:660
+#: ../../include/conversation.php:328 ../../include/conversation.php:609
msgid "Delete"
msgstr ""
-#: ../../mod/photos.php:1413
+#: ../../mod/photos.php:1483
msgid "View Album"
msgstr ""
-#: ../../mod/photos.php:1422
+#: ../../mod/photos.php:1492
msgid "Recent Photos"
msgstr ""
@@ -572,12 +580,12 @@ msgstr ""
msgid "Not available."
msgstr ""
-#: ../../mod/community.php:30 ../../view/theme/diabook/theme.php:129
+#: ../../mod/community.php:30 ../../view/theme/diabook/theme.php:133
#: ../../include/nav.php:101
msgid "Community"
msgstr ""
-#: ../../mod/community.php:61 ../../mod/search.php:128
+#: ../../mod/community.php:61 ../../mod/search.php:144
msgid "No results."
msgstr ""
@@ -621,28 +629,28 @@ msgstr ""
msgid "Edit post"
msgstr ""
-#: ../../mod/editpost.php:80 ../../include/conversation.php:950
+#: ../../mod/editpost.php:80 ../../include/conversation.php:975
msgid "Post to Email"
msgstr ""
-#: ../../mod/editpost.php:95 ../../mod/settings.php:601
-#: ../../include/conversation.php:571
+#: ../../mod/editpost.php:95 ../../mod/settings.php:617
+#: ../../include/conversation.php:596
msgid "Edit"
msgstr ""
#: ../../mod/editpost.php:96 ../../mod/wallmessage.php:143
-#: ../../mod/message.php:211 ../../mod/message.php:403
-#: ../../include/conversation.php:965
+#: ../../mod/message.php:212 ../../mod/message.php:406
+#: ../../include/conversation.php:990
msgid "Upload photo"
msgstr ""
-#: ../../mod/editpost.php:97 ../../include/conversation.php:967
+#: ../../mod/editpost.php:97 ../../include/conversation.php:992
msgid "Attach file"
msgstr ""
#: ../../mod/editpost.php:98 ../../mod/wallmessage.php:144
-#: ../../mod/message.php:212 ../../mod/message.php:404
-#: ../../include/conversation.php:969
+#: ../../mod/message.php:213 ../../mod/message.php:407
+#: ../../include/conversation.php:994
msgid "Insert web link"
msgstr ""
@@ -658,35 +666,35 @@ msgstr ""
msgid "Insert Vorbis [.ogg] audio"
msgstr ""
-#: ../../mod/editpost.php:102 ../../include/conversation.php:975
+#: ../../mod/editpost.php:102 ../../include/conversation.php:1000
msgid "Set your location"
msgstr ""
-#: ../../mod/editpost.php:103 ../../include/conversation.php:977
+#: ../../mod/editpost.php:103 ../../include/conversation.php:1002
msgid "Clear browser location"
msgstr ""
-#: ../../mod/editpost.php:105 ../../include/conversation.php:984
+#: ../../mod/editpost.php:105 ../../include/conversation.php:1009
msgid "Permission settings"
msgstr ""
-#: ../../mod/editpost.php:113 ../../include/conversation.php:993
+#: ../../mod/editpost.php:113 ../../include/conversation.php:1018
msgid "CC: email addresses"
msgstr ""
-#: ../../mod/editpost.php:114 ../../include/conversation.php:994
+#: ../../mod/editpost.php:114 ../../include/conversation.php:1019
msgid "Public post"
msgstr ""
-#: ../../mod/editpost.php:117 ../../include/conversation.php:980
+#: ../../mod/editpost.php:117 ../../include/conversation.php:1005
msgid "Set title"
msgstr ""
-#: ../../mod/editpost.php:119 ../../include/conversation.php:982
+#: ../../mod/editpost.php:119 ../../include/conversation.php:1007
msgid "Categories (comma-separated list)"
msgstr ""
-#: ../../mod/editpost.php:120 ../../include/conversation.php:996
+#: ../../mod/editpost.php:120 ../../include/conversation.php:1021
msgid "Example: bob@example.com, mary@example.com"
msgstr ""
@@ -694,201 +702,200 @@ msgstr ""
msgid "This introduction has already been accepted."
msgstr ""
-#: ../../mod/dfrn_request.php:117 ../../mod/dfrn_request.php:487
+#: ../../mod/dfrn_request.php:118 ../../mod/dfrn_request.php:497
msgid "Profile location is not valid or does not contain profile information."
msgstr ""
-#: ../../mod/dfrn_request.php:122 ../../mod/dfrn_request.php:492
+#: ../../mod/dfrn_request.php:123 ../../mod/dfrn_request.php:502
msgid "Warning: profile location has no identifiable owner name."
msgstr ""
-#: ../../mod/dfrn_request.php:124 ../../mod/dfrn_request.php:494
+#: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:504
msgid "Warning: profile location has no profile photo."
msgstr ""
-#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:497
+#: ../../mod/dfrn_request.php:128 ../../mod/dfrn_request.php:507
#, php-format
msgid "%d required parameter was not found at the given location"
msgid_plural "%d required parameters were not found at the given location"
msgstr[0] ""
msgstr[1] ""
-#: ../../mod/dfrn_request.php:168
+#: ../../mod/dfrn_request.php:170
msgid "Introduction complete."
msgstr ""
-#: ../../mod/dfrn_request.php:192
+#: ../../mod/dfrn_request.php:194
msgid "Unrecoverable protocol error."
msgstr ""
-#: ../../mod/dfrn_request.php:220
+#: ../../mod/dfrn_request.php:222
msgid "Profile unavailable."
msgstr ""
-#: ../../mod/dfrn_request.php:245
+#: ../../mod/dfrn_request.php:247
#, php-format
msgid "%s has received too many connection requests today."
msgstr ""
-#: ../../mod/dfrn_request.php:246
+#: ../../mod/dfrn_request.php:248
msgid "Spam protection measures have been invoked."
msgstr ""
-#: ../../mod/dfrn_request.php:247
+#: ../../mod/dfrn_request.php:249
msgid "Friends are advised to please try again in 24 hours."
msgstr ""
-#: ../../mod/dfrn_request.php:309
+#: ../../mod/dfrn_request.php:311
msgid "Invalid locator"
msgstr ""
-#: ../../mod/dfrn_request.php:318
+#: ../../mod/dfrn_request.php:320
msgid "Invalid email address."
msgstr ""
-#: ../../mod/dfrn_request.php:344
+#: ../../mod/dfrn_request.php:346
msgid "This account has not been configured for email. Request failed."
msgstr ""
-#: ../../mod/dfrn_request.php:432
+#: ../../mod/dfrn_request.php:442
msgid "Unable to resolve your name at the provided location."
msgstr ""
-#: ../../mod/dfrn_request.php:445
+#: ../../mod/dfrn_request.php:455
msgid "You have already introduced yourself here."
msgstr ""
-#: ../../mod/dfrn_request.php:449
+#: ../../mod/dfrn_request.php:459
#, php-format
msgid "Apparently you are already friends with %s."
msgstr ""
-#: ../../mod/dfrn_request.php:470
+#: ../../mod/dfrn_request.php:480
msgid "Invalid profile URL."
msgstr ""
-#: ../../mod/dfrn_request.php:476 ../../mod/follow.php:23
+#: ../../mod/dfrn_request.php:486 ../../include/follow.php:27
msgid "Disallowed profile URL."
msgstr ""
-#: ../../mod/dfrn_request.php:545 ../../mod/contacts.php:102
+#: ../../mod/dfrn_request.php:555 ../../mod/contacts.php:102
msgid "Failed to update contact record."
msgstr ""
-#: ../../mod/dfrn_request.php:566
+#: ../../mod/dfrn_request.php:576
msgid "Your introduction has been sent."
msgstr ""
-#: ../../mod/dfrn_request.php:619
+#: ../../mod/dfrn_request.php:629
msgid "Please login to confirm introduction."
msgstr ""
-#: ../../mod/dfrn_request.php:633
+#: ../../mod/dfrn_request.php:643
msgid ""
"Incorrect identity currently logged in. Please login to <strong>this</"
"strong> profile."
msgstr ""
-#: ../../mod/dfrn_request.php:645
+#: ../../mod/dfrn_request.php:654
+msgid "Hide this contact"
+msgstr ""
+
+#: ../../mod/dfrn_request.php:657
#, php-format
msgid "Welcome home %s."
msgstr ""
-#: ../../mod/dfrn_request.php:646
+#: ../../mod/dfrn_request.php:658
#, php-format
msgid "Please confirm your introduction/connection request to %s."
msgstr ""
-#: ../../mod/dfrn_request.php:647
+#: ../../mod/dfrn_request.php:659
msgid "Confirm"
msgstr ""
-#: ../../mod/dfrn_request.php:688 ../../include/items.php:2717
+#: ../../mod/dfrn_request.php:700 ../../include/items.php:2733
msgid "[Name Withheld]"
msgstr ""
-#: ../../mod/dfrn_request.php:781
+#: ../../mod/dfrn_request.php:793
msgid ""
"Please enter your 'Identity Address' from one of the following supported "
"communications networks:"
msgstr ""
-#: ../../mod/dfrn_request.php:797
+#: ../../mod/dfrn_request.php:809
msgid "<strike>Connect as an email follower</strike> (Coming soon)"
msgstr ""
-#: ../../mod/dfrn_request.php:799
+#: ../../mod/dfrn_request.php:811
msgid ""
"If you are not yet a member of the free social web, <a href=\"http://dir."
"friendica.com/siteinfo\">follow this link to find a public Friendica site "
"and join us today</a>."
msgstr ""
-#: ../../mod/dfrn_request.php:802
+#: ../../mod/dfrn_request.php:814
msgid "Friend/Connection Request"
msgstr ""
-#: ../../mod/dfrn_request.php:803
+#: ../../mod/dfrn_request.php:815
msgid ""
"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
"testuser@identi.ca"
msgstr ""
-#: ../../mod/dfrn_request.php:804
+#: ../../mod/dfrn_request.php:816
msgid "Please answer the following:"
msgstr ""
-#: ../../mod/dfrn_request.php:805
+#: ../../mod/dfrn_request.php:817
#, php-format
msgid "Does %s know you?"
msgstr ""
-#: ../../mod/dfrn_request.php:808
+#: ../../mod/dfrn_request.php:820
msgid "Add a personal note:"
msgstr ""
-#: ../../mod/dfrn_request.php:810 ../../include/contact_selectors.php:76
+#: ../../mod/dfrn_request.php:822 ../../include/contact_selectors.php:76
msgid "Friendica"
msgstr ""
-#: ../../mod/dfrn_request.php:811
+#: ../../mod/dfrn_request.php:823
msgid "StatusNet/Federated Social Web"
msgstr ""
-#: ../../mod/dfrn_request.php:812 ../../mod/settings.php:636
+#: ../../mod/dfrn_request.php:824 ../../mod/settings.php:652
#: ../../include/contact_selectors.php:80
msgid "Diaspora"
msgstr ""
-#: ../../mod/dfrn_request.php:813
+#: ../../mod/dfrn_request.php:825
#, php-format
msgid ""
" - please do not use this form. Instead, enter %s into your Diaspora search "
"bar."
msgstr ""
-#: ../../mod/dfrn_request.php:814
+#: ../../mod/dfrn_request.php:826
msgid "Your Identity Address:"
msgstr ""
-#: ../../mod/dfrn_request.php:817
+#: ../../mod/dfrn_request.php:829
msgid "Submit Request"
msgstr ""
-#: ../../mod/install.php:111
+#: ../../mod/install.php:117
msgid "Friendica Social Communications Server - Setup"
msgstr ""
-#: ../../mod/install.php:117 ../../mod/install.php:157
-#: ../../mod/install.php:230
-msgid "Database connection"
-msgstr ""
-
-#: ../../mod/install.php:124
+#: ../../mod/install.php:123
msgid "Could not connect to database."
msgstr ""
-#: ../../mod/install.php:128
+#: ../../mod/install.php:127
msgid "Could not create table."
msgstr ""
@@ -896,231 +903,245 @@ msgstr ""
msgid "Your Friendica site database has been installed."
msgstr ""
-#: ../../mod/install.php:134
-msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
-msgstr ""
-
-#: ../../mod/install.php:135 ../../mod/install.php:151
-#: ../../mod/install.php:209
-msgid "Please see the file \"INSTALL.txt\"."
-msgstr ""
-
-#: ../../mod/install.php:137
-msgid "Proceed to registration"
-msgstr ""
-
-#: ../../mod/install.php:143
-msgid "Proceed with Installation"
-msgstr ""
-
-#: ../../mod/install.php:150
+#: ../../mod/install.php:138
msgid ""
"You may need to import the file \"database.sql\" manually using phpmyadmin "
"or mysql."
msgstr ""
-#: ../../mod/install.php:158
-msgid "Database import failed."
+#: ../../mod/install.php:139 ../../mod/install.php:204
+#: ../../mod/install.php:489
+msgid "Please see the file \"INSTALL.txt\"."
msgstr ""
-#: ../../mod/install.php:206
+#: ../../mod/install.php:201
msgid "System check"
msgstr ""
-#: ../../mod/install.php:211
+#: ../../mod/install.php:206
msgid "Check again"
msgstr ""
-#: ../../mod/install.php:231
+#: ../../mod/install.php:225
+msgid "Database connection"
+msgstr ""
+
+#: ../../mod/install.php:226
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr ""
-#: ../../mod/install.php:232
+#: ../../mod/install.php:227
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr ""
-#: ../../mod/install.php:233
+#: ../../mod/install.php:228
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr ""
-#: ../../mod/install.php:237
+#: ../../mod/install.php:232
msgid "Database Server Name"
msgstr ""
-#: ../../mod/install.php:238
+#: ../../mod/install.php:233
msgid "Database Login Name"
msgstr ""
-#: ../../mod/install.php:239
+#: ../../mod/install.php:234
msgid "Database Login Password"
msgstr ""
-#: ../../mod/install.php:240
+#: ../../mod/install.php:235
msgid "Database Name"
msgstr ""
-#: ../../mod/install.php:241 ../../mod/install.php:280
+#: ../../mod/install.php:236 ../../mod/install.php:275
msgid "Site administrator email address"
msgstr ""
-#: ../../mod/install.php:241 ../../mod/install.php:280
+#: ../../mod/install.php:236 ../../mod/install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr ""
-#: ../../mod/install.php:245 ../../mod/install.php:283
+#: ../../mod/install.php:240 ../../mod/install.php:278
msgid "Please select a default timezone for your website"
msgstr ""
-#: ../../mod/install.php:270
+#: ../../mod/install.php:265
msgid "Site settings"
msgstr ""
-#: ../../mod/install.php:323
+#: ../../mod/install.php:318
msgid "Could not find a command line version of PHP in the web server PATH."
msgstr ""
-#: ../../mod/install.php:326
+#: ../../mod/install.php:319
+msgid ""
+"If you don't have a command line version of PHP installed on server, you "
+"will not be able to run background polling via cron. See <a href='http://"
+"friendica.com/node/27'>'Activating scheduled tasks'</a>"
+msgstr ""
+
+#: ../../mod/install.php:323
msgid "PHP executable path"
msgstr ""
-#: ../../mod/install.php:326
-msgid "Enter full path to php executable"
+#: ../../mod/install.php:323
+msgid ""
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
msgstr ""
-#: ../../mod/install.php:331
+#: ../../mod/install.php:328
msgid "Command line PHP"
msgstr ""
-#: ../../mod/install.php:340
+#: ../../mod/install.php:337
msgid ""
"The command line version of PHP on your system does not have "
"\"register_argc_argv\" enabled."
msgstr ""
-#: ../../mod/install.php:341
+#: ../../mod/install.php:338
msgid "This is required for message delivery to work."
msgstr ""
-#: ../../mod/install.php:343
+#: ../../mod/install.php:340
msgid "PHP register_argc_argv"
msgstr ""
-#: ../../mod/install.php:364
+#: ../../mod/install.php:361
msgid ""
"Error: the \"openssl_pkey_new\" function on this system is not able to "
"generate encryption keys"
msgstr ""
-#: ../../mod/install.php:365
+#: ../../mod/install.php:362
msgid ""
"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
"installation.php\"."
msgstr ""
-#: ../../mod/install.php:367
+#: ../../mod/install.php:364
msgid "Generate encryption keys"
msgstr ""
-#: ../../mod/install.php:374
+#: ../../mod/install.php:371
msgid "libCurl PHP module"
msgstr ""
-#: ../../mod/install.php:375
+#: ../../mod/install.php:372
msgid "GD graphics PHP module"
msgstr ""
-#: ../../mod/install.php:376
+#: ../../mod/install.php:373
msgid "OpenSSL PHP module"
msgstr ""
-#: ../../mod/install.php:377
+#: ../../mod/install.php:374
msgid "mysqli PHP module"
msgstr ""
-#: ../../mod/install.php:378
+#: ../../mod/install.php:375
msgid "mb_string PHP module"
msgstr ""
-#: ../../mod/install.php:383 ../../mod/install.php:385
+#: ../../mod/install.php:380 ../../mod/install.php:382
msgid "Apache mod_rewrite module"
msgstr ""
-#: ../../mod/install.php:383
+#: ../../mod/install.php:380
msgid ""
"Error: Apache webserver mod-rewrite module is required but not installed."
msgstr ""
-#: ../../mod/install.php:390
+#: ../../mod/install.php:388
msgid "Error: libCURL PHP module required but not installed."
msgstr ""
-#: ../../mod/install.php:394
+#: ../../mod/install.php:392
msgid ""
"Error: GD graphics PHP module with JPEG support required but not installed."
msgstr ""
-#: ../../mod/install.php:398
+#: ../../mod/install.php:396
msgid "Error: openssl PHP module required but not installed."
msgstr ""
-#: ../../mod/install.php:402
+#: ../../mod/install.php:400
msgid "Error: mysqli PHP module required but not installed."
msgstr ""
-#: ../../mod/install.php:406
+#: ../../mod/install.php:404
msgid "Error: mb_string PHP module required but not installed."
msgstr ""
-#: ../../mod/install.php:423
+#: ../../mod/install.php:421
msgid ""
"The web installer needs to be able to create a file called \".htconfig.php\" "
"in the top folder of your web server and it is unable to do so."
msgstr ""
-#: ../../mod/install.php:424
+#: ../../mod/install.php:422
msgid ""
"This is most often a permission setting, as the web server may not be able "
"to write files in your folder - even if you can."
msgstr ""
-#: ../../mod/install.php:425
+#: ../../mod/install.php:423
msgid ""
-"Please check with your site documentation or support people to see if this "
-"situation can be corrected."
+"At the end of this procedure, we will give you a text to save in a file "
+"named .htconfig.php in your Friendica top folder."
msgstr ""
-#: ../../mod/install.php:426
+#: ../../mod/install.php:424
msgid ""
-"If not, you may be required to perform a manual installation. Please see the "
-"file \"INSTALL.txt\" for instructions."
+"You can alternatively skip this procedure and perform a manual installation. "
+"Please see the file \"INSTALL.txt\" for instructions."
msgstr ""
-#: ../../mod/install.php:429
+#: ../../mod/install.php:427
msgid ".htconfig.php is writable"
msgstr ""
-#: ../../mod/install.php:436
+#: ../../mod/install.php:439
+msgid ""
+"Url rewrite in .htaccess is not working. Check your server configuration."
+msgstr ""
+
+#: ../../mod/install.php:441
+msgid "Url rewrite is working"
+msgstr ""
+
+#: ../../mod/install.php:451
msgid ""
"The database configuration file \".htconfig.php\" could not be written. "
"Please use the enclosed text to create a configuration file in your web "
"server root."
msgstr ""
-#: ../../mod/install.php:461
+#: ../../mod/install.php:476
msgid "Errors encountered creating database tables."
msgstr ""
+#: ../../mod/install.php:487
+msgid "<h1>What next</h1>"
+msgstr ""
+
+#: ../../mod/install.php:488
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
+msgstr ""
+
#: ../../mod/localtime.php:12 ../../include/event.php:11
-#: ../../include/bb2diaspora.php:238
+#: ../../include/bb2diaspora.php:243
msgid "l F d, Y \\@ g:i A"
msgstr ""
@@ -1166,11 +1187,11 @@ msgid "is interested in:"
msgstr ""
#: ../../mod/match.php:58 ../../mod/suggest.php:59
-#: ../../include/contact_widgets.php:9 ../../boot.php:1042
+#: ../../include/contact_widgets.php:9 ../../boot.php:1044
msgid "Connect"
msgstr ""
-#: ../../mod/match.php:65 ../../mod/dirfind.php:57
+#: ../../mod/match.php:65 ../../mod/dirfind.php:60
msgid "No matches"
msgstr ""
@@ -1210,11 +1231,11 @@ msgstr ""
msgid "Network"
msgstr ""
-#: ../../mod/notifications.php:85 ../../mod/network.php:184
+#: ../../mod/notifications.php:85 ../../mod/network.php:188
msgid "Personal"
msgstr ""
-#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:123
+#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:127
#: ../../include/nav.php:77 ../../include/nav.php:115
msgid "Home"
msgstr ""
@@ -1263,7 +1284,7 @@ msgid "if applicable"
msgstr ""
#: ../../mod/notifications.php:157 ../../mod/notifications.php:204
-#: ../../mod/admin.php:645
+#: ../../mod/admin.php:658
msgid "Approve"
msgstr ""
@@ -1464,12 +1485,12 @@ msgid "View all contacts"
msgstr ""
#: ../../mod/contacts.php:290 ../../mod/contacts.php:347
-#: ../../mod/admin.php:649
+#: ../../mod/admin.php:662
msgid "Unblock"
msgstr ""
#: ../../mod/contacts.php:290 ../../mod/contacts.php:347
-#: ../../mod/admin.php:648
+#: ../../mod/admin.php:661
msgid "Block"
msgstr ""
@@ -1562,7 +1583,7 @@ msgstr ""
msgid "Update public posts"
msgstr ""
-#: ../../mod/contacts.php:344 ../../mod/admin.php:1120
+#: ../../mod/contacts.php:344 ../../mod/admin.php:1133
msgid "Update now"
msgstr ""
@@ -1655,7 +1676,7 @@ msgstr ""
msgid "Edit contact"
msgstr ""
-#: ../../mod/contacts.php:544 ../../view/theme/diabook/theme.php:125
+#: ../../mod/contacts.php:544 ../../view/theme/diabook/theme.php:129
#: ../../include/nav.php:139
msgid "Contacts"
msgstr ""
@@ -1687,12 +1708,13 @@ msgid "Password reset requested at %s"
msgstr ""
#: ../../mod/lostpass.php:45 ../../mod/lostpass.php:107
-#: ../../mod/register.php:388 ../../mod/register.php:442
-#: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:742
-#: ../../addon/facebook/facebook.php:680
-#: ../../addon/facebook/facebook.php:1170
-#: ../../addon/testdrive/testdrive.php:58 ../../include/items.php:2726
-#: ../../boot.php:692
+#: ../../mod/register.php:90 ../../mod/register.php:144
+#: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:752
+#: ../../addon/facebook/facebook.php:688
+#: ../../addon/facebook/facebook.php:1178
+#: ../../addon/public_server/public_server.php:62
+#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:2742
+#: ../../boot.php:694
msgid "Administrator"
msgstr ""
@@ -1702,7 +1724,7 @@ msgid ""
"Password reset failed."
msgstr ""
-#: ../../mod/lostpass.php:83 ../../boot.php:824
+#: ../../mod/lostpass.php:83 ../../boot.php:826
msgid "Password Reset"
msgstr ""
@@ -1746,500 +1768,524 @@ msgstr ""
msgid "Reset"
msgstr ""
-#: ../../mod/settings.php:49 ../../include/nav.php:137
+#: ../../mod/settings.php:50 ../../include/nav.php:137
msgid "Account settings"
msgstr ""
-#: ../../mod/settings.php:54
+#: ../../mod/settings.php:55
msgid "Display settings"
msgstr ""
-#: ../../mod/settings.php:60
+#: ../../mod/settings.php:61
msgid "Connector settings"
msgstr ""
-#: ../../mod/settings.php:65
+#: ../../mod/settings.php:66
msgid "Plugin settings"
msgstr ""
-#: ../../mod/settings.php:70
+#: ../../mod/settings.php:71
msgid "Connected apps"
msgstr ""
-#: ../../mod/settings.php:75
+#: ../../mod/settings.php:76
msgid "Export personal data"
msgstr ""
-#: ../../mod/settings.php:80
+#: ../../mod/settings.php:81
msgid "Remove account"
msgstr ""
-#: ../../mod/settings.php:88 ../../mod/admin.php:735 ../../mod/admin.php:940
-#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:571
-#: ../../view/theme/diabook/theme.php:701 ../../include/nav.php:137
+#: ../../mod/settings.php:89 ../../mod/admin.php:748 ../../mod/admin.php:953
+#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:643
+#: ../../view/theme/diabook/theme.php:773 ../../include/nav.php:137
msgid "Settings"
msgstr ""
-#: ../../mod/settings.php:131
+#: ../../mod/settings.php:133
msgid "Missing some important data!"
msgstr ""
-#: ../../mod/settings.php:134 ../../mod/settings.php:565
+#: ../../mod/settings.php:136 ../../mod/settings.php:581
msgid "Update"
msgstr ""
-#: ../../mod/settings.php:239
+#: ../../mod/settings.php:241
msgid "Failed to connect with email account using the settings provided."
msgstr ""
-#: ../../mod/settings.php:244
+#: ../../mod/settings.php:246
msgid "Email settings updated."
msgstr ""
-#: ../../mod/settings.php:303
+#: ../../mod/settings.php:305
msgid "Passwords do not match. Password unchanged."
msgstr ""
-#: ../../mod/settings.php:308
+#: ../../mod/settings.php:310
msgid "Empty passwords are not allowed. Password unchanged."
msgstr ""
-#: ../../mod/settings.php:319
+#: ../../mod/settings.php:321
msgid "Password changed."
msgstr ""
-#: ../../mod/settings.php:321
+#: ../../mod/settings.php:323
msgid "Password update failed. Please try again."
msgstr ""
-#: ../../mod/settings.php:385
+#: ../../mod/settings.php:386
msgid " Please use a shorter name."
msgstr ""
-#: ../../mod/settings.php:387
+#: ../../mod/settings.php:388
msgid " Name too short."
msgstr ""
-#: ../../mod/settings.php:393
+#: ../../mod/settings.php:394
msgid " Not valid email."
msgstr ""
-#: ../../mod/settings.php:395
+#: ../../mod/settings.php:396
msgid " Cannot change to that email."
msgstr ""
-#: ../../mod/settings.php:468 ../../addon/facebook/facebook.php:480
+#: ../../mod/settings.php:450
+msgid "Private forum has no privacy permissions. Using default privacy group."
+msgstr ""
+
+#: ../../mod/settings.php:454
+msgid "Private forum has no privacy permissions and no default privacy group."
+msgstr ""
+
+#: ../../mod/settings.php:484 ../../addon/facebook/facebook.php:488
#: ../../addon/impressum/impressum.php:77
#: ../../addon/openstreetmap/openstreetmap.php:80
#: ../../addon/mathjax/mathjax.php:66 ../../addon/piwik/piwik.php:105
-#: ../../addon/twitter/twitter.php:370
+#: ../../addon/twitter/twitter.php:376
msgid "Settings updated."
msgstr ""
-#: ../../mod/settings.php:538 ../../mod/settings.php:564
-#: ../../mod/settings.php:600
+#: ../../mod/settings.php:554 ../../mod/settings.php:580
+#: ../../mod/settings.php:616
msgid "Add application"
msgstr ""
-#: ../../mod/settings.php:542 ../../mod/settings.php:568
-#: ../../addon/statusnet/statusnet.php:547
+#: ../../mod/settings.php:558 ../../mod/settings.php:584
+#: ../../addon/statusnet/statusnet.php:555
msgid "Consumer Key"
msgstr ""
-#: ../../mod/settings.php:543 ../../mod/settings.php:569
-#: ../../addon/statusnet/statusnet.php:546
+#: ../../mod/settings.php:559 ../../mod/settings.php:585
+#: ../../addon/statusnet/statusnet.php:554
msgid "Consumer Secret"
msgstr ""
-#: ../../mod/settings.php:544 ../../mod/settings.php:570
+#: ../../mod/settings.php:560 ../../mod/settings.php:586
msgid "Redirect"
msgstr ""
-#: ../../mod/settings.php:545 ../../mod/settings.php:571
+#: ../../mod/settings.php:561 ../../mod/settings.php:587
msgid "Icon url"
msgstr ""
-#: ../../mod/settings.php:556
+#: ../../mod/settings.php:572
msgid "You can't edit this application."
msgstr ""
-#: ../../mod/settings.php:599
+#: ../../mod/settings.php:615
msgid "Connected Apps"
msgstr ""
-#: ../../mod/settings.php:603
+#: ../../mod/settings.php:619
msgid "Client key starts with"
msgstr ""
-#: ../../mod/settings.php:604
+#: ../../mod/settings.php:620
msgid "No name"
msgstr ""
-#: ../../mod/settings.php:605
+#: ../../mod/settings.php:621
msgid "Remove authorization"
msgstr ""
-#: ../../mod/settings.php:616
+#: ../../mod/settings.php:632
msgid "No Plugin settings configured"
msgstr ""
-#: ../../mod/settings.php:624 ../../addon/widgets/widgets.php:123
+#: ../../mod/settings.php:640 ../../addon/widgets/widgets.php:123
msgid "Plugin Settings"
msgstr ""
-#: ../../mod/settings.php:636 ../../mod/settings.php:637
+#: ../../mod/settings.php:652 ../../mod/settings.php:653
#, php-format
msgid "Built-in support for %s connectivity is %s"
msgstr ""
-#: ../../mod/settings.php:636 ../../mod/settings.php:637
+#: ../../mod/settings.php:652 ../../mod/settings.php:653
msgid "enabled"
msgstr ""
-#: ../../mod/settings.php:636 ../../mod/settings.php:637
+#: ../../mod/settings.php:652 ../../mod/settings.php:653
msgid "disabled"
msgstr ""
-#: ../../mod/settings.php:637
+#: ../../mod/settings.php:653
msgid "StatusNet"
msgstr ""
-#: ../../mod/settings.php:667
+#: ../../mod/settings.php:683
msgid "Connector Settings"
msgstr ""
-#: ../../mod/settings.php:672
+#: ../../mod/settings.php:688
msgid "Email/Mailbox Setup"
msgstr ""
-#: ../../mod/settings.php:673
+#: ../../mod/settings.php:689
msgid ""
"If you wish to communicate with email contacts using this service "
"(optional), please specify how to connect to your mailbox."
msgstr ""
-#: ../../mod/settings.php:674
+#: ../../mod/settings.php:690
msgid "Last successful email check:"
msgstr ""
-#: ../../mod/settings.php:675
+#: ../../mod/settings.php:691
msgid "Email access is disabled on this site."
msgstr ""
-#: ../../mod/settings.php:676
+#: ../../mod/settings.php:692
msgid "IMAP server name:"
msgstr ""
-#: ../../mod/settings.php:677
+#: ../../mod/settings.php:693
msgid "IMAP port:"
msgstr ""
-#: ../../mod/settings.php:678
+#: ../../mod/settings.php:694
msgid "Security:"
msgstr ""
-#: ../../mod/settings.php:678 ../../mod/settings.php:683
+#: ../../mod/settings.php:694 ../../mod/settings.php:699
msgid "None"
msgstr ""
-#: ../../mod/settings.php:679
+#: ../../mod/settings.php:695
msgid "Email login name:"
msgstr ""
-#: ../../mod/settings.php:680
+#: ../../mod/settings.php:696
msgid "Email password:"
msgstr ""
-#: ../../mod/settings.php:681
+#: ../../mod/settings.php:697
msgid "Reply-to address:"
msgstr ""
-#: ../../mod/settings.php:682
+#: ../../mod/settings.php:698
msgid "Send public posts to all email contacts:"
msgstr ""
-#: ../../mod/settings.php:683
+#: ../../mod/settings.php:699
msgid "Action after import:"
msgstr ""
-#: ../../mod/settings.php:683
+#: ../../mod/settings.php:699
msgid "Mark as seen"
msgstr ""
-#: ../../mod/settings.php:683
+#: ../../mod/settings.php:699
msgid "Move to folder"
msgstr ""
-#: ../../mod/settings.php:684
+#: ../../mod/settings.php:700
msgid "Move to folder:"
msgstr ""
-#: ../../mod/settings.php:744
+#: ../../mod/settings.php:760
msgid "Display Settings"
msgstr ""
-#: ../../mod/settings.php:750
+#: ../../mod/settings.php:766
msgid "Display Theme:"
msgstr ""
-#: ../../mod/settings.php:751
+#: ../../mod/settings.php:767
msgid "Update browser every xx seconds"
msgstr ""
-#: ../../mod/settings.php:751
+#: ../../mod/settings.php:767
msgid "Minimum of 10 seconds, no maximum"
msgstr ""
-#: ../../mod/settings.php:752
+#: ../../mod/settings.php:768
msgid "Number of items to display on the network page:"
msgstr ""
-#: ../../mod/settings.php:752
+#: ../../mod/settings.php:768
msgid "Maximum of 100 items"
msgstr ""
-#: ../../mod/settings.php:753
+#: ../../mod/settings.php:769
msgid "Don't show emoticons"
msgstr ""
-#: ../../mod/settings.php:821 ../../mod/admin.php:180 ../../mod/admin.php:621
-msgid "Normal Account"
+#: ../../mod/settings.php:840
+msgid "Normal Account Page"
msgstr ""
-#: ../../mod/settings.php:822
+#: ../../mod/settings.php:841
msgid "This account is a normal personal profile"
msgstr ""
-#: ../../mod/settings.php:825 ../../mod/admin.php:181 ../../mod/admin.php:622
-msgid "Soapbox Account"
+#: ../../mod/settings.php:844
+msgid "Soapbox Page"
msgstr ""
-#: ../../mod/settings.php:826
+#: ../../mod/settings.php:845
msgid "Automatically approve all connection/friend requests as read-only fans"
msgstr ""
-#: ../../mod/settings.php:829 ../../mod/admin.php:182 ../../mod/admin.php:623
-msgid "Community/Celebrity Account"
+#: ../../mod/settings.php:848
+msgid "Community Forum/Celebrity Account"
msgstr ""
-#: ../../mod/settings.php:830
+#: ../../mod/settings.php:849
msgid "Automatically approve all connection/friend requests as read-write fans"
msgstr ""
-#: ../../mod/settings.php:833 ../../mod/admin.php:183 ../../mod/admin.php:624
-msgid "Automatic Friend Account"
+#: ../../mod/settings.php:852
+msgid "Automatic Friend Page"
msgstr ""
-#: ../../mod/settings.php:834
+#: ../../mod/settings.php:853
msgid "Automatically approve all connection/friend requests as friends"
msgstr ""
-#: ../../mod/settings.php:844
+#: ../../mod/settings.php:856
+msgid "Private Forum [Experimental]"
+msgstr ""
+
+#: ../../mod/settings.php:857
+msgid "Private forum - approved members only"
+msgstr ""
+
+#: ../../mod/settings.php:869
msgid "OpenID:"
msgstr ""
-#: ../../mod/settings.php:844
+#: ../../mod/settings.php:869
msgid "(Optional) Allow this OpenID to login to this account."
msgstr ""
-#: ../../mod/settings.php:854
+#: ../../mod/settings.php:879
msgid "Publish your default profile in your local site directory?"
msgstr ""
-#: ../../mod/settings.php:860
+#: ../../mod/settings.php:885
msgid "Publish your default profile in the global social directory?"
msgstr ""
-#: ../../mod/settings.php:868
+#: ../../mod/settings.php:893
msgid "Hide your contact/friend list from viewers of your default profile?"
msgstr ""
-#: ../../mod/settings.php:872
+#: ../../mod/settings.php:897
msgid "Hide your profile details from unknown viewers?"
msgstr ""
-#: ../../mod/settings.php:877
+#: ../../mod/settings.php:902
msgid "Allow friends to post to your profile page?"
msgstr ""
-#: ../../mod/settings.php:883
+#: ../../mod/settings.php:908
msgid "Allow friends to tag your posts?"
msgstr ""
-#: ../../mod/settings.php:889
+#: ../../mod/settings.php:914
msgid "Allow us to suggest you as a potential friend to new members?"
msgstr ""
-#: ../../mod/settings.php:895
+#: ../../mod/settings.php:920
msgid "Permit unknown people to send you private mail?"
msgstr ""
-#: ../../mod/settings.php:906
+#: ../../mod/settings.php:931
msgid "Profile is <strong>not published</strong>."
msgstr ""
-#: ../../mod/settings.php:912 ../../mod/profile_photo.php:211
+#: ../../mod/settings.php:937 ../../mod/profile_photo.php:211
msgid "or"
msgstr ""
-#: ../../mod/settings.php:917
+#: ../../mod/settings.php:942
msgid "Your Identity Address is"
msgstr ""
-#: ../../mod/settings.php:928
+#: ../../mod/settings.php:953
msgid "Automatically expire posts after this many days:"
msgstr ""
-#: ../../mod/settings.php:928
+#: ../../mod/settings.php:953
msgid "If empty, posts will not expire. Expired posts will be deleted"
msgstr ""
-#: ../../mod/settings.php:929
+#: ../../mod/settings.php:954
msgid "Advanced expiration settings"
msgstr ""
-#: ../../mod/settings.php:930
+#: ../../mod/settings.php:955
msgid "Advanced Expiration"
msgstr ""
-#: ../../mod/settings.php:931
+#: ../../mod/settings.php:956
msgid "Expire posts:"
msgstr ""
-#: ../../mod/settings.php:932
+#: ../../mod/settings.php:957
msgid "Expire personal notes:"
msgstr ""
-#: ../../mod/settings.php:933
+#: ../../mod/settings.php:958
msgid "Expire starred posts:"
msgstr ""
-#: ../../mod/settings.php:934
+#: ../../mod/settings.php:959
msgid "Expire photos:"
msgstr ""
-#: ../../mod/settings.php:938
+#: ../../mod/settings.php:960
+msgid "Only expire posts by others:"
+msgstr ""
+
+#: ../../mod/settings.php:967
msgid "Account Settings"
msgstr ""
-#: ../../mod/settings.php:947
+#: ../../mod/settings.php:975
msgid "Password Settings"
msgstr ""
-#: ../../mod/settings.php:948
+#: ../../mod/settings.php:976
msgid "New Password:"
msgstr ""
-#: ../../mod/settings.php:949
+#: ../../mod/settings.php:977
msgid "Confirm:"
msgstr ""
-#: ../../mod/settings.php:949
+#: ../../mod/settings.php:977
msgid "Leave password fields blank unless changing"
msgstr ""
-#: ../../mod/settings.php:953
+#: ../../mod/settings.php:981
msgid "Basic Settings"
msgstr ""
-#: ../../mod/settings.php:954 ../../include/profile_advanced.php:15
+#: ../../mod/settings.php:982 ../../include/profile_advanced.php:15
msgid "Full Name:"
msgstr ""
-#: ../../mod/settings.php:955
+#: ../../mod/settings.php:983
msgid "Email Address:"
msgstr ""
-#: ../../mod/settings.php:956
+#: ../../mod/settings.php:984
msgid "Your Timezone:"
msgstr ""
-#: ../../mod/settings.php:957
+#: ../../mod/settings.php:985
msgid "Default Post Location:"
msgstr ""
-#: ../../mod/settings.php:958
+#: ../../mod/settings.php:986
msgid "Use Browser Location:"
msgstr ""
-#: ../../mod/settings.php:961
+#: ../../mod/settings.php:989
msgid "Security and Privacy Settings"
msgstr ""
-#: ../../mod/settings.php:963
+#: ../../mod/settings.php:991
msgid "Maximum Friend Requests/Day:"
msgstr ""
-#: ../../mod/settings.php:963 ../../mod/settings.php:978
+#: ../../mod/settings.php:991 ../../mod/settings.php:1010
msgid "(to prevent spam abuse)"
msgstr ""
-#: ../../mod/settings.php:964
+#: ../../mod/settings.php:992
msgid "Default Post Permissions"
msgstr ""
-#: ../../mod/settings.php:965
+#: ../../mod/settings.php:993
msgid "(click to open/close)"
msgstr ""
-#: ../../mod/settings.php:978
+#: ../../mod/settings.php:1010
msgid "Maximum private messages per day from unknown people:"
msgstr ""
-#: ../../mod/settings.php:981
+#: ../../mod/settings.php:1013
msgid "Notification Settings"
msgstr ""
-#: ../../mod/settings.php:982
+#: ../../mod/settings.php:1014
msgid "By default post a status message when:"
msgstr ""
-#: ../../mod/settings.php:983
+#: ../../mod/settings.php:1015
msgid "accepting a friend request"
msgstr ""
-#: ../../mod/settings.php:984
+#: ../../mod/settings.php:1016
msgid "joining a forum/community"
msgstr ""
-#: ../../mod/settings.php:985
+#: ../../mod/settings.php:1017
msgid "making an <em>interesting</em> profile change"
msgstr ""
-#: ../../mod/settings.php:986
+#: ../../mod/settings.php:1018
msgid "Send a notification email when:"
msgstr ""
-#: ../../mod/settings.php:987
+#: ../../mod/settings.php:1019
msgid "You receive an introduction"
msgstr ""
-#: ../../mod/settings.php:988
+#: ../../mod/settings.php:1020
msgid "Your introductions are confirmed"
msgstr ""
-#: ../../mod/settings.php:989
+#: ../../mod/settings.php:1021
msgid "Someone writes on your profile wall"
msgstr ""
-#: ../../mod/settings.php:990
+#: ../../mod/settings.php:1022
msgid "Someone writes a followup comment"
msgstr ""
-#: ../../mod/settings.php:991
+#: ../../mod/settings.php:1023
msgid "You receive a private message"
msgstr ""
-#: ../../mod/settings.php:992
+#: ../../mod/settings.php:1024
msgid "You receive a friend suggestion"
msgstr ""
-#: ../../mod/settings.php:993
+#: ../../mod/settings.php:1025
msgid "You are tagged in a post"
msgstr ""
-#: ../../mod/settings.php:996
-msgid "Advanced Page Settings"
+#: ../../mod/settings.php:1028
+msgid "Advanced Account/Page Type Settings"
+msgstr ""
+
+#: ../../mod/settings.php:1029
+msgid "Change the behaviour of this account for special situations"
msgstr ""
#: ../../mod/manage.php:90
@@ -2268,55 +2314,55 @@ msgstr ""
msgid "Saved Searches"
msgstr ""
-#: ../../mod/network.php:92 ../../include/group.php:217
+#: ../../mod/network.php:92 ../../include/group.php:244
msgid "add"
msgstr ""
-#: ../../mod/network.php:171
+#: ../../mod/network.php:175
msgid "Commented Order"
msgstr ""
-#: ../../mod/network.php:174
+#: ../../mod/network.php:178
msgid "Sort by Comment Date"
msgstr ""
-#: ../../mod/network.php:177
+#: ../../mod/network.php:181
msgid "Posted Order"
msgstr ""
-#: ../../mod/network.php:180
+#: ../../mod/network.php:184
msgid "Sort by Post Date"
msgstr ""
-#: ../../mod/network.php:187
+#: ../../mod/network.php:191
msgid "Posts that mention or involve you"
msgstr ""
-#: ../../mod/network.php:190
+#: ../../mod/network.php:194
msgid "New"
msgstr ""
-#: ../../mod/network.php:193
+#: ../../mod/network.php:197
msgid "Activity Stream - by date"
msgstr ""
-#: ../../mod/network.php:196
+#: ../../mod/network.php:200
msgid "Starred"
msgstr ""
-#: ../../mod/network.php:199
+#: ../../mod/network.php:203
msgid "Favourite Posts"
msgstr ""
-#: ../../mod/network.php:202
+#: ../../mod/network.php:206
msgid "Shared Links"
msgstr ""
-#: ../../mod/network.php:205
+#: ../../mod/network.php:209
msgid "Interesting Links"
msgstr ""
-#: ../../mod/network.php:281
+#: ../../mod/network.php:285
#, php-format
msgid "Warning: This group contains %s member from an insecure network."
msgid_plural ""
@@ -2324,41 +2370,41 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ../../mod/network.php:284
+#: ../../mod/network.php:288
msgid "Private messages to this group are at risk of public disclosure."
msgstr ""
-#: ../../mod/network.php:329
+#: ../../mod/network.php:333
msgid "No such group"
msgstr ""
-#: ../../mod/network.php:340
+#: ../../mod/network.php:344
msgid "Group is empty"
msgstr ""
-#: ../../mod/network.php:344
+#: ../../mod/network.php:348
msgid "Group: "
msgstr ""
-#: ../../mod/network.php:354
+#: ../../mod/network.php:358
msgid "Contact: "
msgstr ""
-#: ../../mod/network.php:356
+#: ../../mod/network.php:360
msgid "Private messages to this person are at risk of public disclosure."
msgstr ""
-#: ../../mod/network.php:361
+#: ../../mod/network.php:365
msgid "Invalid contact."
msgstr ""
-#: ../../mod/notes.php:44 ../../boot.php:1505
+#: ../../mod/notes.php:44 ../../boot.php:1526
msgid "Personal Notes"
msgstr ""
#: ../../mod/notes.php:63 ../../mod/filer.php:30
-#: ../../addon/facebook/facebook.php:748
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:147
+#: ../../addon/facebook/facebook.php:756
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:150
#: ../../include/text.php:652
msgid "Save"
msgstr ""
@@ -2393,7 +2439,7 @@ msgid "No recipient."
msgstr ""
#: ../../mod/wallmessage.php:124 ../../mod/message.php:171
-#: ../../include/conversation.php:918
+#: ../../include/conversation.php:943
msgid "Please enter a link URL:"
msgstr ""
@@ -2409,17 +2455,17 @@ msgid ""
msgstr ""
#: ../../mod/wallmessage.php:133 ../../mod/message.php:200
-#: ../../mod/message.php:395
+#: ../../mod/message.php:397
msgid "To:"
msgstr ""
-#: ../../mod/wallmessage.php:134 ../../mod/message.php:204
-#: ../../mod/message.php:396
+#: ../../mod/wallmessage.php:134 ../../mod/message.php:205
+#: ../../mod/message.php:399
msgid "Subject:"
msgstr ""
-#: ../../mod/wallmessage.php:140 ../../mod/message.php:208
-#: ../../mod/message.php:399 ../../mod/invite.php:113
+#: ../../mod/wallmessage.php:140 ../../mod/message.php:209
+#: ../../mod/message.php:402 ../../mod/invite.php:113
msgid "Your message:"
msgstr ""
@@ -2601,9 +2647,9 @@ msgstr ""
msgid "Profile Visibility Editor"
msgstr ""
-#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:124
-#: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:74
-#: ../../include/nav.php:50 ../../boot.php:1484
+#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:128
+#: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:79
+#: ../../include/nav.php:50 ../../boot.php:1505
msgid "Profile"
msgstr ""
@@ -2623,180 +2669,112 @@ msgstr ""
msgid "View Contacts"
msgstr ""
-#: ../../mod/register.php:64
-msgid "An invitation is required."
-msgstr ""
-
-#: ../../mod/register.php:69
-msgid "Invitation could not be verified."
-msgstr ""
-
-#: ../../mod/register.php:77
-msgid "Invalid OpenID url"
-msgstr ""
-
-#: ../../mod/register.php:92
-msgid "Please enter the required information."
-msgstr ""
-
-#: ../../mod/register.php:106
-msgid "Please use a shorter name."
-msgstr ""
-
-#: ../../mod/register.php:108
-msgid "Name too short."
-msgstr ""
-
-#: ../../mod/register.php:123
-msgid "That doesn't appear to be your full (First Last) name."
-msgstr ""
-
-#: ../../mod/register.php:128
-msgid "Your email domain is not among those allowed on this site."
-msgstr ""
-
-#: ../../mod/register.php:131
-msgid "Not a valid email address."
-msgstr ""
-
-#: ../../mod/register.php:141
-msgid "Cannot use that email."
-msgstr ""
-
-#: ../../mod/register.php:147
-msgid ""
-"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
-"must also begin with a letter."
-msgstr ""
-
-#: ../../mod/register.php:153 ../../mod/register.php:264
-msgid "Nickname is already registered. Please choose another."
-msgstr ""
-
-#: ../../mod/register.php:163
-msgid ""
-"Nickname was once registered here and may not be re-used. Please choose "
-"another."
-msgstr ""
-
-#: ../../mod/register.php:182
-msgid "SERIOUS ERROR: Generation of security keys failed."
-msgstr ""
-
-#: ../../mod/register.php:250
-msgid "An error occurred during registration. Please try again."
-msgstr ""
-
-#: ../../mod/register.php:286
-msgid "An error occurred creating your default profile. Please try again."
-msgstr ""
-
-#: ../../mod/register.php:386 ../../mod/regmod.php:52
+#: ../../mod/register.php:88 ../../mod/regmod.php:52
#, php-format
msgid "Registration details for %s"
msgstr ""
-#: ../../mod/register.php:394
+#: ../../mod/register.php:96
msgid ""
"Registration successful. Please check your email for further instructions."
msgstr ""
-#: ../../mod/register.php:398
+#: ../../mod/register.php:100
msgid "Failed to send email message. Here is the message that failed."
msgstr ""
-#: ../../mod/register.php:403
+#: ../../mod/register.php:105
msgid "Your registration can not be processed."
msgstr ""
-#: ../../mod/register.php:440
+#: ../../mod/register.php:142
#, php-format
msgid "Registration request at %s"
msgstr ""
-#: ../../mod/register.php:449
+#: ../../mod/register.php:151
msgid "Your registration is pending approval by the site owner."
msgstr ""
-#: ../../mod/register.php:487
+#: ../../mod/register.php:189
msgid ""
"This site has exceeded the number of allowed daily account registrations. "
"Please try again tomorrow."
msgstr ""
-#: ../../mod/register.php:513
+#: ../../mod/register.php:215
msgid ""
"You may (optionally) fill in this form via OpenID by supplying your OpenID "
"and clicking 'Register'."
msgstr ""
-#: ../../mod/register.php:514
+#: ../../mod/register.php:216
msgid ""
"If you are not familiar with OpenID, please leave that field blank and fill "
"in the rest of the items."
msgstr ""
-#: ../../mod/register.php:515
+#: ../../mod/register.php:217
msgid "Your OpenID (optional): "
msgstr ""
-#: ../../mod/register.php:529
+#: ../../mod/register.php:231
msgid "Include your profile in member directory?"
msgstr ""
-#: ../../mod/register.php:549
+#: ../../mod/register.php:251
msgid "Membership on this site is by invitation only."
msgstr ""
-#: ../../mod/register.php:550
+#: ../../mod/register.php:252
msgid "Your invitation ID: "
msgstr ""
-#: ../../mod/register.php:553 ../../mod/admin.php:405
+#: ../../mod/register.php:255 ../../mod/admin.php:418
msgid "Registration"
msgstr ""
-#: ../../mod/register.php:561
+#: ../../mod/register.php:263
msgid "Your Full Name (e.g. Joe Smith): "
msgstr ""
-#: ../../mod/register.php:562
+#: ../../mod/register.php:264
msgid "Your Email Address: "
msgstr ""
-#: ../../mod/register.php:563
+#: ../../mod/register.php:265
msgid ""
"Choose a profile nickname. This must begin with a text character. Your "
"profile address on this site will then be '<strong>nickname@$sitename</"
"strong>'."
msgstr ""
-#: ../../mod/register.php:564
+#: ../../mod/register.php:266
msgid "Choose a nickname: "
msgstr ""
-#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:790
+#: ../../mod/register.php:269 ../../include/nav.php:81 ../../boot.php:792
msgid "Register"
msgstr ""
-#: ../../mod/dirfind.php:23
+#: ../../mod/dirfind.php:26
msgid "People Search"
msgstr ""
#: ../../mod/like.php:127 ../../mod/tagger.php:70
-#: ../../addon/facebook/facebook.php:1564
+#: ../../addon/facebook/facebook.php:1572
#: ../../addon/communityhome/communityhome.php:158
#: ../../addon/communityhome/communityhome.php:167
-#: ../../view/theme/diabook/theme.php:493
-#: ../../view/theme/diabook/theme.php:502 ../../include/diaspora.php:1654
+#: ../../view/theme/diabook/theme.php:565
+#: ../../view/theme/diabook/theme.php:574 ../../include/diaspora.php:1662
#: ../../include/conversation.php:48 ../../include/conversation.php:57
#: ../../include/conversation.php:121 ../../include/conversation.php:130
msgid "status"
msgstr ""
-#: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1568
+#: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1576
#: ../../addon/communityhome/communityhome.php:172
-#: ../../view/theme/diabook/theme.php:507 ../../include/diaspora.php:1670
+#: ../../view/theme/diabook/theme.php:579 ../../include/diaspora.php:1678
#: ../../include/conversation.php:65
#, php-format
msgid "%1$s likes %2$s's %3$s"
@@ -2808,8 +2786,8 @@ msgid "%1$s doesn't like %2$s's %3$s"
msgstr ""
#: ../../mod/notice.php:15 ../../mod/viewsrc.php:15 ../../mod/admin.php:156
-#: ../../mod/admin.php:684 ../../mod/admin.php:883 ../../mod/display.php:37
-#: ../../mod/display.php:142 ../../include/items.php:3084
+#: ../../mod/admin.php:697 ../../mod/admin.php:896 ../../mod/display.php:37
+#: ../../mod/display.php:142 ../../include/items.php:3179
msgid "Item not found."
msgstr ""
@@ -2817,8 +2795,8 @@ msgstr ""
msgid "Access denied."
msgstr ""
-#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:126
-#: ../../include/nav.php:51 ../../boot.php:1490
+#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:130
+#: ../../include/nav.php:51 ../../boot.php:1511
msgid "Photos"
msgstr ""
@@ -2843,38 +2821,38 @@ msgstr ""
msgid "Unable to locate original post."
msgstr ""
-#: ../../mod/item.php:249
+#: ../../mod/item.php:258
msgid "Empty post discarded."
msgstr ""
-#: ../../mod/item.php:372 ../../mod/wall_upload.php:99
+#: ../../mod/item.php:379 ../../mod/wall_upload.php:99
#: ../../mod/wall_upload.php:108 ../../mod/wall_upload.php:115
#: ../../include/message.php:144
msgid "Wall Photos"
msgstr ""
-#: ../../mod/item.php:781
+#: ../../mod/item.php:800
msgid "System error. Post not saved."
msgstr ""
-#: ../../mod/item.php:806
+#: ../../mod/item.php:825
#, php-format
msgid ""
"This message was sent to you by %s, a member of the Friendica social network."
msgstr ""
-#: ../../mod/item.php:808
+#: ../../mod/item.php:827
#, php-format
msgid "You may visit them online at %s"
msgstr ""
-#: ../../mod/item.php:809
+#: ../../mod/item.php:828
msgid ""
"Please contact the sender by replying to this post if you do not wish to "
"receive these messages."
msgstr ""
-#: ../../mod/item.php:811
+#: ../../mod/item.php:830
#, php-format
msgid "%s posted an update."
msgstr ""
@@ -2974,55 +2952,55 @@ msgstr ""
msgid "Conversation removed."
msgstr ""
-#: ../../mod/message.php:244
+#: ../../mod/message.php:245
msgid "No messages."
msgstr ""
-#: ../../mod/message.php:251
+#: ../../mod/message.php:252
#, php-format
msgid "Unknown sender - %s"
msgstr ""
-#: ../../mod/message.php:254
+#: ../../mod/message.php:255
#, php-format
msgid "You and %s"
msgstr ""
-#: ../../mod/message.php:257
+#: ../../mod/message.php:258
#, php-format
msgid "%s and You"
msgstr ""
-#: ../../mod/message.php:267 ../../mod/message.php:388
+#: ../../mod/message.php:268 ../../mod/message.php:390
msgid "Delete conversation"
msgstr ""
-#: ../../mod/message.php:270
+#: ../../mod/message.php:271
msgid "D, d M Y - g:i A"
msgstr ""
-#: ../../mod/message.php:272
+#: ../../mod/message.php:273
#, php-format
msgid "%d message"
msgid_plural "%d messages"
msgstr[0] ""
msgstr[1] ""
-#: ../../mod/message.php:307
+#: ../../mod/message.php:308
msgid "Message not available."
msgstr ""
-#: ../../mod/message.php:372
+#: ../../mod/message.php:373
msgid "Delete message"
msgstr ""
-#: ../../mod/message.php:390
+#: ../../mod/message.php:392
msgid ""
"No secure communications available. You <strong>may</strong> be able to "
"respond from the sender's profile page."
msgstr ""
-#: ../../mod/message.php:394
+#: ../../mod/message.php:396
msgid "Send Reply"
msgstr ""
@@ -3039,19 +3017,19 @@ msgstr ""
msgid "Theme settings updated."
msgstr ""
-#: ../../mod/admin.php:96 ../../mod/admin.php:403
+#: ../../mod/admin.php:96 ../../mod/admin.php:416
msgid "Site"
msgstr ""
-#: ../../mod/admin.php:97 ../../mod/admin.php:639 ../../mod/admin.php:651
+#: ../../mod/admin.php:97 ../../mod/admin.php:652 ../../mod/admin.php:664
msgid "Users"
msgstr ""
-#: ../../mod/admin.php:98 ../../mod/admin.php:733 ../../mod/admin.php:775
+#: ../../mod/admin.php:98 ../../mod/admin.php:746 ../../mod/admin.php:788
msgid "Plugins"
msgstr ""
-#: ../../mod/admin.php:99 ../../mod/admin.php:938 ../../mod/admin.php:974
+#: ../../mod/admin.php:99 ../../mod/admin.php:951 ../../mod/admin.php:987
msgid "Themes"
msgstr ""
@@ -3059,11 +3037,7 @@ msgstr ""
msgid "DB updates"
msgstr ""
-#: ../../mod/admin.php:101
-msgid "Software Update"
-msgstr ""
-
-#: ../../mod/admin.php:115 ../../mod/admin.php:1061
+#: ../../mod/admin.php:115 ../../mod/admin.php:1074
msgid "Logs"
msgstr ""
@@ -3071,533 +3045,553 @@ msgstr ""
msgid "User registrations waiting for confirmation"
msgstr ""
-#: ../../mod/admin.php:195 ../../mod/admin.php:402 ../../mod/admin.php:638
-#: ../../mod/admin.php:732 ../../mod/admin.php:774 ../../mod/admin.php:937
-#: ../../mod/admin.php:973 ../../mod/admin.php:1060
+#: ../../mod/admin.php:180 ../../mod/admin.php:634
+msgid "Normal Account"
+msgstr ""
+
+#: ../../mod/admin.php:181 ../../mod/admin.php:635
+msgid "Soapbox Account"
+msgstr ""
+
+#: ../../mod/admin.php:182 ../../mod/admin.php:636
+msgid "Community/Celebrity Account"
+msgstr ""
+
+#: ../../mod/admin.php:183 ../../mod/admin.php:637
+msgid "Automatic Friend Account"
+msgstr ""
+
+#: ../../mod/admin.php:202
+msgid "Message queues"
+msgstr ""
+
+#: ../../mod/admin.php:207 ../../mod/admin.php:415 ../../mod/admin.php:651
+#: ../../mod/admin.php:745 ../../mod/admin.php:787 ../../mod/admin.php:950
+#: ../../mod/admin.php:986 ../../mod/admin.php:1073
msgid "Administration"
msgstr ""
-#: ../../mod/admin.php:196
+#: ../../mod/admin.php:208
msgid "Summary"
msgstr ""
-#: ../../mod/admin.php:197
+#: ../../mod/admin.php:210
msgid "Registered users"
msgstr ""
-#: ../../mod/admin.php:199
+#: ../../mod/admin.php:212
msgid "Pending registrations"
msgstr ""
-#: ../../mod/admin.php:200
+#: ../../mod/admin.php:213
msgid "Version"
msgstr ""
-#: ../../mod/admin.php:202
+#: ../../mod/admin.php:215
msgid "Active plugins"
msgstr ""
-#: ../../mod/admin.php:341
+#: ../../mod/admin.php:354
msgid "Site settings updated."
msgstr ""
-#: ../../mod/admin.php:389
+#: ../../mod/admin.php:402
msgid "Closed"
msgstr ""
-#: ../../mod/admin.php:390
+#: ../../mod/admin.php:403
msgid "Requires approval"
msgstr ""
-#: ../../mod/admin.php:391
+#: ../../mod/admin.php:404
msgid "Open"
msgstr ""
-#: ../../mod/admin.php:395
+#: ../../mod/admin.php:408
msgid "No SSL policy, links will track page SSL state"
msgstr ""
-#: ../../mod/admin.php:396
+#: ../../mod/admin.php:409
msgid "Force all links to use SSL"
msgstr ""
-#: ../../mod/admin.php:397
+#: ../../mod/admin.php:410
msgid "Self-signed certificate, use SSL for local links only (discouraged)"
msgstr ""
-#: ../../mod/admin.php:406
+#: ../../mod/admin.php:419
msgid "File upload"
msgstr ""
-#: ../../mod/admin.php:407
+#: ../../mod/admin.php:420
msgid "Policies"
msgstr ""
-#: ../../mod/admin.php:408
+#: ../../mod/admin.php:421
msgid "Advanced"
msgstr ""
-#: ../../mod/admin.php:412 ../../addon/statusnet/statusnet.php:544
+#: ../../mod/admin.php:425 ../../addon/statusnet/statusnet.php:552
msgid "Site name"
msgstr ""
-#: ../../mod/admin.php:413
+#: ../../mod/admin.php:426
msgid "Banner/Logo"
msgstr ""
-#: ../../mod/admin.php:414
+#: ../../mod/admin.php:427
msgid "System language"
msgstr ""
-#: ../../mod/admin.php:415
+#: ../../mod/admin.php:428
msgid "System theme"
msgstr ""
-#: ../../mod/admin.php:415
+#: ../../mod/admin.php:428
msgid ""
"Default system theme - may be over-ridden by user profiles - <a href='#' "
"id='cnftheme'>change theme settings</a>"
msgstr ""
-#: ../../mod/admin.php:416
+#: ../../mod/admin.php:429
msgid "SSL link policy"
msgstr ""
-#: ../../mod/admin.php:416
+#: ../../mod/admin.php:429
msgid "Determines whether generated links should be forced to use SSL"
msgstr ""
-#: ../../mod/admin.php:417
+#: ../../mod/admin.php:430
msgid "Maximum image size"
msgstr ""
-#: ../../mod/admin.php:417
+#: ../../mod/admin.php:430
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr ""
-#: ../../mod/admin.php:419
+#: ../../mod/admin.php:432
msgid "Register policy"
msgstr ""
-#: ../../mod/admin.php:420
+#: ../../mod/admin.php:433
msgid "Register text"
msgstr ""
-#: ../../mod/admin.php:420
+#: ../../mod/admin.php:433
msgid "Will be displayed prominently on the registration page."
msgstr ""
-#: ../../mod/admin.php:421
+#: ../../mod/admin.php:434
msgid "Accounts abandoned after x days"
msgstr ""
-#: ../../mod/admin.php:421
+#: ../../mod/admin.php:434
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr ""
-#: ../../mod/admin.php:422
+#: ../../mod/admin.php:435
msgid "Allowed friend domains"
msgstr ""
-#: ../../mod/admin.php:422
+#: ../../mod/admin.php:435
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr ""
-#: ../../mod/admin.php:423
+#: ../../mod/admin.php:436
msgid "Allowed email domains"
msgstr ""
-#: ../../mod/admin.php:423
+#: ../../mod/admin.php:436
msgid ""
"Comma separated list of domains which are allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any "
"domains"
msgstr ""
-#: ../../mod/admin.php:424
+#: ../../mod/admin.php:437
msgid "Block public"
msgstr ""
-#: ../../mod/admin.php:424
+#: ../../mod/admin.php:437
msgid ""
"Check to block public access to all otherwise public personal pages on this "
"site unless you are currently logged in."
msgstr ""
-#: ../../mod/admin.php:425
+#: ../../mod/admin.php:438
msgid "Force publish"
msgstr ""
-#: ../../mod/admin.php:425
+#: ../../mod/admin.php:438
msgid ""
"Check to force all profiles on this site to be listed in the site directory."
msgstr ""
-#: ../../mod/admin.php:426
+#: ../../mod/admin.php:439
msgid "Global directory update URL"
msgstr ""
-#: ../../mod/admin.php:426
+#: ../../mod/admin.php:439
msgid ""
"URL to update the global directory. If this is not set, the global directory "
"is completely unavailable to the application."
msgstr ""
-#: ../../mod/admin.php:428
+#: ../../mod/admin.php:441
msgid "Block multiple registrations"
msgstr ""
-#: ../../mod/admin.php:428
+#: ../../mod/admin.php:441
msgid "Disallow users to register additional accounts for use as pages."
msgstr ""
-#: ../../mod/admin.php:429
+#: ../../mod/admin.php:442
msgid "OpenID support"
msgstr ""
-#: ../../mod/admin.php:429
+#: ../../mod/admin.php:442
msgid "OpenID support for registration and logins."
msgstr ""
-#: ../../mod/admin.php:430
+#: ../../mod/admin.php:443
msgid "Fullname check"
msgstr ""
-#: ../../mod/admin.php:430
+#: ../../mod/admin.php:443
msgid ""
"Force users to register with a space between firstname and lastname in Full "
"name, as an antispam measure"
msgstr ""
-#: ../../mod/admin.php:431
+#: ../../mod/admin.php:444
msgid "UTF-8 Regular expressions"
msgstr ""
-#: ../../mod/admin.php:431
+#: ../../mod/admin.php:444
msgid "Use PHP UTF8 regular expressions"
msgstr ""
-#: ../../mod/admin.php:432
+#: ../../mod/admin.php:445
msgid "Show Community Page"
msgstr ""
-#: ../../mod/admin.php:432
+#: ../../mod/admin.php:445
msgid ""
"Display a Community page showing all recent public postings on this site."
msgstr ""
-#: ../../mod/admin.php:433
+#: ../../mod/admin.php:446
msgid "Enable OStatus support"
msgstr ""
-#: ../../mod/admin.php:433
+#: ../../mod/admin.php:446
msgid ""
"Provide built-in OStatus (identi.ca, status.net, etc.) compatibility. All "
"communications in OStatus are public, so privacy warnings will be "
"occasionally displayed."
msgstr ""
-#: ../../mod/admin.php:434
+#: ../../mod/admin.php:447
msgid "Enable Diaspora support"
msgstr ""
-#: ../../mod/admin.php:434
+#: ../../mod/admin.php:447
msgid "Provide built-in Diaspora network compatibility."
msgstr ""
-#: ../../mod/admin.php:435
+#: ../../mod/admin.php:448
msgid "Only allow Friendica contacts"
msgstr ""
-#: ../../mod/admin.php:435
+#: ../../mod/admin.php:448
msgid ""
"All contacts must use Friendica protocols. All other built-in communication "
"protocols disabled."
msgstr ""
-#: ../../mod/admin.php:436
+#: ../../mod/admin.php:449
msgid "Verify SSL"
msgstr ""
-#: ../../mod/admin.php:436
+#: ../../mod/admin.php:449
msgid ""
"If you wish, you can turn on strict certificate checking. This will mean you "
"cannot connect (at all) to self-signed SSL sites."
msgstr ""
-#: ../../mod/admin.php:437
+#: ../../mod/admin.php:450
msgid "Proxy user"
msgstr ""
-#: ../../mod/admin.php:438
+#: ../../mod/admin.php:451
msgid "Proxy URL"
msgstr ""
-#: ../../mod/admin.php:439
+#: ../../mod/admin.php:452
msgid "Network timeout"
msgstr ""
-#: ../../mod/admin.php:439
+#: ../../mod/admin.php:452
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr ""
-#: ../../mod/admin.php:440
+#: ../../mod/admin.php:453
msgid "Delivery interval"
msgstr ""
-#: ../../mod/admin.php:440
+#: ../../mod/admin.php:453
msgid ""
"Delay background delivery processes by this many seconds to reduce system "
"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
"for large dedicated servers."
msgstr ""
-#: ../../mod/admin.php:441
+#: ../../mod/admin.php:454
msgid "Poll interval"
msgstr ""
-#: ../../mod/admin.php:441
+#: ../../mod/admin.php:454
msgid ""
"Delay background polling processes by this many seconds to reduce system "
"load. If 0, use delivery interval."
msgstr ""
-#: ../../mod/admin.php:442
+#: ../../mod/admin.php:455
msgid "Maximum Load Average"
msgstr ""
-#: ../../mod/admin.php:442
+#: ../../mod/admin.php:455
msgid ""
"Maximum system load before delivery and poll processes are deferred - "
"default 50."
msgstr ""
-#: ../../mod/admin.php:456
+#: ../../mod/admin.php:469
msgid "Update has been marked successful"
msgstr ""
-#: ../../mod/admin.php:466
+#: ../../mod/admin.php:479
#, php-format
msgid "Executing %s failed. Check system logs."
msgstr ""
-#: ../../mod/admin.php:469
+#: ../../mod/admin.php:482
#, php-format
msgid "Update %s was successfully applied."
msgstr ""
-#: ../../mod/admin.php:473
+#: ../../mod/admin.php:486
#, php-format
msgid "Update %s did not return a status. Unknown if it succeeded."
msgstr ""
-#: ../../mod/admin.php:476
+#: ../../mod/admin.php:489
#, php-format
msgid "Update function %s could not be found."
msgstr ""
-#: ../../mod/admin.php:491
+#: ../../mod/admin.php:504
msgid "No failed updates."
msgstr ""
-#: ../../mod/admin.php:495
+#: ../../mod/admin.php:508
msgid "Failed Updates"
msgstr ""
-#: ../../mod/admin.php:496
+#: ../../mod/admin.php:509
msgid ""
"This does not include updates prior to 1139, which did not return a status."
msgstr ""
-#: ../../mod/admin.php:497
+#: ../../mod/admin.php:510
msgid "Mark success (if update was manually applied)"
msgstr ""
-#: ../../mod/admin.php:498
+#: ../../mod/admin.php:511
msgid "Attempt to execute this update step automatically"
msgstr ""
-#: ../../mod/admin.php:523
+#: ../../mod/admin.php:536
#, php-format
msgid "%s user blocked/unblocked"
msgid_plural "%s users blocked/unblocked"
msgstr[0] ""
msgstr[1] ""
-#: ../../mod/admin.php:530
+#: ../../mod/admin.php:543
#, php-format
msgid "%s user deleted"
msgid_plural "%s users deleted"
msgstr[0] ""
msgstr[1] ""
-#: ../../mod/admin.php:569
+#: ../../mod/admin.php:582
#, php-format
msgid "User '%s' deleted"
msgstr ""
-#: ../../mod/admin.php:577
+#: ../../mod/admin.php:590
#, php-format
msgid "User '%s' unblocked"
msgstr ""
-#: ../../mod/admin.php:577
+#: ../../mod/admin.php:590
#, php-format
msgid "User '%s' blocked"
msgstr ""
-#: ../../mod/admin.php:641
+#: ../../mod/admin.php:654
msgid "select all"
msgstr ""
-#: ../../mod/admin.php:642
+#: ../../mod/admin.php:655
msgid "User registrations waiting for confirm"
msgstr ""
-#: ../../mod/admin.php:643
+#: ../../mod/admin.php:656
msgid "Request date"
msgstr ""
-#: ../../mod/admin.php:643 ../../mod/admin.php:652
+#: ../../mod/admin.php:656 ../../mod/admin.php:665
#: ../../include/contact_selectors.php:79
msgid "Email"
msgstr ""
-#: ../../mod/admin.php:644
+#: ../../mod/admin.php:657
msgid "No registrations."
msgstr ""
-#: ../../mod/admin.php:646
+#: ../../mod/admin.php:659
msgid "Deny"
msgstr ""
-#: ../../mod/admin.php:652
+#: ../../mod/admin.php:665
msgid "Register date"
msgstr ""
-#: ../../mod/admin.php:652
+#: ../../mod/admin.php:665
msgid "Last login"
msgstr ""
-#: ../../mod/admin.php:652
+#: ../../mod/admin.php:665
msgid "Last item"
msgstr ""
-#: ../../mod/admin.php:652
+#: ../../mod/admin.php:665
msgid "Account"
msgstr ""
-#: ../../mod/admin.php:654
+#: ../../mod/admin.php:667
msgid ""
"Selected users will be deleted!\\n\\nEverything these users had posted on "
"this site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../mod/admin.php:655
+#: ../../mod/admin.php:668
msgid ""
"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
"site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../mod/admin.php:696
+#: ../../mod/admin.php:709
#, php-format
msgid "Plugin %s disabled."
msgstr ""
-#: ../../mod/admin.php:700
+#: ../../mod/admin.php:713
#, php-format
msgid "Plugin %s enabled."
msgstr ""
-#: ../../mod/admin.php:710 ../../mod/admin.php:908
+#: ../../mod/admin.php:723 ../../mod/admin.php:921
msgid "Disable"
msgstr ""
-#: ../../mod/admin.php:712 ../../mod/admin.php:910
+#: ../../mod/admin.php:725 ../../mod/admin.php:923
msgid "Enable"
msgstr ""
-#: ../../mod/admin.php:734 ../../mod/admin.php:939
+#: ../../mod/admin.php:747 ../../mod/admin.php:952
msgid "Toggle"
msgstr ""
-#: ../../mod/admin.php:742 ../../mod/admin.php:949
+#: ../../mod/admin.php:755 ../../mod/admin.php:962
msgid "Author: "
msgstr ""
-#: ../../mod/admin.php:743 ../../mod/admin.php:950
+#: ../../mod/admin.php:756 ../../mod/admin.php:963
msgid "Maintainer: "
msgstr ""
-#: ../../mod/admin.php:872
+#: ../../mod/admin.php:885
msgid "No themes found."
msgstr ""
-#: ../../mod/admin.php:931
+#: ../../mod/admin.php:944
msgid "Screenshot"
msgstr ""
-#: ../../mod/admin.php:979
+#: ../../mod/admin.php:992
msgid "[Experimental]"
msgstr ""
-#: ../../mod/admin.php:980
+#: ../../mod/admin.php:993
msgid "[Unsupported]"
msgstr ""
-#: ../../mod/admin.php:1007
+#: ../../mod/admin.php:1020
msgid "Log settings updated."
msgstr ""
-#: ../../mod/admin.php:1063
+#: ../../mod/admin.php:1076
msgid "Clear"
msgstr ""
-#: ../../mod/admin.php:1069
+#: ../../mod/admin.php:1082
msgid "Debugging"
msgstr ""
-#: ../../mod/admin.php:1070
+#: ../../mod/admin.php:1083
msgid "Log file"
msgstr ""
-#: ../../mod/admin.php:1070
+#: ../../mod/admin.php:1083
msgid ""
"Must be writable by web server. Relative to your Friendica top-level "
"directory."
msgstr ""
-#: ../../mod/admin.php:1071
+#: ../../mod/admin.php:1084
msgid "Log level"
msgstr ""
-#: ../../mod/admin.php:1121
+#: ../../mod/admin.php:1134
msgid "Close"
msgstr ""
-#: ../../mod/admin.php:1127
+#: ../../mod/admin.php:1140
msgid "FTP Host"
msgstr ""
-#: ../../mod/admin.php:1128
+#: ../../mod/admin.php:1141
msgid "FTP Path"
msgstr ""
-#: ../../mod/admin.php:1129
+#: ../../mod/admin.php:1142
msgid "FTP User"
msgstr ""
-#: ../../mod/admin.php:1130
+#: ../../mod/admin.php:1143
msgid "FTP Password"
msgstr ""
-#: ../../mod/profile.php:21 ../../boot.php:955
+#: ../../mod/profile.php:21 ../../boot.php:957
msgid "Requested profile is not available."
msgstr ""
@@ -3609,48 +3603,48 @@ msgstr ""
msgid "Tips for New Members"
msgstr ""
-#: ../../mod/ping.php:177
+#: ../../mod/ping.php:185
msgid "{0} wants to be your friend"
msgstr ""
-#: ../../mod/ping.php:182
+#: ../../mod/ping.php:190
msgid "{0} sent you a message"
msgstr ""
-#: ../../mod/ping.php:187
+#: ../../mod/ping.php:195
msgid "{0} requested registration"
msgstr ""
-#: ../../mod/ping.php:193
+#: ../../mod/ping.php:201
#, php-format
msgid "{0} commented %s's post"
msgstr ""
-#: ../../mod/ping.php:198
+#: ../../mod/ping.php:206
#, php-format
msgid "{0} liked %s's post"
msgstr ""
-#: ../../mod/ping.php:203
+#: ../../mod/ping.php:211
#, php-format
msgid "{0} disliked %s's post"
msgstr ""
-#: ../../mod/ping.php:208
+#: ../../mod/ping.php:216
#, php-format
msgid "{0} is now friends with %s"
msgstr ""
-#: ../../mod/ping.php:213
+#: ../../mod/ping.php:221
msgid "{0} posted"
msgstr ""
-#: ../../mod/ping.php:218
+#: ../../mod/ping.php:226
#, php-format
msgid "{0} tagged %s's post with #%s"
msgstr ""
-#: ../../mod/ping.php:224
+#: ../../mod/ping.php:232
msgid "{0} mentioned you in a post"
msgstr ""
@@ -3667,64 +3661,13 @@ msgid ""
"Account not found and OpenID registration is not permitted on this site."
msgstr ""
-#: ../../mod/openid.php:93 ../../include/auth.php:90
-#: ../../include/auth.php:153
+#: ../../mod/openid.php:93 ../../include/auth.php:99
+#: ../../include/auth.php:162
msgid "Login failed."
msgstr ""
-#: ../../mod/follow.php:30
-msgid "Connect URL missing."
-msgstr ""
-
-#: ../../mod/follow.php:56
-msgid ""
-"This site is not configured to allow communications with other networks."
-msgstr ""
-
-#: ../../mod/follow.php:57 ../../mod/follow.php:72
-msgid "No compatible communication protocols or feeds were discovered."
-msgstr ""
-
-#: ../../mod/follow.php:70
-msgid "The profile address specified does not provide adequate information."
-msgstr ""
-
-#: ../../mod/follow.php:74
-msgid "An author or name was not found."
-msgstr ""
-
-#: ../../mod/follow.php:76
-msgid "No browser URL could be matched to this address."
-msgstr ""
-
-#: ../../mod/follow.php:78
-msgid ""
-"Unable to match @-style Identity Address with a known protocol or email "
-"contact."
-msgstr ""
-
-#: ../../mod/follow.php:79
-msgid "Use mailto: in front of address to force email check."
-msgstr ""
-
-#: ../../mod/follow.php:85
-msgid ""
-"The profile address specified belongs to a network which has been disabled "
-"on this site."
-msgstr ""
-
-#: ../../mod/follow.php:90
-msgid ""
-"Limited profile. This person will be unable to receive direct/personal "
-"notifications from you."
-msgstr ""
-
-#: ../../mod/follow.php:160
-msgid "Unable to retrieve contact information."
-msgstr ""
-
-#: ../../mod/follow.php:206
-msgid "following"
+#: ../../mod/follow.php:27
+msgid "Contact added"
msgstr ""
#: ../../mod/common.php:42
@@ -3747,12 +3690,13 @@ msgstr ""
msgid "No installed applications."
msgstr ""
-#: ../../mod/search.php:83
-msgid "Search This Site"
+#: ../../mod/search.php:83 ../../include/text.php:649
+#: ../../include/text.php:650 ../../include/nav.php:91
+msgid "Search"
msgstr ""
-#: ../../mod/profiles.php:21 ../../mod/profiles.php:375
-#: ../../mod/profiles.php:489 ../../mod/dfrn_confirm.php:62
+#: ../../mod/profiles.php:21 ../../mod/profiles.php:395
+#: ../../mod/profiles.php:509 ../../mod/dfrn_confirm.php:62
msgid "Profile not found."
msgstr ""
@@ -3760,272 +3704,289 @@ msgstr ""
msgid "Profile Name is required."
msgstr ""
-#: ../../mod/profiles.php:145
+#: ../../mod/profiles.php:152
msgid "Marital Status"
msgstr ""
-#: ../../mod/profiles.php:149
+#: ../../mod/profiles.php:156
msgid "Romantic Partner"
msgstr ""
-#: ../../mod/profiles.php:153
+#: ../../mod/profiles.php:160
msgid "Work/Employment"
msgstr ""
-#: ../../mod/profiles.php:156
+#: ../../mod/profiles.php:163
msgid "Religion"
msgstr ""
-#: ../../mod/profiles.php:160
+#: ../../mod/profiles.php:167
msgid "Political Views"
msgstr ""
-#: ../../mod/profiles.php:164
+#: ../../mod/profiles.php:171
msgid "Gender"
msgstr ""
-#: ../../mod/profiles.php:168
+#: ../../mod/profiles.php:175
msgid "Sexual Preference"
msgstr ""
-#: ../../mod/profiles.php:172
+#: ../../mod/profiles.php:179
msgid "Homepage"
msgstr ""
-#: ../../mod/profiles.php:176
+#: ../../mod/profiles.php:183
msgid "Interests"
msgstr ""
-#: ../../mod/profiles.php:181
+#: ../../mod/profiles.php:187
+msgid "Address"
+msgstr ""
+
+#: ../../mod/profiles.php:194
msgid "Location"
msgstr ""
-#: ../../mod/profiles.php:253
+#: ../../mod/profiles.php:273
msgid "Profile updated."
msgstr ""
-#: ../../mod/profiles.php:320
+#: ../../mod/profiles.php:340
msgid " and "
msgstr ""
-#: ../../mod/profiles.php:328
+#: ../../mod/profiles.php:348
msgid "public profile"
msgstr ""
-#: ../../mod/profiles.php:331
+#: ../../mod/profiles.php:351
#, php-format
msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
msgstr ""
-#: ../../mod/profiles.php:335
+#: ../../mod/profiles.php:352
+#, php-format
+msgid " - Visit %1$s's %2$s"
+msgstr ""
+
+#: ../../mod/profiles.php:355
#, php-format
msgid "%1$s has an updated %2$s, changing %3$s."
msgstr ""
-#: ../../mod/profiles.php:394
+#: ../../mod/profiles.php:414
msgid "Profile deleted."
msgstr ""
-#: ../../mod/profiles.php:412 ../../mod/profiles.php:446
+#: ../../mod/profiles.php:432 ../../mod/profiles.php:466
msgid "Profile-"
msgstr ""
-#: ../../mod/profiles.php:431 ../../mod/profiles.php:473
+#: ../../mod/profiles.php:451 ../../mod/profiles.php:493
msgid "New profile created."
msgstr ""
-#: ../../mod/profiles.php:452
+#: ../../mod/profiles.php:472
msgid "Profile unavailable to clone."
msgstr ""
-#: ../../mod/profiles.php:510
+#: ../../mod/profiles.php:530
msgid "Hide your contact/friend list from viewers of this profile?"
msgstr ""
-#: ../../mod/profiles.php:533
+#: ../../mod/profiles.php:553
msgid "Edit Profile Details"
msgstr ""
-#: ../../mod/profiles.php:535
+#: ../../mod/profiles.php:555
msgid "View this profile"
msgstr ""
-#: ../../mod/profiles.php:536
+#: ../../mod/profiles.php:556
msgid "Create a new profile using these settings"
msgstr ""
-#: ../../mod/profiles.php:537
+#: ../../mod/profiles.php:557
msgid "Clone this profile"
msgstr ""
-#: ../../mod/profiles.php:538
+#: ../../mod/profiles.php:558
msgid "Delete this profile"
msgstr ""
-#: ../../mod/profiles.php:539
+#: ../../mod/profiles.php:559
msgid "Profile Name:"
msgstr ""
-#: ../../mod/profiles.php:540
+#: ../../mod/profiles.php:560
msgid "Your Full Name:"
msgstr ""
-#: ../../mod/profiles.php:541
+#: ../../mod/profiles.php:561
msgid "Title/Description:"
msgstr ""
-#: ../../mod/profiles.php:542
+#: ../../mod/profiles.php:562
msgid "Your Gender:"
msgstr ""
-#: ../../mod/profiles.php:543
+#: ../../mod/profiles.php:563
#, php-format
msgid "Birthday (%s):"
msgstr ""
-#: ../../mod/profiles.php:544
+#: ../../mod/profiles.php:564
msgid "Street Address:"
msgstr ""
-#: ../../mod/profiles.php:545
+#: ../../mod/profiles.php:565
msgid "Locality/City:"
msgstr ""
-#: ../../mod/profiles.php:546
+#: ../../mod/profiles.php:566
msgid "Postal/Zip Code:"
msgstr ""
-#: ../../mod/profiles.php:547
+#: ../../mod/profiles.php:567
msgid "Country:"
msgstr ""
-#: ../../mod/profiles.php:548
+#: ../../mod/profiles.php:568
msgid "Region/State:"
msgstr ""
-#: ../../mod/profiles.php:549
+#: ../../mod/profiles.php:569
msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
msgstr ""
-#: ../../mod/profiles.php:550
+#: ../../mod/profiles.php:570
msgid "Who: (if applicable)"
msgstr ""
-#: ../../mod/profiles.php:551
+#: ../../mod/profiles.php:571
msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
msgstr ""
-#: ../../mod/profiles.php:552 ../../include/profile_advanced.php:43
+#: ../../mod/profiles.php:572
+msgid "Since [date]:"
+msgstr ""
+
+#: ../../mod/profiles.php:573 ../../include/profile_advanced.php:46
msgid "Sexual Preference:"
msgstr ""
-#: ../../mod/profiles.php:553
+#: ../../mod/profiles.php:574
msgid "Homepage URL:"
msgstr ""
-#: ../../mod/profiles.php:554 ../../include/profile_advanced.php:49
+#: ../../mod/profiles.php:575 ../../include/profile_advanced.php:50
+msgid "Hometown:"
+msgstr ""
+
+#: ../../mod/profiles.php:576 ../../include/profile_advanced.php:54
msgid "Political Views:"
msgstr ""
-#: ../../mod/profiles.php:555
+#: ../../mod/profiles.php:577
msgid "Religious Views:"
msgstr ""
-#: ../../mod/profiles.php:556
+#: ../../mod/profiles.php:578
msgid "Public Keywords:"
msgstr ""
-#: ../../mod/profiles.php:557
+#: ../../mod/profiles.php:579
msgid "Private Keywords:"
msgstr ""
-#: ../../mod/profiles.php:558
+#: ../../mod/profiles.php:580
msgid "Example: fishing photography software"
msgstr ""
-#: ../../mod/profiles.php:559
+#: ../../mod/profiles.php:581
msgid "(Used for suggesting potential friends, can be seen by others)"
msgstr ""
-#: ../../mod/profiles.php:560
+#: ../../mod/profiles.php:582
msgid "(Used for searching profiles, never shown to others)"
msgstr ""
-#: ../../mod/profiles.php:561
+#: ../../mod/profiles.php:583
msgid "Tell us about yourself..."
msgstr ""
-#: ../../mod/profiles.php:562
+#: ../../mod/profiles.php:584
msgid "Hobbies/Interests"
msgstr ""
-#: ../../mod/profiles.php:563
+#: ../../mod/profiles.php:585
msgid "Contact information and Social Networks"
msgstr ""
-#: ../../mod/profiles.php:564
+#: ../../mod/profiles.php:586
msgid "Musical interests"
msgstr ""
-#: ../../mod/profiles.php:565
+#: ../../mod/profiles.php:587
msgid "Books, literature"
msgstr ""
-#: ../../mod/profiles.php:566
+#: ../../mod/profiles.php:588
msgid "Television"
msgstr ""
-#: ../../mod/profiles.php:567
+#: ../../mod/profiles.php:589
msgid "Film/dance/culture/entertainment"
msgstr ""
-#: ../../mod/profiles.php:568
+#: ../../mod/profiles.php:590
msgid "Love/romance"
msgstr ""
-#: ../../mod/profiles.php:569
+#: ../../mod/profiles.php:591
msgid "Work/employment"
msgstr ""
-#: ../../mod/profiles.php:570
+#: ../../mod/profiles.php:592
msgid "School/education"
msgstr ""
-#: ../../mod/profiles.php:575
+#: ../../mod/profiles.php:597
msgid ""
"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
"be visible to anybody using the internet."
msgstr ""
-#: ../../mod/profiles.php:585 ../../mod/directory.php:111
+#: ../../mod/profiles.php:607 ../../mod/directory.php:111
msgid "Age: "
msgstr ""
-#: ../../mod/profiles.php:620
+#: ../../mod/profiles.php:644
msgid "Edit/Manage Profiles"
msgstr ""
-#: ../../mod/profiles.php:621 ../../boot.php:1064
+#: ../../mod/profiles.php:645 ../../boot.php:1066
msgid "Change profile photo"
msgstr ""
-#: ../../mod/profiles.php:622 ../../boot.php:1065
+#: ../../mod/profiles.php:646 ../../boot.php:1067
msgid "Create New Profile"
msgstr ""
-#: ../../mod/profiles.php:633 ../../boot.php:1075
+#: ../../mod/profiles.php:657 ../../boot.php:1077
msgid "Profile Image"
msgstr ""
-#: ../../mod/profiles.php:635 ../../boot.php:1078
+#: ../../mod/profiles.php:659 ../../boot.php:1080
msgid "visible to everybody"
msgstr ""
-#: ../../mod/profiles.php:636 ../../boot.php:1079
+#: ../../mod/profiles.php:660 ../../boot.php:1081
msgid "Edit visibility"
msgstr ""
-#: ../../mod/filer.php:29 ../../include/conversation.php:922
+#: ../../mod/filer.php:29 ../../include/conversation.php:947
msgid "Save to Folder:"
msgstr ""
@@ -4073,7 +4034,7 @@ msgstr ""
msgid "No entries."
msgstr ""
-#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:554
+#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:626
#: ../../include/contact_widgets.php:34
msgid "Friend Suggestions"
msgstr ""
@@ -4088,12 +4049,7 @@ msgstr ""
msgid "Ignore/Hide"
msgstr ""
-#: ../../mod/acl.php:134
-#, php-format
-msgid "%s [%s]"
-msgstr ""
-
-#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:552
+#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:624
msgid "Global Directory"
msgstr ""
@@ -4203,164 +4159,164 @@ msgid ""
"has already been approved."
msgstr ""
-#: ../../mod/dfrn_confirm.php:242
+#: ../../mod/dfrn_confirm.php:237
msgid "Response from remote site was not understood."
msgstr ""
-#: ../../mod/dfrn_confirm.php:251
+#: ../../mod/dfrn_confirm.php:246
msgid "Unexpected response from remote site: "
msgstr ""
-#: ../../mod/dfrn_confirm.php:259
+#: ../../mod/dfrn_confirm.php:254
msgid "Confirmation completed successfully."
msgstr ""
-#: ../../mod/dfrn_confirm.php:261 ../../mod/dfrn_confirm.php:275
-#: ../../mod/dfrn_confirm.php:282
+#: ../../mod/dfrn_confirm.php:256 ../../mod/dfrn_confirm.php:270
+#: ../../mod/dfrn_confirm.php:277
msgid "Remote site reported: "
msgstr ""
-#: ../../mod/dfrn_confirm.php:273
+#: ../../mod/dfrn_confirm.php:268
msgid "Temporary failure. Please wait and try again."
msgstr ""
-#: ../../mod/dfrn_confirm.php:280
+#: ../../mod/dfrn_confirm.php:275
msgid "Introduction failed or was revoked."
msgstr ""
-#: ../../mod/dfrn_confirm.php:425
+#: ../../mod/dfrn_confirm.php:420
msgid "Unable to set contact photo."
msgstr ""
-#: ../../mod/dfrn_confirm.php:482 ../../include/diaspora.php:507
+#: ../../mod/dfrn_confirm.php:477 ../../include/diaspora.php:507
#: ../../include/conversation.php:101
#, php-format
msgid "%1$s is now friends with %2$s"
msgstr ""
-#: ../../mod/dfrn_confirm.php:554
+#: ../../mod/dfrn_confirm.php:562
#, php-format
msgid "No user record found for '%s' "
msgstr ""
-#: ../../mod/dfrn_confirm.php:564
+#: ../../mod/dfrn_confirm.php:572
msgid "Our site encryption key is apparently messed up."
msgstr ""
-#: ../../mod/dfrn_confirm.php:575
+#: ../../mod/dfrn_confirm.php:583
msgid "Empty site URL was provided or URL could not be decrypted by us."
msgstr ""
-#: ../../mod/dfrn_confirm.php:596
+#: ../../mod/dfrn_confirm.php:604
msgid "Contact record was not found for you on our site."
msgstr ""
-#: ../../mod/dfrn_confirm.php:610
+#: ../../mod/dfrn_confirm.php:618
#, php-format
msgid "Site public key not available in contact record for URL %s."
msgstr ""
-#: ../../mod/dfrn_confirm.php:630
+#: ../../mod/dfrn_confirm.php:638
msgid ""
"The ID provided by your system is a duplicate on our system. It should work "
"if you try again."
msgstr ""
-#: ../../mod/dfrn_confirm.php:641
+#: ../../mod/dfrn_confirm.php:649
msgid "Unable to set your contact credentials on our system."
msgstr ""
-#: ../../mod/dfrn_confirm.php:706
+#: ../../mod/dfrn_confirm.php:716
msgid "Unable to update your contact profile details on our system"
msgstr ""
-#: ../../mod/dfrn_confirm.php:740
+#: ../../mod/dfrn_confirm.php:750
#, php-format
msgid "Connection accepted at %s"
msgstr ""
-#: ../../mod/dfrn_confirm.php:789
+#: ../../mod/dfrn_confirm.php:799
#, php-format
msgid "%1$s has joined %2$s"
msgstr ""
-#: ../../addon/facebook/facebook.php:501
+#: ../../addon/facebook/facebook.php:509
msgid "Facebook disabled"
msgstr ""
-#: ../../addon/facebook/facebook.php:506
+#: ../../addon/facebook/facebook.php:514
msgid "Updating contacts"
msgstr ""
-#: ../../addon/facebook/facebook.php:529
+#: ../../addon/facebook/facebook.php:537
msgid "Facebook API key is missing."
msgstr ""
-#: ../../addon/facebook/facebook.php:536
+#: ../../addon/facebook/facebook.php:544
msgid "Facebook Connect"
msgstr ""
-#: ../../addon/facebook/facebook.php:542
+#: ../../addon/facebook/facebook.php:550
msgid "Install Facebook connector for this account."
msgstr ""
-#: ../../addon/facebook/facebook.php:549
+#: ../../addon/facebook/facebook.php:557
msgid "Remove Facebook connector"
msgstr ""
-#: ../../addon/facebook/facebook.php:554
+#: ../../addon/facebook/facebook.php:562
msgid ""
"Re-authenticate [This is necessary whenever your Facebook password is "
"changed.]"
msgstr ""
-#: ../../addon/facebook/facebook.php:561
+#: ../../addon/facebook/facebook.php:569
msgid "Post to Facebook by default"
msgstr ""
-#: ../../addon/facebook/facebook.php:567
+#: ../../addon/facebook/facebook.php:575
msgid ""
"Facebook friend linking has been disabled on this site. The following "
"settings will have no effect."
msgstr ""
-#: ../../addon/facebook/facebook.php:571
+#: ../../addon/facebook/facebook.php:579
msgid ""
"Facebook friend linking has been disabled on this site. If you disable it, "
"you will be unable to re-enable it."
msgstr ""
-#: ../../addon/facebook/facebook.php:574
+#: ../../addon/facebook/facebook.php:582
msgid "Link all your Facebook friends and conversations on this website"
msgstr ""
-#: ../../addon/facebook/facebook.php:576
+#: ../../addon/facebook/facebook.php:584
msgid ""
"Facebook conversations consist of your <em>profile wall</em> and your friend "
"<em>stream</em>."
msgstr ""
-#: ../../addon/facebook/facebook.php:577
+#: ../../addon/facebook/facebook.php:585
msgid "On this website, your Facebook friend stream is only visible to you."
msgstr ""
-#: ../../addon/facebook/facebook.php:578
+#: ../../addon/facebook/facebook.php:586
msgid ""
"The following settings determine the privacy of your Facebook profile wall "
"on this website."
msgstr ""
-#: ../../addon/facebook/facebook.php:582
+#: ../../addon/facebook/facebook.php:590
msgid ""
"On this website your Facebook profile wall conversations will only be "
"visible to you"
msgstr ""
-#: ../../addon/facebook/facebook.php:587
+#: ../../addon/facebook/facebook.php:595
msgid "Do not import your Facebook profile wall conversations"
msgstr ""
-#: ../../addon/facebook/facebook.php:589
+#: ../../addon/facebook/facebook.php:597
msgid ""
"If you choose to link conversations and leave both of these boxes unchecked, "
"your Facebook profile wall will be merged with your profile wall on this "
@@ -4368,120 +4324,120 @@ msgid ""
"who may see the conversations."
msgstr ""
-#: ../../addon/facebook/facebook.php:594
+#: ../../addon/facebook/facebook.php:602
msgid "Comma separated applications to ignore"
msgstr ""
-#: ../../addon/facebook/facebook.php:678
+#: ../../addon/facebook/facebook.php:686
msgid "Problems with Facebook Real-Time Updates"
msgstr ""
-#: ../../addon/facebook/facebook.php:706
+#: ../../addon/facebook/facebook.php:714
#: ../../include/contact_selectors.php:81
msgid "Facebook"
msgstr ""
-#: ../../addon/facebook/facebook.php:707
+#: ../../addon/facebook/facebook.php:715
msgid "Facebook Connector Settings"
msgstr ""
-#: ../../addon/facebook/facebook.php:722
+#: ../../addon/facebook/facebook.php:730
msgid "Facebook API Key"
msgstr ""
-#: ../../addon/facebook/facebook.php:732
+#: ../../addon/facebook/facebook.php:740
msgid ""
"Error: it appears that you have specified the App-ID and -Secret in your ."
"htconfig.php file. As long as they are specified there, they cannot be set "
"using this form.<br><br>"
msgstr ""
-#: ../../addon/facebook/facebook.php:737
+#: ../../addon/facebook/facebook.php:745
msgid ""
"Error: the given API Key seems to be incorrect (the application access token "
"could not be retrieved)."
msgstr ""
-#: ../../addon/facebook/facebook.php:739
+#: ../../addon/facebook/facebook.php:747
msgid "The given API Key seems to work correctly."
msgstr ""
-#: ../../addon/facebook/facebook.php:741
+#: ../../addon/facebook/facebook.php:749
msgid ""
"The correctness of the API Key could not be detected. Somthing strange's "
"going on."
msgstr ""
-#: ../../addon/facebook/facebook.php:744
+#: ../../addon/facebook/facebook.php:752
msgid "App-ID / API-Key"
msgstr ""
-#: ../../addon/facebook/facebook.php:745
+#: ../../addon/facebook/facebook.php:753
msgid "Application secret"
msgstr ""
-#: ../../addon/facebook/facebook.php:746
+#: ../../addon/facebook/facebook.php:754
#, php-format
msgid "Polling Interval in minutes (minimum %1$s minutes)"
msgstr ""
-#: ../../addon/facebook/facebook.php:747
+#: ../../addon/facebook/facebook.php:755
msgid ""
"Synchronize comments (no comments on Facebook are missed, at the cost of "
"increased system load)"
msgstr ""
-#: ../../addon/facebook/facebook.php:751
+#: ../../addon/facebook/facebook.php:759
msgid "Real-Time Updates"
msgstr ""
-#: ../../addon/facebook/facebook.php:755
+#: ../../addon/facebook/facebook.php:763
msgid "Real-Time Updates are activated."
msgstr ""
-#: ../../addon/facebook/facebook.php:756
+#: ../../addon/facebook/facebook.php:764
msgid "Deactivate Real-Time Updates"
msgstr ""
-#: ../../addon/facebook/facebook.php:758
+#: ../../addon/facebook/facebook.php:766
msgid "Real-Time Updates not activated."
msgstr ""
-#: ../../addon/facebook/facebook.php:758
+#: ../../addon/facebook/facebook.php:766
msgid "Activate Real-Time Updates"
msgstr ""
-#: ../../addon/facebook/facebook.php:777
+#: ../../addon/facebook/facebook.php:785
msgid "The new values have been saved."
msgstr ""
-#: ../../addon/facebook/facebook.php:801
+#: ../../addon/facebook/facebook.php:809
msgid "Post to Facebook"
msgstr ""
-#: ../../addon/facebook/facebook.php:899
+#: ../../addon/facebook/facebook.php:907
msgid ""
"Post to Facebook cancelled because of multi-network access permission "
"conflict."
msgstr ""
-#: ../../addon/facebook/facebook.php:1119
+#: ../../addon/facebook/facebook.php:1127
msgid "View on Friendica"
msgstr ""
-#: ../../addon/facebook/facebook.php:1152
+#: ../../addon/facebook/facebook.php:1160
msgid "Facebook post failed. Queued for retry."
msgstr ""
-#: ../../addon/facebook/facebook.php:1192
+#: ../../addon/facebook/facebook.php:1200
msgid "Your Facebook connection became invalid. Please Re-authenticate."
msgstr ""
-#: ../../addon/facebook/facebook.php:1193
+#: ../../addon/facebook/facebook.php:1201
msgid "Facebook connection became invalid"
msgstr ""
-#: ../../addon/facebook/facebook.php:1194
+#: ../../addon/facebook/facebook.php:1202
#, php-format
msgid ""
"Hi %1$s,\n"
@@ -4491,23 +4447,23 @@ msgid ""
"connection again, you have to %3$sre-authenticate the Facebook-connector%4$s."
msgstr ""
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:144
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:147
msgid "Lifetime of the cache (in hours)"
msgstr ""
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:149
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:152
msgid "Cache Statistics"
msgstr ""
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:152
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:155
msgid "Number of items"
msgstr ""
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:154
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:157
msgid "Size of the cache"
msgstr ""
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:156
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:159
msgid "Delete the whole cache"
msgstr ""
@@ -4623,7 +4579,7 @@ msgstr ""
msgid "NSFW Settings saved."
msgstr ""
-#: ../../addon/nsfw/nsfw.php:120
+#: ../../addon/nsfw/nsfw.php:121
#, php-format
msgid "%s - Click to open/close"
msgstr ""
@@ -4633,8 +4589,8 @@ msgid "Forums"
msgstr ""
#: ../../addon/page/page.php:63 ../../addon/showmore/showmore.php:87
-#: ../../include/contact_widgets.php:188 ../../include/conversation.php:466
-#: ../../boot.php:513
+#: ../../include/contact_widgets.php:188 ../../include/conversation.php:476
+#: ../../boot.php:515
msgid "show more"
msgstr ""
@@ -4650,7 +4606,7 @@ msgstr ""
#: ../../addon/communityhome/communityhome.php:34
#: ../../addon/communityhome/twillingham/communityhome.php:28
#: ../../addon/communityhome/twillingham/communityhome.php:34
-#: ../../include/nav.php:64 ../../boot.php:811
+#: ../../include/nav.php:64 ../../boot.php:813
msgid "Login"
msgstr ""
@@ -4678,7 +4634,7 @@ msgid "Latest likes"
msgstr ""
#: ../../addon/communityhome/communityhome.php:155
-#: ../../view/theme/diabook/theme.php:490 ../../include/text.php:1303
+#: ../../view/theme/diabook/theme.php:562 ../../include/text.php:1314
#: ../../include/conversation.php:45 ../../include/conversation.php:118
msgid "event"
msgstr ""
@@ -4829,11 +4785,23 @@ msgstr ""
msgid "Post to Drupal by default"
msgstr ""
-#: ../../addon/drpost/drpost.php:184 ../../addon/wppost/wppost.php:190
+#: ../../addon/drpost/drpost.php:184 ../../addon/wppost/wppost.php:198
#: ../../addon/blogger/blogger.php:172 ../../addon/posterous/posterous.php:192
msgid "Post from Friendica"
msgstr ""
+#: ../../addon/startpage/startpage.php:83
+msgid "Startpage Settings"
+msgstr ""
+
+#: ../../addon/startpage/startpage.php:85
+msgid "Home page to load after login - leave blank for profile wall"
+msgstr ""
+
+#: ../../addon/startpage/startpage.php:88
+msgid "Examples: &quot;network&quot; or &quot;notifications/system&quot;"
+msgstr ""
+
#: ../../addon/geonames/geonames.php:143
msgid "Geonames settings updated."
msgstr ""
@@ -4846,6 +4814,25 @@ msgstr ""
msgid "Enable Geonames Plugin"
msgstr ""
+#: ../../addon/public_server/public_server.php:126
+#: ../../addon/testdrive/testdrive.php:94
+#, php-format
+msgid "Your account on %s will expire in a few days."
+msgstr ""
+
+#: ../../addon/public_server/public_server.php:127
+msgid "Your Friendica account is about to expire."
+msgstr ""
+
+#: ../../addon/public_server/public_server.php:128
+#, php-format
+msgid ""
+"Hi %1$s,\n"
+"\n"
+"Your account on %2$s will expire in less than five days. You may keep your "
+"account by logging in at least once every 30 days"
+msgstr ""
+
#: ../../addon/js_upload/js_upload.php:43
msgid "Upload a file"
msgstr ""
@@ -5105,16 +5092,11 @@ msgstr ""
msgid "Gravatar settings updated."
msgstr ""
-#: ../../addon/testdrive/testdrive.php:85
-#, php-format
-msgid "Your account on %s will expire in a few days."
-msgstr ""
-
-#: ../../addon/testdrive/testdrive.php:86
+#: ../../addon/testdrive/testdrive.php:95
msgid "Your Friendica test account is about to expire."
msgstr ""
-#: ../../addon/testdrive/testdrive.php:87
+#: ../../addon/testdrive/testdrive.php:96
#, php-format
msgid ""
"Hi %1$s,\n"
@@ -5277,14 +5259,14 @@ msgid "Send public postings to StatusNet by default"
msgstr ""
#: ../../addon/statusnet/statusnet.php:345
-msgid "Send #tag links to StatusNet"
+msgid "Send linked #-tags and @-names to StatusNet"
msgstr ""
#: ../../addon/statusnet/statusnet.php:350 ../../addon/twitter/twitter.php:206
msgid "Clear OAuth configuration"
msgstr ""
-#: ../../addon/statusnet/statusnet.php:545
+#: ../../addon/statusnet/statusnet.php:553
msgid "API URL"
msgstr ""
@@ -5351,30 +5333,38 @@ msgstr ""
msgid "Post to Wordpress"
msgstr ""
-#: ../../addon/wppost/wppost.php:74
+#: ../../addon/wppost/wppost.php:76
msgid "WordPress Post Settings"
msgstr ""
-#: ../../addon/wppost/wppost.php:76
+#: ../../addon/wppost/wppost.php:78
msgid "Enable WordPress Post Plugin"
msgstr ""
-#: ../../addon/wppost/wppost.php:81
+#: ../../addon/wppost/wppost.php:83
msgid "WordPress username"
msgstr ""
-#: ../../addon/wppost/wppost.php:86
+#: ../../addon/wppost/wppost.php:88
msgid "WordPress password"
msgstr ""
-#: ../../addon/wppost/wppost.php:91
+#: ../../addon/wppost/wppost.php:93
msgid "WordPress API URL"
msgstr ""
-#: ../../addon/wppost/wppost.php:96
+#: ../../addon/wppost/wppost.php:98
msgid "Post to WordPress by default"
msgstr ""
+#: ../../addon/wppost/wppost.php:102
+msgid "Provide a backlink to the Friendica post"
+msgstr ""
+
+#: ../../addon/wppost/wppost.php:204
+msgid "Read the original post and comment stream on Friendica"
+msgstr ""
+
#: ../../addon/showmore/showmore.php:38
msgid "\"Show more\" Settings"
msgstr ""
@@ -5486,14 +5476,14 @@ msgid "Send public postings to Twitter by default"
msgstr ""
#: ../../addon/twitter/twitter.php:201
-msgid "Send #tag links to Twitter"
+msgid "Send linked #-tags and @-names to Twitter"
msgstr ""
-#: ../../addon/twitter/twitter.php:377
+#: ../../addon/twitter/twitter.php:383
msgid "Consumer key"
msgstr ""
-#: ../../addon/twitter/twitter.php:378
+#: ../../addon/twitter/twitter.php:384
msgid "Consumer secret"
msgstr ""
@@ -5606,156 +5596,154 @@ msgstr ""
msgid "Color scheme"
msgstr ""
-#: ../../view/theme/diabook/theme.php:123 ../../include/nav.php:49
+#: ../../view/theme/diabook/theme.php:127 ../../include/nav.php:49
#: ../../include/nav.php:115
msgid "Your posts and conversations"
msgstr ""
-#: ../../view/theme/diabook/theme.php:124 ../../include/nav.php:50
+#: ../../view/theme/diabook/theme.php:128 ../../include/nav.php:50
msgid "Your profile page"
msgstr ""
-#: ../../view/theme/diabook/theme.php:125
+#: ../../view/theme/diabook/theme.php:129
msgid "Your contacts"
msgstr ""
-#: ../../view/theme/diabook/theme.php:126 ../../include/nav.php:51
+#: ../../view/theme/diabook/theme.php:130 ../../include/nav.php:51
msgid "Your photos"
msgstr ""
-#: ../../view/theme/diabook/theme.php:127 ../../include/nav.php:52
+#: ../../view/theme/diabook/theme.php:131 ../../include/nav.php:52
msgid "Your events"
msgstr ""
-#: ../../view/theme/diabook/theme.php:128 ../../include/nav.php:53
+#: ../../view/theme/diabook/theme.php:132 ../../include/nav.php:53
msgid "Personal notes"
msgstr ""
-#: ../../view/theme/diabook/theme.php:128 ../../include/nav.php:53
+#: ../../view/theme/diabook/theme.php:132 ../../include/nav.php:53
msgid "Your personal photos"
msgstr ""
-#: ../../view/theme/diabook/theme.php:130
-#: ../../view/theme/diabook/theme.php:571
-#: ../../view/theme/diabook/theme.php:675
+#: ../../view/theme/diabook/theme.php:134
+#: ../../view/theme/diabook/theme.php:643
+#: ../../view/theme/diabook/theme.php:747
#: ../../view/theme/diabook/config.php:201
msgid "Community Pages"
msgstr ""
-#: ../../view/theme/diabook/theme.php:418
-#: ../../view/theme/diabook/theme.php:677
+#: ../../view/theme/diabook/theme.php:490
+#: ../../view/theme/diabook/theme.php:749
#: ../../view/theme/diabook/config.php:203
msgid "Community Profiles"
msgstr ""
-#: ../../view/theme/diabook/theme.php:439
-#: ../../view/theme/diabook/theme.php:682
+#: ../../view/theme/diabook/theme.php:511
+#: ../../view/theme/diabook/theme.php:754
#: ../../view/theme/diabook/config.php:208
msgid "Last users"
msgstr ""
-#: ../../view/theme/diabook/theme.php:468
-#: ../../view/theme/diabook/theme.php:684
+#: ../../view/theme/diabook/theme.php:540
+#: ../../view/theme/diabook/theme.php:756
#: ../../view/theme/diabook/config.php:210
msgid "Last likes"
msgstr ""
-#: ../../view/theme/diabook/theme.php:513
-#: ../../view/theme/diabook/theme.php:683
+#: ../../view/theme/diabook/theme.php:585
+#: ../../view/theme/diabook/theme.php:755
#: ../../view/theme/diabook/config.php:209
msgid "Last photos"
msgstr ""
-#: ../../view/theme/diabook/theme.php:550
-#: ../../view/theme/diabook/theme.php:680
+#: ../../view/theme/diabook/theme.php:622
+#: ../../view/theme/diabook/theme.php:752
#: ../../view/theme/diabook/config.php:206
msgid "Find Friends"
msgstr ""
-#: ../../view/theme/diabook/theme.php:551
+#: ../../view/theme/diabook/theme.php:623
msgid "Local Directory"
msgstr ""
-#: ../../view/theme/diabook/theme.php:553 ../../include/contact_widgets.php:35
+#: ../../view/theme/diabook/theme.php:625 ../../include/contact_widgets.php:35
msgid "Similar Interests"
msgstr ""
-#: ../../view/theme/diabook/theme.php:555 ../../include/contact_widgets.php:37
+#: ../../view/theme/diabook/theme.php:627 ../../include/contact_widgets.php:37
msgid "Invite Friends"
msgstr ""
-#: ../../view/theme/diabook/theme.php:606
-#: ../../view/theme/diabook/theme.php:676
+#: ../../view/theme/diabook/theme.php:678
+#: ../../view/theme/diabook/theme.php:748
#: ../../view/theme/diabook/config.php:202
msgid "Earth Layers"
msgstr ""
-#: ../../view/theme/diabook/theme.php:611
-#: ../../view/theme/diabook/config.php:198
-msgid "Set zoomfactor for Earth Layer"
+#: ../../view/theme/diabook/theme.php:683
+msgid "Set zoomfactor for Earth Layers"
msgstr ""
-#: ../../view/theme/diabook/theme.php:612
+#: ../../view/theme/diabook/theme.php:684
#: ../../view/theme/diabook/config.php:199
-msgid "Set longitude (X) for Earth Layer"
+msgid "Set longitude (X) for Earth Layers"
msgstr ""
-#: ../../view/theme/diabook/theme.php:613
+#: ../../view/theme/diabook/theme.php:685
#: ../../view/theme/diabook/config.php:200
-msgid "Set latitude (Y) for Earth Layer"
+msgid "Set latitude (Y) for Earth Layers"
msgstr ""
-#: ../../view/theme/diabook/theme.php:626
-#: ../../view/theme/diabook/theme.php:678
+#: ../../view/theme/diabook/theme.php:698
+#: ../../view/theme/diabook/theme.php:750
#: ../../view/theme/diabook/config.php:204
msgid "Help or @NewHere ?"
msgstr ""
-#: ../../view/theme/diabook/theme.php:633
-#: ../../view/theme/diabook/theme.php:679
+#: ../../view/theme/diabook/theme.php:705
+#: ../../view/theme/diabook/theme.php:751
#: ../../view/theme/diabook/config.php:205
msgid "Connect Services"
msgstr ""
-#: ../../view/theme/diabook/theme.php:640
-#: ../../view/theme/diabook/theme.php:681
-#: ../../view/theme/diabook/config.php:207
+#: ../../view/theme/diabook/theme.php:712
+#: ../../view/theme/diabook/theme.php:753
msgid "Last Tweets"
msgstr ""
-#: ../../view/theme/diabook/theme.php:643
+#: ../../view/theme/diabook/theme.php:715
#: ../../view/theme/diabook/config.php:197
msgid "Set twitter search term"
msgstr ""
-#: ../../view/theme/diabook/theme.php:663
-#: ../../view/theme/diabook/theme.php:664
-#: ../../view/theme/diabook/theme.php:665
-#: ../../view/theme/diabook/theme.php:666
-#: ../../view/theme/diabook/theme.php:667
-#: ../../view/theme/diabook/theme.php:668
-#: ../../view/theme/diabook/theme.php:669
-#: ../../view/theme/diabook/theme.php:670
-#: ../../view/theme/diabook/theme.php:671
-#: ../../view/theme/diabook/theme.php:672 ../../include/acl_selectors.php:288
+#: ../../view/theme/diabook/theme.php:735
+#: ../../view/theme/diabook/theme.php:736
+#: ../../view/theme/diabook/theme.php:737
+#: ../../view/theme/diabook/theme.php:738
+#: ../../view/theme/diabook/theme.php:739
+#: ../../view/theme/diabook/theme.php:740
+#: ../../view/theme/diabook/theme.php:741
+#: ../../view/theme/diabook/theme.php:742
+#: ../../view/theme/diabook/theme.php:743
+#: ../../view/theme/diabook/theme.php:744 ../../include/acl_selectors.php:288
msgid "don't show"
msgstr ""
-#: ../../view/theme/diabook/theme.php:663
-#: ../../view/theme/diabook/theme.php:664
-#: ../../view/theme/diabook/theme.php:665
-#: ../../view/theme/diabook/theme.php:666
-#: ../../view/theme/diabook/theme.php:667
-#: ../../view/theme/diabook/theme.php:668
-#: ../../view/theme/diabook/theme.php:669
-#: ../../view/theme/diabook/theme.php:670
-#: ../../view/theme/diabook/theme.php:671
-#: ../../view/theme/diabook/theme.php:672 ../../include/acl_selectors.php:287
+#: ../../view/theme/diabook/theme.php:735
+#: ../../view/theme/diabook/theme.php:736
+#: ../../view/theme/diabook/theme.php:737
+#: ../../view/theme/diabook/theme.php:738
+#: ../../view/theme/diabook/theme.php:739
+#: ../../view/theme/diabook/theme.php:740
+#: ../../view/theme/diabook/theme.php:741
+#: ../../view/theme/diabook/theme.php:742
+#: ../../view/theme/diabook/theme.php:743
+#: ../../view/theme/diabook/theme.php:744 ../../include/acl_selectors.php:287
msgid "show"
msgstr ""
-#: ../../view/theme/diabook/theme.php:673
-msgid "Show/hide boxes at right-hand coloumn:"
+#: ../../view/theme/diabook/theme.php:745
+msgid "Show/hide boxes at right-hand column:"
msgstr ""
#: ../../view/theme/diabook/config.php:194
@@ -5771,6 +5759,14 @@ msgstr ""
msgid "Set color scheme"
msgstr ""
+#: ../../view/theme/diabook/config.php:198
+msgid "Set zoomfactor for Earth Layer"
+msgstr ""
+
+#: ../../view/theme/diabook/config.php:207
+msgid "Last tweets"
+msgstr ""
+
#: ../../view/theme/quattro/config.php:55
msgid "Alignment"
msgstr ""
@@ -5787,7 +5783,7 @@ msgstr ""
msgid "Set colour scheme"
msgstr ""
-#: ../../include/profile_advanced.php:17 ../../boot.php:1100
+#: ../../include/profile_advanced.php:17 ../../boot.php:1102
msgid "Gender:"
msgstr ""
@@ -5799,8 +5795,8 @@ msgstr ""
msgid "j F"
msgstr ""
-#: ../../include/profile_advanced.php:30 ../../include/datetime.php:448
-#: ../../include/items.php:1413
+#: ../../include/profile_advanced.php:30 ../../include/datetime.php:450
+#: ../../include/items.php:1423
msgid "Birthday:"
msgstr ""
@@ -5808,59 +5804,64 @@ msgstr ""
msgid "Age:"
msgstr ""
-#: ../../include/profile_advanced.php:37 ../../boot.php:1103
+#: ../../include/profile_advanced.php:37 ../../boot.php:1105
msgid "Status:"
msgstr ""
-#: ../../include/profile_advanced.php:45 ../../boot.php:1105
+#: ../../include/profile_advanced.php:43
+#, php-format
+msgid "for %1$d %2$s"
+msgstr ""
+
+#: ../../include/profile_advanced.php:48 ../../boot.php:1107
msgid "Homepage:"
msgstr ""
-#: ../../include/profile_advanced.php:47
+#: ../../include/profile_advanced.php:52
msgid "Tags:"
msgstr ""
-#: ../../include/profile_advanced.php:51
+#: ../../include/profile_advanced.php:56
msgid "Religion:"
msgstr ""
-#: ../../include/profile_advanced.php:53
+#: ../../include/profile_advanced.php:58
msgid "About:"
msgstr ""
-#: ../../include/profile_advanced.php:55
+#: ../../include/profile_advanced.php:60
msgid "Hobbies/Interests:"
msgstr ""
-#: ../../include/profile_advanced.php:57
+#: ../../include/profile_advanced.php:62
msgid "Contact information and Social Networks:"
msgstr ""
-#: ../../include/profile_advanced.php:59
+#: ../../include/profile_advanced.php:64
msgid "Musical interests:"
msgstr ""
-#: ../../include/profile_advanced.php:61
+#: ../../include/profile_advanced.php:66
msgid "Books, literature:"
msgstr ""
-#: ../../include/profile_advanced.php:63
+#: ../../include/profile_advanced.php:68
msgid "Television:"
msgstr ""
-#: ../../include/profile_advanced.php:65
+#: ../../include/profile_advanced.php:70
msgid "Film/dance/culture/entertainment:"
msgstr ""
-#: ../../include/profile_advanced.php:67
+#: ../../include/profile_advanced.php:72
msgid "Love/Romance:"
msgstr ""
-#: ../../include/profile_advanced.php:69
+#: ../../include/profile_advanced.php:74
msgid "Work/employment:"
msgstr ""
-#: ../../include/profile_advanced.php:71
+#: ../../include/profile_advanced.php:76
msgid "School/education:"
msgstr ""
@@ -5992,196 +5993,196 @@ msgstr ""
msgid "Undecided"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Males"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Females"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Gay"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Lesbian"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "No Preference"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Bisexual"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Autosexual"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Abstinent"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Virgin"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Deviant"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Fetish"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Oodles"
msgstr ""
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Nonsexual"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Single"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Lonely"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Available"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Unavailable"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Has crush"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Infatuated"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Dating"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Unfaithful"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Sex Addict"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42 ../../include/user.php:272
msgid "Friends"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Friends/Benefits"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Casual"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Engaged"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Married"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Imaginarily married"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Partners"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Cohabiting"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Common law"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Happy"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Not looking"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Swinger"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Betrayed"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Separated"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Unstable"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Divorced"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Imaginarily divorced"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Widowed"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Uncertain"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "It's complicated"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Don't care"
msgstr ""
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Ask me"
msgstr ""
-#: ../../include/event.php:17 ../../include/bb2diaspora.php:244
+#: ../../include/event.php:17 ../../include/bb2diaspora.php:249
msgid "Starts:"
msgstr ""
-#: ../../include/event.php:27 ../../include/bb2diaspora.php:252
+#: ../../include/event.php:27 ../../include/bb2diaspora.php:257
msgid "Finishes:"
msgstr ""
-#: ../../include/delivery.php:452 ../../include/notifier.php:652
+#: ../../include/delivery.php:455 ../../include/notifier.php:677
msgid "(no subject)"
msgstr ""
-#: ../../include/delivery.php:459 ../../include/enotify.php:23
-#: ../../include/notifier.php:659
+#: ../../include/delivery.php:462 ../../include/enotify.php:26
+#: ../../include/notifier.php:684
msgid "noreply"
msgstr ""
@@ -6212,143 +6213,139 @@ msgid_plural "%d Contacts"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/text.php:650 ../../include/nav.php:91
-msgid "Search"
-msgstr ""
-
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Monday"
msgstr ""
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Tuesday"
msgstr ""
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Wednesday"
msgstr ""
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Thursday"
msgstr ""
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Friday"
msgstr ""
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Saturday"
msgstr ""
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Sunday"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "January"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "February"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "March"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "April"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "May"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "June"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "July"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "August"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "September"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "October"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "November"
msgstr ""
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "December"
msgstr ""
-#: ../../include/text.php:919
+#: ../../include/text.php:925
msgid "bytes"
msgstr ""
-#: ../../include/text.php:934 ../../include/text.php:949
+#: ../../include/text.php:945 ../../include/text.php:960
msgid "remove"
msgstr ""
-#: ../../include/text.php:934 ../../include/text.php:949
+#: ../../include/text.php:945 ../../include/text.php:960
msgid "[remove]"
msgstr ""
-#: ../../include/text.php:937
+#: ../../include/text.php:948
msgid "Categories:"
msgstr ""
-#: ../../include/text.php:952
+#: ../../include/text.php:963
msgid "Filed under:"
msgstr ""
-#: ../../include/text.php:968 ../../include/text.php:980
+#: ../../include/text.php:979 ../../include/text.php:991
msgid "Click to open/close"
msgstr ""
-#: ../../include/text.php:1085
+#: ../../include/text.php:1096 ../../include/user.php:230
msgid "default"
msgstr ""
-#: ../../include/text.php:1097
+#: ../../include/text.php:1108
msgid "Select an alternate language"
msgstr ""
-#: ../../include/text.php:1307
+#: ../../include/text.php:1318
msgid "activity"
msgstr ""
-#: ../../include/text.php:1309
+#: ../../include/text.php:1320
msgid "comment"
msgstr ""
-#: ../../include/text.php:1310
+#: ../../include/text.php:1321
msgid "post"
msgstr ""
-#: ../../include/text.php:1465
+#: ../../include/text.php:1476
msgid "Item filed"
msgstr ""
-#: ../../include/diaspora.php:582
+#: ../../include/diaspora.php:590
msgid "Sharing notification from Diaspora network"
msgstr ""
-#: ../../include/diaspora.php:1969
+#: ../../include/diaspora.php:1977
msgid "Attachments:"
msgstr ""
-#: ../../include/diaspora.php:2152
+#: ../../include/diaspora.php:2168
#, php-format
msgid "[Relayed] Comment authored by %s from network %s"
msgstr ""
@@ -6372,31 +6369,35 @@ msgid ""
"not what you intended, please create another group with a different name."
msgstr ""
-#: ../../include/group.php:168
+#: ../../include/group.php:176
+msgid "Default privacy group for new contacts"
+msgstr ""
+
+#: ../../include/group.php:195
msgid "Everybody"
msgstr ""
-#: ../../include/group.php:191
+#: ../../include/group.php:218
msgid "edit"
msgstr ""
-#: ../../include/group.php:212
+#: ../../include/group.php:239
msgid "Groups"
msgstr ""
-#: ../../include/group.php:213
+#: ../../include/group.php:240
msgid "Edit group"
msgstr ""
-#: ../../include/group.php:214
+#: ../../include/group.php:241
msgid "Create a new group"
msgstr ""
-#: ../../include/group.php:215
+#: ../../include/group.php:242
msgid "Contacts not in any group"
msgstr ""
-#: ../../include/nav.php:46 ../../boot.php:810
+#: ../../include/nav.php:46 ../../boot.php:812
msgid "Logout"
msgstr ""
@@ -6404,7 +6405,7 @@ msgstr ""
msgid "End this session"
msgstr ""
-#: ../../include/nav.php:49 ../../boot.php:1478
+#: ../../include/nav.php:49 ../../boot.php:1499
msgid "Status"
msgstr ""
@@ -6484,11 +6485,11 @@ msgstr ""
msgid "Manage other pages"
msgstr ""
-#: ../../include/nav.php:138 ../../boot.php:1058
+#: ../../include/nav.php:138 ../../boot.php:1060
msgid "Profiles"
msgstr ""
-#: ../../include/nav.php:138 ../../boot.php:1058
+#: ../../include/nav.php:138 ../../boot.php:1060
msgid "Manage/edit profiles"
msgstr ""
@@ -6567,17 +6568,17 @@ msgstr ""
msgid "Categories"
msgstr ""
-#: ../../include/auth.php:29
+#: ../../include/auth.php:36
msgid "Logged out."
msgstr ""
-#: ../../include/auth.php:106
+#: ../../include/auth.php:115
msgid ""
"We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID."
msgstr ""
-#: ../../include/auth.php:106
+#: ../../include/auth.php:115
msgid "The error message was:"
msgstr ""
@@ -6649,7 +6650,7 @@ msgstr ""
msgid "seconds"
msgstr ""
-#: ../../include/datetime.php:277
+#: ../../include/datetime.php:278
#, php-format
msgid "%1$d %2$s ago"
msgstr ""
@@ -6658,11 +6659,11 @@ msgstr ""
msgid "From: "
msgstr ""
-#: ../../include/bbcode.php:203 ../../include/bbcode.php:223
+#: ../../include/bbcode.php:210 ../../include/bbcode.php:230
msgid "$1 wrote:"
msgstr ""
-#: ../../include/bbcode.php:238 ../../include/bbcode.php:307
+#: ../../include/bbcode.php:245 ../../include/bbcode.php:314
msgid "Image/photo"
msgstr ""
@@ -6692,186 +6693,241 @@ msgstr ""
msgid "%s Administrator"
msgstr ""
-#: ../../include/enotify.php:35
+#: ../../include/enotify.php:38
#, php-format
msgid "%s <!item_type!>"
msgstr ""
-#: ../../include/enotify.php:39
+#: ../../include/enotify.php:42
#, php-format
msgid "[Friendica:Notify] New mail received at %s"
msgstr ""
-#: ../../include/enotify.php:41
+#: ../../include/enotify.php:44
#, php-format
msgid "%s sent you a new private message at %s."
msgstr ""
-#: ../../include/enotify.php:42
+#: ../../include/enotify.php:45
#, php-format
msgid "%s sent you %s."
msgstr ""
-#: ../../include/enotify.php:42
+#: ../../include/enotify.php:45
msgid "a private message"
msgstr ""
-#: ../../include/enotify.php:43
+#: ../../include/enotify.php:46
#, php-format
msgid "Please visit %s to view and/or reply to your private messages."
msgstr ""
-#: ../../include/enotify.php:73
+#: ../../include/enotify.php:76
#, php-format
msgid "%s's"
msgstr ""
-#: ../../include/enotify.php:77
+#: ../../include/enotify.php:80
msgid "your"
msgstr ""
-#: ../../include/enotify.php:84
+#: ../../include/enotify.php:87
#, php-format
msgid "[Friendica:Notify] Comment to conversation #%d by %s"
msgstr ""
-#: ../../include/enotify.php:85
+#: ../../include/enotify.php:88
#, php-format
msgid "%s commented on an item/conversation you have been following."
msgstr ""
-#: ../../include/enotify.php:86
+#: ../../include/enotify.php:89
#, php-format
msgid "%s commented on %s."
msgstr ""
-#: ../../include/enotify.php:88 ../../include/enotify.php:101
-#: ../../include/enotify.php:112 ../../include/enotify.php:123
+#: ../../include/enotify.php:91 ../../include/enotify.php:104
+#: ../../include/enotify.php:115 ../../include/enotify.php:126
#, php-format
msgid "Please visit %s to view and/or reply to the conversation."
msgstr ""
-#: ../../include/enotify.php:95
+#: ../../include/enotify.php:98
#, php-format
msgid "[Friendica:Notify] %s posted to your profile wall"
msgstr ""
-#: ../../include/enotify.php:97
+#: ../../include/enotify.php:100
#, php-format
msgid "%s posted to your profile wall at %s"
msgstr ""
-#: ../../include/enotify.php:99
+#: ../../include/enotify.php:102
#, php-format
msgid "%s posted to %s"
msgstr ""
-#: ../../include/enotify.php:99
+#: ../../include/enotify.php:102
msgid "your profile wall."
msgstr ""
-#: ../../include/enotify.php:108
+#: ../../include/enotify.php:111
#, php-format
msgid "[Friendica:Notify] %s tagged you"
msgstr ""
-#: ../../include/enotify.php:109
+#: ../../include/enotify.php:112
#, php-format
msgid "%s tagged you at %s"
msgstr ""
-#: ../../include/enotify.php:110
+#: ../../include/enotify.php:113
#, php-format
msgid "%s %s."
msgstr ""
-#: ../../include/enotify.php:110
+#: ../../include/enotify.php:113
msgid "tagged you"
msgstr ""
-#: ../../include/enotify.php:119
+#: ../../include/enotify.php:122
#, php-format
msgid "[Friendica:Notify] %s tagged your post"
msgstr ""
-#: ../../include/enotify.php:120
+#: ../../include/enotify.php:123
#, php-format
msgid "%s tagged your post at %s"
msgstr ""
-#: ../../include/enotify.php:121
+#: ../../include/enotify.php:124
#, php-format
msgid "%s tagged %s"
msgstr ""
-#: ../../include/enotify.php:121
+#: ../../include/enotify.php:124
msgid "your post"
msgstr ""
-#: ../../include/enotify.php:130
+#: ../../include/enotify.php:133
msgid "[Friendica:Notify] Introduction received"
msgstr ""
-#: ../../include/enotify.php:131
+#: ../../include/enotify.php:134
#, php-format
msgid "You've received an introduction from '%s' at %s"
msgstr ""
-#: ../../include/enotify.php:132
+#: ../../include/enotify.php:135
#, php-format
msgid "You've received %s from %s."
msgstr ""
-#: ../../include/enotify.php:132
+#: ../../include/enotify.php:135
msgid "an introduction"
msgstr ""
-#: ../../include/enotify.php:133 ../../include/enotify.php:150
+#: ../../include/enotify.php:136 ../../include/enotify.php:153
#, php-format
msgid "You may visit their profile at %s"
msgstr ""
-#: ../../include/enotify.php:135
+#: ../../include/enotify.php:138
#, php-format
msgid "Please visit %s to approve or reject the introduction."
msgstr ""
-#: ../../include/enotify.php:142
+#: ../../include/enotify.php:145
msgid "[Friendica:Notify] Friend suggestion received"
msgstr ""
-#: ../../include/enotify.php:143
+#: ../../include/enotify.php:146
#, php-format
msgid "You've received a friend suggestion from '%s' at %s"
msgstr ""
-#: ../../include/enotify.php:144
+#: ../../include/enotify.php:147
#, php-format
msgid "You've received %s for %s from %s."
msgstr ""
-#: ../../include/enotify.php:145
+#: ../../include/enotify.php:148
msgid "a friend suggestion"
msgstr ""
-#: ../../include/enotify.php:148
+#: ../../include/enotify.php:151
msgid "Name:"
msgstr ""
-#: ../../include/enotify.php:149
+#: ../../include/enotify.php:152
msgid "Photo:"
msgstr ""
-#: ../../include/enotify.php:152
+#: ../../include/enotify.php:155
#, php-format
msgid "Please visit %s to approve or reject the suggestion."
msgstr ""
-#: ../../include/items.php:2724
+#: ../../include/follow.php:32
+msgid "Connect URL missing."
+msgstr ""
+
+#: ../../include/follow.php:59
+msgid ""
+"This site is not configured to allow communications with other networks."
+msgstr ""
+
+#: ../../include/follow.php:60 ../../include/follow.php:75
+msgid "No compatible communication protocols or feeds were discovered."
+msgstr ""
+
+#: ../../include/follow.php:73
+msgid "The profile address specified does not provide adequate information."
+msgstr ""
+
+#: ../../include/follow.php:77
+msgid "An author or name was not found."
+msgstr ""
+
+#: ../../include/follow.php:79
+msgid "No browser URL could be matched to this address."
+msgstr ""
+
+#: ../../include/follow.php:81
+msgid ""
+"Unable to match @-style Identity Address with a known protocol or email "
+"contact."
+msgstr ""
+
+#: ../../include/follow.php:82
+msgid "Use mailto: in front of address to force email check."
+msgstr ""
+
+#: ../../include/follow.php:88
+msgid ""
+"The profile address specified belongs to a network which has been disabled "
+"on this site."
+msgstr ""
+
+#: ../../include/follow.php:93
+msgid ""
+"Limited profile. This person will be unable to receive direct/personal "
+"notifications from you."
+msgstr ""
+
+#: ../../include/follow.php:164
+msgid "Unable to retrieve contact information."
+msgstr ""
+
+#: ../../include/follow.php:218
+msgid "following"
+msgstr ""
+
+#: ../../include/items.php:2740
msgid "A new person is sharing with you at "
msgstr ""
-#: ../../include/items.php:2724
+#: ../../include/items.php:2740
msgid "You have a new follower at "
msgstr ""
@@ -6884,6 +6940,74 @@ msgstr ""
msgid "link"
msgstr ""
+#: ../../include/user.php:38
+msgid "An invitation is required."
+msgstr ""
+
+#: ../../include/user.php:43
+msgid "Invitation could not be verified."
+msgstr ""
+
+#: ../../include/user.php:51
+msgid "Invalid OpenID url"
+msgstr ""
+
+#: ../../include/user.php:66
+msgid "Please enter the required information."
+msgstr ""
+
+#: ../../include/user.php:80
+msgid "Please use a shorter name."
+msgstr ""
+
+#: ../../include/user.php:82
+msgid "Name too short."
+msgstr ""
+
+#: ../../include/user.php:97
+msgid "That doesn't appear to be your full (First Last) name."
+msgstr ""
+
+#: ../../include/user.php:102
+msgid "Your email domain is not among those allowed on this site."
+msgstr ""
+
+#: ../../include/user.php:105
+msgid "Not a valid email address."
+msgstr ""
+
+#: ../../include/user.php:115
+msgid "Cannot use that email."
+msgstr ""
+
+#: ../../include/user.php:121
+msgid ""
+"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
+"must also begin with a letter."
+msgstr ""
+
+#: ../../include/user.php:127 ../../include/user.php:219
+msgid "Nickname is already registered. Please choose another."
+msgstr ""
+
+#: ../../include/user.php:137
+msgid ""
+"Nickname was once registered here and may not be re-used. Please choose "
+"another."
+msgstr ""
+
+#: ../../include/user.php:153
+msgid "SERIOUS ERROR: Generation of security keys failed."
+msgstr ""
+
+#: ../../include/user.php:205
+msgid "An error occurred during registration. Please try again."
+msgstr ""
+
+#: ../../include/user.php:240
+msgid "An error occurred creating your default profile. Please try again."
+msgstr ""
+
#: ../../include/security.php:21
msgid "Welcome "
msgstr ""
@@ -6906,30 +7030,30 @@ msgstr ""
msgid "stopped following"
msgstr ""
-#: ../../include/Contact.php:203 ../../include/conversation.php:817
+#: ../../include/Contact.php:203 ../../include/conversation.php:842
msgid "View Status"
msgstr ""
-#: ../../include/Contact.php:204 ../../include/conversation.php:818
+#: ../../include/Contact.php:204 ../../include/conversation.php:843
msgid "View Profile"
msgstr ""
-#: ../../include/Contact.php:205 ../../include/conversation.php:819
+#: ../../include/Contact.php:205 ../../include/conversation.php:844
msgid "View Photos"
msgstr ""
#: ../../include/Contact.php:206 ../../include/Contact.php:219
-#: ../../include/conversation.php:820
+#: ../../include/conversation.php:845
msgid "Network Posts"
msgstr ""
#: ../../include/Contact.php:207 ../../include/Contact.php:219
-#: ../../include/conversation.php:821
+#: ../../include/conversation.php:846
msgid "Edit Contact"
msgstr ""
#: ../../include/Contact.php:208 ../../include/Contact.php:219
-#: ../../include/conversation.php:822
+#: ../../include/conversation.php:847
msgid "Send PM"
msgstr ""
@@ -6942,309 +7066,309 @@ msgstr ""
msgid "%1$s marked %2$s's %3$s as favorite"
msgstr ""
-#: ../../include/conversation.php:317 ../../include/conversation.php:583
+#: ../../include/conversation.php:327 ../../include/conversation.php:608
msgid "Select"
msgstr ""
-#: ../../include/conversation.php:334 ../../include/conversation.php:676
-#: ../../include/conversation.php:677
+#: ../../include/conversation.php:344 ../../include/conversation.php:701
+#: ../../include/conversation.php:702
#, php-format
msgid "View %s's profile @ %s"
msgstr ""
-#: ../../include/conversation.php:344 ../../include/conversation.php:688
+#: ../../include/conversation.php:354 ../../include/conversation.php:713
#, php-format
msgid "%s from %s"
msgstr ""
-#: ../../include/conversation.php:359
+#: ../../include/conversation.php:369
msgid "View in context"
msgstr ""
-#: ../../include/conversation.php:465
+#: ../../include/conversation.php:475
#, php-format
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:529
+#: ../../include/conversation.php:554
msgid "like"
msgstr ""
-#: ../../include/conversation.php:530
+#: ../../include/conversation.php:555
msgid "dislike"
msgstr ""
-#: ../../include/conversation.php:532
+#: ../../include/conversation.php:557
msgid "Share this"
msgstr ""
-#: ../../include/conversation.php:532
+#: ../../include/conversation.php:557
msgid "share"
msgstr ""
-#: ../../include/conversation.php:556
+#: ../../include/conversation.php:581
msgid "Bold"
msgstr ""
-#: ../../include/conversation.php:557
+#: ../../include/conversation.php:582
msgid "Italic"
msgstr ""
-#: ../../include/conversation.php:558
+#: ../../include/conversation.php:583
msgid "Underline"
msgstr ""
-#: ../../include/conversation.php:559
+#: ../../include/conversation.php:584
msgid "Quote"
msgstr ""
-#: ../../include/conversation.php:560
+#: ../../include/conversation.php:585
msgid "Code"
msgstr ""
-#: ../../include/conversation.php:561
+#: ../../include/conversation.php:586
msgid "Image"
msgstr ""
-#: ../../include/conversation.php:562
+#: ../../include/conversation.php:587
msgid "Link"
msgstr ""
-#: ../../include/conversation.php:563
+#: ../../include/conversation.php:588
msgid "Video"
msgstr ""
-#: ../../include/conversation.php:596
+#: ../../include/conversation.php:621
msgid "add star"
msgstr ""
-#: ../../include/conversation.php:597
+#: ../../include/conversation.php:622
msgid "remove star"
msgstr ""
-#: ../../include/conversation.php:598
+#: ../../include/conversation.php:623
msgid "toggle star status"
msgstr ""
-#: ../../include/conversation.php:601
+#: ../../include/conversation.php:626
msgid "starred"
msgstr ""
-#: ../../include/conversation.php:602
+#: ../../include/conversation.php:627
msgid "add tag"
msgstr ""
-#: ../../include/conversation.php:606
+#: ../../include/conversation.php:631
msgid "save to folder"
msgstr ""
-#: ../../include/conversation.php:678
+#: ../../include/conversation.php:703
msgid "to"
msgstr ""
-#: ../../include/conversation.php:679
+#: ../../include/conversation.php:704
msgid "Wall-to-Wall"
msgstr ""
-#: ../../include/conversation.php:680
+#: ../../include/conversation.php:705
msgid "via Wall-To-Wall:"
msgstr ""
-#: ../../include/conversation.php:725
+#: ../../include/conversation.php:750
msgid "Delete Selected Items"
msgstr ""
-#: ../../include/conversation.php:876
+#: ../../include/conversation.php:901
#, php-format
msgid "%s likes this."
msgstr ""
-#: ../../include/conversation.php:876
+#: ../../include/conversation.php:901
#, php-format
msgid "%s doesn't like this."
msgstr ""
-#: ../../include/conversation.php:880
+#: ../../include/conversation.php:905
#, php-format
msgid "<span %1$s>%2$d people</span> like this."
msgstr ""
-#: ../../include/conversation.php:882
+#: ../../include/conversation.php:907
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this."
msgstr ""
-#: ../../include/conversation.php:888
+#: ../../include/conversation.php:913
msgid "and"
msgstr ""
-#: ../../include/conversation.php:891
+#: ../../include/conversation.php:916
#, php-format
msgid ", and %d other people"
msgstr ""
-#: ../../include/conversation.php:892
+#: ../../include/conversation.php:917
#, php-format
msgid "%s like this."
msgstr ""
-#: ../../include/conversation.php:892
+#: ../../include/conversation.php:917
#, php-format
msgid "%s don't like this."
msgstr ""
-#: ../../include/conversation.php:917
+#: ../../include/conversation.php:942
msgid "Visible to <strong>everybody</strong>"
msgstr ""
-#: ../../include/conversation.php:919
+#: ../../include/conversation.php:944
msgid "Please enter a video link/URL:"
msgstr ""
-#: ../../include/conversation.php:920
+#: ../../include/conversation.php:945
msgid "Please enter an audio link/URL:"
msgstr ""
-#: ../../include/conversation.php:921
+#: ../../include/conversation.php:946
msgid "Tag term:"
msgstr ""
-#: ../../include/conversation.php:923
+#: ../../include/conversation.php:948
msgid "Where are you right now?"
msgstr ""
-#: ../../include/conversation.php:966
+#: ../../include/conversation.php:991
msgid "upload photo"
msgstr ""
-#: ../../include/conversation.php:968
+#: ../../include/conversation.php:993
msgid "attach file"
msgstr ""
-#: ../../include/conversation.php:970
+#: ../../include/conversation.php:995
msgid "web link"
msgstr ""
-#: ../../include/conversation.php:971
+#: ../../include/conversation.php:996
msgid "Insert video link"
msgstr ""
-#: ../../include/conversation.php:972
+#: ../../include/conversation.php:997
msgid "video link"
msgstr ""
-#: ../../include/conversation.php:973
+#: ../../include/conversation.php:998
msgid "Insert audio link"
msgstr ""
-#: ../../include/conversation.php:974
+#: ../../include/conversation.php:999
msgid "audio link"
msgstr ""
-#: ../../include/conversation.php:976
+#: ../../include/conversation.php:1001
msgid "set location"
msgstr ""
-#: ../../include/conversation.php:978
+#: ../../include/conversation.php:1003
msgid "clear location"
msgstr ""
-#: ../../include/conversation.php:985
+#: ../../include/conversation.php:1010
msgid "permissions"
msgstr ""
-#: ../../boot.php:511
+#: ../../boot.php:513
msgid "Delete this item?"
msgstr ""
-#: ../../boot.php:514
+#: ../../boot.php:516
msgid "show fewer"
msgstr ""
-#: ../../boot.php:687
+#: ../../boot.php:689
#, php-format
msgid "Update %s failed. See error logs."
msgstr ""
-#: ../../boot.php:689
+#: ../../boot.php:691
#, php-format
msgid "Update Error at %s"
msgstr ""
-#: ../../boot.php:789
+#: ../../boot.php:791
msgid "Create a New Account"
msgstr ""
-#: ../../boot.php:813
+#: ../../boot.php:815
msgid "Nickname or Email address: "
msgstr ""
-#: ../../boot.php:814
+#: ../../boot.php:816
msgid "Password: "
msgstr ""
-#: ../../boot.php:817
+#: ../../boot.php:819
msgid "Or login using OpenID: "
msgstr ""
-#: ../../boot.php:823
+#: ../../boot.php:825
msgid "Forgot your password?"
msgstr ""
-#: ../../boot.php:990
+#: ../../boot.php:992
msgid "Edit profile"
msgstr ""
-#: ../../boot.php:1050
+#: ../../boot.php:1052
msgid "Message"
msgstr ""
-#: ../../boot.php:1166 ../../boot.php:1242
+#: ../../boot.php:1168 ../../boot.php:1244
msgid "g A l F d"
msgstr ""
-#: ../../boot.php:1167 ../../boot.php:1243
+#: ../../boot.php:1169 ../../boot.php:1245
msgid "F d"
msgstr ""
-#: ../../boot.php:1212 ../../boot.php:1283
+#: ../../boot.php:1214 ../../boot.php:1285
msgid "[today]"
msgstr ""
-#: ../../boot.php:1224
+#: ../../boot.php:1226
msgid "Birthday Reminders"
msgstr ""
-#: ../../boot.php:1225
+#: ../../boot.php:1227
msgid "Birthdays this week:"
msgstr ""
-#: ../../boot.php:1276
+#: ../../boot.php:1278
msgid "[No description]"
msgstr ""
-#: ../../boot.php:1294
+#: ../../boot.php:1296
msgid "Event Reminders"
msgstr ""
-#: ../../boot.php:1295
+#: ../../boot.php:1297
msgid "Events this week:"
msgstr ""
-#: ../../boot.php:1481
+#: ../../boot.php:1502
msgid "Status Messages and Posts"
msgstr ""
-#: ../../boot.php:1487
+#: ../../boot.php:1508
msgid "Profile Details"
msgstr ""
-#: ../../boot.php:1502
+#: ../../boot.php:1523
msgid "Events and Calendar"
msgstr ""
-#: ../../boot.php:1508
+#: ../../boot.php:1529
msgid "Only You Can See This"
msgstr ""
diff --git a/view/admin_summary.tpl b/view/admin_summary.tpl
index eed71fbe0..4efe1960c 100644
--- a/view/admin_summary.tpl
+++ b/view/admin_summary.tpl
@@ -2,6 +2,10 @@
<h1>$title - $page</h1>
<dl>
+ <dt>$queues.label</dt>
+ <dd>$queues.deliverq - $queues.queue</dd>
+ </dl>
+ <dl>
<dt>$pending.0</dt>
<dd>$pending.1</dt>
</dl>
diff --git a/view/de/friend_complete_eml.tpl b/view/de/friend_complete_eml.tpl
index 4011e0d6e..39f2725ea 100644
--- a/view/de/friend_complete_eml.tpl
+++ b/view/de/friend_complete_eml.tpl
@@ -4,15 +4,15 @@ Hallo $[username],
Großartige Neuigkeiten... '$[fn]' auf '$[dfrn_url]' hat
deine Kontaktanfrage auf '$[sitename]' bestätigt.
-Ihr seit nun beidseitige Freunde und könnt Statusmitteilungen, Bilder und Emails
-ohne einschränkungen austauschen.
+Ihr seid nun beidseitige Freunde und könnt Statusmitteilungen, Bilder und Emails
+ohne Einschränkungen austauschen.
-Rufe deine 'Kontakte' Seite auf $[sitename] auf wenn du
+Rufe deine 'Kontakte' Seite auf $[sitename] auf, wenn du
Änderungen an diesem Kontakt vornehmen willst.
$[siteurl]
-[Du könntest z.B. ein spezielles Profil anlegen, das Informationen enthällt
+[Du könntest z.B. ein spezielles Profil anlegen, das Informationen enthält,
die nicht für die breite Öffentlichkeit sichtbar sein sollen und es für '$[fn]' zum Betrachten freigeben].
Beste Grüße,
diff --git a/view/de/intro_complete_eml.tpl b/view/de/intro_complete_eml.tpl
index de85c8a79..9d47a6fb1 100644
--- a/view/de/intro_complete_eml.tpl
+++ b/view/de/intro_complete_eml.tpl
@@ -1,19 +1,19 @@
Hallo $[username],
- '$[fn]' auf '$[dfrn_url]' wurde akzeptiert
-Deine Verbindungsanfrage auf '$[sitename]'.
+ '$[fn]' auf '$[dfrn_url]' hat deine Verbindungsanfrage
+auf '$[sitename]' akzeptiert.
- '$[fn]' hat entschieden Dich als "Fan" zu akzeptieren, was ein
-paar Formen der Kommunikation einschränkt - wie das schreiben von privaten Nachrichten und einige Profil
-Interaktionen. Wenn das ein Promi-Konto oder eine Forum-Seite ist, werden die Einstellungen
-automatisch angewendet.
+ '$[fn]' hat entschieden Dich als "Fan" zu akzeptieren, was zu einigen
+Einschränkungen bei der Kommunikation führt - wie zB das Schreiben von privaten Nachrichten und einige Profil
+Interaktionen. Sollte dies ein Promi-Konto oder eine Forum-Seite sein, werden die Einstellungen
+automatisch angewandt.
'$[fn]' kann wählen, ob die Freundschaft in eine beidseitige oder alles erlaubende
Beziehung in der Zukunft erweitert wird.
- Du empfängst jetzt die öffentlichen Beiträge von '$[fn]',
-welche auf der "Netzwerk" Seite erscheinen werden
+ Du empfängst ab sofort die öffentlichen Beiträge von '$[fn]',
+auf deiner "Netzwerk" Seite.
$[siteurl]
diff --git a/view/de/messages.po b/view/de/messages.po
index d7de20cec..5bc060237 100644
--- a/view/de/messages.po
+++ b/view/de/messages.po
@@ -8,7 +8,7 @@
# Fabian Dost <friends@dostmusik.de>, 2012.
# <friends@dostmusik.de>, 2012.
# <greeneyedred@googlemail.com>, 2012.
-# <hzuehl@phone-talk.de>, 2011.
+# <hzuehl@phone-talk.de>, 2011, 2012.
# <leberwurscht@hoegners.de>, 2012.
# <marmor69@web.de>, 2012.
# Martin Schmitt <mas@scsy.de>, 2012.
@@ -19,8 +19,8 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: http://bugs.friendica.com/\n"
-"POT-Creation-Date: 2012-05-06 10:00-0700\n"
-"PO-Revision-Date: 2012-05-08 07:06+0000\n"
+"POT-Creation-Date: 2012-06-02 10:00-0700\n"
+"PO-Revision-Date: 2012-06-03 15:30+0000\n"
"Last-Translator: bavatar <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.net/projects/p/friendica/language/de/)\n"
"MIME-Version: 1.0\n"
@@ -48,11 +48,11 @@ msgstr "Konnte den Kontakt nicht aktualisieren."
#: ../../mod/crepair.php:115 ../../mod/wall_attach.php:44
#: ../../mod/fsuggest.php:78 ../../mod/events.php:138 ../../mod/api.php:26
-#: ../../mod/api.php:31 ../../mod/photos.php:130 ../../mod/photos.php:865
-#: ../../mod/editpost.php:10 ../../mod/install.php:171
+#: ../../mod/api.php:31 ../../mod/photos.php:130 ../../mod/photos.php:920
+#: ../../mod/editpost.php:10 ../../mod/install.php:151
#: ../../mod/notifications.php:66 ../../mod/contacts.php:125
-#: ../../mod/settings.php:104 ../../mod/settings.php:521
-#: ../../mod/settings.php:526 ../../mod/manage.php:86 ../../mod/network.php:6
+#: ../../mod/settings.php:106 ../../mod/settings.php:537
+#: ../../mod/settings.php:542 ../../mod/manage.php:86 ../../mod/network.php:6
#: ../../mod/notes.php:20 ../../mod/wallmessage.php:9
#: ../../mod/wallmessage.php:33 ../../mod/wallmessage.php:79
#: ../../mod/wallmessage.php:103 ../../mod/attach.php:33
@@ -60,14 +60,14 @@ msgstr "Konnte den Kontakt nicht aktualisieren."
#: ../../mod/register.php:38 ../../mod/regmod.php:116 ../../mod/item.php:124
#: ../../mod/item.php:140 ../../mod/profile_photo.php:19
#: ../../mod/profile_photo.php:139 ../../mod/profile_photo.php:150
-#: ../../mod/profile_photo.php:163 ../../mod/message.php:38
-#: ../../mod/message.php:90 ../../mod/allfriends.php:9
+#: ../../mod/profile_photo.php:163 ../../mod/message.php:44
+#: ../../mod/message.php:96 ../../mod/allfriends.php:9
#: ../../mod/nogroup.php:25 ../../mod/wall_upload.php:53
#: ../../mod/follow.php:8 ../../mod/display.php:138 ../../mod/profiles.php:7
-#: ../../mod/profiles.php:365 ../../mod/delegate.php:6
+#: ../../mod/profiles.php:382 ../../mod/delegate.php:6
#: ../../mod/suggest.php:28 ../../mod/invite.php:13 ../../mod/invite.php:81
-#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:495
-#: ../../include/items.php:3192 ../../index.php:306
+#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:503
+#: ../../include/items.php:3297 ../../index.php:306
msgid "Permission denied."
msgstr "Zugriff verweigert."
@@ -78,7 +78,7 @@ msgstr "Kontakt nicht gefunden."
#: ../../mod/crepair.php:135
msgid "Repair Contact Settings"
-msgstr "Kontakt-Einstellungen reparieren"
+msgstr "Kontakteinstellungen reparieren"
#: ../../mod/crepair.php:137
msgid ""
@@ -96,8 +96,8 @@ msgstr "Bitte nutze den Zurück-Button deines Browsers <strong>jetzt</strong>, w
msgid "Return to contact editor"
msgstr "Zurück zum Kontakteditor"
-#: ../../mod/crepair.php:148 ../../mod/settings.php:541
-#: ../../mod/settings.php:567 ../../mod/admin.php:640 ../../mod/admin.php:649
+#: ../../mod/crepair.php:148 ../../mod/settings.php:557
+#: ../../mod/settings.php:583 ../../mod/admin.php:656 ../../mod/admin.php:665
msgid "Name"
msgstr "Name"
@@ -134,27 +134,28 @@ msgid "New photo from this URL"
msgstr "Neues Foto von dieser URL"
#: ../../mod/crepair.php:166 ../../mod/fsuggest.php:107
-#: ../../mod/events.php:428 ../../mod/photos.php:900 ../../mod/photos.php:958
-#: ../../mod/photos.php:1193 ../../mod/photos.php:1233
-#: ../../mod/photos.php:1273 ../../mod/photos.php:1304
-#: ../../mod/install.php:251 ../../mod/install.php:289
+#: ../../mod/events.php:428 ../../mod/photos.php:955 ../../mod/photos.php:1013
+#: ../../mod/photos.php:1256 ../../mod/photos.php:1296
+#: ../../mod/photos.php:1336 ../../mod/photos.php:1367
+#: ../../mod/install.php:246 ../../mod/install.php:284
#: ../../mod/localtime.php:45 ../../mod/contacts.php:322
-#: ../../mod/settings.php:539 ../../mod/settings.php:685
-#: ../../mod/settings.php:746 ../../mod/settings.php:940
-#: ../../mod/manage.php:109 ../../mod/group.php:85 ../../mod/admin.php:402
-#: ../../mod/admin.php:637 ../../mod/admin.php:773 ../../mod/admin.php:972
-#: ../../mod/admin.php:1059 ../../mod/profiles.php:534
-#: ../../mod/invite.php:119 ../../addon/facebook/facebook.php:597
+#: ../../mod/settings.php:555 ../../mod/settings.php:701
+#: ../../mod/settings.php:762 ../../mod/settings.php:969
+#: ../../mod/manage.php:109 ../../mod/group.php:85 ../../mod/admin.php:417
+#: ../../mod/admin.php:653 ../../mod/admin.php:789 ../../mod/admin.php:988
+#: ../../mod/admin.php:1075 ../../mod/profiles.php:551
+#: ../../mod/invite.php:119 ../../addon/facebook/facebook.php:605
#: ../../addon/yourls/yourls.php:76 ../../addon/ljpost/ljpost.php:93
#: ../../addon/nsfw/nsfw.php:57 ../../addon/planets/planets.php:158
#: ../../addon/uhremotestorage/uhremotestorage.php:89
#: ../../addon/randplace/randplace.php:177 ../../addon/dwpost/dwpost.php:93
-#: ../../addon/drpost/drpost.php:110 ../../addon/geonames/geonames.php:187
-#: ../../addon/oembed.old/oembed.php:41 ../../addon/impressum/impressum.php:82
-#: ../../addon/blockem/blockem.php:57 ../../addon/qcomment/qcomment.php:61
+#: ../../addon/drpost/drpost.php:110 ../../addon/startpage/startpage.php:92
+#: ../../addon/geonames/geonames.php:187 ../../addon/oembed.old/oembed.php:41
+#: ../../addon/impressum/impressum.php:82 ../../addon/blockem/blockem.php:57
+#: ../../addon/qcomment/qcomment.php:61
#: ../../addon/openstreetmap/openstreetmap.php:70
#: ../../addon/mathjax/mathjax.php:42 ../../addon/editplain/editplain.php:84
-#: ../../addon/blackout/blackout.php:94 ../../addon/gravatar/gravatar.php:86
+#: ../../addon/blackout/blackout.php:98 ../../addon/gravatar/gravatar.php:86
#: ../../addon/pageheader/pageheader.php:55 ../../addon/ijpost/ijpost.php:93
#: ../../addon/jappixmini/jappixmini.php:302
#: ../../addon/statusnet/statusnet.php:278
@@ -162,18 +163,18 @@ msgstr "Neues Foto von dieser URL"
#: ../../addon/statusnet/statusnet.php:318
#: ../../addon/statusnet/statusnet.php:325
#: ../../addon/statusnet/statusnet.php:353
-#: ../../addon/statusnet/statusnet.php:553 ../../addon/tumblr/tumblr.php:90
+#: ../../addon/statusnet/statusnet.php:561 ../../addon/tumblr/tumblr.php:90
#: ../../addon/numfriends/numfriends.php:85 ../../addon/gnot/gnot.php:88
-#: ../../addon/wppost/wppost.php:102 ../../addon/showmore/showmore.php:48
+#: ../../addon/wppost/wppost.php:109 ../../addon/showmore/showmore.php:48
#: ../../addon/piwik/piwik.php:89 ../../addon/twitter/twitter.php:180
-#: ../../addon/twitter/twitter.php:209 ../../addon/twitter/twitter.php:375
+#: ../../addon/twitter/twitter.php:209 ../../addon/twitter/twitter.php:381
#: ../../addon/irc/irc.php:55 ../../addon/blogger/blogger.php:102
-#: ../../addon/posterous/posterous.php:90
+#: ../../addon/posterous/posterous.php:103
#: ../../view/theme/cleanzero/config.php:80
-#: ../../view/theme/diabook/theme.php:590
-#: ../../view/theme/diabook/config.php:95
+#: ../../view/theme/diabook/theme.php:757
+#: ../../view/theme/diabook/config.php:190
#: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70
-#: ../../include/conversation.php:555
+#: ../../include/conversation.php:574
msgid "Submit"
msgstr "Senden"
@@ -217,7 +218,7 @@ msgstr "Schlage %s einen Kontakt vor"
#: ../../mod/events.php:65
msgid "Event description and start time are required."
-msgstr "Ereignis Beschreibung und Startzeit sind erforderlich."
+msgstr "Ereignisbeschreibung und Startzeit sind erforderlich."
#: ../../mod/events.php:258
msgid "l, F j"
@@ -227,12 +228,12 @@ msgstr "l, F j"
msgid "Edit event"
msgstr "Veranstaltung bearbeiten"
-#: ../../mod/events.php:300 ../../include/text.php:1054
+#: ../../mod/events.php:300 ../../include/text.php:1064
msgid "link to source"
msgstr "Link zum Originalbeitrag"
-#: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:69
-#: ../../include/nav.php:52 ../../boot.php:1493
+#: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:131
+#: ../../include/nav.php:52 ../../boot.php:1520
msgid "Events"
msgstr "Veranstaltungen"
@@ -244,7 +245,7 @@ msgstr "Neue Veranstaltung erstellen"
msgid "Previous"
msgstr "Vorherige"
-#: ../../mod/events.php:327 ../../mod/install.php:210
+#: ../../mod/events.php:327 ../../mod/install.php:205
msgid "Next"
msgstr "Nächste"
@@ -282,7 +283,7 @@ msgid "Description:"
msgstr "Beschreibung"
#: ../../mod/events.php:423 ../../include/event.php:37
-#: ../../include/bb2diaspora.php:260 ../../boot.php:1092
+#: ../../include/bb2diaspora.php:265 ../../boot.php:1100
msgid "Location:"
msgstr "Ort:"
@@ -291,8 +292,8 @@ msgid "Share this event"
msgstr "Veranstaltung teilen"
#: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94
-#: ../../mod/dfrn_request.php:818 ../../mod/settings.php:540
-#: ../../mod/settings.php:566 ../../addon/js_upload/js_upload.php:45
+#: ../../mod/dfrn_request.php:830 ../../mod/settings.php:556
+#: ../../mod/settings.php:582 ../../addon/js_upload/js_upload.php:45
msgid "Cancel"
msgstr "Abbrechen"
@@ -335,44 +336,47 @@ msgid ""
" and/or create new posts for you?"
msgstr "Möchtest du dieser Anwendung den Zugriff auf deine Beiträge und Kontakte, sowie das Erstellen neuer Beiträge in deinem Namen gestatten?"
-#: ../../mod/api.php:105 ../../mod/dfrn_request.php:806
-#: ../../mod/settings.php:854 ../../mod/settings.php:860
-#: ../../mod/settings.php:868 ../../mod/settings.php:872
-#: ../../mod/settings.php:877 ../../mod/settings.php:883
-#: ../../mod/settings.php:889 ../../mod/settings.php:895
-#: ../../mod/settings.php:931 ../../mod/settings.php:932
-#: ../../mod/settings.php:933 ../../mod/settings.php:934
-#: ../../mod/register.php:532 ../../mod/profiles.php:511
+#: ../../mod/api.php:105 ../../mod/dfrn_request.php:818
+#: ../../mod/settings.php:879 ../../mod/settings.php:885
+#: ../../mod/settings.php:893 ../../mod/settings.php:897
+#: ../../mod/settings.php:902 ../../mod/settings.php:908
+#: ../../mod/settings.php:914 ../../mod/settings.php:920
+#: ../../mod/settings.php:956 ../../mod/settings.php:957
+#: ../../mod/settings.php:958 ../../mod/settings.php:959
+#: ../../mod/settings.php:960 ../../mod/register.php:234
+#: ../../mod/profiles.php:528
msgid "Yes"
msgstr "Ja"
-#: ../../mod/api.php:106 ../../mod/dfrn_request.php:807
-#: ../../mod/settings.php:854 ../../mod/settings.php:860
-#: ../../mod/settings.php:868 ../../mod/settings.php:872
-#: ../../mod/settings.php:877 ../../mod/settings.php:883
-#: ../../mod/settings.php:889 ../../mod/settings.php:895
-#: ../../mod/settings.php:931 ../../mod/settings.php:932
-#: ../../mod/settings.php:933 ../../mod/settings.php:934
-#: ../../mod/register.php:533 ../../mod/profiles.php:512
+#: ../../mod/api.php:106 ../../mod/dfrn_request.php:819
+#: ../../mod/settings.php:879 ../../mod/settings.php:885
+#: ../../mod/settings.php:893 ../../mod/settings.php:897
+#: ../../mod/settings.php:902 ../../mod/settings.php:908
+#: ../../mod/settings.php:914 ../../mod/settings.php:920
+#: ../../mod/settings.php:956 ../../mod/settings.php:957
+#: ../../mod/settings.php:958 ../../mod/settings.php:959
+#: ../../mod/settings.php:960 ../../mod/register.php:235
+#: ../../mod/profiles.php:529
msgid "No"
msgstr "Nein"
-#: ../../mod/photos.php:43 ../../boot.php:1487
+#: ../../mod/photos.php:43 ../../boot.php:1514
msgid "Photo Albums"
msgstr "Fotoalben"
-#: ../../mod/photos.php:51 ../../mod/photos.php:151 ../../mod/photos.php:879
-#: ../../mod/photos.php:950 ../../mod/photos.php:965 ../../mod/photos.php:1382
-#: ../../mod/photos.php:1394 ../../addon/communityhome/communityhome.php:110
-#: ../../view/theme/diabook/theme.php:485
+#: ../../mod/photos.php:51 ../../mod/photos.php:151 ../../mod/photos.php:934
+#: ../../mod/photos.php:1005 ../../mod/photos.php:1020
+#: ../../mod/photos.php:1445 ../../mod/photos.php:1457
+#: ../../addon/communityhome/communityhome.php:110
+#: ../../view/theme/diabook/theme.php:598
msgid "Contact Photos"
msgstr "Kontaktbilder"
-#: ../../mod/photos.php:58 ../../mod/photos.php:975 ../../mod/photos.php:1424
+#: ../../mod/photos.php:58 ../../mod/photos.php:1030 ../../mod/photos.php:1494
msgid "Upload New Photos"
msgstr "Weitere Fotos hochladen"
-#: ../../mod/photos.php:69 ../../mod/settings.php:20
+#: ../../mod/photos.php:69 ../../mod/settings.php:21
msgid "everybody"
msgstr "jeder"
@@ -380,14 +384,14 @@ msgstr "jeder"
msgid "Contact information unavailable"
msgstr "Kontaktinformationen nicht verfügbar"
-#: ../../mod/photos.php:151 ../../mod/photos.php:597 ../../mod/photos.php:950
-#: ../../mod/photos.php:965 ../../mod/register.php:335
-#: ../../mod/register.php:342 ../../mod/register.php:349
-#: ../../mod/profile_photo.php:60 ../../mod/profile_photo.php:67
-#: ../../mod/profile_photo.php:74 ../../mod/profile_photo.php:174
-#: ../../mod/profile_photo.php:252 ../../mod/profile_photo.php:261
+#: ../../mod/photos.php:151 ../../mod/photos.php:652 ../../mod/photos.php:1005
+#: ../../mod/photos.php:1020 ../../mod/profile_photo.php:60
+#: ../../mod/profile_photo.php:67 ../../mod/profile_photo.php:74
+#: ../../mod/profile_photo.php:174 ../../mod/profile_photo.php:252
+#: ../../mod/profile_photo.php:261
#: ../../addon/communityhome/communityhome.php:111
-#: ../../view/theme/diabook/theme.php:486
+#: ../../view/theme/diabook/theme.php:599 ../../include/user.php:294
+#: ../../include/user.php:301 ../../include/user.php:308
msgid "Profile Photos"
msgstr "Profilbilder"
@@ -395,189 +399,193 @@ msgstr "Profilbilder"
msgid "Album not found."
msgstr "Album nicht gefunden."
-#: ../../mod/photos.php:179 ../../mod/photos.php:959
+#: ../../mod/photos.php:179 ../../mod/photos.php:1014
msgid "Delete Album"
msgstr "Album löschen"
-#: ../../mod/photos.php:242 ../../mod/photos.php:1194
+#: ../../mod/photos.php:242 ../../mod/photos.php:1257
msgid "Delete Photo"
msgstr "Foto löschen"
-#: ../../mod/photos.php:528
+#: ../../mod/photos.php:583
msgid "was tagged in a"
msgstr "wurde getaggt in einem"
-#: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70
+#: ../../mod/photos.php:583 ../../mod/like.php:127 ../../mod/tagger.php:70
#: ../../addon/communityhome/communityhome.php:163
-#: ../../view/theme/diabook/theme.php:457 ../../include/text.php:1305
-#: ../../include/diaspora.php:1654 ../../include/conversation.php:53
+#: ../../view/theme/diabook/theme.php:570 ../../include/text.php:1315
+#: ../../include/diaspora.php:1662 ../../include/conversation.php:53
#: ../../include/conversation.php:126
msgid "photo"
msgstr "Foto"
-#: ../../mod/photos.php:528
+#: ../../mod/photos.php:583
msgid "by"
msgstr "von"
-#: ../../mod/photos.php:631 ../../addon/js_upload/js_upload.php:315
+#: ../../mod/photos.php:686 ../../addon/js_upload/js_upload.php:315
msgid "Image exceeds size limit of "
msgstr "Die Bildgröße übersteigt das Limit von "
-#: ../../mod/photos.php:639
+#: ../../mod/photos.php:694
msgid "Image file is empty."
msgstr "Bilddatei ist leer."
-#: ../../mod/photos.php:653 ../../mod/profile_photo.php:124
+#: ../../mod/photos.php:708 ../../mod/profile_photo.php:124
#: ../../mod/wall_upload.php:83
msgid "Unable to process image."
msgstr "Konnte das Bild nicht bearbeiten."
-#: ../../mod/photos.php:673 ../../mod/profile_photo.php:257
+#: ../../mod/photos.php:728 ../../mod/profile_photo.php:257
#: ../../mod/wall_upload.php:102
msgid "Image upload failed."
msgstr "Hochladen des Bildes gescheitert."
-#: ../../mod/photos.php:759 ../../mod/community.php:16
-#: ../../mod/dfrn_request.php:732 ../../mod/viewcontacts.php:17
+#: ../../mod/photos.php:814 ../../mod/community.php:16
+#: ../../mod/dfrn_request.php:744 ../../mod/viewcontacts.php:17
#: ../../mod/display.php:7 ../../mod/search.php:71 ../../mod/directory.php:29
msgid "Public access denied."
msgstr "Öffentlicher Zugriff verweigert."
-#: ../../mod/photos.php:769
+#: ../../mod/photos.php:824
msgid "No photos selected"
msgstr "Keine Bilder ausgewählt"
-#: ../../mod/photos.php:846
+#: ../../mod/photos.php:901
msgid "Access to this item is restricted."
msgstr "Zugriff zu diesem Eintrag wurde eingeschränkt."
-#: ../../mod/photos.php:907
+#: ../../mod/photos.php:962
msgid "Upload Photos"
msgstr "Bilder hochladen"
-#: ../../mod/photos.php:910 ../../mod/photos.php:954
+#: ../../mod/photos.php:965 ../../mod/photos.php:1009
msgid "New album name: "
msgstr "Name des neuen Albums: "
-#: ../../mod/photos.php:911
+#: ../../mod/photos.php:966
msgid "or existing album name: "
msgstr "oder existierender Albumname: "
-#: ../../mod/photos.php:912
+#: ../../mod/photos.php:967
msgid "Do not show a status post for this upload"
msgstr "Keine Status-Mitteilung für diesen Beitrag anzeigen"
-#: ../../mod/photos.php:914 ../../mod/photos.php:1189
+#: ../../mod/photos.php:969 ../../mod/photos.php:1252
msgid "Permissions"
msgstr "Berechtigungen"
-#: ../../mod/photos.php:969
+#: ../../mod/photos.php:1024
msgid "Edit Album"
msgstr "Album bearbeiten"
-#: ../../mod/photos.php:984 ../../mod/photos.php:1407
+#: ../../mod/photos.php:1046 ../../mod/photos.php:1477
msgid "View Photo"
msgstr "Fotos betrachten"
-#: ../../mod/photos.php:1019
+#: ../../mod/photos.php:1081
msgid "Permission denied. Access to this item may be restricted."
msgstr "Zugriff verweigert. Zugriff zu diesem Eintrag könnte eingeschränkt sein."
-#: ../../mod/photos.php:1021
+#: ../../mod/photos.php:1083
msgid "Photo not available"
msgstr "Foto nicht verfügbar"
-#: ../../mod/photos.php:1071
+#: ../../mod/photos.php:1133
msgid "View photo"
msgstr "Fotos ansehen"
-#: ../../mod/photos.php:1071
+#: ../../mod/photos.php:1133
msgid "Edit photo"
msgstr "Foto bearbeiten"
-#: ../../mod/photos.php:1072
+#: ../../mod/photos.php:1134
msgid "Use as profile photo"
msgstr "Als Profilbild verwenden"
-#: ../../mod/photos.php:1078 ../../include/conversation.php:480
+#: ../../mod/photos.php:1140 ../../include/conversation.php:484
msgid "Private Message"
msgstr "Private Nachricht"
-#: ../../mod/photos.php:1100
+#: ../../mod/photos.php:1162
msgid "View Full Size"
msgstr "Betrachte Originalgröße"
-#: ../../mod/photos.php:1168
+#: ../../mod/photos.php:1230
msgid "Tags: "
msgstr "Tags: "
-#: ../../mod/photos.php:1171
+#: ../../mod/photos.php:1233
msgid "[Remove any tag]"
msgstr "[Tag entfernen]"
-#: ../../mod/photos.php:1182
+#: ../../mod/photos.php:1243
+msgid "Rotate CW"
+msgstr "Im Uhrzeigersinn rotieren"
+
+#: ../../mod/photos.php:1245
msgid "New album name"
msgstr "Name des neuen Albums"
-#: ../../mod/photos.php:1185
+#: ../../mod/photos.php:1248
msgid "Caption"
msgstr "Bildunterschrift"
-#: ../../mod/photos.php:1187
+#: ../../mod/photos.php:1250
msgid "Add a Tag"
msgstr "Tag hinzufügen"
-#: ../../mod/photos.php:1191
+#: ../../mod/photos.php:1254
msgid ""
"Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
msgstr "Beispiel: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
-#: ../../mod/photos.php:1211 ../../include/conversation.php:529
+#: ../../mod/photos.php:1274 ../../include/conversation.php:548
msgid "I like this (toggle)"
msgstr "Ich mag das (toggle)"
-#: ../../mod/photos.php:1212 ../../include/conversation.php:530
+#: ../../mod/photos.php:1275 ../../include/conversation.php:549
msgid "I don't like this (toggle)"
msgstr "Ich mag das nicht (toggle)"
-#: ../../mod/photos.php:1213 ../../include/conversation.php:964
+#: ../../mod/photos.php:1276 ../../include/conversation.php:983
msgid "Share"
msgstr "Teilen"
-#: ../../mod/photos.php:1214 ../../mod/editpost.php:104
-#: ../../mod/wallmessage.php:145 ../../mod/message.php:188
-#: ../../mod/message.php:380 ../../include/conversation.php:361
-#: ../../include/conversation.php:706 ../../include/conversation.php:983
+#: ../../mod/photos.php:1277 ../../mod/editpost.php:104
+#: ../../mod/wallmessage.php:145 ../../mod/message.php:214
+#: ../../mod/message.php:408 ../../include/conversation.php:365
+#: ../../include/conversation.php:725 ../../include/conversation.php:1002
msgid "Please wait"
msgstr "Bitte warten"
-#: ../../mod/photos.php:1230 ../../mod/photos.php:1270
-#: ../../mod/photos.php:1301 ../../include/conversation.php:552
+#: ../../mod/photos.php:1293 ../../mod/photos.php:1333
+#: ../../mod/photos.php:1364 ../../include/conversation.php:571
msgid "This is you"
msgstr "Das bist du"
-#: ../../mod/photos.php:1232 ../../mod/photos.php:1272
-#: ../../mod/photos.php:1303 ../../include/conversation.php:554
-#: ../../boot.php:506
+#: ../../mod/photos.php:1295 ../../mod/photos.php:1335
+#: ../../mod/photos.php:1366 ../../include/conversation.php:573
+#: ../../boot.php:514
msgid "Comment"
msgstr "Kommentar"
-#: ../../mod/photos.php:1234 ../../mod/editpost.php:125
-#: ../../include/conversation.php:564 ../../include/conversation.php:1001
+#: ../../mod/photos.php:1297 ../../mod/editpost.php:125
+#: ../../include/conversation.php:583 ../../include/conversation.php:1020
msgid "Preview"
msgstr "Vorschau"
-#: ../../mod/photos.php:1331 ../../mod/settings.php:602
-#: ../../mod/settings.php:683 ../../mod/group.php:168 ../../mod/admin.php:644
-#: ../../include/conversation.php:318 ../../include/conversation.php:584
+#: ../../mod/photos.php:1394 ../../mod/settings.php:618
+#: ../../mod/settings.php:699 ../../mod/group.php:168 ../../mod/admin.php:660
+#: ../../include/conversation.php:322 ../../include/conversation.php:603
msgid "Delete"
msgstr "Löschen"
-#: ../../mod/photos.php:1413
+#: ../../mod/photos.php:1483
msgid "View Album"
msgstr "Album betrachten"
-#: ../../mod/photos.php:1422
+#: ../../mod/photos.php:1492
msgid "Recent Photos"
msgstr "Neueste Fotos"
@@ -585,12 +593,12 @@ msgstr "Neueste Fotos"
msgid "Not available."
msgstr "Nicht verfügbar."
-#: ../../mod/community.php:30 ../../view/theme/diabook/theme.php:71
+#: ../../mod/community.php:30 ../../view/theme/diabook/theme.php:133
#: ../../include/nav.php:101
msgid "Community"
msgstr "Gemeinschaft"
-#: ../../mod/community.php:61 ../../mod/search.php:128
+#: ../../mod/community.php:61 ../../mod/search.php:144
msgid "No results."
msgstr "Keine Ergebnisse."
@@ -606,7 +614,7 @@ msgstr "die unter folgender Webadresse zu finden ist"
msgid ""
"Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn "
"more about the Friendica project."
-msgstr "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a> um mehr über das Friendica Projekt zu erfahren."
+msgstr "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a>, um mehr über das Friendica Projekt zu erfahren."
#: ../../mod/friendica.php:60
msgid "Bug reports and issues: please visit"
@@ -634,28 +642,28 @@ msgstr "Beitrag nicht gefunden"
msgid "Edit post"
msgstr "Beitrag bearbeiten"
-#: ../../mod/editpost.php:80 ../../include/conversation.php:950
+#: ../../mod/editpost.php:80 ../../include/conversation.php:969
msgid "Post to Email"
msgstr "An E-Mail senden"
-#: ../../mod/editpost.php:95 ../../mod/settings.php:601
-#: ../../include/conversation.php:571
+#: ../../mod/editpost.php:95 ../../mod/settings.php:617
+#: ../../include/conversation.php:590
msgid "Edit"
msgstr "Bearbeiten"
#: ../../mod/editpost.php:96 ../../mod/wallmessage.php:143
-#: ../../mod/message.php:186 ../../mod/message.php:378
-#: ../../include/conversation.php:965
+#: ../../mod/message.php:212 ../../mod/message.php:406
+#: ../../include/conversation.php:984
msgid "Upload photo"
msgstr "Foto hochladen"
-#: ../../mod/editpost.php:97 ../../include/conversation.php:967
+#: ../../mod/editpost.php:97 ../../include/conversation.php:986
msgid "Attach file"
msgstr "Datei anhängen"
#: ../../mod/editpost.php:98 ../../mod/wallmessage.php:144
-#: ../../mod/message.php:187 ../../mod/message.php:379
-#: ../../include/conversation.php:969
+#: ../../mod/message.php:213 ../../mod/message.php:407
+#: ../../include/conversation.php:988
msgid "Insert web link"
msgstr "einen Link einfügen"
@@ -671,35 +679,35 @@ msgstr "Vorbis [.ogg] Video einfügen"
msgid "Insert Vorbis [.ogg] audio"
msgstr "Vorbis [.ogg] Audio einfügen"
-#: ../../mod/editpost.php:102 ../../include/conversation.php:975
+#: ../../mod/editpost.php:102 ../../include/conversation.php:994
msgid "Set your location"
msgstr "Deinen Standort festlegen"
-#: ../../mod/editpost.php:103 ../../include/conversation.php:977
+#: ../../mod/editpost.php:103 ../../include/conversation.php:996
msgid "Clear browser location"
msgstr "Browser-Standort leeren"
-#: ../../mod/editpost.php:105 ../../include/conversation.php:984
+#: ../../mod/editpost.php:105 ../../include/conversation.php:1003
msgid "Permission settings"
msgstr "Berechtigungseinstellungen"
-#: ../../mod/editpost.php:113 ../../include/conversation.php:993
+#: ../../mod/editpost.php:113 ../../include/conversation.php:1012
msgid "CC: email addresses"
msgstr "Cc:-E-Mail-Addressen"
-#: ../../mod/editpost.php:114 ../../include/conversation.php:994
+#: ../../mod/editpost.php:114 ../../include/conversation.php:1013
msgid "Public post"
msgstr "Öffentlicher Beitrag"
-#: ../../mod/editpost.php:117 ../../include/conversation.php:980
+#: ../../mod/editpost.php:117 ../../include/conversation.php:999
msgid "Set title"
msgstr "Titel setzen"
-#: ../../mod/editpost.php:119 ../../include/conversation.php:982
+#: ../../mod/editpost.php:119 ../../include/conversation.php:1001
msgid "Categories (comma-separated list)"
msgstr "Kategorien (kommasepariert)"
-#: ../../mod/editpost.php:120 ../../include/conversation.php:996
+#: ../../mod/editpost.php:120 ../../include/conversation.php:1015
msgid "Example: bob@example.com, mary@example.com"
msgstr "Z.B.: bob@example.com, mary@example.com"
@@ -707,201 +715,200 @@ msgstr "Z.B.: bob@example.com, mary@example.com"
msgid "This introduction has already been accepted."
msgstr "Diese Kontaktanfrage wurde bereits akzeptiert."
-#: ../../mod/dfrn_request.php:117 ../../mod/dfrn_request.php:487
+#: ../../mod/dfrn_request.php:118 ../../mod/dfrn_request.php:497
msgid "Profile location is not valid or does not contain profile information."
msgstr "Profiladresse ist ungültig oder stellt einige Profildaten nicht zur Verfügung."
-#: ../../mod/dfrn_request.php:122 ../../mod/dfrn_request.php:492
+#: ../../mod/dfrn_request.php:123 ../../mod/dfrn_request.php:502
msgid "Warning: profile location has no identifiable owner name."
msgstr "Warnung: Es konnte kein Name des Besitzers von der angegebenen Profiladresse gefunden werden."
-#: ../../mod/dfrn_request.php:124 ../../mod/dfrn_request.php:494
+#: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:504
msgid "Warning: profile location has no profile photo."
msgstr "Warnung: Es konnte kein Profilbild bei der angegebenen Profiladresse gefunden werden."
-#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:497
+#: ../../mod/dfrn_request.php:128 ../../mod/dfrn_request.php:507
#, php-format
msgid "%d required parameter was not found at the given location"
msgid_plural "%d required parameters were not found at the given location"
msgstr[0] "%d benötigter Parameter wurde an der angegebenen Stelle nicht gefunden"
msgstr[1] "%d benötigte Parameter wurden an der angegebenen Stelle nicht gefunden"
-#: ../../mod/dfrn_request.php:168
+#: ../../mod/dfrn_request.php:170
msgid "Introduction complete."
msgstr "Kontaktanfrage abgeschlossen."
-#: ../../mod/dfrn_request.php:192
+#: ../../mod/dfrn_request.php:194
msgid "Unrecoverable protocol error."
msgstr "Nicht behebbarer Protokollfehler."
-#: ../../mod/dfrn_request.php:220
+#: ../../mod/dfrn_request.php:222
msgid "Profile unavailable."
msgstr "Profil nicht verfügbar."
-#: ../../mod/dfrn_request.php:245
+#: ../../mod/dfrn_request.php:247
#, php-format
msgid "%s has received too many connection requests today."
msgstr "%s hat heute zu viele Freundschaftsanfragen erhalten."
-#: ../../mod/dfrn_request.php:246
+#: ../../mod/dfrn_request.php:248
msgid "Spam protection measures have been invoked."
msgstr "Maßnahmen zum Spamschutz wurden ergriffen."
-#: ../../mod/dfrn_request.php:247
+#: ../../mod/dfrn_request.php:249
msgid "Friends are advised to please try again in 24 hours."
msgstr "Freunde sind angehalten, es in 24 Stunden erneut zu versuchen."
-#: ../../mod/dfrn_request.php:309
+#: ../../mod/dfrn_request.php:311
msgid "Invalid locator"
msgstr "Ungültiger Locator"
-#: ../../mod/dfrn_request.php:318
+#: ../../mod/dfrn_request.php:320
msgid "Invalid email address."
msgstr "Ungültige E-Mail Adresse."
-#: ../../mod/dfrn_request.php:344
+#: ../../mod/dfrn_request.php:346
msgid "This account has not been configured for email. Request failed."
msgstr "Dieses Konto ist nicht für Email konfiguriert. Anfrage fehlgeschlagen."
-#: ../../mod/dfrn_request.php:432
+#: ../../mod/dfrn_request.php:442
msgid "Unable to resolve your name at the provided location."
msgstr "Konnte deinen Namen an der angegebenen Stelle nicht finden."
-#: ../../mod/dfrn_request.php:445
+#: ../../mod/dfrn_request.php:455
msgid "You have already introduced yourself here."
msgstr "Du hast dich hier bereits vorgestellt."
-#: ../../mod/dfrn_request.php:449
+#: ../../mod/dfrn_request.php:459
#, php-format
msgid "Apparently you are already friends with %s."
msgstr "Es scheint so, als ob du bereits mit %s befreundet bist."
-#: ../../mod/dfrn_request.php:470
+#: ../../mod/dfrn_request.php:480
msgid "Invalid profile URL."
msgstr "Ungültige Profil-URL."
-#: ../../mod/dfrn_request.php:476 ../../mod/follow.php:20
+#: ../../mod/dfrn_request.php:486 ../../mod/follow.php:23
msgid "Disallowed profile URL."
msgstr "Nicht erlaubte Profil-URL."
-#: ../../mod/dfrn_request.php:545 ../../mod/contacts.php:102
+#: ../../mod/dfrn_request.php:555 ../../mod/contacts.php:102
msgid "Failed to update contact record."
msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen."
-#: ../../mod/dfrn_request.php:566
+#: ../../mod/dfrn_request.php:576
msgid "Your introduction has been sent."
msgstr "Deine Kontaktanfrage wurde gesendet."
-#: ../../mod/dfrn_request.php:619
+#: ../../mod/dfrn_request.php:629
msgid "Please login to confirm introduction."
msgstr "Bitte melde dich an, um die Kontaktanfrage zu bestätigen."
-#: ../../mod/dfrn_request.php:633
+#: ../../mod/dfrn_request.php:643
msgid ""
"Incorrect identity currently logged in. Please login to "
"<strong>this</strong> profile."
msgstr "Momentan bist du mit einer anderen Identität angemeldet. Bitte melde Dich mit <strong>diesem</strong> Profil an."
-#: ../../mod/dfrn_request.php:645
+#: ../../mod/dfrn_request.php:654
+msgid "Hide this contact"
+msgstr "Verberge diese Kontakt"
+
+#: ../../mod/dfrn_request.php:657
#, php-format
msgid "Welcome home %s."
msgstr "Willkommen zurück %s."
-#: ../../mod/dfrn_request.php:646
+#: ../../mod/dfrn_request.php:658
#, php-format
msgid "Please confirm your introduction/connection request to %s."
msgstr "Bitte bestätige deine Kontaktanfrage bei %s."
-#: ../../mod/dfrn_request.php:647
+#: ../../mod/dfrn_request.php:659
msgid "Confirm"
msgstr "Bestätigen"
-#: ../../mod/dfrn_request.php:688 ../../include/items.php:2707
+#: ../../mod/dfrn_request.php:700 ../../include/items.php:2733
msgid "[Name Withheld]"
msgstr "[Name unterdrückt]"
-#: ../../mod/dfrn_request.php:781
+#: ../../mod/dfrn_request.php:793
msgid ""
"Please enter your 'Identity Address' from one of the following supported "
"communications networks:"
msgstr "Bitte gib die Adresse deines Profils in einem der unterstützten sozialen Netzwerke an:"
-#: ../../mod/dfrn_request.php:797
+#: ../../mod/dfrn_request.php:809
msgid "<strike>Connect as an email follower</strike> (Coming soon)"
msgstr "<strike>Als E-Mail-Kontakt verbinden</strike> (In Kürze verfügbar)"
-#: ../../mod/dfrn_request.php:799
+#: ../../mod/dfrn_request.php:811
msgid ""
"If you are not yet a member of the free social web, <a "
"href=\"http://dir.friendica.com/siteinfo\">follow this link to find a public"
" Friendica site and join us today</a>."
msgstr "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, <a href=\"http://dir.friendica.com/siteinfo\">folge diesem Link</a> um einen öffentlichen Friendica-Server zu finden und beizutreten."
-#: ../../mod/dfrn_request.php:802
+#: ../../mod/dfrn_request.php:814
msgid "Friend/Connection Request"
msgstr "Freundschafts-/Kontaktanfrage"
-#: ../../mod/dfrn_request.php:803
+#: ../../mod/dfrn_request.php:815
msgid ""
"Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, "
"testuser@identi.ca"
msgstr "Beispiele: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca"
-#: ../../mod/dfrn_request.php:804
+#: ../../mod/dfrn_request.php:816
msgid "Please answer the following:"
msgstr "Bitte beantworte Folgendes:"
-#: ../../mod/dfrn_request.php:805
+#: ../../mod/dfrn_request.php:817
#, php-format
msgid "Does %s know you?"
msgstr "Kennt %s dich?"
-#: ../../mod/dfrn_request.php:808
+#: ../../mod/dfrn_request.php:820
msgid "Add a personal note:"
msgstr "Eine persönliche Notiz beifügen:"
-#: ../../mod/dfrn_request.php:810 ../../include/contact_selectors.php:76
+#: ../../mod/dfrn_request.php:822 ../../include/contact_selectors.php:76
msgid "Friendica"
msgstr "Friendica"
-#: ../../mod/dfrn_request.php:811
+#: ../../mod/dfrn_request.php:823
msgid "StatusNet/Federated Social Web"
msgstr "StatusNet/Federated Social Web"
-#: ../../mod/dfrn_request.php:812 ../../mod/settings.php:636
+#: ../../mod/dfrn_request.php:824 ../../mod/settings.php:652
#: ../../include/contact_selectors.php:80
msgid "Diaspora"
msgstr "Diaspora"
-#: ../../mod/dfrn_request.php:813
+#: ../../mod/dfrn_request.php:825
#, php-format
msgid ""
" - please do not use this form. Instead, enter %s into your Diaspora search"
" bar."
msgstr " - bitte verwende dieses Formular nicht. Stattdessen suche nach %s in deiner Diaspora Suchleiste."
-#: ../../mod/dfrn_request.php:814
+#: ../../mod/dfrn_request.php:826
msgid "Your Identity Address:"
msgstr "Adresse deines Profils:"
-#: ../../mod/dfrn_request.php:817
+#: ../../mod/dfrn_request.php:829
msgid "Submit Request"
msgstr "Anfrage abschicken"
-#: ../../mod/install.php:111
+#: ../../mod/install.php:117
msgid "Friendica Social Communications Server - Setup"
msgstr "Friendica-Server für soziale Netzwerke – Setup"
-#: ../../mod/install.php:117 ../../mod/install.php:157
-#: ../../mod/install.php:230
-msgid "Database connection"
-msgstr "Datenbank-Verbindung"
-
-#: ../../mod/install.php:124
+#: ../../mod/install.php:123
msgid "Could not connect to database."
msgstr "Verbindung zur Datenbank gescheitert"
-#: ../../mod/install.php:128
+#: ../../mod/install.php:127
msgid "Could not create table."
msgstr "Konnte Tabelle nicht erstellen."
@@ -909,232 +916,246 @@ msgstr "Konnte Tabelle nicht erstellen."
msgid "Your Friendica site database has been installed."
msgstr "Die Datenbank deiner Friendica Seite wurde installiert."
-#: ../../mod/install.php:134
-msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the "
-"poller."
-msgstr "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten."
-
-#: ../../mod/install.php:135 ../../mod/install.php:151
-#: ../../mod/install.php:209
-msgid "Please see the file \"INSTALL.txt\"."
-msgstr "Lies bitte die \"INSTALL.txt\"."
-
-#: ../../mod/install.php:137
-msgid "Proceed to registration"
-msgstr "Mit der Registrierung fortfahren"
-
-#: ../../mod/install.php:143
-msgid "Proceed with Installation"
-msgstr "Mit der Installation fortfahren"
-
-#: ../../mod/install.php:150
+#: ../../mod/install.php:138
msgid ""
"You may need to import the file \"database.sql\" manually using phpmyadmin "
"or mysql."
msgstr "Möglicherweise musst du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren."
-#: ../../mod/install.php:158
-msgid "Database import failed."
-msgstr "Import der Datenbank schlug fehl."
+#: ../../mod/install.php:139 ../../mod/install.php:204
+#: ../../mod/install.php:489
+msgid "Please see the file \"INSTALL.txt\"."
+msgstr "Lies bitte die \"INSTALL.txt\"."
-#: ../../mod/install.php:206
+#: ../../mod/install.php:201
msgid "System check"
msgstr "Systemtest"
-#: ../../mod/install.php:211
+#: ../../mod/install.php:206
msgid "Check again"
msgstr "Noch einmal testen"
-#: ../../mod/install.php:231
+#: ../../mod/install.php:225
+msgid "Database connection"
+msgstr "Datenbankverbindung"
+
+#: ../../mod/install.php:226
msgid ""
"In order to install Friendica we need to know how to connect to your "
"database."
msgstr "Um Friendica installieren zu können, müssen wir wissen, wie wir zu deiner Datenbank Kontakt aufnehmen können."
-#: ../../mod/install.php:232
+#: ../../mod/install.php:227
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite, falls du Fragen zu diesen Einstellungen haben solltest."
-#: ../../mod/install.php:233
+#: ../../mod/install.php:228
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr "Die Datenbank, die du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor du mit der Installation fortfährst."
-#: ../../mod/install.php:237
+#: ../../mod/install.php:232
msgid "Database Server Name"
msgstr "Datenbank-Server"
-#: ../../mod/install.php:238
+#: ../../mod/install.php:233
msgid "Database Login Name"
msgstr "Datenbank-Nutzer"
-#: ../../mod/install.php:239
+#: ../../mod/install.php:234
msgid "Database Login Password"
msgstr "Datenbank-Passwort"
-#: ../../mod/install.php:240
+#: ../../mod/install.php:235
msgid "Database Name"
msgstr "Datenbank-Name"
-#: ../../mod/install.php:241 ../../mod/install.php:280
+#: ../../mod/install.php:236 ../../mod/install.php:275
msgid "Site administrator email address"
msgstr "E-Mail-Adresse des Administrators"
-#: ../../mod/install.php:241 ../../mod/install.php:280
+#: ../../mod/install.php:236 ../../mod/install.php:275
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr "Die E-Mail-Adresse, die in deinem Friendica-Account eingetragen ist, muss mit dieser Adresse übereinstimmen, damit du das Admin-Panel benutzen kannst."
-#: ../../mod/install.php:245 ../../mod/install.php:283
+#: ../../mod/install.php:240 ../../mod/install.php:278
msgid "Please select a default timezone for your website"
msgstr "Bitte wähle die Standardzeitzone deiner Webseite"
-#: ../../mod/install.php:270
+#: ../../mod/install.php:265
msgid "Site settings"
msgstr "Server-Einstellungen"
-#: ../../mod/install.php:323
+#: ../../mod/install.php:318
msgid "Could not find a command line version of PHP in the web server PATH."
msgstr "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden."
-#: ../../mod/install.php:326
+#: ../../mod/install.php:319
+msgid ""
+"If you don't have a command line version of PHP installed on server, you "
+"will not be able to run background polling via cron. See <a "
+"href='http://friendica.com/node/27'>'Activating scheduled tasks'</a>"
+msgstr "Wenn du keine Kommandozeilen Version von PHP auf deinem Server installiert hast, kannst du keine Hintergrundprozesse via cron starten. Siehe <a href='http://friendica.com/node/27'>'Activating scheduled tasks'</a>"
+
+#: ../../mod/install.php:323
msgid "PHP executable path"
msgstr "Pfad zu PHP"
-#: ../../mod/install.php:326
-msgid "Enter full path to php executable"
-msgstr "Kompletter Pfad zum PHP-Executable"
+#: ../../mod/install.php:323
+msgid ""
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
+msgstr "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst diesen Feld auch frei lassen und mit der Installation fortfahren."
-#: ../../mod/install.php:331
+#: ../../mod/install.php:328
msgid "Command line PHP"
msgstr "Kommandozeilen-PHP"
-#: ../../mod/install.php:340
+#: ../../mod/install.php:337
msgid ""
"The command line version of PHP on your system does not have "
"\"register_argc_argv\" enabled."
msgstr "Die Kommandozeilenversion von PHP auf deinem System hat \"register_argc_argv\" nicht aktiviert."
-#: ../../mod/install.php:341
+#: ../../mod/install.php:338
msgid "This is required for message delivery to work."
msgstr "Dies wird für die Auslieferung von Nachrichten benötigt."
-#: ../../mod/install.php:343
+#: ../../mod/install.php:340
msgid "PHP register_argc_argv"
msgstr "PHP register_argc_argv"
-#: ../../mod/install.php:364
+#: ../../mod/install.php:361
msgid ""
"Error: the \"openssl_pkey_new\" function on this system is not able to "
"generate encryption keys"
msgstr "Fehler: Die Funktion \"openssl_pkey_new\" auf diesem System ist nicht in der Lage, Verschlüsselungsschlüssel zu erzeugen"
-#: ../../mod/install.php:365
+#: ../../mod/install.php:362
msgid ""
"If running under Windows, please see "
"\"http://www.php.net/manual/en/openssl.installation.php\"."
msgstr "Wenn der Server unter Windows läuft, schau dir bitte \"http://www.php.net/manual/en/openssl.installation.php\" an."
-#: ../../mod/install.php:367
+#: ../../mod/install.php:364
msgid "Generate encryption keys"
msgstr "Schlüssel erzeugen"
-#: ../../mod/install.php:374
+#: ../../mod/install.php:371
msgid "libCurl PHP module"
msgstr "PHP: libCurl-Modul"
-#: ../../mod/install.php:375
+#: ../../mod/install.php:372
msgid "GD graphics PHP module"
msgstr "PHP: GD-Grafikmodul"
-#: ../../mod/install.php:376
+#: ../../mod/install.php:373
msgid "OpenSSL PHP module"
msgstr "PHP: OpenSSL-Modul"
-#: ../../mod/install.php:377
+#: ../../mod/install.php:374
msgid "mysqli PHP module"
msgstr "PHP: mysqli-Modul"
-#: ../../mod/install.php:378
+#: ../../mod/install.php:375
msgid "mb_string PHP module"
msgstr "PHP: mb_string-Modul"
-#: ../../mod/install.php:383 ../../mod/install.php:385
+#: ../../mod/install.php:380 ../../mod/install.php:382
msgid "Apache mod_rewrite module"
msgstr "Apache mod_rewrite module"
-#: ../../mod/install.php:383
+#: ../../mod/install.php:380
msgid ""
"Error: Apache webserver mod-rewrite module is required but not installed."
msgstr "Fehler: Das Apache-Modul mod-rewrite wird benötigt, es ist allerdings nicht installiert."
-#: ../../mod/install.php:390
+#: ../../mod/install.php:388
msgid "Error: libCURL PHP module required but not installed."
msgstr "Fehler: Das libCURL PHP Modul wird benötigt ist aber nicht installiert."
-#: ../../mod/install.php:394
+#: ../../mod/install.php:392
msgid ""
"Error: GD graphics PHP module with JPEG support required but not installed."
msgstr "Fehler: Das GD-Graphikmodul für PHP mit JPEG-Unterstützung ist nicht installiert."
-#: ../../mod/install.php:398
+#: ../../mod/install.php:396
msgid "Error: openssl PHP module required but not installed."
msgstr "Fehler: Das openssl-Modul von PHP ist nicht installiert."
-#: ../../mod/install.php:402
+#: ../../mod/install.php:400
msgid "Error: mysqli PHP module required but not installed."
msgstr "Fehler: Das mysqli-Modul von PHP ist nicht installiert."
-#: ../../mod/install.php:406
+#: ../../mod/install.php:404
msgid "Error: mb_string PHP module required but not installed."
msgstr "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert."
-#: ../../mod/install.php:423
+#: ../../mod/install.php:421
msgid ""
"The web installer needs to be able to create a file called \".htconfig.php\""
" in the top folder of your web server and it is unable to do so."
msgstr "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun."
-#: ../../mod/install.php:424
+#: ../../mod/install.php:422
msgid ""
"This is most often a permission setting, as the web server may not be able "
"to write files in your folder - even if you can."
msgstr "In den meisten Fällen ist dies ein Problem mit den Schreibrechten, der Webserver könnte keine Schreiberlaubnis haben, selbst wenn du sie hast."
-#: ../../mod/install.php:425
+#: ../../mod/install.php:423
msgid ""
-"Please check with your site documentation or support people to see if this "
-"situation can be corrected."
-msgstr "Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support Team, um diese Situation zu beheben."
+"At the end of this procedure, we will give you a text to save in a file "
+"named .htconfig.php in your Friendica top folder."
+msgstr "Nachdem du alles ausgefüllt hast, erhältst du einen Text, den du in eine Datei namens .htconfig.php in deinem Friendica-Wurzelverzeichnis kopieren musst."
-#: ../../mod/install.php:426
+#: ../../mod/install.php:424
msgid ""
-"If not, you may be required to perform a manual installation. Please see the"
-" file \"INSTALL.txt\" for instructions."
-msgstr "Sollte dies nicht möglich sein, musst du die Installation manuell durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\"."
+"You can alternatively skip this procedure and perform a manual installation."
+" Please see the file \"INSTALL.txt\" for instructions."
+msgstr "Alternativ kannst du diesen Schritt aber auch überspringen und die Installation manuell durchführen. Eine Anleitung dazu (Englisch) findest du in der Datei INSTALL.txt."
-#: ../../mod/install.php:429
+#: ../../mod/install.php:427
msgid ".htconfig.php is writable"
msgstr "Schreibrechte auf .htconfig.php"
-#: ../../mod/install.php:436
+#: ../../mod/install.php:439
+msgid ""
+"Url rewrite in .htaccess is not working. Check your server configuration."
+msgstr "Umschreiben der URLs in der .htaccess funktioniert nicht. Überprüfe die Konfiguration des Servers."
+
+#: ../../mod/install.php:441
+msgid "Url rewrite is working"
+msgstr "URL rewrite funktioniert"
+
+#: ../../mod/install.php:451
msgid ""
"The database configuration file \".htconfig.php\" could not be written. "
"Please use the enclosed text to create a configuration file in your web "
"server root."
-msgstr "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner Friendica-Installation zu erzeugen."
+msgstr "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis deiner Friendica-Installation zu erzeugen."
-#: ../../mod/install.php:461
+#: ../../mod/install.php:476
msgid "Errors encountered creating database tables."
msgstr "Fehler aufgetreten während der Erzeugung der Datenbanktabellen."
+#: ../../mod/install.php:487
+msgid "<h1>What next</h1>"
+msgstr "<h1>Wie geht es weiter?</h1>"
+
+#: ../../mod/install.php:488
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the "
+"poller."
+msgstr "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten."
+
#: ../../mod/localtime.php:12 ../../include/event.php:11
-#: ../../include/bb2diaspora.php:238
+#: ../../include/bb2diaspora.php:243
msgid "l F d, Y \\@ g:i A"
msgstr "l F d, Y \\@ g:i A"
@@ -1180,11 +1201,11 @@ msgid "is interested in:"
msgstr "ist interessiert an:"
#: ../../mod/match.php:58 ../../mod/suggest.php:59
-#: ../../include/contact_widgets.php:9 ../../boot.php:1036
+#: ../../include/contact_widgets.php:9 ../../boot.php:1044
msgid "Connect"
msgstr "Verbinden"
-#: ../../mod/match.php:65 ../../mod/dirfind.php:57
+#: ../../mod/match.php:65 ../../mod/dirfind.php:60
msgid "No matches"
msgstr "Keine Ãœbereinstimmungen"
@@ -1224,11 +1245,11 @@ msgstr "System"
msgid "Network"
msgstr "Netzwerk"
-#: ../../mod/notifications.php:85 ../../mod/network.php:184
+#: ../../mod/notifications.php:85 ../../mod/network.php:188
msgid "Personal"
msgstr "Persönlich"
-#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:65
+#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:127
#: ../../include/nav.php:77 ../../include/nav.php:115
msgid "Home"
msgstr "Pinnwand"
@@ -1237,7 +1258,7 @@ msgstr "Pinnwand"
msgid "Introductions"
msgstr "Kontaktanfragen"
-#: ../../mod/notifications.php:100 ../../mod/message.php:102
+#: ../../mod/notifications.php:100 ../../mod/message.php:104
#: ../../include/nav.php:128
msgid "Messages"
msgstr "Nachrichten"
@@ -1277,7 +1298,7 @@ msgid "if applicable"
msgstr "falls anwendbar"
#: ../../mod/notifications.php:157 ../../mod/notifications.php:204
-#: ../../mod/admin.php:642
+#: ../../mod/admin.php:658
msgid "Approve"
msgstr "Genehmigen"
@@ -1364,11 +1385,11 @@ msgstr "Netzwerk Benachrichtigungen"
#: ../../mod/notifications.php:328 ../../mod/notify.php:61
msgid "No more system notifications."
-msgstr "Keine weiteren System Benachrichtigungen."
+msgstr "Keine weiteren Systembenachrichtigungen."
#: ../../mod/notifications.php:332 ../../mod/notify.php:65
msgid "System Notifications"
-msgstr "System Benachrichtigungen"
+msgstr "Systembenachrichtigungen"
#: ../../mod/notifications.php:423
msgid "No more personal notifications."
@@ -1478,18 +1499,18 @@ msgid "View all contacts"
msgstr "Alle Kontakte anzeigen"
#: ../../mod/contacts.php:290 ../../mod/contacts.php:347
-#: ../../mod/admin.php:646
+#: ../../mod/admin.php:662
msgid "Unblock"
msgstr "Entsperren"
#: ../../mod/contacts.php:290 ../../mod/contacts.php:347
-#: ../../mod/admin.php:645
+#: ../../mod/admin.php:661
msgid "Block"
msgstr "Sperren"
#: ../../mod/contacts.php:293
msgid "Toggle Blocked status"
-msgstr "Geblockt-Sttaus ein-/ausschalten"
+msgstr "Geblockt-Status ein-/ausschalten"
#: ../../mod/contacts.php:296 ../../mod/contacts.php:348
msgid "Unignore"
@@ -1525,7 +1546,7 @@ msgstr "Kontakt Editor"
#: ../../mod/contacts.php:323
msgid "Profile Visibility"
-msgstr "Profil Anzeige"
+msgstr "Profil-Sichtbarkeit"
#: ../../mod/contacts.php:324
#, php-format
@@ -1576,7 +1597,7 @@ msgstr "letzte Aktualisierung:"
msgid "Update public posts"
msgstr "Öffentliche Beiträge aktualisieren"
-#: ../../mod/contacts.php:344 ../../mod/admin.php:1117
+#: ../../mod/contacts.php:344 ../../mod/admin.php:1133
msgid "Update now"
msgstr "Jetzt aktualisieren"
@@ -1669,7 +1690,7 @@ msgstr "du bist Fan von"
msgid "Edit contact"
msgstr "Kontakt bearbeiten"
-#: ../../mod/contacts.php:544 ../../view/theme/diabook/theme.php:67
+#: ../../mod/contacts.php:544 ../../view/theme/diabook/theme.php:129
#: ../../include/nav.php:139
msgid "Contacts"
msgstr "Kontakte"
@@ -1701,12 +1722,13 @@ msgid "Password reset requested at %s"
msgstr "Anfrage zum Zurücksetzen des Passworts auf %s erhalten"
#: ../../mod/lostpass.php:45 ../../mod/lostpass.php:107
-#: ../../mod/register.php:388 ../../mod/register.php:442
-#: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:742
-#: ../../addon/facebook/facebook.php:680
-#: ../../addon/facebook/facebook.php:1170
-#: ../../addon/testdrive/testdrive.php:58 ../../include/items.php:2716
-#: ../../boot.php:686
+#: ../../mod/register.php:90 ../../mod/register.php:144
+#: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:752
+#: ../../addon/facebook/facebook.php:688
+#: ../../addon/facebook/facebook.php:1178
+#: ../../addon/public_server/public_server.php:62
+#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:2742
+#: ../../boot.php:694
msgid "Administrator"
msgstr "Administrator"
@@ -1716,7 +1738,7 @@ msgid ""
"Password reset failed."
msgstr "Anfrage konnte nicht verifiziert werden. (Eventuell hast du bereits eine ähnliche Anfrage gestellt.) Zurücksetzen des Passworts gescheitert."
-#: ../../mod/lostpass.php:83 ../../boot.php:818
+#: ../../mod/lostpass.php:83 ../../boot.php:826
msgid "Password Reset"
msgstr "Passwort zurücksetzen"
@@ -1760,501 +1782,526 @@ msgstr "Spitzname oder Email:"
msgid "Reset"
msgstr "Zurücksetzen"
-#: ../../mod/settings.php:49 ../../include/nav.php:137
+#: ../../mod/settings.php:50 ../../include/nav.php:137
msgid "Account settings"
-msgstr "Account Einstellungen"
+msgstr "Account-Einstellungen"
-#: ../../mod/settings.php:54
+#: ../../mod/settings.php:55
msgid "Display settings"
-msgstr "Anzeige Einstellungen"
+msgstr "Anzeige-Einstellungen"
-#: ../../mod/settings.php:60
+#: ../../mod/settings.php:61
msgid "Connector settings"
msgstr "Connector-Einstellungen"
-#: ../../mod/settings.php:65
+#: ../../mod/settings.php:66
msgid "Plugin settings"
msgstr "Plugin-Einstellungen"
-#: ../../mod/settings.php:70
+#: ../../mod/settings.php:71
msgid "Connected apps"
msgstr "Verbundene Programme"
-#: ../../mod/settings.php:75
+#: ../../mod/settings.php:76
msgid "Export personal data"
msgstr "Persönliche Daten exportieren"
-#: ../../mod/settings.php:80
+#: ../../mod/settings.php:81
msgid "Remove account"
msgstr "Account entfernen"
-#: ../../mod/settings.php:88 ../../mod/admin.php:732 ../../mod/admin.php:937
-#: ../../addon/mathjax/mathjax.php:36 ../../include/nav.php:137
+#: ../../mod/settings.php:89 ../../mod/admin.php:748 ../../mod/admin.php:953
+#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:643
+#: ../../view/theme/diabook/theme.php:773 ../../include/nav.php:137
msgid "Settings"
msgstr "Einstellungen"
-#: ../../mod/settings.php:131
+#: ../../mod/settings.php:133
msgid "Missing some important data!"
msgstr "Wichtige Daten fehlen!"
-#: ../../mod/settings.php:134 ../../mod/settings.php:565
+#: ../../mod/settings.php:136 ../../mod/settings.php:581
msgid "Update"
msgstr "Aktualisierungen"
-#: ../../mod/settings.php:239
+#: ../../mod/settings.php:241
msgid "Failed to connect with email account using the settings provided."
msgstr "Konnte das Email Konto mit den angegebenen Einstellungen nicht erreichen."
-#: ../../mod/settings.php:244
+#: ../../mod/settings.php:246
msgid "Email settings updated."
msgstr "EMail Einstellungen bearbeitet."
-#: ../../mod/settings.php:303
+#: ../../mod/settings.php:305
msgid "Passwords do not match. Password unchanged."
msgstr "Die Passwörter stimmen nicht überein. Das Passwort bleibt unverändert."
-#: ../../mod/settings.php:308
+#: ../../mod/settings.php:310
msgid "Empty passwords are not allowed. Password unchanged."
msgstr "Leere Passwörter sind nicht erlaubt. Passwort bleibt unverändert."
-#: ../../mod/settings.php:319
+#: ../../mod/settings.php:321
msgid "Password changed."
msgstr "Passwort ändern."
-#: ../../mod/settings.php:321
+#: ../../mod/settings.php:323
msgid "Password update failed. Please try again."
msgstr "Aktualisierung des Passworts gescheitert, bitte versuche es noch einmal."
-#: ../../mod/settings.php:385
+#: ../../mod/settings.php:386
msgid " Please use a shorter name."
msgstr " Bitte verwende einen kürzeren Namen."
-#: ../../mod/settings.php:387
+#: ../../mod/settings.php:388
msgid " Name too short."
msgstr " Name ist zu kurz."
-#: ../../mod/settings.php:393
+#: ../../mod/settings.php:394
msgid " Not valid email."
msgstr " Keine gültige E-Mail."
-#: ../../mod/settings.php:395
+#: ../../mod/settings.php:396
msgid " Cannot change to that email."
msgstr "Ändern der E-Mail nicht möglich. "
-#: ../../mod/settings.php:468 ../../addon/facebook/facebook.php:480
+#: ../../mod/settings.php:450
+msgid "Private forum has no privacy permissions. Using default privacy group."
+msgstr "Für das private Forum sind keine Zugriffsrechte eingestellt. Die voreingestellte Gruppe für neue Kontakte wird benutzt."
+
+#: ../../mod/settings.php:454
+msgid "Private forum has no privacy permissions and no default privacy group."
+msgstr "Für das private Forum sind keine Zugriffsrechte eingestellt, und es gibt keine voreingestellte Gruppe für neue Kontakte."
+
+#: ../../mod/settings.php:484 ../../addon/facebook/facebook.php:488
#: ../../addon/impressum/impressum.php:77
#: ../../addon/openstreetmap/openstreetmap.php:80
#: ../../addon/mathjax/mathjax.php:66 ../../addon/piwik/piwik.php:105
-#: ../../addon/twitter/twitter.php:370
+#: ../../addon/twitter/twitter.php:376
msgid "Settings updated."
msgstr "Einstellungen aktualisiert."
-#: ../../mod/settings.php:538 ../../mod/settings.php:564
-#: ../../mod/settings.php:600
+#: ../../mod/settings.php:554 ../../mod/settings.php:580
+#: ../../mod/settings.php:616
msgid "Add application"
msgstr "Programm hinzufügen"
-#: ../../mod/settings.php:542 ../../mod/settings.php:568
-#: ../../addon/statusnet/statusnet.php:547
+#: ../../mod/settings.php:558 ../../mod/settings.php:584
+#: ../../addon/statusnet/statusnet.php:555
msgid "Consumer Key"
msgstr "Consumer Key"
-#: ../../mod/settings.php:543 ../../mod/settings.php:569
-#: ../../addon/statusnet/statusnet.php:546
+#: ../../mod/settings.php:559 ../../mod/settings.php:585
+#: ../../addon/statusnet/statusnet.php:554
msgid "Consumer Secret"
msgstr "Consumer Secret"
-#: ../../mod/settings.php:544 ../../mod/settings.php:570
+#: ../../mod/settings.php:560 ../../mod/settings.php:586
msgid "Redirect"
msgstr "Umleiten"
-#: ../../mod/settings.php:545 ../../mod/settings.php:571
+#: ../../mod/settings.php:561 ../../mod/settings.php:587
msgid "Icon url"
msgstr "Icon URL"
-#: ../../mod/settings.php:556
+#: ../../mod/settings.php:572
msgid "You can't edit this application."
msgstr "Du kannst dieses Programm nicht bearbeiten."
-#: ../../mod/settings.php:599
+#: ../../mod/settings.php:615
msgid "Connected Apps"
msgstr "Verbundene Programme"
-#: ../../mod/settings.php:603
+#: ../../mod/settings.php:619
msgid "Client key starts with"
-msgstr "Anwender Schlüssel beginnt mit"
+msgstr "Anwenderschlüssel beginnt mit"
-#: ../../mod/settings.php:604
+#: ../../mod/settings.php:620
msgid "No name"
msgstr "Kein Name"
-#: ../../mod/settings.php:605
+#: ../../mod/settings.php:621
msgid "Remove authorization"
msgstr "Autorisierung entziehen"
-#: ../../mod/settings.php:616
+#: ../../mod/settings.php:632
msgid "No Plugin settings configured"
msgstr "Keine Plugin-Einstellungen konfiguriert"
-#: ../../mod/settings.php:624 ../../addon/widgets/widgets.php:123
+#: ../../mod/settings.php:640 ../../addon/widgets/widgets.php:123
msgid "Plugin Settings"
msgstr "Plugin-Einstellungen"
-#: ../../mod/settings.php:636 ../../mod/settings.php:637
+#: ../../mod/settings.php:652 ../../mod/settings.php:653
#, php-format
msgid "Built-in support for %s connectivity is %s"
msgstr "Eingebaute Unterstützung für Verbindungen zu %s ist %s"
-#: ../../mod/settings.php:636 ../../mod/settings.php:637
+#: ../../mod/settings.php:652 ../../mod/settings.php:653
msgid "enabled"
msgstr "eingeschaltet"
-#: ../../mod/settings.php:636 ../../mod/settings.php:637
+#: ../../mod/settings.php:652 ../../mod/settings.php:653
msgid "disabled"
msgstr "ausgeschaltet"
-#: ../../mod/settings.php:637
+#: ../../mod/settings.php:653
msgid "StatusNet"
msgstr "StatusNet"
-#: ../../mod/settings.php:667
+#: ../../mod/settings.php:683
msgid "Connector Settings"
msgstr "Verbindungs-Einstellungen"
-#: ../../mod/settings.php:672
+#: ../../mod/settings.php:688
msgid "Email/Mailbox Setup"
msgstr "E-Mail/Postfach-Einstellungen"
-#: ../../mod/settings.php:673
+#: ../../mod/settings.php:689
msgid ""
"If you wish to communicate with email contacts using this service "
"(optional), please specify how to connect to your mailbox."
msgstr "Wenn du mit E-Mail-Kontakten über diesen Service kommunizieren möchtest (optional), gib bitte die Einstellungen für dein Postfach an."
-#: ../../mod/settings.php:674
+#: ../../mod/settings.php:690
msgid "Last successful email check:"
msgstr "Letzter erfolgreicher Email Check"
-#: ../../mod/settings.php:675
+#: ../../mod/settings.php:691
msgid "Email access is disabled on this site."
msgstr "Zugriff auf E-Mails für diese Seite deaktiviert."
-#: ../../mod/settings.php:676
+#: ../../mod/settings.php:692
msgid "IMAP server name:"
msgstr "IMAP-Server-Name:"
-#: ../../mod/settings.php:677
+#: ../../mod/settings.php:693
msgid "IMAP port:"
msgstr "IMAP-Port:"
-#: ../../mod/settings.php:678
+#: ../../mod/settings.php:694
msgid "Security:"
msgstr "Sicherheit:"
-#: ../../mod/settings.php:678 ../../mod/settings.php:683
+#: ../../mod/settings.php:694 ../../mod/settings.php:699
msgid "None"
msgstr "Keine"
-#: ../../mod/settings.php:679
+#: ../../mod/settings.php:695
msgid "Email login name:"
msgstr "E-Mail-Login-Name:"
-#: ../../mod/settings.php:680
+#: ../../mod/settings.php:696
msgid "Email password:"
msgstr "E-Mail-Passwort:"
-#: ../../mod/settings.php:681
+#: ../../mod/settings.php:697
msgid "Reply-to address:"
msgstr "Reply-to Adresse:"
-#: ../../mod/settings.php:682
+#: ../../mod/settings.php:698
msgid "Send public posts to all email contacts:"
msgstr "Sende öffentliche Beiträge an alle E-Mail-Kontakte:"
-#: ../../mod/settings.php:683
+#: ../../mod/settings.php:699
msgid "Action after import:"
msgstr "Aktion nach Import:"
-#: ../../mod/settings.php:683
+#: ../../mod/settings.php:699
msgid "Mark as seen"
msgstr "Als gelesen markieren"
-#: ../../mod/settings.php:683
+#: ../../mod/settings.php:699
msgid "Move to folder"
msgstr "In einen Ordner verschieben"
-#: ../../mod/settings.php:684
+#: ../../mod/settings.php:700
msgid "Move to folder:"
msgstr "In diesen Ordner verschieben:"
-#: ../../mod/settings.php:744
+#: ../../mod/settings.php:760
msgid "Display Settings"
-msgstr "Anzeige Einstellungen"
+msgstr "Anzeige-Einstellungen"
-#: ../../mod/settings.php:750
+#: ../../mod/settings.php:766
msgid "Display Theme:"
msgstr "Theme:"
-#: ../../mod/settings.php:751
+#: ../../mod/settings.php:767
msgid "Update browser every xx seconds"
msgstr "Browser alle xx Sekunden aktualisieren"
-#: ../../mod/settings.php:751
+#: ../../mod/settings.php:767
msgid "Minimum of 10 seconds, no maximum"
msgstr "Minimal 10 Sekunden, kein Maximum"
-#: ../../mod/settings.php:752
+#: ../../mod/settings.php:768
msgid "Number of items to display on the network page:"
msgstr "Zahl der Beiträge, die pro Netzwerkseite angezeigt werden sollen: "
-#: ../../mod/settings.php:752
+#: ../../mod/settings.php:768
msgid "Maximum of 100 items"
msgstr "Maximal 100 Beiträge"
-#: ../../mod/settings.php:753
+#: ../../mod/settings.php:769
msgid "Don't show emoticons"
msgstr "Keine Smilies anzeigen"
-#: ../../mod/settings.php:821 ../../mod/admin.php:180 ../../mod/admin.php:618
-msgid "Normal Account"
-msgstr "Normaler Account"
+#: ../../mod/settings.php:840
+msgid "Normal Account Page"
+msgstr "Normale Account Seite"
-#: ../../mod/settings.php:822
+#: ../../mod/settings.php:841
msgid "This account is a normal personal profile"
msgstr "Dieser Account ist ein normales persönliches Profil"
-#: ../../mod/settings.php:825 ../../mod/admin.php:181 ../../mod/admin.php:619
-msgid "Soapbox Account"
-msgstr "Sandkasten-Account"
+#: ../../mod/settings.php:844
+msgid "Soapbox Page"
+msgstr "Sandkasten Seite"
-#: ../../mod/settings.php:826
+#: ../../mod/settings.php:845
msgid "Automatically approve all connection/friend requests as read-only fans"
msgstr "Kontaktanfragen werden automatisch als Nurlese-Fans akzeptiert"
-#: ../../mod/settings.php:829 ../../mod/admin.php:182 ../../mod/admin.php:620
-msgid "Community/Celebrity Account"
-msgstr "Gemeinschafts/Promi-Account"
+#: ../../mod/settings.php:848
+msgid "Community Forum/Celebrity Account"
+msgstr "Gemeinschafts Forum / Promi Konto"
-#: ../../mod/settings.php:830
+#: ../../mod/settings.php:849
msgid ""
"Automatically approve all connection/friend requests as read-write fans"
msgstr "Kontaktanfragen werden automatisch als Lese-und-Schreib-Fans akzeptiert"
-#: ../../mod/settings.php:833 ../../mod/admin.php:183 ../../mod/admin.php:621
-msgid "Automatic Friend Account"
-msgstr "Automatischer Freundesaccount"
+#: ../../mod/settings.php:852
+msgid "Automatic Friend Page"
+msgstr "Automatische Freunde Seite"
-#: ../../mod/settings.php:834
+#: ../../mod/settings.php:853
msgid "Automatically approve all connection/friend requests as friends"
msgstr "Kontaktanfragen werden automatisch als Freund akzeptiert"
-#: ../../mod/settings.php:844
+#: ../../mod/settings.php:856
+msgid "Private Forum [Experimental]"
+msgstr "Privates Forum [Versuchsstadium]"
+
+#: ../../mod/settings.php:857
+msgid "Private forum - approved members only"
+msgstr "Privates Forum - Ausschließlich für Mitglieder"
+
+#: ../../mod/settings.php:869
msgid "OpenID:"
msgstr "OpenID:"
-#: ../../mod/settings.php:844
+#: ../../mod/settings.php:869
msgid "(Optional) Allow this OpenID to login to this account."
msgstr "(Optional) Erlaube die Anmeldung für diesen Account mit dieser OpenID."
-#: ../../mod/settings.php:854
+#: ../../mod/settings.php:879
msgid "Publish your default profile in your local site directory?"
msgstr "Veröffentliche dein Standardprofil im Verzeichnis der lokalen Seite?"
-#: ../../mod/settings.php:860
+#: ../../mod/settings.php:885
msgid "Publish your default profile in the global social directory?"
msgstr "Veröffentliche dein Standardprofil im weltweiten Verzeichnis?"
-#: ../../mod/settings.php:868
+#: ../../mod/settings.php:893
msgid "Hide your contact/friend list from viewers of your default profile?"
msgstr "Liste der Kontakte vor Betrachtern des Standardprofils verbergen?"
-#: ../../mod/settings.php:872
+#: ../../mod/settings.php:897
msgid "Hide your profile details from unknown viewers?"
msgstr "Profil-Details vor unbekannten Betrachtern verbergen?"
-#: ../../mod/settings.php:877
+#: ../../mod/settings.php:902
msgid "Allow friends to post to your profile page?"
msgstr "Deinen Kontakten erlauben, auf deine Pinnwand zu schreiben?"
-#: ../../mod/settings.php:883
+#: ../../mod/settings.php:908
msgid "Allow friends to tag your posts?"
msgstr "Deinen Kontakten erlauben, deine Beiträge mit Schlagwörtern zu versehen?"
-#: ../../mod/settings.php:889
+#: ../../mod/settings.php:914
msgid "Allow us to suggest you as a potential friend to new members?"
msgstr "Erlaube uns dich als potentiellen Kontakt für neue Mitglieder vorzuschlagen?"
-#: ../../mod/settings.php:895
+#: ../../mod/settings.php:920
msgid "Permit unknown people to send you private mail?"
msgstr "Erlaube es Unbekannten dir private Nachrichten zu schicken?"
-#: ../../mod/settings.php:906
+#: ../../mod/settings.php:931
msgid "Profile is <strong>not published</strong>."
msgstr "Profil ist <strong>nicht veröffentlicht</strong>."
-#: ../../mod/settings.php:912 ../../mod/profile_photo.php:211
+#: ../../mod/settings.php:937 ../../mod/profile_photo.php:211
msgid "or"
msgstr "oder"
-#: ../../mod/settings.php:917
+#: ../../mod/settings.php:942
msgid "Your Identity Address is"
msgstr "Die Adresse deines Profils lautet:"
-#: ../../mod/settings.php:928
+#: ../../mod/settings.php:953
msgid "Automatically expire posts after this many days:"
msgstr "Beiträge verfallen automatisch nach dieser Anzahl von Tagen"
-#: ../../mod/settings.php:928
+#: ../../mod/settings.php:953
msgid "If empty, posts will not expire. Expired posts will be deleted"
msgstr "Wenn leer verfallen Beiträge nie automatisch. Verfallene Beiträge werden gelöscht."
-#: ../../mod/settings.php:929
+#: ../../mod/settings.php:954
msgid "Advanced expiration settings"
msgstr "Erweiterte Verfallseinstellungen"
-#: ../../mod/settings.php:930
+#: ../../mod/settings.php:955
msgid "Advanced Expiration"
msgstr "Erweitertes Verfallen"
-#: ../../mod/settings.php:931
+#: ../../mod/settings.php:956
msgid "Expire posts:"
msgstr "Beiträge verfallen lassen:"
-#: ../../mod/settings.php:932
+#: ../../mod/settings.php:957
msgid "Expire personal notes:"
msgstr "Persönliche Notizen verfallen lassen:"
-#: ../../mod/settings.php:933
+#: ../../mod/settings.php:958
msgid "Expire starred posts:"
msgstr "Markierte Beiträge verfallen lassen:"
-#: ../../mod/settings.php:934
+#: ../../mod/settings.php:959
msgid "Expire photos:"
msgstr "Fotos verfallen lassen:"
-#: ../../mod/settings.php:938
+#: ../../mod/settings.php:960
+msgid "Only expire posts by others:"
+msgstr "Nur Beiträge anderer verfallen"
+
+#: ../../mod/settings.php:967
msgid "Account Settings"
msgstr "Account-Einstellungen"
-#: ../../mod/settings.php:947
+#: ../../mod/settings.php:975
msgid "Password Settings"
msgstr "Passwort-Einstellungen"
-#: ../../mod/settings.php:948
+#: ../../mod/settings.php:976
msgid "New Password:"
msgstr "Neues Passwort:"
-#: ../../mod/settings.php:949
+#: ../../mod/settings.php:977
msgid "Confirm:"
msgstr "Bestätigen:"
-#: ../../mod/settings.php:949
+#: ../../mod/settings.php:977
msgid "Leave password fields blank unless changing"
msgstr "Lass die Passwort-Felder leer, außer du willst das Passwort ändern"
-#: ../../mod/settings.php:953
+#: ../../mod/settings.php:981
msgid "Basic Settings"
msgstr "Grundeinstellungen"
-#: ../../mod/settings.php:954 ../../include/profile_advanced.php:15
+#: ../../mod/settings.php:982 ../../include/profile_advanced.php:15
msgid "Full Name:"
msgstr "Kompletter Name:"
-#: ../../mod/settings.php:955
+#: ../../mod/settings.php:983
msgid "Email Address:"
msgstr "Emailadresse:"
-#: ../../mod/settings.php:956
+#: ../../mod/settings.php:984
msgid "Your Timezone:"
msgstr "Deine Zeitzone:"
-#: ../../mod/settings.php:957
+#: ../../mod/settings.php:985
msgid "Default Post Location:"
msgstr "Standardstandort:"
-#: ../../mod/settings.php:958
+#: ../../mod/settings.php:986
msgid "Use Browser Location:"
msgstr "Verwende den Standort des Browsers:"
-#: ../../mod/settings.php:961
+#: ../../mod/settings.php:989
msgid "Security and Privacy Settings"
msgstr "Sicherheits- und Privatsphäre-Einstellungen"
-#: ../../mod/settings.php:963
+#: ../../mod/settings.php:991
msgid "Maximum Friend Requests/Day:"
msgstr "Maximale Anzahl von Freundschaftsanfragen/Tag:"
-#: ../../mod/settings.php:963 ../../mod/settings.php:978
+#: ../../mod/settings.php:991 ../../mod/settings.php:1010
msgid "(to prevent spam abuse)"
msgstr "(um SPAM zu vermeiden)"
-#: ../../mod/settings.php:964
+#: ../../mod/settings.php:992
msgid "Default Post Permissions"
msgstr "Standard-Zugriffsrechte für Beiträge"
-#: ../../mod/settings.php:965
+#: ../../mod/settings.php:993
msgid "(click to open/close)"
msgstr "(klicke zum öffnen/schließen)"
-#: ../../mod/settings.php:978
+#: ../../mod/settings.php:1010
msgid "Maximum private messages per day from unknown people:"
msgstr "Maximale Anzahl von privaten Nachrichten, die dir unbekannte Personen pro Tag senden dürfen:"
-#: ../../mod/settings.php:981
+#: ../../mod/settings.php:1013
msgid "Notification Settings"
msgstr "Benachrichtigungseinstellungen"
-#: ../../mod/settings.php:982
+#: ../../mod/settings.php:1014
msgid "By default post a status message when:"
-msgstr "Standardmäßig eine Status-Nachricht posten wenn:"
+msgstr "Standardmäßig eine Statusnachricht posten, wenn:"
-#: ../../mod/settings.php:983
+#: ../../mod/settings.php:1015
msgid "accepting a friend request"
msgstr "– du eine Kontaktanfrage akzeptierst"
-#: ../../mod/settings.php:984
+#: ../../mod/settings.php:1016
msgid "joining a forum/community"
msgstr "– du einem Forum/einer Gemeinschaftsseite beitrittst"
-#: ../../mod/settings.php:985
+#: ../../mod/settings.php:1017
msgid "making an <em>interesting</em> profile change"
msgstr "– du eine <em>interessante</em> Änderung an deinem Profil durchführst"
-#: ../../mod/settings.php:986
+#: ../../mod/settings.php:1018
msgid "Send a notification email when:"
msgstr "Benachrichtigungs-E-Mail senden wenn:"
-#: ../../mod/settings.php:987
+#: ../../mod/settings.php:1019
msgid "You receive an introduction"
msgstr "– du eine Kontaktanfrage erhältst"
-#: ../../mod/settings.php:988
+#: ../../mod/settings.php:1020
msgid "Your introductions are confirmed"
msgstr "– eine deiner Kontaktanfragen akzeptiert wurde"
-#: ../../mod/settings.php:989
+#: ../../mod/settings.php:1021
msgid "Someone writes on your profile wall"
msgstr "– jemand etwas auf deine Pinnwand schreibt"
-#: ../../mod/settings.php:990
+#: ../../mod/settings.php:1022
msgid "Someone writes a followup comment"
msgstr "– jemand auch einen Kommentar verfasst"
-#: ../../mod/settings.php:991
+#: ../../mod/settings.php:1023
msgid "You receive a private message"
msgstr "– du eine private Nachricht erhältst"
-#: ../../mod/settings.php:992
+#: ../../mod/settings.php:1024
msgid "You receive a friend suggestion"
msgstr "- du eine Empfehlung erhältst"
-#: ../../mod/settings.php:993
+#: ../../mod/settings.php:1025
msgid "You are tagged in a post"
msgstr "- du in einem Beitrag erwähnt wurdest"
-#: ../../mod/settings.php:996
-msgid "Advanced Page Settings"
-msgstr "Erweiterte Seiten-Einstellungen"
+#: ../../mod/settings.php:1028
+msgid "Advanced Account/Page Type Settings"
+msgstr ""
+
+#: ../../mod/settings.php:1029
+msgid "Change the behaviour of this account for special situations"
+msgstr "Ändere das Verhalten deines Accounts für spezielle Situationen."
#: ../../mod/manage.php:90
msgid "Manage Identities and/or Pages"
@@ -2282,55 +2329,55 @@ msgstr "Begriff entfernen"
msgid "Saved Searches"
msgstr "Gespeicherte Suchen"
-#: ../../mod/network.php:92 ../../include/group.php:217
+#: ../../mod/network.php:92 ../../include/group.php:244
msgid "add"
msgstr "hinzufügen"
-#: ../../mod/network.php:171
+#: ../../mod/network.php:175
msgid "Commented Order"
msgstr "Neueste Kommentare"
-#: ../../mod/network.php:174
+#: ../../mod/network.php:178
msgid "Sort by Comment Date"
msgstr "Nach Kommentardatum sortieren"
-#: ../../mod/network.php:177
+#: ../../mod/network.php:181
msgid "Posted Order"
msgstr "Neueste Beiträge"
-#: ../../mod/network.php:180
+#: ../../mod/network.php:184
msgid "Sort by Post Date"
msgstr "Nach Beitragsdatum sortieren"
-#: ../../mod/network.php:187
+#: ../../mod/network.php:191
msgid "Posts that mention or involve you"
msgstr "Beiträge, in denen es um Dich geht"
-#: ../../mod/network.php:190
+#: ../../mod/network.php:194
msgid "New"
msgstr "Neue"
-#: ../../mod/network.php:193
+#: ../../mod/network.php:197
msgid "Activity Stream - by date"
msgstr "Aktivitäten-Stream - nach Datum"
-#: ../../mod/network.php:196
+#: ../../mod/network.php:200
msgid "Starred"
msgstr "Markierte"
-#: ../../mod/network.php:199
+#: ../../mod/network.php:203
msgid "Favourite Posts"
msgstr "Favorisierte Beiträge"
-#: ../../mod/network.php:202
+#: ../../mod/network.php:206
msgid "Shared Links"
msgstr "Geteilte Links"
-#: ../../mod/network.php:205
+#: ../../mod/network.php:209
msgid "Interesting Links"
msgstr "Interessante Links"
-#: ../../mod/network.php:281
+#: ../../mod/network.php:285
#, php-format
msgid "Warning: This group contains %s member from an insecure network."
msgid_plural ""
@@ -2338,41 +2385,41 @@ msgid_plural ""
msgstr[0] "Warnung: Diese Gruppe beinhaltet %s Person aus einem unsicheren Netzwerk."
msgstr[1] "Warnung: Diese Gruppe beinhaltet %s Personen aus unsicheren Netzwerken."
-#: ../../mod/network.php:284
+#: ../../mod/network.php:288
msgid "Private messages to this group are at risk of public disclosure."
msgstr "Private Nachrichten an diese Gruppe könnten an die Öffentlichkeit geraten."
-#: ../../mod/network.php:329
+#: ../../mod/network.php:333
msgid "No such group"
msgstr "Es gibt keine solche Gruppe"
-#: ../../mod/network.php:340
+#: ../../mod/network.php:344
msgid "Group is empty"
msgstr "Gruppe ist leer"
-#: ../../mod/network.php:344
+#: ../../mod/network.php:348
msgid "Group: "
msgstr "Gruppe: "
-#: ../../mod/network.php:354
+#: ../../mod/network.php:358
msgid "Contact: "
msgstr "Kontakt: "
-#: ../../mod/network.php:356
+#: ../../mod/network.php:360
msgid "Private messages to this person are at risk of public disclosure."
msgstr "Private Nachrichten an diese Person könnten an die Öffentlichkeit gelangen."
-#: ../../mod/network.php:361
+#: ../../mod/network.php:365
msgid "Invalid contact."
msgstr "Ungültiger Kontakt."
-#: ../../mod/notes.php:44 ../../boot.php:1499
+#: ../../mod/notes.php:44 ../../boot.php:1526
msgid "Personal Notes"
msgstr "Persönliche Notizen"
#: ../../mod/notes.php:63 ../../mod/filer.php:30
-#: ../../addon/facebook/facebook.php:748
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:147
+#: ../../addon/facebook/facebook.php:756
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:150
#: ../../include/text.php:652
msgid "Save"
msgstr "Speichern"
@@ -2382,7 +2429,7 @@ msgstr "Speichern"
msgid "Number of daily wall messages for %s exceeded. Message failed."
msgstr "Maximale Anzahl der täglichen Pinnwand Nachrichten für %s ist überschritten. Zustellung fehlgeschlagen."
-#: ../../mod/wallmessage.php:56 ../../mod/message.php:59
+#: ../../mod/wallmessage.php:56 ../../mod/message.php:65
msgid "No recipient selected."
msgstr "Kein Empfänger gewählt."
@@ -2390,15 +2437,15 @@ msgstr "Kein Empfänger gewählt."
msgid "Unable to check your home location."
msgstr "Konnte deinen Heimatort nicht bestimmen."
-#: ../../mod/wallmessage.php:62 ../../mod/message.php:66
+#: ../../mod/wallmessage.php:62 ../../mod/message.php:72
msgid "Message could not be sent."
msgstr "Nachricht konnte nicht gesendet werden."
-#: ../../mod/wallmessage.php:65 ../../mod/message.php:69
+#: ../../mod/wallmessage.php:65 ../../mod/message.php:75
msgid "Message collection failure."
msgstr "Konnte Nachrichten nicht abrufen."
-#: ../../mod/wallmessage.php:68 ../../mod/message.php:72
+#: ../../mod/wallmessage.php:68 ../../mod/message.php:78
msgid "Message sent."
msgstr "Nachricht gesendet."
@@ -2406,12 +2453,12 @@ msgstr "Nachricht gesendet."
msgid "No recipient."
msgstr "Kein Empfänger."
-#: ../../mod/wallmessage.php:124 ../../mod/message.php:169
-#: ../../include/conversation.php:918
+#: ../../mod/wallmessage.php:124 ../../mod/message.php:171
+#: ../../include/conversation.php:937
msgid "Please enter a link URL:"
msgstr "Bitte gib die URL des Links ein:"
-#: ../../mod/wallmessage.php:131 ../../mod/message.php:177
+#: ../../mod/wallmessage.php:131 ../../mod/message.php:199
msgid "Send Private Message"
msgstr "Private Nachricht senden"
@@ -2422,18 +2469,18 @@ msgid ""
"your site allow private mail from unknown senders."
msgstr "Wenn du möchtest, dass %s dir antworten kann, überprüfe deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern."
-#: ../../mod/wallmessage.php:133 ../../mod/message.php:178
-#: ../../mod/message.php:370
+#: ../../mod/wallmessage.php:133 ../../mod/message.php:200
+#: ../../mod/message.php:397
msgid "To:"
msgstr "An:"
-#: ../../mod/wallmessage.php:134 ../../mod/message.php:179
-#: ../../mod/message.php:371
+#: ../../mod/wallmessage.php:134 ../../mod/message.php:205
+#: ../../mod/message.php:399
msgid "Subject:"
msgstr "Betreff:"
-#: ../../mod/wallmessage.php:140 ../../mod/message.php:183
-#: ../../mod/message.php:374 ../../mod/invite.php:113
+#: ../../mod/wallmessage.php:140 ../../mod/message.php:209
+#: ../../mod/message.php:402 ../../mod/invite.php:113
msgid "Your message:"
msgstr "Deine Nachricht:"
@@ -2536,7 +2583,7 @@ msgid ""
"interest, and provide suggestions based on network relationships. On a brand"
" new site, friend suggestions will usually begin to be populated within 24 "
"hours."
-msgstr "Im seitlichen Bedienfeld der Kontakte-Seite gibt es diverse Werkzeuge, um neue Freunde zu finden. Wir können Menschen mit den gleichen Interessen finden, anhand von Namen oder Interessen suchen oder aber aufgrund vorhandener Kontakte neue Freunde vorschlagen.\nAuf einer brandneuen - soeben erstellten - Seite starten die Kontaktvorschläge innerhalb von 24 Stunden."
+msgstr "Im seitlichen Bedienfeld der Kontakteseite gibt es diverse Werkzeuge, um neue Freunde zu finden. Wir können Menschen mit den gleichen Interessen finden, anhand von Namen oder Interessen suchen oder aber aufgrund vorhandener Kontakte neue Freunde vorschlagen.\nAuf einer brandneuen - soeben erstellten - Seite starten die Kontaktvorschläge innerhalb von 24 Stunden."
#: ../../mod/newmember.php:44
msgid ""
@@ -2615,9 +2662,9 @@ msgstr "Ungültiger Profil-Bezeichner"
msgid "Profile Visibility Editor"
msgstr "Editor für die Profil-Sichtbarkeit"
-#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:66
-#: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:74
-#: ../../include/nav.php:50 ../../boot.php:1478
+#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:128
+#: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:77
+#: ../../include/nav.php:50 ../../boot.php:1505
msgid "Profile"
msgstr "Profil"
@@ -2637,180 +2684,112 @@ msgstr "Keine Kontakte."
msgid "View Contacts"
msgstr "Kontakte anzeigen"
-#: ../../mod/register.php:64
-msgid "An invitation is required."
-msgstr "Du benötigst eine Einladung."
-
-#: ../../mod/register.php:69
-msgid "Invitation could not be verified."
-msgstr "Die Einladung konnte nicht überprüft werden."
-
-#: ../../mod/register.php:77
-msgid "Invalid OpenID url"
-msgstr "Ungültige OpenID URL"
-
-#: ../../mod/register.php:92
-msgid "Please enter the required information."
-msgstr "Bitte trage die erforderlichen Informationen ein."
-
-#: ../../mod/register.php:106
-msgid "Please use a shorter name."
-msgstr "Bitte verwende einen kürzeren Namen."
-
-#: ../../mod/register.php:108
-msgid "Name too short."
-msgstr "Der Name ist zu kurz."
-
-#: ../../mod/register.php:123
-msgid "That doesn't appear to be your full (First Last) name."
-msgstr "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein."
-
-#: ../../mod/register.php:128
-msgid "Your email domain is not among those allowed on this site."
-msgstr "Die Domain deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt."
-
-#: ../../mod/register.php:131
-msgid "Not a valid email address."
-msgstr "Keine gültige E-Mail-Adresse."
-
-#: ../../mod/register.php:141
-msgid "Cannot use that email."
-msgstr "Konnte diese E-Mail-Adresse nicht verwenden."
-
-#: ../../mod/register.php:147
-msgid ""
-"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
-"must also begin with a letter."
-msgstr "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen."
-
-#: ../../mod/register.php:153 ../../mod/register.php:264
-msgid "Nickname is already registered. Please choose another."
-msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
-
-#: ../../mod/register.php:163
-msgid ""
-"Nickname was once registered here and may not be re-used. Please choose "
-"another."
-msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
-
-#: ../../mod/register.php:182
-msgid "SERIOUS ERROR: Generation of security keys failed."
-msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden."
-
-#: ../../mod/register.php:250
-msgid "An error occurred during registration. Please try again."
-msgstr "Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
-
-#: ../../mod/register.php:286
-msgid "An error occurred creating your default profile. Please try again."
-msgstr "Bei der Erstellung des Standard-Profils ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
-
-#: ../../mod/register.php:386 ../../mod/regmod.php:52
+#: ../../mod/register.php:88 ../../mod/regmod.php:52
#, php-format
msgid "Registration details for %s"
msgstr "Details der Registration von %s"
-#: ../../mod/register.php:394
+#: ../../mod/register.php:96
msgid ""
"Registration successful. Please check your email for further instructions."
msgstr "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an dich gesendet."
-#: ../../mod/register.php:398
+#: ../../mod/register.php:100
msgid "Failed to send email message. Here is the message that failed."
msgstr "Konnte die E-Mail nicht versenden. Hier ist die Nachricht, die nicht gesendet werden konnte."
-#: ../../mod/register.php:403
+#: ../../mod/register.php:105
msgid "Your registration can not be processed."
msgstr "Deine Registrierung konnte nicht verarbeitet werden."
-#: ../../mod/register.php:440
+#: ../../mod/register.php:142
#, php-format
msgid "Registration request at %s"
msgstr "Registrierungsanfrage auf %s"
-#: ../../mod/register.php:449
+#: ../../mod/register.php:151
msgid "Your registration is pending approval by the site owner."
msgstr "Deine Registrierung muss noch vom Betreiber der Seite freigegeben werden."
-#: ../../mod/register.php:487
+#: ../../mod/register.php:189
msgid ""
"This site has exceeded the number of allowed daily account registrations. "
"Please try again tomorrow."
msgstr "Die maximale Anzahl täglicher Registrierungen auf dieser Seite wurde überschritten. Bitte versuche es morgen noch einmal."
-#: ../../mod/register.php:513
+#: ../../mod/register.php:215
msgid ""
"You may (optionally) fill in this form via OpenID by supplying your OpenID "
"and clicking 'Register'."
msgstr "Du kannst dieses Formular auch (optional) mit deiner OpenID ausfüllen, indem du deine OpenID angibst und 'Registrieren' klickst."
-#: ../../mod/register.php:514
+#: ../../mod/register.php:216
msgid ""
"If you are not familiar with OpenID, please leave that field blank and fill "
"in the rest of the items."
msgstr "Wenn du nicht mit OpenID vertraut bist, lass dieses Feld bitte leer und fülle die restlichen Felder aus."
-#: ../../mod/register.php:515
+#: ../../mod/register.php:217
msgid "Your OpenID (optional): "
msgstr "Deine OpenID (optional): "
-#: ../../mod/register.php:529
+#: ../../mod/register.php:231
msgid "Include your profile in member directory?"
msgstr "Soll dein Profil im Nutzerverzeichnis angezeigt werden?"
-#: ../../mod/register.php:549
+#: ../../mod/register.php:251
msgid "Membership on this site is by invitation only."
msgstr "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung möglich."
-#: ../../mod/register.php:550
+#: ../../mod/register.php:252
msgid "Your invitation ID: "
msgstr "ID deiner Einladung: "
-#: ../../mod/register.php:553 ../../mod/admin.php:403
+#: ../../mod/register.php:255 ../../mod/admin.php:418
msgid "Registration"
msgstr "Registrierung"
-#: ../../mod/register.php:561
+#: ../../mod/register.php:263
msgid "Your Full Name (e.g. Joe Smith): "
msgstr "Vollständiger Name (z.B. Max Mustermann): "
-#: ../../mod/register.php:562
+#: ../../mod/register.php:264
msgid "Your Email Address: "
msgstr "Deine E-Mail-Adresse: "
-#: ../../mod/register.php:563
+#: ../../mod/register.php:265
msgid ""
"Choose a profile nickname. This must begin with a text character. Your "
"profile address on this site will then be "
"'<strong>nickname@$sitename</strong>'."
msgstr "Wähle einen Spitznamen für dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse deines Profils auf dieser Seite wird '<strong>spitzname@$sitename</strong>' sein."
-#: ../../mod/register.php:564
+#: ../../mod/register.php:266
msgid "Choose a nickname: "
msgstr "Spitznamen wählen: "
-#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:784
+#: ../../mod/register.php:269 ../../include/nav.php:81 ../../boot.php:792
msgid "Register"
msgstr "Registrieren"
-#: ../../mod/dirfind.php:23
+#: ../../mod/dirfind.php:26
msgid "People Search"
msgstr "Personen Suche"
#: ../../mod/like.php:127 ../../mod/tagger.php:70
-#: ../../addon/facebook/facebook.php:1564
+#: ../../addon/facebook/facebook.php:1572
#: ../../addon/communityhome/communityhome.php:158
#: ../../addon/communityhome/communityhome.php:167
-#: ../../view/theme/diabook/theme.php:452
-#: ../../view/theme/diabook/theme.php:461 ../../include/diaspora.php:1654
+#: ../../view/theme/diabook/theme.php:565
+#: ../../view/theme/diabook/theme.php:574 ../../include/diaspora.php:1662
#: ../../include/conversation.php:48 ../../include/conversation.php:57
#: ../../include/conversation.php:121 ../../include/conversation.php:130
msgid "status"
msgstr "Status"
-#: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1568
+#: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1576
#: ../../addon/communityhome/communityhome.php:172
-#: ../../view/theme/diabook/theme.php:466 ../../include/diaspora.php:1670
+#: ../../view/theme/diabook/theme.php:579 ../../include/diaspora.php:1678
#: ../../include/conversation.php:65
#, php-format
msgid "%1$s likes %2$s's %3$s"
@@ -2822,8 +2801,8 @@ msgid "%1$s doesn't like %2$s's %3$s"
msgstr "%1$s mag %2$ss %3$s nicht"
#: ../../mod/notice.php:15 ../../mod/viewsrc.php:15 ../../mod/admin.php:156
-#: ../../mod/admin.php:681 ../../mod/admin.php:880 ../../mod/display.php:37
-#: ../../mod/display.php:142 ../../include/items.php:3074
+#: ../../mod/admin.php:697 ../../mod/admin.php:896 ../../mod/display.php:37
+#: ../../mod/display.php:142 ../../include/items.php:3179
msgid "Item not found."
msgstr "Beitrag nicht gefunden."
@@ -2831,8 +2810,8 @@ msgstr "Beitrag nicht gefunden."
msgid "Access denied."
msgstr "Zugriff verweigert."
-#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:68
-#: ../../include/nav.php:51 ../../boot.php:1484
+#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:130
+#: ../../include/nav.php:51 ../../boot.php:1511
msgid "Photos"
msgstr "Bilder"
@@ -2857,39 +2836,39 @@ msgstr "Bitte melde dich an."
msgid "Unable to locate original post."
msgstr "Konnte den Originalbeitrag nicht finden."
-#: ../../mod/item.php:249
+#: ../../mod/item.php:258
msgid "Empty post discarded."
msgstr "Leerer Beitrag wurde verworfen."
-#: ../../mod/item.php:372 ../../mod/wall_upload.php:99
+#: ../../mod/item.php:379 ../../mod/wall_upload.php:99
#: ../../mod/wall_upload.php:108 ../../mod/wall_upload.php:115
#: ../../include/message.php:144
msgid "Wall Photos"
msgstr "Pinnwand-Bilder"
-#: ../../mod/item.php:781
+#: ../../mod/item.php:800
msgid "System error. Post not saved."
msgstr "Systemfehler. Beitrag konnte nicht gespeichert werden."
-#: ../../mod/item.php:806
+#: ../../mod/item.php:825
#, php-format
msgid ""
"This message was sent to you by %s, a member of the Friendica social "
"network."
msgstr "Diese Nachricht wurde dir von %s geschickt, einem Mitglied des Sozialen Netzwerks Friendica."
-#: ../../mod/item.php:808
+#: ../../mod/item.php:827
#, php-format
msgid "You may visit them online at %s"
msgstr "Du kannst sie online unter %s besuchen"
-#: ../../mod/item.php:809
+#: ../../mod/item.php:828
msgid ""
"Please contact the sender by replying to this post if you do not wish to "
"receive these messages."
msgstr "Falls du diese Beiträge nicht erhalten möchtest, kontaktiere bitte den Autor, indem du auf diese Nachricht antwortest."
-#: ../../mod/item.php:811
+#: ../../mod/item.php:830
#, php-format
msgid "%s posted an update."
msgstr "%s hat ein Update veröffentlicht."
@@ -2973,71 +2952,71 @@ msgstr "Dies wird deinen Account endgültig löschen. Es gibt keine Möglichkeit
msgid "Please enter your password for verification:"
msgstr "Bitte gib dein Passwort zur Verifikation ein:"
-#: ../../mod/message.php:22 ../../include/nav.php:131
+#: ../../mod/message.php:9 ../../include/nav.php:131
msgid "New Message"
msgstr "Neue Nachricht"
-#: ../../mod/message.php:63
+#: ../../mod/message.php:69
msgid "Unable to locate contact information."
msgstr "Konnte die Kontaktinformationen nicht finden."
-#: ../../mod/message.php:117
+#: ../../mod/message.php:119
msgid "Message deleted."
msgstr "Nachricht gelöscht."
-#: ../../mod/message.php:147
+#: ../../mod/message.php:149
msgid "Conversation removed."
msgstr "Unterhaltung gelöscht."
-#: ../../mod/message.php:219
+#: ../../mod/message.php:245
msgid "No messages."
msgstr "Keine Nachrichten."
-#: ../../mod/message.php:226
+#: ../../mod/message.php:252
#, php-format
msgid "Unknown sender - %s"
msgstr "'Unbekannter Absender - %s"
-#: ../../mod/message.php:229
+#: ../../mod/message.php:255
#, php-format
msgid "You and %s"
msgstr "Du und %s"
-#: ../../mod/message.php:232
+#: ../../mod/message.php:258
#, php-format
msgid "%s and You"
msgstr "%s und Du"
-#: ../../mod/message.php:242 ../../mod/message.php:363
+#: ../../mod/message.php:268 ../../mod/message.php:390
msgid "Delete conversation"
msgstr "Unterhaltung löschen"
-#: ../../mod/message.php:245
+#: ../../mod/message.php:271
msgid "D, d M Y - g:i A"
msgstr "D, d. M Y - g:i A"
-#: ../../mod/message.php:247
+#: ../../mod/message.php:273
#, php-format
msgid "%d message"
msgid_plural "%d messages"
msgstr[0] "%d Nachricht"
msgstr[1] "%d Nachrichten"
-#: ../../mod/message.php:282
+#: ../../mod/message.php:308
msgid "Message not available."
msgstr "Nachricht nicht verfügbar."
-#: ../../mod/message.php:347
+#: ../../mod/message.php:373
msgid "Delete message"
msgstr "Nachricht löschen"
-#: ../../mod/message.php:365
+#: ../../mod/message.php:392
msgid ""
"No secure communications available. You <strong>may</strong> be able to "
"respond from the sender's profile page."
msgstr "Sichere Kommunikation ist nicht verfügbar. <strong>Eventuell</strong> kannst du auf der Profilseite des Absenders antworten."
-#: ../../mod/message.php:369
+#: ../../mod/message.php:396
msgid "Send Reply"
msgstr "Antwort senden"
@@ -3052,21 +3031,21 @@ msgstr "Keine Freunde zum Anzeigen."
#: ../../mod/admin.php:55
msgid "Theme settings updated."
-msgstr "Themen Einstellungen aktualisiert."
+msgstr "Themeneinstellungen aktualisiert."
-#: ../../mod/admin.php:96 ../../mod/admin.php:401
+#: ../../mod/admin.php:96 ../../mod/admin.php:416
msgid "Site"
msgstr "Seite"
-#: ../../mod/admin.php:97 ../../mod/admin.php:636 ../../mod/admin.php:648
+#: ../../mod/admin.php:97 ../../mod/admin.php:652 ../../mod/admin.php:664
msgid "Users"
msgstr "Nutzer"
-#: ../../mod/admin.php:98 ../../mod/admin.php:730 ../../mod/admin.php:772
+#: ../../mod/admin.php:98 ../../mod/admin.php:746 ../../mod/admin.php:788
msgid "Plugins"
msgstr "Plugins"
-#: ../../mod/admin.php:99 ../../mod/admin.php:935 ../../mod/admin.php:971
+#: ../../mod/admin.php:99 ../../mod/admin.php:951 ../../mod/admin.php:987
msgid "Themes"
msgstr "Themen"
@@ -3074,11 +3053,7 @@ msgstr "Themen"
msgid "DB updates"
msgstr "DB Updates"
-#: ../../mod/admin.php:101
-msgid "Software Update"
-msgstr "Software Update"
-
-#: ../../mod/admin.php:115 ../../mod/admin.php:1058
+#: ../../mod/admin.php:115 ../../mod/admin.php:1074
msgid "Logs"
msgstr "Protokolle"
@@ -3086,523 +3061,553 @@ msgstr "Protokolle"
msgid "User registrations waiting for confirmation"
msgstr "Nutzeranmeldungen die auf Bestätigung warten"
-#: ../../mod/admin.php:195 ../../mod/admin.php:400 ../../mod/admin.php:635
-#: ../../mod/admin.php:729 ../../mod/admin.php:771 ../../mod/admin.php:934
-#: ../../mod/admin.php:970 ../../mod/admin.php:1057
+#: ../../mod/admin.php:180 ../../mod/admin.php:634
+msgid "Normal Account"
+msgstr "Normaler Account"
+
+#: ../../mod/admin.php:181 ../../mod/admin.php:635
+msgid "Soapbox Account"
+msgstr "Sandkasten-Account"
+
+#: ../../mod/admin.php:182 ../../mod/admin.php:636
+msgid "Community/Celebrity Account"
+msgstr "Gemeinschafts-/Promi-Account"
+
+#: ../../mod/admin.php:183 ../../mod/admin.php:637
+msgid "Automatic Friend Account"
+msgstr "Automatischer Freundesaccount"
+
+#: ../../mod/admin.php:202
+msgid "Message queues"
+msgstr "Nachrichten-Warteschlangen"
+
+#: ../../mod/admin.php:207 ../../mod/admin.php:415 ../../mod/admin.php:651
+#: ../../mod/admin.php:745 ../../mod/admin.php:787 ../../mod/admin.php:950
+#: ../../mod/admin.php:986 ../../mod/admin.php:1073
msgid "Administration"
msgstr "Administration"
-#: ../../mod/admin.php:196
+#: ../../mod/admin.php:208
msgid "Summary"
msgstr "Zusammenfassung"
-#: ../../mod/admin.php:197
+#: ../../mod/admin.php:210
msgid "Registered users"
msgstr "Registrierte Nutzer"
-#: ../../mod/admin.php:199
+#: ../../mod/admin.php:212
msgid "Pending registrations"
msgstr "Anstehende Anmeldungen"
-#: ../../mod/admin.php:200
+#: ../../mod/admin.php:213
msgid "Version"
msgstr "Version"
-#: ../../mod/admin.php:202
+#: ../../mod/admin.php:215
msgid "Active plugins"
msgstr "Aktive Plugins"
-#: ../../mod/admin.php:339
+#: ../../mod/admin.php:354
msgid "Site settings updated."
msgstr "Seiteneinstellungen aktualisiert."
-#: ../../mod/admin.php:387
+#: ../../mod/admin.php:402
msgid "Closed"
msgstr "Geschlossen"
-#: ../../mod/admin.php:388
+#: ../../mod/admin.php:403
msgid "Requires approval"
msgstr "Bedarf der Zustimmung"
-#: ../../mod/admin.php:389
+#: ../../mod/admin.php:404
msgid "Open"
msgstr "Offen"
-#: ../../mod/admin.php:393
+#: ../../mod/admin.php:408
msgid "No SSL policy, links will track page SSL state"
msgstr "Keine SSL Richtlinie, Links werden das verwendete Protokoll beibehalten"
-#: ../../mod/admin.php:394
+#: ../../mod/admin.php:409
msgid "Force all links to use SSL"
msgstr "SSL für alle Links erzwingen"
-#: ../../mod/admin.php:395
+#: ../../mod/admin.php:410
msgid "Self-signed certificate, use SSL for local links only (discouraged)"
msgstr "Selbst-unterzeichnetes Zertifikat, SSL nur für lokale Links verwenden (nicht empfohlen)"
-#: ../../mod/admin.php:404
+#: ../../mod/admin.php:419
msgid "File upload"
msgstr "Datei hochladen"
-#: ../../mod/admin.php:405
+#: ../../mod/admin.php:420
msgid "Policies"
msgstr "Regeln"
-#: ../../mod/admin.php:406
+#: ../../mod/admin.php:421
msgid "Advanced"
msgstr "Erweitert"
-#: ../../mod/admin.php:410 ../../addon/statusnet/statusnet.php:544
+#: ../../mod/admin.php:425 ../../addon/statusnet/statusnet.php:552
msgid "Site name"
msgstr "Seitenname"
-#: ../../mod/admin.php:411
+#: ../../mod/admin.php:426
msgid "Banner/Logo"
msgstr "Banner/Logo"
-#: ../../mod/admin.php:412
+#: ../../mod/admin.php:427
msgid "System language"
msgstr "Systemsprache"
-#: ../../mod/admin.php:413
+#: ../../mod/admin.php:428
msgid "System theme"
msgstr "Systemweites Thema"
-#: ../../mod/admin.php:413
+#: ../../mod/admin.php:428
msgid ""
"Default system theme - may be over-ridden by user profiles - <a href='#' "
"id='cnftheme'>change theme settings</a>"
msgstr "Vorgabe für das System-Theme - kann von Benutzerprofilen überschrieben werden - <a href='#' id='cnftheme'>Theme-Einstellungen ändern</a>"
-#: ../../mod/admin.php:414
+#: ../../mod/admin.php:429
msgid "SSL link policy"
msgstr "Regeln für SSL Links"
-#: ../../mod/admin.php:414
+#: ../../mod/admin.php:429
msgid "Determines whether generated links should be forced to use SSL"
msgstr "Bestimmt, ob generierte Links SSL verwenden müssen"
-#: ../../mod/admin.php:415
+#: ../../mod/admin.php:430
msgid "Maximum image size"
msgstr "Maximale Größe von Bildern"
-#: ../../mod/admin.php:415
+#: ../../mod/admin.php:430
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr "Maximale Upload-Größe von Bildern in Bytes. Standard ist 0, d.h. ohne Limit."
-#: ../../mod/admin.php:417
+#: ../../mod/admin.php:432
msgid "Register policy"
msgstr "Registrierungsmethode"
-#: ../../mod/admin.php:418
+#: ../../mod/admin.php:433
msgid "Register text"
msgstr "Registrierungstext"
-#: ../../mod/admin.php:418
+#: ../../mod/admin.php:433
msgid "Will be displayed prominently on the registration page."
-msgstr "Wird gut sichtbar auf der Registrierungs-Seite angezeigt."
+msgstr "Wird gut sichtbar auf der Registrierungsseite angezeigt."
-#: ../../mod/admin.php:419
+#: ../../mod/admin.php:434
msgid "Accounts abandoned after x days"
msgstr "Accounts gelten nach x Tagen als unbenutzt"
-#: ../../mod/admin.php:419
+#: ../../mod/admin.php:434
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr "Verschwende keine System-Ressourcen auf das Pollen externer Seiten, wenn Accounts nicht mehr benutzt werden. 0 eingeben für kein Limit."
-#: ../../mod/admin.php:420
+#: ../../mod/admin.php:435
msgid "Allowed friend domains"
msgstr "Erlaubte Domains für Kontakte"
-#: ../../mod/admin.php:420
+#: ../../mod/admin.php:435
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr "Liste der Domains, die für Freundschaften erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben."
-#: ../../mod/admin.php:421
+#: ../../mod/admin.php:436
msgid "Allowed email domains"
msgstr "Erlaubte Domains für Emails"
-#: ../../mod/admin.php:421
+#: ../../mod/admin.php:436
msgid ""
"Comma separated list of domains which are allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any "
"domains"
msgstr "Liste der Domains, die für E-Mail-Adressen bei der Registrierung erlaubt sind, durch Kommas getrennt. Platzhalter werden akzeptiert. Leer lassen, um alle Domains zu erlauben."
-#: ../../mod/admin.php:422
+#: ../../mod/admin.php:437
msgid "Block public"
msgstr "Öffentlichen Zugriff blockieren"
-#: ../../mod/admin.php:422
+#: ../../mod/admin.php:437
msgid ""
"Check to block public access to all otherwise public personal pages on this "
"site unless you are currently logged in."
msgstr "Klicken, um öffentlichen Zugriff auf sonst öffentliche Profile zu blockieren, wenn man nicht eingeloggt ist."
-#: ../../mod/admin.php:423
+#: ../../mod/admin.php:438
msgid "Force publish"
msgstr "Erzwinge Veröffentlichung"
-#: ../../mod/admin.php:423
+#: ../../mod/admin.php:438
msgid ""
"Check to force all profiles on this site to be listed in the site directory."
msgstr "Klicken, um Anzeige aller Profile dieses Servers im Verzeichnis zu erzwingen."
-#: ../../mod/admin.php:424
+#: ../../mod/admin.php:439
msgid "Global directory update URL"
msgstr "URL für Updates beim weltweiten Verzeichnis"
-#: ../../mod/admin.php:424
+#: ../../mod/admin.php:439
msgid ""
"URL to update the global directory. If this is not set, the global directory"
" is completely unavailable to the application."
msgstr "URL für Update des globalen Verzeichnisses. Wenn nichts eingetragen ist, bleibt das globale Verzeichnis unerreichbar."
-#: ../../mod/admin.php:426
+#: ../../mod/admin.php:441
msgid "Block multiple registrations"
msgstr "Unterbinde Mehrfachregistrierung"
-#: ../../mod/admin.php:426
+#: ../../mod/admin.php:441
msgid "Disallow users to register additional accounts for use as pages."
msgstr "Benutzern nicht erlauben, weitere Accounts als zusätzliche Profile anzulegen."
-#: ../../mod/admin.php:427
+#: ../../mod/admin.php:442
msgid "OpenID support"
msgstr "OpenID Unterstützung"
-#: ../../mod/admin.php:427
+#: ../../mod/admin.php:442
msgid "OpenID support for registration and logins."
msgstr "OpenID-Unterstützung für Registrierung und Login."
-#: ../../mod/admin.php:428
+#: ../../mod/admin.php:443
msgid "Fullname check"
msgstr "Namen auf Vollständigkeit überprüfen"
-#: ../../mod/admin.php:428
+#: ../../mod/admin.php:443
msgid ""
"Force users to register with a space between firstname and lastname in Full "
"name, as an antispam measure"
msgstr "Leerzeichen zwischen Vor- und Nachname im vollständigen Namen erzwingen, um SPAM zu vermeiden."
-#: ../../mod/admin.php:429
+#: ../../mod/admin.php:444
msgid "UTF-8 Regular expressions"
msgstr "UTF-8 Reguläre Ausdrücke"
-#: ../../mod/admin.php:429
+#: ../../mod/admin.php:444
msgid "Use PHP UTF8 regular expressions"
msgstr "PHP UTF8 Ausdrücke verwenden"
-#: ../../mod/admin.php:430
+#: ../../mod/admin.php:445
msgid "Show Community Page"
msgstr "Gemeinschaftsseite anzeigen"
-#: ../../mod/admin.php:430
+#: ../../mod/admin.php:445
msgid ""
"Display a Community page showing all recent public postings on this site."
msgstr "Zeige die Gemeinschaftsseite mit allen öffentlichen Beiträgen auf diesem Server."
-#: ../../mod/admin.php:431
+#: ../../mod/admin.php:446
msgid "Enable OStatus support"
msgstr "OStatus Unterstützung aktivieren"
-#: ../../mod/admin.php:431
+#: ../../mod/admin.php:446
msgid ""
"Provide built-in OStatus (identi.ca, status.net, etc.) compatibility. All "
"communications in OStatus are public, so privacy warnings will be "
"occasionally displayed."
msgstr "Biete die eingebaute OStatus (identi.ca, status.net, etc.) Unterstützung an. Jede Kommunikation in OStatus ist öffentlich, so Privatsphäre Warnungen werden bei Bedarf angezeigt."
-#: ../../mod/admin.php:432
+#: ../../mod/admin.php:447
msgid "Enable Diaspora support"
msgstr "Diaspora-Support aktivieren"
-#: ../../mod/admin.php:432
+#: ../../mod/admin.php:447
msgid "Provide built-in Diaspora network compatibility."
msgstr "Verwende die eingebaute Diaspora-Verknüpfung."
-#: ../../mod/admin.php:433
+#: ../../mod/admin.php:448
msgid "Only allow Friendica contacts"
msgstr "Nur Friendica-Kontakte erlauben"
-#: ../../mod/admin.php:433
+#: ../../mod/admin.php:448
msgid ""
"All contacts must use Friendica protocols. All other built-in communication "
"protocols disabled."
msgstr "Alle Kontakte müssen das Friendica Protokoll nutzen. Alle anderen Kommunikationsprotokolle werden deaktiviert."
-#: ../../mod/admin.php:434
+#: ../../mod/admin.php:449
msgid "Verify SSL"
msgstr "SSL Überprüfen"
-#: ../../mod/admin.php:434
+#: ../../mod/admin.php:449
msgid ""
"If you wish, you can turn on strict certificate checking. This will mean you"
" cannot connect (at all) to self-signed SSL sites."
-msgstr "Wenn gewollt, kann man hier eine strenge Zertifikat Kontrolle einstellen. Das bedeutet, dass man zu keinen Seiten mit selbst unterzeichnetem SSL eine Verbindung herstellen kann."
+msgstr "Wenn gewollt, kann man hier eine strenge Zertifikatkontrolle einstellen. Das bedeutet, dass man zu keinen Seiten mit selbst unterzeichnetem SSL eine Verbindung herstellen kann."
-#: ../../mod/admin.php:435
+#: ../../mod/admin.php:450
msgid "Proxy user"
msgstr "Proxy Nutzer"
-#: ../../mod/admin.php:436
+#: ../../mod/admin.php:451
msgid "Proxy URL"
msgstr "Proxy URL"
-#: ../../mod/admin.php:437
+#: ../../mod/admin.php:452
msgid "Network timeout"
msgstr "Netzwerk Wartezeit"
-#: ../../mod/admin.php:437
+#: ../../mod/admin.php:452
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr "Der Wert ist in Sekunden. Setze 0 für unbegrenzt (nicht empfohlen)."
-#: ../../mod/admin.php:438
+#: ../../mod/admin.php:453
msgid "Delivery interval"
msgstr "Zustellungsintervall"
-#: ../../mod/admin.php:438
+#: ../../mod/admin.php:453
msgid ""
"Delay background delivery processes by this many seconds to reduce system "
"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
"for large dedicated servers."
-msgstr "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl an Sekunden um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared-Hosts, 2-3 für VPS, 0-1 für große dedizierte Server."
+msgstr "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl an Sekunden, um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared-Hosts, 2-3 für VPS, 0-1 für große dedizierte Server."
-#: ../../mod/admin.php:439
+#: ../../mod/admin.php:454
+msgid "Poll interval"
+msgstr "Abfrageintervall"
+
+#: ../../mod/admin.php:454
+msgid ""
+"Delay background polling processes by this many seconds to reduce system "
+"load. If 0, use delivery interval."
+msgstr "Verzögere Hintergrundprozesse, um diese Anzahl an Sekunden um die Systemlast zu reduzieren. Bei 0 Sekunden wird das Auslieferungsintervall verwendet."
+
+#: ../../mod/admin.php:455
msgid "Maximum Load Average"
msgstr "Maximum Load Average"
-#: ../../mod/admin.php:439
+#: ../../mod/admin.php:455
msgid ""
"Maximum system load before delivery and poll processes are deferred - "
"default 50."
-msgstr ""
+msgstr "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50"
-#: ../../mod/admin.php:453
+#: ../../mod/admin.php:469
msgid "Update has been marked successful"
msgstr "Update wurde als erfolgreich markiert"
-#: ../../mod/admin.php:463
+#: ../../mod/admin.php:479
#, php-format
msgid "Executing %s failed. Check system logs."
msgstr "Ausführung von %s schlug fehl. Systemprotokolle prüfen."
-#: ../../mod/admin.php:466
+#: ../../mod/admin.php:482
#, php-format
msgid "Update %s was successfully applied."
msgstr "Update %s war erfolgreich."
-#: ../../mod/admin.php:470
+#: ../../mod/admin.php:486
#, php-format
msgid "Update %s did not return a status. Unknown if it succeeded."
msgstr "Update %s hat keinen Status zurückgegeben. Unbekannter Status."
-#: ../../mod/admin.php:473
+#: ../../mod/admin.php:489
#, php-format
msgid "Update function %s could not be found."
msgstr "Updatefunktion %s konnte nicht gefunden werden."
-#: ../../mod/admin.php:488
+#: ../../mod/admin.php:504
msgid "No failed updates."
msgstr "Keine fehlgeschlagenen Updates."
-#: ../../mod/admin.php:492
+#: ../../mod/admin.php:508
msgid "Failed Updates"
msgstr "Fehlgeschlagene Updates"
-#: ../../mod/admin.php:493
+#: ../../mod/admin.php:509
msgid ""
"This does not include updates prior to 1139, which did not return a status."
msgstr "Ohne Updates vor 1139, da diese keinen Status zurückgegeben haben."
-#: ../../mod/admin.php:494
+#: ../../mod/admin.php:510
msgid "Mark success (if update was manually applied)"
msgstr "Als erfolgreich markieren (falls das Update manuell installiert wurde)"
-#: ../../mod/admin.php:495
+#: ../../mod/admin.php:511
msgid "Attempt to execute this update step automatically"
msgstr "Versuchen, diesen Schritt automatisch auszuführen"
-#: ../../mod/admin.php:520
+#: ../../mod/admin.php:536
#, php-format
msgid "%s user blocked/unblocked"
msgid_plural "%s users blocked/unblocked"
msgstr[0] "%s Benutzer geblockt/freigegeben"
msgstr[1] "%s Benutzer geblockt/freigegeben"
-#: ../../mod/admin.php:527
+#: ../../mod/admin.php:543
#, php-format
msgid "%s user deleted"
msgid_plural "%s users deleted"
msgstr[0] "%s Nutzer gelöscht"
msgstr[1] "%s Nutzer gelöscht"
-#: ../../mod/admin.php:566
+#: ../../mod/admin.php:582
#, php-format
msgid "User '%s' deleted"
msgstr "Nutzer '%s' gelöscht"
-#: ../../mod/admin.php:574
+#: ../../mod/admin.php:590
#, php-format
msgid "User '%s' unblocked"
msgstr "Nutzer '%s' entsperrt"
-#: ../../mod/admin.php:574
+#: ../../mod/admin.php:590
#, php-format
msgid "User '%s' blocked"
msgstr "Nutzer '%s' gesperrt"
-#: ../../mod/admin.php:638
+#: ../../mod/admin.php:654
msgid "select all"
msgstr "Alle auswählen"
-#: ../../mod/admin.php:639
+#: ../../mod/admin.php:655
msgid "User registrations waiting for confirm"
msgstr "Neuanmeldungen, die auf deine Bestätigung warten"
-#: ../../mod/admin.php:640
+#: ../../mod/admin.php:656
msgid "Request date"
-msgstr "Anfrage Datum"
+msgstr "Anfragedatum"
-#: ../../mod/admin.php:640 ../../mod/admin.php:649
+#: ../../mod/admin.php:656 ../../mod/admin.php:665
#: ../../include/contact_selectors.php:79
msgid "Email"
msgstr "Email"
-#: ../../mod/admin.php:641
+#: ../../mod/admin.php:657
msgid "No registrations."
msgstr "Keine Neuanmeldungen."
-#: ../../mod/admin.php:643
+#: ../../mod/admin.php:659
msgid "Deny"
msgstr "Verwehren"
-#: ../../mod/admin.php:649
+#: ../../mod/admin.php:665
msgid "Register date"
msgstr "Anmeldedatum"
-#: ../../mod/admin.php:649
+#: ../../mod/admin.php:665
msgid "Last login"
msgstr "Letzte Anmeldung"
-#: ../../mod/admin.php:649
+#: ../../mod/admin.php:665
msgid "Last item"
msgstr "Letzter Beitrag"
-#: ../../mod/admin.php:649
+#: ../../mod/admin.php:665
msgid "Account"
msgstr "Nutzerkonto"
-#: ../../mod/admin.php:651
+#: ../../mod/admin.php:667
msgid ""
"Selected users will be deleted!\\n\\nEverything these users had posted on "
"this site will be permanently deleted!\\n\\nAre you sure?"
msgstr "Die markierten Nutzer werden gelöscht!\\n\\nAlle Beiträge, die diese Nutzer auf dieser Seite veröffentlicht haben, werden permanent gelöscht!\\n\\nBist du sicher?"
-#: ../../mod/admin.php:652
+#: ../../mod/admin.php:668
msgid ""
"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
"site will be permanently deleted!\\n\\nAre you sure?"
msgstr "Der Nutzer {0} wird gelöscht!\\n\\nAlles was dieser Nutzer auf dieser Seite veröffentlicht hat, wird permanent gelöscht!\\n\\nBist du sicher?"
-#: ../../mod/admin.php:693
+#: ../../mod/admin.php:709
#, php-format
msgid "Plugin %s disabled."
msgstr "Plugin %s deaktiviert."
-#: ../../mod/admin.php:697
+#: ../../mod/admin.php:713
#, php-format
msgid "Plugin %s enabled."
msgstr "Plugin %s aktiviert."
-#: ../../mod/admin.php:707 ../../mod/admin.php:905
+#: ../../mod/admin.php:723 ../../mod/admin.php:921
msgid "Disable"
msgstr "Ausschalten"
-#: ../../mod/admin.php:709 ../../mod/admin.php:907
+#: ../../mod/admin.php:725 ../../mod/admin.php:923
msgid "Enable"
msgstr "Einschalten"
-#: ../../mod/admin.php:731 ../../mod/admin.php:936
+#: ../../mod/admin.php:747 ../../mod/admin.php:952
msgid "Toggle"
msgstr "Umschalten"
-#: ../../mod/admin.php:739 ../../mod/admin.php:946
+#: ../../mod/admin.php:755 ../../mod/admin.php:962
msgid "Author: "
msgstr "Autor:"
-#: ../../mod/admin.php:740 ../../mod/admin.php:947
+#: ../../mod/admin.php:756 ../../mod/admin.php:963
msgid "Maintainer: "
msgstr "Betreuer:"
-#: ../../mod/admin.php:869
+#: ../../mod/admin.php:885
msgid "No themes found."
msgstr "Keine Themen gefunden."
-#: ../../mod/admin.php:928
+#: ../../mod/admin.php:944
msgid "Screenshot"
msgstr "Bildschirmfoto"
-#: ../../mod/admin.php:976
+#: ../../mod/admin.php:992
msgid "[Experimental]"
msgstr "[Experimentell]"
-#: ../../mod/admin.php:977
+#: ../../mod/admin.php:993
msgid "[Unsupported]"
msgstr "[Nicht unterstützt]"
-#: ../../mod/admin.php:1004
+#: ../../mod/admin.php:1020
msgid "Log settings updated."
msgstr "Protokolleinstellungen aktualisiert."
-#: ../../mod/admin.php:1060
+#: ../../mod/admin.php:1076
msgid "Clear"
msgstr "löschen"
-#: ../../mod/admin.php:1066
+#: ../../mod/admin.php:1082
msgid "Debugging"
msgstr "Protokoll führen"
-#: ../../mod/admin.php:1067
+#: ../../mod/admin.php:1083
msgid "Log file"
msgstr "Protokolldatei"
-#: ../../mod/admin.php:1067
+#: ../../mod/admin.php:1083
msgid ""
"Must be writable by web server. Relative to your Friendica top-level "
"directory."
msgstr "Webserver muss Schreibrechte besitzen. Abhängig vom Friendica-Installationsverzeichnis."
-#: ../../mod/admin.php:1068
+#: ../../mod/admin.php:1084
msgid "Log level"
msgstr "Protokoll-Level"
-#: ../../mod/admin.php:1118 ../../view/theme/diabook/theme.php:599
+#: ../../mod/admin.php:1134
msgid "Close"
msgstr "Schließen"
-#: ../../mod/admin.php:1124
+#: ../../mod/admin.php:1140
msgid "FTP Host"
msgstr "FTP Host"
-#: ../../mod/admin.php:1125
+#: ../../mod/admin.php:1141
msgid "FTP Path"
msgstr "FTP Pfad"
-#: ../../mod/admin.php:1126
+#: ../../mod/admin.php:1142
msgid "FTP User"
msgstr "FTP Nutzername"
-#: ../../mod/admin.php:1127
+#: ../../mod/admin.php:1143
msgid "FTP Password"
msgstr "FTP Passwort"
-#: ../../mod/profile.php:21 ../../boot.php:949
+#: ../../mod/profile.php:21 ../../boot.php:957
msgid "Requested profile is not available."
msgstr "Das angefragte Profil ist nicht vorhanden."
@@ -3614,48 +3619,48 @@ msgstr "Der Zugriff zu diesem Profil wurde eingeschränkt."
msgid "Tips for New Members"
msgstr "Tipps für neue Nutzer"
-#: ../../mod/ping.php:177
+#: ../../mod/ping.php:185
msgid "{0} wants to be your friend"
msgstr "{0} möchte mit dir in Kontakt treten"
-#: ../../mod/ping.php:182
+#: ../../mod/ping.php:190
msgid "{0} sent you a message"
msgstr "{0} hat dir eine Nachricht geschickt"
-#: ../../mod/ping.php:187
+#: ../../mod/ping.php:195
msgid "{0} requested registration"
msgstr "{0} möchte sich registrieren"
-#: ../../mod/ping.php:193
+#: ../../mod/ping.php:201
#, php-format
msgid "{0} commented %s's post"
msgstr "{0} kommentierte einen Beitrag von %s"
-#: ../../mod/ping.php:198
+#: ../../mod/ping.php:206
#, php-format
msgid "{0} liked %s's post"
msgstr "{0} mag %ss Beitrag"
-#: ../../mod/ping.php:203
+#: ../../mod/ping.php:211
#, php-format
msgid "{0} disliked %s's post"
msgstr "{0} mag %ss Beitrag nicht"
-#: ../../mod/ping.php:208
+#: ../../mod/ping.php:216
#, php-format
msgid "{0} is now friends with %s"
msgstr "{0} ist jetzt mit %s befreundet"
-#: ../../mod/ping.php:213
+#: ../../mod/ping.php:221
msgid "{0} posted"
msgstr "{0} hat etwas veröffentlicht"
-#: ../../mod/ping.php:218
+#: ../../mod/ping.php:226
#, php-format
msgid "{0} tagged %s's post with #%s"
msgstr "{0} hat %ss Beitrag mit dem Schlagwort #%s versehen"
-#: ../../mod/ping.php:224
+#: ../../mod/ping.php:232
msgid "{0} mentioned you in a post"
msgstr "{0} hat dich in einem Beitrag erwähnt"
@@ -3672,53 +3677,63 @@ msgid ""
"Account not found and OpenID registration is not permitted on this site."
msgstr "Account wurde nicht gefunden und OpenID Registrierung auf diesem Server nicht gestattet."
-#: ../../mod/openid.php:93 ../../include/auth.php:90
-#: ../../include/auth.php:153
+#: ../../mod/openid.php:93 ../../include/auth.php:99
+#: ../../include/auth.php:162
msgid "Login failed."
-msgstr "Annmeldung fehlgeschlagen."
+msgstr "Anmeldung fehlgeschlagen."
-#: ../../mod/follow.php:27
+#: ../../mod/follow.php:30
msgid "Connect URL missing."
msgstr "Connect-URL fehlt"
-#: ../../mod/follow.php:47
+#: ../../mod/follow.php:56
msgid ""
"This site is not configured to allow communications with other networks."
msgstr "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann."
-#: ../../mod/follow.php:48 ../../mod/follow.php:63
+#: ../../mod/follow.php:57 ../../mod/follow.php:72
msgid "No compatible communication protocols or feeds were discovered."
msgstr "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden."
-#: ../../mod/follow.php:61
+#: ../../mod/follow.php:70
msgid "The profile address specified does not provide adequate information."
msgstr "Die angegebene Profiladresse liefert unzureichende Informationen."
-#: ../../mod/follow.php:65
+#: ../../mod/follow.php:74
msgid "An author or name was not found."
msgstr "Es wurde kein Autor oder Name gefunden."
-#: ../../mod/follow.php:67
+#: ../../mod/follow.php:76
msgid "No browser URL could be matched to this address."
msgstr "Zu dieser Adresse konnte keine passende Browser URL gefunden werden."
-#: ../../mod/follow.php:74
+#: ../../mod/follow.php:78
+msgid ""
+"Unable to match @-style Identity Address with a known protocol or email "
+"contact."
+msgstr "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen."
+
+#: ../../mod/follow.php:79
+msgid "Use mailto: in front of address to force email check."
+msgstr "Verwende mailto: vor der Email Adresse um eine Überprüfung der Email Adresse zu erzwingen."
+
+#: ../../mod/follow.php:85
msgid ""
"The profile address specified belongs to a network which has been disabled "
"on this site."
msgstr "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde."
-#: ../../mod/follow.php:79
+#: ../../mod/follow.php:90
msgid ""
"Limited profile. This person will be unable to receive direct/personal "
"notifications from you."
msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können."
-#: ../../mod/follow.php:149
+#: ../../mod/follow.php:161
msgid "Unable to retrieve contact information."
msgstr "Konnte die Kontaktinformationen nicht empfangen."
-#: ../../mod/follow.php:195
+#: ../../mod/follow.php:216
msgid "following"
msgstr "folgen"
@@ -3742,12 +3757,13 @@ msgstr "Anwendungen"
msgid "No installed applications."
msgstr "Keine Applikationen installiert."
-#: ../../mod/search.php:83
-msgid "Search This Site"
-msgstr "Diese Seite durchsuchen"
+#: ../../mod/search.php:83 ../../include/text.php:649
+#: ../../include/text.php:650 ../../include/nav.php:91
+msgid "Search"
+msgstr "Suche"
-#: ../../mod/profiles.php:21 ../../mod/profiles.php:375
-#: ../../mod/profiles.php:489 ../../mod/dfrn_confirm.php:62
+#: ../../mod/profiles.php:21 ../../mod/profiles.php:392
+#: ../../mod/profiles.php:506 ../../mod/dfrn_confirm.php:62
msgid "Profile not found."
msgstr "Profil nicht gefunden."
@@ -3755,272 +3771,285 @@ msgstr "Profil nicht gefunden."
msgid "Profile Name is required."
msgstr "Profilname ist erforderlich."
-#: ../../mod/profiles.php:145
+#: ../../mod/profiles.php:151
msgid "Marital Status"
msgstr "Familienstand"
-#: ../../mod/profiles.php:149
+#: ../../mod/profiles.php:155
msgid "Romantic Partner"
msgstr "Romanze"
-#: ../../mod/profiles.php:153
+#: ../../mod/profiles.php:159
msgid "Work/Employment"
msgstr "Arbeit / Beschäftigung"
-#: ../../mod/profiles.php:156
+#: ../../mod/profiles.php:162
msgid "Religion"
msgstr "Religion"
-#: ../../mod/profiles.php:160
+#: ../../mod/profiles.php:166
msgid "Political Views"
msgstr "Politische Ansichten"
-#: ../../mod/profiles.php:164
+#: ../../mod/profiles.php:170
msgid "Gender"
msgstr "Geschlecht"
-#: ../../mod/profiles.php:168
+#: ../../mod/profiles.php:174
msgid "Sexual Preference"
msgstr "Sexuelle Vorlieben"
-#: ../../mod/profiles.php:172
+#: ../../mod/profiles.php:178
msgid "Homepage"
msgstr "Webseite"
-#: ../../mod/profiles.php:176
+#: ../../mod/profiles.php:182
msgid "Interests"
msgstr "Interessen"
-#: ../../mod/profiles.php:181
+#: ../../mod/profiles.php:186
+msgid "Address"
+msgstr "Adresse"
+
+#: ../../mod/profiles.php:193
msgid "Location"
msgstr "Wohnort"
-#: ../../mod/profiles.php:253
+#: ../../mod/profiles.php:270
msgid "Profile updated."
msgstr "Profil aktualisiert."
-#: ../../mod/profiles.php:320
+#: ../../mod/profiles.php:337
msgid " and "
msgstr " und "
-#: ../../mod/profiles.php:328
+#: ../../mod/profiles.php:345
msgid "public profile"
msgstr "öffentliches Profil"
-#: ../../mod/profiles.php:331
+#: ../../mod/profiles.php:348
#, php-format
msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
msgstr "%1$s hat %2$s geändert auf &ldquo;%3$s&rdquo;"
-#: ../../mod/profiles.php:335
+#: ../../mod/profiles.php:349
+#, php-format
+msgid " - Visit %1$s's %2$s"
+msgstr " – %1$ss %2$s besuchen"
+
+#: ../../mod/profiles.php:352
#, php-format
msgid "%1$s has an updated %2$s, changing %3$s."
msgstr "%1$s hat folgendes aktualisiert %2$s, verändert wurde %3$s."
-#: ../../mod/profiles.php:394
+#: ../../mod/profiles.php:411
msgid "Profile deleted."
msgstr "Profil gelöscht."
-#: ../../mod/profiles.php:412 ../../mod/profiles.php:446
+#: ../../mod/profiles.php:429 ../../mod/profiles.php:463
msgid "Profile-"
msgstr "Profil-"
-#: ../../mod/profiles.php:431 ../../mod/profiles.php:473
+#: ../../mod/profiles.php:448 ../../mod/profiles.php:490
msgid "New profile created."
msgstr "Neues Profil angelegt."
-#: ../../mod/profiles.php:452
+#: ../../mod/profiles.php:469
msgid "Profile unavailable to clone."
msgstr "Profil nicht zum Duplizieren verfügbar."
-#: ../../mod/profiles.php:510
+#: ../../mod/profiles.php:527
msgid "Hide your contact/friend list from viewers of this profile?"
msgstr "Liste der Kontakte vor Betrachtern dieses Profils verbergen?"
-#: ../../mod/profiles.php:533
+#: ../../mod/profiles.php:550
msgid "Edit Profile Details"
msgstr "Profil bearbeiten"
-#: ../../mod/profiles.php:535
+#: ../../mod/profiles.php:552
msgid "View this profile"
msgstr "Dieses Profil anzeigen"
-#: ../../mod/profiles.php:536
+#: ../../mod/profiles.php:553
msgid "Create a new profile using these settings"
msgstr "Neues Profil anlegen und diese Einstellungen verwenden"
-#: ../../mod/profiles.php:537
+#: ../../mod/profiles.php:554
msgid "Clone this profile"
msgstr "Dieses Profil duplizieren"
-#: ../../mod/profiles.php:538
+#: ../../mod/profiles.php:555
msgid "Delete this profile"
msgstr "Dieses Profil löschen"
-#: ../../mod/profiles.php:539
+#: ../../mod/profiles.php:556
msgid "Profile Name:"
msgstr "Profilname:"
-#: ../../mod/profiles.php:540
+#: ../../mod/profiles.php:557
msgid "Your Full Name:"
msgstr "Dein kompletter Name:"
-#: ../../mod/profiles.php:541
+#: ../../mod/profiles.php:558
msgid "Title/Description:"
msgstr "Titel/Beschreibung:"
-#: ../../mod/profiles.php:542
+#: ../../mod/profiles.php:559
msgid "Your Gender:"
msgstr "Dein Geschlecht:"
-#: ../../mod/profiles.php:543
+#: ../../mod/profiles.php:560
#, php-format
msgid "Birthday (%s):"
msgstr "Geburtstag (%s):"
-#: ../../mod/profiles.php:544
+#: ../../mod/profiles.php:561
msgid "Street Address:"
msgstr "Adresse:"
-#: ../../mod/profiles.php:545
+#: ../../mod/profiles.php:562
msgid "Locality/City:"
msgstr "Wohnort/Stadt:"
-#: ../../mod/profiles.php:546
+#: ../../mod/profiles.php:563
msgid "Postal/Zip Code:"
msgstr "Postleitzahl:"
-#: ../../mod/profiles.php:547
+#: ../../mod/profiles.php:564
msgid "Country:"
msgstr "Land:"
-#: ../../mod/profiles.php:548
+#: ../../mod/profiles.php:565
msgid "Region/State:"
msgstr "Region/Bundesstaat:"
-#: ../../mod/profiles.php:549
+#: ../../mod/profiles.php:566
msgid "<span class=\"heart\">&hearts;</span> Marital Status:"
msgstr "<span class=\"heart\">&hearts;</span> Beziehungsstatus:"
-#: ../../mod/profiles.php:550
+#: ../../mod/profiles.php:567
msgid "Who: (if applicable)"
msgstr "Wer: (falls anwendbar)"
-#: ../../mod/profiles.php:551
+#: ../../mod/profiles.php:568
msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
msgstr "Beispiele: cathy123, Cathy Williams, cathy@example.com"
-#: ../../mod/profiles.php:552 ../../include/profile_advanced.php:43
+#: ../../mod/profiles.php:569
+msgid "Since [date]:"
+msgstr "Seit [Datum]:"
+
+#: ../../mod/profiles.php:570 ../../include/profile_advanced.php:46
msgid "Sexual Preference:"
msgstr "Sexuelle Vorlieben:"
-#: ../../mod/profiles.php:553
+#: ../../mod/profiles.php:571
msgid "Homepage URL:"
msgstr "Adresse der Homepage:"
-#: ../../mod/profiles.php:554 ../../include/profile_advanced.php:49
+#: ../../mod/profiles.php:572 ../../include/profile_advanced.php:52
msgid "Political Views:"
msgstr "Politische Ansichten:"
-#: ../../mod/profiles.php:555
+#: ../../mod/profiles.php:573
msgid "Religious Views:"
msgstr "Religiöse Ansichten:"
-#: ../../mod/profiles.php:556
+#: ../../mod/profiles.php:574
msgid "Public Keywords:"
msgstr "Öffentliche Schlüsselwörter:"
-#: ../../mod/profiles.php:557
+#: ../../mod/profiles.php:575
msgid "Private Keywords:"
msgstr "Private Schlüsselwörter:"
-#: ../../mod/profiles.php:558
+#: ../../mod/profiles.php:576
msgid "Example: fishing photography software"
msgstr "Beispiel: Fischen Fotografie Software"
-#: ../../mod/profiles.php:559
+#: ../../mod/profiles.php:577
msgid "(Used for suggesting potential friends, can be seen by others)"
-msgstr "(Wird verwendet um potentielle Freunde zu finden, könnte von Fremden eingesehen werden)"
+msgstr "(Wird verwendet, um potentielle Freunde zu finden, könnte von Fremden eingesehen werden)"
-#: ../../mod/profiles.php:560
+#: ../../mod/profiles.php:578
msgid "(Used for searching profiles, never shown to others)"
msgstr "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)"
-#: ../../mod/profiles.php:561
+#: ../../mod/profiles.php:579
msgid "Tell us about yourself..."
msgstr "Erzähle uns ein bisschen von dir …"
-#: ../../mod/profiles.php:562
+#: ../../mod/profiles.php:580
msgid "Hobbies/Interests"
msgstr "Hobbies/Interessen"
-#: ../../mod/profiles.php:563
+#: ../../mod/profiles.php:581
msgid "Contact information and Social Networks"
msgstr "Kontaktinformationen und Soziale Netzwerke"
-#: ../../mod/profiles.php:564
+#: ../../mod/profiles.php:582
msgid "Musical interests"
msgstr "Musikalische Interessen"
-#: ../../mod/profiles.php:565
+#: ../../mod/profiles.php:583
msgid "Books, literature"
msgstr "Literatur/Bücher"
-#: ../../mod/profiles.php:566
+#: ../../mod/profiles.php:584
msgid "Television"
msgstr "Fernsehen"
-#: ../../mod/profiles.php:567
+#: ../../mod/profiles.php:585
msgid "Film/dance/culture/entertainment"
msgstr "Filme/Tänze/Kultur/Unterhaltung"
-#: ../../mod/profiles.php:568
+#: ../../mod/profiles.php:586
msgid "Love/romance"
msgstr "Liebesleben"
-#: ../../mod/profiles.php:569
+#: ../../mod/profiles.php:587
msgid "Work/employment"
msgstr "Arbeit/Beschäftigung"
-#: ../../mod/profiles.php:570
+#: ../../mod/profiles.php:588
msgid "School/education"
msgstr "Schule/Ausbildung"
-#: ../../mod/profiles.php:575
+#: ../../mod/profiles.php:593
msgid ""
"This is your <strong>public</strong> profile.<br />It <strong>may</strong> "
"be visible to anybody using the internet."
msgstr "Dies ist dein <strong>öffentliches</strong> Profil.<br />Es <strong>könnte</strong> für jeden Nutzer des Internets sichtbar sein."
-#: ../../mod/profiles.php:585 ../../mod/directory.php:111
+#: ../../mod/profiles.php:603 ../../mod/directory.php:111
msgid "Age: "
msgstr "Alter: "
-#: ../../mod/profiles.php:620
+#: ../../mod/profiles.php:639
msgid "Edit/Manage Profiles"
msgstr "Verwalte/Editiere Profile"
-#: ../../mod/profiles.php:621 ../../boot.php:1058
+#: ../../mod/profiles.php:640 ../../boot.php:1066
msgid "Change profile photo"
msgstr "Profilbild ändern"
-#: ../../mod/profiles.php:622 ../../boot.php:1059
+#: ../../mod/profiles.php:641 ../../boot.php:1067
msgid "Create New Profile"
msgstr "Neues Profil anlegen"
-#: ../../mod/profiles.php:633 ../../boot.php:1069
+#: ../../mod/profiles.php:652 ../../boot.php:1077
msgid "Profile Image"
msgstr "Profilbild"
-#: ../../mod/profiles.php:635 ../../boot.php:1072
+#: ../../mod/profiles.php:654 ../../boot.php:1080
msgid "visible to everybody"
msgstr "sichtbar für jeden"
-#: ../../mod/profiles.php:636 ../../boot.php:1073
+#: ../../mod/profiles.php:655 ../../boot.php:1081
msgid "Edit visibility"
msgstr "Sichtbarkeit bearbeiten"
-#: ../../mod/filer.php:29 ../../include/conversation.php:922
+#: ../../mod/filer.php:29 ../../include/conversation.php:941
msgid "Save to Folder:"
msgstr "In diesen Ordner verschieben:"
@@ -4068,7 +4097,7 @@ msgstr "Hinzufügen"
msgid "No entries."
msgstr "Keine Einträge"
-#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:513
+#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:626
#: ../../include/contact_widgets.php:34
msgid "Friend Suggestions"
msgstr "Kontaktvorschläge"
@@ -4083,7 +4112,7 @@ msgstr "Keine Vorschläge. Falls der Server frisch aufgesetzt wurde, versuche es
msgid "Ignore/Hide"
msgstr "Ignorieren/Verbergen"
-#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:511
+#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:624
msgid "Global Directory"
msgstr "Weltweites Verzeichnis"
@@ -4193,164 +4222,164 @@ msgid ""
" has already been approved."
msgstr "Das kann passieren, wenn sich zwei Kontakte gegenseitig eingeladen haben und bereits einer angenommen wurde."
-#: ../../mod/dfrn_confirm.php:242
+#: ../../mod/dfrn_confirm.php:237
msgid "Response from remote site was not understood."
msgstr "Antwort der Gegenstelle unverständlich."
-#: ../../mod/dfrn_confirm.php:251
+#: ../../mod/dfrn_confirm.php:246
msgid "Unexpected response from remote site: "
msgstr "Unerwartete Antwort der Gegenstelle: "
-#: ../../mod/dfrn_confirm.php:259
+#: ../../mod/dfrn_confirm.php:254
msgid "Confirmation completed successfully."
msgstr "Bestätigung erfolgreich abgeschlossen."
-#: ../../mod/dfrn_confirm.php:261 ../../mod/dfrn_confirm.php:275
-#: ../../mod/dfrn_confirm.php:282
+#: ../../mod/dfrn_confirm.php:256 ../../mod/dfrn_confirm.php:270
+#: ../../mod/dfrn_confirm.php:277
msgid "Remote site reported: "
msgstr "Gegenstelle meldet: "
-#: ../../mod/dfrn_confirm.php:273
+#: ../../mod/dfrn_confirm.php:268
msgid "Temporary failure. Please wait and try again."
msgstr "Zeitweiser Fehler. Bitte warte einige Momente und versuche es dann noch einmal."
-#: ../../mod/dfrn_confirm.php:280
+#: ../../mod/dfrn_confirm.php:275
msgid "Introduction failed or was revoked."
msgstr "Kontaktanfrage schlug fehl oder wurde zurück gezogen."
-#: ../../mod/dfrn_confirm.php:425
+#: ../../mod/dfrn_confirm.php:420
msgid "Unable to set contact photo."
msgstr "Konnte das Bild des Kontakts nicht speichern."
-#: ../../mod/dfrn_confirm.php:482 ../../include/diaspora.php:507
+#: ../../mod/dfrn_confirm.php:477 ../../include/diaspora.php:507
#: ../../include/conversation.php:101
#, php-format
msgid "%1$s is now friends with %2$s"
msgstr "%1$s ist nun mit %2$s befreundet"
-#: ../../mod/dfrn_confirm.php:554
+#: ../../mod/dfrn_confirm.php:562
#, php-format
msgid "No user record found for '%s' "
msgstr "Für '%s' wurde kein Nutzer gefunden"
-#: ../../mod/dfrn_confirm.php:564
+#: ../../mod/dfrn_confirm.php:572
msgid "Our site encryption key is apparently messed up."
msgstr "Der Verschlüsselungsschlüssel unserer Seite ist anscheinend im Arsch."
-#: ../../mod/dfrn_confirm.php:575
+#: ../../mod/dfrn_confirm.php:583
msgid "Empty site URL was provided or URL could not be decrypted by us."
msgstr "Leere URL für die Seite erhalten oder die URL konnte nicht entschlüsselt werden."
-#: ../../mod/dfrn_confirm.php:596
+#: ../../mod/dfrn_confirm.php:604
msgid "Contact record was not found for you on our site."
msgstr "Für diesen Kontakt wurde auf unserer Seite kein Eintrag gefunden."
-#: ../../mod/dfrn_confirm.php:610
+#: ../../mod/dfrn_confirm.php:618
#, php-format
msgid "Site public key not available in contact record for URL %s."
msgstr "Die Kontaktdaten für URL %s enthalten keinen Public Key für den Server."
-#: ../../mod/dfrn_confirm.php:630
+#: ../../mod/dfrn_confirm.php:638
msgid ""
"The ID provided by your system is a duplicate on our system. It should work "
"if you try again."
msgstr "Die ID, die uns dein System angeboten hat, ist hier bereits vergeben. Bitte versuche es noch einmal."
-#: ../../mod/dfrn_confirm.php:641
+#: ../../mod/dfrn_confirm.php:649
msgid "Unable to set your contact credentials on our system."
msgstr "Deine Kontaktreferenzen konnten nicht in unserem System gespeichert werden."
-#: ../../mod/dfrn_confirm.php:706
+#: ../../mod/dfrn_confirm.php:716
msgid "Unable to update your contact profile details on our system"
msgstr "Die Updates für dein Profil konnten nicht gespeichert werden"
-#: ../../mod/dfrn_confirm.php:740
+#: ../../mod/dfrn_confirm.php:750
#, php-format
msgid "Connection accepted at %s"
msgstr "Auf %s wurde die Verbindung akzeptiert"
-#: ../../mod/dfrn_confirm.php:789
+#: ../../mod/dfrn_confirm.php:799
#, php-format
msgid "%1$s has joined %2$s"
msgstr "%1$s ist %2$s beigetreten"
-#: ../../addon/facebook/facebook.php:501
+#: ../../addon/facebook/facebook.php:509
msgid "Facebook disabled"
msgstr "Facebook deaktiviert"
-#: ../../addon/facebook/facebook.php:506
+#: ../../addon/facebook/facebook.php:514
msgid "Updating contacts"
msgstr "Aktualisiere Kontakte"
-#: ../../addon/facebook/facebook.php:529
+#: ../../addon/facebook/facebook.php:537
msgid "Facebook API key is missing."
msgstr "Facebook-API-Schlüssel nicht gefunden"
-#: ../../addon/facebook/facebook.php:536
+#: ../../addon/facebook/facebook.php:544
msgid "Facebook Connect"
msgstr "Mit Facebook verbinden"
-#: ../../addon/facebook/facebook.php:542
+#: ../../addon/facebook/facebook.php:550
msgid "Install Facebook connector for this account."
msgstr "Facebook-Connector für diesen Account installieren."
-#: ../../addon/facebook/facebook.php:549
+#: ../../addon/facebook/facebook.php:557
msgid "Remove Facebook connector"
msgstr "Facebook-Connector entfernen"
-#: ../../addon/facebook/facebook.php:554
+#: ../../addon/facebook/facebook.php:562
msgid ""
"Re-authenticate [This is necessary whenever your Facebook password is "
"changed.]"
msgstr "Neu authentifizieren [Das ist immer dann nötig, wenn Du Dein Facebook-Passwort geändert hast.]"
-#: ../../addon/facebook/facebook.php:561
+#: ../../addon/facebook/facebook.php:569
msgid "Post to Facebook by default"
msgstr "Veröffentliche standardmäßig bei Facebook"
-#: ../../addon/facebook/facebook.php:567
+#: ../../addon/facebook/facebook.php:575
msgid ""
"Facebook friend linking has been disabled on this site. The following "
"settings will have no effect."
-msgstr ""
+msgstr "Das Verlinken von Facebookkontakten wurde auf dieser Seite deaktiviert. Die folgenden Einstellungen haben keinen Effekt."
-#: ../../addon/facebook/facebook.php:571
+#: ../../addon/facebook/facebook.php:579
msgid ""
"Facebook friend linking has been disabled on this site. If you disable it, "
"you will be unable to re-enable it."
-msgstr ""
+msgstr "Das Verlinken von Facebookkontakten wurde auf dieser Seite deaktiviert. Wenn du es ausgeschaltet hast, kannst du es nicht wieder aktivieren."
-#: ../../addon/facebook/facebook.php:574
+#: ../../addon/facebook/facebook.php:582
msgid "Link all your Facebook friends and conversations on this website"
msgstr "All meine Facebook-Kontakte und -Konversationen hier auf diese Website importieren"
-#: ../../addon/facebook/facebook.php:576
+#: ../../addon/facebook/facebook.php:584
msgid ""
"Facebook conversations consist of your <em>profile wall</em> and your friend"
" <em>stream</em>."
msgstr "Facebook-Konversationen bestehen aus deinen Beiträgen auf deiner<em>Pinnwand</em>, sowie den Beiträgen deiner Freunde <em>Stream</em>."
-#: ../../addon/facebook/facebook.php:577
+#: ../../addon/facebook/facebook.php:585
msgid "On this website, your Facebook friend stream is only visible to you."
msgstr "Hier auf dieser Webseite kannst nur du die Beiträge Deiner Facebook-Freunde (Stream) sehen."
-#: ../../addon/facebook/facebook.php:578
+#: ../../addon/facebook/facebook.php:586
msgid ""
"The following settings determine the privacy of your Facebook profile wall "
"on this website."
msgstr "Mit den folgenden Einstellungen kannst Du die Privatsphäre der Kopie Deiner Facebook-Pinnwand hier auf dieser Seite einstellen."
-#: ../../addon/facebook/facebook.php:582
+#: ../../addon/facebook/facebook.php:590
msgid ""
"On this website your Facebook profile wall conversations will only be "
"visible to you"
msgstr "Meine Facebook-Pinnwand hier auf dieser Webseite nur für mich sichtbar machen"
-#: ../../addon/facebook/facebook.php:587
+#: ../../addon/facebook/facebook.php:595
msgid "Do not import your Facebook profile wall conversations"
msgstr "Facebook-Pinnwand nicht importieren"
-#: ../../addon/facebook/facebook.php:589
+#: ../../addon/facebook/facebook.php:597
msgid ""
"If you choose to link conversations and leave both of these boxes unchecked,"
" your Facebook profile wall will be merged with your profile wall on this "
@@ -4358,120 +4387,120 @@ msgid ""
"who may see the conversations."
msgstr "Wenn Du Facebook-Konversationen importierst und diese beiden Häkchen nicht setzt, wird Deine Facebook-Pinnwand mit der Pinnwand hier auf dieser Webseite vereinigt. Die Privatsphäre-Einstellungen für Deine Pinnwand auf dieser Webseite geben dann an, wer die Konversationen sehen kann."
-#: ../../addon/facebook/facebook.php:594
+#: ../../addon/facebook/facebook.php:602
msgid "Comma separated applications to ignore"
-msgstr "Komma separiert Anwendungen, die ignoriert werden sollen"
+msgstr "Kommaseparierte Anwendungen, die ignoriert werden sollen"
-#: ../../addon/facebook/facebook.php:678
+#: ../../addon/facebook/facebook.php:686
msgid "Problems with Facebook Real-Time Updates"
msgstr "Probleme mit Facebook Echtzeit-Updates"
-#: ../../addon/facebook/facebook.php:706
+#: ../../addon/facebook/facebook.php:714
#: ../../include/contact_selectors.php:81
msgid "Facebook"
msgstr "Facebook"
-#: ../../addon/facebook/facebook.php:707
+#: ../../addon/facebook/facebook.php:715
msgid "Facebook Connector Settings"
msgstr "Facebook-Verbindungseinstellungen"
-#: ../../addon/facebook/facebook.php:722
+#: ../../addon/facebook/facebook.php:730
msgid "Facebook API Key"
msgstr "Facebook API Schlüssel"
-#: ../../addon/facebook/facebook.php:732
+#: ../../addon/facebook/facebook.php:740
msgid ""
"Error: it appears that you have specified the App-ID and -Secret in your "
".htconfig.php file. As long as they are specified there, they cannot be set "
"using this form.<br><br>"
msgstr "Fehler: du scheinst die App-ID und das App-Geheimnis in deiner .htconfig.php Datei angegeben zu haben. Solange sie dort festgelegt werden kannst du dieses Formular hier nicht verwenden.<br><br>"
-#: ../../addon/facebook/facebook.php:737
+#: ../../addon/facebook/facebook.php:745
msgid ""
"Error: the given API Key seems to be incorrect (the application access token"
" could not be retrieved)."
msgstr "Fehler: der angegebene API Schlüssel scheint nicht korrekt zu sein (Zugriffstoken konnte nicht empfangen werden)."
-#: ../../addon/facebook/facebook.php:739
+#: ../../addon/facebook/facebook.php:747
msgid "The given API Key seems to work correctly."
msgstr "Der angegebene API Schlüssel scheint korrekt zu funktionieren."
-#: ../../addon/facebook/facebook.php:741
+#: ../../addon/facebook/facebook.php:749
msgid ""
"The correctness of the API Key could not be detected. Somthing strange's "
"going on."
msgstr "Die Echtheit des API Schlüssels konnte nicht überprüft werden. Etwas Merkwürdiges ist hier im Gange."
-#: ../../addon/facebook/facebook.php:744
+#: ../../addon/facebook/facebook.php:752
msgid "App-ID / API-Key"
msgstr "App-ID / API-Key"
-#: ../../addon/facebook/facebook.php:745
+#: ../../addon/facebook/facebook.php:753
msgid "Application secret"
msgstr "Anwendungs-Geheimnis"
-#: ../../addon/facebook/facebook.php:746
+#: ../../addon/facebook/facebook.php:754
#, php-format
msgid "Polling Interval in minutes (minimum %1$s minutes)"
-msgstr "Abfrage-Intervall in Minuten (min %1$s Minuten)"
+msgstr "Abfrageintervall in Minuten (min %1$s Minuten)"
-#: ../../addon/facebook/facebook.php:747
+#: ../../addon/facebook/facebook.php:755
msgid ""
"Synchronize comments (no comments on Facebook are missed, at the cost of "
"increased system load)"
-msgstr "Kommentare synchronisieren (Kein Kommentar von Facebook geht verlohren, verursacht höhere Last auf dem Server)"
+msgstr "Kommentare synchronisieren (Kein Kommentar von Facebook geht verloren, verursacht höhere Last auf dem Server)"
-#: ../../addon/facebook/facebook.php:751
+#: ../../addon/facebook/facebook.php:759
msgid "Real-Time Updates"
-msgstr "Echt-Zeit Aktualisierungen"
+msgstr "Echtzeit Aktualisierungen"
-#: ../../addon/facebook/facebook.php:755
+#: ../../addon/facebook/facebook.php:763
msgid "Real-Time Updates are activated."
msgstr "Echtzeit-Updates sind aktiviert."
-#: ../../addon/facebook/facebook.php:756
+#: ../../addon/facebook/facebook.php:764
msgid "Deactivate Real-Time Updates"
msgstr "Echtzeit-Updates deaktivieren"
-#: ../../addon/facebook/facebook.php:758
+#: ../../addon/facebook/facebook.php:766
msgid "Real-Time Updates not activated."
msgstr "Echtzeit-Updates nicht aktiviert."
-#: ../../addon/facebook/facebook.php:758
+#: ../../addon/facebook/facebook.php:766
msgid "Activate Real-Time Updates"
msgstr "Echtzeit-Updates aktivieren"
-#: ../../addon/facebook/facebook.php:777
+#: ../../addon/facebook/facebook.php:785
msgid "The new values have been saved."
msgstr "Die neuen Einstellungen wurden gespeichert."
-#: ../../addon/facebook/facebook.php:801
+#: ../../addon/facebook/facebook.php:809
msgid "Post to Facebook"
msgstr "Bei Facebook veröffentlichen"
-#: ../../addon/facebook/facebook.php:899
+#: ../../addon/facebook/facebook.php:907
msgid ""
"Post to Facebook cancelled because of multi-network access permission "
"conflict."
msgstr "Beitrag wurde nicht bei Facebook veröffentlicht, da Konflikte bei den Multi-Netzwerk-Zugriffsrechten vorliegen."
-#: ../../addon/facebook/facebook.php:1119
+#: ../../addon/facebook/facebook.php:1127
msgid "View on Friendica"
msgstr "In Friendica betrachten"
-#: ../../addon/facebook/facebook.php:1152
+#: ../../addon/facebook/facebook.php:1160
msgid "Facebook post failed. Queued for retry."
msgstr "Veröffentlichung bei Facebook gescheitert. Wir versuchen es später erneut."
-#: ../../addon/facebook/facebook.php:1192
+#: ../../addon/facebook/facebook.php:1200
msgid "Your Facebook connection became invalid. Please Re-authenticate."
msgstr "Deine Facebook Anmeldedaten sind ungültig geworden. Bitte re-authentifiziere dich."
-#: ../../addon/facebook/facebook.php:1193
+#: ../../addon/facebook/facebook.php:1201
msgid "Facebook connection became invalid"
msgstr "Facebook Anmeldedaten sind ungültig geworden"
-#: ../../addon/facebook/facebook.php:1194
+#: ../../addon/facebook/facebook.php:1202
#, php-format
msgid ""
"Hi %1$s,\n"
@@ -4479,23 +4508,23 @@ msgid ""
"The connection between your accounts on %2$s and Facebook became invalid. This usually happens after you change your Facebook-password. To enable the connection again, you have to %3$sre-authenticate the Facebook-connector%4$s."
msgstr "Hi %1$s,\n\ndie Verbindung von deinem Account auf %2$s und Facebook funktioniert derzeit nicht. Dies ist im Allgemeinen das Ergebnis einer Passwortänderung bei Facebook. Um die Verbindung wieder zu aktivieren musst du %3$sden Facebook-Connector neu Authentifizieren%4$s."
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:144
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:147
msgid "Lifetime of the cache (in hours)"
msgstr "Lebenszeit des Caches (in Stunden)"
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:149
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:152
msgid "Cache Statistics"
msgstr "Cache Statistik"
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:152
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:155
msgid "Number of items"
msgstr "Anzahl der Einträge"
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:154
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:157
msgid "Size of the cache"
msgstr "Größe des Caches"
-#: ../../addon/privacy_image_cache/privacy_image_cache.php:156
+#: ../../addon/privacy_image_cache/privacy_image_cache.php:159
msgid "Delete the whole cache"
msgstr "Cache leeren"
@@ -4593,7 +4622,7 @@ msgid ""
"setting. It is polite and recommended to tag any content containing nudity "
"with #NSFW. This filter can also match any other word/text you specify, and"
" can thereby be used as a general purpose content filter."
-msgstr "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Su kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden."
+msgstr "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Du kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden."
#: ../../addon/nsfw/nsfw.php:50
msgid "Enable Content filter"
@@ -4611,7 +4640,7 @@ msgstr "Verwende /expression/ um reguläre Ausdrücke zu verwenden"
msgid "NSFW Settings saved."
msgstr "NSFW-Einstellungen gespeichert"
-#: ../../addon/nsfw/nsfw.php:120
+#: ../../addon/nsfw/nsfw.php:121
#, php-format
msgid "%s - Click to open/close"
msgstr "%s – Zum Öffnen/Schließen klicken"
@@ -4621,8 +4650,8 @@ msgid "Forums"
msgstr "Foren"
#: ../../addon/page/page.php:63 ../../addon/showmore/showmore.php:87
-#: ../../include/contact_widgets.php:187 ../../include/conversation.php:466
-#: ../../boot.php:507
+#: ../../include/contact_widgets.php:188 ../../include/conversation.php:470
+#: ../../boot.php:515
msgid "show more"
msgstr "mehr anzeigen"
@@ -4638,7 +4667,7 @@ msgstr "Aktiviere Planeten Plugin"
#: ../../addon/communityhome/communityhome.php:34
#: ../../addon/communityhome/twillingham/communityhome.php:28
#: ../../addon/communityhome/twillingham/communityhome.php:34
-#: ../../include/nav.php:64 ../../boot.php:805
+#: ../../include/nav.php:64 ../../boot.php:813
msgid "Login"
msgstr "Anmeldung"
@@ -4666,7 +4695,7 @@ msgid "Latest likes"
msgstr "Neueste Favoriten"
#: ../../addon/communityhome/communityhome.php:155
-#: ../../view/theme/diabook/theme.php:449 ../../include/text.php:1303
+#: ../../view/theme/diabook/theme.php:562 ../../include/text.php:1313
#: ../../include/conversation.php:45 ../../include/conversation.php:118
msgid "event"
msgstr "Veranstaltung"
@@ -4818,11 +4847,23 @@ msgstr "Drupal Seite verwendet bereinigte URLs"
msgid "Post to Drupal by default"
msgstr "Veröffentliche öffentliche Beiträge standardmäßig bei Drupal"
-#: ../../addon/drpost/drpost.php:184 ../../addon/wppost/wppost.php:190
-#: ../../addon/blogger/blogger.php:172 ../../addon/posterous/posterous.php:177
+#: ../../addon/drpost/drpost.php:184 ../../addon/wppost/wppost.php:198
+#: ../../addon/blogger/blogger.php:172 ../../addon/posterous/posterous.php:192
msgid "Post from Friendica"
msgstr "Beitrag via Friendica"
+#: ../../addon/startpage/startpage.php:83
+msgid "Startpage Settings"
+msgstr "Startseiten-Einstellungen"
+
+#: ../../addon/startpage/startpage.php:85
+msgid "Home page to load after login - leave blank for profile wall"
+msgstr "Seite, die nach dem Anmelden geladen werden soll. Leer = Pinnwand"
+
+#: ../../addon/startpage/startpage.php:88
+msgid "Examples: &quot;network&quot; or &quot;notifications/system&quot;"
+msgstr "Beispiele: network, notifications/system"
+
#: ../../addon/geonames/geonames.php:143
msgid "Geonames settings updated."
msgstr "Geonames Einstellungen aktualisiert"
@@ -4835,6 +4876,24 @@ msgstr "Geonames Einstellungen"
msgid "Enable Geonames Plugin"
msgstr "Geonames Plugin aktivieren"
+#: ../../addon/public_server/public_server.php:126
+#: ../../addon/testdrive/testdrive.php:94
+#, php-format
+msgid "Your account on %s will expire in a few days."
+msgstr "Dein Konto auf %s wird in ein paar Tagen verfallen."
+
+#: ../../addon/public_server/public_server.php:127
+msgid "Your Friendica account is about to expire."
+msgstr "Dein Friendica-Account wird in Kürze auslaufen."
+
+#: ../../addon/public_server/public_server.php:128
+#, php-format
+msgid ""
+"Hi %1$s,\n"
+"\n"
+"Your account on %2$s will expire in less than five days. You may keep your account by logging in at least once every 30 days"
+msgstr "Hallo %1$s,\n\ndein Account auf %2$s wird in weniger als fünf Tagen auslaufen. Du kannst das verhindern, indem du dich mindestens einmal alle 30 Tage anmeldest."
+
#: ../../addon/js_upload/js_upload.php:43
msgid "Upload a file"
msgstr "Datei hochladen"
@@ -4904,7 +4963,7 @@ msgstr "Das Impressums-Plugin muss noch konfiguriert werden.<br />Bitte gebe min
#: ../../addon/impressum/impressum.php:83
msgid "The page operators name."
-msgstr "Name des Server-Administrators"
+msgstr "Name des Serveradministrators"
#: ../../addon/impressum/impressum.php:84
msgid "Site Owners Profile"
@@ -4912,7 +4971,7 @@ msgstr "Profil des Seitenbetreibers"
#: ../../addon/impressum/impressum.php:84
msgid "Profile address of the operator."
-msgstr "Profil-Adresse des Server-Administrators"
+msgstr "Profil-Adresse des Serveradministrators"
#: ../../addon/impressum/impressum.php:85
msgid "How to contact the operator via snail mail. You can use BBCode here."
@@ -4930,7 +4989,7 @@ msgstr "Zusätzliche Informationen die neben den Kontaktmöglichkeiten angezeigt
#: ../../addon/impressum/impressum.php:87
msgid "How to contact the operator via email. (will be displayed obfuscated)"
-msgstr "Wie erreichts man den Betreiber per Email. (Adresse wird verschleiert dargestellt)"
+msgstr "Wie man den Betreiber per Email erreicht. (Adresse wird verschleiert dargestellt)"
#: ../../addon/impressum/impressum.php:88
msgid "Footer note"
@@ -4993,7 +5052,7 @@ msgstr "Schnell-Kommentar Einstellungen"
msgid ""
"Quick comments are found near comment boxes, sometimes hidden. Click them to"
" provide simple replies."
-msgstr "Kurz-Kommentare findet man in der Nähe der Kommentar-Boxen. Ein Klick darauf erstellt einfache Antworten."
+msgstr "Kurzkommentare findet man in der Nähe der Kommentarboxen. Ein Klick darauf erstellt einfache Antworten."
#: ../../addon/qcomment/qcomment.php:57
msgid "Enter quick comments, one per line"
@@ -5026,7 +5085,7 @@ msgid ""
"The MathJax addon renders mathematical formulae written using the LaTeX "
"syntax surrounded by the usual $$ or an eqnarray block in the postings of "
"your wall,network tab and private mail."
-msgstr "Mit dem MathJax Addon können mathematische Formeln, die mit LaTeX geschrieben wurden, dargestellt werden. Die Formel wird mit den üblichen $$ oder einem eqnarray Block gekennzeichnet. Formeln werden in allen Beiträgen auf deiner Pinnwand, dem Netzwerk-Stream sowie privaten Nachrichten gerendert."
+msgstr "Mit dem MathJax Addon können mathematische Formeln, die mit LaTeX geschrieben wurden, dargestellt werden. Die Formel wird mit den üblichen $$ oder einem eqnarray Block gekennzeichnet. Formeln werden in allen Beiträgen auf deiner Pinnwand, dem Netzwerkstream sowie privaten Nachrichten gerendert."
#: ../../addon/mathjax/mathjax.php:38
msgid "Use the MathJax renderer"
@@ -5094,16 +5153,11 @@ msgstr "Wähle eine angemessene Bildbewertung für Deinen Server. Schaue auch so
msgid "Gravatar settings updated."
msgstr "Gravatar Einstellungen aktualisiert."
-#: ../../addon/testdrive/testdrive.php:85
-#, php-format
-msgid "Your account on %s will expire in a few days."
-msgstr "Dein Konto auf %s wird in ein paar Tagen verfallen."
-
-#: ../../addon/testdrive/testdrive.php:86
+#: ../../addon/testdrive/testdrive.php:95
msgid "Your Friendica test account is about to expire."
msgstr "Dein Friendica Test Konto wird bald verfallen."
-#: ../../addon/testdrive/testdrive.php:87
+#: ../../addon/testdrive/testdrive.php:96
#, php-format
msgid ""
"Hi %1$s,\n"
@@ -5261,14 +5315,14 @@ msgid "Send public postings to StatusNet by default"
msgstr "Veröffentliche öffentliche Beiträge standardmäßig bei StatusNet"
#: ../../addon/statusnet/statusnet.php:345
-msgid "Send #tag links to StatusNet"
-msgstr "#Tags nach StatusNet senden"
+msgid "Send linked #-tags and @-names to StatusNet"
+msgstr "Sende verlinkte #-Tags und @-Namen nach StatusNet"
#: ../../addon/statusnet/statusnet.php:350 ../../addon/twitter/twitter.php:206
msgid "Clear OAuth configuration"
msgstr "OAuth-Konfiguration löschen"
-#: ../../addon/statusnet/statusnet.php:545
+#: ../../addon/statusnet/statusnet.php:553
msgid "API URL"
msgstr "API-URL"
@@ -5335,30 +5389,38 @@ msgstr "[Friendica Meldung] Kommentar zum Beitrag #%d"
msgid "Post to Wordpress"
msgstr "Bei WordPress veröffentlichen"
-#: ../../addon/wppost/wppost.php:74
+#: ../../addon/wppost/wppost.php:76
msgid "WordPress Post Settings"
msgstr "WordPress-Beitragseinstellungen"
-#: ../../addon/wppost/wppost.php:76
+#: ../../addon/wppost/wppost.php:78
msgid "Enable WordPress Post Plugin"
msgstr "WordPress-Plugin aktivieren."
-#: ../../addon/wppost/wppost.php:81
+#: ../../addon/wppost/wppost.php:83
msgid "WordPress username"
msgstr "WordPress-Benutzername"
-#: ../../addon/wppost/wppost.php:86
+#: ../../addon/wppost/wppost.php:88
msgid "WordPress password"
msgstr "WordPress-Passwort"
-#: ../../addon/wppost/wppost.php:91
+#: ../../addon/wppost/wppost.php:93
msgid "WordPress API URL"
msgstr "WordPress-API-URL"
-#: ../../addon/wppost/wppost.php:96
+#: ../../addon/wppost/wppost.php:98
msgid "Post to WordPress by default"
msgstr "Standardmäßig auf WordPress veröffentlichen"
+#: ../../addon/wppost/wppost.php:102
+msgid "Provide a backlink to the Friendica post"
+msgstr "Einen zurück zum Friendica-Beitrag hinzufügen"
+
+#: ../../addon/wppost/wppost.php:204
+msgid "Read the original post and comment stream on Friendica"
+msgstr "Den Original-Beitrag samt Kommentaren bei Friendica lesen"
+
#: ../../addon/showmore/showmore.php:38
msgid "\"Show more\" Settings"
msgstr "\"Mehr zeigen\" Einstellungen"
@@ -5470,14 +5532,14 @@ msgid "Send public postings to Twitter by default"
msgstr "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter"
#: ../../addon/twitter/twitter.php:201
-msgid "Send #tag links to Twitter"
-msgstr "#Tags nach Twitter senden"
+msgid "Send linked #-tags and @-names to Twitter"
+msgstr "Sende verlinkte #-Tags und @-Namen nach Twitter"
-#: ../../addon/twitter/twitter.php:377
+#: ../../addon/twitter/twitter.php:383
msgid "Consumer key"
msgstr "Consumer Key"
-#: ../../addon/twitter/twitter.php:378
+#: ../../addon/twitter/twitter.php:384
msgid "Consumer secret"
msgstr "Consumer Secret"
@@ -5533,42 +5595,51 @@ msgstr "Blogger-API-URL"
msgid "Post to Blogger by default"
msgstr "Standardmäßig auf Blogger posten"
-#: ../../addon/posterous/posterous.php:36
+#: ../../addon/posterous/posterous.php:37
msgid "Post to Posterous"
msgstr "Nach Posterous senden"
-#: ../../addon/posterous/posterous.php:67
+#: ../../addon/posterous/posterous.php:70
msgid "Posterous Post Settings"
msgstr "Posterous Beitrags-Einstellungen"
-#: ../../addon/posterous/posterous.php:69
+#: ../../addon/posterous/posterous.php:72
msgid "Enable Posterous Post Plugin"
msgstr "Posterous-Plugin aktivieren"
-#: ../../addon/posterous/posterous.php:74
+#: ../../addon/posterous/posterous.php:77
msgid "Posterous login"
msgstr "Posterous-Anmeldename"
-#: ../../addon/posterous/posterous.php:79
+#: ../../addon/posterous/posterous.php:82
msgid "Posterous password"
msgstr "Posterous-Passwort"
-#: ../../addon/posterous/posterous.php:84
+#: ../../addon/posterous/posterous.php:87
+msgid "Posterous site ID"
+msgstr "Posterous site ID"
+
+#: ../../addon/posterous/posterous.php:92
+msgid "Posterous API token"
+msgstr "Posterous API token"
+
+#: ../../addon/posterous/posterous.php:97
msgid "Post to Posterous by default"
msgstr "Veröffentliche öffentliche Beiträge standardmäßig bei Posterous"
#: ../../view/theme/cleanzero/config.php:82
-#: ../../view/theme/diabook/config.php:97
+#: ../../view/theme/diabook/config.php:192
#: ../../view/theme/quattro/config.php:54 ../../view/theme/dispy/config.php:72
msgid "Theme settings"
-msgstr "Themen Einstellungen"
+msgstr "Themeneinstellungen"
#: ../../view/theme/cleanzero/config.php:83
msgid "Set resize level for images in posts and comments (width and height)"
msgstr "Wähle das Vergrößerungsmaß für Bilder in Beiträgen und Kommentaren (Höhe und Breite)"
#: ../../view/theme/cleanzero/config.php:84
-#: ../../view/theme/diabook/config.php:98 ../../view/theme/dispy/config.php:73
+#: ../../view/theme/diabook/config.php:193
+#: ../../view/theme/dispy/config.php:73
msgid "Set font-size for posts and comments"
msgstr "Schriftgröße für Beiträge und Kommentare festlegen"
@@ -5581,105 +5652,177 @@ msgstr "Theme Breite festlegen"
msgid "Color scheme"
msgstr "Farbschema"
-#: ../../view/theme/diabook/theme.php:65 ../../include/nav.php:49
+#: ../../view/theme/diabook/theme.php:127 ../../include/nav.php:49
#: ../../include/nav.php:115
msgid "Your posts and conversations"
msgstr "Deine Beiträge und Unterhaltungen"
-#: ../../view/theme/diabook/theme.php:66 ../../include/nav.php:50
+#: ../../view/theme/diabook/theme.php:128 ../../include/nav.php:50
msgid "Your profile page"
msgstr "Deine Profilseite"
-#: ../../view/theme/diabook/theme.php:67
+#: ../../view/theme/diabook/theme.php:129
msgid "Your contacts"
msgstr "Deine Kontakte"
-#: ../../view/theme/diabook/theme.php:68 ../../include/nav.php:51
+#: ../../view/theme/diabook/theme.php:130 ../../include/nav.php:51
msgid "Your photos"
msgstr "Deine Fotos"
-#: ../../view/theme/diabook/theme.php:69 ../../include/nav.php:52
+#: ../../view/theme/diabook/theme.php:131 ../../include/nav.php:52
msgid "Your events"
msgstr "Deine Ereignisse"
-#: ../../view/theme/diabook/theme.php:70 ../../include/nav.php:53
+#: ../../view/theme/diabook/theme.php:132 ../../include/nav.php:53
msgid "Personal notes"
msgstr "Persönliche Notizen"
-#: ../../view/theme/diabook/theme.php:70 ../../include/nav.php:53
+#: ../../view/theme/diabook/theme.php:132 ../../include/nav.php:53
msgid "Your personal photos"
msgstr "Deine privaten Fotos"
-#: ../../view/theme/diabook/theme.php:72
-#: ../../view/theme/diabook/theme.php:530
+#: ../../view/theme/diabook/theme.php:134
+#: ../../view/theme/diabook/theme.php:643
+#: ../../view/theme/diabook/theme.php:747
+#: ../../view/theme/diabook/config.php:201
msgid "Community Pages"
msgstr "Foren"
-#: ../../view/theme/diabook/theme.php:377
+#: ../../view/theme/diabook/theme.php:490
+#: ../../view/theme/diabook/theme.php:749
+#: ../../view/theme/diabook/config.php:203
msgid "Community Profiles"
msgstr "Community-Profile"
-#: ../../view/theme/diabook/theme.php:398
+#: ../../view/theme/diabook/theme.php:511
+#: ../../view/theme/diabook/theme.php:754
+#: ../../view/theme/diabook/config.php:208
msgid "Last users"
msgstr "Letzte Nutzer"
-#: ../../view/theme/diabook/theme.php:427
+#: ../../view/theme/diabook/theme.php:540
+#: ../../view/theme/diabook/theme.php:756
+#: ../../view/theme/diabook/config.php:210
msgid "Last likes"
msgstr "Zuletzt gemocht"
-#: ../../view/theme/diabook/theme.php:472
+#: ../../view/theme/diabook/theme.php:585
+#: ../../view/theme/diabook/theme.php:755
+#: ../../view/theme/diabook/config.php:209
msgid "Last photos"
msgstr "Letzte Fotos"
-#: ../../view/theme/diabook/theme.php:509
+#: ../../view/theme/diabook/theme.php:622
+#: ../../view/theme/diabook/theme.php:752
+#: ../../view/theme/diabook/config.php:206
msgid "Find Friends"
msgstr "Freunde finden"
-#: ../../view/theme/diabook/theme.php:510
+#: ../../view/theme/diabook/theme.php:623
msgid "Local Directory"
msgstr "Lokales Verzeichnis"
-#: ../../view/theme/diabook/theme.php:512 ../../include/contact_widgets.php:35
+#: ../../view/theme/diabook/theme.php:625 ../../include/contact_widgets.php:35
msgid "Similar Interests"
msgstr "Ähnliche Interessen"
-#: ../../view/theme/diabook/theme.php:514 ../../include/contact_widgets.php:37
+#: ../../view/theme/diabook/theme.php:627 ../../include/contact_widgets.php:37
msgid "Invite Friends"
msgstr "Freunde einladen"
-#: ../../view/theme/diabook/theme.php:565
-msgid "Earth View"
-msgstr "Earth View"
-
-#: ../../view/theme/diabook/theme.php:573
+#: ../../view/theme/diabook/theme.php:678
+#: ../../view/theme/diabook/theme.php:748
+#: ../../view/theme/diabook/config.php:202
+msgid "Earth Layers"
+msgstr "Earth Layers"
+
+#: ../../view/theme/diabook/theme.php:683
+msgid "Set zoomfactor for Earth Layers"
+msgstr "Zoomfaktor der Earth Layer"
+
+#: ../../view/theme/diabook/theme.php:684
+#: ../../view/theme/diabook/config.php:199
+msgid "Set longitude (X) for Earth Layers"
+msgstr "Longitude (X) der Earth Layer"
+
+#: ../../view/theme/diabook/theme.php:685
+#: ../../view/theme/diabook/config.php:200
+msgid "Set latitude (Y) for Earth Layers"
+msgstr "Latitude (Y) der Earth Layer"
+
+#: ../../view/theme/diabook/theme.php:698
+#: ../../view/theme/diabook/theme.php:750
+#: ../../view/theme/diabook/config.php:204
msgid "Help or @NewHere ?"
msgstr "Hilfe oder @NewHere"
-#: ../../view/theme/diabook/theme.php:580
+#: ../../view/theme/diabook/theme.php:705
+#: ../../view/theme/diabook/theme.php:751
+#: ../../view/theme/diabook/config.php:205
msgid "Connect Services"
msgstr "Verbinde Dienste"
-#: ../../view/theme/diabook/theme.php:587
+#: ../../view/theme/diabook/theme.php:712
+#: ../../view/theme/diabook/theme.php:753
msgid "Last Tweets"
msgstr "Neueste Tweets"
-#: ../../view/theme/diabook/theme.php:591
-#: ../../view/theme/diabook/config.php:102
+#: ../../view/theme/diabook/theme.php:715
+#: ../../view/theme/diabook/config.php:197
msgid "Set twitter search term"
-msgstr ""
+msgstr "Twitter Suchbegriff"
+
+#: ../../view/theme/diabook/theme.php:735
+#: ../../view/theme/diabook/theme.php:736
+#: ../../view/theme/diabook/theme.php:737
+#: ../../view/theme/diabook/theme.php:738
+#: ../../view/theme/diabook/theme.php:739
+#: ../../view/theme/diabook/theme.php:740
+#: ../../view/theme/diabook/theme.php:741
+#: ../../view/theme/diabook/theme.php:742
+#: ../../view/theme/diabook/theme.php:743
+#: ../../view/theme/diabook/theme.php:744 ../../include/acl_selectors.php:288
+msgid "don't show"
+msgstr "nicht zeigen"
-#: ../../view/theme/diabook/config.php:99 ../../view/theme/dispy/config.php:74
+#: ../../view/theme/diabook/theme.php:735
+#: ../../view/theme/diabook/theme.php:736
+#: ../../view/theme/diabook/theme.php:737
+#: ../../view/theme/diabook/theme.php:738
+#: ../../view/theme/diabook/theme.php:739
+#: ../../view/theme/diabook/theme.php:740
+#: ../../view/theme/diabook/theme.php:741
+#: ../../view/theme/diabook/theme.php:742
+#: ../../view/theme/diabook/theme.php:743
+#: ../../view/theme/diabook/theme.php:744 ../../include/acl_selectors.php:287
+msgid "show"
+msgstr "zeigen"
+
+#: ../../view/theme/diabook/theme.php:745
+msgid "Show/hide boxes at right-hand column:"
+msgstr "Rahmen auf der rechten Seite anzeigen/verbergen"
+
+#: ../../view/theme/diabook/config.php:194
+#: ../../view/theme/dispy/config.php:74
msgid "Set line-height for posts and comments"
msgstr "Liniengröße für Beiträge und Kommantare festlegen"
-#: ../../view/theme/diabook/config.php:100
+#: ../../view/theme/diabook/config.php:195
msgid "Set resolution for middle column"
msgstr "Auflösung für die Mittelspalte setzen"
-#: ../../view/theme/diabook/config.php:101
+#: ../../view/theme/diabook/config.php:196
msgid "Set color scheme"
msgstr "Wähle Farbschema"
+#: ../../view/theme/diabook/config.php:198
+msgid "Set zoomfactor for Earth Layer"
+msgstr "Zoomfaktor der Earth Layer"
+
+#: ../../view/theme/diabook/config.php:207
+msgid "Last tweets"
+msgstr "Neueste Tweets"
+
#: ../../view/theme/quattro/config.php:55
msgid "Alignment"
msgstr "Ausrichtung"
@@ -5696,7 +5839,7 @@ msgstr "Mitte"
msgid "Set colour scheme"
msgstr "Farbschema wählen"
-#: ../../include/profile_advanced.php:17 ../../boot.php:1094
+#: ../../include/profile_advanced.php:17 ../../boot.php:1102
msgid "Gender:"
msgstr "Geschlecht:"
@@ -5708,8 +5851,8 @@ msgstr "j F, Y"
msgid "j F"
msgstr "j F"
-#: ../../include/profile_advanced.php:30 ../../include/datetime.php:448
-#: ../../include/items.php:1403
+#: ../../include/profile_advanced.php:30 ../../include/datetime.php:450
+#: ../../include/items.php:1423
msgid "Birthday:"
msgstr "Geburtstag:"
@@ -5717,59 +5860,64 @@ msgstr "Geburtstag:"
msgid "Age:"
msgstr "Alter:"
-#: ../../include/profile_advanced.php:37 ../../boot.php:1097
+#: ../../include/profile_advanced.php:37 ../../boot.php:1105
msgid "Status:"
msgstr "Status:"
-#: ../../include/profile_advanced.php:45 ../../boot.php:1099
+#: ../../include/profile_advanced.php:43
+#, php-format
+msgid "for %1$d %2$s"
+msgstr "für %1$d %2$s"
+
+#: ../../include/profile_advanced.php:48 ../../boot.php:1107
msgid "Homepage:"
msgstr "Homepage:"
-#: ../../include/profile_advanced.php:47
+#: ../../include/profile_advanced.php:50
msgid "Tags:"
msgstr "Tags"
-#: ../../include/profile_advanced.php:51
+#: ../../include/profile_advanced.php:54
msgid "Religion:"
msgstr "Religion:"
-#: ../../include/profile_advanced.php:53
+#: ../../include/profile_advanced.php:56
msgid "About:"
msgstr "Ãœber:"
-#: ../../include/profile_advanced.php:55
+#: ../../include/profile_advanced.php:58
msgid "Hobbies/Interests:"
msgstr "Hobbies/Interessen:"
-#: ../../include/profile_advanced.php:57
+#: ../../include/profile_advanced.php:60
msgid "Contact information and Social Networks:"
msgstr "Kontaktinformationen und Soziale Netzwerke:"
-#: ../../include/profile_advanced.php:59
+#: ../../include/profile_advanced.php:62
msgid "Musical interests:"
msgstr "Musikalische Interessen:"
-#: ../../include/profile_advanced.php:61
+#: ../../include/profile_advanced.php:64
msgid "Books, literature:"
msgstr "Literatur/Bücher:"
-#: ../../include/profile_advanced.php:63
+#: ../../include/profile_advanced.php:66
msgid "Television:"
msgstr "Fernsehen:"
-#: ../../include/profile_advanced.php:65
+#: ../../include/profile_advanced.php:68
msgid "Film/dance/culture/entertainment:"
msgstr "Filme/Tänze/Kultur/Unterhaltung:"
-#: ../../include/profile_advanced.php:67
+#: ../../include/profile_advanced.php:70
msgid "Love/Romance:"
msgstr "Liebesleben:"
-#: ../../include/profile_advanced.php:69
+#: ../../include/profile_advanced.php:72
msgid "Work/employment:"
msgstr "Arbeit/Beschäftigung:"
-#: ../../include/profile_advanced.php:71
+#: ../../include/profile_advanced.php:74
msgid "School/education:"
msgstr "Schule/Ausbildung:"
@@ -5901,196 +6049,196 @@ msgstr "Andere"
msgid "Undecided"
msgstr "Unentschieden"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Males"
msgstr "Männer"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Females"
msgstr "Frauen"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Gay"
msgstr "Schwul"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Lesbian"
msgstr "Lesbisch"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "No Preference"
msgstr "Keine Vorlieben"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Bisexual"
msgstr "Bisexuell"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Autosexual"
msgstr "Autosexual"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Abstinent"
msgstr "Abstinent"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Virgin"
msgstr "Jungfrauen"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Deviant"
msgstr "Deviant"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Fetish"
msgstr "Fetish"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Oodles"
msgstr "Oodles"
-#: ../../include/profile_selectors.php:21
+#: ../../include/profile_selectors.php:23
msgid "Nonsexual"
msgstr "Nonsexual"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Single"
msgstr "Single"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Lonely"
msgstr "Einsam"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Available"
msgstr "Verfügbar"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Unavailable"
msgstr "Nicht verfügbar"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Has crush"
msgstr "verknallt"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Infatuated"
msgstr "verliebt"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Dating"
msgstr "Dating"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Unfaithful"
msgstr "Untreu"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Sex Addict"
msgstr "Sexbesessen"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42 ../../include/user.php:272
msgid "Friends"
msgstr "Freunde"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Friends/Benefits"
msgstr "Freunde/Zuwendungen"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Casual"
msgstr "Casual"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Engaged"
msgstr "Verlobt"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Married"
msgstr "Verheiratet"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Imaginarily married"
msgstr "imaginär verheiratet"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Partners"
msgstr "Partner"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Cohabiting"
msgstr "zusammenlebend"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Common law"
msgstr "wilde Ehe"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Happy"
msgstr "Glücklich"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Not looking"
msgstr "Nicht auf der Suche"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Swinger"
msgstr "Swinger"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Betrayed"
msgstr "Betrogen"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Separated"
msgstr "Getrennt"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Unstable"
msgstr "Unstabil"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Divorced"
msgstr "Geschieden"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Imaginarily divorced"
msgstr "imaginär geschieden"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Widowed"
msgstr "Verwitwet"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Uncertain"
msgstr "Unsicher"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "It's complicated"
msgstr "Ist kompliziert"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Don't care"
msgstr "Ist mir nicht wichtig"
-#: ../../include/profile_selectors.php:37
+#: ../../include/profile_selectors.php:42
msgid "Ask me"
msgstr "Frag mich"
-#: ../../include/event.php:17 ../../include/bb2diaspora.php:244
+#: ../../include/event.php:17 ../../include/bb2diaspora.php:249
msgid "Starts:"
msgstr "Beginnt:"
-#: ../../include/event.php:27 ../../include/bb2diaspora.php:252
+#: ../../include/event.php:27 ../../include/bb2diaspora.php:257
msgid "Finishes:"
msgstr "Endet:"
-#: ../../include/delivery.php:445 ../../include/notifier.php:652
+#: ../../include/delivery.php:455 ../../include/notifier.php:677
msgid "(no subject)"
msgstr "(kein Betreff)"
-#: ../../include/delivery.php:452 ../../include/enotify.php:23
-#: ../../include/notifier.php:659
+#: ../../include/delivery.php:462 ../../include/enotify.php:23
+#: ../../include/notifier.php:684
msgid "noreply"
msgstr "noreply"
@@ -6121,143 +6269,139 @@ msgid_plural "%d Contacts"
msgstr[0] "%d Kontakt"
msgstr[1] "%d Kontakte"
-#: ../../include/text.php:650 ../../include/nav.php:91
-msgid "Search"
-msgstr "Suche"
-
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Monday"
msgstr "Montag"
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Tuesday"
msgstr "Dienstag"
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Wednesday"
msgstr "Mittwoch"
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Thursday"
msgstr "Donnerstag"
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Friday"
msgstr "Freitag"
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Saturday"
msgstr "Samstag"
-#: ../../include/text.php:831
+#: ../../include/text.php:835
msgid "Sunday"
msgstr "Sonntag"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "January"
msgstr "Januar"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "February"
msgstr "Februar"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "March"
msgstr "März"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "April"
msgstr "April"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "May"
msgstr "Mai"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "June"
msgstr "Juni"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "July"
msgstr "Juli"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "August"
msgstr "August"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "September"
msgstr "September"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "October"
msgstr "Oktober"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "November"
msgstr "November"
-#: ../../include/text.php:835
+#: ../../include/text.php:839
msgid "December"
msgstr "Dezember"
-#: ../../include/text.php:919
+#: ../../include/text.php:924
msgid "bytes"
msgstr "Byte"
-#: ../../include/text.php:934 ../../include/text.php:949
+#: ../../include/text.php:944 ../../include/text.php:959
msgid "remove"
msgstr "löschen"
-#: ../../include/text.php:934 ../../include/text.php:949
+#: ../../include/text.php:944 ../../include/text.php:959
msgid "[remove]"
msgstr "[löschen]"
-#: ../../include/text.php:937
+#: ../../include/text.php:947
msgid "Categories:"
msgstr "Kategorien:"
-#: ../../include/text.php:952
+#: ../../include/text.php:962
msgid "Filed under:"
msgstr "Abgelegt unter:"
-#: ../../include/text.php:968 ../../include/text.php:980
+#: ../../include/text.php:978 ../../include/text.php:990
msgid "Click to open/close"
msgstr "Zum öffnen/schließen klicken"
-#: ../../include/text.php:1085
+#: ../../include/text.php:1095 ../../include/user.php:230
msgid "default"
msgstr "standard"
-#: ../../include/text.php:1097
+#: ../../include/text.php:1107
msgid "Select an alternate language"
msgstr "Alternative Sprache auswählen"
-#: ../../include/text.php:1307
+#: ../../include/text.php:1317
msgid "activity"
msgstr "Aktivität"
-#: ../../include/text.php:1309
+#: ../../include/text.php:1319
msgid "comment"
msgstr "Kommentar"
-#: ../../include/text.php:1310
+#: ../../include/text.php:1320
msgid "post"
msgstr "Beitrag"
-#: ../../include/text.php:1465
+#: ../../include/text.php:1475
msgid "Item filed"
msgstr "Beitrag abgelegt"
-#: ../../include/diaspora.php:582
+#: ../../include/diaspora.php:590
msgid "Sharing notification from Diaspora network"
msgstr "Freigabe-Benachrichtigung von Diaspora"
-#: ../../include/diaspora.php:1969
+#: ../../include/diaspora.php:1977
msgid "Attachments:"
msgstr "Anhänge:"
-#: ../../include/diaspora.php:2152
+#: ../../include/diaspora.php:2168
#, php-format
msgid "[Relayed] Comment authored by %s from network %s"
msgstr "[Weitergeleitet] Kommentar von %s aus dem %s Netzwerk"
@@ -6281,31 +6425,35 @@ msgid ""
"not what you intended, please create another group with a different name."
msgstr "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen <strong>könnten</strong> auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen."
-#: ../../include/group.php:168
+#: ../../include/group.php:176
+msgid "Default privacy group for new contacts"
+msgstr "Voreingestellte Gruppe für neue Kontakte"
+
+#: ../../include/group.php:195
msgid "Everybody"
msgstr "Alle Kontakte"
-#: ../../include/group.php:191
+#: ../../include/group.php:218
msgid "edit"
msgstr "bearbeiten"
-#: ../../include/group.php:212
+#: ../../include/group.php:239
msgid "Groups"
msgstr "Gruppen"
-#: ../../include/group.php:213
+#: ../../include/group.php:240
msgid "Edit group"
msgstr "Gruppe bearbeiten"
-#: ../../include/group.php:214
+#: ../../include/group.php:241
msgid "Create a new group"
msgstr "Neue Gruppe erstellen"
-#: ../../include/group.php:215
+#: ../../include/group.php:242
msgid "Contacts not in any group"
msgstr "Kontakte in keiner Gruppe"
-#: ../../include/nav.php:46 ../../boot.php:804
+#: ../../include/nav.php:46 ../../boot.php:812
msgid "Logout"
msgstr "Abmelden"
@@ -6313,7 +6461,7 @@ msgstr "Abmelden"
msgid "End this session"
msgstr "Diese Sitzung beenden"
-#: ../../include/nav.php:49 ../../boot.php:1472
+#: ../../include/nav.php:49 ../../boot.php:1499
msgid "Status"
msgstr "Status"
@@ -6371,7 +6519,7 @@ msgstr "Alle Benachrichtigungen anzeigen"
#: ../../include/nav.php:124
msgid "Mark all system notifications seen"
-msgstr "Markiere alle System-Benachrichtigungen als gelesen"
+msgstr "Markiere alle Systembenachrichtigungen als gelesen"
#: ../../include/nav.php:128
msgid "Private mail"
@@ -6393,11 +6541,11 @@ msgstr "Verwalten"
msgid "Manage other pages"
msgstr "Andere Seiten verwalten"
-#: ../../include/nav.php:138 ../../boot.php:1052
+#: ../../include/nav.php:138 ../../boot.php:1060
msgid "Profiles"
msgstr "Profile"
-#: ../../include/nav.php:138 ../../boot.php:1052
+#: ../../include/nav.php:138 ../../boot.php:1060
msgid "Manage/edit profiles"
msgstr "Profile verwalten/editieren"
@@ -6476,17 +6624,17 @@ msgstr "Alles"
msgid "Categories"
msgstr "Kategorien"
-#: ../../include/auth.php:29
+#: ../../include/auth.php:36
msgid "Logged out."
msgstr "Abgemeldet."
-#: ../../include/auth.php:106
+#: ../../include/auth.php:115
msgid ""
"We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID."
-msgstr "Beim versuch dich mit der von dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe dass du die OpenID richtig geschrieben hast."
+msgstr "Beim Versuch dich mit der von dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass du die OpenID richtig geschrieben hast."
-#: ../../include/auth.php:106
+#: ../../include/auth.php:115
msgid "The error message was:"
msgstr "Die Fehlermeldung lautete:"
@@ -6558,12 +6706,12 @@ msgstr "Sekunde"
msgid "seconds"
msgstr "Sekunden"
-#: ../../include/datetime.php:277
+#: ../../include/datetime.php:278
#, php-format
msgid "%1$d %2$s ago"
msgstr "%1$d %2$s her"
-#: ../../include/onepoll.php:402
+#: ../../include/onepoll.php:406
msgid "From: "
msgstr "Von: "
@@ -6588,14 +6736,6 @@ msgstr "[kein Betreff]"
msgid "Visible to everybody"
msgstr "Für jeden sichtbar"
-#: ../../include/acl_selectors.php:287
-msgid "show"
-msgstr "zeigen"
-
-#: ../../include/acl_selectors.php:288
-msgid "don't show"
-msgstr "nicht zeigen"
-
#: ../../include/enotify.php:14
msgid "Friendica Notification"
msgstr "Friendica-Benachrichtigung"
@@ -6784,11 +6924,11 @@ msgstr "Foto:"
msgid "Please visit %s to approve or reject the suggestion."
msgstr "Bitte besuche %s, um den Vorschlag zu akzeptieren oder abzulehnen."
-#: ../../include/items.php:2714
+#: ../../include/items.php:2740
msgid "A new person is sharing with you at "
msgstr "Eine neue Person teilt mit dir auf "
-#: ../../include/items.php:2714
+#: ../../include/items.php:2740
msgid "You have a new follower at "
msgstr "Du hast einen neuen Kontakt auf "
@@ -6801,6 +6941,74 @@ msgstr "Bild/Foto"
msgid "link"
msgstr "Verweis"
+#: ../../include/user.php:38
+msgid "An invitation is required."
+msgstr "Du benötigst eine Einladung."
+
+#: ../../include/user.php:43
+msgid "Invitation could not be verified."
+msgstr "Die Einladung konnte nicht überprüft werden."
+
+#: ../../include/user.php:51
+msgid "Invalid OpenID url"
+msgstr "Ungültige OpenID URL"
+
+#: ../../include/user.php:66
+msgid "Please enter the required information."
+msgstr "Bitte trage die erforderlichen Informationen ein."
+
+#: ../../include/user.php:80
+msgid "Please use a shorter name."
+msgstr "Bitte verwende einen kürzeren Namen."
+
+#: ../../include/user.php:82
+msgid "Name too short."
+msgstr "Der Name ist zu kurz."
+
+#: ../../include/user.php:97
+msgid "That doesn't appear to be your full (First Last) name."
+msgstr "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein."
+
+#: ../../include/user.php:102
+msgid "Your email domain is not among those allowed on this site."
+msgstr "Die Domain deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt."
+
+#: ../../include/user.php:105
+msgid "Not a valid email address."
+msgstr "Keine gültige E-Mail-Adresse."
+
+#: ../../include/user.php:115
+msgid "Cannot use that email."
+msgstr "Konnte diese E-Mail-Adresse nicht verwenden."
+
+#: ../../include/user.php:121
+msgid ""
+"Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and "
+"must also begin with a letter."
+msgstr "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen."
+
+#: ../../include/user.php:127 ../../include/user.php:219
+msgid "Nickname is already registered. Please choose another."
+msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
+
+#: ../../include/user.php:137
+msgid ""
+"Nickname was once registered here and may not be re-used. Please choose "
+"another."
+msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen."
+
+#: ../../include/user.php:153
+msgid "SERIOUS ERROR: Generation of security keys failed."
+msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden."
+
+#: ../../include/user.php:205
+msgid "An error occurred during registration. Please try again."
+msgstr "Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
+
+#: ../../include/user.php:240
+msgid "An error occurred creating your default profile. Please try again."
+msgstr "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal."
+
#: ../../include/security.php:21
msgid "Welcome "
msgstr "Willkommen "
@@ -6817,36 +7025,36 @@ msgstr "Willkommen zurück "
msgid ""
"The form security token was not correct. This probably happened because the "
"form has been opened for too long (>3 hours) before submitting it."
-msgstr "Das Sicherheits-Merkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden)."
+msgstr "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden)."
#: ../../include/Contact.php:111
msgid "stopped following"
msgstr "wird nicht mehr gefolgt"
-#: ../../include/Contact.php:203 ../../include/conversation.php:817
+#: ../../include/Contact.php:203 ../../include/conversation.php:836
msgid "View Status"
msgstr "Pinnwand anschauen"
-#: ../../include/Contact.php:204 ../../include/conversation.php:818
+#: ../../include/Contact.php:204 ../../include/conversation.php:837
msgid "View Profile"
msgstr "Profil anschauen"
-#: ../../include/Contact.php:205 ../../include/conversation.php:819
+#: ../../include/Contact.php:205 ../../include/conversation.php:838
msgid "View Photos"
msgstr "Bilder anschauen"
#: ../../include/Contact.php:206 ../../include/Contact.php:219
-#: ../../include/conversation.php:820
+#: ../../include/conversation.php:839
msgid "Network Posts"
-msgstr "Netzwerk-Beiträge"
+msgstr "Netzwerkbeiträge"
#: ../../include/Contact.php:207 ../../include/Contact.php:219
-#: ../../include/conversation.php:821
+#: ../../include/conversation.php:840
msgid "Edit Contact"
msgstr "Kontakt bearbeiten"
#: ../../include/Contact.php:208 ../../include/Contact.php:219
-#: ../../include/conversation.php:822
+#: ../../include/conversation.php:841
msgid "Send PM"
msgstr "Private Nachricht senden"
@@ -6859,309 +7067,309 @@ msgstr "Nachricht/Beitrag"
msgid "%1$s marked %2$s's %3$s as favorite"
msgstr "%1$s hat %2$s\\s %3$s als Favorit markiert"
-#: ../../include/conversation.php:317 ../../include/conversation.php:583
+#: ../../include/conversation.php:321 ../../include/conversation.php:602
msgid "Select"
msgstr "Auswählen"
-#: ../../include/conversation.php:334 ../../include/conversation.php:676
-#: ../../include/conversation.php:677
+#: ../../include/conversation.php:338 ../../include/conversation.php:695
+#: ../../include/conversation.php:696
#, php-format
msgid "View %s's profile @ %s"
msgstr "Das Profil von %s auf %s betrachten."
-#: ../../include/conversation.php:344 ../../include/conversation.php:688
+#: ../../include/conversation.php:348 ../../include/conversation.php:707
#, php-format
msgid "%s from %s"
msgstr "%s von %s"
-#: ../../include/conversation.php:359
+#: ../../include/conversation.php:363
msgid "View in context"
msgstr "Im Zusammenhang betrachten"
-#: ../../include/conversation.php:465
+#: ../../include/conversation.php:469
#, php-format
msgid "%d comment"
msgid_plural "%d comments"
msgstr[0] "%d Kommentar"
msgstr[1] "%d Kommentare"
-#: ../../include/conversation.php:529
+#: ../../include/conversation.php:548
msgid "like"
msgstr "mag ich"
-#: ../../include/conversation.php:530
+#: ../../include/conversation.php:549
msgid "dislike"
msgstr "mag ich nicht"
-#: ../../include/conversation.php:532
+#: ../../include/conversation.php:551
msgid "Share this"
msgstr "Teile dieses"
-#: ../../include/conversation.php:532
+#: ../../include/conversation.php:551
msgid "share"
msgstr "Teilen"
-#: ../../include/conversation.php:556
+#: ../../include/conversation.php:575
msgid "Bold"
msgstr "Fett"
-#: ../../include/conversation.php:557
+#: ../../include/conversation.php:576
msgid "Italic"
msgstr "Kursiv"
-#: ../../include/conversation.php:558
+#: ../../include/conversation.php:577
msgid "Underline"
msgstr "Unterstrichen"
-#: ../../include/conversation.php:559
+#: ../../include/conversation.php:578
msgid "Quote"
msgstr "Zitat"
-#: ../../include/conversation.php:560
+#: ../../include/conversation.php:579
msgid "Code"
msgstr "Code"
-#: ../../include/conversation.php:561
+#: ../../include/conversation.php:580
msgid "Image"
msgstr "Bild"
-#: ../../include/conversation.php:562
+#: ../../include/conversation.php:581
msgid "Link"
msgstr "Verweis"
-#: ../../include/conversation.php:563
+#: ../../include/conversation.php:582
msgid "Video"
msgstr "Video"
-#: ../../include/conversation.php:596
+#: ../../include/conversation.php:615
msgid "add star"
msgstr "markieren"
-#: ../../include/conversation.php:597
+#: ../../include/conversation.php:616
msgid "remove star"
msgstr "Markierung entfernen"
-#: ../../include/conversation.php:598
+#: ../../include/conversation.php:617
msgid "toggle star status"
msgstr "Markierung umschalten"
-#: ../../include/conversation.php:601
+#: ../../include/conversation.php:620
msgid "starred"
msgstr "markiert"
-#: ../../include/conversation.php:602
+#: ../../include/conversation.php:621
msgid "add tag"
msgstr "Tag hinzufügen"
-#: ../../include/conversation.php:606
+#: ../../include/conversation.php:625
msgid "save to folder"
msgstr "In Ordner speichern"
-#: ../../include/conversation.php:678
+#: ../../include/conversation.php:697
msgid "to"
msgstr "zu"
-#: ../../include/conversation.php:679
+#: ../../include/conversation.php:698
msgid "Wall-to-Wall"
msgstr "Wall-to-Wall"
-#: ../../include/conversation.php:680
+#: ../../include/conversation.php:699
msgid "via Wall-To-Wall:"
msgstr "via Wall-To-Wall:"
-#: ../../include/conversation.php:725
+#: ../../include/conversation.php:744
msgid "Delete Selected Items"
msgstr "Lösche die markierten Beiträge"
-#: ../../include/conversation.php:876
+#: ../../include/conversation.php:895
#, php-format
msgid "%s likes this."
msgstr "%s mag das."
-#: ../../include/conversation.php:876
+#: ../../include/conversation.php:895
#, php-format
msgid "%s doesn't like this."
msgstr "%s mag das nicht."
-#: ../../include/conversation.php:880
+#: ../../include/conversation.php:899
#, php-format
msgid "<span %1$s>%2$d people</span> like this."
msgstr "<span %1$s>%2$d Leute</span> mögen das."
-#: ../../include/conversation.php:882
+#: ../../include/conversation.php:901
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this."
msgstr "<span %1$s>%2$d Leute</span> mögen das nicht."
-#: ../../include/conversation.php:888
+#: ../../include/conversation.php:907
msgid "and"
msgstr "und"
-#: ../../include/conversation.php:891
+#: ../../include/conversation.php:910
#, php-format
msgid ", and %d other people"
msgstr " und %d andere"
-#: ../../include/conversation.php:892
+#: ../../include/conversation.php:911
#, php-format
msgid "%s like this."
msgstr "%s mögen das."
-#: ../../include/conversation.php:892
+#: ../../include/conversation.php:911
#, php-format
msgid "%s don't like this."
msgstr "%s mögen das nicht."
-#: ../../include/conversation.php:917
+#: ../../include/conversation.php:936
msgid "Visible to <strong>everybody</strong>"
msgstr "Für <strong>jedermann</strong> sichtbar"
-#: ../../include/conversation.php:919
+#: ../../include/conversation.php:938
msgid "Please enter a video link/URL:"
msgstr "Bitte Link/URL zum Video einfügen:"
-#: ../../include/conversation.php:920
+#: ../../include/conversation.php:939
msgid "Please enter an audio link/URL:"
msgstr "Bitte Link/URL zum Audio einfügen:"
-#: ../../include/conversation.php:921
+#: ../../include/conversation.php:940
msgid "Tag term:"
msgstr "Tag:"
-#: ../../include/conversation.php:923
+#: ../../include/conversation.php:942
msgid "Where are you right now?"
msgstr "Wo hältst du dich jetzt gerade auf?"
-#: ../../include/conversation.php:966
+#: ../../include/conversation.php:985
msgid "upload photo"
msgstr "Bild hochladen"
-#: ../../include/conversation.php:968
+#: ../../include/conversation.php:987
msgid "attach file"
msgstr "Datei anhängen"
-#: ../../include/conversation.php:970
+#: ../../include/conversation.php:989
msgid "web link"
msgstr "Weblink"
-#: ../../include/conversation.php:971
+#: ../../include/conversation.php:990
msgid "Insert video link"
msgstr "Video-Adresse einfügen"
-#: ../../include/conversation.php:972
+#: ../../include/conversation.php:991
msgid "video link"
msgstr "Video-Link"
-#: ../../include/conversation.php:973
+#: ../../include/conversation.php:992
msgid "Insert audio link"
msgstr "Audio-Adresse einfügen"
-#: ../../include/conversation.php:974
+#: ../../include/conversation.php:993
msgid "audio link"
msgstr "Audio-Link"
-#: ../../include/conversation.php:976
+#: ../../include/conversation.php:995
msgid "set location"
msgstr "Ort setzen"
-#: ../../include/conversation.php:978
+#: ../../include/conversation.php:997
msgid "clear location"
msgstr "Ort löschen"
-#: ../../include/conversation.php:985
+#: ../../include/conversation.php:1004
msgid "permissions"
msgstr "Zugriffsrechte"
-#: ../../boot.php:505
+#: ../../boot.php:513
msgid "Delete this item?"
msgstr "Diesen Beitrag löschen?"
-#: ../../boot.php:508
+#: ../../boot.php:516
msgid "show fewer"
msgstr "weniger anzeigen"
-#: ../../boot.php:681
+#: ../../boot.php:689
#, php-format
msgid "Update %s failed. See error logs."
msgstr "Update %s fehlgeschlagen. Bitte Fehlerprotokoll überprüfen."
-#: ../../boot.php:683
+#: ../../boot.php:691
#, php-format
msgid "Update Error at %s"
msgstr "Updatefehler bei %s"
-#: ../../boot.php:783
+#: ../../boot.php:791
msgid "Create a New Account"
msgstr "Neuen Account erstellen"
-#: ../../boot.php:807
+#: ../../boot.php:815
msgid "Nickname or Email address: "
msgstr "Spitzname oder Email-Adresse: "
-#: ../../boot.php:808
+#: ../../boot.php:816
msgid "Password: "
msgstr "Passwort: "
-#: ../../boot.php:811
+#: ../../boot.php:819
msgid "Or login using OpenID: "
msgstr "Oder melde dich mit deiner OpenID an: "
-#: ../../boot.php:817
+#: ../../boot.php:825
msgid "Forgot your password?"
msgstr "Passwort vergessen?"
-#: ../../boot.php:984
+#: ../../boot.php:992
msgid "Edit profile"
msgstr "Profil bearbeiten"
-#: ../../boot.php:1044
+#: ../../boot.php:1052
msgid "Message"
msgstr "Nachricht"
-#: ../../boot.php:1160 ../../boot.php:1236
+#: ../../boot.php:1168 ../../boot.php:1244
msgid "g A l F d"
msgstr "l, d. F G \\U\\h\\r"
-#: ../../boot.php:1161 ../../boot.php:1237
+#: ../../boot.php:1169 ../../boot.php:1245
msgid "F d"
msgstr "d. F"
-#: ../../boot.php:1206 ../../boot.php:1277
+#: ../../boot.php:1214 ../../boot.php:1285
msgid "[today]"
msgstr "[heute]"
-#: ../../boot.php:1218
+#: ../../boot.php:1226
msgid "Birthday Reminders"
msgstr "Geburtstagserinnerungen"
-#: ../../boot.php:1219
+#: ../../boot.php:1227
msgid "Birthdays this week:"
msgstr "Geburtstage diese Woche:"
-#: ../../boot.php:1270
+#: ../../boot.php:1278
msgid "[No description]"
msgstr "[keine Beschreibung]"
-#: ../../boot.php:1288
+#: ../../boot.php:1296
msgid "Event Reminders"
msgstr "Veranstaltungserinnerungen"
-#: ../../boot.php:1289
+#: ../../boot.php:1297
msgid "Events this week:"
msgstr "Veranstaltungen diese Woche"
-#: ../../boot.php:1475
+#: ../../boot.php:1502
msgid "Status Messages and Posts"
msgstr "Statusnachrichten und Beiträge"
-#: ../../boot.php:1481
+#: ../../boot.php:1508
msgid "Profile Details"
msgstr "Profildetails"
-#: ../../boot.php:1496
+#: ../../boot.php:1523
msgid "Events and Calendar"
msgstr "Ereignisse und Kalender"
-#: ../../boot.php:1502
+#: ../../boot.php:1529
msgid "Only You Can See This"
msgstr "Nur Du Kannst Das Sehen"
diff --git a/view/de/register_open_eml.tpl b/view/de/register_open_eml.tpl
index fffee2247..4392e8da2 100644
--- a/view/de/register_open_eml.tpl
+++ b/view/de/register_open_eml.tpl
@@ -1,32 +1,32 @@
Hallo $[username],
Danke für deine Anmeldung auf $[sitename]. Dein Account wurde angelegt.
-Die Login Details sind die folgenden:
+Hier die Login Details:
Adresse der Seite: $[siteurl]
Login Name: $[email]
Passwort: $[password]
-Du kannst das Passwort in den "Einstellungen" zu deinem Account ändern
-nachdem du dich eingeloggt hast.
+Du kannst und solltest das Passwort in den "Einstellungen" zu deinem Account ändern,
+nachdem du dich erstmalig eingeloggt hast.
-Bitte nimm dir einige Augenblicke Zeit um die anderen Einstellungen auf der Seite zu überprüfen.
+Bitte nimm dir einige Augenblicke Zeit, um die anderen Einstellungen auf der Seite kennenzulernen und zu überprüfen.
-Eventuell möchtest du außerdem einige grundlegenden Informationen in dein Standart-Profil eintragen
-(auf der "Profile" Seite) damit andere Leute dich einfacher finden können.
+Eventuell möchtest du außerdem einige grundlegende Informationen in deinem Standardprofil (auf der "Profile" Seite) eintragen,
+damit andere Leute dich einfacher finden können.
-Wir empfehlen den kompletten Namen anzugeben, ein eigenes Profil-Foto,
-ein paar "Profil-Schlüsselwörter" anzugeben (damit man leichter Gleichinteressierte finden kann) - und
-natürlich in welchen Land Du lebst; wenn Du es nicht genauer angeben möchtest
-dann das.
+Wir empfehlen den kompletten Namen anzugeben, ein eigenes Profilbild hochzuladen,
+sowie ein paar "Profil-Schlüsselwörter" einzutragen (um leichter Menschen mit gleichen Interessen zu finden) - und
+vielleicht auch in welchen Land du lebst; falls du nicht konkreter
+werden möchtest.
-Wir respektieren Ihr Recht auf Privatsphäre, und keines dieser Elemente sind notwendig.
-Wenn Du hier neu bist und keinen kennst, wird man Dir helfen
-ein paar neue und interessante Freunde zu finden.
+Wir respektieren dein Recht auf Privatsphäre und keine dieser Angaben ist notwendig.
+Wenn du ganz neu bei Friendica bist und niemanden kennst, werden sie dir aber helfen
+ein paar neue und interessante Freunde zu finden.
-Danke dir und willkommen auf $[sitename].
+Danke und willkommen auf $[sitename].
Beste Grüße,
$[sitename] Administrator
diff --git a/view/de/strings.php b/view/de/strings.php
index a3ccab692..1b0ef4b89 100644
--- a/view/de/strings.php
+++ b/view/de/strings.php
@@ -10,7 +10,7 @@ $a->strings["Contact settings applied."] = "Einstellungen zum Kontakt angewandt.
$a->strings["Contact update failed."] = "Konnte den Kontakt nicht aktualisieren.";
$a->strings["Permission denied."] = "Zugriff verweigert.";
$a->strings["Contact not found."] = "Kontakt nicht gefunden.";
-$a->strings["Repair Contact Settings"] = "Kontakt-Einstellungen reparieren";
+$a->strings["Repair Contact Settings"] = "Kontakteinstellungen reparieren";
$a->strings["<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact may stop working."] = "<strong>ACHTUNG: Das sind Experten-Einstellungen!</strong> Wenn Du etwas Falsches eingibst, funktioniert die Kommunikation mit diesem Kontakt evtl. nicht mehr.";
$a->strings["Please use your browser 'Back' button <strong>now</strong> if you are uncertain what to do on this page."] = "Bitte nutze den Zurück-Button deines Browsers <strong>jetzt</strong>, wenn du dir unsicher bist, was du tun willst.";
$a->strings["Return to contact editor"] = "Zurück zum Kontakteditor";
@@ -33,7 +33,7 @@ $a->strings["File upload failed."] = "Hochladen der Datei fehlgeschlagen.";
$a->strings["Friend suggestion sent."] = "Kontaktvorschlag gesendet.";
$a->strings["Suggest Friends"] = "Kontakte vorschlagen";
$a->strings["Suggest a friend for %s"] = "Schlage %s einen Kontakt vor";
-$a->strings["Event description and start time are required."] = "Ereignis Beschreibung und Startzeit sind erforderlich.";
+$a->strings["Event description and start time are required."] = "Ereignisbeschreibung und Startzeit sind erforderlich.";
$a->strings["l, F j"] = "l, F j";
$a->strings["Edit event"] = "Veranstaltung bearbeiten";
$a->strings["link to source"] = "Link zum Originalbeitrag";
@@ -98,6 +98,7 @@ $a->strings["Private Message"] = "Private Nachricht";
$a->strings["View Full Size"] = "Betrachte Originalgröße";
$a->strings["Tags: "] = "Tags: ";
$a->strings["[Remove any tag]"] = "[Tag entfernen]";
+$a->strings["Rotate CW"] = "Im Uhrzeigersinn rotieren";
$a->strings["New album name"] = "Name des neuen Albums";
$a->strings["Caption"] = "Bildunterschrift";
$a->strings["Add a Tag"] = "Tag hinzufügen";
@@ -117,7 +118,7 @@ $a->strings["Community"] = "Gemeinschaft";
$a->strings["No results."] = "Keine Ergebnisse.";
$a->strings["This is Friendica, version"] = "Dies ist Friendica, Version";
$a->strings["running at web location"] = "die unter folgender Webadresse zu finden ist";
-$a->strings["Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn more about the Friendica project."] = "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a> um mehr über das Friendica Projekt zu erfahren.";
+$a->strings["Please visit <a href=\"http://friendica.com\">Friendica.com</a> to learn more about the Friendica project."] = "Bitte besuche <a href=\"http://friendica.com\">Friendica.com</a>, um mehr über das Friendica Projekt zu erfahren.";
$a->strings["Bug reports and issues: please visit"] = "Probleme oder Fehler gefunden? Bitte besuche";
$a->strings["Suggestions, praise, donations, etc. - please email \"Info\" at Friendica - dot com"] = "Vorschläge, Lob, Spenden usw.: E-Mail an \"Info\" at Friendica - dot com";
$a->strings["Installed plugins/addons/apps:"] = "Installierte Plugins/Erweiterungen/Apps";
@@ -166,6 +167,7 @@ $a->strings["Failed to update contact record."] = "Aktualisierung der Kontaktdat
$a->strings["Your introduction has been sent."] = "Deine Kontaktanfrage wurde gesendet.";
$a->strings["Please login to confirm introduction."] = "Bitte melde dich an, um die Kontaktanfrage zu bestätigen.";
$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Momentan bist du mit einer anderen Identität angemeldet. Bitte melde Dich mit <strong>diesem</strong> Profil an.";
+$a->strings["Hide this contact"] = "Verberge diese Kontakt";
$a->strings["Welcome home %s."] = "Willkommen zurück %s.";
$a->strings["Please confirm your introduction/connection request to %s."] = "Bitte bestätige deine Kontaktanfrage bei %s.";
$a->strings["Confirm"] = "Bestätigen";
@@ -185,18 +187,14 @@ $a->strings[" - please do not use this form. Instead, enter %s into your Diaspo
$a->strings["Your Identity Address:"] = "Adresse deines Profils:";
$a->strings["Submit Request"] = "Anfrage abschicken";
$a->strings["Friendica Social Communications Server - Setup"] = "Friendica-Server für soziale Netzwerke – Setup";
-$a->strings["Database connection"] = "Datenbank-Verbindung";
$a->strings["Could not connect to database."] = "Verbindung zur Datenbank gescheitert";
$a->strings["Could not create table."] = "Konnte Tabelle nicht erstellen.";
$a->strings["Your Friendica site database has been installed."] = "Die Datenbank deiner Friendica Seite wurde installiert.";
-$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten.";
-$a->strings["Please see the file \"INSTALL.txt\"."] = "Lies bitte die \"INSTALL.txt\".";
-$a->strings["Proceed to registration"] = "Mit der Registrierung fortfahren";
-$a->strings["Proceed with Installation"] = "Mit der Installation fortfahren";
$a->strings["You may need to import the file \"database.sql\" manually using phpmyadmin or mysql."] = "Möglicherweise musst du die Datei \"database.sql\" manuell mit phpmyadmin oder mysql importieren.";
-$a->strings["Database import failed."] = "Import der Datenbank schlug fehl.";
+$a->strings["Please see the file \"INSTALL.txt\"."] = "Lies bitte die \"INSTALL.txt\".";
$a->strings["System check"] = "Systemtest";
$a->strings["Check again"] = "Noch einmal testen";
+$a->strings["Database connection"] = "Datenbankverbindung";
$a->strings["In order to install Friendica we need to know how to connect to your database."] = "Um Friendica installieren zu können, müssen wir wissen, wie wir zu deiner Datenbank Kontakt aufnehmen können.";
$a->strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Bitte kontaktiere den Hosting Provider oder den Administrator der Seite, falls du Fragen zu diesen Einstellungen haben solltest.";
$a->strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "Die Datenbank, die du unten angibst, sollte bereits existieren. Ist dies noch nicht der Fall, erzeuge sie bitte bevor du mit der Installation fortfährst.";
@@ -209,8 +207,9 @@ $a->strings["Your account email address must match this in order to use the web
$a->strings["Please select a default timezone for your website"] = "Bitte wähle die Standardzeitzone deiner Webseite";
$a->strings["Site settings"] = "Server-Einstellungen";
$a->strings["Could not find a command line version of PHP in the web server PATH."] = "Konnte keine Kommandozeilenversion von PHP im PATH des Servers finden.";
+$a->strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron. See <a href='http://friendica.com/node/27'>'Activating scheduled tasks'</a>"] = "Wenn du keine Kommandozeilen Version von PHP auf deinem Server installiert hast, kannst du keine Hintergrundprozesse via cron starten. Siehe <a href='http://friendica.com/node/27'>'Activating scheduled tasks'</a>";
$a->strings["PHP executable path"] = "Pfad zu PHP";
-$a->strings["Enter full path to php executable"] = "Kompletter Pfad zum PHP-Executable";
+$a->strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Gib den kompletten Pfad zur ausführbaren Datei von PHP an. Du kannst diesen Feld auch frei lassen und mit der Installation fortfahren.";
$a->strings["Command line PHP"] = "Kommandozeilen-PHP";
$a->strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "Die Kommandozeilenversion von PHP auf deinem System hat \"register_argc_argv\" nicht aktiviert.";
$a->strings["This is required for message delivery to work."] = "Dies wird für die Auslieferung von Nachrichten benötigt.";
@@ -232,11 +231,15 @@ $a->strings["Error: mysqli PHP module required but not installed."] = "Fehler: D
$a->strings["Error: mb_string PHP module required but not installed."] = "Fehler: mb_string PHP Module wird benötigt ist aber nicht installiert.";
$a->strings["The web installer needs to be able to create a file called \".htconfig.php\ in the top folder of your web server and it is unable to do so."] = "Der Installationswizard muss in der Lage sein, eine Datei im Stammverzeichnis deines Webservers anzulegen, ist allerdings derzeit nicht in der Lage, dies zu tun.";
$a->strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "In den meisten Fällen ist dies ein Problem mit den Schreibrechten, der Webserver könnte keine Schreiberlaubnis haben, selbst wenn du sie hast.";
-$a->strings["Please check with your site documentation or support people to see if this situation can be corrected."] = "Bitte überprüfe die Einstellungen und frage im Zweifelsfall dein Support Team, um diese Situation zu beheben.";
-$a->strings["If not, you may be required to perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Sollte dies nicht möglich sein, musst du die Installation manuell durchführen. Lies dazu bitte in der Datei \"INSTALL.txt\".";
+$a->strings["At the end of this procedure, we will give you a text to save in a file named .htconfig.php in your Friendica top folder."] = "Nachdem du alles ausgefüllt hast, erhältst du einen Text, den du in eine Datei namens .htconfig.php in deinem Friendica-Wurzelverzeichnis kopieren musst.";
+$a->strings["You can alternatively skip this procedure and perform a manual installation. Please see the file \"INSTALL.txt\" for instructions."] = "Alternativ kannst du diesen Schritt aber auch überspringen und die Installation manuell durchführen. Eine Anleitung dazu (Englisch) findest du in der Datei INSTALL.txt.";
$a->strings[".htconfig.php is writable"] = "Schreibrechte auf .htconfig.php";
-$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text um die Datei im Stammverzeichnis deiner Friendica-Installation zu erzeugen.";
+$a->strings["Url rewrite in .htaccess is not working. Check your server configuration."] = "Umschreiben der URLs in der .htaccess funktioniert nicht. Überprüfe die Konfiguration des Servers.";
+$a->strings["Url rewrite is working"] = "URL rewrite funktioniert";
+$a->strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "Die Konfigurationsdatei \".htconfig.php\" konnte nicht angelegt werden. Bitte verwende den angefügten Text, um die Datei im Stammverzeichnis deiner Friendica-Installation zu erzeugen.";
$a->strings["Errors encountered creating database tables."] = "Fehler aufgetreten während der Erzeugung der Datenbanktabellen.";
+$a->strings["<h1>What next</h1>"] = "<h1>Wie geht es weiter?</h1>";
+$a->strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "WICHTIG: Du musst [manuell] einen Cronjob (o.ä.) für den Poller einrichten.";
$a->strings["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A";
$a->strings["Time Conversion"] = "Zeitumrechnung";
$a->strings["Friendika provides this service for sharing events with other networks and friends in unknown timezones."] = "Friendica bietet diese Funktion an, um das Teilen von Events mit den Kontakten zu vereinfachen, deren Zeitzone nicht ermittelt werden kann.";
@@ -288,8 +291,8 @@ $a->strings["%s created a new post"] = "%s hat einen neuen Beitrag erstellt";
$a->strings["%s commented on %s's post"] = "%s hat %ss Beitrag kommentiert";
$a->strings["No more network notifications."] = "Keine weiteren Netzwerk-Benachrichtigungen.";
$a->strings["Network Notifications"] = "Netzwerk Benachrichtigungen";
-$a->strings["No more system notifications."] = "Keine weiteren System Benachrichtigungen.";
-$a->strings["System Notifications"] = "System Benachrichtigungen";
+$a->strings["No more system notifications."] = "Keine weiteren Systembenachrichtigungen.";
+$a->strings["System Notifications"] = "Systembenachrichtigungen";
$a->strings["No more personal notifications."] = "Keine weiteren persönlichen Benachrichtigungen";
$a->strings["Personal Notifications"] = "Persönliche Benachrichtigungen";
$a->strings["No more home notifications."] = "Keine weiteren Pinnwand-Benachrichtigungen";
@@ -320,7 +323,7 @@ $a->strings["%d contact in common"] = array(
$a->strings["View all contacts"] = "Alle Kontakte anzeigen";
$a->strings["Unblock"] = "Entsperren";
$a->strings["Block"] = "Sperren";
-$a->strings["Toggle Blocked status"] = "Geblockt-Sttaus ein-/ausschalten";
+$a->strings["Toggle Blocked status"] = "Geblockt-Status ein-/ausschalten";
$a->strings["Unignore"] = "Ignorieren aufheben";
$a->strings["Toggle Ignored status"] = "Ignoriert-Status ein-/ausschalten";
$a->strings["Unarchive"] = "Unarchivieren";
@@ -329,7 +332,7 @@ $a->strings["Toggle Archive status"] = "Archiviert-Status ein-/ausschalten";
$a->strings["Repair"] = "Reparieren";
$a->strings["Advanced Contact Settings"] = "Fortgeschrittene Kontakteinstellungen";
$a->strings["Contact Editor"] = "Kontakt Editor";
-$a->strings["Profile Visibility"] = "Profil Anzeige";
+$a->strings["Profile Visibility"] = "Profil-Sichtbarkeit";
$a->strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Bitte wähle eines deiner Profile das angezeigt werden soll, wenn %s dein Profil aufruft.";
$a->strings["Contact Information / Notes"] = "Kontakt Informationen / Notizen";
$a->strings["Edit contact notes"] = "Notizen zum Kontakt bearbiten";
@@ -383,8 +386,8 @@ $a->strings["Forgot your Password?"] = "Hast du dein Passwort vergessen?";
$a->strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Gib deine Email-Adresse an und fordere ein neues Passwort an. Es werden dir dann weitere Informationen per Mail zugesendet.";
$a->strings["Nickname or Email: "] = "Spitzname oder Email:";
$a->strings["Reset"] = "Zurücksetzen";
-$a->strings["Account settings"] = "Account Einstellungen";
-$a->strings["Display settings"] = "Anzeige Einstellungen";
+$a->strings["Account settings"] = "Account-Einstellungen";
+$a->strings["Display settings"] = "Anzeige-Einstellungen";
$a->strings["Connector settings"] = "Connector-Einstellungen";
$a->strings["Plugin settings"] = "Plugin-Einstellungen";
$a->strings["Connected apps"] = "Verbundene Programme";
@@ -403,6 +406,8 @@ $a->strings[" Please use a shorter name."] = " Bitte verwende einen kürzeren Na
$a->strings[" Name too short."] = " Name ist zu kurz.";
$a->strings[" Not valid email."] = " Keine gültige E-Mail.";
$a->strings[" Cannot change to that email."] = "Ändern der E-Mail nicht möglich. ";
+$a->strings["Private forum has no privacy permissions. Using default privacy group."] = "Für das private Forum sind keine Zugriffsrechte eingestellt. Die voreingestellte Gruppe für neue Kontakte wird benutzt.";
+$a->strings["Private forum has no privacy permissions and no default privacy group."] = "Für das private Forum sind keine Zugriffsrechte eingestellt, und es gibt keine voreingestellte Gruppe für neue Kontakte.";
$a->strings["Settings updated."] = "Einstellungen aktualisiert.";
$a->strings["Add application"] = "Programm hinzufügen";
$a->strings["Consumer Key"] = "Consumer Key";
@@ -411,7 +416,7 @@ $a->strings["Redirect"] = "Umleiten";
$a->strings["Icon url"] = "Icon URL";
$a->strings["You can't edit this application."] = "Du kannst dieses Programm nicht bearbeiten.";
$a->strings["Connected Apps"] = "Verbundene Programme";
-$a->strings["Client key starts with"] = "Anwender Schlüssel beginnt mit";
+$a->strings["Client key starts with"] = "Anwenderschlüssel beginnt mit";
$a->strings["No name"] = "Kein Name";
$a->strings["Remove authorization"] = "Autorisierung entziehen";
$a->strings["No Plugin settings configured"] = "Keine Plugin-Einstellungen konfiguriert";
@@ -437,21 +442,23 @@ $a->strings["Action after import:"] = "Aktion nach Import:";
$a->strings["Mark as seen"] = "Als gelesen markieren";
$a->strings["Move to folder"] = "In einen Ordner verschieben";
$a->strings["Move to folder:"] = "In diesen Ordner verschieben:";
-$a->strings["Display Settings"] = "Anzeige Einstellungen";
+$a->strings["Display Settings"] = "Anzeige-Einstellungen";
$a->strings["Display Theme:"] = "Theme:";
$a->strings["Update browser every xx seconds"] = "Browser alle xx Sekunden aktualisieren";
$a->strings["Minimum of 10 seconds, no maximum"] = "Minimal 10 Sekunden, kein Maximum";
$a->strings["Number of items to display on the network page:"] = "Zahl der Beiträge, die pro Netzwerkseite angezeigt werden sollen: ";
$a->strings["Maximum of 100 items"] = "Maximal 100 Beiträge";
$a->strings["Don't show emoticons"] = "Keine Smilies anzeigen";
-$a->strings["Normal Account"] = "Normaler Account";
+$a->strings["Normal Account Page"] = "Normale Account Seite";
$a->strings["This account is a normal personal profile"] = "Dieser Account ist ein normales persönliches Profil";
-$a->strings["Soapbox Account"] = "Sandkasten-Account";
+$a->strings["Soapbox Page"] = "Sandkasten Seite";
$a->strings["Automatically approve all connection/friend requests as read-only fans"] = "Kontaktanfragen werden automatisch als Nurlese-Fans akzeptiert";
-$a->strings["Community/Celebrity Account"] = "Gemeinschafts/Promi-Account";
+$a->strings["Community Forum/Celebrity Account"] = "Gemeinschafts Forum / Promi Konto";
$a->strings["Automatically approve all connection/friend requests as read-write fans"] = "Kontaktanfragen werden automatisch als Lese-und-Schreib-Fans akzeptiert";
-$a->strings["Automatic Friend Account"] = "Automatischer Freundesaccount";
+$a->strings["Automatic Friend Page"] = "Automatische Freunde Seite";
$a->strings["Automatically approve all connection/friend requests as friends"] = "Kontaktanfragen werden automatisch als Freund akzeptiert";
+$a->strings["Private Forum [Experimental]"] = "Privates Forum [Versuchsstadium]";
+$a->strings["Private forum - approved members only"] = "Privates Forum - Ausschließlich für Mitglieder";
$a->strings["OpenID:"] = "OpenID:";
$a->strings["(Optional) Allow this OpenID to login to this account."] = "(Optional) Erlaube die Anmeldung für diesen Account mit dieser OpenID.";
$a->strings["Publish your default profile in your local site directory?"] = "Veröffentliche dein Standardprofil im Verzeichnis der lokalen Seite?";
@@ -473,6 +480,7 @@ $a->strings["Expire posts:"] = "Beiträge verfallen lassen:";
$a->strings["Expire personal notes:"] = "Persönliche Notizen verfallen lassen:";
$a->strings["Expire starred posts:"] = "Markierte Beiträge verfallen lassen:";
$a->strings["Expire photos:"] = "Fotos verfallen lassen:";
+$a->strings["Only expire posts by others:"] = "Nur Beiträge anderer verfallen";
$a->strings["Account Settings"] = "Account-Einstellungen";
$a->strings["Password Settings"] = "Passwort-Einstellungen";
$a->strings["New Password:"] = "Neues Passwort:";
@@ -491,7 +499,7 @@ $a->strings["Default Post Permissions"] = "Standard-Zugriffsrechte für Beiträg
$a->strings["(click to open/close)"] = "(klicke zum öffnen/schließen)";
$a->strings["Maximum private messages per day from unknown people:"] = "Maximale Anzahl von privaten Nachrichten, die dir unbekannte Personen pro Tag senden dürfen:";
$a->strings["Notification Settings"] = "Benachrichtigungseinstellungen";
-$a->strings["By default post a status message when:"] = "Standardmäßig eine Status-Nachricht posten wenn:";
+$a->strings["By default post a status message when:"] = "Standardmäßig eine Statusnachricht posten, wenn:";
$a->strings["accepting a friend request"] = "– du eine Kontaktanfrage akzeptierst";
$a->strings["joining a forum/community"] = "– du einem Forum/einer Gemeinschaftsseite beitrittst";
$a->strings["making an <em>interesting</em> profile change"] = "– du eine <em>interessante</em> Änderung an deinem Profil durchführst";
@@ -503,7 +511,8 @@ $a->strings["Someone writes a followup comment"] = "– jemand auch einen Kommen
$a->strings["You receive a private message"] = "– du eine private Nachricht erhältst";
$a->strings["You receive a friend suggestion"] = "- du eine Empfehlung erhältst";
$a->strings["You are tagged in a post"] = "- du in einem Beitrag erwähnt wurdest";
-$a->strings["Advanced Page Settings"] = "Erweiterte Seiten-Einstellungen";
+$a->strings["Advanced Account/Page Type Settings"] = "";
+$a->strings["Change the behaviour of this account for special situations"] = "Ändere das Verhalten deines Accounts für spezielle Situationen.";
$a->strings["Manage Identities and/or Pages"] = "Verwalte Identitäten und/oder Seiten";
$a->strings["Toggle between different identities or community/group pages which share your account details or which you have been granted \"manage\" permissions"] = "Wechsle zwischen verschiedenen Identitäten oder Gemeinschafts-/Gruppen-Seiten, die deine Zugangsdetails teilen oder zu denen du \"Manage\" Befugnisse bekommen hast.";
$a->strings["Select an identity to manage: "] = "Wähle eine Identität zum Verwalten: ";
@@ -562,7 +571,7 @@ $a->strings["Edit your <strong>default</strong> profile to your liking. Review t
$a->strings["Set some public keywords for your default profile which describe your interests. We may be able to find other people with similar interests and suggest friendships."] = "Trage ein paar öffentliche Stichwörter in dein Standardprofil ein, die deine Interessen beschreiben. Eventuell sind wir in der Lage Leute zu finden, die deine Interessen teilen und können dir dann Kontakte vorschlagen.";
$a->strings["Your Contacts page is your gateway to managing friendships and connecting with friends on other networks. Typically you enter their address or site URL in the <em>Add New Contact</em> dialog."] = "Die Kontakte-Seite ist die Einstiegsseite, von der aus du Kontakte verwalten und dich mit Freunden in anderen Netzwerken verbinden kannst. Normalerweise gibst du dazu einfach ihre Adresse oder die URL der Seite im Kasten <em>Neuen Kontakt hinzufügen</em> ein.";
$a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a <em>Connect</em> or <em>Follow</em> link on their profile page. Provide your own Identity Address if requested."] = "Über die Verzeichnisseite kannst du andere Personen auf diesem Server oder anderen verknüpften Seiten finden. Halte nach einem <em>Verbinden</em> oder <em>Folgen</em> Link auf deren Profilseiten Ausschau und gib deine eigene Profiladresse an, falls du danach gefragt wirst.";
-$a->strings["On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours."] = "Im seitlichen Bedienfeld der Kontakte-Seite gibt es diverse Werkzeuge, um neue Freunde zu finden. Wir können Menschen mit den gleichen Interessen finden, anhand von Namen oder Interessen suchen oder aber aufgrund vorhandener Kontakte neue Freunde vorschlagen.\nAuf einer brandneuen - soeben erstellten - Seite starten die Kontaktvorschläge innerhalb von 24 Stunden.";
+$a->strings["On the side panel of the Contacts page are several tools to find new friends. We can match people by interest, look up people by name or interest, and provide suggestions based on network relationships. On a brand new site, friend suggestions will usually begin to be populated within 24 hours."] = "Im seitlichen Bedienfeld der Kontakteseite gibt es diverse Werkzeuge, um neue Freunde zu finden. Wir können Menschen mit den gleichen Interessen finden, anhand von Namen oder Interessen suchen oder aber aufgrund vorhandener Kontakte neue Freunde vorschlagen.\nAuf einer brandneuen - soeben erstellten - Seite starten die Kontaktvorschläge innerhalb von 24 Stunden.";
$a->strings["Once you have made some friends, organize them into private conversation groups from the sidebar of your Contacts page and then you can interact with each group privately on your Network page."] = "Sobald du einige Freunde gefunden hast, organisiere sie in Gruppen zur privaten Kommunikation im Seitenmenü der Kontakte-Seite. Du kannst dann mit jeder dieser Gruppen von der Netzwerkseite aus privat interagieren.";
$a->strings["Our <strong>help</strong> pages may be consulted for detail on other program features and resources."] = "Unsere <strong>Hilfe</strong> Seiten können herangezogen werden, um weitere Einzelheiten zu andern Programm Features zu erhalten.";
$a->strings["Item not available."] = "Beitrag nicht verfügbar.";
@@ -586,22 +595,6 @@ $a->strings["Visible To"] = "Sichtbar für";
$a->strings["All Contacts (with secure profile access)"] = "Alle Kontakte (mit gesichertem Profilzugriff)";
$a->strings["No contacts."] = "Keine Kontakte.";
$a->strings["View Contacts"] = "Kontakte anzeigen";
-$a->strings["An invitation is required."] = "Du benötigst eine Einladung.";
-$a->strings["Invitation could not be verified."] = "Die Einladung konnte nicht überprüft werden.";
-$a->strings["Invalid OpenID url"] = "Ungültige OpenID URL";
-$a->strings["Please enter the required information."] = "Bitte trage die erforderlichen Informationen ein.";
-$a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Namen.";
-$a->strings["Name too short."] = "Der Name ist zu kurz.";
-$a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein.";
-$a->strings["Your email domain is not among those allowed on this site."] = "Die Domain deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt.";
-$a->strings["Not a valid email address."] = "Keine gültige E-Mail-Adresse.";
-$a->strings["Cannot use that email."] = "Konnte diese E-Mail-Adresse nicht verwenden.";
-$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen.";
-$a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
-$a->strings["Nickname was once registered here and may not be re-used. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
-$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden.";
-$a->strings["An error occurred during registration. Please try again."] = "Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
-$a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standard-Profils ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
$a->strings["Registration details for %s"] = "Details der Registration von %s";
$a->strings["Registration successful. Please check your email for further instructions."] = "Registrierung erfolgreich. Eine E-Mail mit weiteren Anweisungen wurde an dich gesendet.";
$a->strings["Failed to send email message. Here is the message that failed."] = "Konnte die E-Mail nicht versenden. Hier ist die Nachricht, die nicht gesendet werden konnte.";
@@ -678,15 +671,19 @@ $a->strings["No secure communications available. You <strong>may</strong> be abl
$a->strings["Send Reply"] = "Antwort senden";
$a->strings["Friends of %s"] = "Freunde von %s";
$a->strings["No friends to display."] = "Keine Freunde zum Anzeigen.";
-$a->strings["Theme settings updated."] = "Themen Einstellungen aktualisiert.";
+$a->strings["Theme settings updated."] = "Themeneinstellungen aktualisiert.";
$a->strings["Site"] = "Seite";
$a->strings["Users"] = "Nutzer";
$a->strings["Plugins"] = "Plugins";
$a->strings["Themes"] = "Themen";
$a->strings["DB updates"] = "DB Updates";
-$a->strings["Software Update"] = "Software Update";
$a->strings["Logs"] = "Protokolle";
$a->strings["User registrations waiting for confirmation"] = "Nutzeranmeldungen die auf Bestätigung warten";
+$a->strings["Normal Account"] = "Normaler Account";
+$a->strings["Soapbox Account"] = "Sandkasten-Account";
+$a->strings["Community/Celebrity Account"] = "Gemeinschafts-/Promi-Account";
+$a->strings["Automatic Friend Account"] = "Automatischer Freundesaccount";
+$a->strings["Message queues"] = "Nachrichten-Warteschlangen";
$a->strings["Administration"] = "Administration";
$a->strings["Summary"] = "Zusammenfassung";
$a->strings["Registered users"] = "Registrierte Nutzer";
@@ -714,7 +711,7 @@ $a->strings["Maximum image size"] = "Maximale Größe von Bildern";
$a->strings["Maximum size in bytes of uploaded images. Default is 0, which means no limits."] = "Maximale Upload-Größe von Bildern in Bytes. Standard ist 0, d.h. ohne Limit.";
$a->strings["Register policy"] = "Registrierungsmethode";
$a->strings["Register text"] = "Registrierungstext";
-$a->strings["Will be displayed prominently on the registration page."] = "Wird gut sichtbar auf der Registrierungs-Seite angezeigt.";
+$a->strings["Will be displayed prominently on the registration page."] = "Wird gut sichtbar auf der Registrierungsseite angezeigt.";
$a->strings["Accounts abandoned after x days"] = "Accounts gelten nach x Tagen als unbenutzt";
$a->strings["Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit."] = "Verschwende keine System-Ressourcen auf das Pollen externer Seiten, wenn Accounts nicht mehr benutzt werden. 0 eingeben für kein Limit.";
$a->strings["Allowed friend domains"] = "Erlaubte Domains für Kontakte";
@@ -744,15 +741,17 @@ $a->strings["Provide built-in Diaspora network compatibility."] = "Verwende die
$a->strings["Only allow Friendica contacts"] = "Nur Friendica-Kontakte erlauben";
$a->strings["All contacts must use Friendica protocols. All other built-in communication protocols disabled."] = "Alle Kontakte müssen das Friendica Protokoll nutzen. Alle anderen Kommunikationsprotokolle werden deaktiviert.";
$a->strings["Verify SSL"] = "SSL Überprüfen";
-$a->strings["If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."] = "Wenn gewollt, kann man hier eine strenge Zertifikat Kontrolle einstellen. Das bedeutet, dass man zu keinen Seiten mit selbst unterzeichnetem SSL eine Verbindung herstellen kann.";
+$a->strings["If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites."] = "Wenn gewollt, kann man hier eine strenge Zertifikatkontrolle einstellen. Das bedeutet, dass man zu keinen Seiten mit selbst unterzeichnetem SSL eine Verbindung herstellen kann.";
$a->strings["Proxy user"] = "Proxy Nutzer";
$a->strings["Proxy URL"] = "Proxy URL";
$a->strings["Network timeout"] = "Netzwerk Wartezeit";
$a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = "Der Wert ist in Sekunden. Setze 0 für unbegrenzt (nicht empfohlen).";
$a->strings["Delivery interval"] = "Zustellungsintervall";
-$a->strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl an Sekunden um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared-Hosts, 2-3 für VPS, 0-1 für große dedizierte Server.";
+$a->strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = "Verzögere im Hintergrund laufende Auslieferungsprozesse um die angegebene Anzahl an Sekunden, um die Systemlast zu verringern. Empfehlungen: 4-5 für Shared-Hosts, 2-3 für VPS, 0-1 für große dedizierte Server.";
+$a->strings["Poll interval"] = "Abfrageintervall";
+$a->strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Verzögere Hintergrundprozesse, um diese Anzahl an Sekunden um die Systemlast zu reduzieren. Bei 0 Sekunden wird das Auslieferungsintervall verwendet.";
$a->strings["Maximum Load Average"] = "Maximum Load Average";
-$a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "";
+$a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50";
$a->strings["Update has been marked successful"] = "Update wurde als erfolgreich markiert";
$a->strings["Executing %s failed. Check system logs."] = "Ausführung von %s schlug fehl. Systemprotokolle prüfen.";
$a->strings["Update %s was successfully applied."] = "Update %s war erfolgreich.";
@@ -776,7 +775,7 @@ $a->strings["User '%s' unblocked"] = "Nutzer '%s' entsperrt";
$a->strings["User '%s' blocked"] = "Nutzer '%s' gesperrt";
$a->strings["select all"] = "Alle auswählen";
$a->strings["User registrations waiting for confirm"] = "Neuanmeldungen, die auf deine Bestätigung warten";
-$a->strings["Request date"] = "Anfrage Datum";
+$a->strings["Request date"] = "Anfragedatum";
$a->strings["Email"] = "Email";
$a->strings["No registrations."] = "Keine Neuanmeldungen.";
$a->strings["Deny"] = "Verwehren";
@@ -824,13 +823,15 @@ $a->strings["{0} mentioned you in a post"] = "{0} hat dich in einem Beitrag erwÃ
$a->strings["Contacts who are not members of a group"] = "Kontakte, die keiner Gruppe zugewiesen sind";
$a->strings["OpenID protocol error. No ID returned."] = "OpenID Protokollfehler. Keine ID zurückgegeben.";
$a->strings["Account not found and OpenID registration is not permitted on this site."] = "Account wurde nicht gefunden und OpenID Registrierung auf diesem Server nicht gestattet.";
-$a->strings["Login failed."] = "Annmeldung fehlgeschlagen.";
+$a->strings["Login failed."] = "Anmeldung fehlgeschlagen.";
$a->strings["Connect URL missing."] = "Connect-URL fehlt";
$a->strings["This site is not configured to allow communications with other networks."] = "Diese Seite ist so konfiguriert, dass keine Kommunikation mit anderen Netzwerken erfolgen kann.";
$a->strings["No compatible communication protocols or feeds were discovered."] = "Es wurden keine kompatiblen Kommunikationsprotokolle oder Feeds gefunden.";
$a->strings["The profile address specified does not provide adequate information."] = "Die angegebene Profiladresse liefert unzureichende Informationen.";
$a->strings["An author or name was not found."] = "Es wurde kein Autor oder Name gefunden.";
$a->strings["No browser URL could be matched to this address."] = "Zu dieser Adresse konnte keine passende Browser URL gefunden werden.";
+$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Konnte die @-Adresse mit keinem der bekannten Protokolle oder Email-Kontakte abgleichen.";
+$a->strings["Use mailto: in front of address to force email check."] = "Verwende mailto: vor der Email Adresse um eine Überprüfung der Email Adresse zu erzwingen.";
$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde.";
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können.";
$a->strings["Unable to retrieve contact information."] = "Konnte die Kontaktinformationen nicht empfangen.";
@@ -840,7 +841,7 @@ $a->strings["No contacts in common."] = "Keine gemeinsamen Kontakte.";
$a->strings["Item has been removed."] = "Eintrag wurde entfernt.";
$a->strings["Applications"] = "Anwendungen";
$a->strings["No installed applications."] = "Keine Applikationen installiert.";
-$a->strings["Search This Site"] = "Diese Seite durchsuchen";
+$a->strings["Search"] = "Suche";
$a->strings["Profile not found."] = "Profil nicht gefunden.";
$a->strings["Profile Name is required."] = "Profilname ist erforderlich.";
$a->strings["Marital Status"] = "Familienstand";
@@ -852,11 +853,13 @@ $a->strings["Gender"] = "Geschlecht";
$a->strings["Sexual Preference"] = "Sexuelle Vorlieben";
$a->strings["Homepage"] = "Webseite";
$a->strings["Interests"] = "Interessen";
+$a->strings["Address"] = "Adresse";
$a->strings["Location"] = "Wohnort";
$a->strings["Profile updated."] = "Profil aktualisiert.";
$a->strings[" and "] = " und ";
$a->strings["public profile"] = "öffentliches Profil";
$a->strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s hat %2\$s geändert auf &ldquo;%3\$s&rdquo;";
+$a->strings[" - Visit %1\$s's %2\$s"] = " – %1\$ss %2\$s besuchen";
$a->strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s hat folgendes aktualisiert %2\$s, verändert wurde %3\$s.";
$a->strings["Profile deleted."] = "Profil gelöscht.";
$a->strings["Profile-"] = "Profil-";
@@ -881,6 +884,7 @@ $a->strings["Region/State:"] = "Region/Bundesstaat:";
$a->strings["<span class=\"heart\">&hearts;</span> Marital Status:"] = "<span class=\"heart\">&hearts;</span> Beziehungsstatus:";
$a->strings["Who: (if applicable)"] = "Wer: (falls anwendbar)";
$a->strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Beispiele: cathy123, Cathy Williams, cathy@example.com";
+$a->strings["Since [date]:"] = "Seit [Datum]:";
$a->strings["Sexual Preference:"] = "Sexuelle Vorlieben:";
$a->strings["Homepage URL:"] = "Adresse der Homepage:";
$a->strings["Political Views:"] = "Politische Ansichten:";
@@ -888,7 +892,7 @@ $a->strings["Religious Views:"] = "Religiöse Ansichten:";
$a->strings["Public Keywords:"] = "Öffentliche Schlüsselwörter:";
$a->strings["Private Keywords:"] = "Private Schlüsselwörter:";
$a->strings["Example: fishing photography software"] = "Beispiel: Fischen Fotografie Software";
-$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet um potentielle Freunde zu finden, könnte von Fremden eingesehen werden)";
+$a->strings["(Used for suggesting potential friends, can be seen by others)"] = "(Wird verwendet, um potentielle Freunde zu finden, könnte von Fremden eingesehen werden)";
$a->strings["(Used for searching profiles, never shown to others)"] = "(Wird für die Suche nach Profilen verwendet und niemals veröffentlicht)";
$a->strings["Tell us about yourself..."] = "Erzähle uns ein bisschen von dir …";
$a->strings["Hobbies/Interests"] = "Hobbies/Interessen";
@@ -972,8 +976,8 @@ $a->strings["Install Facebook connector for this account."] = "Facebook-Connecto
$a->strings["Remove Facebook connector"] = "Facebook-Connector entfernen";
$a->strings["Re-authenticate [This is necessary whenever your Facebook password is changed.]"] = "Neu authentifizieren [Das ist immer dann nötig, wenn Du Dein Facebook-Passwort geändert hast.]";
$a->strings["Post to Facebook by default"] = "Veröffentliche standardmäßig bei Facebook";
-$a->strings["Facebook friend linking has been disabled on this site. The following settings will have no effect."] = "";
-$a->strings["Facebook friend linking has been disabled on this site. If you disable it, you will be unable to re-enable it."] = "";
+$a->strings["Facebook friend linking has been disabled on this site. The following settings will have no effect."] = "Das Verlinken von Facebookkontakten wurde auf dieser Seite deaktiviert. Die folgenden Einstellungen haben keinen Effekt.";
+$a->strings["Facebook friend linking has been disabled on this site. If you disable it, you will be unable to re-enable it."] = "Das Verlinken von Facebookkontakten wurde auf dieser Seite deaktiviert. Wenn du es ausgeschaltet hast, kannst du es nicht wieder aktivieren.";
$a->strings["Link all your Facebook friends and conversations on this website"] = "All meine Facebook-Kontakte und -Konversationen hier auf diese Website importieren";
$a->strings["Facebook conversations consist of your <em>profile wall</em> and your friend <em>stream</em>."] = "Facebook-Konversationen bestehen aus deinen Beiträgen auf deiner<em>Pinnwand</em>, sowie den Beiträgen deiner Freunde <em>Stream</em>.";
$a->strings["On this website, your Facebook friend stream is only visible to you."] = "Hier auf dieser Webseite kannst nur du die Beiträge Deiner Facebook-Freunde (Stream) sehen.";
@@ -981,7 +985,7 @@ $a->strings["The following settings determine the privacy of your Facebook profi
$a->strings["On this website your Facebook profile wall conversations will only be visible to you"] = "Meine Facebook-Pinnwand hier auf dieser Webseite nur für mich sichtbar machen";
$a->strings["Do not import your Facebook profile wall conversations"] = "Facebook-Pinnwand nicht importieren";
$a->strings["If you choose to link conversations and leave both of these boxes unchecked, your Facebook profile wall will be merged with your profile wall on this website and your privacy settings on this website will be used to determine who may see the conversations."] = "Wenn Du Facebook-Konversationen importierst und diese beiden Häkchen nicht setzt, wird Deine Facebook-Pinnwand mit der Pinnwand hier auf dieser Webseite vereinigt. Die Privatsphäre-Einstellungen für Deine Pinnwand auf dieser Webseite geben dann an, wer die Konversationen sehen kann.";
-$a->strings["Comma separated applications to ignore"] = "Komma separiert Anwendungen, die ignoriert werden sollen";
+$a->strings["Comma separated applications to ignore"] = "Kommaseparierte Anwendungen, die ignoriert werden sollen";
$a->strings["Problems with Facebook Real-Time Updates"] = "Probleme mit Facebook Echtzeit-Updates";
$a->strings["Facebook"] = "Facebook";
$a->strings["Facebook Connector Settings"] = "Facebook-Verbindungseinstellungen";
@@ -992,9 +996,9 @@ $a->strings["The given API Key seems to work correctly."] = "Der angegebene API
$a->strings["The correctness of the API Key could not be detected. Somthing strange's going on."] = "Die Echtheit des API Schlüssels konnte nicht überprüft werden. Etwas Merkwürdiges ist hier im Gange.";
$a->strings["App-ID / API-Key"] = "App-ID / API-Key";
$a->strings["Application secret"] = "Anwendungs-Geheimnis";
-$a->strings["Polling Interval in minutes (minimum %1\$s minutes)"] = "Abfrage-Intervall in Minuten (min %1\$s Minuten)";
-$a->strings["Synchronize comments (no comments on Facebook are missed, at the cost of increased system load)"] = "Kommentare synchronisieren (Kein Kommentar von Facebook geht verlohren, verursacht höhere Last auf dem Server)";
-$a->strings["Real-Time Updates"] = "Echt-Zeit Aktualisierungen";
+$a->strings["Polling Interval in minutes (minimum %1\$s minutes)"] = "Abfrageintervall in Minuten (min %1\$s Minuten)";
+$a->strings["Synchronize comments (no comments on Facebook are missed, at the cost of increased system load)"] = "Kommentare synchronisieren (Kein Kommentar von Facebook geht verloren, verursacht höhere Last auf dem Server)";
+$a->strings["Real-Time Updates"] = "Echtzeit Aktualisierungen";
$a->strings["Real-Time Updates are activated."] = "Echtzeit-Updates sind aktiviert.";
$a->strings["Deactivate Real-Time Updates"] = "Echtzeit-Updates deaktivieren";
$a->strings["Real-Time Updates not activated."] = "Echtzeit-Updates nicht aktiviert.";
@@ -1038,7 +1042,7 @@ $a->strings["LiveJournal username"] = "LiveJournal Benutzername";
$a->strings["LiveJournal password"] = "LiveJournal Passwort";
$a->strings["Post to LiveJournal by default"] = "Standardmäßig bei LiveJournal veröffentlichen";
$a->strings["Not Safe For Work (General Purpose Content Filter) settings"] = "Not Safe for Work (allg. Filter für ungewollte Inhalte) Einstellungen:";
-$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Su kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden.";
+$a->strings["This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Dieses Plugin sucht in Beiträgen nach Wörtern oder Textbauteilen die du weiter unten eingibst, findet es diese Bausteine, dann wird der entsprechende Beitrag zusammengefaltet dargestellt. Auf diese Weise wird verhindert, dass Inhalte, wie z.B. sexuelle Anspielungen, in unpassenden Momenten angezeigt werden. Du solltest den #NSFW Tag für Beiträge verwenden von denen du ausgehen kannst, dass andere sie anstößig finden könnten. Du kannst beliebige Wörter in der Filterliste angeben und ihn so als allgemeinen Filter verwenden.";
$a->strings["Enable Content filter"] = "Aktiviere den Inhaltsfilter";
$a->strings["Comma separated list of keywords to hide"] = "Durch Komma getrennte Liste von Schlüsselwörtern die verborgen werden sollen";
$a->strings["Use /expression/ to provide regular expressions"] = "Verwende /expression/ um reguläre Ausdrücke zu verwenden";
@@ -1090,9 +1094,15 @@ $a->strings["Drupal site URL"] = "URL der Drupal Seite";
$a->strings["Drupal site uses clean URLS"] = "Drupal Seite verwendet bereinigte URLs";
$a->strings["Post to Drupal by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei Drupal";
$a->strings["Post from Friendica"] = "Beitrag via Friendica";
+$a->strings["Startpage Settings"] = "Startseiten-Einstellungen";
+$a->strings["Home page to load after login - leave blank for profile wall"] = "Seite, die nach dem Anmelden geladen werden soll. Leer = Pinnwand";
+$a->strings["Examples: &quot;network&quot; or &quot;notifications/system&quot;"] = "Beispiele: network, notifications/system";
$a->strings["Geonames settings updated."] = "Geonames Einstellungen aktualisiert";
$a->strings["Geonames Settings"] = "Geonames Einstellungen";
$a->strings["Enable Geonames Plugin"] = "Geonames Plugin aktivieren";
+$a->strings["Your account on %s will expire in a few days."] = "Dein Konto auf %s wird in ein paar Tagen verfallen.";
+$a->strings["Your Friendica account is about to expire."] = "Dein Friendica-Account wird in Kürze auslaufen.";
+$a->strings["Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days"] = "Hallo %1\$s,\n\ndein Account auf %2\$s wird in weniger als fünf Tagen auslaufen. Du kannst das verhindern, indem du dich mindestens einmal alle 30 Tage anmeldest.";
$a->strings["Upload a file"] = "Datei hochladen";
$a->strings["Drop files here to upload"] = "Ziehe Dateien hierher, um sie hochzuladen";
$a->strings["Failed"] = "Fehlgeschlagen";
@@ -1108,13 +1118,13 @@ $a->strings["Site Owner"] = "Betreiber der Seite";
$a->strings["Email Address"] = "Email Adresse";
$a->strings["Postal Address"] = "Postalische Anschrift";
$a->strings["The impressum addon needs to be configured!<br />Please add at least the <tt>owner</tt> variable to your config file. For other variables please refer to the README file of the addon."] = "Das Impressums-Plugin muss noch konfiguriert werden.<br />Bitte gebe mindestens den <tt>Betreiber</tt> in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert.";
-$a->strings["The page operators name."] = "Name des Server-Administrators";
+$a->strings["The page operators name."] = "Name des Serveradministrators";
$a->strings["Site Owners Profile"] = "Profil des Seitenbetreibers";
-$a->strings["Profile address of the operator."] = "Profil-Adresse des Server-Administrators";
+$a->strings["Profile address of the operator."] = "Profil-Adresse des Serveradministrators";
$a->strings["How to contact the operator via snail mail. You can use BBCode here."] = "Kontaktmöglichkeiten zum Administrator via Schneckenpost. Du kannst BBCode verwenden.";
$a->strings["Notes"] = "Hinweise";
$a->strings["Additional notes that are displayed beneath the contact information. You can use BBCode here."] = "Zusätzliche Informationen die neben den Kontaktmöglichkeiten angezeigt werden. Du kannst BBCode verwenden.";
-$a->strings["How to contact the operator via email. (will be displayed obfuscated)"] = "Wie erreichts man den Betreiber per Email. (Adresse wird verschleiert dargestellt)";
+$a->strings["How to contact the operator via email. (will be displayed obfuscated)"] = "Wie man den Betreiber per Email erreicht. (Adresse wird verschleiert dargestellt)";
$a->strings["Footer note"] = "Fußnote";
$a->strings["Text for the footer. You can use BBCode here."] = "Text für die Fußzeile. Du kannst BBCode verwenden.";
$a->strings["Report Bug"] = "Fehlerreport erstellen";
@@ -1129,14 +1139,14 @@ $a->strings[":-)"] = ":-)";
$a->strings[":-("] = ":-(";
$a->strings["lol"] = "lol";
$a->strings["Quick Comment Settings"] = "Schnell-Kommentar Einstellungen";
-$a->strings["Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies."] = "Kurz-Kommentare findet man in der Nähe der Kommentar-Boxen. Ein Klick darauf erstellt einfache Antworten.";
+$a->strings["Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies."] = "Kurzkommentare findet man in der Nähe der Kommentarboxen. Ein Klick darauf erstellt einfache Antworten.";
$a->strings["Enter quick comments, one per line"] = "Gib einen Schnell-Kommentar pro Zeile ein";
$a->strings["Quick Comment settings saved."] = "Schnell-Kommentare Einstellungen gespeichert";
$a->strings["Tile Server URL"] = "Tile Server URL";
$a->strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">public tile servers</a>"] = "Eine Liste <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">öffentlicher Tile Server</a>";
$a->strings["Default zoom"] = "Standard Zoom";
$a->strings["The default zoom level. (1:world, 18:highest)"] = "Standard Zoomlevel (1: Welt; 18: höchstes)";
-$a->strings["The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail."] = "Mit dem MathJax Addon können mathematische Formeln, die mit LaTeX geschrieben wurden, dargestellt werden. Die Formel wird mit den üblichen $$ oder einem eqnarray Block gekennzeichnet. Formeln werden in allen Beiträgen auf deiner Pinnwand, dem Netzwerk-Stream sowie privaten Nachrichten gerendert.";
+$a->strings["The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail."] = "Mit dem MathJax Addon können mathematische Formeln, die mit LaTeX geschrieben wurden, dargestellt werden. Die Formel wird mit den üblichen $$ oder einem eqnarray Block gekennzeichnet. Formeln werden in allen Beiträgen auf deiner Pinnwand, dem Netzwerkstream sowie privaten Nachrichten gerendert.";
$a->strings["Use the MathJax renderer"] = "MathJax verwenden";
$a->strings["MathJax Base URL"] = "MathJax Basis-URL";
$a->strings["The URL for the javascript file that should be included to use MathJax. Can be either the MathJax CDN or another installation of MathJax."] = "Die URL der MathJax Javascript-Datei, die verwendet werden soll. Diese kann entweder aus der MathJax CDN oder einer anderen Quelle stammen.";
@@ -1153,7 +1163,6 @@ $a->strings["Select default avatar image if none was found at Gravatar. See READ
$a->strings["Rating of images"] = "Bildbewertung";
$a->strings["Select the appropriate avatar rating for your site. See README"] = "Wähle eine angemessene Bildbewertung für Deinen Server. Schaue auch sonst im README nach.";
$a->strings["Gravatar settings updated."] = "Gravatar Einstellungen aktualisiert.";
-$a->strings["Your account on %s will expire in a few days."] = "Dein Konto auf %s wird in ein paar Tagen verfallen.";
$a->strings["Your Friendica test account is about to expire."] = "Dein Friendica Test Konto wird bald verfallen.";
$a->strings["Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at http://dir.friendica.com/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com."] = "Hallo %1\$s,\n\ndein Test-Konto auf %2\$s wird in weniger als fünf Tagen verfallen. Wir hoffen, dass dir dieser Testlauf gefallen hat, so dass du die Gelegenheit nutzt und dir eine feste Friendica-Site für deine integrierte Social-Network-Kommunikation suchst. Eine Liste öffentlicher Sites findest du auf http://dir.friendica.com/siteinfo. Um mehr Information darüber zu bekommen, wie man einen eigenen Friendica-Server aufsetzt, kannst du auch einen Blick auf die Friendica Projektseite werfen: http://friendica.com";
$a->strings["\"pageheader\" Settings"] = "\"pageheader\"-Einstellungen";
@@ -1188,7 +1197,7 @@ $a->strings["If enabled all your <strong>public</strong> postings can be posted
$a->strings["<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to StatusNet will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "<strong>Hinweis</strong>: Aufgrund deiner Privatsphären-Einstellungen (<em>Profil-Details vor unbekannten Betrachtern verbergen?</em>) wird der Link, der eventuell an deinen StatusNet Account angehängt wird, um auf den original Artikel zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde.";
$a->strings["Allow posting to StatusNet"] = "Veröffentlichung bei StatusNet erlauben";
$a->strings["Send public postings to StatusNet by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei StatusNet";
-$a->strings["Send #tag links to StatusNet"] = "#Tags nach StatusNet senden";
+$a->strings["Send linked #-tags and @-names to StatusNet"] = "Sende verlinkte #-Tags und @-Namen nach StatusNet";
$a->strings["Clear OAuth configuration"] = "OAuth-Konfiguration löschen";
$a->strings["API URL"] = "API-URL";
$a->strings["Post to Tumblr"] = "Bei Tumblr veröffentlichen";
@@ -1212,6 +1221,8 @@ $a->strings["WordPress username"] = "WordPress-Benutzername";
$a->strings["WordPress password"] = "WordPress-Passwort";
$a->strings["WordPress API URL"] = "WordPress-API-URL";
$a->strings["Post to WordPress by default"] = "Standardmäßig auf WordPress veröffentlichen";
+$a->strings["Provide a backlink to the Friendica post"] = "Einen zurück zum Friendica-Beitrag hinzufügen";
+$a->strings["Read the original post and comment stream on Friendica"] = "Den Original-Beitrag samt Kommentaren bei Friendica lesen";
$a->strings["\"Show more\" Settings"] = "\"Mehr zeigen\" Einstellungen";
$a->strings["Enable Show More"] = "Aktiviere \"Mehr zeigen\"";
$a->strings["Cutting posts after how much characters"] = "Begrenze Beiträge nach einer bestimmten Anzahl an Buchstaben";
@@ -1234,7 +1245,7 @@ $a->strings["If enabled all your <strong>public</strong> postings can be posted
$a->strings["<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "<strong>Hinweis</strong>: Aufgrund deiner Privatsphären-Einstellungen (<em>Profil-Details vor unbekannten Betrachtern verbergen?</em>) wird der Link, der eventuell an an deinen Twitter Account angehängt wird, um auf den original Artikel zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde.";
$a->strings["Allow posting to Twitter"] = "Veröffentlichung bei Twitter erlauben";
$a->strings["Send public postings to Twitter by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter";
-$a->strings["Send #tag links to Twitter"] = "#Tags nach Twitter senden";
+$a->strings["Send linked #-tags and @-names to Twitter"] = "Sende verlinkte #-Tags und @-Namen nach Twitter";
$a->strings["Consumer key"] = "Consumer Key";
$a->strings["Consumer secret"] = "Consumer Secret";
$a->strings["IRC Settings"] = "IRC Einstellungen";
@@ -1255,8 +1266,10 @@ $a->strings["Posterous Post Settings"] = "Posterous Beitrags-Einstellungen";
$a->strings["Enable Posterous Post Plugin"] = "Posterous-Plugin aktivieren";
$a->strings["Posterous login"] = "Posterous-Anmeldename";
$a->strings["Posterous password"] = "Posterous-Passwort";
+$a->strings["Posterous site ID"] = "Posterous site ID";
+$a->strings["Posterous API token"] = "Posterous API token";
$a->strings["Post to Posterous by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei Posterous";
-$a->strings["Theme settings"] = "Themen Einstellungen";
+$a->strings["Theme settings"] = "Themeneinstellungen";
$a->strings["Set resize level for images in posts and comments (width and height)"] = "Wähle das Vergrößerungsmaß für Bilder in Beiträgen und Kommentaren (Höhe und Breite)";
$a->strings["Set font-size for posts and comments"] = "Schriftgröße für Beiträge und Kommentare festlegen";
$a->strings["Set theme width"] = "Theme Breite festlegen";
@@ -1277,14 +1290,22 @@ $a->strings["Find Friends"] = "Freunde finden";
$a->strings["Local Directory"] = "Lokales Verzeichnis";
$a->strings["Similar Interests"] = "Ähnliche Interessen";
$a->strings["Invite Friends"] = "Freunde einladen";
-$a->strings["Earth View"] = "Earth View";
+$a->strings["Earth Layers"] = "Earth Layers";
+$a->strings["Set zoomfactor for Earth Layers"] = "Zoomfaktor der Earth Layer";
+$a->strings["Set longitude (X) for Earth Layers"] = "Longitude (X) der Earth Layer";
+$a->strings["Set latitude (Y) for Earth Layers"] = "Latitude (Y) der Earth Layer";
$a->strings["Help or @NewHere ?"] = "Hilfe oder @NewHere";
$a->strings["Connect Services"] = "Verbinde Dienste";
$a->strings["Last Tweets"] = "Neueste Tweets";
-$a->strings["Set twitter search term"] = "";
+$a->strings["Set twitter search term"] = "Twitter Suchbegriff";
+$a->strings["don't show"] = "nicht zeigen";
+$a->strings["show"] = "zeigen";
+$a->strings["Show/hide boxes at right-hand column:"] = "Rahmen auf der rechten Seite anzeigen/verbergen";
$a->strings["Set line-height for posts and comments"] = "Liniengröße für Beiträge und Kommantare festlegen";
$a->strings["Set resolution for middle column"] = "Auflösung für die Mittelspalte setzen";
$a->strings["Set color scheme"] = "Wähle Farbschema";
+$a->strings["Set zoomfactor for Earth Layer"] = "Zoomfaktor der Earth Layer";
+$a->strings["Last tweets"] = "Neueste Tweets";
$a->strings["Alignment"] = "Ausrichtung";
$a->strings["Left"] = "Links";
$a->strings["Center"] = "Mitte";
@@ -1295,6 +1316,7 @@ $a->strings["j F"] = "j F";
$a->strings["Birthday:"] = "Geburtstag:";
$a->strings["Age:"] = "Alter:";
$a->strings["Status:"] = "Status:";
+$a->strings["for %1\$d %2\$s"] = "für %1\$d %2\$s";
$a->strings["Homepage:"] = "Homepage:";
$a->strings["Tags:"] = "Tags";
$a->strings["Religion:"] = "Religion:";
@@ -1397,7 +1419,6 @@ $a->strings["%d Contact"] = array(
0 => "%d Kontakt",
1 => "%d Kontakte",
);
-$a->strings["Search"] = "Suche";
$a->strings["Monday"] = "Montag";
$a->strings["Tuesday"] = "Dienstag";
$a->strings["Wednesday"] = "Mittwoch";
@@ -1436,6 +1457,7 @@ $a->strings["view full size"] = "Volle Größe anzeigen";
$a->strings["Embedded content"] = "Eingebetteter Inhalt";
$a->strings["Embedding disabled"] = "Einbettungen deaktiviert";
$a->strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Eine gelöschte Gruppe mit diesem Namen wurde wiederbelebt. Bestehende Berechtigungseinstellungen <strong>könnten</strong> auf diese Gruppe oder zukünftige Mitglieder angewandt werden. Falls du dies nicht möchtest, erstelle bitte eine andere Gruppe mit einem anderen Namen.";
+$a->strings["Default privacy group for new contacts"] = "Voreingestellte Gruppe für neue Kontakte";
$a->strings["Everybody"] = "Alle Kontakte";
$a->strings["edit"] = "bearbeiten";
$a->strings["Groups"] = "Gruppen";
@@ -1458,7 +1480,7 @@ $a->strings["People directory"] = "Nutzerverzeichnis";
$a->strings["Conversations from your friends"] = "Unterhaltungen deiner Kontakte";
$a->strings["Friend Requests"] = "Kontaktanfragen";
$a->strings["See all notifications"] = "Alle Benachrichtigungen anzeigen";
-$a->strings["Mark all system notifications seen"] = "Markiere alle System-Benachrichtigungen als gelesen";
+$a->strings["Mark all system notifications seen"] = "Markiere alle Systembenachrichtigungen als gelesen";
$a->strings["Private mail"] = "Private Email";
$a->strings["Inbox"] = "Eingang";
$a->strings["Outbox"] = "Ausgang";
@@ -1488,7 +1510,7 @@ $a->strings["Saved Folders"] = "Gespeicherte Ordner";
$a->strings["Everything"] = "Alles";
$a->strings["Categories"] = "Kategorien";
$a->strings["Logged out."] = "Abgemeldet.";
-$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Beim versuch dich mit der von dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe dass du die OpenID richtig geschrieben hast.";
+$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Beim Versuch dich mit der von dir angegebenen OpenID anzumelden trat ein Problem auf. Bitte überprüfe, dass du die OpenID richtig geschrieben hast.";
$a->strings["The error message was:"] = "Die Fehlermeldung lautete:";
$a->strings["Miscellaneous"] = "Verschiedenes";
$a->strings["year"] = "Jahr";
@@ -1514,8 +1536,6 @@ $a->strings["Image/photo"] = "Bild/Foto";
$a->strings["Cannot locate DNS info for database server '%s'"] = "Kann die DNS Informationen für den Datenbanken Server '%s' nicht ermitteln.";
$a->strings["[no subject]"] = "[kein Betreff]";
$a->strings["Visible to everybody"] = "Für jeden sichtbar";
-$a->strings["show"] = "zeigen";
-$a->strings["don't show"] = "nicht zeigen";
$a->strings["Friendica Notification"] = "Friendica-Benachrichtigung";
$a->strings["Thank You,"] = "Danke,";
$a->strings["%s Administrator"] = "der Administrator von %s";
@@ -1560,15 +1580,31 @@ $a->strings["A new person is sharing with you at "] = "Eine neue Person teilt mi
$a->strings["You have a new follower at "] = "Du hast einen neuen Kontakt auf ";
$a->strings["image/photo"] = "Bild/Foto";
$a->strings["link"] = "Verweis";
+$a->strings["An invitation is required."] = "Du benötigst eine Einladung.";
+$a->strings["Invitation could not be verified."] = "Die Einladung konnte nicht überprüft werden.";
+$a->strings["Invalid OpenID url"] = "Ungültige OpenID URL";
+$a->strings["Please enter the required information."] = "Bitte trage die erforderlichen Informationen ein.";
+$a->strings["Please use a shorter name."] = "Bitte verwende einen kürzeren Namen.";
+$a->strings["Name too short."] = "Der Name ist zu kurz.";
+$a->strings["That doesn't appear to be your full (First Last) name."] = "Das scheint nicht dein kompletter Name (Vor- und Nachname) zu sein.";
+$a->strings["Your email domain is not among those allowed on this site."] = "Die Domain deiner E-Mail Adresse ist auf dieser Seite nicht erlaubt.";
+$a->strings["Not a valid email address."] = "Keine gültige E-Mail-Adresse.";
+$a->strings["Cannot use that email."] = "Konnte diese E-Mail-Adresse nicht verwenden.";
+$a->strings["Your \"nickname\" can only contain \"a-z\", \"0-9\", \"-\", and \"_\", and must also begin with a letter."] = "Dein Spitzname darf nur aus Buchstaben und Zahlen (\"a-z\",\"0-9\", \"_\" und \"-\") bestehen, außerdem muss er mit einem Buchstaben beginnen.";
+$a->strings["Nickname is already registered. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
+$a->strings["Nickname was once registered here and may not be re-used. Please choose another."] = "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen.";
+$a->strings["SERIOUS ERROR: Generation of security keys failed."] = "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden.";
+$a->strings["An error occurred during registration. Please try again."] = "Wärend der Anmeldung ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
+$a->strings["An error occurred creating your default profile. Please try again."] = "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal.";
$a->strings["Welcome "] = "Willkommen ";
$a->strings["Please upload a profile photo."] = "Bitte lade ein Profilbild hoch.";
$a->strings["Welcome back "] = "Willkommen zurück ";
-$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Das Sicherheits-Merkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden).";
+$a->strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "Das Sicherheitsmerkmal war nicht korrekt. Das passiert meistens wenn das Formular vor dem Absenden zu lange geöffnet war (länger als 3 Stunden).";
$a->strings["stopped following"] = "wird nicht mehr gefolgt";
$a->strings["View Status"] = "Pinnwand anschauen";
$a->strings["View Profile"] = "Profil anschauen";
$a->strings["View Photos"] = "Bilder anschauen";
-$a->strings["Network Posts"] = "Netzwerk-Beiträge";
+$a->strings["Network Posts"] = "Netzwerkbeiträge";
$a->strings["Edit Contact"] = "Kontakt bearbeiten";
$a->strings["Send PM"] = "Private Nachricht senden";
$a->strings["post/item"] = "Nachricht/Beitrag";
diff --git a/view/dfrn_req_confirm.tpl b/view/dfrn_req_confirm.tpl
index 58e9233aa..6c916323c 100644
--- a/view/dfrn_req_confirm.tpl
+++ b/view/dfrn_req_confirm.tpl
@@ -11,6 +11,10 @@ $please
<input type="hidden" name="localconfirm" value="1" />
$aes_allow
+<label id="dfrn-request-homecoming-hide-label" for="dfrn-request-homecoming-hide">$hidethem</label>
+<input type="checkbox" name="hidden-contact" value="1" {{ if $hidechecked }}checked="checked" {{ endif }} />
+
+
<div id="dfrn-request-homecoming-submit-wrapper" >
<input id="dfrn-request-homecoming-submit" type="submit" name="submit" value="$submit" />
</div>
diff --git a/view/diaspora_like_relay.tpl b/view/diaspora_like_relay.tpl
index 65559b05b..8b67f4de3 100644..100755
--- a/view/diaspora_like_relay.tpl
+++ b/view/diaspora_like_relay.tpl
@@ -5,9 +5,9 @@
<target_type>$target_type</target_type>
<parent_guid>$parent_guid</parent_guid>
<parent_author_signature>$parentsig</parent_author_signature>
- <author_signature>$authrosig</author_signature>
+ <author_signature>$authorsig</author_signature>
<positive>$positive</positive>
<diaspora_handle>$handle</diaspora_handle>
</like>
</post>
-</XML> \ No newline at end of file
+</XML>
diff --git a/view/diaspora_relay_retraction.tpl b/view/diaspora_relay_retraction.tpl
new file mode 100644
index 000000000..e76c7c6c5
--- /dev/null
+++ b/view/diaspora_relay_retraction.tpl
@@ -0,0 +1,10 @@
+<XML>
+ <post>
+ <relayable_retraction>
+ <target_type>$type</target_type>
+ <target_guid>$guid</target_guid>
+ <target_author_signature>$signature</target_author_signature>
+ <sender_handle>$handle</sender_handle>
+ </relayable_retraction>
+ </post>
+</XML>
diff --git a/view/diaspora_relayable_retraction.tpl b/view/diaspora_relayable_retraction.tpl
new file mode 100755
index 000000000..73cff8343
--- /dev/null
+++ b/view/diaspora_relayable_retraction.tpl
@@ -0,0 +1,11 @@
+<XML>
+ <post>
+ <relayable_retraction>
+ <target_type>$target_type</target_type>
+ <target_guid>$guid</target_guid>
+ <parent_author_signature>$parentsig</parent_author_signature>
+ <target_author_signature>$authorsig</target_author_signature>
+ <sender_handle>$handle</sender_handle>
+ </relayable_retraction>
+ </post>
+</XML>
diff --git a/view/eo/lostpass_eml.tpl b/view/eo/lostpass_eml.tpl
new file mode 100644
index 000000000..aad63b62a
--- /dev/null
+++ b/view/eo/lostpass_eml.tpl
@@ -0,0 +1,32 @@
+
+Kara $[username],
+ $[sitename] ricevis peton por rekomencigi vian pasvorton.
+Por konfirmi la peton, bonvolu klaki la sekvantan konfirmligilon
+aÅ­ alglui Äin en la adreskampo de via retumilo.
+
+Se vi NE petis tiun ÅanÄon, bonvolu NE KLAKU la
+sekvantan ligilon kaj ignoru aÅ­ forvisu ĉi-mesaÄon.
+
+Ni ne ÅanÄu vian pasvorton se ni ne povas kontroli ĉu estas vi
+kiu petis lala ÅanÄon.
+
+Sekvu ĉi tion ligilon por konfirmi vian identecon:
+
+$[reset_link]
+
+Poste, vi ricevos mesaÄon enhavonte la novan pasvorton.
+
+Vi eblas Åangi la pasvorton ĉe viaj kontdoagordoj paÄo post ensaluti.
+
+La akreditaĵoj estas:
+
+Retejo:»$[siteurl]
+Salutnomo:»$[email]
+
+
+
+
+Salutoj,
+ $[sitename] administranto
+
+ \ No newline at end of file
diff --git a/view/eo/messages.po b/view/eo/messages.po
index 593127339..390dea96c 100644
--- a/view/eo/messages.po
+++ b/view/eo/messages.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: http://bugs.friendica.com/\n"
-"POT-Creation-Date: 2012-05-03 17:20-0700\n"
-"PO-Revision-Date: 2012-05-04 09:50+0000\n"
+"POT-Creation-Date: 2012-05-10 10:00-0700\n"
+"PO-Revision-Date: 2012-05-11 22:39+0000\n"
"Last-Translator: Martin Schmitt <mas@scsy.de>\n"
"Language-Team: Esperanto (http://www.transifex.net/projects/p/friendica/language/eo/)\n"
"MIME-Version: 1.0\n"
@@ -50,15 +50,14 @@ msgstr "Äœisdatigo de kontakto malsukcesis."
#: ../../mod/register.php:38 ../../mod/regmod.php:116 ../../mod/item.php:124
#: ../../mod/item.php:140 ../../mod/profile_photo.php:19
#: ../../mod/profile_photo.php:139 ../../mod/profile_photo.php:150
-#: ../../mod/profile_photo.php:163 ../../mod/message.php:38
-#: ../../mod/message.php:90 ../../mod/allfriends.php:9
+#: ../../mod/profile_photo.php:163 ../../mod/message.php:44
+#: ../../mod/message.php:96 ../../mod/allfriends.php:9
#: ../../mod/nogroup.php:25 ../../mod/wall_upload.php:53
-#: ../../mod/follow.php:8 ../../mod/common.php:9 ../../mod/display.php:138
-#: ../../mod/profiles.php:7 ../../mod/profiles.php:365
-#: ../../mod/delegate.php:6 ../../mod/suggest.php:28 ../../mod/invite.php:13
-#: ../../mod/invite.php:81 ../../mod/dfrn_confirm.php:53
-#: ../../addon/facebook/facebook.php:485 ../../include/items.php:3187
-#: ../../index.php:306
+#: ../../mod/follow.php:8 ../../mod/display.php:138 ../../mod/profiles.php:7
+#: ../../mod/profiles.php:365 ../../mod/delegate.php:6
+#: ../../mod/suggest.php:28 ../../mod/invite.php:13 ../../mod/invite.php:81
+#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:495
+#: ../../include/items.php:3202 ../../index.php:306
msgid "Permission denied."
msgstr "Malpermesita."
@@ -88,7 +87,7 @@ msgid "Return to contact editor"
msgstr "Reen al kontakta redaktilo"
#: ../../mod/crepair.php:148 ../../mod/settings.php:541
-#: ../../mod/settings.php:567 ../../mod/admin.php:638 ../../mod/admin.php:647
+#: ../../mod/settings.php:567 ../../mod/admin.php:643 ../../mod/admin.php:652
msgid "Name"
msgstr "Nomo"
@@ -132,10 +131,10 @@ msgstr "Nova bildo el tiu adreso"
#: ../../mod/localtime.php:45 ../../mod/contacts.php:322
#: ../../mod/settings.php:539 ../../mod/settings.php:685
#: ../../mod/settings.php:746 ../../mod/settings.php:940
-#: ../../mod/manage.php:109 ../../mod/group.php:85 ../../mod/admin.php:400
-#: ../../mod/admin.php:635 ../../mod/admin.php:771 ../../mod/admin.php:970
-#: ../../mod/admin.php:1057 ../../mod/profiles.php:534
-#: ../../mod/invite.php:119 ../../addon/facebook/facebook.php:575
+#: ../../mod/manage.php:109 ../../mod/group.php:85 ../../mod/admin.php:404
+#: ../../mod/admin.php:640 ../../mod/admin.php:776 ../../mod/admin.php:975
+#: ../../mod/admin.php:1062 ../../mod/profiles.php:534
+#: ../../mod/invite.php:119 ../../addon/facebook/facebook.php:597
#: ../../addon/yourls/yourls.php:76 ../../addon/ljpost/ljpost.php:93
#: ../../addon/nsfw/nsfw.php:57 ../../addon/planets/planets.php:158
#: ../../addon/uhremotestorage/uhremotestorage.php:89
@@ -159,9 +158,10 @@ msgstr "Nova bildo el tiu adreso"
#: ../../addon/piwik/piwik.php:89 ../../addon/twitter/twitter.php:180
#: ../../addon/twitter/twitter.php:209 ../../addon/twitter/twitter.php:375
#: ../../addon/irc/irc.php:55 ../../addon/blogger/blogger.php:102
-#: ../../addon/posterous/posterous.php:90
-#: ../../view/theme/cleanzero/config.php:71
-#: ../../view/theme/diabook/config.php:91
+#: ../../addon/posterous/posterous.php:103
+#: ../../view/theme/cleanzero/config.php:80
+#: ../../view/theme/diabook/theme.php:685
+#: ../../view/theme/diabook/config.php:190
#: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70
#: ../../include/conversation.php:555
msgid "Submit"
@@ -217,12 +217,12 @@ msgstr "l, F j"
msgid "Edit event"
msgstr "Redakti okazon"
-#: ../../mod/events.php:300 ../../include/text.php:1053
+#: ../../mod/events.php:300 ../../include/text.php:1054
msgid "link to source"
-msgstr "ligi al fonto"
+msgstr "ligilo al fonto"
-#: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:69
-#: ../../include/nav.php:52 ../../boot.php:1493
+#: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:127
+#: ../../include/nav.php:52 ../../boot.php:1499
msgid "Events"
msgstr "Okazoj"
@@ -272,7 +272,7 @@ msgid "Description:"
msgstr "Priskribo"
#: ../../mod/events.php:423 ../../include/event.php:37
-#: ../../include/bb2diaspora.php:260 ../../boot.php:1092
+#: ../../include/bb2diaspora.php:260 ../../boot.php:1098
msgid "Location:"
msgstr "Loko:"
@@ -347,14 +347,14 @@ msgstr "Jes"
msgid "No"
msgstr "Ne"
-#: ../../mod/photos.php:43 ../../boot.php:1487
+#: ../../mod/photos.php:43 ../../boot.php:1493
msgid "Photo Albums"
msgstr "Bildalbumoj"
#: ../../mod/photos.php:51 ../../mod/photos.php:151 ../../mod/photos.php:879
#: ../../mod/photos.php:950 ../../mod/photos.php:965 ../../mod/photos.php:1382
#: ../../mod/photos.php:1394 ../../addon/communityhome/communityhome.php:110
-#: ../../view/theme/diabook/theme.php:436
+#: ../../view/theme/diabook/theme.php:526
msgid "Contact Photos"
msgstr "Kontaktbildoj"
@@ -377,7 +377,7 @@ msgstr "Kontaktoj informoj ne disponeblas"
#: ../../mod/profile_photo.php:74 ../../mod/profile_photo.php:174
#: ../../mod/profile_photo.php:252 ../../mod/profile_photo.php:261
#: ../../addon/communityhome/communityhome.php:111
-#: ../../view/theme/diabook/theme.php:437
+#: ../../view/theme/diabook/theme.php:527
msgid "Profile Photos"
msgstr "Profilbildoj"
@@ -399,7 +399,7 @@ msgstr "estas markita en"
#: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70
#: ../../addon/communityhome/communityhome.php:163
-#: ../../view/theme/diabook/theme.php:408 ../../include/text.php:1304
+#: ../../view/theme/diabook/theme.php:498 ../../include/text.php:1305
#: ../../include/diaspora.php:1654 ../../include/conversation.php:53
#: ../../include/conversation.php:126
msgid "photo"
@@ -535,8 +535,8 @@ msgid "Share"
msgstr "Kunhavigi"
#: ../../mod/photos.php:1214 ../../mod/editpost.php:104
-#: ../../mod/wallmessage.php:145 ../../mod/message.php:188
-#: ../../mod/message.php:380 ../../include/conversation.php:361
+#: ../../mod/wallmessage.php:145 ../../mod/message.php:213
+#: ../../mod/message.php:405 ../../include/conversation.php:361
#: ../../include/conversation.php:706 ../../include/conversation.php:983
msgid "Please wait"
msgstr "Bonvolu atendi"
@@ -548,7 +548,7 @@ msgstr "Tiu estas vi"
#: ../../mod/photos.php:1232 ../../mod/photos.php:1272
#: ../../mod/photos.php:1303 ../../include/conversation.php:554
-#: ../../boot.php:506
+#: ../../boot.php:512
msgid "Comment"
msgstr "Komenti"
@@ -558,7 +558,7 @@ msgid "Preview"
msgstr "AntaÅ­rigardi"
#: ../../mod/photos.php:1331 ../../mod/settings.php:602
-#: ../../mod/settings.php:683 ../../mod/group.php:168 ../../mod/admin.php:642
+#: ../../mod/settings.php:683 ../../mod/group.php:168 ../../mod/admin.php:647
#: ../../include/conversation.php:318 ../../include/conversation.php:584
msgid "Delete"
msgstr "ForviÅi"
@@ -575,7 +575,7 @@ msgstr "Ì‚Ä´usaj bildoj"
msgid "Not available."
msgstr "Ne disponebla."
-#: ../../mod/community.php:30 ../../view/theme/diabook/theme.php:71
+#: ../../mod/community.php:30 ../../view/theme/diabook/theme.php:129
#: ../../include/nav.php:101
msgid "Community"
msgstr "Komunumo"
@@ -634,7 +634,7 @@ msgid "Edit"
msgstr "Redakti"
#: ../../mod/editpost.php:96 ../../mod/wallmessage.php:143
-#: ../../mod/message.php:186 ../../mod/message.php:378
+#: ../../mod/message.php:211 ../../mod/message.php:403
#: ../../include/conversation.php:965
msgid "Upload photo"
msgstr "AlÅuti bildon"
@@ -644,7 +644,7 @@ msgid "Attach file"
msgstr "Kunligi dosieron"
#: ../../mod/editpost.php:98 ../../mod/wallmessage.php:144
-#: ../../mod/message.php:187 ../../mod/message.php:379
+#: ../../mod/message.php:212 ../../mod/message.php:404
#: ../../include/conversation.php:969
msgid "Insert web link"
msgstr "Enmeti retan adreson"
@@ -770,7 +770,7 @@ msgstr "Åœajnas kvazaÅ­ vi jam amikiÄis kun %s."
msgid "Invalid profile URL."
msgstr "Nevalida adreso de profilo."
-#: ../../mod/dfrn_request.php:476 ../../mod/follow.php:20
+#: ../../mod/dfrn_request.php:476 ../../mod/follow.php:23
msgid "Disallowed profile URL."
msgstr "Malpermesita adreso de profilo."
@@ -806,7 +806,7 @@ msgstr "Bonvolu konfirmi vian prezenton / kontaktpeton al %s."
msgid "Confirm"
msgstr "Konfirmi."
-#: ../../mod/dfrn_request.php:688 ../../include/items.php:2707
+#: ../../mod/dfrn_request.php:688 ../../include/items.php:2717
msgid "[Name Withheld]"
msgstr "[KaÅita nomo]"
@@ -1170,7 +1170,7 @@ msgid "is interested in:"
msgstr "interesiÄas pri:"
#: ../../mod/match.php:58 ../../mod/suggest.php:59
-#: ../../include/contact_widgets.php:9 ../../boot.php:1036
+#: ../../include/contact_widgets.php:9 ../../boot.php:1042
msgid "Connect"
msgstr "Konekti"
@@ -1218,7 +1218,7 @@ msgstr "Reto"
msgid "Personal"
msgstr "Propra"
-#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:65
+#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:123
#: ../../include/nav.php:77 ../../include/nav.php:115
msgid "Home"
msgstr "Hejmo"
@@ -1227,7 +1227,7 @@ msgstr "Hejmo"
msgid "Introductions"
msgstr "Prezentoj"
-#: ../../mod/notifications.php:100 ../../mod/message.php:102
+#: ../../mod/notifications.php:100 ../../mod/message.php:104
#: ../../include/nav.php:128
msgid "Messages"
msgstr "MesaÄoj"
@@ -1267,7 +1267,7 @@ msgid "if applicable"
msgstr "se aplikebla"
#: ../../mod/notifications.php:157 ../../mod/notifications.php:204
-#: ../../mod/admin.php:640
+#: ../../mod/admin.php:645
msgid "Approve"
msgstr "Aprobi"
@@ -1456,7 +1456,7 @@ msgstr "Sugesti amikojn"
msgid "Network type: %s"
msgstr "Reta tipo: %s"
-#: ../../mod/contacts.php:280
+#: ../../mod/contacts.php:280 ../../include/contact_widgets.php:183
#, php-format
msgid "%d contact in common"
msgid_plural "%d contacts in common"
@@ -1468,12 +1468,12 @@ msgid "View all contacts"
msgstr "Vidi ĉiujn kontaktojn"
#: ../../mod/contacts.php:290 ../../mod/contacts.php:347
-#: ../../mod/admin.php:644
+#: ../../mod/admin.php:649
msgid "Unblock"
msgstr "Malbloki"
#: ../../mod/contacts.php:290 ../../mod/contacts.php:347
-#: ../../mod/admin.php:643
+#: ../../mod/admin.php:648
msgid "Block"
msgstr "Bloki"
@@ -1566,7 +1566,7 @@ msgstr "Plej ĵusa Äisdatigo:"
msgid "Update public posts"
msgstr "Äœisdatigi publikajn afiÅojn"
-#: ../../mod/contacts.php:344 ../../mod/admin.php:1115
+#: ../../mod/contacts.php:344 ../../mod/admin.php:1120
msgid "Update now"
msgstr "Äœisdatigi nun"
@@ -1659,7 +1659,7 @@ msgstr "vi estas admiranto de"
msgid "Edit contact"
msgstr "Redakti kontakton"
-#: ../../mod/contacts.php:544 ../../view/theme/diabook/theme.php:67
+#: ../../mod/contacts.php:544 ../../view/theme/diabook/theme.php:125
#: ../../include/nav.php:139
msgid "Contacts"
msgstr "Kontaktoj"
@@ -1693,10 +1693,10 @@ msgstr "Pasvorta riparado petita je %s"
#: ../../mod/lostpass.php:45 ../../mod/lostpass.php:107
#: ../../mod/register.php:388 ../../mod/register.php:442
#: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:742
-#: ../../addon/facebook/facebook.php:658
-#: ../../addon/facebook/facebook.php:1148
-#: ../../addon/testdrive/testdrive.php:58 ../../include/items.php:2716
-#: ../../boot.php:686
+#: ../../addon/facebook/facebook.php:680
+#: ../../addon/facebook/facebook.php:1170
+#: ../../addon/testdrive/testdrive.php:58 ../../include/items.php:2726
+#: ../../boot.php:692
msgid "Administrator"
msgstr "Administranto"
@@ -1706,7 +1706,7 @@ msgid ""
"Password reset failed."
msgstr "Ne povis konfirmi la peton. (Eble vi sendis Äin antaÅ­.) Pasvorta riparado malsukcesis."
-#: ../../mod/lostpass.php:83 ../../boot.php:818
+#: ../../mod/lostpass.php:83 ../../boot.php:824
msgid "Password Reset"
msgstr "Pasvorta riparado"
@@ -1778,8 +1778,9 @@ msgstr "Eksporto"
msgid "Remove account"
msgstr "Forigi konton"
-#: ../../mod/settings.php:88 ../../mod/admin.php:730 ../../mod/admin.php:935
-#: ../../addon/mathjax/mathjax.php:36 ../../include/nav.php:137
+#: ../../mod/settings.php:88 ../../mod/admin.php:735 ../../mod/admin.php:940
+#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:571
+#: ../../view/theme/diabook/theme.php:701 ../../include/nav.php:137
msgid "Settings"
msgstr "Agordoj"
@@ -1831,7 +1832,7 @@ msgstr " RepoÅtadreso ne validas."
msgid " Cannot change to that email."
msgstr " Ne povas ÅanÄi al tio retpoÅtadreso."
-#: ../../mod/settings.php:468 ../../addon/facebook/facebook.php:470
+#: ../../mod/settings.php:468 ../../addon/facebook/facebook.php:480
#: ../../addon/impressum/impressum.php:77
#: ../../addon/openstreetmap/openstreetmap.php:80
#: ../../addon/mathjax/mathjax.php:66 ../../addon/piwik/piwik.php:105
@@ -2005,7 +2006,7 @@ msgstr "Maksimume 100 eroj"
msgid "Don't show emoticons"
msgstr "Ne montru ridetulojn"
-#: ../../mod/settings.php:821 ../../mod/admin.php:180 ../../mod/admin.php:616
+#: ../../mod/settings.php:821 ../../mod/admin.php:180 ../../mod/admin.php:621
msgid "Normal Account"
msgstr "Normala konto"
@@ -2013,7 +2014,7 @@ msgstr "Normala konto"
msgid "This account is a normal personal profile"
msgstr "Tiu konto estas normala persona profilo"
-#: ../../mod/settings.php:825 ../../mod/admin.php:181 ../../mod/admin.php:617
+#: ../../mod/settings.php:825 ../../mod/admin.php:181 ../../mod/admin.php:622
msgid "Soapbox Account"
msgstr "Soapbox Konto"
@@ -2021,7 +2022,7 @@ msgstr "Soapbox Konto"
msgid "Automatically approve all connection/friend requests as read-only fans"
msgstr "Aŭtomate konfirmi ĉiujn kontaktpetojn kiel nurlegaj admirantoj"
-#: ../../mod/settings.php:829 ../../mod/admin.php:182 ../../mod/admin.php:618
+#: ../../mod/settings.php:829 ../../mod/admin.php:182 ../../mod/admin.php:623
msgid "Community/Celebrity Account"
msgstr "Komunuma/eminentula Konto"
@@ -2030,7 +2031,7 @@ msgid ""
"Automatically approve all connection/friend requests as read-write fans"
msgstr "Aŭtomate konfirmi ĉiujn kontaktpetojn kiel admirantoj kapable legi kaj skribi"
-#: ../../mod/settings.php:833 ../../mod/admin.php:183 ../../mod/admin.php:619
+#: ../../mod/settings.php:833 ../../mod/admin.php:183 ../../mod/admin.php:624
msgid "Automatic Friend Account"
msgstr "AÅ­tomata Amika Konto"
@@ -2356,12 +2357,12 @@ msgstr "La privateco de privataj mesaÄoj al ĉi tiu persono ne ĉiam estas gara
msgid "Invalid contact."
msgstr "Nevalida kontakto."
-#: ../../mod/notes.php:44 ../../boot.php:1499
+#: ../../mod/notes.php:44 ../../boot.php:1505
msgid "Personal Notes"
msgstr "Personaj Notoj"
#: ../../mod/notes.php:63 ../../mod/filer.php:30
-#: ../../addon/facebook/facebook.php:726
+#: ../../addon/facebook/facebook.php:748
#: ../../addon/privacy_image_cache/privacy_image_cache.php:147
#: ../../include/text.php:652
msgid "Save"
@@ -2372,7 +2373,7 @@ msgstr "Konservi"
msgid "Number of daily wall messages for %s exceeded. Message failed."
msgstr "Number of daily wall messages for %s exceeded. MessaÄo malsukcesis."
-#: ../../mod/wallmessage.php:56 ../../mod/message.php:59
+#: ../../mod/wallmessage.php:56 ../../mod/message.php:65
msgid "No recipient selected."
msgstr "Neniom da ricevontoj."
@@ -2380,15 +2381,15 @@ msgstr "Neniom da ricevontoj."
msgid "Unable to check your home location."
msgstr "Ne eblas kontroli vian hejmlokon."
-#: ../../mod/wallmessage.php:62 ../../mod/message.php:66
+#: ../../mod/wallmessage.php:62 ../../mod/message.php:72
msgid "Message could not be sent."
msgstr "Ne povas sendi la mesaÄon."
-#: ../../mod/wallmessage.php:65 ../../mod/message.php:69
+#: ../../mod/wallmessage.php:65 ../../mod/message.php:75
msgid "Message collection failure."
msgstr "Malsukcese provis kolekti mesaÄojn."
-#: ../../mod/wallmessage.php:68 ../../mod/message.php:72
+#: ../../mod/wallmessage.php:68 ../../mod/message.php:78
msgid "Message sent."
msgstr "MesaÄo estas sendita."
@@ -2396,12 +2397,12 @@ msgstr "MesaÄo estas sendita."
msgid "No recipient."
msgstr "Neniom da ricevontoj."
-#: ../../mod/wallmessage.php:124 ../../mod/message.php:169
+#: ../../mod/wallmessage.php:124 ../../mod/message.php:171
#: ../../include/conversation.php:918
msgid "Please enter a link URL:"
msgstr "Bonvolu entajpu adreson de ligilo:"
-#: ../../mod/wallmessage.php:131 ../../mod/message.php:177
+#: ../../mod/wallmessage.php:131 ../../mod/message.php:199
msgid "Send Private Message"
msgstr "Sendi Privatan MesaÄon"
@@ -2412,18 +2413,18 @@ msgid ""
"your site allow private mail from unknown senders."
msgstr "Se vi deziras ke %s respondu, bonvolu kontroli ke la privatecaj agordoj je via retejo permesas privatajn mesaÄojn de nekonataj sendantoj."
-#: ../../mod/wallmessage.php:133 ../../mod/message.php:178
-#: ../../mod/message.php:370
+#: ../../mod/wallmessage.php:133 ../../mod/message.php:200
+#: ../../mod/message.php:395
msgid "To:"
msgstr "Al:"
-#: ../../mod/wallmessage.php:134 ../../mod/message.php:179
-#: ../../mod/message.php:371
+#: ../../mod/wallmessage.php:134 ../../mod/message.php:204
+#: ../../mod/message.php:396
msgid "Subject:"
msgstr "Temo:"
-#: ../../mod/wallmessage.php:140 ../../mod/message.php:183
-#: ../../mod/message.php:374 ../../mod/invite.php:113
+#: ../../mod/wallmessage.php:140 ../../mod/message.php:208
+#: ../../mod/message.php:399 ../../mod/invite.php:113
msgid "Your message:"
msgstr "Via mesaÄo:"
@@ -2605,9 +2606,9 @@ msgstr "Nevaliada profila identigilo."
msgid "Profile Visibility Editor"
msgstr "Redaktilo por profila videbleco."
-#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:66
+#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:124
#: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:74
-#: ../../include/nav.php:50 ../../boot.php:1478
+#: ../../include/nav.php:50 ../../boot.php:1484
msgid "Profile"
msgstr "Profilo"
@@ -2756,7 +2757,7 @@ msgstr "MembriÄi ĉi tie nur eblas laÅ­ invito."
msgid "Your invitation ID: "
msgstr "Via invita idento: "
-#: ../../mod/register.php:553 ../../mod/admin.php:401
+#: ../../mod/register.php:553 ../../mod/admin.php:405
msgid "Registration"
msgstr "Registrado"
@@ -2779,7 +2780,7 @@ msgstr "Elektu kaÅnomon por la profilo. Tiu bezonas komenci kun teksta litero.
msgid "Choose a nickname: "
msgstr "Elektu kaÅnomon: "
-#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:784
+#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:790
msgid "Register"
msgstr "Registri"
@@ -2788,19 +2789,19 @@ msgid "People Search"
msgstr "Serĉi Membrojn"
#: ../../mod/like.php:127 ../../mod/tagger.php:70
-#: ../../addon/facebook/facebook.php:1542
+#: ../../addon/facebook/facebook.php:1564
#: ../../addon/communityhome/communityhome.php:158
#: ../../addon/communityhome/communityhome.php:167
-#: ../../view/theme/diabook/theme.php:403
-#: ../../view/theme/diabook/theme.php:412 ../../include/diaspora.php:1654
+#: ../../view/theme/diabook/theme.php:493
+#: ../../view/theme/diabook/theme.php:502 ../../include/diaspora.php:1654
#: ../../include/conversation.php:48 ../../include/conversation.php:57
#: ../../include/conversation.php:121 ../../include/conversation.php:130
msgid "status"
msgstr "staton"
-#: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1546
+#: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1568
#: ../../addon/communityhome/communityhome.php:172
-#: ../../view/theme/diabook/theme.php:417 ../../include/diaspora.php:1670
+#: ../../view/theme/diabook/theme.php:507 ../../include/diaspora.php:1670
#: ../../include/conversation.php:65
#, php-format
msgid "%1$s likes %2$s's %3$s"
@@ -2812,8 +2813,8 @@ msgid "%1$s doesn't like %2$s's %3$s"
msgstr "%1$s malÅatas la %3$s de %2$s"
#: ../../mod/notice.php:15 ../../mod/viewsrc.php:15 ../../mod/admin.php:156
-#: ../../mod/admin.php:679 ../../mod/admin.php:878 ../../mod/display.php:37
-#: ../../mod/display.php:142 ../../include/items.php:3099
+#: ../../mod/admin.php:684 ../../mod/admin.php:883 ../../mod/display.php:37
+#: ../../mod/display.php:142 ../../include/items.php:3084
msgid "Item not found."
msgstr "Elemento ne estas trovita."
@@ -2821,8 +2822,8 @@ msgstr "Elemento ne estas trovita."
msgid "Access denied."
msgstr "Atingo nepermesita."
-#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:68
-#: ../../include/nav.php:51 ../../boot.php:1484
+#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:126
+#: ../../include/nav.php:51 ../../boot.php:1490
msgid "Photos"
msgstr "Bildoj"
@@ -2963,71 +2964,71 @@ msgstr "Tio tute forigos vian konton. Kiam farita, la konto ne estas restaÅ­rebl
msgid "Please enter your password for verification:"
msgstr "Bonvolu entajpi vian pasvorton por kontrolado:"
-#: ../../mod/message.php:22 ../../include/nav.php:131
+#: ../../mod/message.php:9 ../../include/nav.php:131
msgid "New Message"
msgstr "Nova MesaÄo"
-#: ../../mod/message.php:63
+#: ../../mod/message.php:69
msgid "Unable to locate contact information."
msgstr "Ne eblas trovi kontaktajn informojn."
-#: ../../mod/message.php:117
+#: ../../mod/message.php:119
msgid "Message deleted."
msgstr "MesaÄo estas forviÅita."
-#: ../../mod/message.php:147
+#: ../../mod/message.php:149
msgid "Conversation removed."
msgstr "Dialogo estas forviÅita."
-#: ../../mod/message.php:219
+#: ../../mod/message.php:244
msgid "No messages."
msgstr "Neniom da mesaÄoj."
-#: ../../mod/message.php:226
+#: ../../mod/message.php:251
#, php-format
msgid "Unknown sender - %s"
msgstr "Nekonata sendanto - %s"
-#: ../../mod/message.php:229
+#: ../../mod/message.php:254
#, php-format
msgid "You and %s"
msgstr "Vi kaj %s"
-#: ../../mod/message.php:232
+#: ../../mod/message.php:257
#, php-format
msgid "%s and You"
msgstr "%s kaj vi"
-#: ../../mod/message.php:242 ../../mod/message.php:363
+#: ../../mod/message.php:267 ../../mod/message.php:388
msgid "Delete conversation"
msgstr "ForviÅi dialogon"
-#: ../../mod/message.php:245
+#: ../../mod/message.php:270
msgid "D, d M Y - g:i A"
msgstr "D, d M Y - g:i A"
-#: ../../mod/message.php:247
+#: ../../mod/message.php:272
#, php-format
msgid "%d message"
msgid_plural "%d messages"
msgstr[0] "%d mesaÄo"
msgstr[1] "%d mesaÄoj"
-#: ../../mod/message.php:282
+#: ../../mod/message.php:307
msgid "Message not available."
msgstr "MesaÄo nedisponebla."
-#: ../../mod/message.php:347
+#: ../../mod/message.php:372
msgid "Delete message"
msgstr "ForviÅu mesaÄon"
-#: ../../mod/message.php:365
+#: ../../mod/message.php:390
msgid ""
"No secure communications available. You <strong>may</strong> be able to "
"respond from the sender's profile page."
msgstr "Sekura komunikado ne disponeblas. Vi <strong>eble</strong> povus respondi sur la profilpaÄo de la sendanto."
-#: ../../mod/message.php:369
+#: ../../mod/message.php:394
msgid "Send Reply"
msgstr "Respondi"
@@ -3044,19 +3045,19 @@ msgstr "Neniom da amiko al montri."
msgid "Theme settings updated."
msgstr "Gisdatigis agordojn pri etosoj."
-#: ../../mod/admin.php:96 ../../mod/admin.php:399
+#: ../../mod/admin.php:96 ../../mod/admin.php:403
msgid "Site"
msgstr "Retejo"
-#: ../../mod/admin.php:97 ../../mod/admin.php:634 ../../mod/admin.php:646
+#: ../../mod/admin.php:97 ../../mod/admin.php:639 ../../mod/admin.php:651
msgid "Users"
msgstr "Uzantoj"
-#: ../../mod/admin.php:98 ../../mod/admin.php:728 ../../mod/admin.php:770
+#: ../../mod/admin.php:98 ../../mod/admin.php:733 ../../mod/admin.php:775
msgid "Plugins"
msgstr "Kromprogramoj"
-#: ../../mod/admin.php:99 ../../mod/admin.php:933 ../../mod/admin.php:969
+#: ../../mod/admin.php:99 ../../mod/admin.php:938 ../../mod/admin.php:974
msgid "Themes"
msgstr "Etosoj"
@@ -3068,7 +3069,7 @@ msgstr "DB Äisdatigoj"
msgid "Software Update"
msgstr "Friendica Äœisdatigoj"
-#: ../../mod/admin.php:115 ../../mod/admin.php:1056
+#: ../../mod/admin.php:115 ../../mod/admin.php:1061
msgid "Logs"
msgstr "Protokoloj"
@@ -3076,9 +3077,9 @@ msgstr "Protokoloj"
msgid "User registrations waiting for confirmation"
msgstr "Uzantaj registradoj atendante konfirmon"
-#: ../../mod/admin.php:195 ../../mod/admin.php:398 ../../mod/admin.php:633
-#: ../../mod/admin.php:727 ../../mod/admin.php:769 ../../mod/admin.php:932
-#: ../../mod/admin.php:968 ../../mod/admin.php:1055
+#: ../../mod/admin.php:195 ../../mod/admin.php:402 ../../mod/admin.php:638
+#: ../../mod/admin.php:732 ../../mod/admin.php:774 ../../mod/admin.php:937
+#: ../../mod/admin.php:973 ../../mod/admin.php:1060
msgid "Administration"
msgstr "Administrado"
@@ -3102,487 +3103,507 @@ msgstr "Versio"
msgid "Active plugins"
msgstr "Åœaltitaj kromprogramoj"
-#: ../../mod/admin.php:337
+#: ../../mod/admin.php:341
msgid "Site settings updated."
msgstr "Äœisdatigis retejaj agordoj."
-#: ../../mod/admin.php:385
+#: ../../mod/admin.php:389
msgid "Closed"
msgstr "Ferma"
-#: ../../mod/admin.php:386
+#: ../../mod/admin.php:390
msgid "Requires approval"
msgstr "Bezonas aprobon"
-#: ../../mod/admin.php:387
+#: ../../mod/admin.php:391
msgid "Open"
msgstr "Malferma"
-#: ../../mod/admin.php:391
+#: ../../mod/admin.php:395
msgid "No SSL policy, links will track page SSL state"
msgstr "Sen SSL strategio. Ligiloj sekvos la SSL staton de la paÄo."
-#: ../../mod/admin.php:392
+#: ../../mod/admin.php:396
msgid "Force all links to use SSL"
msgstr "Devigi ke ĉiuj ligiloj uzu SSL."
-#: ../../mod/admin.php:393
+#: ../../mod/admin.php:397
msgid "Self-signed certificate, use SSL for local links only (discouraged)"
msgstr "Memsubskribita atestilo, nur uzu SSL por lokaj ligiloj (malkuraÄigata)"
-#: ../../mod/admin.php:402
+#: ../../mod/admin.php:406
msgid "File upload"
msgstr "AlÅuto"
-#: ../../mod/admin.php:403
+#: ../../mod/admin.php:407
msgid "Policies"
msgstr "Politiko"
-#: ../../mod/admin.php:404
+#: ../../mod/admin.php:408
msgid "Advanced"
msgstr "Altnivela"
-#: ../../mod/admin.php:408 ../../addon/statusnet/statusnet.php:544
+#: ../../mod/admin.php:412 ../../addon/statusnet/statusnet.php:544
msgid "Site name"
msgstr "Nomo de retejo"
-#: ../../mod/admin.php:409
+#: ../../mod/admin.php:413
msgid "Banner/Logo"
msgstr "Emblemo"
-#: ../../mod/admin.php:410
+#: ../../mod/admin.php:414
msgid "System language"
msgstr "Sistema lingvo"
-#: ../../mod/admin.php:411
+#: ../../mod/admin.php:415
msgid "System theme"
msgstr "Sistema etoso"
-#: ../../mod/admin.php:411
+#: ../../mod/admin.php:415
msgid ""
"Default system theme - may be over-ridden by user profiles - <a href='#' "
"id='cnftheme'>change theme settings</a>"
msgstr "DefaÅ­lta sistema etoso - transpasebla de uzantprofiloj - <a href='#' id='cnftheme'>redakti agordoj pri etosoj</a>"
-#: ../../mod/admin.php:412
+#: ../../mod/admin.php:416
msgid "SSL link policy"
msgstr "Strategio por SSL ligiloj"
-#: ../../mod/admin.php:412
+#: ../../mod/admin.php:416
msgid "Determines whether generated links should be forced to use SSL"
msgstr "Difinas ĉu generotaj ligiloj devige uzu SSL."
-#: ../../mod/admin.php:413
+#: ../../mod/admin.php:417
msgid "Maximum image size"
msgstr "Maksimuma bildgrando"
-#: ../../mod/admin.php:413
+#: ../../mod/admin.php:417
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr "Maksimuma grando en bajtoj por alÅutotaj bildoj. DefaÅ­lte 0, kio signifas neniu limito."
-#: ../../mod/admin.php:415
+#: ../../mod/admin.php:419
msgid "Register policy"
msgstr "Interkonsento pri registrado"
-#: ../../mod/admin.php:416
+#: ../../mod/admin.php:420
msgid "Register text"
msgstr "Interkonsento teksto"
-#: ../../mod/admin.php:416
+#: ../../mod/admin.php:420
msgid "Will be displayed prominently on the registration page."
msgstr "Tio estos eminente montrata en la registro paÄo."
-#: ../../mod/admin.php:417
+#: ../../mod/admin.php:421
msgid "Accounts abandoned after x days"
msgstr "Kontoj forlasitaj post x tagoj"
-#: ../../mod/admin.php:417
+#: ../../mod/admin.php:421
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr "Mi ne malÅparu energion por enketi aliajn retejojn pri forlasitaj kontoj. Entajpu 0 por ne uzi templimo."
-#: ../../mod/admin.php:418
+#: ../../mod/admin.php:422
msgid "Allowed friend domains"
msgstr "Permesitaj amikaj domainoj"
-#: ../../mod/admin.php:418
+#: ../../mod/admin.php:422
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr "Perkome disigita listo da domajnoj kiuj rajtas konstrui amikecojn kun ĉi tiu retejo. Ĵokeroj eblas. Malplena por rajtigi ĉiujn ajn domajnojn."
-#: ../../mod/admin.php:419
+#: ../../mod/admin.php:423
msgid "Allowed email domains"
msgstr "Permesitaj retpoÅtaj domajnoj"
-#: ../../mod/admin.php:419
+#: ../../mod/admin.php:423
msgid ""
"Comma separated list of domains which are allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any "
"domains"
msgstr "Perkome disigita listo da domajnoj kiuj uzeblas kiel retpoÅtaj adresoj en novaj registradoj. Ä´okeroj eblas. Malplena por rajtigi ĉiujn ajn domajnojn."
-#: ../../mod/admin.php:420
+#: ../../mod/admin.php:424
msgid "Block public"
msgstr "Bloki publike"
-#: ../../mod/admin.php:420
+#: ../../mod/admin.php:424
msgid ""
"Check to block public access to all otherwise public personal pages on this "
"site unless you are currently logged in."
msgstr "Elektu por bloki publikan atingon al ĉiuj alie publikajn paÄojn en ĉi tiu retejo kiam vi ne estas ensalutita."
-#: ../../mod/admin.php:421
+#: ../../mod/admin.php:425
msgid "Force publish"
msgstr "Devigi publikigon"
-#: ../../mod/admin.php:421
+#: ../../mod/admin.php:425
msgid ""
"Check to force all profiles on this site to be listed in the site directory."
msgstr "Elektu por devigi la registradon en la loka katalogo al ĉiuj profiloj en ĉi tiu retejo."
-#: ../../mod/admin.php:422
+#: ../../mod/admin.php:426
msgid "Global directory update URL"
msgstr "Äœenerala adreso por Äisdatigi la katalogon"
-#: ../../mod/admin.php:422
+#: ../../mod/admin.php:426
msgid ""
"URL to update the global directory. If this is not set, the global directory"
" is completely unavailable to the application."
msgstr "URL adreso por Äisdatigi la tutmondan katalogon. Se ne agordita, la tutmonda katatolge tute ne disponeblas al la programo."
-#: ../../mod/admin.php:424
+#: ../../mod/admin.php:428
msgid "Block multiple registrations"
msgstr "Bloki pluroblajn registradojn."
-#: ../../mod/admin.php:424
+#: ../../mod/admin.php:428
msgid "Disallow users to register additional accounts for use as pages."
msgstr "Malpermesi al uzantoj la permeson por registri pluajn kontojn kiel paÄoj."
-#: ../../mod/admin.php:425
+#: ../../mod/admin.php:429
msgid "OpenID support"
msgstr "Subteno por OpenID"
-#: ../../mod/admin.php:425
+#: ../../mod/admin.php:429
msgid "OpenID support for registration and logins."
msgstr "Subteni OpenID por registrado kaj ensaluto."
-#: ../../mod/admin.php:426
+#: ../../mod/admin.php:430
msgid "Fullname check"
msgstr "Kontroli plenan nomon"
-#: ../../mod/admin.php:426
+#: ../../mod/admin.php:430
msgid ""
"Force users to register with a space between firstname and lastname in Full "
"name, as an antispam measure"
msgstr "Kiel kontraÅ­spamilo, devigi uzantoj al registrado kun spaceto inter la persona nomo kaj la familia nomo."
-#: ../../mod/admin.php:427
+#: ../../mod/admin.php:431
msgid "UTF-8 Regular expressions"
msgstr "UTF-8 regulaj exprimoj"
-#: ../../mod/admin.php:427
+#: ../../mod/admin.php:431
msgid "Use PHP UTF8 regular expressions"
msgstr "Uzi PHP UTF8 regulajn esprimojn."
-#: ../../mod/admin.php:428
+#: ../../mod/admin.php:432
msgid "Show Community Page"
msgstr "Montri Komunuma PaÄo"
-#: ../../mod/admin.php:428
+#: ../../mod/admin.php:432
msgid ""
"Display a Community page showing all recent public postings on this site."
msgstr "Montri komunuma paÄo kun ĉiuj ĵusaj afiÅoj en ĉi tiu retejo."
-#: ../../mod/admin.php:429
+#: ../../mod/admin.php:433
msgid "Enable OStatus support"
msgstr "Åœalti subtenon por OStatus"
-#: ../../mod/admin.php:429
+#: ../../mod/admin.php:433
msgid ""
"Provide built-in OStatus (identi.ca, status.net, etc.) compatibility. All "
"communications in OStatus are public, so privacy warnings will be "
"occasionally displayed."
msgstr "Provizi integritan OStatus (identi.ca, status.net ktp) subtenon. Ĉiuj komunikadoj en OStatus estas publikaj, do privatecaj avertoj aperos de tempo al tempo."
-#: ../../mod/admin.php:430
+#: ../../mod/admin.php:434
msgid "Enable Diaspora support"
msgstr "Åœalti subtenon por Diaspora"
-#: ../../mod/admin.php:430
+#: ../../mod/admin.php:434
msgid "Provide built-in Diaspora network compatibility."
msgstr "Provizi integritan Diaspora subtenon."
-#: ../../mod/admin.php:431
+#: ../../mod/admin.php:435
msgid "Only allow Friendica contacts"
msgstr "Nur permesigi Friendica kontaktojn"
-#: ../../mod/admin.php:431
+#: ../../mod/admin.php:435
msgid ""
"All contacts must use Friendica protocols. All other built-in communication "
"protocols disabled."
msgstr "Ĉiuj kontaktoj devas uzi Friendica protokolojn. Ĉiuj aliaj komunikaj protokoloj malaktivita."
-#: ../../mod/admin.php:432
+#: ../../mod/admin.php:436
msgid "Verify SSL"
msgstr "Kontroli SSL"
-#: ../../mod/admin.php:432
+#: ../../mod/admin.php:436
msgid ""
"If you wish, you can turn on strict certificate checking. This will mean you"
" cannot connect (at all) to self-signed SSL sites."
msgstr "Se vi deziras, vi povas aktivigi severan kontroladon de SSL atestiloj. Pro tio, vie (tute) ne eblos konekti al SSL retejoj kun memsubskribitaj atestiloj."
-#: ../../mod/admin.php:433
+#: ../../mod/admin.php:437
msgid "Proxy user"
msgstr "Uzantnomo por retperanto"
-#: ../../mod/admin.php:434
+#: ../../mod/admin.php:438
msgid "Proxy URL"
msgstr "URL adreso de retperanto"
-#: ../../mod/admin.php:435
+#: ../../mod/admin.php:439
msgid "Network timeout"
msgstr "Reta tempolimo"
-#: ../../mod/admin.php:435
+#: ../../mod/admin.php:439
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr "Valoro en sekundoj. Uzu 0 por mallimitigi (ne rekomendata)."
-#: ../../mod/admin.php:436
+#: ../../mod/admin.php:440
msgid "Delivery interval"
msgstr "Intervalo de liverado"
-#: ../../mod/admin.php:436
+#: ../../mod/admin.php:440
msgid ""
"Delay background delivery processes by this many seconds to reduce system "
"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
"for large dedicated servers."
msgstr "Malfruigi fonan liveradon dum tiom da sekundoj por malpliigi la Åargon de la sistemo. Rekomendoj: 4-5 por komunaj serviloj, 2-3 por virtualaj privataj serviloj, 0-1 por grandaj dediĉitaj serviloj."
-#: ../../mod/admin.php:451
+#: ../../mod/admin.php:441
+msgid "Poll interval"
+msgstr "Enketintervalo"
+
+#: ../../mod/admin.php:441
+msgid ""
+"Delay background polling processes by this many seconds to reduce system "
+"load. If 0, use delivery interval."
+msgstr "Malfruigi fonajn enketprocesojn je tiom da sekundoj por malpliigi la Åargon de la sistemo. Se 0, uzas la liverintervalon."
+
+#: ../../mod/admin.php:442
+msgid "Maximum Load Average"
+msgstr "Maksimuma Meza SistemÅargo"
+
+#: ../../mod/admin.php:442
+msgid ""
+"Maximum system load before delivery and poll processes are deferred - "
+"default 50."
+msgstr "Maksimuma sistemÅargo post kiu livero- kaj enketprocesoj estos prokrastinataj. - DefaÅ­lte 50."
+
+#: ../../mod/admin.php:456
msgid "Update has been marked successful"
msgstr "Äœisdatigo estas markita sukcesa"
-#: ../../mod/admin.php:461
+#: ../../mod/admin.php:466
#, php-format
msgid "Executing %s failed. Check system logs."
msgstr "Ne sukcesis plenumi %s. Kontrolu la sistemprotokolojn."
-#: ../../mod/admin.php:464
+#: ../../mod/admin.php:469
#, php-format
msgid "Update %s was successfully applied."
msgstr "Sukcese aplikis la Äisdatigo %s."
-#: ../../mod/admin.php:468
+#: ../../mod/admin.php:473
#, php-format
msgid "Update %s did not return a status. Unknown if it succeeded."
msgstr "Äœisdatigo %s ne liveris elirstaton. "
-#: ../../mod/admin.php:471
+#: ../../mod/admin.php:476
#, php-format
msgid "Update function %s could not be found."
msgstr "Ne troveblas Äisdatigo funkcio %s."
-#: ../../mod/admin.php:486
+#: ../../mod/admin.php:491
msgid "No failed updates."
msgstr "Neniom da malsukcesaj Äisdatigoj."
-#: ../../mod/admin.php:490
+#: ../../mod/admin.php:495
msgid "Failed Updates"
msgstr "Malsukcesaj Äœisdatigoj"
-#: ../../mod/admin.php:491
+#: ../../mod/admin.php:496
msgid ""
"This does not include updates prior to 1139, which did not return a status."
msgstr "Ne inkluzivas Äisdatigojn antaÅ­ 1139, kiuj ne liveris elirstaton."
-#: ../../mod/admin.php:492
+#: ../../mod/admin.php:497
msgid "Mark success (if update was manually applied)"
msgstr "Marki sukcesa (se la Äisdatigo estas instalita mane)"
-#: ../../mod/admin.php:493
+#: ../../mod/admin.php:498
msgid "Attempt to execute this update step automatically"
msgstr "Provi automate plenumi ĉi tian paÅon de la Äisdatigo."
-#: ../../mod/admin.php:518
+#: ../../mod/admin.php:523
#, php-format
msgid "%s user blocked/unblocked"
msgid_plural "%s users blocked/unblocked"
msgstr[0] "Blokis/malblokis %s uzanton"
msgstr[1] "Blokis/malblokis %s uzantojn"
-#: ../../mod/admin.php:525
+#: ../../mod/admin.php:530
#, php-format
msgid "%s user deleted"
msgid_plural "%s users deleted"
msgstr[0] "%s uzanto forviÅita"
msgstr[1] "%s uzanto forviÅitaj"
-#: ../../mod/admin.php:564
+#: ../../mod/admin.php:569
#, php-format
msgid "User '%s' deleted"
msgstr "Uzanto '%s' forviÅita"
-#: ../../mod/admin.php:572
+#: ../../mod/admin.php:577
#, php-format
msgid "User '%s' unblocked"
msgstr "Uzanto '%s' malblokita"
-#: ../../mod/admin.php:572
+#: ../../mod/admin.php:577
#, php-format
msgid "User '%s' blocked"
msgstr "Uzanto '%s' blokita"
-#: ../../mod/admin.php:636
+#: ../../mod/admin.php:641
msgid "select all"
msgstr "elekti ĉiujn"
-#: ../../mod/admin.php:637
+#: ../../mod/admin.php:642
msgid "User registrations waiting for confirm"
msgstr "RegistriÄoj atendante aprobon"
-#: ../../mod/admin.php:638
+#: ../../mod/admin.php:643
msgid "Request date"
msgstr "Dato de peto"
-#: ../../mod/admin.php:638 ../../mod/admin.php:647
+#: ../../mod/admin.php:643 ../../mod/admin.php:652
#: ../../include/contact_selectors.php:79
msgid "Email"
msgstr "RetpoÅto"
-#: ../../mod/admin.php:639
+#: ../../mod/admin.php:644
msgid "No registrations."
msgstr "Neniom da registriÄoj."
-#: ../../mod/admin.php:641
+#: ../../mod/admin.php:646
msgid "Deny"
msgstr "Negi"
-#: ../../mod/admin.php:647
+#: ../../mod/admin.php:652
msgid "Register date"
msgstr "Dato de registrado"
-#: ../../mod/admin.php:647
+#: ../../mod/admin.php:652
msgid "Last login"
msgstr "Plej ĵusa ensaluto"
-#: ../../mod/admin.php:647
+#: ../../mod/admin.php:652
msgid "Last item"
msgstr "Plej ĵusa elemento"
-#: ../../mod/admin.php:647
+#: ../../mod/admin.php:652
msgid "Account"
msgstr "Konto"
-#: ../../mod/admin.php:649
+#: ../../mod/admin.php:654
msgid ""
"Selected users will be deleted!\\n\\nEverything these users had posted on "
"this site will be permanently deleted!\\n\\nAre you sure?"
msgstr "La elektitaj uzantkontoj estas forviÅotaj!\\n\\nĈiuj elementoj kiujn ili afiÅis je la retpaÄo estos permanente forviÅitaj.\\n\\nĈu vi certas?"
-#: ../../mod/admin.php:650
+#: ../../mod/admin.php:655
msgid ""
"The user {0} will be deleted!\\n\\nEverything this user has posted on this "
"site will be permanently deleted!\\n\\nAre you sure?"
msgstr "La uzanto {0} estas forviÅota!\\n\\nĈiuj elementoj kiujn li afiÅis je la retpaÄo estos permanente forviÅitaj.\\n\\nĈu vi certas?"
-#: ../../mod/admin.php:691
+#: ../../mod/admin.php:696
#, php-format
msgid "Plugin %s disabled."
msgstr "Kromprogramo %s estas malÅaltita."
-#: ../../mod/admin.php:695
+#: ../../mod/admin.php:700
#, php-format
msgid "Plugin %s enabled."
msgstr "Kromprogramo %s estas Åaltita."
-#: ../../mod/admin.php:705 ../../mod/admin.php:903
+#: ../../mod/admin.php:710 ../../mod/admin.php:908
msgid "Disable"
msgstr "MalÅalti"
-#: ../../mod/admin.php:707 ../../mod/admin.php:905
+#: ../../mod/admin.php:712 ../../mod/admin.php:910
msgid "Enable"
msgstr "Åœalti"
-#: ../../mod/admin.php:729 ../../mod/admin.php:934
+#: ../../mod/admin.php:734 ../../mod/admin.php:939
msgid "Toggle"
msgstr "Åœalti/MalÅalti"
-#: ../../mod/admin.php:737 ../../mod/admin.php:944
+#: ../../mod/admin.php:742 ../../mod/admin.php:949
msgid "Author: "
msgstr "AÅ­toro: "
-#: ../../mod/admin.php:738 ../../mod/admin.php:945
+#: ../../mod/admin.php:743 ../../mod/admin.php:950
msgid "Maintainer: "
msgstr "Prizorganto: "
-#: ../../mod/admin.php:867
+#: ../../mod/admin.php:872
msgid "No themes found."
msgstr "Ne trovis etosojn."
-#: ../../mod/admin.php:926
+#: ../../mod/admin.php:931
msgid "Screenshot"
msgstr "Ekrankopio"
-#: ../../mod/admin.php:974
+#: ../../mod/admin.php:979
msgid "[Experimental]"
msgstr "[Eksperimenta]"
-#: ../../mod/admin.php:975
+#: ../../mod/admin.php:980
msgid "[Unsupported]"
msgstr "[Nesubtenata]"
-#: ../../mod/admin.php:1002
+#: ../../mod/admin.php:1007
msgid "Log settings updated."
msgstr "Protokolagordoj Äisdatigitaj."
-#: ../../mod/admin.php:1058
+#: ../../mod/admin.php:1063
msgid "Clear"
msgstr "ForviÅi"
-#: ../../mod/admin.php:1064
+#: ../../mod/admin.php:1069
msgid "Debugging"
msgstr "Sencimigado"
-#: ../../mod/admin.php:1065
+#: ../../mod/admin.php:1070
msgid "Log file"
msgstr "Protokolo"
-#: ../../mod/admin.php:1065
+#: ../../mod/admin.php:1070
msgid ""
"Must be writable by web server. Relative to your Friendica top-level "
"directory."
msgstr "Devas esti skribebla de la retservilo. Relativa al via plej supra Friendica dosierujo."
-#: ../../mod/admin.php:1066
+#: ../../mod/admin.php:1071
msgid "Log level"
msgstr "Protokolnivelo"
-#: ../../mod/admin.php:1116
+#: ../../mod/admin.php:1121
msgid "Close"
msgstr "Fermi"
-#: ../../mod/admin.php:1122
+#: ../../mod/admin.php:1127
msgid "FTP Host"
msgstr "FTP Servilo"
-#: ../../mod/admin.php:1123
+#: ../../mod/admin.php:1128
msgid "FTP Path"
msgstr "FTP Vojo"
-#: ../../mod/admin.php:1124
+#: ../../mod/admin.php:1129
msgid "FTP User"
msgstr "FTP Uzanto"
-#: ../../mod/admin.php:1125
+#: ../../mod/admin.php:1130
msgid "FTP Password"
msgstr "FTP Pasvorto"
-#: ../../mod/profile.php:21 ../../boot.php:949
+#: ../../mod/profile.php:21 ../../boot.php:955
msgid "Requested profile is not available."
msgstr "La petita profilo ne disponeblas."
@@ -3657,58 +3678,68 @@ msgstr "Ne trovis kontoj, kaj registrado tra OpenID estas malpermesita ĉi tie."
msgid "Login failed."
msgstr "Ensalutado malsukcesis."
-#: ../../mod/follow.php:27
+#: ../../mod/follow.php:30
msgid "Connect URL missing."
msgstr "Ne ekzistas URL adreso por konekti."
-#: ../../mod/follow.php:47
+#: ../../mod/follow.php:56
msgid ""
"This site is not configured to allow communications with other networks."
msgstr "Tiu retpaÄo ne permesas komunikadon kun aliaj retoj."
-#: ../../mod/follow.php:48 ../../mod/follow.php:63
+#: ../../mod/follow.php:57 ../../mod/follow.php:72
msgid "No compatible communication protocols or feeds were discovered."
msgstr "Ne malkovris kongruajn protokolojn por komunikado aÅ­ fluojn."
-#: ../../mod/follow.php:61
+#: ../../mod/follow.php:70
msgid "The profile address specified does not provide adequate information."
msgstr "La specifita profiladreso ne enhavas sufiĉe da informoj."
-#: ../../mod/follow.php:65
+#: ../../mod/follow.php:74
msgid "An author or name was not found."
msgstr "Ne trovis aÅ­toron aÅ­ nomon."
-#: ../../mod/follow.php:67
+#: ../../mod/follow.php:76
msgid "No browser URL could be matched to this address."
msgstr "Neniu retuma URL adreso kongruas al la adreso."
-#: ../../mod/follow.php:74
+#: ../../mod/follow.php:78
+msgid ""
+"Unable to match @-style Identity Address with a known protocol or email "
+"contact."
+msgstr "Ne eblas kongrui @-stilan identecon adreson al iu konata protokolo au retpoÅtadreso."
+
+#: ../../mod/follow.php:79
+msgid "Use mailto: in front of address to force email check."
+msgstr "Uzu mailto: antaÅ­ la adreso por devigi la testadon per retpoÅto."
+
+#: ../../mod/follow.php:85
msgid ""
"The profile address specified belongs to a network which has been disabled "
"on this site."
msgstr "Tiu profila adreso apartenas al retejo kiu estas maÅaltita je ĉi tiu retejo."
-#: ../../mod/follow.php:79
+#: ../../mod/follow.php:90
msgid ""
"Limited profile. This person will be unable to receive direct/personal "
"notifications from you."
msgstr "Profilo limigata. Ĉi persono ne eblos ricevi rektajn/personajn atentigojn de vi. "
-#: ../../mod/follow.php:149
+#: ../../mod/follow.php:160
msgid "Unable to retrieve contact information."
msgstr "Ne eblas ricevi kontaktinformojn."
-#: ../../mod/follow.php:195
+#: ../../mod/follow.php:206
msgid "following"
msgstr "sekvanta"
-#: ../../mod/common.php:34
+#: ../../mod/common.php:42
msgid "Common Friends"
msgstr "Komunaj Amikoj"
-#: ../../mod/common.php:42
-msgid "No friends in common."
-msgstr "Neniom da komunaj amikoj."
+#: ../../mod/common.php:78
+msgid "No contacts in common."
+msgstr "Neniom da komunaj kontaktoj."
#: ../../mod/display.php:135
msgid "Item has been removed."
@@ -3980,23 +4011,23 @@ msgstr "AÄo:"
msgid "Edit/Manage Profiles"
msgstr "Redakti/administri Profilojn"
-#: ../../mod/profiles.php:621 ../../boot.php:1058
+#: ../../mod/profiles.php:621 ../../boot.php:1064
msgid "Change profile photo"
msgstr "ÅœanÄi profilbildon"
-#: ../../mod/profiles.php:622 ../../boot.php:1059
+#: ../../mod/profiles.php:622 ../../boot.php:1065
msgid "Create New Profile"
msgstr "Krei novan profilon"
-#: ../../mod/profiles.php:633 ../../boot.php:1069
+#: ../../mod/profiles.php:633 ../../boot.php:1075
msgid "Profile Image"
msgstr "Profilbildo"
-#: ../../mod/profiles.php:635 ../../boot.php:1072
+#: ../../mod/profiles.php:635 ../../boot.php:1078
msgid "visible to everybody"
msgstr "videbla al ĉiuj"
-#: ../../mod/profiles.php:636 ../../boot.php:1073
+#: ../../mod/profiles.php:636 ../../boot.php:1079
msgid "Edit visibility"
msgstr "Redakti videblecon"
@@ -4048,7 +4079,7 @@ msgstr "Aldoni"
msgid "No entries."
msgstr "Neniom da afiÅoj."
-#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:464
+#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:554
#: ../../include/contact_widgets.php:34
msgid "Friend Suggestions"
msgstr "Amikosugestoj"
@@ -4063,7 +4094,12 @@ msgstr "Neniu sugestoj disponeblas. Se ĉi tiu estas nova retejo, bonvolu reprov
msgid "Ignore/Hide"
msgstr "Ignori/KaÅi"
-#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:462
+#: ../../mod/acl.php:134
+#, php-format
+msgid "%s [%s]"
+msgstr "%s [%s]"
+
+#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:552
msgid "Global Directory"
msgstr "Tutmonda Katalogo"
@@ -4254,71 +4290,83 @@ msgstr "Konekto akceptita je %s"
msgid "%1$s has joined %2$s"
msgstr "%1$s aliÄis al %2$s"
-#: ../../addon/facebook/facebook.php:491
+#: ../../addon/facebook/facebook.php:501
msgid "Facebook disabled"
msgstr "Facebook malÅaltita"
-#: ../../addon/facebook/facebook.php:496
+#: ../../addon/facebook/facebook.php:506
msgid "Updating contacts"
msgstr "Mi Äisdatigas la kontaktojn."
-#: ../../addon/facebook/facebook.php:516
+#: ../../addon/facebook/facebook.php:529
msgid "Facebook API key is missing."
msgstr "La API Ålosilo de Facebook ne estas konata ĉi tie."
-#: ../../addon/facebook/facebook.php:523
+#: ../../addon/facebook/facebook.php:536
msgid "Facebook Connect"
msgstr "Kontekto al Facebook"
-#: ../../addon/facebook/facebook.php:529
+#: ../../addon/facebook/facebook.php:542
msgid "Install Facebook connector for this account."
msgstr "Instali la Facebook konektilo por ĉi tiu konto."
-#: ../../addon/facebook/facebook.php:536
+#: ../../addon/facebook/facebook.php:549
msgid "Remove Facebook connector"
msgstr "Forigi la Facebook konektilon."
-#: ../../addon/facebook/facebook.php:541
+#: ../../addon/facebook/facebook.php:554
msgid ""
"Re-authenticate [This is necessary whenever your Facebook password is "
"changed.]"
msgstr "ReaÅ­tentiÄi [Tio estas bezonata ĉiam kiam vi ÅanÄis vian pasvorton ĉe Facebook.]"
-#: ../../addon/facebook/facebook.php:548
+#: ../../addon/facebook/facebook.php:561
msgid "Post to Facebook by default"
msgstr "Ĉiam afiÅi al Facebook."
-#: ../../addon/facebook/facebook.php:552
+#: ../../addon/facebook/facebook.php:567
+msgid ""
+"Facebook friend linking has been disabled on this site. The following "
+"settings will have no effect."
+msgstr "Ligado kun Facebook amikoj estas malaktivita ĉe tiu retejo. La sekvantaj agordoj do ne havas validecon."
+
+#: ../../addon/facebook/facebook.php:571
+msgid ""
+"Facebook friend linking has been disabled on this site. If you disable it, "
+"you will be unable to re-enable it."
+msgstr "Ligado kun Facebook amikoj estas malaktivita ĉe tiu retejo. Se vi malÅaltas Äin, vi ne eblos ree Åalti Äin."
+
+#: ../../addon/facebook/facebook.php:574
msgid "Link all your Facebook friends and conversations on this website"
msgstr "Alligu ĉiujn viajn Facebook amikojn kaj konversaciojn je ĉi-tiu retejo."
-#: ../../addon/facebook/facebook.php:554
+#: ../../addon/facebook/facebook.php:576
msgid ""
"Facebook conversations consist of your <em>profile wall</em> and your friend"
" <em>stream</em>."
msgstr "Facebok konversacioj konsistas el via <em>profilmuro</em> kaj la <em>fluo</em> de viaj amikoj."
-#: ../../addon/facebook/facebook.php:555
+#: ../../addon/facebook/facebook.php:577
msgid "On this website, your Facebook friend stream is only visible to you."
msgstr "Je ĉi-tiu retejo, la fluo de viaj amikoj ĉe Facebook nur videblas al vi."
-#: ../../addon/facebook/facebook.php:556
+#: ../../addon/facebook/facebook.php:578
msgid ""
"The following settings determine the privacy of your Facebook profile wall "
"on this website."
msgstr "La sekvontaj agordoj difinas la privatecon de via Facebook profilmuro je ĉi-tiu retejo."
-#: ../../addon/facebook/facebook.php:560
+#: ../../addon/facebook/facebook.php:582
msgid ""
"On this website your Facebook profile wall conversations will only be "
"visible to you"
msgstr "Je ĉi-tiu retejo, la conversacioj sur via Facebook profilmuro nur videblas al vi."
-#: ../../addon/facebook/facebook.php:565
+#: ../../addon/facebook/facebook.php:587
msgid "Do not import your Facebook profile wall conversations"
msgstr "Ne importi konversaciojn de via Facebook profilmuro"
-#: ../../addon/facebook/facebook.php:567
+#: ../../addon/facebook/facebook.php:589
msgid ""
"If you choose to link conversations and leave both of these boxes unchecked,"
" your Facebook profile wall will be merged with your profile wall on this "
@@ -4326,120 +4374,120 @@ msgid ""
"who may see the conversations."
msgstr "Se vi elektas alligi conversaciojn kaj ne elektas tiujn butonojn, via Facebook profilmuro estas kunigota kun via profilmuro ĉi tie. Viaj privatecaj agordoj ĉi tie difinos kiu povas vidi la coversaciojn."
-#: ../../addon/facebook/facebook.php:572
+#: ../../addon/facebook/facebook.php:594
msgid "Comma separated applications to ignore"
msgstr "Ignorotaj programoj, disigita per komo"
-#: ../../addon/facebook/facebook.php:656
+#: ../../addon/facebook/facebook.php:678
msgid "Problems with Facebook Real-Time Updates"
msgstr "Problemoj kun Facebook Realtempaj Äœisdatigoj"
-#: ../../addon/facebook/facebook.php:684
+#: ../../addon/facebook/facebook.php:706
#: ../../include/contact_selectors.php:81
msgid "Facebook"
msgstr "Facebook"
-#: ../../addon/facebook/facebook.php:685
+#: ../../addon/facebook/facebook.php:707
msgid "Facebook Connector Settings"
msgstr "Agordoj por la Facebook konektilo"
-#: ../../addon/facebook/facebook.php:700
+#: ../../addon/facebook/facebook.php:722
msgid "Facebook API Key"
msgstr "Facebook API Ålosilo"
-#: ../../addon/facebook/facebook.php:710
+#: ../../addon/facebook/facebook.php:732
msgid ""
"Error: it appears that you have specified the App-ID and -Secret in your "
".htconfig.php file. As long as they are specified there, they cannot be set "
"using this form.<br><br>"
msgstr "Eraro: Åœajnas kvazaÅ­ vi agordis la App-ID kaj la sekreton en via .htconfig.php dosiero. Kiam ili estas agordita tie, vi ne povas agordi Äin tra tiu ĉi formo.<br><br>"
-#: ../../addon/facebook/facebook.php:715
+#: ../../addon/facebook/facebook.php:737
msgid ""
"Error: the given API Key seems to be incorrect (the application access token"
" could not be retrieved)."
msgstr "Eraro: La API Ålosilo aspektas malÄusta (ne eblas ricevi la programa atingoĵetono)."
-#: ../../addon/facebook/facebook.php:717
+#: ../../addon/facebook/facebook.php:739
msgid "The given API Key seems to work correctly."
msgstr "La API Ålosilo Åajne Äuste funkcias."
-#: ../../addon/facebook/facebook.php:719
+#: ../../addon/facebook/facebook.php:741
msgid ""
"The correctness of the API Key could not be detected. Somthing strange's "
"going on."
msgstr "Ne povis kontroli la Äustecon de la API Ålosilo. Ia stranga afero okazas. "
-#: ../../addon/facebook/facebook.php:722
+#: ../../addon/facebook/facebook.php:744
msgid "App-ID / API-Key"
msgstr "Programo ID / API Åœlosilo"
-#: ../../addon/facebook/facebook.php:723
+#: ../../addon/facebook/facebook.php:745
msgid "Application secret"
msgstr "Programo sekreto"
-#: ../../addon/facebook/facebook.php:724
+#: ../../addon/facebook/facebook.php:746
#, php-format
msgid "Polling Interval in minutes (minimum %1$s minutes)"
msgstr "Intervalo de enketo en minutoj (minimume %1$s minutoj)"
-#: ../../addon/facebook/facebook.php:725
+#: ../../addon/facebook/facebook.php:747
msgid ""
"Synchronize comments (no comments on Facebook are missed, at the cost of "
"increased system load)"
msgstr "Sinkronigi komentojn (vi ricevas ĉiujn komentojn de Facebook, sed la Åargo de la sistemo iom kreskas)"
-#: ../../addon/facebook/facebook.php:729
+#: ../../addon/facebook/facebook.php:751
msgid "Real-Time Updates"
msgstr "Realtempaj Äœisdatigoj"
-#: ../../addon/facebook/facebook.php:733
+#: ../../addon/facebook/facebook.php:755
msgid "Real-Time Updates are activated."
msgstr "Realtempaj Äœisdatigoj estas Åaltita"
-#: ../../addon/facebook/facebook.php:734
+#: ../../addon/facebook/facebook.php:756
msgid "Deactivate Real-Time Updates"
msgstr "MalÅalti Realtempaj Äœisdatigoj"
-#: ../../addon/facebook/facebook.php:736
+#: ../../addon/facebook/facebook.php:758
msgid "Real-Time Updates not activated."
msgstr "Realtempaj Äœisdatigoj estas malÅaltita"
-#: ../../addon/facebook/facebook.php:736
+#: ../../addon/facebook/facebook.php:758
msgid "Activate Real-Time Updates"
msgstr "Åœalti Realtempaj Äœisdatigoj"
-#: ../../addon/facebook/facebook.php:755
+#: ../../addon/facebook/facebook.php:777
msgid "The new values have been saved."
msgstr "Konservis novajn valorojn."
-#: ../../addon/facebook/facebook.php:779
+#: ../../addon/facebook/facebook.php:801
msgid "Post to Facebook"
msgstr "AfiÅi al Facebook"
-#: ../../addon/facebook/facebook.php:877
+#: ../../addon/facebook/facebook.php:899
msgid ""
"Post to Facebook cancelled because of multi-network access permission "
"conflict."
msgstr "AfiÅado al Facebook nuligita ĉar okazis konflikto en la multretpermesoj."
-#: ../../addon/facebook/facebook.php:1097
+#: ../../addon/facebook/facebook.php:1119
msgid "View on Friendica"
msgstr "Vidi ĉe Friendica"
-#: ../../addon/facebook/facebook.php:1130
+#: ../../addon/facebook/facebook.php:1152
msgid "Facebook post failed. Queued for retry."
msgstr "Malsukcesis afiÅi ĉe Facebook. Enigita en vico."
-#: ../../addon/facebook/facebook.php:1170
+#: ../../addon/facebook/facebook.php:1192
msgid "Your Facebook connection became invalid. Please Re-authenticate."
msgstr "Via Facbook konekto iÄis nevalida. Bonvolu reaÅ­tentiÄi."
-#: ../../addon/facebook/facebook.php:1171
+#: ../../addon/facebook/facebook.php:1193
msgid "Facebook connection became invalid"
msgstr "Facebook konekto iÄis nevalida."
-#: ../../addon/facebook/facebook.php:1172
+#: ../../addon/facebook/facebook.php:1194
#, php-format
msgid ""
"Hi %1$s,\n"
@@ -4589,7 +4637,8 @@ msgid "Forums"
msgstr "Forumoj"
#: ../../addon/page/page.php:63 ../../addon/showmore/showmore.php:87
-#: ../../include/conversation.php:466 ../../boot.php:507
+#: ../../include/contact_widgets.php:188 ../../include/conversation.php:466
+#: ../../boot.php:513
msgid "show more"
msgstr "montri pli"
@@ -4605,7 +4654,7 @@ msgstr "Åœalti la Planets kromprogamon"
#: ../../addon/communityhome/communityhome.php:34
#: ../../addon/communityhome/twillingham/communityhome.php:28
#: ../../addon/communityhome/twillingham/communityhome.php:34
-#: ../../include/nav.php:64 ../../boot.php:805
+#: ../../include/nav.php:64 ../../boot.php:811
msgid "Login"
msgstr "Ensaluti"
@@ -4633,7 +4682,7 @@ msgid "Latest likes"
msgstr "Ä´usaj Åatitaĵoj"
#: ../../addon/communityhome/communityhome.php:155
-#: ../../view/theme/diabook/theme.php:400 ../../include/text.php:1302
+#: ../../view/theme/diabook/theme.php:490 ../../include/text.php:1303
#: ../../include/conversation.php:45 ../../include/conversation.php:118
msgid "event"
msgstr "okazo"
@@ -4786,7 +4835,7 @@ msgid "Post to Drupal by default"
msgstr "DefaÅ­lte afiÅi ĉe Drupal"
#: ../../addon/drpost/drpost.php:184 ../../addon/wppost/wppost.php:190
-#: ../../addon/blogger/blogger.php:172 ../../addon/posterous/posterous.php:177
+#: ../../addon/blogger/blogger.php:172 ../../addon/posterous/posterous.php:192
msgid "Post from Friendica"
msgstr "AfiÅo de Friendica"
@@ -5500,133 +5549,225 @@ msgstr "Blogger API URL"
msgid "Post to Blogger by default"
msgstr "DefaÅ­lte afiÅi al Blogger"
-#: ../../addon/posterous/posterous.php:36
+#: ../../addon/posterous/posterous.php:37
msgid "Post to Posterous"
msgstr "AfiÅi al Posterous"
-#: ../../addon/posterous/posterous.php:67
+#: ../../addon/posterous/posterous.php:70
msgid "Posterous Post Settings"
msgstr "Agordoj pri afiÅoj ĉe Posterous"
-#: ../../addon/posterous/posterous.php:69
+#: ../../addon/posterous/posterous.php:72
msgid "Enable Posterous Post Plugin"
msgstr "Åœalti la Poserous-afiÅo kromprogramon"
-#: ../../addon/posterous/posterous.php:74
+#: ../../addon/posterous/posterous.php:77
msgid "Posterous login"
msgstr "Posterous salutnomo"
-#: ../../addon/posterous/posterous.php:79
+#: ../../addon/posterous/posterous.php:82
msgid "Posterous password"
msgstr "Posterous pasvorto"
-#: ../../addon/posterous/posterous.php:84
+#: ../../addon/posterous/posterous.php:87
+msgid "Posterous site ID"
+msgstr "Idento de Posterous retejo"
+
+#: ../../addon/posterous/posterous.php:92
+msgid "Posterous API token"
+msgstr "API ĵetono de Posterous retejo"
+
+#: ../../addon/posterous/posterous.php:97
msgid "Post to Posterous by default"
msgstr "DefaÅ­lte afiÅi al Posterous"
-#: ../../view/theme/cleanzero/config.php:73
-#: ../../view/theme/diabook/config.php:93
+#: ../../view/theme/cleanzero/config.php:82
+#: ../../view/theme/diabook/config.php:192
#: ../../view/theme/quattro/config.php:54 ../../view/theme/dispy/config.php:72
msgid "Theme settings"
msgstr "Agordoj pri la etoso"
-#: ../../view/theme/cleanzero/config.php:74
+#: ../../view/theme/cleanzero/config.php:83
msgid "Set resize level for images in posts and comments (width and height)"
msgstr "Agordi la regrandignivelo por bildoj en afiÅoj kaj komentoj (larÄo kaj alto)"
-#: ../../view/theme/cleanzero/config.php:75
-#: ../../view/theme/diabook/config.php:94 ../../view/theme/dispy/config.php:73
+#: ../../view/theme/cleanzero/config.php:84
+#: ../../view/theme/diabook/config.php:193
+#: ../../view/theme/dispy/config.php:73
msgid "Set font-size for posts and comments"
msgstr "Agordi la tiparan grandon por afiÅoj kaj komentoj"
-#: ../../view/theme/cleanzero/config.php:76
+#: ../../view/theme/cleanzero/config.php:85
+msgid "Set theme width"
+msgstr "Agordi la larÄo por la etoso"
+
+#: ../../view/theme/cleanzero/config.php:86
#: ../../view/theme/quattro/config.php:56
msgid "Color scheme"
msgstr "Kolorskemo"
-#: ../../view/theme/diabook/theme.php:65 ../../include/nav.php:49
+#: ../../view/theme/diabook/theme.php:123 ../../include/nav.php:49
#: ../../include/nav.php:115
msgid "Your posts and conversations"
msgstr "Viaj afiÅoj kaj komunikadoj"
-#: ../../view/theme/diabook/theme.php:66 ../../include/nav.php:50
+#: ../../view/theme/diabook/theme.php:124 ../../include/nav.php:50
msgid "Your profile page"
msgstr "Via profilo"
-#: ../../view/theme/diabook/theme.php:67
+#: ../../view/theme/diabook/theme.php:125
msgid "Your contacts"
msgstr "Viaj kontaktoj"
-#: ../../view/theme/diabook/theme.php:68 ../../include/nav.php:51
+#: ../../view/theme/diabook/theme.php:126 ../../include/nav.php:51
msgid "Your photos"
msgstr "Viaj bildoj"
-#: ../../view/theme/diabook/theme.php:69 ../../include/nav.php:52
+#: ../../view/theme/diabook/theme.php:127 ../../include/nav.php:52
msgid "Your events"
msgstr "Viaj okazoj"
-#: ../../view/theme/diabook/theme.php:70 ../../include/nav.php:53
+#: ../../view/theme/diabook/theme.php:128 ../../include/nav.php:53
msgid "Personal notes"
msgstr "Personaj notoj"
-#: ../../view/theme/diabook/theme.php:70 ../../include/nav.php:53
+#: ../../view/theme/diabook/theme.php:128 ../../include/nav.php:53
msgid "Your personal photos"
msgstr "Viaj personaj bildoj"
-#: ../../view/theme/diabook/theme.php:72
-#: ../../view/theme/diabook/theme.php:481
+#: ../../view/theme/diabook/theme.php:130
+#: ../../view/theme/diabook/theme.php:571
+#: ../../view/theme/diabook/theme.php:675
+#: ../../view/theme/diabook/config.php:201
msgid "Community Pages"
msgstr "Komunumaj paÄoj"
-#: ../../view/theme/diabook/theme.php:328
+#: ../../view/theme/diabook/theme.php:418
+#: ../../view/theme/diabook/theme.php:677
+#: ../../view/theme/diabook/config.php:203
msgid "Community Profiles"
msgstr "Komunumaj Profiloj"
-#: ../../view/theme/diabook/theme.php:349
+#: ../../view/theme/diabook/theme.php:439
+#: ../../view/theme/diabook/theme.php:682
+#: ../../view/theme/diabook/config.php:208
msgid "Last users"
msgstr "Ä´usaj uzantoj"
-#: ../../view/theme/diabook/theme.php:378
+#: ../../view/theme/diabook/theme.php:468
+#: ../../view/theme/diabook/theme.php:684
+#: ../../view/theme/diabook/config.php:210
msgid "Last likes"
msgstr "Ä´usaj Åatitaj elementoj"
-#: ../../view/theme/diabook/theme.php:423
+#: ../../view/theme/diabook/theme.php:513
+#: ../../view/theme/diabook/theme.php:683
+#: ../../view/theme/diabook/config.php:209
msgid "Last photos"
msgstr "Ä´usaj bildoj"
-#: ../../view/theme/diabook/theme.php:460
+#: ../../view/theme/diabook/theme.php:550
+#: ../../view/theme/diabook/theme.php:680
+#: ../../view/theme/diabook/config.php:206
msgid "Find Friends"
msgstr "Trovi Amikojn"
-#: ../../view/theme/diabook/theme.php:461
+#: ../../view/theme/diabook/theme.php:551
msgid "Local Directory"
msgstr "Loka Katalogo"
-#: ../../view/theme/diabook/theme.php:463 ../../include/contact_widgets.php:35
+#: ../../view/theme/diabook/theme.php:553 ../../include/contact_widgets.php:35
msgid "Similar Interests"
msgstr "Similaj Interesoj"
-#: ../../view/theme/diabook/theme.php:465 ../../include/contact_widgets.php:37
+#: ../../view/theme/diabook/theme.php:555 ../../include/contact_widgets.php:37
msgid "Invite Friends"
msgstr "Inviti amikojn"
-#: ../../view/theme/diabook/theme.php:515
+#: ../../view/theme/diabook/theme.php:606
+#: ../../view/theme/diabook/theme.php:676
+#: ../../view/theme/diabook/config.php:202
+msgid "Earth Layers"
+msgstr "Tertavoloj (Earth Layers)"
+
+#: ../../view/theme/diabook/theme.php:611
+#: ../../view/theme/diabook/config.php:198
+msgid "Set zoomfactor for Earth Layer"
+msgstr "Agordi zoman faktoron de Tertavolo"
+
+#: ../../view/theme/diabook/theme.php:612
+#: ../../view/theme/diabook/config.php:199
+msgid "Set longitude (X) for Earth Layer"
+msgstr "Agordi longitudon (X) de Tertavolo"
+
+#: ../../view/theme/diabook/theme.php:613
+#: ../../view/theme/diabook/config.php:200
+msgid "Set latitude (Y) for Earth Layer"
+msgstr "Agordi latitudon (Y) de Tertavolo"
+
+#: ../../view/theme/diabook/theme.php:626
+#: ../../view/theme/diabook/theme.php:678
+#: ../../view/theme/diabook/config.php:204
msgid "Help or @NewHere ?"
msgstr "Helpu aÅ­ @NewHere ?"
-#: ../../view/theme/diabook/theme.php:522
+#: ../../view/theme/diabook/theme.php:633
+#: ../../view/theme/diabook/theme.php:679
+#: ../../view/theme/diabook/config.php:205
msgid "Connect Services"
msgstr "Konekti Servojn"
-#: ../../view/theme/diabook/config.php:95 ../../view/theme/dispy/config.php:74
+#: ../../view/theme/diabook/theme.php:640
+#: ../../view/theme/diabook/theme.php:681
+#: ../../view/theme/diabook/config.php:207
+msgid "Last Tweets"
+msgstr "Ĵusaj Pepaĵoj"
+
+#: ../../view/theme/diabook/theme.php:643
+#: ../../view/theme/diabook/config.php:197
+msgid "Set twitter search term"
+msgstr "Agordi Twitter serĉtekston"
+
+#: ../../view/theme/diabook/theme.php:663
+#: ../../view/theme/diabook/theme.php:664
+#: ../../view/theme/diabook/theme.php:665
+#: ../../view/theme/diabook/theme.php:666
+#: ../../view/theme/diabook/theme.php:667
+#: ../../view/theme/diabook/theme.php:668
+#: ../../view/theme/diabook/theme.php:669
+#: ../../view/theme/diabook/theme.php:670
+#: ../../view/theme/diabook/theme.php:671
+#: ../../view/theme/diabook/theme.php:672 ../../include/acl_selectors.php:288
+msgid "don't show"
+msgstr "kaÅi"
+
+#: ../../view/theme/diabook/theme.php:663
+#: ../../view/theme/diabook/theme.php:664
+#: ../../view/theme/diabook/theme.php:665
+#: ../../view/theme/diabook/theme.php:666
+#: ../../view/theme/diabook/theme.php:667
+#: ../../view/theme/diabook/theme.php:668
+#: ../../view/theme/diabook/theme.php:669
+#: ../../view/theme/diabook/theme.php:670
+#: ../../view/theme/diabook/theme.php:671
+#: ../../view/theme/diabook/theme.php:672 ../../include/acl_selectors.php:287
+msgid "show"
+msgstr "montri"
+
+#: ../../view/theme/diabook/theme.php:673
+msgid "Show/hide boxes at right-hand coloumn:"
+msgstr "Montri/kaÅi kestojn en la desktra kolumno:"
+
+#: ../../view/theme/diabook/config.php:194
+#: ../../view/theme/dispy/config.php:74
msgid "Set line-height for posts and comments"
msgstr "Agordi la linigrandon por afiÅoj kaj komentoj"
-#: ../../view/theme/diabook/config.php:96
+#: ../../view/theme/diabook/config.php:195
msgid "Set resolution for middle column"
msgstr "Agordi la distingivon por la meza kolumno"
-#: ../../view/theme/diabook/config.php:97
+#: ../../view/theme/diabook/config.php:196
msgid "Set color scheme"
msgstr "Agordi Kolorskemon"
@@ -5646,7 +5787,7 @@ msgstr "Centren"
msgid "Set colour scheme"
msgstr "Agordi Kolorskemon"
-#: ../../include/profile_advanced.php:17 ../../boot.php:1094
+#: ../../include/profile_advanced.php:17 ../../boot.php:1100
msgid "Gender:"
msgstr "Sekso:"
@@ -5659,7 +5800,7 @@ msgid "j F"
msgstr "j F"
#: ../../include/profile_advanced.php:30 ../../include/datetime.php:448
-#: ../../include/items.php:1403
+#: ../../include/items.php:1413
msgid "Birthday:"
msgstr "NaskiÄtago:"
@@ -5667,11 +5808,11 @@ msgstr "NaskiÄtago:"
msgid "Age:"
msgstr "AÄo:"
-#: ../../include/profile_advanced.php:37 ../../boot.php:1097
+#: ../../include/profile_advanced.php:37 ../../boot.php:1103
msgid "Status:"
msgstr "Stato:"
-#: ../../include/profile_advanced.php:45 ../../boot.php:1099
+#: ../../include/profile_advanced.php:45 ../../boot.php:1105
msgid "Homepage:"
msgstr "HejmpaÄo:"
@@ -6035,11 +6176,11 @@ msgstr "Ekas:"
msgid "Finishes:"
msgstr "Finas:"
-#: ../../include/delivery.php:434 ../../include/notifier.php:652
+#: ../../include/delivery.php:452 ../../include/notifier.php:652
msgid "(no subject)"
msgstr "(neniu temo)"
-#: ../../include/delivery.php:441 ../../include/enotify.php:23
+#: ../../include/delivery.php:459 ../../include/enotify.php:23
#: ../../include/notifier.php:659
msgid "noreply"
msgstr "nerespondi"
@@ -6155,47 +6296,47 @@ msgstr "Decembro"
msgid "bytes"
msgstr "bajtoj"
-#: ../../include/text.php:936
-msgid "Categories:"
-msgstr "Kategorioj:"
-
-#: ../../include/text.php:948
+#: ../../include/text.php:934 ../../include/text.php:949
msgid "remove"
msgstr "forviÅi"
-#: ../../include/text.php:948
+#: ../../include/text.php:934 ../../include/text.php:949
msgid "[remove]"
msgstr "[forviÅi]"
-#: ../../include/text.php:951
+#: ../../include/text.php:937
+msgid "Categories:"
+msgstr "Kategorioj:"
+
+#: ../../include/text.php:952
msgid "Filed under:"
msgstr "Enarkivigita kiel:"
-#: ../../include/text.php:967 ../../include/text.php:979
+#: ../../include/text.php:968 ../../include/text.php:980
msgid "Click to open/close"
msgstr "Klaku por malfermi/fermi"
-#: ../../include/text.php:1084
+#: ../../include/text.php:1085
msgid "default"
msgstr "defaÅ­lta"
-#: ../../include/text.php:1096
+#: ../../include/text.php:1097
msgid "Select an alternate language"
msgstr "Elekti alian lingvon"
-#: ../../include/text.php:1306
+#: ../../include/text.php:1307
msgid "activity"
msgstr "aktiveco"
-#: ../../include/text.php:1308
+#: ../../include/text.php:1309
msgid "comment"
msgstr "komento"
-#: ../../include/text.php:1309
+#: ../../include/text.php:1310
msgid "post"
msgstr "afiÅo"
-#: ../../include/text.php:1464
+#: ../../include/text.php:1465
msgid "Item filed"
msgstr "Enarkivigis elementon "
@@ -6255,7 +6396,7 @@ msgstr "Krei novan grupon"
msgid "Contacts not in any group"
msgstr "Kontaktoj en neniu grupo"
-#: ../../include/nav.php:46 ../../boot.php:804
+#: ../../include/nav.php:46 ../../boot.php:810
msgid "Logout"
msgstr "Elsaluti"
@@ -6263,7 +6404,7 @@ msgstr "Elsaluti"
msgid "End this session"
msgstr "Fini ĉi-tiun seancon"
-#: ../../include/nav.php:49 ../../boot.php:1472
+#: ../../include/nav.php:49 ../../boot.php:1478
msgid "Status"
msgstr "Stato"
@@ -6343,11 +6484,11 @@ msgstr "Administri"
msgid "Manage other pages"
msgstr "Administri aliajn paÄojn"
-#: ../../include/nav.php:138 ../../boot.php:1052
+#: ../../include/nav.php:138 ../../boot.php:1058
msgid "Profiles"
msgstr "Profiloj"
-#: ../../include/nav.php:138 ../../boot.php:1052
+#: ../../include/nav.php:138 ../../boot.php:1058
msgid "Manage/edit profiles"
msgstr "Administri/redakti profilojn"
@@ -6426,13 +6567,6 @@ msgstr "Ĉio"
msgid "Categories"
msgstr "Kategorioj"
-#: ../../include/contact_widgets.php:183
-#, php-format
-msgid "%d friend in common"
-msgid_plural "%d friends in common"
-msgstr[0] "%d komuna amiko"
-msgstr[1] "%d komunaj amikoj"
-
#: ../../include/auth.php:29
msgid "Logged out."
msgstr "Elsalutita."
@@ -6520,7 +6654,7 @@ msgstr "sekundoj"
msgid "%1$d %2$s ago"
msgstr "antaÅ­ %1$d %2$s"
-#: ../../include/onepoll.php:402
+#: ../../include/onepoll.php:406
msgid "From: "
msgstr "De: "
@@ -6545,14 +6679,6 @@ msgstr "[neniu temo]"
msgid "Visible to everybody"
msgstr "Videbla al ĉiuj"
-#: ../../include/acl_selectors.php:287
-msgid "show"
-msgstr "montri"
-
-#: ../../include/acl_selectors.php:288
-msgid "don't show"
-msgstr "kaÅi"
-
#: ../../include/enotify.php:14
msgid "Friendica Notification"
msgstr "Friendica Atentigo"
@@ -6741,11 +6867,11 @@ msgstr "Bildo:"
msgid "Please visit %s to approve or reject the suggestion."
msgstr "Bonvolu viziti %s por aprobi aÅ­ malaprobi la sugeston."
-#: ../../include/items.php:2714
+#: ../../include/items.php:2724
msgid "A new person is sharing with you at "
msgstr "Nova persono kunhavigas kun vi ĉe "
-#: ../../include/items.php:2714
+#: ../../include/items.php:2724
msgid "You have a new follower at "
msgstr "Vi havas novan sekvanton ĉe "
@@ -7029,96 +7155,96 @@ msgstr "forviÅi lokon"
msgid "permissions"
msgstr "permesoj"
-#: ../../boot.php:505
+#: ../../boot.php:511
msgid "Delete this item?"
msgstr "ForviÅi ĉi tiun elementon?"
-#: ../../boot.php:508
+#: ../../boot.php:514
msgid "show fewer"
msgstr "montri malpli"
-#: ../../boot.php:681
+#: ../../boot.php:687
#, php-format
msgid "Update %s failed. See error logs."
msgstr "Malsukcesis Äisdatigi %s. Vidu la protokolojn."
-#: ../../boot.php:683
+#: ../../boot.php:689
#, php-format
msgid "Update Error at %s"
msgstr "Eraro dum Äisdatigo ĉe %s"
-#: ../../boot.php:783
+#: ../../boot.php:789
msgid "Create a New Account"
msgstr "Krei Novan Konton"
-#: ../../boot.php:807
+#: ../../boot.php:813
msgid "Nickname or Email address: "
msgstr "KaÅnomo aÅ­ retpoÅtadreso:"
-#: ../../boot.php:808
+#: ../../boot.php:814
msgid "Password: "
msgstr "Pasvorto:"
-#: ../../boot.php:811
+#: ../../boot.php:817
msgid "Or login using OpenID: "
msgstr "AÅ­ ensaluti per OpenID:"
-#: ../../boot.php:817
+#: ../../boot.php:823
msgid "Forgot your password?"
msgstr "Ĉu vi vorgesis vian pasvorton?"
-#: ../../boot.php:984
+#: ../../boot.php:990
msgid "Edit profile"
msgstr "Redakti profilon"
-#: ../../boot.php:1044
+#: ../../boot.php:1050
msgid "Message"
msgstr "MesaÄo"
-#: ../../boot.php:1160 ../../boot.php:1236
+#: ../../boot.php:1166 ../../boot.php:1242
msgid "g A l F d"
msgstr "\\j\\e \\l\\a G\\a \\h\\o\\r\\o, l F d"
-#: ../../boot.php:1161 ../../boot.php:1237
+#: ../../boot.php:1167 ../../boot.php:1243
msgid "F d"
msgstr "F d"
-#: ../../boot.php:1206 ../../boot.php:1277
+#: ../../boot.php:1212 ../../boot.php:1283
msgid "[today]"
msgstr "[hodiaÅ­]"
-#: ../../boot.php:1218
+#: ../../boot.php:1224
msgid "Birthday Reminders"
msgstr "Memorigilo pri naskiÄtagoj"
-#: ../../boot.php:1219
+#: ../../boot.php:1225
msgid "Birthdays this week:"
msgstr "NaskiÄtagoj ĉi-semajne:"
-#: ../../boot.php:1270
+#: ../../boot.php:1276
msgid "[No description]"
msgstr "[Neniu priskribo]"
-#: ../../boot.php:1288
+#: ../../boot.php:1294
msgid "Event Reminders"
-msgstr "Memorigiloj pri Okazoj"
+msgstr "Memorigilo pri Okazoj"
-#: ../../boot.php:1289
+#: ../../boot.php:1295
msgid "Events this week:"
msgstr "Okazoj ĉi-semajne:"
-#: ../../boot.php:1475
+#: ../../boot.php:1481
msgid "Status Messages and Posts"
msgstr "ÅœtatmesaÄoj kaj AfiÅoj"
-#: ../../boot.php:1481
+#: ../../boot.php:1487
msgid "Profile Details"
msgstr "Profildetaloj"
-#: ../../boot.php:1496
+#: ../../boot.php:1502
msgid "Events and Calendar"
msgstr "Okazoj kaj Kalendaro"
-#: ../../boot.php:1502
+#: ../../boot.php:1508
msgid "Only You Can See This"
msgstr "Nur Vi Povas Vidi Tiun"
diff --git a/view/eo/strings.php b/view/eo/strings.php
index dd6fd8215..ba2af413a 100644
--- a/view/eo/strings.php
+++ b/view/eo/strings.php
@@ -36,7 +36,7 @@ $a->strings["Suggest a friend for %s"] = "Sugesti amikon por %s";
$a->strings["Event description and start time are required."] = "Okazo bezonas priskribon kaj startotempon.";
$a->strings["l, F j"] = "l, F j";
$a->strings["Edit event"] = "Redakti okazon";
-$a->strings["link to source"] = "ligi al fonto";
+$a->strings["link to source"] = "ligilo al fonto";
$a->strings["Events"] = "Okazoj";
$a->strings["Create New Event"] = "Krei novan okazon";
$a->strings["Previous"] = "antaÅ­a";
@@ -751,6 +751,10 @@ $a->strings["Network timeout"] = "Reta tempolimo";
$a->strings["Value is in seconds. Set to 0 for unlimited (not recommended)."] = "Valoro en sekundoj. Uzu 0 por mallimitigi (ne rekomendata).";
$a->strings["Delivery interval"] = "Intervalo de liverado";
$a->strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = "Malfruigi fonan liveradon dum tiom da sekundoj por malpliigi la Åargon de la sistemo. Rekomendoj: 4-5 por komunaj serviloj, 2-3 por virtualaj privataj serviloj, 0-1 por grandaj dediĉitaj serviloj.";
+$a->strings["Poll interval"] = "Enketintervalo";
+$a->strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Malfruigi fonajn enketprocesojn je tiom da sekundoj por malpliigi la Åargon de la sistemo. Se 0, uzas la liverintervalon.";
+$a->strings["Maximum Load Average"] = "Maksimuma Meza SistemÅargo";
+$a->strings["Maximum system load before delivery and poll processes are deferred - default 50."] = "Maksimuma sistemÅargo post kiu livero- kaj enketprocesoj estos prokrastinataj. - DefaÅ­lte 50.";
$a->strings["Update has been marked successful"] = "Äœisdatigo estas markita sukcesa";
$a->strings["Executing %s failed. Check system logs."] = "Ne sukcesis plenumi %s. Kontrolu la sistemprotokolojn.";
$a->strings["Update %s was successfully applied."] = "Sukcese aplikis la Äisdatigo %s.";
@@ -829,12 +833,14 @@ $a->strings["No compatible communication protocols or feeds were discovered."] =
$a->strings["The profile address specified does not provide adequate information."] = "La specifita profiladreso ne enhavas sufiĉe da informoj.";
$a->strings["An author or name was not found."] = "Ne trovis aÅ­toron aÅ­ nomon.";
$a->strings["No browser URL could be matched to this address."] = "Neniu retuma URL adreso kongruas al la adreso.";
+$a->strings["Unable to match @-style Identity Address with a known protocol or email contact."] = "Ne eblas kongrui @-stilan identecon adreson al iu konata protokolo au retpoÅtadreso.";
+$a->strings["Use mailto: in front of address to force email check."] = "Uzu mailto: antaÅ­ la adreso por devigi la testadon per retpoÅto.";
$a->strings["The profile address specified belongs to a network which has been disabled on this site."] = "Tiu profila adreso apartenas al retejo kiu estas maÅaltita je ĉi tiu retejo.";
$a->strings["Limited profile. This person will be unable to receive direct/personal notifications from you."] = "Profilo limigata. Ĉi persono ne eblos ricevi rektajn/personajn atentigojn de vi. ";
$a->strings["Unable to retrieve contact information."] = "Ne eblas ricevi kontaktinformojn.";
$a->strings["following"] = "sekvanta";
$a->strings["Common Friends"] = "Komunaj Amikoj";
-$a->strings["No friends in common."] = "Neniom da komunaj amikoj.";
+$a->strings["No contacts in common."] = "Neniom da komunaj kontaktoj.";
$a->strings["Item has been removed."] = "Elemento estas forviÅita.";
$a->strings["Applications"] = "Programoj";
$a->strings["No installed applications."] = "Neniom da instalitaj programoj.";
@@ -920,6 +926,7 @@ $a->strings["No entries."] = "Neniom da afiÅoj.";
$a->strings["Friend Suggestions"] = "Amikosugestoj";
$a->strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "Neniu sugestoj disponeblas. Se ĉi tiu estas nova retejo, bonvolu reprovi post 24 horoj.";
$a->strings["Ignore/Hide"] = "Ignori/KaÅi";
+$a->strings["%s [%s]"] = "%s [%s]";
$a->strings["Global Directory"] = "Tutmonda Katalogo";
$a->strings["Find on this site"] = "Trovi en ĉi retejo";
$a->strings["Site Directory"] = "Reteja Katalogo";
@@ -970,6 +977,8 @@ $a->strings["Install Facebook connector for this account."] = "Instali la Facebo
$a->strings["Remove Facebook connector"] = "Forigi la Facebook konektilon.";
$a->strings["Re-authenticate [This is necessary whenever your Facebook password is changed.]"] = "ReaÅ­tentiÄi [Tio estas bezonata ĉiam kiam vi ÅanÄis vian pasvorton ĉe Facebook.]";
$a->strings["Post to Facebook by default"] = "Ĉiam afiÅi al Facebook.";
+$a->strings["Facebook friend linking has been disabled on this site. The following settings will have no effect."] = "Ligado kun Facebook amikoj estas malaktivita ĉe tiu retejo. La sekvantaj agordoj do ne havas validecon.";
+$a->strings["Facebook friend linking has been disabled on this site. If you disable it, you will be unable to re-enable it."] = "Ligado kun Facebook amikoj estas malaktivita ĉe tiu retejo. Se vi malÅaltas Äin, vi ne eblos ree Åalti Äin.";
$a->strings["Link all your Facebook friends and conversations on this website"] = "Alligu ĉiujn viajn Facebook amikojn kaj konversaciojn je ĉi-tiu retejo.";
$a->strings["Facebook conversations consist of your <em>profile wall</em> and your friend <em>stream</em>."] = "Facebok konversacioj konsistas el via <em>profilmuro</em> kaj la <em>fluo</em> de viaj amikoj.";
$a->strings["On this website, your Facebook friend stream is only visible to you."] = "Je ĉi-tiu retejo, la fluo de viaj amikoj ĉe Facebook nur videblas al vi.";
@@ -1251,10 +1260,13 @@ $a->strings["Posterous Post Settings"] = "Agordoj pri afiÅoj ĉe Posterous";
$a->strings["Enable Posterous Post Plugin"] = "Åœalti la Poserous-afiÅo kromprogramon";
$a->strings["Posterous login"] = "Posterous salutnomo";
$a->strings["Posterous password"] = "Posterous pasvorto";
+$a->strings["Posterous site ID"] = "Idento de Posterous retejo";
+$a->strings["Posterous API token"] = "API ĵetono de Posterous retejo";
$a->strings["Post to Posterous by default"] = "DefaÅ­lte afiÅi al Posterous";
$a->strings["Theme settings"] = "Agordoj pri la etoso";
$a->strings["Set resize level for images in posts and comments (width and height)"] = "Agordi la regrandignivelo por bildoj en afiÅoj kaj komentoj (larÄo kaj alto)";
$a->strings["Set font-size for posts and comments"] = "Agordi la tiparan grandon por afiÅoj kaj komentoj";
+$a->strings["Set theme width"] = "Agordi la larÄo por la etoso";
$a->strings["Color scheme"] = "Kolorskemo";
$a->strings["Your posts and conversations"] = "Viaj afiÅoj kaj komunikadoj";
$a->strings["Your profile page"] = "Via profilo";
@@ -1272,8 +1284,17 @@ $a->strings["Find Friends"] = "Trovi Amikojn";
$a->strings["Local Directory"] = "Loka Katalogo";
$a->strings["Similar Interests"] = "Similaj Interesoj";
$a->strings["Invite Friends"] = "Inviti amikojn";
+$a->strings["Earth Layers"] = "Tertavoloj (Earth Layers)";
+$a->strings["Set zoomfactor for Earth Layer"] = "Agordi zoman faktoron de Tertavolo";
+$a->strings["Set longitude (X) for Earth Layer"] = "Agordi longitudon (X) de Tertavolo";
+$a->strings["Set latitude (Y) for Earth Layer"] = "Agordi latitudon (Y) de Tertavolo";
$a->strings["Help or @NewHere ?"] = "Helpu aÅ­ @NewHere ?";
$a->strings["Connect Services"] = "Konekti Servojn";
+$a->strings["Last Tweets"] = "Ĵusaj Pepaĵoj";
+$a->strings["Set twitter search term"] = "Agordi Twitter serĉtekston";
+$a->strings["don't show"] = "kaÅi";
+$a->strings["show"] = "montri";
+$a->strings["Show/hide boxes at right-hand coloumn:"] = "Montri/kaÅi kestojn en la desktra kolumno:";
$a->strings["Set line-height for posts and comments"] = "Agordi la linigrandon por afiÅoj kaj komentoj";
$a->strings["Set resolution for middle column"] = "Agordi la distingivon por la meza kolumno";
$a->strings["Set color scheme"] = "Agordi Kolorskemon";
@@ -1410,9 +1431,9 @@ $a->strings["October"] = "Oktobro";
$a->strings["November"] = "Novembro";
$a->strings["December"] = "Decembro";
$a->strings["bytes"] = "bajtoj";
-$a->strings["Categories:"] = "Kategorioj:";
$a->strings["remove"] = "forviÅi";
$a->strings["[remove]"] = "[forviÅi]";
+$a->strings["Categories:"] = "Kategorioj:";
$a->strings["Filed under:"] = "Enarkivigita kiel:";
$a->strings["Click to open/close"] = "Klaku por malfermi/fermi";
$a->strings["default"] = "defaÅ­lta";
@@ -1479,10 +1500,6 @@ $a->strings["All Networks"] = "Ĉiuj Retoj";
$a->strings["Saved Folders"] = "Konservitaj Dosierujoj";
$a->strings["Everything"] = "Ĉio";
$a->strings["Categories"] = "Kategorioj";
-$a->strings["%d friend in common"] = array(
- 0 => "%d komuna amiko",
- 1 => "%d komunaj amikoj",
-);
$a->strings["Logged out."] = "Elsalutita.";
$a->strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Okazis problemo ensalutinta kun via OpenID. Bonvolu kontroli la ID.";
$a->strings["The error message was:"] = "La erarmesaÄo estis:";
@@ -1510,8 +1527,6 @@ $a->strings["Image/photo"] = "Bildo";
$a->strings["Cannot locate DNS info for database server '%s'"] = "Ne trovis DNS informojn por datumbaza servilo '%s'.";
$a->strings["[no subject]"] = "[neniu temo]";
$a->strings["Visible to everybody"] = "Videbla al ĉiuj";
-$a->strings["show"] = "montri";
-$a->strings["don't show"] = "kaÅi";
$a->strings["Friendica Notification"] = "Friendica Atentigo";
$a->strings["Thank You,"] = "Dankon,";
$a->strings["%s Administrator"] = "%s Administranto";
@@ -1639,7 +1654,7 @@ $a->strings["[today]"] = "[hodiaÅ­]";
$a->strings["Birthday Reminders"] = "Memorigilo pri naskiÄtagoj";
$a->strings["Birthdays this week:"] = "NaskiÄtagoj ĉi-semajne:";
$a->strings["[No description]"] = "[Neniu priskribo]";
-$a->strings["Event Reminders"] = "Memorigiloj pri Okazoj";
+$a->strings["Event Reminders"] = "Memorigilo pri Okazoj";
$a->strings["Events this week:"] = "Okazoj ĉi-semajne:";
$a->strings["Status Messages and Posts"] = "ÅœtatmesaÄoj kaj AfiÅoj";
$a->strings["Profile Details"] = "Profildetaloj";
diff --git a/view/eo/update_fail_eml.tpl b/view/eo/update_fail_eml.tpl
new file mode 100644
index 000000000..f7e0d8bce
--- /dev/null
+++ b/view/eo/update_fail_eml.tpl
@@ -0,0 +1,11 @@
+Saluton!
+Mi estas $sitename.
+La programistoj de Frienda eldonis Äisdatigon $update antaÅ­ ne longe,
+sed kiam mi provis instali Äin, io terure malsukcesis.
+Tio tuj bezonas riparon kaj mi ne povas fari Äin sole. Bonvolu kontakti
+Friendica programistion se vi ne povas helpi vin mem. Mia datumbazo eble ne plu validas.
+
+La erarmesaÄo estas '$error'.
+
+Mi bedaÅ­ras,
+via Friendica servilo ĉe $siteurl \ No newline at end of file
diff --git a/view/generic_links_widget.tpl b/view/generic_links_widget.tpl
index 45813b876..f3404f783 100644
--- a/view/generic_links_widget.tpl
+++ b/view/generic_links_widget.tpl
@@ -1,4 +1,4 @@
-<div class="widget">
+<div class="widget{{ if $class }} $class{{ endif }}">
{{if $title}}<h3>$title</h3>{{endif}}
{{if $desc}}<div class="desc">$desc</div>{{endif}}
diff --git a/view/group_selection.tpl b/view/group_selection.tpl
new file mode 100644
index 000000000..3809cb994
--- /dev/null
+++ b/view/group_selection.tpl
@@ -0,0 +1,8 @@
+<div class="field custom">
+<label for="group-selection" id="group-selection-lbl">$label</label>
+<select name="group-selection" id="group-selection" >
+{{ for $groups as $group }}
+<option value="$group.id" {{ if $group.selected }}selected="selected"{{ endif }} >$group.name</option>
+{{ endfor }}
+</select>
+</div>
diff --git a/view/head.tpl b/view/head.tpl
index dfb626ebc..8a75a4b8e 100644
--- a/view/head.tpl
+++ b/view/head.tpl
@@ -29,6 +29,7 @@
<script>
var updateInterval = $update_interval;
+ var localUser = {{ if $local_user }}$local_user{{ else }}false{{ endif }};
function confirmDelete() { return confirm("$delitem"); }
function commentOpen(obj,id) {
diff --git a/view/install_checks.tpl b/view/install_checks.tpl
index a1a75ade6..176611d4b 100644
--- a/view/install_checks.tpl
+++ b/view/install_checks.tpl
@@ -1,11 +1,11 @@
<h1>$title</h1>
<h2>$pass</h2>
-<form action="$baseurl/install" method="post">
+<form action="$baseurl/index.php?q=install" method="post">
<table>
{{ for $checks as $check }}
- <tr><td>$check.title </td><td><span class="icon s22 {{if $check.status}}on{{else}}off{{endif}}"></td><td>{{if $check.required}}(required){{endif}}</td></tr>
+ <tr><td>$check.title </td><td><span class="icon s22 {{if $check.status}}on{{else}}{{if$check.required}}off{{else}}yellow{{endif}}{{endif}}"></td><td>{{if $check.required}}(required){{endif}}</td></tr>
{{if $check.help }}
- <tr><td colspan="3">$check.help</td></tr>
+ <tr><td colspan="3"><blockquote>$check.help</blockquote></td></tr>
{{endif}}
{{ endfor }}
</table>
diff --git a/view/pagetypes.tpl b/view/pagetypes.tpl
index d9f873ea0..c9022a1c1 100644
--- a/view/pagetypes.tpl
+++ b/view/pagetypes.tpl
@@ -1,4 +1,5 @@
{{inc field_radio.tpl with $field=$page_normal }}{{endinc}}
- {{inc field_radio.tpl with $field=$page_soapbox }}{{endinc}}
{{inc field_radio.tpl with $field=$page_community }}{{endinc}}
+ {{inc field_radio.tpl with $field=$page_prvgroup }}{{endinc}}
+ {{inc field_radio.tpl with $field=$page_soapbox }}{{endinc}}
{{inc field_radio.tpl with $field=$page_freelove }}{{endinc}}
diff --git a/view/photo_album.tpl b/view/photo_album.tpl
index 3ab9fe723..cc3dcfb9c 100644
--- a/view/photo_album.tpl
+++ b/view/photo_album.tpl
@@ -1,6 +1,6 @@
<div class="photo-album-image-wrapper" id="photo-album-image-wrapper-$id">
<a href="$photolink" class="photo-album-photo-link" id="photo-album-photo-link-$id" title="$phototitle">
- <img src="$imgsrc" alt="$imgalt" title="$phototitle" class="photo-album-photo lframe resize" id="photo-album-photo-$id" />
+ <img src="$imgsrc" alt="$imgalt" title="$phototitle" class="photo-album-photo lframe resize$twist" id="photo-album-photo-$id" />
<p class='caption'>$desc</p>
</a>
</div>
diff --git a/view/photo_edit.tpl b/view/photo_edit.tpl
index 9950cc4ac..f6059a7ec 100644
--- a/view/photo_edit.tpl
+++ b/view/photo_edit.tpl
@@ -17,6 +17,11 @@
<input name="newtag" id="photo-edit-newtag" size="84" title="$help_tags" type="text" />
<div id="photo-edit-tags-end"></div>
+ <div id="photo-edit-rotate-wrapper">
+ <div id="photo-edit-rotate-label">$rotate</div>
+ <input type="checkbox" name="rotate" value="1" />
+ </div>
+ <div id="photo-edit-rotate-end"></div>
<div id="photo-edit-perms" class="photo-edit-perms" >
<a href="#photo-edit-perms-select" id="photo-edit-perms-menu" class="button" title="$permissions"/>
diff --git a/view/photo_top.tpl b/view/photo_top.tpl
index 04a054b52..155cab51d 100644
--- a/view/photo_top.tpl
+++ b/view/photo_top.tpl
@@ -1,7 +1,7 @@
-<div class="photo-top-image-wrapper lframe" id="photo-top-image-wrapper-$id">
+<div class="photo-top-image-wrapper lframe" id="photo-top-image-wrapper-$photo.id">
<a href="$photo.link" class="photo-top-photo-link" id="photo-top-photo-link-$photo.id" title="$photo.title">
- <img src="$photo.src" alt="$photo.alt" title="$photo.title" class="photo-top-photo" id="photo-top-photo-$photo.id" />
+ <img src="$photo.src" alt="$photo.alt" title="$photo.title" class="photo-top-photo$photo.twist" id="photo-top-photo-$photo.id" />
</a>
<div class="photo-top-album-name"><a href="$photo.album.link" class="photo-top-album-link" title="$photo.album.alt" >$photo.album.name</a></div>
</div>
diff --git a/view/photos_recent.tpl b/view/photos_recent.tpl
index b8cb924b7..1df78cb7b 100644
--- a/view/photos_recent.tpl
+++ b/view/photos_recent.tpl
@@ -8,3 +8,4 @@
{{ inc photo_top.tpl }}{{ endinc }}
{{ endfor }}
</div>
+<div class="photos-end"></div>
diff --git a/view/profile_advanced.tpl b/view/profile_advanced.tpl
index 470404fc3..0b8f31f43 100644
--- a/view/profile_advanced.tpl
+++ b/view/profile_advanced.tpl
@@ -29,7 +29,7 @@
{{ if $profile.marital }}
<dl id="aprofile-marital" class="aprofile">
<dt><span class="heart">&hearts;</span> $profile.marital.0</dt>
- <dd>$profile.marital.1 {{ if $profile.marital.with }}($profile.marital.with){{ endif }}</dd>
+ <dd>$profile.marital.1{{ if $profile.marital.with }} ($profile.marital.with){{ endif }}{{ if $profile.howlong }} $profile.howlong{{ endif }}</dd>
</dl>
{{ endif }}
@@ -54,6 +54,13 @@
</dl>
{{ endif }}
+{{ if $profile.hometown }}
+<dl id="aprofile-hometown" class="aprofile">
+ <dt>$profile.hometown.0</dt>
+ <dd>$profile.hometown.1</dd>
+</dl>
+{{ endif }}
+
{{ if $profile.politic }}
<dl id="aprofile-politic" class="aprofile">
<dt>$profile.politic.0</dt>
diff --git a/view/profile_edit.tpl b/view/profile_edit.tpl
index 2139fcf13..ad34b9956 100644
--- a/view/profile_edit.tpl
+++ b/view/profile_edit.tpl
@@ -97,6 +97,12 @@ $hide_friends
</div>
<div id="profile-edit-region-end"></div>
+<div id="profile-edit-hometown-wrapper" >
+<label id="profile-edit-hometown-label" for="profile-edit-hometown" >$lbl_hometown </label>
+<input type="text" size="32" name="hometown" id="profile-edit-hometown" value="$hometown" />
+</div>
+<div id="profile-edit-hometown-end"></div>
+
<div class="profile-edit-submit-wrapper" >
<input type="submit" name="submit" class="profile-edit-submit-button" value="$submit" />
</div>
@@ -108,6 +114,9 @@ $marital
</div>
<label id="profile-edit-with-label" for="profile-edit-with" > $lbl_with </label>
<input type="text" size="32" name="with" id="profile-edit-with" title="$lbl_ex1" value="$with" />
+<label id="profile-edit-howlong-label" for="profile-edit-howlong" > $lbl_howlong </label>
+<input type="text" size="32" name="howlong" id="profile-edit-howlong" title="$lbl_howlong" value="$howlong" />
+
<div id="profile-edit-marital-end"></div>
<div id="profile-edit-sexual-wrapper" >
diff --git a/view/prv_message.tpl b/view/prv_message.tpl
index 2ce07ce6f..ecfef95d6 100644
--- a/view/prv_message.tpl
+++ b/view/prv_message.tpl
@@ -17,7 +17,7 @@ $select
<div id="prvmail-submit-wrapper" >
- <input type="submit" id="prvmail-submit" name="submit" value="Submit" tabindex="13" />
+ <input type="submit" id="prvmail-submit" name="submit" value="$submit" tabindex="13" />
<div id="prvmail-upload-wrapper" >
<div id="prvmail-upload" class="icon border camera" title="$upload" ></div>
</div>
diff --git a/view/settings.tpl b/view/settings.tpl
index cec3c6f64..99ee9b51e 100644
--- a/view/settings.tpl
+++ b/view/settings.tpl
@@ -56,9 +56,12 @@ $suggestme
$unkmail
+
{{inc field_input.tpl with $field=$cntunkmail }}{{endinc}}
{{inc field_input.tpl with $field=$expire.days }}{{endinc}}
+
+
<div class="field input">
<span class="field_help"><a href="#advanced-expire-popup" id="advanced-expire" class='popupbox' title="$expire.advanced">$expire.label</a></span>
<div style="display: none;">
@@ -67,6 +70,7 @@ $unkmail
{{ inc field_yesno.tpl with $field=$expire.items }}{{endinc}}
{{ inc field_yesno.tpl with $field=$expire.notes }}{{endinc}}
{{ inc field_yesno.tpl with $field=$expire.starred }}{{endinc}}
+ {{ inc field_yesno.tpl with $field=$expire.network_only }}{{endinc}}
</div>
</div>
@@ -90,23 +94,26 @@ $unkmail
<br/>
<div id="settings-default-perms-end"></div>
+$group_select
+
<div class="settings-submit-wrapper" >
-<input type="submit" name="submit" class="settings-submit" value="Submit" />
+<input type="submit" name="submit" class="settings-submit" value="$submit" />
</div>
<h3 class="settings-heading">$h_not</h3>
+<div id="settings-notifications">
-<strong>$activity_options</strong>
+<div id="settings-activity-desc">$activity_options</div>
{{inc field_checkbox.tpl with $field=$post_newfriend }}{{endinc}}
{{inc field_checkbox.tpl with $field=$post_joingroup }}{{endinc}}
{{inc field_checkbox.tpl with $field=$post_profilechange }}{{endinc}}
-<div id="settings-notify-desc"><strong>$lbl_not </strong></div>
+<div id="settings-notify-desc">$lbl_not</div>
<div class="group">
{{inc field_intcheckbox.tpl with $field=$notify1 }}{{endinc}}
@@ -118,6 +125,7 @@ $unkmail
{{inc field_intcheckbox.tpl with $field=$notify7 }}{{endinc}}
</div>
+</div>
<div class="settings-submit-wrapper" >
<input type="submit" name="submit" class="settings-submit" value="$submit" />
@@ -125,6 +133,7 @@ $unkmail
<h3 class="settings-heading">$h_advn</h3>
+<div id="settings-pagetype-desc">$h_descadvn</div>
$pagetype
diff --git a/view/theme/darkzero-NS/style.css b/view/theme/darkzero-NS/style.css
index 047381a92..6dc788f35 100644
--- a/view/theme/darkzero-NS/style.css
+++ b/view/theme/darkzero-NS/style.css
@@ -22,9 +22,14 @@ div.wall-item-content-wrapper.shiny { background-image: url('shiny.png'); }
nav #banner #logo-text a { color: #ffffff; }
-.wall-item-content-wrapper { border: 1px solid #444444; }
+.wall-item-content-wrapper {
+border: 1px solid #444444;
+background: #444;
+
+}
.wall-item-tools { background-color: #444444; background-image: none;}
-.comment-edit-wrapper{ background-color: #333333; }
+.comment-wwedit-wrapper{ background-color: #333333; }
+.comment-edit-preview{ color: #000000; }
.wall-item-content-wrapper.comment { background-color: #444444; border: 0px;}
.photo-top-album-name{ background-color: #333333; }
.photo-album-image-wrapper .caption { background-color: rgba(51, 51, 51, 0.8); color: #FFFFFF; }
@@ -75,25 +80,77 @@ input#dfrn-url {
}
-#jot-title {
+#jot-title, #jot-category {
background-color: #333333;
border: 1px solid #333333;
}
#jot-title::-webkit-input-placeholder{ color: #555555!important;}
#jot-title:-moz-placeholder{color: #555555!important;}
+#jot-category::-webkit-input-placeholder{ color: #555555!important;}
+#jot-category:-moz-placeholder{color: #555555!important;}
#jot-title:hover,
-#jot-title:focus {
+#jot-title:focus,
+#jot-category:hover,
+#jot-category:focus {
border: 1px solid #cccccc;
}
+blockquote {
+ background: #ddd;
+ color: #000;
+}
+
+.acl-list-item p, #profile-jot-email-label, div#jot-preview-content, div.profile-jot-net {
+ color: #eec;
+}
+
+input#acl-search {
+ background-color: #aaa;
+}
+
+
+
+.notify-seen {
+ background:#666;
+}
+
+#nav-notifications-menu {
+ background: #2e2e2f;
+}
+
+#nav-notifications-menu li:hover {
+ background: #444;
+}
+
+.acpopupitem{
+ background:#2e2f2e;
+}
+
+code {
+ background:#2e2f2e !important;
+ color:#fff !important;
+}
+
+blockquote {
+ background:#2e2f2e !important;
+ color:#eec !important;
+}
+
+.group-selected, .nets-selected, .fileas-selected, .categories-selected {
+ background:#2e2f2e;
+}
+
+#fancybox-content{
+ background:#444;
+}
.wall-item-content {
max-height: 20000px;
overflow: none;
}
-blockquote {
- background: #ddd;
- color: #000;
-}
+
+.editicon:hover {
+ background-color: #ccc;
+} \ No newline at end of file
diff --git a/view/theme/darkzero/style.css b/view/theme/darkzero/style.css
index a3df740eb..77650a91a 100644
--- a/view/theme/darkzero/style.css
+++ b/view/theme/darkzero/style.css
@@ -22,7 +22,11 @@ div.wall-item-content-wrapper.shiny { background-image: url('shiny.png'); }
nav #banner #logo-text a { color: #ffffff; }
-.wall-item-content-wrapper { border: 1px solid #444444; }
+.wall-item-content-wrapper {
+border: 1px solid #444444;
+background: #444;
+
+}
.wall-item-tools { background-color: #444444; background-image: none;}
.comment-wwedit-wrapper{ background-color: #333333; }
.comment-edit-preview{ color: #000000; }
@@ -99,7 +103,7 @@ blockquote {
}
.acl-list-item p, #profile-jot-email-label, div#jot-preview-content, div.profile-jot-net {
- color: #000000;
+ color: #eec;
}
input#acl-search {
@@ -118,4 +122,31 @@ input#acl-search {
#nav-notifications-menu li:hover {
background: #444;
+}
+
+.acpopupitem{
+ background:#2e2f2e;
+}
+
+code {
+ background:#2e2f2e !important;
+ color:#fff !important;
+}
+
+blockquote {
+ background:#2e2f2e !important;
+ color:#eec !important;
+}
+
+.group-selected, .nets-selected, .fileas-selected, .categories-selected {
+ background:#2e2f2e;
+}
+
+#fancybox-content{
+ background:#444;
+}
+
+/* This seems okay to me...we might not need a new iconset, lets see how people react */
+.editicon {
+ background-color: #333;
} \ No newline at end of file
diff --git a/view/theme/diabook/bottom.tpl b/view/theme/diabook/bottom.tpl
index 0f8e61d97..50a15788d 100644
--- a/view/theme/diabook/bottom.tpl
+++ b/view/theme/diabook/bottom.tpl
@@ -16,8 +16,13 @@ $(document).ready(function() {
});
$("div#pause").attr("style", "position: fixed;bottom: 43px;left: 5px;");
- $(".autocomplete").attr("style", "width: 350px;color: black;background: white;cursor: pointer;text-align: left;max-height: 350px;overflow: auto;");
-
+ $("div#pause").html("<img src='images/pause.gif' alt='pause' title='pause live-updates (ctrl+space)' style='border: 1px solid black;opacity: 0.2;'>");
+ $(document).keydown(function(event) {
+ if (!$("div#pause").html()){
+ $("div#pause").html("<img src='images/pause.gif' alt='pause' title='pause live-updates (ctrl+space)' style='border: 1px solid black;opacity: 0.2;'>");
+ }});
+ $(".autocomplete").attr("style", "width: 350px;color: black;border: 1px solid #D2D2D2;background: white;cursor: pointer;text-align: left;max-height: 350px;overflow: auto;");
+
});
$(document).ready(function(){
@@ -123,4 +128,6 @@ $(document).ready(function() {
function cmtBbClose(id) {
$(".comment-edit-bb-" + id).hide();
}
+
+
</script>
diff --git a/view/theme/diabook/diabook-dark/style-network.css b/view/theme/diabook/diabook-dark/style-network.css
index 678e8597c..ee2e76d3b 100644
--- a/view/theme/diabook/diabook-dark/style-network.css
+++ b/view/theme/diabook/diabook-dark/style-network.css
@@ -464,7 +464,7 @@ code {
position: absolute;
width: 12em;
background: #2e2f2e;
- color: #2e2f2e;
+ color: #eec;
margin: 0px;
padding: 1em;
list-style: none;
@@ -667,7 +667,7 @@ nav .nav-menu-icon:hover {
}
nav .nav-menu-icon.selected {
- background-color: #fff;
+ background-color: #308dbf;
}
nav .nav-menu-icon img {
width: 22px;
@@ -1434,7 +1434,8 @@ transition: all 0.2s ease-in-out;
}
.wall-item-comment-wrapper textarea {
height: 2.0em;
- width: 100%;
+ /**No idea what's going on here, but at 100%, it's fugly **/
+ width: 98% !important;
font-size: 10px;
color: #999999;
border: 1px solid #2e2e2f;
diff --git a/view/theme/diabook/diabook-dark/style-profile.css b/view/theme/diabook/diabook-dark/style-profile.css
index 4b6bc15b5..216ccfc58 100644
--- a/view/theme/diabook/diabook-dark/style-profile.css
+++ b/view/theme/diabook/diabook-dark/style-profile.css
@@ -1216,7 +1216,7 @@ right_aside {
/* background: #F1F1F1; */
}
-right_aside a{color: #1872A2;}
+right_aside a{color: #88a9d2;}
right_aside h3 {border-bottom: 1px solid #D2D2D2; padding-top: 5px; padding-bottom: 0px; padding-left: 9px; margin-bottom: 0px;
margin-top:30px;}
right_aside .directory-item { width: 50px; height: 50px; vertical-align: center; text-align: center; }
diff --git a/view/theme/diabook/theme.php b/view/theme/diabook/theme.php
index f701d7d83..83079782e 100644
--- a/view/theme/diabook/theme.php
+++ b/view/theme/diabook/theme.php
@@ -14,10 +14,15 @@ function diabook_init(&$a) {
//print diabook-version for debugging
$diabook_version = "Diabook (Version: 1.027)";
-$a->page['htmlhead'] .= sprintf('<META NAME="theme" CONTENT="%s"/>', $diabook_version);
+$a->page['htmlhead'] .= sprintf('<META NAME=generator CONTENT="%s"/>', $diabook_version);
//init css on network and profilepages
$cssFile = null;
+
+// Preload config
+load_config("diabook");
+load_pconfig(local_user(), "diabook");
+
//get statuses of boxes at right-hand-column
$close_pages = false;
$site_close_pages = get_config("diabook", "close_pages" );
@@ -167,38 +172,38 @@ if ($color=="dark") $color_path = "/diabook-dark/";
//write js-scripts to the head-section:
//load jquery.cookie.js
$cookieJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.cookie.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s"></script>', $cookieJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s"></script>', $cookieJS);
//load jquery.ae.image.resize.js
$imageresizeJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.ae.image.resize.min.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $imageresizeJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $imageresizeJS);
//load jquery.ui.js
if($ccCookie != "10") {
$jqueryuiJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery-ui-1.8.20.custom.min.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $jqueryuiJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $jqueryuiJS);
$jqueryuicssJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/jquery-ui-1.8.20.custom.css";
$a->page['htmlhead'] .= sprintf('<link rel="stylesheet" type="text/css" href="%s" />', $jqueryuicssJS);
}
//load jquery.twitter.search.js
if($close_twitter != "1") {
$twitterJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.twitter.search.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $twitterJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $twitterJS);
}
//load jquery.mapquery.js
if($close_mapquery != "1") {
$mqtmplJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.tmpl.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mqtmplJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $mqtmplJS);
$mapqueryJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.core.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mapqueryJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $mapqueryJS);
$openlayersJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/OpenLayers.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $openlayersJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $openlayersJS);
$mqmouseposJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.mqMousePosition.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mqmouseposJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $mqmouseposJS);
$mousewheelJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mousewheel.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mousewheelJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $mousewheelJS);
$mqlegendJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.legend.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mqlegendJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $mqlegendJS);
$mqlayermanagerJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.mqLayerManager.js";
- $a->page['htmlhead'] .= sprintf('<script language="JavaScript" src="%s" ></script>', $mqlayermanagerJS);
+ $a->page['htmlhead'] .= sprintf('<script type="text/javascript" src="%s" ></script>', $mqlayermanagerJS);
}
$a->page['htmlhead'] .= '
@@ -236,7 +241,7 @@ if ($color=="dark") $color_path = "/diabook-dark/";
$a->page['htmlhead'] .= '
<script>
- $(document).ready(function() {
+ $(function() {
$("#map").mapQuery({
layers:[{ //add layers to your map; you need to define at least one to be able to see anything on the map
type:"osm" //add a layer of the type osm (OpenStreetMap)
@@ -307,13 +312,12 @@ if ($color=="dark") $color_path = "/diabook-dark/";
//check if community_home-plugin is activated and change css.. we need this, that the submit-wrapper doesn't overlay the login-panel if communityhome-plugin is active
$nametocheck = "communityhome";
$r = q("select id from addon where name = '%s' and installed = 1", dbesc($nametocheck));
- if(count($r) == "1") {
+ if(count($r) == "1" && $a->argv[0] === "home" ) {
$a->page['htmlhead'] .= '
<script>
- $(document).ready(function() {
+ $(function() {
$("div#login-submit-wrapper").attr("style","padding-top: 120px;");
-
});
</script>';
}
diff --git a/view/theme/dispy/communityhome.tpl b/view/theme/dispy/communityhome.tpl
index 4d09b9255..aaa27465b 100644
--- a/view/theme/dispy/communityhome.tpl
+++ b/view/theme/dispy/communityhome.tpl
@@ -2,7 +2,6 @@
<div>$page</div>
{{ endif }}
-{{ if $lastusers_title }}
<h3 id="extra-help-header">Help or '@NewHere'?</h3>
<div id="extra-help">
<a href="https://helpers.pyxis.uberspace.de/profile/helpers"
@@ -13,27 +12,24 @@
title="Local Friendica" target="_blank">Local Friendica</a><br />
<a href="http://kakste.com/profile/newhere" title="@NewHere" target="_blank">NewHere</a>
</div>
-{{ endif }}
-{{ if $lastusers_title }}
<h3 id="connect-services-header">Connectable Services</h3>
-<div id="connect-services">
-<a href="$url/facebook"><img alt="Facebook"
- src="view/theme/dispy/icons/facebook.png" title="Facebook" /></a>
-<a href="$url/settings/connectors"><img
- alt="StatusNet" src="view/theme/dispy/icons/StatusNet.png?" title="StatusNet" /></a>
-<a href="$url/settings/connectors"><img
- alt="LiveJournal" src="view/theme/dispy/icons/livejournal.png?" title="LiveJournal" /></a>
-<a href="$url/settings/connectors"><img
- alt="Posterous" src="view/theme/dispy/icons/posterous.png?" title="Posterous" /></a><br />
-<a href="$url/settings/connectors"><img
- alt="Tumblr" src="view/theme/dispy/icons/tumblr.png?" title="Tumblr" /></a>
-<a href="$url/settings/connectors"><img
- alt="Twitter" src="view/theme/dispy/icons/twitter.png?" title="Twitter" /></a>
-<a href="$url/settings/connectors"><img
- alt="WordPress" src="view/theme/dispy/icons/wordpress.png?" title="WordPress" /></a>
-<a href="$url/settings/connectors"><img
- alt="E-Mail" src="view/theme/dispy/icons/email.png?" title="E-Mail" /></a>
-</div>
-{{ endif }}
+<ul id="connect-services">
+<li><a href="$url/facebook"><img alt="Facebook"
+ src="view/theme/dispy/icons/facebook.png" title="Facebook" /></a></li>
+<li><a href="$url/settings/connectors"><img
+ alt="StatusNet" src="view/theme/dispy/icons/StatusNet.png" title="StatusNet" /></a></li>
+<li><a href="$url/settings/connectors"><img
+ alt="LiveJournal" src="view/theme/dispy/icons/livejournal.png" title="LiveJournal" /></a></li>
+<li><a href="$url/settings/connectors"><img
+ alt="Posterous" src="view/theme/dispy/icons/posterous.png" title="Posterous" /></a></li>
+<li><a href="$url/settings/connectors"><img
+ alt="Tumblr" src="view/theme/dispy/icons/tumblr.png" title="Tumblr" /></a></li>
+<li><a href="$url/settings/connectors"><img
+ alt="Twitter" src="view/theme/dispy/icons/twitter.png" title="Twitter" /></a></li>
+<li><a href="$url/settings/connectors"><img
+ alt="WordPress" src="view/theme/dispy/icons/wordpress.png" title="WordPress" /></a></li>
+<li><a href="$url/settings/connectors"><img
+ alt="E-Mail" src="view/theme/dispy/icons/email.png" title="E-Mail" /></a></li>
+</ul>
diff --git a/view/theme/dispy/config.php b/view/theme/dispy/config.php
index a24288bf8..25663c10b 100644
--- a/view/theme/dispy/config.php
+++ b/view/theme/dispy/config.php
@@ -41,17 +41,17 @@ function theme_admin_post(&$a) {
function dispy_form(&$a, $font_size, $line_height, $colour) {
$line_heights = array(
- "1.3"=>"1.3",
- "---"=>"---",
- "1.6"=>"1.6",
- "1.5"=>"1.5",
- "1.4"=>"1.4",
- "1.2"=>"1.2",
- "1.1"=>"1.1",
+ "1.3" => "1.3",
+ "---" => "---",
+ "1.6" => "1.6",
+ "1.5" => "1.5",
+ "1.4" => "1.4",
+ "1.2" => "1.2",
+ "1.1" => "1.1",
);
$font_sizes = array(
'12' => '12',
- '14' =>'14',
+ '14' => '14',
"---" => "---",
"16" => "16",
"15" => "15",
diff --git a/view/theme/dispy/conversation.tpl b/view/theme/dispy/conversation.tpl
index 41b6aeadf..c49cdf26b 100644
--- a/view/theme/dispy/conversation.tpl
+++ b/view/theme/dispy/conversation.tpl
@@ -18,6 +18,7 @@
{{ if $dropping }}
<div class="delete-checked">
-<a href="#" onclick="deleteCheckedItems();return false;"><span class="icon delete"></span><span class="s22 text">$dropping</span></a>
+<a href="#" onclick="deleteCheckedItems();return false;"><span class="icon delete"></span><span class="s22 text" onmouseover="imgbright(this);" onmouseout="imgdull(this);">$dropping</span></a>
</div>
+<div id="item-delete-selected-end"></div>
{{ endif }}
diff --git a/view/theme/dispy/dark/_base.less b/view/theme/dispy/dark/_base.less
index 000cdbd5a..d1051a989 100644
--- a/view/theme/dispy/dark/_base.less
+++ b/view/theme/dispy/dark/_base.less
@@ -17,6 +17,7 @@
@import "../css/reset";
//* backgrounds */
+@lt_bg_colour: lighten(@bg_colour, 10%);
@dk_bg_colour: #1d1f1d;
@bg_colour: #2e2f2e;
@bg_alt_colour: #2e302e;
@@ -24,8 +25,9 @@
@menu_bg_colour: #555753;
//* font colour, aka color: */
-@lt_main_colour: #ffff99;
+@lt_main_colour: lighten(@main_colour, 10%);
@main_colour: #eeeecc;
+@dk_main_colour: darken(@main_colour, 20%);
@main_alt_colour: #eeeeee;
// darken(@main_alt_colour, 13%) > #cdcdcd
// darken(@main_alt_colour, 13.5%) > #cccccc
@@ -56,9 +58,6 @@
@info: #1353b1;
@alert: #ff0000;
-@lt_main_colour: lighten(@bg_colour, 10%);
-@dk_main_colour: darken(@bg_colour, 10%);
-
//* links */
@link_colour: #88a9d2;
@dk_link_colour: darken(@link_colour, 10%);
@@ -137,7 +136,19 @@
-webkit-text-overflow: @t;
text-overflow: @t;
}
-
+.lin_gradient(@x1: left, @x2: right, @y1: top, @y2: bottom, @c1: @bg_colour, @c2: @dk_bg_colour) {
+ // w3c
+ background: linear-gradient(@x1 @y2, @c1, @c2);
+ // webkit
+ // -webkit-gradient(<type>, <point> [, <radius>]?, <point> [, <radius>]? [, <stop>]*)
+ background: -webkit-gradient(linear, @x1 @y1, @x2 @y2, from(@c1), to(@c2));
+ // mozilla
+ // -moz-linear-gradient([<point> || <angle>,]? <stop>, <stop> [, <stop>])
+ background: -moz-linear-gradient(@x1 @y2, @c1, @c2);
+ // opera
+ //background: -o-linear-gradient([<point> || <angle>,]? <stop>, <stop> [, <stop>]);
+ background: -o-linear-gradient(@x1, @c1, @c2);
+}
//* pre wrap */
.wrap () {
white-space: pre-wrap;
diff --git a/view/theme/dispy/dark/screenshot.jpg b/view/theme/dispy/dark/screenshot.jpg
index ada60ca61..f54873e8e 100644
--- a/view/theme/dispy/dark/screenshot.jpg
+++ b/view/theme/dispy/dark/screenshot.jpg
Binary files differ
diff --git a/view/theme/dispy/dark/screenshot_small.jpg b/view/theme/dispy/dark/screenshot_small.jpg
new file mode 100644
index 000000000..32d869331
--- /dev/null
+++ b/view/theme/dispy/dark/screenshot_small.jpg
Binary files differ
diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css
index 12575ca91..b94e5ec34 100644
--- a/view/theme/dispy/dark/style.css
+++ b/view/theme/dispy/dark/style.css
@@ -17,9 +17,10 @@ button,input,select,textarea{color:#eeeecc;background-color:#2e2f2e;}
select{border:1px dotted #555555;padding:1px;margin:3px;color:#eeeecc;background:#2e2f2e;max-width:85%;min-width:85px;}
option{padding:1px;color:#eeeecc;background:#2e2f2e;}option[selected="selected"]{color:#2e2f2e;background:#eeeecc;}
tr:nth-child(even){background-color:#474947;}
-:focus{outline:invert, dashed, thin;}
+:focus{outline:none;}
+a:focus{outline:invert, dashed, thin;}
[disabled="disabled"]{background:#4e4f4e;color:#ddddbb;}
-ins,mark{background-color:#2e302e;color:#474947;}
+ins,mark{background-color:#2e302e;color:#fbfbf2;}
ins{text-decoration:none;}
mark{font-style:italic;font-weight:bold;}
pre,code,kbd,samp,.wall-item-body code{font-family:monospace, monospace;_font-family:monospace;font-size:1em;}
@@ -36,8 +37,9 @@ img{border:0 none;}
a{color:#88a9d2;text-decoration:none;margin-bottom:1px;}a:hover{color:#638ec4;border-bottom:1px dotted #638ec4;}
a:hover img{text-decoration:none;}
blockquote{background:#444444;color:#eeeecc;text-indent:5px;padding:5px;border:1px solid #9a9a9a;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
-label{width:38%;display:inline-block;font-size:small;margin:0 10px 1em 0;border:1px solid #2e2f2e;padding:5px;background:#eeeecc;color:#111111;-moz-box-shadow:3px 3px 5px 0px #111111;-o-box-shadow:3px 3px 5px 0px #111111;-webkit-box-shadow:3px 3px 5px 0px #111111;-ms-box-shadow:3px 3px 5px 0px #111111;box-shadow:3px 3px 5px 0px #111111;}
-input{width:250px;height:25px;border:1px solid #999999;}input[type="checkbox"],input[type="radio"]{margin:0;width:15px;height:15px;}
+label{width:38%;display:inline-block;font-size:small;margin:0 10px 1em 0;border:1px solid #2e2f2e;padding:3px 5px;background:#eeeecc;color:#111111;-moz-box-shadow:3px 3px 5px 0px #111111;-o-box-shadow:3px 3px 5px 0px #111111;-webkit-box-shadow:3px 3px 5px 0px #111111;-ms-box-shadow:3px 3px 5px 0px #111111;box-shadow:3px 3px 5px 0px #111111;}
+input{width:250px;height:25px;border:1px solid #999999;width:17em;}input[type="checkbox"],input[type="radio"]{width:15px;height:15px;margin:0;}
+input[type="radio"]{margin:5px 0;}
input[type="submit"],input[type="button"]{background-color:#eeeeee;border:2px outset #b1b1b1;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 3px 4px 0 #111111;-o-box-shadow:1px 3px 4px 0 #111111;-webkit-box-shadow:1px 3px 4px 0 #111111;-ms-box-shadow:1px 3px 4px 0 #111111;box-shadow:1px 3px 4px 0 #111111;color:#2e302e;cursor:pointer;font-weight:bold;width:auto;-moz-text-shadow:1px 1px #111111;-o-text-shadow:1px 1px #111111;-webkit-text-shadow:1px 1px #111111;-ms-text-shadow:1px 1px #111111;text-shadow:1px 1px #111111;}
input[type="submit"]:active,input[type="button"]:active{-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
h1,h2,h3,h4,h5,h6{margin:10px 0px;font-weight:bold;border-bottom:1px solid #638ec4;}
@@ -51,13 +53,12 @@ h6{font-size:xx-small;}
.fakelink,.lockview{color:#88a9d2;cursor:pointer;}
.fakelink:hover{color:#638ec4;}
.smalltext{font-size:0.7em;}
-#panel{position:absolute;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #eeeeee;background-color:#2e302e;color:#eeeecc;padding:1em;}
-.pager{margin-top:60px;display:block;clear:both;text-align:center;font-size:small;font-weight:bold;}.pager span{padding:4px;margin:4px;}
-.pager_current{background-color:#88a9d2;color:#2e2f2e;}
.action{margin:5px 0;}
.tool{margin:5px 0;list-style:none;}
#articlemain{width:100%;height:100%;margin:0 auto;}
-[class$="-desc"],[id$="-desc"]{color:#2e2f2e;background:#eeeecc;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin:3px 10px 7px 0;padding:5px;font-weight:bold;font-size:smaller;}
+.button{color:#eeeecc;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding:5px;cursor:pointer;}.button a{color:#eeeecc;font-weight:bold;}
+#profile-listing-desc a{color:#eeeecc;font-weight:bold;}
+[class$="-desc"],[id$="-desc"]{color:#eeeecc;background:#2e2f2e;border:2px outset #d4d580;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin:3px 10px 7px 0;padding:5px;font-weight:bold;font-size:smaller;}
#item-delete-selected-desc{float:left;margin-right:5px;}#item-delete-selected-desc:hover{text-decoration:underline;}
.intro-approve-as-friend-desc{margin-top:10px;}
.intro-desc{margin-bottom:20px;font-weight:bold;}
@@ -65,6 +66,7 @@ h6{font-size:xx-small;}
#settings-nickname-desc{background:#eeeecc;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #eeeecc;padding:5px;color:#2e2f2e;}
.contactname,.contact-name{font-weight:bold;font-size:smaller;}
.contact-details{font-style:italic;font-size:smaller;}
+.like-rotator{vertical-align:middle;text-align:center;margin:1px;}
#asidemain .field{overflow:hidden;width:200px;}
#login-extra-links{overflow:auto !important;padding-top:60px !important;width:100% !important;}#login-extra-links a{margin-right:20px;}
#login_standard{display:block !important;float:none !important;height:100% !important;position:relative !important;width:100% !important;}#login_standard .field label{width:200px !important;}
@@ -76,7 +78,7 @@ h6{font-size:xx-small;}
#login_openid label{width:180px !important;}
nav{height:60px;background-color:#1d1f1d;color:#eeeeee;position:relative;padding:20px 20px 10px 95px;}nav a{text-decoration:none;color:#eeeeee;border:0px;}nav a:hover{text-decoration:none;color:#eeeeee;border:0px;}
nav #banner{display:block;position:absolute;left:51px;top:25px;}nav #banner #logo-text a{font-size:40px;font-weight:bold;margin-left:3px;}
-ul#user-menu-popup{display:none;position:absolute;background-color:#555753;width:100%;padding:10px 0px;margin:0px;top:20px;left:0;font-size:small;line-height:1;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-moz-box-shadow:5px 5px 10px 0px #111111;-o-box-shadow:5px 5px 10px 0px #111111;-webkit-box-shadow:5px 5px 10px 0px #111111;-ms-box-shadow:5px 5px 10px 0px #111111;box-shadow:5px 5px 10px 0px #111111;z-index:10000;}ul#user-menu-popup li{display:block;}ul#user-menu-popup li a{display:block;padding:5px;}ul#user-menu-popup li a:hover{color:#eeeecc;background-color:#2e302e;}
+ul#user-menu-popup{display:none;position:absolute;background-color:#555753;width:100%;padding:10px 0px;margin:0px;top:20px;left:0;font-size:small;line-height:1;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-moz-box-shadow:5px 5px 10px 0px #111111;-o-box-shadow:5px 5px 10px 0px #111111;-webkit-box-shadow:5px 5px 10px 0px #111111;-ms-box-shadow:5px 5px 10px 0px #111111;box-shadow:5px 5px 10px 0px #111111;z-index:10000;}ul#user-menu-popup li{display:block;}ul#user-menu-popup li a{display:block;padding:5px;color:#eeeeee;background-color:#555753;}ul#user-menu-popup li a:hover{color:#2e2f2e;background-color:#eeeeee;}
ul#user-menu-popup li a.nav-sep{border-top:1px solid #2e302e;}
nav .nav-link{display:inline-block;width:22px;height:22px;overflow:hidden;margin:0px 5px 5px;text-indent:50px;background:transparent url(dark/icons.png) 0 0 no-repeat;}
#nav-apps-link{background-position:0 -66px;}#nav-apps-link:hover{background-position:-22px -66px;}
@@ -101,15 +103,17 @@ div.jGrowl div.info{background:#1353b1 url("../../../images/icons/48/info.png")
nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkmenu.selected .icon.s22.notify{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAUJcAAFCXAZtv64UAAAHuSURBVCjPbZPbTlNBFIYHLixXRIhEQGNRMUopJAJyAyZ4Z2l8B+XwEBqKtjwOp8oDIAJKIJFUjdFIQCUYrRytdyb0459ht8wG9rrYs9b618y/TsYEH4ZK4qRYYIdDybZOI7TKakIfVhrJ8J2i5IBNyV93/kaaBuv3oV3MgwCTPKGHPkkPA0xRUMBrOgN4AP0o6BseEpF2m3es0qJTFQneyvMhgDsC9tZprnEcGuOPeMcDLUpW3jlLxlDBmJTFY6gLvsVv8tyh9G7U3Z6mwtCuJAoiECSh/w1+8otmTjLqF2KDNsNzRY1bruV0o6rFFtc9S5USh5RRWvAYv4xX9dYPS8ur1oBQC4Y99m2uHriRNda5ErLdU1l3jCI2xdJ3XOYLX6kP2W6K2OF54Et84jN154F31d6ukKOG92pSbcjWLRrbRhVGLTZeOtXqX46LoQSHhJo3jOo3ESrdBQbljIRKNyXUiKHNNSXhTdbZiUzyT/WJ23Zn3BBFy+2u4ZHc1eV2N7EkxAvbbqMRmZOSlbE0g/uajRgl6Iy8r1wpnaFTQ4ji+8XOEsuxYmdDWpJleXJ0+BPdoduL4p5Vavd5IOllmJfiWmSWu6d3pV4jteFWqaAGbLkdKSqtUXXUnN3DSvF8phfy/JfkxfOp9sVb2COz+hY/T0qkwwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMS0wOS0xNlQwOTozOTowMCswMjowMC9Oi90AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTEtMDktMTZUMDk6Mzk6MDArMDI6MDBeEzNhAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==");}
.show{display:block;}
#notifications{width:170px;height:20px;font-size:small;top:-19px;left:4px;position:absolute;}
-#nav-floater{position:fixed;top:20px;right:1%;padding:5px;background:#1d1f1d;color:transparent;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;z-index:100;width:300px;height:60px;}
+#nav-floater{position:fixed;top:20px;right:1%;padding:5px;background:#1d1f1d;color:transparent;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;z-index:100;width:270px;height:60px;}
#nav-buttons{clear:both;list-style:none;padding:0px;margin:0px;height:25px;}#nav-buttons>li{padding:0;display:inline-block;margin:0px -4px 0px 0px;}
.floaterflip{display:block;position:fixed;z-index:110;top:56px;right:19px;width:22px;height:22px;overflow:hidden;margin:0px;background:transparent url(dark/icons.png) -190px -60px no-repeat;}
.search-box{display:inline-block;margin:5px;position:fixed;right:0px;bottom:0px;z-index:100;background:#1d1f1d;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
-#search-text{border:1px solid #eeeecc;background:#2e2f2e;color:#eeeecc;font-size:8pt;margin:8px;width:10em;height:14px;}
+#search-text,#mini-search-text{background:white;color:#2e2f2e;}
+#search-text{border:1px solid #eeeeee;margin:5px 0;}
+#mini-search-text{font-size:8pt;height:14px;width:10em;margin:5px;}
#scrollup{position:fixed;right:5px;bottom:40px;z-index:100;}#scrollup a:hover{text-decoration:none;border:0;}
-#user-menu{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;display:block;width:75%;margin:3px 0 0 0;position:relative;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;background-color:#555753;background-image:url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAIAAwDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMH/8QAIhAAAQMEAgIDAAAAAAAAAAAAAQIDBAAFBhESIQdBMVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIR/9oADAMBAAIRAxEAPwCXiHO8dbsEi35BEhIehNlbUhxhBU82O+G9bKgToD2D+VlmZX9OWZBJuAiMxGlni0w0gJCED4HXv7pSi6eFML//2Q==");background-position:98% center;background-repeat:no-repeat;clear:both;top:4px;left:10px;padding:2px;}#user-menu>a{vertical-align:top;outline:0 none;}
+#user-menu{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;display:block;width:80%;margin:3px 0 0 0;position:relative;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;background-color:#555753;background-image:url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAIAAwDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMH/8QAIhAAAQMEAgIDAAAAAAAAAAAAAQIDBAAFBhESIQdBMVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIR/9oADAMBAAIRAxEAPwCXiHO8dbsEi35BEhIehNlbUhxhBU82O+G9bKgToD2D+VlmZX9OWZBJuAiMxGlni0w0gJCED4HXv7pSi6eFML//2Q==");background-position:98% center;background-repeat:no-repeat;clear:both;top:4px;left:10px;padding:2px;}#user-menu>a{vertical-align:top;outline:0 none;}
#user-menu-label{font-size:small;padding:3px 20px 9px 5px;height:10px;}
-.nav-ajax-update,.nav-ajax-left{width:30px;height:19px;background:transparent url(dark/notifications.png) 0 0 no-repeat;color:#eeeecc;font-weight:bold;font-size:0.8em;padding-top:0.2em;text-align:center;float:left;margin:0 -1px 0 3px;display:block;visibility:hidden;}
+.nav-ajax-update,.nav-ajax-left{width:30px;height:19px;background:transparent url(dark/notifications.png) 0 0 no-repeat;color:#111111;font-weight:bold;font-size:0.8em;padding-top:0.2em;text-align:center;float:left;margin:0 -1px 0 3px;display:block;visibility:hidden;}
.nav-ajax-update.show,.nav-ajax-left.show{visibility:visible;}
#net-update{background-position:0px 0px;}
#mail-update{background-position:-30px 0;}
@@ -118,20 +122,21 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
#intro-update{background-position:-120px 0px;}
#lang-select-icon{cursor:pointer;position:fixed;left:28px;bottom:6px;z-index:10;}
#language-selector{position:fixed;bottom:2px;left:52px;z-index:10;}
-.menu-popup{position:absolute;display:none;width:11em;background:white;color:#2e2f2e;margin:0px;padding:0px;border:3px solid #2e3436;z-index:100000;-moz-box-shadow:5px 5px 5px 0px #111111;-o-box-shadow:5px 5px 5px 0px #111111;-webkit-box-shadow:5px 5px 5px 0px #111111;-ms-box-shadow:5px 5px 5px 0px #111111;box-shadow:5px 5px 5px 0px #111111;}.menu-popup a{display:block;color:#2e2f2e;padding:5px 10px;text-decoration:none;}.menu-popup a:hover{background-color:#b9c1c3;}
+.menu-popup{position:absolute;display:none;background:white;color:#2e2f2e;margin:0px;padding:0px;font-size:small;line-height:1.2;border:3px solid #88a9d2;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;z-index:100000;-moz-box-shadow:5px 5px 5px 0px #111111;-o-box-shadow:5px 5px 5px 0px #111111;-webkit-box-shadow:5px 5px 5px 0px #111111;-ms-box-shadow:5px 5px 5px 0px #111111;box-shadow:5px 5px 5px 0px #111111;}.menu-popup a{display:block;color:#2e2f2e;padding:5px 10px;text-decoration:none;}.menu-popup a:hover{color:#eeeecc;background-color:#88a9d2;}
.menu-popup .menu-sep{border-top:1px solid #4e4f4e;}
.menu-popup li{float:none;overflow:auto;height:auto;display:block;}.menu-popup li img{float:left;width:16px;height:16px;padding-right:5px;}
.menu-popup .empty{padding:5px;text-align:center;color:#9ea8ac;}
.notif-item{font-size:small;}.notif-item a{vertical-align:middle;}
.notif-image{width:32px;height:32px;padding:7px 7px 0px 0px;}
-.notify-seen{background:#bbbbbb;}
+.notify-seen{background:#ddddbb;color:#eeeecc;}
+.notify-unseen{color:#eeeecc;}
#sysmsg_info{position:fixed;bottom:0;-moz-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-o-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-webkit-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-ms-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;padding:10px;background-color:#fcaf3e;border:2px solid #f8911b;border-bottom:0;padding-bottom:50px;z-index:1000;}
#sysmsg{position:fixed;bottom:0;-moz-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-o-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-webkit-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-ms-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;padding:10px;background-color:#fcaf3e;border:2px solid #f8911b;border-bottom:0;padding-bottom:50px;z-index:1000;}
#sysmsg_info br,#sysmsg br{display:block;margin:2px 0px;border-top:1px solid #eeeecc;}
-#asidemain{float:left;font-size:small;margin:20px 0 20px 35px;width:25%;display:inline;}
+#asidemain{float:left;font-size:small;margin:1em;width:25%;display:inline;}
#asideright,#asideleft{display:none;}
.vcard .fn{font-size:1.5em;font-weight:bold;border-bottom:1px solid #638ec4;padding-bottom:3px;}
-.vcard #profile-photo-wrapper{margin:20px;}.vcard #profile-photo-wrapper img{-moz-box-shadow:3px 3px 10px 0 #111111;-o-box-shadow:3px 3px 10px 0 #111111;-webkit-box-shadow:3px 3px 10px 0 #111111;-ms-box-shadow:3px 3px 10px 0 #111111;box-shadow:3px 3px 10px 0 #111111;}
+.vcard #profile-photo-wrapper{margin:20px 0;background-color:#555753;padding:5px;width:175px;height:175px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:3px 3px 10px 0 #111111;-o-box-shadow:3px 3px 10px 0 #111111;-webkit-box-shadow:3px 3px 10px 0 #111111;-ms-box-shadow:3px 3px 10px 0 #111111;box-shadow:3px 3px 10px 0 #111111;}
#asidemain h4{font-size:1.2em;}
#asidemain #viewcontacts{text-align:right;}
#asidemain #contact-block{width:99%;}#asidemain #contact-block .contact-block-content{width:99%;}#asidemain #contact-block .contact-block-content .contact-block-div{float:left;margin:0 5px 5px 0;width:50px;height:50px;padding:3px;position:relative;}
@@ -152,7 +157,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
#profile-jot-text_tbl{margin-bottom:10px;background:#777777;}
#profile-jot-text_ifr{width:99.900002% !important;}
#profile-jot-text_toolbargroup,.mceCenter tr{background:#777777;}
-[id$="jot-text_ifr"]{width:99.900002% !important;color:#2e2f2e;background:#eeeecc;}[id$="jot-text_ifr"] .mceContentBody{color:#2e2f2e;background:#eeeecc;}
+[id$="jot-text_ifr"]{color:#2e2f2e;background:#eeeecc;}[id$="jot-text_ifr"] .mceContentBody{color:#2e2f2e;background:#eeeecc;}
.defaultSkin tr.mceFirst{background:#777777;}
.defaultSkin td.mceFirst,.defaultSkin td.mceLast{background-color:#eeeecc;}
.defaultSkin span.mceIcon,.defaultSkin img.mceIcon,.defaultSkin .mceButtonDisabled .mceIcon{background-color:#eeeecc;}
@@ -165,11 +170,11 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
#profile-jot-net{margin:5px 0;}
#jot-preview-link{margin:0 0 0 10px;border:0;text-decoration:none;float:right;}
.icon-text-preview{margin:0 0 -18px 0;display:block;width:20px;height:20px;background:url(dark/icons.png) no-repeat -128px -40px;border:0;text-decoration:none;float:right;cursor:pointer;}
-#profile-jot-perms{float:right;color:#555753;background-color:#eeeecc;width:20px;height:20px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:3px 3px 5px 0 #111111;-o-box-shadow:3px 3px 5px 0 #111111;-webkit-box-shadow:3px 3px 5px 0 #111111;-ms-box-shadow:3px 3px 5px 0 #111111;box-shadow:3px 3px 5px 0 #111111;border:2px outset #eeeeee;overflow:hidden;margin:0 10px 0 10px;}
+#profile-jot-perms{float:right;color:#555753;width:20px;height:20px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:3px 3px 5px 0 #111111;-o-box-shadow:3px 3px 5px 0 #111111;-webkit-box-shadow:3px 3px 5px 0 #111111;-ms-box-shadow:3px 3px 5px 0 #111111;box-shadow:3px 3px 5px 0 #111111;border:2px outset #555753;overflow:hidden;margin:0 10px 0 10px;}
#profile-jot-plugin-wrapper{width:1px;margin:10px 0 0 0;float:right;}
#profile-jot-submit-wrapper{float:right;width:100%;margin:10px 0 0 0;padding:0;}
#profile-jot-submit{height:auto;background-color:#555753;color:#eeeeee;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:2px outset #2e3436;margin:0;float:right;-moz-text-shadow:1px 1px #111111;-o-text-shadow:1px 1px #111111;-webkit-text-shadow:1px 1px #111111;-ms-text-shadow:1px 1px #111111;text-shadow:1px 1px #111111;width:auto;}#profile-jot-submit:active{-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
-#jot-perms-icon{width:20px;height:22px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;overflow:hidden;}
+#jot-perms-icon{width:22px;height:22px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;overflow:hidden;background:#555753 url("dark/icons.png") -88px -40px;}
#group_allow_wrapper,#group_deny_wrapper,#acl-permit-outer-wrapper,#contact_allow_wrapper,#contact_deny_wrapper,#acl-deny-outer-wrapper{width:47%;}
#group_allow_wrapper,#group_deny_wrapper,#acl-permit-outer-wrapper{float:left;}
#contact_allow_wrapper,#contact_deny_wrapper,#acl-deny-outer-wrapper{float:right;}
@@ -177,19 +182,20 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
#jot-public{background-color:#555555;color:#ff0000;padding:5px;float:left;}
#acl-deny-text{background-color:#555555;color:#eeeecc;padding:5px;float:left;}
#jot-title-desc{color:#cdcdcd;}
-#profile-jot-desc{color:#ff2000;margin:5px 0;}
+#profile-jot-desc{background:#2e2f2e;border:1px solid #eeeecc;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;color:#ff2000;margin:5px 0;}
#jot-title-wrapper{margin-bottom:5px;}
#jot-title-display{font-weight:bold;}
.jothidden{display:none;}
-#jot-preview-content{background-color:#2e302e;color:#eeeecc;border:1px solid #eeeecc;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:5px 0 10px 0px #111111;-o-box-shadow:5px 0 10px 0px #111111;-webkit-box-shadow:5px 0 10px 0px #111111;-ms-box-shadow:5px 0 10px 0px #111111;box-shadow:5px 0 10px 0px #111111;padding:3px 3px 6px 10px;}#jot-preview-content .wall-item-outside-wrapper{border:0;-o-border-radius:0px 0px 0px 0px;-webkit-border-radius:0px 0px 0px 0px;-moz-border-radius:0px 0px 0px 0px;-ms-border-radius:0px 0px 0px 0px;border-radius:0px 0px 0px 0px;-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
-#sectionmain{margin:20px;font-size:0.8em;min-width:475px;width:67%;float:left;display:inline;}
+#jot-preview-content{background-color:#2e3436;color:#eeeecc;border:1px solid #2e2f2e;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:5px 0 10px 0px #111111;-o-box-shadow:5px 0 10px 0px #111111;-webkit-box-shadow:5px 0 10px 0px #111111;-ms-box-shadow:5px 0 10px 0px #111111;box-shadow:5px 0 10px 0px #111111;padding:3px 3px 6px 10px;}#jot-preview-content .wall-item-outside-wrapper{border:0;-o-border-radius:0px 0px 0px 0px;-webkit-border-radius:0px 0px 0px 0px;-moz-border-radius:0px 0px 0px 0px;-ms-border-radius:0px 0px 0px 0px;border-radius:0px 0px 0px 0px;-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
+#sectionmain{margin:1em;font-size:0.8em;min-width:475px;width:69%;float:left;display:inline;}
.tabs{margin:0px;padding:0px;list-style:none;list-style-position:inside;margin:10px 0;}.tabs li{display:inline;font-size:smaller;}
-.tab{border:1px solid #638ec4;padding:4px;}.tab:hover,.tab.active:hover,.tab:active{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;}
-.tab.active{background:#eeeecc;color:#2e2f2e;border:1px solid #638ec4;}.tab.active a{color:#2e2f2e;text-decoration:none;}
+.tab{border:1px solid #638ec4;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.tab:active,.tab:hover{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;}
.tab a{border:0;text-decoration:none;}
+.tab.active{background:#eeeecc;color:#2e2f2e;border:1px solid #638ec4;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.tab.active:hover{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;}
+.tab.active a{color:#2e2f2e;text-decoration:none;}
.wall-item-outside-wrapper{border:1px solid #a9a9a9;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:6px 1px 10px -2px #111111;-o-box-shadow:6px 1px 10px -2px #111111;-webkit-box-shadow:6px 1px 10px -2px #111111;-ms-box-shadow:6px 1px 10px -2px #111111;box-shadow:6px 1px 10px -2px #111111;}.wall-item-outside-wrapper.comment{margin-top:5px;}
.wall-item-content-wrapper{position:relative;padding:0.75em;width:auto;}
-.wall-item-outside-wrapper .wall-item-comment-wrapper{}
+.wall-item-outside-wrapper .wall-item-comment-wrapper{}.wall-item-outside-wrapper .wall-item-comment-wrapper .preview{border:0;-o-border-radius:0px;-webkit-border-radius:0px;-moz-border-radius:0px;-ms-border-radius:0px;border-radius:0px;}
.shiny{background:#2e3436;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
.wall-outside-wrapper .shiny{-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
.heart{color:red;}
@@ -197,7 +203,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
[id^="tread-wrapper"],[class^="tread-wrapper"]{margin:1.2em 0 0 0;padding:0px;}
.wall-item-photo-menu{display:none;}
.wall-item-photo-menu-button{display:none;text-indent:-99999px;background:#555753 url(dark/menu-user-pin.jpg) no-repeat 75px center;position:absolute;overflow:hidden;width:90px;height:20px;top:85px;left:0;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;}
-.wall-item-info{float:left;width:110px;}
+.wall-item-info{float:left;width:7em;position:relative;}
.wall-item-photo-wrapper{width:80px;height:80px;position:relative;padding:5px;background-color:#555753;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
[class^="wall-item-tools"] *{}[class^="wall-item-tools"] *>*{}
.wall-item-tools{float:right;opacity:0.4;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;}.wall-item-tools:hover{opacity:1;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;}
@@ -207,26 +213,27 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
.wall-item-body{margin:15px 10px 10px 0px;text-align:left;overflow-x:auto;}
.wall-item-lock-wrapper{float:right;width:22px;height:22px;margin:0 -5px 0 0;opacity:1;}
.wall-item-dislike,.wall-item-like{clear:left;font-size:0.8em;color:#888b85;margin:5px 0 5px 10.2em;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;opacity:0.5;}.wall-item-dislike:hover,.wall-item-like:hover{opacity:1;}
-.wall-item-author,.wall-item-actions-author{clear:left;float:left;font-size:0.8em;color:#888b85;margin:1em auto 0 0.2em;}
-.wall-item-ago{display:inline;padding-left:10px;}
-.wall-item-location{margin-top:15px;width:100px;overflow:hidden;-moz-text-overflow:ellipsis;-ms-text-verflow:ellipsis;-o-text-overflow:ellipsis;-webkit-text-overflow:ellipsis;text-overflow:ellipsis;}.wall-item-location .icon{float:left;}
+.wall-item-author,.wall-item-actions-author,.wall-item-ago{color:#eeeecc;line-height:1;display:inline-block;font-size:x-small;margin:0.5em auto;font-weight:bold;}
+.comment-edit-preview{width:auto;margin:auto auto auto -2em;}.comment-edit-preview.wall-item-author,.comment-edit-preview.wall-item-actions-author,.comment-edit-preview.wall-item-ago{font-size:smaller;}
+.wall-item-location{margin-top:2em;width:6em;overflow:hidden;-moz-text-overflow:ellipsis;-ms-text-verflow:ellipsis;-o-text-overflow:ellipsis;-webkit-text-overflow:ellipsis;text-overflow:ellipsis;}.wall-item-location .icon{float:left;}
.wall-item-location>a,.wall-item-location .smalltext{margin-left:25px;font-size:0.7em;display:block;}
.wall-item-location>br{display:none;}
.wallwall .wwto{left:5px;margin:0;position:absolute;top:75px;z-index:10001;width:30px;height:30px;}.wallwall .wwto img{width:30px !important;height:30px !important;}
.wallwall .wall-item-photo-end{clear:both;}
.wall-item-arrowphoto-wrapper{position:absolute;left:35px;top:80px;z-index:10002;}
-.wall-item-photo-menu{min-width:92px;border:2px solid #ffffff;border-top:0px;background:#555753;position:absolute;left:-2px;top:101px;display:none;z-index:10003;-o-border-radius:0 5px 5px 5px;-webkit-border-radius:0 5px 5px 5px;-moz-border-radius:0 5px 5px 5px;-ms-border-radius:0 5px 5px 5px;border-radius:0 5px 5px 5px;}.wall-item-photo-menu li a{white-space:nowrap;display:block;padding:5px 2px;color:#eeeeee;}.wall-item-photo-menu li a:hover{color:#555753;background:#eeeeee;}
+.wall-item-photo-menu{min-width:92px;font-size:0.75em;border:2px solid #555753;border-top:0px;background:#555753;position:absolute;left:-2px;top:101px;display:none;z-index:10003;-o-border-radius:0 5px 5px 5px;-webkit-border-radius:0 5px 5px 5px;-moz-border-radius:0 5px 5px 5px;-ms-border-radius:0 5px 5px 5px;border-radius:0 5px 5px 5px;}.wall-item-photo-menu li a{white-space:nowrap;display:block;padding:5px 6px;color:#eeeeee;}.wall-item-photo-menu li a:hover{color:#555753;background:#eeeeee;}
#item-delete-selected{overflow:auto;width:100%;}
-#connect-services-header,#connect-services,#extra-help-header,#extra-help,#postit-header,#postit{margin:5px 0 0 0;}
+#connect-services-header,#extra-help-header{margin:1.5em 0 0 0;}
+#connect-services,#extra-help{margin:0px;padding:0px;list-style:none;list-style-position:inside;margin:1em 0 0 0;}#connect-services li,#extra-help li{display:inline;}
.ccollapse-wrapper{font-size:0.9em;margin-left:5em;}
-.wall-item-outside-wrapper.comment{margin-left:5em;}.wall-item-outside-wrapper.comment .wall-item-photo{width:40px !important;height:40px !important;}
+.hide-comments-outer{font-size:small;}
+.wall-item-outside-wrapper.comment{margin-left:5em;}.wall-item-outside-wrapper.comment .wall-item-info{width:5em;}
+.wall-item-outside-wrapper.comment .wall-item-photo{width:40px !important;height:40px !important;}
.wall-item-outside-wrapper.comment .wall-item-photo-wrapper{width:40px;height:40px;}
-.wall-item-outside-wrapper.comment .wall-item-photo-menu-button{width:50px;top:45px;background-position:35px center;}
-.wall-item-outside-wrapper.comment .wall-item-info{width:60px;}
-.wall-item-outside-wrapper.comment .wall-item-body{margin-left:10px;}
+.wall-item-outside-wrapper.comment .wall-item-photo-menu-button{width:3.35em;top:3.2em;background-position:35px center;}
.wall-item-outside-wrapper.comment .wall-item-author{margin-left:0.2em;}
-.wall-item-outside-wrapper.comment .wall-item-photo-menu{min-width:50px;top:60px;}
-.comment-wwedit-wrapper{}
+.wall-item-outside-wrapper.comment .wall-item-photo-menu{min-width:4.5em;top:5.5em;}
+.comment-wwedit-wrapper{border:1px solid #eeeecc;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin:5px;}
.comment-edit-wrapper{border-top:1px #aaa solid;}
[class^="comment-edit-bb"]{margin:0px;padding:0px;list-style:none;list-style-position:inside;display:none;margin:-40px 0 5px 60px;width:75%;}[class^="comment-edit-bb"]>li{display:inline-block;margin:0 10px 0 0;visibility:none;}
.comment-wwedit-wrapper img,.comment-edit-wrapper img{width:20px;height:20px;}
@@ -239,7 +246,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
.comment-edit-submit{height:22px;background-color:#555753;color:#eeeeee;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:0;}
.wall-item-body code{background-color:#444444;border-bottom:1px dashed #cccccc;border-left:5px solid #cccccc;border-top:1px dashed #cccccc;color:#eeeecc;display:block;overflow-x:auto;padding:5px 0 15px 10px;width:95%;}.wall-item-body code a{color:#adc4e0;}
div[id$="text"]{font-weight:bold;border-bottom:1px solid #cccccc;}
-div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:left;}
+div[id$="wrapper"]{height:100%;}div[id$="wrapper"] br{clear:left;}
.profile-match-wrapper{float:left;margin:0 5px 40px 0;width:120px;height:120px;padding:3px;position:relative;}
.icon.drophide.profile-match-ignore{margin:0 6px 0 -3px;}
[id$="-end"],[class$="-end"]{clear:both;margin:0 0 10px 0;}
@@ -250,27 +257,28 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.photos{height:auto;overflow:auto;}
#photo-top-links{margin-bottom:30px;}
.photo-album-image-wrapper,.photo-top-image-wrapper{float:left;-moz-box-shadow:3px 3px 10px 0 #111111;-o-box-shadow:3px 3px 10px 0 #111111;-webkit-box-shadow:3px 3px 10px 0 #111111;-ms-box-shadow:3px 3px 10px 0 #111111;box-shadow:3px 3px 10px 0 #111111;background-color:#222222;color:#2e2f2e;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding-bottom:30px;position:relative;margin:0 10px 10px 0;}
-#photo-photo{max-width:100%;}#photo-photo img{max-width:100%;}
+#photo-photo{margin:auto auto 5em 20%;}#photo-photo img{max-width:50%;}
.photo-top-image-wrapper a:hover,#photo-photo a:hover,.photo-album-image-wrapper a:hover{border-bottom:0;}
.photo-top-photo,.photo-album-photo{-o-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-ms-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;}
.photo-top-album-name,.caption{position:absolute;bottom:0;padding:0 5px;}
-#photo-photo{position:relative;margin:5px 45%;}
-#photo-prev-link,#photo-next-link{position:absolute;width:50px;height:150px;background:#ffffff center center no-repeat;opacity:0;-webkit-transition:all 0.5s ease-in-out;-moz-transition:all 0.5s ease-in-out;-o-transition:all 0.5s ease-in-out;-ms-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;z-index:10;top:175px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}#photo-prev-link:hover,#photo-next-link:hover{opacity:0.6;-webkit-transition:all 0.5s ease-in-out;-moz-transition:all 0.5s ease-in-out;-o-transition:all 0.5s ease-in-out;-ms-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;}
+#photo-prev-link,#photo-next-link{position:absolute;width:50px;height:200px;background:#ffffff center center no-repeat;opacity:0;-webkit-transition:all 0.5s ease-in-out;-moz-transition:all 0.5s ease-in-out;-o-transition:all 0.5s ease-in-out;-ms-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;z-index:10;top:15em;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}#photo-prev-link:hover,#photo-next-link:hover{opacity:0.6;-webkit-transition:all 0.5s ease-in-out;-moz-transition:all 0.5s ease-in-out;-o-transition:all 0.5s ease-in-out;-ms-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;}
#photo-prev-link .icon,#photo-next-link .icon{display:none;}
-#photo-prev-link{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAALpQTFRF////AAAAQEBAZmZmVVVVSUlJTU1NXV1dVVVVTk5OW1tbWlpaWFhPWFhQU1pTVVVVVlZSVVlRVlZTVFdUVFdUVVdTVFZSVldUVldSVldSVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVhTVVdTVVdTVVdTVVdT3XYY/AAAAD10Uk5TAAEEBQYHCgsMDQ4RHSAlP0FFR1hee3+JnqSqq6ytrq+wsbKztLW2t7y9vr/AwcLDxMXGx8jU1dng7O/3+TmOwVsAAADASURBVCjPddPXEoIwEAXQINh7Q8WKYu+95v9/S0dxZxNy83hgMpvdu0Jox642r25GVxGfys+5540sZV3jyY/lWeVxyDLg7AR/lhXOI+KZZeRFgvGQeMnY9olXScYD4jXnPvHGzNsU4x7xjnGsa+YO8T7NnukRHzgXiY/KNKiUkzqkZ8ivnDoKD/xfBvdbbXM9sH70Xtgf2E/YfzgvOF+YB5gf5cPcAfmsgTy3QP5vYF8akf36XvXIRhZPlPyLWxBvNENWsZXDKukAAAAASUVORK5CYII=");left:22%;}
-#photo-next-link{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAKVQTFRF////gICAQEBAZmZmVVVVSUlJYGBgVVVVTU1NXV1dVVVVWVlZU1hTVlZSVlZTVlZTVVlRVVhSVFdUVlhTVVdTVFZTVVdTVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdT8E3YQQAAADZ0Uk5TAAIEBQYHCAkKCwwUN0FER0hOW2uNjqWqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCxcjT3PP3B0dhfwAAANlJREFUKM910+cSgjAQRtEIomAXu4iIYge7ef9Hs+ZzN4b9eW4mk1kGIaqdU9wQf2Nf5XPSiu4d+Z6jp/n54/KghZ40h5ZymbFQGCCkLg3WKC+MEfYs2AHCrszCBGHLQ5gXpggbFooRwrrEwgxhxUOcE5w5wtJiYYHQZjt0EuUhX3r19vU7Y++ozgeMD7i/buYhYTcDj8gz3RQ8prwHB/aPyzvwhPLWzBtwSLi0Bk8pr8BR0cgzwiIycw0cUxZ9xXOH7VZ9vAVn4X840Vh4F9Pp1w/gZ92mpesDuLpM+1blc68AAAAASUVORK5CYII=");left:44%;}
+#photo-prev-link{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAALpQTFRF////AAAAQEBAZmZmVVVVSUlJTU1NXV1dVVVVTk5OW1tbWlpaWFhPWFhQU1pTVVVVVlZSVVlRVlZTVFdUVFdUVVdTVFZSVldUVldSVldSVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVhTVVdTVVdTVVdTVVdT3XYY/AAAAD10Uk5TAAEEBQYHCgsMDQ4RHSAlP0FFR1hee3+JnqSqq6ytrq+wsbKztLW2t7y9vr/AwcLDxMXGx8jU1dng7O/3+TmOwVsAAADASURBVCjPddPXEoIwEAXQINh7Q8WKYu+95v9/S0dxZxNy83hgMpvdu0Jox642r25GVxGfys+5540sZV3jyY/lWeVxyDLg7AR/lhXOI+KZZeRFgvGQeMnY9olXScYD4jXnPvHGzNsU4x7xjnGsa+YO8T7NnukRHzgXiY/KNKiUkzqkZ8ivnDoKD/xfBvdbbXM9sH70Xtgf2E/YfzgvOF+YB5gf5cPcAfmsgTy3QP5vYF8akf36XvXIRhZPlPyLWxBvNENWsZXDKukAAAAASUVORK5CYII=");left:5%;}
+#photo-next-link{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAKVQTFRF////gICAQEBAZmZmVVVVSUlJYGBgVVVVTU1NXV1dVVVVWVlZU1hTVlZSVlZTVlZTVVlRVVhSVFdUVlhTVVdTVFZTVVdTVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdT8E3YQQAAADZ0Uk5TAAIEBQYHCAkKCwwUN0FER0hOW2uNjqWqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCxcjT3PP3B0dhfwAAANlJREFUKM910+cSgjAQRtEIomAXu4iIYge7ef9Hs+ZzN4b9eW4mk1kGIaqdU9wQf2Nf5XPSiu4d+Z6jp/n54/KghZ40h5ZymbFQGCCkLg3WKC+MEfYs2AHCrszCBGHLQ5gXpggbFooRwrrEwgxhxUOcE5w5wtJiYYHQZjt0EuUhX3r19vU7Y++ozgeMD7i/buYhYTcDj8gz3RQ8prwHB/aPyzvwhPLWzBtwSLi0Bk8pr8BR0cgzwiIycw0cUxZ9xXOH7VZ9vAVn4X840Vh4F9Pp1w/gZ92mpesDuLpM+1blc68AAAAASUVORK5CYII=");left:50%;}
#photo-prev-link a,#photo-next-link a{display:block;width:100%;height:100%;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;overflow:hidden;text-indent:-900000px;}
#photos-upload-spacer,#photos-upload-new-wrapper,#photos-upload-exist-wrapper{margin-bottom:1em;}
#photos-upload-existing-album-text,#photos-upload-newalbum-div{background-color:#555753;color:#eeeeee;padding:1px;}
#photos-upload-album-select,#photos-upload-newalbum{width:99%;}
#photos-upload-perms-menu{text-align:right;}
-#photo-edit-caption,#photo-edit-newtag,#photo-edit-albumname{float:left;margin-bottom:25px;}
#photo-edit-link-wrap{margin-bottom:15px;}
-#photo-edit-caption,#photo-edit-newtag{width:100%;}
-#photo-like-div{margin-bottom:25px;}
-#photo-edit-delete-button{margin-left:200px;}
+#photo-edit-perms{width:auto;}
+#photo-edit-rotate-label{width:38%;display:inline-block;font-size:small;margin:0 10px 1em 0;border:1px solid #2e2f2e;padding:3px 5px;background:#eeeecc;color:#111111;-moz-box-shadow:3px 3px 5px 0px #111111;-o-box-shadow:3px 3px 5px 0px #111111;-webkit-box-shadow:3px 3px 5px 0px #111111;-ms-box-shadow:3px 3px 5px 0px #111111;box-shadow:3px 3px 5px 0px #111111;}
+#photo-like-div{float:left;margin:auto 0 0;width:2em;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #eeeecc;}
+.wall-item-like-buttons>*{display:inline;}
+#photo-edit-delete-button{margin:auto auto auto 1em;}
#photo-edit-end{margin-bottom:35px;}
#photo-caption{font-size:110%;font-weight:bold;margin-top:15px;margin-bottom:15px;}
+#wall-photo-container{margin:0 auto 1em 4em;width:90%;}
.prvmail-text{width:100%;}
#prvmail-subject{width:100%;color:#2e2f2e;background:#eeeecc;}
#prvmail-submit-wrapper{margin-top:10px;}
@@ -313,17 +321,16 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
#contact-edit-last-update-text{margin-bottom:15px;}
#contact-edit-last-updated{font-weight:bold;}
#contact-edit-poll-text{display:inline;}
-#contact-edit-info_tbl,#contact-edit-info_parent,.mceLayout{width:100%;}
#contact-edit-end{clear:both;margin-bottom:65px;}
.contact-photo-menu-button{position:absolute;background:url("dark/photo-menu.jpg") top left no-repeat transparent;margin:0px;padding:0px;width:16px;height:16px;top:64px;left:0px;overflow:hidden;text-indent:40px;display:none;}
-.contact-photo-menu{width:auto;border:2px solid #444444;background:#2e2f2e;color:#eeeecc;position:absolute;left:0px;top:90px;display:none;z-index:10000;}.contact-photo-menu li a{display:block;padding:2px;}.contact-photo-menu li a:hover{color:white;background:#3465A4;text-decoration:none;}
+.contact-photo-menu{width:auto;border:2px solid #88a9d2;background:#2e2f2e;color:#eeeecc;position:absolute;font-size:smaller;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;left:0px;top:90px;display:none;z-index:10000;}.contact-photo-menu li a{display:block;padding:4px;color:#88a9d2;background:#eeeecc;line-height:1;}.contact-photo-menu li a:hover{background:#88a9d2;color:#eeeecc;text-decoration:none;}
#id_openid_url{background:url(dark/login-bg.gif) no-repeat;background-position:0 50%;padding-left:18px;}
#settings-default-perms{margin-bottom:20px;}
#register-form div,#profile-edit-form div{clear:both;}
.settings-block label{clear:left;}
.settings-block input{margin:10px 5px;}
-#register-form label,#profile-edit-form label{width:300px;float:left;}
-#register-form span,#profile-edit-form span{color:#555753;display:block;margin-bottom:20px;}
+#register-form label,#profile-edit-form label{width:23em;}
+#register-form span,#profile-edit-form span{color:#555753;display:inline-block;margin-bottom:20px;}
#profile-edit-marital-label span{margin:-4px;}
.settings-submit-wrapper,.profile-edit-submit-wrapper{margin:0 0 30px;}
.profile-edit-side-div{display:none;}
@@ -385,20 +392,22 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.fc-state-highlight{background:#eeeecc;color:#2e2f2e;}
.directory-item{float:left;margin:0 5px 4px 0;padding:3px;width:180px;height:250px;position:relative;}
#group-sidebar{margin-bottom:10px;}
-.group-selected,.nets-selected,.fileas-selected{padding:3px;color:#2e2f2e;background:#eeeecc;border:1px solid #88a9d2;}
-.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{padding:3px;color:#88a9d2;background:#2e2f2e;border:1px solid #88a9d2;}
+.categories-selected,.group-selected,.nets-selected,.fileas-selected{color:#2e2f2e;background:#eeeecc;color:#2e2f2e;border:1px solid #638ec4;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.categories-selected:hover,.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;}
+.categories-selected a,.group-selected a,.nets-selected a,.fileas-selected a{color:#2e2f2e;text-decoration:none;}
.groupsideedit{margin-right:10px;}
#sidebar-group-ul{padding-left:0;}
#sidebar-group-list{margin:0 0 5px 0;}#sidebar-group-list li{margin-top:10px;}
#sidebar-group-list .icon{display:inline-block;width:12px;height:12px;}
-.sidebar-group-element{padding:3px;}.sidebar-group-element:hover{color:#2e2f2e;background:#88a9d2;font-weight:bold;padding:3px;}
+.sidebar-group-element{border:1px solid #638ec4;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.sidebar-group-element:active,.sidebar-group-element:hover{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;}
+.sidebar-group-element a{border:0;text-decoration:none;}
#sidebar-new-group{margin:auto;display:inline-block;color:#eeeeee;text-decoration:none;text-align:center;}
#peoplefind-sidebar form{margin-bottom:10px;}
#sidebar-new-group:hover{}
#sidebar-new-group:active{position:relative;top:1px;}
-#side-peoplefind-url{background-color:#2e2f2e;color:#eeeecc;border:1px solid #999999;margin-right:3px;width:75%;}#side-peoplefind-url:hover,#side-peoplefind-url:focus{background-color:#eeeeee;color:#222222;border:1px solid #333333;}
-.nets-ul{margin:0px;padding:0px;list-style:none;list-style-position:inside;}.nets-ul li{margin:10px 0 0;}
-.nets-link,.nets-all{margin-left:0px;}
+#side-peoplefind-url{border:1px solid #999999;margin-right:3px;width:75%;}
+.categories-ul,.nets-ul{margin:0px;padding:0px;list-style:none;list-style-position:inside;}.categories-ul li,.nets-ul li{margin:10px 0 0;}
+.categories-link,.nets-link,.nets-all{border:1px solid #638ec4;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin-left:0px;}.categories-link:active,.nets-link:active,.nets-all:active,.categories-link:hover,.nets-link:hover,.nets-all:hover{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;}
+.categories-link a,.nets-link a,.nets-all a{border:0;text-decoration:none;}
#netsearch-box{margin:20px 0px 30px;width:135px;}#netsearch-box #search-submit{margin:5px 5px 0px 0px;}
#pending-update{float:right;color:white;font-weight:bold;background-color:red;padding:0 0.3em;}
.admin.linklist{border:0;padding:0;}
@@ -413,8 +422,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
#adminpage .toggleplugin{float:left;margin-right:1em;}
#adminpage table{width:100%;border-bottom:1px solid #111111;margin:5px 0;}#adminpage table th{font-weight:bold;text-align:left;}
#adminpage table td{padding:5px;vertical-align:middle;}
-#adminpage table#users{padding:5px;}
-#adminpage table#users img{width:16px;height:16px;}
+#adminpage table#users{padding:5px;}#adminpage table#users img{width:16px;height:16px;}
#adminpage table#users a{color:#eeeecc;text-decoration:underline;}
#adminpage td .icon{float:left;}
#adminpage .selectall{text-align:right;}
@@ -431,7 +439,9 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.field.radio .field_help{margin-left:297px;}
.popup{width:100%;height:100%;top:0px;left:0px;position:absolute;display:none;}.popup .background{background-color:#111111;opacity:0.5;width:100%;height:100%;position:absolute;top:0px;left:0px;}
.popup .panel{top:25%;left:25%;width:50%;height:50%;padding:1em;position:absolute;border:4px solid #000000;background-color:white;}
-#panel{z-index:100;}
+#panel{position:absolute;font-size:small;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #eeeeee;background-color:#2e302e;color:#eeeecc;padding:1em;z-index:100;}
+.pager{margin-top:60px;display:block;clear:both;text-align:center;font-size:small;font-weight:bold;}.pager span{padding:4px;margin:4px;}
+.pager_current{background-color:#88a9d2;color:#2e2f2e;}
.grey,.gray{color:gray;}
.orange{color:orange;}
.red{color:red;}
@@ -442,8 +452,8 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.oauthapp{height:auto;overflow:auto;border-bottom:2px solid #cccccc;padding-bottom:1em;margin-bottom:1em;}.oauthapp img{float:left;width:48px;height:48px;margin:10px;}.oauthapp img.noicon{background-image:url("../../../images/icons/48/plugin.png");background-position:center center;background-repeat:no-repeat;}
.oauthapp a{float:left;}
.iconspacer{display:block;width:16px;height:16px;}
-.icon{display:block;width:20px;height:20px;background:url(dark/icons.png) no-repeat;border:0;text-decoration:none;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.icon:hover{border:0;text-decoration:none;}
-.editicon{display:inline-block;width:21px;height:21px;background:url(dark/editicons.png) no-repeat;border:0;text-decoration:none;}
+.icon{display:block;width:20px;height:20px;background:transparent url("dark/icons.png") no-repeat;border:0;text-decoration:none;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.icon:hover{border:0;text-decoration:none;}
+.editicon{display:inline-block;width:21px;height:21px;background:url("dark/editicons.png") no-repeat;border:0;text-decoration:none;}
.shadow{-moz-box-shadow:2px 2px 5px 2px #111111;-o-box-shadow:2px 2px 5px 2px #111111;-webkit-box-shadow:2px 2px 5px 2px #111111;-ms-box-shadow:2px 2px 5px 2px #111111;box-shadow:2px 2px 5px 2px #111111;}.shadow:active,.shadow:focus,.shadow:hover{-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
.editicon:hover{border:0;}
.boldbb{background-position:0px 0px;}.boldbb:hover{background-position:-22px 0px;}
@@ -507,9 +517,10 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.type-unkn{background-position:-80px 0;}
.cc-license{margin-top:100px;font-size:0.7em;}
footer{display:block;clear:both;}
+#sectionfooter{margin:1em 0 1em 0;}
#profile-jot-text{height:20px;color:#eeeecc;background:#2e2f2e;border:1px solid #eeeecc;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;width:99.5%;}
#photo-edit-perms-select,#photos-upload-permissions-wrapper,#profile-jot-acl-wrapper{display:block !important;background:#2e2f2e;color:#eeeecc;}
-#profile-jot-acl-wrapper{margin:0 10px;border:1px solid #555753;border-top:0;}
+#profile-jot-acl-wrapper{margin:0 10px;border:1px solid #555753;border-top:0;font-size:small;}
#acl-wrapper{width:660px;margin:0 auto;}
#acl-search{float:right;background:#ffffff url("../../../images/search_18.png") no-repeat right center;padding-right:20px;margin:6px;color:#111111;}
#acl-showall{float:left;display:block;width:auto;height:18px;background:#eeeecc url("../../../images/show_all_off.png") 8px 8px no-repeat;padding:7px 10px 7px 30px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;color:#999999;margin:5px 0;}#acl-showall.selected{color:black;background:#ff9900 url(../../../images/show_all_on.png) 8px 8px no-repeat;}
diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less
index 96c92947f..c15706c36 100644
--- a/view/theme/dispy/dark/style.less
+++ b/view/theme/dispy/dark/style.less
@@ -90,6 +90,9 @@ tr:nth-child(even) {
//outline-style Sets the style of an outline dotted,dashed,solid,double,groove,ridge,inset,outset,inherit
//outline-width Sets the width of an outline thin,medium,thick,length,inherit
:focus {
+ outline: none;
+}
+a:focus {
outline: invert, dashed, thin;
}
[disabled="disabled"] {
@@ -181,24 +184,31 @@ blockquote {
.borders(1px, solid, darken(@main_alt_colour, 33%));
.rounded_corners;
}
-label {
+.label () {
width: 38%;
display: inline-block;
font-size: small;
margin: 0 10px 1em 0;
.borders(1px, solid, @bg_colour);
- padding: 5px;
+ padding: 3px 5px;
background: @main_colour;
color: darken(@main_alt_colour, 86.5%);
.box_shadow(3px, 3px, 5px);
}
+label {
+ .label;
+}
input {
.box(250px, 25px);
.borders(1px, solid, darken(@main_alt_colour, 33.5%));
+ width: 17em;
&[type="checkbox"],
&[type="radio"] {
- margin: 0;
.box(15px, 15px);
+ margin: 0;
+ }
+ &[type="radio"] {
+ margin: 5px 0;
}
&[type="submit"],
&[type="button"] {
@@ -260,30 +270,6 @@ h6 {
.smalltext {
font-size: 0.7em;
}
-#panel {
- position: absolute;
- .rounded_corners;
- .borders(1px, solid, @main_alt_colour);
- background-color: @bg_alt_colour;
- color: @main_colour;
- padding: 1em;
-}
-.pager {
- margin-top: 60px;
- display: block;
- clear: both;
- text-align: center;
- font-size: small;
- font-weight: bold;
- span {
- padding: 4px;
- margin: 4px;
- }
-}
-.pager_current {
- background-color: @link_colour;
- color: @bg_colour;
-}
/**
@@ -301,10 +287,35 @@ h6 {
.box(100%, 100%);
margin: 0 auto;
}
+.button {
+ // .box(25%, auto);
+ // background: @menu_bg_colour;
+ color: @main_colour;
+ // .borders(2px, outset, darken(@menu_bg_colour, 20%));
+ .rounded_corners;
+ padding: 5px;
+ // font-size: smaller;
+ cursor: pointer;
+ // &.active {
+ // .box_shadow(4px, 4px, 7px);
+ // }
+ a {
+ color: @main_colour;
+ // font-size: smaller;
+ font-weight: bold;
+ }
+}
+#profile-listing-desc {
+ a {
+ color: @main_colour;
+ font-weight: bold;
+ }
+}
[class$="-desc"],
[id$="-desc"] {
- color: @bg_colour;
- background: @main_colour;
+ color: @main_colour;
+ background: @bg_colour;
+ .borders(2px, outset, @dk_main_colour);
.rounded_corners;
// .box_shadow(3px, 3px, 5px);
margin: 3px 10px 7px 0;
@@ -345,6 +356,11 @@ h6 {
font-style: italic;
font-size: smaller;
}
+.like-rotator {
+ vertical-align: middle;
+ text-align: center;
+ margin: 1px;
+}
/**
@@ -448,9 +464,11 @@ ul#user-menu-popup {
a {
display: block;
padding: 5px;
+ color: @main_alt_colour;
+ background-color: @menu_bg_colour;
&:hover {
- color: @main_colour;
- background-color: @bg_alt_colour;
+ color: @bg_colour;
+ background-color: @main_alt_colour;
}
&.nav-sep {
border-top: 1px solid @bg_alt_colour; } } }
@@ -500,7 +518,8 @@ nav .nav-link {
background-position: -44px -190px;
}
}
-#nav-login-link, #nav-logout-link {
+#nav-login-link,
+#nav-logout-link {
background-position: 0 -88px;
&:hover {
background-position: -22px -88px;
@@ -567,6 +586,9 @@ div.jGrowl div {
padding-left: 58px;
margin-top: 50px;
}
+ // &.jGrowl-message {
+
+ // }
}
#nav-notifications-menu {
margin: 30px 0 0 -20px;
@@ -617,7 +639,7 @@ nav #nav-notifications-linkmenu {
color: transparent;
.rounded_corners;
z-index: 100;
- .box(300px, 60px);
+ .box(270px, 60px);
}
#nav-buttons {
clear: both;
@@ -652,13 +674,20 @@ nav #nav-notifications-linkmenu {
background: @dk_bg_colour;
.rounded_corners;
}
+#search-text,
+#mini-search-text {
+ background: white;
+ color: @bg_colour;
+}
#search-text {
- .borders;
- background: @bg_colour;
- color: @main_colour;
+ .borders(1px, solid, @main_alt_colour);
+ margin: 5px 0;
+}
+#mini-search-text {
font-size: 8pt;
- margin: 8px;
- .box(10em, 14px);
+ height: 14px;
+ width: 10em;
+ margin: 5px;
}
#scrollup {
position: fixed;
@@ -673,7 +702,7 @@ nav #nav-notifications-linkmenu {
#user-menu {
.box_shadow(5px, 0, 10px, 0);
display: block;
- width: 75%;
+ width: 80%;
margin: 3px 0 0 0;
position: relative;
.rounded_corners;
@@ -699,7 +728,7 @@ nav #nav-notifications-linkmenu {
.nav-ajax-left {
.box(30px, 19px);
background: transparent url(dark/notifications.png) 0 0 no-repeat;
- color: @main_colour;
+ color: @shadow_colour;
font-weight: bold;
font-size: 0.8em;
padding-top: 0.2em;
@@ -744,12 +773,15 @@ nav #nav-notifications-linkmenu {
.menu-popup {
position: absolute;
display: none;
- width: 11em;
+ // width: 11em;
background: white;
color: @bg_colour;
margin: 0px;
padding: 0px;
- .borders(3px, solid, @shiny_colour);
+ font-size: small;
+ line-height: 1.2;
+ .borders(3px, solid, @link_colour);
+ .rounded_corners;
z-index: 100000;
.box_shadow;
a {
@@ -758,7 +790,8 @@ nav #nav-notifications-linkmenu {
padding: 5px 10px;
text-decoration: none;
&:hover {
- background-color: lighten(@shiny_colour, 55%);
+ color: @main_colour;
+ background-color: @link_colour;
}
}
.menu-sep {
@@ -792,7 +825,11 @@ nav #nav-notifications-linkmenu {
padding: 7px 7px 0px 0px;
}
.notify-seen {
- background: darken(@main_alt_colour, 20%);
+ background: @disabled_colour;
+ color: @main_colour;
+}
+.notify-unseen {
+ color: @main_colour;
}
@@ -835,7 +872,7 @@ nav #nav-notifications-linkmenu {
#asidemain {
float: left;
font-size: small;
- margin: 20px 0 20px 35px;
+ margin: 1em;
width: 25%;
display: inline;
}
@@ -851,10 +888,12 @@ nav #nav-notifications-linkmenu {
padding-bottom: 3px;
}
#profile-photo-wrapper {
- margin: 20px;
- img {
- .box_shadow(3px, 3px, 10px, 0);
- }
+ margin: 20px 0;
+ background-color: @menu_bg_colour;
+ padding: 5px;
+ .box(175px, 175px);
+ .rounded_corners;
+ .box_shadow(3px, 3px, 10px, 0);
}
}
#asidemain {
@@ -1000,7 +1039,7 @@ nav #nav-notifications-linkmenu {
background: darken(@main_alt_colour, 46.8%);
}
[id$="jot-text_ifr"] {
- width: 99.900002% !important;
+ // width: 99.900002% !important;
color: @bg_colour;
background: @main_colour;
.mceContentBody {
@@ -1078,11 +1117,10 @@ nav #nav-notifications-linkmenu {
#profile-jot-perms {
float: right;
color: @menu_bg_colour;
- background-color: @main_colour;
.box(20px, 20px);
.rounded_corners;
.box_shadow(3px, 3px, 5px, 0);
- .borders(2px, outset, @main_alt_colour);
+ .borders(2px, outset, @menu_bg_colour);
overflow: hidden;
margin: 0 10px 0 10px;
}
@@ -1112,9 +1150,10 @@ nav #nav-notifications-linkmenu {
}
}
#jot-perms-icon {
- .box(20px, 22px);
+ .box(22px, 22px);
.rounded_corners;
overflow: hidden;
+ background: @menu_bg_colour url("dark/icons.png") -88px -40px;
}
#group_allow_wrapper,
#group_deny_wrapper,
@@ -1156,6 +1195,9 @@ nav #nav-notifications-linkmenu {
color: darken(@main_alt_colour, 13%);
}
#profile-jot-desc {
+ background: @bg_colour;
+ .borders;
+ .rounded_corners;
color: @red_orange;
margin: 5px 0;
}
@@ -1169,9 +1211,9 @@ nav #nav-notifications-linkmenu {
display: none;
}
#jot-preview-content {
- background-color: @bg_alt_colour;
+ background-color: @shiny_colour;
color: @main_colour;
- .borders(1px, solid, @main_colour);
+ .borders(1px, solid, @bg_colour);
.rounded_corners;
.box_shadow(5px, 0, 10px);
padding: 3px 3px 6px 10px;
@@ -1187,10 +1229,10 @@ nav #nav-notifications-linkmenu {
* section
*/
#sectionmain {
- margin: 20px;
+ margin: 1em;
font-size: 0.8em;
min-width: 475px;
- width: 67%;
+ width: 69%;
float: left;
display: inline;
}
@@ -1207,30 +1249,45 @@ nav #nav-notifications-linkmenu {
font-size: smaller;
}
}
-.tab {
+.multibutton () {
.borders(1px, solid, @hover_colour);
padding: 4px;
- &:hover,
- &.active:hover,
- &:active {
+ .rounded_corners;
+ &:active,
+ &:hover {
background: @shiny_colour;
color: @main_colour;
.borders(1px, solid, @hover_colour);
}
- &.active {
- background: @main_colour;
- color: @bg_colour;
+ a {
+ border: 0;
+ text-decoration: none;
+ }
+}
+.multibutton_active () {
+ background: @main_colour;
+ color: @bg_colour;
+ .borders(1px, solid, @hover_colour);
+ padding: 4px;
+ .rounded_corners;
+ &:hover {
+ background: @shiny_colour;
+ color: @main_colour;
.borders(1px, solid, @hover_colour);
- a {
- color: @bg_colour;
- text-decoration: none;
- }
}
a {
- border: 0;
+ color: @bg_colour;
text-decoration: none;
}
}
+.tab {
+ .multibutton;
+}
+.tab {
+ &.active {
+ .multibutton_active;
+ }
+}
/**
@@ -1251,6 +1308,10 @@ nav #nav-notifications-linkmenu {
}
.wall-item-outside-wrapper .wall-item-comment-wrapper {
/*margin-left: 90px;*/
+ .preview {
+ border: 0;
+ .rounded_corners(0px);
+ }
}
.shiny {
background: @shiny_colour;
@@ -1287,7 +1348,8 @@ nav #nav-notifications-linkmenu {
}
.wall-item-info {
float: left;
- width: 110px;
+ width: 7em;
+ position: relative;
}
.wall-item-photo-wrapper {
.box(80px, 80px);
@@ -1352,26 +1414,34 @@ nav #nav-notifications-linkmenu {
}
}
.wall-item-author,
-.wall-item-actions-author {
- clear: left;
- float: left;
- font-size: 0.8em;
- color: lighten(@menu_bg_colour, 20%);
- margin: 1em auto 0 0.2em;
-}
+.wall-item-actions-author,
.wall-item-ago {
- display: inline;
- padding-left: 10px;
+ color: @main_colour;
+ line-height: 1;
+ display: inline-block;
+ font-size: x-small;
+ margin: 0.5em auto;
+ font-weight: bold;
+}
+.comment-edit-preview {
+ width: auto;
+ margin: auto auto auto -2em;
+ &.wall-item-author,
+ &.wall-item-actions-author,
+ &.wall-item-ago {
+ font-size: smaller;
+ }
}
.wall-item-location {
- margin-top: 15px;
- width: 100px;
+ margin-top: 2em;
+ width: 6em;
overflow: hidden;
.text_overflow;
.icon {
float: left;
}
- > a, .smalltext {
+ > a,
+ .smalltext {
margin-left: 25px;
font-size: 0.7em;
display: block;
@@ -1405,7 +1475,8 @@ nav #nav-notifications-linkmenu {
}
.wall-item-photo-menu {
min-width: 92px;
- .borders(2px, solid, white);
+ font-size: 0.75em;
+ .borders(2px, solid, @menu_bg_colour);
border-top: 0px;
background: @menu_bg_colour;
position: absolute;
@@ -1417,7 +1488,7 @@ nav #nav-notifications-linkmenu {
li a {
white-space: nowrap;
display: block;
- padding: 5px 2px;
+ padding: 5px 6px;
color: @main_alt_colour;
&:hover {
color: @menu_bg_colour;
@@ -1430,12 +1501,16 @@ nav #nav-notifications-linkmenu {
width: 100%;
}
#connect-services-header,
+#extra-help-header {
+ margin: 1.5em 0 0 0;
+}
#connect-services,
-#extra-help-header,
-#extra-help,
-#postit-header,
-#postit {
- margin: 5px 0 0 0;
+#extra-help {
+ .list_reset;
+ margin: 1em 0 0 0;
+ li {
+ display: inline;
+ }
}
@@ -1446,8 +1521,14 @@ nav #nav-notifications-linkmenu {
font-size: 0.9em;
margin-left: 5em;
}
+.hide-comments-outer {
+ font-size: small;
+}
.wall-item-outside-wrapper.comment {
margin-left: 5em;
+ .wall-item-info {
+ width: 5em;
+ }
.wall-item-photo {
width: 40px !important;
height: 40px !important;
@@ -1456,26 +1537,22 @@ nav #nav-notifications-linkmenu {
.box(40px, 40px);
}
.wall-item-photo-menu-button {
- width: 50px;
- top: 45px;
+ width: 3.35em;
+ top: 3.2em;
background-position: 35px center;
}
- .wall-item-info {
- width: 60px;
- }
- .wall-item-body {
- margin-left: 10px;
- }
.wall-item-author {
margin-left: 0.2em;
}
.wall-item-photo-menu {
- min-width: 50px;
- top: 60px;
+ min-width: 4.5em;
+ top: 5.5em;
}
}
.comment-wwedit-wrapper {
- /*margin: 30px 0px 0px 80px;*/
+ .borders(1px, solid, @main_colour);
+ .rounded_corners;
+ margin: 5px;
}
.comment-edit-wrapper {
border-top: 1px #aaa solid;
@@ -1565,7 +1642,6 @@ div {
}
&[id$="wrapper"] {
height: 100%;
- margin-bottom: 1em;
br {
clear: left;
}
@@ -1626,9 +1702,9 @@ div {
margin: 0 10px 10px 0;
}
#photo-photo {
- max-width: 100%;
+ margin: auto auto 5em 20%;
img {
- max-width: 100%;
+ max-width: 50%;
}
}
.photo-top-image-wrapper a:hover,
@@ -1636,7 +1712,8 @@ div {
.photo-album-image-wrapper a:hover {
border-bottom: 0;
}
-.photo-top-photo, .photo-album-photo {
+.photo-top-photo,
+.photo-album-photo {
.rounded_corners(5px 5px 0 0);
}
.photo-top-album-name,
@@ -1645,21 +1722,16 @@ div {
bottom: 0;
padding: 0 5px;
}
-#photo-photo {
- position: relative;
- // float: left;
- margin: 5px 45%;
-}
#photo-prev-link,
#photo-next-link {
position: absolute;
// .box(30%, 100%);
- .box(50px, 150px);
+ .box(50px, 200px);
background: white center center no-repeat;
opacity: 0;
.transition(all, 0.5s);
z-index: 10;
- top: 175px;
+ top: 15em;
.rounded_corners;
&:hover {
opacity: 0.6;
@@ -1672,12 +1744,12 @@ div {
#photo-prev-link {
// background-image: url(dark/prev.png);
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAALpQTFRF////AAAAQEBAZmZmVVVVSUlJTU1NXV1dVVVVTk5OW1tbWlpaWFhPWFhQU1pTVVVVVlZSVVlRVlZTVFdUVFdUVVdTVFZSVldUVldSVldSVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVhTVVdTVVdTVVdTVVdT3XYY/AAAAD10Uk5TAAEEBQYHCgsMDQ4RHSAlP0FFR1hee3+JnqSqq6ytrq+wsbKztLW2t7y9vr/AwcLDxMXGx8jU1dng7O/3+TmOwVsAAADASURBVCjPddPXEoIwEAXQINh7Q8WKYu+95v9/S0dxZxNy83hgMpvdu0Jox642r25GVxGfys+5540sZV3jyY/lWeVxyDLg7AR/lhXOI+KZZeRFgvGQeMnY9olXScYD4jXnPvHGzNsU4x7xjnGsa+YO8T7NnukRHzgXiY/KNKiUkzqkZ8ivnDoKD/xfBvdbbXM9sH70Xtgf2E/YfzgvOF+YB5gf5cPcAfmsgTy3QP5vYF8akf36XvXIRhZPlPyLWxBvNENWsZXDKukAAAAASUVORK5CYII=");
- left: 22%;
+ left: 5%;
}
#photo-next-link {
// background-image: url(dark/next.png);
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAKVQTFRF////gICAQEBAZmZmVVVVSUlJYGBgVVVVTU1NXV1dVVVVWVlZU1hTVlZSVlZTVlZTVVlRVVhSVFdUVlhTVVdTVFZTVVdTVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdT8E3YQQAAADZ0Uk5TAAIEBQYHCAkKCwwUN0FER0hOW2uNjqWqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCxcjT3PP3B0dhfwAAANlJREFUKM910+cSgjAQRtEIomAXu4iIYge7ef9Hs+ZzN4b9eW4mk1kGIaqdU9wQf2Nf5XPSiu4d+Z6jp/n54/KghZ40h5ZymbFQGCCkLg3WKC+MEfYs2AHCrszCBGHLQ5gXpggbFooRwrrEwgxhxUOcE5w5wtJiYYHQZjt0EuUhX3r19vU7Y++ozgeMD7i/buYhYTcDj8gz3RQ8prwHB/aPyzvwhPLWzBtwSLi0Bk8pr8BR0cgzwiIycw0cUxZ9xXOH7VZ9vAVn4X840Vh4F9Pp1w/gZ92mpesDuLpM+1blc68AAAAASUVORK5CYII=");
- left: 44%;
+ left: 50%;
}
#photo-prev-link a,
#photo-next-link a {
@@ -1708,21 +1780,35 @@ div {
#photo-edit-caption,
#photo-edit-newtag,
#photo-edit-albumname {
- float: left;
- margin-bottom: 25px;
+
}
#photo-edit-link-wrap {
margin-bottom: 15px;
}
#photo-edit-caption,
#photo-edit-newtag {
- width: 100%;
+
+}
+#photo-edit-perms {
+ width: auto;
+}
+#photo-edit-rotate-label {
+ .label;
}
#photo-like-div {
- margin-bottom: 25px;
+ float: left;
+ margin: auto 0 0;
+ width: 2em;
+ .rounded_corners;
+ .borders;
+}
+.wall-item-like-buttons {
+ > * {
+ display: inline;
+ }
}
#photo-edit-delete-button {
- margin-left: 200px;
+ margin: auto auto auto 1em;
}
#photo-edit-end {
margin-bottom: 35px;
@@ -1733,6 +1819,10 @@ div {
margin-top: 15px;
margin-bottom: 15px;
}
+#wall-photo-container {
+ margin: 0 auto 1em 4em;
+ width: 90%;
+}
/**
@@ -1903,11 +1993,6 @@ div {
#contact-edit-poll-text {
display: inline;
}
-#contact-edit-info_tbl,
-#contact-edit-info_parent,
-.mceLayout {
- width: 100%;
-}
#contact-edit-end {
clear: both;
margin-bottom: 65px;
@@ -1926,20 +2011,25 @@ div {
}
.contact-photo-menu {
width: auto;
- .borders(2px, solid, darken(@main_alt_colour, 66.5%));
+ .borders(2px, solid, @link_colour);
background: @bg_colour;
color: @main_colour;
position: absolute;
+ font-size: smaller;
+ .rounded_corners;
left: 0px;
top: 90px;
display: none;
z-index: 10000;
li a {
display: block;
- padding: 2px;
+ padding: 4px;
+ color: @link_colour;
+ background: @main_colour;
+ line-height: 1;
&:hover {
- color: white;
- background: #3465A4;
+ background: @link_colour;
+ color: @main_colour;
text-decoration: none;
}
}
@@ -1971,13 +2061,12 @@ div {
}
#register-form label,
#profile-edit-form label {
- width: 300px;
- float: left;
+ width: 23em;
}
#register-form span,
#profile-edit-form span {
color: @menu_bg_colour;
- display: block;
+ display: inline-block;
margin-bottom: 20px;
}
#profile-edit-marital-label span {
@@ -1990,12 +2079,6 @@ div {
.profile-edit-side-div {
display: none;
}
-/*.profile-edit-side-div:hover {
- display: block;
-}
-.profile-edit-side-link {
- margin: 3px 0px 0px 70px;
-}*/
#profiles-menu-trigger {
margin: 0px 0px 0px 25px;
}
@@ -2287,21 +2370,24 @@ div {
#group-sidebar {
margin-bottom: 10px;
}
+.categories-selected,
.group-selected,
.nets-selected,
.fileas-selected {
- padding: 3px;
+ // padding: 4px;
color: @bg_colour;
- background: @main_colour;
- .borders(1px, solid, @link_colour);
+ // background: @main_colour;
+ // .borders(1px, solid, @link_colour);
+ .multibutton_active;
}
+.categories-selected:hover,
.group-selected:hover,
.nets-selected:hover,
.fileas-selected:hover {
- padding: 3px;
- color: @link_colour;
- background: @bg_colour;
- .borders(1px, solid, @link_colour);
+// padding: 4px;
+ // color: @bg_colour;
+// background: @bg_colour;
+// .borders(1px, solid, @link_colour);
}
.groupsideedit {
margin-right: 10px;
@@ -2320,13 +2406,8 @@ div {
}
}
.sidebar-group-element {
- padding: 3px;
- &:hover {
- color: @bg_colour;
- background: @link_colour;
- font-weight: bold;
- padding: 3px;
- }
+ .multibutton;
+ .rounded_corners;
}
#sidebar-new-group {
margin: auto;
@@ -2350,25 +2431,22 @@ div {
}
}
#side-peoplefind-url {
- background-color: @bg_colour;
- color: @main_colour;
.borders(1px, solid, darken(@main_alt_colour, 33.5%));
margin-right: 3px;
width: 75%;
- &:hover, &:focus {
- background-color: @main_alt_colour;
- color: darken(@main_alt_colour, 80%);
- .borders(1px, solid, darken(@main_alt_colour, 73.5%));
- }
}
+.categories-ul,
.nets-ul {
.list_reset;
li {
margin: 10px 0 0;
}
}
+.categories-link,
.nets-link,
.nets-all {
+ .multibutton;
+ .rounded_corners;
margin-left: 0px;
}
#netsearch-box {
@@ -2454,13 +2532,13 @@ div {
}
&#users {
padding: 5px;
- }
- &#users img {
- .box(16px, 16px);
- }
- &#users a {
- color: @main_colour;
- text-decoration: underline;
+ img {
+ .box(16px, 16px);
+ }
+ a {
+ color: @main_colour;
+ text-decoration: underline;
+ }
}
}
td .icon {
@@ -2558,9 +2636,33 @@ div {
}
}
#panel {
+ position: absolute;
+ font-size: small;
+ .rounded_corners;
+ .borders(1px, solid, @main_alt_colour);
+ background-color: @bg_alt_colour;
+ color: @main_colour;
+ padding: 1em;
z-index: 100;
}
-.grey, .gray {
+.pager {
+ margin-top: 60px;
+ display: block;
+ clear: both;
+ text-align: center;
+ font-size: small;
+ font-weight: bold;
+ span {
+ padding: 4px;
+ margin: 4px;
+ }
+}
+.pager_current {
+ background-color: @link_colour;
+ color: @bg_colour;
+}
+.grey,
+.gray {
color: gray;
}
.orange {
@@ -2637,7 +2739,7 @@ div {
.icon {
display: block;
.box;
- background: url(dark/icons.png) no-repeat;
+ background: transparent url("dark/icons.png") no-repeat;
border: 0;
text-decoration: none;
.rounded_corners;
@@ -2649,7 +2751,7 @@ div {
.editicon {
display: inline-block;
.box(21px, 21px);
- background: url(dark/editicons.png) no-repeat;
+ background: url("dark/editicons.png") no-repeat;
border: 0;
text-decoration: none;
}
@@ -2890,6 +2992,9 @@ footer {
display: block;
clear: both;
}
+#sectionfooter {
+ margin: 1em 0 1em 0;
+}
#profile-jot-text {
height: 20px;
color: @main_colour;
@@ -2914,6 +3019,7 @@ footer {
margin: 0 10px;
.borders(1px, solid, @menu_bg_colour);
border-top: 0;
+ font-size: small;
// .box_shadow;
}
#acl-wrapper {
diff --git a/view/theme/dispy/dark/theme.php b/view/theme/dispy/dark/theme.php
index 339c477a0..f73a12765 100644
--- a/view/theme/dispy/dark/theme.php
+++ b/view/theme/dispy/dark/theme.php
@@ -1,19 +1,17 @@
<?php
/*
-* Name: Dispy Dark
-* Description: Dispy Dark: Dark, Spartan, Sleek, and Functional
-* Version: 1.2
-* Author: Simon <http://simon.kisikew.org/>
-* Maintainer: Simon <http://simon.kisikew.org/>
-* Screenshot: <a href="screenshot.jpg">Screenshot</a>
-*/
+ * Name: Dispy Dark
+ * Description: Dispy Dark: Dark, Spartan, Sleek, and Functional
+ * Author: Simon <http://simon.kisikew.org/>
+ * Maintainer: Simon <http://simon.kisikew.org/>
+ * Screenshot: <a href="screenshot.jpg">Screenshot</a>
+ */
$a = get_app();
$a->theme_info = array(
'family' => 'dispy',
'name' => 'dark',
- 'version' => '1.2'
);
function dispy_dark_init(&$a) {
diff --git a/view/theme/dispy/group_side.tpl b/view/theme/dispy/group_side.tpl
index 10ecec2e8..be8e23de0 100644
--- a/view/theme/dispy/group_side.tpl
+++ b/view/theme/dispy/group_side.tpl
@@ -5,10 +5,9 @@
<ul id="sidebar-group-ul">
{{ for $groups as $group }}
<li class="sidebar-group-li">
- <a href="$group.href" class="sidebar-group-element {{ if $group.selected }}group-selected{{ endif }}">$group.text</a>
+ <a href="$group.href" class="sidebar-group-element {{ if $group.selected }}group-selected{{ else }}group-other{{ endif }}">$group.text</a>
{{ if $group.edit }}
- <a
- class="groupsideedit"
+ <a class="groupsideedit"
href="$group.edit.href" title="$group.edit.title"><span class="icon small-pencil"></span></a>
{{ endif }}
{{ if $group.cid }}
diff --git a/view/theme/dispy/light/_base.less b/view/theme/dispy/light/_base.less
index 56fd2838d..c605dc702 100644
--- a/view/theme/dispy/light/_base.less
+++ b/view/theme/dispy/light/_base.less
@@ -24,16 +24,23 @@
@menu_bg_colour: #555753;
//* font colour, aka color: */
-@lt_main_colour: #ffff99;
+@lt_main_colour: lighten(@bg_colour, 10%);
@main_colour: #111;
+@dk_main_colour: darken(@bg_colour, 10%);
@main_alt_colour: #999999;
+// darken(@main_alt_colour, 6.5%) > #888888
+// //#9eabb0
// darken(@main_alt_colour, 10%) > #777777
// darken(@main_alt_colour, 20%) > #666666
// darken(@main_alt_colour, 26.8%) > #555555
// darken(@main_alt_colour, 33.5%) > #444444
// darken(@main_alt_colour, 40%) > #333333
//
+// lighten(@main_alt_colour, 26.5%) > #dddddd
// lighten(@main_alt_colour, 20%) > #cccccc
+// lighten(@main_alt_colour, 13.5%) > #bbbbbb
+// lighten(@main_alt_colour, 6.5%) > #aaaaaa
+// lighten(@main_alt_colour, 30%)
@disabled_colour: #dddddd;
@shiny_colour: #f2f2c3;
@red_orange: #ff2000;
@@ -49,11 +56,9 @@
@info: #364e59;
@alert: #ff0000;
-@lt_main_colour: lighten(@bg_colour, 10%);
-@dk_main_colour: darken(@bg_colour, 10%);
-
//* links */
-@link_colour: #3465a4;
+// yes our link colour is "friendica blue" ;)
+@link_colour: @friendica_blue;
@dk_link_colour: darken(@link_colour, 10%);
@lt_link_colour: lighten(@link_colour, 10%);
//@hover_colour: #729fcf;
@@ -130,7 +135,19 @@
-webkit-text-overflow: @t;
text-overflow: @t;
}
-
+.lin_gradient(@x1: left, @x2: right, @y1: top, @y2: bottom, @c1: @bg_colour, @c2: @dk_bg_colour) {
+ // w3c
+ background: linear-gradient(@x1 @y2, @c1, @c2);
+ // webkit
+ // -webkit-gradient(<type>, <point> [, <radius>]?, <point> [, <radius>]? [, <stop>]*)
+ background: -webkit-gradient(linear, @x1 @y1, @x2 @y2, from(@c1), to(@c2));
+ // mozilla
+ // -moz-linear-gradient([<point> || <angle>,]? <stop>, <stop> [, <stop>])
+ background: -moz-linear-gradient(@x1 @y2, @c1, @c2);
+ // opera
+ //background: -o-linear-gradient([<point> || <angle>,]? <stop>, <stop> [, <stop>]);
+ background: -o-linear-gradient(@x1, @c1, @c2);
+}
//* pre wrap */
.wrap () {
white-space: pre-wrap;
diff --git a/view/theme/dispy/light/connect.png b/view/theme/dispy/light/connect.png
deleted file mode 100644
index b76fc13dc..000000000
--- a/view/theme/dispy/light/connect.png
+++ /dev/null
Binary files differ
diff --git a/view/theme/dispy/light/screenshot.jpg b/view/theme/dispy/light/screenshot.jpg
index 81ee35afb..46a01ccb8 100644
--- a/view/theme/dispy/light/screenshot.jpg
+++ b/view/theme/dispy/light/screenshot.jpg
Binary files differ
diff --git a/view/theme/dispy/light/screenshot_small.jpg b/view/theme/dispy/light/screenshot_small.jpg
new file mode 100644
index 000000000..043d0415f
--- /dev/null
+++ b/view/theme/dispy/light/screenshot_small.jpg
Binary files differ
diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css
index d960d7389..0e7fc1f8d 100644
--- a/view/theme/dispy/light/style.css
+++ b/view/theme/dispy/light/style.css
@@ -13,13 +13,14 @@ audio,canvas,video,time{display:inline-block;*display:inline;*zoom:1;}
audio:not([controls]),[hidden]{display:none;}
html{font-size:100%;overflow-y:scroll;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-o-text-size-adjust:100%;font-size-adjust:100%;}
body{margin:0;padding:0;font-size:14pt;line-height:1.1em;font-family:sans-serif;color:#111111;background-color:#eeeeec;}
-button,input,select,textarea{color:#111111;background-color:#eeeeec;}
+button,input,select,textarea{color:#111111;background-color:white;}
select{border:1px dotted #555555;padding:1px;margin:3px;color:#111111;background:#eeeeec;max-width:85%;min-width:85px;}
option{padding:1px;color:#111111;background:#eeeeec;}option[selected="selected"]{color:#eeeeec;background:#2e3436;}
tr:nth-child(even){background-color:#d6d6d1;}
-:focus{outline:invert, dashed, thin;}
-[disabled="disabled"]{background:#4e4f4e;color:#dddddd;}
-ins,mark{background-color:#2e302e;color:#ffffff;}
+:focus{outline:none;}
+a:focus{outline:invert, dashed, thin;}
+[disabled="disabled"]{background:#2e3436;color:#dddddd;}
+ins,mark{background-color:#eeeeec;color:#111111;}
ins{text-decoration:none;}
mark{font-style:italic;font-weight:bold;}
pre,code,kbd,samp,.wall-item-body code{font-family:monospace, monospace;_font-family:monospace;font-size:1em;}
@@ -35,9 +36,10 @@ sup{top:-0.5em;}
img{border:0 none;}
a{color:#3465a4;text-decoration:none;margin-bottom:1px;}a:hover{color:#284d7d;border-bottom:1px dotted #284d7d;}
a:hover img{text-decoration:none;}
-blockquote{background:#000000;color:#111111;text-indent:5px;padding:5px;border:1px solid #454545;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
-label{width:38%;display:inline-block;font-size:small;margin:0 10px 1em 0;border:1px solid #eeeeec;padding:5px;background:#cccccc;color:#111111;-moz-box-shadow:3px 3px 5px 0px #111111;-o-box-shadow:3px 3px 5px 0px #111111;-webkit-box-shadow:3px 3px 5px 0px #111111;-ms-box-shadow:3px 3px 5px 0px #111111;box-shadow:3px 3px 5px 0px #111111;}
-input{width:250px;height:25px;border:1px solid #444444;}input[type="checkbox"],input[type="radio"]{margin:0;width:15px;height:15px;}
+blockquote{background:#aaaaaa;color:#111111;text-indent:5px;padding:5px;border:1px solid #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
+label{width:38%;display:inline-block;font-size:small;margin:0 10px 1em 0;border:1px solid #eeeeec;padding:3px 5px;background:#cccccc;color:#111111;-moz-box-shadow:3px 3px 5px 0px #111111;-o-box-shadow:3px 3px 5px 0px #111111;-webkit-box-shadow:3px 3px 5px 0px #111111;-ms-box-shadow:3px 3px 5px 0px #111111;box-shadow:3px 3px 5px 0px #111111;}
+input{width:250px;height:25px;border:1px solid #444444;width:17em;}input[type="checkbox"],input[type="radio"]{width:15px;height:15px;margin:0;}
+input[type="radio"]{margin:5px 0;}
input[type="submit"],input[type="button"]{background-color:#555753;border:2px outset #444444;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 3px 4px 0 #111111;-o-box-shadow:1px 3px 4px 0 #111111;-webkit-box-shadow:1px 3px 4px 0 #111111;-ms-box-shadow:1px 3px 4px 0 #111111;box-shadow:1px 3px 4px 0 #111111;color:#eeeeec;cursor:pointer;font-weight:bold;width:auto;-moz-text-shadow:1px 1px #111111;-o-text-shadow:1px 1px #111111;-webkit-text-shadow:1px 1px #111111;-ms-text-shadow:1px 1px #111111;text-shadow:1px 1px #111111;}
input[type="submit"]:active,input[type="button"]:active{-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
h1,h2,h3,h4,h5,h6{margin:10px 0px;font-weight:bold;border-bottom:1px solid #284d7d;}
@@ -51,13 +53,12 @@ h6{font-size:xx-small;}
.fakelink,.lockview{color:#3465a4;cursor:pointer;}
.fakelink:hover{color:#284d7d;}
.smalltext{font-size:0.7em;}
-#panel{position:absolute;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #999999;background-color:#2e302e;color:#111111;padding:1em;}
-.pager{margin-top:60px;display:block;clear:both;text-align:center;font-size:small;font-weight:bold;}.pager span{padding:4px;margin:4px;}
-.pager_current{background-color:#3465a4;color:#eeeeec;}
.action{margin:5px 0;}
.tool{margin:5px 0;list-style:none;}
#articlemain{width:100%;height:100%;margin:0 auto;}
-[class$="-desc"],[id$="-desc"]{color:#eeeeec;background:#2e3436;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin:3px 10px 7px 0;padding:5px;font-weight:bold;font-size:smaller;}
+.button{color:#111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding:5px;cursor:pointer;}.button a{color:#111111;font-weight:bold;}
+#profile-listing-desc a{color:#eeeeec;font-weight:bold;}
+[class$="-desc"],[id$="-desc"]{color:#eeeeec;background:#2e3436;border:2px outset #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin:3px 10px 7px 0;padding:5px;font-weight:bold;font-size:smaller;}
#item-delete-selected-desc{float:left;margin-right:5px;}#item-delete-selected-desc:hover{text-decoration:underline;}
.intro-approve-as-friend-desc{margin-top:10px;}
.intro-desc{margin-bottom:20px;font-weight:bold;}
@@ -65,6 +66,7 @@ h6{font-size:xx-small;}
#settings-nickname-desc{background:#2e3436;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #111111;padding:5px;color:#eeeeec;}
.contactname,.contact-name{font-weight:bold;font-size:smaller;}
.contact-details{font-style:italic;font-size:smaller;}
+.like-rotator{vertical-align:middle;text-align:center;margin:1px;}
#asidemain .field{overflow:hidden;width:200px;}
#login-extra-links{overflow:auto !important;padding-top:60px !important;width:100% !important;}#login-extra-links a{margin-right:20px;}
#login_standard{display:block !important;float:none !important;height:100% !important;position:relative !important;width:100% !important;}#login_standard .field label{width:200px !important;}
@@ -76,7 +78,7 @@ h6{font-size:xx-small;}
#login_openid label{width:180px !important;}
nav{height:60px;background-color:#2e3436;color:#eeeeec;position:relative;padding:20px 20px 10px 95px;}nav a{text-decoration:none;color:#eeeeec;border:0px;}nav a:hover{text-decoration:none;color:#eeeeec;border:0px;}
nav #banner{display:block;position:absolute;left:51px;top:25px;}nav #banner #logo-text a{font-size:40px;font-weight:bold;margin-left:3px;}
-ul#user-menu-popup{display:none;position:absolute;background-color:#555753;width:100%;padding:10px 0px;margin:0px;top:20px;left:0;font-size:small;line-height:1;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-moz-box-shadow:5px 5px 10px 0px #111111;-o-box-shadow:5px 5px 10px 0px #111111;-webkit-box-shadow:5px 5px 10px 0px #111111;-ms-box-shadow:5px 5px 10px 0px #111111;box-shadow:5px 5px 10px 0px #111111;z-index:10000;}ul#user-menu-popup li{display:block;}ul#user-menu-popup li a{display:block;padding:5px;}ul#user-menu-popup li a:hover{color:#2e3436;background-color:#eeeeec;}
+ul#user-menu-popup{display:none;position:absolute;background-color:#555753;width:100%;padding:10px 0px;margin:0px;top:20px;left:0;font-size:small;line-height:1;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-moz-box-shadow:5px 5px 10px 0px #111111;-o-box-shadow:5px 5px 10px 0px #111111;-webkit-box-shadow:5px 5px 10px 0px #111111;-ms-box-shadow:5px 5px 10px 0px #111111;box-shadow:5px 5px 10px 0px #111111;z-index:10000;}ul#user-menu-popup li{display:block;}ul#user-menu-popup li a{display:block;padding:5px;color:#eeeeec;background-color:#555753;}ul#user-menu-popup li a:hover{color:#eeeeec;background-color:#111111;}
ul#user-menu-popup li a.nav-sep{border-top:1px solid #2e302e;}
nav .nav-link{display:inline-block;width:22px;height:22px;overflow:hidden;margin:0px 5px 5px;text-indent:50px;background:transparent url(light/icons.png) 0 0 no-repeat;}
#nav-apps-link{background-position:0 -66px;}#nav-apps-link:hover{background-position:-22px -66px;}
@@ -101,13 +103,15 @@ div.jGrowl div.info{background:#364e59 url("../../../images/icons/48/info.png")
nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkmenu.selected .icon.s22.notify{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAUJcAAFCXAZtv64UAAAHuSURBVCjPbZPbTlNBFIYHLixXRIhEQGNRMUopJAJyAyZ4Z2l8B+XwEBqKtjwOp8oDIAJKIJFUjdFIQCUYrRytdyb0459ht8wG9rrYs9b618y/TsYEH4ZK4qRYYIdDybZOI7TKakIfVhrJ8J2i5IBNyV93/kaaBuv3oV3MgwCTPKGHPkkPA0xRUMBrOgN4AP0o6BseEpF2m3es0qJTFQneyvMhgDsC9tZprnEcGuOPeMcDLUpW3jlLxlDBmJTFY6gLvsVv8tyh9G7U3Z6mwtCuJAoiECSh/w1+8otmTjLqF2KDNsNzRY1bruV0o6rFFtc9S5USh5RRWvAYv4xX9dYPS8ur1oBQC4Y99m2uHriRNda5ErLdU1l3jCI2xdJ3XOYLX6kP2W6K2OF54Et84jN154F31d6ukKOG92pSbcjWLRrbRhVGLTZeOtXqX46LoQSHhJo3jOo3ESrdBQbljIRKNyXUiKHNNSXhTdbZiUzyT/WJ23Zn3BBFy+2u4ZHc1eV2N7EkxAvbbqMRmZOSlbE0g/uajRgl6Iy8r1wpnaFTQ4ji+8XOEsuxYmdDWpJleXJ0+BPdoduL4p5Vavd5IOllmJfiWmSWu6d3pV4jteFWqaAGbLkdKSqtUXXUnN3DSvF8phfy/JfkxfOp9sVb2COz+hY/T0qkwwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMS0wOS0xNlQwOTozOTowMCswMjowMC9Oi90AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTEtMDktMTZUMDk6Mzk6MDArMDI6MDBeEzNhAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==");}
.show{display:block;}
#notifications{width:170px;height:20px;font-size:small;top:-19px;left:4px;position:absolute;}
-#nav-floater{position:fixed;top:20px;right:1%;padding:5px;background:#2e3436;color:transparent;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;z-index:100;width:300px;height:60px;}
+#nav-floater{position:fixed;top:20px;right:1%;padding:5px;background:#2e3436;color:transparent;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;z-index:100;width:270px;height:60px;}
#nav-buttons{clear:both;list-style:none;padding:0px;margin:0px;height:25px;}#nav-buttons>li{padding:0;display:inline-block;margin:0px -4px 0px 0px;}
.floaterflip{display:block;position:fixed;z-index:110;top:56px;right:19px;width:22px;height:22px;overflow:hidden;margin:0px;background:transparent url(light/icons.png) -190px -60px no-repeat;}
.search-box{display:inline-block;margin:5px;position:fixed;right:0px;bottom:0px;z-index:100;background:#2e3436;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
-#search-text{border:1px solid #eeeeec;background:#eeeeec;color:#2e3436;font-size:8pt;margin:8px;width:10em;height:14px;}
+#search-text,#mini-search-text{background:white;color:#111111;}
+#search-text{border:1px solid #999999;margin:5px 0;}
+#mini-search-text{font-size:8pt;height:14px;width:10em;margin:5px;}
#scrollup{position:fixed;right:5px;bottom:40px;z-index:100;}#scrollup a:hover{text-decoration:none;border:0;}
-#user-menu{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;display:block;width:75%;margin:3px 0 0 0;position:relative;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;background-color:#555753;background-image:url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAIAAwDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMH/8QAIhAAAQMEAgIDAAAAAAAAAAAAAQIDBAAFBhESIQdBMVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIR/9oADAMBAAIRAxEAPwCXiHO8dbsEi35BEhIehNlbUhxhBU82O+G9bKgToD2D+VlmZX9OWZBJuAiMxGlni0w0gJCED4HXv7pSi6eFML//2Q==");background-position:98% center;background-repeat:no-repeat;clear:both;top:4px;left:10px;padding:2px;}#user-menu>a{vertical-align:top;outline:0 none;}
+#user-menu{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;display:block;width:80%;margin:3px 0 0 0;position:relative;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;background-color:#555753;background-image:url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAIAAwDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAMH/8QAIhAAAQMEAgIDAAAAAAAAAAAAAQIDBAAFBhESIQdBMVFh/8QAFQEBAQAAAAAAAAAAAAAAAAAAAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAABAAIR/9oADAMBAAIRAxEAPwCXiHO8dbsEi35BEhIehNlbUhxhBU82O+G9bKgToD2D+VlmZX9OWZBJuAiMxGlni0w0gJCED4HXv7pSi6eFML//2Q==");background-position:98% center;background-repeat:no-repeat;clear:both;top:4px;left:10px;padding:2px;}#user-menu>a{vertical-align:top;outline:0 none;}
#user-menu-label{font-size:small;padding:3px 20px 9px 5px;height:10px;}
.nav-ajax-update,.nav-ajax-left{width:30px;height:19px;background:transparent url(light/notifications.png) 0 0 no-repeat;color:#111111;font-weight:bold;font-size:0.8em;padding-top:0.2em;text-align:center;float:left;margin:0 -1px 0 3px;display:block;visibility:hidden;}
.nav-ajax-update.show,.nav-ajax-left.show{visibility:visible;}
@@ -118,26 +122,27 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
#intro-update{background-position:-120px 0px;}
#lang-select-icon{cursor:pointer;position:fixed;left:28px;bottom:6px;z-index:10;}
#language-selector{position:fixed;bottom:2px;left:52px;z-index:10;}
-.menu-popup{position:absolute;display:none;width:11em;background:white;color:#eeeeec;margin:0px;padding:0px;border:3px solid #f2f2c3;z-index:100000;-moz-box-shadow:5px 5px 5px 0px #111111;-o-box-shadow:5px 5px 5px 0px #111111;-webkit-box-shadow:5px 5px 5px 0px #111111;-ms-box-shadow:5px 5px 5px 0px #111111;box-shadow:5px 5px 5px 0px #111111;}.menu-popup a{display:block;color:#eeeeec;padding:5px 10px;text-decoration:none;}.menu-popup a:hover{background-color:#ffffff;}
+.menu-popup{position:absolute;display:none;background:white;color:#111111;margin:0px;padding:0px;font-size:small;line-height:1.2;border:3px solid #3465a4;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;z-index:100000;-moz-box-shadow:5px 5px 5px 0px #111111;-o-box-shadow:5px 5px 5px 0px #111111;-webkit-box-shadow:5px 5px 5px 0px #111111;-ms-box-shadow:5px 5px 5px 0px #111111;box-shadow:5px 5px 5px 0px #111111;}.menu-popup a{display:block;color:#111111;padding:5px 10px;text-decoration:none;}.menu-popup a:hover{color:#eeeeec;background-color:#3465a4;}
.menu-popup .menu-sep{border-top:1px solid #4e4f4e;}
.menu-popup li{float:none;overflow:auto;height:auto;display:block;}.menu-popup li img{float:left;width:16px;height:16px;padding-right:5px;}
.menu-popup .empty{padding:5px;text-align:center;color:#ffffff;}
.notif-item{font-size:small;}.notif-item a{vertical-align:middle;}
.notif-image{width:32px;height:32px;padding:7px 7px 0px 0px;}
-.notify-seen{background:#666666;}
+.notify-seen{background:#dddddd;color:#111111;}
+.notify-unseen{color:#111111;}
#sysmsg_info{position:fixed;bottom:0;-moz-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-o-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-webkit-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-ms-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;padding:10px;background-color:#fcaf3e;border:2px solid #f8911b;border-bottom:0;padding-bottom:50px;z-index:1000;}
#sysmsg{position:fixed;bottom:0;-moz-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-o-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-webkit-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;-ms-box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;box-shadow:3px 3px 3px 10px 0 #111111 5px 5px 0px #111111;padding:10px;background-color:#fcaf3e;border:2px solid #f8911b;border-bottom:0;padding-bottom:50px;z-index:1000;}
-#sysmsg_info br,#sysmsg br{display:block;margin:2px 0px;border-top:1px solid #111111;}
-#asidemain{float:left;font-size:small;margin:20px 0 20px 35px;width:25%;display:inline;}
+#sysmsg_info br,#sysmsg br{display:block;margin:2px 0px;border-top:1px solid #eeeeec;}
+#asidemain{float:left;font-size:small;margin:1em;width:25%;display:inline;}
#asideright,#asideleft{display:none;}
.vcard .fn{font-size:1.5em;font-weight:bold;border-bottom:1px solid #284d7d;padding-bottom:3px;}
-.vcard #profile-photo-wrapper{margin:20px;}.vcard #profile-photo-wrapper img{-moz-box-shadow:3px 3px 10px 0 #111111;-o-box-shadow:3px 3px 10px 0 #111111;-webkit-box-shadow:3px 3px 10px 0 #111111;-ms-box-shadow:3px 3px 10px 0 #111111;box-shadow:3px 3px 10px 0 #111111;}
+.vcard #profile-photo-wrapper{margin:20px 0;background-color:#555753;padding:5px;width:175px;height:175px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:3px 3px 10px 0 #111111;-o-box-shadow:3px 3px 10px 0 #111111;-webkit-box-shadow:3px 3px 10px 0 #111111;-ms-box-shadow:3px 3px 10px 0 #111111;box-shadow:3px 3px 10px 0 #111111;}
#asidemain h4{font-size:1.2em;}
#asidemain #viewcontacts{text-align:right;}
#asidemain #contact-block{width:99%;}#asidemain #contact-block .contact-block-content{width:99%;}#asidemain #contact-block .contact-block-content .contact-block-div{float:left;margin:0 5px 5px 0;width:50px;height:50px;padding:3px;position:relative;}
-.aprofile dt{background:#111111;color:#eeeeec;font-weight:bold;-moz-box-shadow:3px 3px 5px 0px #111111;-o-box-shadow:3px 3px 5px 0px #111111;-webkit-box-shadow:3px 3px 5px 0px #111111;-ms-box-shadow:3px 3px 5px 0px #111111;box-shadow:3px 3px 5px 0px #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin:15px 0 5px;padding-left:5px;}
+.aprofile dt{background:transparent;color:#666666;font-weight:bold;-moz-box-shadow:3px 3px 5px 0px #111111;-o-box-shadow:3px 3px 5px 0px #111111;-webkit-box-shadow:3px 3px 5px 0px #111111;-ms-box-shadow:3px 3px 5px 0px #111111;box-shadow:3px 3px 5px 0px #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin:15px 0 5px;padding-left:5px;}
#profile-extra-links ul{margin-left:0px;padding-left:0px;list-style:none;}
-#dfrn-request-link{-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;color:#111111;display:block;font-size:1.2em;padding:0.2em 0.5em;background-color:#3465a4;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE4SURBVCiRpZKxLgRRFIa//64dKruZFRIlolBviFKiVHsHrRaFikTCC+hEQtRegMQDqDUKJOPOvauSMJmjYEU2M0viT071/+fLOTlHZkadQgjLkh1LPEoj661WKw5mXG034JxtAgtmrJoVK5WZYYCy1AVQSOYbjeSqMmRmQ8v755Ne77lb5w+d4HMNJopCT7X+bwDQZKfTyf4BIAHeawHe+/kQ/FGM+QagvpFl2VSM/tyMmV7PV14AYMQ5nUp0AULIp0HXzpVvSdLYMmNVAjNdAuNAUQHgxy/ZvEQTSMw0A33DxkIIi2ma3gwC9PKSzRWF2wbdpml62DfyPF9yjlNgAnQGLJjZnXON3Xa7ff8NGPbKQPNrbAOI0a9J2ilLEzAL7P0GqJJizF+BUeDhL2cclJnZPvAg6eADf+imKjSMX1wAAAAASUVORK5CYII=");background-repeat:no-repeat;background-position:95% center;}
+#dfrn-request-link{-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;color:#eeeeec;display:block;font-size:1.2em;padding:0.2em 0.5em;background-color:#3465a4;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE4SURBVCiRpZKxLgRRFIa//64dKruZFRIlolBviFKiVHsHrRaFikTCC+hEQtRegMQDqDUKJOPOvauSMJmjYEU2M0viT071/+fLOTlHZkadQgjLkh1LPEoj661WKw5mXG034JxtAgtmrJoVK5WZYYCy1AVQSOYbjeSqMmRmQ8v755Ne77lb5w+d4HMNJopCT7X+bwDQZKfTyf4BIAHeawHe+/kQ/FGM+QagvpFl2VSM/tyMmV7PV14AYMQ5nUp0AULIp0HXzpVvSdLYMmNVAjNdAuNAUQHgxy/ZvEQTSMw0A33DxkIIi2ma3gwC9PKSzRWF2wbdpml62DfyPF9yjlNgAnQGLJjZnXON3Xa7ff8NGPbKQPNrbAOI0a9J2ilLEzAL7P0GqJJizF+BUeDhL2cclJnZPvAg6eADf+imKjSMX1wAAAAASUVORK5CYII=");background-repeat:no-repeat;background-position:95% center;}
#wallmessage-link{color:#eeeeec;display:block;font-size:1.2em;padding:0.2em 0.5em;}
.ttright{margin:0px;}
.contact-block-div{width:50px;height:50px;float:left;}
@@ -145,51 +150,52 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
#jot{margin:10px 0 20px 0px;width:100%;}#jot #jot-tools{margin:0px;padding:0px;width:100%;height:35px;overflow:none;}#jot #jot-tools span{float:left;margin:10px 20px 2px 0px;}#jot #jot-tools span a{display:block;}
#jot #jot-tools .perms{float:right;width:40px;}
#jot #jot-tools li.loading{float:right;background-color:white;width:20px;height:38px;vertical-align:center;text-align:center;border-top:2px solid #9eabb0;}#jot #jot-tools li.loading img{margin-top:10px;}
-#jot #jot-title{border:1px solid #787878;margin:0 0 5px;width:90%;height:20px;font-weight:bold;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;vertical-align:middle;}
+#jot #jot-title{border:1px solid #cccccc;margin:0 0 5px;width:90%;height:20px;font-weight:bold;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;vertical-align:middle;}
#jot-category{margin:5px 0;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #cccccc;color:#666666;font-size:smaller;}#jot-category:focus{color:#111111;}
#jot #character-counter{width:6%;height:15px;float:right;text-align:right;line-height:20px;padding:2px 20px 5px 0;}
#profile-jot-text_parent{-moz-box-shadow:5px 0 10px 0 #111111;-o-box-shadow:5px 0 10px 0 #111111;-webkit-box-shadow:5px 0 10px 0 #111111;-ms-box-shadow:5px 0 10px 0 #111111;box-shadow:5px 0 10px 0 #111111;}
-#profile-jot-text_tbl{margin-bottom:10px;background:#222222;}
+#profile-jot-text_tbl{margin-bottom:10px;background:#808080;}
#profile-jot-text_ifr{width:99.900002% !important;}
-#profile-jot-text_toolbargroup,.mceCenter tr{background:#222222;}
-[id$="jot-text_ifr"]{width:99.900002% !important;color:#eeeeec;background:#111111;}[id$="jot-text_ifr"] .mceContentBody{color:#eeeeec;background:#111111;}
+#profile-jot-text_toolbargroup,.mceCenter tr{background:#808080;}
+[id$="jot-text_ifr"]{color:#111111;background:#eeeeec;}[id$="jot-text_ifr"] .mceContentBody{color:#111111;background:#eeeeec;}
.defaultSkin tr.mceFirst{background:#808080;}
.defaultSkin td.mceFirst,.defaultSkin td.mceLast{background-color:#eeeeec;}
.defaultSkin span.mceIcon,.defaultSkin img.mceIcon,.defaultSkin .mceButtonDisabled .mceIcon{background-color:#eeeeec;}
#profile-attach-wrapper,#profile-audio-wrapper,#profile-link-wrapper,#profile-location-wrapper,#profile-nolocation-wrapper,#profile-title-wrapper,#profile-upload-wrapper,#profile-video-wrapper{float:left;margin:0 20px 0 0;}
#profile-rotator-wrapper{float:right;}
#profile-jot-email-wrapper{margin:10px 10% 0;border:1px solid #555753;border-bottom:0;}
-#profile-jot-email-label{background-color:#555753;color:#111111;padding:5px;}
+#profile-jot-email-label{background-color:#555753;color:#eeeeec;padding:5px;}
#profile-jot-email{width:90%;margin:5px;}
#profile-jot-networks{margin:0 10%;border:1px solid #555753;border-top:0;border-bottom:0;padding:5px;}
#profile-jot-net{margin:5px 0;}
#jot-preview-link{margin:0 0 0 10px;border:0;text-decoration:none;float:right;}
.icon-text-preview{margin:0 0 -18px 0;display:block;width:20px;height:20px;background:url(light/icons.png) no-repeat -128px -40px;border:0;text-decoration:none;float:right;cursor:pointer;}
-#profile-jot-perms{float:right;color:#555753;background-color:#111111;width:20px;height:20px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:3px 3px 5px 0 #111111;-o-box-shadow:3px 3px 5px 0 #111111;-webkit-box-shadow:3px 3px 5px 0 #111111;-ms-box-shadow:3px 3px 5px 0 #111111;box-shadow:3px 3px 5px 0 #111111;border:2px outset #999999;overflow:hidden;margin:0 10px 0 10px;}
+#profile-jot-perms{float:right;color:#555753;width:20px;height:20px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:3px 3px 5px 0 #111111;-o-box-shadow:3px 3px 5px 0 #111111;-webkit-box-shadow:3px 3px 5px 0 #111111;-ms-box-shadow:3px 3px 5px 0 #111111;box-shadow:3px 3px 5px 0 #111111;border:2px outset #555753;overflow:hidden;margin:0 10px 0 10px;}
#profile-jot-plugin-wrapper{width:1px;margin:10px 0 0 0;float:right;}
#profile-jot-submit-wrapper{float:right;width:100%;margin:10px 0 0 0;padding:0;}
-#profile-jot-submit{height:auto;background-color:#555753;color:#999999;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:2px outset #f2f2c3;margin:0;float:right;-moz-text-shadow:1px 1px #111111;-o-text-shadow:1px 1px #111111;-webkit-text-shadow:1px 1px #111111;-ms-text-shadow:1px 1px #111111;text-shadow:1px 1px #111111;width:auto;}#profile-jot-submit:active{-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
-#jot-perms-icon{width:20px;height:22px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;overflow:hidden;}
+#profile-jot-submit{height:auto;background-color:#555753;color:#eeeeec;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:2px outset #555753;margin:0;float:right;-moz-text-shadow:1px 1px #111111;-o-text-shadow:1px 1px #111111;-webkit-text-shadow:1px 1px #111111;-ms-text-shadow:1px 1px #111111;text-shadow:1px 1px #111111;width:auto;}#profile-jot-submit:active{-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
+#jot-perms-icon{width:22px;height:22px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;overflow:hidden;background:#555753 url("dark/icons.png") -88px -40px;}
#group_allow_wrapper,#group_deny_wrapper,#acl-permit-outer-wrapper,#contact_allow_wrapper,#contact_deny_wrapper,#acl-deny-outer-wrapper{width:47%;}
#group_allow_wrapper,#group_deny_wrapper,#acl-permit-outer-wrapper{float:left;}
#contact_allow_wrapper,#contact_deny_wrapper,#acl-deny-outer-wrapper{float:right;}
-#acl-permit-text{background-color:#000000;color:#111111;padding:5px;float:left;}
-#jot-public{background-color:#000000;color:#ff0000;padding:5px;float:left;}
-#acl-deny-text{background-color:#000000;color:#111111;padding:5px;float:left;}
-#jot-title-desc{color:#787878;}
-#profile-jot-desc{color:#ff2000;margin:5px 0;}
+#acl-permit-text{background-color:#555753;color:#111111;padding:5px;float:left;}
+#jot-public{background-color:#555753;color:#ff0000;padding:5px;float:left;}
+#acl-deny-text{background-color:#555753;color:#eeeeec;padding:5px;float:left;}
+#jot-title-desc{color:#cccccc;}
+#profile-jot-desc{background:#eeeeec;border:1px solid #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;color:#ff2000;margin:5px 0;}
#jot-title-wrapper{margin-bottom:5px;}
#jot-title-display{font-weight:bold;}
.jothidden{display:none;}
-#jot-preview-content{background-color:#2e302e;color:#111111;border:1px solid #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:5px 0 10px 0px #111111;-o-box-shadow:5px 0 10px 0px #111111;-webkit-box-shadow:5px 0 10px 0px #111111;-ms-box-shadow:5px 0 10px 0px #111111;box-shadow:5px 0 10px 0px #111111;padding:3px 3px 6px 10px;}#jot-preview-content .wall-item-outside-wrapper{border:0;-o-border-radius:0px 0px 0px 0px;-webkit-border-radius:0px 0px 0px 0px;-moz-border-radius:0px 0px 0px 0px;-ms-border-radius:0px 0px 0px 0px;border-radius:0px 0px 0px 0px;-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
-#sectionmain{margin:20px;font-size:0.8em;min-width:475px;width:67%;float:left;display:inline;}
+#jot-preview-content{background-color:#f2f2c3;color:#111111;border:1px solid #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:5px 0 10px 0px #111111;-o-box-shadow:5px 0 10px 0px #111111;-webkit-box-shadow:5px 0 10px 0px #111111;-ms-box-shadow:5px 0 10px 0px #111111;box-shadow:5px 0 10px 0px #111111;padding:3px 3px 6px 10px;}#jot-preview-content .wall-item-outside-wrapper{border:0;-o-border-radius:0px 0px 0px 0px;-webkit-border-radius:0px 0px 0px 0px;-moz-border-radius:0px 0px 0px 0px;-ms-border-radius:0px 0px 0px 0px;border-radius:0px 0px 0px 0px;-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
+#sectionmain{margin:1em;font-size:0.8em;min-width:475px;width:69%;float:left;display:inline;}
.tabs{margin:0px;padding:0px;list-style:none;list-style-position:inside;margin:10px 0;}.tabs li{display:inline;font-size:smaller;}
-.tab{border:1px solid #284d7d;padding:4px;}.tab:hover,.tab.active:hover,.tab:active{background:#f2f2c3;color:#111111;border:1px solid #284d7d;}
-.tab.active{background:#111111;color:#eeeeec;border:1px solid #284d7d;}.tab.active a{color:#eeeeec;text-decoration:none;}
+.tab{border:1px solid #284d7d;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.tab:active,.tab:hover{background:#f2f2c3;color:#111111;border:1px solid #284d7d;}
.tab a{border:0;text-decoration:none;}
+.tab.active{background:#2e3436;color:#eeeeec;border:1px solid #284d7d;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.tab.active:hover{background:#f2f2c3;color:#111111;border:1px solid #284d7d;}
+.tab.active a{color:#eeeeec;text-decoration:none;}
.wall-item-outside-wrapper{border:1px solid #545454;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-moz-box-shadow:6px 1px 10px -2px #111111;-o-box-shadow:6px 1px 10px -2px #111111;-webkit-box-shadow:6px 1px 10px -2px #111111;-ms-box-shadow:6px 1px 10px -2px #111111;box-shadow:6px 1px 10px -2px #111111;}.wall-item-outside-wrapper.comment{margin-top:5px;}
.wall-item-content-wrapper{position:relative;padding:0.75em;width:auto;}
-.wall-item-outside-wrapper .wall-item-comment-wrapper{}
+.wall-item-outside-wrapper .wall-item-comment-wrapper{}.wall-item-outside-wrapper .wall-item-comment-wrapper .preview{border:0;-o-border-radius:0px;-webkit-border-radius:0px;-moz-border-radius:0px;-ms-border-radius:0px;border-radius:0px;}
.shiny{background:#f2f2c3;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
.wall-outside-wrapper .shiny{-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
.heart{color:red;}
@@ -197,7 +203,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
[id^="tread-wrapper"],[class^="tread-wrapper"]{margin:1.2em 0 0 0;padding:0px;}
.wall-item-photo-menu{display:none;}
.wall-item-photo-menu-button{display:none;text-indent:-99999px;background:#555753 url(light/menu-user-pin.jpg) no-repeat 75px center;position:absolute;overflow:hidden;width:90px;height:20px;top:85px;left:0;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;}
-.wall-item-info{float:left;width:110px;}
+.wall-item-info{float:left;width:7em;position:relative;}
.wall-item-photo-wrapper{width:80px;height:80px;position:relative;padding:5px;background-color:#555753;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}
[class^="wall-item-tools"] *{}[class^="wall-item-tools"] *>*{}
.wall-item-tools{float:right;opacity:0.4;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;}.wall-item-tools:hover{opacity:1;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;}
@@ -206,27 +212,28 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
.wall-item-title{font-size:1.2em;font-weight:bold;margin-bottom:1.4em;}
.wall-item-body{margin:15px 10px 10px 0px;text-align:left;overflow-x:auto;}
.wall-item-lock-wrapper{float:right;width:22px;height:22px;margin:0 -5px 0 0;opacity:1;}
-.wall-item-dislike,.wall-item-like{clear:left;font-size:0.8em;color:#888b85;margin:5px 0 5px 10.2em;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;opacity:0.5;}.wall-item-dislike:hover,.wall-item-like:hover{opacity:1;}
-.wall-item-author,.wall-item-actions-author{clear:left;float:left;font-size:0.8em;color:#888b85;margin:1em auto 0 0.2em;}
-.wall-item-ago{display:inline;padding-left:10px;}
-.wall-item-location{margin-top:15px;width:100px;overflow:hidden;-moz-text-overflow:ellipsis;-ms-text-verflow:ellipsis;-o-text-overflow:ellipsis;-webkit-text-overflow:ellipsis;text-overflow:ellipsis;}.wall-item-location .icon{float:left;}
+.wall-item-dislike,.wall-item-like{clear:left;font-size:0.8em;color:#111111;margin:5px 0 5px 10.2em;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;opacity:0.5;}.wall-item-dislike:hover,.wall-item-like:hover{opacity:1;}
+.wall-item-author,.wall-item-actions-author,.wall-item-ago{color:#111111;line-height:1;display:inline-block;font-size:x-small;margin:0.5em auto;font-weight:bold;}
+.comment-edit-preview{width:auto;margin:auto auto auto -2em;}.comment-edit-preview.wall-item-author,.comment-edit-preview.wall-item-actions-author,.comment-edit-preview.wall-item-ago{font-size:smaller;}
+.wall-item-location{margin-top:2em;width:6em;overflow:hidden;-moz-text-overflow:ellipsis;-ms-text-verflow:ellipsis;-o-text-overflow:ellipsis;-webkit-text-overflow:ellipsis;text-overflow:ellipsis;}.wall-item-location .icon{float:left;}
.wall-item-location>a,.wall-item-location .smalltext{margin-left:25px;font-size:0.7em;display:block;}
.wall-item-location>br{display:none;}
.wallwall .wwto{left:5px;margin:0;position:absolute;top:75px;z-index:10001;width:30px;height:30px;}.wallwall .wwto img{width:30px !important;height:30px !important;}
.wallwall .wall-item-photo-end{clear:both;}
.wall-item-arrowphoto-wrapper{position:absolute;left:35px;top:80px;z-index:10002;}
-.wall-item-photo-menu{min-width:92px;border:2px solid #ffffff;border-top:0px;background:#555753;position:absolute;left:-2px;top:101px;display:none;z-index:10003;-o-border-radius:0 5px 5px 5px;-webkit-border-radius:0 5px 5px 5px;-moz-border-radius:0 5px 5px 5px;-ms-border-radius:0 5px 5px 5px;border-radius:0 5px 5px 5px;}.wall-item-photo-menu li a{white-space:nowrap;display:block;padding:5px 2px;color:#999999;}.wall-item-photo-menu li a:hover{color:#555753;background:#999999;}
+.wall-item-photo-menu{min-width:92px;font-size:0.75em;border:2px solid #555753;border-top:0px;background:#555753;position:absolute;left:-2px;top:101px;display:none;z-index:10003;-o-border-radius:0 5px 5px 5px;-webkit-border-radius:0 5px 5px 5px;-moz-border-radius:0 5px 5px 5px;-ms-border-radius:0 5px 5px 5px;border-radius:0 5px 5px 5px;}.wall-item-photo-menu li a{white-space:nowrap;display:block;padding:5px 6px;color:#eeeeec;}.wall-item-photo-menu li a:hover{color:#555753;background:#eeeeec;}
#item-delete-selected{overflow:auto;width:100%;}
-#connect-services-header,#connect-services,#extra-help-header,#extra-help,#postit-header,#postit{margin:5px 0 0 0;}
+#connect-services-header,#extra-help-header{margin:1.5em 0 0 0;}
+#connect-services,#extra-help{margin:0px;padding:0px;list-style:none;list-style-position:inside;margin:1em 0 0 0;}#connect-services li,#extra-help li{display:inline;}
.ccollapse-wrapper{font-size:0.9em;margin-left:5em;}
-.wall-item-outside-wrapper.comment{margin-left:5em;}.wall-item-outside-wrapper.comment .wall-item-photo{width:40px !important;height:40px !important;}
+.hide-comments-outer{font-size:small;}
+.wall-item-outside-wrapper.comment{margin-left:5em;}.wall-item-outside-wrapper.comment .wall-item-info{width:5em;}
+.wall-item-outside-wrapper.comment .wall-item-photo{width:40px !important;height:40px !important;}
.wall-item-outside-wrapper.comment .wall-item-photo-wrapper{width:40px;height:40px;}
-.wall-item-outside-wrapper.comment .wall-item-photo-menu-button{width:50px;top:45px;background-position:35px center;}
-.wall-item-outside-wrapper.comment .wall-item-info{width:60px;}
-.wall-item-outside-wrapper.comment .wall-item-body{margin-left:10px;}
+.wall-item-outside-wrapper.comment .wall-item-photo-menu-button{width:3.35em;top:3.2em;background-position:35px center;}
.wall-item-outside-wrapper.comment .wall-item-author{margin-left:0.2em;}
-.wall-item-outside-wrapper.comment .wall-item-photo-menu{min-width:50px;top:60px;}
-.comment-wwedit-wrapper{}
+.wall-item-outside-wrapper.comment .wall-item-photo-menu{min-width:4.5em;top:5.5em;}
+.comment-wwedit-wrapper{border:1px solid #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin:5px;}
.comment-edit-wrapper{border-top:1px #aaa solid;}
[class^="comment-edit-bb"]{margin:0px;padding:0px;list-style:none;list-style-position:inside;display:none;margin:-40px 0 5px 60px;width:75%;}[class^="comment-edit-bb"]>li{display:inline-block;margin:0 10px 0 0;visibility:none;}
.comment-wwedit-wrapper img,.comment-edit-wrapper img{width:20px;height:20px;}
@@ -236,10 +243,10 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm
.comment-edit-text-empty{height:20px;border:2px solid #babdd6;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;color:#babdd6;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;}.comment-edit-text-empty:hover{color:#444444;}
.comment-edit-text-full{height:10em;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-webkit-transition:all 0.75s ease-in-out;-moz-transition:all 0.75s ease-in-out;-o-transition:all 0.75s ease-in-out;-ms-transition:all 0.75s ease-in-out;transition:all 0.75s ease-in-out;}
.comment-edit-submit-wrapper{width:90%;margin:5px 5px 10px 50px;text-align:right;}
-.comment-edit-submit{height:22px;background-color:#555753;color:#999999;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:0;}
-.wall-item-body code{background-color:#ffffff;border-bottom:1px dashed #bbbbbb;border-left:5px solid #bbbbbb;border-top:1px dashed #bbbbbb;color:#8c8c8c;display:block;overflow-x:auto;padding:5px 0 15px 10px;width:95%;}.wall-item-body code a{color:#477ec4;}
-div[id$="text"]{font-weight:bold;border-bottom:1px solid #777777;}
-div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:left;}
+.comment-edit-submit{height:22px;background-color:#555753;color:#eeeeec;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:0;}
+.wall-item-body code{background-color:#dddddd;border-bottom:1px dashed #888888;border-left:5px solid #888888;border-top:1px dashed #888888;color:#191919;display:block;overflow-x:auto;padding:5px 0 15px 10px;width:95%;}.wall-item-body code a{color:#477ec4;}
+div[id$="text"]{font-weight:bold;border-bottom:1px solid #eeeeec;}
+div[id$="wrapper"]{height:100%;}div[id$="wrapper"] br{clear:left;}
.profile-match-wrapper{float:left;margin:0 5px 40px 0;width:120px;height:120px;padding:3px;position:relative;}
.icon.drophide.profile-match-ignore{margin:0 6px 0 -3px;}
[id$="-end"],[class$="-end"]{clear:both;margin:0 0 10px 0;}
@@ -249,28 +256,29 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
#advanced-profile-with{margin-left:200px;}
.photos{height:auto;overflow:auto;}
#photo-top-links{margin-bottom:30px;}
-.photo-album-image-wrapper,.photo-top-image-wrapper{float:left;-moz-box-shadow:3px 3px 10px 0 #111111;-o-box-shadow:3px 3px 10px 0 #111111;-webkit-box-shadow:3px 3px 10px 0 #111111;-ms-box-shadow:3px 3px 10px 0 #111111;box-shadow:3px 3px 10px 0 #111111;background-color:#000000;color:#eeeeec;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding-bottom:30px;position:relative;margin:0 10px 10px 0;}
-#photo-photo{max-width:100%;}#photo-photo img{max-width:100%;}
+.photo-album-image-wrapper,.photo-top-image-wrapper{float:left;-moz-box-shadow:3px 3px 10px 0 #111111;-o-box-shadow:3px 3px 10px 0 #111111;-webkit-box-shadow:3px 3px 10px 0 #111111;-ms-box-shadow:3px 3px 10px 0 #111111;box-shadow:3px 3px 10px 0 #111111;background-color:#eeeeec;color:#111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding-bottom:30px;position:relative;margin:0 10px 10px 0;}
+#photo-photo{margin:auto auto 5em 20%;}#photo-photo img{max-width:50%;}
.photo-top-image-wrapper a:hover,#photo-photo a:hover,.photo-album-image-wrapper a:hover{border-bottom:0;}
.photo-top-photo,.photo-album-photo{-o-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-ms-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;}
.photo-top-album-name,.caption{position:absolute;bottom:0;padding:0 5px;}
-#photo-photo{position:relative;margin:5px 45%;}
-#photo-prev-link,#photo-next-link{position:absolute;width:50px;height:150px;background:#ffffff center center no-repeat;opacity:0;-webkit-transition:all 0.5s ease-in-out;-moz-transition:all 0.5s ease-in-out;-o-transition:all 0.5s ease-in-out;-ms-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;z-index:10;top:175px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}#photo-prev-link:hover,#photo-next-link:hover{opacity:0.6;-webkit-transition:all 0.5s ease-in-out;-moz-transition:all 0.5s ease-in-out;-o-transition:all 0.5s ease-in-out;-ms-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;}
+#photo-prev-link,#photo-next-link{position:absolute;width:50px;height:200px;background:#ffffff center center no-repeat;opacity:0;-webkit-transition:all 0.5s ease-in-out;-moz-transition:all 0.5s ease-in-out;-o-transition:all 0.5s ease-in-out;-ms-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;z-index:10;top:15em;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}#photo-prev-link:hover,#photo-next-link:hover{opacity:0.6;-webkit-transition:all 0.5s ease-in-out;-moz-transition:all 0.5s ease-in-out;-o-transition:all 0.5s ease-in-out;-ms-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out;}
#photo-prev-link .icon,#photo-next-link .icon{display:none;}
-#photo-prev-link{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAALpQTFRF////AAAAQEBAZmZmVVVVSUlJTU1NXV1dVVVVTk5OW1tbWlpaWFhPWFhQU1pTVVVVVlZSVVlRVlZTVFdUVFdUVVdTVFZSVldUVldSVldSVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVhTVVdTVVdTVVdTVVdT3XYY/AAAAD10Uk5TAAEEBQYHCgsMDQ4RHSAlP0FFR1hee3+JnqSqq6ytrq+wsbKztLW2t7y9vr/AwcLDxMXGx8jU1dng7O/3+TmOwVsAAADASURBVCjPddPXEoIwEAXQINh7Q8WKYu+95v9/S0dxZxNy83hgMpvdu0Jox642r25GVxGfys+5540sZV3jyY/lWeVxyDLg7AR/lhXOI+KZZeRFgvGQeMnY9olXScYD4jXnPvHGzNsU4x7xjnGsa+YO8T7NnukRHzgXiY/KNKiUkzqkZ8ivnDoKD/xfBvdbbXM9sH70Xtgf2E/YfzgvOF+YB5gf5cPcAfmsgTy3QP5vYF8akf36XvXIRhZPlPyLWxBvNENWsZXDKukAAAAASUVORK5CYII=");left:22%;}
-#photo-next-link{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAKVQTFRF////gICAQEBAZmZmVVVVSUlJYGBgVVVVTU1NXV1dVVVVWVlZU1hTVlZSVlZTVlZTVVlRVVhSVFdUVlhTVVdTVFZTVVdTVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdT8E3YQQAAADZ0Uk5TAAIEBQYHCAkKCwwUN0FER0hOW2uNjqWqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCxcjT3PP3B0dhfwAAANlJREFUKM910+cSgjAQRtEIomAXu4iIYge7ef9Hs+ZzN4b9eW4mk1kGIaqdU9wQf2Nf5XPSiu4d+Z6jp/n54/KghZ40h5ZymbFQGCCkLg3WKC+MEfYs2AHCrszCBGHLQ5gXpggbFooRwrrEwgxhxUOcE5w5wtJiYYHQZjt0EuUhX3r19vU7Y++ozgeMD7i/buYhYTcDj8gz3RQ8prwHB/aPyzvwhPLWzBtwSLi0Bk8pr8BR0cgzwiIycw0cUxZ9xXOH7VZ9vAVn4X840Vh4F9Pp1w/gZ92mpesDuLpM+1blc68AAAAASUVORK5CYII=");left:44%;}
+#photo-prev-link{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAALpQTFRF////AAAAQEBAZmZmVVVVSUlJTU1NXV1dVVVVTk5OW1tbWlpaWFhPWFhQU1pTVVVVVlZSVVlRVlZTVFdUVFdUVVdTVFZSVldUVldSVldSVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVhTVVdTVVdTVVdTVVdT3XYY/AAAAD10Uk5TAAEEBQYHCgsMDQ4RHSAlP0FFR1hee3+JnqSqq6ytrq+wsbKztLW2t7y9vr/AwcLDxMXGx8jU1dng7O/3+TmOwVsAAADASURBVCjPddPXEoIwEAXQINh7Q8WKYu+95v9/S0dxZxNy83hgMpvdu0Jox642r25GVxGfys+5540sZV3jyY/lWeVxyDLg7AR/lhXOI+KZZeRFgvGQeMnY9olXScYD4jXnPvHGzNsU4x7xjnGsa+YO8T7NnukRHzgXiY/KNKiUkzqkZ8ivnDoKD/xfBvdbbXM9sH70Xtgf2E/YfzgvOF+YB5gf5cPcAfmsgTy3QP5vYF8akf36XvXIRhZPlPyLWxBvNENWsZXDKukAAAAASUVORK5CYII=");left:5%;}
+#photo-next-link{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAKVQTFRF////gICAQEBAZmZmVVVVSUlJYGBgVVVVTU1NXV1dVVVVWVlZU1hTVlZSVlZTVlZTVVlRVVhSVFdUVlhTVVdTVFZTVVdTVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdT8E3YQQAAADZ0Uk5TAAIEBQYHCAkKCwwUN0FER0hOW2uNjqWqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCxcjT3PP3B0dhfwAAANlJREFUKM910+cSgjAQRtEIomAXu4iIYge7ef9Hs+ZzN4b9eW4mk1kGIaqdU9wQf2Nf5XPSiu4d+Z6jp/n54/KghZ40h5ZymbFQGCCkLg3WKC+MEfYs2AHCrszCBGHLQ5gXpggbFooRwrrEwgxhxUOcE5w5wtJiYYHQZjt0EuUhX3r19vU7Y++ozgeMD7i/buYhYTcDj8gz3RQ8prwHB/aPyzvwhPLWzBtwSLi0Bk8pr8BR0cgzwiIycw0cUxZ9xXOH7VZ9vAVn4X840Vh4F9Pp1w/gZ92mpesDuLpM+1blc68AAAAASUVORK5CYII=");left:50%;}
#photo-prev-link a,#photo-next-link a{display:block;width:100%;height:100%;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;overflow:hidden;text-indent:-900000px;}
#photos-upload-spacer,#photos-upload-new-wrapper,#photos-upload-exist-wrapper{margin-bottom:1em;}
#photos-upload-existing-album-text,#photos-upload-newalbum-div{background-color:#555753;color:#eeeeec;padding:1px;}
#photos-upload-album-select,#photos-upload-newalbum{width:99%;}
#photos-upload-perms-menu{text-align:right;}
-#photo-edit-caption,#photo-edit-newtag,#photo-edit-albumname{float:left;margin-bottom:25px;}
#photo-edit-link-wrap{margin-bottom:15px;}
-#photo-edit-caption,#photo-edit-newtag{width:100%;}
-#photo-like-div{margin-bottom:25px;}
-#photo-edit-delete-button{margin-left:200px;}
+#photo-edit-perms{width:auto;}
+#photo-edit-rotate-label{width:38%;display:inline-block;font-size:small;margin:0 10px 1em 0;border:1px solid #eeeeec;padding:3px 5px;background:#cccccc;color:#111111;-moz-box-shadow:3px 3px 5px 0px #111111;-o-box-shadow:3px 3px 5px 0px #111111;-webkit-box-shadow:3px 3px 5px 0px #111111;-ms-box-shadow:3px 3px 5px 0px #111111;box-shadow:3px 3px 5px 0px #111111;}
+#photo-like-div{float:left;margin:auto 0 0;width:2em;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #111111;}
+.wall-item-like-buttons>*{display:inline;}
+#photo-edit-delete-button{margin:auto auto auto 1em;}
#photo-edit-end{margin-bottom:35px;}
#photo-caption{font-size:110%;font-weight:bold;margin-top:15px;margin-bottom:15px;}
+#wall-photo-container{margin:0 auto 1em 4em;width:90%;}
.prvmail-text{width:100%;}
#prvmail-subject{width:100%;color:#eeeeec;background:#111111;}
#prvmail-submit-wrapper{margin-top:10px;}
@@ -313,17 +321,16 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
#contact-edit-last-update-text{margin-bottom:15px;}
#contact-edit-last-updated{font-weight:bold;}
#contact-edit-poll-text{display:inline;}
-#contact-edit-info_tbl,#contact-edit-info_parent,.mceLayout{width:100%;}
#contact-edit-end{clear:both;margin-bottom:65px;}
.contact-photo-menu-button{position:absolute;background:url("light/photo-menu.jpg") top left no-repeat transparent;margin:0px;padding:0px;width:16px;height:16px;top:64px;left:0px;overflow:hidden;text-indent:40px;display:none;}
-.contact-photo-menu{width:auto;border:2px solid #000000;background:#eeeeec;color:#111111;position:absolute;left:0px;top:90px;display:none;z-index:10000;}.contact-photo-menu li a{display:block;padding:2px;}.contact-photo-menu li a:hover{color:white;background:#3465A4;text-decoration:none;}
+.contact-photo-menu{width:auto;border:2px solid #3465a4;background:#eeeeec;color:#111111;position:absolute;font-size:smaller;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;left:0px;top:90px;display:none;z-index:10000;}.contact-photo-menu li a{display:block;padding:4px;color:#3465a4;background:#eeeeec;line-height:1;}.contact-photo-menu li a:hover{background:#3465a4;color:#eeeeec;text-decoration:none;}
#id_openid_url{background:url(light/login-bg.gif) no-repeat;background-position:0 50%;padding-left:18px;}
#settings-default-perms{margin-bottom:20px;}
#register-form div,#profile-edit-form div{clear:both;}
.settings-block label{clear:left;}
.settings-block input{margin:10px 5px;}
-#register-form label,#profile-edit-form label{width:300px;float:left;}
-#register-form span,#profile-edit-form span{color:#555753;display:block;margin-bottom:20px;}
+#register-form label,#profile-edit-form label{width:23em;}
+#register-form span,#profile-edit-form span{color:#555753;display:inline-block;margin-bottom:20px;}
#profile-edit-marital-label span{margin:-4px;}
.settings-submit-wrapper,.profile-edit-submit-wrapper{margin:0 0 30px;}
.profile-edit-side-div{display:none;}
@@ -333,14 +340,14 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
#profile-edit-links ul{margin:0px;padding:0px;list-style:none;list-style-position:inside;margin:20px 0;}
.marital{margin-top:5px;}
#register-sitename{display:inline;font-weight:bold;}
-#advanced-expire-popup{background:#eeeeec;color:#111111;}
+#advanced-expire-popup{background:#111111;color:#eeeeec;}
#id_ssl_policy{width:374px;}
#theme-preview img{margin:10px 10px 10px 288px;}
.group-delete-wrapper{margin:-31px 50px 0 0;float:right;}
#group-edit-submit-wrapper{margin:0 0 10px 0;display:inline;}
#group-members,#prof-members{height:200px;overflow:auto;border:1px solid #555753;-o-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-ms-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;}
#group-all-contacts,#prof-all-contacts{height:200px;overflow:auto;border:1px solid #555753;-o-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;-ms-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;}
-#group-members h3,#group-all-contacts h3,#prof-members h3,#prof-all-contacts h3{color:#999999;background-color:#555753;margin:0;padding:5px;}
+#group-members h3,#group-all-contacts h3,#prof-members h3,#prof-all-contacts h3{color:#eeeeec;background-color:#555753;margin:0;padding:5px;}
#group-separator,#prof-separator{display:none;}
#cropimage-wrapper{float:left;}
#crop-image-form{clear:both;}
@@ -358,7 +365,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.clear{clear:both;}
.eventcal{float:left;font-size:20px;}
.event{background:#eeeeec;}
-.vevent{border:1px solid #777777;}.vevent .event-description,.vevent .event-location,.vevent .event-start{margin-left:10px;margin-right:10px;}
+.vevent{border:1px solid #eeeeec;}.vevent .event-description,.vevent .event-location,.vevent .event-start{margin-left:10px;margin-right:10px;}
#new-event-link{margin-bottom:10px;}
.edit-event-link,.plink-event-link{}
.event-description:before{content:url('../../../images/calendar.png');margin-right:15px;}
@@ -385,20 +392,22 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.fc-state-highlight{background:#eeeeec;color:#111111;}
.directory-item{float:left;margin:0 5px 4px 0;padding:3px;width:180px;height:250px;position:relative;}
#group-sidebar{margin-bottom:10px;}
-.group-selected,.nets-selected,.fileas-selected{padding:3px;color:#eeeeec;background:#3465a4;border:1px solid #3465a4;}
-.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{padding:3px;color:#eeeeec;background:#f2f2c3;border:1px solid #3465a4;}
+.categories-selected,.group-selected,.nets-selected,.fileas-selected{color:#111111;background:#2e3436;color:#eeeeec;border:1px solid #284d7d;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.categories-selected:hover,.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{background:#f2f2c3;color:#111111;border:1px solid #284d7d;}
+.categories-selected a,.group-selected a,.nets-selected a,.fileas-selected a{color:#eeeeec;text-decoration:none;}
.groupsideedit{margin-right:10px;}
#sidebar-group-ul{padding-left:0;}
#sidebar-group-list{margin:0 0 5px 0;}#sidebar-group-list li{margin-top:10px;}
#sidebar-group-list .icon{display:inline-block;width:12px;height:12px;}
-.sidebar-group-element{padding:3px;}.sidebar-group-element:hover{color:#111111;background:#f2f2c3;font-weight:bold;padding:3px;}
-#sidebar-new-group{margin:auto;display:inline-block;color:#999999;text-decoration:none;text-align:center;}
+.sidebar-group-element{border:1px solid #284d7d;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.sidebar-group-element:active,.sidebar-group-element:hover{background:#f2f2c3;color:#111111;border:1px solid #284d7d;}
+.sidebar-group-element a{border:0;text-decoration:none;}
+#sidebar-new-group{margin:auto;display:inline-block;color:#eeeeec;text-decoration:none;text-align:center;}
#peoplefind-sidebar form{margin-bottom:10px;}
#sidebar-new-group:hover{}
#sidebar-new-group:active{position:relative;top:1px;}
-#side-peoplefind-url{background-color:#eeeeec;color:#111111;border:1px solid #444444;margin-right:3px;width:75%;}#side-peoplefind-url:hover,#side-peoplefind-url:focus{background-color:#999999;color:#000000;border:1px solid #000000;}
-.nets-ul{margin:0px;padding:0px;list-style:none;list-style-position:inside;}.nets-ul li{margin:10px 0 0;}
-.nets-link,.nets-all{margin-left:0px;}
+#side-peoplefind-url{border:1px solid #666666;margin-right:3px;width:75%;}
+.categories-ul,.nets-ul{margin:0px;padding:0px;list-style:none;list-style-position:inside;}.categories-ul li,.nets-ul li{margin:10px 0 0;}
+.categories-link,.nets-link,.nets-all{border:1px solid #284d7d;padding:4px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;margin-left:0px;}.categories-link:active,.nets-link:active,.nets-all:active,.categories-link:hover,.nets-link:hover,.nets-all:hover{background:#f2f2c3;color:#111111;border:1px solid #284d7d;}
+.categories-link a,.nets-link a,.nets-all a{border:0;text-decoration:none;}
#netsearch-box{margin:20px 0px 30px;width:135px;}#netsearch-box #search-submit{margin:5px 5px 0px 0px;}
#pending-update{float:right;color:white;font-weight:bold;background-color:red;padding:0 0.3em;}
.admin.linklist{border:0;padding:0;}
@@ -406,22 +415,21 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
#adminpage{color:#111111;background:#eeeeec;margin:5px;padding:10px;font-size:smaller;}#adminpage dl{clear:left;margin-bottom:2px;padding-bottom:2px;border-bottom:1px solid #111111;}
#adminpage dt{width:250px;float:left;font-weight:bold;}
#adminpage dd{margin-left:250px;}
-#adminpage h3{border-bottom:1px solid #777777;}
+#adminpage h3{border-bottom:1px solid #cccccc;}
#adminpage .submit{clear:left;}
#adminpage #pluginslist{margin:0;padding:0;}
-#adminpage .plugin{display:block;border:1px solid #333333;padding:1em;margin-bottom:5px;clear:left;}
+#adminpage .plugin{display:block;border:1px solid #888888;padding:1em;margin-bottom:5px;clear:left;}
#adminpage .toggleplugin{float:left;margin-right:1em;}
#adminpage table{width:100%;border-bottom:1px solid #111111;margin:5px 0;}#adminpage table th{font-weight:bold;text-align:left;}
#adminpage table td{padding:5px;vertical-align:middle;}
-#adminpage table#users{padding:5px;}
-#adminpage table#users img{width:16px;height:16px;}
+#adminpage table#users{padding:5px;}#adminpage table#users img{width:16px;height:16px;}
#adminpage table#users a{color:#111111;text-decoration:underline;}
#adminpage td .icon{float:left;}
#adminpage .selectall{text-align:right;}
#users .name{color:#111111;}
#users .tools{padding:5px 0;vertical-align:middle;}
.field{overflow:auto;}
-.field .onoff{float:right;margin:0 330px 0 auto;width:80px;}.field .onoff a{display:block;border:1px solid #111111;padding:3px 6px 4px 10px;height:16px;text-decoration:none;}
+.field .onoff{float:right;margin:0 330px 0 auto;width:80px;}.field .onoff a{display:block;border:1px solid #666666;padding:3px 6px 4px 10px;height:16px;text-decoration:none;}
.field .onoff .on,.field .onoff .off{background-image:url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAUACIDASIAAhEBAxEB/8QAGgABAQACAwAAAAAAAAAAAAAAAAQDBQEGCf/EACgQAAIBAwIFAwUAAAAAAAAAAAECAAMEERIUBRMxUpEhIoEjM1Nxkv/EABcBAAMBAAAAAAAAAAAAAAAAAAABAgT/xAAaEQEAAgMBAAAAAAAAAAAAAAAAAQIRMVES/9oADAMBAAIRAxEAPwD1ERKFNFVaNNVUYACgACcNVt1dEKUwzZwNI9cSDczDVdnuKDjomrPyJOQ2SXNq/L0rTPMzp9vXHWZfo/jT+RNFQV6e2yPt6s/Ms3EWQofhnDqjszWFqzMcljRUknxEn3ES/dup8xxPZ0hXtKFViQzorEDpkiZtqvc3mIkzs40bVe5vMbVe5vMREbrN3xy4t7utSVaZVHZQSDnAP7iIm+K1xpkm09f/2Q==');background-repeat:no-repeat;}
.field .onoff .on{background-position:42px 1px;background-color:#333333;color:#cccccc;text-align:left;}
.field .onoff .off{background-position:2px 1px;background-color:#cccccc;color:#333333;text-align:right;}
@@ -429,21 +437,23 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.field textarea{width:80%;height:100px;}
.field_help{display:block;margin-left:297px;color:#666666;font-size:small;}
.field.radio .field_help{margin-left:297px;}
-.popup{width:100%;height:100%;top:0px;left:0px;position:absolute;display:none;}.popup .background{background-color:#000000;opacity:0.5;width:100%;height:100%;position:absolute;top:0px;left:0px;}
+.popup{width:100%;height:100%;top:0px;left:0px;position:absolute;display:none;}.popup .background{background-color:#111111;opacity:0.5;width:100%;height:100%;position:absolute;top:0px;left:0px;}
.popup .panel{top:25%;left:25%;width:50%;height:50%;padding:1em;position:absolute;border:4px solid #000000;background-color:white;}
-#panel{z-index:100;}
+#panel{position:absolute;font-size:small;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;border:1px solid #eeeeec;background-color:#2e3436;color:#eeeeec;padding:1em;z-index:100;}
+.pager{margin-top:60px;display:block;clear:both;text-align:center;font-size:small;font-weight:bold;}.pager span{padding:4px;margin:4px;}
+.pager_current{background-color:#3465a4;color:#eeeeec;}
.grey,.gray{color:gray;}
.orange{color:orange;}
.red{color:red;}
.popup .panel .panel_text{display:block;overflow:auto;height:80%;}
.popup .panel .panel_in{width:100%;height:100%;position:relative;}
.popup .panel .panel_actions{width:100%;bottom:4px;left:0px;position:absolute;}
-.panel_text .progress{width:50%;overflow:hidden;height:auto;border:1px solid #777777;margin-bottom:5px;}.panel_text .progress span{float:right;display:block;width:25%;background-color:#eeeeec;text-align:right;}
-.oauthapp{height:auto;overflow:auto;border-bottom:2px solid #777777;padding-bottom:1em;margin-bottom:1em;}.oauthapp img{float:left;width:48px;height:48px;margin:10px;}.oauthapp img.noicon{background-image:url("../../../images/icons/48/plugin.png");background-position:center center;background-repeat:no-repeat;}
+.panel_text .progress{width:50%;overflow:hidden;height:auto;border:1px solid #cccccc;margin-bottom:5px;}.panel_text .progress span{float:right;display:block;width:25%;background-color:#eeeeec;text-align:right;}
+.oauthapp{height:auto;overflow:auto;border-bottom:2px solid #cccccc;padding-bottom:1em;margin-bottom:1em;}.oauthapp img{float:left;width:48px;height:48px;margin:10px;}.oauthapp img.noicon{background-image:url("../../../images/icons/48/plugin.png");background-position:center center;background-repeat:no-repeat;}
.oauthapp a{float:left;}
.iconspacer{display:block;width:16px;height:16px;}
-.icon{display:block;width:20px;height:20px;background:url(light/icons.png) no-repeat;border:0;text-decoration:none;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.icon:hover{border:0;text-decoration:none;}
-.editicon{display:inline-block;width:21px;height:21px;background:url(light/editicons.png) no-repeat;border:0;text-decoration:none;}
+.icon{display:block;width:20px;height:20px;background:transparent url("light/icons.png") no-repeat;border:0;text-decoration:none;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;}.icon:hover{border:0;text-decoration:none;}
+.editicon{display:inline-block;width:21px;height:21px;background:url("light/editicons.png") no-repeat;border:0;text-decoration:none;}
.shadow{-moz-box-shadow:2px 2px 5px 2px #111111;-o-box-shadow:2px 2px 5px 2px #111111;-webkit-box-shadow:2px 2px 5px 2px #111111;-ms-box-shadow:2px 2px 5px 2px #111111;box-shadow:2px 2px 5px 2px #111111;}.shadow:active,.shadow:focus,.shadow:hover{-moz-box-shadow:0 0 0 0 #111111;-o-box-shadow:0 0 0 0 #111111;-webkit-box-shadow:0 0 0 0 #111111;-ms-box-shadow:0 0 0 0 #111111;box-shadow:0 0 0 0 #111111;}
.editicon:hover{border:0;}
.boldbb{background-position:0px 0px;}.boldbb:hover{background-position:-22px 0px;}
@@ -507,11 +517,12 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le
.type-unkn{background-position:-80px 0;}
.cc-license{margin-top:100px;font-size:0.7em;}
footer{display:block;clear:both;}
+#sectionfooter{margin:1em 0 1em 0;}
#profile-jot-text{height:20px;color:#666666;background:#cccccc;border:1px solid #111111;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;width:99.5%;}
#photo-edit-perms-select,#photos-upload-permissions-wrapper,#profile-jot-acl-wrapper{display:block !important;background:#eeeeec;color:#111111;}
-#profile-jot-acl-wrapper{margin:0 10px;border:1px solid #555753;border-top:0;}
+#profile-jot-acl-wrapper{margin:0 10px;border:1px solid #555753;border-top:0;font-size:small;}
#acl-wrapper{width:660px;margin:0 auto;}
-#acl-search{float:right;background:#ffffff url("../../../images/search_18.png") no-repeat right center;padding-right:20px;margin:6px;color:#eeeeec;}
+#acl-search{float:right;background:#ffffff url("../../../images/search_18.png") no-repeat right center;padding-right:20px;margin:6px;color:#111111;}
#acl-showall{float:left;display:block;width:auto;height:18px;background:#eeeeec url("../../../images/show_all_off.png") 8px 8px no-repeat;padding:7px 10px 7px 30px;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;color:#999999;margin:5px 0;}#acl-showall.selected{color:black;background:#ff9900 url(../../../images/show_all_on.png) 8px 8px no-repeat;}
#acl-list{height:210px;border:1px solid #cccccc;clear:both;margin-top:30px;overflow:auto;}
.acl-list-item{border:1px solid #cccccc;width:120px;height:110px;display:block;float:left;margin:3px 0 5px 5px;}.acl-list-item img{width:22px;height:22px;float:left;margin:5px 5px 20px;}
diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less
index 170b5e23c..ba8e0093b 100644
--- a/view/theme/dispy/light/style.less
+++ b/view/theme/dispy/light/style.less
@@ -62,7 +62,7 @@ input,
select,
textarea {
color: @main_colour;
- background-color: @bg_colour;
+ background-color: white;
}
select {
.borders(1px, dotted, darken(@main_alt_colour, 26.8%));
@@ -91,17 +91,20 @@ tr:nth-child(even) {
//outline-style Sets the style of an outline dotted,dashed,solid,double,groove,ridge,inset,outset,inherit
//outline-width Sets the width of an outline thin,medium,thick,length,inherit
:focus {
+ outline: none;
+}
+a:focus {
outline: invert, dashed, thin;
}
[disabled="disabled"] {
- background: @med_bg_colour;//#ddd
- color: @disabled_colour;//#333
+ background: @dk_bg_colour;
+ color: @disabled_colour;
}
///* remember to highlight inserts somehow! */
ins,
mark {
- background-color: @bg_alt_colour;//#ff9
- color: @lt_main_colour;//#000
+ background-color: @bg_colour;
+ color: @main_colour;
}
ins {
text-decoration: none;
@@ -175,31 +178,38 @@ a {
}
}
blockquote {
- background: darken(@main_alt_colour, 66.5%);
+ background: lighten(@main_alt_colour, 6.5%);
color: @main_colour;
text-indent: 5px;
padding: 5px;
- .borders(1px, solid, darken(@main_alt_colour, 33%));//#aaa
+ .borders(1px, solid, @main_colour);
.rounded_corners;
}
-label {
+.label () {
width: 38%;
display: inline-block;
font-size: small;
margin: 0 10px 1em 0;
.borders(1px, solid, @bg_colour);
- padding: 5px;
+ padding: 3px 5px;
background: lighten(@main_alt_colour, 20%);
color: @main_colour;
.box_shadow(3px, 3px, 5px);
}
+label {
+ .label;
+}
input {
.box(250px, 25px);
.borders(1px, solid, darken(@main_alt_colour, 33.5%));
+ width: 17em;
&[type="checkbox"],
&[type="radio"] {
- margin: 0;
.box(15px, 15px);
+ margin: 0;
+ }
+ &[type="radio"] {
+ margin: 5px 0;
}
&[type="submit"],
&[type="button"] {
@@ -261,30 +271,6 @@ h6 {
.smalltext {
font-size: 0.7em;
}
-#panel {
- position: absolute;
- .rounded_corners;
- .borders(1px, solid, @main_alt_colour);//#fff
- background-color: @bg_alt_colour;//#2e3436
- color: @main_colour;//#eec
- padding: 1em;
-}
-.pager {
- margin-top: 60px;
- display: block;
- clear: both;
- text-align: center;
- font-size: small;
- font-weight: bold;
- span {
- padding: 4px;
- margin: 4px;
- }
-}
-.pager_current {
- background-color: @link_colour;
- color: @bg_colour;//#fff
-}
/**
@@ -302,10 +288,35 @@ h6 {
.box(100%, 100%);
margin: 0 auto;
}
+.button {
+ // .box(25%, auto);
+ // background: @menu_bg_colour;
+ color: @main_colour;
+ // .borders(2px, outset, darken(@menu_bg_colour, 20%));
+ .rounded_corners;
+ padding: 5px;
+ // font-size: smaller;
+ cursor: pointer;
+ // &.active {
+ // .box_shadow(4px, 4px, 7px);
+ // }
+ a {
+ color: @main_colour;
+ // font-size: smaller;
+ font-weight: bold;
+ }
+}
+#profile-listing-desc {
+ a {
+ color: @bg_colour;
+ font-weight: bold;
+ }
+}
[class$="-desc"],
[id$="-desc"] {
color: @bg_colour;
background: @dk_bg_colour;
+ .borders(2px, outset, @main_colour);
.rounded_corners;
// .box_shadow(3px, 3px, 5px);
margin: 3px 10px 7px 0;
@@ -346,6 +357,11 @@ h6 {
font-style: italic;
font-size: smaller;
}
+.like-rotator {
+ vertical-align: middle;
+ text-align: center;
+ margin: 1px;
+}
/**
@@ -449,9 +465,11 @@ ul#user-menu-popup {
a {
display: block;
padding: 5px;
+ color: @bg_colour;
+ background-color: @menu_bg_colour;
&:hover {
- color: @dk_bg_colour;
- background-color: @bg_colour;
+ color: @bg_colour;
+ background-color: @main_colour;
}
&.nav-sep {
border-top: 1px solid @bg_alt_colour; } } }
@@ -501,7 +519,8 @@ nav .nav-link {
background-position: -44px -190px;
}
}
-#nav-login-link, #nav-logout-link {
+#nav-login-link,
+#nav-logout-link {
background-position: 0 -88px;
&:hover {
background-position: -22px -88px;
@@ -568,6 +587,9 @@ div.jGrowl div {
padding-left: 58px;
margin-top: 50px;
}
+ // &.jGrowl-message {
+
+ // }
}
#nav-notifications-menu {
margin: 30px 0 0 -20px;
@@ -614,11 +636,11 @@ nav #nav-notifications-linkmenu {
top: 20px;
right: 1%;
padding: 5px;
- background: @dk_bg_colour;//#2e3436
+ background: @dk_bg_colour;
color: transparent;
.rounded_corners;
z-index: 100;
- .box(300px, 60px);
+ .box(270px, 60px);
}
#nav-buttons {
clear: both;
@@ -653,13 +675,20 @@ nav #nav-notifications-linkmenu {
background: @dk_bg_colour;
.rounded_corners;
}
+#search-text,
+#mini-search-text {
+ background: white;
+ color: @main_colour;
+}
#search-text {
- .borders(1px, solid, @bg_colour);
- background: @bg_colour;
- color: @dk_bg_colour;
+ .borders(1px, solid, @main_alt_colour);
+ margin: 5px 0;
+}
+#mini-search-text {
font-size: 8pt;
- margin: 8px;
- .box(10em, 14px);
+ height: 14px;
+ width: 10em;
+ margin: 5px;
}
#scrollup {
position: fixed;
@@ -674,7 +703,7 @@ nav #nav-notifications-linkmenu {
#user-menu {
.box_shadow(5px, 0, 10px, 0);
display: block;
- width: 75%;
+ width: 80%;
margin: 3px 0 0 0;
position: relative;
.rounded_corners;
@@ -745,25 +774,29 @@ nav #nav-notifications-linkmenu {
.menu-popup {
position: absolute;
display: none;
- width: 11em;
+ // width: 11em;
background: white;
- color: @bg_colour;//#2d2d2d
+ color: @main_colour;
margin: 0px;
padding: 0px;
- .borders(3px, solid, @shiny_colour);//#364e59
+ font-size: small;
+ line-height: 1.2;
+ .borders(3px, solid, @link_colour);
+ .rounded_corners;
z-index: 100000;
.box_shadow;
a {
display: block;
- color: @bg_colour;//#2d2d2d
+ color: @main_colour;
padding: 5px 10px;
text-decoration: none;
&:hover {
- background-color: lighten(@shiny_colour, 55%);//#bdcdd4
+ color: @bg_colour;
+ background-color: @link_colour;
}
}
.menu-sep {
- border-top: 1px solid @med_bg_colour;//#9eabb0
+ border-top: 1px solid @med_bg_colour;
}
li {
float: none;
@@ -779,7 +812,7 @@ nav #nav-notifications-linkmenu {
.empty {
padding: 5px;
text-align: center;
- color: lighten(@shiny_colour, 45%);//#9eabb0
+ color: lighten(@shiny_colour, 45%);
}
}
.notif-item {
@@ -793,7 +826,11 @@ nav #nav-notifications-linkmenu {
padding: 7px 7px 0px 0px;
}
.notify-seen {
- background: darken(@main_alt_colour, 20%);//#ddd
+ background: @disabled_colour;
+ color: @main_colour;
+}
+.notify-unseen {
+ color: @main_colour;
}
@@ -805,8 +842,8 @@ nav #nav-notifications-linkmenu {
bottom: 0;
.box_shadow(@main_shadow);
padding: 10px;
- background-color: @lt_orange;//#fcaf3e
- .borders(2px, solid, @orange);//#f8911b
+ background-color: @lt_orange;
+ .borders(2px, solid, @orange);
border-bottom: 0;
padding-bottom: 50px;
z-index: 1000;
@@ -826,7 +863,7 @@ nav #nav-notifications-linkmenu {
#sysmsg br {
display: block;
margin: 2px 0px;
- border-top: 1px solid @main_colour;//#ccccce
+ border-top: 1px solid @bg_colour;
}
@@ -836,7 +873,7 @@ nav #nav-notifications-linkmenu {
#asidemain {
float: left;
font-size: small;
- margin: 20px 0 20px 35px;
+ margin: 1em;
width: 25%;
display: inline;
}
@@ -852,10 +889,12 @@ nav #nav-notifications-linkmenu {
padding-bottom: 3px;
}
#profile-photo-wrapper {
- margin: 20px;
- img {
- .box_shadow(3px, 3px, 10px, 0);
- }
+ margin: 20px 0;
+ background-color: @menu_bg_colour;
+ padding: 5px;
+ .box(175px, 175px);
+ .rounded_corners;
+ .box_shadow(3px, 3px, 10px, 0);
}
}
#asidemain {
@@ -876,8 +915,8 @@ nav #nav-notifications-linkmenu {
position: relative; } } }
}
.aprofile dt {
- background: @main_colour;//transp.
- color: @bg_colour;//#666666
+ background: transparent;
+ color: darken(@main_alt_colour, 20%);
font-weight: bold;
.box_shadow(3px, 3px, 5px);
.rounded_corners;
@@ -891,11 +930,11 @@ nav #nav-notifications-linkmenu {
}
#dfrn-request-link {
.rounded_corners;
- color: @main_colour;
+ color: @bg_colour;
display: block;
font-size: 1.2em;
padding: 0.2em 0.5em;
- background-color: @friendica_blue;
+ background-color: @link_colour;
// background-image: url(icons/connect.png);
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE4SURBVCiRpZKxLgRRFIa//64dKruZFRIlolBviFKiVHsHrRaFikTCC+hEQtRegMQDqDUKJOPOvauSMJmjYEU2M0viT071/+fLOTlHZkadQgjLkh1LPEoj661WKw5mXG034JxtAgtmrJoVK5WZYYCy1AVQSOYbjeSqMmRmQ8v755Ne77lb5w+d4HMNJopCT7X+bwDQZKfTyf4BIAHeawHe+/kQ/FGM+QagvpFl2VSM/tyMmV7PV14AYMQ5nUp0AULIp0HXzpVvSdLYMmNVAjNdAuNAUQHgxy/ZvEQTSMw0A33DxkIIi2ma3gwC9PKSzRWF2wbdpml62DfyPF9yjlNgAnQGLJjZnXON3Xa7ff8NGPbKQPNrbAOI0a9J2ilLEzAL7P0GqJJizF+BUeDhL2cclJnZPvAg6eADf+imKjSMX1wAAAAASUVORK5CYII=");
background-repeat: no-repeat;
@@ -962,7 +1001,7 @@ nav #nav-notifications-linkmenu {
}
}
#jot-title {
- .borders(1px, solid, darken(@main_alt_colour, 13%));//#ccc
+ .borders(1px, solid, lighten(@main_alt_colour, 20%));
margin: 0 0 5px;
.box(90%, 20px);
font-weight: bold;
@@ -992,21 +1031,21 @@ nav #nav-notifications-linkmenu {
}
#profile-jot-text_tbl {
margin-bottom: 10px;
- background: darken(@main_alt_colour, 46.8%);//#777
+ background: darken(@main_alt_colour, 10%);
}
#profile-jot-text_ifr {
width: 99.900002% !important;
}
#profile-jot-text_toolbargroup, .mceCenter tr {
- background: darken(@main_alt_colour, 46.8%);//#777
+ background: darken(@main_alt_colour, 10%);
}
[id$="jot-text_ifr"] {
- width: 99.900002% !important;
- color: @bg_colour;//#2e2f2e
- background: @main_colour;//#eec
+ // width: 99.900002% !important;
+ color: @main_colour;
+ background: @bg_colour;
.mceContentBody {
- color: @bg_colour;//#2e2f2e
- background: @main_colour;//#eec
+ color: @main_colour;
+ background: @bg_colour;
}
}
.defaultSkin {
@@ -1043,7 +1082,7 @@ nav #nav-notifications-linkmenu {
}
#profile-jot-email-label {
background-color: @menu_bg_colour;
- color: @main_colour;//#ccccce
+ color: @bg_colour;
padding: 5px;
}
#profile-jot-email {
@@ -1079,11 +1118,10 @@ nav #nav-notifications-linkmenu {
#profile-jot-perms {
float: right;
color: @menu_bg_colour;
- background-color: @main_colour;
.box(20px, 20px);
.rounded_corners;
.box_shadow(3px, 3px, 5px, 0);
- .borders(2px, outset, @main_alt_colour);
+ .borders(2px, outset, @menu_bg_colour);
overflow: hidden;
margin: 0 10px 0 10px;
}
@@ -1101,9 +1139,9 @@ nav #nav-notifications-linkmenu {
#profile-jot-submit {
height: auto;
background-color: @menu_bg_colour;
- color: @main_alt_colour;//#eeeeec
+ color: @bg_colour;
.rounded_corners;
- .borders(2px, outset, @shiny_colour);
+ .borders(2px, outset, @menu_bg_colour);
margin: 0;
float: right;
.text_shadow;
@@ -1113,9 +1151,10 @@ nav #nav-notifications-linkmenu {
}
}
#jot-perms-icon {
- .box(20px, 22px);
+ .box(22px, 22px);
.rounded_corners;
overflow: hidden;
+ background: @menu_bg_colour url("dark/icons.png") -88px -40px;
}
#group_allow_wrapper,
#group_deny_wrapper,
@@ -1136,28 +1175,31 @@ nav #nav-notifications-linkmenu {
float: right;
}
#acl-permit-text {
- background-color: darken(@main_alt_colour, 60%);//@menu_bg_colour
+ background-color: @menu_bg_colour;
color: @main_colour;
padding: 5px;
float: left;
}
#jot-public {
- background-color: darken(@main_alt_colour, 60%);//@menu_bg_colour
+ background-color: @menu_bg_colour;
color: @alert;
padding: 5px;
float: left;
}
#acl-deny-text {
- background-color: darken(@main_alt_colour, 60%);//@menu_bg_colour
- color: @main_colour;//#ccccce
+ background-color: @menu_bg_colour;
+ color: @bg_colour;
padding: 5px;
float: left;
}
#jot-title-desc {
- color: darken(@main_alt_colour, 13%);//#ccc
+ color: lighten(@main_alt_colour, 20%);
}
#profile-jot-desc {
- color: @red_orange;//#a00
+ background: @bg_colour;
+ .borders;
+ .rounded_corners;
+ color: @red_orange;
margin: 5px 0;
}
#jot-title-wrapper {
@@ -1170,9 +1212,9 @@ nav #nav-notifications-linkmenu {
display: none;
}
#jot-preview-content {
- background-color: @bg_alt_colour;//@shiny_colour
+ background-color: @shiny_colour;
color: @main_colour;
- .borders(1px, solid, @main_colour);//#aa0
+ .borders(1px, solid, @main_colour);
.rounded_corners;
.box_shadow(5px, 0, 10px);
padding: 3px 3px 6px 10px;
@@ -1188,10 +1230,10 @@ nav #nav-notifications-linkmenu {
* section
*/
#sectionmain {
- margin: 20px;
+ margin: 1em;
font-size: 0.8em;
min-width: 475px;
- width: 67%;
+ width: 69%;
float: left;
display: inline;
}
@@ -1208,30 +1250,45 @@ nav #nav-notifications-linkmenu {
font-size: smaller;
}
}
-.tab {
+.multibutton () {
.borders(1px, solid, @hover_colour);
padding: 4px;
- &:hover,
- &.active:hover,
- &:active {
+ .rounded_corners;
+ &:active,
+ &:hover {
background: @shiny_colour;
color: @main_colour;
.borders(1px, solid, @hover_colour);
}
- &.active {
- background: @main_colour;
- color: @bg_colour;
+ a {
+ border: 0;
+ text-decoration: none;
+ }
+}
+.multibutton_active () {
+ background: @dk_bg_colour;
+ color: @bg_colour;
+ .borders(1px, solid, @hover_colour);
+ padding: 4px;
+ .rounded_corners;
+ &:hover {
+ background: @shiny_colour;
+ color: @main_colour;
.borders(1px, solid, @hover_colour);
- a {
- color: @bg_colour;
- text-decoration: none;
- }
}
a {
- border: 0;
+ color: @bg_colour;
text-decoration: none;
}
}
+.tab {
+ .multibutton;
+}
+.tab {
+ &.active {
+ .multibutton_active;
+ }
+}
/**
@@ -1252,6 +1309,10 @@ nav #nav-notifications-linkmenu {
}
.wall-item-outside-wrapper .wall-item-comment-wrapper {
/*margin-left: 90px;*/
+ .preview {
+ border: 0;
+ .rounded_corners(0px);
+ }
}
.shiny {
background: @shiny_colour;
@@ -1288,7 +1349,8 @@ nav #nav-notifications-linkmenu {
}
.wall-item-info {
float: left;
- width: 110px;
+ width: 7em;
+ position: relative;
}
.wall-item-photo-wrapper {
.box(80px, 80px);
@@ -1344,7 +1406,7 @@ nav #nav-notifications-linkmenu {
.wall-item-like {
clear: left;
font-size: 0.8em;
- color: lighten(@menu_bg_colour, 20%);
+ color: @main_colour;
margin: 5px 0 5px 10.2em;
.transition;
opacity: 0.5;
@@ -1353,26 +1415,34 @@ nav #nav-notifications-linkmenu {
}
}
.wall-item-author,
-.wall-item-actions-author {
- clear: left;
- float: left;
- font-size: 0.8em;
- color: lighten(@menu_bg_colour, 20%);
- margin: 1em auto 0 0.2em;
-}
+.wall-item-actions-author,
.wall-item-ago {
- display: inline;
- padding-left: 10px;
+ color: @main_colour;
+ line-height: 1;
+ display: inline-block;
+ font-size: x-small;
+ margin: 0.5em auto;
+ font-weight: bold;
+}
+.comment-edit-preview {
+ width: auto;
+ margin: auto auto auto -2em;
+ &.wall-item-author,
+ &.wall-item-actions-author,
+ &.wall-item-ago {
+ font-size: smaller;
+ }
}
.wall-item-location {
- margin-top: 15px;
- width: 100px;
+ margin-top: 2em;
+ width: 6em;
overflow: hidden;
.text_overflow;
.icon {
float: left;
}
- > a, .smalltext {
+ > a,
+ .smalltext {
margin-left: 25px;
font-size: 0.7em;
display: block;
@@ -1406,7 +1476,8 @@ nav #nav-notifications-linkmenu {
}
.wall-item-photo-menu {
min-width: 92px;
- .borders(2px, solid, white);
+ font-size: 0.75em;
+ .borders(2px, solid, @menu_bg_colour);
border-top: 0px;
background: @menu_bg_colour;
position: absolute;
@@ -1418,11 +1489,11 @@ nav #nav-notifications-linkmenu {
li a {
white-space: nowrap;
display: block;
- padding: 5px 2px;
- color: @main_alt_colour;//#eeeeec
+ padding: 5px 6px;
+ color: @bg_colour;
&:hover {
color: @menu_bg_colour;
- background: @main_alt_colour;//#eeeeec
+ background: @bg_colour;
}
}
}
@@ -1431,12 +1502,16 @@ nav #nav-notifications-linkmenu {
width: 100%;
}
#connect-services-header,
+#extra-help-header {
+ margin: 1.5em 0 0 0;
+}
#connect-services,
-#extra-help-header,
-#extra-help,
-#postit-header,
-#postit {
- margin: 5px 0 0 0;
+#extra-help {
+ .list_reset;
+ margin: 1em 0 0 0;
+ li {
+ display: inline;
+ }
}
@@ -1447,8 +1522,14 @@ nav #nav-notifications-linkmenu {
font-size: 0.9em;
margin-left: 5em;
}
+.hide-comments-outer {
+ font-size: small;
+}
.wall-item-outside-wrapper.comment {
margin-left: 5em;
+ .wall-item-info {
+ width: 5em;
+ }
.wall-item-photo {
width: 40px !important;
height: 40px !important;
@@ -1457,26 +1538,22 @@ nav #nav-notifications-linkmenu {
.box(40px, 40px);
}
.wall-item-photo-menu-button {
- width: 50px;
- top: 45px;
+ width: 3.35em;
+ top: 3.2em;
background-position: 35px center;
}
- .wall-item-info {
- width: 60px;
- }
- .wall-item-body {
- margin-left: 10px;
- }
.wall-item-author {
margin-left: 0.2em;
}
.wall-item-photo-menu {
- min-width: 50px;
- top: 60px;
+ min-width: 4.5em;
+ top: 5.5em;
}
}
.comment-wwedit-wrapper {
- /*margin: 30px 0px 0px 80px;*/
+ .borders(1px, solid, @main_colour);
+ .rounded_corners;
+ margin: 5px;
}
.comment-edit-wrapper {
border-top: 1px #aaa solid;
@@ -1531,7 +1608,7 @@ nav #nav-notifications-linkmenu {
.comment-edit-submit {
height: 22px;
background-color: @menu_bg_colour;
- color: @main_alt_colour;//#eeeeec
+ color: @bg_colour;
.rounded_corners;
border: 0;
}
@@ -1541,11 +1618,11 @@ nav #nav-notifications-linkmenu {
* item text style
*/
.wall-item-body code {
- background-color: lighten(@main_alt_colour, 66.5%);//@bg_colour
- border-bottom: 1px dashed lighten(@main_alt_colour, 13.5%);//#ccc
- border-left: 5px solid lighten(@main_alt_colour, 13.5%);//#ccc
- border-top: 1px dashed lighten(@main_alt_colour, 13.5%);//#ccc
- color: darken(@main_alt_colour, 5%);
+ background-color: lighten(@main_alt_colour, 26.5%);
+ border-bottom: 1px dashed darken(@main_alt_colour, 6.5%);
+ border-left: 5px solid darken(@main_alt_colour, 6.5%);
+ border-top: 1px dashed darken(@main_alt_colour, 6.5%);
+ color: darken(@main_alt_colour, 50%);
display: block;
overflow-x: auto;
padding: 5px 0 15px 10px;
@@ -1562,11 +1639,10 @@ nav #nav-notifications-linkmenu {
div {
&[id$="text"] {
font-weight: bold;
- border-bottom: 1px solid darken(@main_alt_colour, 13.5%);//#ccc
+ border-bottom: 1px solid @bg_colour;
}
&[id$="wrapper"] {
height: 100%;
- margin-bottom: 1em;
br {
clear: left;
}
@@ -1619,17 +1695,17 @@ div {
.photo-top-image-wrapper {
float: left;
.box_shadow(3px, 3px, 10px, 0);
- background-color: darken(@main_alt_colour, 80%);//@bg_colour
- color: @bg_colour;//@main_colour
+ background-color: @bg_colour;
+ color: @main_colour;
.rounded_corners;
padding-bottom: 30px;
position: relative;
margin: 0 10px 10px 0;
}
#photo-photo {
- max-width: 100%;
+ margin: auto auto 5em 20%;
img {
- max-width: 100%;
+ max-width: 50%;
}
}
.photo-top-image-wrapper a:hover,
@@ -1637,7 +1713,8 @@ div {
.photo-album-image-wrapper a:hover {
border-bottom: 0;
}
-.photo-top-photo, .photo-album-photo {
+.photo-top-photo,
+.photo-album-photo {
.rounded_corners(5px 5px 0 0);
}
.photo-top-album-name,
@@ -1646,21 +1723,16 @@ div {
bottom: 0;
padding: 0 5px;
}
-#photo-photo {
- position: relative;
- // float: left;
- margin: 5px 45%;
-}
#photo-prev-link,
#photo-next-link {
position: absolute;
// .box(30%, 100%);
- .box(50px, 150px);
+ .box(50px, 200px);
background: white center center no-repeat;
opacity: 0;
.transition(all, 0.5s);
z-index: 10;
- top: 175px;
+ top: 15em;
.rounded_corners;
&:hover {
opacity: 0.6;
@@ -1673,12 +1745,12 @@ div {
#photo-prev-link {
// background-image: url(light/prev.png);
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAALpQTFRF////AAAAQEBAZmZmVVVVSUlJTU1NXV1dVVVVTk5OW1tbWlpaWFhPWFhQU1pTVVVVVlZSVVlRVlZTVFdUVFdUVVdTVFZSVldUVldSVldSVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVhTVVdTVVdTVVdTVVdT3XYY/AAAAD10Uk5TAAEEBQYHCgsMDQ4RHSAlP0FFR1hee3+JnqSqq6ytrq+wsbKztLW2t7y9vr/AwcLDxMXGx8jU1dng7O/3+TmOwVsAAADASURBVCjPddPXEoIwEAXQINh7Q8WKYu+95v9/S0dxZxNy83hgMpvdu0Jox642r25GVxGfys+5540sZV3jyY/lWeVxyDLg7AR/lhXOI+KZZeRFgvGQeMnY9olXScYD4jXnPvHGzNsU4x7xjnGsa+YO8T7NnukRHzgXiY/KNKiUkzqkZ8ivnDoKD/xfBvdbbXM9sH70Xtgf2E/YfzgvOF+YB5gf5cPcAfmsgTy3QP5vYF8akf36XvXIRhZPlPyLWxBvNENWsZXDKukAAAAASUVORK5CYII=");
- left: 22%;
+ left: 5%;
}
#photo-next-link {
// background-image: url(light/next.png);
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAnCAMAAADTjiM/AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAKVQTFRF////gICAQEBAZmZmVVVVSUlJYGBgVVVVTU1NXV1dVVVVWVlZU1hTVlZSVlZTVlZTVVlRVVhSVFdUVlhTVVdTVFZTVVdTVldTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVZUVVdTVVdTVVhSVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdTVVdT8E3YQQAAADZ0Uk5TAAIEBQYHCAkKCwwUN0FER0hOW2uNjqWqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCxcjT3PP3B0dhfwAAANlJREFUKM910+cSgjAQRtEIomAXu4iIYge7ef9Hs+ZzN4b9eW4mk1kGIaqdU9wQf2Nf5XPSiu4d+Z6jp/n54/KghZ40h5ZymbFQGCCkLg3WKC+MEfYs2AHCrszCBGHLQ5gXpggbFooRwrrEwgxhxUOcE5w5wtJiYYHQZjt0EuUhX3r19vU7Y++ozgeMD7i/buYhYTcDj8gz3RQ8prwHB/aPyzvwhPLWzBtwSLi0Bk8pr8BR0cgzwiIycw0cUxZ9xXOH7VZ9vAVn4X840Vh4F9Pp1w/gZ92mpesDuLpM+1blc68AAAAASUVORK5CYII=");
- left: 44%;
+ left: 50%;
}
#photo-prev-link a,
#photo-next-link a {
@@ -1709,21 +1781,35 @@ div {
#photo-edit-caption,
#photo-edit-newtag,
#photo-edit-albumname {
- float: left;
- margin-bottom: 25px;
+
}
#photo-edit-link-wrap {
margin-bottom: 15px;
}
#photo-edit-caption,
#photo-edit-newtag {
- width: 100%;
+
+}
+#photo-edit-perms {
+ width: auto;
+}
+#photo-edit-rotate-label {
+ .label;
}
#photo-like-div {
- margin-bottom: 25px;
+ float: left;
+ margin: auto 0 0;
+ width: 2em;
+ .rounded_corners;
+ .borders;
+}
+.wall-item-like-buttons {
+ > * {
+ display: inline;
+ }
}
#photo-edit-delete-button {
- margin-left: 200px;
+ margin: auto auto auto 1em;
}
#photo-edit-end {
margin-bottom: 35px;
@@ -1734,6 +1820,10 @@ div {
margin-top: 15px;
margin-bottom: 15px;
}
+#wall-photo-container {
+ margin: 0 auto 1em 4em;
+ width: 90%;
+}
/**
@@ -1904,11 +1994,6 @@ div {
#contact-edit-poll-text {
display: inline;
}
-#contact-edit-info_tbl,
-#contact-edit-info_parent,
-.mceLayout {
- width: 100%;
-}
#contact-edit-end {
clear: both;
margin-bottom: 65px;
@@ -1927,20 +2012,25 @@ div {
}
.contact-photo-menu {
width: auto;
- .borders(2px, solid, darken(@main_alt_colour, 66.5%));//#444
+ .borders(2px, solid, @link_colour);
background: @bg_colour;
color: @main_colour;
position: absolute;
+ font-size: smaller;
+ .rounded_corners;
left: 0px;
top: 90px;
display: none;
z-index: 10000;
li a {
display: block;
- padding: 2px;
+ padding: 4px;
+ color: @link_colour;
+ background: @bg_colour;
+ line-height: 1;
&:hover {
- color: white;
- background: #3465A4;
+ background: @link_colour;
+ color: @bg_colour;
text-decoration: none;
}
}
@@ -1972,13 +2062,12 @@ div {
}
#register-form label,
#profile-edit-form label {
- width: 300px;
- float: left;
+ width: 23em;
}
#register-form span,
#profile-edit-form span {
color: @menu_bg_colour;
- display: block;
+ display: inline-block;
margin-bottom: 20px;
}
#profile-edit-marital-label span {
@@ -1991,12 +2080,6 @@ div {
.profile-edit-side-div {
display: none;
}
-/*.profile-edit-side-div:hover {
- display: block;
-}
-.profile-edit-side-link {
- margin: 3px 0px 0px 70px;
-}*/
#profiles-menu-trigger {
margin: 0px 0px 0px 25px;
}
@@ -2027,8 +2110,8 @@ div {
font-weight: bold;
}
#advanced-expire-popup {
- background: @bg_colour;//#2e2f2e
- color: @main_colour;//#eec
+ background: @main_colour;
+ color: @bg_colour;
}
#id_ssl_policy {
width: 374px;
@@ -2068,7 +2151,7 @@ div {
#group-all-contacts h3,
#prof-members h3,
#prof-all-contacts h3 {
- color: @main_alt_colour;//#eeeeec
+ color: @bg_colour;
background-color: @menu_bg_colour;
margin: 0;
padding: 5px;
@@ -2148,7 +2231,7 @@ div {
background: @bg_colour;
}
.vevent {
- border: 1px solid darken(@main_alt_colour, 13.5%);//#ccc
+ border: 1px solid @bg_colour;
.event-description,
.event-location,
.event-start {
@@ -2266,8 +2349,6 @@ div {
.fc-state-highlight {
background: @bg_colour;
color: @main_colour;
- //background: #eec;
- //color: #2e2f2e;
}
@@ -2290,21 +2371,24 @@ div {
#group-sidebar {
margin-bottom: 10px;
}
+.categories-selected,
.group-selected,
.nets-selected,
.fileas-selected {
- padding: 3px;
- color: @bg_colour;
- background: @link_colour;
- .borders(1px, solid, @link_colour);
+ // padding: 4px;
+ color: @main_colour;
+ // background: @dk_bg_colour;
+ // .borders(1px, solid, @hover_colour);
+ .multibutton_active;
}
+.categories-selected:hover,
.group-selected:hover,
.nets-selected:hover,
.fileas-selected:hover {
- padding: 3px;
- color: @bg_colour;
- background: @shiny_colour;
- .borders(1px, solid, @link_colour);
+// padding: 4px;
+ // color: @link_colour;
+// background: @bg_colour;
+// .borders(1px, solid, @link_colour);
}
.groupsideedit {
margin-right: 10px;
@@ -2323,18 +2407,13 @@ div {
}
}
.sidebar-group-element {
- padding: 3px;
- &:hover {
- color: @main_colour;
- background: @shiny_colour;
- font-weight: bold;
- padding: 3px;
- }
+ .multibutton;
+ .rounded_corners;
}
#sidebar-new-group {
margin: auto;
display: inline-block;
- color: @main_alt_colour;//#efefef
+ color: @bg_colour;
text-decoration: none;
text-align: center;
}
@@ -2353,25 +2432,22 @@ div {
}
}
#side-peoplefind-url {
- background-color: @bg_colour;//#e5e0cf
- color: @main_colour;//#666
- .borders(1px, solid, darken(@main_alt_colour, 33.5%));//$666
+ .borders(1px, solid, darken(@main_alt_colour, 20%));
margin-right: 3px;
width: 75%;
- &:hover, &:focus {
- background-color: @main_alt_colour;
- color: darken(@main_alt_colour, 80%);//#efefef
- .borders(1px, solid, darken(@main_alt_colour, 73.5%));//#333
- }
}
+.categories-ul,
.nets-ul {
.list_reset;
li {
margin: 10px 0 0;
}
}
+.categories-link,
.nets-link,
.nets-all {
+ .multibutton;
+ .rounded_corners;
margin-left: 0px;
}
#netsearch-box {
@@ -2423,7 +2499,7 @@ div {
margin-left: 250px;
}
h3 {
- border-bottom: 1px solid darken(@main_alt_colour, 13.5%);//#ccc
+ border-bottom: 1px solid lighten(@main_alt_colour, 20%);
}
.submit {
clear: left;
@@ -2434,7 +2510,7 @@ div {
}
.plugin {
display: block;
- .borders(1px, solid, darken(@main_alt_colour, 40%));//#888
+ .borders(1px, solid, darken(@main_alt_colour, 6.5%));
padding: 1em;
margin-bottom: 5px;
clear: left;
@@ -2457,13 +2533,13 @@ div {
}
&#users {
padding: 5px;
- }
- &#users img {
- .box(16px, 16px);
- }
- &#users a {
- color: @main_colour;
- text-decoration: underline;
+ img {
+ .box(16px, 16px);
+ }
+ a {
+ color: @main_colour;
+ text-decoration: underline;
+ }
}
}
td .icon {
@@ -2494,7 +2570,7 @@ div {
width: 80px;
a {
display: block;
- .borders(1px, solid, darken(@main_alt_colour, 53.5%));//#666
+ .borders(1px, solid, darken(@main_alt_colour, 20%));
padding: 3px 6px 4px 10px;
height: 16px;
text-decoration: none;
@@ -2543,7 +2619,7 @@ div {
position: absolute;
display: none;
.background {
- background-color: darken(@main_alt_colour, 86.5%);//#000
+ background-color: @main_colour;
opacity: 0.5;
.box(100%, 100%);
position: absolute;
@@ -2561,9 +2637,33 @@ div {
}
}
#panel {
+ position: absolute;
+ font-size: small;
+ .rounded_corners;
+ .borders(1px, solid, @bg_colour);
+ background-color: @dk_bg_colour;
+ color: @bg_colour;
+ padding: 1em;
z-index: 100;
}
-.grey, .gray {
+.pager {
+ margin-top: 60px;
+ display: block;
+ clear: both;
+ text-align: center;
+ font-size: small;
+ font-weight: bold;
+ span {
+ padding: 4px;
+ margin: 4px;
+ }
+}
+.pager_current {
+ background-color: @link_colour;
+ color: @bg_colour;
+}
+.grey,
+.gray {
color: gray;
}
.orange {
@@ -2593,7 +2693,7 @@ div {
width: 50%;
overflow: hidden;
height: auto;
- .borders(1px, solid, darken(@main_alt_colour, 13.5%));//#ccc
+ .borders(1px, solid, lighten(@main_alt_colour, 20%));
margin-bottom: 5px;
span {
float: right;
@@ -2611,7 +2711,7 @@ div {
.oauthapp {
height: auto;
overflow: auto;
- border-bottom: 2px solid darken(@main_alt_colour, 13.5%);//#ccc
+ border-bottom: 2px solid lighten(@main_alt_colour, 20%);
padding-bottom: 1em;
margin-bottom: 1em;
img {
@@ -2640,7 +2740,7 @@ div {
.icon {
display: block;
.box;
- background: url(light/icons.png) no-repeat;
+ background: transparent url("light/icons.png") no-repeat;
border: 0;
text-decoration: none;
.rounded_corners;
@@ -2652,7 +2752,7 @@ div {
.editicon {
display: inline-block;
.box(21px, 21px);
- background: url(light/editicons.png) no-repeat;
+ background: url("light/editicons.png") no-repeat;
border: 0;
text-decoration: none;
}
@@ -2893,6 +2993,9 @@ footer {
display: block;
clear: both;
}
+#sectionfooter {
+ margin: 1em 0 1em 0;
+}
#profile-jot-text {
height: 20px;
color: darken(@main_alt_colour, 20%);
@@ -2912,13 +3015,12 @@ footer {
display: block !important;
background: @bg_colour;
color: @main_colour;
-// background: #eec;
-// color: #2e2f2e;
}
#profile-jot-acl-wrapper {
margin: 0 10px;
.borders(1px, solid, @menu_bg_colour);
border-top: 0;
+ font-size: small;
// .box_shadow;
}
#acl-wrapper {
@@ -2930,7 +3032,7 @@ footer {
background: white url("../../../images/search_18.png") no-repeat right center;
padding-right: 20px;
margin: 6px;
- color: @bg_colour;//@main_colour
+ color: @main_colour;
}
#acl-showall {
float: left;
diff --git a/view/theme/dispy/light/theme.php b/view/theme/dispy/light/theme.php
index 2b37c0671..94a699b70 100644
--- a/view/theme/dispy/light/theme.php
+++ b/view/theme/dispy/light/theme.php
@@ -1,9 +1,8 @@
<?php
/*
- * Name: Dispy
- * Description: <p style="white-space:pre;"> Dispy: Light, Spartan, Sleek, and Functional<br /> Dispy Dark: Dark, Spartan, Sleek, and Functional</p>
- * Version: 1.2
+ * Name: Dispy Light
+ * Description: Dispy Light: Light, Spartan, Sleek, and Functional
* Author: Simon <http://simon.kisikew.org/>
* Maintainer: Simon <http://simon.kisikew.org/>
* Screenshot: <a href="screenshot.jpg">Screenshot</a>
@@ -13,7 +12,6 @@ $a = get_app();
$a->theme_info = array(
'family' => 'dispy',
'name' => 'light',
- 'version' => '1.2'
);
function dispy_light_init(&$a) {
@@ -21,10 +19,10 @@ function dispy_light_init(&$a) {
/** @purpose set some theme defaults
*/
$cssFile = null;
- $colour = false;
$colour = 'light';
+ $colour_path = "/light/";
- // custom css
+ // set css
if (!is_null($cssFile)) {
$a->page['htmlhead'] .= sprintf('<link rel="stylesheet" type="text/css" href="%s" />', $cssFile);
}
diff --git a/view/theme/dispy/nav.tpl b/view/theme/dispy/nav.tpl
index 6ffd2b379..21343aea5 100644
--- a/view/theme/dispy/nav.tpl
+++ b/view/theme/dispy/nav.tpl
@@ -50,7 +50,7 @@
</ul>
<div id="user-menu">
- <a id="user-menu-label" onclick="openClose('user-menu-popup'); return false" href="$nav.home.0">$sitelocation</a>
+ <a id="user-menu-label" onclick="openClose('user-menu-popup'); return false;" href="$nav.home.0">$sitelocation</a>
<ul id="user-menu-popup"
onmouseover="if (typeof tmenu != 'undefined') clearTimeout(tmenu); openMenu('user-menu-popup')"
onmouseout="tmenu=setTimeout('closeMenu(\'user-menu-popup\');',200)">
@@ -90,7 +90,9 @@
{{ if $userinfo }}
<ul id="nav-user-menu" class="menu-popup">
{{ for $nav.usermenu as $usermenu }}
- <li><a class="$usermenu.2" href="$usermenu.0" title="$usermenu.3">$usermenu.1</a></li>
+ <li>
+ <a class="$usermenu.2" href="$usermenu.0" title="$usermenu.3">$usermenu.1</a>
+ </li>
{{ endfor }}
</ul>
{{ endif }}
@@ -121,18 +123,19 @@ $langselector
</div>
<div id="scrollup">
-<a href="#top"><img
- src="view/theme/dispy/icons/scroll_top.png"
+<a href="#top"><img src="view/theme/dispy/icons/scroll_top.png"
alt="back to top" title="Back to top" /></a>
</div>
<div class="search-box">
<form method="get" action="$nav.search.0">
- <input id="search-text" class="nav-menu-search" type="search" placeholder="Search" value="" id="search" name="search" />
+ <input id="mini-search-text" class="nav-menu-search" type="search" placeholder="Search" value="" id="search" name="search" />
</form>
</div>
<ul id="nav-notifications-template" style="display:none;" rel="template">
- <li class="{4}"><a href="{0}"><img src="{1}" height="24" width="24" alt="" />{2} <span class="notif-when">{3}</span></a></li>
+ <li class="{4}">
+ <a href="{0}"><img src="{1}" height="24" width="24" alt="" />{2} <span class="notif-when">{3}</span></a>
+ </li>
</ul>
diff --git a/view/theme/dispy/photo_edit.tpl b/view/theme/dispy/photo_edit.tpl
new file mode 100644
index 000000000..9e623ba61
--- /dev/null
+++ b/view/theme/dispy/photo_edit.tpl
@@ -0,0 +1,53 @@
+
+<form action="photos/$nickname/$resource_id" method="post" id="photo_edit_form" >
+
+ <input type="hidden" name="item_id" value="$item_id" />
+
+ <label id="photo-edit-albumname-label" for="photo-edit-albumname">$newalbum</label>
+ <input id="photo-edit-albumname" type="text" name="albname" value="$album" />
+
+ <div id="photo-edit-albumname-end"></div>
+
+ <label id="photo-edit-caption-label" for="photo-edit-caption">$capt_label</label>
+ <input id="photo-edit-caption" type="text" name="desc" value="$caption" />
+
+ <div id="photo-edit-caption-end"></div>
+
+ <label id="photo-edit-tags-label" for="photo-edit-newtag" >$tag_label</label>
+ <input name="newtag" id="photo-edit-newtag" title="$help_tags" type="text" />
+
+ <div id="photo-edit-tags-end"></div>
+ <div id="photo-edit-rotate-wrapper">
+ <div id="photo-edit-rotate-label">$rotate</div>
+ <input type="checkbox" name="rotate" value="1" />
+ </div>
+ <div id="photo-edit-rotate-end"></div>
+
+ <div id="photo-edit-perms" class="photo-edit-perms" >
+ <a href="#photo-edit-perms-select"
+ id="photo-edit-perms-menu"
+ class="button"
+ title="$permissions"/><span id="jot-perms-icon"
+ class="icon $lockstate" ></span>$permissions</a>
+ <div id="photo-edit-perms-menu-end"></div>
+
+ <div style="display: none;">
+ <div id="photo-edit-perms-select" >
+ $aclselect
+ </div>
+ </div>
+ </div>
+ <div id="photo-edit-perms-end"></div>
+
+ <input id="photo-edit-submit-button" type="submit" name="submit" value="$submit" />
+ <input id="photo-edit-delete-button" type="submit" name="delete" value="$delete" onclick="return confirmDelete()"; />
+
+ <div id="photo-edit-end"></div>
+</form>
+
+<script type="text/javascript">
+ $("a#photo-edit-perms-menu").fancybox({
+ 'transitionIn' : 'none',
+ 'transitionOut' : 'none'
+ });
+</script>
diff --git a/view/theme/dispy/screenshot.jpg b/view/theme/dispy/screenshot.jpg
new file mode 100644
index 000000000..5be4d7745
--- /dev/null
+++ b/view/theme/dispy/screenshot.jpg
Binary files differ
diff --git a/view/theme/dispy/style.php b/view/theme/dispy/style.php
index f666e2768..375651425 100644
--- a/view/theme/dispy/style.php
+++ b/view/theme/dispy/style.php
@@ -13,238 +13,94 @@
$colour = get_pconfig(local_user(), "dispy", "colour");
}
- if ($line_height === false) { $line_height = $site_line_height; }
- if ($line_height === false) { $line_height = "1.2"; }
- if ($dispy_font_size === false) { $dispy_font_size = $site_dispy_font_size; }
- if ($dispy_font_size === false) { $dispy_font_size = "12"; }
- if ($colour === false) { $colour = $site_colour; }
- if ($colour === false) { $colour = "light"; }
+ if ($line_height === false) {
+ $line_height = $site_line_height;
+ }
+ if ($line_height === false) {
+ $line_height = "1.2";
+ }
+ if ($dispy_font_size === false) {
+ $dispy_font_size = $site_dispy_font_size;
+ }
+ if ($dispy_font_size === false) {
+ $dispy_font_size = "12";
+ }
+ if ($colour === false) {
+ $colour = $site_colour;
+ }
+ if ($colour === false) {
+ $colour = "light";
+ }
if($colour == "light") {
if (file_exists("$THEMEPATH/light/style.css")) {
echo file_get_contents("$THEMEPATH/light/style.css");
}
- if($dispy_font_size == "16") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 16px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 16px;
- }";
- }
- if($dispy_font_size == "15") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 15px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 15px;
- }";
- }
- if($dispy_font_size == "14") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 14px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 14px;
- }";
- }
- if($dispy_font_size == "13.5") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 13.5px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 13.5px;
- }";
- }
- if($dispy_font_size == "13") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 13px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 13px;
- }";
- }
- if($dispy_font_size == "12.5") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 12.5px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 12.5px;
- }";
- }
- if($dispy_font_size == "12") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 12px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 12px;
- }";
- }
- if($line_height == "1.5") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.5;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.5;
- }";
- }
- if($line_height == "1.4") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.4;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.4;
- }";
- }
- if($line_height == "1.3") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.3;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.3;
- }";
- }
- if($line_height == "1.2") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.2;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.2;
- }";
- }
- if($line_height == "1.1") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.1;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.1;
- }";
- }
}
if($colour == "dark") {
if (file_exists("$THEMEPATH/dark/style.css")) {
echo file_get_contents("$THEMEPATH/dark/style.css");
}
- if($dispy_font_size == "16") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 16px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 16px;
- }";
- }
- if($dispy_font_size == "15") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 15px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 15px;
- }";
- }
- if($dispy_font_size == "14") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 14px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 14px;
- }";
- }
- if($dispy_font_size == "13.5") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 13.5px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 13.5px;
- }";
- }
- if($dispy_font_size == "13") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 13px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 13px;
- }";
- }
- if($dispy_font_size == "12.5") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 12.5px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 12.5px;
- }";
- }
- if($dispy_font_size == "12") {
- echo "
- .wall-item-container .wall-item-content {
- font-size: 12px;
- }
- .wall-item-photo-container .wall-item-content {
- font-size: 12px;
- }";
- }
- if($line_height == "1.5") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.5;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.5;
- }";
- }
- if($line_height == "1.4"){
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.4;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.4;
- }";
- }
- if($line_height == "1.3") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.3;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.3;
- }";
- }
- if($line_height == "1.2") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.2;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.2;
- }";
- }
- if($line_height == "1.1") {
- echo "
- .wall-item-container .wall-item-content {
- line-height: 1.1;
- }
- .wall-item-photo-container .wall-item-content {
- line-height: 1.1;
- }";
- }
- }
+ }
+ if($dispy_font_size == "16") {
+ echo ".wall-item-content {
+ font-size: 16px;
+ }";
+ }
+ if($dispy_font_size == "15") {
+ echo ".wall-item-content {
+ font-size: 15px;
+ }";
+ }
+ if($dispy_font_size == "14") {
+ echo ".wall-item-content {
+ font-size: 14px;
+ }";
+ }
+ if($dispy_font_size == "13.5") {
+ echo ".wall-item-content {
+ font-size: 13.5px;
+ }";
+ }
+ if($dispy_font_size == "13") {
+ echo ".wall-item-content {
+ font-size: 13px;
+ }";
+ }
+ if($dispy_font_size == "12.5") {
+ echo ".wall-item-content {
+ font-size: 12.5px;
+ }";
+ }
+ if($dispy_font_size == "12") {
+ echo ".wall-item-content {
+ font-size: 12px;
+ }";
+ }
+ if($line_height == "1.5") {
+ echo ".wall-item-content {
+ line-height: 1.5;
+ }";
+ }
+ if($line_height == "1.4") {
+ echo ".wall-item-content {
+ line-height: 1.4;
+ }";
+ }
+ if($line_height == "1.3") {
+ echo ".wall-item-content {
+ line-height: 1.3;
+ }";
+ }
+ if($line_height == "1.2") {
+ echo ".wall-item-content {
+ line-height: 1.2;
+ }";
+ }
+ if($line_height == "1.1") {
+ echo ".wall-item-content {
+ line-height: 1.1;
+ }";
+ }
diff --git a/view/theme/dispy/theme.php b/view/theme/dispy/theme.php
index deedc86f7..2d423a928 100644
--- a/view/theme/dispy/theme.php
+++ b/view/theme/dispy/theme.php
@@ -20,7 +20,7 @@
$a = get_app();
$a->theme_info = array(
'family' => 'dispy',
- 'version' => '1.2'
+ 'version' => '1.2.2'
);
function dispy_init(&$a) {
diff --git a/view/theme/dispy/wall_item.tpl b/view/theme/dispy/wall_item.tpl
index 35e65f397..d2878d17d 100644
--- a/view/theme/dispy/wall_item.tpl
+++ b/view/theme/dispy/wall_item.tpl
@@ -13,7 +13,15 @@
</div>
</div>
<div class="wall-item-photo-end"></div>
- <div class="wall-item-location" id="wall-item-location-$item.id">{{ if $item.location }}<span class="icon globe"></span>$item.location {{ endif }}</div>
+ <div class="wall-item-location" id="wall-item-location-$item.id">
+ {{ if $item.location }}<span class="icon globe"></span>$item.location {{ endif }}
+ </div>
+ <div class="wall-item-author">
+ <a href="$item.profile_url" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id">$item.name</span></a>
+ </div>
+ <div class="wall-item-ago" id="wall-item-ago-$item.id">
+ $item.ago
+ </div>
</div>
<div class="wall-item-tools" id="wall-item-tools-$item.id">
<div class="wall-item-lock-wrapper">
@@ -67,10 +75,6 @@
</div>
</div>
</div>
- <div class="wall-item-author">
- <a href="$item.profile_url" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id" >$item.name</span></a>
- <div class="wall-item-ago" id="wall-item-ago-$item.id">$item.ago</div>
- </div>
</div>
<div class="wall-item-wrapper-end"></div>
<div class="wall-item-like" id="wall-item-like-$item.id">$item.like</div>
diff --git a/view/theme/dispy/wallwall_item.tpl b/view/theme/dispy/wallwall_item.tpl
index e8cbc2cd4..2705d3e68 100644
--- a/view/theme/dispy/wallwall_item.tpl
+++ b/view/theme/dispy/wallwall_item.tpl
@@ -18,7 +18,15 @@
</div>
<div class="wall-item-photo-end"></div>
- <div class="wall-item-location" id="wall-item-location-$item.id">{{ if $item.location }}<span class="icon globe"></span>$item.location {{ endif }}</div>
+ <div class="wall-item-location" id="wall-item-location-$item.id">
+ {{ if $item.location }}<span class="icon globe"></span>$item.location {{ endif }}
+ </div>
+ <div class="wall-item-author">
+ <a href="$item.profile_url" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id">$item.name</span></a>
+ </div>
+ <div class="wall-item-ago" id="wall-item-ago-$item.id">
+ $item.ago
+ </div>
</div>
<div class="wall-item-tools" id="wall-item-tools-$item.id">
<div class="wall-item-lock-wrapper">
@@ -73,10 +81,6 @@ class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick
</div>
</div>
</div>
- <div class="wall-item-author">
- <a href="$item.profile_url" title="$item.linktitle" class="wall-item-name-link"><span class="wall-item-name$item.sparkle" id="wall-item-name-$item.id" >$item.name</span></a>
- <div class="wall-item-ago" id="wall-item-ago-$item.id">$item.ago</div>
- </div>
</div>
<div class="wall-item-wrapper-end"></div>
<div class="wall-item-like" id="wall-item-like-$item.id">$item.like</div>
diff --git a/view/theme/duepuntozero/profile_vcard.tpl b/view/theme/duepuntozero/profile_vcard.tpl
new file mode 100644
index 000000000..bcb5baeeb
--- /dev/null
+++ b/view/theme/duepuntozero/profile_vcard.tpl
@@ -0,0 +1,51 @@
+<div class="vcard">
+
+ <div class="fn label">$profile.name</div>
+
+
+
+ {{ if $pdesc }}<div class="title">$profile.pdesc</div>{{ endif }}
+ <div id="profile-photo-wrapper"><img class="photo" width="175" height="175" src="$profile.photo?rev=$profile.picdate" alt="$profile.name"></div>
+
+
+
+ {{ if $location }}
+ <dl class="location"><dt class="location-label">$location</dt>
+ <dd class="adr">
+ {{ if $profile.address }}<div class="street-address">$profile.address</div>{{ endif }}
+ <span class="city-state-zip">
+ <span class="locality">$profile.locality</span>{{ if $profile.locality }}, {{ endif }}
+ <span class="region">$profile.region</span>
+ <span class="postal-code">$profile.postal-code</span>
+ </span>
+ {{ if $profile.country-name }}<span class="country-name">$profile.country-name</span>{{ endif }}
+ </dd>
+ </dl>
+ {{ endif }}
+
+ {{ if $gender }}<dl class="mf"><dt class="gender-label">$gender</dt> <dd class="x-gender">$profile.gender</dd></dl>{{ endif }}
+
+ {{ if $profile.pubkey }}<div class="key" style="display:none;">$profile.pubkey</div>{{ endif }}
+
+ {{ if $marital }}<dl class="marital"><dt class="marital-label"><span class="heart">&hearts;</span>$marital</dt><dd class="marital-text">$profile.marital</dd></dl>{{ endif }}
+
+ {{ if $homepage }}<dl class="homepage"><dt class="homepage-label">$homepage</dt><dd class="homepage-url"><a href="$profile.homepage" target="external-link">$profile.homepage</a></dd></dl>{{ endif }}
+
+ {{ inc diaspora_vcard.tpl }}{{ endinc }}
+
+ <div id="profile-vcard-break"></div>
+ <div id="profile-extra-links">
+ <ul>
+ {{ if $connect }}
+ <li><a id="dfrn-request-link" href="dfrn_request/$profile.nickname">$connect</a></li>
+ {{ endif }}
+ {{ if $wallmessage }}
+ <li><a id="wallmessage-link" href="wallmessage/$profile.nickname">$wallmessage</a></li>
+ {{ endif }}
+ </ul>
+ </div>
+</div>
+
+$contact_block
+
+
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css
index b978c13e5..ab660888f 100644
--- a/view/theme/duepuntozero/style.css
+++ b/view/theme/duepuntozero/style.css
@@ -80,6 +80,7 @@ blockquote {
.heart {
color: #FF0000;
font-size: 100%;
+ margin-right: 5px;
}
@@ -338,6 +339,15 @@ div.wall-item-content-wrapper.shiny {
font-weight: bold;
}
+.settings-widget .selected {
+ padding: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ border: 1px solid #CCCCCC;
+ background: #F8F8F8;
+ font-weight: bold;
+}
+
.fakelink:hover {
color: #3465a4;
text-decoration: underline;
@@ -551,6 +561,9 @@ input#dfrn-url {
margin-bottom: 30px;
}
+#profile-vcard-break {
+ clear: both;
+}
#profile-extra-links {
clear: both;
margin-top: 10px;
@@ -666,7 +679,8 @@ input#dfrn-url {
#profile-edit-religion-label,
#profile-edit-pubkeywords-label,
#profile-edit-prvkeywords-label,
-#profile-edit-homepage-label {
+#profile-edit-homepage-label,
+#profile-edit-hometown-label {
float: left;
width: 175px;
}
@@ -704,7 +718,17 @@ input#dfrn-url {
#settings-community {
float: left;
}
-
+#settings-notifications label {
+ margin-left: 20px;
+}
+#settings-notify-desc, #settings-activity-desc {
+ font-weight: bold;
+ margin-bottom: 15px;
+}
+#settings-pagetype-desc {
+ color: #666666;
+ margin-bottom: 15px;
+}
#profile-in-dir-yes-label,
#profile-in-dir-no-label,
@@ -751,7 +775,7 @@ input#dfrn-url {
}
-#profile-edit-homepage {
+#profile-edit-homepage, #profile-edit-hometown {
float: left;
margin-bottom: 35px;
}
@@ -791,6 +815,7 @@ input#dfrn-url {
#profile-edit-pubkeywords-end,
#profile-edit-prvkeywords-end,
#profile-edit-homepage-end,
+#profile-edit-hometown-end,
#profile-in-dir-break,
#profile-in-dir-end,
#profile-in-netdir-break,
@@ -806,8 +831,15 @@ input#dfrn-url {
clear: both;
}
+.settings-widget ul {
+ list-style-type: none;
+ padding: 0px;
+}
-
+.settings-widget li {
+ margin-left: 24px;
+ margin-bottom: 8px;
+}
#gender-select, #marital-select, #sexual-select {
@@ -1091,6 +1123,11 @@ input#dfrn-url {
overflow: auto;
}
+.wall-item-content img {
+ max-width: 700px;
+}
+
+
.wall-item-title {
float: left;
font-weight: bold;
@@ -1958,23 +1995,29 @@ aside input[type='text'] {
}
-.photos {
+/*.photos {
height: auto;
overflow: auto;
+}*/
+
+.photos-end {
+ clear: both;
+ margin-bottom: 25px;
}
.photo-album-image-wrapper {
float: left;
margin-top: 15px;
margin-right: 15px;
- width: 200px; height: 200px;
+ margin-left: 15px;
+/* width: 200px; height: 200px;
overflow: hidden;
- position: relative;
+ position: relative; */
}
.photo-album-image-wrapper .caption {
display: none;
width: 100%;
- position: absolute;
+/* position: absolute; */
bottom: 0px;
padding: 0.5em 0.5em 0px 0.5em;
background-color: rgba(245, 245, 255, 0.8);
@@ -1987,20 +2030,23 @@ aside input[type='text'] {
#photo-album-end {
clear: both;
+ margin-bottom: 25px;
}
.photo-top-image-wrapper {
- position: relative;
+/* position: relative; */
float: left;
margin-top: 15px;
margin-right: 15px;
- width: 200px; height: 200px;
- overflow: hidden;
+ margin-left: 15px;
+ margin-bottom: 15px;
+/* width: 200px; height: 200px;
+ overflow: hidden; */
}
.photo-top-album-name {
width: 100%;
min-height: 2em;
- position: absolute;
+/* position: absolute; */
bottom: 0px;
padding: 0px 3px;
padding-top: 0.5em;
@@ -2104,7 +2150,7 @@ aside input[type='text'] {
margin-bottom: 15px;
}
-#photo-edit-caption-label, #photo-edit-tags-label, #photo-edit-albumname-label {
+#photo-edit-caption-label, #photo-edit-tags-label, #photo-edit-albumname-label, #photo-edit-rotate-label {
float: left;
width: 150px;
}
@@ -2113,7 +2159,7 @@ aside input[type='text'] {
margin-bottom: 15px;
}
-#photo-edit-caption, #photo-edit-newtag, #photo-edit-albumname {
+#photo-edit-caption, #photo-edit-newtag, #photo-edit-albumname, #photo-edit-rotate {
float: left;
margin-bottom: 25px;
}
@@ -2124,10 +2170,14 @@ aside input[type='text'] {
margin-bottom: 25px;
}
-#photo-edit-caption-end, #photo-edit-tags-end, #photo-edit-albumname-end {
+#photo-edit-caption-end, #photo-edit-tags-end, #photo-edit-albumname-end, #photo-edit-rotate-end {
clear: both;
}
+#photo-edit-rotate-end {
+ margin-bottom: 15px;
+}
+
#photo-edit-delete-button {
margin-left: 200px;
}
@@ -2932,6 +2982,7 @@ aside input[type='text'] {
.starred { background-position: -16px -48px; }
.unstarred { background-position: -32px -48px; }
.tagged { background-position: -48px -48px; }
+.yellow { background-position: -64px -48px; }
.filer-icon {
diff --git a/view/theme/quattro/dark/style.css b/view/theme/quattro/dark/style.css
index 1fa03b253..14b7c75b3 100644
--- a/view/theme/quattro/dark/style.css
+++ b/view/theme/quattro/dark/style.css
@@ -243,6 +243,18 @@
.icon.s48.language {
background-image: url("icons/language.png");
}
+.icon.on {
+ background-image: url("icons/addon_on.png");
+ min-width: 16px;
+ height: 16px;
+ background-position: 0px 0px;
+}
+.icon.off {
+ background-image: url("icons/addon_off.png");
+ width: 16px;
+ height: 16px;
+ background-position: 0px 0px;
+}
/* global */
body {
font-family: Liberation Sans, helvetica, arial, clean, sans-serif;
@@ -255,8 +267,7 @@ body {
h4 {
font-size: 1.1em;
}
-a,
-a:link {
+a, a:link {
color: #005c94;
text-decoration: none;
}
@@ -478,8 +489,7 @@ nav #nav-site-linkmenu .menu-popup {
right: 0px;
left: auto;
}
-nav #nav-notifications-linkmenu.on .icon.s22.notify,
-nav #nav-notifications-linkmenu.selected .icon.s22.notify {
+nav #nav-notifications-linkmenu.on .icon.s22.notify, nav #nav-notifications-linkmenu.selected .icon.s22.notify {
background-image: url("../../../images/icons/22/notify_on.png");
}
nav #nav-apps-link.selected {
@@ -668,15 +678,11 @@ aside #profiles-menu {
height: 48px;
}
/* group member */
-#contact-edit-drop-link,
-.mail-list-delete-wrapper,
-.group-delete-wrapper {
+#contact-edit-drop-link, .mail-list-delete-wrapper, .group-delete-wrapper {
float: right;
margin-right: 50px;
}
-#contact-edit-drop-link .drophide,
-.mail-list-delete-wrapper .drophide,
-.group-delete-wrapper .drophide {
+#contact-edit-drop-link .drophide, .mail-list-delete-wrapper .drophide, .group-delete-wrapper .drophide {
background-image: url('../../../images/icons/22/delete.png');
display: block;
width: 22px;
@@ -685,9 +691,7 @@ aside #profiles-menu {
position: relative;
top: -50px;
}
-#contact-edit-drop-link .drop,
-.mail-list-delete-wrapper .drop,
-.group-delete-wrapper .drop {
+#contact-edit-drop-link .drop, .mail-list-delete-wrapper .drop, .group-delete-wrapper .drop {
background-image: url('../../../images/icons/22/delete.png');
display: block;
width: 22px;
@@ -817,8 +821,7 @@ section {
display: table;
width: 750px;
}
-.wall-item-container .wall-item-item,
-.wall-item-container .wall-item-bottom {
+.wall-item-container .wall-item-item, .wall-item-container .wall-item-bottom {
display: table-row;
}
.wall-item-container .wall-item-bottom {
@@ -856,13 +859,11 @@ section {
.wall-item-container .wall-item-content img {
max-width: 710px;
}
-.wall-item-container .wall-item-links,
-.wall-item-container .wall-item-actions {
+.wall-item-container .wall-item-links, .wall-item-container .wall-item-actions {
display: table-cell;
vertical-align: middle;
}
-.wall-item-container .wall-item-links .icon,
-.wall-item-container .wall-item-actions .icon {
+.wall-item-container .wall-item-links .icon, .wall-item-container .wall-item-actions .icon {
opacity: 0.5;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
@@ -870,8 +871,7 @@ section {
-ms-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}
-.wall-item-container .wall-item-links .icon:hover,
-.wall-item-container .wall-item-actions .icon:hover {
+.wall-item-container .wall-item-links .icon:hover, .wall-item-container .wall-item-actions .icon:hover {
opacity: 1;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
@@ -1015,6 +1015,9 @@ section {
opacity: 0.5;
}
.wwto {
+ position: absolute !important;
+ width: 25px;
+ height: 25px;
background: #FFFFFF;
border: 2px solid #364e59;
height: 25px;
@@ -1245,9 +1248,7 @@ section {
height: 18px;
}*/
/** acl **/
-#photo-edit-perms-select,
-#photos-upload-permissions-wrapper,
-#profile-jot-acl-wrapper {
+#photo-edit-perms-select, #photos-upload-permissions-wrapper, #profile-jot-acl-wrapper {
display: block!important;
}
#acl-wrapper {
@@ -1406,12 +1407,10 @@ ul.tabs li .active {
float: left;
width: 200px;
}
-.field input,
-.field textarea {
+.field input, .field textarea {
width: 400px;
}
-.field input[type="checkbox"],
-.field input[type="radio"] {
+.field input[type="checkbox"], .field input[type="radio"] {
width: auto;
}
.field textarea {
@@ -1642,15 +1641,13 @@ ul.tabs li .active {
transition: all 0.2s ease-in-out;
}
/* theme screenshot */
-.screenshot,
-#theme-preview {
+.screenshot, #theme-preview {
position: absolute;
width: 202px;
left: 70%;
top: 50px;
}
-.screenshot img,
-#theme-preview img {
+.screenshot img, #theme-preview img {
width: 200px;
height: 150px;
}
@@ -1663,3 +1660,77 @@ footer {
margin-top: 25px;
clear: both;
}
+/**
+ * ADMIN
+ */
+#pending-update {
+ float: right;
+ color: #ffffff;
+ font-weight: bold;
+ background-color: #FF0000;
+ padding: 0em 0.3em;
+}
+#adminpage dl {
+ clear: left;
+ margin-bottom: 2px;
+ padding-bottom: 2px;
+ border-bottom: 1px solid black;
+}
+#adminpage dt {
+ width: 200px;
+ float: left;
+ font-weight: bold;
+}
+#adminpage dd {
+ margin-left: 200px;
+}
+#adminpage h3 {
+ border-bottom: 1px solid #cccccc;
+}
+#adminpage .field label {
+ font-weight: bold;
+}
+#adminpage .submit {
+ clear: left;
+ text-align: right;
+}
+#adminpage #pluginslist {
+ margin: 0px;
+ padding: 0px;
+}
+#adminpage .plugin {
+ list-style: none;
+ display: block;
+ border: 1px solid #888888;
+ padding: 1em;
+ margin-bottom: 5px;
+ clear: left;
+}
+#adminpage .plugin desc {
+ margin-left: 2.5em;
+}
+#adminpage .toggleplugin {
+ float: left;
+ margin-right: 1em;
+}
+#adminpage table {
+ width: 100%;
+ border-bottom: 1px solid #000000;
+ margin: 5px 0px;
+}
+#adminpage table th {
+ text-align: left;
+}
+#adminpage table td .icon {
+ float: left;
+}
+#adminpage table tr:hover {
+ background-color: #bbc7d7;
+}
+#adminpage table#users img {
+ width: 16px;
+ height: 16px;
+}
+#adminpage .selectall {
+ text-align: right;
+}
diff --git a/view/theme/quattro/green/style.css b/view/theme/quattro/green/style.css
index 317112f6f..f33c45eae 100644
--- a/view/theme/quattro/green/style.css
+++ b/view/theme/quattro/green/style.css
@@ -243,6 +243,18 @@
.icon.s48.language {
background-image: url("icons/language.png");
}
+.icon.on {
+ background-image: url("icons/addon_on.png");
+ min-width: 16px;
+ height: 16px;
+ background-position: 0px 0px;
+}
+.icon.off {
+ background-image: url("icons/addon_off.png");
+ width: 16px;
+ height: 16px;
+ background-position: 0px 0px;
+}
/* global */
body {
font-family: Liberation Sans, helvetica, arial, clean, sans-serif;
@@ -255,8 +267,7 @@ body {
h4 {
font-size: 1.1em;
}
-a,
-a:link {
+a, a:link {
color: #009100;
text-decoration: none;
}
@@ -478,8 +489,7 @@ nav #nav-site-linkmenu .menu-popup {
right: 0px;
left: auto;
}
-nav #nav-notifications-linkmenu.on .icon.s22.notify,
-nav #nav-notifications-linkmenu.selected .icon.s22.notify {
+nav #nav-notifications-linkmenu.on .icon.s22.notify, nav #nav-notifications-linkmenu.selected .icon.s22.notify {
background-image: url("../../../images/icons/22/notify_on.png");
}
nav #nav-apps-link.selected {
@@ -668,15 +678,11 @@ aside #profiles-menu {
height: 48px;
}
/* group member */
-#contact-edit-drop-link,
-.mail-list-delete-wrapper,
-.group-delete-wrapper {
+#contact-edit-drop-link, .mail-list-delete-wrapper, .group-delete-wrapper {
float: right;
margin-right: 50px;
}
-#contact-edit-drop-link .drophide,
-.mail-list-delete-wrapper .drophide,
-.group-delete-wrapper .drophide {
+#contact-edit-drop-link .drophide, .mail-list-delete-wrapper .drophide, .group-delete-wrapper .drophide {
background-image: url('../../../images/icons/22/delete.png');
display: block;
width: 22px;
@@ -685,9 +691,7 @@ aside #profiles-menu {
position: relative;
top: -50px;
}
-#contact-edit-drop-link .drop,
-.mail-list-delete-wrapper .drop,
-.group-delete-wrapper .drop {
+#contact-edit-drop-link .drop, .mail-list-delete-wrapper .drop, .group-delete-wrapper .drop {
background-image: url('../../../images/icons/22/delete.png');
display: block;
width: 22px;
@@ -817,8 +821,7 @@ section {
display: table;
width: 750px;
}
-.wall-item-container .wall-item-item,
-.wall-item-container .wall-item-bottom {
+.wall-item-container .wall-item-item, .wall-item-container .wall-item-bottom {
display: table-row;
}
.wall-item-container .wall-item-bottom {
@@ -856,13 +859,11 @@ section {
.wall-item-container .wall-item-content img {
max-width: 710px;
}
-.wall-item-container .wall-item-links,
-.wall-item-container .wall-item-actions {
+.wall-item-container .wall-item-links, .wall-item-container .wall-item-actions {
display: table-cell;
vertical-align: middle;
}
-.wall-item-container .wall-item-links .icon,
-.wall-item-container .wall-item-actions .icon {
+.wall-item-container .wall-item-links .icon, .wall-item-container .wall-item-actions .icon {
opacity: 0.5;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
@@ -870,8 +871,7 @@ section {
-ms-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}
-.wall-item-container .wall-item-links .icon:hover,
-.wall-item-container .wall-item-actions .icon:hover {
+.wall-item-container .wall-item-links .icon:hover, .wall-item-container .wall-item-actions .icon:hover {
opacity: 1;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
@@ -1015,6 +1015,9 @@ section {
opacity: 0.5;
}
.wwto {
+ position: absolute !important;
+ width: 25px;
+ height: 25px;
background: #FFFFFF;
border: 2px solid #364e59;
height: 25px;
@@ -1245,9 +1248,7 @@ section {
height: 18px;
}*/
/** acl **/
-#photo-edit-perms-select,
-#photos-upload-permissions-wrapper,
-#profile-jot-acl-wrapper {
+#photo-edit-perms-select, #photos-upload-permissions-wrapper, #profile-jot-acl-wrapper {
display: block!important;
}
#acl-wrapper {
@@ -1406,12 +1407,10 @@ ul.tabs li .active {
float: left;
width: 200px;
}
-.field input,
-.field textarea {
+.field input, .field textarea {
width: 400px;
}
-.field input[type="checkbox"],
-.field input[type="radio"] {
+.field input[type="checkbox"], .field input[type="radio"] {
width: auto;
}
.field textarea {
@@ -1642,15 +1641,13 @@ ul.tabs li .active {
transition: all 0.2s ease-in-out;
}
/* theme screenshot */
-.screenshot,
-#theme-preview {
+.screenshot, #theme-preview {
position: absolute;
width: 202px;
left: 70%;
top: 50px;
}
-.screenshot img,
-#theme-preview img {
+.screenshot img, #theme-preview img {
width: 200px;
height: 150px;
}
@@ -1663,3 +1660,77 @@ footer {
margin-top: 25px;
clear: both;
}
+/**
+ * ADMIN
+ */
+#pending-update {
+ float: right;
+ color: #ffffff;
+ font-weight: bold;
+ background-color: #FF0000;
+ padding: 0em 0.3em;
+}
+#adminpage dl {
+ clear: left;
+ margin-bottom: 2px;
+ padding-bottom: 2px;
+ border-bottom: 1px solid black;
+}
+#adminpage dt {
+ width: 200px;
+ float: left;
+ font-weight: bold;
+}
+#adminpage dd {
+ margin-left: 200px;
+}
+#adminpage h3 {
+ border-bottom: 1px solid #cccccc;
+}
+#adminpage .field label {
+ font-weight: bold;
+}
+#adminpage .submit {
+ clear: left;
+ text-align: right;
+}
+#adminpage #pluginslist {
+ margin: 0px;
+ padding: 0px;
+}
+#adminpage .plugin {
+ list-style: none;
+ display: block;
+ border: 1px solid #888888;
+ padding: 1em;
+ margin-bottom: 5px;
+ clear: left;
+}
+#adminpage .plugin desc {
+ margin-left: 2.5em;
+}
+#adminpage .toggleplugin {
+ float: left;
+ margin-right: 1em;
+}
+#adminpage table {
+ width: 100%;
+ border-bottom: 1px solid #000000;
+ margin: 5px 0px;
+}
+#adminpage table th {
+ text-align: left;
+}
+#adminpage table td .icon {
+ float: left;
+}
+#adminpage table tr:hover {
+ background-color: #bbc7d7;
+}
+#adminpage table#users img {
+ width: 16px;
+ height: 16px;
+}
+#adminpage .selectall {
+ text-align: right;
+}
diff --git a/view/theme/quattro/icons.less b/view/theme/quattro/icons.less
index 24e96b5aa..ae7459dfc 100644
--- a/view/theme/quattro/icons.less
+++ b/view/theme/quattro/icons.less
@@ -21,7 +21,8 @@
&.type-text { background-image: url("../../../images/icons/@{size}/text.png"); }
&.language { background-image: url("icons/language.png"); }
-
+
+
}
@@ -59,5 +60,17 @@
.icons(48);
}
+ &.on {
+ background-image: url("icons/addon_on.png");
+ min-width:16px;
+ height: 16px;
+ background-position: 0px 0px;
+ }
+ &.off {
+ background-image: url("icons/addon_off.png");
+ width: 16px;
+ height: 16px;
+ background-position: 0px 0px;
+ }
}
diff --git a/view/theme/quattro/icons/addon_off.png b/view/theme/quattro/icons/addon_off.png
new file mode 100644
index 000000000..40b53259a
--- /dev/null
+++ b/view/theme/quattro/icons/addon_off.png
Binary files differ
diff --git a/view/theme/quattro/icons/addon_on.png b/view/theme/quattro/icons/addon_on.png
new file mode 100644
index 000000000..3d9490f15
--- /dev/null
+++ b/view/theme/quattro/icons/addon_on.png
Binary files differ
diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less
index 4c3279943..4d57719d9 100644
--- a/view/theme/quattro/quattro.less
+++ b/view/theme/quattro/quattro.less
@@ -1152,3 +1152,76 @@ footer { height: 100px; display: table-row; }
clear: both;
}
+/**
+ * ADMIN
+ */
+#pending-update {
+ float:right;
+ color: #ffffff;
+ font-weight: bold;
+ background-color: #FF0000;
+ padding: 0em 0.3em;
+
+}
+#adminpage {
+ dl {
+ clear: left;
+ margin-bottom: 2px;
+ padding-bottom: 2px;
+ border-bottom: 1px solid black;
+ }
+ dt {
+ width: 200px;
+ float: left;
+ font-weight: bold;
+ }
+ dd {
+ margin-left: 200px;
+ }
+ h3 {
+ border-bottom: 1px solid #cccccc;
+ }
+ .field label {
+ font-weight: bold;
+ }
+ .submit {
+ clear:left;
+ text-align: right;
+ }
+ #pluginslist {
+ margin: 0px; padding: 0px;
+ }
+ .plugin {
+ list-style: none;
+ display: block;
+ border: 1px solid #888888;
+ padding: 1em;
+ margin-bottom: 5px;
+ clear: left;
+ desc {
+ margin-left: 2.5em;
+ }
+ }
+ .toggleplugin {
+ float:left;
+ margin-right: 1em;
+ }
+ table {
+ width:100%;
+ border-bottom: 1px solid #000000;
+ margin: 5px 0px;
+ th {
+ text-align: left;
+ }
+ td .icon {
+ float: left;
+ }
+ tr:hover {
+ background-color: #bbc7d7;
+ }
+ }
+ table#users img {
+ width: 16px; height: 16px;
+ }
+ .selectall { text-align: right; }
+}
diff --git a/view/theme/slackr/birthdays_reminder.tpl b/view/theme/slackr/birthdays_reminder.tpl
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/view/theme/slackr/birthdays_reminder.tpl
@@ -0,0 +1 @@
+
diff --git a/view/theme/slackr/events_reminder.tpl b/view/theme/slackr/events_reminder.tpl
new file mode 100644
index 000000000..99407fc3e
--- /dev/null
+++ b/view/theme/slackr/events_reminder.tpl
@@ -0,0 +1,39 @@
+<link rel='stylesheet' type='text/css' href='$baseurl/library/fullcalendar/fullcalendar.css' />
+<script language="javascript" type="text/javascript"
+ src="$baseurl/library/fullcalendar/fullcalendar.min.js"></script>
+<script>
+ // start calendar from yesterday
+ var yesterday= new Date()
+ yesterday.setDate(yesterday.getDate()-1)
+
+ function showEvent(eventid) {
+ $.get(
+ '$baseurl/events/?id='+eventid,
+ function(data){
+ $.fancybox(data);
+ }
+ );
+ }
+ $(document).ready(function() {
+ $('#events-reminder').fullCalendar({
+ firstDay: yesterday.getDay(),
+ year: yesterday.getFullYear(),
+ month: yesterday.getMonth(),
+ date: yesterday.getDate(),
+ events: '$baseurl/events/json/',
+ header: {
+ left: '',
+ center: '',
+ right: ''
+ },
+ timeFormat: 'HH(:mm)',
+ defaultView: 'basicWeek',
+ height: 50,
+ eventClick: function(calEvent, jsEvent, view) {
+ showEvent(calEvent.id);
+ }
+ });
+ });
+</script>
+<div id="events-reminder"></div>
+<br>
diff --git a/view/theme/slackr/style.css b/view/theme/slackr/style.css
index ed3b413fb..39da7bb6c 100644
--- a/view/theme/slackr/style.css
+++ b/view/theme/slackr/style.css
@@ -40,7 +40,115 @@ nav #site-location {
right: 36px;
}
+#profile-jot-text_parent, .mceLayout {
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ box-shadow: 4px 4px 3px 0 #444444;
+}
+
+#profile-jot-text:hover {
+ color: #000000;
+}
+
+.fc {
+ opacity: 0.3;
+ filter:alpha(opacity=30);
+}
+
+.fc:hover {
+ opacity: 1.0;
+ filter:alpha(opacity=100);
+}
+
+.fc-event-skin {
+ background-color: #3465a4 !important;
+}
.wall-item-photo, .photo, .contact-block-img, .my-comment-photo {
border-radius: 3px;
-moz-border-radius: 3px;
-} \ No newline at end of file
+ box-shadow: 4px 4px 3px 0 #444444;
+}
+
+#sidebar-page-list img {
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ box-shadow: 4px 4px 3px 0 #444444;
+}
+
+.contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img, .photo-album-photo, .photo-top-photo, .fc, .profile-jot-text, .group-selected, .nets-selected, .fileas-selected, #profile-jot-submit, .categories-selected {
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ box-shadow: 4px 4px 3px 0 #444444;
+}
+.settings-widget .selected {
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ box-shadow: 4px 4px 3px 0 #444444;
+}
+
+.photo {
+ border: 1px solid #AAAAAA;
+}
+
+.photo-top-photo, .photo-album-photo {
+ padding: 10px;
+ max-width: 300px;
+ border: 1px solid #888888;
+}
+
+.rotleft1 {
+-webkit-transform: rotate(-1deg);
+-moz-transform: rotate(-1deg);
+-ms-transform: rotate(-1deg);
+-o-transform: rotate(-1deg);
+}
+
+.rotleft2 {
+-webkit-transform: rotate(-2deg);
+-moz-transform: rotate(-2deg);
+-ms-transform: rotate(-2deg);
+-o-transform: rotate(-2deg);
+}
+
+.rotleft3 {
+-webkit-transform: rotate(-3deg);
+-moz-transform: rotate(-3deg);
+-ms-transform: rotate(-3deg);
+-o-transform: rotate(-3deg);
+}
+
+.rotleft4 {
+-webkit-transform: rotate(-4deg);
+-moz-transform: rotate(-4deg);
+-ms-transform: rotate(-4deg);
+-o-transform: rotate(-4deg);
+}
+
+.rotright1 {
+-webkit-transform: rotate(1deg);
+-moz-transform: rotate(1deg);
+-ms-transform: rotate(1deg);
+-o-transform: rotate(1deg);
+}
+
+.rotright2 {
+-webkit-transform: rotate(2deg);
+-moz-transform: rotate(2deg);
+-ms-transform: rotate(2deg);
+-o-transform: rotate(2deg);
+}
+
+.rotright3 {
+-webkit-transform: rotate(3deg);
+-moz-transform: rotate(3deg);
+-ms-transform: rotate(3deg);
+-o-transform: rotate(3deg);
+}
+
+.rotright4 {
+-webkit-transform: rotate(4deg);
+-moz-transform: rotate(4deg);
+-ms-transform: rotate(4deg);
+-o-transform: rotate(4deg);
+}
+
diff --git a/view/theme/slackr/theme.php b/view/theme/slackr/theme.php
index 99e061a2f..988700860 100644
--- a/view/theme/slackr/theme.php
+++ b/view/theme/slackr/theme.php
@@ -43,8 +43,17 @@ function cmtBbOpen(id) {
function cmtBbClose(id) {
$(".comment-edit-bb-" + id).hide();
}
+
+function hidecal() {
+ if(editor) return;
+ $('.fc').hide();
+}
+
$(document).ready(function() {
+ $("#profile-jot-text").focus(hidecal);
+ $("#profile-jot-text").click(hidecal);
+
$('html').click(function() { $("#nav-notifications-menu" ).hide(); });
$('.group-edit-icon').hover(
diff --git a/view/theme/testbubble/unsupported b/view/theme/testbubble/unsupported
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/view/theme/testbubble/unsupported