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;
106 global $wgEnableUploads, $wgRemoteUploads;
108 wfProfileIn( __METHOD__
);
110 $action = $wgRequest->getText( 'action' );
111 $wpPreview = $wgRequest->getBool( 'wpPreview' );
112 $tns = $this->mTitle
->getNamespace();
114 $s = "\n<div id='quickbar'>";
115 $s .= "\n" . $this->logoText() . "\n<hr class='sep' />";
119 # Use the first heading from the Monobook sidebar as the "browse" section
120 $bar = $this->buildSidebar();
121 unset( $bar['SEARCH'] );
122 unset( $bar['LANGUAGES'] );
123 unset( $bar['TOOLBOX'] );
124 $browseLinks = reset( $bar );
126 foreach ( $browseLinks as $link ) {
127 if ( $link['text'] != '-' ) {
128 $s .= "<a href=\"{$link['href']}\">" .
129 htmlspecialchars( $link['text'] ) . '</a>' . $sep;
133 if( $wgUser->isLoggedIn() ) {
134 $s.= $this->specialLink( 'watchlist' ) ;
135 $s .= $sep . $this->linkKnown(
136 SpecialPage
::getTitleFor( 'Contributions' ),
137 wfMsg( 'mycontris' ),
139 array( 'target' => $wgUser->getName() )
142 // only show watchlist link if logged in
143 $s .= "\n<hr class='sep' />";
144 $articleExists = $this->mTitle
->getArticleId();
145 if ( $wgOut->isArticle() ||
$action == 'edit' ||
$action == 'history' ||
$wpPreview ) {
146 if( $wgOut->isArticle() ) {
147 $s .= '<strong>' . $this->editThisPage() . '</strong>';
148 } else { # backlink to the article in edit or history mode
149 if( $articleExists ){ # no backlink if no article
153 case NS_PROJECT_TALK
:
155 case NS_MEDIAWIKI_TALK
:
156 case NS_TEMPLATE_TALK
:
158 case NS_CATEGORY_TALK
:
159 $text = wfMsg('viewtalkpage');
162 $text = wfMsg( 'articlepage' );
165 $text = wfMsg( 'userpage' );
168 $text = wfMsg( 'projectpage' );
171 $text = wfMsg( 'imagepage' );
174 $text = wfMsg( 'mediawikipage' );
177 $text = wfMsg( 'templatepage' );
180 $text = wfMsg( 'viewhelppage' );
183 $text = wfMsg( 'categorypage' );
186 $text = wfMsg( 'articlepage' );
189 $link = $this->mTitle
->getText();
190 if( $nstext = $wgContLang->getNsText( $tns ) ) { # add namespace if necessary
191 $link = $nstext . ':' . $link;
195 Title
::newFromText( $link ),
198 } elseif( $this->mTitle
->getNamespace() != NS_SPECIAL
) {
199 # we just throw in a "New page" text to tell the user that he's in edit mode,
200 # and to avoid messing with the separator that is prepended to the next item
201 $s .= '<strong>' . wfMsg( 'newpage' ) . '</strong>';
205 # "Post a comment" link
206 if( ( $this->mTitle
->isTalkPage() ||
$wgOut->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
207 $s .= '<br />' . $this->link(
209 wfMsg( 'postcomment' ),
215 array( 'known', 'noclasses' )
218 #if( $tns%2 && $action!='edit' && !$wpPreview) {
219 #$s.= '<br />'.$this->linkKnown( Title::newFromText( $wgTitle->getPrefixedText() ),wfMsg('postcomment'),array(),array('action'=>'edit','section'=>'new'));
223 watching could cause problems in edit mode:
224 if user edits article, then loads "watch this article" in background and then saves
225 article with "Watch this article" checkbox disabled, the article is transparently
226 unwatched. Therefore we do not show the "Watch this page" link in edit mode
228 if ( $wgUser->isLoggedIn() && $articleExists ) {
229 if( $action != 'edit' && $action != 'submit' ) {
230 $s .= $sep . $this->watchThisPage();
232 if ( $this->mTitle
->userCan( 'edit' ) )
233 $s .= $sep . $this->moveThisPage();
235 if ( $wgUser->isAllowed( 'delete' ) && $articleExists ) {
236 $s .= $sep . $this->deleteThisPage() .
237 $sep . $this->protectThisPage();
239 $s .= $sep . $this->talkLink();
240 if( $articleExists && $action != 'history' ) {
241 $s .= $sep . $this->historyLink();
243 $s .= $sep . $this->whatLinksHere();
245 if( $wgOut->isArticleRelated() ) {
246 $s .= $sep . $this->watchPageLinksLink();
250 NS_USER
== $this->mTitle
->getNamespace() ||
251 $this->mTitle
->getNamespace() == NS_USER_TALK
254 $id = User
::idFromName( $this->mTitle
->getText() );
255 $ip = User
::isIP( $this->mTitle
->getText() );
258 $s .= $sep . $this->userContribsLink();
260 if( $this->showEmailUser( $id ) ) {
261 $s .= $sep . $this->emailUserLink();
264 $s .= "\n<br /><hr class='sep' />";
267 if ( $wgUser->isLoggedIn() && ( $wgEnableUploads ||
$wgRemoteUploads ) ) {
268 $s .= $this->specialLink( 'upload' ) . $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__
);