From 9db190c7e736ec8d063187d4241b59feaf7dc2d1 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 22 Jun 2011 11:28:20 +0200 Subject: update to MediaWiki 1.17.0 --- skins/Vector.php | 234 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 133 insertions(+), 101 deletions(-) (limited to 'skins/Vector.php') diff --git a/skins/Vector.php b/skins/Vector.php index b678b7e3..84f38d30 100644 --- a/skins/Vector.php +++ b/skins/Vector.php @@ -8,8 +8,9 @@ * @ingroup Skins */ -if( !defined( 'MEDIAWIKI' ) ) +if( !defined( 'MEDIAWIKI' ) ) { die( -1 ); +} /** * SkinTemplate class for Vector skin @@ -23,39 +24,41 @@ class SkinVector extends SkinTemplate { /** * Initializes output page and sets up skin-specific parameters - * @param object $out Output page object to initialize + * @param $out OutputPage object to initialize */ public function initPage( OutputPage $out ) { - global $wgStylePath, $wgJsMimeType, $wgStyleVersion, $wgScriptPath, $wgVectorExtraStyles; - - parent::initPage( $out ); + global $wgLocalStylePath, $wgRequest; - // Append skin-specific styles - $out->addStyle( 'vector/main-rtl.css', 'screen', '', 'rtl' ); - $out->addStyle( 'vector/main-ltr.css', 'screen', '', 'ltr' ); + parent::initPage( $out ); + // Append CSS which includes IE only behavior fixes for hover support - // this is better than including this in a CSS fille since it doesn't // wait for the CSS file to load before fetching the HTC file. - $out->addScript( + $min = $wgRequest->getFuzzyBool( 'debug' ) ? '' : '.min'; + $out->addHeadItem( 'csshover', '' + htmlspecialchars( $wgLocalStylePath ) . + "/{$this->stylename}/csshover{$min}.htc\")}" ); - // Add extra stylesheets - // THIS IS ONLY USEFUL FOR EXPERIMENTING WITH DIFFERNT STYLE OPTIONS! THIS WILL BE REMOVED IN THE NEAR FUTURE. - if ( is_array( $wgVectorExtraStyles ) ) { - foreach ( $wgVectorExtraStyles as $style ) { - $out->addStyle( 'vector/' . $style, 'screen' ); - } - } } + + /** + * Load skin and user CSS files in the correct order + * fixes bug 22916 + * @param $out OutputPage object + */ + function setupSkinUserCss( OutputPage $out ){ + parent::setupSkinUserCss( $out ); + $out->addModuleStyles( 'skins.vector' ); + } + /** * Builds a structured array of links used for tabs and menus * @return array * @private */ function buildNavigationUrls() { - global $wgContLang, $wgLang, $wgOut, $wgUser, $wgRequest, $wgArticle, $wgStylePath; + global $wgContLang, $wgLang, $wgOut, $wgUser, $wgRequest, $wgArticle; global $wgDisableLangConversion, $wgVectorUseIconWatch; wfProfileIn( __METHOD__ ); @@ -71,9 +74,10 @@ class SkinVector extends SkinTemplate { $action = $wgRequest->getVal( 'action', 'view' ); $section = $wgRequest->getVal( 'section' ); + $userCanRead = $this->mTitle->userCanRead(); + // Checks if page is some kind of content if( $this->iscontent ) { - // Gets page objects for the related namespaces $subjectPage = $this->mTitle->getSubjectPage(); $talkPage = $this->mTitle->getTalkPage(); @@ -89,23 +93,22 @@ class SkinVector extends SkinTemplate { } else { $talkId = "{$subjectId}_talk"; } - $currentId = $isTalk ? $talkId : $subjectId; // Adds namespace links $links['namespaces'][$subjectId] = $this->tabAction( - $subjectPage, 'vector-namespace-' . $subjectId, !$isTalk, '', true + $subjectPage, 'nstab-' . $subjectId, !$isTalk, '', $userCanRead ); $links['namespaces'][$subjectId]['context'] = 'subject'; $links['namespaces'][$talkId] = $this->tabAction( - $talkPage, 'vector-namespace-talk', $isTalk, '', true + $talkPage, 'talk', $isTalk, '', $userCanRead ); $links['namespaces'][$talkId]['context'] = 'talk'; // Adds view view link - if ( $this->mTitle->exists() ) { + if ( $this->mTitle->exists() && $userCanRead ) { $links['views']['view'] = $this->tabAction( $isTalk ? $talkPage : $subjectPage, - 'vector-view-view', ( $action == 'view' ), '', true + 'vector-view-view', ( $action == 'view' || $action == 'purge' ), '', true ); } @@ -113,8 +116,8 @@ class SkinVector extends SkinTemplate { // Checks if user can... if ( - // edit the current page - $this->mTitle->quickUserCan( 'edit' ) && + // read and edit the current page + $userCanRead && $this->mTitle->quickUserCan( 'edit' ) && ( // if it exists $this->mTitle->exists() || @@ -136,11 +139,11 @@ class SkinVector extends SkinTemplate { ? wfMsg( 'vector-view-edit' ) : wfMsg( 'vector-view-create' ), 'href' => - $this->mTitle->getLocalUrl( $this->editUrlOptions() ) + $this->mTitle->getLocalURL( $this->editUrlOptions() ) ); // Checks if this is a current rev of talk page and we should show a new // section link - if ( ( $isTalk && $wgArticle->isCurrent() ) || ( $wgOut->showNewSectionLink() ) ) { + if ( ( $isTalk && $wgArticle && $wgArticle->isCurrent() ) || ( $wgOut->showNewSectionLink() ) ) { // Checks if we should ever show a new section link if ( !$wgOut->forceHideNewSectionLink() ) { // Adds new section link @@ -148,20 +151,20 @@ class SkinVector extends SkinTemplate { $links['views']['addsection'] = array( 'class' => 'collapsible ' . ( $section == 'new' ? 'selected' : false ), 'text' => wfMsg( 'vector-action-addsection' ), - 'href' => $this->mTitle->getLocalUrl( + 'href' => $this->mTitle->getLocalURL( 'action=edit§ion=new' ) ); } } - // Checks if the page is known (some kind of viewable content) - } elseif ( $this->mTitle->isKnown() ) { + // Checks if the page has some kind of viewable content + } elseif ( $this->mTitle->hasSourceText() && $userCanRead ) { // Adds view source view link $links['views']['viewsource'] = array( 'class' => ( $action == 'edit' ) ? 'selected' : false, 'text' => wfMsg( 'vector-view-viewsource' ), 'href' => - $this->mTitle->getLocalUrl( $this->editUrlOptions() ) + $this->mTitle->getLocalURL( $this->editUrlOptions() ) ); } wfProfileOut( __METHOD__ . '-edit' ); @@ -169,20 +172,20 @@ class SkinVector extends SkinTemplate { wfProfileIn( __METHOD__ . '-live' ); // Checks if the page exists - if ( $this->mTitle->exists() ) { + if ( $this->mTitle->exists() && $userCanRead ) { // Adds history view link $links['views']['history'] = array( - 'class' => 'collapsible ' . ( ($action == 'history') ? 'selected' : false ), + 'class' => 'collapsible ' . ( ( $action == 'history' ) ? 'selected' : false ), 'text' => wfMsg( 'vector-view-history' ), - 'href' => $this->mTitle->getLocalUrl( 'action=history' ), + 'href' => $this->mTitle->getLocalURL( 'action=history' ), 'rel' => 'archives', ); if( $wgUser->isAllowed( 'delete' ) ) { $links['actions']['delete'] = array( - 'class' => ($action == 'delete') ? 'selected' : false, + 'class' => ( $action == 'delete' ) ? 'selected' : false, 'text' => wfMsg( 'vector-action-delete' ), - 'href' => $this->mTitle->getLocalUrl( 'action=delete' ) + 'href' => $this->mTitle->getLocalURL( 'action=delete' ) ); } if ( $this->mTitle->quickUserCan( 'move' ) ) { @@ -193,7 +196,7 @@ class SkinVector extends SkinTemplate { 'class' => $this->mTitle->isSpecial( 'Movepage' ) ? 'selected' : false, 'text' => wfMsg( 'vector-action-move' ), - 'href' => $moveTitle->getLocalUrl() + 'href' => $moveTitle->getLocalURL() ); } @@ -201,22 +204,22 @@ class SkinVector extends SkinTemplate { $this->mTitle->getNamespace() !== NS_MEDIAWIKI && $wgUser->isAllowed( 'protect' ) ) { - if ( !$this->mTitle->isProtected() ){ + if ( !$this->mTitle->isProtected() ) { $links['actions']['protect'] = array( - 'class' => ($action == 'protect') ? + 'class' => ( $action == 'protect' ) ? 'selected' : false, 'text' => wfMsg( 'vector-action-protect' ), 'href' => - $this->mTitle->getLocalUrl( 'action=protect' ) + $this->mTitle->getLocalURL( 'action=protect' ) ); } else { $links['actions']['unprotect'] = array( - 'class' => ($action == 'unprotect') ? + 'class' => ( $action == 'unprotect' ) ? 'selected' : false, 'text' => wfMsg( 'vector-action-unprotect' ), 'href' => - $this->mTitle->getLocalUrl( 'action=unprotect' ) + $this->mTitle->getLocalURL( 'action=unprotect' ) ); } } @@ -226,7 +229,8 @@ class SkinVector extends SkinTemplate { $wgUser->isAllowed( 'deletedhistory' ) && $wgUser->isAllowed( 'undelete' ) ) { - if( $n = $this->mTitle->isDeleted() ) { + $n = $this->mTitle->isDeleted(); + if( $n ) { $undelTitle = SpecialPage::getTitleFor( 'Undelete' ); $links['actions']['undelete'] = array( 'class' => false, @@ -235,7 +239,7 @@ class SkinVector extends SkinTemplate { array( 'parsemag' ), $wgLang->formatNum( $n ) ), - 'href' => $undelTitle->getLocalUrl( + 'href' => $undelTitle->getLocalURL( 'target=' . urlencode( $this->thispage ) ) ); @@ -248,20 +252,20 @@ class SkinVector extends SkinTemplate { ) { if ( !$this->mTitle->getRestrictions( 'create' ) ) { $links['actions']['protect'] = array( - 'class' => ($action == 'protect') ? + 'class' => ( $action == 'protect' ) ? 'selected' : false, 'text' => wfMsg( 'vector-action-protect' ), 'href' => - $this->mTitle->getLocalUrl( 'action=protect' ) + $this->mTitle->getLocalURL( 'action=protect' ) ); } else { $links['actions']['unprotect'] = array( - 'class' => ($action == 'unprotect') ? + 'class' => ( $action == 'unprotect' ) ? 'selected' : false, 'text' => wfMsg( 'vector-action-unprotect' ), 'href' => - $this->mTitle->getLocalUrl( 'action=unprotect' ) + $this->mTitle->getLocalURL( 'action=unprotect' ) ); } } @@ -279,7 +283,7 @@ class SkinVector extends SkinTemplate { // Checks if the user is logged in if ( $this->loggedin ) { if ( $wgVectorUseIconWatch ) { - $class = 'icon '; + $class = 'icon'; $place = 'views'; } else { $class = ''; @@ -289,7 +293,7 @@ class SkinVector extends SkinTemplate { $links[$place][$mode] = array( 'class' => $class . ( ( $action == 'watch' || $action == 'unwatch' ) ? ' selected' : false ), 'text' => wfMsg( $mode ), // uses 'watch' or 'unwatch' message - 'href' => $this->mTitle->getLocalUrl( 'action=' . $mode ) + 'href' => $this->mTitle->getLocalURL( 'action=' . $mode ) ); } // This is instead of SkinTemplateTabs - which uses a flat array @@ -299,9 +303,11 @@ class SkinVector extends SkinTemplate { } else { $links['namespaces']['special'] = array( 'class' => 'selected', - 'text' => wfMsg( 'vector-namespace-special' ), + 'text' => wfMsg( 'nstab-special' ), 'href' => $wgRequest->getRequestURL() ); + // Equiv to SkinTemplateBuildContentActionUrlsAfterSpecialPage + wfRunHooks( 'SkinTemplateNavigation::SpecialPage', array( &$this, &$links ) ); } // Gets list of language variants @@ -328,6 +334,9 @@ class SkinVector extends SkinTemplate { } } + // Equiv to SkinTemplateContentActions + wfRunHooks( 'SkinTemplateNavigation::Universal', array( &$this, &$links ) ); + wfProfileOut( __METHOD__ ); return $links; @@ -353,7 +362,7 @@ class VectorTemplate extends QuickTemplate { * Outputs the entire contents of the XHTML page */ public function execute() { - global $wgRequest, $wgOut, $wgContLang; + global $wgRequest, $wgLang; $this->skin = $this->data['skin']; $action = $wgRequest->getText( 'action' ); @@ -372,26 +381,26 @@ class VectorTemplate extends QuickTemplate { } $nav[$section][$key]['attributes'] = ' id="' . Sanitizer::escapeId( $xmlID ) . '"'; - if ( $nav[$section][$key]['class'] ) { + if ( $nav[$section][$key]['class'] ) { $nav[$section][$key]['attributes'] .= ' class="' . htmlspecialchars( $link['class'] ) . '"'; unset( $nav[$section][$key]['class'] ); - } + } // We don't want to give the watch tab an accesskey if the page // is being edited, because that conflicts with the accesskey on // the watch checkbox. We also don't want to give the edit tab // an accesskey, because that's fairly superfluous and conflicts // with an accesskey (Ctrl-E) often used for editing in Safari. - if ( + if ( in_array( $action, array( 'edit', 'submit' ) ) && in_array( $key, array( 'edit', 'watch', 'unwatch' ) ) ) { - $nav[$section][$key]['key'] = + $nav[$section][$key]['key'] = $this->skin->tooltip( $xmlID ); - } else { - $nav[$section][$key]['key'] = + } else { + $nav[$section][$key]['key'] = $this->skin->tooltipAndAccesskey( $xmlID ); - } + } } } $this->data['namespace_urls'] = $nav['namespaces']; @@ -411,21 +420,8 @@ class VectorTemplate extends QuickTemplate { } // Generate additional footer links - $footerlinks = array( - 'info' => array( - 'lastmod', - 'viewcount', - 'numberofwatchingusers', - 'credits', - 'copyright', - 'tagline', - ), - 'places' => array( - 'privacy', - 'about', - 'disclaimer', - ), - ); + $footerlinks = $this->data["footerlinks"]; + // Reduce footer links down to only those which are being used $validFooterLinks = array(); foreach( $footerlinks as $category => $links ) { @@ -436,8 +432,26 @@ class VectorTemplate extends QuickTemplate { } } } + + // Generate additional footer icons + $footericons = $this->data["footericons"]; + // Unset any icons which don't have an image + foreach ( $footericons as $footerIconsKey => &$footerIconsBlock ) { + foreach ( $footerIconsBlock as $footerIconKey => $footerIcon ) { + if ( !is_string($footerIcon) && !isset($footerIcon["src"]) ) { + unset($footerIconsBlock[$footerIconKey]); + } + } + } + // Redo removal of any empty blocks + foreach ( $footericons as $footerIconsKey => &$footerIconsBlock ) { + if ( count($footerIconsBlock) <= 0 ) { + unset($footericons[$footerIconsKey]); + } + } + // Reverse horizontally rendered navigation elements - if ( $wgContLang->isRTL() ) { + if ( $wgLang->isRTL() ) { $this->data['view_urls'] = array_reverse( $this->data['view_urls'] ); $this->data['namespace_urls'] = @@ -451,7 +465,7 @@ class VectorTemplate extends QuickTemplate {
-
html('specialpageattributes') ?>> +
html('specialpageattributes') ?>> data['sitenotice'] ): ?> @@ -465,7 +479,7 @@ class VectorTemplate extends QuickTemplate {
-

msg( 'tagline' ) ?>

+
msg( 'tagline' ) ?>
html('userlangattributes') ?>>html( 'subtitle' ) ?>
@@ -538,21 +552,25 @@ class VectorTemplate extends QuickTemplate { - + 0 ): ?> + +
+ html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?> - html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?> html( 'reporttime' ) ?> data['debug'] ): ?> @@ -625,7 +643,7 @@ class VectorTemplate extends QuickTemplate {
    data['language_urls'] as $langlink ): ?> -
  • +
@@ -640,7 +658,7 @@ class VectorTemplate extends QuickTemplate {
@@ -661,14 +679,14 @@ class VectorTemplate extends QuickTemplate { * when UI is in RTL mode */ private function renderNavigation( $elements ) { - global $wgContLang, $wgVectorUseSimpleSearch, $wgStylePath; + global $wgVectorUseSimpleSearch, $wgVectorShowVariantName, $wgUser; // If only one element was given, wrap it in an array, allowing more // flexible arguments if ( !is_array( $elements ) ) { $elements = array( $elements ); // If there's a series of elements, reverse them when in RTL mode - } else if ( $wgContLang->isRTL() ) { + } else if ( wfUILang()->isRTL() ) { $elements = array_reverse( $elements ); } // Render elements @@ -680,8 +698,8 @@ class VectorTemplate extends QuickTemplate {
msg('namespaces') ?>
html('userlangattributes') ?>> - data['namespace_urls'] as $key => $link ): ?> -
  • >>
  • + data['namespace_urls'] as $link ): ?> +
  • >>
  • @@ -690,10 +708,19 @@ class VectorTemplate extends QuickTemplate { case 'VARIANTS': ?>
    + +

    + data['variant_urls'] as $link ): ?> + + + + +

    +
    msg('variants') ?>