X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FOutputPage.php;h=1de0b653b66cfb8f42c1ed4cd264bd5d0ada2cfd;hb=5ce6ddebb4290124ddd875f4b02e1152c5a69019;hp=daed70ad55b4412b6b2359ae03c825a872d1c7cf;hpb=8d31540754332704d39b0c5a39e23a228e7d14c2;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/OutputPage.php b/includes/OutputPage.php index daed70ad55..1de0b653b6 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -11,7 +11,7 @@ if ( !defined( 'MEDIAWIKI' ) ) { * This class is used to prepare the final rendering. A skin is then * applied to the output parameters (links, javascript, html, categories ...). * - * Another class (fixme) handles sending the whole page to the client. + * @todo FIXME: Another class handles sending the whole page to the client. * * Some comments comes from a pairing session between Zak Greant and Ashar Voultoiz * in November 2010. @@ -79,7 +79,7 @@ class OutputPage { * to compare its cached version with the server version. Client sends * headers If-Match and If-None-Match containing its locally cached ETAG value. * - * To get more information, you will have to look at HTTP1/1 protocols which + * To get more information, you will have to look at HTTP/1.1 protocol which * is properly described in RFC 2616 : http://tools.ietf.org/html/rfc2616 */ var $mETag = false; @@ -115,11 +115,11 @@ class OutputPage { /// Array of elements in
. Parser might add its own headers! var $mHeadItems = array(); - // Next variables probably comes from the resource loader @todo FIXME + // @todo FIXME: Next variables probably comes from the resource loader var $mModules = array(), $mModuleScripts = array(), $mModuleStyles = array(), $mModuleMessages = array(); var $mResourceLoader; - /** @fixme is this still used ?*/ + /** @todo FIXME: Is this still used ?*/ var $mInlineMsg = array(); var $mTemplateIds = array(); @@ -190,6 +190,8 @@ class OutputPage { /// should be private. To include the variable {{REVISIONID}} var $mRevisionId = null; + var $mFileVersion = null; + private $mContext; /** @@ -307,7 +309,7 @@ class OutputPage { * * @return String */ - private function getMetadataAttribute() { + public function getMetadataAttribute() { # note: buggy CC software only reads first "meta" link static $haveMeta = false; if ( $haveMeta ) { @@ -391,6 +393,7 @@ class OutputPage { * which are no longer registered (eg a page is cached before an extension is disabled) * @param $modules Array * @param $position String if not null, only return modules with this position + * @param $type string * @return Array */ protected function filterModules( $modules, $position = null, $type = ResourceLoaderModule::TYPE_COMBINED ){ @@ -413,6 +416,7 @@ class OutputPage { * * @param $filter Bool whether to filter out insufficiently trustworthy modules * @param $position String if not null, only return modules with this position + * @param $param string * @return Array of module names */ public function getModules( $filter = false, $position = null, $param = 'mModules' ) { @@ -435,6 +439,10 @@ class OutputPage { /** * Get the list of module JS to include on this page + * + * @param $filter + * @param $position + * * @return array of module names */ public function getModuleScripts( $filter = false, $position = null ) { @@ -455,6 +463,9 @@ class OutputPage { /** * Get the list of module CSS to include on this page * + * @param $filter + * @param $position + * * @return Array of module names */ public function getModuleStyles( $filter = false, $position = null ) { @@ -475,6 +486,9 @@ class OutputPage { /** * Get the list of module messages to include on this page * + * @param $filter + * @param $position + * * @return Array of module names */ public function getModuleMessages( $filter = false, $position = null ) { @@ -561,6 +575,8 @@ class OutputPage { * * Side effect: sets mLastModified for Last-Modified header * + * @param $timestamp string + * * @return Boolean: true iff cache-ok headers was sent. */ public function checkLastModified( $timestamp ) { @@ -724,6 +740,8 @@ class OutputPage { /** * "HTML title" means the contents of{$link}
\n" ); } @@ -2264,15 +2257,14 @@ class OutputPage { * @return String: The doctype, opening , and head element. */ public function headElement( Skin $sk, $includeStyle = true ) { - global $wgUseTrackbacks; + global $wgUseTrackbacks, $wgLang; if ( $sk->commonPrintStylesheet() ) { $this->addModuleStyles( 'mediawiki.legacy.wikiprintable' ); } $sk->setupUserCss( $this ); - $lang = wfUILang(); - $ret = Html::htmlHeader( array( 'lang' => $lang->getCode(), 'dir' => $lang->getDir() ) ); + $ret = Html::htmlHeader( array( 'lang' => $wgLang->getCode(), 'dir' => $wgLang->getDir() ) ); if ( $this->getHTMLTitle() == '' ) { $this->setHTMLTitle( wfMsg( 'pagetitle', $this->getPageTitle() ) ); @@ -2318,9 +2310,11 @@ class OutputPage { Xml::escapeJsString( $editUrl ) . "'"; } - # Class bloat - $dir = wfUILang()->getDir(); - $bodyAttrs['class'] = "mediawiki $dir"; + # Classes for LTR/RTL directionality support + global $wgLang, $wgContLang; + $userdir = $wgLang->getDir(); + $sitedir = $wgContLang->getDir(); + $bodyAttrs['class'] = "mediawiki $userdir sitedir-$sitedir"; if ( $this->getContext()->getLang()->capitalizeAllNouns() ) { # A class is probably not the best way to do this . . . @@ -2345,8 +2339,13 @@ class OutputPage { $wgUseAjax, $wgAjaxWatch, $wgEnableMWSuggest; // Add base resources - $this->addModules( 'mediawiki.util' ); - if( $wgIncludeLegacyJavaScript ){ + $this->addModules( array( + 'mediawiki.user', + 'mediawiki.util', + 'mediawiki.page.startup', + 'mediawiki.page.ready', + ) ); + if ( $wgIncludeLegacyJavaScript ){ $this->addModules( 'mediawiki.legacy.wikibits' ); } @@ -2368,7 +2367,6 @@ class OutputPage { if( $this->getUser()->getBoolOption( 'editsectiononrightclick' ) ) { $this->addModules( 'mediawiki.action.view.rightClickEdit' ); } - $this->addModules( 'mediawiki.action.view.tablesorting' ); } /** @@ -2509,6 +2507,9 @@ class OutputPage { ksort( $query ); $url = wfAppendQuery( $wgLoadScript, $query ); + // Prevent the IE6 extension check from being triggered (bug 28840) + // by appending a character that's invalid in Windows extensions ('*') + $url .= '&*'; if ( $useESI && $wgResourceLoaderUseESI ) { $esi = Xml::element( 'esi:include', array( 'src' => $url ) ); if ( $only == ResourceLoaderModule::TYPE_STYLES ) { @@ -2519,9 +2520,9 @@ class OutputPage { } else { // Automatically select style/script elements if ( $only === ResourceLoaderModule::TYPE_STYLES ) { - $link = Html::linkedStyle( wfAppendQuery( $wgLoadScript, $query ) ); + $link = Html::linkedStyle( $url ); } else { - $link = Html::linkedScript( wfAppendQuery( $wgLoadScript, $query ) ); + $link = Html::linkedScript( $url ); } } @@ -2563,8 +2564,7 @@ class OutputPage { if ( $modules ) { $scripts .= Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( - Xml::encodeJsCall( 'mw.loader.load', array( $modules ) ) . - Xml::encodeJsCall( 'mw.loader.go', array() ) + Xml::encodeJsCall( 'mw.loader.load', array( $modules ) ) ) ); } @@ -2575,6 +2575,10 @@ class OutputPage { /** * JS stuff to put at the bottom of the : modules marked with position 'bottom', * legacy scripts ($this->mScripts), user preferences, site JS and user JS + * + * @param $sk Skin + * + * @return string */ function getBottomScripts( Skin $sk ) { global $wgUseSiteJs, $wgAllowUserJs; @@ -2590,9 +2594,7 @@ class OutputPage { if ( $modules ) { $scripts .= Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( - Xml::encodeJsCall( 'mw.loader.load', array( $modules ) ) . - // the go() call is unnecessary if we inserted top modules, but we don't know for sure that we did - Xml::encodeJsCall( 'mw.loader.go', array() ) + Xml::encodeJsCall( 'mw.loader.load', array( $modules ) ) ) ); } @@ -2600,7 +2602,7 @@ class OutputPage { // Legacy Scripts $scripts .= "\n" . $this->mScripts; - $userScripts = array( 'user.options' ); + $userScripts = array( 'user.options', 'user.tokens' ); // Add site JS if enabled if ( $wgUseSiteJs ) { @@ -2617,7 +2619,7 @@ class OutputPage { # XXX: additional security check/prompt? $scripts .= Html::inlineScript( "\n" . $this->getRequest()->getText( 'wpTextbox1' ) . "\n" ) . "\n"; } else { - # FIXME: this means that User:Me/Common.js doesn't load when previewing + # @todo FIXME: This means that User:Me/Common.js doesn't load when previewing # User:Me/Vector.js, and vice versa (bug26283) $userScripts[] = 'user'; } @@ -2661,7 +2663,6 @@ class OutputPage { 'wgUserGroups' => $this->getUser()->getEffectiveGroups(), 'wgCategories' => $this->getCategories(), 'wgBreakFrames' => $this->getFrameOptions() == 'DENY', - 'wgIsMainPage' => $title->isMainPage(), ); if ( $wgContLang->hasVariants() ) { $vars['wgUserVariant'] = $wgContLang->getPreferredVariant(); @@ -2672,6 +2673,9 @@ class OutputPage { if ( $wgUseAjax && $wgEnableMWSuggest && !$this->getUser()->getOption( 'disablesuggest', false ) ) { $vars['wgSearchNamespaces'] = SearchEngine::userNamespaces( $this->getUser() ); } + if ( $title->isMainPage() ) { + $vars['wgIsMainPage'] = true; + } // Allow extensions to add their custom variables to the global JS variables wfRunHooks( 'MakeGlobalVariablesScript', array( &$vars ) ); @@ -2680,13 +2684,15 @@ class OutputPage { } /** + * @param $sk Skin + * @param $addContentType bool + * * @return string HTML tag links to be put in the header. */ public function getHeadLinks( Skin $sk, $addContentType = false ) { global $wgUniversalEditButton, $wgFavicon, $wgAppleTouchIcon, $wgEnableAPI, - $wgSitename, $wgHtml5, $wgMimeType, + $wgSitename, $wgVersion, $wgHtml5, $wgMimeType, $wgFeed, $wgOverrideSiteFeed, $wgAdvertisedFeedTypes, - $wgEnableDublinCoreRdf, $wgEnableCreativeCommonsRdf, $wgDisableLangConversion, $wgCanonicalLanguageLinks, $wgContLang, $wgRightsPage, $wgRightsUrl; @@ -2711,7 +2717,7 @@ class OutputPage { $tags[] = Html::element( 'meta', array( 'name' => 'generator', - 'content' => "MediaWiki " . MW_VERSION, + 'content' => "MediaWiki $wgVersion", ) ); $p = "{$this->mIndexPolicy},{$this->mFollowPolicy}"; @@ -2811,33 +2817,6 @@ class OutputPage { ) ); } - # Metadata links - # - Creative Commons - # See http://wiki.creativecommons.org/Extend_Metadata. - # - Dublin Core - # Use hreflang to specify canonical and alternate links - # See http://www.google.com/support/webmasters/bin/answer.py?answer=189077 - if ( $this->isArticleRelated() ) { - # note: buggy CC software only reads first "meta" link - if ( $wgEnableCreativeCommonsRdf ) { - $tags[] = Html::element( 'link', array( - 'rel' => $this->getMetadataAttribute(), - 'title' => 'Creative Commons', - 'type' => 'application/rdf+xml', - 'href' => $this->getTitle()->getLocalURL( 'action=creativecommons' ) ) - ); - } - - if ( $wgEnableDublinCoreRdf ) { - $tags[] = Html::element( 'link', array( - 'rel' => $this->getMetadataAttribute(), - 'title' => 'Dublin Core', - 'type' => 'application/rdf+xml', - 'href' => $this->getTitle()->getLocalURL( 'action=dublincore' ) ) - ); - } - } - # Language variants if ( !$wgDisableLangConversion && $wgCanonicalLanguageLinks && $wgContLang->hasVariants() ) { @@ -2885,10 +2864,10 @@ class OutputPage { # Feeds if ( $wgFeed ) { foreach( $this->getSyndicationLinks() as $format => $link ) { - # Use the page name for the title (accessed through $wgTitle since - # there's no other way). In principle, this could lead to issues - # with having the same name for different feeds corresponding to - # the same page, but we can't avoid that at this low a level. + # Use the page name for the title. In principle, this could + # lead to issues with having the same name for different feeds + # corresponding to the same page, but we can't avoid that at + # this low a level. $tags[] = $this->feedLink( $format, @@ -2983,6 +2962,8 @@ class OutputPage { * Build a set of s for the stylesheets specified in the $this->styles array. * These will be applied to various media & IE conditionals. * @param $sk Skin object + * + * @return string */ public function buildCssLinks( $sk ) { $ret = ''; @@ -3040,8 +3021,8 @@ class OutputPage { */ protected function styleLink( $style, $options ) { if( isset( $options['dir'] ) ) { - $siteDir = wfUILang()->getDir(); - if( $siteDir != $options['dir'] ) { + global $wgLang; + if( $wgLang->getDir() != $options['dir'] ) { return ''; } } @@ -3130,6 +3111,10 @@ class OutputPage { * instead of a variable argument list. * * $options is passed through to wfMsgExt(), see that function for details. + * + * @param $name string + * @param $args array + * @param $options array */ public function addWikiMsgArray( $name, $args, $options = array() ) { $options[] = 'parse'; @@ -3160,6 +3145,8 @@ class OutputPage { * $wgOut->addWikiText( "