From a3f08c44be78d4517e9f1619811def09b2ec7e7a Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 22 Apr 2012 18:00:24 +0200 Subject: [PATCH 001/164] API: RSS-Feeds are now shortened to 1000 characters. (With added link) --- include/api.php | 93 +++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/include/api.php b/include/api.php index 0885a1434..11494ba27 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 */ @@ -682,24 +682,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 @@ -711,7 +711,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); @@ -719,7 +719,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` @@ -738,7 +738,7 @@ $ret = api_format_items($r,$user_info); - + $data = array('$statuses' => $ret); switch($type){ case "atom": @@ -752,7 +752,7 @@ return($as); break; } - + return api_apply_template("timeline", $type, $data); } api_register_func('api/statuses/home_timeline','api_statuses_home_timeline', true); @@ -760,7 +760,7 @@ function api_statuses_public_timeline(&$a, $type){ if (local_user()===false) return false; - + $user_info = api_get_user($a); // get last newtork messages @@ -772,7 +772,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); @@ -780,7 +780,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` @@ -797,17 +797,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 @@ -818,7 +818,7 @@ $ret = api_format_items($r,$user_info); - + $data = array('$statuses' => $ret); switch($type){ case "atom": @@ -832,7 +832,7 @@ return($as); break; } - + return api_apply_template("timeline", $type, $data); } api_register_func('api/statuses/public_timeline','api_statuses_public_timeline', true); @@ -848,11 +848,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` @@ -866,7 +866,7 @@ ); $ret = api_format_items($r,$user_info); - + $data = array('$status' => $ret[0]); /*switch($type){ case "atom": @@ -1004,7 +1004,7 @@ $ret = api_format_items($r,$user_info); - + $data = array('$statuses' => $ret); switch($type){ case "atom": @@ -1018,7 +1018,7 @@ return($as); break; } - + return api_apply_template("timeline", $type, $data); } api_register_func('api/statuses/mentions','api_statuses_mentions', true); @@ -1069,14 +1069,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); } @@ -1085,25 +1085,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` @@ -1120,16 +1120,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); } @@ -1199,7 +1199,7 @@ $as['link']['type'] = "text/html"; return($as); } - + function api_format_items($r,$user_info) { //logger('api_format_items: ' . print_r($r,true)); @@ -1214,14 +1214,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']; @@ -1242,6 +1242,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, From aa83198611f2da482a0927bac122176a4d33d4ec Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 12 May 2012 01:27:33 -0700 Subject: [PATCH 002/164] rev update --- boot.php | 2 +- util/messages.po | 455 ++++++++++++++++++++++++----------------------- 2 files changed, 229 insertions(+), 228 deletions(-) diff --git a/boot.php b/boot.php index dd4e31d4f..e9e0a6db1 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ 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.1339' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1143 ); diff --git a/util/messages.po b/util/messages.po index 485dfd7b7..afb1938a8 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.1339\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-10 10:00-0700\n" +"POT-Creation-Date: 2012-05-11 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -142,7 +142,7 @@ msgstr "" #: ../../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 @@ -158,10 +158,10 @@ msgstr "" #: ../../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:747 #: ../../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:558 msgid "Submit" msgstr "" @@ -220,7 +220,7 @@ msgid "link to source" msgstr "" #: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:127 -#: ../../include/nav.php:52 ../../boot.php:1499 +#: ../../include/nav.php:52 ../../boot.php:1503 msgid "Events" msgstr "" @@ -270,7 +270,7 @@ msgid "Description:" msgstr "" #: ../../mod/events.php:423 ../../include/event.php:37 -#: ../../include/bb2diaspora.php:260 ../../boot.php:1098 +#: ../../include/bb2diaspora.php:260 ../../boot.php:1102 msgid "Location:" msgstr "" @@ -345,14 +345,14 @@ msgstr "" msgid "No" msgstr "" -#: ../../mod/photos.php:43 ../../boot.php:1493 +#: ../../mod/photos.php:43 ../../boot.php:1497 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 +#: ../../view/theme/diabook/theme.php:588 msgid "Contact Photos" msgstr "" @@ -375,7 +375,7 @@ msgstr "" #: ../../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:589 msgid "Profile Photos" msgstr "" @@ -397,7 +397,7 @@ msgstr "" #: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 -#: ../../view/theme/diabook/theme.php:498 ../../include/text.php:1305 +#: ../../view/theme/diabook/theme.php:560 ../../include/text.php:1305 #: ../../include/diaspora.php:1654 ../../include/conversation.php:53 #: ../../include/conversation.php:126 msgid "photo" @@ -487,7 +487,7 @@ msgstr "" msgid "Use as profile photo" msgstr "" -#: ../../mod/photos.php:1078 ../../include/conversation.php:480 +#: ../../mod/photos.php:1078 ../../include/conversation.php:483 msgid "Private Message" msgstr "" @@ -519,44 +519,44 @@ msgstr "" msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" -#: ../../mod/photos.php:1211 ../../include/conversation.php:529 +#: ../../mod/photos.php:1211 ../../include/conversation.php:532 msgid "I like this (toggle)" msgstr "" -#: ../../mod/photos.php:1212 ../../include/conversation.php:530 +#: ../../mod/photos.php:1212 ../../include/conversation.php:533 msgid "I don't like this (toggle)" msgstr "" -#: ../../mod/photos.php:1213 ../../include/conversation.php:964 +#: ../../mod/photos.php:1213 ../../include/conversation.php:967 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/wallmessage.php:145 ../../mod/message.php:214 +#: ../../mod/message.php:408 ../../include/conversation.php:364 +#: ../../include/conversation.php:709 ../../include/conversation.php:986 msgid "Please wait" msgstr "" #: ../../mod/photos.php:1230 ../../mod/photos.php:1270 -#: ../../mod/photos.php:1301 ../../include/conversation.php:552 +#: ../../mod/photos.php:1301 ../../include/conversation.php:555 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:1303 ../../include/conversation.php:557 +#: ../../boot.php:516 msgid "Comment" msgstr "" #: ../../mod/photos.php:1234 ../../mod/editpost.php:125 -#: ../../include/conversation.php:564 ../../include/conversation.php:1001 +#: ../../include/conversation.php:567 ../../include/conversation.php:1004 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 +#: ../../include/conversation.php:321 ../../include/conversation.php:587 msgid "Delete" msgstr "" @@ -621,28 +621,28 @@ msgstr "" msgid "Edit post" msgstr "" -#: ../../mod/editpost.php:80 ../../include/conversation.php:950 +#: ../../mod/editpost.php:80 ../../include/conversation.php:953 msgid "Post to Email" msgstr "" #: ../../mod/editpost.php:95 ../../mod/settings.php:601 -#: ../../include/conversation.php:571 +#: ../../include/conversation.php:574 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:968 msgid "Upload photo" msgstr "" -#: ../../mod/editpost.php:97 ../../include/conversation.php:967 +#: ../../mod/editpost.php:97 ../../include/conversation.php:970 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:972 msgid "Insert web link" msgstr "" @@ -658,35 +658,35 @@ msgstr "" msgid "Insert Vorbis [.ogg] audio" msgstr "" -#: ../../mod/editpost.php:102 ../../include/conversation.php:975 +#: ../../mod/editpost.php:102 ../../include/conversation.php:978 msgid "Set your location" msgstr "" -#: ../../mod/editpost.php:103 ../../include/conversation.php:977 +#: ../../mod/editpost.php:103 ../../include/conversation.php:980 msgid "Clear browser location" msgstr "" -#: ../../mod/editpost.php:105 ../../include/conversation.php:984 +#: ../../mod/editpost.php:105 ../../include/conversation.php:987 msgid "Permission settings" msgstr "" -#: ../../mod/editpost.php:113 ../../include/conversation.php:993 +#: ../../mod/editpost.php:113 ../../include/conversation.php:996 msgid "CC: email addresses" msgstr "" -#: ../../mod/editpost.php:114 ../../include/conversation.php:994 +#: ../../mod/editpost.php:114 ../../include/conversation.php:997 msgid "Public post" msgstr "" -#: ../../mod/editpost.php:117 ../../include/conversation.php:980 +#: ../../mod/editpost.php:117 ../../include/conversation.php:983 msgid "Set title" msgstr "" -#: ../../mod/editpost.php:119 ../../include/conversation.php:982 +#: ../../mod/editpost.php:119 ../../include/conversation.php:985 msgid "Categories (comma-separated list)" msgstr "" -#: ../../mod/editpost.php:120 ../../include/conversation.php:996 +#: ../../mod/editpost.php:120 ../../include/conversation.php:999 msgid "Example: bob@example.com, mary@example.com" msgstr "" @@ -1166,7 +1166,7 @@ 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:1046 msgid "Connect" msgstr "" @@ -1692,7 +1692,7 @@ msgstr "" #: ../../addon/facebook/facebook.php:680 #: ../../addon/facebook/facebook.php:1170 #: ../../addon/testdrive/testdrive.php:58 ../../include/items.php:2726 -#: ../../boot.php:692 +#: ../../boot.php:696 msgid "Administrator" msgstr "" @@ -1702,7 +1702,7 @@ msgid "" "Password reset failed." msgstr "" -#: ../../mod/lostpass.php:83 ../../boot.php:824 +#: ../../mod/lostpass.php:83 ../../boot.php:828 msgid "Password Reset" msgstr "" @@ -1775,8 +1775,8 @@ 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 +#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:633 +#: ../../view/theme/diabook/theme.php:763 ../../include/nav.php:137 msgid "Settings" msgstr "" @@ -2352,7 +2352,7 @@ msgstr "" msgid "Invalid contact." msgstr "" -#: ../../mod/notes.php:44 ../../boot.php:1505 +#: ../../mod/notes.php:44 ../../boot.php:1509 msgid "Personal Notes" msgstr "" @@ -2393,7 +2393,7 @@ msgid "No recipient." msgstr "" #: ../../mod/wallmessage.php:124 ../../mod/message.php:171 -#: ../../include/conversation.php:918 +#: ../../include/conversation.php:921 msgid "Please enter a link URL:" msgstr "" @@ -2409,17 +2409,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 "" @@ -2603,7 +2603,7 @@ 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 +#: ../../include/nav.php:50 ../../boot.php:1488 msgid "Profile" msgstr "" @@ -2775,7 +2775,7 @@ msgstr "" msgid "Choose a nickname: " msgstr "" -#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:790 +#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:794 msgid "Register" msgstr "" @@ -2787,8 +2787,8 @@ msgstr "" #: ../../addon/facebook/facebook.php:1564 #: ../../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:555 +#: ../../view/theme/diabook/theme.php:564 ../../include/diaspora.php:1654 #: ../../include/conversation.php:48 ../../include/conversation.php:57 #: ../../include/conversation.php:121 ../../include/conversation.php:130 msgid "status" @@ -2796,7 +2796,7 @@ msgstr "" #: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1568 #: ../../addon/communityhome/communityhome.php:172 -#: ../../view/theme/diabook/theme.php:507 ../../include/diaspora.php:1670 +#: ../../view/theme/diabook/theme.php:569 ../../include/diaspora.php:1670 #: ../../include/conversation.php:65 #, php-format msgid "%1$s likes %2$s's %3$s" @@ -2818,7 +2818,7 @@ msgid "Access denied." msgstr "" #: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:126 -#: ../../include/nav.php:51 ../../boot.php:1490 +#: ../../include/nav.php:51 ../../boot.php:1494 msgid "Photos" msgstr "" @@ -2974,55 +2974,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 may be able to " "respond from the sender's profile page." msgstr "" -#: ../../mod/message.php:394 +#: ../../mod/message.php:396 msgid "Send Reply" msgstr "" @@ -3597,7 +3597,7 @@ msgstr "" msgid "FTP Password" msgstr "" -#: ../../mod/profile.php:21 ../../boot.php:955 +#: ../../mod/profile.php:21 ../../boot.php:959 msgid "Requested profile is not available." msgstr "" @@ -4005,27 +4005,27 @@ msgstr "" msgid "Edit/Manage Profiles" msgstr "" -#: ../../mod/profiles.php:621 ../../boot.php:1064 +#: ../../mod/profiles.php:621 ../../boot.php:1068 msgid "Change profile photo" msgstr "" -#: ../../mod/profiles.php:622 ../../boot.php:1065 +#: ../../mod/profiles.php:622 ../../boot.php:1069 msgid "Create New Profile" msgstr "" -#: ../../mod/profiles.php:633 ../../boot.php:1075 +#: ../../mod/profiles.php:633 ../../boot.php:1079 msgid "Profile Image" msgstr "" -#: ../../mod/profiles.php:635 ../../boot.php:1078 +#: ../../mod/profiles.php:635 ../../boot.php:1082 msgid "visible to everybody" msgstr "" -#: ../../mod/profiles.php:636 ../../boot.php:1079 +#: ../../mod/profiles.php:636 ../../boot.php:1083 msgid "Edit visibility" msgstr "" -#: ../../mod/filer.php:29 ../../include/conversation.php:922 +#: ../../mod/filer.php:29 ../../include/conversation.php:925 msgid "Save to Folder:" msgstr "" @@ -4073,7 +4073,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:616 #: ../../include/contact_widgets.php:34 msgid "Friend Suggestions" msgstr "" @@ -4088,12 +4088,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:614 msgid "Global Directory" msgstr "" @@ -4623,7 +4618,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 +4628,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:469 +#: ../../boot.php:517 msgid "show more" msgstr "" @@ -4650,7 +4645,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:815 msgid "Login" msgstr "" @@ -4678,7 +4673,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:552 ../../include/text.php:1303 #: ../../include/conversation.php:45 ../../include/conversation.php:118 msgid "event" msgstr "" @@ -5636,126 +5631,124 @@ 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:633 +#: ../../view/theme/diabook/theme.php:737 #: ../../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:480 +#: ../../view/theme/diabook/theme.php:739 #: ../../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:501 +#: ../../view/theme/diabook/theme.php:744 #: ../../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:530 +#: ../../view/theme/diabook/theme.php:746 #: ../../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:575 +#: ../../view/theme/diabook/theme.php:745 #: ../../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:612 +#: ../../view/theme/diabook/theme.php:742 #: ../../view/theme/diabook/config.php:206 msgid "Find Friends" msgstr "" -#: ../../view/theme/diabook/theme.php:551 +#: ../../view/theme/diabook/theme.php:613 msgid "Local Directory" msgstr "" -#: ../../view/theme/diabook/theme.php:553 ../../include/contact_widgets.php:35 +#: ../../view/theme/diabook/theme.php:615 ../../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:617 ../../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:668 +#: ../../view/theme/diabook/theme.php:738 #: ../../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:673 +msgid "Set zoomfactor for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:612 +#: ../../view/theme/diabook/theme.php:674 #: ../../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:675 #: ../../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:688 +#: ../../view/theme/diabook/theme.php:740 #: ../../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:695 +#: ../../view/theme/diabook/theme.php:741 #: ../../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:702 +#: ../../view/theme/diabook/theme.php:743 msgid "Last Tweets" msgstr "" -#: ../../view/theme/diabook/theme.php:643 +#: ../../view/theme/diabook/theme.php:705 #: ../../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:725 +#: ../../view/theme/diabook/theme.php:726 +#: ../../view/theme/diabook/theme.php:727 +#: ../../view/theme/diabook/theme.php:728 +#: ../../view/theme/diabook/theme.php:729 +#: ../../view/theme/diabook/theme.php:730 +#: ../../view/theme/diabook/theme.php:731 +#: ../../view/theme/diabook/theme.php:732 +#: ../../view/theme/diabook/theme.php:733 +#: ../../view/theme/diabook/theme.php:734 ../../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:725 +#: ../../view/theme/diabook/theme.php:726 +#: ../../view/theme/diabook/theme.php:727 +#: ../../view/theme/diabook/theme.php:728 +#: ../../view/theme/diabook/theme.php:729 +#: ../../view/theme/diabook/theme.php:730 +#: ../../view/theme/diabook/theme.php:731 +#: ../../view/theme/diabook/theme.php:732 +#: ../../view/theme/diabook/theme.php:733 +#: ../../view/theme/diabook/theme.php:734 ../../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:735 +msgid "Show/hide boxes at right-hand column:" msgstr "" #: ../../view/theme/diabook/config.php:194 @@ -5771,6 +5764,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 +5788,7 @@ msgstr "" msgid "Set colour scheme" msgstr "" -#: ../../include/profile_advanced.php:17 ../../boot.php:1100 +#: ../../include/profile_advanced.php:17 ../../boot.php:1104 msgid "Gender:" msgstr "" @@ -5808,11 +5809,11 @@ msgstr "" msgid "Age:" msgstr "" -#: ../../include/profile_advanced.php:37 ../../boot.php:1103 +#: ../../include/profile_advanced.php:37 ../../boot.php:1107 msgid "Status:" msgstr "" -#: ../../include/profile_advanced.php:45 ../../boot.php:1105 +#: ../../include/profile_advanced.php:45 ../../boot.php:1109 msgid "Homepage:" msgstr "" @@ -6396,7 +6397,7 @@ msgstr "" msgid "Contacts not in any group" msgstr "" -#: ../../include/nav.php:46 ../../boot.php:810 +#: ../../include/nav.php:46 ../../boot.php:814 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:1482 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:1062 msgid "Profiles" msgstr "" -#: ../../include/nav.php:138 ../../boot.php:1058 +#: ../../include/nav.php:138 ../../boot.php:1062 msgid "Manage/edit profiles" msgstr "" @@ -6906,30 +6907,30 @@ msgstr "" msgid "stopped following" msgstr "" -#: ../../include/Contact.php:203 ../../include/conversation.php:817 +#: ../../include/Contact.php:203 ../../include/conversation.php:820 msgid "View Status" msgstr "" -#: ../../include/Contact.php:204 ../../include/conversation.php:818 +#: ../../include/Contact.php:204 ../../include/conversation.php:821 msgid "View Profile" msgstr "" -#: ../../include/Contact.php:205 ../../include/conversation.php:819 +#: ../../include/Contact.php:205 ../../include/conversation.php:822 msgid "View Photos" msgstr "" #: ../../include/Contact.php:206 ../../include/Contact.php:219 -#: ../../include/conversation.php:820 +#: ../../include/conversation.php:823 msgid "Network Posts" msgstr "" #: ../../include/Contact.php:207 ../../include/Contact.php:219 -#: ../../include/conversation.php:821 +#: ../../include/conversation.php:824 msgid "Edit Contact" msgstr "" #: ../../include/Contact.php:208 ../../include/Contact.php:219 -#: ../../include/conversation.php:822 +#: ../../include/conversation.php:825 msgid "Send PM" msgstr "" @@ -6942,309 +6943,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:320 ../../include/conversation.php:586 msgid "Select" msgstr "" -#: ../../include/conversation.php:334 ../../include/conversation.php:676 -#: ../../include/conversation.php:677 +#: ../../include/conversation.php:337 ../../include/conversation.php:679 +#: ../../include/conversation.php:680 #, php-format msgid "View %s's profile @ %s" msgstr "" -#: ../../include/conversation.php:344 ../../include/conversation.php:688 +#: ../../include/conversation.php:347 ../../include/conversation.php:691 #, php-format msgid "%s from %s" msgstr "" -#: ../../include/conversation.php:359 +#: ../../include/conversation.php:362 msgid "View in context" msgstr "" -#: ../../include/conversation.php:465 +#: ../../include/conversation.php:468 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:529 +#: ../../include/conversation.php:532 msgid "like" msgstr "" -#: ../../include/conversation.php:530 +#: ../../include/conversation.php:533 msgid "dislike" msgstr "" -#: ../../include/conversation.php:532 +#: ../../include/conversation.php:535 msgid "Share this" msgstr "" -#: ../../include/conversation.php:532 +#: ../../include/conversation.php:535 msgid "share" msgstr "" -#: ../../include/conversation.php:556 +#: ../../include/conversation.php:559 msgid "Bold" msgstr "" -#: ../../include/conversation.php:557 +#: ../../include/conversation.php:560 msgid "Italic" msgstr "" -#: ../../include/conversation.php:558 +#: ../../include/conversation.php:561 msgid "Underline" msgstr "" -#: ../../include/conversation.php:559 +#: ../../include/conversation.php:562 msgid "Quote" msgstr "" -#: ../../include/conversation.php:560 +#: ../../include/conversation.php:563 msgid "Code" msgstr "" -#: ../../include/conversation.php:561 +#: ../../include/conversation.php:564 msgid "Image" msgstr "" -#: ../../include/conversation.php:562 +#: ../../include/conversation.php:565 msgid "Link" msgstr "" -#: ../../include/conversation.php:563 +#: ../../include/conversation.php:566 msgid "Video" msgstr "" -#: ../../include/conversation.php:596 +#: ../../include/conversation.php:599 msgid "add star" msgstr "" -#: ../../include/conversation.php:597 +#: ../../include/conversation.php:600 msgid "remove star" msgstr "" -#: ../../include/conversation.php:598 +#: ../../include/conversation.php:601 msgid "toggle star status" msgstr "" -#: ../../include/conversation.php:601 +#: ../../include/conversation.php:604 msgid "starred" msgstr "" -#: ../../include/conversation.php:602 +#: ../../include/conversation.php:605 msgid "add tag" msgstr "" -#: ../../include/conversation.php:606 +#: ../../include/conversation.php:609 msgid "save to folder" msgstr "" -#: ../../include/conversation.php:678 +#: ../../include/conversation.php:681 msgid "to" msgstr "" -#: ../../include/conversation.php:679 +#: ../../include/conversation.php:682 msgid "Wall-to-Wall" msgstr "" -#: ../../include/conversation.php:680 +#: ../../include/conversation.php:683 msgid "via Wall-To-Wall:" msgstr "" -#: ../../include/conversation.php:725 +#: ../../include/conversation.php:728 msgid "Delete Selected Items" msgstr "" -#: ../../include/conversation.php:876 +#: ../../include/conversation.php:879 #, php-format msgid "%s likes this." msgstr "" -#: ../../include/conversation.php:876 +#: ../../include/conversation.php:879 #, php-format msgid "%s doesn't like this." msgstr "" -#: ../../include/conversation.php:880 +#: ../../include/conversation.php:883 #, php-format msgid "%2$d people like this." msgstr "" -#: ../../include/conversation.php:882 +#: ../../include/conversation.php:885 #, php-format msgid "%2$d people don't like this." msgstr "" -#: ../../include/conversation.php:888 +#: ../../include/conversation.php:891 msgid "and" msgstr "" -#: ../../include/conversation.php:891 +#: ../../include/conversation.php:894 #, php-format msgid ", and %d other people" msgstr "" -#: ../../include/conversation.php:892 +#: ../../include/conversation.php:895 #, php-format msgid "%s like this." msgstr "" -#: ../../include/conversation.php:892 +#: ../../include/conversation.php:895 #, php-format msgid "%s don't like this." msgstr "" -#: ../../include/conversation.php:917 +#: ../../include/conversation.php:920 msgid "Visible to everybody" msgstr "" -#: ../../include/conversation.php:919 +#: ../../include/conversation.php:922 msgid "Please enter a video link/URL:" msgstr "" -#: ../../include/conversation.php:920 +#: ../../include/conversation.php:923 msgid "Please enter an audio link/URL:" msgstr "" -#: ../../include/conversation.php:921 +#: ../../include/conversation.php:924 msgid "Tag term:" msgstr "" -#: ../../include/conversation.php:923 +#: ../../include/conversation.php:926 msgid "Where are you right now?" msgstr "" -#: ../../include/conversation.php:966 +#: ../../include/conversation.php:969 msgid "upload photo" msgstr "" -#: ../../include/conversation.php:968 +#: ../../include/conversation.php:971 msgid "attach file" msgstr "" -#: ../../include/conversation.php:970 +#: ../../include/conversation.php:973 msgid "web link" msgstr "" -#: ../../include/conversation.php:971 +#: ../../include/conversation.php:974 msgid "Insert video link" msgstr "" -#: ../../include/conversation.php:972 +#: ../../include/conversation.php:975 msgid "video link" msgstr "" -#: ../../include/conversation.php:973 +#: ../../include/conversation.php:976 msgid "Insert audio link" msgstr "" -#: ../../include/conversation.php:974 +#: ../../include/conversation.php:977 msgid "audio link" msgstr "" -#: ../../include/conversation.php:976 +#: ../../include/conversation.php:979 msgid "set location" msgstr "" -#: ../../include/conversation.php:978 +#: ../../include/conversation.php:981 msgid "clear location" msgstr "" -#: ../../include/conversation.php:985 +#: ../../include/conversation.php:988 msgid "permissions" msgstr "" -#: ../../boot.php:511 +#: ../../boot.php:515 msgid "Delete this item?" msgstr "" -#: ../../boot.php:514 +#: ../../boot.php:518 msgid "show fewer" msgstr "" -#: ../../boot.php:687 +#: ../../boot.php:691 #, php-format msgid "Update %s failed. See error logs." msgstr "" -#: ../../boot.php:689 +#: ../../boot.php:693 #, php-format msgid "Update Error at %s" msgstr "" -#: ../../boot.php:789 +#: ../../boot.php:793 msgid "Create a New Account" msgstr "" -#: ../../boot.php:813 +#: ../../boot.php:817 msgid "Nickname or Email address: " msgstr "" -#: ../../boot.php:814 +#: ../../boot.php:818 msgid "Password: " msgstr "" -#: ../../boot.php:817 +#: ../../boot.php:821 msgid "Or login using OpenID: " msgstr "" -#: ../../boot.php:823 +#: ../../boot.php:827 msgid "Forgot your password?" msgstr "" -#: ../../boot.php:990 +#: ../../boot.php:994 msgid "Edit profile" msgstr "" -#: ../../boot.php:1050 +#: ../../boot.php:1054 msgid "Message" msgstr "" -#: ../../boot.php:1166 ../../boot.php:1242 +#: ../../boot.php:1170 ../../boot.php:1246 msgid "g A l F d" msgstr "" -#: ../../boot.php:1167 ../../boot.php:1243 +#: ../../boot.php:1171 ../../boot.php:1247 msgid "F d" msgstr "" -#: ../../boot.php:1212 ../../boot.php:1283 +#: ../../boot.php:1216 ../../boot.php:1287 msgid "[today]" msgstr "" -#: ../../boot.php:1224 +#: ../../boot.php:1228 msgid "Birthday Reminders" msgstr "" -#: ../../boot.php:1225 +#: ../../boot.php:1229 msgid "Birthdays this week:" msgstr "" -#: ../../boot.php:1276 +#: ../../boot.php:1280 msgid "[No description]" msgstr "" -#: ../../boot.php:1294 +#: ../../boot.php:1298 msgid "Event Reminders" msgstr "" -#: ../../boot.php:1295 +#: ../../boot.php:1299 msgid "Events this week:" msgstr "" -#: ../../boot.php:1481 +#: ../../boot.php:1485 msgid "Status Messages and Posts" msgstr "" -#: ../../boot.php:1487 +#: ../../boot.php:1491 msgid "Profile Details" msgstr "" -#: ../../boot.php:1502 +#: ../../boot.php:1506 msgid "Events and Calendar" msgstr "" -#: ../../boot.php:1508 +#: ../../boot.php:1512 msgid "Only You Can See This" msgstr "" From 62727012d37ef3d3cacc413d5667dc2d7bbf9cbb Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 12 May 2012 01:55:18 -0700 Subject: [PATCH 003/164] language detection library --- library/langdet/Text/LanguageDetect.php | 1708 ++++++++++++++ .../langdet/Text/LanguageDetect/Exception.php | 57 + .../langdet/Text/LanguageDetect/ISO639.php | 341 +++ .../langdet/Text/LanguageDetect/Parser.php | 349 +++ library/langdet/data/lang.dat | 1 + library/langdet/data/unicode_blocks.dat | 1 + library/langdet/docs/example_clui.php | 35 + library/langdet/docs/example_web.php | 72 + library/langdet/docs/iso.php | 21 + .../langdet/tests/Text_LanguageDetectTest.php | 2056 +++++++++++++++++ .../tests/Text_LanguageDetect_ISO639Test.php | 72 + 11 files changed, 4713 insertions(+) create mode 100644 library/langdet/Text/LanguageDetect.php create mode 100644 library/langdet/Text/LanguageDetect/Exception.php create mode 100644 library/langdet/Text/LanguageDetect/ISO639.php create mode 100644 library/langdet/Text/LanguageDetect/Parser.php create mode 100644 library/langdet/data/lang.dat create mode 100644 library/langdet/data/unicode_blocks.dat create mode 100644 library/langdet/docs/example_clui.php create mode 100644 library/langdet/docs/example_web.php create mode 100644 library/langdet/docs/iso.php create mode 100644 library/langdet/tests/Text_LanguageDetectTest.php create mode 100644 library/langdet/tests/Text_LanguageDetect_ISO639Test.php 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 @@ + + * @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: + * + * + * 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)); + * } + * + * + * @category Text + * @package Text_LanguageDetect + * @author Nicholas Pisarro + * @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 + + // À - Þ but not × + 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 @@ + + * @copyright 2011 Christian Weiske + * @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 + * @copyright 2011 Christian Weiske + * @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 @@ +_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 @@ +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 @@ + + + +Text_LanguageDetect demonstration + + +

Text_LanguageDetect

+Supported languages:\n"; +$langs = $l->getLanguages(); +sort($langs); +foreach ($langs as $lang) { + echo ucfirst($lang), ', '; + $i++; +} + +echo "
total $i

"; + +?> +
+Enter text to identify language (at least a couple of sentences):
+ +
+ +
+utf8strlen($q); + if ($len < 20) { // this value picked somewhat arbitrarily + echo "Warning: string not very long ($len chars)
\n"; + } + + $result = $l->detectConfidence($q); + + if ($result == null) { + echo "Text_LanguageDetect cannot identify this piece of text.

\n"; + } else { + echo "Text_LanguageDetect thinks this text is written in {$result['language']} ({$result['similarity']}, {$result['confidence']})

\n"; + } + + $result = $l->detectUnicodeBlocks($q, false); + if (!empty($result)) { + arsort($result); + echo "Unicode blocks present: ", join(', ', array_keys($result)), "\n

"; + } +} + +unset($l); + +/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ + +?> + 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 @@ +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 @@ +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 = << 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 @@ +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 From ae300bceb9ed6a377839db7dfb207d23a0362b07 Mon Sep 17 00:00:00 2001 From: Martin Schmitt Date: Sat, 12 May 2012 16:56:31 +0200 Subject: [PATCH 004/164] =?UTF-8?q?=C4=9Cisdatigis=20la=20esperantlingvan?= =?UTF-8?q?=20traduka=C4=B5on=20al=20100%.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- view/eo/lostpass_eml.tpl | 32 ++ view/eo/messages.po | 888 ++++++++++++++++++++---------------- view/eo/strings.php | 35 +- view/eo/update_fail_eml.tpl | 11 + 4 files changed, 575 insertions(+), 391 deletions(-) create mode 100644 view/eo/lostpass_eml.tpl create mode 100644 view/eo/update_fail_eml.tpl 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 \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 may be able to " "respond from the sender's profile page." msgstr "Sekura komunikado ne disponeblas. Vi eble 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 - change theme settings" msgstr "DefaÅ­lta sistema etoso - transpasebla de uzantprofiloj - redakti agordoj pri etosoj" -#: ../../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 profile wall and your friend" " stream." msgstr "Facebok konversacioj konsistas el via profilmuro kaj la fluo 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.

" 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.

" -#: ../../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 profile wall and your friend stream."] = "Facebok konversacioj konsistas el via profilmuro kaj la fluo 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 From 89df33f0a8f03116a31351fbaa0aed23767bc3ef Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Sat, 12 May 2012 15:55:03 -0400 Subject: [PATCH 005/164] Merge branch 'master', remote-tracking branch 'remotes/upstream/master' * remotes/upstream/master: diabook-theme: fix in earthlayers diabook-theme: some fixes * master: From 93dc96e2cf6e11eee95988be3f89249da3bfe18b Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Sat, 12 May 2012 18:53:01 -0400 Subject: [PATCH 006/164] css fixes; new screenshots Signed-off-by: Simon L'nu --- view/theme/dispy/dark/screenshot.jpg | Bin 39101 -> 46268 bytes view/theme/dispy/dark/screenshot_small.jpg | Bin 0 -> 23567 bytes view/theme/dispy/dark/style.css | 21 ++++---- view/theme/dispy/dark/style.less | 40 +++++++++----- view/theme/dispy/light/_base.less | 1 + view/theme/dispy/light/screenshot.jpg | Bin 60400 -> 53187 bytes view/theme/dispy/light/screenshot_small.jpg | Bin 0 -> 26448 bytes view/theme/dispy/light/style.css | 23 ++++---- view/theme/dispy/light/style.less | 56 ++++++++++++-------- view/theme/dispy/nav.tpl | 2 +- view/theme/dispy/screenshot.jpg | Bin 0 -> 39453 bytes 11 files changed, 89 insertions(+), 54 deletions(-) create mode 100644 view/theme/dispy/dark/screenshot_small.jpg create mode 100644 view/theme/dispy/light/screenshot_small.jpg create mode 100644 view/theme/dispy/screenshot.jpg diff --git a/view/theme/dispy/dark/screenshot.jpg b/view/theme/dispy/dark/screenshot.jpg index ada60ca61e31af0e46e1f0c26d658743c2cb9e67..f54873e8e4045099d210cb8059ca7703ee255d33 100644 GIT binary patch literal 46268 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 literal 39101 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

=S&5}{WqK7xbqnaHMg?8-IHx2a(jV@<Qg=ZM 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 diff --git a/view/theme/dispy/dark/screenshot_small.jpg b/view/theme/dispy/dark/screenshot_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32d86933144da20f2b27de2292a861042782ac57 GIT binary patch literal 23567 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 rIvhYsn){TB4JIGqE=T2p!U? literal 0 HcmV?d00001 diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index 12575ca91..aef326775 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -76,7 +76,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;} @@ -105,11 +105,13 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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:#2e2f2e;color:#eeeecc;font-size:8pt;margin:8px;height:14px;} +#search-text{border:1px solid #eeeecc;width:90%;} +#mini-search-text{width:10em;} #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-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,13 +120,14 @@ 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;width:11em;background:white;color:#2e2f2e;margin:0px;padding:0px;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;} @@ -165,11 +168,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 #eeeeee;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;} @@ -391,7 +394,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le #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{padding:3px;}.sidebar-group-element:hover{color:#2e2f2e;background:#88a9d2;padding:3px;} #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{} @@ -442,7 +445,7 @@ 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;} +.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;} diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less index 96c92947f..2e6e0ae8b 100644 --- a/view/theme/dispy/dark/style.less +++ b/view/theme/dispy/dark/style.less @@ -448,9 +448,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; } } } @@ -652,13 +654,20 @@ nav #nav-notifications-linkmenu { background: @dk_bg_colour; .rounded_corners; } -#search-text { - .borders; +#search-text, +#mini-search-text { background: @bg_colour; color: @main_colour; font-size: 8pt; margin: 8px; - .box(10em, 14px); + height: 14px; +} +#search-text { + .borders; + width: 90%; +} +#mini-search-text { + width: 10em; } #scrollup { position: fixed; @@ -699,7 +708,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; @@ -749,7 +758,8 @@ nav #nav-notifications-linkmenu { color: @bg_colour; margin: 0px; padding: 0px; - .borders(3px, solid, @shiny_colour); + .borders(3px, solid, @link_colour); + .rounded_corners; z-index: 100000; .box_shadow; a { @@ -758,7 +768,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 +803,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; } @@ -1078,7 +1093,6 @@ 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); @@ -1112,9 +1126,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, @@ -2324,7 +2339,6 @@ div { &:hover { color: @bg_colour; background: @link_colour; - font-weight: bold; padding: 3px; } } @@ -2637,7 +2651,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; diff --git a/view/theme/dispy/light/_base.less b/view/theme/dispy/light/_base.less index 56fd2838d..1bd64037a 100644 --- a/view/theme/dispy/light/_base.less +++ b/view/theme/dispy/light/_base.less @@ -34,6 +34,7 @@ // darken(@main_alt_colour, 40%) > #333333 // // lighten(@main_alt_colour, 20%) > #cccccc +// lighten(@main_alt_colour, 30%) @disabled_colour: #dddddd; @shiny_colour: #f2f2c3; @red_orange: #ff2000; diff --git a/view/theme/dispy/light/screenshot.jpg b/view/theme/dispy/light/screenshot.jpg index 81ee35afb24ac3503e27edc727bcbf06bd97937a..46a01ccb86da922d59b37fa3758a91b8b7b4fd3c 100644 GIT binary patch literal 53187 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 literal 60400 zcmeFYWpo@%vM$U__hf^{VFOU3IGEG1BkzW0B>8^Mj|d|#sGk{ zG=K&G0KmQ%000>P4h{x@e7^&GFLdDGf8Jv={Zak)&zk;_d6#-y0SEzLp`l@*p}D?!93sV0gz}==pUE_pfTk2U`XvS znSEn_z>*18cVj6`U6Qlt+xx-6W8>iB;ZuC1q@t!_Wn<^y6}(FNpT^z1N5nSEg~1!I3ycf*mfC|qLc+fTt` zle2D7T>SyKRgID03YDSB4uoJjEts2VoR*U)P)dB zZ3k)Sg>Pa@#k-nK=LuT-4Y2vyJCL`o+$f%Urm_l||MzFRE~3ny;4x2d29Eo1mIw3w z_37cQf{2&Wk!AMAkv1P@JO71r{Khu`tZ4CFO1ZPZT{1XpwNWFL(=v*T%VQKbimiw| zd*%n@kot<8b(IY|T+P6hnFyzT&9IaHs-M8v-Xgl#DkD2fdszK7r(Yu+gj}rIc{%YJ zOAM>yD-Ohze&-~O66b6PY6hk}*Au`+gakrCR2el}mia21vb~v$g1RgsL+QFRE|^t! zl{Tww(~8vHZ)+*)9}sYA*WnR$QI(>48_f&t3M`zRnKfk#HzZigv{t*8$X~JejpbE4 z{~0;)Vru0J#3%1d!p@%LFjnP@Q)$&#-=xk5@;h{gvw=*+|znhAqF!F?kNlh`koz>4)Y&;;<;lQLdg zcm^{yn!-oX<>Ar^U0KcaT_R5;?b_*K^_(@+)bFFjbU(ocHe^&Q+oe)1zvxW-IQBAj z*GMhlor1Vv-|WLYeMjL-$tk!DP!QNcVxZ17-Bq(4-hs4t z3!{;g`c-msX0xr;5n47;@Y9ATt~Vlqh9w3C@M1A3?NS+SUFI-2cVSc==3WpZhQT5C z6~M<($J?%<;am- zzzbG4kAR&}6f{%#1}H7ZUf$7MEdxh5O!57YUuUGvw>$u)>MxghKn;vd0qi)|7I9h< z70x`nDJh!Iq!@}5@vZGRr&v)PFP>~1J-5ti`L-TNzX5pp1jI5po`1bS>9glM^iW2L zJ8{r=ENjNN=oFINp2>}sX_nOFUAo2=nej~-aY7!DAh+py%5I4)5~BRI9g)Mv&CD+> zzm|;2ZnMqLI}HA(HBkaUB2Q$d+3zy=89!a(C2%fao_|ZcoDvuAh%6Fh{-p(`>x}n= z?4%0iUEZ1Xb*|X&bl0@<-E&(;?yR0vM^|4tEql!m;PZ;($aW853|(tC1#f`NtnA$J zv{yGTzpBm#ipX8`rXH(3dJ3}hn+Y$|*O}JeN_Kd90IM6AC8GnoM_V@sq%0Y3=YMHj z4PDF^fBqE;ax=|U0ALs!VUo=k#l5SNQ5MNoX1$9;dxM$>?!HN6m#V5ONikbpOtH9W z0w$tXo3Xb_TvG~KNPqIANrSix_+kL&e{JArK9}|M=)I=1KPPX!sXTY9(aya+M_>1| z5?yO$neO!hcfe(k=l<+bh^W~`BZlBBY!fJJE)#BQxr7uY#S9e(r)*~;l0OBG*ac31#uFV|WDGIdP6mxI zTKI+pF5b@@z)B+Vi{8Vm@jUZ&(5yA{&iP}u)uUak@1USpE^8mn5&I!3T@smjAj}!c zB$a%o>(S#3a;T*;Ooj_MUow-!bC#Ez-E>|emXoD9^We3=&&hzSw%FEJVR!-e1H7XY z{)<$8W-X$175nM6$cOQjBu#@Em@t)TU9*S|t053&O5a(;)d0&(R0h|VdKyV8J3Y5HF48wQD$#*fZNkJE%ii!oA3 znjfS*e_RTX-%Mz`z0k_SWnta^W!RthCH>x`)d0;Z$HAvlSH`4mt1!H?v~ z$EXqyK*FSC6PCKb1H9ksFJ`&ojS6{^_UwLq3yov3QLcA|VpjO0nmSSgg4wi^u`v>x z?guc0ff5ix)+IrgKjTnc{bWh=PyAkj?cFUM!d8#NY-DJpP(;U3B!oTyGg+LeHd z%K^xDr{N4Z`@%poS%nYL%yV zEZ-llMa3ErG(=_kwcVaET#6Obmxpnk2;O1VV39_fycfZWA>5r1LgL4TbxwpZ`>PX8 z9mXZ?w5 zy#iUvtoP27PC2IeUjsyl+u+;UiST;_goe-{ghIN!0mR}gqc`PTh6pD*yde~4L0_l9 z8t}*`?wJPnMfitDFO!q&0|J0?1tb!^-il*fyAeZqOGAAaK}=DM;;)570|gS_LPnVx zL|q5><`eQh_@Hr3*hP4A0~8UZ?DYjbXWb4SC-p*Nq$FY(k*E6UY}z5Lj3zD{A6m>qrAtZ5im_#RoLVg0Qy-X0I^-6^hb#-t=t*n;b>CSl>muWuJNh#*?2if zFJTRTSBcoJ&tin$eXqv;kmP>)5i$12Qws9@NNA$Sf>d9c-T+_xuk)3aViDe4 zbw&TgildFwA}ZQ5fp_O?!-xg}Gp-wn=_0$%uj>%jzjw)(N*D<~oNQ0%tg~ z&gBI_p5qcVKe^8@On2jPw&srD^t$cEqN5pqq_KPg@ zfr`R4t&76=es52URsQ}PpiTt5EbZxFy@4iYbq#M0zkd#H@426IhnMebqe{fMiToQN z`pBzJzUU1w_^VT$8u6%v?<3#&Y`h|xqHWkj4pOY@$L&Pr&`N}RFSzFMwQf$5g3!`uodVRJ^~U7;02N&kR0p-9o_&u$}HKVmLk>dAw^xphju%--2`?~vV4(Roio2qnzvK0 zlzzf9iZWv@7ZS9f9n$2Q;*%FbA&WAFCqcO*>NWi;7uKq-ZLTweY%Fkzf;81vx*jYX zhISd;Q#CKhGBDAzHmH%V{*3c`&zG`8g3a0oo+`(O%Toeu_9M^rdO?^|?i+x3`o%Pl zr64DaI>hhvtdV{Ycx_9IX~FGYrQBIVehFySOl{p})aY#q0mNDD0#NRyUC3q4unWCm z642^gu1rTh-revHYRm4)%`HxyXBmcA_tyzI)B7*{Dpug5(<9}FvD$bs2f;~|D94CB z^H)eb0cXKJ`Fc!%4f}Mq@USDxt{55IrYL@r$hIfR(OW|wkykB?&s7L&Kc~1&DI-h2rr~#vY|6(kA{^{lR4KQCg#g90e zwW{;`%a43L1ve z{AKL`E_pjt4^Ng`Hqni)4$QikpEg@#43uP0adTjUdrBD@Q|U>})%$TSdh5(L@_Z;;o!DV9d>T!vI$bTAHjIwX6mdG}@gmagI&6SsTwd~Z#e*T_ z<$o@|`+_(5Yb2q$dfKwQP>w&2N?8qJA%+IuK8Zy)PJU1H&vBLex9LWa>Zm9uO#egk z8$kJCjt9BROWFS5MRiB>nVY45`*Wn~ndMJb^DGnUo*1SW&_?Ih(YF!1qy&Z_XK6IT zYBb{CY`g(|NEJRi=|6a09ZB_6Asg&v0dBu%V~0vJh9_>p6TTmlLZKtt7=3Bd^j7zj zJs5nCtxf^4EaK21vvhM>p6!2!`-xu98a#g9*VzKCkRAU5Ix+p(R zJ&!+Iu_LJIMyeY#_K_k^1FO35I5)H6K~f^2Q+XjJJ6{g46i;i<2FTvW{=|dQzyP?! z%i&L$P&EfG!WU_pZ+*cuMlitF+vZIaojb9UV>8YI{Fs+i5C4WQd@Fog;`Efr8kVkP z#2#;eK%JZ<8VD}Se9={Go|`uSJ<5Y(VBQX=+T+Ph)@A80`C*@IdJ{tIPrpy!g+*B( z!Elv!UQ-(%R5CE_vsuQ{M}5Bz`p(=3KhrQ3G?AQ1MR<>>oDH3+$1Cpf%m3ybyx0GW zlk#`&(dX~6>iMp8R^h*{dbgMR57FZCA1+HvcY8j#ikT^I0Q_nZHcTI?oG@KXc@e-L z1;icw>@9hl6Dj-#D15)hjHia_O9BJ^xT_U|00%IWGe;pJj*hEk@R^%elCj^WjwT4G zbZTLH4U2;DHlwxM`Dh&by)HEW^g@=S~WCZ)c$5r0}egoe(Bm4elJqlqi&hxSj~69N6CqOy-IAHGb!ngM-IJMnOcy!NkSI!NkVKC!`?8Cm;i2W0TO4kbR`2rlH0ore~z5Vx*v= zruqwG{LVMS!@^_0!(&k4W8+i(w~xOt#^7oYB>#aiCj5ig{)009lP?AUpuyf5V;FE) zxOd`J2NeJY0S*BHiGTzN4Fd%O`3GSM@fW@r8iNUw^qpG8V%D<*#m0S~n#LhxWm9-( zgMEKg*K`XiI_$t=v#{G=lIuIh*KS?ma`@$J3mF&(L3^zI0X6!NDL-<0Xoplq*n2Q!esznWkDKG{V&OUmbvs=zrCM3TgUdBH!kD_`C&CC}~9!p7>Uqo0yNlBSsSQt|H|Jn%v#}4?ut{9ngY7?&iySX&= z7@or-RW$A%|-T3xX8?PRGO4P{*oVQ3kl*%)Z6X>g3ZW#T~8djEjJq_CYDKiNcFwG zYMeOy>I7aU|1K~h8o_r9!`=xp717N3D1u-u@CNv{O0YS5pO8_RUEr5r;1}kmwqu|{ zMh>(Vw|Mwo9!+4ong0+qb$U()iIj%wVN9*@nLqG}x9!tdHKCLG-NNYxd8MC+aY43< z)-+x=_vas7A>A{Q2r=NlK@rMAiE4Tc)k$AOQ~^Z%wzfbZ7|z8>NzU$7NJt1NDL5&~ zKc8q^7x`hF#CnsroOt8v$9RAo)-%sMhSA=B=%dz6@RThA2=j(WdClrfg{809^>!eyM=IR zbjnz)bI6&B_OON(AY64gz#>!jqGqee4a@vUb8)^S3lkb2TA%mI6uuqjP8|7+EgU3K z?qr1+W*oR$5C74j>Iwm*-W03Ud4_vdZK#Uo4Y|MD_WUI~@Js*c`M7H1&hzD+(d5pL z2FLw-53wlk(&X3q<@sQ zcVXt5_${u7OR|{0qb2A!t4Az|y)sDF;R618qMc?(wpy<;@)}sU8KceCS7Ts(X7((e z!#2@+CXfS$z3F$nXF*)y$#k%;E)Z{k57$NOL*DC&D6h+T&r_dPO^?jP1PT)~-QOwY z$F}R|MEvFE+vcre0`J0wAQQv2u+K=5Gh1s_XF*TtvTdu@<<49U4JJCxokR&Af~#qZ z8aSSM>(y3lMPri{T4KgNz%)aeSfzVO*B$YwIuG7yz!a^RBjpbk22F|)QjlYq&M>)$ zIJM8z`@Gt&~@Lwao+7R;e>cK&9Kk{GPsW!Mf04wh^ zv-1@{c3qPh%FCZ<`w(eM(Y?JeHtRwqrN%3En@ERWUXWTmXO$Pj)wtHw#+v4E^6IFy zPz6n5o7tZx8N$v)omZS{+hdhRht{%TUuYL@#QfcsvP*XkB3NECcUE0Q&rBG@(lC*R$S4(# z7f2#J8O=!dzDP6f?0u)yuYmcb6uVFhqYQUP$8vVB zL!MF8PD0RrEm>w})v6Ml0lk<=dZr}l3+SA&*@r--j?yYb%)p#dOS8=}cQ`748|%`s zk^|ltCspJn^Dx}Y_UxR26}g4xi~OIaHL<$(?W@*qO$=EtG-4f=8*c!nH^7dP@ZC(+ zI(_Yfa8m`bmTZKa@bse=2BJMvZg`ERAB=S5?={+_HD~X`P91rAQLaF#9eTLX@31=K zx^`UB!5(N{ZMmIZv{4F!0#W*`wrTyciga{5uH|;7zy0`oghk~3U;KOsBn9*W9|ELO zns?^LjfO@69~bb$mzU}HKI8YeLs!i*QHEfxKQmzXI5o_)q?rfoG)$GZjC^Qdbr+KG&$w zz?eNb{4~+fk}UT#NDe0Hr^MHXjFiBr=HiU8(V0>Si)2d|V+A;kg55e7EMCnzR26A? zMOHDdBY=V0V#qM=-LX{AeW&1xl`^6`=QD4;8ao^xeQs2JS_;j8N~aI`$e>{TuLnY88jTXhLoaY7mjMn*g`v7;6#05e-ta)^ZGH$aI?`M}cTPSeU|BMZU+g%v%dQqp($ zI6%+JQU3z?%Y0HNARM-US9}=J86zif+(Bthp{wVdob4Qt`QoFHd}%ITL_k&8y*e+1 zv2MPma+H-xwF|oLvk!uxsGCLRr4VB;P?4?29i43YLQPxf4n*oUi|r$Z&K=HI)T>tu zP;-<D2GgUT?H3iM+$Q!1uzLyNIP*9pjnz(sytNU1zNtRXM^c>q5{qGJl;%5LH|^DjfXNze zdLv7@S&4+aMS|Ha3?>yz-=)x56(vI9YJ})e4jz+3&Lb%R9=O9m~p5`x%oL(6j;W@7`*lGzl>P}5 zt}q)`Yec(*pNvk7iwIOD6=_X>loer!VBqmY8Q@R<)II=dkEDrmX5viWDJ?_K3k7Ul zZdY?>HpWj-2VPmHFOGb$kl}|4Ts$$GtaYNlsfo**o|4p{rKR5WU=nJN5sTA3V9U+Z z1f2V6l#nqLq``sq{o!+ZXw5&MfKs8<#=%ISjS{-j01}W74%)H7Y!mW z701bDcbR*Ef!P`2P`ei8K_yzjmS>_UETx;hOh*SlU8r+&QgJMF1>6Oy&j*RHNlx-K z%sV&{KVF2zMd86HE=dy*@q8Gwz4VKzSv$Q$LDKD|-tIj-NGyn-9pP0h*eCqGZ3-60 z_M@#!f`@BR1JHo9G{5^Jt`N2-kX~7mI{auuImLHkEeZUH4oK(;q;sp+wzX4K^wpEj z>n%C{hDCO!EGhH&$g}Nwy>H>rWO0LVIg0XiNmpK<)9ZtPYM9&(+jk*_5#>3B5ez-w zh4oOPO%SUlD%|w>f`Xj=z&$RY@bk%wK)$XSF6Z7XK;>8BuNvMDvIvlZF^BBzs~fC zRJ+W5L90)8B2$@OR`)ow)g9#r0asQ+=hg^uCJ!-dYp~b!k|T`?mPb{r`s~KqR=L#% z^bJPbHL^cf=7XSgXs#xXS}^AH=A<-tuoQQm_sYE*HFOZKCK&7=qgUPl1Uq$@&?dvj zDer@qwM9()9`%!+vrgbdf~tO@VS6kievKrV*C)vjpY|8w)EL~Fv`n$+caL>66tzJ; zjPDDAUyrH0?A)&7&MbV^gD(_zTolWz4EX9jPcCKzv>KR67UZ8?7-sy-pi90XDZ?18 z_ot;Ur{W|QFxTCd8CuEgd2laz%!mI996y_v=Z1i!( zK^$!`#;B|s!}Nv4=AF6w%VI(LC`)bXqIV7T{lE4FnMFRSv?D_d!+g`U?|uG78LWd` zEYj+1+>&f`+FNTc!fF%2oOy2H3qI47p`3NZD~}|@=a=eg5DzbQkBr>N*VfctM#p-I zrJX^?))6X_{`IN0W`0oN?5J1jvw(=u(0%qkxYXlyW-x-rr}Yj+eB0j%^x2cHXvCtM zZ-BY+UQT4n&rBsA8pNfhmUdzmajX5gRCe@MV?Qaiqw;Uc;=X*-A+KO?U)4MyBF~V} zrk@2|LMfY8qoJaqf&Cw!aMB|>?Ken&h49YIbeJS|6PehNKzVE>SmXD4*LT!s)aLA4 z*iqzODHb~^6ny-uqb!k-XqU!vFOt@*t%Vh^Ai?RaqL*o_DK8 zxJQdzdYzkDCdIt~Ew?2aNzqQm@|2-?Z5HP;vBat5eJ2GB&SkyqL6`Z5aIT^}7fX%7 zAg+7ewNLkgr4luxTWSN^r!riJtpd&etlot2( zJ1{vA;{yzB0l^^RlD{NBVzcAWVWad}i8b~30FDx;zI<{l)Rp=kmaZdD%kn8*mN|KaId+u>yu8&oHzFIoT{8}Ld?Mt91nG0#MxT0zRSrYrlGJz!MeJ?QC3GQY-&D0l4SN6s!K8F3zTKgk%+hkm zR>IBPq);nGevOp6=6)U5R-<(@2;nw^AcX_d2gqI)jw?aDZBy>bsVvXI`t+b)_)sx1 zzom4ZTGcbT#352{$FQ!|RWrY1ywSCPTN-RaBV-6FDe5H~T_Q}mvy7yJ{<6Qf5StEW zU8n_bO+6usr?QT^a%NMGjHe_%1~uVP@6bXRpO}kYP!QLWP%X(-=ujQpBu3(nD*%;y zmuEWD;bLA@&4Vc?Cm}z)9p7Lq)}rfVTz?8$*0O~B_v8 z+$QjmXnFxTDu0Hgt9Z97BeWIG0Jqyjtn~oqIg>}?cRUKwgOc~=%hzfOHls*#^hxoH zkD?xlk2rbCC{HDW5cv#DecEaa+w<$aW%mg0Y8)ZdcOCO~s}bF#t2tzLhLL zd*@=<7C-wvK&R}JfJ4RDtp=HDM9*0~8vaW2T-qT61k+4iFocFpY z-YcH>Rte&KGbo!wV)Sqdg0r0ZaP-2=>jY{-=N2*{$FrlV=f6%!U+G29gv;pZ`f2br zEYQ+z>B%lEWM9!{+uqq>on|JdVb3LF!FA7?J)}l|Du^zC_RGK1VXc+R!j@wxY6c;r zOPsv8ht$z|?85^fPZKuMvrG<{W?quiO6}7sl(%xU@R*vd__tl5L5aG;MN143sJ&zV za>Aj}ZT2aRcWm6^WKbrY4z9sRT4wQMWx{2hAMWNh7m}{_-{;A{&yo28mLI|t zp|Rn=$D}3hIaY4g%;?u678fIj?Uh?=tb~34cecv~KNJ;c|Esc6ef%QznLdauMZUjx z_CMPHmveUPqU7r}h z;4@Y}NK*EgN0IRiO_JeCoq|AuRUw>(W$AOBP8Z_NVMAWRHv=Ks`LJW|qO0aN&;$J)2H z=9>kVqw1LMuY<)ubz}Wi+Wv1Ir2owZbqnQ+cZ+|-b zr$1@`Q??^8H9caTb!)DFvozZ{2vxYaxvIhu**`kIDJ=$U;N4>H2C*Jw?UFX z2p@XeCcIRECfg=nQx2*Sf5kfg7i41KMpsc3+a*ob*4hIW!?LWe$WGc*QPkho_eE8Q zAt5CQFu+DLi;JS&YqK{%K-r#ul!ru!Hwxt*6(bXVQ4!T~$+4ye6pu}!7??f&qy+mV z)K7}j#qJNNr@x}3?=+7`^P*}Xjn|c@*-w6_)#;o*WxXenRI&=B`QWP1p!Tz|D()-D zTS8T!{3Vfy=qkIYwvAE)bJ5KpbehkMW7Pm)1SKND(ahM-mUkPw|&(LcGL z7-cCKSYC2nG3B~Q+BX^F>j-QCRT}c7T0gt9wcr1&m2qq-t$YJ)i#b_>)Fm6tx{$x? zJm-&W#)*$whbjErh~Fpk0bk|jq$_h6WyB@7z?byTYe;n_(R4KT{;9&)aIA&ao+jCv zk!E+Ps`CcuD{*H>wR%w}xy3*6en|SfbnHr_e!!mbxGdp%*>F!J%`pXu){V4Tq{6~zmRHX|V_y95xL*{g zu-<6n1c;FP^=5089tt+?VbSze_7xoh=jUdbIa;_VEMy(_tF(5(iicr40~||}9Sw04 zi6ym!K0d{je4KzxkpxwDVYdv*+lmG&!<>fK%;9$M`E4ty87fy66qXjcM?@OrFf&@O zv#4+7@$uV?%X2t=9yqGPp3UN@dTMP3hBQTHzm4PrWK(~{Db+{C;JcE3`ea)@w>2o4M))ab@5(ZW(jTMIjQY9XnoLqeSwLEuLE>cBL1}bY=4#9!Q>2Ro zq`p($q@hqTr_}rPkU)`E-{Bfo4`s4_7abo)qUz%se}%x8ek%g@!lc1qAw`wpL@iYC=WNZ^9ir?o9JlWV{q;GD)>%RV7gXK`|b?2B#0` ze65(GJ3CIxmSK@_eS9Wu@cE@k04TT>&l}Ain{53VOSe3(B;U72d{q#2dEwgUc`HAO zr`zJ|nYBhXNmR<>4pLuLWL#d(fI$#VQ3gc{T9XCBPg8b^?8Qs7VOFrO=!U{_|9x5n zC+;q|KH%69VM_ggZ47h@eKhzZ}3J0yxlpl@jDmP3poUBO*vQwvMtoODW8A zeo}4Oj}HiT&qcy9y8@CAQWGxo;W9Iu%TT8pFjRNc4 z=*CC|w|jMZIhlw%^$Mgl4pXNXHi=h}4j}q7rTk3brw6csJz5#M?5G>ga>^cQw<#m;nS_zTC zIs-?e0_1IKV#LvQ$80(lzS0+*;_%FAg|WN273Zaz41NIZ+JQ1IDz|0wMN2K1UI)^H z;xM2&E?>L+Uh zM{P_HxrN9!Aj{*!O)a#WX4bu}~7zUwzxoEUx2$cVDAhH$KJ`=Gnc z8!1Ym*zl>m968*KEHI9lJu%gDv5MZV{dPgF%<{s(Ll$W{f|#(+DN0kJ5~;wGjDYn+ zBvX?bSW;j;d0Lz-5u8YiA05AiB?I+yh2*@W;^S9&%R05Bvg5+*_;wRzzW99X5s^^0 z@e*%p$@$yARM!hyGE`S;%*pQ2{8cVzDnbL_i79MWH(6+fY|}0(f7JFv-1H2 z3HE{#aS#?(hWdMcK+C1OlZCEN-23zKEA09EmSd1p_)C`JAB%;(Atx^>^B7aLc}`A= zBq56?xYU#&L3M$VDWfHgAiW6-aoc^aE^RgoeiG17-ihl#->4;@)b|g*$dj{J#G#d?;mn<}UHivSIO*mhNnh1HX zTR-WGu_Kxg=Yw+$_w*e2>#8H1+T8i^(AM<{Gev>e%%D+f>m8I8I?2KzWlbBBrh6}y zk`OYgQz&yo$6K3I?60^9F)KZeG@tV{aS&M3R`Qke^G*o5T&iqmE;R2OZG)XY8RVXp zsw`A7^~A1DO^xZF8`+hI8yK9zOyLa6@n(lr?}NondZv*n-A7lKIR&bwCS^Jm=dClK`5u`7yxkz626 z$>o8d>b|yCCTlq`1{ku_eLrMXi}zhQ4Adg3$k&PaakaL?>1P}SjehDEb>QB|40s)o zmpYMM9htH>)43Nbh`5TN*{8=PBX@ky;N$8 zT*FusVX=-kFpR7T@CPfWb}w0 zTOn6L0!}_HT^V4M!UTQl>8hrT&kQa{$3_fAu~V!f1lAWGF-&>CSTVdl?y}8yXwbPy zS9F(9iAa>9iBbn@+($Nu8d?V6Ak;OnosqMqfun#k5bUZiUX5}K?l0Oe0;l=OeYV^+NtSbF7S4zW zMVGS=#^~aAVQO&S-?X@^*&msxwP)|OS1`2AoiPx|EGu?8R1{}ai7u{;kDBAjNI=gc z#fkcRx-1`Zh}W5zUrKi;B~{f*8XBY@um+> zLfqHsdLX6Z6FZy9$hsQ|krM^lM2ZQ70)O`(53%r6mpfQnqzd_q+mfChpmNR6`cAh` z?l?HQSkXI~QEwH0cf>6+$hC7E;U|e?5KRZ`^dMQvnarr{3P2lY!p*?g#Nw~6uth`n zyj(P$GH@mUo3YLaM5Y(gQDoz#;Ez+QOjh&Zw=<(B|JKEc9k=2m(v&?elIt|PCD>rD zEw}yPJG$Su4L9+f)}eLWBFdE8kJGP$#mv^^Cjmi-u+TCQaRonuWdE9FZt4O7hCTjy zj=ycV7BpM1tbn2hp#~H^+x>(K9n;c})lGh~RDrD`k|>&yhG=+8+xA<%wCPLyeNL_v zapX_ftq_u_aJB#(gezF~!}^4WIW{QE7-cv-plxVg5tp-NYfXJahyDSoC4i&8DF&(O z?mO)J&`6kSzEOjYam{P1f;k$cI0FG3LqU?F?-7CNg;dpT94FeZbk9^Cc@`tOy(H8- zLlCY&DP(_1PCyk4XCZIqYd11ug$1W z(OMrs`?y@;+=N*rVg*ks&ow5fFvoYg4ZBFDLjcvUKk05RfWtxhSh;IK#$wmh;^*b~ z#hEvL!8OM}fFs9)fKW4}cr4=|o|*Edxq30^DMvc4X%WMQ?%=4a^8*{FcS2~+O^0#d z?m?=d_reKR*p6+UjV7-y|D*>zyyzm()LvfRUG$&Eu0&d)W9XowFfi9OoMd;pNL{%} zk-2LaV>lpE#;w}6hWbTL9#Umi?FL^as7~YNOCju9G0D02p`v>8G|$KWyFNerX0_3> z)JF#S%rf_pdl_(!mWzqFv8scc$F`NF<@avf!cKac3c$gJuhB^JU*_G``G{I%%j^yEJX-n;DWhn?Upf%ep)xGCxV8XqA*tI z5yoDXr!T_~(|z#^ax?d6JAxRwjjZGV>y>dPx;_ctTOVIs_d1<4x=JErbhxR6jx#=&+7N<=*3o||BymQTe3zPkIjIu#2jRya8|h4SsCoL z7iH8>S*uGC=9&Ykh>Hm|gZuR1eEFAnwK0TRZd9uG1plR^ zAP=-A+)bM^r2BO+P|q^0ekg^qrlv-zkOdIE{KxxEZ@OqU#tN7RJDQ-=RGVS=u;B5@6GEE3tdk z%B!8Z8i)^ns^ZrnL17r5(i}lX=dN|R218)aZ>o@x+9 zzbh#Cz}(!$dQ)SAAV9j8B8K5kqR3l4pU;%u@H^7rrJIH`= zPi$Ihgu!HQ(jJi0OZdg+aN*>Jj!2K%x8e(oT^hH5$jHk(mMJH^wrAG?v&IUTn`v)t zrrA$at*@MDHQTTDS@Bn!|6jDdRZ!avw=W!^P$=#apg0t3u>>y^cPQ=>Jb2IoE$*ba zLveQxQY^ST1a~jeVzuY+?)}c*=j`w1%$fOaa`~SmGg(>dr-Giio;8?~?9FRSAa~Qe zS8lM2)wv1da<8$i(<iZzrU@iUXe|d7+ixL6Vg0m8H~rNv`z z%+b**DbKHx$sgB+CCOVYP%b{F&*k>g-&Edu$Q${>caToqt~rxs|ASB?*bAqn*)74< zY<|7@tR!vE<<<48^JJ~2R<)cVRH#TZ{X%8>U`lX$+3K5_au3diLHQu`p zk)y1_?rPEwldj!WR$m4|Tqxf!8c`SJWV^jmPmI)sju(Eg0UVxjs?HzJ02`ktVIGt<>}~s@7OJpV3N+1;eY;n(PghHL|Ik<>bhL zDt;W}xZhQ}m}YvonjOH<&*G-}KD_cac93ex+W6+VrKNAEVWG0k@hrU8Q9-+NGEVoj zT>{Wev(_pb$I2>qqb@cD{vxu{tUNzDE*XQDv|7O_4a?4j2!=?rJ>!#_0XvkFOtWr# zi9EaNNCP$`FN;R1FJ(?lU=z<~RkarX*dDPh#k1mJT~L!a&*0kkLv;vk%=E0JuyDZWrEc6z;tFX$?9=c1CAp? zS5@r0x?Oyxip`r5v+<4Mc=cAMZBNH$-E8a;H|351P~%6N(Lj21+rZG#7#B zy(8;-hYG98NYaXUc*TY`iPgvB_DI2DHsf}q!S3^k-JH19R*N3sz$th-4K(#LE7MF$ zK)5A1Zj1(iHYsirE zWCTq`7X6W^z$EcLbKW?s*A?SP?lE_MCs{k>ohcU(J>?@xwV0P@7mk(z1X9*CcyT0$v?ZLW91$Bs5Vs8 zxEnO&8Avq*XlF*&X?T0@-<|jGuC{>DIwuRi*jF4=tEyJV$sgW4S&Ov=zY%AfF_IS% z1a@Yhl&lq~E0o_oCyarM+A7~Qg7`ss8dy-iT6>W;p9zd#RqI5elixX8MPn-Ag;|9k zDyYTR?nS;qb4=TvzzfhKnU=3zE`of0(HEA;-LmlZFr6E|gmfi&Q-rs@{1qvAXEI}F z@h3yPmb7_DrF)Da)MA)`kp(ZSC|U8RkNDWUKF8DzwRgvmn4lp7+pYbp0yFCxVMKal zLjPXCUQ(Z3Y$)_;5VQPM57b7(a5G#gOw zY2u;sYZ|QWYn`tYX`=#=GJcSBmpwNq`tXt0IZL3NA@9ZAWD|Mvi)y%GWns0KxLSmA zf{8KPKCJp1$h)j(xI|rE$Q<&UzwirDkjDFwDpSo91AdD5Go$$wiiGuou6bzO)S0mp zrJZGegUA_UdFEwit%I!|Uom2}Nm!^zAQG@wPPzPE$9ga0k2fVfGg@^CyilYhf{H`- z8(a@dC_!nGojH%q-8&Z`QS{_>;1hQ&BPlLLo>W@FyoprGKII~loSifMk_`ajm4??OPEhiJNWDi-VwlCa>5Eizk-IZoA z^zW|(!E=zKK!aCX@&wmcU+r#!Rr@heas#h(lCW8~1#_K_m=u(nJb$cs1p-;xc&V-Z zEy5#KJ+AQZCB&t7KL}ENSs2sneaJM_ndN>j&EcY28~u%d8-Luk*;uu;Wtu!>wV~th zu<$Qd;ZQ!?`Gr9ZjyMJGGB0lm|1}&0YuiTsIuIWNE||Rc<2AC`^P&a`f*1nFZ%4Z%yoYfwrv zZuusb25W2wIE@FdUu)f~wA3$m%??IOOjM>$kmDz_nI3YvFb!wCY78y7Pt50eHIgD` zS;4Yjo7Y(A_lgOQjW>(D8se+7r&i(iOhhI62lv@}N6lOLiXBS{rp!~b5{%8PX-i_Q z=6h~**khSeG!Y=ZV*+cO)S+u(Bum3%42kdnd7_KG8UTLEsGD?RDwyKlaH<6PPdrZygeg#d{7fturKpnu7zA5OBu6k%y}S)bxnTSSZBo@Cs&Kb;!T92 z!=MC8#dRHY$8xG`+DJAylW3@iDOj78fQ z;Ku|{CVa~!i{A*6KW`agSWEQSw)sSCu}0J))DE8m)hZdUnf?RlK^{X2#46n!t)RHH z%x-~un5&Ir(i6@u_8u&IHV&PRd|;i0PNFv+b{Z3yvk7PQ-<^z1w$D5%KkzYZE4b?w&PR5cY0=m3#yc1{wa!6 ze~Ir>NOmh`DgETSB33dL+fq zQ5=dI?cSfZZ`U8Ka{3ilB^ja0RE%&P*JULBo)#IqT6t0iIF;kPz0&LJz)|XCjReBl(-M*JT-(wj`UX#qu&LY6IE5=AdA#trx3V z;sRuW&TqYsRJZ5Je6aM7K8b@xD7%AwFy;%j&(}4FMvM)09Ex%@$k=%ertbYLOGdtC zWv{9KTsjX_pVi+H8ld=i*f5KMyFr>|mC}4j;mH@W)XCHNmF?1Fao6DM(s-n_zO?_9v~hu?Ed07sN0-)Q}jSc8V<&DSsVr@6L3 ztcF^$Bc|#@F;eW_-)wX85rx?Mfg5gnN$Xx4&H~qY=D2Q^ncHC??zIkYMOsragI$#@ z|1^=Q88{_dZ^*uH!OEDZ#Gz4EdirpuJ7av$oBB@qctw`%&7%?<%WNTvm*y&32N{irhsJTdB_;1` z9>_s)6(qZW5&0K)iP}!~FsEy2ognXv(b{lR>g&vlBvAjdr!7rhenUA2LPBRUuy5oW z6Kd7i)oO{-?17V|*-8lq#Cr^Iqq}7dv4U(;dq`|G0zI1H#s1dNDDLN4^Mz}=TFMqs z)bc*J<%0VR;UFweec=sTRaWCy{$E%aNf*>=(eLqS_|2#0HwS7g>%iuNmVL4Y%qi<> z32HwvA8Njl{IsHCPI_e*B~nu3#^O%1c5d{2Kr2iE-!P!g-|Qq5IOQW~4$l!i*E8X3 z)YE>BPSbBNjPDV9&=cUc+(j`*16ZGm&yNM3EY_tRn3R-q^U%)qS!NdAdG*b0P+nc> z)8h<8c!SJU!sdi#TdJQ7e`dxWeVvw|=lz5$I$Wd!G7XxC^1CL$X}0?&`JTu`<-0bA zHv-Y`cOb;}<)1f)&MEoeZuku!^XXmb;Wzh&;fjv{Snj$#+9fXTpDoArCO8;-U)b1G zkbmT;QNEobK_TVU0WURaK}}W$CG{6_RSWt9q*7*4p9l7-(JT8K6&7{dYHEYm!{+SD z$rcG6Jb4**0a9wIwLQWhWP)gW^1iBVGPf0T7_Tap>B3Bm$9;z-PgM6021M_P^QY60 z=!y8mQ|`ItF&C2yFM0yepJQnrtGVX(C}^Yt8<-=6@ckfBx`hs!angNRS?Paiqp->x zBrz%BuBU~<|MoMLtSMb_biqF95)b|TPcEHSYT1%b#l8{=>BFDd`K$cZ@{_Gc3H z`Yur8H<*{N-u-I;jqqM&Y}S$g$dNd#&f_^@>v*&Ce^ZxVUHUoPP%*+KmF2}{IiwEY zOjfL)X2a$!5S2_ehZ%R%v;lWVNsXvh<#rWhm>mN;W{>sNUa3ne*08r2etzb)v*91*zO=Q$x3~Q$rlV=SvBe9skJ@3-;z63>nIy6bmi@@tSF^%^$^+q z18;cw;Vef^N9@EVOyf<=c>P15Omu7@FnZz5)o+FEx_NKDJRgepyNqpg$X>bthS*m? zCLHecN!eGe*pc?uFZj!lX{zzq1wuBjx<@(1JVxbz_#l3So6M2zao8(FX?4G zJe-IOlRh!hrTP8JL3b*L!m!YPY?GW})o;{-X8}JjzV1 z#FNX2xy0I~XfFGMP1W>fY1iP8E<&BLwt{F(2HOD=|9ym+qJB9?Nd3U%=nR?7rM$ysY#gOP|FF;pWU)0eRL!1y7&2A&&->`cD}`1Zei~_WTz;@Q%%i=} z3)wtEblnThiSeQ3JKFd$7`W9_sH3gvhbiD>DQALNY@w^q8f{%J8f}}56w&IQB?&Iw zHDGY2+rJs>QnmbX%X-U8$a9|_A@oQ=VG;u zhS`R7;l>=rG&F9EHHQ2dXI5H%^PzIA{RnPk$a^enzM7T}TCFv^nVXZi9>@`r%x!3v zm+ws5W$d6fcu800>%W!zd;D;cc`{4JYbU=cI9<1S#aZ&DoH_SgV@&aAnnE8lHuUK- z5qsqVwTT{%C`6j={-tYqU}ohLt<++cg~RY!Rx_5cC=mm!s2P^HL$B~0Y>?UYWLCkD zTgL|)1Sb#=Ke2`nQGk@hVF0%?x2FzA65+H{h^`w$20t#0M#Z3FJ~&qT?NwRx15R)U z1u*1RochOL9t0MO4Ri!pUM`C}o(s+284@8>yKkdS9bCdTX1S1o;Z|w7Pt0$rxmsYY zCD9le85y*Mg^o>QJto!gj2&a@Wy^ycBvf{8kTLbzCV<2+(h+@iUuO zy<@}Is)QJQ7I{ybUPuy#mJ%M>p-FsnmPl|7V-0$*n0(xTu6G&K%}9YlXJL}`oEx8I zSYqGW+Y*oI-AiT~8Knj{vxeNv;-`zM*jdgL$!O3($WesBRbnSz;c%NUmfVsVLD z-0vj&siPa))eP*ME^6yY@R_#??Yk03;u#z4-2D%&4JOJHgZ; z%oy)7GoHeJUSI@_7{h8?6sF&3d0?=1J~W9-F_pbMU{C zM(?Cz{_xe#?kuslaB}MqHUa>IYR9Og=H+w6mJ9^5EyE^Ok&V;O>L&%UL>Lk>>1c;Y zI~j->c`>s3kMJ&@q3fQ%wzYSgaCA~noojVqB(iS8Fq(2n$0zV=Y+YSHFWf;$Gi>WQ zu~C|;@kn^yrfP~h*u{vnX;>2`1%8h;GPDv1E*cmNuc_z^P5=$y35PW=Rc#F7vU#qj znVQ^phk%-Rt$sb>!L{6SwfJ@MRed?zE2p-p`+^YzN`hfYyfhdFE@$W-a5uoZy>q-; zL%SCXw+(Fz*))XN$)kTI1Hv6pM+lYSM^~M0A5R+&(mMrFJ})1@BrDXfSLHN%1d^3B z+Kic|p2Kj!?qCN>cLsd!ZN>cRvb^Zjgt6gyi4ge_g7DVvrMjQ zt2uyYoouSBQVd6}#>BN%%-H>g;jvYo#6?D?_O*YKc5oBYz2k#urJ^zL$V*nV|1Av$rmdNEh6ZxapC8ak$gxZW94s`&M4<0j?WjAPd+sD6 zZx5I5W`)VhQE@a`wWWE5^@FSev23uN1o>fXBtkXQ!<>h>w*s7g-1hLnKPHW zVVv=GNs`2BT;s(@?~r9;W<@NN@d55C(pv=|2{b?zX&US5LCt8cco<8`eiHFwNfDY^ z`mf1-47DpLLR!@cwX~4OZ(g!y4Er@j^-a+9Vutapakygmua}{JM&-~YtB{`NtunuM zz{)d&Wn2TZ2GZt)B_>_;Og0A8^wTbEu}-L8zQ#+uX~k=ly%T8^mYj5h$(x^V@;aeC zh0fFquhb6i7?g;+EnODF!8#K8X~Jd>#;;f?5}Xb}y&*hBp=r#&=(g1h$q;tdwz&(_ z8!o$3^BgH8OK${;&ek{p&xMUEdRKKW)PZUs`qh_Q4psIgbvDw`7Z9d6c_ptk?{!5% zkf_0_5&mgSVPPz0IdXN3H6(ZSB~@vH^0Ga*70(o*Fr9JlRzwBd>6Su>o3KhiP!4Zl zr$JbdLMdr4m}v+kQfv@1TT@Hij%Qj~Ta?z=Xvk$^E@V6op7P4VXtuCm5X#4Eo!9hI z$07v{Z@DW(5M2U8vn7bOlLqpBkQFzD zq4hu&XJ}cu(<0-pnDSCfFK7}XH|oZEl;;sQ1ws?1JiSXMC`29=)CAOj1qmI>;BHV8 zK;xSLQXq$V77}0cklQ~N1;Rh5oS2k24+&V$!w0L!mb#wPc9lCDpznyw!{v;7LkkS>jxqHavk)NgEQhcink`oX>k6pHl4DI^3_ zQ8XEsH`Q*6X1CLGwhj;!*Ho64$F#(kR_??79f|{|w$(DQnv=Ml^Tl7UC+In#R9SRf z{In(~@x4zT>6Pr!>c&%tE}eV9_D?qII)0}M?u>Xf%dBEaKc6WJm`7yBvuAMUTMIgI zg)llgy@UXJ>JQI3i0jes4qy}2pZ)#O{R=TCLtQ<$oexme{M6&N0T)3% zKD4_yxGcV&@ri|#GXkEwM?eq~_#y! z=7f}|DV|pB!3`PFl^rnlxs!dohtv63dxHR9b9XV58wB6$cGQ;kkW^IqqwdGK_Buxb z#Rdl;81dW?DM8*7hB$<`S>ip6lZ!D!`LQSsEFh@iIhB&OQEYD_pC8u&yjI5?`%^OD z@aEBRLtuRgbYUOAGsPyr;F53fG;)}RO(|^2qX(ls8gSX{*vbRN+7c0&Icp{%@RERy(Hyf0>t+_~97`iTYjJEg%c^}i)j_;ou(O8p(#1Sk}Z zWN-jPYXB$bKqauavjqkpG1*hrpFvIpsOu{=Tg*Ep*3T@!>%)${o`I3Z-{?nGHI5Ff znJb=NIjv$!RQ||n%o_J&ik526g}g8z2cr{FBbzxFX87WuOP1QL;Cs|6iq55~D(e3Z zi8=Z^vZ9sU$SWY6$FK?{;!gVMKmUBSFA#u`T-KahaL!|TEP-*4bq~UcjI=) z7OMe@Gn0Q)NB8+!ihT@~8Xv!4*OliZEhbqulzDu*$y;_FrF7*`7dinMtC9$c#45E7FIOs*=t=!!rZg>| z3bRLKGq9Py;8VA>TV&+aj7sU6+s7#co{@w*R{r41RSU>gn>%;2Tn zUouLO(!dQZ?jYfKk9YyGUg5eLroLThA0Vz8t#H7cJ=}u;d2XF;GBaaz-+$#ihYA0x zf$)CtdjjabvbA&^@6Eh^sFMs(6Fr%PIBWLqCG#Db&=b(yFUh>g_+|F+ourR(Lf8$> zB&qbd#00N*Sdx*7Yu#qo<=fey@JAK64_-g&Apn<;$0kMfO{ba$+3x%8VnQ7u|IQ4evKoO+0QYnV7KuB`OmV`=1!g|JPnt8x<9kU++F0%}2Pi z|GUKQzcn$^vEojdNeWyTd%ip{6JAgPnmCu7Ne-hMXU4VT2*-|5n_2-;uk$+nVmc4hwnlKhjLhDWM@JSD)HVv_8` zE`-JRh)b#%T&zAbO{Hm4e@?oLk8YUk2!JGtmx5tp-wyH|`}o;99v0C^1gg1+URmo0t;8>&lVzp#$Rl)QrI z{CjhjfP$OYXlEmMe z4rWpD4eEw!lO=1!gq%avIT+8R5CcX19dsilNqoj}PxYh&O0$ zevBy0vZYC*fMu|Z;ZV%$CM;c2bFGrr^|iVB2mR9BQ=#?xoVr9{-CBQo6&TCY)JJQ$ zmsrgj)-G1}d(|T<%PoHxxvZJgS8U?RQf+b&)^7LA3KVfEdO za#TLTQ0R}_lfq(Md?w+N6iN~mzh!(;`nOioYg7kuze_raR4N>08cAq{oNsR`_~A~T zaY>vts}4{z%(eMJ#dN0t0fDjdsPg{^YF)Ts?=8HZ{G+1)d?444^4Zqu{GaG?VFwcv zXGq_$Bn$FwWb#dF&VNrZEU|x0BwZiR0M6J+&i_h&t$bmsUwHber2*oxOJ?^X&Hls~ zcl1q==~n^=OSjiHYfe9b@m{nPrFiUAU#Q@Y$51+sPP^2bHlIHg;FzHcY7f-XHlde4 ziVl5;m*-=6@v4zux!Vh2>zGoJ-Qs9C+)yUMwh<|~{^MGb@I^S@TgMW?Mn%-sLk25> z|6V|%`l(UcTVA`B@3~a-TuP!sMIn(|G*?%gCSLa`Xfw`?B@n4PHsPcFgQn)(Z{8Uj zY<4D%t3lA53p4~fPiv=&QnUb7I&ptNd76C%4b{?kYNK_A#I+3z-n5Ga4xOYNjwZv^ zBBjti(DoJmSjX6~q{KdVfI8$0gFSDIv7J5QHIEw`5;-2Swl>5g-IAKRunQVn5-k*A z6(Bm!I6ix|1-x+;#sVqWIL9MOrra?(Jm<^Ej@k1$0A;9TZQ0}fin5J9b%1|1mruXK zqxZxDN5l!x z7&iU;Z%k}f6BbI8Tj*xHu=2%`;u4732D(DSfgvDLoS=SNP09AVZ$|Cz{Gyv+bgxlK zU(7bX){8q;gytbLu>>jHz15Nt^4&sX6n%_T(Bw2r+^EB-ZAQl`CnnF(5NQ5>Zm(J- z+dl^>I05uuxn6Kcm~EboY0t)o?WBG9C~wMzyAz(uGTP0$jEG+MVl6~&aA>5y&X;%| ztXVsJv%6@(!(+UmbEspfGZ)QeM*H&pVLRfYq1^#9%bo`cfRR?%(luwPP$PE&8s2e! z;g0vLO>G$USQ9rytmD^WjsR@hmFf7jVD~f5Tx?POkC4s{=3F3+Ov!79P816UPhH76 z=7xX5;%+uR>V+XkezBLA1UG@L{JP520RcbdVS;I?cx(4L4iDOrG9BTvb-U(9O~2z= zLxj%z_o9x%1yHUc2b-$hX?LtH4_NM0y-1^*e@)k*Va8EU zkaq!x>n=El>DH8{{z&{9l`ea=Oj}qj`7=an6R9ZiY=z!UnUtXRAHcJA&6?_1N9tG= zUVy0(??F=|GqcB6H&y>OlY46OE{TUy$ubY?vLwpa~8#PZTB;?+oWiIX*%R*n-mcd(6 z`Q*g;Raq?KWKS%{m|ZOGTrze7MS9ma$3YR14q;7dLUOQdj0zEEle>C~ECjf3lF%C} zonSh&Z}j`hso*Wmm2@5c2Qo40fosbaa<2>(HmA=Ksfmi#v^o2pgF6?`&7cvj^D1s! z+7!giLV_iWq`OQ86(w&v1q`nFq6_=hhD}Q@uu!1gB_5D69sQ2ZldUD+UGoCh!JK1j zP>Z(ER(4bd0?U2k!V~bL_~=~AgnwL(uAGCuihn3ABZD`X=Cb6Xy3F39Q#5F>N zHNG0xeMZoN?+k@ zhZ~AMJYGxh%jBTh%sB^!bQ2`$N0#Oq`1H<0`QV$5E{9~%R?!dbj!*vukzyrrZOpDk z*v~myEx2jblEQjJ04(+&bO~}k=<|QEbB|FqEA4zynnZnSZsf=g&3dFAUYtt{QmMs> z5aF@neoiE#*eMrrfoCv(>L}0hQ^fe0$0!b*GqMq^mlg!eKH!(G@EUolW@#pgR1_s4 zeCKIiRHFd${z6o|;%G$Cd(0}eu93Pg z!2E`cWX7kf>%W>ECrMMXauJ;G*N|s>ImfQNcQ5+C|@*QlxHvvGPvw&G%RsvDNpTUGXm;e*D_s6dAmC zdB2T0y|dYPt3_~;eH`q@)9Qf3G+ewT$4+VV)h0MbcTieRLUq5Diss3jtWNXr@%H=D zEJOfe5H6=HGuk6m!;Wy3dddiZmU-I_xA~eEwk;X zZmHlmxKKYD*4XxNQ(%qiVO z0?q3TT;mv>V6xU{<}qW9S8W;WaFx{yH-_8SmEJxy&Mp`#rg#&;-kEK}3w&(GfRy{3 z&{ro*V}2`Z_F&St1eN8UI^VC@Lrs@A4aaz@VL1U}o6OC4P}&_IJMnFTR`vo}$7@7s z?!KtJNW@?_;vtuTL?r71!5~jCP zZ!+C7$3+gP%PJD2`q$b;3Lceuh>-?=VnGo~j%@x$rp(ha)c#-4Q|Hd_C~*T%(+oWl z3|@MJ{#?5${(7-GFk$b^9UsZ_ZA|#`A3%0w3KyN=*d64c<=o-fj~}{D716UflMKSd zGp>WG{ctCL6>8my%rXHNn`E)vg5~JOBrf5Loh7EiFj+0xf0Yu@R6jS@{bGVjY$$vcXKdTNJZyu=z zreVfAZ;#Yz?iZz>2h*EjbEdrr?oHz56=E)@e;Is3Zk*3#uKRAA2L}BIFn>$0L*B@q zLhxXwf}%@F%--KJXI}}3l3j$D~^$HWo_07OTDxcC)HpHFhLMOEN*@P1L zsv*8Yg}s5XDD!IK9i8^>+SfZff1LuN@Sz4vE%`z<6aa!370Yw-G2y*LID7raTrO9# zzsNB{!%;4Tii?=e2WKbhv7XF|ZkWXsxzd+jbz(z@t(N|%jbCOX5{9JTt}02;012=A z50|CQ`K4o!L*0{ONgjT$?m)2=C|C{^j z?j;jC>unp^A5GG+^u2{B?DV-mXD5|6X0uR4$JO%Z;ODjCAAIj;MPJWu&HDMH`uwmh zx@-3=J?WEwAEz&WTYO!%8T7BOt-W>c&F<@R-4m%sH0usiG;)k!K)mzn zd-4ax*{SpiIodN51GxAH(M6Y_=ubace`Ej0uz4Pd9`J%kH+@s6D9h# z=+n(s!kMl@VUN3^fRn~ZdUM+Mi}NSbi?$AW^2FfZN|FBn2wxuH(sj>VRmTzTs=j^j z{RhBd>N#r1#B>~TU<~ETeuB=QnNS$efAM#vuf_Dz9R-~#0$a%amy*tBAHmMIRkT8J z^BOE=3@ob=-w<@;b%l4M8mz>8eN)g_jED|;%1h{e&-;FVlyz<+r3n!&PD{(umd8M# zRNDKI5x?*nwvE3mKh6T*%8qlCJ&QTx=g4z?L+8!@?R6wp&nTQQJZswv7{9o9~*SxHbhy}z2FH%5izCNiP zv5}-RZJ$@8vtA2s_rMJX$9iiAP7C&MZ_tLufxEtro;RQ0EZc$cdlF6j2W~QHb`OuS z^`gg2-K52N$ydIV7W-O|7X^OAZEHpjC(z-VLQ#_b)1SisUbX}nV+xPF zRK#gPe6II6`9--ZM%Q=zh<635OcMh52AUU894FX0twhSPoi5G5QEU)S${8pEE zzHuOH>ewgz;St@qShiS=ilqeZE%q^0s#tvfHq? zlE>PTXfcHho7MSBRZ70oP)~y$YX!l5tlJz}J{-67fD!EfC|05Uv%pbFvRH_%_g`!LZ=QTITQzfn%Gr+(n)&`|W_)o489vQo&_3+-Ww! zuq(cxUmh3KyJD#E^#1fM)}U!gl*>BZnZ`Y-sp$N&4N-YC0y(v@94SO<*}KTAHa`uwb_ zlb5DdsS=gZfcg#tetavlCk?G%@2PpIQ?L2EX9Xm~uL^rXt;u%vSw@WJN>6fPL0z4? zY7)i!M)sB=O8$c2xUXl@%wnMh+vg7;7;QwMa$JiB()9gmw(i&kwSPGfCt)~miKIDX zjSd?hv#O}jAjoNxvblbjcsfocYEOU@nDeJq^Xxtkp)bX2VoX#o?pt+g@7=?njJP=tc{*5WqAA#fH>)UsS?O^Zsi?g%F zMDd;dd^zT}*kAkcXef6?OU!Z;CaThr+l*5|qPDy` zt1xHyjXj)FZa@7`&=eog9S z7S=GiD&3;3rODs%g^W*oR$5J))*uT)4dHVx}$apG> zt3K}3U>-I^VAW%v4-J1&0CR=rrkI@hn5(BmTfJ=fVJxQ-y-PTBYVu%$ZQ)%5`<_HQ z{qdt-#ELOXfP&z)QC48y&}oA>fvUXdz4n}rjF8?x0OBc@%m!6DL5sJF<2ik4y=UtH zTGQD??su)Fp$;4Iq9z1N2oDQ8d_~x*rrhy`jR(M%_bO z>at42{yC*Sl>Cct?-Ph_81~e-<~Q~++6owEDSW^hs8gK`6HJtQ$x-KDxpK&_B(GYi zDHDrl$43DMBY2JM-8O2ebe`m)=4_5bq=Ko)Dab|--{Atj!2V*R0y1}|Ro}B&g$O_E zv%Pg~QsP5~!0g;G_qW_bHxz;iqUwV04--PXe6qqDX2}PcFJ!nZ(ZaaO0@~eSREnN#oMR60r}yiQpce~;+}w?QcoC=6LQq;0C}tcb zQoR-VW-bmfAl3Sj`L)bX^gJem$n#r**}fLt@4Kn|ZwX*!Jd~`Tp~YB4YZK=s)$O1d zNw&w&B9J|a#)=_hEQ$%Oq=>HOthtpPAC899i`Pf>K~6Jt7E<_>b8gWPB#EfOz<&6Z z@aA<_b7D=8b>i$tE)>%fql4)O*!b{NOD3)Ne~P*x|6}#5&E(#fH6=1Jcd36o^Ijv_ z;5(?{J3geXy)U&V#PuXcQBKn(-|bdmo`=WGEX<3n1o&6OA>*{a2B<}UthC2d)JJ7j z2tPWh6HDqV8S9cidEb_y8Nt0P$4}W`R^1fjGF_MnZL%JNW;*2*P_115}3>ce;o(-G%w%B5M{+7`=zdWFV5?%E!pu0zq+jo)={ z4(+Zl8D8EPE@%WH`VvJ@?*5-N9;@7ANyGE$kKA<>sbzo0#w!8N?tz4asch%4m_~v2 z>hR0G1l+`(mSycir(1ROclRwFhCw#J9*fSkX~ppJ9KDY`J8(`MdTx1wm9(Zw{ zPGCIqH`NtjsdV+AS8XKd7UI#$EjrJC#Uvg%KNML<#)sB_skC^D2JNutiCQ{GWRZg9r8J23n7L$7~(cdj{+xHj$^UjU=cOK@y?fQBi|HT5NP<{K?L94qldsX>bu>4;S zeEP{?M};iP$&$@xa@xjF0Ms4mX}HnYwHMGN0bPUo8lWSX7ViD*W#QPBPvXh6GrZ;q zY(~4Y^qO`}T(XFyG9t4`Nc;!6=T6D0bnaT=_!kV8w&W6M1Agw{{kN2F0Jwk+rTdv9I=Y|n!i_NVje@XMVJhrJ{Hc?%6UIS6}-P3NDg112FSKdA^ zTdb!mvZ$j=1T7ZQU8Jf~Z=S&UU+ixT(s5zZ45pSnHg_@d@(wwtqOEg{IGl7wCwNJq zyb5^I&jh@rAq9;K1ELgBM-Dcga0sj+6u&5t+uOegQe|>Kv}+*k{(4L--EG>123>F7 zp?>{+ZMzsD?EGQZnm>BNxy0Xk;vSLzz0bLM88PNWtE`!%#Kj!olz0Ix7BQgR#*MGD z5LFA7Bt*YM%(p^_omRxoDvKjx^5P>}eRSJ9ULkl)Je23u!>BXMkLeDQ?sr|zwc@RW zlGN5dbl{vuM^CxvyHxj4?QTL1q|onKu3x?L?HXlf=AOE15(_oXKx3)!l>El#Y_?#TMlR&+aR_0XGRz_$R z@@b4a4Fid!>tDTdCW}jB8zo(1aiz{W1cnfz6Dt2`USnIv6D`=OwGnUeBAE}J2Nt^% z&>cDMY`Phz{y+9t{NGWZZUkezNot+Q!ZeOA*u+9*J{fDC{nB)zsap#e4j>tFd^|H!L&Hb_R7J>g&S>U6+Ry&cE|Ozs4a zT4|+h7bg&f(;NFzx=X;_eIjujkBgt@k6eid2l=_wU)K(+mmZ)Idyl z?ba#ZBk_>PvqyzLWG;n}FRyrEmrjYXUo?LyKgDIN{&KWTmyqNN1;*0ODHHzYZzBtg zx;w;bNZJ*Cb`4e$HI&Bal7;34JbVy*D$>p*3W?v2n}`uRHQCD@KHoX$SQ%C9Bel-l zX)s$o@`bu?(ggOOLUmW#9IT^2X=PZ!8@!u}-|y@HENPv7?e~YU4B74)2!7vEnAYMO zUo5@w6Z4z6xqJE`^HIA-cM!LkNybQjUG7iKXDva0Iuh?NsZh0}(@~N*XB%C#7R7%w zs#7^?&nep;a$%M3;y#$EQ(zva?}FyNOt>=9{{ZCasyw1lmB(Q(qzZ^p>nJZyMR{IyXFye3g$= zwq}!^3ZKzx+f{!k%YLfdd4En?Z#KX4;~j=+NDz;AtAnD%hi`qxxg0}pDI>M@#T%;R zODo};;5dS3TjlgkTShN_Q-pLVC`kx{C&Ypivh(UiV@{pU`I_S_@N4=mk;&XSfi!pD z28j^C%#We!LA`hQ4wdul0@4`9p29r$1Dy#-WU%bq^kcnBVx z214-Q1Z|uoSP1UWxYKmw4#9%c1PKx>gy6v%X`J8=!QI_0!6Ka3=g!SJ_nveAGiTn+ zytm$Z!&=R%+Eu&iw`*5-RsH1q5NFT!?xfg7L6-cHgeN>R<2jPiNO6+6yU!nUJ@d6+ z(Y%x_4;~S&6lrNYxbOScy+SwZD8~1+1!2L+UGqPvNbu44H^v#jKJj9reEN#&%U?-Z z|4|+Px1adG`Y)vHI3mo-EbyNBFM!V8o5#KXq=Tn4eq_)W*~k!?n-(WFByHznXgekE zphCu*``-UufjzH?P|z83I9$As#jc@k{_tt5(bV`|3VCCC2KG%qmQ*I=dXflm>*g*l z>l`!AUjNi}UrzZ!IJP#93d76VQ>56uC-FMH;{@p@8=pNlR-56jST2uK_>mOX ze6js9lhaqrH)>=FeOFULQ`Pe4Gn97JK$>-|PPsTZH-=Z0{s@yP7FxG;p;awe%@oK8 z@6DTW`71F#Ja~+<(~C0kU6!JMTk`%e9{)4zsyc4v6K4;K(=t_FWi3f#!Plz|rI^6} z!TR2jRAd9cL zb*#BQ#d-26{y6Mz?|2OENdYKg2K(*e5N3xZ=+GIJ(6I<2ft46aSb3jo#XM3@IXHzV zit0$whh9Lo5Z-2tBbdt_JsW%!bjF-ZKz^#O#a!c)me@C;Mk96J9#@TmEu)SJcFTu` zY)_~YP7-<*VDcurrjlXdsjIT5d(aem4kOYqqnM?Pbd?GS-U@r2ho4tz=)-@45C6*) zOMh)ma)2Px9k^6eLUgsM_YJT3s@N!krc+UNmqSs!?5k%B+%_!X(F5sX;X~Kf`H#dz zgmPvZ!s-zFE#Dtt$9;feNfM|i&V6^#n^0uR#=h&q>=WcB=-wtSY%^EJG9%1DN6||& zFXsPX@~|lXL!yCsfbvFInOjcS8@Ik&FYMGBgN96}VeD>;F~_!$#JFsSIW}uaBM2>c zlumqp9Q$HE)vc=aJFMpm9%tJ0aIB`SGPl*4Mn#SScnQ$d1PaRodZdVcemSc~@9BtpAB}-6k zoXgNLhCIDkmKeN}UnLvH#OhO$4*~beavDwtGlM!i3DXU`QILp|!pIH>LJe-rqyb|V z=HoYc0D*hGRb3t^2dR37GF2g2W$=JlblOI-vpqgrkjsO*{UJk{mU3D2OU@|@UO8hq z6+LC)^Ypx6vfzSGAJGL@eXqG~n5q+|*OPS4-{e}$uYMw>8E58eZVBH6J9uD3qEAoX zT$|83FR~Hl6ujvW6Mg>@G)$QgYX^O$A-pSVW1RcW`USZn=1I~$9^wXsIKx1%#I{Rq zjb*85_6LWwf^if>_5&3;9ib97?^uAK_52R{x;y%i%fUp*g+^FVUyAb2>Km+%bum_%`E4`r2iU*D z0A`bElPp-NauV-eb<<9IkWG=wk*W9)E!LJ{@M_T?WXzsUq?h+rk`bpFkc~ge&d#sp ztCa89PS6~PZ5VVj5;SvJ^=JSDElxpgNU>M%CU9=MQBC)DQA$*rT-JfgDTF0@?LFgL zG>>$NG;otr9!VgaOlGoIVG9p1V~}gF>?_$G-<__rG>@w)v4fN_S?ee}6u#nA^+MVX zEZpP4TCs#Nhc}m)i`w(kMJ+4B#--T_DC>C=#)3`~m1np07c#lK zA*apQ1z^Gg+GqAmCE4{eLc@dJnR7JPUjQ`=OfaE6N(r6xfT)5v@MC+9edhE=L;FG( z0t^WuqD*4I=)Lc)*l`(&z{aDTPCHHzx3QLG(YD{RrkXUL6AIR#9<6Ij*o3a8UfdLD z9H|B0w9rlbCi2kUn`IGeo^}j}YkG`~sl>$@WF_SFVS=wc1cXJ~_!?sE?VzQ1 z`u#2%mZ+atd;4*`x6IJJl+OMh_C8dAHs`7ndUdU6o%<^(_kYICi>2aMXf|EfIt^0R zu(M~QyUXJO0BX4Y>cA)G8*jY}0GpUFy|MRKkkV z=vV1&)_zJ7qo3tWtx4~`1P-Yr@-Wu@ELR9%dx8S%PRn2h%Q^kM!t=PVsu5!-eqv$8 z`sn4KHQvyD$s&4xYvGvSLf-td#-qQBFvqyg>GSsrR(}`ae?|QN&?q(vGF(l|;}#Ie zh{>UFI=O@&-_TR>b7%!{(|UT%eUc7YkOe-7N_aXtJ3BgE;|#DvU#1%Jk?VSDgoQO< zH+eZ;Il!+4eE43_0)D||9_HiPhBhQ>IXY97!I}c2|FDGz2t@xX#`o&H9x?IKvKMe~of(VVIIrHqC?U})N z;Ghtpko6361LK!+COZ?|TI#(zX?t|(nN%F~*T>gSo(S}k$~GpC{?s><+bq5lw?k>Ra7DXK6L1XpkGbYo_cv%F!B>8RivcusIYMi=VXo{#~ zwX`fAX|+=d(uI~xg~xChhZflNw1Xt}G)U8Kp%wW1z25{n%0^I`rtd;GGf4qjh3n$wvKoOn~1 z^`W6GVhsD{PrFYC&wqo<#CqydDMzl;PJg;q5rl%8|9+R3MjAb*_RC3F+RHdAC}ce# z20ZRfFKi~Isja8}kDTYS@W__2QEkca5l0xq1&|Af?oKI%l@a~jKyN+kn%&9jja7s> ze__WJ|M$!~0Tp-@;77OHknKmiQ>tbC?+{!_JHoy+me_x5=j(9wF922Z`zHy0$_a8-wo(FqT^NyE1Zl83gDT^RsTV|lZ;=5!INH|yOG%AmS?u`4(t?rN7W z!=2H;y2o>OyMB_CV695``)WEN)>=XLmB#IL;M<*vUETxXPd`8}16$>ec%6?3aRf`_ zXl?Nl6*9{#IW|~&ivS*`(%L$gV%ASE$!5Rpb>4h>#3x$ES!-7}Fd$S%S`gz=lfhXv zG%HqWi4_2WST3e&eG+Hpk7&uUC7>Wgv{X2!*%rQ~>Yu#LnEH|?U#L+i+SRlap{`8$ zZqqOzHu>{mI1bk*x6J^2Lbptq5`Ro$-9rfp4t)T@l3hd*U|t@MBk@)oiP zY71y2FX@CT!5;}Lc`2W`26c??7>s;!>{)83prF~Mq`mm^Yuo9)xAhv#Y=##D zsIDxg6Q)++iW|D>=mjlV)!fqs`XR4>hfe0z&By?eP|6q@9;J73dL|L|I@nWvR}B~G z#_WwTyp^__UNVSYV!ZPnDa;mCcU|yMJeIH^?7ScNR<&che#`Uuh=?V@Ca)NzYlZMV zVuV_lNz&y*ITT#+$SI?N2oj4JB7`n2*>(-$qyn%t3Zh|=j6y&>ISCI9DP-;Fa~tlc zqj34BEU%Rr2;8kiDdUKS-!Zrw`GlH>;^l>;P#5|Wcl23Wy%cA+t35G;xqp-oX@dkL zGDNI>!w4UhQzH{1-->^f6^pGKLzOliVK-*6+V|OTsZ(*V>}W0P6<@P3PABGtbwzB? zhFzM;yhmIXIEL~AeD>eG2$nP?A~j6e!=k>p>rj!9!;xg>QE;#4N#5}FbJ!% zT3rAmy$i!SE6g#UhdNqLPen`HGB~Lhi!(+ug97$1 zBg6cDr^Wh53Z3i17kA0$#J`2XO|O_fV+nP?;QDZ;`kjok%IgY``V4jHlQf^`?RZt* zCHY(gZu&#aYMZE<&Cgfk4pu+1a3_=xdf(e30%CGX+KSI4o>3pXFNP;Z+HaDyGRU12 zS639IV)x3ZMjpXa?;nCf*R_+$B?{uiB7_NcTC7R?lm;zFDl6;m$xSv{H!-elzp53@ z(hBA_Z{WD|#GXL$lK6+H zSL9dUZu>lEF1f;EZ1&H%#O@9lJe+HB6p*YE(~Ub`t0R~Q8d3ummE%ULj`Y?K<3Kjz z(zR%F%ZB2`Y=v#mF>38=dj<8s99T4lFMBF?>^Z+VO?OCl7;^Alp>?n6l`{IQyppo& zvgWE5vL$a6Z1GKc)`_;DySVOowy$qdWIX-eP?Mu59gg<_?ECmc??=)?QWBN@+xH*J zzDnhJ7|3fioi*&7d<#4%cNDo|vqdR$QPEqc9gCls%%hb|{Sh@S)0Cr-HWx!^`0bV> zs)+2@;-%*JUJ8IQl*bYG;&`_8lQpYhuxAY38QoP zK`$h0z{2G|5k;W*X0)LUWWwleIegSc2@vafXMZ~UDuniKdYnVlda+rO54Ye;+A6!< zcIQ@^(P<1b8B0f5KZB7~3K@JTOb-G{=kR&&br~CJ z_KO_*xGg^V9E^|E7$UPRqG3zm=)pNf*uVB#wAXRfv7=~Euq*Yma{i#JTqA~ST@h%> zSCpD}9$zwXTEK@XOYtztkg}mHpba0B0IZyj;hnKtI#^3(#e<)G!4)5#S)Tt|)Fxr9 zh9ou0PZ6W=F^`am?VJPk+1-+UQ+3-SbL-9^{?F+LHNhDQ{CVh#6vBXe1RTPeAtfmV zG`*ABjX4UIwT7&B%8~Ub^#>+wWsAMAECc|F<-hnNkaWUbD zySV?8s1=yw=0#2ahd zDKW`bO@Uf6^Ci)~@Gp<#IM<xSOOl&}WOWU#1#pB;lH)874X-FNJ6rK&?+473ve_0p5A1O= zq`bQj5bAh$E-L6F@?s@Qu&%>A59^_bw`>?>5beaUC3fzjv2UXwzJ zQVOa)&DL2JuLtzM!Hu$d!{AYr3>n+ntFNn96V|N9tFoC$)3%$kXXGzYN-h^dOEtom zt7aNdDArT8M@VmL(tbS4CCQ%0{juOdkt|oV@k>mv>Gs(v;@td_dt!P z9@?I`W94@TX6x#Pk%@~n&CNQDS|yMCRvdpscNiNEe0a`suT}4J@QAVa4uTmBxG`N! zNhH*xBp?k=ia63GjcmuCOp+YVN>Cy-#+%&(vb(+KCPZHi7dN56Trz2MF+fo2^y(-+ zv@P&6yhIxBVhs}#Fat2!m;^i!j9nqP9XWGFc4uG?#ZDi3Qki)%^_^6ScnplU`Q_8- zXxKZxw|HK%3Up*@arcx>xsrfEpie%2^=RW8D+kPrZ>>su)|jHdCO&e z9lGKkN?ZPDqVwSr|DZ;;2Kl`Y;)s8UX+SJ2iTooHp|9ZVuMWv~MdG00KeCw13yHj!Li3zGc;;-yjgLu1qdbjOvw_ptAw@s`d-Ra3w2Q{ zn9&V4Ou|KT_K5rX8LblPC10TpyQ#F}1Y`LP5ux8*Uw|U?Z`od1RCR}U8|mn&DbWL? z6~rxIL`+1j4P|cCHKZfJrsX-cXU)T5T?RFz7NNMWlEon)C-!>^nWK#o6(Ym_1)CHu zl8Ryl1TkZlWRI%}iyXh?pTsJn0UFA=z38twrTJPaN^Yj#BaS7OUcm_H2efdWETGTn z?|XqhOAhl5EPf(@C<9>r1@fB!Yuc@cok%qb*yIyExZ{G0fpq{`!n)=(A}$9W&!5=i zc(}Pu1Tv)U-QFRiQ^xGxbt#ohp0$4B@Q`*#s0u~%1Bp>Xb!kR0GZJ^`0`IIAtZ`ou zY&TY7F~d|+;v#K07aB?!^1;ffErXqvJC@-il??*0!jU%WTF4I!MI<$fOs(n%4!{7Y zJ2m?sZCQWWjP<*Hkl)2LhU2@|N36St>AaPqQx$n4qwYArZ5Jsp5mk0?X-gp+e#+n( zyamx*WKmYgFhNcheV>*7Nb&0%OZ*jX1{<))TY&N|vAJ~~XvxK!a4Dbnq5Ju34LRNZ^@`&+RF>7EpgPP5wA6x`RlV_+6wh8;e(1}x zcO7So4lRBptOW0M9a6N30e;`#C{$+y9_xe z3M#n1HhQyeq!NMYXacx{AR`6`elv$nQK2x{W6{d&DluemWOTs6|LR9U6bL6W{8dX! z2YnGoxA|+x$-hO2{2x=5zn1)^m?jl+z06LN^SiSw2?ZN+njt9^Yq@2q8FBY>D;{Ho zMII<)V()^{WGZ#g`+mCc{BFntue)&4xduT)M)4ln+5~|Tk*6>=sH;itEmphcuBTLx(G>2p=cY%?;m^`bl$_T`K4f2xl z>x;4TQg)vg0PZlI z;>494REjBRiP3u#uFJq0>rZRzTNVMkVkGWm($+hBFC>hJ64?|v?bCbu8(sY0HJG|S ziua}?2ws2fT}EdOo}8QzR(jX!8OL26qqcnK8wKa3FTCS}BeQf2?*pa?)r%_$ zZx2Xier|a3i90CVZ;_s+W#qd_V4tR^_V}&xc(WWZ`*TpoL#=$T`H`DEorXjUdYh_-?xGpb%qI|AI=JbnLEe z>haACf{r0{43^Y}_d?1b?AzgS;=5xaiMF2bv|g$8ugl+h@p9%cwINRoX~t~gFpB?1 zBmKt{@gEMz|CH7F=a3%#qknd1I4Dp?=_#I)+0qn$h#=b}R=gA^u>@jfkyuN8m)!;3 z;XaUdNMgTbiJH=y8N`=+15BBrlt9yTLwT$4WnPDeOBQwmO$MmeBE<~0;@J8y>fY`> z>doIId;qspB7oG0ZBcMqR%a-fM$h!(e}MD2SR6-5q1H&8Sz6t>VQhoYg9tq#-#7=HC8_Uezr(Kwd_vkWjE82^nv6wDgU*b11ge| zoe{#Ej$0^{jPLF52?DAc0$61sf}uGc!I&`)ZsLAA>ic@G^ZGFmCaWtLPBrSNQm&@nShG~IP_p=pXVURYvbTY)SpJdY zgPoinB@t*NbiBfidOa193|q{0^c0a2z*68?ax&*8tuo=5rr zn8R~yVl}H7pIM6yx$`bY;`LMw_U7WE0;j6NURjOgU6R?R>gl;7o(0V{@1)ZSWfn>8 zxFs!Xk+^gNVA-t}dXk86hK)pPz1-={kAfx!|7NxyC^ML5;5?)XXRsr1N&13aYD=4Q z?c+BUPnjEUwQq&DsL+X;k(F%Tj*qBPhHnWx_3n}h$hc>;tTv5_7ot!)?d-E}u3Cs= zWF!8FFdd#SUCTUM@SDlyh+D|SE2ZMsu!vNi3N`#f>T6FOx&Dm>u=l>P+V02gmVV^y zgrSm$G|^Jvuq{u9gnzlDF15FZHrP@8RDzE=B{hEF~kFN2=|wpp}IDMnXrOI&h`A zK&qk=C`fSlb$#%OUhB(?s}!c9PF^CDLgli;*sT(@d{*sH~ zS8lcg>;rqw^d3rypix}r3-0Ie{70gf$gHnda%BzQQXa+7Cm8iBe=!zGU(vM6|H_jw z>{M*&=%<6SD{B6rRN1bZeDm-{Ou=WPeHFwZ$~efvJLbL&2~bK*-EDLdYRy}q@BZJa z|2qQzi4o}7uC(z%d$0Lyuzhy-G@4a1zrv9uWTK0BEVnaK6DglPBTM(neHyuOY-G1M zQv-SlDyPJB4{Nqa*dw86mv<5Uyq<(&3IG01DJ8mQ;a=JW$<5;)7w5ggE#if;!U$`- zhq94_1_rFhR1019OGX7$4-p|EXA;P&9e*vbicePqN( zxTJ*VhR<`g^tVR`w?_N;Ci<){^dy%w^V12R^`6x4! zN60!@y8#S*si}^;n{Tb^is>r&ZLXott8KnFLRoPa%<&PedwrqVH8CX`BWP;W}-FhcYC0Mu>xjW_mu}WVD8#p%}{hT~pf~PzLnVT&l4T`0C z*qN?0qkt2Tve6x&WEv5nsckmq*u+seXK2c~lZ=RBp}}}9+$$fNp&Emp6Y#o{Leo=! zw$z|py#MsOX1e?=06YLP4!|MJydh6_PK%7_>Wh4j{y~TQF;QiugY$O`nyhUS@1I?BOZurRz(rTKc1^1O@qDOY8r0?9yE)0ksF~(_ntO@J5CMcnAofdo>BzpV6-o5}L3=03wKkxiv-Z!ji zuGI7HkeSAshelO%1i(5nCBx;uiwT|6Kp^W`Y~@TZ7gNVA2%!_37dxTz7(6{UQ;+3F zi=H0=S$+7rmx9 z9qS^DE64KLu(ItuaJUd_OgFI1EDU%RhU~@v1pxfWlmi?K({9D{kjt>X4YierL2{&@X5i%!b zBb;Z}rqN!j?~Ic^*6R;n!xXmhvR{}zzCVY=A6Z%@r9gKy)<&!Iw-P?DkUB!Ro82@0 zkV0hc5*__q*IVDNI4=bq4=lsl`$4Vx#9(wnO-V;}ep@(BX`_Y_X6^%xLR79fC%k;t zWzAE4yg;=PB=rlRhsfM7rrH{mkn4EYM!}iZNSk*16`I-i$2(ur+|GQ{=;S~pWG|m+ z#oG>?J6WiyYKmR+ifaTbDUi#7D}1O+M|TGud2ntH43E0W`M%nOmvHQJ_%_hN5z{I>mU+rd$l4ba>As#N{2!lp z|8x-M=n{JU`H@1e0BzrJrc=8qYsb!e9lX-Q#B$&C5;0q38ol#cM(Lb>Ft62FKlaTl z!nm0sAw2q5B+(`BPK8013Gexc?5Z>TZ0vD#SMv2C@2R+W3!=W|SbEA=HcS&yjym}2 zw!RWSi^LbKh-28OV0M=gVfxZwx7VLPld4yIv@f4Mm*LT=>?x3(S9Y9%QoPYMDa*oW zv;PJz@{fwRmU)=w-_S)UdP*{|A4p#B-8_C>M))wu^=kvGhmu)9Ljx}aAU5q9m9|#O zn&0o)MC_sDA%Tx?@98+7DLs}Z$J?c|N0xWeUz`&bgAheQYwRlPM#h{XEMmHHpFghS zs*BI8Y2{QwneI>c!nIqX*BAUS-&R*z$OOuXfn|U2wTQ>)J48 z2B@HmzVdEU^@5}@k@^*~WxVHX1U_cCQ+}mu8x5{ylHjntr6%k^x%0hEwMY^Z*`3yc zkEr;zv;G2b*jY+8Qd6nPAX2nW_>4$<7u&qlog1RAByDGGp)0vQl*DE#eDD@(YUzUv zt)eHdIqq4(*CrDfi)KYNZlUc{*fa*SZ-u$%-mpFx0A?Q5_tFu^>tbKQFt@( z@lxRzz=qT9#P?0>^OBOUg|~gb0KP+i0n7(xzP(heLqSELK0nkx$3NxwmpWh7nIdV&9te0^gXDh3yU2yKRo);z(OZP)k1L65SCzbJMnyu z7Yg-*Kq~0hc?ZpFUIw0<4uQ{m=A#N9B)Swg;I!4&!wt~d>u^fTr+Cd8m}8ibY1z4U z9=`x05gbhbWpNqUWNnsh?F`#5fRcpR?Z5EM?t0y}w?oIhLTM`ZWR_3BhP8ubo^CC`U8gJ~e&L~&>!UfZ^j`q>ek812ow)`86%kGhA1)N5y>AC!lOSYA!oq=lV zAGFJTFQN05OqAP~b*LAhBlv}{2byIJ{@m**6cFn|p$FamG>nUtD7n34^5t9Dm&(=p z8O!62#KZ6jO^c7yss^-#Zo|?KmbO{)Tc%GJ;MeXv1Iu`MPZc8QXxZ)*JN${H*7%Rn za0<4+Lc08>ij$4`=})6)g>qe_5Lj2(z6<&N+7DqI8tHEdHz7N3(`X0Hy13^`m{`PF zT$Tag(Lm_Z)}Y^`BV()=yb)vOUpA7|6^{X=Q52F6C-+*5N%+u9hla^}eLdeXg3*K_zZEfm}j+{&e5o zr;5x6cI#efMW;p|z7)>uAb|7DdL+4B=7pU;?C{C+=RdxvCT=Q|V#sB3zhCtILU)nd zh3qAMx9QSQbDT9Lo?0XOT8v-UoX2{z6%Mn&Fu{H~Yv4|9l;QHw@{Rd7>liJ^Wty+k zk3f9|j^od0lo$FW#dVz?TC|wf| z!C)FO*qu_6VltU)ru0U~*J)xph2hbWt^ff^i3cr{02oW0(ewNsHEAYTxeeqdwUM!S zMxn_a-)+<5?4qXu1fEp!$C*(x+j)d`XI>r@jU8i#T8@fXs?snfG5i)v`MVzWKS*U` zn#di8j#8kaFaKJ|&7U>BzxVK8(fLv=I12llTAhjAm7&v+U@66%-z0`!&OQ506HF;7 z`x#3ZuV#|$Bs#;^CC%Y*)xoSVP3%fo#I8Cbe9f24&zjxVkxxRmcxY5&tqRfGVK^4} zx#X*d)Jlueh|R-N*Gy2vplBR<9l5isogM!^hXS4yjRUUX{WXx&RjKD83?%e~j(%XB zWaJq3IYH@uau?c`sb0WGUoMyX*lwWVEpFJbhI07fG5He>=!FoodTY;yfIb@HbjdM+ zO!i-C=l?U;{#umCzuV$}!AA!V*XHluI(WFQlbBDzlTV+Le9d&Q<2+y-1TNfZ(r+L6 zk$qqk>U!YjC|9dHSCbSDzra*q1X60p_so@gf#w9qWw67KCtCAT#UOqj1-aAAMn!WT zE3eKG$bedH@4RFI#oqB_ql6R7m}AxFIT6D1UY2>wy&=^qF@sXnvO22vC8nHIbNX|S zHskB~8>q`5BoG%)uQ4mJGlQj9`Nfx0YuD8fhbwf63Iex9ymEasJ4%WPKF@4)q*JSc zH48zSNRlD;`Ou#$r?gMt3=rv zCp@~#!(A8vl^RcxeGij-Ge-D))C7#@HNS|H5ezjt3782Cu9_d6bS<$NFr-o9-p;6* zO>lPPAqcC%n+sv$OY0dvrFPq*E-O#n7}ps|RL%b<#qsaTs((NA*A&eEej7jCM}KEq z|IOX}_!=SsQ@k4)!wd5s6j~Ti4vEe;u!^K^sn~)3<6kLy?jNEsLsqF^C|% zf3C-6MMoN_PlztwbriQT_v;ki{64j;?WQV1nt@ ze*qX)IG`3JKb^gm1HHOSZpNnh=)mPEU$3tdwI~OvmXa?g7llrThH_rNXMejvb!E0D z`sDZQq}J`_hl!8VSsxMh z{Ad`=31_WLEO{<2_LzihCdq87xre4s?koQUvpurw{ktdG; zbiSn6G8|tigyv25>|8|OrLvd4wCMIJofpDXhH(T0bzo`#MrQ6kJ*2DJ9s$oV5Mj&7I}Ze*NB5-aUh%S{(cIddxB(hR_w>BEr(x-@>% zTmm9|+tVer5nH#ONRZ_6gZ~H88+Q}<^0;fM+SZt_h@W!)#-YwNID~OFvjAoOSfleg+beQ)HIKd}etvYqd?09*2!1K?S- zHZ=N{ZiaX?G*7(kCo8x`IJ$0)Dc^h5Wd7{WM5^D_}Wr`9eHlR69*T?6}ln6VwxFx zqUv;9I*TjHb9)ONwTj~4)1iF<-V@H#pcQxJ#P7^=7@$x(EttlNMVwItMr-gNVWdz+Fe80w5inJ6h z*G+kODT=uS&i2)>o>bYc%SE1W%cD>p2bc!kV+@3uEfU6B8I*a`yAsS{*h>n9Ez?Mw z)r>PumrVZzVa6AD#w>p8yq0M*D5{rCuvA62?<{R;rguC7LR?uzHV$rg>*<~r3(QWAUQ};&!DEU|)vxXD<&J|PZYva&HgYG; z1%{Z1g(GW8EwM$nl3aVS1(R&)R8OSB7e!yS4jj%VM4byF;@oXc2wZAQCtM1$#%L}$ ztC`$|6>FVmp6^%<^v18^WgfV=wT-W!03gO}#|J+aMr#5_Mh`IjjFo!KqG~7QqKpOO zYnw__AIXp6&SaiWj7@qMlR&s?3=z?pbKs#I+Hy}QuPXt(49a_Xl^W%ugs(%*1YxzL zUEL84elJTacT%xfyU?FCx{y23AJtDAPYg_GA0EueRP>`k(KiUSMt>1a@INw#$5L0N zQj*%*FfIxndjkXJn_OYx{S?@^`up>D@&ZE7>-hE>>_nJ?T8_ngI~_0HM6XpaGP3{f z()Ew2|CbM!FOi9rioN{nN6rX3bI1tAx)S-6nTOw8-MoQE?Aap!3h8}na|-(nsF*ir z*4-V4tj}LRGMjXG7OzNuIF~!*I!rb)F$U7k2-fD8ABWXn>l{ys?_9i4YwWuUlfuu+1hHcT0pjgC;Ga^c z{#~pvVZ|C5;g)iOUhfKEWS|G#`DUxe;ssaSAH`N(j3JB`5d{rdMtYhluKMwl03F)DkVV{;8&u|9JwHQu-T1lj)uup2 z1btZGZzJ>bxvXOB%6|?x+ixSXX~1poamZVM++Vw{z|OvRhhM?6%bMoe_jW32zR>@+ zqMx!dtHkTm{`UmGyN3x;8p`-*eZ7_Vhy1C64m7@KCU6N%L6}9gllg0X)9C&`4%ExJ zMCU51_VzODtF>F-PszRj)E`ijw}bne)D0AWU08+ie+JMqq|*2(RaJbnXTKEW z565!UAMFXR0gQ41Rw>SU{$>RKZ_<#cpMu|3d0AyzA}*)Ym7-RUis$YYVAGVidYugi z$TrlWy?1X#db9(?26(h)H>%|MYpyqR zCv$cQS4q$yCTAxs;~q~--Rn;uWAOA_>@%EBXkyc{bb-1X#@hHZZ;@Zi9OO0O_x*B~{C-6!}l9F&*$ZmY)&u>gjfPNV@DK+7HmT#tMuHXpP`L86=O$1SE z7Zx@OmP|s;aLZCO9*W`dQ380BCf|TRY35_iXl@0hH`J;k{H3y@i+GP9?y3K?hYo4$w;Evl9MMANAV%%=Ij)UF6v&$65 zS7T6GD!4T#J7bEWeb#I3T`JWR$?!VX>0Jyh3q}14BlQ8XIi?T6M+K4EjY{)t!;X&y z{J?Z>r(9gm4F%Z`=y_N#_$#wTb> zIDE{C!W{}*g^_yli{+3QWxrOJdNBdv^bFRa7L+6_xj8xpcE73T|8Lk3|Kh!}#s9Iz zSI+(EQynrdtbxk~1h~ni4z=$P=4W0IQX%z`q6F|~?lcV@{{qn8A%^DH?w6$80rgr+ z^(Gy@0KPKw@P3b=d;1|iU6IaH36Fl98IpNtauJ0gtu&f}>*wi2;Aou-8VYM)xI(!w z1OtLk^5?okGr2P^Ul|z1VCh)c+{-l#t*(dp9|aHjcv={6&Z`NPG0b%wJ&4`T0=<_z zs1ZchV2GBlf40|9t%&B9m9~iEFn;8k#aos#Me6=dxYH0X4N2lyB4Jo^?pH3F_G=K zC+z5Y;i=o7yo4`3vWn`3CAg4w8F>rnjO@9L41Yt^`k(wqpgQhB>Z!}eU>)y> z7g)-FGCy(VGBW-fBh&w+Bq$&Af7SeN=pavM{!Rjw1k2t%y?4E6c*e=K>L~vqLsw_A zUq#qA%GguXVWVT6Up?tK7vwy&{<+_SYok#LJ1?fY)16M!n65w!)iRs-0T#+h@I*TDiYNL zr7kcmnDNNDz8(-e=W-OF1H-LxyQ?6}LxQMaeQHS z2P#W?4zAapHfH1Q;RU-zx-nHhfgc{&;kNYE-J|jOKod|?T;Rcwm_p55vp|X{00=jn53Z_qB-3$Xxr-77u@ON|2ntSy@PE2}qCcBlqcuQlhtKX2WvW zaQafFyy9KhaA8O=D*W2;227XLeH!t2ln1XZ;VbD2SecVJy9Z&IjO;2bSO0j%v$4D+ z8PR1M)fFyzW86qmyU;-p1ns9}7CsVT?1CG4j@MWiScZU#;mjU9EYmcDz&qx3it&w` z^=@)CBC?~&Xqd^k1@rv}r_Xis6Ez-xmG9V5qy^7b19ob!YGbh4*C62Fb~EiGBwLt9 z2j@ek;uMWHRW;#)rhds0{7#@A2CUl2AQTnpZXIP6m_3_KFGkufKRWzbK|49OL_XY6 zJO_N^w!=exk{mMU>s@-sv#|s$fv7pQIw~A79jBe%_M%t_eYZQ~vup$hy~S5`q1UP` z$*mEW6Y$gpKSq?r*oT2W=5RJqtgg@(tGn11vtrc3+O4VT^W4R$ zBy)zbO6B<|KA?>_CE6#s@VeOMM7oqVi4Zq?sH3c1cPh-r3dR$X++g%(#BD@Z*_Qs< z#jd_~nh&%+?d0DqmB5;bmW2m~E z5ApER3ob5nCd7zcv8@vyKergB;cvzjd64@xW0Cdl%Q?4!$wnawTh7Ut)SR{VIu1kYvG zUEU96&QRw)nI$qOl6kgqZH-Q4RnBf>@e&3Pp+#nVd$&Hu^)3qReVB=887J~$Y!h2d zY2l&egA~fd{zcO}ZUzPUxq2qOmjp*;A^y!fu*TE%+-fL26UET#Y?7Tt_Ina5OAlb2 z{$_G&+|H)WgK{sq6W9ZXB4lHE?z4FXeeEaA4Y&g)hV$@QmK-}SR73%dXvVDAU3NCh zqq5>20~KYXh5*H!@LatfxxrW$N=mfFjJ`Ds;9_PSV5?T4PDdwUS}G-u`iASCHVJ7= zY%rp>9S&FoCh~Yp=!QCDb|fb;_(jk6FE*8oeI8`{Fwa=J|)Ra zK0M42{mj59rAV;eZ)wTRY*bbKQ~)nt2t+u~(J$;;q5LfMu-zqvQ-HkVUeHbkGzAIA%9;mY}g9s5|_0)yET2DGAnBGRWL(HNx0hK z10U$&uoTsP-&TzO6THw)L&qQ7)7L=+}`{f=`Ygv=3d=t%W( z?kQhcsuR3*zEhp@jk;(5bbp>hf0s^&TN~!=C<0Q(wnviyaF4aXD);Jf(Ruuctf)oe z`A@YJ*|;1vJFX~{9=M~8Avg2{pM8si&#_KBJBHWY_Yg96R7k3JF{3(no88>Wj;-^d zi5J}HL6HD55Bn&pXRvP*y;3vz>Lo_?20w0Tg}>z-G_zkPyd>ehSKj!+ku{t;^C6Sp z`^>ImZvyMkLs})kJp%|()P@q;hhxOLmvy!!h`pN|YFAj;_EtxDZvt8FjYs=vb6{u7 z9y88Uw=RmZUTo3STnA1y0yM{melYWXB>Fjus~TwjA<~EGyM$FRXQjHv4NC;fDkll z2na|C7`g-!5{eXs5T7N22!y6V^FW%9zzFWcot=HVvomj;{dZ^X{d3Q+Z_fG7IkfoX zwT{_-LC2?5L|M}w%%x=+m9T>{581-~aUWcg_K~O;cdPK z4q)Czl$joWnArmp63$PGEu7Y&ALT-_Ih+w^lx~XJ(9lO8AXrlZ<9P zA9QAmv((AISA_m~i$Z+=&R7Kh))xo9bIaie=sK_}LLf-w8a~S686Mnye-pMT7f88k zmZc2U|JQUR<{fEdjdJxP<86*n+p{IKg_m|s1qy!yP7cW@86Ya~Vm1Z)GqVH4#<{WKWxm#Tva*&!*c!s`+$X%g=H# zZJV&D6B2=+zA)m|tp|8T_o9y~<9l3bLYjC-e+L%CyfR(abi>GB*6LBOtHKNnDv&_F8RA;I z_wAh^msb#js3Go_agg{qH35~lgFI0rRKTl-;e$m?`j44a;Q^iENo@sd75=M7UiwOo zc4xkFP}Iq4DjIq~=ttfvzG5-r!aWc1v|UG1s*_)v)J0?S1v>mVL68 zrVlH|#`c?T<1aQwHo?6m1`I{E#kj$_t0mDYz_HNxonv{vB+PEp6O zy6T{2wo;ZxpTv=>5Y?3?x!sa+fiNg|S&m6Jrch2uKkik*eCC&tOcC21F~Fua@A6#b z8J64bA*w=9bWLKwow${cQ**XTXCO*|=nm2q5Je(*x2y{A;-rcK;HH6^Q~2<{=ROEO zj%Oxw9vY;#ewV>Cn7Hi(CTonj$$Waa7!Z*?M+<3Bzu!`)bG?D_X4XBzH8(((vxxP- zcB{Wucs#d3`!et#u*=i(?5N<=VmP!a;sID64ww)*O)M^40stEMYiP}y#4>!v)Qgo( zb_9;ckWgD)XuYO&F!K*+S`s%9Bhsia%9g{YCkH{nhBI|BwCfVu71ojnw z0jAa0;oWa!c#fyyp7ZQTOoZDX*Z@QSKbqb=H`MlAnC}(q@rs?)`)W-=NhK*&*fVbI zc`QCT1J8zD3Xe;uRjouBQrZ-SV37<%K6(=sT;!a6oT`}&xveoiK0gFr_uWp}%w{W} z-P6_x$T>|kKjC)(NE!&cnI+oB*RZ|-YBw=q5L&*5b`5H4V?VzdM-W-QDB*?lvYKLz z@g5Zn-eN>f9M)*m@I^~uoeLgEzBZ+cyXyPs{+?gdSKFD!hK`gc_ul@zT$EPXn})QZ zmgb%A8p$YtKO~NBXQw8@T07eEqIya|J~^Wb3fgssrM#LNFtLEnqPVG*(sr@a1|nM# zjm-X1U4=71*+_eAAVDKA-DqGhEaz*8YU*ui37ga$+0gfEC*>cqua=gWup^z$*zMpw z+X5YzjS&Luyot1EQa54steX6WMbNy%-C$PIr%s5krxqEf;eTC}jFUqm zf#MaJF6mBguCZA}O^>P<7_Oa+*L=C8XRJ<`@t4VCVNgkrii)c8s_^}JCxyjm;W4^~ zWjtP2XfM9r-Dm44Zm%CMh4XER6De3m!4_t0ft#OkY?r=6<7 z_(nqisoe0Fg96$cNlSwvTTpxPoKRRksYOMR%6eV(Cb+tk&|x5Z`%Ar$n~&8uy7_;x zCaU?{82$Up$pKBuqLQNS-fohz+OV2mL*g$?e(j`Ecx{WDkP|#Z%RzNlY+Fw{cX8r* z8fsnH(G49adlp=(w&jZ#uU@P!@W{){S}W~EJL2umC`Z>}YR#U?Fc^A! z1v4`=bar^e7`yj?s-J(MQSvktqf3E^m0|)644-l+IE2-kXUlhiW*X2=h_taX)Zlob z-({ct|4rBWzjnZWVUYOGC%d17yhLwXZNpSUW6S{@FF}jfOnNR=b37JZ`y^h=(FO9* c+QMV!DNvL#2p*KEZpks`sat8Yoc=NTCoO-{umAu6 diff --git a/view/theme/dispy/light/screenshot_small.jpg b/view/theme/dispy/light/screenshot_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..043d0415f2e3b4dc4d0d07fe16c5584e6c47d836 GIT binary patch literal 26448 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 L4<_Eli{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;font-size:8pt;margin:8px;height:14px;} +#search-text{border:1px solid #999999;width:90%;} +#mini-search-text{width:10em;} #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-label{font-size:small;padding:3px 20px 9px 5px;height:10px;} @@ -118,13 +120,14 @@ 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;width:11em;background:white;color:#111111;margin:0px;padding:0px;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;} @@ -165,11 +168,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(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 #eeeeec;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;} @@ -391,7 +394,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le #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-group-element{padding:3px;}.sidebar-group-element:hover{color:#111111;background:#f2f2c3;padding:3px;} #sidebar-new-group{margin:auto;display:inline-block;color:#999999;text-decoration:none;text-align:center;} #peoplefind-sidebar form{margin-bottom:10px;} #sidebar-new-group:hover{} @@ -442,7 +445,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le .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;} .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;} +.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;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index 170b5e23c..330f0906e 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -175,11 +175,11 @@ 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 { @@ -449,9 +449,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; } } } @@ -653,13 +655,20 @@ nav #nav-notifications-linkmenu { background: @dk_bg_colour; .rounded_corners; } -#search-text { - .borders(1px, solid, @bg_colour); - background: @bg_colour; - color: @dk_bg_colour; +#search-text, +#mini-search-text { + background: white; + color: @main_colour; font-size: 8pt; margin: 8px; - .box(10em, 14px); + height: 14px; +} +#search-text { + .borders(1px, solid, @main_alt_colour); + width: 90%; +} +#mini-search-text { + width: 10em; } #scrollup { position: fixed; @@ -747,19 +756,21 @@ nav #nav-notifications-linkmenu { display: none; width: 11em; background: white; - color: @bg_colour;//#2d2d2d + color: @main_colour; margin: 0px; padding: 0px; - .borders(3px, solid, @shiny_colour);//#364e59 + .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 { @@ -793,7 +804,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; } @@ -1079,11 +1094,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, @bg_colour); overflow: hidden; margin: 0 10px 0 10px; } @@ -1101,9 +1115,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 +1127,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, @@ -2327,7 +2342,6 @@ div { &:hover { color: @main_colour; background: @shiny_colour; - font-weight: bold; padding: 3px; } } @@ -2640,7 +2654,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; diff --git a/view/theme/dispy/nav.tpl b/view/theme/dispy/nav.tpl index 6ffd2b379..af91d101f 100644 --- a/view/theme/dispy/nav.tpl +++ b/view/theme/dispy/nav.tpl @@ -128,7 +128,7 @@ $langselector

diff --git a/view/theme/dispy/screenshot.jpg b/view/theme/dispy/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5be4d7745c4715e00b73bc373ffcbc6b4de296da GIT binary patch literal 39453 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 literal 0 HcmV?d00001 From f267a283b46edaf389e99ef3ea4341a5a0496aab Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Sat, 12 May 2012 18:56:13 -0400 Subject: [PATCH 007/164] Merge branch 'master', remote-tracking branch 'remotes/upstream/master' * remotes/upstream/master: * master: From e7813f22aff9fa35feeeda6bc3d32ccdeaef3cfc Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 12 May 2012 22:19:29 -0700 Subject: [PATCH 008/164] slackr drop shadows --- boot.php | 2 +- util/messages.po | 124 ++++++++++++++++++------------------ view/theme/slackr/style.css | 1 + 3 files changed, 64 insertions(+), 63 deletions(-) diff --git a/boot.php b/boot.php index e9e0a6db1..03a685514 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1339' ); +define ( 'FRIENDICA_VERSION', '3.0.1340' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1143 ); diff --git a/util/messages.po b/util/messages.po index afb1938a8..5b58e674e 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1339\n" +"Project-Id-Version: 3.0.1340\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-11 10:00-0700\n" +"POT-Creation-Date: 2012-05-12 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -158,7 +158,7 @@ msgstr "" #: ../../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:747 +#: ../../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:558 @@ -352,7 +352,7 @@ 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:588 +#: ../../view/theme/diabook/theme.php:598 msgid "Contact Photos" msgstr "" @@ -375,7 +375,7 @@ msgstr "" #: ../../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:589 +#: ../../view/theme/diabook/theme.php:599 msgid "Profile Photos" msgstr "" @@ -397,7 +397,7 @@ msgstr "" #: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 -#: ../../view/theme/diabook/theme.php:560 ../../include/text.php:1305 +#: ../../view/theme/diabook/theme.php:570 ../../include/text.php:1305 #: ../../include/diaspora.php:1654 ../../include/conversation.php:53 #: ../../include/conversation.php:126 msgid "photo" @@ -1775,8 +1775,8 @@ 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:633 -#: ../../view/theme/diabook/theme.php:763 ../../include/nav.php:137 +#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:643 +#: ../../view/theme/diabook/theme.php:773 ../../include/nav.php:137 msgid "Settings" msgstr "" @@ -2787,8 +2787,8 @@ msgstr "" #: ../../addon/facebook/facebook.php:1564 #: ../../addon/communityhome/communityhome.php:158 #: ../../addon/communityhome/communityhome.php:167 -#: ../../view/theme/diabook/theme.php:555 -#: ../../view/theme/diabook/theme.php:564 ../../include/diaspora.php:1654 +#: ../../view/theme/diabook/theme.php:565 +#: ../../view/theme/diabook/theme.php:574 ../../include/diaspora.php:1654 #: ../../include/conversation.php:48 ../../include/conversation.php:57 #: ../../include/conversation.php:121 ../../include/conversation.php:130 msgid "status" @@ -2796,7 +2796,7 @@ msgstr "" #: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1568 #: ../../addon/communityhome/communityhome.php:172 -#: ../../view/theme/diabook/theme.php:569 ../../include/diaspora.php:1670 +#: ../../view/theme/diabook/theme.php:579 ../../include/diaspora.php:1670 #: ../../include/conversation.php:65 #, php-format msgid "%1$s likes %2$s's %3$s" @@ -4073,7 +4073,7 @@ msgstr "" msgid "No entries." msgstr "" -#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:616 +#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:626 #: ../../include/contact_widgets.php:34 msgid "Friend Suggestions" msgstr "" @@ -4088,7 +4088,7 @@ msgstr "" msgid "Ignore/Hide" msgstr "" -#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:614 +#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:624 msgid "Global Directory" msgstr "" @@ -4673,7 +4673,7 @@ msgid "Latest likes" msgstr "" #: ../../addon/communityhome/communityhome.php:155 -#: ../../view/theme/diabook/theme.php:552 ../../include/text.php:1303 +#: ../../view/theme/diabook/theme.php:562 ../../include/text.php:1303 #: ../../include/conversation.php:45 ../../include/conversation.php:118 msgid "event" msgstr "" @@ -5631,123 +5631,123 @@ msgid "Your personal photos" msgstr "" #: ../../view/theme/diabook/theme.php:130 -#: ../../view/theme/diabook/theme.php:633 -#: ../../view/theme/diabook/theme.php:737 +#: ../../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:480 -#: ../../view/theme/diabook/theme.php:739 +#: ../../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:501 -#: ../../view/theme/diabook/theme.php:744 +#: ../../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:530 -#: ../../view/theme/diabook/theme.php:746 +#: ../../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:575 -#: ../../view/theme/diabook/theme.php:745 +#: ../../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:612 -#: ../../view/theme/diabook/theme.php:742 +#: ../../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:613 +#: ../../view/theme/diabook/theme.php:623 msgid "Local Directory" msgstr "" -#: ../../view/theme/diabook/theme.php:615 ../../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:617 ../../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:668 -#: ../../view/theme/diabook/theme.php:738 +#: ../../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:673 +#: ../../view/theme/diabook/theme.php:683 msgid "Set zoomfactor for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:674 +#: ../../view/theme/diabook/theme.php:684 #: ../../view/theme/diabook/config.php:199 msgid "Set longitude (X) for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:675 +#: ../../view/theme/diabook/theme.php:685 #: ../../view/theme/diabook/config.php:200 msgid "Set latitude (Y) for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:688 -#: ../../view/theme/diabook/theme.php:740 +#: ../../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:695 -#: ../../view/theme/diabook/theme.php:741 +#: ../../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:702 -#: ../../view/theme/diabook/theme.php:743 +#: ../../view/theme/diabook/theme.php:712 +#: ../../view/theme/diabook/theme.php:753 msgid "Last Tweets" msgstr "" -#: ../../view/theme/diabook/theme.php:705 +#: ../../view/theme/diabook/theme.php:715 #: ../../view/theme/diabook/config.php:197 msgid "Set twitter search term" msgstr "" -#: ../../view/theme/diabook/theme.php:725 -#: ../../view/theme/diabook/theme.php:726 -#: ../../view/theme/diabook/theme.php:727 -#: ../../view/theme/diabook/theme.php:728 -#: ../../view/theme/diabook/theme.php:729 -#: ../../view/theme/diabook/theme.php:730 -#: ../../view/theme/diabook/theme.php:731 -#: ../../view/theme/diabook/theme.php:732 -#: ../../view/theme/diabook/theme.php:733 -#: ../../view/theme/diabook/theme.php:734 ../../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:725 -#: ../../view/theme/diabook/theme.php:726 -#: ../../view/theme/diabook/theme.php:727 -#: ../../view/theme/diabook/theme.php:728 -#: ../../view/theme/diabook/theme.php:729 -#: ../../view/theme/diabook/theme.php:730 -#: ../../view/theme/diabook/theme.php:731 -#: ../../view/theme/diabook/theme.php:732 -#: ../../view/theme/diabook/theme.php:733 -#: ../../view/theme/diabook/theme.php:734 ../../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:735 +#: ../../view/theme/diabook/theme.php:745 msgid "Show/hide boxes at right-hand column:" msgstr "" diff --git a/view/theme/slackr/style.css b/view/theme/slackr/style.css index ed3b413fb..6fe214d74 100644 --- a/view/theme/slackr/style.css +++ b/view/theme/slackr/style.css @@ -43,4 +43,5 @@ nav #site-location { .wall-item-photo, .photo, .contact-block-img, .my-comment-photo { border-radius: 3px; -moz-border-radius: 3px; + box-shadow: 3px 3px 10px 0 #000000; } \ No newline at end of file From 3811fe288fe4446aaa890f9d98acbb3b670b7f3b Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 13 May 2012 04:52:29 -0700 Subject: [PATCH 009/164] rename get_language() to get_browser_language() --- include/pgettext.php | 6 +++--- include/security.php | 2 +- index.php | 2 +- util/db_update.php | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) 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/security.php b/include/security.php index a92400b5c..af201d2af 100755 --- 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/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/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"); From 303856ce01983feec95539892a908b5d5a88f866 Mon Sep 17 00:00:00 2001 From: tommy tomson Date: Sun, 13 May 2012 20:51:39 +0200 Subject: [PATCH 010/164] diabook-theme: small fixes --- view/theme/diabook/bottom.tpl | 11 +++++++++-- view/theme/diabook/theme.php | 31 +++++++++++++++---------------- 2 files changed, 24 insertions(+), 18 deletions(-) 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("pause"); + $(document).keydown(function(event) { + if (!$("div#pause").html()){ + $("div#pause").html("pause"); + }}); + $(".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(); } + + diff --git a/view/theme/diabook/theme.php b/view/theme/diabook/theme.php index f701d7d83..de7e41841 100755 --- a/view/theme/diabook/theme.php +++ b/view/theme/diabook/theme.php @@ -14,7 +14,7 @@ function diabook_init(&$a) { //print diabook-version for debugging $diabook_version = "Diabook (Version: 1.027)"; -$a->page['htmlhead'] .= sprintf('', $diabook_version); +$a->page['htmlhead'] .= sprintf('', $diabook_version); //init css on network and profilepages $cssFile = null; @@ -167,38 +167,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('', $cookieJS); + $a->page['htmlhead'] .= sprintf('', $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('', $imageresizeJS); + $a->page['htmlhead'] .= sprintf('', $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('', $jqueryuiJS); + $a->page['htmlhead'] .= sprintf('', $jqueryuiJS); $jqueryuicssJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/jquery-ui-1.8.20.custom.css"; $a->page['htmlhead'] .= sprintf('', $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('', $twitterJS); + $a->page['htmlhead'] .= sprintf('', $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('', $mqtmplJS); + $a->page['htmlhead'] .= sprintf('', $mqtmplJS); $mapqueryJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.core.js"; - $a->page['htmlhead'] .= sprintf('', $mapqueryJS); + $a->page['htmlhead'] .= sprintf('', $mapqueryJS); $openlayersJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/OpenLayers.js"; - $a->page['htmlhead'] .= sprintf('', $openlayersJS); + $a->page['htmlhead'] .= sprintf('', $openlayersJS); $mqmouseposJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.mqMousePosition.js"; - $a->page['htmlhead'] .= sprintf('', $mqmouseposJS); + $a->page['htmlhead'] .= sprintf('', $mqmouseposJS); $mousewheelJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mousewheel.js"; - $a->page['htmlhead'] .= sprintf('', $mousewheelJS); + $a->page['htmlhead'] .= sprintf('', $mousewheelJS); $mqlegendJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.legend.js"; - $a->page['htmlhead'] .= sprintf('', $mqlegendJS); + $a->page['htmlhead'] .= sprintf('', $mqlegendJS); $mqlayermanagerJS = $a->get_baseurl($ssl_state)."/view/theme/diabook/js/jquery.mapquery.mqLayerManager.js"; - $a->page['htmlhead'] .= sprintf('', $mqlayermanagerJS); + $a->page['htmlhead'] .= sprintf('', $mqlayermanagerJS); } $a->page['htmlhead'] .= ' @@ -236,7 +236,7 @@ if ($color=="dark") $color_path = "/diabook-dark/"; $a->page['htmlhead'] .= ' '; } From 2bd4ff5705708b3319bdd6183fe0a1fefd91e36c Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 13 May 2012 16:40:02 -0700 Subject: [PATCH 011/164] rev update --- boot.php | 2 +- util/messages.po | 132 +++++++++++++++++++++++------------------------ 2 files changed, 67 insertions(+), 67 deletions(-) diff --git a/boot.php b/boot.php index 03a685514..f4247483f 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1340' ); +define ( 'FRIENDICA_VERSION', '3.0.1341' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1143 ); diff --git a/util/messages.po b/util/messages.po index 5b58e674e..d5acf5568 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1340\n" +"Project-Id-Version: 3.0.1341\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-12 10:00-0700\n" +"POT-Creation-Date: 2012-05-13 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -158,7 +158,7 @@ msgstr "" #: ../../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:757 +#: ../../view/theme/diabook/theme.php:753 #: ../../view/theme/diabook/config.php:190 #: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70 #: ../../include/conversation.php:558 @@ -219,7 +219,7 @@ msgstr "" msgid "link to source" msgstr "" -#: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:127 +#: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:126 #: ../../include/nav.php:52 ../../boot.php:1503 msgid "Events" msgstr "" @@ -352,7 +352,7 @@ 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:598 +#: ../../view/theme/diabook/theme.php:594 msgid "Contact Photos" msgstr "" @@ -375,7 +375,7 @@ msgstr "" #: ../../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:599 +#: ../../view/theme/diabook/theme.php:595 msgid "Profile Photos" msgstr "" @@ -397,7 +397,7 @@ msgstr "" #: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 -#: ../../view/theme/diabook/theme.php:570 ../../include/text.php:1305 +#: ../../view/theme/diabook/theme.php:566 ../../include/text.php:1305 #: ../../include/diaspora.php:1654 ../../include/conversation.php:53 #: ../../include/conversation.php:126 msgid "photo" @@ -572,7 +572,7 @@ msgstr "" msgid "Not available." msgstr "" -#: ../../mod/community.php:30 ../../view/theme/diabook/theme.php:129 +#: ../../mod/community.php:30 ../../view/theme/diabook/theme.php:128 #: ../../include/nav.php:101 msgid "Community" msgstr "" @@ -1214,7 +1214,7 @@ msgstr "" msgid "Personal" msgstr "" -#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:123 +#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:122 #: ../../include/nav.php:77 ../../include/nav.php:115 msgid "Home" msgstr "" @@ -1655,7 +1655,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:124 #: ../../include/nav.php:139 msgid "Contacts" msgstr "" @@ -1775,8 +1775,8 @@ 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:643 -#: ../../view/theme/diabook/theme.php:773 ../../include/nav.php:137 +#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:639 +#: ../../view/theme/diabook/theme.php:769 ../../include/nav.php:137 msgid "Settings" msgstr "" @@ -2601,7 +2601,7 @@ msgstr "" msgid "Profile Visibility Editor" msgstr "" -#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:124 +#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:123 #: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:74 #: ../../include/nav.php:50 ../../boot.php:1488 msgid "Profile" @@ -2787,8 +2787,8 @@ msgstr "" #: ../../addon/facebook/facebook.php:1564 #: ../../addon/communityhome/communityhome.php:158 #: ../../addon/communityhome/communityhome.php:167 -#: ../../view/theme/diabook/theme.php:565 -#: ../../view/theme/diabook/theme.php:574 ../../include/diaspora.php:1654 +#: ../../view/theme/diabook/theme.php:561 +#: ../../view/theme/diabook/theme.php:570 ../../include/diaspora.php:1654 #: ../../include/conversation.php:48 ../../include/conversation.php:57 #: ../../include/conversation.php:121 ../../include/conversation.php:130 msgid "status" @@ -2796,7 +2796,7 @@ msgstr "" #: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1568 #: ../../addon/communityhome/communityhome.php:172 -#: ../../view/theme/diabook/theme.php:579 ../../include/diaspora.php:1670 +#: ../../view/theme/diabook/theme.php:575 ../../include/diaspora.php:1670 #: ../../include/conversation.php:65 #, php-format msgid "%1$s likes %2$s's %3$s" @@ -2817,7 +2817,7 @@ msgstr "" msgid "Access denied." msgstr "" -#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:126 +#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:125 #: ../../include/nav.php:51 ../../boot.php:1494 msgid "Photos" msgstr "" @@ -4073,7 +4073,7 @@ msgstr "" msgid "No entries." msgstr "" -#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:626 +#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:622 #: ../../include/contact_widgets.php:34 msgid "Friend Suggestions" msgstr "" @@ -4088,7 +4088,7 @@ msgstr "" msgid "Ignore/Hide" msgstr "" -#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:624 +#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:620 msgid "Global Directory" msgstr "" @@ -4673,7 +4673,7 @@ msgid "Latest likes" msgstr "" #: ../../addon/communityhome/communityhome.php:155 -#: ../../view/theme/diabook/theme.php:562 ../../include/text.php:1303 +#: ../../view/theme/diabook/theme.php:558 ../../include/text.php:1303 #: ../../include/conversation.php:45 ../../include/conversation.php:118 msgid "event" msgstr "" @@ -5601,153 +5601,153 @@ msgstr "" msgid "Color scheme" msgstr "" -#: ../../view/theme/diabook/theme.php:123 ../../include/nav.php:49 +#: ../../view/theme/diabook/theme.php:122 ../../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:123 ../../include/nav.php:50 msgid "Your profile page" msgstr "" -#: ../../view/theme/diabook/theme.php:125 +#: ../../view/theme/diabook/theme.php:124 msgid "Your contacts" msgstr "" -#: ../../view/theme/diabook/theme.php:126 ../../include/nav.php:51 +#: ../../view/theme/diabook/theme.php:125 ../../include/nav.php:51 msgid "Your photos" msgstr "" -#: ../../view/theme/diabook/theme.php:127 ../../include/nav.php:52 +#: ../../view/theme/diabook/theme.php:126 ../../include/nav.php:52 msgid "Your events" msgstr "" -#: ../../view/theme/diabook/theme.php:128 ../../include/nav.php:53 +#: ../../view/theme/diabook/theme.php:127 ../../include/nav.php:53 msgid "Personal notes" msgstr "" -#: ../../view/theme/diabook/theme.php:128 ../../include/nav.php:53 +#: ../../view/theme/diabook/theme.php:127 ../../include/nav.php:53 msgid "Your personal photos" msgstr "" -#: ../../view/theme/diabook/theme.php:130 -#: ../../view/theme/diabook/theme.php:643 -#: ../../view/theme/diabook/theme.php:747 +#: ../../view/theme/diabook/theme.php:129 +#: ../../view/theme/diabook/theme.php:639 +#: ../../view/theme/diabook/theme.php:743 #: ../../view/theme/diabook/config.php:201 msgid "Community Pages" msgstr "" -#: ../../view/theme/diabook/theme.php:490 -#: ../../view/theme/diabook/theme.php:749 +#: ../../view/theme/diabook/theme.php:486 +#: ../../view/theme/diabook/theme.php:745 #: ../../view/theme/diabook/config.php:203 msgid "Community Profiles" msgstr "" -#: ../../view/theme/diabook/theme.php:511 -#: ../../view/theme/diabook/theme.php:754 +#: ../../view/theme/diabook/theme.php:507 +#: ../../view/theme/diabook/theme.php:750 #: ../../view/theme/diabook/config.php:208 msgid "Last users" msgstr "" -#: ../../view/theme/diabook/theme.php:540 -#: ../../view/theme/diabook/theme.php:756 +#: ../../view/theme/diabook/theme.php:536 +#: ../../view/theme/diabook/theme.php:752 #: ../../view/theme/diabook/config.php:210 msgid "Last likes" msgstr "" -#: ../../view/theme/diabook/theme.php:585 -#: ../../view/theme/diabook/theme.php:755 +#: ../../view/theme/diabook/theme.php:581 +#: ../../view/theme/diabook/theme.php:751 #: ../../view/theme/diabook/config.php:209 msgid "Last photos" msgstr "" -#: ../../view/theme/diabook/theme.php:622 -#: ../../view/theme/diabook/theme.php:752 +#: ../../view/theme/diabook/theme.php:618 +#: ../../view/theme/diabook/theme.php:748 #: ../../view/theme/diabook/config.php:206 msgid "Find Friends" msgstr "" -#: ../../view/theme/diabook/theme.php:623 +#: ../../view/theme/diabook/theme.php:619 msgid "Local Directory" msgstr "" -#: ../../view/theme/diabook/theme.php:625 ../../include/contact_widgets.php:35 +#: ../../view/theme/diabook/theme.php:621 ../../include/contact_widgets.php:35 msgid "Similar Interests" msgstr "" -#: ../../view/theme/diabook/theme.php:627 ../../include/contact_widgets.php:37 +#: ../../view/theme/diabook/theme.php:623 ../../include/contact_widgets.php:37 msgid "Invite Friends" msgstr "" -#: ../../view/theme/diabook/theme.php:678 -#: ../../view/theme/diabook/theme.php:748 +#: ../../view/theme/diabook/theme.php:674 +#: ../../view/theme/diabook/theme.php:744 #: ../../view/theme/diabook/config.php:202 msgid "Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:683 +#: ../../view/theme/diabook/theme.php:679 msgid "Set zoomfactor for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:684 +#: ../../view/theme/diabook/theme.php:680 #: ../../view/theme/diabook/config.php:199 msgid "Set longitude (X) for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:685 +#: ../../view/theme/diabook/theme.php:681 #: ../../view/theme/diabook/config.php:200 msgid "Set latitude (Y) for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:698 -#: ../../view/theme/diabook/theme.php:750 +#: ../../view/theme/diabook/theme.php:694 +#: ../../view/theme/diabook/theme.php:746 #: ../../view/theme/diabook/config.php:204 msgid "Help or @NewHere ?" msgstr "" -#: ../../view/theme/diabook/theme.php:705 -#: ../../view/theme/diabook/theme.php:751 +#: ../../view/theme/diabook/theme.php:701 +#: ../../view/theme/diabook/theme.php:747 #: ../../view/theme/diabook/config.php:205 msgid "Connect Services" msgstr "" -#: ../../view/theme/diabook/theme.php:712 -#: ../../view/theme/diabook/theme.php:753 +#: ../../view/theme/diabook/theme.php:708 +#: ../../view/theme/diabook/theme.php:749 msgid "Last Tweets" msgstr "" -#: ../../view/theme/diabook/theme.php:715 +#: ../../view/theme/diabook/theme.php:711 #: ../../view/theme/diabook/config.php:197 msgid "Set twitter search term" msgstr "" +#: ../../view/theme/diabook/theme.php:731 +#: ../../view/theme/diabook/theme.php:732 +#: ../../view/theme/diabook/theme.php:733 +#: ../../view/theme/diabook/theme.php:734 #: ../../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 +#: ../../view/theme/diabook/theme.php:740 ../../include/acl_selectors.php:288 msgid "don't show" msgstr "" +#: ../../view/theme/diabook/theme.php:731 +#: ../../view/theme/diabook/theme.php:732 +#: ../../view/theme/diabook/theme.php:733 +#: ../../view/theme/diabook/theme.php:734 #: ../../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 +#: ../../view/theme/diabook/theme.php:740 ../../include/acl_selectors.php:287 msgid "show" msgstr "" -#: ../../view/theme/diabook/theme.php:745 +#: ../../view/theme/diabook/theme.php:741 msgid "Show/hide boxes at right-hand column:" msgstr "" From db5fe142411ffb75aab31f7b4fe20bfaba5e77b0 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Mon, 14 May 2012 00:30:25 -0400 Subject: [PATCH 012/164] finish dipsy light colour fixes Signed-off-by: Simon L'nu --- view/theme/dispy/dark/style.css | 29 ++--- view/theme/dispy/dark/style.less | 76 +++++++----- view/theme/dispy/light/_base.less | 5 + view/theme/dispy/light/style.css | 97 +++++++-------- view/theme/dispy/light/style.less | 198 +++++++++++++++--------------- 5 files changed, 214 insertions(+), 191 deletions(-) diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index aef326775..3a5e59fb3 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -17,7 +17,8 @@ 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{text-decoration:none;} @@ -51,9 +52,6 @@ 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;} @@ -105,9 +103,9 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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,#mini-search-text{background:#2e2f2e;color:#eeeecc;font-size:8pt;margin:8px;height:14px;} -#search-text{border:1px solid #eeeecc;width:90%;} -#mini-search-text{width:10em;} +#search-text,#mini-search-text{background:#2e2f2e;color:#eeeecc;margin:8px;} +#search-text{border:1px solid #eeeecc;} +#mini-search-text{font-size:8pt;height:14px;width:10em;} #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-label{font-size:small;padding:3px 20px 9px 5px;height:10px;} @@ -180,15 +178,16 @@ 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;} +#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:20px;font-size:0.8em;min-width:475px;width:67%;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;}.tab:hover,.tab:active{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;} +.tab.active{background:#eeeecc;color:#2e2f2e;border:1px solid #638ec4;}.tab.active:hover{background:#2e3436;color:#2e2f2e;border:1px solid #638ec4;} +.tab.active a{color:#2e2f2e;text-decoration:none;} .tab a{border:0;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;} @@ -394,7 +393,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le #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;padding:3px;} +.sidebar-group-element{padding:3px;}.sidebar-group-element:hover{color:#2e2f2e;background:#2e3436;border:1px solid #638ec4;padding:3px;} #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{} @@ -434,7 +433,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;} @@ -446,7 +447,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le .oauthapp a{float:left;} .iconspacer{display:block;width:16px;height:16px;} .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;} +.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;} diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less index 2e6e0ae8b..3521b4398 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"] { @@ -260,30 +263,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; -} /** @@ -658,15 +637,14 @@ nav #nav-notifications-linkmenu { #mini-search-text { background: @bg_colour; color: @main_colour; - font-size: 8pt; margin: 8px; - height: 14px; } #search-text { .borders; - width: 90%; } #mini-search-text { + font-size: 8pt; + height: 14px; width: 10em; } #scrollup { @@ -1171,6 +1149,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; } @@ -1184,9 +1165,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; @@ -1226,7 +1207,6 @@ nav #nav-notifications-linkmenu { .borders(1px, solid, @hover_colour); padding: 4px; &:hover, - &.active:hover, &:active { background: @shiny_colour; color: @main_colour; @@ -1236,6 +1216,11 @@ nav #nav-notifications-linkmenu { background: @main_colour; color: @bg_colour; .borders(1px, solid, @hover_colour); + &:hover { + background: @shiny_colour; + color: @bg_colour; + .borders(1px, solid, @hover_colour); + } a { color: @bg_colour; text-decoration: none; @@ -2338,7 +2323,8 @@ div { padding: 3px; &:hover { color: @bg_colour; - background: @link_colour; + background: @shiny_colour; + .borders(1px, solid, @hover_colour); padding: 3px; } } @@ -2369,7 +2355,8 @@ div { .borders(1px, solid, darken(@main_alt_colour, 33.5%)); margin-right: 3px; width: 75%; - &:hover, &:focus { + &:hover, + &:focus { background-color: @main_alt_colour; color: darken(@main_alt_colour, 80%); .borders(1px, solid, darken(@main_alt_colour, 73.5%)); @@ -2572,8 +2559,31 @@ 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; } +.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; } @@ -2663,7 +2673,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; } diff --git a/view/theme/dispy/light/_base.less b/view/theme/dispy/light/_base.less index 1bd64037a..70576145c 100644 --- a/view/theme/dispy/light/_base.less +++ b/view/theme/dispy/light/_base.less @@ -27,13 +27,18 @@ @lt_main_colour: #ffff99; @main_colour: #111; @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; diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css index 656a6cc6a..e1bbdd09a 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -17,9 +17,10 @@ button,input,select,textarea{color:#111111;background-color:#eeeeec;} 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;} @@ -51,9 +52,6 @@ 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;} @@ -105,9 +103,9 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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,#mini-search-text{background:white;color:#111111;font-size:8pt;margin:8px;height:14px;} -#search-text{border:1px solid #999999;width:90%;} -#mini-search-text{width:10em;} +#search-text,#mini-search-text{background:white;color:#111111;margin:8px;} +#search-text{border:1px solid #999999;} +#mini-search-text{font-size:8pt;height:14px;width:10em;} #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-label{font-size:small;padding:3px 20px 9px 5px;height:10px;} @@ -130,7 +128,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm .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;} +#sysmsg_info br,#sysmsg br{display:block;margin:2px 0px;border-top:1px solid #eeeeec;} #asidemain{float:left;font-size:small;margin:20px 0 20px 35px;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;} @@ -138,7 +136,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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;} #wallmessage-link{color:#eeeeec;display:block;font-size:1.2em;padding:0.2em 0.5em;} @@ -148,27 +146,27 @@ 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"]{width:99.900002% !important;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;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 #eeeeec;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:#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;} @@ -176,19 +174,20 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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;} +#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:20px;font-size:0.8em;min-width:475px;width:67%;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;}.tab:hover,.tab:active{background:#f2f2c3;color:#111111;border:1px solid #284d7d;} +.tab.active{background:#2e3436;color:#eeeeec;border:1px solid #284d7d;}.tab.active:hover{background:#f2f2c3;color:#111111;border:1px solid #284d7d;} +.tab.active a{color:#eeeeec;text-decoration:none;} .tab a{border:0;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;} @@ -218,7 +217,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm .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;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:#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;} .ccollapse-wrapper{font-size:0.9em;margin-left:5em;} @@ -239,9 +238,9 @@ 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;} +.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%;margin-bottom:1em;}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;} @@ -252,7 +251,7 @@ 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-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{max-width:100%;}#photo-photo img{max-width:100%;} .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;} @@ -319,7 +318,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le #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 #444444;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;} #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;} @@ -336,14 +335,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;} @@ -361,7 +360,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;} @@ -388,18 +387,18 @@ 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;} +.group-selected,.nets-selected,.fileas-selected{padding:3px;color:#eeeeec;background:#2e3436;border:1px solid #3465a4;} +.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{padding:3px;color:#3465a4;background:#eeeeec;border:1px solid #3465a4;} .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;padding:3px;} -#sidebar-new-group{margin:auto;display:inline-block;color:#999999;text-decoration:none;text-align:center;} +.sidebar-group-element{padding:3px;}.sidebar-group-element:hover{color:#111111;background:#f2f2c3;border:1px solid #284d7d;padding:3px;} +#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;} +#side-peoplefind-url{background-color:#eeeeec;color:#666666;border:1px solid #666666;margin-right:3px;width:75%;}#side-peoplefind-url:hover,#side-peoplefind-url:focus{background-color:#999999;color:#eeeeec;border:1px solid #111111;} .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;} #netsearch-box{margin:20px 0px 30px;width:135px;}#netsearch-box #search-submit{margin:5px 5px 0px 0px;} @@ -409,10 +408,10 @@ 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;} @@ -424,7 +423,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le #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;} @@ -432,21 +431,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: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;} +.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;} @@ -514,7 +515,7 @@ footer{display:block;clear:both;} #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;} #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 330f0906e..176f3ba6a 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -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; @@ -261,30 +264,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 -} /** @@ -616,7 +595,7 @@ 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; @@ -659,15 +638,14 @@ nav #nav-notifications-linkmenu { #mini-search-text { background: white; color: @main_colour; - font-size: 8pt; margin: 8px; - height: 14px; } #search-text { .borders(1px, solid, @main_alt_colour); - width: 90%; } #mini-search-text { + font-size: 8pt; + height: 14px; width: 10em; } #scrollup { @@ -774,7 +752,7 @@ nav #nav-notifications-linkmenu { } } .menu-sep { - border-top: 1px solid @med_bg_colour;//#9eabb0 + border-top: 1px solid @med_bg_colour; } li { float: none; @@ -790,7 +768,7 @@ nav #nav-notifications-linkmenu { .empty { padding: 5px; text-align: center; - color: lighten(@shiny_colour, 45%);//#9eabb0 + color: lighten(@shiny_colour, 45%); } } .notif-item { @@ -820,8 +798,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; @@ -841,7 +819,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; } @@ -891,8 +869,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; @@ -977,7 +955,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; @@ -1007,21 +985,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 + color: @main_colour; + background: @bg_colour; .mceContentBody { - color: @bg_colour;//#2e2f2e - background: @main_colour;//#eec + color: @main_colour; + background: @bg_colour; } } .defaultSkin { @@ -1058,7 +1036,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 { @@ -1097,7 +1075,7 @@ nav #nav-notifications-linkmenu { .box(20px, 20px); .rounded_corners; .box_shadow(3px, 3px, 5px, 0); - .borders(2px, outset, @bg_colour); + .borders(2px, outset, @menu_bg_colour); overflow: hidden; margin: 0 10px 0 10px; } @@ -1151,28 +1129,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 { @@ -1185,9 +1166,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; @@ -1227,16 +1208,20 @@ nav #nav-notifications-linkmenu { .borders(1px, solid, @hover_colour); padding: 4px; &:hover, - &.active:hover, &:active { background: @shiny_colour; color: @main_colour; .borders(1px, solid, @hover_colour); } &.active { - background: @main_colour; + background: @dk_bg_colour; color: @bg_colour; .borders(1px, solid, @hover_colour); + &:hover { + background: @shiny_colour; + color: @main_colour; + .borders(1px, solid, @hover_colour); + } a { color: @bg_colour; text-decoration: none; @@ -1434,10 +1419,10 @@ nav #nav-notifications-linkmenu { white-space: nowrap; display: block; padding: 5px 2px; - color: @main_alt_colour;//#eeeeec + color: @bg_colour; &:hover { color: @menu_bg_colour; - background: @main_alt_colour;//#eeeeec + background: @bg_colour; } } } @@ -1546,7 +1531,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; } @@ -1556,11 +1541,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; @@ -1577,7 +1562,7 @@ 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%; @@ -1634,8 +1619,8 @@ 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; @@ -1942,7 +1927,7 @@ div { } .contact-photo-menu { width: auto; - .borders(2px, solid, darken(@main_alt_colour, 66.5%));//#444 + .borders(2px, solid, darken(@main_alt_colour, 33.5%)); background: @bg_colour; color: @main_colour; position: absolute; @@ -2042,8 +2027,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; @@ -2083,7 +2068,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; @@ -2163,7 +2148,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 { @@ -2281,8 +2266,6 @@ div { .fc-state-highlight { background: @bg_colour; color: @main_colour; - //background: #eec; - //color: #2e2f2e; } @@ -2310,15 +2293,15 @@ div { .fileas-selected { padding: 3px; color: @bg_colour; - background: @link_colour; + background: @dk_bg_colour; .borders(1px, solid, @link_colour); } .group-selected:hover, .nets-selected:hover, .fileas-selected:hover { padding: 3px; - color: @bg_colour; - background: @shiny_colour; + color: @link_colour; + background: @bg_colour; .borders(1px, solid, @link_colour); } .groupsideedit { @@ -2342,13 +2325,14 @@ div { &:hover { color: @main_colour; background: @shiny_colour; + .borders(1px, solid, @hover_colour); padding: 3px; } } #sidebar-new-group { margin: auto; display: inline-block; - color: @main_alt_colour;//#efefef + color: @bg_colour; text-decoration: none; text-align: center; } @@ -2367,15 +2351,16 @@ div { } } #side-peoplefind-url { - background-color: @bg_colour;//#e5e0cf - color: @main_colour;//#666 - .borders(1px, solid, darken(@main_alt_colour, 33.5%));//$666 + background-color: @bg_colour; + color: darken(@main_alt_colour, 20%); + .borders(1px, solid, darken(@main_alt_colour, 20%)); margin-right: 3px; width: 75%; - &:hover, &:focus { + &:hover, + &:focus { background-color: @main_alt_colour; - color: darken(@main_alt_colour, 80%);//#efefef - .borders(1px, solid, darken(@main_alt_colour, 73.5%));//#333 + color: @bg_colour; + .borders(1px, solid, @main_colour); } } .nets-ul { @@ -2437,7 +2422,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; @@ -2448,7 +2433,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; @@ -2508,7 +2493,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; @@ -2557,7 +2542,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; @@ -2575,8 +2560,31 @@ 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; } +.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; } @@ -2607,7 +2615,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; @@ -2625,7 +2633,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 { @@ -2666,7 +2674,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; } @@ -2926,8 +2934,6 @@ footer { display: block !important; background: @bg_colour; color: @main_colour; -// background: #eec; -// color: #2e2f2e; } #profile-jot-acl-wrapper { margin: 0 10px; @@ -2944,7 +2950,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; From 2687f4377c301205afbbcf2034cbb1b9556e08e7 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Mon, 14 May 2012 19:29:06 -0400 Subject: [PATCH 013/164] Merge branch 'master', remote-tracking branch 'remotes/upstream/master' * remotes/upstream/master: * master: From 2b471d6df3754a87884e222d264d6a97c58eb888 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 14 May 2012 16:32:21 -0700 Subject: [PATCH 014/164] rev update --- boot.php | 2 +- util/messages.po | 92 ++++++++++++++++++++++++------------------------ 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/boot.php b/boot.php index f4247483f..281f1b320 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1341' ); +define ( 'FRIENDICA_VERSION', '3.0.1342' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1143 ); diff --git a/util/messages.po b/util/messages.po index d5acf5568..0cd74bf84 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1341\n" +"Project-Id-Version: 3.0.1342\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-13 10:00-0700\n" +"POT-Creation-Date: 2012-05-14 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -158,7 +158,7 @@ msgstr "" #: ../../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:753 +#: ../../view/theme/diabook/theme.php:752 #: ../../view/theme/diabook/config.php:190 #: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70 #: ../../include/conversation.php:558 @@ -352,7 +352,7 @@ 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:594 +#: ../../view/theme/diabook/theme.php:593 msgid "Contact Photos" msgstr "" @@ -375,7 +375,7 @@ msgstr "" #: ../../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:595 +#: ../../view/theme/diabook/theme.php:594 msgid "Profile Photos" msgstr "" @@ -397,7 +397,7 @@ msgstr "" #: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 -#: ../../view/theme/diabook/theme.php:566 ../../include/text.php:1305 +#: ../../view/theme/diabook/theme.php:565 ../../include/text.php:1305 #: ../../include/diaspora.php:1654 ../../include/conversation.php:53 #: ../../include/conversation.php:126 msgid "photo" @@ -1775,8 +1775,8 @@ 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:639 -#: ../../view/theme/diabook/theme.php:769 ../../include/nav.php:137 +#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:638 +#: ../../view/theme/diabook/theme.php:768 ../../include/nav.php:137 msgid "Settings" msgstr "" @@ -2787,8 +2787,8 @@ msgstr "" #: ../../addon/facebook/facebook.php:1564 #: ../../addon/communityhome/communityhome.php:158 #: ../../addon/communityhome/communityhome.php:167 -#: ../../view/theme/diabook/theme.php:561 -#: ../../view/theme/diabook/theme.php:570 ../../include/diaspora.php:1654 +#: ../../view/theme/diabook/theme.php:560 +#: ../../view/theme/diabook/theme.php:569 ../../include/diaspora.php:1654 #: ../../include/conversation.php:48 ../../include/conversation.php:57 #: ../../include/conversation.php:121 ../../include/conversation.php:130 msgid "status" @@ -2796,7 +2796,7 @@ msgstr "" #: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1568 #: ../../addon/communityhome/communityhome.php:172 -#: ../../view/theme/diabook/theme.php:575 ../../include/diaspora.php:1670 +#: ../../view/theme/diabook/theme.php:574 ../../include/diaspora.php:1670 #: ../../include/conversation.php:65 #, php-format msgid "%1$s likes %2$s's %3$s" @@ -4073,7 +4073,7 @@ msgstr "" msgid "No entries." msgstr "" -#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:622 +#: ../../mod/suggest.php:38 ../../view/theme/diabook/theme.php:621 #: ../../include/contact_widgets.php:34 msgid "Friend Suggestions" msgstr "" @@ -4088,7 +4088,7 @@ msgstr "" msgid "Ignore/Hide" msgstr "" -#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:620 +#: ../../mod/directory.php:47 ../../view/theme/diabook/theme.php:619 msgid "Global Directory" msgstr "" @@ -4673,7 +4673,7 @@ msgid "Latest likes" msgstr "" #: ../../addon/communityhome/communityhome.php:155 -#: ../../view/theme/diabook/theme.php:558 ../../include/text.php:1303 +#: ../../view/theme/diabook/theme.php:557 ../../include/text.php:1303 #: ../../include/conversation.php:45 ../../include/conversation.php:118 msgid "event" msgstr "" @@ -5631,96 +5631,97 @@ msgid "Your personal photos" msgstr "" #: ../../view/theme/diabook/theme.php:129 -#: ../../view/theme/diabook/theme.php:639 -#: ../../view/theme/diabook/theme.php:743 +#: ../../view/theme/diabook/theme.php:638 +#: ../../view/theme/diabook/theme.php:742 #: ../../view/theme/diabook/config.php:201 msgid "Community Pages" msgstr "" -#: ../../view/theme/diabook/theme.php:486 -#: ../../view/theme/diabook/theme.php:745 +#: ../../view/theme/diabook/theme.php:485 +#: ../../view/theme/diabook/theme.php:744 #: ../../view/theme/diabook/config.php:203 msgid "Community Profiles" msgstr "" -#: ../../view/theme/diabook/theme.php:507 -#: ../../view/theme/diabook/theme.php:750 +#: ../../view/theme/diabook/theme.php:506 +#: ../../view/theme/diabook/theme.php:749 #: ../../view/theme/diabook/config.php:208 msgid "Last users" msgstr "" -#: ../../view/theme/diabook/theme.php:536 -#: ../../view/theme/diabook/theme.php:752 +#: ../../view/theme/diabook/theme.php:535 +#: ../../view/theme/diabook/theme.php:751 #: ../../view/theme/diabook/config.php:210 msgid "Last likes" msgstr "" -#: ../../view/theme/diabook/theme.php:581 -#: ../../view/theme/diabook/theme.php:751 +#: ../../view/theme/diabook/theme.php:580 +#: ../../view/theme/diabook/theme.php:750 #: ../../view/theme/diabook/config.php:209 msgid "Last photos" msgstr "" -#: ../../view/theme/diabook/theme.php:618 -#: ../../view/theme/diabook/theme.php:748 +#: ../../view/theme/diabook/theme.php:617 +#: ../../view/theme/diabook/theme.php:747 #: ../../view/theme/diabook/config.php:206 msgid "Find Friends" msgstr "" -#: ../../view/theme/diabook/theme.php:619 +#: ../../view/theme/diabook/theme.php:618 msgid "Local Directory" msgstr "" -#: ../../view/theme/diabook/theme.php:621 ../../include/contact_widgets.php:35 +#: ../../view/theme/diabook/theme.php:620 ../../include/contact_widgets.php:35 msgid "Similar Interests" msgstr "" -#: ../../view/theme/diabook/theme.php:623 ../../include/contact_widgets.php:37 +#: ../../view/theme/diabook/theme.php:622 ../../include/contact_widgets.php:37 msgid "Invite Friends" msgstr "" -#: ../../view/theme/diabook/theme.php:674 -#: ../../view/theme/diabook/theme.php:744 +#: ../../view/theme/diabook/theme.php:673 +#: ../../view/theme/diabook/theme.php:743 #: ../../view/theme/diabook/config.php:202 msgid "Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:679 +#: ../../view/theme/diabook/theme.php:678 msgid "Set zoomfactor for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:680 +#: ../../view/theme/diabook/theme.php:679 #: ../../view/theme/diabook/config.php:199 msgid "Set longitude (X) for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:681 +#: ../../view/theme/diabook/theme.php:680 #: ../../view/theme/diabook/config.php:200 msgid "Set latitude (Y) for Earth Layers" msgstr "" -#: ../../view/theme/diabook/theme.php:694 -#: ../../view/theme/diabook/theme.php:746 +#: ../../view/theme/diabook/theme.php:693 +#: ../../view/theme/diabook/theme.php:745 #: ../../view/theme/diabook/config.php:204 msgid "Help or @NewHere ?" msgstr "" -#: ../../view/theme/diabook/theme.php:701 -#: ../../view/theme/diabook/theme.php:747 +#: ../../view/theme/diabook/theme.php:700 +#: ../../view/theme/diabook/theme.php:746 #: ../../view/theme/diabook/config.php:205 msgid "Connect Services" msgstr "" -#: ../../view/theme/diabook/theme.php:708 -#: ../../view/theme/diabook/theme.php:749 +#: ../../view/theme/diabook/theme.php:707 +#: ../../view/theme/diabook/theme.php:748 msgid "Last Tweets" msgstr "" -#: ../../view/theme/diabook/theme.php:711 +#: ../../view/theme/diabook/theme.php:710 #: ../../view/theme/diabook/config.php:197 msgid "Set twitter search term" msgstr "" +#: ../../view/theme/diabook/theme.php:730 #: ../../view/theme/diabook/theme.php:731 #: ../../view/theme/diabook/theme.php:732 #: ../../view/theme/diabook/theme.php:733 @@ -5729,11 +5730,11 @@ msgstr "" #: ../../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 ../../include/acl_selectors.php:288 +#: ../../view/theme/diabook/theme.php:739 ../../include/acl_selectors.php:288 msgid "don't show" msgstr "" +#: ../../view/theme/diabook/theme.php:730 #: ../../view/theme/diabook/theme.php:731 #: ../../view/theme/diabook/theme.php:732 #: ../../view/theme/diabook/theme.php:733 @@ -5742,12 +5743,11 @@ msgstr "" #: ../../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 ../../include/acl_selectors.php:287 +#: ../../view/theme/diabook/theme.php:739 ../../include/acl_selectors.php:287 msgid "show" msgstr "" -#: ../../view/theme/diabook/theme.php:741 +#: ../../view/theme/diabook/theme.php:740 msgid "Show/hide boxes at right-hand column:" msgstr "" From e574514e2177798e9c0c530737864e971a8275ab Mon Sep 17 00:00:00 2001 From: Matthew Exon Date: Sun, 13 May 2012 10:15:54 +0200 Subject: [PATCH 015/164] Allow plugins to modify the contact photo menu --- include/Contact.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); From 0faa0c2ab189d4a3fd15e843077c2715335eebde Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 14 May 2012 21:45:37 -0700 Subject: [PATCH 016/164] slackr drop shadows extended --- view/theme/slackr/style.css | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/view/theme/slackr/style.css b/view/theme/slackr/style.css index 6fe214d74..abb431ab9 100644 --- a/view/theme/slackr/style.css +++ b/view/theme/slackr/style.css @@ -44,4 +44,18 @@ nav #site-location { border-radius: 3px; -moz-border-radius: 3px; box-shadow: 3px 3px 10px 0 #000000; -} \ No newline at end of file +} + +#sidebar-page-list img { + border-radius: 3px; + -moz-border-radius: 3px; + box-shadow: 3px 3px 10px -2px #000000; +} + +.contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img { + border-radius: 3px; + -moz-border-radius: 3px; + box-shadow: 3px 3px 10px 0 #000000; +} + + From 68dc7c356816e2f4428ea6cdb3b2793ca3630c4d Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 15 May 2012 10:44:01 +0200 Subject: [PATCH 017/164] DE strings --- view/de/messages.po | 878 ++++++++++++++++++++++++-------------------- view/de/strings.php | 26 +- 2 files changed, 505 insertions(+), 399 deletions(-) diff --git a/view/de/messages.po b/view/de/messages.po index d7de20cec..52b127f39 100644 --- a/view/de/messages.po +++ b/view/de/messages.po @@ -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-05-14 10:00-0700\n" +"PO-Revision-Date: 2012-05-15 08:40+0000\n" "Last-Translator: bavatar \n" "Language-Team: German (http://www.transifex.net/projects/p/friendica/language/de/)\n" "MIME-Version: 1.0\n" @@ -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/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 +#: ../../include/items.php:3202 ../../index.php:306 msgid "Permission denied." msgstr "Zugriff verweigert." @@ -97,7 +97,7 @@ 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/settings.php:567 ../../mod/admin.php:643 ../../mod/admin.php:652 msgid "Name" msgstr "Name" @@ -141,9 +141,9 @@ msgstr "Neues Foto von dieser URL" #: ../../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/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 @@ -154,7 +154,7 @@ msgstr "Neues Foto von dieser URL" #: ../../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 @@ -168,12 +168,12 @@ msgstr "Neues Foto von dieser URL" #: ../../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 +#: ../../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:752 +#: ../../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:558 msgid "Submit" msgstr "Senden" @@ -231,8 +231,8 @@ msgstr "Veranstaltung bearbeiten" 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:126 +#: ../../include/nav.php:52 ../../boot.php:1503 msgid "Events" msgstr "Veranstaltungen" @@ -282,7 +282,7 @@ msgid "Description:" msgstr "Beschreibung" #: ../../mod/events.php:423 ../../include/event.php:37 -#: ../../include/bb2diaspora.php:260 ../../boot.php:1092 +#: ../../include/bb2diaspora.php:260 ../../boot.php:1102 msgid "Location:" msgstr "Ort:" @@ -357,14 +357,14 @@ msgstr "Ja" msgid "No" msgstr "Nein" -#: ../../mod/photos.php:43 ../../boot.php:1487 +#: ../../mod/photos.php:43 ../../boot.php:1497 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 +#: ../../view/theme/diabook/theme.php:593 msgid "Contact Photos" msgstr "Kontaktbilder" @@ -387,7 +387,7 @@ msgstr "Kontaktinformationen nicht verfügbar" #: ../../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:594 msgid "Profile Photos" msgstr "Profilbilder" @@ -409,7 +409,7 @@ msgstr "wurde getaggt in einem" #: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 -#: ../../view/theme/diabook/theme.php:457 ../../include/text.php:1305 +#: ../../view/theme/diabook/theme.php:565 ../../include/text.php:1305 #: ../../include/diaspora.php:1654 ../../include/conversation.php:53 #: ../../include/conversation.php:126 msgid "photo" @@ -499,7 +499,7 @@ msgstr "Foto bearbeiten" msgid "Use as profile photo" msgstr "Als Profilbild verwenden" -#: ../../mod/photos.php:1078 ../../include/conversation.php:480 +#: ../../mod/photos.php:1078 ../../include/conversation.php:483 msgid "Private Message" msgstr "Private Nachricht" @@ -532,44 +532,44 @@ 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:1211 ../../include/conversation.php:532 msgid "I like this (toggle)" msgstr "Ich mag das (toggle)" -#: ../../mod/photos.php:1212 ../../include/conversation.php:530 +#: ../../mod/photos.php:1212 ../../include/conversation.php:533 msgid "I don't like this (toggle)" msgstr "Ich mag das nicht (toggle)" -#: ../../mod/photos.php:1213 ../../include/conversation.php:964 +#: ../../mod/photos.php:1213 ../../include/conversation.php:967 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/wallmessage.php:145 ../../mod/message.php:214 +#: ../../mod/message.php:408 ../../include/conversation.php:364 +#: ../../include/conversation.php:709 ../../include/conversation.php:986 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:1301 ../../include/conversation.php:555 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:1303 ../../include/conversation.php:557 +#: ../../boot.php:516 msgid "Comment" msgstr "Kommentar" #: ../../mod/photos.php:1234 ../../mod/editpost.php:125 -#: ../../include/conversation.php:564 ../../include/conversation.php:1001 +#: ../../include/conversation.php:567 ../../include/conversation.php:1004 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/settings.php:683 ../../mod/group.php:168 ../../mod/admin.php:647 +#: ../../include/conversation.php:321 ../../include/conversation.php:587 msgid "Delete" msgstr "Löschen" @@ -585,7 +585,7 @@ 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:128 #: ../../include/nav.php:101 msgid "Community" msgstr "Gemeinschaft" @@ -634,28 +634,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:953 msgid "Post to Email" msgstr "An E-Mail senden" #: ../../mod/editpost.php:95 ../../mod/settings.php:601 -#: ../../include/conversation.php:571 +#: ../../include/conversation.php:574 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:968 msgid "Upload photo" msgstr "Foto hochladen" -#: ../../mod/editpost.php:97 ../../include/conversation.php:967 +#: ../../mod/editpost.php:97 ../../include/conversation.php:970 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:972 msgid "Insert web link" msgstr "einen Link einfügen" @@ -671,35 +671,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:978 msgid "Set your location" msgstr "Deinen Standort festlegen" -#: ../../mod/editpost.php:103 ../../include/conversation.php:977 +#: ../../mod/editpost.php:103 ../../include/conversation.php:980 msgid "Clear browser location" msgstr "Browser-Standort leeren" -#: ../../mod/editpost.php:105 ../../include/conversation.php:984 +#: ../../mod/editpost.php:105 ../../include/conversation.php:987 msgid "Permission settings" msgstr "Berechtigungseinstellungen" -#: ../../mod/editpost.php:113 ../../include/conversation.php:993 +#: ../../mod/editpost.php:113 ../../include/conversation.php:996 msgid "CC: email addresses" msgstr "Cc:-E-Mail-Addressen" -#: ../../mod/editpost.php:114 ../../include/conversation.php:994 +#: ../../mod/editpost.php:114 ../../include/conversation.php:997 msgid "Public post" msgstr "Öffentlicher Beitrag" -#: ../../mod/editpost.php:117 ../../include/conversation.php:980 +#: ../../mod/editpost.php:117 ../../include/conversation.php:983 msgid "Set title" msgstr "Titel setzen" -#: ../../mod/editpost.php:119 ../../include/conversation.php:982 +#: ../../mod/editpost.php:119 ../../include/conversation.php:985 msgid "Categories (comma-separated list)" msgstr "Kategorien (kommasepariert)" -#: ../../mod/editpost.php:120 ../../include/conversation.php:996 +#: ../../mod/editpost.php:120 ../../include/conversation.php:999 msgid "Example: bob@example.com, mary@example.com" msgstr "Z.B.: bob@example.com, mary@example.com" @@ -780,7 +780,7 @@ msgstr "Es scheint so, als ob du bereits mit %s befreundet bist." msgid "Invalid profile URL." msgstr "Ungültige Profil-URL." -#: ../../mod/dfrn_request.php:476 ../../mod/follow.php:20 +#: ../../mod/dfrn_request.php:476 ../../mod/follow.php:23 msgid "Disallowed profile URL." msgstr "Nicht erlaubte Profil-URL." @@ -816,7 +816,7 @@ msgstr "Bitte bestätige deine Kontaktanfrage bei %s." msgid "Confirm" msgstr "Bestätigen" -#: ../../mod/dfrn_request.php:688 ../../include/items.php:2707 +#: ../../mod/dfrn_request.php:688 ../../include/items.php:2717 msgid "[Name Withheld]" msgstr "[Name unterdrückt]" @@ -1180,7 +1180,7 @@ 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:1046 msgid "Connect" msgstr "Verbinden" @@ -1228,7 +1228,7 @@ msgstr "Netzwerk" msgid "Personal" msgstr "Persönlich" -#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:65 +#: ../../mod/notifications.php:90 ../../view/theme/diabook/theme.php:122 #: ../../include/nav.php:77 ../../include/nav.php:115 msgid "Home" msgstr "Pinnwand" @@ -1237,7 +1237,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 +1277,7 @@ msgid "if applicable" msgstr "falls anwendbar" #: ../../mod/notifications.php:157 ../../mod/notifications.php:204 -#: ../../mod/admin.php:642 +#: ../../mod/admin.php:645 msgid "Approve" msgstr "Genehmigen" @@ -1478,12 +1478,12 @@ msgid "View all contacts" msgstr "Alle Kontakte anzeigen" #: ../../mod/contacts.php:290 ../../mod/contacts.php:347 -#: ../../mod/admin.php:646 +#: ../../mod/admin.php:649 msgid "Unblock" msgstr "Entsperren" #: ../../mod/contacts.php:290 ../../mod/contacts.php:347 -#: ../../mod/admin.php:645 +#: ../../mod/admin.php:648 msgid "Block" msgstr "Sperren" @@ -1576,7 +1576,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:1120 msgid "Update now" msgstr "Jetzt aktualisieren" @@ -1669,7 +1669,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:124 #: ../../include/nav.php:139 msgid "Contacts" msgstr "Kontakte" @@ -1705,8 +1705,8 @@ msgstr "Anfrage zum Zurücksetzen des Passworts auf %s erhalten" #: ../../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 +#: ../../addon/testdrive/testdrive.php:58 ../../include/items.php:2726 +#: ../../boot.php:696 msgid "Administrator" msgstr "Administrator" @@ -1716,7 +1716,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:828 msgid "Password Reset" msgstr "Passwort zurücksetzen" @@ -1788,8 +1788,9 @@ msgstr "Persönliche Daten exportieren" 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:88 ../../mod/admin.php:735 ../../mod/admin.php:940 +#: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:638 +#: ../../view/theme/diabook/theme.php:768 ../../include/nav.php:137 msgid "Settings" msgstr "Einstellungen" @@ -2015,7 +2016,7 @@ msgstr "Maximal 100 Beiträge" msgid "Don't show emoticons" msgstr "Keine Smilies anzeigen" -#: ../../mod/settings.php:821 ../../mod/admin.php:180 ../../mod/admin.php:618 +#: ../../mod/settings.php:821 ../../mod/admin.php:180 ../../mod/admin.php:621 msgid "Normal Account" msgstr "Normaler Account" @@ -2023,7 +2024,7 @@ msgstr "Normaler Account" 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 +#: ../../mod/settings.php:825 ../../mod/admin.php:181 ../../mod/admin.php:622 msgid "Soapbox Account" msgstr "Sandkasten-Account" @@ -2031,7 +2032,7 @@ msgstr "Sandkasten-Account" 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 +#: ../../mod/settings.php:829 ../../mod/admin.php:182 ../../mod/admin.php:623 msgid "Community/Celebrity Account" msgstr "Gemeinschafts/Promi-Account" @@ -2040,7 +2041,7 @@ 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 +#: ../../mod/settings.php:833 ../../mod/admin.php:183 ../../mod/admin.php:624 msgid "Automatic Friend Account" msgstr "Automatischer Freundesaccount" @@ -2366,7 +2367,7 @@ msgstr "Private Nachrichten an diese Person könnten an die Öffentlichkeit gela msgid "Invalid contact." msgstr "Ungültiger Kontakt." -#: ../../mod/notes.php:44 ../../boot.php:1499 +#: ../../mod/notes.php:44 ../../boot.php:1509 msgid "Personal Notes" msgstr "Persönliche Notizen" @@ -2382,7 +2383,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 +2391,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 +2407,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:921 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 +2423,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:" @@ -2615,9 +2616,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 +#: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:123 #: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:74 -#: ../../include/nav.php:50 ../../boot.php:1478 +#: ../../include/nav.php:50 ../../boot.php:1488 msgid "Profile" msgstr "Profil" @@ -2766,7 +2767,7 @@ msgstr "Mitgliedschaft auf dieser Seite ist nur nach vorheriger Einladung mögli msgid "Your invitation ID: " msgstr "ID deiner Einladung: " -#: ../../mod/register.php:553 ../../mod/admin.php:403 +#: ../../mod/register.php:553 ../../mod/admin.php:405 msgid "Registration" msgstr "Registrierung" @@ -2789,7 +2790,7 @@ msgstr "Wähle einen Spitznamen für dein Profil. Dieser muss mit einem Buchstab msgid "Choose a nickname: " msgstr "Spitznamen wählen: " -#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:784 +#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:794 msgid "Register" msgstr "Registrieren" @@ -2801,8 +2802,8 @@ msgstr "Personen Suche" #: ../../addon/facebook/facebook.php:1564 #: ../../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:560 +#: ../../view/theme/diabook/theme.php:569 ../../include/diaspora.php:1654 #: ../../include/conversation.php:48 ../../include/conversation.php:57 #: ../../include/conversation.php:121 ../../include/conversation.php:130 msgid "status" @@ -2810,7 +2811,7 @@ msgstr "Status" #: ../../mod/like.php:144 ../../addon/facebook/facebook.php:1568 #: ../../addon/communityhome/communityhome.php:172 -#: ../../view/theme/diabook/theme.php:466 ../../include/diaspora.php:1670 +#: ../../view/theme/diabook/theme.php:574 ../../include/diaspora.php:1670 #: ../../include/conversation.php:65 #, php-format msgid "%1$s likes %2$s's %3$s" @@ -2822,8 +2823,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:684 ../../mod/admin.php:883 ../../mod/display.php:37 +#: ../../mod/display.php:142 ../../include/items.php:3084 msgid "Item not found." msgstr "Beitrag nicht gefunden." @@ -2831,8 +2832,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:125 +#: ../../include/nav.php:51 ../../boot.php:1494 msgid "Photos" msgstr "Bilder" @@ -2973,71 +2974,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 may be able to " "respond from the sender's profile page." msgstr "Sichere Kommunikation ist nicht verfügbar. Eventuell kannst du auf der Profilseite des Absenders antworten." -#: ../../mod/message.php:369 +#: ../../mod/message.php:396 msgid "Send Reply" msgstr "Antwort senden" @@ -3054,19 +3055,19 @@ msgstr "Keine Freunde zum Anzeigen." msgid "Theme settings updated." msgstr "Themen Einstellungen aktualisiert." -#: ../../mod/admin.php:96 ../../mod/admin.php:401 +#: ../../mod/admin.php:96 ../../mod/admin.php:403 msgid "Site" msgstr "Seite" -#: ../../mod/admin.php:97 ../../mod/admin.php:636 ../../mod/admin.php:648 +#: ../../mod/admin.php:97 ../../mod/admin.php:639 ../../mod/admin.php:651 msgid "Users" msgstr "Nutzer" -#: ../../mod/admin.php:98 ../../mod/admin.php:730 ../../mod/admin.php:772 +#: ../../mod/admin.php:98 ../../mod/admin.php:733 ../../mod/admin.php:775 msgid "Plugins" msgstr "Plugins" -#: ../../mod/admin.php:99 ../../mod/admin.php:935 ../../mod/admin.php:971 +#: ../../mod/admin.php:99 ../../mod/admin.php:938 ../../mod/admin.php:974 msgid "Themes" msgstr "Themen" @@ -3078,7 +3079,7 @@ msgstr "DB Updates" msgid "Software Update" msgstr "Software Update" -#: ../../mod/admin.php:115 ../../mod/admin.php:1058 +#: ../../mod/admin.php:115 ../../mod/admin.php:1061 msgid "Logs" msgstr "Protokolle" @@ -3086,9 +3087,9 @@ 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: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 "Administration" @@ -3112,497 +3113,507 @@ msgstr "Version" msgid "Active plugins" msgstr "Aktive Plugins" -#: ../../mod/admin.php:339 +#: ../../mod/admin.php:341 msgid "Site settings updated." msgstr "Seiteneinstellungen aktualisiert." -#: ../../mod/admin.php:387 +#: ../../mod/admin.php:389 msgid "Closed" msgstr "Geschlossen" -#: ../../mod/admin.php:388 +#: ../../mod/admin.php:390 msgid "Requires approval" msgstr "Bedarf der Zustimmung" -#: ../../mod/admin.php:389 +#: ../../mod/admin.php:391 msgid "Open" msgstr "Offen" -#: ../../mod/admin.php:393 +#: ../../mod/admin.php:395 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:396 msgid "Force all links to use SSL" msgstr "SSL für alle Links erzwingen" -#: ../../mod/admin.php:395 +#: ../../mod/admin.php:397 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:406 msgid "File upload" msgstr "Datei hochladen" -#: ../../mod/admin.php:405 +#: ../../mod/admin.php:407 msgid "Policies" msgstr "Regeln" -#: ../../mod/admin.php:406 +#: ../../mod/admin.php:408 msgid "Advanced" msgstr "Erweitert" -#: ../../mod/admin.php:410 ../../addon/statusnet/statusnet.php:544 +#: ../../mod/admin.php:412 ../../addon/statusnet/statusnet.php:544 msgid "Site name" msgstr "Seitenname" -#: ../../mod/admin.php:411 +#: ../../mod/admin.php:413 msgid "Banner/Logo" msgstr "Banner/Logo" -#: ../../mod/admin.php:412 +#: ../../mod/admin.php:414 msgid "System language" msgstr "Systemsprache" -#: ../../mod/admin.php:413 +#: ../../mod/admin.php:415 msgid "System theme" msgstr "Systemweites Thema" -#: ../../mod/admin.php:413 +#: ../../mod/admin.php:415 msgid "" "Default system theme - may be over-ridden by user profiles - change theme settings" msgstr "Vorgabe für das System-Theme - kann von Benutzerprofilen überschrieben werden - Theme-Einstellungen ändern" -#: ../../mod/admin.php:414 +#: ../../mod/admin.php:416 msgid "SSL link policy" msgstr "Regeln für SSL Links" -#: ../../mod/admin.php:414 +#: ../../mod/admin.php:416 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:417 msgid "Maximum image size" msgstr "Maximale Größe von Bildern" -#: ../../mod/admin.php:415 +#: ../../mod/admin.php:417 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:419 msgid "Register policy" msgstr "Registrierungsmethode" -#: ../../mod/admin.php:418 +#: ../../mod/admin.php:420 msgid "Register text" msgstr "Registrierungstext" -#: ../../mod/admin.php:418 +#: ../../mod/admin.php:420 msgid "Will be displayed prominently on the registration page." msgstr "Wird gut sichtbar auf der Registrierungs-Seite angezeigt." -#: ../../mod/admin.php:419 +#: ../../mod/admin.php:421 msgid "Accounts abandoned after x days" msgstr "Accounts gelten nach x Tagen als unbenutzt" -#: ../../mod/admin.php:419 +#: ../../mod/admin.php:421 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:422 msgid "Allowed friend domains" msgstr "Erlaubte Domains für Kontakte" -#: ../../mod/admin.php:420 +#: ../../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 "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:423 msgid "Allowed email domains" msgstr "Erlaubte Domains für Emails" -#: ../../mod/admin.php:421 +#: ../../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 "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:424 msgid "Block public" msgstr "Öffentlichen Zugriff blockieren" -#: ../../mod/admin.php:422 +#: ../../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 "Klicken, um öffentlichen Zugriff auf sonst öffentliche Profile zu blockieren, wenn man nicht eingeloggt ist." -#: ../../mod/admin.php:423 +#: ../../mod/admin.php:425 msgid "Force publish" msgstr "Erzwinge Veröffentlichung" -#: ../../mod/admin.php:423 +#: ../../mod/admin.php:425 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:426 msgid "Global directory update URL" msgstr "URL für Updates beim weltweiten Verzeichnis" -#: ../../mod/admin.php:424 +#: ../../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 für Update des globalen Verzeichnisses. Wenn nichts eingetragen ist, bleibt das globale Verzeichnis unerreichbar." -#: ../../mod/admin.php:426 +#: ../../mod/admin.php:428 msgid "Block multiple registrations" msgstr "Unterbinde Mehrfachregistrierung" -#: ../../mod/admin.php:426 +#: ../../mod/admin.php:428 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:429 msgid "OpenID support" msgstr "OpenID Unterstützung" -#: ../../mod/admin.php:427 +#: ../../mod/admin.php:429 msgid "OpenID support for registration and logins." msgstr "OpenID-Unterstützung für Registrierung und Login." -#: ../../mod/admin.php:428 +#: ../../mod/admin.php:430 msgid "Fullname check" msgstr "Namen auf Vollständigkeit überprüfen" -#: ../../mod/admin.php:428 +#: ../../mod/admin.php:430 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:431 msgid "UTF-8 Regular expressions" msgstr "UTF-8 Reguläre Ausdrücke" -#: ../../mod/admin.php:429 +#: ../../mod/admin.php:431 msgid "Use PHP UTF8 regular expressions" msgstr "PHP UTF8 Ausdrücke verwenden" -#: ../../mod/admin.php:430 +#: ../../mod/admin.php:432 msgid "Show Community Page" msgstr "Gemeinschaftsseite anzeigen" -#: ../../mod/admin.php:430 +#: ../../mod/admin.php:432 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:433 msgid "Enable OStatus support" msgstr "OStatus Unterstützung aktivieren" -#: ../../mod/admin.php:431 +#: ../../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 "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:434 msgid "Enable Diaspora support" msgstr "Diaspora-Support aktivieren" -#: ../../mod/admin.php:432 +#: ../../mod/admin.php:434 msgid "Provide built-in Diaspora network compatibility." msgstr "Verwende die eingebaute Diaspora-Verknüpfung." -#: ../../mod/admin.php:433 +#: ../../mod/admin.php:435 msgid "Only allow Friendica contacts" msgstr "Nur Friendica-Kontakte erlauben" -#: ../../mod/admin.php:433 +#: ../../mod/admin.php:435 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:436 msgid "Verify SSL" msgstr "SSL Ãœberprüfen" -#: ../../mod/admin.php:434 +#: ../../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 "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." -#: ../../mod/admin.php:435 +#: ../../mod/admin.php:437 msgid "Proxy user" msgstr "Proxy Nutzer" -#: ../../mod/admin.php:436 +#: ../../mod/admin.php:438 msgid "Proxy URL" msgstr "Proxy URL" -#: ../../mod/admin.php:437 +#: ../../mod/admin.php:439 msgid "Network timeout" msgstr "Netzwerk Wartezeit" -#: ../../mod/admin.php:437 +#: ../../mod/admin.php:439 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:440 msgid "Delivery interval" msgstr "Zustellungsintervall" -#: ../../mod/admin.php:438 +#: ../../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 "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:441 +msgid "Poll interval" +msgstr "Abfrage Intervall" + +#: ../../mod/admin.php:441 +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:442 msgid "Maximum Load Average" msgstr "Maximum Load Average" -#: ../../mod/admin.php:439 +#: ../../mod/admin.php:442 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:456 msgid "Update has been marked successful" msgstr "Update wurde als erfolgreich markiert" -#: ../../mod/admin.php:463 +#: ../../mod/admin.php:466 #, 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:469 #, php-format msgid "Update %s was successfully applied." msgstr "Update %s war erfolgreich." -#: ../../mod/admin.php:470 +#: ../../mod/admin.php:473 #, 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:476 #, php-format msgid "Update function %s could not be found." msgstr "Updatefunktion %s konnte nicht gefunden werden." -#: ../../mod/admin.php:488 +#: ../../mod/admin.php:491 msgid "No failed updates." msgstr "Keine fehlgeschlagenen Updates." -#: ../../mod/admin.php:492 +#: ../../mod/admin.php:495 msgid "Failed Updates" msgstr "Fehlgeschlagene Updates" -#: ../../mod/admin.php:493 +#: ../../mod/admin.php:496 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:497 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:498 msgid "Attempt to execute this update step automatically" msgstr "Versuchen, diesen Schritt automatisch auszuführen" -#: ../../mod/admin.php:520 +#: ../../mod/admin.php:523 #, 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:530 #, 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:569 #, php-format msgid "User '%s' deleted" msgstr "Nutzer '%s' gelöscht" -#: ../../mod/admin.php:574 +#: ../../mod/admin.php:577 #, php-format msgid "User '%s' unblocked" msgstr "Nutzer '%s' entsperrt" -#: ../../mod/admin.php:574 +#: ../../mod/admin.php:577 #, php-format msgid "User '%s' blocked" msgstr "Nutzer '%s' gesperrt" -#: ../../mod/admin.php:638 +#: ../../mod/admin.php:641 msgid "select all" msgstr "Alle auswählen" -#: ../../mod/admin.php:639 +#: ../../mod/admin.php:642 msgid "User registrations waiting for confirm" msgstr "Neuanmeldungen, die auf deine Bestätigung warten" -#: ../../mod/admin.php:640 +#: ../../mod/admin.php:643 msgid "Request date" msgstr "Anfrage Datum" -#: ../../mod/admin.php:640 ../../mod/admin.php:649 +#: ../../mod/admin.php:643 ../../mod/admin.php:652 #: ../../include/contact_selectors.php:79 msgid "Email" msgstr "Email" -#: ../../mod/admin.php:641 +#: ../../mod/admin.php:644 msgid "No registrations." msgstr "Keine Neuanmeldungen." -#: ../../mod/admin.php:643 +#: ../../mod/admin.php:646 msgid "Deny" msgstr "Verwehren" -#: ../../mod/admin.php:649 +#: ../../mod/admin.php:652 msgid "Register date" msgstr "Anmeldedatum" -#: ../../mod/admin.php:649 +#: ../../mod/admin.php:652 msgid "Last login" msgstr "Letzte Anmeldung" -#: ../../mod/admin.php:649 +#: ../../mod/admin.php:652 msgid "Last item" msgstr "Letzter Beitrag" -#: ../../mod/admin.php:649 +#: ../../mod/admin.php:652 msgid "Account" msgstr "Nutzerkonto" -#: ../../mod/admin.php:651 +#: ../../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 "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: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 "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:696 #, php-format msgid "Plugin %s disabled." msgstr "Plugin %s deaktiviert." -#: ../../mod/admin.php:697 +#: ../../mod/admin.php:700 #, php-format msgid "Plugin %s enabled." msgstr "Plugin %s aktiviert." -#: ../../mod/admin.php:707 ../../mod/admin.php:905 +#: ../../mod/admin.php:710 ../../mod/admin.php:908 msgid "Disable" msgstr "Ausschalten" -#: ../../mod/admin.php:709 ../../mod/admin.php:907 +#: ../../mod/admin.php:712 ../../mod/admin.php:910 msgid "Enable" msgstr "Einschalten" -#: ../../mod/admin.php:731 ../../mod/admin.php:936 +#: ../../mod/admin.php:734 ../../mod/admin.php:939 msgid "Toggle" msgstr "Umschalten" -#: ../../mod/admin.php:739 ../../mod/admin.php:946 +#: ../../mod/admin.php:742 ../../mod/admin.php:949 msgid "Author: " msgstr "Autor:" -#: ../../mod/admin.php:740 ../../mod/admin.php:947 +#: ../../mod/admin.php:743 ../../mod/admin.php:950 msgid "Maintainer: " msgstr "Betreuer:" -#: ../../mod/admin.php:869 +#: ../../mod/admin.php:872 msgid "No themes found." msgstr "Keine Themen gefunden." -#: ../../mod/admin.php:928 +#: ../../mod/admin.php:931 msgid "Screenshot" msgstr "Bildschirmfoto" -#: ../../mod/admin.php:976 +#: ../../mod/admin.php:979 msgid "[Experimental]" msgstr "[Experimentell]" -#: ../../mod/admin.php:977 +#: ../../mod/admin.php:980 msgid "[Unsupported]" msgstr "[Nicht unterstützt]" -#: ../../mod/admin.php:1004 +#: ../../mod/admin.php:1007 msgid "Log settings updated." msgstr "Protokolleinstellungen aktualisiert." -#: ../../mod/admin.php:1060 +#: ../../mod/admin.php:1063 msgid "Clear" msgstr "löschen" -#: ../../mod/admin.php:1066 +#: ../../mod/admin.php:1069 msgid "Debugging" msgstr "Protokoll führen" -#: ../../mod/admin.php:1067 +#: ../../mod/admin.php:1070 msgid "Log file" msgstr "Protokolldatei" -#: ../../mod/admin.php:1067 +#: ../../mod/admin.php:1070 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:1071 msgid "Log level" msgstr "Protokoll-Level" -#: ../../mod/admin.php:1118 ../../view/theme/diabook/theme.php:599 +#: ../../mod/admin.php:1121 msgid "Close" msgstr "Schließen" -#: ../../mod/admin.php:1124 +#: ../../mod/admin.php:1127 msgid "FTP Host" msgstr "FTP Host" -#: ../../mod/admin.php:1125 +#: ../../mod/admin.php:1128 msgid "FTP Path" msgstr "FTP Pfad" -#: ../../mod/admin.php:1126 +#: ../../mod/admin.php:1129 msgid "FTP User" msgstr "FTP Nutzername" -#: ../../mod/admin.php:1127 +#: ../../mod/admin.php:1130 msgid "FTP Password" msgstr "FTP Passwort" -#: ../../mod/profile.php:21 ../../boot.php:949 +#: ../../mod/profile.php:21 ../../boot.php:959 msgid "Requested profile is not available." msgstr "Das angefragte Profil ist nicht vorhanden." @@ -3677,48 +3688,58 @@ msgstr "Account wurde nicht gefunden und OpenID Registrierung auf diesem Server msgid "Login failed." msgstr "Annmeldung 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:160 msgid "Unable to retrieve contact information." msgstr "Konnte die Kontaktinformationen nicht empfangen." -#: ../../mod/follow.php:195 +#: ../../mod/follow.php:206 msgid "following" msgstr "folgen" @@ -4000,27 +4021,27 @@ msgstr "Alter: " msgid "Edit/Manage Profiles" msgstr "Verwalte/Editiere Profile" -#: ../../mod/profiles.php:621 ../../boot.php:1058 +#: ../../mod/profiles.php:621 ../../boot.php:1068 msgid "Change profile photo" msgstr "Profilbild ändern" -#: ../../mod/profiles.php:622 ../../boot.php:1059 +#: ../../mod/profiles.php:622 ../../boot.php:1069 msgid "Create New Profile" msgstr "Neues Profil anlegen" -#: ../../mod/profiles.php:633 ../../boot.php:1069 +#: ../../mod/profiles.php:633 ../../boot.php:1079 msgid "Profile Image" msgstr "Profilbild" -#: ../../mod/profiles.php:635 ../../boot.php:1072 +#: ../../mod/profiles.php:635 ../../boot.php:1082 msgid "visible to everybody" msgstr "sichtbar für jeden" -#: ../../mod/profiles.php:636 ../../boot.php:1073 +#: ../../mod/profiles.php:636 ../../boot.php:1083 msgid "Edit visibility" msgstr "Sichtbarkeit bearbeiten" -#: ../../mod/filer.php:29 ../../include/conversation.php:922 +#: ../../mod/filer.php:29 ../../include/conversation.php:925 msgid "Save to Folder:" msgstr "In diesen Ordner verschieben:" @@ -4068,7 +4089,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:621 #: ../../include/contact_widgets.php:34 msgid "Friend Suggestions" msgstr "Kontaktvorschläge" @@ -4083,7 +4104,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:619 msgid "Global Directory" msgstr "Weltweites Verzeichnis" @@ -4312,13 +4333,13 @@ msgstr "Veröffentliche standardmäßig bei Facebook" msgid "" "Facebook friend linking has been disabled on this site. The following " "settings will have no effect." -msgstr "" +msgstr "Das verlinken von Facebook-Kontakten wurde auf dieser Seite deaktiviert. Die folgenden Einstellungen haben keinen Effekt." #: ../../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 "" +msgstr "Das verlinken von Facebook-Kontakten wurde auf dieser Seite deaktiviert. Wenn du es ausgeschaltet hast, kannst du es nicht wieder aktivieren." #: ../../addon/facebook/facebook.php:574 msgid "Link all your Facebook friends and conversations on this website" @@ -4611,7 +4632,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 +4642,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:469 +#: ../../boot.php:517 msgid "show more" msgstr "mehr anzeigen" @@ -4638,7 +4659,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:815 msgid "Login" msgstr "Anmeldung" @@ -4666,7 +4687,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:557 ../../include/text.php:1303 #: ../../include/conversation.php:45 ../../include/conversation.php:118 msgid "event" msgstr "Veranstaltung" @@ -4819,7 +4840,7 @@ 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/blogger/blogger.php:172 ../../addon/posterous/posterous.php:192 msgid "Post from Friendica" msgstr "Beitrag via Friendica" @@ -5533,32 +5554,40 @@ 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" @@ -5568,7 +5597,8 @@ 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 +5611,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:122 ../../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:123 ../../include/nav.php:50 msgid "Your profile page" msgstr "Deine Profilseite" -#: ../../view/theme/diabook/theme.php:67 +#: ../../view/theme/diabook/theme.php:124 msgid "Your contacts" msgstr "Deine Kontakte" -#: ../../view/theme/diabook/theme.php:68 ../../include/nav.php:51 +#: ../../view/theme/diabook/theme.php:125 ../../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:126 ../../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:127 ../../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:127 ../../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:129 +#: ../../view/theme/diabook/theme.php:638 +#: ../../view/theme/diabook/theme.php:742 +#: ../../view/theme/diabook/config.php:201 msgid "Community Pages" msgstr "Foren" -#: ../../view/theme/diabook/theme.php:377 +#: ../../view/theme/diabook/theme.php:485 +#: ../../view/theme/diabook/theme.php:744 +#: ../../view/theme/diabook/config.php:203 msgid "Community Profiles" msgstr "Community-Profile" -#: ../../view/theme/diabook/theme.php:398 +#: ../../view/theme/diabook/theme.php:506 +#: ../../view/theme/diabook/theme.php:749 +#: ../../view/theme/diabook/config.php:208 msgid "Last users" msgstr "Letzte Nutzer" -#: ../../view/theme/diabook/theme.php:427 +#: ../../view/theme/diabook/theme.php:535 +#: ../../view/theme/diabook/theme.php:751 +#: ../../view/theme/diabook/config.php:210 msgid "Last likes" msgstr "Zuletzt gemocht" -#: ../../view/theme/diabook/theme.php:472 +#: ../../view/theme/diabook/theme.php:580 +#: ../../view/theme/diabook/theme.php:750 +#: ../../view/theme/diabook/config.php:209 msgid "Last photos" msgstr "Letzte Fotos" -#: ../../view/theme/diabook/theme.php:509 +#: ../../view/theme/diabook/theme.php:617 +#: ../../view/theme/diabook/theme.php:747 +#: ../../view/theme/diabook/config.php:206 msgid "Find Friends" msgstr "Freunde finden" -#: ../../view/theme/diabook/theme.php:510 +#: ../../view/theme/diabook/theme.php:618 msgid "Local Directory" msgstr "Lokales Verzeichnis" -#: ../../view/theme/diabook/theme.php:512 ../../include/contact_widgets.php:35 +#: ../../view/theme/diabook/theme.php:620 ../../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:622 ../../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:673 +#: ../../view/theme/diabook/theme.php:743 +#: ../../view/theme/diabook/config.php:202 +msgid "Earth Layers" +msgstr "Earth Layers" -#: ../../view/theme/diabook/theme.php:573 +#: ../../view/theme/diabook/theme.php:678 +msgid "Set zoomfactor for Earth Layers" +msgstr "Zoomfaktor der Earth Layer" + +#: ../../view/theme/diabook/theme.php:679 +#: ../../view/theme/diabook/config.php:199 +msgid "Set longitude (X) for Earth Layers" +msgstr "Longitude (X) der Earth Layer" + +#: ../../view/theme/diabook/theme.php:680 +#: ../../view/theme/diabook/config.php:200 +msgid "Set latitude (Y) for Earth Layers" +msgstr "Latitude (Y) der Earth Layer" + +#: ../../view/theme/diabook/theme.php:693 +#: ../../view/theme/diabook/theme.php:745 +#: ../../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:700 +#: ../../view/theme/diabook/theme.php:746 +#: ../../view/theme/diabook/config.php:205 msgid "Connect Services" msgstr "Verbinde Dienste" -#: ../../view/theme/diabook/theme.php:587 +#: ../../view/theme/diabook/theme.php:707 +#: ../../view/theme/diabook/theme.php:748 msgid "Last Tweets" msgstr "Neueste Tweets" -#: ../../view/theme/diabook/theme.php:591 -#: ../../view/theme/diabook/config.php:102 +#: ../../view/theme/diabook/theme.php:710 +#: ../../view/theme/diabook/config.php:197 msgid "Set twitter search term" -msgstr "" +msgstr "Twitter Suchbegriff" -#: ../../view/theme/diabook/config.php:99 ../../view/theme/dispy/config.php:74 +#: ../../view/theme/diabook/theme.php:730 +#: ../../view/theme/diabook/theme.php:731 +#: ../../view/theme/diabook/theme.php:732 +#: ../../view/theme/diabook/theme.php:733 +#: ../../view/theme/diabook/theme.php:734 +#: ../../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 ../../include/acl_selectors.php:288 +msgid "don't show" +msgstr "nicht zeigen" + +#: ../../view/theme/diabook/theme.php:730 +#: ../../view/theme/diabook/theme.php:731 +#: ../../view/theme/diabook/theme.php:732 +#: ../../view/theme/diabook/theme.php:733 +#: ../../view/theme/diabook/theme.php:734 +#: ../../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 ../../include/acl_selectors.php:287 +msgid "show" +msgstr "zeigen" + +#: ../../view/theme/diabook/theme.php:740 +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 +5798,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:1104 msgid "Gender:" msgstr "Geschlecht:" @@ -5709,7 +5811,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 "Geburtstag:" @@ -5717,11 +5819,11 @@ msgstr "Geburtstag:" msgid "Age:" msgstr "Alter:" -#: ../../include/profile_advanced.php:37 ../../boot.php:1097 +#: ../../include/profile_advanced.php:37 ../../boot.php:1107 msgid "Status:" msgstr "Status:" -#: ../../include/profile_advanced.php:45 ../../boot.php:1099 +#: ../../include/profile_advanced.php:45 ../../boot.php:1109 msgid "Homepage:" msgstr "Homepage:" @@ -6085,11 +6187,11 @@ msgstr "Beginnt:" msgid "Finishes:" msgstr "Endet:" -#: ../../include/delivery.php:445 ../../include/notifier.php:652 +#: ../../include/delivery.php:452 ../../include/notifier.php:652 msgid "(no subject)" msgstr "(kein Betreff)" -#: ../../include/delivery.php:452 ../../include/enotify.php:23 +#: ../../include/delivery.php:459 ../../include/enotify.php:23 #: ../../include/notifier.php:659 msgid "noreply" msgstr "noreply" @@ -6305,7 +6407,7 @@ msgstr "Neue Gruppe erstellen" msgid "Contacts not in any group" msgstr "Kontakte in keiner Gruppe" -#: ../../include/nav.php:46 ../../boot.php:804 +#: ../../include/nav.php:46 ../../boot.php:814 msgid "Logout" msgstr "Abmelden" @@ -6313,7 +6415,7 @@ msgstr "Abmelden" msgid "End this session" msgstr "Diese Sitzung beenden" -#: ../../include/nav.php:49 ../../boot.php:1472 +#: ../../include/nav.php:49 ../../boot.php:1482 msgid "Status" msgstr "Status" @@ -6393,11 +6495,11 @@ msgstr "Verwalten" msgid "Manage other pages" msgstr "Andere Seiten verwalten" -#: ../../include/nav.php:138 ../../boot.php:1052 +#: ../../include/nav.php:138 ../../boot.php:1062 msgid "Profiles" msgstr "Profile" -#: ../../include/nav.php:138 ../../boot.php:1052 +#: ../../include/nav.php:138 ../../boot.php:1062 msgid "Manage/edit profiles" msgstr "Profile verwalten/editieren" @@ -6563,7 +6665,7 @@ msgstr "Sekunden" 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 +6690,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 +6878,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:2724 msgid "A new person is sharing with you at " msgstr "Eine neue Person teilt mit dir auf " -#: ../../include/items.php:2714 +#: ../../include/items.php:2724 msgid "You have a new follower at " msgstr "Du hast einen neuen Kontakt auf " @@ -6823,30 +6917,30 @@ msgstr "Das Sicherheits-Merkmal war nicht korrekt. Das passiert meistens wenn da msgid "stopped following" msgstr "wird nicht mehr gefolgt" -#: ../../include/Contact.php:203 ../../include/conversation.php:817 +#: ../../include/Contact.php:203 ../../include/conversation.php:820 msgid "View Status" msgstr "Pinnwand anschauen" -#: ../../include/Contact.php:204 ../../include/conversation.php:818 +#: ../../include/Contact.php:204 ../../include/conversation.php:821 msgid "View Profile" msgstr "Profil anschauen" -#: ../../include/Contact.php:205 ../../include/conversation.php:819 +#: ../../include/Contact.php:205 ../../include/conversation.php:822 msgid "View Photos" msgstr "Bilder anschauen" #: ../../include/Contact.php:206 ../../include/Contact.php:219 -#: ../../include/conversation.php:820 +#: ../../include/conversation.php:823 msgid "Network Posts" msgstr "Netzwerk-Beiträge" #: ../../include/Contact.php:207 ../../include/Contact.php:219 -#: ../../include/conversation.php:821 +#: ../../include/conversation.php:824 msgid "Edit Contact" msgstr "Kontakt bearbeiten" #: ../../include/Contact.php:208 ../../include/Contact.php:219 -#: ../../include/conversation.php:822 +#: ../../include/conversation.php:825 msgid "Send PM" msgstr "Private Nachricht senden" @@ -6859,309 +6953,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:320 ../../include/conversation.php:586 msgid "Select" msgstr "Auswählen" -#: ../../include/conversation.php:334 ../../include/conversation.php:676 -#: ../../include/conversation.php:677 +#: ../../include/conversation.php:337 ../../include/conversation.php:679 +#: ../../include/conversation.php:680 #, 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:347 ../../include/conversation.php:691 #, php-format msgid "%s from %s" msgstr "%s von %s" -#: ../../include/conversation.php:359 +#: ../../include/conversation.php:362 msgid "View in context" msgstr "Im Zusammenhang betrachten" -#: ../../include/conversation.php:465 +#: ../../include/conversation.php:468 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "%d Kommentar" msgstr[1] "%d Kommentare" -#: ../../include/conversation.php:529 +#: ../../include/conversation.php:532 msgid "like" msgstr "mag ich" -#: ../../include/conversation.php:530 +#: ../../include/conversation.php:533 msgid "dislike" msgstr "mag ich nicht" -#: ../../include/conversation.php:532 +#: ../../include/conversation.php:535 msgid "Share this" msgstr "Teile dieses" -#: ../../include/conversation.php:532 +#: ../../include/conversation.php:535 msgid "share" msgstr "Teilen" -#: ../../include/conversation.php:556 +#: ../../include/conversation.php:559 msgid "Bold" msgstr "Fett" -#: ../../include/conversation.php:557 +#: ../../include/conversation.php:560 msgid "Italic" msgstr "Kursiv" -#: ../../include/conversation.php:558 +#: ../../include/conversation.php:561 msgid "Underline" msgstr "Unterstrichen" -#: ../../include/conversation.php:559 +#: ../../include/conversation.php:562 msgid "Quote" msgstr "Zitat" -#: ../../include/conversation.php:560 +#: ../../include/conversation.php:563 msgid "Code" msgstr "Code" -#: ../../include/conversation.php:561 +#: ../../include/conversation.php:564 msgid "Image" msgstr "Bild" -#: ../../include/conversation.php:562 +#: ../../include/conversation.php:565 msgid "Link" msgstr "Verweis" -#: ../../include/conversation.php:563 +#: ../../include/conversation.php:566 msgid "Video" msgstr "Video" -#: ../../include/conversation.php:596 +#: ../../include/conversation.php:599 msgid "add star" msgstr "markieren" -#: ../../include/conversation.php:597 +#: ../../include/conversation.php:600 msgid "remove star" msgstr "Markierung entfernen" -#: ../../include/conversation.php:598 +#: ../../include/conversation.php:601 msgid "toggle star status" msgstr "Markierung umschalten" -#: ../../include/conversation.php:601 +#: ../../include/conversation.php:604 msgid "starred" msgstr "markiert" -#: ../../include/conversation.php:602 +#: ../../include/conversation.php:605 msgid "add tag" msgstr "Tag hinzufügen" -#: ../../include/conversation.php:606 +#: ../../include/conversation.php:609 msgid "save to folder" msgstr "In Ordner speichern" -#: ../../include/conversation.php:678 +#: ../../include/conversation.php:681 msgid "to" msgstr "zu" -#: ../../include/conversation.php:679 +#: ../../include/conversation.php:682 msgid "Wall-to-Wall" msgstr "Wall-to-Wall" -#: ../../include/conversation.php:680 +#: ../../include/conversation.php:683 msgid "via Wall-To-Wall:" msgstr "via Wall-To-Wall:" -#: ../../include/conversation.php:725 +#: ../../include/conversation.php:728 msgid "Delete Selected Items" msgstr "Lösche die markierten Beiträge" -#: ../../include/conversation.php:876 +#: ../../include/conversation.php:879 #, php-format msgid "%s likes this." msgstr "%s mag das." -#: ../../include/conversation.php:876 +#: ../../include/conversation.php:879 #, php-format msgid "%s doesn't like this." msgstr "%s mag das nicht." -#: ../../include/conversation.php:880 +#: ../../include/conversation.php:883 #, php-format msgid "%2$d people like this." msgstr "%2$d Leute mögen das." -#: ../../include/conversation.php:882 +#: ../../include/conversation.php:885 #, php-format msgid "%2$d people don't like this." msgstr "%2$d Leute mögen das nicht." -#: ../../include/conversation.php:888 +#: ../../include/conversation.php:891 msgid "and" msgstr "und" -#: ../../include/conversation.php:891 +#: ../../include/conversation.php:894 #, php-format msgid ", and %d other people" msgstr " und %d andere" -#: ../../include/conversation.php:892 +#: ../../include/conversation.php:895 #, php-format msgid "%s like this." msgstr "%s mögen das." -#: ../../include/conversation.php:892 +#: ../../include/conversation.php:895 #, php-format msgid "%s don't like this." msgstr "%s mögen das nicht." -#: ../../include/conversation.php:917 +#: ../../include/conversation.php:920 msgid "Visible to everybody" msgstr "Für jedermann sichtbar" -#: ../../include/conversation.php:919 +#: ../../include/conversation.php:922 msgid "Please enter a video link/URL:" msgstr "Bitte Link/URL zum Video einfügen:" -#: ../../include/conversation.php:920 +#: ../../include/conversation.php:923 msgid "Please enter an audio link/URL:" msgstr "Bitte Link/URL zum Audio einfügen:" -#: ../../include/conversation.php:921 +#: ../../include/conversation.php:924 msgid "Tag term:" msgstr "Tag:" -#: ../../include/conversation.php:923 +#: ../../include/conversation.php:926 msgid "Where are you right now?" msgstr "Wo hältst du dich jetzt gerade auf?" -#: ../../include/conversation.php:966 +#: ../../include/conversation.php:969 msgid "upload photo" msgstr "Bild hochladen" -#: ../../include/conversation.php:968 +#: ../../include/conversation.php:971 msgid "attach file" msgstr "Datei anhängen" -#: ../../include/conversation.php:970 +#: ../../include/conversation.php:973 msgid "web link" msgstr "Weblink" -#: ../../include/conversation.php:971 +#: ../../include/conversation.php:974 msgid "Insert video link" msgstr "Video-Adresse einfügen" -#: ../../include/conversation.php:972 +#: ../../include/conversation.php:975 msgid "video link" msgstr "Video-Link" -#: ../../include/conversation.php:973 +#: ../../include/conversation.php:976 msgid "Insert audio link" msgstr "Audio-Adresse einfügen" -#: ../../include/conversation.php:974 +#: ../../include/conversation.php:977 msgid "audio link" msgstr "Audio-Link" -#: ../../include/conversation.php:976 +#: ../../include/conversation.php:979 msgid "set location" msgstr "Ort setzen" -#: ../../include/conversation.php:978 +#: ../../include/conversation.php:981 msgid "clear location" msgstr "Ort löschen" -#: ../../include/conversation.php:985 +#: ../../include/conversation.php:988 msgid "permissions" msgstr "Zugriffsrechte" -#: ../../boot.php:505 +#: ../../boot.php:515 msgid "Delete this item?" msgstr "Diesen Beitrag löschen?" -#: ../../boot.php:508 +#: ../../boot.php:518 msgid "show fewer" msgstr "weniger anzeigen" -#: ../../boot.php:681 +#: ../../boot.php:691 #, php-format msgid "Update %s failed. See error logs." msgstr "Update %s fehlgeschlagen. Bitte Fehlerprotokoll überprüfen." -#: ../../boot.php:683 +#: ../../boot.php:693 #, php-format msgid "Update Error at %s" msgstr "Updatefehler bei %s" -#: ../../boot.php:783 +#: ../../boot.php:793 msgid "Create a New Account" msgstr "Neuen Account erstellen" -#: ../../boot.php:807 +#: ../../boot.php:817 msgid "Nickname or Email address: " msgstr "Spitzname oder Email-Adresse: " -#: ../../boot.php:808 +#: ../../boot.php:818 msgid "Password: " msgstr "Passwort: " -#: ../../boot.php:811 +#: ../../boot.php:821 msgid "Or login using OpenID: " msgstr "Oder melde dich mit deiner OpenID an: " -#: ../../boot.php:817 +#: ../../boot.php:827 msgid "Forgot your password?" msgstr "Passwort vergessen?" -#: ../../boot.php:984 +#: ../../boot.php:994 msgid "Edit profile" msgstr "Profil bearbeiten" -#: ../../boot.php:1044 +#: ../../boot.php:1054 msgid "Message" msgstr "Nachricht" -#: ../../boot.php:1160 ../../boot.php:1236 +#: ../../boot.php:1170 ../../boot.php:1246 msgid "g A l F d" msgstr "l, d. F G \\U\\h\\r" -#: ../../boot.php:1161 ../../boot.php:1237 +#: ../../boot.php:1171 ../../boot.php:1247 msgid "F d" msgstr "d. F" -#: ../../boot.php:1206 ../../boot.php:1277 +#: ../../boot.php:1216 ../../boot.php:1287 msgid "[today]" msgstr "[heute]" -#: ../../boot.php:1218 +#: ../../boot.php:1228 msgid "Birthday Reminders" msgstr "Geburtstagserinnerungen" -#: ../../boot.php:1219 +#: ../../boot.php:1229 msgid "Birthdays this week:" msgstr "Geburtstage diese Woche:" -#: ../../boot.php:1270 +#: ../../boot.php:1280 msgid "[No description]" msgstr "[keine Beschreibung]" -#: ../../boot.php:1288 +#: ../../boot.php:1298 msgid "Event Reminders" msgstr "Veranstaltungserinnerungen" -#: ../../boot.php:1289 +#: ../../boot.php:1299 msgid "Events this week:" msgstr "Veranstaltungen diese Woche" -#: ../../boot.php:1475 +#: ../../boot.php:1485 msgid "Status Messages and Posts" msgstr "Statusnachrichten und Beiträge" -#: ../../boot.php:1481 +#: ../../boot.php:1491 msgid "Profile Details" msgstr "Profildetails" -#: ../../boot.php:1496 +#: ../../boot.php:1506 msgid "Events and Calendar" msgstr "Ereignisse und Kalender" -#: ../../boot.php:1502 +#: ../../boot.php:1512 msgid "Only You Can See This" msgstr "Nur Du Kannst Das Sehen" diff --git a/view/de/strings.php b/view/de/strings.php index a3ccab692..f6336ef68 100644 --- a/view/de/strings.php +++ b/view/de/strings.php @@ -751,8 +751,10 @@ $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["Poll interval"] = "Abfrage Intervall"; +$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."; @@ -831,6 +833,8 @@ $a->strings["No compatible communication protocols or feeds were discovered."] = $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."; @@ -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 Facebook-Kontakten 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 Facebook-Kontakten 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 profile wall and your friend stream."] = "Facebook-Konversationen bestehen aus deinen Beiträgen auf deinerPinnwand, sowie den Beiträgen deiner Freunde Stream."; $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."; @@ -1255,6 +1259,8 @@ $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["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)"; @@ -1277,14 +1283,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"; @@ -1514,8 +1528,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"; From 1a1d950eb4328f1497652ae59e3966d362dda970 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 15 May 2012 05:09:26 -0700 Subject: [PATCH 018/164] initial commit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..494bd0742 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +dir +=== + +Friendica Global Directory \ No newline at end of file From 205c09e4f0ffd47f91b205c5289633ebb1007f27 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 15 May 2012 17:05:28 -0700 Subject: [PATCH 019/164] rev update --- boot.php | 2 +- util/messages.po | 50 ++++++++++++++++++++++++++++-------------------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/boot.php b/boot.php index 281f1b320..f9bfa7551 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1342' ); +define ( 'FRIENDICA_VERSION', '3.0.1343' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1143 ); diff --git a/util/messages.po b/util/messages.po index 0cd74bf84..ba718cdd8 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1342\n" +"Project-Id-Version: 3.0.1343\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-14 10:00-0700\n" +"POT-Creation-Date: 2012-05-15 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -150,11 +150,11 @@ 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 @@ -1832,7 +1832,7 @@ msgstr "" #: ../../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 "" @@ -1842,12 +1842,12 @@ msgid "Add application" msgstr "" #: ../../mod/settings.php:542 ../../mod/settings.php:568 -#: ../../addon/statusnet/statusnet.php:547 +#: ../../addon/statusnet/statusnet.php:555 msgid "Consumer Key" msgstr "" #: ../../mod/settings.php:543 ../../mod/settings.php:569 -#: ../../addon/statusnet/statusnet.php:546 +#: ../../addon/statusnet/statusnet.php:554 msgid "Consumer Secret" msgstr "" @@ -3137,7 +3137,7 @@ msgstr "" msgid "Advanced" msgstr "" -#: ../../mod/admin.php:412 ../../addon/statusnet/statusnet.php:544 +#: ../../mod/admin.php:412 ../../addon/statusnet/statusnet.php:552 msgid "Site name" msgstr "" @@ -4824,7 +4824,7 @@ 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 "" @@ -5272,14 +5272,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 "" @@ -5346,30 +5346,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 "" @@ -5481,14 +5489,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 "" From e39014a3a765f7afb189be5409b60a771f5c46da Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 15 May 2012 17:18:46 -0700 Subject: [PATCH 020/164] update tinymce to 3.5.0.1 --- library/tinymce/changelog.txt | 3090 +++++----- .../plugins/autolink/editor_plugin.js | 2 +- .../plugins/autolink/editor_plugin_src.js | 354 +- .../plugins/fullscreen/editor_plugin.js | 2 +- .../plugins/fullscreen/editor_plugin_src.js | 2 +- .../plugins/lists/editor_plugin_src.js | 1902 +++--- .../plugins/noneditable/editor_plugin.js | 2 +- .../plugins/noneditable/editor_plugin_src.js | 146 +- .../tiny_mce/plugins/paste/editor_plugin.js | 2 +- .../plugins/paste/editor_plugin_src.js | 2 +- .../plugins/tabfocus/editor_plugin.js | 2 +- .../plugins/tabfocus/editor_plugin_src.js | 2 +- .../tiny_mce/plugins/table/js/cell.js | 4 +- .../plugins/visualblocks/css/visualblocks.css | 8 +- .../plugins/visualblocks/editor_plugin.js | 2 +- .../plugins/visualblocks/editor_plugin_src.js | 2 +- .../tiny_mce/themes/advanced/color_picker.htm | 8 +- .../themes/advanced/editor_template.js | 2 +- .../themes/advanced/editor_template_src.js | 24 +- .../tiny_mce/themes/advanced/js/image.js | 6 +- .../advanced/skins/highcontrast/dialog.css | 7 +- .../themes/advanced/skins/highcontrast/ui.css | 6 +- .../themes/advanced/skins/o2k7/dialog.css | 5 +- .../themes/advanced/skins/o2k7/ui.css | 6 +- library/tinymce/jscripts/tiny_mce/tiny_mce.js | 2 +- .../tinymce/jscripts/tiny_mce/tiny_mce_src.js | 5107 ++++++++++------- 26 files changed, 5794 insertions(+), 4903 deletions(-) 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   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 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   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 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 ' 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

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 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 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 - 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 - 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   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 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   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 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 ' 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
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
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 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 + 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 + 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,  , 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,  , 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 < > tag and placing the caret inside an empty LI is handled and should be handled by the selection logic - //li.appendChild(ed.dom.create(" ")); // 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 = '
'; - } - 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 < > tag and placing the caret inside an empty LI is handled and should be handled by the selection logic + //li.appendChild(ed.dom.create(" ")); // 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 = '
'; + } + 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&&F0?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''+l.dom.encode(typeof(p[1])==="string"?p[1]:p[0])+""})}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&&F0?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:M124)&&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''+m.dom.encode(typeof(r[1])==="string"?r[1]:r[0])+""})}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 '' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + ''; + }); + } + + 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 '' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + ''; - }); - } - - 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,"
")});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="

"+o.encode(r).replace(/\r?\n\r?\n/g,"

").replace(/\r?\n/g,"
")+"

"}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([[/(?:
 [\s\r\n]+|
)*(<\/?(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)[^>]*>)(?:
 [\s\r\n]+|
)*/g,"$1"]]);d([[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

$1

")}if(b(k,"paste_convert_middot_lists")){d([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /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([[/([\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(/"/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([[/]*>/gi,"

"],[/<\/h[1-6][^>]*>/gi,"

"]])}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;l0){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(/ /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]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\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*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\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"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /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,"
"]])}else{if(e=="p"){h([[/\n+/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"]])}else{h([[/\n\n/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"],[/\n/g,"
"]])}}}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,"
")});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="

"+o.encode(r).replace(/\r?\n\r?\n/g,"

").replace(/\r?\n/g,"
")+"

"}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([[/(?:
 [\s\r\n]+|
)*(<\/?(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)[^>]*>)(?:
 [\s\r\n]+|
)*/g,"$1"]]);d([[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

$1

")}if(b(k,"paste_convert_middot_lists")){d([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /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([[/([\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(/"/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([[/]*>/gi,"

"],[/<\/h[1-6][^>]*>/gi,"

"]])}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;l0){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(/ /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]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\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*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\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"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /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,"
"]])}else{if(e=="p"){h([[/\n+/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"]])}else{h([[/\n\n/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"],[/\n/g,"
"]])}}}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([[/(?:
 [\s\r\n]+|
)*(<\/?(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)[^>]*>)(?:
 [\s\r\n]+|
)*/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=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=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 - -

- -
- -
+ +
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:"#"},""),"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"));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",{}," ")}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;s0){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:"#"},""),"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"));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",{}," ")}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;s0){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();'}, '')); 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;m0?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=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e=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="[";i0?",":"")+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={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};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;n1){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;g1?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;u0){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=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(F0&&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=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;h1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t0){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;C0){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;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");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("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",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=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+""}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="
"+j;m.removeChild(m.firstChild)}catch(l){m=i.create("div");m.innerHTML="
"+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(aa0){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="\uFEFF";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="\uFEFF\uFEFF";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":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s=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 re[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=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";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="
";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="

";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="
";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;t0){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"+(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+='_';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('_'+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(''+l+"");if(!n){j.collapse(false);g.moveToElementText(j.parentElement());if(g.compareEndPoints("StartToEnd",j)==0){j.move("character",-1)}j.pasteHTML(''+l+"")}}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?'
':" "}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(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\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="// "}}else{if(o.length>0){n.firstChild.value=""}}}});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&&dd){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&&d0&&g=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.clientHeightv){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='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+c}else{d+=''+(c?''+c+"":"")}d+='";d+="";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='';i+="";i+="";i+="";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="";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+=""+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)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+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)+"";i+="";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('
');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
");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"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}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,""));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"},""+f+"")}})})(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':"",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+'';if(J.document_base_url!=n.documentBaseURL){I.iframeHTML+=''}if(J.ie7_compat){I.iframeHTML+=''}else{I.iframeHTML+=''}I.iframeHTML+='';for(A=0;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+='
";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""})})}})}if(x.convert_newlines_to_brs){r.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"
")}})}if(x.preformatted){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='
'+t.content+"
"}})}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(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\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+'>
"}else{v='
'}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='\uFEFF';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(//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.yL.x+L.w||C.x")},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(/]+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;j0){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(e0||this.typing},hasRedo:function(){return e0){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||(awan)){Q(a.grep(ao.childNodes),am);return 0}else{av=c.clone(ar,T);Q(a.grep(ao.childNodes),function(ay,ax){if((awan&&ax>an)){al.push(ay);ay.parentNode.removeChild(ay)}});if(awan){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;ax1||!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=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:agaj?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||aB0&&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;arZ?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=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(KI.y+I.h){e.getWin().scrollTo(0,K"}return I}function o(G){var F,E;if(v.nodeType==3&&(G?s>0: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;m0?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=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e=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="[";i0?",":"")+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&&J7){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={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};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;n1){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;g1?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;u0){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=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(G0&&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=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;h1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t0){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;D0){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;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");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("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",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=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+""}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="
"+j;m.removeChild(m.firstChild)}catch(l){m=i.create("div");m.innerHTML="
"+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(aa0){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="\uFEFF";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="\uFEFF\uFEFF";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;e0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z=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 ye[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=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.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="";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="

";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="
";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;A0){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"+(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+='_';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('_'+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(''+m+"");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML(''+m+"")}}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='
'}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(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\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="// "}}else{if(o.length>0){n.firstChild.value=""}}}});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&&dd){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&&d0&&g=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.clientHeightv){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='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+c}else{d+=''+(c?''+c+"":"")}d+='";d+="";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='';j+="";j+="";j+="";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="";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+=""+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)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+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)+"";i+="";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('
');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
");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"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}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,""));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"},""+f+"")}})})(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':"",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+'';if(G.document_base_url!=k.documentBaseURL){F.iframeHTML+=''}if(G.ie7_compat){F.iframeHTML+=''}else{F.iframeHTML+=''}F.iframeHTML+='';for(x=0;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+='
";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""})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\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+'>
"}else{r='
'}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='\uFEFF';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(//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.yL.x+L.w||C.x")},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(/]+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;m0){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(i0||this.typing},hasRedo:function(){return i0){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||(ayap)){R(a.grep(aq.childNodes),ao);return 0}else{ax=c.clone(au,V);R(a.grep(aq.childNodes),function(aA,az){if((ayap&&az>ap)){an.push(aA);aA.parentNode.removeChild(aA)}});if(ayap){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;az1||!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=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:aial?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||aD0&&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;abab?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=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(PN.y+N.h){e.getWin().scrollTo(0,P"}return M}function p(L){var K,J,I;if(x.nodeType==3&&(L?t>0: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 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; - ed.onKeyDown.add(function(ed, e) { - var rng, blockElm, node, clonedSpan, isDelete; + rng = selection.getRng(); - if (e.isDefaultPrevented()) { - return; + // Find root block + blockElm = dom.getParent(rng.startContainer, dom.isBlock); + + // 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); + } } - isDelete = e.keyCode == DELETE; - if ((isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) { - e.preventDefault(); - rng = selection.getRng(); + // Do the backspace/delete action + editor.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null); - // Find root block - blockElm = dom.getParent(rng.startContainer, dom.isBlock); + // 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(); - // 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); - } + if (clonedSpan) { + dom.replace(clonedSpan.cloneNode(false), span, true); + } else { + dom.remove(span, true); } - // Do the backspace/delete action - ed.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null); + // Restore the selection + selection.moveToBookmark(bm); + }); + }; - // 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(); + editor.onKeyDown.add(function(editor, e) { + var isDelete; - if (clonedSpan) { - dom.replace(clonedSpan.cloneNode(false), span, true); - } else { - dom.remove(span, true); - } - - // Restore the selection - selection.moveToBookmark(bm); - }); + isDelete = e.keyCode == DELETE; + if (!e.isDefaultPrevented() && (isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) { + e.preventDefault(); + removeMergedFormatSpans(isDelete); } }); + + editor.addCommand('Delete', function() {removeMergedFormatSpans();}); }; + + function emptyEditorWhenDeleting() { + function getEndPointNode(rng, start) { + var container, offset, prefix = start ? 'start' : 'end'; - 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'}); - } + container = rng[prefix + 'Container']; + offset = rng[prefix + 'Offset']; - function allContentsSelected(rng) { - var selection = serializeRng(rng); + // 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)] + } - var allRng = ed.dom.createRng(); - allRng.selectNode(ed.getBody()); + return container; + }; - var allSelection = serializeRng(allRng); - return selection === allSelection; - } + function isAtStartEndOfBody(rng, start) { + var container, offset, root, childNode, prefix = start ? 'start' : 'end', isAfter; - 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(); + container = rng[prefix + 'Container']; + offset = rng[prefix + 'Offset']; + root = dom.getRoot(); + + // Resolve indexed container + if (container.nodeType == 1) { + isAfter = offset >= container.childNodes.length; + container = getEndPointNode(rng, start); + + if (container.nodeType == 3) { + offset = start && !isAfter ? 0 : container.nodeValue.length; + } + } + + // Check if start/end is in the middle of text + if (container.nodeType == 3 && ((start && offset > 0) || (!start && offset < container.nodeValue.length))) { + return false; + } + + // 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']; + + // If first/last element is a BR then jump to it's sibling in case:

x

+ if (childNode.nodeName == "BR") { + childNode = childNode[start ? 'nextSibling' : 'previousSibling'] || childNode; + } + + // If the childNode isn't the container node then break in case

A[X]

+ if (childNode !== container) { + return false; + } + + container = container.parentNode; + } + + 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); + editor.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'); - } - }, 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:

|

+ 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'); + } + } + }); + } + + 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; } - // Gecko - if (tinymce.isGecko) { - removeHrOnBackspace(ed); - focusBody(ed); - removeStylesWhenDeletingAccrossBlockElements(ed); + 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


so they become

 

+ 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. "

a b

" 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

- if (!startContainer.hasChildNodes()) { - startContainer.innerHTML = '\uFEFF\uFEFF'; - ieRng.moveToElementText(startContainer.lastChild); - ieRng.select(); - dom.doc.selection.clear(); - startContainer.innerHTML = ''; - return; + if (startOffset == endOffset && !startContainer.hasChildNodes()) { + if (startContainer.canHaveHTML) { + startContainer.innerHTML = '\uFEFF\uFEFF'; + 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.find = function(expr, context, isXML){ - var set; +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +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 "file" === elem.type; + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; }, - password: function(elem){ - return "password" === elem.type; + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; }, - submit: function(elem){ - return "submit" === elem.type; + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; }, - image: function(elem){ - return "image" === elem.type; + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; }, - reset: function(elem){ - return "reset" === elem.type; + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; }, - button: function(elem){ - return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "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; - } - 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; + 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; } - 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; + // 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; } - return ret; + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + 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 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; }; } -// Utility function for retreiving the text value of an array of DOM nodes -Sizzle.getText = function( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += Sizzle.getText( elem.childNodes ); - } - } - - return ret; -}; - // 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 = ""; // 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 = ""; + 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 = "

"; // 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,10 +8493,55 @@ 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"); @@ -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; - } - - point.push(offset); - } else { - childNodes = container.childNodes; - - if (offset >= childNodes.length && childNodes.length) { - after = 1; - offset = Math.max(0, childNodes.length - 1); - } - - point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after); + 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); } - - for (; container && container != root; container = container.parentNode) - point.push(t.dom.nodeIndex(container, normalized)); - - return point; - }; - - bookmark.start = getPoint(rng, true); - - if (!t.isCollapsed()) - bookmark.end = getPoint(rng); - - return bookmark; + } }; + moveEndPoint(true); + moveEndPoint(); + + 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; + + if (container.nodeType == 3) { + if (normalized) { + for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling) + offset += node.nodeValue.length; + } + + point.push(offset); + } else { + childNodes = container.childNodes; + + if (offset >= childNodes.length && childNodes.length) { + after = 1; + offset = Math.max(0, childNodes.length - 1); + } + + point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after); + } + + for (; container && container != root; container = container.parentNode) + point.push(t.dom.nodeIndex(container, normalized)); + + 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

] becomes

]

rng.moveToElementText(rng2.parentElement()); - if (rng.compareEndPoints('StartToEnd', rng2) == 0) + if (rng.compareEndPoints('StartToEnd', rng2) === 0) rng2.move('character', -1); rng2.pasteHTML('' + chr + ''); @@ -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,45 +9195,115 @@ window.tinymce.dom.Sizzle = Sizzle; moveToBookmark : function(bookmark) { var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset; + function setEndPoint(start) { + var point = bookmark[start ? 'start' : 'end'], i, node, offset, children; + + if (point) { + offset = point[0]; + + // Find container node + for (node = root, i = point.length - 1; i >= 1; i--) { + children = node.childNodes; + + if (point[i] > children.length - 1) + return; + + node = children[point[i]]; + } + + // 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); + + // Set offset within container node + if (start) + rng.setStart(node, offset); + else + rng.setEnd(node, offset); + } + + return true; + }; + + function restoreEndPoint(suffix) { + var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep; + + if (marker) { + node = marker.parentNode; + + 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; + } + + 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, ''); + }); + + // 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; + } + } + } + } + }; + + function addBogus(node) { + // Adds a bogus BR element for empty block elements + if (dom.isBlock(node) && !node.innerHTML && !isIE) + node.innerHTML = '
'; + + return node; + }; + if (bookmark) { if (bookmark.start) { rng = dom.createRng(); root = dom.getRoot(); - function setEndPoint(start) { - var point = bookmark[start ? 'start' : 'end'], i, node, offset, children; - - if (point) { - offset = point[0]; - - // Find container node - for (node = root, i = point.length - 1; i >= 1; i--) { - children = node.childNodes; - - if (point[i] > children.length - 1) - return; - - node = children[point[i]]; - } - - // 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); - - // Set offset within container node - if (start) - rng.setStart(node, offset); - else - rng.setEnd(node, offset); - } - - return true; - }; - if (t.tridentSel) return t.tridentSel.moveToBookmark(bookmark); @@ -8478,76 +9311,6 @@ window.tinymce.dom.Sizzle = Sizzle; t.setRng(rng); } } 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 (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; - } - - 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, ''); - }); - - // 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; - } - } - } - } - }; - - 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 ? '
' : ' '; - - return node; - }; - // 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 (t.selectedRange && t.explicitRange) { - if (r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) === 0 && r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) === 0) { + // 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 (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; }, + isForward: function(){ + var dom = this.dom, sel = this.getSel(), anchorRange, focusRange; + + // No support for selection direction then always return true + if (!sel || sel.anchorNode == null || sel.focusNode == null) { + return true; + } + + 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; - - // 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 - - // Normalize only on non IE browsers for now - if (tinymce.isIE) - return; + 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: x|x + // Becomes: x|x + // 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: |
+ // Becomes: |
+ // 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[x] + // Becomes: x[x] + 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; + Editor : function(id, settings) { + var self = this, TRUE = true; - 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', - - '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 ? '' : '', // 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); - t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, { + self.id = self.editorId = id; + + self.isNotDirty = false; + + self.plugins = {}; + + 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); + self.serializer = new tinymce.dom.Serializer(settings, self.dom, self.schema); - t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer); + self.selection = new tinymce.dom.Selection(self.dom, self.getWin(), self.serializer); - t.formatter = new tinymce.Formatter(this); + self.formatter = new tinymce.Formatter(self); - // 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'}} - ], + self.undoManager = new tinymce.UndoManager(self); - 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(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); + self.serializer.onPreProcess.add(function(se, o) { + return self.onPreProcess.dispatch(self, o, se); }); - t.undoManager.onUndo.add(function(um, l) { - return t.onUndo.dispatch(t, l, um); + self.serializer.onPostProcess.add(function(se, o) { + return self.onPostProcess.dispatch(self, o, se); }); - t.undoManager.onRedo.add(function(um, l) { - return t.onRedo.dispatch(t, l, um); - }); + self.onPreInit.dispatch(self); - t.forceBlocks = new tinymce.ForceBlocks(t); - t.enterKey = new tinymce.EnterKey(t); + if (!settings.gecko_spellcheck) + doc.body.spellcheck = false; - t.editorCommands = new tinymce.EditorCommands(t); - - // 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; - }); - } + self.quirks = tinymce.util.Quirks(self); - if (s.onchange_callback) { - t.onChange.add(function(ed, l) { - t.execCallback('onchange_callback', t, l); - }); - } + if (settings.directionality) + body.dir = settings.directionality; - 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 ''; - }); + if (settings.nowrap) + body.style.whiteSpace = "nowrap"; + + if (settings.protect) { + self.onBeforeSetContent.add(function(ed, o) { + each(settings.protect, function(pattern) { + o.content = o.content.replace(pattern, function(str) { + return ''; }); - } - }); - } - - if (s.convert_newlines_to_brs) { - t.onBeforeSetContent.add(function(ed, o) { - if (o.initial) - o.content = o.content.replace(/\r?\n/g, '
'); - }); - } - - if (s.preformatted) { - t.onPostProcess.add(function(ed, o) { - o.content = o.content.replace(/^\s*/, ''); - o.content = o.content.replace(/<\/pre>\s*$/, ''); - - if (o.set) - o.content = '
' + o.content + '
'; - }); - } - - 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); - }); - - t.onPreProcess.add(function(ed, o) { - if (o.set) - t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o); - - if (o.get) - t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o); - }); - - t.onPostProcess.add(function(ed, o) { - if (o.set) - o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); - - if (o.get) - o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o); - }); - } - - if (s.save_callback) { - t.onGetContent.add(function(ed, o) { - if (o.save) - o.content = t.execCallback('save_callback', t.id, o.content, t.getBody()); - }); - } - - if (s.handle_event_callback) { - t.onEvent.add(function(ed, e, o) { - if (t.execCallback('handle_event_callback', e, ed, o) === false) - Event.cancel(e); + }); }); } // 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(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\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; + self.load({initial : true, format : 'html'}); + self.startContent = self.getContent({format : 'raw'}); - if (ed.dom.isBlock(pn) && pn.lastChild === n) - ed.dom.add(pn, 'br', {'data-mce-bogus' : 1}); - }); - }; + self.initialized = true; - t.onExecCommand.add(function(ed, cmd) { - if (cmd === 'CreateLink') - fixLinks(ed); - }); - - t.onSetContent.add(t.selection.onSetContent.add(fixLinks)); - } - - t.load({initial : true, format : 'html'}); - t.startContent = t.getContent({format : 'raw'}); - t.undoManager.add(); - t.initialized = true; - - t.onInit.dispatch(t); - t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc()); - t.execCallback('init_instance_callback', t); - t.focus(true); - t.nodeChanged({initial : 1}); + 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(); + var self = this, elm = self.getContainer(); - if (!t.removed) { - t.removed = 1; // Cancels post remove event execution - t.hide(); - - // 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,343 +14011,6 @@ 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 - }; - - function eventHandler(e, o) { - var ty = e.type; - - // Don't fire events when it's removed - if (t.removed) - return; - - // Generic event handler - if (t.onEvent.dispatch(t, e, o) !== false) { - // Specific event handler - t[lo[e.fakeType || e.type]].dispatch(t, e, o); - } - }; - - // Add DOM events - each(lo, function(v, k) { - switch (k) { - case 'contextmenu': - dom.bind(t.getDoc(), k, eventHandler); - break; - - case 'paste': - dom.bind(t.getBody(), k, function(e) { - eventHandler(e); - }); - break; - - case 'submit': - case 'reset': - dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler); - break; - - default: - dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler); - } - }); - - dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) { - t.focus(true); - }); - - - // 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; - - e = e.target; - - if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('data-mce-src'))) - e.src = t.documentBaseURI.toAbsolute(v); - }); - } - - // Set various midas options in Gecko - if (isGecko) { - function setOpts() { - var t = this, d = t.getDoc(), s = t.settings; - - if (isGecko && !s.readonly) { - t._refreshContentEditable(); - - 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) {} - } - - if (!s.table_inline_editing) - try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {} - - if (!s.object_resizing) - try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {} - } - }; - - t.onBeforeExecCommand.add(setOpts); - t.onMouseDown.add(setOpts); - } - - // Add node change handlers - t.onMouseUp.add(t.nodeChanged); - //t.onClick.add(t.nodeChanged); - t.onKeyUp.add(function(ed, e) { - var c = e.keyCode; - - 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(); - }); - - - // Add block quote deletion handler - t.onKeyDown.add(function(ed, e) { - if (e.keyCode != VK.BACKSPACE) - return; - - var rng = ed.selection.getRng(); - if (!rng.collapsed) - return; - - var n = rng.startContainer; - var offset = rng.startOffset; - - while (n && n.nodeType && n.nodeType != 1 && n.parentNode) - n = n.parentNode; - - // 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); - - // Move the caret to the beginning of n - rng.setStart(n, 0); - rng.setEnd(n, 0); - ed.selection.setRng(rng); - ed.selection.collapse(false); - } - }); - - - - // Add reset handler - t.onReset.add(function() { - t.setContent(t.startContent, {format : 'raw'}); - }); - - // 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'); - } - - // 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'); - - // BlockFormat shortcuts keys - for (i=1; i<=6; i++) - t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]); - - t.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']); - t.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']); - t.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']); - - function find(e) { - var v = null; - - if (!e.altKey && !e.ctrlKey && !e.metaKey) - return v; - - each(t.shortcuts, function(o) { - if (tinymce.isMac && o.ctrl != e.metaKey) - return; - else if (!tinymce.isMac && o.ctrl != e.ctrlKey) - return; - - if (o.alt != e.altKey) - return; - - if (o.shift != e.shiftKey) - return; - - if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) { - v = o; - return false; - } - }); - - return v; - }; - - t.onKeyUp.add(function(ed, e) { - var o = find(e); - - if (o) - return Event.cancel(e); - }); - - t.onKeyPress.add(function(ed, e) { - var o = find(e); - - if (o) - return Event.cancel(e); - }); - - t.onKeyDown.add(function(ed, e) { - var o = find(e); - - if (o) { - o.func.call(o.scope); - return Event.cancel(e); - } - }); - } - - if (tinymce.isIE) { - // 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; - - e = e.target; - - // Don't do this action for non image elements - if (e.nodeName !== 'IMG') - return; - - if (re) - dom.unbind(re.node, re.ev, re.cb); - - if (!dom.hasClass(e, 'mceItemNoResize')) { - ev = 'resizeend'; - cb = dom.bind(e, ev, function(e) { - var v; - - e = e.target; - - if (v = dom.getStyle(e, 'width')) { - dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, '')); - dom.setStyle(e, 'width', ''); - } - - 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); - } - - re = t.resizeInfo = { - node : e, - ev : ev, - cb : cb - }; - }); - } - - if (tinymce.isOpera) { - t.onClick.add(function(ed, e) { - Event.prevent(e); - }); - } - - // Add custom undo/redo handlers - if (s.custom_undo_redo) { - function addUndo() { - t.undoManager.typing = false; - t.undoManager.add(); - }; - - var focusLostFunc = tinymce.isGecko ? 'blur' : 'focusout'; - dom.bind(t.getDoc(), focusLostFunc, function(e){ - if (!t.removed && t.undoManager.typing) - addUndo(); - }); - - // Add undo level when contents is drag/dropped within the editor - t.dom.bind(t.dom.getRoot(), 'dragend', function(e) { - addUndo(); - }); - - t.onKeyUp.add(function(ed, e) { - var keyCode = e.keyCode; - - if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || e.ctrlKey) - addUndo(); - }); - - t.onKeyDown.add(function(ed, e) { - var keyCode = e.keyCode, sel; - - if (keyCode == 8) { - sel = t.getDoc().selection; - - // Fix IE control + backspace browser bug - if (sel && sel.createRange && sel.createRange().item) { - t.undoManager.beforeChange(); - ed.dom.remove(sel.createRange().item(0)); - addUndo(); - - return Event.cancel(e); - } - } - - // 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(); - - if (t.undoManager.typing) - addUndo(); - - return; - } - - // 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(); - } - }); - - t.onMouseDown.add(function() { - if (t.undoManager.typing) - addUndo(); - }); - } - }, - _refreshContentEditable : function() { var self = this, body, parent; @@ -13852,14 +14034,294 @@ tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', { // Weird, wheres that cursor selection? s = this.selection.getSel(); - return (!s || !s.rangeCount || s.rangeCount == 0); + return (!s || !s.rangeCount || s.rangeCount === 0); } }); })(tinymce); +(function(tinymce) { + var each = tinymce.each; + tinymce.Editor.prototype.setupEvents = function() { + var self = this, settings = self.settings; + + // Add events to the editor + each([ + '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(name) { + self[name] = new tinymce.util.Dispatcher(self); + }); + + // 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); + }); + + self.onPreProcess.add(function(ed, o) { + if (o.set) + ed.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o); + + if (o.get) + ed.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o); + }); + + self.onPostProcess.add(function(ed, o) { + if (o.set) + o.content = ed.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); + + if (o.get) + o.content = ed.execCallback('cleanup_callback', 'get_from_editor', o.content, o); + }); + } + + // 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()); + }); + } + + // 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); + }); + } + + // 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()); + }); + } + + // 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 (h) + o.content = h; + }); + } + + // Handle legacy onchange_callback option + if (settings.onchange_callback) { + self.onChange.add(function(ed, l) { + ed.execCallback('onchange_callback', ed, l); + }); + } + }; + + 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 + }; + + // 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); + } + }; + + // Opera doesn't support focus event for contentEditable elements so we need to fake it + function doOperaFocus(e) { + self.focus(true); + }; + + function nodeChanged() { + // Normalize selection for example a|a becomes a|a + self.selection.normalize(); + self.nodeChanged(); + } + + // Add DOM events + each(nativeToDispatcherMap, function(dispatcherName, nativeName) { + var root = settings.content_editable ? self.getBody() : self.getDoc(); + + switch (nativeName) { + case 'contextmenu': + dom.bind(root, nativeName, eventHandler); + break; + + case 'paste': + dom.bind(self.getBody(), nativeName, eventHandler); + break; + + case 'submit': + case 'reset': + dom.bind(self.getElement().form || tinymce.DOM.getParent(self.id, 'form'), nativeName, eventHandler); + break; + + default: + dom.bind(root, nativeName, eventHandler); + } + }); + + // 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); + }); + + if (settings.content_editable && tinymce.isOpera) { + dom.bind(self.getBody(), 'click', doOperaFocus); + dom.bind(self.getBody(), 'keydown', doOperaFocus); + } + + // Add node change handler + self.onMouseUp.add(nodeChanged); + + self.onKeyUp.add(function(ed, e) { + var keyCode = e.keyCode; + + 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(); + }); + + // Add reset handler + self.onReset.add(function() { + self.setContent(self.startContent, {format : 'raw'}); + }); + + // 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; + + if (shortcut.ctrl != ctrlState || shortcut.alt != e.altKey || shortcut.shift != e.shiftKey) + return; + + if (e.keyCode == shortcut.keyCode || (e.charCode && e.charCode == shortcut.charCode)) { + e.preventDefault(); + + if (execute) { + shortcut.func.call(shortcut.scope); + } + + return true; + } + }); + } + }; + + self.onKeyUp.add(function(ed, e) { + handleShortcut(e); + }); + + self.onKeyPress.add(function(ed, e) { + handleShortcut(e); + }); + + 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(/]+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) + if (!node || node.nodeType !== 1 || !settings.forced_root_block) + return; + + // 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); - - if (endOffset > 0) - rng.moveEnd('character', endOffset); - - rng.select(); - } catch (ex) { - // Ignore - } + rootBlockNode = null; + node = node.nextSibling; } + } + 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); + + 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; + function find(node, next, inc) { + node = getNonWhiteSpaceSibling(node, next, inc); + + return !node || (node.nodeName == 'BR' || isBlock(node)); + }; + if (format.block) { if (!forcedRootBlock) { - function find(node, next, inc) { - node = getNonWhiteSpaceSibling(node, next, inc); - - return !node || (node.nodeName == 'BR' || isBlock(node)); - }; - // 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; }; + 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; + } + + return node; + }; + // 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; - - if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) - return sibling; - } - - return node; - }; - // 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,25 +17606,35 @@ tinymce.ForceBlocks = function(editor) { tinymce.onAddEditor.add(function(tinymce, ed) { var filters, fontSizes, dom, settings = ed.settings; + 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; + + if (settings.convert_fonts_to_spans) { + tinymce.each(dom.select('font,u,strike', params.node), function(node) { + filters[node.nodeName.toLowerCase()](ed.dom, node); + }); + } + }; + 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'); - }; - filters = { font : function(dom, node) { replaceWithSpan(node, { 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 (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); + 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 text|text2 will become this

text|text2

- 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); + From fca09c9d4c5e9577b38288aeecbdf6dceef70745 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Wed, 16 May 2012 01:58:55 -0400 Subject: [PATCH 021/164] slight re-design of wall stuff and css/font cleaning Signed-off-by: Simon L'nu --- view/theme/dispy/dark/style.css | 23 ++++----- view/theme/dispy/dark/style.less | 79 ++++++++++++++++++++---------- view/theme/dispy/light/style.css | 19 +++---- view/theme/dispy/light/style.less | 75 +++++++++++++++++++--------- view/theme/dispy/nav.tpl | 13 +++-- view/theme/dispy/wall_item.tpl | 14 ++++-- view/theme/dispy/wallwall_item.tpl | 14 ++++-- 7 files changed, 154 insertions(+), 83 deletions(-) diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index 3a5e59fb3..60e7db6e1 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -55,7 +55,9 @@ h6{font-size:xx-small;} .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,#profile-listing-desc{width:25%;height:auto;background:#555753;color:#eeeecc;border:2px outset #222321;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding:5px;font-size:smaller;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} +.button a,#profile-listing-desc a{color:#eeeecc;font-size:smaller;font-weight:bold;} +[class$="-desc"],[id$="-desc"]{color:#2e2f2e;border:1px outset #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;} #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;} @@ -166,7 +168,7 @@ 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;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;} @@ -186,7 +188,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #sectionmain{margin:20px;font-size:0.8em;min-width:475px;width:67%;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{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;} -.tab.active{background:#eeeecc;color:#2e2f2e;border:1px solid #638ec4;}.tab.active:hover{background:#2e3436;color:#2e2f2e;border:1px solid #638ec4;} +.tab.active{background:#eeeecc;color:#2e2f2e;border:1px solid #638ec4;}.tab.active:hover{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;} .tab.active a{color:#2e2f2e;text-decoration:none;} .tab a{border:0;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;} @@ -199,7 +201,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:8em;} .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;} @@ -209,22 +211,22 @@ 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-author,.wall-item-actions-author,.wall-item-ago{clear:left;float:left;color:#eeeecc;line-height:1;display:inline-block;font-size:0.75em;margin:0.5em auto 0;} +.wall-item-author,.wall-item-actions-author{margin:0.5em auto 0;font-size:0.75em;font-weight:bold;} .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-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;} .ccollapse-wrapper{font-size:0.9em;margin-left:5em;} +.hide-comments-outer{font-size:small;} .wall-item-outside-wrapper.comment{margin-left: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-author{margin-left:0.2em;} .wall-item-outside-wrapper.comment .wall-item-photo-menu{min-width:50px;top:60px;} @@ -415,8 +417,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;} @@ -513,7 +514,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le footer{display:block;clear:both;} #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 3521b4398..7634db1d7 100644 --- a/view/theme/dispy/dark/style.less +++ b/view/theme/dispy/dark/style.less @@ -280,10 +280,30 @@ h6 { .box(100%, 100%); margin: 0 auto; } +.button, +#profile-listing-desc { + .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; + } +} [class$="-desc"], [id$="-desc"] { color: @bg_colour; - background: @main_colour; + // background: @main_colour; + .borders(1px, outset, @main_colour); .rounded_corners; // .box_shadow(3px, 3px, 5px); margin: 3px 10px 7px 0; @@ -1074,7 +1094,7 @@ nav #nav-notifications-linkmenu { .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; } @@ -1218,7 +1238,7 @@ nav #nav-notifications-linkmenu { .borders(1px, solid, @hover_colour); &:hover { background: @shiny_colour; - color: @bg_colour; + color: @main_colour; .borders(1px, solid, @hover_colour); } a { @@ -1287,7 +1307,7 @@ nav #nav-notifications-linkmenu { } .wall-item-info { float: left; - width: 110px; + width: 8em; } .wall-item-photo-wrapper { .box(80px, 80px); @@ -1352,16 +1372,21 @@ nav #nav-notifications-linkmenu { } } .wall-item-author, -.wall-item-actions-author { +.wall-item-actions-author, +.wall-item-ago { clear: left; float: left; - font-size: 0.8em; - color: lighten(@menu_bg_colour, 20%); - margin: 1em auto 0 0.2em; + color: @main_colour; + line-height: 1; + display: inline-block; + font-size: 0.75em; + margin: 0.5em auto 0; } -.wall-item-ago { - display: inline; - padding-left: 10px; +.wall-item-author, +.wall-item-actions-author { + margin: 0.5em auto 0; + font-size: 0.75em; + font-weight: bold; } .wall-item-location { margin-top: 15px; @@ -1371,7 +1396,8 @@ nav #nav-notifications-linkmenu { .icon { float: left; } - > a, .smalltext { + > a, + .smalltext { margin-left: 25px; font-size: 0.7em; display: block; @@ -1405,7 +1431,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 +1444,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; @@ -1446,6 +1473,9 @@ 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-photo { @@ -1460,9 +1490,6 @@ nav #nav-notifications-linkmenu { top: 45px; background-position: 35px center; } - .wall-item-info { - width: 60px; - } .wall-item-body { margin-left: 10px; } @@ -2455,13 +2482,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 { @@ -2584,7 +2611,8 @@ div { background-color: @link_colour; color: @bg_colour; } -.grey, .gray { +.grey, +.gray { color: gray; } .orange { @@ -2938,6 +2966,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/light/style.css b/view/theme/dispy/light/style.css index e1bbdd09a..e89ee7d24 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -55,7 +55,9 @@ h6{font-size:xx-small;} .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,#profile-listing-desc{width:25%;height:auto;background:#555753;color:#eeeeec;border:2px outset #222321;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding:5px;font-size:smaller;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} +.button a,#profile-listing-desc a{color:#eeeeec;font-size:smaller;font-weight:bold;} +[class$="-desc"],[id$="-desc"]{color:#eeeeec;border:1px outset #eeeeec;-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;} @@ -199,7 +201,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:8em;} .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;} @@ -209,22 +211,22 @@ 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-author,.wall-item-actions-author,.wall-item-ago{clear:left;float:left;color:#eeeeec;line-height:1;display:inline-block;font-size:0.75em;margin:0.5em auto 0;} +.wall-item-author,.wall-item-actions-author{margin:0.5em auto 0;font-size:0.75em;font-weight:bold;} .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-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:#eeeeec;}.wall-item-photo-menu li a:hover{color:#555753;background:#eeeeec;} +.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;} .ccollapse-wrapper{font-size:0.9em;margin-left:5em;} +.hide-comments-outer{font-size:small;} .wall-item-outside-wrapper.comment{margin-left: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-author{margin-left:0.2em;} .wall-item-outside-wrapper.comment .wall-item-photo-menu{min-width:50px;top:60px;} @@ -415,8 +417,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:#111111;text-decoration:underline;} #adminpage td .icon{float:left;} #adminpage .selectall{text-align:right;} @@ -513,7 +514,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le footer{display:block;clear:both;} #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:#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;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index 176f3ba6a..51ffbd1f2 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -281,10 +281,30 @@ h6 { .box(100%, 100%); margin: 0 auto; } +.button, +#profile-listing-desc { + .box(25%, auto); + background: @menu_bg_colour; + color: @bg_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: @bg_colour; + font-size: smaller; + font-weight: bold; + } +} [class$="-desc"], [id$="-desc"] { color: @bg_colour; - background: @dk_bg_colour; + // background: @main_colour; + .borders(1px, outset, @bg_colour); .rounded_corners; // .box_shadow(3px, 3px, 5px); margin: 3px 10px 7px 0; @@ -1288,7 +1308,7 @@ nav #nav-notifications-linkmenu { } .wall-item-info { float: left; - width: 110px; + width: 8em; } .wall-item-photo-wrapper { .box(80px, 80px); @@ -1353,16 +1373,21 @@ nav #nav-notifications-linkmenu { } } .wall-item-author, -.wall-item-actions-author { +.wall-item-actions-author, +.wall-item-ago { clear: left; float: left; - font-size: 0.8em; - color: lighten(@menu_bg_colour, 20%); - margin: 1em auto 0 0.2em; + color: @bg_colour; + line-height: 1; + display: inline-block; + font-size: 0.75em; + margin: 0.5em auto 0; } -.wall-item-ago { - display: inline; - padding-left: 10px; +.wall-item-author, +.wall-item-actions-author { + margin: 0.5em auto 0; + font-size: 0.75em; + font-weight: bold; } .wall-item-location { margin-top: 15px; @@ -1372,7 +1397,8 @@ nav #nav-notifications-linkmenu { .icon { float: left; } - > a, .smalltext { + > a, + .smalltext { margin-left: 25px; font-size: 0.7em; display: block; @@ -1406,7 +1432,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,7 +1445,7 @@ nav #nav-notifications-linkmenu { li a { white-space: nowrap; display: block; - padding: 5px 2px; + padding: 5px 6px; color: @bg_colour; &:hover { color: @menu_bg_colour; @@ -1447,6 +1474,9 @@ 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-photo { @@ -1461,9 +1491,6 @@ nav #nav-notifications-linkmenu { top: 45px; background-position: 35px center; } - .wall-item-info { - width: 60px; - } .wall-item-body { margin-left: 10px; } @@ -2456,13 +2483,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 { @@ -2585,7 +2612,8 @@ div { background-color: @link_colour; color: @bg_colour; } -.grey, .gray { +.grey, +.gray { color: gray; } .orange { @@ -2939,6 +2967,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/nav.tpl b/view/theme/dispy/nav.tpl index af91d101f..21343aea5 100644 --- a/view/theme/dispy/nav.tpl +++ b/view/theme/dispy/nav.tpl @@ -50,7 +50,7 @@
- $sitelocation + $sitelocation
    @@ -90,7 +90,9 @@ {{ if $userinfo }} {{ endif }} @@ -121,8 +123,7 @@ $langselector
@@ -133,6 +134,8 @@ $langselector 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 @@
-
{{ if $item.location }}$item.location {{ endif }}
+
+ {{ if $item.location }}$item.location {{ endif }} +
+ +
+ $item.ago +
@@ -67,10 +75,6 @@
-
- $item.name -
$item.ago
-
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 @@
-
{{ if $item.location }}$item.location {{ endif }}
+
+ {{ if $item.location }}$item.location {{ endif }} +
+ +
+ $item.ago +
@@ -73,10 +81,6 @@ class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick
-
- $item.name -
$item.ago
-
From 2d6c6255f9a9c2f21c1e48105ce36b0f8c3418cc Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Wed, 16 May 2012 05:29:34 -0400 Subject: [PATCH 022/164] Merge branch 'master', remote-tracking branch 'remotes/upstream/master' * remotes/upstream/master: * master: From 7eb73bc600a17e7611d3c77ef777bf81becfb0b5 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Wed, 16 May 2012 05:32:08 -0400 Subject: [PATCH 023/164] get rid of the monstrosity for .button. need to find alternate solution Signed-off-by: Simon L'nu --- view/theme/dispy/dark/style.css | 4 ++-- view/theme/dispy/dark/style.less | 15 +++++++++------ view/theme/dispy/light/style.css | 4 ++-- view/theme/dispy/light/style.less | 12 ++++++------ 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index 60e7db6e1..229fcbbdf 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -55,8 +55,8 @@ h6{font-size:xx-small;} .action{margin:5px 0;} .tool{margin:5px 0;list-style:none;} #articlemain{width:100%;height:100%;margin:0 auto;} -.button,#profile-listing-desc{width:25%;height:auto;background:#555753;color:#eeeecc;border:2px outset #222321;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding:5px;font-size:smaller;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} -.button a,#profile-listing-desc a{color:#eeeecc;font-size:smaller;font-weight:bold;} +.button,#profile-listing-desc{color:#eeeecc;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} +.button a,#profile-listing-desc a{color:#eeeecc;font-weight:bold;} [class$="-desc"],[id$="-desc"]{color:#2e2f2e;border:1px outset #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;} #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;} diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less index 7634db1d7..fb8769a87 100644 --- a/view/theme/dispy/dark/style.less +++ b/view/theme/dispy/dark/style.less @@ -282,20 +282,20 @@ h6 { } .button, #profile-listing-desc { - .box(25%, auto); - background: @menu_bg_colour; + // .box(25%, auto); + // background: @menu_bg_colour; color: @main_colour; - .borders(2px, outset, darken(@menu_bg_colour, 20%)); - .rounded_corners; + // .borders(2px, outset, darken(@menu_bg_colour, 20%)); + // .rounded_corners; padding: 5px; - font-size: smaller; + // font-size: smaller; cursor: pointer; &.active { .box_shadow(4px, 4px, 7px); } a { color: @main_colour; - font-size: smaller; + // font-size: smaller; font-weight: bold; } } @@ -568,6 +568,9 @@ div.jGrowl div { padding-left: 58px; margin-top: 50px; } + // &.jGrowl-message { + + // } } #nav-notifications-menu { margin: 30px 0 0 -20px; diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css index e89ee7d24..3b1c6fd71 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -55,8 +55,8 @@ h6{font-size:xx-small;} .action{margin:5px 0;} .tool{margin:5px 0;list-style:none;} #articlemain{width:100%;height:100%;margin:0 auto;} -.button,#profile-listing-desc{width:25%;height:auto;background:#555753;color:#eeeeec;border:2px outset #222321;-o-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px;padding:5px;font-size:smaller;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} -.button a,#profile-listing-desc a{color:#eeeeec;font-size:smaller;font-weight:bold;} +.button,#profile-listing-desc{color:#eeeeec;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} +.button a,#profile-listing-desc a{color:#eeeeec;font-weight:bold;} [class$="-desc"],[id$="-desc"]{color:#eeeeec;border:1px outset #eeeeec;-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;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index 51ffbd1f2..399578ba7 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -283,20 +283,20 @@ h6 { } .button, #profile-listing-desc { - .box(25%, auto); - background: @menu_bg_colour; + // .box(25%, auto); + // background: @menu_bg_colour; color: @bg_colour; - .borders(2px, outset, darken(@menu_bg_colour, 20%)); - .rounded_corners; + // .borders(2px, outset, darken(@menu_bg_colour, 20%)); + // .rounded_corners; padding: 5px; - font-size: smaller; + // font-size: smaller; cursor: pointer; &.active { .box_shadow(4px, 4px, 7px); } a { color: @bg_colour; - font-size: smaller; + // font-size: smaller; font-weight: bold; } } From a8a3732f05f9651ddedd779c2c0080de0034751d Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Wed, 16 May 2012 05:51:29 -0400 Subject: [PATCH 024/164] *sigh*. fix dark *again* Signed-off-by: Simon L'nu --- view/theme/dispy/dark/style.css | 2 +- view/theme/dispy/dark/style.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index 229fcbbdf..114769727 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -395,7 +395,7 @@ div[id$="wrapper"]{height:100%;margin-bottom:1em;}div[id$="wrapper"] br{clear:le #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:#2e3436;border:1px solid #638ec4;padding:3px;} +.sidebar-group-element{padding:3px;}.sidebar-group-element:hover{color:#eeeecc;background:#2e3436;border:1px solid #638ec4;padding:3px;} #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{} diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less index fb8769a87..f2714b717 100644 --- a/view/theme/dispy/dark/style.less +++ b/view/theme/dispy/dark/style.less @@ -2352,7 +2352,7 @@ div { .sidebar-group-element { padding: 3px; &:hover { - color: @bg_colour; + color: @main_colour; background: @shiny_colour; .borders(1px, solid, @hover_colour); padding: 3px; From d6add82b321a0f6c23189627f825b47768e4ed94 Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 16 May 2012 05:08:15 -0700 Subject: [PATCH 025/164] merged from wrong project --- README.md | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 494bd0742..000000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -dir -=== - -Friendica Global Directory \ No newline at end of file From 331013f28195a35811a96b0346682fd2fe6cc102 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Wed, 16 May 2012 13:33:20 -0400 Subject: [PATCH 026/164] fix admin links... Signed-off-by: Simon L'nu --- view/theme/dispy/light/style.css | 2 +- view/theme/dispy/light/style.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css index 3b1c6fd71..f6336c55b 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -55,7 +55,7 @@ h6{font-size:xx-small;} .action{margin:5px 0;} .tool{margin:5px 0;list-style:none;} #articlemain{width:100%;height:100%;margin:0 auto;} -.button,#profile-listing-desc{color:#eeeeec;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} +.button,#profile-listing-desc{color:#111111;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} .button a,#profile-listing-desc a{color:#eeeeec;font-weight:bold;} [class$="-desc"],[id$="-desc"]{color:#eeeeec;border:1px outset #eeeeec;-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;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index 399578ba7..d2f72520f 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -285,7 +285,7 @@ h6 { #profile-listing-desc { // .box(25%, auto); // background: @menu_bg_colour; - color: @bg_colour; + color: @main_colour; // .borders(2px, outset, darken(@menu_bg_colour, 20%)); // .rounded_corners; padding: 5px; From 6744b5975c054563426d6b43a8a8b68c8684d83c Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 16 May 2012 13:52:11 -0700 Subject: [PATCH 027/164] rev update --- boot.php | 2 +- util/messages.po | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index f9bfa7551..abf335aa0 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1343' ); +define ( 'FRIENDICA_VERSION', '3.0.1344' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1143 ); diff --git a/util/messages.po b/util/messages.po index ba718cdd8..eccf53ae6 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1343\n" +"Project-Id-Version: 3.0.1344\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-15 10:00-0700\n" +"POT-Creation-Date: 2012-05-16 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 4f0e26759c2cc6cc08adc2bd94e85e4821194f2b Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 16 May 2012 21:29:57 -0700 Subject: [PATCH 028/164] bring in the *much better* xml parser from the original zot branch --- include/network.php | 164 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) 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 '' + $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 '' + //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 '' + $current = &$parent[$level-1]; + } + } + + return($xml_array); +} From d5d853f37f5b42d4b78f823ed0fb154064ee0e70 Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 17 May 2012 19:35:24 -0700 Subject: [PATCH 029/164] setup delivery chain for private groups (work in progress) --- boot.php | 2 +- include/items.php | 45 +++++++++++++++++++++++++-------------------- util/messages.po | 4 ++-- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/boot.php b/boot.php index abf335aa0..4032f2662 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1344' ); +define ( 'FRIENDICA_VERSION', '3.0.1345' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1143 ); diff --git a/include/items.php b/include/items.php index 129499967..51e21d289 100644 --- a/include/items.php +++ b/include/items.php @@ -959,6 +959,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), @@ -986,30 +988,33 @@ function tag_deliver($uid,$item_id) { } } - if(! $mention) + if((! $mention) && (! $prvgroup)) return; - // send a notification + if($mention) { - require_once('include/enotify.php'); - notification(array( - 'type' => NOTIFY_TAGSELF, - 'notify_flags' => $u[0]['notify-flags'], - 'language' => $u[0]['language'], - 'to_name' => $u[0]['username'], - 'to_email' => $u[0]['email'], - 'uid' => $u[0]['uid'], - 'item' => $item, - 'link' => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item['id'], - 'source_name' => $item['author-name'], - 'source_link' => $item['author-link'], - 'source_photo' => $item['author-avatar'], - 'verb' => ACTIVITY_TAG, - 'otype' => 'item' - )); + // send a notification - if(! $community_page) - return; + require_once('include/enotify.php'); + notification(array( + 'type' => NOTIFY_TAGSELF, + 'notify_flags' => $u[0]['notify-flags'], + 'language' => $u[0]['language'], + 'to_name' => $u[0]['username'], + 'to_email' => $u[0]['email'], + 'uid' => $u[0]['uid'], + 'item' => $item, + 'link' => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item['id'], + 'source_name' => $item['author-name'], + 'source_link' => $item['author-link'], + 'source_photo' => $item['author-avatar'], + 'verb' => ACTIVITY_TAG, + 'otype' => 'item' + )); + + if(! $community_page) + return; + } // tgroup delivery - setup a second delivery chain // prevent delivery looping - only proceed diff --git a/util/messages.po b/util/messages.po index eccf53ae6..51da2038f 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1344\n" +"Project-Id-Version: 3.0.1345\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-16 10:00-0700\n" +"POT-Creation-Date: 2012-05-17 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 7cfa7a7671f0bf8316bc63912452e156fc48129e Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 17 May 2012 19:59:46 -0700 Subject: [PATCH 030/164] tell browser not to cache permission denied (private) photos so that after authenticating we don't have to fight the browser - plus more prvgroup work --- include/items.php | 6 +++--- mod/photo.php | 21 +++++++++++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/include/items.php b/include/items.php index 51e21d289..ac7580cc1 100644 --- a/include/items.php +++ b/include/items.php @@ -2199,7 +2199,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'); @@ -2226,8 +2226,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. 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 From c024c17b5f7253432e9c53aa642f003b537f6b6b Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Thu, 17 May 2012 23:01:46 -0400 Subject: [PATCH 031/164] Merge branch 'master', remote-tracking branch 'remotes/upstream/master' * remotes/upstream/master: setup delivery chain for private groups (work in progress) bring in the *much better* xml parser from the original zot branch rev update merged from wrong project initial commit * master: From 7b0ded3f1478553e1fe93c95c272b99d78f0132b Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 17 May 2012 22:44:52 -0700 Subject: [PATCH 032/164] more private forums, default privacy group for new contacts --- boot.php | 2 +- database.sql | 1 + include/diaspora.php | 8 ++++++ include/group.php | 28 +++++++++++++++++++-- include/items.php | 53 +++++++++++++++++++++++----------------- include/notifier.php | 8 +++--- mod/dfrn_request.php | 8 ++++++ mod/follow.php | 10 ++++++++ mod/settings.php | 22 +++++++++++++++-- update.php | 9 ++++++- view/group_selection.tpl | 5 ++++ view/pagetypes.tpl | 3 +++ view/settings.tpl | 6 +++++ 13 files changed, 130 insertions(+), 33 deletions(-) create mode 100644 view/group_selection.tpl diff --git a/boot.php b/boot.php index 4032f2662..95f296d41 100644 --- a/boot.php +++ b/boot.php @@ -11,7 +11,7 @@ require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '3.0.1345' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1143 ); +define ( 'DB_UPDATE_VERSION', 1144 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index cf086796a..ed97cd4aa 100644 --- a/database.sql +++ b/database.sql @@ -1028,6 +1028,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/include/diaspora.php b/include/diaspora.php index 2051de5fc..3f2cdf8e4 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -569,6 +569,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 diff --git a/include/group.php b/include/group.php index edb547de6..cc6540b31 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,29 @@ 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('$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 ac7580cc1..91c9056fe 100644 --- a/include/items.php +++ b/include/items.php @@ -988,33 +988,31 @@ function tag_deliver($uid,$item_id) { } } - if((! $mention) && (! $prvgroup)) + if(! $mention) return; - if($mention) { + // send a notification - // send a notification + require_once('include/enotify.php'); + notification(array( + 'type' => NOTIFY_TAGSELF, + 'notify_flags' => $u[0]['notify-flags'], + 'language' => $u[0]['language'], + 'to_name' => $u[0]['username'], + 'to_email' => $u[0]['email'], + 'uid' => $u[0]['uid'], + 'item' => $item, + 'link' => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item['id'], + 'source_name' => $item['author-name'], + 'source_link' => $item['author-link'], + 'source_photo' => $item['author-avatar'], + 'verb' => ACTIVITY_TAG, + 'otype' => 'item' + )); - require_once('include/enotify.php'); - notification(array( - 'type' => NOTIFY_TAGSELF, - 'notify_flags' => $u[0]['notify-flags'], - 'language' => $u[0]['language'], - 'to_name' => $u[0]['username'], - 'to_email' => $u[0]['email'], - 'uid' => $u[0]['uid'], - 'item' => $item, - 'link' => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item['id'], - 'source_name' => $item['author-name'], - 'source_link' => $item['author-link'], - 'source_photo' => $item['author-avatar'], - 'verb' => ACTIVITY_TAG, - 'otype' => 'item' - )); + if((! $community_page) && (! prvgroup)) + return; - if(! $community_page) - return; - } // tgroup delivery - setup a second delivery chain // prevent delivery looping - only proceed @@ -1036,8 +1034,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']), @@ -2716,6 +2717,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( diff --git a/include/notifier.php b/include/notifier.php index 6ce281372..ea4a1bea8 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -220,7 +220,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 +265,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); } diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php index 2169c494c..b809929d7 100644 --- a/mod/dfrn_request.php +++ b/mod/dfrn_request.php @@ -370,6 +370,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 diff --git a/mod/follow.php b/mod/follow.php index 4a7f99bf0..cdecd5f2a 100644 --- a/mod/follow.php +++ b/mod/follow.php @@ -109,6 +109,7 @@ function follow_init(&$a) { dbesc($ret['poll']) ); + if(count($r)) { // update contact if($r[0]['rel'] == CONTACT_IS_FOLLOWER || ($network === NETWORK_DIASPORA && $r[0]['rel'] == CONTACT_IS_SHARING)) { @@ -165,6 +166,15 @@ function follow_init(&$a) { $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); diff --git a/mod/settings.php b/mod/settings.php index 5f5b2ab2e..23dde3f2a 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -330,6 +330,7 @@ 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); @@ -355,6 +356,9 @@ function settings_post(&$a) { $post_joingroup = (($_POST['post_joingroup'] == 1) ? 1: 0); $post_profilechange = (($_POST['post_profilechange'] == 1) ? 1: 0); + if($page_flags == PAGE_PRVGROUP) { + $hidewall = 1; + } $notify = 0; @@ -441,7 +445,7 @@ 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", + $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 +461,7 @@ function settings_post(&$a) { intval($maxreq), intval($expire), dbesc($openidserver), + intval($def_gid), intval($blockwall), intval($hidewall), intval($blocktags), @@ -833,6 +838,13 @@ function settings_content(&$a) { '$page_freelove' => array('page-flags', t('Automatic Friend Account'), 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'), PAGE_PRVGROUP, + t('Private forum - approved members only [Experimental]'), + ($a->user['page-flags'] == PAGE_PRVGROUP)), + + '$experimental' => ( (intval(get_config('system','prvgroup_testing'))) ? 'true' : ''), + )); $noid = get_config('system','no_openid'); @@ -934,6 +946,9 @@ function settings_content(&$a) { 'photos' => array('expire_photos', t("Expire photos:"), $expire_photos, '', 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 +956,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 +982,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_lbl_select' => t('Default privacy group for new contacts'), + '$group_select' => $group_select, + + '$expire' => $expire_arr, '$profile_in_dir' => $profile_in_dir, diff --git a/update.php b/update.php index e363aa942..f25d16f9d 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ +{{ for $groups as $group }} + +{{ endfor }} + diff --git a/view/pagetypes.tpl b/view/pagetypes.tpl index d9f873ea0..924fc47ac 100644 --- a/view/pagetypes.tpl +++ b/view/pagetypes.tpl @@ -2,3 +2,6 @@ {{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_freelove }}{{endinc}} + {{ if $experimental }} + {{inc field_radio.tpl with $field=$page_prvgroup }}{{endinc}} + {{ endif }} \ No newline at end of file diff --git a/view/settings.tpl b/view/settings.tpl index cec3c6f64..e25d67463 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}} + +
$expire.label
@@ -90,6 +93,9 @@ $unkmail
+ +$group_select +
From 1d157fc747232a158209367e2ebaeadc3f3a56ec Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 17 May 2012 23:05:41 -0700 Subject: [PATCH 033/164] make it difficult to setup a private forum with no privacy --- mod/settings.php | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/mod/settings.php b/mod/settings.php index 23dde3f2a..8c7b1c49c 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -356,10 +356,6 @@ function settings_post(&$a) { $post_joingroup = (($_POST['post_joingroup'] == 1) ? 1: 0); $post_profilechange = (($_POST['post_profilechange'] == 1) ? 1: 0); - if($page_flags == PAGE_PRVGROUP) { - $hidewall = 1; - } - $notify = 0; if(x($_POST,'notify1')) @@ -445,6 +441,19 @@ function settings_post(&$a) { set_pconfig(local_user(),'system','post_profilechange', $post_profilechange); + 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), From 5ecaeb8e5c9fb01ee768df2a650d2187d971b105 Mon Sep 17 00:00:00 2001 From: friendica Date: Fri, 18 May 2012 01:03:46 -0700 Subject: [PATCH 034/164] catch more places to apply default group --- mod/dfrn_confirm.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 2b25095fd..227d72cbf 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -500,6 +500,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[0]['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. From 34b79b4f2b8b9a563717ca60bc55ff868c29df1a Mon Sep 17 00:00:00 2001 From: friendica Date: Fri, 18 May 2012 01:38:11 -0700 Subject: [PATCH 035/164] theming for default group selector --- include/group.php | 5 ++++- mod/settings.php | 2 +- view/group_selection.tpl | 5 ++++- view/settings.tpl | 1 - 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/group.php b/include/group.php index cc6540b31..854ac06a9 100644 --- a/include/group.php +++ b/include/group.php @@ -172,7 +172,10 @@ function mini_group_select($uid,$gid = 0) { } logger('groups: ' . print_r($grps,true)); - $o = replace_macros(get_markup_template('group_selection.tpl'), array('$groups' => $grps )); + $o = replace_macros(get_markup_template('group_selection.tpl'), array( + '$label' => t('Default privacy group for new contacts'), + '$groups' => $grps + )); return $o; } diff --git a/mod/settings.php b/mod/settings.php index 8c7b1c49c..40fa55eea 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -991,7 +991,7 @@ 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_lbl_select' => t('Default privacy group for new contacts'), + '$group_select' => $group_select, diff --git a/view/group_selection.tpl b/view/group_selection.tpl index d09ba676d..3809cb994 100644 --- a/view/group_selection.tpl +++ b/view/group_selection.tpl @@ -1,5 +1,8 @@ - {{ for $groups as $group }} {{ endfor }} +
diff --git a/view/settings.tpl b/view/settings.tpl index e25d67463..556cd3ba3 100644 --- a/view/settings.tpl +++ b/view/settings.tpl @@ -93,7 +93,6 @@ $unkmail
- $group_select From 38217444502aee41d71d90c0c8927999bb1b12e6 Mon Sep 17 00:00:00 2001 From: friendica Date: Fri, 18 May 2012 01:46:02 -0700 Subject: [PATCH 036/164] apply max-width to images in posts, duepuntozero --- view/theme/duepuntozero/style.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index b978c13e5..826acc7ef 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -1091,6 +1091,11 @@ input#dfrn-url { overflow: auto; } +.wall-item-content img { + max-width: 700px; +} + + .wall-item-title { float: left; font-weight: bold; From 4133df62234cc3466f34b8a7d52147a1e422bbc0 Mon Sep 17 00:00:00 2001 From: friendica Date: Fri, 18 May 2012 17:55:11 -0700 Subject: [PATCH 037/164] profile change activity link bug --- boot.php | 2 +- mod/profiles.php | 2 +- util/messages.po | 508 ++++++++++++++++++++++++----------------------- 3 files changed, 266 insertions(+), 246 deletions(-) diff --git a/boot.php b/boot.php index 95f296d41..7174b6822 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1345' ); +define ( 'FRIENDICA_VERSION', '3.0.1346' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1144 ); diff --git a/mod/profiles.php b/mod/profiles.php index c72a233c2..26fc88765 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -329,7 +329,7 @@ function profile_activity($changed, $value) { if($t == 1 && strlen($value)) { $message = sprintf( t('%1$s changed %2$s to “%3$s”'), $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); diff --git a/util/messages.po b/util/messages.po index 51da2038f..cf2f02d4e 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1345\n" +"Project-Id-Version: 3.0.1346\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-17 10:00-0700\n" +"POT-Creation-Date: 2012-05-18 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -39,8 +39,8 @@ msgstr "" #: ../../mod/api.php:31 ../../mod/photos.php:130 ../../mod/photos.php:865 #: ../../mod/editpost.php:10 ../../mod/install.php:171 #: ../../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:104 ../../mod/settings.php:535 +#: ../../mod/settings.php:540 ../../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 @@ -54,8 +54,8 @@ msgstr "" #: ../../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 +#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:503 +#: ../../include/items.php:3214 ../../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:555 +#: ../../mod/settings.php:581 ../../mod/admin.php:643 ../../mod/admin.php:652 msgid "Name" msgstr "" @@ -127,12 +127,12 @@ msgstr "" #: ../../mod/photos.php:1273 ../../mod/photos.php:1304 #: ../../mod/install.php:251 ../../mod/install.php:289 #: ../../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/settings.php:553 ../../mod/settings.php:699 +#: ../../mod/settings.php:760 ../../mod/settings.php:964 #: ../../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/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 @@ -279,8 +279,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:826 ../../mod/settings.php:554 +#: ../../mod/settings.php:580 ../../addon/js_upload/js_upload.php:45 msgid "Cancel" msgstr "" @@ -323,24 +323,24 @@ 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/api.php:105 ../../mod/dfrn_request.php:814 +#: ../../mod/settings.php:875 ../../mod/settings.php:881 +#: ../../mod/settings.php:889 ../../mod/settings.php:893 +#: ../../mod/settings.php:898 ../../mod/settings.php:904 +#: ../../mod/settings.php:910 ../../mod/settings.php:916 +#: ../../mod/settings.php:952 ../../mod/settings.php:953 +#: ../../mod/settings.php:954 ../../mod/settings.php:955 #: ../../mod/register.php:532 ../../mod/profiles.php:511 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/api.php:106 ../../mod/dfrn_request.php:815 +#: ../../mod/settings.php:875 ../../mod/settings.php:881 +#: ../../mod/settings.php:889 ../../mod/settings.php:893 +#: ../../mod/settings.php:898 ../../mod/settings.php:904 +#: ../../mod/settings.php:910 ../../mod/settings.php:916 +#: ../../mod/settings.php:952 ../../mod/settings.php:953 +#: ../../mod/settings.php:954 ../../mod/settings.php:955 #: ../../mod/register.php:533 ../../mod/profiles.php:512 msgid "No" msgstr "" @@ -398,7 +398,7 @@ msgstr "" #: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 #: ../../view/theme/diabook/theme.php:565 ../../include/text.php:1305 -#: ../../include/diaspora.php:1654 ../../include/conversation.php:53 +#: ../../include/diaspora.php:1662 ../../include/conversation.php:53 #: ../../include/conversation.php:126 msgid "photo" msgstr "" @@ -426,7 +426,7 @@ msgid "Image upload failed." msgstr "" #: ../../mod/photos.php:759 ../../mod/community.php:16 -#: ../../mod/dfrn_request.php:732 ../../mod/viewcontacts.php:17 +#: ../../mod/dfrn_request.php:740 ../../mod/viewcontacts.php:17 #: ../../mod/display.php:7 ../../mod/search.php:71 ../../mod/directory.php:29 msgid "Public access denied." msgstr "" @@ -554,8 +554,8 @@ msgstr "" msgid "Preview" msgstr "" -#: ../../mod/photos.php:1331 ../../mod/settings.php:602 -#: ../../mod/settings.php:683 ../../mod/group.php:168 ../../mod/admin.php:647 +#: ../../mod/photos.php:1331 ../../mod/settings.php:616 +#: ../../mod/settings.php:697 ../../mod/group.php:168 ../../mod/admin.php:647 #: ../../include/conversation.php:321 ../../include/conversation.php:587 msgid "Delete" msgstr "" @@ -625,7 +625,7 @@ msgstr "" msgid "Post to Email" msgstr "" -#: ../../mod/editpost.php:95 ../../mod/settings.php:601 +#: ../../mod/editpost.php:95 ../../mod/settings.php:615 #: ../../include/conversation.php:574 msgid "Edit" msgstr "" @@ -694,19 +694,19 @@ msgstr "" msgid "This introduction has already been accepted." msgstr "" -#: ../../mod/dfrn_request.php:117 ../../mod/dfrn_request.php:487 +#: ../../mod/dfrn_request.php:117 ../../mod/dfrn_request.php:495 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:122 ../../mod/dfrn_request.php:500 msgid "Warning: profile location has no identifiable owner name." msgstr "" -#: ../../mod/dfrn_request.php:124 ../../mod/dfrn_request.php:494 +#: ../../mod/dfrn_request.php:124 ../../mod/dfrn_request.php:502 msgid "Warning: profile location has no profile photo." msgstr "" -#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:497 +#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:505 #, 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" @@ -750,128 +750,128 @@ msgstr "" msgid "This account has not been configured for email. Request failed." msgstr "" -#: ../../mod/dfrn_request.php:432 +#: ../../mod/dfrn_request.php:440 msgid "Unable to resolve your name at the provided location." msgstr "" -#: ../../mod/dfrn_request.php:445 +#: ../../mod/dfrn_request.php:453 msgid "You have already introduced yourself here." msgstr "" -#: ../../mod/dfrn_request.php:449 +#: ../../mod/dfrn_request.php:457 #, php-format msgid "Apparently you are already friends with %s." msgstr "" -#: ../../mod/dfrn_request.php:470 +#: ../../mod/dfrn_request.php:478 msgid "Invalid profile URL." msgstr "" -#: ../../mod/dfrn_request.php:476 ../../mod/follow.php:23 +#: ../../mod/dfrn_request.php:484 ../../mod/follow.php:23 msgid "Disallowed profile URL." msgstr "" -#: ../../mod/dfrn_request.php:545 ../../mod/contacts.php:102 +#: ../../mod/dfrn_request.php:553 ../../mod/contacts.php:102 msgid "Failed to update contact record." msgstr "" -#: ../../mod/dfrn_request.php:566 +#: ../../mod/dfrn_request.php:574 msgid "Your introduction has been sent." msgstr "" -#: ../../mod/dfrn_request.php:619 +#: ../../mod/dfrn_request.php:627 msgid "Please login to confirm introduction." msgstr "" -#: ../../mod/dfrn_request.php:633 +#: ../../mod/dfrn_request.php:641 msgid "" "Incorrect identity currently logged in. Please login to this profile." msgstr "" -#: ../../mod/dfrn_request.php:645 +#: ../../mod/dfrn_request.php:653 #, php-format msgid "Welcome home %s." msgstr "" -#: ../../mod/dfrn_request.php:646 +#: ../../mod/dfrn_request.php:654 #, php-format msgid "Please confirm your introduction/connection request to %s." msgstr "" -#: ../../mod/dfrn_request.php:647 +#: ../../mod/dfrn_request.php:655 msgid "Confirm" msgstr "" -#: ../../mod/dfrn_request.php:688 ../../include/items.php:2717 +#: ../../mod/dfrn_request.php:696 ../../include/items.php:2729 msgid "[Name Withheld]" msgstr "" -#: ../../mod/dfrn_request.php:781 +#: ../../mod/dfrn_request.php:789 msgid "" "Please enter your 'Identity Address' from one of the following supported " "communications networks:" msgstr "" -#: ../../mod/dfrn_request.php:797 +#: ../../mod/dfrn_request.php:805 msgid "Connect as an email follower (Coming soon)" msgstr "" -#: ../../mod/dfrn_request.php:799 +#: ../../mod/dfrn_request.php:807 msgid "" "If you are not yet a member of the free social web, follow this link to find a public Friendica site " "and join us today." msgstr "" -#: ../../mod/dfrn_request.php:802 +#: ../../mod/dfrn_request.php:810 msgid "Friend/Connection Request" msgstr "" -#: ../../mod/dfrn_request.php:803 +#: ../../mod/dfrn_request.php:811 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:812 msgid "Please answer the following:" msgstr "" -#: ../../mod/dfrn_request.php:805 +#: ../../mod/dfrn_request.php:813 #, php-format msgid "Does %s know you?" msgstr "" -#: ../../mod/dfrn_request.php:808 +#: ../../mod/dfrn_request.php:816 msgid "Add a personal note:" msgstr "" -#: ../../mod/dfrn_request.php:810 ../../include/contact_selectors.php:76 +#: ../../mod/dfrn_request.php:818 ../../include/contact_selectors.php:76 msgid "Friendica" msgstr "" -#: ../../mod/dfrn_request.php:811 +#: ../../mod/dfrn_request.php:819 msgid "StatusNet/Federated Social Web" msgstr "" -#: ../../mod/dfrn_request.php:812 ../../mod/settings.php:636 +#: ../../mod/dfrn_request.php:820 ../../mod/settings.php:650 #: ../../include/contact_selectors.php:80 msgid "Diaspora" msgstr "" -#: ../../mod/dfrn_request.php:813 +#: ../../mod/dfrn_request.php:821 #, 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:822 msgid "Your Identity Address:" msgstr "" -#: ../../mod/dfrn_request.php:817 +#: ../../mod/dfrn_request.php:825 msgid "Submit Request" msgstr "" @@ -1688,10 +1688,10 @@ 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 +#: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:752 +#: ../../addon/facebook/facebook.php:688 +#: ../../addon/facebook/facebook.php:1178 +#: ../../addon/testdrive/testdrive.php:58 ../../include/items.php:2738 #: ../../boot.php:696 msgid "Administrator" msgstr "" @@ -1784,7 +1784,7 @@ msgstr "" msgid "Missing some important data!" msgstr "" -#: ../../mod/settings.php:134 ../../mod/settings.php:565 +#: ../../mod/settings.php:134 ../../mod/settings.php:579 msgid "Update" msgstr "" @@ -1828,7 +1828,15 @@ msgstr "" msgid " Cannot change to that email." msgstr "" -#: ../../mod/settings.php:468 ../../addon/facebook/facebook.php:480 +#: ../../mod/settings.php:448 +msgid "Private forum has no privacy permissions. Using default privacy group." +msgstr "" + +#: ../../mod/settings.php:452 +msgid "Private forum has no privacy permissions and no default privacy group." +msgstr "" + +#: ../../mod/settings.php:482 ../../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 @@ -1836,409 +1844,417 @@ msgstr "" msgid "Settings updated." msgstr "" -#: ../../mod/settings.php:538 ../../mod/settings.php:564 -#: ../../mod/settings.php:600 +#: ../../mod/settings.php:552 ../../mod/settings.php:578 +#: ../../mod/settings.php:614 msgid "Add application" msgstr "" -#: ../../mod/settings.php:542 ../../mod/settings.php:568 +#: ../../mod/settings.php:556 ../../mod/settings.php:582 #: ../../addon/statusnet/statusnet.php:555 msgid "Consumer Key" msgstr "" -#: ../../mod/settings.php:543 ../../mod/settings.php:569 +#: ../../mod/settings.php:557 ../../mod/settings.php:583 #: ../../addon/statusnet/statusnet.php:554 msgid "Consumer Secret" msgstr "" -#: ../../mod/settings.php:544 ../../mod/settings.php:570 +#: ../../mod/settings.php:558 ../../mod/settings.php:584 msgid "Redirect" msgstr "" -#: ../../mod/settings.php:545 ../../mod/settings.php:571 +#: ../../mod/settings.php:559 ../../mod/settings.php:585 msgid "Icon url" msgstr "" -#: ../../mod/settings.php:556 +#: ../../mod/settings.php:570 msgid "You can't edit this application." msgstr "" -#: ../../mod/settings.php:599 +#: ../../mod/settings.php:613 msgid "Connected Apps" msgstr "" -#: ../../mod/settings.php:603 +#: ../../mod/settings.php:617 msgid "Client key starts with" msgstr "" -#: ../../mod/settings.php:604 +#: ../../mod/settings.php:618 msgid "No name" msgstr "" -#: ../../mod/settings.php:605 +#: ../../mod/settings.php:619 msgid "Remove authorization" msgstr "" -#: ../../mod/settings.php:616 +#: ../../mod/settings.php:630 msgid "No Plugin settings configured" msgstr "" -#: ../../mod/settings.php:624 ../../addon/widgets/widgets.php:123 +#: ../../mod/settings.php:638 ../../addon/widgets/widgets.php:123 msgid "Plugin Settings" msgstr "" -#: ../../mod/settings.php:636 ../../mod/settings.php:637 +#: ../../mod/settings.php:650 ../../mod/settings.php:651 #, php-format msgid "Built-in support for %s connectivity is %s" msgstr "" -#: ../../mod/settings.php:636 ../../mod/settings.php:637 +#: ../../mod/settings.php:650 ../../mod/settings.php:651 msgid "enabled" msgstr "" -#: ../../mod/settings.php:636 ../../mod/settings.php:637 +#: ../../mod/settings.php:650 ../../mod/settings.php:651 msgid "disabled" msgstr "" -#: ../../mod/settings.php:637 +#: ../../mod/settings.php:651 msgid "StatusNet" msgstr "" -#: ../../mod/settings.php:667 +#: ../../mod/settings.php:681 msgid "Connector Settings" msgstr "" -#: ../../mod/settings.php:672 +#: ../../mod/settings.php:686 msgid "Email/Mailbox Setup" msgstr "" -#: ../../mod/settings.php:673 +#: ../../mod/settings.php:687 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:688 msgid "Last successful email check:" msgstr "" -#: ../../mod/settings.php:675 +#: ../../mod/settings.php:689 msgid "Email access is disabled on this site." msgstr "" -#: ../../mod/settings.php:676 +#: ../../mod/settings.php:690 msgid "IMAP server name:" msgstr "" -#: ../../mod/settings.php:677 +#: ../../mod/settings.php:691 msgid "IMAP port:" msgstr "" -#: ../../mod/settings.php:678 +#: ../../mod/settings.php:692 msgid "Security:" msgstr "" -#: ../../mod/settings.php:678 ../../mod/settings.php:683 +#: ../../mod/settings.php:692 ../../mod/settings.php:697 msgid "None" msgstr "" -#: ../../mod/settings.php:679 +#: ../../mod/settings.php:693 msgid "Email login name:" msgstr "" -#: ../../mod/settings.php:680 +#: ../../mod/settings.php:694 msgid "Email password:" msgstr "" -#: ../../mod/settings.php:681 +#: ../../mod/settings.php:695 msgid "Reply-to address:" msgstr "" -#: ../../mod/settings.php:682 +#: ../../mod/settings.php:696 msgid "Send public posts to all email contacts:" msgstr "" -#: ../../mod/settings.php:683 +#: ../../mod/settings.php:697 msgid "Action after import:" msgstr "" -#: ../../mod/settings.php:683 +#: ../../mod/settings.php:697 msgid "Mark as seen" msgstr "" -#: ../../mod/settings.php:683 +#: ../../mod/settings.php:697 msgid "Move to folder" msgstr "" -#: ../../mod/settings.php:684 +#: ../../mod/settings.php:698 msgid "Move to folder:" msgstr "" -#: ../../mod/settings.php:744 +#: ../../mod/settings.php:758 msgid "Display Settings" msgstr "" -#: ../../mod/settings.php:750 +#: ../../mod/settings.php:764 msgid "Display Theme:" msgstr "" -#: ../../mod/settings.php:751 +#: ../../mod/settings.php:765 msgid "Update browser every xx seconds" msgstr "" -#: ../../mod/settings.php:751 +#: ../../mod/settings.php:765 msgid "Minimum of 10 seconds, no maximum" msgstr "" -#: ../../mod/settings.php:752 +#: ../../mod/settings.php:766 msgid "Number of items to display on the network page:" msgstr "" -#: ../../mod/settings.php:752 +#: ../../mod/settings.php:766 msgid "Maximum of 100 items" msgstr "" -#: ../../mod/settings.php:753 +#: ../../mod/settings.php:767 msgid "Don't show emoticons" msgstr "" -#: ../../mod/settings.php:821 ../../mod/admin.php:180 ../../mod/admin.php:621 +#: ../../mod/settings.php:835 ../../mod/admin.php:180 ../../mod/admin.php:621 msgid "Normal Account" msgstr "" -#: ../../mod/settings.php:822 +#: ../../mod/settings.php:836 msgid "This account is a normal personal profile" msgstr "" -#: ../../mod/settings.php:825 ../../mod/admin.php:181 ../../mod/admin.php:622 +#: ../../mod/settings.php:839 ../../mod/admin.php:181 ../../mod/admin.php:622 msgid "Soapbox Account" msgstr "" -#: ../../mod/settings.php:826 +#: ../../mod/settings.php:840 msgid "Automatically approve all connection/friend requests as read-only fans" msgstr "" -#: ../../mod/settings.php:829 ../../mod/admin.php:182 ../../mod/admin.php:623 +#: ../../mod/settings.php:843 ../../mod/admin.php:182 ../../mod/admin.php:623 msgid "Community/Celebrity Account" msgstr "" -#: ../../mod/settings.php:830 +#: ../../mod/settings.php:844 msgid "Automatically approve all connection/friend requests as read-write fans" msgstr "" -#: ../../mod/settings.php:833 ../../mod/admin.php:183 ../../mod/admin.php:624 +#: ../../mod/settings.php:847 ../../mod/admin.php:183 ../../mod/admin.php:624 msgid "Automatic Friend Account" msgstr "" -#: ../../mod/settings.php:834 +#: ../../mod/settings.php:848 msgid "Automatically approve all connection/friend requests as friends" msgstr "" -#: ../../mod/settings.php:844 +#: ../../mod/settings.php:851 +msgid "Private Forum" +msgstr "" + +#: ../../mod/settings.php:852 +msgid "Private forum - approved members only [Experimental]" +msgstr "" + +#: ../../mod/settings.php:865 msgid "OpenID:" msgstr "" -#: ../../mod/settings.php:844 +#: ../../mod/settings.php:865 msgid "(Optional) Allow this OpenID to login to this account." msgstr "" -#: ../../mod/settings.php:854 +#: ../../mod/settings.php:875 msgid "Publish your default profile in your local site directory?" msgstr "" -#: ../../mod/settings.php:860 +#: ../../mod/settings.php:881 msgid "Publish your default profile in the global social directory?" msgstr "" -#: ../../mod/settings.php:868 +#: ../../mod/settings.php:889 msgid "Hide your contact/friend list from viewers of your default profile?" msgstr "" -#: ../../mod/settings.php:872 +#: ../../mod/settings.php:893 msgid "Hide your profile details from unknown viewers?" msgstr "" -#: ../../mod/settings.php:877 +#: ../../mod/settings.php:898 msgid "Allow friends to post to your profile page?" msgstr "" -#: ../../mod/settings.php:883 +#: ../../mod/settings.php:904 msgid "Allow friends to tag your posts?" msgstr "" -#: ../../mod/settings.php:889 +#: ../../mod/settings.php:910 msgid "Allow us to suggest you as a potential friend to new members?" msgstr "" -#: ../../mod/settings.php:895 +#: ../../mod/settings.php:916 msgid "Permit unknown people to send you private mail?" msgstr "" -#: ../../mod/settings.php:906 +#: ../../mod/settings.php:927 msgid "Profile is not published." msgstr "" -#: ../../mod/settings.php:912 ../../mod/profile_photo.php:211 +#: ../../mod/settings.php:933 ../../mod/profile_photo.php:211 msgid "or" msgstr "" -#: ../../mod/settings.php:917 +#: ../../mod/settings.php:938 msgid "Your Identity Address is" msgstr "" -#: ../../mod/settings.php:928 +#: ../../mod/settings.php:949 msgid "Automatically expire posts after this many days:" msgstr "" -#: ../../mod/settings.php:928 +#: ../../mod/settings.php:949 msgid "If empty, posts will not expire. Expired posts will be deleted" msgstr "" -#: ../../mod/settings.php:929 +#: ../../mod/settings.php:950 msgid "Advanced expiration settings" msgstr "" -#: ../../mod/settings.php:930 +#: ../../mod/settings.php:951 msgid "Advanced Expiration" msgstr "" -#: ../../mod/settings.php:931 +#: ../../mod/settings.php:952 msgid "Expire posts:" msgstr "" -#: ../../mod/settings.php:932 +#: ../../mod/settings.php:953 msgid "Expire personal notes:" msgstr "" -#: ../../mod/settings.php:933 +#: ../../mod/settings.php:954 msgid "Expire starred posts:" msgstr "" -#: ../../mod/settings.php:934 +#: ../../mod/settings.php:955 msgid "Expire photos:" msgstr "" -#: ../../mod/settings.php:938 +#: ../../mod/settings.php:962 msgid "Account Settings" msgstr "" -#: ../../mod/settings.php:947 +#: ../../mod/settings.php:970 msgid "Password Settings" msgstr "" -#: ../../mod/settings.php:948 +#: ../../mod/settings.php:971 msgid "New Password:" msgstr "" -#: ../../mod/settings.php:949 +#: ../../mod/settings.php:972 msgid "Confirm:" msgstr "" -#: ../../mod/settings.php:949 +#: ../../mod/settings.php:972 msgid "Leave password fields blank unless changing" msgstr "" -#: ../../mod/settings.php:953 +#: ../../mod/settings.php:976 msgid "Basic Settings" msgstr "" -#: ../../mod/settings.php:954 ../../include/profile_advanced.php:15 +#: ../../mod/settings.php:977 ../../include/profile_advanced.php:15 msgid "Full Name:" msgstr "" -#: ../../mod/settings.php:955 +#: ../../mod/settings.php:978 msgid "Email Address:" msgstr "" -#: ../../mod/settings.php:956 +#: ../../mod/settings.php:979 msgid "Your Timezone:" msgstr "" -#: ../../mod/settings.php:957 +#: ../../mod/settings.php:980 msgid "Default Post Location:" msgstr "" -#: ../../mod/settings.php:958 +#: ../../mod/settings.php:981 msgid "Use Browser Location:" msgstr "" -#: ../../mod/settings.php:961 +#: ../../mod/settings.php:984 msgid "Security and Privacy Settings" msgstr "" -#: ../../mod/settings.php:963 +#: ../../mod/settings.php:986 msgid "Maximum Friend Requests/Day:" msgstr "" -#: ../../mod/settings.php:963 ../../mod/settings.php:978 +#: ../../mod/settings.php:986 ../../mod/settings.php:1005 msgid "(to prevent spam abuse)" msgstr "" -#: ../../mod/settings.php:964 +#: ../../mod/settings.php:987 msgid "Default Post Permissions" msgstr "" -#: ../../mod/settings.php:965 +#: ../../mod/settings.php:988 msgid "(click to open/close)" msgstr "" -#: ../../mod/settings.php:978 +#: ../../mod/settings.php:1005 msgid "Maximum private messages per day from unknown people:" msgstr "" -#: ../../mod/settings.php:981 +#: ../../mod/settings.php:1008 msgid "Notification Settings" msgstr "" -#: ../../mod/settings.php:982 +#: ../../mod/settings.php:1009 msgid "By default post a status message when:" msgstr "" -#: ../../mod/settings.php:983 +#: ../../mod/settings.php:1010 msgid "accepting a friend request" msgstr "" -#: ../../mod/settings.php:984 +#: ../../mod/settings.php:1011 msgid "joining a forum/community" msgstr "" -#: ../../mod/settings.php:985 +#: ../../mod/settings.php:1012 msgid "making an interesting profile change" msgstr "" -#: ../../mod/settings.php:986 +#: ../../mod/settings.php:1013 msgid "Send a notification email when:" msgstr "" -#: ../../mod/settings.php:987 +#: ../../mod/settings.php:1014 msgid "You receive an introduction" msgstr "" -#: ../../mod/settings.php:988 +#: ../../mod/settings.php:1015 msgid "Your introductions are confirmed" msgstr "" -#: ../../mod/settings.php:989 +#: ../../mod/settings.php:1016 msgid "Someone writes on your profile wall" msgstr "" -#: ../../mod/settings.php:990 +#: ../../mod/settings.php:1017 msgid "Someone writes a followup comment" msgstr "" -#: ../../mod/settings.php:991 +#: ../../mod/settings.php:1018 msgid "You receive a private message" msgstr "" -#: ../../mod/settings.php:992 +#: ../../mod/settings.php:1019 msgid "You receive a friend suggestion" msgstr "" -#: ../../mod/settings.php:993 +#: ../../mod/settings.php:1020 msgid "You are tagged in a post" msgstr "" -#: ../../mod/settings.php:996 +#: ../../mod/settings.php:1023 msgid "Advanced Page Settings" msgstr "" @@ -2268,7 +2284,7 @@ msgstr "" msgid "Saved Searches" msgstr "" -#: ../../mod/network.php:92 ../../include/group.php:217 +#: ../../mod/network.php:92 ../../include/group.php:244 msgid "add" msgstr "" @@ -2357,7 +2373,7 @@ msgid "Personal Notes" msgstr "" #: ../../mod/notes.php:63 ../../mod/filer.php:30 -#: ../../addon/facebook/facebook.php:748 +#: ../../addon/facebook/facebook.php:756 #: ../../addon/privacy_image_cache/privacy_image_cache.php:147 #: ../../include/text.php:652 msgid "Save" @@ -2784,19 +2800,19 @@ 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:560 -#: ../../view/theme/diabook/theme.php:569 ../../include/diaspora.php:1654 +#: ../../view/theme/diabook/theme.php:569 ../../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:574 ../../include/diaspora.php:1670 +#: ../../view/theme/diabook/theme.php:574 ../../include/diaspora.php:1678 #: ../../include/conversation.php:65 #, php-format msgid "%1$s likes %2$s's %3$s" @@ -2809,7 +2825,7 @@ 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/display.php:142 ../../include/items.php:3096 msgid "Item not found." msgstr "" @@ -3719,11 +3735,11 @@ msgid "" "notifications from you." msgstr "" -#: ../../mod/follow.php:160 +#: ../../mod/follow.php:161 msgid "Unable to retrieve contact information." msgstr "" -#: ../../mod/follow.php:206 +#: ../../mod/follow.php:216 msgid "following" msgstr "" @@ -4233,129 +4249,129 @@ msgstr "" msgid "%1$s is now friends with %2$s" msgstr "" -#: ../../mod/dfrn_confirm.php:554 +#: ../../mod/dfrn_confirm.php:564 #, php-format msgid "No user record found for '%s' " msgstr "" -#: ../../mod/dfrn_confirm.php:564 +#: ../../mod/dfrn_confirm.php:574 msgid "Our site encryption key is apparently messed up." msgstr "" -#: ../../mod/dfrn_confirm.php:575 +#: ../../mod/dfrn_confirm.php:585 msgid "Empty site URL was provided or URL could not be decrypted by us." msgstr "" -#: ../../mod/dfrn_confirm.php:596 +#: ../../mod/dfrn_confirm.php:606 msgid "Contact record was not found for you on our site." msgstr "" -#: ../../mod/dfrn_confirm.php:610 +#: ../../mod/dfrn_confirm.php:620 #, php-format msgid "Site public key not available in contact record for URL %s." msgstr "" -#: ../../mod/dfrn_confirm.php:630 +#: ../../mod/dfrn_confirm.php:640 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:651 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 profile wall and your friend " "stream." 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 " @@ -4363,120 +4379,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.

" 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" @@ -5809,7 +5825,7 @@ msgid "j F" msgstr "" #: ../../include/profile_advanced.php:30 ../../include/datetime.php:448 -#: ../../include/items.php:1413 +#: ../../include/items.php:1419 msgid "Birthday:" msgstr "" @@ -6349,15 +6365,15 @@ msgstr "" 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:2160 #, php-format msgid "[Relayed] Comment authored by %s from network %s" msgstr "" @@ -6381,27 +6397,31 @@ 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 "" @@ -6876,11 +6896,11 @@ msgstr "" msgid "Please visit %s to approve or reject the suggestion." msgstr "" -#: ../../include/items.php:2724 +#: ../../include/items.php:2736 msgid "A new person is sharing with you at " msgstr "" -#: ../../include/items.php:2724 +#: ../../include/items.php:2736 msgid "You have a new follower at " msgstr "" From 4a35a517246a25899a965cb16382136f6fe92c17 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Sat, 19 May 2012 03:15:35 -0400 Subject: [PATCH 038/164] fix -desc again Signed-off-by: Simon L'nu --- view/theme/dispy/dark/style.css | 2 +- view/theme/dispy/dark/style.less | 4 ++-- view/theme/dispy/light/style.css | 2 +- view/theme/dispy/light/style.less | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index 114769727..3bb30be83 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -57,7 +57,7 @@ h6{font-size:xx-small;} #articlemain{width:100%;height:100%;margin:0 auto;} .button,#profile-listing-desc{color:#eeeecc;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} .button a,#profile-listing-desc a{color:#eeeecc;font-weight:bold;} -[class$="-desc"],[id$="-desc"]{color:#2e2f2e;border:1px outset #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;} +[class$="-desc"],[id$="-desc"]{color:#eeeecc;background:#2e2f2e;border:1px outset #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;} #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;} diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less index f2714b717..4967ac9c2 100644 --- a/view/theme/dispy/dark/style.less +++ b/view/theme/dispy/dark/style.less @@ -301,8 +301,8 @@ h6 { } [class$="-desc"], [id$="-desc"] { - color: @bg_colour; - // background: @main_colour; + color: @main_colour; + background: @bg_colour; .borders(1px, outset, @main_colour); .rounded_corners; // .box_shadow(3px, 3px, 5px); diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css index f6336c55b..1099f0913 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -57,7 +57,7 @@ h6{font-size:xx-small;} #articlemain{width:100%;height:100%;margin:0 auto;} .button,#profile-listing-desc{color:#111111;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} .button a,#profile-listing-desc a{color:#eeeeec;font-weight:bold;} -[class$="-desc"],[id$="-desc"]{color:#eeeeec;border:1px outset #eeeeec;-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;} +[class$="-desc"],[id$="-desc"]{color:#eeeeec;background:#111111;border:1px outset #eeeeec;-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;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index d2f72520f..4e1b85031 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -303,7 +303,7 @@ h6 { [class$="-desc"], [id$="-desc"] { color: @bg_colour; - // background: @main_colour; + background: @main_colour; .borders(1px, outset, @bg_colour); .rounded_corners; // .box_shadow(3px, 3px, 5px); From 668e03d4e52c118cc0e28508cceb1c8ec2b1eabf Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 19 May 2012 00:45:45 -0700 Subject: [PATCH 039/164] sql script to ccnvert all tables to innodb --- convert_innodb.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 convert_innodb.sql 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'; + From 513ef2410d9b892c8ebcb7ceac96b97023c3b5a5 Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 19 May 2012 02:42:11 -0700 Subject: [PATCH 040/164] backend support for 'x' deliveries per process - x is configurable, more importantly any search starting with # is automatically a tag search. TODO: Need to extend this to people searches starting with @ --- include/delivery.php | 802 ++++++++++++++++++++++--------------------- include/notifier.php | 7 + mod/search.php | 6 + 3 files changed, 416 insertions(+), 399 deletions(-) diff --git a/include/delivery.php b/include/delivery.php index 5f84a548a..1cee2d697 100644 --- a/include/delivery.php +++ b/include/delivery.php @@ -38,164 +38,167 @@ 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; - } + $contact_id = intval($argv[x]); - $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; - } - } + // Some other process may have delivered this item already. - // It's ours to deliver. Remove it from the queue. - - q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1", - dbesc($cmd), - dbesc($item_id), - dbesc($contact_id) - ); - - if((! $item_id) || (! $contact_id)) - return; - - $expire = false; - $top_level = false; - $recipients = array(); - $url_recipients = array(); - - $normal_mode = true; - - $recipients[] = $contact_id; - - 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) + $r = q("select * from deliverq where cmd = '%s' and item = %d and contact = %d limit 1", + dbesc($cmd), + dbesc($item_id), + dbesc($contact_id) ); - $uid = $item_id; - $item_id = 0; - if(! count($items)) - return; - } - else { + if(! count($r)) { + continue; + } - // find ancestors - $r = q("SELECT * FROM `item` WHERE `id` = %d and visible = 1 and moderated = 0 LIMIT 1", - intval($item_id) - ); - - if((! count($r)) || (! intval($r[0]['parent']))) { - 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; + } } - $target_item = $r[0]; - $parent_id = intval($r[0]['parent']); - $uid = $r[0]['uid']; - $updated = $r[0]['edited']; + // It's ours to deliver. Remove it from the queue. - if(! $parent_id) - return; - - - $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) + q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1", + dbesc($cmd), + dbesc($item_id), + dbesc($contact_id) ); - if(! count($items)) { - return; - } + if((! $item_id) || (! $contact_id)) + continue; - $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 ) " + $expire = false; + $top_level = false; + $recipients = array(); + $url_recipients = array(); + + $normal_mode = true; + + $recipients[] = $contact_id; + + 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; } - if( ! ($icontacts && count($icontacts))) - return; + else { - // avoid race condition with deleting entries + // find ancestors + $r = q("SELECT * FROM `item` WHERE `id` = %d and visible = 1 and moderated = 0 LIMIT 1", + intval($item_id) + ); - if($items[0]['deleted']) { + 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']; + + if(! $parent_id) + continue; + + + $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(! count($items)) { + continue; + } + + $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($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; + } } - 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)) + continue; - if(! count($r)) - return; + $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. - // 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. + // 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,174 +208,71 @@ 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 = '' . xmlify($birthday) . ''; + if(strlen($birthday)) + $birthday = '' . xmlify($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) ? '1' : '') - )); - - 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; - - $item_contact = get_item_contact($item,$icontacts); - if(! $item_contact) - continue; - - if($normal_mode) { - if($item_id == $item['id'] || $item['id'] == $item['parent']) - $atom .= atom_entry($item,'text',null,$owner,true); - } - else - $atom .= atom_entry($item,'text',null,$owner,true); - - } - - $atom .= '' . "\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) - ); - - 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); - - // If we are setup as a soapbox we aren't accepting input from this person - - if($x[0]['page-flags'] == PAGE_SOAPBOX) - 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; - - case NETWORK_OSTATUS : - - // 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; - - // only send salmon if public - e.g. if it's ok to notify - // a public hub, it's ok to send a salmon - - if(($public_message) && (! $expire)) { - $slaps = array(); + $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) ? '1' : '') + )); foreach($items as $item) { if(! $item['parent']) @@ -386,156 +286,260 @@ function delivery_run($argv, $argc){ if(! $item_contact) continue; - if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire)) - $slaps[] = atom_entry($item,'html',null,$owner,true); + if($normal_mode) { + if($item_id == $item['id'] || $item['id'] == $item['parent']) + $atom .= atom_entry($item,'text',null,$owner,true); + } + else + $atom .= atom_entry($item,'text',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); + $atom .= '' . "\r\n"; + + logger('notifier: ' . $atom, LOGGER_DATA); + $basepath = implode('/', array_slice(explode('/',$contact['url']),0,3)); - if($deliver_status == (-1)) { - // queue message for redelivery - add_to_queue($contact['id'],NETWORK_OSTATUS,$slappy); + // 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) + ); + + 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); + + // If we are setup as a soapbox we aren't accepting input from this person + + if($x[0]['page-flags'] == PAGE_SOAPBOX) + 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; + + case NETWORK_OSTATUS : + + // 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; + + // only send salmon if public - e.g. if it's ok to notify + // a public hub, it's ok to send a salmon + + if(($public_message) && (! $expire)) { + $slaps = array(); + + 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; + + $item_contact = get_item_contact($item,$icontacts); + if(! $item_contact) + continue; + + 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]), + 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') { + + $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; + + + $local_user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid) ); - if(count($r)) - $it = $r[0]; - } - if(! $it) - break; + 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']; - $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']; + $subject = (($it['title']) ? email_header_encode($it['title'],'UTF-8') : t("\x28no subject\x29")) ; - $subject = (($it['title']) ? email_header_encode($it['title'],'UTF-8') : t("\x28no subject\x29")) ; + // only expose our real email address to true friends - // only expose our real email address to true friends + 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"; - 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"; + if($reply_to) + $headers .= 'Reply-to: ' . $reply_to . "\n"; - if($reply_to) - $headers .= 'Reply-to: ' . $reply_to . "\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"; - // for testing purposes: Collect exported mails - // $file = tempnam("/tmp/friendica/", "mail-out-"); - // file_put_contents($file, json_encode($it)); + //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); - $headers .= 'Message-Id: <' . iri2msgid($it['uri']). '>' . "\n"; + 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'])); - //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(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; - - case NETWORK_DIASPORA : - if($public_message) - $loc = 'public batch ' . $contact['batch']; - else - $loc = $contact['name']; - - logger('delivery: diaspora batch deliver: ' . $loc); - - if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode)) break; - if((! $contact['pubkey']) && (! $public_message)) + case NETWORK_DIASPORA : + if($public_message) + $loc = 'public batch ' . $contact['batch']; + else + $loc = $contact['name']; + + logger('delivery: diaspora batch deliver: ' . $loc); + + if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode)) + 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']) { + + 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; + } + + logger('delivery: diaspora unknown mode: ' . $contact['name']); + break; - if($target_item['verb'] === ACTIVITY_DISLIKE) { - // unsupported + case NETWORK_FEED : + case NETWORK_FACEBOOK : + if(get_config('system','dfrn_only')) + break; + default: 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']) { - - 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; - } - - logger('delivery: diaspora unknown mode: ' . $contact['name']); - - break; - - case NETWORK_FEED : - case NETWORK_FACEBOOK : - if(get_config('system','dfrn_only')) - break; - default: - break; + } } return; diff --git a/include/notifier.php b/include/notifier.php index ea4a1bea8..8b904dbcd 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -478,6 +478,12 @@ function notifier_run($argv, $argc){ } } + $deliveries_per_process = intval(get_config('system','delivery_batch_count')); + if($deliveries_per_process <= 0) + $deliveries_per_process = 1; + + $this_batch = array(); + foreach($r as $contact) { if($contact['self']) continue; @@ -486,6 +492,7 @@ function notifier_run($argv, $argc){ // we will deliver single recipient types of message and email receipients here. if((! $mail) && (! $fsuggest) && (! $followup)) { + // deliveries per process not yet implemented, 1 delivery per process. proc_run('php','include/delivery.php',$cmd,$item_id,$contact['id']); if($interval) @time_sleep_until(microtime(true) + (float) $interval); diff --git a/mod/search.php b/mod/search.php index d467764b0..635c87b70 100644 --- a/mod/search.php +++ b/mod/search.php @@ -96,6 +96,12 @@ 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(! $search) return $o; From d6ca4a1b42083319945cbbeb0affca78e084e63b Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Sat, 19 May 2012 14:51:10 +0100 Subject: [PATCH 041/164] Give Darkzero some loving. Everything that used to be hidden with light text on light backgrounds is legible now. --- view/theme/darkzero/style.css | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/view/theme/darkzero/style.css b/view/theme/darkzero/style.css index a3df740eb..5a0559e3d 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; } @@ -118,4 +122,17 @@ input#acl-search { #nav-notifications-menu li:hover { background: #444; +} + +.acpopupitem{ + background:#2e2f2e; +} + +code { + background:#2e2f2e !important; +} + +blockquote { + background:#2e2f2e !important; + color:#eec !important; } \ No newline at end of file From a1b96d11a72a28915725cee898edb461b0a2dd23 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Sat, 19 May 2012 15:17:35 +0100 Subject: [PATCH 042/164] Okay, so maybe not *everything* --- view/theme/darkzero/style.css | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/view/theme/darkzero/style.css b/view/theme/darkzero/style.css index 5a0559e3d..a1a684355 100644 --- a/view/theme/darkzero/style.css +++ b/view/theme/darkzero/style.css @@ -103,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 { @@ -135,4 +135,13 @@ code { blockquote { background:#2e2f2e !important; color:#eec !important; -} \ No newline at end of file +} + +.group-selected, .nets-selected, .fileas-selected, .categories-selected { + background:#2e2f2e; +} + +#fancybox-content{ + background:#444; +} + From b1c58511ad65b0701db881124cbdf5e414643616 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Sat, 19 May 2012 17:20:27 +0100 Subject: [PATCH 043/164] Diabook-dark - some more cleaning up --- view/theme/diabook/diabook-dark/style-network.css | 7 ++++--- view/theme/diabook/diabook-dark/style-profile.css | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) 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; } From 4484bd0e9736c2ba86900120012b779d51a39df6 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Sat, 19 May 2012 17:30:55 +0100 Subject: [PATCH 044/164] Darkzero, another missing part of "everything" --- view/theme/darkzero/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/view/theme/darkzero/style.css b/view/theme/darkzero/style.css index a1a684355..6f238bec6 100644 --- a/view/theme/darkzero/style.css +++ b/view/theme/darkzero/style.css @@ -130,6 +130,7 @@ input#acl-search { code { background:#2e2f2e !important; + color:#fff !important; } blockquote { From 8c80fe0bf51fa472ddf9bf225490e47ea1bf4a7f Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 20 May 2012 00:11:32 +0200 Subject: [PATCH 045/164] Performance tests --- include/config.php | 2 +- include/dba.php | 20 ++++++++++++-------- mod/network.php | 2 +- view/theme/diabook/theme.php | 5 +++++ 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/include/config.php b/include/config.php index 4cff38090..e416bec6e 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. diff --git a/include/dba.php b/include/dba.php index c9f880241..7ecce7270 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,27 @@ class dba { } public function q($sql) { - + if((! $this->db) || (! $this->connected)) return false; - + $this->error = ''; + //@file_put_contents("/tmp/friendica-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); + //@file_put_contents("/tmp/friendica-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 +111,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 +150,7 @@ class dba { } } - + if($this->debug) logger('dba: ' . printable(print_r($r, true))); return($r); diff --git a/mod/network.php b/mod/network.php index e59839ccc..c5347756c 100644 --- a/mod/network.php +++ b/mod/network.php @@ -413,7 +413,7 @@ function network_content(&$a, $update = 0) { $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` like '%s' or `tag` like '%s' or tag like '%s' )) ", - dbesc(protect_sprintf('%s' . $myurl)), + dbesc(protect_sprintf('%' . $myurl)), dbesc(protect_sprintf('%' . $myurl . '\\]%')), dbesc(protect_sprintf('%' . $diasp_url . '\\]%')) ); diff --git a/view/theme/diabook/theme.php b/view/theme/diabook/theme.php index de7e41841..83079782e 100755 --- a/view/theme/diabook/theme.php +++ b/view/theme/diabook/theme.php @@ -18,6 +18,11 @@ $a->page['htmlhead'] .= sprintf('', $diabook_ //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" ); From f48de791813a914d7ce2e1ec00ba041657f3f8ac Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Sat, 19 May 2012 18:53:57 -0400 Subject: [PATCH 046/164] Merge branch 'master', remote-tracking branch 'remotes/upstream/master' * remotes/upstream/master: Darkzero, another missing part of "everything" Diabook-dark - some more cleaning up Okay, so maybe not *everything* Give Darkzero some loving. backend support for 'x' deliveries per process - x is configurable, more importantly any search starting with # is automatically a tag search. TODO: Need to extend this to people searches starting with @ sql script to ccnvert all tables to innodb * master: From dd86f40f9608afe7b58784530bd2cf117397c59b Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 19 May 2012 16:42:24 -0700 Subject: [PATCH 047/164] set comment permissions explicitly to parent permissions --- boot.php | 2 +- mod/item.php | 19 ++++++++++++++----- util/messages.po | 48 ++++++++++++++++++++++++++++++++++-------------- 3 files changed, 49 insertions(+), 20 deletions(-) diff --git a/boot.php b/boot.php index 7174b6822..f56a70319 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1346' ); +define ( 'FRIENDICA_VERSION', '3.0.1347' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1144 ); diff --git a/mod/item.php b/mod/item.php index 639379fe0..9f6b2aef4 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); diff --git a/util/messages.po b/util/messages.po index cf2f02d4e..456f50cda 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1346\n" +"Project-Id-Version: 3.0.1347\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-18 10:00-0700\n" +"POT-Creation-Date: 2012-05-19 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -577,7 +577,7 @@ msgstr "" msgid "Community" msgstr "" -#: ../../mod/community.php:61 ../../mod/search.php:128 +#: ../../mod/community.php:61 ../../mod/search.php:134 msgid "No results." msgstr "" @@ -1691,7 +1691,8 @@ msgstr "" #: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:752 #: ../../addon/facebook/facebook.php:688 #: ../../addon/facebook/facebook.php:1178 -#: ../../addon/testdrive/testdrive.php:58 ../../include/items.php:2738 +#: ../../addon/public_server/public_server.php:62 +#: ../../addon/testdrive/testdrive.php:61 ../../include/items.php:2738 #: ../../boot.php:696 msgid "Administrator" msgstr "" @@ -3833,6 +3834,11 @@ msgstr "" msgid "%1$s changed %2$s to “%3$s”" msgstr "" +#: ../../mod/profiles.php:332 +#, php-format +msgid " - Visit %1$s's %2$s" +msgstr "" + #: ../../mod/profiles.php:335 #, php-format msgid "%1$s has an updated %2$s, changing %3$s." @@ -4857,6 +4863,25 @@ msgstr "" msgid "Enable Geonames Plugin" msgstr "" +#: ../../addon/public_server/public_server.php:126 +#: ../../addon/testdrive/testdrive.php:88 +#, 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 "" @@ -5116,16 +5141,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:89 msgid "Your Friendica test account is about to expire." msgstr "" -#: ../../addon/testdrive/testdrive.php:87 +#: ../../addon/testdrive/testdrive.php:90 #, php-format msgid "" "Hi %1$s,\n" @@ -6201,12 +6221,12 @@ msgstr "" msgid "Finishes:" msgstr "" -#: ../../include/delivery.php:452 ../../include/notifier.php:652 +#: ../../include/delivery.php:455 ../../include/notifier.php:659 msgid "(no subject)" msgstr "" -#: ../../include/delivery.php:459 ../../include/enotify.php:23 -#: ../../include/notifier.php:659 +#: ../../include/delivery.php:462 ../../include/enotify.php:23 +#: ../../include/notifier.php:666 msgid "noreply" msgstr "" From c6104fb856cfe282cd56a29d4007903382f960e0 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Sun, 20 May 2012 01:44:07 +0100 Subject: [PATCH 048/164] Darkzero-NS + 'Friendicaland' countries. --- js/country.js | 6 +-- view/theme/darkzero-NS/style.css | 75 ++++++++++++++++++++++++++++---- 2 files changed, 69 insertions(+), 12 deletions(-) diff --git a/js/country.js b/js/country.js index 1c7505580..8d218bde6 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|Oradons Friendica|Recolutionari.es|Sysfu Social Club|theshi.re|Tumpambae|Uzmiac|Other"; /* * gArCountryInfo * (0) Country name diff --git a/view/theme/darkzero-NS/style.css b/view/theme/darkzero-NS/style.css index 047381a92..1efe093ed 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; } - -.wall-item-content { - max-height: 20000px; - overflow: none; -} 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; +} \ No newline at end of file From f16a1199408d167bbc7c52dc408ef02b36808317 Mon Sep 17 00:00:00 2001 From: friendica Date: Sat, 19 May 2012 21:53:27 -0700 Subject: [PATCH 049/164] search with leading @ performs directory search (# for tag search), nothing for text search --- mod/dirfind.php | 3 +++ mod/search.php | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) 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/search.php b/mod/search.php index 635c87b70..3e6bf68aa 100644 --- a/mod/search.php +++ b/mod/search.php @@ -80,7 +80,7 @@ function search_content(&$a) { $o = '' . "\r\n"; - $o .= '

' . t('Search This Site') . '

'; + $o .= '

' . t('Search') . '

'; if(x($a->data,'search')) $search = notags(trim($a->data['search'])); @@ -101,6 +101,10 @@ function search_content(&$a) { $tag = true; $search = substr($search,1); } + if(strpos($search,'@') === 0) { + require_once('mod/dirfind.php'); + return dirfind_content($a); + } if(! $search) return $o; From 2ac55c9f21f859e626da94fd6c87015c066603ee Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Sun, 20 May 2012 14:37:20 -0400 Subject: [PATCH 050/164] fix dispy light Signed-off-by: Simon L'nu --- view/theme/dispy/light/style.css | 2 +- view/theme/dispy/light/style.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css index 1099f0913..eb6abee71 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -56,7 +56,7 @@ h6{font-size:xx-small;} .tool{margin:5px 0;list-style:none;} #articlemain{width:100%;height:100%;margin:0 auto;} .button,#profile-listing-desc{color:#111111;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} -.button a,#profile-listing-desc a{color:#eeeeec;font-weight:bold;} +.button a,#profile-listing-desc a{color:#111111;font-weight:bold;} [class$="-desc"],[id$="-desc"]{color:#eeeeec;background:#111111;border:1px outset #eeeeec;-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;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index 4e1b85031..ed9dfdd69 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -295,7 +295,7 @@ h6 { .box_shadow(4px, 4px, 7px); } a { - color: @bg_colour; + color: @main_colour; // font-size: smaller; font-weight: bold; } From afaf9ec74fe0662de76deabd11d630f871802579 Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 20 May 2012 18:30:02 -0700 Subject: [PATCH 051/164] rev update --- boot.php | 21 ++++++- include/crypto.php | 36 +++++++++++- include/delivery.php | 2 +- include/notifier.php | 32 ++++++++--- mod/dfrn_confirm.php | 15 ++--- mod/hostxrd.php | 22 +------- mod/register.php | 37 +++---------- util/messages.po | 128 +++++++++++++++++++++---------------------- 8 files changed, 158 insertions(+), 135 deletions(-) diff --git a/boot.php b/boot.php index f56a70319..4b4788dbd 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1347' ); +define ( 'FRIENDICA_VERSION', '3.0.1348' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1144 ); @@ -1323,6 +1323,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/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/delivery.php b/include/delivery.php index 1cee2d697..61b0bd33a 100644 --- a/include/delivery.php +++ b/include/delivery.php @@ -41,7 +41,7 @@ function delivery_run($argv, $argc){ for($x = 3; $x < $argc; $x ++) { - $contact_id = intval($argv[x]); + $contact_id = intval($argv[$x]); // Some other process may have delivered this item already. diff --git a/include/notifier.php b/include/notifier.php index 8b904dbcd..cb4fb2a31 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -478,24 +478,42 @@ function notifier_run($argv, $argc){ } } + + // 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(); - foreach($r as $contact) { + 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)) { - // deliveries per process not yet implemented, 1 delivery per process. - 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; } diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 227d72cbf..093993bbc 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 ) - ); + $res = new_keypair(1024); - $private_key = ''; - - openssl_pkey_export($res, $private_key); - - $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. 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/register.php b/mod/register.php index b60707d45..58bba8533 100644 --- a/mod/register.php +++ b/mod/register.php @@ -171,26 +171,17 @@ function register_post(&$a) { $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 )); + require_once('include/crypto.php'); - // Get private key + $result = new_keypair(1024); - if(empty($res)) { + if($result === false) { 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"]; + $prvkey = $result['prvkey']; + $pubkey = $result['pubkey']; /** * @@ -203,21 +194,9 @@ function register_post(&$a) { * */ - $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"]; + $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` ) diff --git a/util/messages.po b/util/messages.po index 456f50cda..65674774a 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1347\n" +"Project-Id-Version: 3.0.1348\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-19 10:00-0700\n" +"POT-Creation-Date: 2012-05-20 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -330,7 +330,7 @@ msgstr "" #: ../../mod/settings.php:910 ../../mod/settings.php:916 #: ../../mod/settings.php:952 ../../mod/settings.php:953 #: ../../mod/settings.php:954 ../../mod/settings.php:955 -#: ../../mod/register.php:532 ../../mod/profiles.php:511 +#: ../../mod/register.php:511 ../../mod/profiles.php:511 msgid "Yes" msgstr "" @@ -341,7 +341,7 @@ msgstr "" #: ../../mod/settings.php:910 ../../mod/settings.php:916 #: ../../mod/settings.php:952 ../../mod/settings.php:953 #: ../../mod/settings.php:954 ../../mod/settings.php:955 -#: ../../mod/register.php:533 ../../mod/profiles.php:512 +#: ../../mod/register.php:512 ../../mod/profiles.php:512 msgid "No" msgstr "" @@ -369,8 +369,8 @@ 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/photos.php:965 ../../mod/register.php:314 +#: ../../mod/register.php:321 ../../mod/register.php:328 #: ../../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 @@ -577,7 +577,7 @@ msgstr "" msgid "Community" msgstr "" -#: ../../mod/community.php:61 ../../mod/search.php:134 +#: ../../mod/community.php:61 ../../mod/search.php:138 msgid "No results." msgstr "" @@ -1170,7 +1170,7 @@ msgstr "" msgid "Connect" msgstr "" -#: ../../mod/match.php:65 ../../mod/dirfind.php:57 +#: ../../mod/match.php:65 ../../mod/dirfind.php:60 msgid "No matches" msgstr "" @@ -1687,8 +1687,8 @@ 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:752 +#: ../../mod/register.php:367 ../../mod/register.php:421 +#: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:745 #: ../../addon/facebook/facebook.php:688 #: ../../addon/facebook/facebook.php:1178 #: ../../addon/public_server/public_server.php:62 @@ -2686,7 +2686,7 @@ msgid "" "must also begin with a letter." msgstr "" -#: ../../mod/register.php:153 ../../mod/register.php:264 +#: ../../mod/register.php:153 ../../mod/register.php:243 msgid "Nickname is already registered. Please choose another." msgstr "" @@ -2696,107 +2696,107 @@ msgid "" "another." msgstr "" -#: ../../mod/register.php:182 +#: ../../mod/register.php:179 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "" -#: ../../mod/register.php:250 +#: ../../mod/register.php:229 msgid "An error occurred during registration. Please try again." msgstr "" -#: ../../mod/register.php:286 +#: ../../mod/register.php:265 msgid "An error occurred creating your default profile. Please try again." msgstr "" -#: ../../mod/register.php:386 ../../mod/regmod.php:52 +#: ../../mod/register.php:365 ../../mod/regmod.php:52 #, php-format msgid "Registration details for %s" msgstr "" -#: ../../mod/register.php:394 +#: ../../mod/register.php:373 msgid "" "Registration successful. Please check your email for further instructions." msgstr "" -#: ../../mod/register.php:398 +#: ../../mod/register.php:377 msgid "Failed to send email message. Here is the message that failed." msgstr "" -#: ../../mod/register.php:403 +#: ../../mod/register.php:382 msgid "Your registration can not be processed." msgstr "" -#: ../../mod/register.php:440 +#: ../../mod/register.php:419 #, php-format msgid "Registration request at %s" msgstr "" -#: ../../mod/register.php:449 +#: ../../mod/register.php:428 msgid "Your registration is pending approval by the site owner." msgstr "" -#: ../../mod/register.php:487 +#: ../../mod/register.php:466 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." msgstr "" -#: ../../mod/register.php:513 +#: ../../mod/register.php:492 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:493 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:494 msgid "Your OpenID (optional): " msgstr "" -#: ../../mod/register.php:529 +#: ../../mod/register.php:508 msgid "Include your profile in member directory?" msgstr "" -#: ../../mod/register.php:549 +#: ../../mod/register.php:528 msgid "Membership on this site is by invitation only." msgstr "" -#: ../../mod/register.php:550 +#: ../../mod/register.php:529 msgid "Your invitation ID: " msgstr "" -#: ../../mod/register.php:553 ../../mod/admin.php:405 +#: ../../mod/register.php:532 ../../mod/admin.php:405 msgid "Registration" msgstr "" -#: ../../mod/register.php:561 +#: ../../mod/register.php:540 msgid "Your Full Name (e.g. Joe Smith): " msgstr "" -#: ../../mod/register.php:562 +#: ../../mod/register.php:541 msgid "Your Email Address: " msgstr "" -#: ../../mod/register.php:563 +#: ../../mod/register.php:542 msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be 'nickname@$sitename'." msgstr "" -#: ../../mod/register.php:564 +#: ../../mod/register.php:543 msgid "Choose a nickname: " msgstr "" -#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:794 +#: ../../mod/register.php:546 ../../include/nav.php:81 ../../boot.php:794 msgid "Register" msgstr "" -#: ../../mod/dirfind.php:23 +#: ../../mod/dirfind.php:26 msgid "People Search" msgstr "" @@ -2860,38 +2860,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:381 ../../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:790 msgid "System error. Post not saved." msgstr "" -#: ../../mod/item.php:806 +#: ../../mod/item.php:815 #, 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:817 #, php-format msgid "You may visit them online at %s" msgstr "" -#: ../../mod/item.php:809 +#: ../../mod/item.php:818 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:820 #, php-format msgid "%s posted an update." msgstr "" @@ -3764,8 +3764,8 @@ msgstr "" msgid "No installed applications." msgstr "" -#: ../../mod/search.php:83 -msgid "Search This Site" +#: ../../mod/search.php:83 ../../include/text.php:650 ../../include/nav.php:91 +msgid "Search" msgstr "" #: ../../mod/profiles.php:21 ../../mod/profiles.php:375 @@ -4220,83 +4220,83 @@ msgid "" "has already been approved." msgstr "" -#: ../../mod/dfrn_confirm.php:242 +#: ../../mod/dfrn_confirm.php:235 msgid "Response from remote site was not understood." msgstr "" -#: ../../mod/dfrn_confirm.php:251 +#: ../../mod/dfrn_confirm.php:244 msgid "Unexpected response from remote site: " msgstr "" -#: ../../mod/dfrn_confirm.php:259 +#: ../../mod/dfrn_confirm.php:252 msgid "Confirmation completed successfully." msgstr "" -#: ../../mod/dfrn_confirm.php:261 ../../mod/dfrn_confirm.php:275 -#: ../../mod/dfrn_confirm.php:282 +#: ../../mod/dfrn_confirm.php:254 ../../mod/dfrn_confirm.php:268 +#: ../../mod/dfrn_confirm.php:275 msgid "Remote site reported: " msgstr "" -#: ../../mod/dfrn_confirm.php:273 +#: ../../mod/dfrn_confirm.php:266 msgid "Temporary failure. Please wait and try again." msgstr "" -#: ../../mod/dfrn_confirm.php:280 +#: ../../mod/dfrn_confirm.php:273 msgid "Introduction failed or was revoked." msgstr "" -#: ../../mod/dfrn_confirm.php:425 +#: ../../mod/dfrn_confirm.php:418 msgid "Unable to set contact photo." msgstr "" -#: ../../mod/dfrn_confirm.php:482 ../../include/diaspora.php:507 +#: ../../mod/dfrn_confirm.php:475 ../../include/diaspora.php:507 #: ../../include/conversation.php:101 #, php-format msgid "%1$s is now friends with %2$s" msgstr "" -#: ../../mod/dfrn_confirm.php:564 +#: ../../mod/dfrn_confirm.php:557 #, php-format msgid "No user record found for '%s' " msgstr "" -#: ../../mod/dfrn_confirm.php:574 +#: ../../mod/dfrn_confirm.php:567 msgid "Our site encryption key is apparently messed up." msgstr "" -#: ../../mod/dfrn_confirm.php:585 +#: ../../mod/dfrn_confirm.php:578 msgid "Empty site URL was provided or URL could not be decrypted by us." msgstr "" -#: ../../mod/dfrn_confirm.php:606 +#: ../../mod/dfrn_confirm.php:599 msgid "Contact record was not found for you on our site." msgstr "" -#: ../../mod/dfrn_confirm.php:620 +#: ../../mod/dfrn_confirm.php:613 #, php-format msgid "Site public key not available in contact record for URL %s." msgstr "" -#: ../../mod/dfrn_confirm.php:640 +#: ../../mod/dfrn_confirm.php:633 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:651 +#: ../../mod/dfrn_confirm.php:644 msgid "Unable to set your contact credentials on our system." msgstr "" -#: ../../mod/dfrn_confirm.php:716 +#: ../../mod/dfrn_confirm.php:709 msgid "Unable to update your contact profile details on our system" msgstr "" -#: ../../mod/dfrn_confirm.php:750 +#: ../../mod/dfrn_confirm.php:743 #, php-format msgid "Connection accepted at %s" msgstr "" -#: ../../mod/dfrn_confirm.php:799 +#: ../../mod/dfrn_confirm.php:792 #, php-format msgid "%1$s has joined %2$s" msgstr "" @@ -6257,10 +6257,6 @@ msgid_plural "%d Contacts" msgstr[0] "" msgstr[1] "" -#: ../../include/text.php:650 ../../include/nav.php:91 -msgid "Search" -msgstr "" - #: ../../include/text.php:831 msgid "Monday" msgstr "" From f65d8e50be9fe31b459d56380ee1d426f5880c5c Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Mon, 21 May 2012 00:36:38 -0400 Subject: [PATCH 052/164] Merge branch 'master', remote-tracking branch 'remotes/upstream/master' * remotes/upstream/master: rev update * master: From cb2702249fd80ce4e9d82f98a9a152f82e123dc7 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Mon, 21 May 2012 02:47:43 -0400 Subject: [PATCH 053/164] fix dumb mistake in light Signed-off-by: Simon L'nu --- view/theme/dispy/light/style.css | 6 +++--- view/theme/dispy/light/style.less | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css index eb6abee71..5c6545a58 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -13,7 +13,7 @@ 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;} @@ -57,7 +57,7 @@ h6{font-size:xx-small;} #articlemain{width:100%;height:100%;margin:0 auto;} .button,#profile-listing-desc{color:#111111;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} .button a,#profile-listing-desc a{color:#111111;font-weight:bold;} -[class$="-desc"],[id$="-desc"]{color:#eeeeec;background:#111111;border:1px outset #eeeeec;-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;} +[class$="-desc"],[id$="-desc"]{color:#eeeeec;background:#2e3436;border:1px outset #eeeeec;-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;} @@ -211,7 +211,7 @@ 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,.wall-item-ago{clear:left;float:left;color:#eeeeec;line-height:1;display:inline-block;font-size:0.75em;margin:0.5em auto 0;} +.wall-item-author,.wall-item-actions-author,.wall-item-ago{clear:left;float:left;color:#111111;line-height:1;display:inline-block;font-size:0.75em;margin:0.5em auto 0;} .wall-item-author,.wall-item-actions-author{margin:0.5em auto 0;font-size:0.75em;font-weight:bold;} .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-location>a,.wall-item-location .smalltext{margin-left:25px;font-size:0.7em;display:block;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index ed9dfdd69..86a30109b 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%)); @@ -303,7 +303,7 @@ h6 { [class$="-desc"], [id$="-desc"] { color: @bg_colour; - background: @main_colour; + background: @dk_bg_colour; .borders(1px, outset, @bg_colour); .rounded_corners; // .box_shadow(3px, 3px, 5px); @@ -1377,7 +1377,7 @@ nav #nav-notifications-linkmenu { .wall-item-ago { clear: left; float: left; - color: @bg_colour; + color: @main_colour; line-height: 1; display: inline-block; font-size: 0.75em; From 627367e1ee241fcd3508dd5e8c0e021316420787 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Mon, 21 May 2012 06:48:08 -0400 Subject: [PATCH 054/164] more light fixes Signed-off-by: Simon L'nu --- view/theme/dispy/light/style.css | 2 +- view/theme/dispy/light/style.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css index 5c6545a58..bd4088b06 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -210,7 +210,7 @@ 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-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{clear:left;float:left;color:#111111;line-height:1;display:inline-block;font-size:0.75em;margin:0.5em auto 0;} .wall-item-author,.wall-item-actions-author{margin:0.5em auto 0;font-size:0.75em;font-weight:bold;} .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;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index 86a30109b..92c8547ee 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -1364,7 +1364,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; From f570965ebe65fe7d549cafea5f5d8c04da3d986f Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Mon, 21 May 2012 06:50:00 -0400 Subject: [PATCH 055/164] Merge branch 'master', remote-tracking branch 'remotes/upstream/master' * remotes/upstream/master: * master: From 54e2c1ca81b99d4ac418e9287e00440de1fdc664 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 21 May 2012 16:40:11 -0700 Subject: [PATCH 056/164] rev update, bug 428, 429, and ability to block globaldir submissions from demo sites --- INSTALL.txt | 47 ++++++++++++++ boot.php | 2 +- include/directory.php | 10 ++- mod/admin.php | 2 +- mod/photos.php | 14 ++++ util/messages.po | 102 +++++++++++++++--------------- view/photo_album.tpl | 2 +- view/photo_top.tpl | 4 +- view/photos_recent.tpl | 1 + view/theme/duepuntozero/style.css | 25 +++++--- view/theme/slackr/style.css | 62 +++++++++++++++++- 11 files changed, 205 insertions(+), 66 deletions(-) diff --git a/INSTALL.txt b/INSTALL.txt index 574e90975..86076a09a 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 congiurations 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: + + + php_admin_value suhosin.executor.func.blacklist none + php_admin_value suhosin.executor.eval.blacklist none + + +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 4b4788dbd..798362d25 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1348' ); +define ( 'FRIENDICA_VERSION', '3.0.1349' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1144 ); 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/mod/admin.php b/mod/admin.php index 2810c8a8a..1f53f112d 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -417,7 +417,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/photos.php b/mod/photos.php index 8da94841e..082947bdb 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -977,9 +977,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', @@ -1400,9 +1407,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/util/messages.po b/util/messages.po index 65674774a..2edd9c281 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1348\n" +"Project-Id-Version: 3.0.1349\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-20 10:00-0700\n" +"POT-Creation-Date: 2012-05-21 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -123,8 +123,8 @@ 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/photos.php:1200 ../../mod/photos.php:1240 +#: ../../mod/photos.php:1280 ../../mod/photos.php:1311 #: ../../mod/install.php:251 ../../mod/install.php:289 #: ../../mod/localtime.php:45 ../../mod/contacts.php:322 #: ../../mod/settings.php:553 ../../mod/settings.php:699 @@ -220,7 +220,7 @@ msgid "link to source" msgstr "" #: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:126 -#: ../../include/nav.php:52 ../../boot.php:1503 +#: ../../include/nav.php:52 ../../boot.php:1522 msgid "Events" msgstr "" @@ -345,18 +345,18 @@ msgstr "" msgid "No" msgstr "" -#: ../../mod/photos.php:43 ../../boot.php:1497 +#: ../../mod/photos.php:43 ../../boot.php:1516 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 +#: ../../mod/photos.php:950 ../../mod/photos.php:965 ../../mod/photos.php:1389 +#: ../../mod/photos.php:1401 ../../addon/communityhome/communityhome.php:110 #: ../../view/theme/diabook/theme.php:593 msgid "Contact Photos" msgstr "" -#: ../../mod/photos.php:58 ../../mod/photos.php:975 ../../mod/photos.php:1424 +#: ../../mod/photos.php:58 ../../mod/photos.php:975 ../../mod/photos.php:1438 msgid "Upload New Photos" msgstr "" @@ -387,7 +387,7 @@ msgstr "" msgid "Delete Album" msgstr "" -#: ../../mod/photos.php:242 ../../mod/photos.php:1194 +#: ../../mod/photos.php:242 ../../mod/photos.php:1201 msgid "Delete Photo" msgstr "" @@ -455,7 +455,7 @@ msgstr "" msgid "Do not show a status post for this upload" msgstr "" -#: ../../mod/photos.php:914 ../../mod/photos.php:1189 +#: ../../mod/photos.php:914 ../../mod/photos.php:1196 msgid "Permissions" msgstr "" @@ -463,108 +463,108 @@ msgstr "" msgid "Edit Album" msgstr "" -#: ../../mod/photos.php:984 ../../mod/photos.php:1407 +#: ../../mod/photos.php:991 ../../mod/photos.php:1421 msgid "View Photo" msgstr "" -#: ../../mod/photos.php:1019 +#: ../../mod/photos.php:1026 msgid "Permission denied. Access to this item may be restricted." msgstr "" -#: ../../mod/photos.php:1021 +#: ../../mod/photos.php:1028 msgid "Photo not available" msgstr "" -#: ../../mod/photos.php:1071 +#: ../../mod/photos.php:1078 msgid "View photo" msgstr "" -#: ../../mod/photos.php:1071 +#: ../../mod/photos.php:1078 msgid "Edit photo" msgstr "" -#: ../../mod/photos.php:1072 +#: ../../mod/photos.php:1079 msgid "Use as profile photo" msgstr "" -#: ../../mod/photos.php:1078 ../../include/conversation.php:483 +#: ../../mod/photos.php:1085 ../../include/conversation.php:483 msgid "Private Message" msgstr "" -#: ../../mod/photos.php:1100 +#: ../../mod/photos.php:1107 msgid "View Full Size" msgstr "" -#: ../../mod/photos.php:1168 +#: ../../mod/photos.php:1175 msgid "Tags: " msgstr "" -#: ../../mod/photos.php:1171 +#: ../../mod/photos.php:1178 msgid "[Remove any tag]" msgstr "" -#: ../../mod/photos.php:1182 +#: ../../mod/photos.php:1189 msgid "New album name" msgstr "" -#: ../../mod/photos.php:1185 +#: ../../mod/photos.php:1192 msgid "Caption" msgstr "" -#: ../../mod/photos.php:1187 +#: ../../mod/photos.php:1194 msgid "Add a Tag" msgstr "" -#: ../../mod/photos.php:1191 +#: ../../mod/photos.php:1198 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" -#: ../../mod/photos.php:1211 ../../include/conversation.php:532 +#: ../../mod/photos.php:1218 ../../include/conversation.php:532 msgid "I like this (toggle)" msgstr "" -#: ../../mod/photos.php:1212 ../../include/conversation.php:533 +#: ../../mod/photos.php:1219 ../../include/conversation.php:533 msgid "I don't like this (toggle)" msgstr "" -#: ../../mod/photos.php:1213 ../../include/conversation.php:967 +#: ../../mod/photos.php:1220 ../../include/conversation.php:967 msgid "Share" msgstr "" -#: ../../mod/photos.php:1214 ../../mod/editpost.php:104 +#: ../../mod/photos.php:1221 ../../mod/editpost.php:104 #: ../../mod/wallmessage.php:145 ../../mod/message.php:214 #: ../../mod/message.php:408 ../../include/conversation.php:364 #: ../../include/conversation.php:709 ../../include/conversation.php:986 msgid "Please wait" msgstr "" -#: ../../mod/photos.php:1230 ../../mod/photos.php:1270 -#: ../../mod/photos.php:1301 ../../include/conversation.php:555 +#: ../../mod/photos.php:1237 ../../mod/photos.php:1277 +#: ../../mod/photos.php:1308 ../../include/conversation.php:555 msgid "This is you" msgstr "" -#: ../../mod/photos.php:1232 ../../mod/photos.php:1272 -#: ../../mod/photos.php:1303 ../../include/conversation.php:557 +#: ../../mod/photos.php:1239 ../../mod/photos.php:1279 +#: ../../mod/photos.php:1310 ../../include/conversation.php:557 #: ../../boot.php:516 msgid "Comment" msgstr "" -#: ../../mod/photos.php:1234 ../../mod/editpost.php:125 +#: ../../mod/photos.php:1241 ../../mod/editpost.php:125 #: ../../include/conversation.php:567 ../../include/conversation.php:1004 msgid "Preview" msgstr "" -#: ../../mod/photos.php:1331 ../../mod/settings.php:616 +#: ../../mod/photos.php:1338 ../../mod/settings.php:616 #: ../../mod/settings.php:697 ../../mod/group.php:168 ../../mod/admin.php:647 #: ../../include/conversation.php:321 ../../include/conversation.php:587 msgid "Delete" msgstr "" -#: ../../mod/photos.php:1413 +#: ../../mod/photos.php:1427 msgid "View Album" msgstr "" -#: ../../mod/photos.php:1422 +#: ../../mod/photos.php:1436 msgid "Recent Photos" msgstr "" @@ -1692,7 +1692,7 @@ msgstr "" #: ../../addon/facebook/facebook.php:688 #: ../../addon/facebook/facebook.php:1178 #: ../../addon/public_server/public_server.php:62 -#: ../../addon/testdrive/testdrive.php:61 ../../include/items.php:2738 +#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:2738 #: ../../boot.php:696 msgid "Administrator" msgstr "" @@ -2369,7 +2369,7 @@ msgstr "" msgid "Invalid contact." msgstr "" -#: ../../mod/notes.php:44 ../../boot.php:1509 +#: ../../mod/notes.php:44 ../../boot.php:1528 msgid "Personal Notes" msgstr "" @@ -2620,7 +2620,7 @@ msgstr "" #: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:123 #: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:74 -#: ../../include/nav.php:50 ../../boot.php:1488 +#: ../../include/nav.php:50 ../../boot.php:1507 msgid "Profile" msgstr "" @@ -2835,7 +2835,7 @@ msgid "Access denied." msgstr "" #: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:125 -#: ../../include/nav.php:51 ../../boot.php:1494 +#: ../../include/nav.php:51 ../../boot.php:1513 msgid "Photos" msgstr "" @@ -4864,7 +4864,7 @@ msgid "Enable Geonames Plugin" msgstr "" #: ../../addon/public_server/public_server.php:126 -#: ../../addon/testdrive/testdrive.php:88 +#: ../../addon/testdrive/testdrive.php:94 #, php-format msgid "Your account on %s will expire in a few days." msgstr "" @@ -5141,11 +5141,11 @@ msgstr "" msgid "Gravatar settings updated." msgstr "" -#: ../../addon/testdrive/testdrive.php:89 +#: ../../addon/testdrive/testdrive.php:95 msgid "Your Friendica test account is about to expire." msgstr "" -#: ../../addon/testdrive/testdrive.php:90 +#: ../../addon/testdrive/testdrive.php:96 #, php-format msgid "" "Hi %1$s,\n" @@ -6221,12 +6221,12 @@ msgstr "" msgid "Finishes:" msgstr "" -#: ../../include/delivery.php:455 ../../include/notifier.php:659 +#: ../../include/delivery.php:455 ../../include/notifier.php:677 msgid "(no subject)" msgstr "" #: ../../include/delivery.php:462 ../../include/enotify.php:23 -#: ../../include/notifier.php:666 +#: ../../include/notifier.php:684 msgid "noreply" msgstr "" @@ -6449,7 +6449,7 @@ msgstr "" msgid "End this session" msgstr "" -#: ../../include/nav.php:49 ../../boot.php:1482 +#: ../../include/nav.php:49 ../../boot.php:1501 msgid "Status" msgstr "" @@ -7278,18 +7278,18 @@ msgstr "" msgid "Events this week:" msgstr "" -#: ../../boot.php:1485 +#: ../../boot.php:1504 msgid "Status Messages and Posts" msgstr "" -#: ../../boot.php:1491 +#: ../../boot.php:1510 msgid "Profile Details" msgstr "" -#: ../../boot.php:1506 +#: ../../boot.php:1525 msgid "Events and Calendar" msgstr "" -#: ../../boot.php:1512 +#: ../../boot.php:1531 msgid "Only You Can See This" msgstr "" 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 @@ 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 @@ -
+ 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 }}
+
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 826acc7ef..c556dcead 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -1963,23 +1963,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); @@ -1992,20 +1998,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; diff --git a/view/theme/slackr/style.css b/view/theme/slackr/style.css index abb431ab9..41f4e58ee 100644 --- a/view/theme/slackr/style.css +++ b/view/theme/slackr/style.css @@ -52,10 +52,70 @@ nav #site-location { box-shadow: 3px 3px 10px -2px #000000; } -.contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img { +.contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img, .photo-album-photo, .photo-top-photo { border-radius: 3px; -moz-border-radius: 3px; box-shadow: 3px 3px 10px 0 #000000; } +.photo-top-photo, .photo-album-photo { + padding: 10px; + max-width: 300px; +} + +.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); +} From bd3c0edf34488736e04bb04d02e4bc393cbbd13a Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Mon, 21 May 2012 21:29:18 -0400 Subject: [PATCH 057/164] updates to dispy family; fix typo in INSTALL.txt Signed-off-by: Simon L'nu --- INSTALL.txt | 2 +- view/theme/dispy/dark/style.css | 45 ++++---- view/theme/dispy/dark/style.less | 156 ++++++++++++++-------------- view/theme/dispy/dark/theme.php | 16 +-- view/theme/dispy/light/_base.less | 3 +- view/theme/dispy/light/connect.png | Bin 443 -> 0 bytes view/theme/dispy/light/style.css | 45 ++++---- view/theme/dispy/light/style.less | 159 +++++++++++++++-------------- view/theme/dispy/light/theme.php | 12 +-- 9 files changed, 226 insertions(+), 212 deletions(-) delete mode 100644 view/theme/dispy/light/connect.png diff --git a/INSTALL.txt b/INSTALL.txt index 86076a09a..c36c846a1 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -223,7 +223,7 @@ Retry the installation. As soon as the database has been created, % chmod 755 .htconfig.php ##################################################################### -- Some congiurations with "suhosin" security are configured without +- 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. ##################################################################### diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index 3bb30be83..59c893176 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -37,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;} @@ -55,9 +56,9 @@ h6{font-size:xx-small;} .action{margin:5px 0;} .tool{margin:5px 0;list-style:none;} #articlemain{width:100%;height:100%;margin:0 auto;} -.button,#profile-listing-desc{color:#eeeecc;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} -.button a,#profile-listing-desc a{color:#eeeecc;font-weight:bold;} -[class$="-desc"],[id$="-desc"]{color:#eeeecc;background:#2e2f2e;border:1px outset #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:3px outset #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;} #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;} @@ -105,9 +106,9 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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,#mini-search-text{background:#2e2f2e;color:#eeeecc;margin:8px;} -#search-text{border:1px solid #eeeecc;} -#mini-search-text{font-size:8pt;height:14px;width:10em;} +#search-text,#mini-search-text{background:white;color:#eeeecc;margin:8px;} +#search-text{border:1px solid #eeeeee;margin:8px 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-label{font-size:small;padding:3px 20px 9px 5px;height:10px;} @@ -120,7 +121,7 @@ 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 #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{position:absolute;display:none;background:white;color:#2e2f2e;margin:0px;padding:0px;font-size:small;line-height:1.1;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;} @@ -155,7 +156,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;} @@ -187,10 +188,10 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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:20px;font-size:0.8em;min-width:475px;width:67%;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{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;} -.tab.active{background:#eeeecc;color:#2e2f2e;border:1px solid #638ec4;}.tab.active:hover{background:#2e3436;color:#eeeecc;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{} @@ -243,7 +244,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;} @@ -317,17 +318,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;} @@ -389,18 +389,19 @@ 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;} +.group-selected,.nets-selected,.fileas-selected{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;}.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;} +.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:#eeeecc;background:#2e3436;border:1px solid #638ec4;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;} +#side-peoplefind-url{border:1px solid #999999;margin-right:3px;width:75%;} .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;} #netsearch-box{margin:20px 0px 30px;width:135px;}#netsearch-box #search-submit{margin:5px 5px 0px 0px;} diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less index 4967ac9c2..a9b881c55 100644 --- a/view/theme/dispy/dark/style.less +++ b/view/theme/dispy/dark/style.less @@ -190,7 +190,7 @@ label { 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); @@ -198,10 +198,14 @@ 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"] { @@ -280,30 +284,35 @@ h6 { .box(100%, 100%); margin: 0 auto; } -.button, -#profile-listing-desc { +.button { // .box(25%, auto); // background: @menu_bg_colour; color: @main_colour; // .borders(2px, outset, darken(@menu_bg_colour, 20%)); - // .rounded_corners; + .rounded_corners; padding: 5px; // font-size: smaller; cursor: pointer; - &.active { - .box_shadow(4px, 4px, 7px); - } + // &.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: @main_colour; background: @bg_colour; - .borders(1px, outset, @main_colour); + .borders(3px, outset, @main_colour); .rounded_corners; // .box_shadow(3px, 3px, 5px); margin: 3px 10px 7px 0; @@ -658,17 +667,19 @@ nav #nav-notifications-linkmenu { } #search-text, #mini-search-text { - background: @bg_colour; + background: white; color: @main_colour; margin: 8px; } #search-text { - .borders; + .borders(1px, solid, @main_alt_colour); + margin: 8px 0; } #mini-search-text { font-size: 8pt; height: 14px; width: 10em; + margin: 5px; } #scrollup { position: fixed; @@ -754,11 +765,13 @@ nav #nav-notifications-linkmenu { .menu-popup { position: absolute; display: none; - width: 11em; + // width: 11em; background: white; color: @bg_colour; margin: 0px; padding: 0px; + font-size: small; + line-height: 1.1; .borders(3px, solid, @link_colour); .rounded_corners; z-index: 100000; @@ -1016,7 +1029,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 { @@ -1226,34 +1239,45 @@ nav #nav-notifications-linkmenu { font-size: smaller; } } -.tab { +.multibutton () { .borders(1px, solid, @hover_colour); padding: 4px; - &:hover, - &:active { + .rounded_corners; + &:active, + &:hover { background: @shiny_colour; color: @main_colour; .borders(1px, solid, @hover_colour); } - &.active { - background: @main_colour; - color: @bg_colour; - .borders(1px, solid, @hover_colour); - &:hover { - background: @shiny_colour; - color: @main_colour; - .borders(1px, solid, @hover_colour); - } - a { - color: @bg_colour; - text-decoration: none; - } - } 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; + } +} +.tab { + .multibutton; +} +.tab { + &.active { + .multibutton_active; + } +} /** @@ -1595,7 +1619,6 @@ div { } &[id$="wrapper"] { height: 100%; - margin-bottom: 1em; br { clear: left; } @@ -1933,11 +1956,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; @@ -1956,20 +1974,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; } } @@ -2001,13 +2024,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 { @@ -2020,12 +2042,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; } @@ -2320,19 +2336,20 @@ div { .group-selected, .nets-selected, .fileas-selected { - padding: 3px; - color: @bg_colour; - background: @main_colour; - .borders(1px, solid, @link_colour); -} -.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: @main_colour; + // .borders(1px, solid, @link_colour); + .multibutton_active; } +// .group-selected:hover, +// .nets-selected:hover, +// .fileas-selected:hover { +// padding: 4px; +// color: @link_colour; +// background: @bg_colour; +// .borders(1px, solid, @link_colour); +// } .groupsideedit { margin-right: 10px; } @@ -2350,13 +2367,8 @@ div { } } .sidebar-group-element { - padding: 3px; - &:hover { - color: @main_colour; - background: @shiny_colour; - .borders(1px, solid, @hover_colour); - padding: 3px; - } + .multibutton; + .rounded_corners; } #sidebar-new-group { margin: auto; @@ -2380,17 +2392,9 @@ 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%)); - } } .nets-ul { .list_reset; diff --git a/view/theme/dispy/dark/theme.php b/view/theme/dispy/dark/theme.php index 339c477a0..e156b6a7d 100644 --- a/view/theme/dispy/dark/theme.php +++ b/view/theme/dispy/dark/theme.php @@ -1,19 +1,19 @@ -* Maintainer: Simon -* Screenshot: Screenshot -*/ + * Name: Dispy Dark + * Description: Dispy Dark: Dark, Spartan, Sleek, and Functional + * Version: 1.2.1 + * Author: Simon + * Maintainer: Simon + * Screenshot: Screenshot + */ $a = get_app(); $a->theme_info = array( 'family' => 'dispy', 'name' => 'dark', - 'version' => '1.2' + 'version' => '1.2.1' ); function dispy_dark_init(&$a) { diff --git a/view/theme/dispy/light/_base.less b/view/theme/dispy/light/_base.less index 70576145c..3046c1bac 100644 --- a/view/theme/dispy/light/_base.less +++ b/view/theme/dispy/light/_base.less @@ -59,7 +59,8 @@ @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; diff --git a/view/theme/dispy/light/connect.png b/view/theme/dispy/light/connect.png deleted file mode 100644 index b76fc13dce9eee21d5a9449f80e21444c801cabe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv_ZP)!~>``3MAvsy{nQinWJDuHZx1&Pfqp!=gT=cM`lKyLI}%}9ZNh)BkQeJ zD-LE{Z8zYYZ2}8steO=om6>6HveX4oNah=j|4kQ32q`FWJ0A6G+T71AW8BLI{g#n%)co^zxF;6@}Xd-KJ@J z*f;V#UviF9U;=aoESTAybB*10yM6x+81~9Q^J{Dah|#Y}+9^vDFbnMc2B?x^%wK^~ l;NdT49F&>aKJXyv-~)f?rYbayUt9nH002ovPDHLkV1mQvvw#2q diff --git a/view/theme/dispy/light/style.css b/view/theme/dispy/light/style.css index bd4088b06..bd3da3189 100644 --- a/view/theme/dispy/light/style.css +++ b/view/theme/dispy/light/style.css @@ -37,8 +37,9 @@ 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:#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: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;} +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;} @@ -55,9 +56,9 @@ h6{font-size:xx-small;} .action{margin:5px 0;} .tool{margin:5px 0;list-style:none;} #articlemain{width:100%;height:100%;margin:0 auto;} -.button,#profile-listing-desc{color:#111111;padding:5px;cursor:pointer;}.button.active,#profile-listing-desc.active{-moz-box-shadow:4px 4px 7px 0px #111111;-o-box-shadow:4px 4px 7px 0px #111111;-webkit-box-shadow:4px 4px 7px 0px #111111;-ms-box-shadow:4px 4px 7px 0px #111111;box-shadow:4px 4px 7px 0px #111111;} -.button a,#profile-listing-desc a{color:#111111;font-weight:bold;} -[class$="-desc"],[id$="-desc"]{color:#eeeeec;background:#2e3436;border:1px outset #eeeeec;-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:3px 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;} @@ -106,8 +107,8 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm .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,#mini-search-text{background:white;color:#111111;margin:8px;} -#search-text{border:1px solid #999999;} -#mini-search-text{font-size:8pt;height:14px;width:10em;} +#search-text{border:1px solid #999999;margin:8px 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-label{font-size:small;padding:3px 20px 9px 5px;height:10px;} @@ -120,7 +121,7 @@ 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:#111111;margin:0px;padding:0px;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{position:absolute;display:none;background:white;color:#111111;margin:0px;padding:0px;font-size:small;line-height:1.1;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;} @@ -140,7 +141,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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: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;} @@ -155,7 +156,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #profile-jot-text_tbl{margin-bottom:10px;background:#808080;} #profile-jot-text_ifr{width:99.900002% !important;} #profile-jot-text_toolbargroup,.mceCenter tr{background:#808080;} -[id$="jot-text_ifr"]{width:99.900002% !important;color:#111111;background:#eeeeec;}[id$="jot-text_ifr"] .mceContentBody{color:#111111;background:#eeeeec;} +[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;} @@ -187,10 +188,10 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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:20px;font-size:0.8em;min-width:475px;width:67%;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{background:#f2f2c3;color:#111111;border:1px solid #284d7d;} -.tab.active{background:#2e3436;color:#eeeeec;border:1px solid #284d7d;}.tab.active:hover{background:#f2f2c3;color:#111111;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{} @@ -243,7 +244,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm .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%;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;} @@ -317,17 +318,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 #444444;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;} @@ -389,18 +389,19 @@ 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:#2e3436;border:1px solid #3465a4;} -.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{padding:3px;color:#3465a4;background:#eeeeec;border:1px solid #3465a4;} +.group-selected,.nets-selected,.fileas-selected{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;}.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{background:#f2f2c3;color:#111111;border:1px solid #284d7d;} +.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;border:1px solid #284d7d;padding:3px;} +.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:#666666;border:1px solid #666666;margin-right:3px;width:75%;}#side-peoplefind-url:hover,#side-peoplefind-url:focus{background-color:#999999;color:#eeeeec;border:1px solid #111111;} +#side-peoplefind-url{border:1px solid #666666;margin-right:3px;width:75%;} .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;} #netsearch-box{margin:20px 0px 30px;width:135px;}#netsearch-box #search-submit{margin:5px 5px 0px 0px;} diff --git a/view/theme/dispy/light/style.less b/view/theme/dispy/light/style.less index 92c8547ee..d8bd922cc 100644 --- a/view/theme/dispy/light/style.less +++ b/view/theme/dispy/light/style.less @@ -191,7 +191,7 @@ label { 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); @@ -199,10 +199,14 @@ 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"] { @@ -281,30 +285,35 @@ h6 { .box(100%, 100%); margin: 0 auto; } -.button, -#profile-listing-desc { +.button { // .box(25%, auto); // background: @menu_bg_colour; color: @main_colour; // .borders(2px, outset, darken(@menu_bg_colour, 20%)); - // .rounded_corners; + .rounded_corners; padding: 5px; // font-size: smaller; cursor: pointer; - &.active { - .box_shadow(4px, 4px, 7px); - } + // &.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(1px, outset, @bg_colour); + .borders(3px, outset, @main_colour); .rounded_corners; // .box_shadow(3px, 3px, 5px); margin: 3px 10px 7px 0; @@ -569,6 +578,9 @@ div.jGrowl div { padding-left: 58px; margin-top: 50px; } + // &.jGrowl-message { + + // } } #nav-notifications-menu { margin: 30px 0 0 -20px; @@ -662,11 +674,13 @@ nav #nav-notifications-linkmenu { } #search-text { .borders(1px, solid, @main_alt_colour); + margin: 8px 0; } #mini-search-text { font-size: 8pt; height: 14px; width: 10em; + margin: 5px; } #scrollup { position: fixed; @@ -752,11 +766,13 @@ nav #nav-notifications-linkmenu { .menu-popup { position: absolute; display: none; - width: 11em; + // width: 11em; background: white; color: @main_colour; margin: 0px; padding: 0px; + font-size: small; + line-height: 1.1; .borders(3px, solid, @link_colour); .rounded_corners; z-index: 100000; @@ -904,11 +920,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; @@ -1014,7 +1030,7 @@ nav #nav-notifications-linkmenu { background: darken(@main_alt_colour, 10%); } [id$="jot-text_ifr"] { - width: 99.900002% !important; + // width: 99.900002% !important; color: @main_colour; background: @bg_colour; .mceContentBody { @@ -1224,34 +1240,45 @@ nav #nav-notifications-linkmenu { font-size: smaller; } } -.tab { +.multibutton () { .borders(1px, solid, @hover_colour); padding: 4px; - &:hover, - &:active { + .rounded_corners; + &:active, + &:hover { background: @shiny_colour; color: @main_colour; .borders(1px, solid, @hover_colour); } - &.active { - background: @dk_bg_colour; - color: @bg_colour; - .borders(1px, solid, @hover_colour); - &:hover { - background: @shiny_colour; - color: @main_colour; - .borders(1px, solid, @hover_colour); - } - a { - color: @bg_colour; - text-decoration: none; - } - } 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; + } +} +.tab { + .multibutton; +} +.tab { + &.active { + .multibutton_active; + } +} /** @@ -1593,7 +1620,6 @@ div { } &[id$="wrapper"] { height: 100%; - margin-bottom: 1em; br { clear: left; } @@ -1931,11 +1957,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; @@ -1954,20 +1975,25 @@ div { } .contact-photo-menu { width: auto; - .borders(2px, solid, darken(@main_alt_colour, 33.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: @bg_colour; + line-height: 1; &:hover { - color: white; - background: #3465A4; + background: @link_colour; + color: @bg_colour; text-decoration: none; } } @@ -1999,13 +2025,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 { @@ -2018,12 +2043,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; } @@ -2318,19 +2337,20 @@ div { .group-selected, .nets-selected, .fileas-selected { - padding: 3px; - color: @bg_colour; - background: @dk_bg_colour; - .borders(1px, solid, @link_colour); -} -.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: @dk_bg_colour; + // .borders(1px, solid, @hover_colour); + .multibutton_active; } +// .group-selected:hover, +// .nets-selected:hover, +// .fileas-selected:hover { +// padding: 4px; +// color: @link_colour; +// background: @bg_colour; +// .borders(1px, solid, @link_colour); +// } .groupsideedit { margin-right: 10px; } @@ -2348,13 +2368,8 @@ div { } } .sidebar-group-element { - padding: 3px; - &:hover { - color: @main_colour; - background: @shiny_colour; - .borders(1px, solid, @hover_colour); - padding: 3px; - } + .multibutton; + .rounded_corners; } #sidebar-new-group { margin: auto; @@ -2378,17 +2393,9 @@ div { } } #side-peoplefind-url { - background-color: @bg_colour; - color: darken(@main_alt_colour, 20%); .borders(1px, solid, darken(@main_alt_colour, 20%)); margin-right: 3px; width: 75%; - &:hover, - &:focus { - background-color: @main_alt_colour; - color: @bg_colour; - .borders(1px, solid, @main_colour); - } } .nets-ul { .list_reset; diff --git a/view/theme/dispy/light/theme.php b/view/theme/dispy/light/theme.php index 2b37c0671..df3cca042 100644 --- a/view/theme/dispy/light/theme.php +++ b/view/theme/dispy/light/theme.php @@ -1,9 +1,9 @@ Dispy: Light, Spartan, Sleek, and Functional
Dispy Dark: Dark, Spartan, Sleek, and Functional

- * Version: 1.2 + * Name: Dispy Light + * Description: Dispy Light: Light, Spartan, Sleek, and Functional + * Version: 1.2.1 * Author: Simon * Maintainer: Simon * Screenshot: Screenshot @@ -13,7 +13,7 @@ $a = get_app(); $a->theme_info = array( 'family' => 'dispy', 'name' => 'light', - 'version' => '1.2' + 'version' => '1.2.1' ); function dispy_light_init(&$a) { @@ -21,10 +21,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('', $cssFile); } From d466c9ab08bb843d0f31d3b555ada738d8dd0a0e Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Mon, 21 May 2012 21:38:53 -0400 Subject: [PATCH 058/164] fix (min-)search-text text Signed-off-by: Simon L'nu --- view/theme/dispy/dark/style.css | 2 +- view/theme/dispy/dark/style.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index 59c893176..6f29ef1f4 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -106,7 +106,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #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,#mini-search-text{background:white;color:#eeeecc;margin:8px;} +#search-text,#mini-search-text{background:white;color:#2e2f2e;margin:8px;} #search-text{border:1px solid #eeeeee;margin:8px 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;} diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less index a9b881c55..000918a9b 100644 --- a/view/theme/dispy/dark/style.less +++ b/view/theme/dispy/dark/style.less @@ -668,7 +668,7 @@ nav #nav-notifications-linkmenu { #search-text, #mini-search-text { background: white; - color: @main_colour; + color: @bg_colour; margin: 8px; } #search-text { From a16382529135a76c5afaf4d4189856734a8e7f58 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 21 May 2012 22:54:39 -0700 Subject: [PATCH 059/164] redir links for permission controlled attachments --- include/conversation.php | 1 + include/text.php | 38 ++++++++++++++++++++++---------------- mod/item.php | 16 ++++++---------- mod/redir.php | 2 +- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/include/conversation.php b/include/conversation.php index 6bf673b97..dc574ddff 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -174,6 +174,7 @@ function localize_item(&$item){ } } + } /** diff --git a/include/text.php b/include/text.php index e3c683338..e93c24ef4 100644 --- a/include/text.php +++ b/include/text.php @@ -901,24 +901,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 = '
'; - break; - default: - $icon = '
'; - break; - } - $title = ((strlen(trim($matches[4]))) ? escape_tags(trim($matches[4])) : escape_tags($matches[1])); - $title .= ' ' . $matches[2] . ' ' . t('bytes'); + foreach($matches as $mtch) { + $icontype = strtolower(substr($mtch[3],0,strpos($mtch[3],'/'))); + switch($icontype) { + case 'video': + case 'audio': + case 'image': + case 'text': + $icon = '
'; + break; + default: + $icon = '
'; + 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 .= '' . $icon . ''; + $s .= '' . $icon . ''; + } } } $s .= '
'; diff --git a/mod/item.php b/mod/item.php index 9f6b2aef4..81dd553cd 100644 --- a/mod/item.php +++ b/mod/item.php @@ -290,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)) { @@ -311,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 { @@ -322,8 +320,6 @@ function item_post(&$a) { $contact_record = $r[0]; } - - $post_type = notags(trim($_REQUEST['type'])); if($post_type === 'net-comment') { 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]; From 5dad99888d4d67fd10e777b074a77f01f65018aa Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 22 May 2012 11:56:49 +0200 Subject: [PATCH 060/164] fix setting array values to config items --- include/config.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/include/config.php b/include/config.php index 4cff38090..12fc9cafc 100644 --- a/include/config.php +++ b/include/config.php @@ -77,11 +77,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' ) ", From be64437b147259d6eac0d5455de7c435eee450e6 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 22 May 2012 12:17:01 +0200 Subject: [PATCH 061/164] DE: update to the strings and some mail templates --- view/de/intro_complete_eml.tpl | 16 +- view/de/messages.po | 871 +++++++++++++++++---------------- view/de/register_open_eml.tpl | 28 +- view/de/strings.php | 103 ++-- 4 files changed, 535 insertions(+), 483 deletions(-) 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 52b127f39..9de04e860 100644 --- a/view/de/messages.po +++ b/view/de/messages.po @@ -8,7 +8,7 @@ # Fabian Dost , 2012. # , 2012. # , 2012. -# , 2011. +# , 2011, 2012. # , 2012. # , 2012. # Martin Schmitt , 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-14 10:00-0700\n" -"PO-Revision-Date: 2012-05-15 08:40+0000\n" +"POT-Creation-Date: 2012-05-21 10:00-0700\n" +"PO-Revision-Date: 2012-05-22 07:02+0000\n" "Last-Translator: bavatar \n" "Language-Team: German (http://www.transifex.net/projects/p/friendica/language/de/)\n" "MIME-Version: 1.0\n" @@ -51,8 +51,8 @@ msgstr "Konnte den Kontakt nicht aktualisieren." #: ../../mod/api.php:31 ../../mod/photos.php:130 ../../mod/photos.php:865 #: ../../mod/editpost.php:10 ../../mod/install.php:171 #: ../../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:104 ../../mod/settings.php:535 +#: ../../mod/settings.php:540 ../../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 @@ -66,8 +66,8 @@ msgstr "Konnte den Kontakt nicht aktualisieren." #: ../../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 +#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:503 +#: ../../include/items.php:3214 ../../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 jetzt, 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:643 ../../mod/admin.php:652 +#: ../../mod/crepair.php:148 ../../mod/settings.php:555 +#: ../../mod/settings.php:581 ../../mod/admin.php:643 ../../mod/admin.php:652 msgid "Name" msgstr "Name" @@ -135,16 +135,16 @@ 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/photos.php:1200 ../../mod/photos.php:1240 +#: ../../mod/photos.php:1280 ../../mod/photos.php:1311 #: ../../mod/install.php:251 ../../mod/install.php:289 #: ../../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/settings.php:553 ../../mod/settings.php:699 +#: ../../mod/settings.php:760 ../../mod/settings.php:964 #: ../../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/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 @@ -162,11 +162,11 @@ 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:103 #: ../../view/theme/cleanzero/config.php:80 @@ -217,7 +217,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" @@ -232,7 +232,7 @@ msgid "link to source" msgstr "Link zum Originalbeitrag" #: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:126 -#: ../../include/nav.php:52 ../../boot.php:1503 +#: ../../include/nav.php:52 ../../boot.php:1522 msgid "Events" msgstr "Veranstaltungen" @@ -291,8 +291,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:826 ../../mod/settings.php:554 +#: ../../mod/settings.php:580 ../../addon/js_upload/js_upload.php:45 msgid "Cancel" msgstr "Abbrechen" @@ -335,40 +335,40 @@ 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:814 +#: ../../mod/settings.php:875 ../../mod/settings.php:881 +#: ../../mod/settings.php:889 ../../mod/settings.php:893 +#: ../../mod/settings.php:898 ../../mod/settings.php:904 +#: ../../mod/settings.php:910 ../../mod/settings.php:916 +#: ../../mod/settings.php:952 ../../mod/settings.php:953 +#: ../../mod/settings.php:954 ../../mod/settings.php:955 +#: ../../mod/register.php:511 ../../mod/profiles.php:511 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:815 +#: ../../mod/settings.php:875 ../../mod/settings.php:881 +#: ../../mod/settings.php:889 ../../mod/settings.php:893 +#: ../../mod/settings.php:898 ../../mod/settings.php:904 +#: ../../mod/settings.php:910 ../../mod/settings.php:916 +#: ../../mod/settings.php:952 ../../mod/settings.php:953 +#: ../../mod/settings.php:954 ../../mod/settings.php:955 +#: ../../mod/register.php:512 ../../mod/profiles.php:512 msgid "No" msgstr "Nein" -#: ../../mod/photos.php:43 ../../boot.php:1497 +#: ../../mod/photos.php:43 ../../boot.php:1516 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 +#: ../../mod/photos.php:950 ../../mod/photos.php:965 ../../mod/photos.php:1389 +#: ../../mod/photos.php:1401 ../../addon/communityhome/communityhome.php:110 #: ../../view/theme/diabook/theme.php:593 msgid "Contact Photos" msgstr "Kontaktbilder" -#: ../../mod/photos.php:58 ../../mod/photos.php:975 ../../mod/photos.php:1424 +#: ../../mod/photos.php:58 ../../mod/photos.php:975 ../../mod/photos.php:1438 msgid "Upload New Photos" msgstr "Weitere Fotos hochladen" @@ -381,8 +381,8 @@ 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/photos.php:965 ../../mod/register.php:314 +#: ../../mod/register.php:321 ../../mod/register.php:328 #: ../../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 @@ -399,7 +399,7 @@ msgstr "Album nicht gefunden." msgid "Delete Album" msgstr "Album löschen" -#: ../../mod/photos.php:242 ../../mod/photos.php:1194 +#: ../../mod/photos.php:242 ../../mod/photos.php:1201 msgid "Delete Photo" msgstr "Foto löschen" @@ -410,7 +410,7 @@ msgstr "wurde getaggt in einem" #: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 #: ../../view/theme/diabook/theme.php:565 ../../include/text.php:1305 -#: ../../include/diaspora.php:1654 ../../include/conversation.php:53 +#: ../../include/diaspora.php:1662 ../../include/conversation.php:53 #: ../../include/conversation.php:126 msgid "photo" msgstr "Foto" @@ -438,7 +438,7 @@ 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/dfrn_request.php:740 ../../mod/viewcontacts.php:17 #: ../../mod/display.php:7 ../../mod/search.php:71 ../../mod/directory.php:29 msgid "Public access denied." msgstr "Öffentlicher Zugriff verweigert." @@ -467,7 +467,7 @@ msgstr "oder existierender Albumname: " 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:914 ../../mod/photos.php:1196 msgid "Permissions" msgstr "Berechtigungen" @@ -475,109 +475,109 @@ msgstr "Berechtigungen" msgid "Edit Album" msgstr "Album bearbeiten" -#: ../../mod/photos.php:984 ../../mod/photos.php:1407 +#: ../../mod/photos.php:991 ../../mod/photos.php:1421 msgid "View Photo" msgstr "Fotos betrachten" -#: ../../mod/photos.php:1019 +#: ../../mod/photos.php:1026 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:1028 msgid "Photo not available" msgstr "Foto nicht verfügbar" -#: ../../mod/photos.php:1071 +#: ../../mod/photos.php:1078 msgid "View photo" msgstr "Fotos ansehen" -#: ../../mod/photos.php:1071 +#: ../../mod/photos.php:1078 msgid "Edit photo" msgstr "Foto bearbeiten" -#: ../../mod/photos.php:1072 +#: ../../mod/photos.php:1079 msgid "Use as profile photo" msgstr "Als Profilbild verwenden" -#: ../../mod/photos.php:1078 ../../include/conversation.php:483 +#: ../../mod/photos.php:1085 ../../include/conversation.php:483 msgid "Private Message" msgstr "Private Nachricht" -#: ../../mod/photos.php:1100 +#: ../../mod/photos.php:1107 msgid "View Full Size" msgstr "Betrachte Originalgröße" -#: ../../mod/photos.php:1168 +#: ../../mod/photos.php:1175 msgid "Tags: " msgstr "Tags: " -#: ../../mod/photos.php:1171 +#: ../../mod/photos.php:1178 msgid "[Remove any tag]" msgstr "[Tag entfernen]" -#: ../../mod/photos.php:1182 +#: ../../mod/photos.php:1189 msgid "New album name" msgstr "Name des neuen Albums" -#: ../../mod/photos.php:1185 +#: ../../mod/photos.php:1192 msgid "Caption" msgstr "Bildunterschrift" -#: ../../mod/photos.php:1187 +#: ../../mod/photos.php:1194 msgid "Add a Tag" msgstr "Tag hinzufügen" -#: ../../mod/photos.php:1191 +#: ../../mod/photos.php:1198 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:532 +#: ../../mod/photos.php:1218 ../../include/conversation.php:532 msgid "I like this (toggle)" msgstr "Ich mag das (toggle)" -#: ../../mod/photos.php:1212 ../../include/conversation.php:533 +#: ../../mod/photos.php:1219 ../../include/conversation.php:533 msgid "I don't like this (toggle)" msgstr "Ich mag das nicht (toggle)" -#: ../../mod/photos.php:1213 ../../include/conversation.php:967 +#: ../../mod/photos.php:1220 ../../include/conversation.php:967 msgid "Share" msgstr "Teilen" -#: ../../mod/photos.php:1214 ../../mod/editpost.php:104 +#: ../../mod/photos.php:1221 ../../mod/editpost.php:104 #: ../../mod/wallmessage.php:145 ../../mod/message.php:214 #: ../../mod/message.php:408 ../../include/conversation.php:364 #: ../../include/conversation.php:709 ../../include/conversation.php:986 msgid "Please wait" msgstr "Bitte warten" -#: ../../mod/photos.php:1230 ../../mod/photos.php:1270 -#: ../../mod/photos.php:1301 ../../include/conversation.php:555 +#: ../../mod/photos.php:1237 ../../mod/photos.php:1277 +#: ../../mod/photos.php:1308 ../../include/conversation.php:555 msgid "This is you" msgstr "Das bist du" -#: ../../mod/photos.php:1232 ../../mod/photos.php:1272 -#: ../../mod/photos.php:1303 ../../include/conversation.php:557 +#: ../../mod/photos.php:1239 ../../mod/photos.php:1279 +#: ../../mod/photos.php:1310 ../../include/conversation.php:557 #: ../../boot.php:516 msgid "Comment" msgstr "Kommentar" -#: ../../mod/photos.php:1234 ../../mod/editpost.php:125 +#: ../../mod/photos.php:1241 ../../mod/editpost.php:125 #: ../../include/conversation.php:567 ../../include/conversation.php:1004 msgid "Preview" msgstr "Vorschau" -#: ../../mod/photos.php:1331 ../../mod/settings.php:602 -#: ../../mod/settings.php:683 ../../mod/group.php:168 ../../mod/admin.php:647 +#: ../../mod/photos.php:1338 ../../mod/settings.php:616 +#: ../../mod/settings.php:697 ../../mod/group.php:168 ../../mod/admin.php:647 #: ../../include/conversation.php:321 ../../include/conversation.php:587 msgid "Delete" msgstr "Löschen" -#: ../../mod/photos.php:1413 +#: ../../mod/photos.php:1427 msgid "View Album" msgstr "Album betrachten" -#: ../../mod/photos.php:1422 +#: ../../mod/photos.php:1436 msgid "Recent Photos" msgstr "Neueste Fotos" @@ -590,7 +590,7 @@ msgstr "Nicht verfügbar." msgid "Community" msgstr "Gemeinschaft" -#: ../../mod/community.php:61 ../../mod/search.php:128 +#: ../../mod/community.php:61 ../../mod/search.php:138 msgid "No results." msgstr "Keine Ergebnisse." @@ -606,7 +606,7 @@ msgstr "die unter folgender Webadresse zu finden ist" msgid "" "Please visit Friendica.com to learn " "more about the Friendica project." -msgstr "Bitte besuche Friendica.com um mehr über das Friendica Projekt zu erfahren." +msgstr "Bitte besuche Friendica.com, um mehr über das Friendica Projekt zu erfahren." #: ../../mod/friendica.php:60 msgid "Bug reports and issues: please visit" @@ -638,7 +638,7 @@ msgstr "Beitrag bearbeiten" msgid "Post to Email" msgstr "An E-Mail senden" -#: ../../mod/editpost.php:95 ../../mod/settings.php:601 +#: ../../mod/editpost.php:95 ../../mod/settings.php:615 #: ../../include/conversation.php:574 msgid "Edit" msgstr "Bearbeiten" @@ -707,19 +707,19 @@ 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:117 ../../mod/dfrn_request.php:495 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:122 ../../mod/dfrn_request.php:500 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:124 ../../mod/dfrn_request.php:502 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:127 ../../mod/dfrn_request.php:505 #, 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" @@ -763,128 +763,128 @@ msgstr "Ungültige E-Mail Adresse." 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:440 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:453 msgid "You have already introduced yourself here." msgstr "Du hast dich hier bereits vorgestellt." -#: ../../mod/dfrn_request.php:449 +#: ../../mod/dfrn_request.php:457 #, 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:478 msgid "Invalid profile URL." msgstr "Ungültige Profil-URL." -#: ../../mod/dfrn_request.php:476 ../../mod/follow.php:23 +#: ../../mod/dfrn_request.php:484 ../../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:553 ../../mod/contacts.php:102 msgid "Failed to update contact record." msgstr "Aktualisierung der Kontaktdaten fehlgeschlagen." -#: ../../mod/dfrn_request.php:566 +#: ../../mod/dfrn_request.php:574 msgid "Your introduction has been sent." msgstr "Deine Kontaktanfrage wurde gesendet." -#: ../../mod/dfrn_request.php:619 +#: ../../mod/dfrn_request.php:627 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:641 msgid "" "Incorrect identity currently logged in. Please login to " "this profile." msgstr "Momentan bist du mit einer anderen Identität angemeldet. Bitte melde Dich mit diesem Profil an." -#: ../../mod/dfrn_request.php:645 +#: ../../mod/dfrn_request.php:653 #, php-format msgid "Welcome home %s." msgstr "Willkommen zurück %s." -#: ../../mod/dfrn_request.php:646 +#: ../../mod/dfrn_request.php:654 #, 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:655 msgid "Confirm" msgstr "Bestätigen" -#: ../../mod/dfrn_request.php:688 ../../include/items.php:2717 +#: ../../mod/dfrn_request.php:696 ../../include/items.php:2729 msgid "[Name Withheld]" msgstr "[Name unterdrückt]" -#: ../../mod/dfrn_request.php:781 +#: ../../mod/dfrn_request.php:789 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:805 msgid "Connect as an email follower (Coming soon)" msgstr "Als E-Mail-Kontakt verbinden (In Kürze verfügbar)" -#: ../../mod/dfrn_request.php:799 +#: ../../mod/dfrn_request.php:807 msgid "" "If you are not yet a member of the free social web, follow this link to find a public" " Friendica site and join us today." msgstr "Wenn du noch kein Mitglied dieses freien sozialen Netzwerks bist, folge diesem Link um einen öffentlichen Friendica-Server zu finden und beizutreten." -#: ../../mod/dfrn_request.php:802 +#: ../../mod/dfrn_request.php:810 msgid "Friend/Connection Request" msgstr "Freundschafts-/Kontaktanfrage" -#: ../../mod/dfrn_request.php:803 +#: ../../mod/dfrn_request.php:811 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:812 msgid "Please answer the following:" msgstr "Bitte beantworte Folgendes:" -#: ../../mod/dfrn_request.php:805 +#: ../../mod/dfrn_request.php:813 #, php-format msgid "Does %s know you?" msgstr "Kennt %s dich?" -#: ../../mod/dfrn_request.php:808 +#: ../../mod/dfrn_request.php:816 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:818 ../../include/contact_selectors.php:76 msgid "Friendica" msgstr "Friendica" -#: ../../mod/dfrn_request.php:811 +#: ../../mod/dfrn_request.php:819 msgid "StatusNet/Federated Social Web" msgstr "StatusNet/Federated Social Web" -#: ../../mod/dfrn_request.php:812 ../../mod/settings.php:636 +#: ../../mod/dfrn_request.php:820 ../../mod/settings.php:650 #: ../../include/contact_selectors.php:80 msgid "Diaspora" msgstr "Diaspora" -#: ../../mod/dfrn_request.php:813 +#: ../../mod/dfrn_request.php:821 #, 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:822 msgid "Your Identity Address:" msgstr "Adresse deines Profils:" -#: ../../mod/dfrn_request.php:817 +#: ../../mod/dfrn_request.php:825 msgid "Submit Request" msgstr "Anfrage abschicken" @@ -895,7 +895,7 @@ 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" +msgstr "Datenbankverbindung" #: ../../mod/install.php:124 msgid "Could not connect to database." @@ -1127,7 +1127,7 @@ 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 msgid "Errors encountered creating database tables." @@ -1184,7 +1184,7 @@ msgstr "ist interessiert an:" 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" @@ -1364,11 +1364,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." @@ -1489,7 +1489,7 @@ 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 +1525,7 @@ msgstr "Kontakt Editor" #: ../../mod/contacts.php:323 msgid "Profile Visibility" -msgstr "Profil Anzeige" +msgstr "Profil-Sichtbarkeit" #: ../../mod/contacts.php:324 #, php-format @@ -1701,11 +1701,12 @@ 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:2726 +#: ../../mod/register.php:367 ../../mod/register.php:421 +#: ../../mod/regmod.php:54 ../../mod/dfrn_confirm.php:745 +#: ../../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:2738 #: ../../boot.php:696 msgid "Administrator" msgstr "Administrator" @@ -1762,11 +1763,11 @@ msgstr "Zurücksetzen" #: ../../mod/settings.php:49 ../../include/nav.php:137 msgid "Account settings" -msgstr "Account Einstellungen" +msgstr "Account-Einstellungen" #: ../../mod/settings.php:54 msgid "Display settings" -msgstr "Anzeige Einstellungen" +msgstr "Anzeige-Einstellungen" #: ../../mod/settings.php:60 msgid "Connector settings" @@ -1798,7 +1799,7 @@ msgstr "Einstellungen" msgid "Missing some important data!" msgstr "Wichtige Daten fehlen!" -#: ../../mod/settings.php:134 ../../mod/settings.php:565 +#: ../../mod/settings.php:134 ../../mod/settings.php:579 msgid "Update" msgstr "Aktualisierungen" @@ -1842,418 +1843,434 @@ msgstr " Keine gültige E-Mail." 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:448 +msgid "Private forum has no privacy permissions. Using default privacy group." +msgstr "" + +#: ../../mod/settings.php:452 +msgid "Private forum has no privacy permissions and no default privacy group." +msgstr "" + +#: ../../mod/settings.php:482 ../../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:552 ../../mod/settings.php:578 +#: ../../mod/settings.php:614 msgid "Add application" msgstr "Programm hinzufügen" -#: ../../mod/settings.php:542 ../../mod/settings.php:568 -#: ../../addon/statusnet/statusnet.php:547 +#: ../../mod/settings.php:556 ../../mod/settings.php:582 +#: ../../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:557 ../../mod/settings.php:583 +#: ../../addon/statusnet/statusnet.php:554 msgid "Consumer Secret" msgstr "Consumer Secret" -#: ../../mod/settings.php:544 ../../mod/settings.php:570 +#: ../../mod/settings.php:558 ../../mod/settings.php:584 msgid "Redirect" msgstr "Umleiten" -#: ../../mod/settings.php:545 ../../mod/settings.php:571 +#: ../../mod/settings.php:559 ../../mod/settings.php:585 msgid "Icon url" msgstr "Icon URL" -#: ../../mod/settings.php:556 +#: ../../mod/settings.php:570 msgid "You can't edit this application." msgstr "Du kannst dieses Programm nicht bearbeiten." -#: ../../mod/settings.php:599 +#: ../../mod/settings.php:613 msgid "Connected Apps" msgstr "Verbundene Programme" -#: ../../mod/settings.php:603 +#: ../../mod/settings.php:617 msgid "Client key starts with" -msgstr "Anwender Schlüssel beginnt mit" +msgstr "Anwenderschlüssel beginnt mit" -#: ../../mod/settings.php:604 +#: ../../mod/settings.php:618 msgid "No name" msgstr "Kein Name" -#: ../../mod/settings.php:605 +#: ../../mod/settings.php:619 msgid "Remove authorization" msgstr "Autorisierung entziehen" -#: ../../mod/settings.php:616 +#: ../../mod/settings.php:630 msgid "No Plugin settings configured" msgstr "Keine Plugin-Einstellungen konfiguriert" -#: ../../mod/settings.php:624 ../../addon/widgets/widgets.php:123 +#: ../../mod/settings.php:638 ../../addon/widgets/widgets.php:123 msgid "Plugin Settings" msgstr "Plugin-Einstellungen" -#: ../../mod/settings.php:636 ../../mod/settings.php:637 +#: ../../mod/settings.php:650 ../../mod/settings.php:651 #, 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:650 ../../mod/settings.php:651 msgid "enabled" msgstr "eingeschaltet" -#: ../../mod/settings.php:636 ../../mod/settings.php:637 +#: ../../mod/settings.php:650 ../../mod/settings.php:651 msgid "disabled" msgstr "ausgeschaltet" -#: ../../mod/settings.php:637 +#: ../../mod/settings.php:651 msgid "StatusNet" msgstr "StatusNet" -#: ../../mod/settings.php:667 +#: ../../mod/settings.php:681 msgid "Connector Settings" msgstr "Verbindungs-Einstellungen" -#: ../../mod/settings.php:672 +#: ../../mod/settings.php:686 msgid "Email/Mailbox Setup" msgstr "E-Mail/Postfach-Einstellungen" -#: ../../mod/settings.php:673 +#: ../../mod/settings.php:687 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:688 msgid "Last successful email check:" msgstr "Letzter erfolgreicher Email Check" -#: ../../mod/settings.php:675 +#: ../../mod/settings.php:689 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:690 msgid "IMAP server name:" msgstr "IMAP-Server-Name:" -#: ../../mod/settings.php:677 +#: ../../mod/settings.php:691 msgid "IMAP port:" msgstr "IMAP-Port:" -#: ../../mod/settings.php:678 +#: ../../mod/settings.php:692 msgid "Security:" msgstr "Sicherheit:" -#: ../../mod/settings.php:678 ../../mod/settings.php:683 +#: ../../mod/settings.php:692 ../../mod/settings.php:697 msgid "None" msgstr "Keine" -#: ../../mod/settings.php:679 +#: ../../mod/settings.php:693 msgid "Email login name:" msgstr "E-Mail-Login-Name:" -#: ../../mod/settings.php:680 +#: ../../mod/settings.php:694 msgid "Email password:" msgstr "E-Mail-Passwort:" -#: ../../mod/settings.php:681 +#: ../../mod/settings.php:695 msgid "Reply-to address:" msgstr "Reply-to Adresse:" -#: ../../mod/settings.php:682 +#: ../../mod/settings.php:696 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:697 msgid "Action after import:" msgstr "Aktion nach Import:" -#: ../../mod/settings.php:683 +#: ../../mod/settings.php:697 msgid "Mark as seen" msgstr "Als gelesen markieren" -#: ../../mod/settings.php:683 +#: ../../mod/settings.php:697 msgid "Move to folder" msgstr "In einen Ordner verschieben" -#: ../../mod/settings.php:684 +#: ../../mod/settings.php:698 msgid "Move to folder:" msgstr "In diesen Ordner verschieben:" -#: ../../mod/settings.php:744 +#: ../../mod/settings.php:758 msgid "Display Settings" -msgstr "Anzeige Einstellungen" +msgstr "Anzeige-Einstellungen" -#: ../../mod/settings.php:750 +#: ../../mod/settings.php:764 msgid "Display Theme:" msgstr "Theme:" -#: ../../mod/settings.php:751 +#: ../../mod/settings.php:765 msgid "Update browser every xx seconds" msgstr "Browser alle xx Sekunden aktualisieren" -#: ../../mod/settings.php:751 +#: ../../mod/settings.php:765 msgid "Minimum of 10 seconds, no maximum" msgstr "Minimal 10 Sekunden, kein Maximum" -#: ../../mod/settings.php:752 +#: ../../mod/settings.php:766 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:766 msgid "Maximum of 100 items" msgstr "Maximal 100 Beiträge" -#: ../../mod/settings.php:753 +#: ../../mod/settings.php:767 msgid "Don't show emoticons" msgstr "Keine Smilies anzeigen" -#: ../../mod/settings.php:821 ../../mod/admin.php:180 ../../mod/admin.php:621 +#: ../../mod/settings.php:835 ../../mod/admin.php:180 ../../mod/admin.php:621 msgid "Normal Account" msgstr "Normaler Account" -#: ../../mod/settings.php:822 +#: ../../mod/settings.php:836 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:622 +#: ../../mod/settings.php:839 ../../mod/admin.php:181 ../../mod/admin.php:622 msgid "Soapbox Account" msgstr "Sandkasten-Account" -#: ../../mod/settings.php:826 +#: ../../mod/settings.php:840 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:623 +#: ../../mod/settings.php:843 ../../mod/admin.php:182 ../../mod/admin.php:623 msgid "Community/Celebrity Account" -msgstr "Gemeinschafts/Promi-Account" +msgstr "Gemeinschafts-/Promi-Account" -#: ../../mod/settings.php:830 +#: ../../mod/settings.php:844 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:624 +#: ../../mod/settings.php:847 ../../mod/admin.php:183 ../../mod/admin.php:624 msgid "Automatic Friend Account" msgstr "Automatischer Freundesaccount" -#: ../../mod/settings.php:834 +#: ../../mod/settings.php:848 msgid "Automatically approve all connection/friend requests as friends" msgstr "Kontaktanfragen werden automatisch als Freund akzeptiert" -#: ../../mod/settings.php:844 +#: ../../mod/settings.php:851 +msgid "Private Forum" +msgstr "" + +#: ../../mod/settings.php:852 +msgid "Private forum - approved members only [Experimental]" +msgstr "" + +#: ../../mod/settings.php:865 msgid "OpenID:" msgstr "OpenID:" -#: ../../mod/settings.php:844 +#: ../../mod/settings.php:865 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:875 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:881 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:889 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:893 msgid "Hide your profile details from unknown viewers?" msgstr "Profil-Details vor unbekannten Betrachtern verbergen?" -#: ../../mod/settings.php:877 +#: ../../mod/settings.php:898 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:904 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:910 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:916 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:927 msgid "Profile is not published." msgstr "Profil ist nicht veröffentlicht." -#: ../../mod/settings.php:912 ../../mod/profile_photo.php:211 +#: ../../mod/settings.php:933 ../../mod/profile_photo.php:211 msgid "or" msgstr "oder" -#: ../../mod/settings.php:917 +#: ../../mod/settings.php:938 msgid "Your Identity Address is" msgstr "Die Adresse deines Profils lautet:" -#: ../../mod/settings.php:928 +#: ../../mod/settings.php:949 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:949 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:950 msgid "Advanced expiration settings" msgstr "Erweiterte Verfallseinstellungen" -#: ../../mod/settings.php:930 +#: ../../mod/settings.php:951 msgid "Advanced Expiration" msgstr "Erweitertes Verfallen" -#: ../../mod/settings.php:931 +#: ../../mod/settings.php:952 msgid "Expire posts:" msgstr "Beiträge verfallen lassen:" -#: ../../mod/settings.php:932 +#: ../../mod/settings.php:953 msgid "Expire personal notes:" msgstr "Persönliche Notizen verfallen lassen:" -#: ../../mod/settings.php:933 +#: ../../mod/settings.php:954 msgid "Expire starred posts:" msgstr "Markierte Beiträge verfallen lassen:" -#: ../../mod/settings.php:934 +#: ../../mod/settings.php:955 msgid "Expire photos:" msgstr "Fotos verfallen lassen:" -#: ../../mod/settings.php:938 +#: ../../mod/settings.php:962 msgid "Account Settings" msgstr "Account-Einstellungen" -#: ../../mod/settings.php:947 +#: ../../mod/settings.php:970 msgid "Password Settings" msgstr "Passwort-Einstellungen" -#: ../../mod/settings.php:948 +#: ../../mod/settings.php:971 msgid "New Password:" msgstr "Neues Passwort:" -#: ../../mod/settings.php:949 +#: ../../mod/settings.php:972 msgid "Confirm:" msgstr "Bestätigen:" -#: ../../mod/settings.php:949 +#: ../../mod/settings.php:972 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:976 msgid "Basic Settings" msgstr "Grundeinstellungen" -#: ../../mod/settings.php:954 ../../include/profile_advanced.php:15 +#: ../../mod/settings.php:977 ../../include/profile_advanced.php:15 msgid "Full Name:" msgstr "Kompletter Name:" -#: ../../mod/settings.php:955 +#: ../../mod/settings.php:978 msgid "Email Address:" msgstr "Emailadresse:" -#: ../../mod/settings.php:956 +#: ../../mod/settings.php:979 msgid "Your Timezone:" msgstr "Deine Zeitzone:" -#: ../../mod/settings.php:957 +#: ../../mod/settings.php:980 msgid "Default Post Location:" msgstr "Standardstandort:" -#: ../../mod/settings.php:958 +#: ../../mod/settings.php:981 msgid "Use Browser Location:" msgstr "Verwende den Standort des Browsers:" -#: ../../mod/settings.php:961 +#: ../../mod/settings.php:984 msgid "Security and Privacy Settings" msgstr "Sicherheits- und Privatsphäre-Einstellungen" -#: ../../mod/settings.php:963 +#: ../../mod/settings.php:986 msgid "Maximum Friend Requests/Day:" msgstr "Maximale Anzahl von Freundschaftsanfragen/Tag:" -#: ../../mod/settings.php:963 ../../mod/settings.php:978 +#: ../../mod/settings.php:986 ../../mod/settings.php:1005 msgid "(to prevent spam abuse)" msgstr "(um SPAM zu vermeiden)" -#: ../../mod/settings.php:964 +#: ../../mod/settings.php:987 msgid "Default Post Permissions" msgstr "Standard-Zugriffsrechte für Beiträge" -#: ../../mod/settings.php:965 +#: ../../mod/settings.php:988 msgid "(click to open/close)" msgstr "(klicke zum öffnen/schließen)" -#: ../../mod/settings.php:978 +#: ../../mod/settings.php:1005 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:1008 msgid "Notification Settings" msgstr "Benachrichtigungseinstellungen" -#: ../../mod/settings.php:982 +#: ../../mod/settings.php:1009 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:1010 msgid "accepting a friend request" msgstr "– du eine Kontaktanfrage akzeptierst" -#: ../../mod/settings.php:984 +#: ../../mod/settings.php:1011 msgid "joining a forum/community" msgstr "– du einem Forum/einer Gemeinschaftsseite beitrittst" -#: ../../mod/settings.php:985 +#: ../../mod/settings.php:1012 msgid "making an interesting profile change" msgstr "– du eine interessante Änderung an deinem Profil durchführst" -#: ../../mod/settings.php:986 +#: ../../mod/settings.php:1013 msgid "Send a notification email when:" msgstr "Benachrichtigungs-E-Mail senden wenn:" -#: ../../mod/settings.php:987 +#: ../../mod/settings.php:1014 msgid "You receive an introduction" msgstr "– du eine Kontaktanfrage erhältst" -#: ../../mod/settings.php:988 +#: ../../mod/settings.php:1015 msgid "Your introductions are confirmed" msgstr "– eine deiner Kontaktanfragen akzeptiert wurde" -#: ../../mod/settings.php:989 +#: ../../mod/settings.php:1016 msgid "Someone writes on your profile wall" msgstr "– jemand etwas auf deine Pinnwand schreibt" -#: ../../mod/settings.php:990 +#: ../../mod/settings.php:1017 msgid "Someone writes a followup comment" msgstr "– jemand auch einen Kommentar verfasst" -#: ../../mod/settings.php:991 +#: ../../mod/settings.php:1018 msgid "You receive a private message" msgstr "– du eine private Nachricht erhältst" -#: ../../mod/settings.php:992 +#: ../../mod/settings.php:1019 msgid "You receive a friend suggestion" msgstr "- du eine Empfehlung erhältst" -#: ../../mod/settings.php:993 +#: ../../mod/settings.php:1020 msgid "You are tagged in a post" msgstr "- du in einem Beitrag erwähnt wurdest" -#: ../../mod/settings.php:996 +#: ../../mod/settings.php:1023 msgid "Advanced Page Settings" msgstr "Erweiterte Seiten-Einstellungen" @@ -2283,7 +2300,7 @@ 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" @@ -2367,12 +2384,12 @@ msgstr "Private Nachrichten an diese Person könnten an die Öffentlichkeit gela msgid "Invalid contact." msgstr "Ungültiger Kontakt." -#: ../../mod/notes.php:44 ../../boot.php:1509 +#: ../../mod/notes.php:44 ../../boot.php:1528 msgid "Personal Notes" msgstr "Persönliche Notizen" #: ../../mod/notes.php:63 ../../mod/filer.php:30 -#: ../../addon/facebook/facebook.php:748 +#: ../../addon/facebook/facebook.php:756 #: ../../addon/privacy_image_cache/privacy_image_cache.php:147 #: ../../include/text.php:652 msgid "Save" @@ -2537,7 +2554,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 "" @@ -2618,7 +2635,7 @@ msgstr "Editor für die Profil-Sichtbarkeit" #: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:123 #: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:74 -#: ../../include/nav.php:50 ../../boot.php:1488 +#: ../../include/nav.php:50 ../../boot.php:1507 msgid "Profile" msgstr "Profil" @@ -2684,7 +2701,7 @@ msgid "" "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 +#: ../../mod/register.php:153 ../../mod/register.php:243 msgid "Nickname is already registered. Please choose another." msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen." @@ -2694,124 +2711,124 @@ msgid "" "another." msgstr "Dieser Spitzname ist bereits vergeben. Bitte wähle einen anderen." -#: ../../mod/register.php:182 +#: ../../mod/register.php:179 msgid "SERIOUS ERROR: Generation of security keys failed." msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden." -#: ../../mod/register.php:250 +#: ../../mod/register.php:229 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 +#: ../../mod/register.php:265 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." +msgstr "Bei der Erstellung des Standardprofils ist ein Fehler aufgetreten. Bitte versuche es noch einmal." -#: ../../mod/register.php:386 ../../mod/regmod.php:52 +#: ../../mod/register.php:365 ../../mod/regmod.php:52 #, php-format msgid "Registration details for %s" msgstr "Details der Registration von %s" -#: ../../mod/register.php:394 +#: ../../mod/register.php:373 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:377 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:382 msgid "Your registration can not be processed." msgstr "Deine Registrierung konnte nicht verarbeitet werden." -#: ../../mod/register.php:440 +#: ../../mod/register.php:419 #, php-format msgid "Registration request at %s" msgstr "Registrierungsanfrage auf %s" -#: ../../mod/register.php:449 +#: ../../mod/register.php:428 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:466 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:492 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:493 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:494 msgid "Your OpenID (optional): " msgstr "Deine OpenID (optional): " -#: ../../mod/register.php:529 +#: ../../mod/register.php:508 msgid "Include your profile in member directory?" msgstr "Soll dein Profil im Nutzerverzeichnis angezeigt werden?" -#: ../../mod/register.php:549 +#: ../../mod/register.php:528 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:529 msgid "Your invitation ID: " msgstr "ID deiner Einladung: " -#: ../../mod/register.php:553 ../../mod/admin.php:405 +#: ../../mod/register.php:532 ../../mod/admin.php:405 msgid "Registration" msgstr "Registrierung" -#: ../../mod/register.php:561 +#: ../../mod/register.php:540 msgid "Your Full Name (e.g. Joe Smith): " msgstr "Vollständiger Name (z.B. Max Mustermann): " -#: ../../mod/register.php:562 +#: ../../mod/register.php:541 msgid "Your Email Address: " msgstr "Deine E-Mail-Adresse: " -#: ../../mod/register.php:563 +#: ../../mod/register.php:542 msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be " "'nickname@$sitename'." msgstr "Wähle einen Spitznamen für dein Profil. Dieser muss mit einem Buchstaben beginnen. Die Adresse deines Profils auf dieser Seite wird 'spitzname@$sitename' sein." -#: ../../mod/register.php:564 +#: ../../mod/register.php:543 msgid "Choose a nickname: " msgstr "Spitznamen wählen: " -#: ../../mod/register.php:567 ../../include/nav.php:81 ../../boot.php:794 +#: ../../mod/register.php:546 ../../include/nav.php:81 ../../boot.php:794 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:560 -#: ../../view/theme/diabook/theme.php:569 ../../include/diaspora.php:1654 +#: ../../view/theme/diabook/theme.php:569 ../../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:574 ../../include/diaspora.php:1670 +#: ../../view/theme/diabook/theme.php:574 ../../include/diaspora.php:1678 #: ../../include/conversation.php:65 #, php-format msgid "%1$s likes %2$s's %3$s" @@ -2824,7 +2841,7 @@ msgstr "%1$s mag %2$ss %3$s nicht" #: ../../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/display.php:142 ../../include/items.php:3096 msgid "Item not found." msgstr "Beitrag nicht gefunden." @@ -2833,7 +2850,7 @@ msgid "Access denied." msgstr "Zugriff verweigert." #: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:125 -#: ../../include/nav.php:51 ../../boot.php:1494 +#: ../../include/nav.php:51 ../../boot.php:1513 msgid "Photos" msgstr "Bilder" @@ -2858,39 +2875,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:381 ../../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:790 msgid "System error. Post not saved." msgstr "Systemfehler. Beitrag konnte nicht gespeichert werden." -#: ../../mod/item.php:806 +#: ../../mod/item.php:815 #, 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:817 #, 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:818 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:820 #, php-format msgid "%s posted an update." msgstr "%s hat ein Update veröffentlicht." @@ -3053,7 +3070,7 @@ 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:403 msgid "Site" @@ -3153,7 +3170,7 @@ msgstr "Regeln" msgid "Advanced" msgstr "Erweitert" -#: ../../mod/admin.php:412 ../../addon/statusnet/statusnet.php:544 +#: ../../mod/admin.php:412 ../../addon/statusnet/statusnet.php:552 msgid "Site name" msgstr "Seitenname" @@ -3203,7 +3220,7 @@ msgstr "Registrierungstext" #: ../../mod/admin.php:420 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:421 msgid "Accounts abandoned after x days" @@ -3345,7 +3362,7 @@ msgstr "SSL Ãœberprüfen" 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:437 msgid "Proxy user" @@ -3372,17 +3389,17 @@ 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:441 msgid "Poll interval" -msgstr "Abfrage Intervall" +msgstr "Abfrageintervall" #: ../../mod/admin.php:441 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." +msgstr "Verzögere Hintergrundprozesse, um diese Anzahl an Sekunden um die Systemlast zu reduzieren. Bei 0 Sekunden wird das Auslieferungsintervall verwendet." #: ../../mod/admin.php:442 msgid "Maximum Load Average" @@ -3478,7 +3495,7 @@ msgstr "Neuanmeldungen, die auf deine Bestätigung warten" #: ../../mod/admin.php:643 msgid "Request date" -msgstr "Anfrage Datum" +msgstr "Anfragedatum" #: ../../mod/admin.php:643 ../../mod/admin.php:652 #: ../../include/contact_selectors.php:79 @@ -3735,11 +3752,11 @@ msgid "" "notifications from you." msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können." -#: ../../mod/follow.php:160 +#: ../../mod/follow.php:161 msgid "Unable to retrieve contact information." msgstr "Konnte die Kontaktinformationen nicht empfangen." -#: ../../mod/follow.php:206 +#: ../../mod/follow.php:216 msgid "following" msgstr "folgen" @@ -3763,9 +3780,9 @@ 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: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 @@ -3833,6 +3850,11 @@ msgstr "öffentliches Profil" msgid "%1$s changed %2$s to “%3$s”" msgstr "%1$s hat %2$s geändert auf “%3$s”" +#: ../../mod/profiles.php:332 +#, php-format +msgid " - Visit %1$s's %2$s" +msgstr "" + #: ../../mod/profiles.php:335 #, php-format msgid "%1$s has an updated %2$s, changing %3$s." @@ -3961,7 +3983,7 @@ msgstr "Beispiel: Fischen Fotografie Software" #: ../../mod/profiles.php:559 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 msgid "(Used for searching profiles, never shown to others)" @@ -4214,164 +4236,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:235 msgid "Response from remote site was not understood." msgstr "Antwort der Gegenstelle unverständlich." -#: ../../mod/dfrn_confirm.php:251 +#: ../../mod/dfrn_confirm.php:244 msgid "Unexpected response from remote site: " msgstr "Unerwartete Antwort der Gegenstelle: " -#: ../../mod/dfrn_confirm.php:259 +#: ../../mod/dfrn_confirm.php:252 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:254 ../../mod/dfrn_confirm.php:268 +#: ../../mod/dfrn_confirm.php:275 msgid "Remote site reported: " msgstr "Gegenstelle meldet: " -#: ../../mod/dfrn_confirm.php:273 +#: ../../mod/dfrn_confirm.php:266 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:273 msgid "Introduction failed or was revoked." msgstr "Kontaktanfrage schlug fehl oder wurde zurück gezogen." -#: ../../mod/dfrn_confirm.php:425 +#: ../../mod/dfrn_confirm.php:418 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:475 ../../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:557 #, 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:567 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:578 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:599 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:613 #, 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:633 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:644 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:709 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:743 #, php-format msgid "Connection accepted at %s" msgstr "Auf %s wurde die Verbindung akzeptiert" -#: ../../mod/dfrn_confirm.php:789 +#: ../../mod/dfrn_confirm.php:792 #, 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 "Das verlinken von Facebook-Kontakten wurde auf dieser Seite deaktiviert. Die folgenden Einstellungen haben keinen Effekt." +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 "Das verlinken von Facebook-Kontakten wurde auf dieser Seite deaktiviert. Wenn du es ausgeschaltet hast, kannst du es nicht wieder aktivieren." +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 profile wall and your friend" " stream." msgstr "Facebook-Konversationen bestehen aus deinen Beiträgen auf deinerPinnwand, sowie den Beiträgen deiner Freunde Stream." -#: ../../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 " @@ -4379,120 +4401,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.

" 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.

" -#: ../../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" @@ -4614,7 +4636,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" @@ -4839,7 +4861,7 @@ 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/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" @@ -4856,6 +4878,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 "" + +#: ../../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 "Datei hochladen" @@ -4925,7 +4965,7 @@ msgstr "Das Impressums-Plugin muss noch konfiguriert werden.
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" @@ -4933,7 +4973,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." @@ -4951,7 +4991,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" @@ -5014,7 +5054,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" @@ -5047,7 +5087,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" @@ -5115,16 +5155,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" @@ -5282,14 +5317,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" @@ -5356,30 +5391,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 "" + +#: ../../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 "\"Mehr zeigen\" Einstellungen" @@ -5491,14 +5534,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" @@ -5590,7 +5633,7 @@ msgstr "Veröffentliche öffentliche Beiträge standardmäßig bei Posterous" #: ../../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)" @@ -5811,7 +5854,7 @@ msgid "j F" msgstr "j F" #: ../../include/profile_advanced.php:30 ../../include/datetime.php:448 -#: ../../include/items.php:1413 +#: ../../include/items.php:1419 msgid "Birthday:" msgstr "Geburtstag:" @@ -6187,12 +6230,12 @@ msgstr "Beginnt:" msgid "Finishes:" msgstr "Endet:" -#: ../../include/delivery.php:452 ../../include/notifier.php:652 +#: ../../include/delivery.php:455 ../../include/notifier.php:677 msgid "(no subject)" msgstr "(kein Betreff)" -#: ../../include/delivery.php:459 ../../include/enotify.php:23 -#: ../../include/notifier.php:659 +#: ../../include/delivery.php:462 ../../include/enotify.php:23 +#: ../../include/notifier.php:684 msgid "noreply" msgstr "noreply" @@ -6223,10 +6266,6 @@ 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 msgid "Monday" msgstr "Montag" @@ -6351,15 +6390,15 @@ msgstr "Beitrag" 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:2160 #, php-format msgid "[Relayed] Comment authored by %s from network %s" msgstr "[Weitergeleitet] Kommentar von %s aus dem %s Netzwerk" @@ -6383,27 +6422,31 @@ 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 könnten 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 "" + +#: ../../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" @@ -6415,7 +6458,7 @@ msgstr "Abmelden" msgid "End this session" msgstr "Diese Sitzung beenden" -#: ../../include/nav.php:49 ../../boot.php:1482 +#: ../../include/nav.php:49 ../../boot.php:1501 msgid "Status" msgstr "Status" @@ -6473,7 +6516,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" @@ -6586,7 +6629,7 @@ msgstr "Abgemeldet." 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 msgid "The error message was:" @@ -6878,11 +6921,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:2724 +#: ../../include/items.php:2736 msgid "A new person is sharing with you at " msgstr "Eine neue Person teilt mit dir auf " -#: ../../include/items.php:2724 +#: ../../include/items.php:2736 msgid "You have a new follower at " msgstr "Du hast einen neuen Kontakt auf " @@ -6911,7 +6954,7 @@ 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" @@ -6932,7 +6975,7 @@ msgstr "Bilder anschauen" #: ../../include/Contact.php:206 ../../include/Contact.php:219 #: ../../include/conversation.php:823 msgid "Network Posts" -msgstr "Netzwerk-Beiträge" +msgstr "Netzwerkbeiträge" #: ../../include/Contact.php:207 ../../include/Contact.php:219 #: ../../include/conversation.php:824 @@ -7244,18 +7287,18 @@ msgstr "Veranstaltungserinnerungen" msgid "Events this week:" msgstr "Veranstaltungen diese Woche" -#: ../../boot.php:1485 +#: ../../boot.php:1504 msgid "Status Messages and Posts" msgstr "Statusnachrichten und Beiträge" -#: ../../boot.php:1491 +#: ../../boot.php:1510 msgid "Profile Details" msgstr "Profildetails" -#: ../../boot.php:1506 +#: ../../boot.php:1525 msgid "Events and Calendar" msgstr "Ereignisse und Kalender" -#: ../../boot.php:1512 +#: ../../boot.php:1531 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..f217decd3 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 grundlegenden Informationen in deinem Standart-Profil (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 Profil-Bild 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 f6336ef68..7c127894a 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["WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working."] = "ACHTUNG: Das sind Experten-Einstellungen! Wenn Du etwas Falsches eingibst, funktioniert die Kommunikation mit diesem Kontakt evtl. nicht mehr."; $a->strings["Please use your browser 'Back' button now if you are uncertain what to do on this page."] = "Bitte nutze den Zurück-Button deines Browsers jetzt, 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"; @@ -117,7 +117,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 Friendica.com to learn more about the Friendica project."] = "Bitte besuche Friendica.com um mehr über das Friendica Projekt zu erfahren."; +$a->strings["Please visit Friendica.com to learn more about the Friendica project."] = "Bitte besuche Friendica.com, 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"; @@ -185,7 +185,7 @@ $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["Database connection"] = "Datenbankverbindung"; $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."; @@ -235,7 +235,7 @@ $a->strings["This is most often a permission setting, as the web server may not $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[".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["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["l F d, Y \\@ g:i A"] = "l F d, Y \\@ g:i A"; $a->strings["Time Conversion"] = "Zeitumrechnung"; @@ -288,8 +288,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 +320,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 +329,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 +383,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 +403,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."] = ""; +$a->strings["Private forum has no privacy permissions and no default privacy group."] = ""; $a->strings["Settings updated."] = "Einstellungen aktualisiert."; $a->strings["Add application"] = "Programm hinzufügen"; $a->strings["Consumer Key"] = "Consumer Key"; @@ -411,7 +413,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,7 +439,7 @@ $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"; @@ -448,10 +450,12 @@ $a->strings["Normal Account"] = "Normaler Account"; $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["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/Celebrity Account"] = "Gemeinschafts-/Promi-Account"; $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["Automatically approve all connection/friend requests as friends"] = "Kontaktanfragen werden automatisch als Freund akzeptiert"; +$a->strings["Private Forum"] = ""; +$a->strings["Private forum - approved members only [Experimental]"] = ""; $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?"; @@ -491,7 +495,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 interesting profile change"] = "– du eine interessante Änderung an deinem Profil durchführst"; @@ -562,7 +566,7 @@ $a->strings["Edit your default 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 Add New Contact 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 Neuen Kontakt hinzufügen ein."; $a->strings["The Directory page lets you find other people in this network or other federated sites. Look for a Connect or Follow 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 Verbinden oder Folgen 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 help pages may be consulted for detail on other program features and resources."] = "Unsere Hilfe Seiten können herangezogen werden, um weitere Einzelheiten zu andern Programm Features zu erhalten."; $a->strings["Item not available."] = "Beitrag nicht verfügbar."; @@ -601,7 +605,7 @@ $a->strings["Nickname is already registered. Please choose another."] = "Dieser $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["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["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,7 +682,7 @@ $a->strings["No secure communications available. You may 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"; @@ -714,7 +718,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 +748,15 @@ $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["Poll interval"] = "Abfrage Intervall"; -$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["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."] = "Maximale Systemlast bevor Verteil- und Empfangsprozesse verschoben werden - Standard 50"; $a->strings["Update has been marked successful"] = "Update wurde als erfolgreich markiert"; @@ -778,7 +782,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"; @@ -844,7 +848,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"; @@ -861,6 +865,7 @@ $a->strings["Profile updated."] = "Profil aktualisiert."; $a->strings[" and "] = " und "; $a->strings["public profile"] = "öffentliches Profil"; $a->strings["%1\$s changed %2\$s to “%3\$s”"] = "%1\$s hat %2\$s geändert auf “%3\$s”"; +$a->strings[" - Visit %1\$s's %2\$s"] = ""; $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-"; @@ -892,7 +897,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"; @@ -976,8 +981,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."] = "Das verlinken von Facebook-Kontakten 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 Facebook-Kontakten wurde auf dieser Seite deaktiviert. Wenn du es ausgeschaltet hast, kannst du es nicht wieder aktivieren."; +$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 profile wall and your friend stream."] = "Facebook-Konversationen bestehen aus deinen Beiträgen auf deinerPinnwand, sowie den Beiträgen deiner Freunde Stream."; $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."; @@ -985,7 +990,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"; @@ -996,9 +1001,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."; @@ -1042,7 +1047,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"; @@ -1097,6 +1102,9 @@ $a->strings["Post from Friendica"] = "Beitrag via Friendica"; $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."] = ""; +$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"] = ""; $a->strings["Upload a file"] = "Datei hochladen"; $a->strings["Drop files here to upload"] = "Ziehe Dateien hierher, um sie hochzuladen"; $a->strings["Failed"] = "Fehlgeschlagen"; @@ -1112,13 +1120,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!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = "Das Impressums-Plugin muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber 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"; @@ -1133,14 +1141,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 public tile servers"] = "Eine Liste öffentlicher Tile Server"; $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."; @@ -1157,7 +1165,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"; @@ -1192,7 +1199,7 @@ $a->strings["If enabled all your public postings can be posted $a->strings["Note: Due your privacy settings (Hide your profile details from unknown viewers?) 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."] = "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) 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"; @@ -1216,6 +1223,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"] = ""; +$a->strings["Read the original post and comment stream on Friendica"] = ""; $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"; @@ -1238,7 +1247,7 @@ $a->strings["If enabled all your public postings can be posted $a->strings["Note: Due your privacy settings (Hide your profile details from unknown viewers?) 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."] = "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) 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"; @@ -1262,7 +1271,7 @@ $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"; @@ -1411,7 +1420,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"; @@ -1450,6 +1458,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 may 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 könnten 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"] = ""; $a->strings["Everybody"] = "Alle Kontakte"; $a->strings["edit"] = "bearbeiten"; $a->strings["Groups"] = "Gruppen"; @@ -1472,7 +1481,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"; @@ -1502,7 +1511,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"; @@ -1575,12 +1584,12 @@ $a->strings["link"] = "Verweis"; $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"; From f29f861d25c443075c1bd310313aaf52596402a3 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 22 May 2012 03:44:03 -0700 Subject: [PATCH 062/164] add queue totals to admin summary page --- mod/admin.php | 15 ++++++++++++++- view/admin_summary.tpl | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/mod/admin.php b/mod/admin.php index 1f53f112d..d19118b78 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -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), 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 @@ -1,6 +1,10 @@

$title - $page

+
+
$queues.label
+
$queues.deliverq - $queues.queue
+
$pending.0
$pending.1 From 3ce06caeed2e817fe401c4d8283beea17d8a34e4 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 22 May 2012 03:55:11 -0700 Subject: [PATCH 063/164] cause of bogus wall-to-wall posts found --- include/items.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/items.php b/include/items.php index 91c9056fe..e5b640fd2 100644 --- a/include/items.php +++ b/include/items.php @@ -1010,7 +1010,7 @@ function tag_deliver($uid,$item_id) { 'otype' => 'item' )); - if((! $community_page) && (! prvgroup)) + if((! $community_page) && (! $prvgroup)) return; From 18983bb932209336aa4b0e804c936c74e37e4260 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Tue, 22 May 2012 19:14:58 +0100 Subject: [PATCH 064/164] Fix darkzero/ns BB icon background colours. --- view/theme/darkzero-NS/style.css | 8 ++++---- view/theme/darkzero/style.css | 9 +++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/view/theme/darkzero-NS/style.css b/view/theme/darkzero-NS/style.css index 1efe093ed..6dc788f35 100644 --- a/view/theme/darkzero-NS/style.css +++ b/view/theme/darkzero-NS/style.css @@ -146,11 +146,11 @@ blockquote { background:#444; } - - - - .wall-item-content { max-height: 20000px; overflow: none; +} + +.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 6f238bec6..e0155144d 100644 --- a/view/theme/darkzero/style.css +++ b/view/theme/darkzero/style.css @@ -146,3 +146,12 @@ blockquote { background:#444; } +.editicon { + background-color: #333; +} + +/* This seems okay to me...we might not need a new iconset, lets see how people react */ + +.editicon:hover { + background-color: #ccc; +} \ No newline at end of file From b962559570fe3a7381c7721a62989072661f01e9 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Tue, 22 May 2012 19:19:36 +0100 Subject: [PATCH 065/164] Oops - but lets commit the right revision, sorry. There's a spare line in the last one. --- view/theme/darkzero/style.css | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/view/theme/darkzero/style.css b/view/theme/darkzero/style.css index e0155144d..77650a91a 100644 --- a/view/theme/darkzero/style.css +++ b/view/theme/darkzero/style.css @@ -146,12 +146,7 @@ blockquote { background:#444; } +/* This seems okay to me...we might not need a new iconset, lets see how people react */ .editicon { background-color: #333; -} - -/* This seems okay to me...we might not need a new iconset, lets see how people react */ - -.editicon:hover { - background-color: #ccc; } \ No newline at end of file From e70573f34cb6729f45cb020ee9349c8ff948ff3b Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 22 May 2012 16:01:07 -0700 Subject: [PATCH 066/164] if identity (uid) changes - reload any other open browser windows on next ping. --- boot.php | 3 +- js/main.js | 6 +- mod/ping.php | 8 + util/messages.po | 498 ++++++++++++++++++++++++----------------------- view/head.tpl | 1 + 5 files changed, 267 insertions(+), 249 deletions(-) diff --git a/boot.php b/boot.php index 798362d25..e60c60c3b 100644 --- a/boot.php +++ b/boot.php @@ -9,7 +9,7 @@ require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1349' ); +define ( 'FRIENDICA_VERSION', '3.0.1350' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1144 ); @@ -511,6 +511,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'), 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/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) { "; $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 '1'; + 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/util/messages.po b/util/messages.po index 2edd9c281..c5749f0ad 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1349\n" +"Project-Id-Version: 3.0.1350\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-05-21 10:00-0700\n" +"POT-Creation-Date: 2012-05-22 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -85,7 +85,7 @@ msgid "Return to contact editor" msgstr "" #: ../../mod/crepair.php:148 ../../mod/settings.php:555 -#: ../../mod/settings.php:581 ../../mod/admin.php:643 ../../mod/admin.php:652 +#: ../../mod/settings.php:581 ../../mod/admin.php:656 ../../mod/admin.php:665 msgid "Name" msgstr "" @@ -129,9 +129,9 @@ msgstr "" #: ../../mod/localtime.php:45 ../../mod/contacts.php:322 #: ../../mod/settings.php:553 ../../mod/settings.php:699 #: ../../mod/settings.php:760 ../../mod/settings.php:964 -#: ../../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/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:534 #: ../../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 @@ -161,7 +161,7 @@ msgstr "" #: ../../view/theme/diabook/theme.php:752 #: ../../view/theme/diabook/config.php:190 #: ../../view/theme/quattro/config.php:52 ../../view/theme/dispy/config.php:70 -#: ../../include/conversation.php:558 +#: ../../include/conversation.php:559 msgid "Submit" msgstr "" @@ -215,7 +215,7 @@ msgstr "" msgid "Edit event" msgstr "" -#: ../../mod/events.php:300 ../../include/text.php:1054 +#: ../../mod/events.php:300 ../../include/text.php:1060 msgid "link to source" msgstr "" @@ -397,7 +397,7 @@ msgstr "" #: ../../mod/photos.php:528 ../../mod/like.php:127 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 -#: ../../view/theme/diabook/theme.php:565 ../../include/text.php:1305 +#: ../../view/theme/diabook/theme.php:565 ../../include/text.php:1311 #: ../../include/diaspora.php:1662 ../../include/conversation.php:53 #: ../../include/conversation.php:126 msgid "photo" @@ -487,7 +487,7 @@ msgstr "" msgid "Use as profile photo" msgstr "" -#: ../../mod/photos.php:1085 ../../include/conversation.php:483 +#: ../../mod/photos.php:1085 ../../include/conversation.php:484 msgid "Private Message" msgstr "" @@ -519,44 +519,44 @@ msgstr "" msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" -#: ../../mod/photos.php:1218 ../../include/conversation.php:532 +#: ../../mod/photos.php:1218 ../../include/conversation.php:533 msgid "I like this (toggle)" msgstr "" -#: ../../mod/photos.php:1219 ../../include/conversation.php:533 +#: ../../mod/photos.php:1219 ../../include/conversation.php:534 msgid "I don't like this (toggle)" msgstr "" -#: ../../mod/photos.php:1220 ../../include/conversation.php:967 +#: ../../mod/photos.php:1220 ../../include/conversation.php:968 msgid "Share" msgstr "" #: ../../mod/photos.php:1221 ../../mod/editpost.php:104 #: ../../mod/wallmessage.php:145 ../../mod/message.php:214 -#: ../../mod/message.php:408 ../../include/conversation.php:364 -#: ../../include/conversation.php:709 ../../include/conversation.php:986 +#: ../../mod/message.php:408 ../../include/conversation.php:365 +#: ../../include/conversation.php:710 ../../include/conversation.php:987 msgid "Please wait" msgstr "" #: ../../mod/photos.php:1237 ../../mod/photos.php:1277 -#: ../../mod/photos.php:1308 ../../include/conversation.php:555 +#: ../../mod/photos.php:1308 ../../include/conversation.php:556 msgid "This is you" msgstr "" #: ../../mod/photos.php:1239 ../../mod/photos.php:1279 -#: ../../mod/photos.php:1310 ../../include/conversation.php:557 +#: ../../mod/photos.php:1310 ../../include/conversation.php:558 #: ../../boot.php:516 msgid "Comment" msgstr "" #: ../../mod/photos.php:1241 ../../mod/editpost.php:125 -#: ../../include/conversation.php:567 ../../include/conversation.php:1004 +#: ../../include/conversation.php:568 ../../include/conversation.php:1005 msgid "Preview" msgstr "" #: ../../mod/photos.php:1338 ../../mod/settings.php:616 -#: ../../mod/settings.php:697 ../../mod/group.php:168 ../../mod/admin.php:647 -#: ../../include/conversation.php:321 ../../include/conversation.php:587 +#: ../../mod/settings.php:697 ../../mod/group.php:168 ../../mod/admin.php:660 +#: ../../include/conversation.php:322 ../../include/conversation.php:588 msgid "Delete" msgstr "" @@ -621,28 +621,28 @@ msgstr "" msgid "Edit post" msgstr "" -#: ../../mod/editpost.php:80 ../../include/conversation.php:953 +#: ../../mod/editpost.php:80 ../../include/conversation.php:954 msgid "Post to Email" msgstr "" #: ../../mod/editpost.php:95 ../../mod/settings.php:615 -#: ../../include/conversation.php:574 +#: ../../include/conversation.php:575 msgid "Edit" msgstr "" #: ../../mod/editpost.php:96 ../../mod/wallmessage.php:143 #: ../../mod/message.php:212 ../../mod/message.php:406 -#: ../../include/conversation.php:968 +#: ../../include/conversation.php:969 msgid "Upload photo" msgstr "" -#: ../../mod/editpost.php:97 ../../include/conversation.php:970 +#: ../../mod/editpost.php:97 ../../include/conversation.php:971 msgid "Attach file" msgstr "" #: ../../mod/editpost.php:98 ../../mod/wallmessage.php:144 #: ../../mod/message.php:213 ../../mod/message.php:407 -#: ../../include/conversation.php:972 +#: ../../include/conversation.php:973 msgid "Insert web link" msgstr "" @@ -658,35 +658,35 @@ msgstr "" msgid "Insert Vorbis [.ogg] audio" msgstr "" -#: ../../mod/editpost.php:102 ../../include/conversation.php:978 +#: ../../mod/editpost.php:102 ../../include/conversation.php:979 msgid "Set your location" msgstr "" -#: ../../mod/editpost.php:103 ../../include/conversation.php:980 +#: ../../mod/editpost.php:103 ../../include/conversation.php:981 msgid "Clear browser location" msgstr "" -#: ../../mod/editpost.php:105 ../../include/conversation.php:987 +#: ../../mod/editpost.php:105 ../../include/conversation.php:988 msgid "Permission settings" msgstr "" -#: ../../mod/editpost.php:113 ../../include/conversation.php:996 +#: ../../mod/editpost.php:113 ../../include/conversation.php:997 msgid "CC: email addresses" msgstr "" -#: ../../mod/editpost.php:114 ../../include/conversation.php:997 +#: ../../mod/editpost.php:114 ../../include/conversation.php:998 msgid "Public post" msgstr "" -#: ../../mod/editpost.php:117 ../../include/conversation.php:983 +#: ../../mod/editpost.php:117 ../../include/conversation.php:984 msgid "Set title" msgstr "" -#: ../../mod/editpost.php:119 ../../include/conversation.php:985 +#: ../../mod/editpost.php:119 ../../include/conversation.php:986 msgid "Categories (comma-separated list)" msgstr "" -#: ../../mod/editpost.php:120 ../../include/conversation.php:999 +#: ../../mod/editpost.php:120 ../../include/conversation.php:1000 msgid "Example: bob@example.com, mary@example.com" msgstr "" @@ -1263,7 +1263,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 +1464,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 +1562,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 "" @@ -1775,7 +1775,7 @@ msgstr "" msgid "Remove account" msgstr "" -#: ../../mod/settings.php:88 ../../mod/admin.php:735 ../../mod/admin.php:940 +#: ../../mod/settings.php:88 ../../mod/admin.php:748 ../../mod/admin.php:953 #: ../../addon/mathjax/mathjax.php:36 ../../view/theme/diabook/theme.php:638 #: ../../view/theme/diabook/theme.php:768 ../../include/nav.php:137 msgid "Settings" @@ -2011,7 +2011,7 @@ msgstr "" msgid "Don't show emoticons" msgstr "" -#: ../../mod/settings.php:835 ../../mod/admin.php:180 ../../mod/admin.php:621 +#: ../../mod/settings.php:835 ../../mod/admin.php:180 ../../mod/admin.php:634 msgid "Normal Account" msgstr "" @@ -2019,7 +2019,7 @@ msgstr "" msgid "This account is a normal personal profile" msgstr "" -#: ../../mod/settings.php:839 ../../mod/admin.php:181 ../../mod/admin.php:622 +#: ../../mod/settings.php:839 ../../mod/admin.php:181 ../../mod/admin.php:635 msgid "Soapbox Account" msgstr "" @@ -2027,7 +2027,7 @@ msgstr "" msgid "Automatically approve all connection/friend requests as read-only fans" msgstr "" -#: ../../mod/settings.php:843 ../../mod/admin.php:182 ../../mod/admin.php:623 +#: ../../mod/settings.php:843 ../../mod/admin.php:182 ../../mod/admin.php:636 msgid "Community/Celebrity Account" msgstr "" @@ -2035,7 +2035,7 @@ msgstr "" msgid "Automatically approve all connection/friend requests as read-write fans" msgstr "" -#: ../../mod/settings.php:847 ../../mod/admin.php:183 ../../mod/admin.php:624 +#: ../../mod/settings.php:847 ../../mod/admin.php:183 ../../mod/admin.php:637 msgid "Automatic Friend Account" msgstr "" @@ -2410,7 +2410,7 @@ msgid "No recipient." msgstr "" #: ../../mod/wallmessage.php:124 ../../mod/message.php:171 -#: ../../include/conversation.php:921 +#: ../../include/conversation.php:922 msgid "Please enter a link URL:" msgstr "" @@ -2769,7 +2769,7 @@ msgstr "" msgid "Your invitation ID: " msgstr "" -#: ../../mod/register.php:532 ../../mod/admin.php:405 +#: ../../mod/register.php:532 ../../mod/admin.php:418 msgid "Registration" msgstr "" @@ -2825,7 +2825,7 @@ 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/admin.php:697 ../../mod/admin.php:896 ../../mod/display.php:37 #: ../../mod/display.php:142 ../../include/items.php:3096 msgid "Item not found." msgstr "" @@ -2864,34 +2864,34 @@ msgstr "" msgid "Empty post discarded." msgstr "" -#: ../../mod/item.php:381 ../../mod/wall_upload.php:99 +#: ../../mod/item.php:377 ../../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:790 +#: ../../mod/item.php:786 msgid "System error. Post not saved." msgstr "" -#: ../../mod/item.php:815 +#: ../../mod/item.php:811 #, php-format msgid "" "This message was sent to you by %s, a member of the Friendica social network." msgstr "" -#: ../../mod/item.php:817 +#: ../../mod/item.php:813 #, php-format msgid "You may visit them online at %s" msgstr "" -#: ../../mod/item.php:818 +#: ../../mod/item.php:814 msgid "" "Please contact the sender by replying to this post if you do not wish to " "receive these messages." msgstr "" -#: ../../mod/item.php:820 +#: ../../mod/item.php:816 #, php-format msgid "%s posted an update." msgstr "" @@ -3056,19 +3056,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 "" @@ -3080,7 +3080,7 @@ msgstr "" msgid "Software Update" msgstr "" -#: ../../mod/admin.php:115 ../../mod/admin.php:1061 +#: ../../mod/admin.php:115 ../../mod/admin.php:1074 msgid "Logs" msgstr "" @@ -3088,529 +3088,533 @@ 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: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:552 +#: ../../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 - change theme settings" 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 "" @@ -4047,7 +4051,7 @@ msgstr "" msgid "Edit visibility" msgstr "" -#: ../../mod/filer.php:29 ../../include/conversation.php:925 +#: ../../mod/filer.php:29 ../../include/conversation.php:926 msgid "Save to Folder:" msgstr "" @@ -4650,7 +4654,7 @@ msgid "Forums" msgstr "" #: ../../addon/page/page.php:63 ../../addon/showmore/showmore.php:87 -#: ../../include/contact_widgets.php:188 ../../include/conversation.php:469 +#: ../../include/contact_widgets.php:188 ../../include/conversation.php:470 #: ../../boot.php:517 msgid "show more" msgstr "" @@ -4695,7 +4699,7 @@ msgid "Latest likes" msgstr "" #: ../../addon/communityhome/communityhome.php:155 -#: ../../view/theme/diabook/theme.php:557 ../../include/text.php:1303 +#: ../../view/theme/diabook/theme.php:557 ../../include/text.php:1309 #: ../../include/conversation.php:45 ../../include/conversation.php:118 msgid "event" msgstr "" @@ -6333,51 +6337,51 @@ msgstr "" msgid "December" msgstr "" -#: ../../include/text.php:919 +#: ../../include/text.php:920 msgid "bytes" msgstr "" -#: ../../include/text.php:934 ../../include/text.php:949 +#: ../../include/text.php:940 ../../include/text.php:955 msgid "remove" msgstr "" -#: ../../include/text.php:934 ../../include/text.php:949 +#: ../../include/text.php:940 ../../include/text.php:955 msgid "[remove]" msgstr "" -#: ../../include/text.php:937 +#: ../../include/text.php:943 msgid "Categories:" msgstr "" -#: ../../include/text.php:952 +#: ../../include/text.php:958 msgid "Filed under:" msgstr "" -#: ../../include/text.php:968 ../../include/text.php:980 +#: ../../include/text.php:974 ../../include/text.php:986 msgid "Click to open/close" msgstr "" -#: ../../include/text.php:1085 +#: ../../include/text.php:1091 msgid "default" msgstr "" -#: ../../include/text.php:1097 +#: ../../include/text.php:1103 msgid "Select an alternate language" msgstr "" -#: ../../include/text.php:1307 +#: ../../include/text.php:1313 msgid "activity" msgstr "" -#: ../../include/text.php:1309 +#: ../../include/text.php:1315 msgid "comment" msgstr "" -#: ../../include/text.php:1310 +#: ../../include/text.php:1316 msgid "post" msgstr "" -#: ../../include/text.php:1465 +#: ../../include/text.php:1471 msgid "Item filed" msgstr "" @@ -6951,30 +6955,30 @@ msgstr "" msgid "stopped following" msgstr "" -#: ../../include/Contact.php:203 ../../include/conversation.php:820 +#: ../../include/Contact.php:203 ../../include/conversation.php:821 msgid "View Status" msgstr "" -#: ../../include/Contact.php:204 ../../include/conversation.php:821 +#: ../../include/Contact.php:204 ../../include/conversation.php:822 msgid "View Profile" msgstr "" -#: ../../include/Contact.php:205 ../../include/conversation.php:822 +#: ../../include/Contact.php:205 ../../include/conversation.php:823 msgid "View Photos" msgstr "" #: ../../include/Contact.php:206 ../../include/Contact.php:219 -#: ../../include/conversation.php:823 +#: ../../include/conversation.php:824 msgid "Network Posts" msgstr "" #: ../../include/Contact.php:207 ../../include/Contact.php:219 -#: ../../include/conversation.php:824 +#: ../../include/conversation.php:825 msgid "Edit Contact" msgstr "" #: ../../include/Contact.php:208 ../../include/Contact.php:219 -#: ../../include/conversation.php:825 +#: ../../include/conversation.php:826 msgid "Send PM" msgstr "" @@ -6987,216 +6991,216 @@ msgstr "" msgid "%1$s marked %2$s's %3$s as favorite" msgstr "" -#: ../../include/conversation.php:320 ../../include/conversation.php:586 +#: ../../include/conversation.php:321 ../../include/conversation.php:587 msgid "Select" msgstr "" -#: ../../include/conversation.php:337 ../../include/conversation.php:679 -#: ../../include/conversation.php:680 +#: ../../include/conversation.php:338 ../../include/conversation.php:680 +#: ../../include/conversation.php:681 #, php-format msgid "View %s's profile @ %s" msgstr "" -#: ../../include/conversation.php:347 ../../include/conversation.php:691 +#: ../../include/conversation.php:348 ../../include/conversation.php:692 #, php-format msgid "%s from %s" msgstr "" -#: ../../include/conversation.php:362 +#: ../../include/conversation.php:363 msgid "View in context" msgstr "" -#: ../../include/conversation.php:468 +#: ../../include/conversation.php:469 #, php-format msgid "%d comment" msgid_plural "%d comments" msgstr[0] "" msgstr[1] "" -#: ../../include/conversation.php:532 +#: ../../include/conversation.php:533 msgid "like" msgstr "" -#: ../../include/conversation.php:533 +#: ../../include/conversation.php:534 msgid "dislike" msgstr "" -#: ../../include/conversation.php:535 +#: ../../include/conversation.php:536 msgid "Share this" msgstr "" -#: ../../include/conversation.php:535 +#: ../../include/conversation.php:536 msgid "share" msgstr "" -#: ../../include/conversation.php:559 +#: ../../include/conversation.php:560 msgid "Bold" msgstr "" -#: ../../include/conversation.php:560 +#: ../../include/conversation.php:561 msgid "Italic" msgstr "" -#: ../../include/conversation.php:561 +#: ../../include/conversation.php:562 msgid "Underline" msgstr "" -#: ../../include/conversation.php:562 +#: ../../include/conversation.php:563 msgid "Quote" msgstr "" -#: ../../include/conversation.php:563 +#: ../../include/conversation.php:564 msgid "Code" msgstr "" -#: ../../include/conversation.php:564 +#: ../../include/conversation.php:565 msgid "Image" msgstr "" -#: ../../include/conversation.php:565 +#: ../../include/conversation.php:566 msgid "Link" msgstr "" -#: ../../include/conversation.php:566 +#: ../../include/conversation.php:567 msgid "Video" msgstr "" -#: ../../include/conversation.php:599 +#: ../../include/conversation.php:600 msgid "add star" msgstr "" -#: ../../include/conversation.php:600 +#: ../../include/conversation.php:601 msgid "remove star" msgstr "" -#: ../../include/conversation.php:601 +#: ../../include/conversation.php:602 msgid "toggle star status" msgstr "" -#: ../../include/conversation.php:604 +#: ../../include/conversation.php:605 msgid "starred" msgstr "" -#: ../../include/conversation.php:605 +#: ../../include/conversation.php:606 msgid "add tag" msgstr "" -#: ../../include/conversation.php:609 +#: ../../include/conversation.php:610 msgid "save to folder" msgstr "" -#: ../../include/conversation.php:681 +#: ../../include/conversation.php:682 msgid "to" msgstr "" -#: ../../include/conversation.php:682 +#: ../../include/conversation.php:683 msgid "Wall-to-Wall" msgstr "" -#: ../../include/conversation.php:683 +#: ../../include/conversation.php:684 msgid "via Wall-To-Wall:" msgstr "" -#: ../../include/conversation.php:728 +#: ../../include/conversation.php:729 msgid "Delete Selected Items" msgstr "" -#: ../../include/conversation.php:879 +#: ../../include/conversation.php:880 #, php-format msgid "%s likes this." msgstr "" -#: ../../include/conversation.php:879 +#: ../../include/conversation.php:880 #, php-format msgid "%s doesn't like this." msgstr "" -#: ../../include/conversation.php:883 +#: ../../include/conversation.php:884 #, php-format msgid "%2$d people like this." msgstr "" -#: ../../include/conversation.php:885 +#: ../../include/conversation.php:886 #, php-format msgid "%2$d people don't like this." msgstr "" -#: ../../include/conversation.php:891 +#: ../../include/conversation.php:892 msgid "and" msgstr "" -#: ../../include/conversation.php:894 +#: ../../include/conversation.php:895 #, php-format msgid ", and %d other people" msgstr "" -#: ../../include/conversation.php:895 +#: ../../include/conversation.php:896 #, php-format msgid "%s like this." msgstr "" -#: ../../include/conversation.php:895 +#: ../../include/conversation.php:896 #, php-format msgid "%s don't like this." msgstr "" -#: ../../include/conversation.php:920 +#: ../../include/conversation.php:921 msgid "Visible to everybody" msgstr "" -#: ../../include/conversation.php:922 +#: ../../include/conversation.php:923 msgid "Please enter a video link/URL:" msgstr "" -#: ../../include/conversation.php:923 +#: ../../include/conversation.php:924 msgid "Please enter an audio link/URL:" msgstr "" -#: ../../include/conversation.php:924 +#: ../../include/conversation.php:925 msgid "Tag term:" msgstr "" -#: ../../include/conversation.php:926 +#: ../../include/conversation.php:927 msgid "Where are you right now?" msgstr "" -#: ../../include/conversation.php:969 +#: ../../include/conversation.php:970 msgid "upload photo" msgstr "" -#: ../../include/conversation.php:971 +#: ../../include/conversation.php:972 msgid "attach file" msgstr "" -#: ../../include/conversation.php:973 +#: ../../include/conversation.php:974 msgid "web link" msgstr "" -#: ../../include/conversation.php:974 +#: ../../include/conversation.php:975 msgid "Insert video link" msgstr "" -#: ../../include/conversation.php:975 +#: ../../include/conversation.php:976 msgid "video link" msgstr "" -#: ../../include/conversation.php:976 +#: ../../include/conversation.php:977 msgid "Insert audio link" msgstr "" -#: ../../include/conversation.php:977 +#: ../../include/conversation.php:978 msgid "audio link" msgstr "" -#: ../../include/conversation.php:979 +#: ../../include/conversation.php:980 msgid "set location" msgstr "" -#: ../../include/conversation.php:981 +#: ../../include/conversation.php:982 msgid "clear location" msgstr "" -#: ../../include/conversation.php:988 +#: ../../include/conversation.php:989 msgid "permissions" msgstr "" diff --git a/view/head.tpl b/view/head.tpl index dfb626ebc..0fffc1344 100644 --- a/view/head.tpl +++ b/view/head.tpl @@ -29,6 +29,7 @@ + +
+
From 8ffb65ceef4de1b1088ace577682812cba6016af Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 22 May 2012 22:34:35 -0700 Subject: [PATCH 072/164] event calendar theming --- view/theme/slackr/style.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/view/theme/slackr/style.css b/view/theme/slackr/style.css index 41f4e58ee..635f5bcf0 100644 --- a/view/theme/slackr/style.css +++ b/view/theme/slackr/style.css @@ -40,6 +40,9 @@ nav #site-location { right: 36px; } +.fc-event-skin { + background-color: #3465a4 !important; +} .wall-item-photo, .photo, .contact-block-img, .my-comment-photo { border-radius: 3px; -moz-border-radius: 3px; From 61dba985c14ebcfd20d18b579aee9b781f98bc23 Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 23 May 2012 01:01:04 -0700 Subject: [PATCH 073/164] photo rotation --- include/Photo.php | 6 ++++ mod/photos.php | 58 ++++++++++++++++++++++++++++++- view/photo_edit.tpl | 5 +++ view/theme/duepuntozero/style.css | 10 ++++-- 4 files changed, 75 insertions(+), 4 deletions(-) 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/mod/photos.php b/mod/photos.php index 082947bdb..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), @@ -1105,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) @@ -1185,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'], 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 @@
+
+
$rotate
+ +
+
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index c556dcead..fca935dee 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2118,7 +2118,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; } @@ -2127,7 +2127,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; } @@ -2138,10 +2138,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; } From 325343a4922543a0043b91054984354624cf5504 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 23 May 2012 07:38:31 -0400 Subject: [PATCH 074/164] Update install wizard - writable .htconfig.php not required - add test for working .htaccess/mod_rewrite configuration - fix last pass: create tables, eventually show config text and print a "What next" section --- images/icons.png | Bin 12389 -> 12608 bytes mod/install.php | 87 ++++++++++++++++++------------ view/install_checks.tpl | 6 +-- view/theme/duepuntozero/style.css | 1 + 4 files changed, 56 insertions(+), 38 deletions(-) diff --git a/images/icons.png b/images/icons.png index dd3af3aee3b9c2e1269e9e82c8c9742bb988df15..0ff5c430c5c3a33b92556249ccb6af1b80f84f8a 100644 GIT binary patch literal 12608 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 X1do|Pbpdho00000NkvXXu0mjfc&TV* diff --git a/mod/install.php b/mod/install.php index 6f5552076..1bdb792a9 100644 --- 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 = '

'; $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 .= '
'; - $txt .= '
' . t('Proceed to registration') . '' ; - $txt .= '

'; - - $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 ."
" ; $txt .= "
".$a->data['db_failed'] . "
". 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,7 +184,8 @@ function install_content(&$a) { check_php($phpath, $checks); - + check_htaccess($checks); + function check_passed($v, $c){ if ($c['required']) $v = $v && $c['status']; @@ -422,14 +416,26 @@ 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, true, $help); + check_add($checks, t('.htconfig.php is writable'), $status, false, $help); } +function check_htaccess(&$checks) { + $a = get_app(); + $status = true; + $help = ""; + $test = fetch_url($a->get_baseurl()."/install/testrewrite"); + if ($test!="ok") { + $status = false; + $help = t('Url rewrite in .htconfig is not working. Check your server configuration.'); + } + check_add($checks, t('Url rewrite is working'), $status, true, $help); +} + function manual_config(&$a) { $data = htmlentities($a->data['txt']); @@ -465,5 +471,16 @@ function load_database($db) { return $errors; } +function what_next() { + $a = get_app(); + $baseurl = $a->get_baseurl(); + return + t('

What next

') + ."

".t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.') + .t('Please see the file "INSTALL.txt".') + ."

" + .t("Go to your new Firendica node registration page 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.") + ."

"; +} diff --git a/view/install_checks.tpl b/view/install_checks.tpl index a1a75ade6..8a76c454c 100644 --- a/view/install_checks.tpl +++ b/view/install_checks.tpl @@ -3,9 +3,9 @@
{{ for $checks as $check }} - + {{if $check.help }} - + {{endif}} {{ endfor }}
$check.title {{if $check.required}}(required){{endif}}
$check.title {{if $check.required}}(required){{endif}}
$check.help
$check.help
@@ -19,6 +19,6 @@ {{ else }} - + {{ endif }}
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index fca935dee..f984cab68 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2950,6 +2950,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 { From 789063da399675575f61e150f11dbe534d7db3c5 Mon Sep 17 00:00:00 2001 From: Simon L'nu Date: Wed, 23 May 2012 15:58:22 -0400 Subject: [PATCH 075/164] add a placeholder attribute on search-text; dispy fixes Signed-off-by: Simon L'nu --- include/text.php | 2 +- view/theme/darkbubble/unsupported | 0 view/theme/dispy/dark/style.css | 18 ++++++++++-------- view/theme/dispy/dark/style.less | 31 +++++++++++++++++++++---------- view/theme/dispy/group_side.tpl | 5 ++--- view/theme/dispy/light/style.css | 6 +++--- view/theme/dispy/light/style.less | 31 +++++++++++++++++++++---------- 7 files changed, 58 insertions(+), 35 deletions(-) delete mode 100644 view/theme/darkbubble/unsupported diff --git a/include/text.php b/include/text.php index e93c24ef4..d6a9ef5d3 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 = '
'; $o .= '
'; - $o .= ''; + $o .= ''; $o .= ''; if($save) $o .= ''; diff --git a/view/theme/darkbubble/unsupported b/view/theme/darkbubble/unsupported deleted file mode 100644 index e69de29bb..000000000 diff --git a/view/theme/dispy/dark/style.css b/view/theme/dispy/dark/style.css index 6f29ef1f4..612c24f5c 100644 --- a/view/theme/dispy/dark/style.css +++ b/view/theme/dispy/dark/style.css @@ -58,7 +58,7 @@ h6{font-size:xx-small;} #articlemain{width:100%;height:100%;margin:0 auto;} .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:3px outset #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;} +[class$="-desc"],[id$="-desc"]{color:#eeeecc;background:#2e2f2e;border:3px ridge #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;} #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;} @@ -121,7 +121,7 @@ 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;background:white;color:#2e2f2e;margin:0px;padding:0px;font-size:small;line-height:1.1;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{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;} @@ -135,7 +135,7 @@ nav #nav-notifications-linkmenu.on .icon.s22.notify,nav #nav-notifications-linkm #asidemain{float:left;font-size:small;margin:20px 0 20px 35px;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;} @@ -389,21 +389,23 @@ div[id$="wrapper"]{height:100%;}div[id$="wrapper"] br{clear:left;} .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{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;}.group-selected:hover,.nets-selected:hover,.fileas-selected:hover{background:#2e3436;color:#eeeecc;border:1px solid #638ec4;} -.group-selected a,.nets-selected a,.fileas-selected a{color:#2e2f2e;text-decoration:none;} +.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{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{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;color:#eeeecc;}.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-group-element.group-selected{color:#2e2f2e;} #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{border:1px solid #999999;margin-right:3px;width:75%;} -.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;} +.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;} diff --git a/view/theme/dispy/dark/style.less b/view/theme/dispy/dark/style.less index 000918a9b..51bf7ca30 100644 --- a/view/theme/dispy/dark/style.less +++ b/view/theme/dispy/dark/style.less @@ -312,7 +312,7 @@ h6 { [id$="-desc"] { color: @main_colour; background: @bg_colour; - .borders(3px, outset, @main_colour); + .borders(3px, ridge, @main_colour); .rounded_corners; // .box_shadow(3px, 3px, 5px); margin: 3px 10px 7px 0; @@ -510,7 +510,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; @@ -669,11 +670,10 @@ nav #nav-notifications-linkmenu { #mini-search-text { background: white; color: @bg_colour; - margin: 8px; } #search-text { .borders(1px, solid, @main_alt_colour); - margin: 8px 0; + margin: 5px 0; } #mini-search-text { font-size: 8pt; @@ -771,7 +771,7 @@ nav #nav-notifications-linkmenu { margin: 0px; padding: 0px; font-size: small; - line-height: 1.1; + line-height: 1.2; .borders(3px, solid, @link_colour); .rounded_corners; z-index: 100000; @@ -880,10 +880,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 { @@ -2333,11 +2335,12 @@ div { #group-sidebar { margin-bottom: 10px; } +.categories-selected, .group-selected, .nets-selected, .fileas-selected { // padding: 4px; - // color: @bg_colour; + color: @bg_colour; // background: @main_colour; // .borders(1px, solid, @link_colour); .multibutton_active; @@ -2369,6 +2372,10 @@ div { .sidebar-group-element { .multibutton; .rounded_corners; + color: @main_colour; + &.group-selected { + color: @bg_colour; + } } #sidebar-new-group { margin: auto; @@ -2396,14 +2403,18 @@ div { margin-right: 3px; width: 75%; } +.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 { 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 @@