diff --git a/plugins/Bookmark/BookmarkPlugin.php b/plugins/Bookmark/BookmarkPlugin.php index 8eef609751..800a26e795 100644 --- a/plugins/Bookmark/BookmarkPlugin.php +++ b/plugins/Bookmark/BookmarkPlugin.php @@ -318,7 +318,7 @@ class BookmarkPlugin extends Plugin } } - $out->elementStart('p', array('class' => 'bookmark-info')); + $out->elementStart('div', array('class' => 'bookmark-info entry-content')); $avatar = $profile->getAvatar(AVATAR_MINI_SIZE); @@ -344,7 +344,7 @@ class BookmarkPlugin extends Plugin $nli->showContext(); $nli->showRepeat(); - $out->elementEnd('p'); + $out->elementEnd('div'); $nli->showNoticeOptions(); diff --git a/plugins/NewMenu/NewMenuPlugin.php b/plugins/NewMenu/NewMenuPlugin.php new file mode 100644 index 0000000000..cdcea5cd92 --- /dev/null +++ b/plugins/NewMenu/NewMenuPlugin.php @@ -0,0 +1,435 @@ +. + * + * @category Sample + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Somewhat different menu navigation + * + * We have a new menu layout coming in StatusNet 1.0. This plugin gets + * some of the new navigation in, although third-level menus aren't enabled. + * + * @category NewMenu + * @package StatusNet + * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ +class NewMenuPlugin extends Plugin +{ + public $loadCSS = false; + + /** + * Load related modules when needed + * + * @param string $cls Name of the class to be loaded + * + * @return boolean hook value; true means continue processing, false means stop. + */ + + function onAutoload($cls) + { + $dir = dirname(__FILE__); + + switch ($cls) + { + case 'HelloAction': + include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + return false; + case 'User_greeting_count': + include_once $dir . '/'.$cls.'.php'; + return false; + default: + return true; + } + } + + /** + * Modify the default menu + * + * @param Action $action The current action handler. Use this to + * do any output. + * + * @return boolean hook value; true means continue processing, false means stop. + * + * @see Action + */ + + function onStartPrimaryNav($action) + { + $user = common_current_user(); + + if (!empty($user)) { + $action->menuItem(common_local_url('all', + array('nickname' => $user->nickname)), + _m('Home'), + _m('Friends timeline'), + false, + 'nav_home'); + $action->menuItem(common_local_url('showstream', + array('nickname' => $user->nickname)), + _m('Profile'), + _m('Your profile'), + false, + 'nav_profile'); + $action->menuItem(common_local_url('public'), + _m('Public'), + _m('Everyone on this site'), + false, + 'nav_public'); + $action->menuItem(common_local_url('profilesettings'), + _m('Settings'), + _m('Change your personal settings'), + false, + 'nav_account'); + if ($user->hasRight(Right::CONFIGURESITE)) { + $action->menuItem(common_local_url('siteadminpanel'), + _m('Admin'), + _m('Site configuration'), + false, + 'nav_admin'); + } + $action->menuItem(common_local_url('logout'), + _m('Logout'), + _m('Logout from the site'), + false, + 'nav_logout'); + } else { + $action->menuItem(common_local_url('public'), + _m('Public'), + _m('Everyone on this site'), + false, + 'nav_public'); + $action->menuItem(common_local_url('login'), + _m('Login'), + _m('Login to the site'), + false, + 'nav_login'); + } + + if (!empty($user) || !common_config('site', 'private')) { + $action->menuItem(common_local_url('noticesearch'), + _m('Search'), + _m('Search the site'), + false, + 'nav_search'); + } + + Event::handle('EndPrimaryNav', array($action)); + + return false; + } + + function onStartPersonalGroupNav($menu) + { + $user = null; + + // FIXME: we should probably pass this in + + $action = $menu->action->trimmed('action'); + $nickname = $menu->action->trimmed('nickname'); + + if ($nickname) { + $user = User::staticGet('nickname', $nickname); + $user_profile = $user->getProfile(); + $name = $user_profile->getBestName(); + } else { + // @fixme can this happen? is this valid? + $user_profile = false; + $name = $nickname; + } + + $menu->out->menuItem(common_local_url('all', array('nickname' => + $nickname)), + _('Home'), + sprintf(_('%s and friends'), $name), + $action == 'all', 'nav_timeline_personal'); + $menu->out->menuItem(common_local_url('replies', array('nickname' => + $nickname)), + _('Replies'), + sprintf(_('Replies to %s'), $name), + $action == 'replies', 'nav_timeline_replies'); + $menu->out->menuItem(common_local_url('showfavorites', array('nickname' => + $nickname)), + _('Favorites'), + sprintf(_('%s\'s favorite notices'), ($user_profile) ? $name : _('User')), + $action == 'showfavorites', 'nav_timeline_favorites'); + + $cur = common_current_user(); + + if ($cur && $cur->id == $user->id && + !common_config('singleuser', 'enabled')) { + + $menu->out->menuItem(common_local_url('inbox', array('nickname' => + $nickname)), + _('Inbox'), + _('Your incoming messages'), + $action == 'inbox'); + $menu->out->menuItem(common_local_url('outbox', array('nickname' => + $nickname)), + _('Outbox'), + _('Your sent messages'), + $action == 'outbox'); + } + Event::handle('EndPersonalGroupNav', array($menu)); + return false; + } + + function onStartSubGroupNav($menu) + { + $cur = common_current_user(); + $action = $menu->action->trimmed('action'); + + $profile = $menu->user->getProfile(); + + $menu->out->menuItem(common_local_url('showstream', array('nickname' => + $menu->user->nickname)), + _('Profile'), + (empty($profile)) ? $menu->user->nickname : $profile->getBestName(), + $action == 'showstream', + 'nav_profile'); + $menu->out->menuItem(common_local_url('subscriptions', + array('nickname' => + $menu->user->nickname)), + _('Subscriptions'), + sprintf(_('People %s subscribes to'), + $menu->user->nickname), + $action == 'subscriptions', + 'nav_subscriptions'); + $menu->out->menuItem(common_local_url('subscribers', + array('nickname' => + $menu->user->nickname)), + _('Subscribers'), + sprintf(_('People subscribed to %s'), + $menu->user->nickname), + $action == 'subscribers', + 'nav_subscribers'); + $menu->out->menuItem(common_local_url('usergroups', + array('nickname' => + $menu->user->nickname)), + _('Groups'), + sprintf(_('Groups %s is a member of'), + $menu->user->nickname), + $action == 'usergroups', + 'nav_usergroups'); + if (common_config('invite', 'enabled') && !is_null($cur) && $menu->user->id === $cur->id) { + $menu->out->menuItem(common_local_url('invite'), + _('Invite'), + sprintf(_('Invite friends and colleagues to join you on %s'), + common_config('site', 'name')), + $action == 'invite', + 'nav_invite'); + } + + Event::handle('EndSubGroupNav', array($menu)); + return false; + } + + function onStartShowLocalNavBlock($action) + { + $actionName = $action->trimmed('action'); + + if ($actionName == 'showstream') { + $action->elementStart('dl', array('id' => 'site_nav_local_views')); + // TRANS: DT element for local views block. String is hidden in default CSS. + $action->element('dt', null, _('Local views')); + $action->elementStart('dd'); + $nav = new SubGroupNav($action, $action->user); + $nav->show(); + $action->elementEnd('dd'); + $action->elementEnd('dl'); + Event::handle('EndShowLocalNavBlock', array($action)); + return false; + } + + return true; + } + + function onStartAccountSettingsNav(&$action) + { + $this->_settingsMenu($action); + return false; + } + + function onStartConnectSettingsNav(&$action) + { + $this->_settingsMenu($action); + return false; + } + + private function _settingsMenu(&$action) + { + $actionName = $action->trimmed('action'); + + $action->menuItem(common_local_url('profilesettings'), + _('Profile'), + _('Change your profile settings'), + $actionName == 'profilesettings'); + + $action->menuItem(common_local_url('avatarsettings'), + _('Avatar'), + _('Upload an avatar'), + $actionName == 'avatarsettings'); + + $action->menuItem(common_local_url('passwordsettings'), + _('Password'), + _('Change your password'), + $actionName == 'passwordsettings'); + + $action->menuItem(common_local_url('emailsettings'), + _('Email'), + _('Change email handling'), + $actionName == 'emailsettings'); + + $action->menuItem(common_local_url('userdesignsettings'), + _('Design'), + _('Design your profile'), + $actionName == 'userdesignsettings'); + + $action->menuItem(common_local_url('othersettings'), + _('Other'), + _('Other options'), + $actionName == 'othersettings'); + + Event::handle('EndAccountSettingsNav', array(&$action)); + + if (common_config('xmpp', 'enabled')) { + $action->menuItem(common_local_url('imsettings'), + _m('IM'), + _('Updates by instant messenger (IM)'), + $actionName == 'imsettings'); + } + + if (common_config('sms', 'enabled')) { + $action->menuItem(common_local_url('smssettings'), + _m('SMS'), + _('Updates by SMS'), + $actionName == 'smssettings'); + } + + $action->menuItem(common_local_url('oauthconnectionssettings'), + _('Connections'), + _('Authorized connected applications'), + $actionName == 'oauthconnectionsettings'); + + Event::handle('EndConnectSettingsNav', array(&$action)); + } + + function onEndShowStyles($action) + { + if (($this->showCSS || + in_array(common_config('site', 'theme'), + array('default', 'identica', 'h4ck3r'))) && + ($action instanceof AccountSettingsAction || + $action instanceof ConnectSettingsAction)) { + $action->cssLink(common_path('plugins/NewMenu/newmenu.css')); + } + return true; + } + + function onStartAddressData($action) + { + if (common_config('singleuser', 'enabled')) { + $user = User::singleUser(); + $url = common_local_url('showstream', + array('nickname' => $user->nickname)); + } else if (common_logged_in()) { + $cur = common_current_user(); + $url = common_local_url('all', array('nickname' => $cur->nickname)); + } else { + $url = common_local_url('public'); + } + + $action->elementStart('a', array('class' => 'url home bookmark', + 'href' => $url)); + + if (StatusNet::isHTTPS()) { + $logoUrl = common_config('site', 'ssllogo'); + if (empty($logoUrl)) { + // if logo is an uploaded file, try to fall back to HTTPS file URL + $httpUrl = common_config('site', 'logo'); + if (!empty($httpUrl)) { + $f = File::staticGet('url', $httpUrl); + if (!empty($f) && !empty($f->filename)) { + // this will handle the HTTPS case + $logoUrl = File::url($f->filename); + } + } + } + } else { + $logoUrl = common_config('site', 'logo'); + } + + if (empty($logoUrl) && file_exists(Theme::file('logo.png'))) { + // This should handle the HTTPS case internally + $logoUrl = Theme::path('logo.png'); + } + + if (!empty($logoUrl)) { + $action->element('img', array('class' => 'logo photo', + 'src' => $logoUrl, + 'alt' => common_config('site', 'name'))); + } + + $action->text(' '); + $action->element('span', array('class' => 'fn org'), common_config('site', 'name')); + $action->elementEnd('a'); + + Event::handle('EndAddressData', array($action)); + return false; + } + + /** + * Return version information for this plugin + * + * @param array &$versions Version info; add to this array + * + * @return boolean hook value + */ + + function onPluginVersion(&$versions) + { + $versions[] = array('name' => 'NewMenu', + 'version' => STATUSNET_VERSION, + 'author' => 'Evan Prodromou', + 'homepage' => 'http://status.net/wiki/Plugin:NewMenu', + 'description' => + _m('A preview of the new menu '. + 'layout in StatusNet 1.0.')); + return true; + } +} diff --git a/plugins/NewMenu/newmenu.css b/plugins/NewMenu/newmenu.css new file mode 100644 index 0000000000..f700fdcc45 --- /dev/null +++ b/plugins/NewMenu/newmenu.css @@ -0,0 +1,47 @@ +body[id$=settings] #site_nav_local_views { +position:relative; +z-index:9; +float:right; +margin-right:10.65%; +width:22.25%; +} +body[id$=settings] #site_nav_local_views li { +width:100%; +margin-right:0; +margin-bottom:7px; +} +body[id$=settings] #site_nav_local_views a { +display:block; +width:80%; +padding-right:10%; +padding-left:10%; +border-radius-toprleft:0; +-moz-border-radius-topleft:0; +-webkit-border-top-left-radius:0; +border-radius-topright:4px; +-moz-border-radius-topright:4px; +-webkit-border-top-right-radius:4px; +border-radius-bottomright:4px; +-moz-border-radius-bottomright:4px; +-webkit-border-bottom-right-radius:4px; +} +body[id$=settings] #site_nav_local_views li.current { +box-shadow:none; +-moz-box-shadow:none; +-webkit-box-shadow:none; +} + +body[id$=settings] #content { +border-radius-topleft:7px; +border-radius-topright:7px; +-moz-border-radius-topleft:7px; +-moz-border-radius-topright:7px; +-webkit-border-top-left-radius:7px; +-webkit-border-top-right-radius:7px; +border-radius-topright:0; +-moz-border-radius-topright:0; +-webkit-border-top-right-radius:0; +} +body[id$=settings] #aside_primary { +display:none; +}