X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Faction.php;h=d8efad07408ac70324033b8f8d4e152d2681ff52;hb=a2782523d75d73ad833a6e0440c60f3bcb647d33;hp=b7f0036699ee2bae26794839a2ec2e88ec9b5ee9;hpb=7380f36d86d3ceb54194eb20f9be92549514b353;p=quix0rs-gnu-social.git diff --git a/lib/action.php b/lib/action.php index b7f0036699..d8efad0740 100644 --- a/lib/action.php +++ b/lib/action.php @@ -83,6 +83,11 @@ class Action extends HTMLOutputter // lawsuit function prepare($argarray) { $this->args =& common_copy_args($argarray); + + if ($this->boolean('ajax')) { + StatusNet::setAjax(true); + } + return true; } @@ -95,10 +100,12 @@ class Action extends HTMLOutputter // lawsuit { if (Event::handle('StartShowHTML', array($this))) { $this->startHTML(); + $this->flush(); Event::handle('EndShowHTML', array($this)); } if (Event::handle('StartShowHead', array($this))) { $this->showHead(); + $this->flush(); Event::handle('EndShowHead', array($this)); } if (Event::handle('StartShowBody', array($this))) { @@ -111,7 +118,7 @@ class Action extends HTMLOutputter // lawsuit } } - function endHTML() + function timingComment() { global $_startTime; @@ -120,10 +127,15 @@ class Action extends HTMLOutputter // lawsuit $diff = round(($endTime - $_startTime) * 1000); $this->raw(""); } + } + function endHTML() + { + $this->timingComment(); return parent::endHTML(); } + /** * Show head, a template method. * @@ -132,6 +144,7 @@ class Action extends HTMLOutputter // lawsuit function showHead() { // XXX: attributes (profile?) + $this->timingComment(); $this->elementStart('head'); if (Event::handle('StartShowHeadElements', array($this))) { if (Event::handle('StartShowHeadTitle', array($this))) { @@ -147,6 +160,7 @@ class Action extends HTMLOutputter // lawsuit Event::handle('EndShowHeadElements', array($this)); } $this->elementEnd('head'); + $this->timingComment(); } /** @@ -158,7 +172,7 @@ class Action extends HTMLOutputter // lawsuit { $this->element('title', null, // TRANS: Page title. %1$s is the title, %2$s is the site name. - sprintf(_("%1\$s - %2\$s"), + sprintf(_('%1$s - %2$s'), $this->title(), common_config('site', 'name'))); } @@ -174,7 +188,7 @@ class Action extends HTMLOutputter // lawsuit function title() { // TRANS: Page title for a page without a title set. - return _("Untitled page"); + return _('Untitled page'); } /** @@ -222,6 +236,8 @@ class Action extends HTMLOutputter // lawsuit Event::handle('EndShowLaconicaStyles', array($this)); } + $this->cssLink(common_path('js/css/smoothness/jquery-ui.css')); + if (Event::handle('StartShowUAStyles', array($this))) { $this->comment('[if IE]>getExternals() as $url) { + $this->cssLink($url, $mainTheme, $media); + } + // If the currently-selected theme has dependencies on other themes, // we'll need to load their display.css files as well in order. - $theme = new Theme($mainTheme); $baseThemes = $theme->getDeps(); foreach ($baseThemes as $baseTheme) { $this->cssLink('css/display.css', $baseTheme, $media); @@ -286,11 +309,21 @@ class Action extends HTMLOutputter // lawsuit { if (Event::handle('StartShowScripts', array($this))) { if (Event::handle('StartShowJQueryScripts', array($this))) { - $this->script('jquery.min.js'); - $this->script('jquery.form.min.js'); - $this->script('jquery.cookie.min.js'); - $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/json2.min.js').'"); }'); - $this->script('jquery.joverlay.min.js'); + if (common_config('site', 'minify')) { + $this->script('jquery.min.js'); + $this->script('jquery.form.min.js'); + $this->script('jquery-ui.min.js'); + $this->script('jquery.cookie.min.js'); + $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/json2.min.js').'"); }'); + $this->script('jquery.joverlay.min.js'); + } else { + $this->script('jquery.js'); + $this->script('jquery.form.js'); + $this->script('jquery-ui.min.js'); + $this->script('jquery.cookie.js'); + $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/json2.js').'"); }'); + $this->script('jquery.joverlay.js'); + } Event::handle('EndShowJQueryScripts', array($this)); } if (Event::handle('StartShowStatusNetScripts', array($this)) && @@ -441,22 +474,31 @@ class Action extends HTMLOutputter // lawsuit */ function showBody() { + $this->timingComment(); $this->elementStart('body', (common_current_user()) ? array('id' => strtolower($this->trimmed('action')), 'class' => 'user_in') : array('id' => strtolower($this->trimmed('action')))); $this->elementStart('div', array('id' => 'wrap')); if (Event::handle('StartShowHeader', array($this))) { + $this->timingComment(); $this->showHeader(); + $this->flush(); + $this->timingComment(); Event::handle('EndShowHeader', array($this)); } $this->showCore(); + $this->flush(); if (Event::handle('StartShowFooter', array($this))) { + $this->timingComment(); $this->showFooter(); + $this->flush(); + $this->timingComment(); Event::handle('EndShowFooter', array($this)); } $this->elementEnd('div'); $this->showScripts(); $this->elementEnd('body'); + $this->timingComment(); } /** @@ -476,14 +518,7 @@ class Action extends HTMLOutputter // lawsuit Event::handle('EndShowSiteNotice', array($this)); } - if (common_logged_in()) { - if (Event::handle('StartShowNoticeForm', array($this))) { - $this->showNoticeForm(); - Event::handle('EndShowNoticeForm', array($this)); - } - } else { - $this->showAnonymousMessage(); - } + $this->elementEnd('div'); } @@ -555,69 +590,10 @@ class Action extends HTMLOutputter // lawsuit */ function showPrimaryNav() { - $user = common_current_user(); - $this->elementStart('ul', array('class' => 'nav', - 'id' => 'site_nav_global_primary')); - if (Event::handle('StartPrimaryNav', array($this))) { - if (!empty($user)) { - $this->menuItem(common_local_url('all', - array('nickname' => $user->nickname)), - _m('Home'), - _m('Friends timeline'), - false, - 'nav_home'); - $this->menuItem(common_local_url('showstream', - array('nickname' => $user->nickname)), - _m('Profile'), - _m('Your profile'), - false, - 'nav_profile'); - $this->menuItem(common_local_url('public'), - _m('Public'), - _m('Everyone on this site'), - false, - 'nav_public'); - $this->menuItem(common_local_url('profilesettings'), - _m('Settings'), - _m('Change your personal settings'), - false, - 'nav_account'); - if ($user->hasRight(Right::CONFIGURESITE)) { - $this->menuItem(common_local_url('siteadminpanel'), - _m('Admin'), - _m('Site configuration'), - false, - 'nav_admin'); - } - $this->menuItem(common_local_url('logout'), - _m('Logout'), - _m('Logout from the site'), - false, - 'nav_logout'); - } else { - $this->menuItem(common_local_url('public'), - _m('Public'), - _m('Everyone on this site'), - false, - 'nav_public'); - $this->menuItem(common_local_url('login'), - _m('Login'), - _m('Login to the site'), - false, - 'nav_login'); - } - - if (!empty($user) || !common_config('site', 'private')) { - $this->menuItem(common_local_url('noticesearch'), - _m('Search'), - _m('Search the site'), - false, - 'nav_search'); - } - - Event::handle('EndPrimaryNav', array($this)); - } - $this->elementEnd('ul'); + $this->elementStart('div', array('id' => 'site_nav_global_primary')); + $pn = new PrimaryNav($this); + $pn->show(); + $this->elementEnd('div'); } /** @@ -646,24 +622,25 @@ class Action extends HTMLOutputter // lawsuit */ function showNoticeForm() { - $tabs = array('status' => _('Status')); + // TRANS: Tab on the notice form. + $tabs = array('status' => _m('TAB','Status')); $this->elementStart('div', 'input_forms'); if (Event::handle('StartShowEntryForms', array(&$tabs))) { - $this->elementStart('ul', array('class' => 'nav', 'id' => 'input_form_nav')); foreach ($tabs as $tag => $title) { - $attrs = array('id' => 'input_form_nav_'.$tag, 'class' => 'input_form_nav_tab'); if ($tag == 'status') { - $attrs['class'] = 'current'; + // We're actually showing the placeholder form, + // but we special-case the 'Status' tab as if + // it were a small version of it. + $attrs['class'] .= ' current'; } - $this->elementStart('li', $attrs); $this->element('a', @@ -674,22 +651,25 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('ul'); - foreach ($tabs as $tag => $title) { + $attrs = array('class' => 'input_form current', + 'id' => 'input_form_placeholder'); + $this->elementStart('div', $attrs); + $form = new NoticePlaceholderForm($this); + $form->show(); + $this->elementEnd('div'); + foreach ($tabs as $tag => $title) { $attrs = array('class' => 'input_form', 'id' => 'input_form_'.$tag); - if ($tag == 'status') { - $attrs['class'] .= ' current'; - } - $this->elementStart('div', $attrs); $form = null; if (Event::handle('StartMakeEntryForm', array($tag, $this, &$form))) { if ($tag == 'status') { - $form = new NoticeForm($this); + $options = $this->noticeFormOptions(); + $form = new NoticeForm($this, $options); } Event::handle('EndMakeEntryForm', array($tag, $this, $form)); } @@ -701,6 +681,13 @@ class Action extends HTMLOutputter // lawsuit $this->elementEnd('div'); } } + + $this->elementEnd('div'); + } + + function noticeFormOptions() + { + return array(); } /** @@ -725,19 +712,34 @@ class Action extends HTMLOutputter // lawsuit function showCore() { $this->elementStart('div', array('id' => 'core')); + $this->elementStart('div', array('id' => 'aside_primary_wrapper')); + $this->elementStart('div', array('id' => 'content_wrapper')); + $this->elementStart('div', array('id' => 'site_nav_local_views_wrapper')); if (Event::handle('StartShowLocalNavBlock', array($this))) { + $this->timingComment(); $this->showLocalNavBlock(); + $this->flush(); + $this->timingComment(); Event::handle('EndShowLocalNavBlock', array($this)); } if (Event::handle('StartShowContentBlock', array($this))) { + $this->timingComment(); $this->showContentBlock(); + $this->flush(); + $this->timingComment(); Event::handle('EndShowContentBlock', array($this)); } if (Event::handle('StartShowAside', array($this))) { + $this->timingComment(); $this->showAside(); + $this->flush(); + $this->timingComment(); Event::handle('EndShowAside', array($this)); } $this->elementEnd('div'); + $this->elementEnd('div'); + $this->elementEnd('div'); + $this->elementEnd('div'); } /** @@ -750,10 +752,25 @@ class Action extends HTMLOutputter // lawsuit // Need to have this ID for CSS; I'm too lazy to add it to // all menus $this->elementStart('div', array('id' => 'site_nav_local_views')); + // Cheat cheat cheat! $this->showLocalNav(); $this->elementEnd('div'); } + /** + * If there's a logged-in user, show a bit of login context + * + * @return nothing + */ + + function showProfileBlock() + { + if (common_logged_in()) { + $block = new DefaultProfileBlock($this); + $block->show(); + } + } + /** * Show local navigation. * @@ -763,7 +780,43 @@ class Action extends HTMLOutputter // lawsuit */ function showLocalNav() { - // does nothing by default + $nav = new DefaultLocalNav($this); + $nav->show(); + } + + /** + * Show menu for an object (group, profile) + * + * This block will only show if a subclass has overridden + * the showObjectNav() method. + * + * @return nothing + */ + function showObjectNavBlock() + { + $rmethod = new ReflectionMethod($this, 'showObjectNav'); + $dclass = $rmethod->getDeclaringClass()->getName(); + + if ($dclass != 'Action') { + // Need to have this ID for CSS; I'm too lazy to add it to + // all menus + $this->elementStart('div', array('id' => 'site_nav_object', + 'class' => 'section')); + $this->showObjectNav(); + $this->elementEnd('div'); + } + } + + /** + * Show object navigation. + * + * If there are things to do with this object, show it here. + * + * @return nothing + */ + function showObjectNav() + { + /* Nothing here. */ } /** @@ -774,6 +827,12 @@ class Action extends HTMLOutputter // lawsuit function showContentBlock() { $this->elementStart('div', array('id' => 'content')); + if (common_logged_in()) { + if (Event::handle('StartShowNoticeForm', array($this))) { + $this->showNoticeForm(); + Event::handle('EndShowNoticeForm', array($this)); + } + } if (Event::handle('StartShowPageTitle', array($this))) { $this->showPageTitle(); Event::handle('EndShowPageTitle', array($this)); @@ -855,6 +914,11 @@ class Action extends HTMLOutputter // lawsuit { $this->elementStart('div', array('id' => 'aside_primary', 'class' => 'aside')); + $this->showProfileBlock(); + if (Event::handle('StartShowObjectNavBlock', array($this))) { + $this->showObjectNavBlock(); + Event::handle('EndShowObjectNavBlock', array($this)); + } if (Event::handle('StartShowSections', array($this))) { $this->showSections(); Event::handle('EndShowSections', array($this)); @@ -915,43 +979,8 @@ class Action extends HTMLOutputter // lawsuit */ function showSecondaryNav() { - $this->elementStart('ul', array('class' => 'nav', - 'id' => 'site_nav_global_secondary')); - if (Event::handle('StartSecondaryNav', array($this))) { - $this->menuItem(common_local_url('doc', array('title' => 'help')), - // TRANS: Secondary navigation menu option leading to help on StatusNet. - _('Help')); - $this->menuItem(common_local_url('doc', array('title' => 'about')), - // TRANS: Secondary navigation menu option leading to text about StatusNet site. - _('About')); - $this->menuItem(common_local_url('doc', array('title' => 'faq')), - // TRANS: Secondary navigation menu option leading to Frequently Asked Questions. - _('FAQ')); - $bb = common_config('site', 'broughtby'); - if (!empty($bb)) { - $this->menuItem(common_local_url('doc', array('title' => 'tos')), - // TRANS: Secondary navigation menu option leading to Terms of Service. - _('TOS')); - } - $this->menuItem(common_local_url('doc', array('title' => 'privacy')), - // TRANS: Secondary navigation menu option leading to privacy policy. - _('Privacy')); - $this->menuItem(common_local_url('doc', array('title' => 'source')), - // TRANS: Secondary navigation menu option. Leads to information about StatusNet and its license. - _('Source')); - $this->menuItem(common_local_url('version'), - // TRANS: Secondary navigation menu option leading to version information on the StatusNet site. - _('Version')); - $this->menuItem(common_local_url('doc', array('title' => 'contact')), - // TRANS: Secondary navigation menu option leading to e-mail contact information on the - // TRANS: StatusNet site, where to report bugs, ... - _('Contact')); - $this->menuItem(common_local_url('doc', array('title' => 'badge')), - // TRANS: Secondary navigation menu option. Leads to information about embedding a timeline widget. - _('Badge')); - Event::handle('EndSecondaryNav', array($this)); - } - $this->elementEnd('ul'); + $sn = new SecondaryNav($this); + $sn->show(); } /**