3 * Standard (a.k.a. Classic) skin: old MediaWiki default skin
9 if( !defined( 'MEDIAWIKI' ) ) {
17 class SkinStandard
extends Skin
{
22 function setupSkinUserCss( OutputPage
$out ){
23 if ( 3 == $this->qbSetting() ) { # Floating left
24 $out->addStyle( 'common/quickbar.css' );
25 } elseif ( 4 == $this->qbSetting() ) { # Floating right
26 $out->addStyle( 'common/quickbar-right.css' );
28 parent
::setupSkinUserCss( $out );
34 function reallyGenerateUserStylesheet() {
35 $s = parent
::reallyGenerateUserStylesheet();
36 $qb = $this->qbSetting();
38 if ( 2 == $qb ) { # Right
39 $s .= "#quickbar { position: absolute; top: 4px; right: 4px; " .
40 "border-left: 2px solid #000000; }\n" .
41 "#article, #mw-data-after-content { margin-left: 4px; margin-right: 152px; }\n";
42 } elseif ( 1 == $qb ||
3 == $qb ) {
43 $s .= "#quickbar { position: absolute; top: 4px; left: 4px; " .
44 "border-right: 1px solid gray; }\n" .
45 "#article, #mw-data-after-content { margin-left: 152px; margin-right: 4px; }\n";
46 } elseif ( 4 == $qb ) {
47 $s .= "#quickbar { border-right: 1px solid gray; }\n" .
48 "#article, #mw-data-after-content { margin-right: 152px; margin-left: 4px; }\n";
53 function doAfterContent() {
54 global $wgContLang, $wgLang;
55 wfProfileIn( __METHOD__
);
56 wfProfileIn( __METHOD__
. '-1' );
58 $s = "\n</div><br style=\"clear:both\" />\n";
59 $s .= "\n<div id='footer'>";
60 $s .= '<table border="0" cellspacing="0"><tr>';
62 wfProfileOut( __METHOD__
. '-1' );
63 wfProfileIn( __METHOD__
. '-2' );
65 $qb = $this->qbSetting();
66 $shove = ( $qb != 0 );
67 $left = ( $qb == 1 ||
$qb == 3 );
68 if( $wgContLang->isRTL() ) {
72 if ( $shove && $left ) { # Left
73 $s .= $this->getQuickbarCompensator();
75 wfProfileOut( __METHOD__
. '-2' );
76 wfProfileIn( __METHOD__
. '-3' );
77 $l = $wgContLang->alignStart();
78 $s .= "<td class='bottom' align='$l' valign='top'>";
80 $s .= $this->bottomLinks();
81 $s .= "\n<br />" . $wgLang->pipeList( array(
82 $this->mainPageLink(),
84 $this->specialLink( 'Recentchanges' ),
85 $this->searchForm() ) )
86 . '<br /><span id="pagestats">' . $this->pageStats() . '</span>';
89 if ( $shove && !$left ) { # Right
90 $s .= $this->getQuickbarCompensator();
92 $s .= "</tr></table>\n</div>\n</div>\n";
94 wfProfileOut( __METHOD__
. '-3' );
95 wfProfileIn( __METHOD__
. '-4' );
97 $s .= $this->quickBar();
99 wfProfileOut( __METHOD__
. '-4' );
100 wfProfileOut( __METHOD__
);
104 function quickBar() {
105 global $wgOut, $wgUser, $wgRequest, $wgContLang;
107 wfProfileIn( __METHOD__
);
109 $action = $wgRequest->getText( 'action' );
110 $wpPreview = $wgRequest->getBool( 'wpPreview' );
111 $tns = $this->mTitle
->getNamespace();
113 $s = "\n<div id='quickbar'>";
114 $s .= "\n" . $this->logoText() . "\n<hr class='sep' />";
118 # Use the first heading from the Monobook sidebar as the "browse" section
119 $bar = $this->buildSidebar();
120 unset( $bar['SEARCH'] );
121 unset( $bar['LANGUAGES'] );
122 unset( $bar['TOOLBOX'] );
123 $browseLinks = reset( $bar );
125 foreach ( $browseLinks as $link ) {
126 if ( $link['text'] != '-' ) {
127 $s .= "<a href=\"{$link['href']}\">" .
128 htmlspecialchars( $link['text'] ) . '</a>' . $sep;
132 if( $wgUser->isLoggedIn() ) {
133 $s.= $this->specialLink( 'Watchlist' ) ;
134 $s .= $sep . $this->linkKnown(
135 SpecialPage
::getTitleFor( 'Contributions' ),
136 wfMsg( 'mycontris' ),
138 array( 'target' => $wgUser->getName() )
141 // only show watchlist link if logged in
142 $s .= "\n<hr class='sep' />";
143 $articleExists = $this->mTitle
->getArticleId();
144 if ( $wgOut->isArticle() ||
$action == 'edit' ||
$action == 'history' ||
$wpPreview ) {
145 if( $wgOut->isArticle() ) {
146 $s .= '<strong>' . $this->editThisPage() . '</strong>';
147 } else { # backlink to the article in edit or history mode
148 if( $articleExists ){ # no backlink if no article
152 case NS_PROJECT_TALK
:
154 case NS_MEDIAWIKI_TALK
:
155 case NS_TEMPLATE_TALK
:
157 case NS_CATEGORY_TALK
:
158 $text = wfMsg('viewtalkpage');
161 $text = wfMsg( 'articlepage' );
164 $text = wfMsg( 'userpage' );
167 $text = wfMsg( 'projectpage' );
170 $text = wfMsg( 'imagepage' );
173 $text = wfMsg( 'mediawikipage' );
176 $text = wfMsg( 'templatepage' );
179 $text = wfMsg( 'viewhelppage' );
182 $text = wfMsg( 'categorypage' );
185 $text = wfMsg( 'articlepage' );
188 $link = $this->mTitle
->getText();
189 if( $nstext = $wgContLang->getNsText( $tns ) ) { # add namespace if necessary
190 $link = $nstext . ':' . $link;
194 Title
::newFromText( $link ),
197 } elseif( $this->mTitle
->getNamespace() != NS_SPECIAL
) {
198 # we just throw in a "New page" text to tell the user that he's in edit mode,
199 # and to avoid messing with the separator that is prepended to the next item
200 $s .= '<strong>' . wfMsg( 'newpage' ) . '</strong>';
204 # "Post a comment" link
205 if( ( $this->mTitle
->isTalkPage() ||
$wgOut->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
206 $s .= '<br />' . $this->link(
208 wfMsg( 'postcomment' ),
214 array( 'known', 'noclasses' )
217 #if( $tns%2 && $action!='edit' && !$wpPreview) {
218 #$s.= '<br />'.$this->linkKnown( Title::newFromText( $wgTitle->getPrefixedText() ),wfMsg('postcomment'),array(),array('action'=>'edit','section'=>'new'));
222 watching could cause problems in edit mode:
223 if user edits article, then loads "watch this article" in background and then saves
224 article with "Watch this article" checkbox disabled, the article is transparently
225 unwatched. Therefore we do not show the "Watch this page" link in edit mode
227 if ( $wgUser->isLoggedIn() && $articleExists ) {
228 if( $action != 'edit' && $action != 'submit' ) {
229 $s .= $sep . $this->watchThisPage();
231 if ( $this->mTitle
->userCan( 'edit' ) )
232 $s .= $sep . $this->moveThisPage();
234 if ( $wgUser->isAllowed( 'delete' ) && $articleExists ) {
235 $s .= $sep . $this->deleteThisPage() .
236 $sep . $this->protectThisPage();
238 $s .= $sep . $this->talkLink();
239 if( $articleExists && $action != 'history' ) {
240 $s .= $sep . $this->historyLink();
242 $s .= $sep . $this->whatLinksHere();
244 if( $wgOut->isArticleRelated() ) {
245 $s .= $sep . $this->watchPageLinksLink();
249 NS_USER
== $this->mTitle
->getNamespace() ||
250 $this->mTitle
->getNamespace() == NS_USER_TALK
253 $id = User
::idFromName( $this->mTitle
->getText() );
254 $ip = User
::isIP( $this->mTitle
->getText() );
257 $s .= $sep . $this->userContribsLink();
259 if( $this->showEmailUser( $id ) ) {
260 $s .= $sep . $this->emailUserLink();
263 $s .= "\n<br /><hr class='sep' />";
266 if( UploadBase
::isEnabled() && UploadBase
::isAllowed( $wgUser ) === true ) {
267 $s .= $this->getUploadLink() . $sep;
270 $s .= $this->specialLink( 'Specialpages' );
272 global $wgSiteSupportPage;
273 if( $wgSiteSupportPage ) {
274 $s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
275 '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
278 $s .= "\n<br /></div>\n";
279 wfProfileOut( __METHOD__
);