10 if( !defined( 'MEDIAWIKI' ) )
17 class SkinStandard
extends Skin
{
22 function getHeadScripts( $allowUserJs ) {
23 global $wgStylePath, $wgJsMimeType, $wgStyleVersion;
25 $s = parent
::getHeadScripts( $allowUserJs );
26 if ( 3 == $this->qbSetting() ) { # Floating left
27 $s .= "<script language='javascript' type='$wgJsMimeType' " .
28 "src='{$wgStylePath}/common/sticky.js?$wgStyleVersion'></script>\n";
36 function setupSkinUserCss( OutputPage
$out ){
37 if ( 3 == $this->qbSetting() ) { # Floating left
38 $out->addStyle( 'common/quickbar.css' );
39 } else if ( 4 == $this->qbSetting() ) { # Floating right
40 $out->addStyle( 'common/quickbar-right.css' );
42 parent
::setupSkinUserCss( $out );
48 function reallyGenerateUserStylesheet() {
49 $s = parent
::reallyGenerateUserStylesheet();
50 $qb = $this->qbSetting();
52 if ( 2 == $qb ) { # Right
53 $s .= "#quickbar { position: absolute; top: 4px; right: 4px; " .
54 "border-left: 2px solid #000000; }\n" .
55 "#article, #mw-data-after-content { margin-left: 4px; margin-right: 152px; }\n";
56 } else if ( 1 == $qb ||
3 == $qb ) {
57 $s .= "#quickbar { position: absolute; top: 4px; left: 4px; " .
58 "border-right: 1px solid gray; }\n" .
59 "#article, #mw-data-after-content { margin-left: 152px; margin-right: 4px; }\n";
60 } else if ( 4 == $qb) {
61 $s .= "#quickbar { border-right: 1px solid gray; }\n" .
62 "#article, #mw-data-after-content { margin-right: 152px; margin-left: 4px; }\n";
70 function getBodyOptions() {
71 $a = parent
::getBodyOptions();
73 if ( 3 == $this->qbSetting() ) { # Floating left
74 $qb = "setup(\"quickbar\")";
76 $a["onload"] .= ";$qb";
84 function doAfterContent() {
86 $fname = 'SkinStandard::doAfterContent';
87 wfProfileIn( $fname );
88 wfProfileIn( $fname.'-1' );
90 $s = "\n</div><br style=\"clear:both\" />\n";
91 $s .= "\n<div id='footer'>";
92 $s .= '<table border="0" cellspacing="0"><tr>';
94 wfProfileOut( $fname.'-1' );
95 wfProfileIn( $fname.'-2' );
97 $qb = $this->qbSetting();
99 $left = ($qb == 1 ||
$qb == 3);
100 if($wgContLang->isRTL()) $left = !$left;
102 if ( $shove && $left ) { # Left
103 $s .= $this->getQuickbarCompensator();
105 wfProfileOut( $fname.'-2' );
106 wfProfileIn( $fname.'-3' );
107 $l = $wgContLang->isRTL() ?
'right' : 'left';
108 $s .= "<td class='bottom' align='$l' valign='top'>";
110 $s .= $this->bottomLinks();
111 $s .= "\n<br />" . $this->mainPageLink()
112 . ' | ' . $this->aboutLink()
113 . ' | ' . $this->specialLink( 'recentchanges' )
114 . ' | ' . $this->searchForm()
115 . '<br /><span id="pagestats">' . $this->pageStats() . '</span>';
118 if ( $shove && !$left ) { # Right
119 $s .= $this->getQuickbarCompensator();
121 $s .= "</tr></table>\n</div>\n</div>\n";
123 wfProfileOut( $fname.'-3' );
124 wfProfileIn( $fname.'-4' );
125 if ( 0 != $qb ) { $s .= $this->quickBar(); }
126 wfProfileOut( $fname.'-4' );
127 wfProfileOut( $fname );
131 function quickBar() {
132 global $wgOut, $wgTitle, $wgUser, $wgRequest, $wgContLang;
133 global $wgEnableUploads, $wgRemoteUploads;
135 $fname = 'Skin::quickBar';
136 wfProfileIn( $fname );
138 $action = $wgRequest->getText( 'action' );
139 $wpPreview = $wgRequest->getBool( 'wpPreview' );
140 $tns=$wgTitle->getNamespace();
142 $s = "\n<div id='quickbar'>";
143 $s .= "\n" . $this->logoText() . "\n<hr class='sep' />";
147 # Use the first heading from the Monobook sidebar as the "browse" section
148 $bar = $this->buildSidebar();
149 unset( $bar['SEARCH'] );
150 unset( $bar['LANGUAGES'] );
151 unset( $bar['TOOLBOX'] );
152 $browseLinks = reset( $bar );
154 foreach ( $browseLinks as $link ) {
155 if ( $link['text'] != '-' ) {
156 $s .= "<a href=\"{$link['href']}\">" .
157 htmlspecialchars( $link['text'] ) . '</a>' . $sep;
161 if( $wgUser->isLoggedIn() ) {
162 $s.= $this->specialLink( 'watchlist' ) ;
163 $s .= $sep . $this->makeKnownLink( $wgContLang->specialPage( 'Contributions' ),
164 wfMsg( 'mycontris' ), 'target=' . wfUrlencode($wgUser->getName() ) );
166 // only show watchlist link if logged in
167 $s .= "\n<hr class='sep' />";
168 $articleExists = $wgTitle->getArticleId();
169 if ( $wgOut->isArticle() ||
$action =='edit' ||
$action =='history' ||
$wpPreview) {
170 if($wgOut->isArticle()) {
171 $s .= '<strong>' . $this->editThisPage() . '</strong>';
172 } else { # backlink to the article in edit or history mode
173 if($articleExists){ # no backlink if no article
177 case NS_PROJECT_TALK
:
179 case NS_MEDIAWIKI_TALK
:
180 case NS_TEMPLATE_TALK
:
182 case NS_CATEGORY_TALK
:
183 $text = wfMsg('viewtalkpage');
186 $text = wfMsg( 'articlepage' );
189 $text = wfMsg( 'userpage' );
192 $text = wfMsg( 'projectpage' );
195 $text = wfMsg( 'imagepage' );
198 $text = wfMsg( 'mediawikipage' );
201 $text = wfMsg( 'templatepage' );
204 $text = wfMsg( 'viewhelppage' );
207 $text = wfMsg( 'categorypage' );
210 $text= wfMsg( 'articlepage' );
213 $link = $wgTitle->getText();
214 if ($nstext = $wgContLang->getNsText($tns) ) { # add namespace if necessary
215 $link = $nstext . ':' . $link ;
218 $s .= $this->makeLink( $link, $text );
219 } elseif( $wgTitle->getNamespace() != NS_SPECIAL
) {
220 # we just throw in a "New page" text to tell the user that he's in edit mode,
221 # and to avoid messing with the separator that is prepended to the next item
222 $s .= '<strong>' . wfMsg('newpage') . '</strong>';
227 # "Post a comment" link
228 if( ( $wgTitle->isTalkPage() ||
$wgOut->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
229 $s .= '<br />' . $this->makeKnownLinkObj( $wgTitle, wfMsg( 'postcomment' ), 'action=edit§ion=new' );
232 watching could cause problems in edit mode:
233 if user edits article, then loads "watch this article" in background and then saves
234 article with "Watch this article" checkbox disabled, the article is transparently
235 unwatched. Therefore we do not show the "Watch this page" link in edit mode
237 if ( $wgUser->isLoggedIn() && $articleExists) {
238 if($action!='edit' && $action != 'submit' )
240 $s .= $sep . $this->watchThisPage();
242 if ( $wgTitle->userCan( 'edit' ) )
243 $s .= $sep . $this->moveThisPage();
245 if ( $wgUser->isAllowed('delete') and $articleExists ) {
246 $s .= $sep . $this->deleteThisPage() .
247 $sep . $this->protectThisPage();
249 $s .= $sep . $this->talkLink();
250 if ($articleExists && $action !='history') {
251 $s .= $sep . $this->historyLink();
254 if ( NS_USER
== $wgTitle->getNamespace()
255 ||
$wgTitle->getNamespace() == NS_USER_TALK
) {
257 $id=User
::idFromName($wgTitle->getText());
258 $ip=User
::isIP($wgTitle->getText());
261 $s .= $sep . $this->userContribsLink();
263 if( $this->showEmailUser( $id ) ) {
264 $s .= $sep . $this->emailUserLink();
267 $s .= "\n<br /><hr class='sep' />";
270 if ( $wgUser->isLoggedIn() && ( $wgEnableUploads ||
$wgRemoteUploads ) ) {
271 $s .= $this->specialLink( 'upload' ) . $sep;
273 $s .= $this->specialLink( 'specialpages' );
275 global $wgSiteSupportPage;
276 if( $wgSiteSupportPage ) {
277 $s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
278 '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
281 $s .= "\n<br /></div>\n";
282 wfProfileOut( $fname );