Move edit toolbar generation code from the Skin to the EditPage user interface, where...
[mediawiki.git] / skins / Standard.php
blob6698cf2a4d77fca94d0c65d22bdfce4425a589bb
1 <?php
2 /**
3 * See skin.doc
5 * @todo document
6 * @package MediaWiki
7 * @subpackage Skins
8 */
10 /**
11 * @todo document
12 * @package MediaWiki
13 * @subpackage Skins
15 class SkinStandard extends Skin {
17 /**
20 function getHeadScripts() {
21 global $wgStylePath;
23 $s = parent::getHeadScripts();
24 if ( 3 == $this->qbSetting() ) { # Floating left
25 $s .= "<script language='javascript' type='text/javascript' " .
26 "src='{$wgStylePath}/common/sticky.js'></script>\n";
28 return $s;
31 /**
34 function getUserStyles() {
35 global $wgStylePath;
36 $s = '';
37 if ( 3 == $this->qbSetting() ) { # Floating left
38 $s .= "<style type='text/css'>\n" .
39 "@import '{$wgStylePath}/common/quickbar.css';\n</style>\n";
41 $s .= parent::getUserStyles();
42 return $s;
45 /**
48 function doGetUserStyles() {
49 global $wgUser, $wgOut, $wgStylePath;
51 $s = parent::doGetUserStyles();
52 $qb = $this->qbSetting();
54 if ( 2 == $qb ) { # Right
55 $s .= "#quickbar { position: absolute; top: 4px; right: 4px; " .
56 "border-left: 2px solid #000000; }\n" .
57 "#article { margin-left: 4px; margin-right: 152px; }\n";
58 } else if ( 1 == $qb || 3 == $qb ) {
59 $s .= "#quickbar { position: absolute; top: 4px; left: 4px; " .
60 "border-right: 1px solid gray; }\n" .
61 "#article { margin-left: 152px; margin-right: 4px; }\n";
63 return $s;
66 /**
69 function getBodyOptions() {
70 $a = parent::getBodyOptions();
72 if ( 3 == $this->qbSetting() ) { # Floating left
73 $qb = "setup(\"quickbar\")";
74 if($a["onload"]) {
75 $a["onload"] .= ";$qb";
76 } else {
77 $a["onload"] = $qb;
80 return $a;
83 function doAfterContent() {
84 global $wgUser, $wgOut, $wgContLang;
85 $fname = 'SkinStandard::doAfterContent';
86 wfProfileIn( $fname );
87 wfProfileIn( $fname.'-1' );
89 $s = "\n</div><br style=\"clear:both\" />\n";
90 $s .= "\n<div id='footer'>";
91 $s .= '<table border="0" cellspacing="0"><tr>';
93 wfProfileOut( $fname.'-1' );
94 wfProfileIn( $fname.'-2' );
96 $qb = $this->qbSetting();
97 $shove = ($qb != 0);
98 $left = ($qb == 1 || $qb == 3);
99 if($wgContLang->isRTL()) $left = !$left;
101 if ( $shove && $left ) { # Left
102 $s .= $this->getQuickbarCompensator();
104 wfProfileOut( $fname.'-2' );
105 wfProfileIn( $fname.'-3' );
106 $l = $wgContLang->isRTL() ? 'right' : 'left';
107 $s .= "<td class='bottom' align='$l' valign='top'>";
109 $s .= $this->bottomLinks();
110 $s .= "\n<br />" . $this->mainPageLink()
111 . ' | ' . $this->aboutLink()
112 . ' | ' . $this->specialLink( 'recentchanges' )
113 . ' | ' . $this->searchForm()
114 . '<br /><span id="pagestats">' . $this->pageStats() . '</span>';
116 $s .= "</td>";
117 if ( $shove && !$left ) { # Right
118 $s .= $this->getQuickbarCompensator();
120 $s .= "</tr></table>\n</div>\n</div>\n";
122 wfProfileOut( $fname.'-3' );
123 wfProfileIn( $fname.'-4' );
124 if ( 0 != $qb ) { $s .= $this->quickBar(); }
125 wfProfileOut( $fname.'-4' );
126 wfProfileOut( $fname );
127 return $s;
130 function quickBar() {
131 global $wgOut, $wgTitle, $wgUser, $wgRequest, $wgContLang;
132 global $wgDisableUploads, $wgRemoteUploads, $wgNavigationLinks;
134 $fname = 'Skin::quickBar';
135 wfProfileIn( $fname );
137 $action = $wgRequest->getText( 'action' );
138 $wpPreview = $wgRequest->getBool( 'wpPreview' );
139 $tns=$wgTitle->getNamespace();
141 $s = "\n<div id='quickbar'>";
142 $s .= "\n" . $this->logoText() . "\n<hr class='sep' />";
144 $sep = "\n<br />";
146 foreach ( $wgNavigationLinks as $link ) {
147 $msg = wfMsgForContent( $link['href'] );
148 if ( $msg != '-' ) {
149 $s .= '<a href="' . $this->makeInternalOrExternalUrl( $msg ) . '">' .
150 wfMsg( $link['text'] ) . '</a>' . $sep;
155 if ($wgUser->getID()) {
156 $s.= $this->specialLink( 'watchlist' ) ;
157 $s .= $sep . $this->makeKnownLink( $wgContLang->specialPage( 'Contributions' ),
158 wfMsg( 'mycontris' ), 'target=' . wfUrlencode($wgUser->getName() ) );
160 // only show watchlist link if logged in
161 $s .= "\n<hr class='sep' />";
162 $articleExists = $wgTitle->getArticleId();
163 if ( $wgOut->isArticle() || $action =='edit' || $action =='history' || $wpPreview) {
164 if($wgOut->isArticle()) {
165 $s .= '<strong>' . $this->editThisPage() . '</strong>';
166 } else { # backlink to the article in edit or history mode
167 if($articleExists){ # no backlink if no article
168 switch($tns) {
169 case 0:
170 $text = wfMsg('articlepage');
171 break;
172 case 1:
173 $text = wfMsg('viewtalkpage');
174 break;
175 case 2:
176 $text = wfMsg('userpage');
177 break;
178 case 3:
179 $text = wfMsg('viewtalkpage');
180 break;
181 case 4:
182 $text = wfMsg('wikipediapage');
183 break;
184 case 5:
185 $text = wfMsg('viewtalkpage');
186 break;
187 case 6:
188 $text = wfMsg('imagepage');
189 break;
190 case 7:
191 $text = wfMsg('viewtalkpage');
192 break;
193 default:
194 $text= wfMsg('articlepage');
197 $link = $wgTitle->getText();
198 if ($nstext = $wgContLang->getNsText($tns) ) { # add namespace if necessary
199 $link = $nstext . ':' . $link ;
202 $s .= $this->makeLink( $link, $text );
203 } elseif( $wgTitle->getNamespace() != Namespace::getSpecial() ) {
204 # we just throw in a "New page" text to tell the user that he's in edit mode,
205 # and to avoid messing with the separator that is prepended to the next item
206 $s .= '<strong>' . wfMsg('newpage') . '</strong>';
212 if( $tns%2 && $action!='edit' && !$wpPreview) {
213 $s.= '<br />'.$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('postcomment'),'action=edit&section=new');
217 watching could cause problems in edit mode:
218 if user edits article, then loads "watch this article" in background and then saves
219 article with "Watch this article" checkbox disabled, the article is transparently
220 unwatched. Therefore we do not show the "Watch this page" link in edit mode
222 if ( 0 != $wgUser->getID() && $articleExists) {
223 if($action!='edit' && $action != 'submit' )
225 $s .= $sep . $this->watchThisPage();
227 if ( $wgTitle->userCanEdit() )
228 $s .= $sep . $this->moveThisPage();
230 if ( $wgUser->isAllowed('delete') and $articleExists ) {
231 $s .= $sep . $this->deleteThisPage() .
232 $sep . $this->protectThisPage();
234 $s .= $sep . $this->talkLink();
235 if ($articleExists && $action !='history') {
236 $s .= $sep . $this->historyLink();
238 $s.=$sep . $this->whatLinksHere();
240 if($wgOut->isArticleRelated()) {
241 $s .= $sep . $this->watchPageLinksLink();
244 if ( Namespace::getUser() == $wgTitle->getNamespace()
245 || $wgTitle->getNamespace() == Namespace::getTalk(Namespace::getUser())
248 $id=User::idFromName($wgTitle->getText());
249 $ip=User::isIP($wgTitle->getText());
251 if($id||$ip) {
252 $s .= $sep . $this->userContribsLink();
254 if( $this->showEmailUser( $id ) ) {
255 $s .= $sep . $this->emailUserLink();
258 $s .= "\n<br /><hr class='sep' />";
261 if ( 0 != $wgUser->getID() && ( !$wgDisableUploads || $wgRemoteUploads ) ) {
262 $s .= $this->specialLink( 'upload' ) . $sep;
264 $s .= $this->specialLink( 'specialpages' )
265 . $sep . $this->bugReportsLink();
267 global $wgSiteSupportPage;
268 if( $wgSiteSupportPage ) {
269 $s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
270 '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
273 $s .= "\n<br /></div>\n";
274 wfProfileOut( $fname );
275 return $s;