Merge branch '0.9.x' into TwitterBridgePlugin

This commit is contained in:
Zach Copley 2009-10-20 06:06:10 +00:00
commit 09dfb08a39
78 changed files with 4946 additions and 141 deletions

View File

@ -390,3 +390,68 @@ EndProfilePageProfileTags: after showing the tags on the profile page
- $action: the current action - $action: the current action
- &$profile: the profile being shown - &$profile: the profile being shown
StartProfileList: when starting a list of profiles (before <ul>)
- $profilelist: ProfileList widget, with $profile, $action, and $out
EndProfileList: when ending a list of profiles (after </ul>)
- $profilelist: ProfileList widget
StartProfileListItem: when starting to show a profile list item
- $item: ProfileListItem widget
EndProfileListItem: after showing a profile list item
- $item: ProfileListItem widget
StartProfileListItemProfile: the profile data part of the item
- $item: ProfileListItem widget
EndProfileListItemProfile: the profile data part of the item
- $item: ProfileListItem widget
StartProfileListItemActions: the actions (buttons) for an item
- $item: ProfileListItem widget
EndProfileListItemActions: the actions (buttons) for an item
- $item: ProfileListItem widget
StartProfileListItemProfileElements: inside the <div>
- $item: ProfileListItem widget
EndProfileListItemProfileElements: inside the <div>
- $item: ProfileListItem widget
StartProfileListItemAvatar: Showing a profile list avatar
- $item: ProfileListItem widget
EndProfileListItemAvatar: Showing a profile list avatar
- $item: ProfileListItem widget
StartProfileListItemFullName: Showing the profile list full name
- $item: ProfileListItem widget
EndProfileListItemFullName: Showing the profile list full name
- $item: ProfileListItem widget
StartProfileListItemLocation: Showing the profile list location
- $item: ProfileListItem widget
EndProfileListItemLocation: Showing the profile list location
- $item: ProfileListItem widget
StartProfileListItemHomepage: Showing the profile list homepage
- $item: ProfileListItem widget
EndProfileListItemHomepage: Showing the profile list homepage
- $item: ProfileListItem widget
StartProfileListItemBio: Showing the profile list bio
- $item: ProfileListItem widget
EndProfileListItemBio: Showing the profile list bio
- $item: ProfileListItem widget
StartProfileListItemActionElements: Showing the profile list actions (prepend a button here, or replace all buttons)
- $item: ProfileListItem widget
EndProfileListItemActionElements: Showing profile list actions (append a button here)
- $item: ProfileListItem widget

2
README
View File

@ -2,7 +2,7 @@
README README
------ ------
StatusNet 0.8.1 ("Second Guessing") StatusNet 0.8.2 ("Life and How to Live It")
26 Aug 2009 26 Aug 2009
This is the README file for StatusNet (formerly Laconica), the Open This is the README file for StatusNet (formerly Laconica), the Open

View File

@ -179,9 +179,12 @@ class GroupMemberListItem extends ProfileListItem
function showActions() function showActions()
{ {
$this->startActions(); $this->startActions();
if (Event::handle('StartProfileListItemActionElements', array($this))) {
$this->showSubscribeButton(); $this->showSubscribeButton();
$this->showMakeAdminForm(); $this->showMakeAdminForm();
$this->showGroupBlockForm(); $this->showGroupBlockForm();
Event::handle('EndProfileListItemActionElements', array($this));
}
$this->endActions(); $this->endActions();
} }

View File

@ -235,7 +235,7 @@ class DB_DataObject extends DB_DataObject_Overload
* @access private * @access private
* @var string * @var string
*/ */
var $_DB_DataObject_version = "1.8.11"; var $_DB_DataObject_version = "1.8.12";
/** /**
* The Database table (used by table extends) * The Database table (used by table extends)

View File

@ -6,9 +6,9 @@
* *
* PHP versions 4 and 5 * PHP versions 4 and 5
* *
* LICENSE: This source file is subject to version 3.0 of the PHP license * LICENSE: This source file is subject to version 3.01 of the PHP license
* that is available through the world-wide-web at the following URI: * that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of * http://www.php.net/license/3_01.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please * the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately. * send a note to license@php.net so we can mail you a copy immediately.
* *
@ -16,8 +16,8 @@
* @package DB_DataObject * @package DB_DataObject
* @author Alan Knowles <alan@akbkhome.com> * @author Alan Knowles <alan@akbkhome.com>
* @copyright 1997-2008 The PHP Group * @copyright 1997-2008 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0 * @license http://www.php.net/license/3_01.txt PHP License 3.01
* @version CVS: $Id: Cast.php 264148 2008-08-04 03:44:59Z alan_k $ * @version CVS: $Id: Cast.php 287158 2009-08-12 13:58:31Z alan_k $
* @link http://pear.php.net/package/DB_DataObject * @link http://pear.php.net/package/DB_DataObject
*/ */

View File

@ -7,9 +7,9 @@
* *
* PHP versions 4 and 5 * PHP versions 4 and 5
* *
* LICENSE: This source file is subject to version 3.0 of the PHP license * LICENSE: This source file is subject to version 3.01 of the PHP license
* that is available through the world-wide-web at the following URI: * that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of * http://www.php.net/license/3_01.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please * the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately. * send a note to license@php.net so we can mail you a copy immediately.
* *
@ -17,8 +17,8 @@
* @package DB_DataObject * @package DB_DataObject
* @author Alan Knowles <alan@akbkhome.com> * @author Alan Knowles <alan@akbkhome.com>
* @copyright 1997-2006 The PHP Group * @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0 * @license http://www.php.net/license/3_01.txt PHP License 3.01
* @version CVS: $Id: Error.php 277015 2009-03-12 05:51:03Z alan_k $ * @version CVS: $Id: Error.php 287158 2009-08-12 13:58:31Z alan_k $
* @link http://pear.php.net/package/DB_DataObject * @link http://pear.php.net/package/DB_DataObject
*/ */

View File

@ -129,7 +129,7 @@ function _setlocale($category, $locale) {
$ret = 0; $ret = 0;
if (function_exists('setlocale')) // I don't know if this ever happens ;) if (function_exists('setlocale')) // I don't know if this ever happens ;)
$ret = setlocale($category, $locale); $ret = setlocale($category, $locale);
if (($ret and $locale == '') or ($ret == $locale)) { if ($ret and ($locale == '' or $ret == $locale)) {
$EMULATEGETTEXT = 0; $EMULATEGETTEXT = 0;
$CURRENTLOCALE = $ret; $CURRENTLOCALE = $ret;
} else { } else {

View File

@ -101,35 +101,36 @@ function get_nice_language_list()
*/ */
function get_all_languages() { function get_all_languages() {
return array( return array(
'bg' => array('q' => 0.8, 'lang' => 'bg_BG', 'name' => 'Bulgarian', 'direction' => 'ltr'), 'bg' => array('q' => 0.8, 'lang' => 'bg', 'name' => 'Bulgarian', 'direction' => 'ltr'),
'ca' => array('q' => 0.5, 'lang' => 'ca_ES', 'name' => 'Catalan', 'direction' => 'ltr'), 'ca' => array('q' => 0.5, 'lang' => 'ca', 'name' => 'Catalan', 'direction' => 'ltr'),
'cs' => array('q' => 0.5, 'lang' => 'cs_CZ', 'name' => 'Czech', 'direction' => 'ltr'), 'cs' => array('q' => 0.5, 'lang' => 'cs', 'name' => 'Czech', 'direction' => 'ltr'),
'de' => array('q' => 0.8, 'lang' => 'de_DE', 'name' => 'German', 'direction' => 'ltr'), 'de' => array('q' => 0.8, 'lang' => 'de', 'name' => 'German', 'direction' => 'ltr'),
'el' => array('q' => 0.1, 'lang' => 'el', 'name' => 'Greek', 'direction' => 'ltr'), 'el' => array('q' => 0.1, 'lang' => 'el', 'name' => 'Greek', 'direction' => 'ltr'),
'en-us' => array('q' => 1, 'lang' => 'en_US', 'name' => 'English (US)', 'direction' => 'ltr'), 'en-us' => array('q' => 1, 'lang' => 'en', 'name' => 'English (US)', 'direction' => 'ltr'),
'en-gb' => array('q' => 1, 'lang' => 'en_GB', 'name' => 'English (British)', 'direction' => 'ltr'), 'en-gb' => array('q' => 1, 'lang' => 'en_GB', 'name' => 'English (British)', 'direction' => 'ltr'),
'en' => array('q' => 1, 'lang' => 'en_US', 'name' => 'English (US)', 'direction' => 'ltr'), 'en' => array('q' => 1, 'lang' => 'en', 'name' => 'English (US)', 'direction' => 'ltr'),
'es' => array('q' => 1, 'lang' => 'es', 'name' => 'Spanish', 'direction' => 'ltr'), 'es' => array('q' => 1, 'lang' => 'es', 'name' => 'Spanish', 'direction' => 'ltr'),
'fi' => array('q' => 1, 'lang' => 'fi', 'name' => 'Finnish', 'direction' => 'ltr'), 'fi' => array('q' => 1, 'lang' => 'fi', 'name' => 'Finnish', 'direction' => 'ltr'),
'fr-fr' => array('q' => 1, 'lang' => 'fr_FR', 'name' => 'French', 'direction' => 'ltr'), 'fr-fr' => array('q' => 1, 'lang' => 'fr', 'name' => 'French', 'direction' => 'ltr'),
'he' => array('q' => 0.5, 'lang' => 'he_IL', 'name' => 'Hebrew', 'direction' => 'rtl'), 'ga' => array('q' => 0.5, 'lang' => 'ga', 'name' => 'Galician', 'direction' => 'ltr'),
'it' => array('q' => 1, 'lang' => 'it_IT', 'name' => 'Italian', 'direction' => 'ltr'), 'he' => array('q' => 0.5, 'lang' => 'he', 'name' => 'Hebrew', 'direction' => 'rtl'),
'jp' => array('q' => 0.5, 'lang' => 'ja_JP', 'name' => 'Japanese', 'direction' => 'ltr'), 'it' => array('q' => 1, 'lang' => 'it', 'name' => 'Italian', 'direction' => 'ltr'),
'ko' => array('q' => 0.9, 'lang' => 'ko_KR', 'name' => 'Korean', 'direction' => 'ltr'), 'jp' => array('q' => 0.5, 'lang' => 'ja', 'name' => 'Japanese', 'direction' => 'ltr'),
'mk' => array('q' => 0.5, 'lang' => 'mk_MK', 'name' => 'Macedonian', 'direction' => 'ltr'), 'ko' => array('q' => 0.9, 'lang' => 'ko', 'name' => 'Korean', 'direction' => 'ltr'),
'nb' => array('q' => 0.1, 'lang' => 'nb_NO', 'name' => 'Norwegian (Bokmål)', 'direction' => 'ltr'), 'mk' => array('q' => 0.5, 'lang' => 'mk', 'name' => 'Macedonian', 'direction' => 'ltr'),
'no' => array('q' => 0.1, 'lang' => 'nb_NO', 'name' => 'Norwegian (Bokmål)', 'direction' => 'ltr'), 'nb' => array('q' => 0.1, 'lang' => 'nb', 'name' => 'Norwegian (Bokmål)', 'direction' => 'ltr'),
'nn' => array('q' => 1, 'lang' => 'nn_NO', 'name' => 'Norwegian (Nynorsk)', 'direction' => 'ltr'), 'no' => array('q' => 0.1, 'lang' => 'nb', 'name' => 'Norwegian (Bokmål)', 'direction' => 'ltr'),
'nl' => array('q' => 0.5, 'lang' => 'nl_NL', 'name' => 'Dutch', 'direction' => 'ltr'), 'nn' => array('q' => 1, 'lang' => 'nn', 'name' => 'Norwegian (Nynorsk)', 'direction' => 'ltr'),
'pl' => array('q' => 0.5, 'lang' => 'pl_PL', 'name' => 'Polish', 'direction' => 'ltr'), 'nl' => array('q' => 0.5, 'lang' => 'nl', 'name' => 'Dutch', 'direction' => 'ltr'),
'pl' => array('q' => 0.5, 'lang' => 'pl', 'name' => 'Polish', 'direction' => 'ltr'),
'pt' => array('q' => 0.1, 'lang' => 'pt', 'name' => 'Portuguese', 'direction' => 'ltr'), 'pt' => array('q' => 0.1, 'lang' => 'pt', 'name' => 'Portuguese', 'direction' => 'ltr'),
'pt-br' => array('q' => 0.9, 'lang' => 'pt_BR', 'name' => 'Portuguese Brazil', 'direction' => 'ltr'), 'pt-br' => array('q' => 0.9, 'lang' => 'pt_BR', 'name' => 'Portuguese Brazil', 'direction' => 'ltr'),
'ru' => array('q' => 0.9, 'lang' => 'ru_RU', 'name' => 'Russian', 'direction' => 'ltr'), 'ru' => array('q' => 0.9, 'lang' => 'ru', 'name' => 'Russian', 'direction' => 'ltr'),
'sv' => array('q' => 0.8, 'lang' => 'sv_SE', 'name' => 'Swedish', 'direction' => 'ltr'), 'sv' => array('q' => 0.8, 'lang' => 'sv', 'name' => 'Swedish', 'direction' => 'ltr'),
'te' => array('q' => 0.3, 'lang' => 'te_IN', 'name' => 'Telugu', 'direction' => 'ltr'), 'te' => array('q' => 0.3, 'lang' => 'te', 'name' => 'Telugu', 'direction' => 'ltr'),
'tr' => array('q' => 0.5, 'lang' => 'tr_TR', 'name' => 'Turkish', 'direction' => 'ltr'), 'tr' => array('q' => 0.5, 'lang' => 'tr', 'name' => 'Turkish', 'direction' => 'ltr'),
'uk' => array('q' => 1, 'lang' => 'uk_UA', 'name' => 'Ukrainian', 'direction' => 'ltr'), 'uk' => array('q' => 1, 'lang' => 'uk', 'name' => 'Ukrainian', 'direction' => 'ltr'),
'vi' => array('q' => 0.8, 'lang' => 'vi_VN', 'name' => 'Vietnamese', 'direction' => 'ltr'), 'vi' => array('q' => 0.8, 'lang' => 'vi', 'name' => 'Vietnamese', 'direction' => 'ltr'),
'zh-cn' => array('q' => 0.9, 'lang' => 'zh_CN', 'name' => 'Chinese (Simplified)', 'direction' => 'ltr'), 'zh-cn' => array('q' => 0.9, 'lang' => 'zh_CN', 'name' => 'Chinese (Simplified)', 'direction' => 'ltr'),
'zh-hant' => array('q' => 0.2, 'lang' => 'zh_TW', 'name' => 'Chinese (Taiwanese)', 'direction' => 'ltr'), 'zh-hant' => array('q' => 0.2, 'lang' => 'zh_TW', 'name' => 'Chinese (Taiwanese)', 'direction' => 'ltr'),
); );

View File

@ -62,9 +62,15 @@ class ProfileList extends Widget
function show() function show()
{ {
$cnt = 0;
if (Event::handle('StartProfileList', array($this))) {
$this->startList(); $this->startList();
$cnt = $this->showProfiles(); $cnt = $this->showProfiles();
$this->endList(); $this->endList();
Event::handle('EndProfileList', array($this));
}
return $cnt; return $cnt;
} }
@ -117,10 +123,19 @@ class ProfileListItem extends Widget
function show() function show()
{ {
if (Event::handle('StartProfileListItem', array($this))) {
$this->startItem(); $this->startItem();
if (Event::handle('StartProfileListItemProfile', array($this))) {
$this->showProfile(); $this->showProfile();
Event::handle('EndProfileListItemProfile', array($this));
}
if (Event::handle('StartProfileListItemActions', array($this))) {
$this->showActions(); $this->showActions();
Event::handle('EndProfileListItemActions', array($this));
}
$this->endItem(); $this->endItem();
Event::handle('EndProfileListItem', array($this));
}
} }
function startItem() function startItem()
@ -132,11 +147,29 @@ class ProfileListItem extends Widget
function showProfile() function showProfile()
{ {
$this->startProfile(); $this->startProfile();
if (Event::handle('StartProfileListItemProfileElements', array($this))) {
if (Event::handle('StartProfileListItemAvatar', array($this))) {
$this->showAvatar(); $this->showAvatar();
Event::handle('EndProfileListItemAvatar', array($this));
}
if (Event::handle('StartProfileListItemFullName', array($this))) {
$this->showFullName(); $this->showFullName();
Event::handle('EndProfileListItemFullName', array($this));
}
if (Event::handle('StartProfileListItemLocation', array($this))) {
$this->showLocation(); $this->showLocation();
Event::handle('EndProfileListItemLocation', array($this));
}
if (Event::handle('StartProfileListItemHomepage', array($this))) {
$this->showHomepage(); $this->showHomepage();
Event::handle('EndProfileListItemHomepage', array($this));
}
if (Event::handle('StartProfileListItemBio', array($this))) {
$this->showBio(); $this->showBio();
Event::handle('EndProfileListItemBio', array($this));
}
Event::handle('EndProfileListItemProfileElements', array($this));
}
$this->endProfile(); $this->endProfile();
} }
@ -225,7 +258,10 @@ class ProfileListItem extends Widget
function showActions() function showActions()
{ {
$this->startActions(); $this->startActions();
if (Event::handle('StartProfileListItemActionElements', array($this))) {
$this->showSubscribeButton(); $this->showSubscribeButton();
Event::handle('EndProfileListItemActionElements', array($this));
}
$this->endActions(); $this->endActions();
} }

View File

@ -51,13 +51,23 @@ function common_init_locale($language=null)
function common_init_language() function common_init_language()
{ {
mb_internal_encoding('UTF-8'); mb_internal_encoding('UTF-8');
// gettext seems very picky... We first need to setlocale()
// to a locale which _does_ exist on the system, and _then_
// we can set in another locale that may not be set up
// (say, ga_ES for Galego/Galician) it seems to take it.
common_init_locale("en_US");
$language = common_language(); $language = common_language();
// So we don't have to make people install the gettext locales
$locale_set = common_init_locale($language); $locale_set = common_init_locale($language);
bindtextdomain("statusnet", common_config('site','locale_path')); setlocale(LC_CTYPE, 'C');
// So we don't have to make people install the gettext locales
$path = common_config('site','locale_path');
bindtextdomain("statusnet", $path);
bind_textdomain_codeset("statusnet", "UTF-8"); bind_textdomain_codeset("statusnet", "UTF-8");
textdomain("statusnet"); textdomain("statusnet");
setlocale(LC_CTYPE, 'C');
if(!$locale_set) { if(!$locale_set) {
common_log(LOG_INFO, 'Language requested:' . $language . ' - locale could not be set. Perhaps that system locale is not installed.', __FILE__); common_log(LOG_INFO, 'Language requested:' . $language . ' - locale could not be set. Perhaps that system locale is not installed.', __FILE__);
} }
@ -391,7 +401,7 @@ function common_render_content($text, $notice)
{ {
$r = common_render_text($text); $r = common_render_text($text);
$id = $notice->profile_id; $id = $notice->profile_id;
$r = preg_replace('/(^|[\s\.\,\:\;]+)@([A-Za-z0-9]{1,64})/e', "'\\1@'.common_at_link($id, '\\2')", $r); $r = preg_replace('/(^|\s+)@(['.NICKNAME_FMT.']{1,64})/e', "'\\1@'.common_at_link($id, '\\2')", $r);
$r = preg_replace('/^T ([A-Z0-9]{1,64}) /e', "'T '.common_at_link($id, '\\1').' '", $r); $r = preg_replace('/^T ([A-Z0-9]{1,64}) /e', "'T '.common_at_link($id, '\\1').' '", $r);
$r = preg_replace('/(^|[\s\.\,\:\;]+)@#([A-Za-z0-9]{1,64})/e', "'\\1@#'.common_at_hash_link($id, '\\2')", $r); $r = preg_replace('/(^|[\s\.\,\:\;]+)@#([A-Za-z0-9]{1,64})/e', "'\\1@#'.common_at_hash_link($id, '\\2')", $r);
$r = preg_replace('/(^|[\s\.\,\:\;]+)!([A-Za-z0-9]{1,64})/e', "'\\1!'.common_group_link($id, '\\2')", $r); $r = preg_replace('/(^|[\s\.\,\:\;]+)!([A-Za-z0-9]{1,64})/e', "'\\1!'.common_group_link($id, '\\2')", $r);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -4670,12 +4670,12 @@ msgstr "%1$s сега ги следи вашите забелешки за %2$s.
#: lib/mail.php:254 #: lib/mail.php:254
#, fuzzy, php-format #, fuzzy, php-format
msgid "Location: %s\n" msgid "Location: %s\n"
msgstr "Локација" msgstr ""
#: lib/mail.php:256 #: lib/mail.php:256
#, fuzzy, php-format #, fuzzy, php-format
msgid "Homepage: %s\n" msgid "Homepage: %s\n"
msgstr "Домашна страница" msgstr ""
#: lib/mail.php:258 #: lib/mail.php:258
#, php-format #, php-format

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -4676,13 +4676,13 @@ msgstr "%1$s %2$s'da durumunuzu takip ediyor"
#: lib/mail.php:254 #: lib/mail.php:254
#, fuzzy, php-format #, fuzzy, php-format
msgid "Location: %s\n" msgid "Location: %s\n"
msgstr "Yer" msgstr ""
# Belki Durum Merkezi falan denebilir mi ki? # Belki Durum Merkezi falan denebilir mi ki?
#: lib/mail.php:256 #: lib/mail.php:256
#, fuzzy, php-format #, fuzzy, php-format
msgid "Homepage: %s\n" msgid "Homepage: %s\n"
msgstr "Başlangıç Sayfası" msgstr ""
#: lib/mail.php:258 #: lib/mail.php:258
#, php-format #, php-format

Binary file not shown.

View File

@ -4563,12 +4563,12 @@ msgstr "現在%1$s在%2$s成為你的粉絲囉"
#: lib/mail.php:254 #: lib/mail.php:254
#, fuzzy, php-format #, fuzzy, php-format
msgid "Location: %s\n" msgid "Location: %s\n"
msgstr "地點" msgstr ""
#: lib/mail.php:256 #: lib/mail.php:256
#, fuzzy, php-format #, fuzzy, php-format
msgid "Homepage: %s\n" msgid "Homepage: %s\n"
msgstr "個人首頁" msgstr ""
#: lib/mail.php:258 #: lib/mail.php:258
#, php-format #, php-format

View File

@ -115,26 +115,48 @@ class FBConnectPlugin extends Plugin
// XXX: Facebook says we don't need this FB_RequireFeatures(), // XXX: Facebook says we don't need this FB_RequireFeatures(),
// but we actually do, for IE and Safari. Gar. // but we actually do, for IE and Safari. Gar.
$html = sprintf('<script type="text/javascript"> $js = '<script type="text/javascript">';
$(document).ready(function () { $js .= ' $(document).ready(function () {';
FB_RequireFeatures( $js .= ' FB_RequireFeatures(';
["XFBML"], $js .= ' ["XFBML"], function() {';
function() { $js .= ' FB.init("%1$s", "../xd_receiver.html");';
FB.init("%s", "../xd_receiver.html"); $js .= ' }';
} $js .= ' );';
); }); $js .= ' });';
function goto_login() { $js .= ' function goto_login() {';
window.location = "%s"; $js .= ' window.location = "%2$s";';
} $js .= ' }';
function goto_logout() { // The below function alters the logout link so that it logs the user out
window.location = "%s"; // of Facebook Connect as well as the site. However, for some pages
} // (FB Connect Settings) we need to output the FB Connect scripts (to
</script>', $apikey, // show an existing FB connection even if the user isn't authenticated
$login_url, $logout_url); // with Facebook connect) but NOT alter the logout link. And the only
// way to reliably do that is with the FB Connect .js libs. Crazy.
$action->raw($html); $js .= ' FB.ensureInit(function() {';
$js .= ' FB.Connect.ifUserConnected(';
$js .= ' function() { ';
$js .= ' $(\'#nav_logout a\').attr(\'href\', \'#\');';
$js .= ' $(\'#nav_logout a\').click(function() {';
$js .= ' FB.Connect.logoutAndRedirect(\'%3$s\');';
$js .= ' return false;';
$js .= ' })';
$js .= ' },';
$js .= ' function() {';
$js .= ' return false;';
$js .= ' }';
$js .= ' );';
$js .= ' });';
$js .= '</script>';
$js = sprintf($js, $apikey, $login_url, $logout_url);
// Compress the bugger down a bit
$js = str_replace(' ', '', $js);
$action->raw(" $js"); // leading two spaces to make it line up
} }
} }
@ -150,7 +172,6 @@ class FBConnectPlugin extends Plugin
function onEndShowStatusNetStyles($action) function onEndShowStatusNetStyles($action)
{ {
if ($this->reqFbScripts($action)) { if ($this->reqFbScripts($action)) {
$action->cssLink('plugins/FBConnect/FBConnectPlugin.css'); $action->cssLink('plugins/FBConnect/FBConnectPlugin.css');
} }
@ -269,66 +290,9 @@ class FBConnectPlugin extends Plugin
$action->elementEnd('li'); $action->elementEnd('li');
} }
$action->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
_('Home'), _('Personal profile and friends timeline'), false, 'nav_home');
$action->menuItem(common_local_url('profilesettings'),
_('Account'), _('Change your email, avatar, password, profile'), false, 'nav_account');
$action->menuItem(common_local_url($connect),
_('Connect'), _('Connect to services'), false, 'nav_connect');
if (common_config('invite', 'enabled')) {
$action->menuItem(common_local_url('invite'),
_('Invite'),
sprintf(_('Invite friends and colleagues to join you on %s'),
common_config('site', 'name')),
false, 'nav_invitecontact');
} }
// Need to override the Logout link to make it do FB stuff return true;
if (!empty($fbuid)) {
$logout_url = common_local_url('logout');
$title = _('Logout from the site');
$text = _('Logout');
$html = sprintf('<li id="nav_logout"><a href="#" title="%s" ' .
'onclick="FB.Connect.logoutAndRedirect(\'%s\');">%s</a></li>',
$title, $logout_url, $text);
$action->raw($html);
} else {
$action->menuItem(common_local_url('logout'),
_('Logout'), _('Logout from the site'), false, 'nav_logout');
}
}
else {
if (!common_config('site', 'openidonly')) {
if (!common_config('site', 'closed')) {
$action->menuItem(common_local_url('register'),
_('Register'), _('Create an account'), false, 'nav_register');
}
$action->menuItem(common_local_url('login'),
_('Login'), _('Login to the site'), false, 'nav_login');
} else {
$this->menuItem(common_local_url('openidlogin'),
_('OpenID'), _('Login with OpenID'), false, 'nav_openid');
}
}
$action->menuItem(common_local_url('doc', array('title' => 'help')),
_('Help'), _('Help me!'), false, 'nav_help');
if ($user || !common_config('site', 'private')) {
$action->menuItem(common_local_url('peoplesearch'),
_('Search'), _('Search for people or text'), false, 'nav_search');
}
// We are replacing the primary nav entirely; give other
// plugins a chance to handle it here.
Event::handle('EndPrimaryNav', array($action));
return false;
} }
function onStartShowLocalNavBlock($action) function onStartShowLocalNavBlock($action)
@ -357,7 +321,7 @@ class FBConnectPlugin extends Plugin
} }
function onStartLogout($action) function onStartLogout($action)
{ {
$action->logout(); $action->logout();
$fbuid = $this->loggedIn(); $fbuid = $this->loggedIn();

View File

@ -7,6 +7,7 @@ RealtimeUpdate = {
_replyurl: '', _replyurl: '',
_favorurl: '', _favorurl: '',
_deleteurl: '', _deleteurl: '',
_updatecounter: 0,
init: function(userid, replyurl, favorurl, deleteurl) init: function(userid, replyurl, favorurl, deleteurl)
{ {
@ -15,6 +16,8 @@ RealtimeUpdate = {
RealtimeUpdate._favorurl = favorurl; RealtimeUpdate._favorurl = favorurl;
RealtimeUpdate._deleteurl = deleteurl; RealtimeUpdate._deleteurl = deleteurl;
DT = document.title;
$(window).blur(function() { $(window).blur(function() {
$('#notices_primary .notice').css({ $('#notices_primary .notice').css({
'border-top-color':$('#notices_primary .notice:last').css('border-top-color'), 'border-top-color':$('#notices_primary .notice:last').css('border-top-color'),
@ -26,6 +29,9 @@ RealtimeUpdate = {
'border-top-style':'solid' 'border-top-style':'solid'
}); });
RealtimeUpdate._updatecounter = 0;
document.title = DT;
return false; return false;
}); });
}, },
@ -45,6 +51,9 @@ RealtimeUpdate = {
$("#notices_primary .notice:first").css({display:"none"}); $("#notices_primary .notice:first").css({display:"none"});
$("#notices_primary .notice:first").fadeIn(1000); $("#notices_primary .notice:first").fadeIn(1000);
NoticeReply(); NoticeReply();
RealtimeUpdate._updatecounter += 1;
document.title = '('+RealtimeUpdate._updatecounter+') ' + DT;
}, 500); }, 500);
}, },

View File

@ -365,6 +365,10 @@ class MailerDaemon
if (preg_match('/^\s*Sent via/', $line)) { if (preg_match('/^\s*Sent via/', $line)) {
continue; continue;
} }
if (preg_match('/^\s*Sent from my/', $line)) {
continue;
}
// skip everything after a sig // skip everything after a sig
if (preg_match('/^\s*--+\s*$/', $line) || if (preg_match('/^\s*--+\s*$/', $line) ||
preg_match('/^\s*__+\s*$/', $line)) preg_match('/^\s*__+\s*$/', $line))

View File

@ -18,7 +18,7 @@ font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
font-size:1em; font-size:1em;
} }
address { address {
margin-right:7.2%; margin-right:5.8%;
} }
input, textarea, select, option { input, textarea, select, option {