X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FSkinTemplate.php;h=d13268ce416d0c6d4eab85ffbdb0ed952159c716;hb=7becf3c16ac64e441c5068d7cca6fbdc96399b54;hp=cbf9b14c392c14bd63a6700ac5bfeb0c7dd32c2e;hpb=7496a8e6c5d8dca1cf6afe52a38402b2b75a219a;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index cbf9b14c39..d13268ce41 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -87,6 +87,12 @@ class SkinTemplate extends Skin { */ var $template = 'QuickTemplate'; + /** + * Whether this skin use OutputPage::headElement() to generate the + * tag + */ + var $useHeadElement = false; + /**#@-*/ /** @@ -123,12 +129,12 @@ class SkinTemplate extends Skin { global $wgArticle, $wgUser, $wgLang, $wgContLang; global $wgScript, $wgStylePath, $wgContLanguageCode; global $wgMimeType, $wgJsMimeType, $wgOutputEncoding, $wgRequest; - global $wgXhtmlDefaultNamespace, $wgXhtmlNamespaces; + global $wgXhtmlDefaultNamespace, $wgXhtmlNamespaces, $wgHtml5Version; global $wgDisableCounters, $wgLogo, $wgHideInterlanguageLinks; global $wgMaxCredits, $wgShowCreditsIfMax; global $wgPageShowWatchingUsers; global $wgUseTrackbacks, $wgUseSiteJs, $wgDebugComments; - global $wgArticlePath, $wgScriptPath, $wgServer, $wgCanonicalNamespaceNames; + global $wgArticlePath, $wgScriptPath, $wgServer; wfProfileIn( __METHOD__ ); @@ -171,12 +177,49 @@ class SkinTemplate extends Skin { $this->userpageUrlDetails = self::makeKnownUrlDetails( $this->userpage ); } - $this->userjs = $this->userjsprev = false; - $this->setupUserCss( $out ); - $this->setupUserJs( $out->isUserJsAllowed() ); $this->titletxt = $this->mTitle->getPrefixedText(); wfProfileOut( __METHOD__ . '-stuff' ); + wfProfileIn( __METHOD__ . '-stuff-head' ); + if ( $this->useHeadElement ) { + $pagecss = $this->setupPageCss(); + if( $pagecss ) + $out->addInlineStyle( $pagecss ); + } else { + $this->setupUserCss( $out ); + + $tpl->set( 'pagecss', $this->setupPageCss() ); + $tpl->setRef( 'usercss', $this->usercss ); + + $this->userjs = $this->userjsprev = false; + $this->setupUserJs( $out->isUserJsAllowed() ); + $tpl->setRef( 'userjs', $this->userjs ); + $tpl->setRef( 'userjsprev', $this->userjsprev ); + + if( $wgUseSiteJs ) { + $jsCache = $this->loggedin ? '&smaxage=0' : ''; + $tpl->set( 'jsvarurl', + self::makeUrl( '-', + "action=raw$jsCache&gen=js&useskin=" . + urlencode( $this->getSkinName() ) ) ); + } else { + $tpl->set( 'jsvarurl', false ); + } + + $tpl->setRef( 'xhtmldefaultnamespace', $wgXhtmlDefaultNamespace ); + $tpl->set( 'xhtmlnamespaces', $wgXhtmlNamespaces ); + $tpl->set( 'html5version', $wgHtml5Version ); + $tpl->set( 'headlinks', $out->getHeadLinks() ); + $tpl->set( 'csslinks', $out->buildCssLinks() ); + + if( $wgUseTrackbacks && $out->isArticleRelated() ) { + $tpl->set( 'trackbackhtml', $out->getTitle()->trackbackRDF() ); + } else { + $tpl->set( 'trackbackhtml', null ); + } + } + wfProfileOut( __METHOD__ . '-stuff-head' ); + wfProfileIn( __METHOD__ . '-stuff2' ); $tpl->set( 'title', $out->getPageTitle() ); $tpl->set( 'pagetitle', $out->getHTMLTitle() ); @@ -184,8 +227,8 @@ class SkinTemplate extends Skin { $tpl->set( 'pageclass', $this->getPageClasses( $this->mTitle ) ); $tpl->set( 'skinnameclass', ( 'skin-' . Sanitizer::escapeClass( $this->getSkinName() ) ) ); - $nsname = isset( $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] ) ? - $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] : + $nsname = MWNamespace::exists( $this->mTitle->getNamespace() ) ? + MWNamespace::getCanonicalName( $this->mTitle->getNamespace() ) : $this->mTitle->getNsText(); $tpl->set( 'nscanonical', $nsname ); @@ -224,19 +267,10 @@ class SkinTemplate extends Skin { } else { $tpl->set( 'feeds', false ); } - if( $wgUseTrackbacks && $out->isArticleRelated() ) { - $tpl->set( 'trackbackhtml', $out->getTitle()->trackbackRDF() ); - } else { - $tpl->set( 'trackbackhtml', null ); - } - $tpl->setRef( 'xhtmldefaultnamespace', $wgXhtmlDefaultNamespace ); - $tpl->set( 'xhtmlnamespaces', $wgXhtmlNamespaces ); $tpl->setRef( 'mimetype', $wgMimeType ); $tpl->setRef( 'jsmimetype', $wgJsMimeType ); $tpl->setRef( 'charset', $wgOutputEncoding ); - $tpl->set( 'headlinks', $out->getHeadLinks() ); - $tpl->set( 'csslinks', $out->buildCssLinks() ); $tpl->setRef( 'wgScript', $wgScript ); $tpl->setRef( 'skinname', $this->skinname ); $tpl->set( 'skinclass', get_class( $this ) ); @@ -266,23 +300,29 @@ class SkinTemplate extends Skin { $tpl->set( 'capitalizeallnouns', $wgLang->capitalizeAllNouns() ? ' capitalize-all-nouns' : '' ); $tpl->set( 'langname', $wgContLang->getLanguageName( $wgContLanguageCode ) ); $tpl->set( 'showjumplinks', $wgUser->getOption( 'showjumplinks' ) ); - $tpl->set( 'username', $wgUser->isAnon() ? NULL : $this->username ); + $tpl->set( 'username', $wgUser->isAnon() ? null : $this->username ); $tpl->setRef( 'userpage', $this->userpage ); $tpl->setRef( 'userpageurl', $this->userpageUrlDetails['href'] ); $tpl->set( 'userlang', $wgLang->getCode() ); - $tpl->set( 'userlangattributes', 'lang="' . $wgLang->getCode() . '" xml:lang="' . $wgLang->getCode() . '"' ); - $tpl->set( 'pagecss', $this->setupPageCss() ); - $tpl->setRef( 'usercss', $this->usercss ); - $tpl->setRef( 'userjs', $this->userjs ); - $tpl->setRef( 'userjsprev', $this->userjsprev ); - if( $wgUseSiteJs ) { - $jsCache = $this->loggedin ? '&smaxage=0' : ''; - $tpl->set( 'jsvarurl', - self::makeUrl( '-', - "action=raw$jsCache&gen=js&useskin=" . - urlencode( $this->getSkinName() ) ) ); - } else { - $tpl->set( 'jsvarurl', false ); + + // Users can have their language set differently than the + // content of the wiki. For these users, tell the web browser + // that interface elements are in a different language. + $tpl->set( 'userlangattributes', ''); + $tpl->set( 'specialpageattributes', ''); + + $lang = $wgLang->getCode(); + $dir = $wgLang->getDir(); + if ( $lang !== $wgContLang->getCode() || $dir !== $wgContLang->getDir() ) { + $attrs = " lang='$lang' dir='$dir'"; + + $tpl->set( 'userlangattributes', $attrs ); + + // The content of SpecialPages should be presented in the + // user's language. Content of regular pages should not be touched. + if($this->mTitle->isSpecialPage()) { + $tpl->set( 'specialpageattributes', $attrs ); + } } $newtalks = $wgUser->getNewMessageLinks(); @@ -451,19 +491,15 @@ class SkinTemplate extends Skin { $content_actions = $this->buildContentActionUrls(); $tpl->setRef( 'content_actions', $content_actions ); - // XXX: attach this from javascript, same with section editing - if( $this->iseditable && $wgUser->getOption( 'editondblclick' ) ){ - $encEditUrl = Xml::escapeJsString( $this->mTitle->getLocalUrl( $this->editUrlOptions() ) ); - $tpl->set( 'body_ondblclick', 'document.location = "' . $encEditUrl . '";' ); - } else { - $tpl->set( 'body_ondblclick', false ); - } - $tpl->set( 'body_onload', false ); $tpl->set( 'sidebar', $this->buildSidebar() ); $tpl->set( 'nav_urls', $this->buildNavUrls() ); // Set the head scripts near the end, in case the above actions resulted in added scripts - $tpl->set( 'headscripts', $out->getScript() ); + if ( $this->useHeadElement ) { + $tpl->set( 'headelement', $out->headElement( $this ) ); + } else { + $tpl->set( 'headscripts', $out->getScript() ); + } // original version by hansm if( !wfRunHooks( 'SkinTemplateOutputPageBeforeExec', array( &$this, &$tpl ) ) ) { @@ -776,7 +812,7 @@ class SkinTemplate extends Skin { } } else { //article doesn't exist or is deleted - if( $wgUser->isAllowed( 'deletedhistory' ) && $wgUser->isAllowed( 'undelete' ) ) { + if( $wgUser->isAllowed( 'deletedhistory' ) && $wgUser->isAllowed( 'deletedtext' ) ) { if( $n = $this->mTitle->isDeleted() ) { $undelTitle = SpecialPage::getTitleFor( 'Undelete' ); $content_actions['undelete'] = array( @@ -825,7 +861,7 @@ class SkinTemplate extends Skin { } - wfRunHooks( 'SkinTemplateTabs', array( &$this, &$content_actions ) ); + wfRunHooks( 'SkinTemplateTabs', array( $this, &$content_actions ) ); } else { /* show special page tab */