X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FSkin.php;h=9b40f6d3036279f89c2508b191808445a147af60;hb=60c94987aab3141a19d735fbc003d5cb646a8502;hp=08c145ca322d917e80031ff9bf90dea37be57ed6;hpb=adc79a170c77bc1203f45e47a54c9cfa08307990;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Skin.php b/includes/Skin.php index 08c145ca32..9b40f6d303 100644 --- a/includes/Skin.php +++ b/includes/Skin.php @@ -1,31 +1,71 @@ 'Standard', - 'nostalgia' => 'Nostalgia', - 'cologneblue' => 'CologneBlue' +/* +$wgValidSkinNames = array( + 'standard' => 'Standard', + 'nostalgia' => 'Nostalgia', + 'cologneblue' => 'CologneBlue' ); if( $wgUsePHPTal ) { - #$wgValidSkinNames[] = 'PHPTal'; - #$wgValidSkinNames['davinci'] = 'DaVinci'; - #$wgValidSkinNames['mono'] = 'Mono'; - $wgValidSkinNames['monobook'] = 'MonoBook'; - $wgValidSkinNames['myskin'] = 'MySkin'; - #$wgValidSkinNames['monobookminimal'] = 'MonoBookMinimal'; + #$wgValidSkinNames[] = 'PHPTal'; + #$wgValidSkinNames['davinci'] = 'DaVinci'; + #$wgValidSkinNames['mono'] = 'Mono'; + #$wgValidSkinNames['monobookminimal'] = 'MonoBookMinimal'; + $wgValidSkinNames['monobook'] = 'MonoBook'; + $wgValidSkinNames['myskin'] = 'MySkin'; + $wgValidSkinNames['chick'] = 'Chick'; +} +*/ + +# Get a list of all skins available in /skins/ +# Build using the regular expression '^(.*).php$' +# Array keys are all lower case, array value keep the case used by filename +# + +$skinDir = dir($IP.'/skins'); + +# while code from www.php.net +while (false !== ($file = $skinDir->read())) { + if(preg_match('/^(.*).php$/',$file, $matches)) { + $aSkin = $matches[1]; + $wgValidSkinNames[strtolower($aSkin)] = $aSkin; + } } +$skinDir->close(); +unset($matches); require_once( 'RecentChange.php' ); +global $wgLinkHolders; +$wgLinkHolders = array( + 'namespaces' => array(), + 'dbkeys' => array(), + 'queries' => array(), + 'texts' => array(), + 'titles' => array() +); + +/** + * @todo document + * @package MediaWiki + */ class RCCacheEntry extends RecentChange { var $secureName, $link; @@ -41,41 +81,52 @@ class RCCacheEntry extends RecentChange } } ; -class Skin { - /* private */ var $lastdate, $lastline; +/** + * The main skin class that provide methods and properties for all other skins + * including PHPTal skins. + * This base class is also the "Standard" skin. + * @package MediaWiki + */ +class Skin { + /**#@+ + * @access private + */ + var $lastdate, $lastline; var $linktrail ; # linktrail regexp var $rc_cache ; # Cache for Enhanced Recent Changes var $rcCacheIndex ; # Recent Changes Cache Counter for visibility toggle var $rcMoveIndex; var $postParseLinkColour = true; + /**#@-*/ - function Skin() - { + function Skin() { + global $wgUseOldExistenceCheck; + $postParseLinkColour = !$wgUseOldExistenceCheck; $this->linktrail = wfMsg('linktrail'); } - function getSkinNames() - { + function getSkinNames() { global $wgValidSkinNames; return $wgValidSkinNames; } - function getStylesheet() - { - return 'wikistandard.css'; + function getStylesheet() { + return 'common/wikistandard.css'; } + function getSkinName() { - return "standard"; + return 'standard'; } - # Get/set accessor for delayed link colouring + /** + * Get/set accessor for delayed link colouring + */ function postParseLinkColour( $setting = NULL ) { return wfSetVar( $this->postParseLinkColour, $setting ); } - function qbSetting() - { + function qbSetting() { global $wgOut, $wgUser; if ( $wgOut->isQuickbarSuppressed() ) { return 0; } @@ -84,8 +135,7 @@ class Skin { return $q; } - function initPage( &$out ) - { + function initPage( &$out ) { $fname = 'Skin::initPage'; wfProfileIn( $fname ); @@ -163,7 +213,7 @@ class Skin { function getHeadScripts() { global $wgStylePath, $wgUser, $wgLang, $wgAllowUserJs; - $r = "\n"; + $r = "\n"; if( $wgAllowUserJs && $wgUser->getID() != 0 ) { # logged in $userpage = $wgLang->getNsText( Namespace::getUser() ) . ":" . $wgUser->getName(); $userjs = htmlspecialchars($this->makeUrl($userpage.'/'.$this->getSkinName().'.js', 'action=raw&ctype=text/javascript')); @@ -178,7 +228,7 @@ class Skin { $sheet = $this->getStylesheet(); $action = $wgRequest->getText('action'); $s = "@import \"$wgStylePath/$sheet\";\n"; - if($wgLang->isRTL()) $s .= "@import \"$wgStylePath/common_rtl.css\";\n"; + if($wgLang->isRTL()) $s .= "@import \"$wgStylePath/common/common_rtl.css\";\n"; if( $wgAllowUserCss && $wgUser->getID() != 0 ) { # logged in if($wgTitle->isCssSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) { $s .= $wgRequest->getText('wpTextbox1'); @@ -190,27 +240,32 @@ class Skin { $s .= $this->doGetUserStyles(); return $s."\n"; } - # placeholder, returns generated js in monobook - function getUserJs() { - return; - } - function getUserStyles() - { + /** + * placeholder, returns generated js in monobook + */ + function getUserJs() { return; } + + /** + * Return html code that include User stylesheets + */ + function getUserStyles() { global $wgOut, $wgStylePath, $wgLang; $s = "\n"; return $s; } - function doGetUserStyles() - { + /** + * Some styles that are set by user through the user settings interface. + */ + function doGetUserStyles() { global $wgUser, $wgLang; - $csspage = $wgLang->getNsText( NS_MEDIAWIKI ) . ":" . $this->getSkinName() . ".css"; + $csspage = $wgLang->getNsText( NS_MEDIAWIKI ) . ':' . $this->getSkinName() . '.css'; $s = '@import "'.$this->makeUrl($csspage, 'action=raw&ctype=text/css')."\";\n"; if ( 1 == $wgUser->getOption( 'underline' ) ) { @@ -229,8 +284,7 @@ class Skin { return $s; } - function getBodyOptions() - { + function getBodyOptions() { global $wgUser, $wgTitle, $wgNamespaceBackgrounds, $wgOut, $wgRequest; extract( $wgRequest->getValues( 'oldid', 'redirect', 'diff' ) ); @@ -258,14 +312,13 @@ class Skin { return $a; } - function getExternalLinkAttributes( $link, $text, $class='' ) - { + function getExternalLinkAttributes( $link, $text, $class='' ) { global $wgUser, $wgOut, $wgLang; $link = urldecode( $link ); $link = $wgLang->checkTitleEncoding( $link ); $link = str_replace( '_', ' ', $link ); - $link = wfEscapeHTML( $link ); + $link = htmlspecialchars( $link ); $r = ($class != '') ? " class='$class'" : " class='external'"; @@ -275,13 +328,12 @@ class Skin { return $r; } - function getInternalLinkAttributes( $link, $text, $broken = false ) - { + function getInternalLinkAttributes( $link, $text, $broken = false ) { global $wgUser, $wgOut; $link = urldecode( $link ); $link = str_replace( '_', ' ', $link ); - $link = wfEscapeHTML( $link ); + $link = htmlspecialchars( $link ); if ( $broken == 'stub' ) { $r = ' class="stub"'; @@ -297,8 +349,10 @@ class Skin { return $r; } - function getInternalLinkAttributesObj( &$nt, $text, $broken = false ) - { + /** + * @param bool $broken + */ + function getInternalLinkAttributesObj( &$nt, $text, $broken = false ) { global $wgUser, $wgOut; if ( $broken == 'stub' ) { @@ -315,24 +369,25 @@ class Skin { return $r; } - function getLogo() - { + /** + * URL to the logo + */ + function getLogo() { global $wgLogo; return $wgLogo; } - # This will be called immediately after the tag. Split into - # two functions to make it easier to subclass. - # - function beforeContent() - { + /** + * This will be called immediately after the tag. Split into + * two functions to make it easier to subclass. + */ + function beforeContent() { global $wgUser, $wgOut; return $this->doBeforeContent(); } - function doBeforeContent() - { + function doBeforeContent() { global $wgUser, $wgOut, $wgTitle, $wgLang, $wgSiteNotice; $fname = 'Skin::doBeforeContent'; wfProfileIn( $fname ); @@ -408,10 +463,36 @@ class Skin { wfMsg( 'categories' ), 'article=' . urlencode( $wgTitle->getPrefixedDBkey() ) ) . ': ' . $t; + # optional 'dmoz-like' category browser. Will be shown under the list + # of categories an article belong to if($wgUseCategoryBrowser) { $s .= '

'; - $catstack = array(); - $s.= $wgTitle->getAllParentCategories($catstack); + + # get a big array of the parents tree + $parenttree = $wgTitle->getCategorieBrowser(); + + # Render the array as a serie of links + function walkThrough ($tree) { + global $wgUser; + $sk = $wgUser->getSkin(); + $return = ''; + foreach($tree as $element => $parent) { + if(empty($parent)) { + # element start a new list + $return .= '
'; + } else { + # grab the others elements + $return .= walkThrough($parent); + } + # add our current element to the list + $eltitle = Title::NewFromText($element); + # FIXME : should be makeLink() [AV] + $return .= $sk->makeKnownLink($element, $eltitle->getText()).' > '; + } + return $return; + } + + $s .= walkThrough($parenttree); } return $s; @@ -424,15 +505,13 @@ class Skin { } } - function getQuickbarCompensator( $rows = 1 ) - { + function getQuickbarCompensator( $rows = 1 ) { return " "; } # This gets called immediately before the tag. # - function afterContent() - { + function afterContent() { global $wgUser, $wgOut, $wgServer; global $wgTitle, $wgLang; @@ -440,15 +519,18 @@ class Skin { return $printfooter . $this->doAfterContent(); } - function printFooter() { + function printSource() { global $wgTitle; $url = htmlspecialchars( $wgTitle->getFullURL() ); - return "

" . wfMsg( "retrievedfrom", "$url" ) . + return wfMsg( "retrievedfrom", "$url" ); + } + + function printFooter() { + return "

" . $this->printSource() . "

\n\n

" . $this->pageStats() . "

\n"; } - function doAfterContent() - { + function doAfterContent() { global $wgUser, $wgOut, $wgLang; $fname = 'Skin::doAfterContent'; wfProfileIn( $fname ); @@ -495,8 +577,7 @@ class Skin { return $s; } - function pageTitleLinks() - { + function pageTitleLinks() { global $wgOut, $wgTitle, $wgUser, $wgLang, $wgUseApproval, $wgRequest; extract( $wgRequest->getValues( 'oldid', 'diff' ) ); @@ -508,7 +589,7 @@ class Skin { if ( $wgOut->isArticleRelated() ) { if ( $wgTitle->getNamespace() == Namespace::getImage() ) { $name = $wgTitle->getDBkey(); - $link = wfEscapeHTML( Image::wfImageUrl( $name ) ); + $link = htmlspecialchars( Image::wfImageUrl( $name ) ); $style = $this->getInternalLinkAttributes( $link, $name ); $s .= " | {$name}"; } @@ -518,7 +599,7 @@ class Skin { $t = $wgTitle->getDBkey(); $name = 'Approve this article' ; $link = "http://test.wikipedia.org/w/magnus/wiki.phtml?title={$t}&action=submit&doit=1" ; - #wfEscapeHTML( wfImageUrl( $name ) ); + #htmlspecialchars( wfImageUrl( $name ) ); $style = $this->getExternalLinkAttributes( $link, $name ); $s .= " | {$name}" ; } @@ -539,6 +620,8 @@ class Skin { Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}", wfMsg('newmessageslink') ); $s.= ' | '. wfMsg( 'newmessages', $tl ) . ''; + # disable caching + $wgOut->setSquidMaxage(0); } } @@ -562,8 +645,7 @@ class Skin { return ''; } - function printableLink() - { + function printableLink() { global $wgOut, $wgFeedClasses, $wgRequest; $baseurl = $_SERVER['REQUEST_URI']; @@ -585,8 +667,7 @@ class Skin { return $s; } - function pageTitle() - { + function pageTitle() { global $wgOut, $wgTitle, $wgUser; $s = '

' . htmlspecialchars( $wgOut->getPageTitle() ) . '

'; @@ -594,14 +675,13 @@ class Skin { return $s; } - function pageSubtitle() - { + function pageSubtitle() { global $wgOut; $sub = $wgOut->getSubtitle(); if ( '' == $sub ) { global $wgExtraSubtitle; - $sub = wfMsg( 'fromwikipedia' ) . $wgExtraSubtitle; + $sub = wfMsg( 'tagline' ) . $wgExtraSubtitle; } $subpages = $this->subPageSubtitle(); $sub .= !empty($subpages)?"

$subpages":''; @@ -609,8 +689,7 @@ class Skin { return $s; } - function subPageSubtitle() - { + function subPageSubtitle() { global $wgOut,$wgTitle,$wgNamespacesWithSubpages; $subpages = ''; if($wgOut->isArticle() && !empty($wgNamespacesWithSubpages[$wgTitle->getNamespace()])) { @@ -639,8 +718,7 @@ class Skin { return $subpages; } - function nameAndLogin() - { + function nameAndLogin() { global $wgUser, $wgTitle, $wgLang, $wgShowIPinHeader, $wgIP; $li = $wgLang->specialPage( 'Userlogin' ); @@ -697,8 +775,7 @@ class Skin { return htmlspecialchars( $this->getSearchLink() ); } - function searchForm() - { + function searchForm() { global $wgRequest; $search = $wgRequest->getText( 'search' ); @@ -712,8 +789,7 @@ class Skin { return $s; } - function topLinks() - { + function topLinks() { global $wgOut; $sep = " |\n"; @@ -730,8 +806,7 @@ class Skin { return $s; } - function bottomLinks() - { + function bottomLinks() { global $wgOut, $wgUser, $wgTitle; $sep = " |\n"; @@ -772,8 +847,7 @@ class Skin { return $s; } - function pageStats() - { + function pageStats() { global $wgOut, $wgLang, $wgArticle, $wgRequest; global $wgDisableCounters, $wgMaxCredits, $wgShowCreditsIfMax; @@ -846,13 +920,12 @@ class Skin { function getPoweredBy() { global $wgStylePath; - $url = htmlspecialchars( "$wgStylePath/images/poweredby_mediawiki_88x31.png" ); + $url = htmlspecialchars( "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" ); $img = 'MediaWiki'; return $img; } - function lastModified() - { + function lastModified() { global $wgLang, $wgArticle; $timestamp = $wgArticle->getTimestamp(); @@ -865,21 +938,24 @@ class Skin { return $s; } - function logoText( $align = '' ) - { - if ( '' != $align ) { $a = ' align="'.$align.'"'; } + function logoText( $align = '' ) { + if ( '' != $align ) { $a = " align='{$align}'"; } else { $a = ''; } $mp = wfMsg( 'mainpage' ); $titleObj = Title::newFromText( $mp ); - $s = '"; + if ( is_object( $titleObj ) ) { + $url = $titleObj->escapeLocalURL(); + } else { + $url = ''; + } + + $logourl = $this->getLogo(); + $s = ""; return $s; } - function quickBar() - { + function quickBar() { global $wgOut, $wgTitle, $wgUser, $wgRequest, $wgLang; global $wgDisableUploads, $wgRemoteUploads; @@ -1024,8 +1100,7 @@ class Skin { return $s; } - function specialPagesList() - { + function specialPagesList() { global $wgUser, $wgOut, $wgLang, $wgServer, $wgRedirectScript; require_once('SpecialPage.php'); $a = array(); @@ -1065,37 +1140,32 @@ class Skin { return $s; } - function mainPageLink() - { + function mainPageLink() { $mp = wfMsg( 'mainpage' ); $s = $this->makeKnownLink( $mp, $mp ); return $s; } - function copyrightLink() - { + function copyrightLink() { $s = $this->makeKnownLink( wfMsg( 'copyrightpage' ), wfMsg( 'copyrightpagename' ) ); return $s; } - function aboutLink() - { + function aboutLink() { $s = $this->makeKnownLink( wfMsg( 'aboutpage' ), - wfMsg( 'aboutwikipedia' ) ); + wfMsg( 'aboutsite' ) ); return $s; } - function disclaimerLink() - { + function disclaimerLink() { $s = $this->makeKnownLink( wfMsg( 'disclaimerpage' ), wfMsg( 'disclaimers' ) ); return $s; } - function editThisPage() - { + function editThisPage() { global $wgOut, $wgTitle, $wgRequest; $oldid = $wgRequest->getVal( 'oldid' ); @@ -1116,15 +1186,14 @@ class Skin { if ( !is_null( $redirect ) ) { $red = "&redirect={$redirect}"; } if ( $oldid && ! isset( $diff ) ) { - $oid = "&oldid={$oldid}"; + $oid = '&oldid='.$oldid; } $s = $this->makeKnownLink( $n, $t, "action=edit{$oid}{$red}" ); } return $s; } - function deleteThisPage() - { + function deleteThisPage() { global $wgUser, $wgOut, $wgTitle, $wgRequest; $diff = $wgRequest->getVal( 'diff' ); @@ -1139,8 +1208,7 @@ class Skin { return $s; } - function protectThisPage() - { + function protectThisPage() { global $wgUser, $wgOut, $wgTitle, $wgRequest; $diff = $wgRequest->getVal( 'diff' ); @@ -1161,8 +1229,7 @@ class Skin { return $s; } - function watchThisPage() - { + function watchThisPage() { global $wgUser, $wgOut, $wgTitle; if ( $wgOut->isArticleRelated() ) { @@ -1182,8 +1249,7 @@ class Skin { return $s; } - function moveThisPage() - { + function moveThisPage() { global $wgTitle, $wgLang; if ( $wgTitle->userCanEdit() ) { @@ -1193,8 +1259,7 @@ class Skin { return $s; } - function historyLink() - { + function historyLink() { global $wgTitle; $s = $this->makeKnownLink( $wgTitle->getPrefixedText(), @@ -1202,8 +1267,7 @@ class Skin { return $s; } - function whatLinksHere() - { + function whatLinksHere() { global $wgTitle, $wgLang; $s = $this->makeKnownLink( $wgLang->specialPage( 'Whatlinkshere' ), @@ -1211,8 +1275,7 @@ class Skin { return $s; } - function userContribsLink() - { + function userContribsLink() { global $wgTitle, $wgLang; $s = $this->makeKnownLink( $wgLang->specialPage( 'Contributions' ), @@ -1220,8 +1283,7 @@ class Skin { return $s; } - function emailUserLink() - { + function emailUserLink() { global $wgTitle, $wgLang; $s = $this->makeKnownLink( $wgLang->specialPage( 'Emailuser' ), @@ -1229,8 +1291,7 @@ class Skin { return $s; } - function watchPageLinksLink() - { + function watchPageLinksLink() { global $wgOut, $wgTitle, $wgLang; if ( ! $wgOut->isArticleRelated() ) { @@ -1243,8 +1304,7 @@ class Skin { return $s; } - function otherLanguages() - { + function otherLanguages() { global $wgOut, $wgLang, $wgTitle, $wgUseNewInterlanguage; $a = $wgOut->getLanguageLinks(); @@ -1287,15 +1347,13 @@ class Skin { return $s; } - function bugReportsLink() - { + function bugReportsLink() { $s = $this->makeKnownLink( wfMsg( 'bugreportspage' ), wfMsg( 'bugreports' ) ); return $s; } - function dateLink() - { + function dateLink() { global $wgLinkCache; $t1 = Title::newFromText( gmdate( 'F j' ) ); $t2 = Title::newFromText( gmdate( 'Y' ) ); @@ -1323,8 +1381,7 @@ class Skin { return $s; } - function talkLink() - { + function talkLink() { global $wgLang, $wgTitle, $wgLinkCache; $tns = $wgTitle->getNamespace(); @@ -1366,8 +1423,7 @@ class Skin { return $s; } - function commentLink() - { + function commentLink() { global $wgLang, $wgTitle, $wgLinkCache; $tns = $wgTitle->getNamespace(); @@ -1389,17 +1445,19 @@ class Skin { return $s; } - # After all the page content is transformed into HTML, it makes - # a final pass through here for things like table backgrounds. - # - function transformContent( $text ) - { + /** + * After all the page content is transformed into HTML, it makes + * a final pass through here for things like table backgrounds. + * @todo probably deprecated [AV] + */ + function transformContent( $text ) { return $text; } - # Note: This function MUST call getArticleID() on the link, - # otherwise the cache won't get updated properly. See LINKCACHE.DOC. - # + /** + * Note: This function MUST call getArticleID() on the link, + * otherwise the cache won't get updated properly. See LINKCACHE.DOC. + */ function makeLink( $title, $text = '', $query = '', $trail = '' ) { wfProfileIn( 'Skin::makeLink' ); $nt = Title::newFromText( $title ); @@ -1444,12 +1502,17 @@ class Skin { } } - # Pass a title object, not a title string - function makeLinkObj( &$nt, $text= '', $query = '', $trail = '', $prefix = '' ) - { - global $wgOut, $wgUser; + /** + * Pass a title object, not a title string + */ + function makeLinkObj( &$nt, $text= '', $query = '', $trail = '', $prefix = '' ) { + global $wgOut, $wgUser, $wgLinkHolders; $fname = 'Skin::makeLinkObj'; + # Fail gracefully + if ( ! isset($nt) ) + return "{$prefix}{$text}{$trail}"; + if ( $nt->isExternal() ) { $u = $nt->getFullURL(); $link = $nt->getPrefixedURL(); @@ -1480,8 +1543,13 @@ class Skin { } # Allows wiki to bypass using linkcache, see OutputPage::parseLinkHolders() - $retVal = '{$trail}"; + $nr = array_push( $wgLinkHolders['namespaces'], $nt->getNamespace() ); + $wgLinkHolders['dbkeys'][] = $nt->getDBkey(); + $wgLinkHolders['queries'][] = $query; + $wgLinkHolders['texts'][] = $prefix.$text.$inside; + $wgLinkHolders['titles'][] = $nt; + + $retVal = '{$trail}"; } else { # Work out link colour immediately $aid = $nt->getArticleID() ; @@ -1516,9 +1584,10 @@ class Skin { return $retVal; } - # Pass a title object, not a title string - function makeKnownLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' , $aprops = '') - { + /** + * Pass a title object, not a title string + */ + function makeKnownLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' , $aprops = '' ) { global $wgOut, $wgTitle, $wgInputEncoding; $fname = 'Skin::makeKnownLinkObj'; @@ -1528,6 +1597,8 @@ class Skin { return $text; } $link = $nt->getPrefixedURL(); +# if ( '' != $section && substr($section,0,1) != "#" ) { +# $section = '' if ( '' == $link ) { $u = ''; @@ -1562,11 +1633,16 @@ class Skin { return $r; } - # Pass a title object, not a title string - function makeBrokenLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) - { + /** + * Pass a title object, not a title string + */ + function makeBrokenLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) { global $wgOut, $wgUser; + # Fail gracefully + if ( ! isset($nt) ) + return "{$prefix}{$text}{$trail}"; + $fname = 'Skin::makeBrokenLinkObj'; wfProfileIn( $fname ); @@ -1599,9 +1675,10 @@ class Skin { return $s; } - # Pass a title object, not a title string - function makeStubLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) - { + /** + * Pass a title object, not a title string + */ + function makeStubLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) { global $wgOut, $wgUser; $link = $nt->getPrefixedURL(); @@ -1628,8 +1705,7 @@ class Skin { return $s; } - function makeSelfLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) - { + function makeSelfLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) { $u = $nt->escapeLocalURL( $query ); if ( '' == $text ) { $text = htmlspecialchars( $nt->getPrefixedText() ); @@ -1663,7 +1739,7 @@ class Skin { return $title->getLocalURL( $urlaction ); } /*static*/ function makeI18nUrl ( $name, $urlaction='' ) { - $title = Title::newFromText( wfMsg($name) ); + $title = Title::newFromText( wfMsgForContent($name) ); $this->checkTitle($title, $name); return $title->getLocalURL( $urlaction ); } @@ -1674,7 +1750,7 @@ class Skin { } # this can be passed the NS number as defined in Language.php /*static*/ function makeNSUrl( $name, $urlaction='', $namespace=0 ) { - $title = Title::makeTitle( $namespace, $name ); + $title = Title::makeTitleSafe( $namespace, $name ); $this->checkTitle($title, $name); return $title->getLocalURL( $urlaction ); } @@ -1707,7 +1783,7 @@ class Skin { ); } /*static*/ function makeI18nUrlDetails ( $name, $urlaction='' ) { - $title = Title::newFromText( wfMsg($name) ); + $title = Title::newFromText( wfMsgForContent($name) ); $this->checkTitle($title, $name); return array( 'href' => $title->getLocalURL( $urlaction ), @@ -1725,25 +1801,28 @@ class Skin { } } - function fnamePart( $url ) - { + function fnamePart( $url ) { $basename = strrchr( $url, '/' ); - if ( false === $basename ) { $basename = $url; } - else { $basename = substr( $basename, 1 ); } - return wfEscapeHTML( $basename ); + if ( false === $basename ) { + $basename = $url; + } else { + $basename = substr( $basename, 1 ); + } + return htmlspecialchars( $basename ); } - function makeImage( $url, $alt = '' ) - { + function makeImage( $url, $alt = '' ) { global $wgOut; - if ( '' == $alt ) { $alt = $this->fnamePart( $url ); } + if ( '' == $alt ) { + $alt = $this->fnamePart( $url ); + } $s = ''.$alt.''; return $s; } function makeImageLink( $name, $url, $alt = '' ) { - $nt = Title::makeTitle( Namespace::getImage(), $name ); + $nt = Title::makeTitleSafe( NS_IMAGE, $name ); return $this->makeImageLinkObj( $nt, $alt ); } @@ -1872,24 +1951,33 @@ class Skin { return str_replace("\n", ' ',$prefix.$s.$postfix); } - # Make HTML for a thumbnail including image, border and caption - # $img is an Image object + /** + * Make HTML for a thumbnail including image, border and caption + * $img is an Image object + */ function makeThumbLinkObj( $img, $label = '', $align = 'right', $boxwidth = 180, $boxheight=false, $framed=false , $manual_thumb = "" ) { global $wgStylePath, $wgLang; - # $image = Title::makeTitle( Namespace::getImage(), $name ); + # $image = Title::makeTitleSafe( NS_IMAGE, $name ); $url = $img->getURL(); #$label = htmlspecialchars( $label ); $alt = preg_replace( '/<[^>]*>/', '', $label); $alt = htmlspecialchars( $alt ); + $width = $height = 0; if ( $img->exists() ) { $width = $img->getWidth(); $height = $img->getHeight(); - } else { + } + if ( 0 == $width || 0 == $height ) + { $width = $height = 200; } + if ( $boxwidth == 0 ) + { + $boxwidth = 200; + } if ( $framed ) { // Use image dimensions, don't scale @@ -1911,7 +1999,7 @@ class Skin { if ( $manual_thumb != '' ) # Use manually specified thumbnail { - $manual_title = Title::makeTitle( Namespace::getImage(), $manual_thumb ); #new Title ( $manual_thumb ) ; + $manual_title = Title::makeTitleSafe( NS_IMAGE, $manual_thumb ); #new Title ( $manual_thumb ) ; $manual_img = Image::newFromTitle( $manual_title ); $thumbUrl = $manual_img->getURL(); if ( $manual_img->exists() ) @@ -1943,7 +2031,7 @@ class Skin { } else { $zoomicon = '

'. ''. - ''.$more.'
'; } } @@ -1951,13 +2039,12 @@ class Skin { return str_replace("\n", ' ', $s); } - function makeMediaLink( $name, $url, $alt = "" ) { - $nt = Title::makeTitle( Namespace::getMedia(), $name ); + function makeMediaLink( $name, $url, $alt = '' ) { + $nt = Title::makeTitleSafe( Namespace::getMedia(), $name ); return $this->makeMediaLinkObj( $nt, $alt ); } - function makeMediaLinkObj( $nt, $alt = "" ) - { + function makeMediaLinkObj( $nt, $alt = '' ) { if ( ! isset( $nt ) ) { ### HOTFIX. Instead of breaking, return empty string. @@ -1975,8 +2062,7 @@ class Skin { return $s; } - function specialLink( $name, $key = "" ) - { + function specialLink( $name, $key = '' ) { global $wgLang; if ( '' == $key ) { $key = strtolower( $name ); } @@ -1998,8 +2084,7 @@ class Skin { # # Returns text for the start of the tabular part of RC - function beginRecentChangesList() - { + function beginRecentChangesList() { $this->rc_cache = array() ; $this->rcMoveIndex = 0; $this->rcCacheIndex = 0 ; @@ -2008,17 +2093,17 @@ class Skin { return ''; } - function beginImageHistoryList() - { + function beginImageHistoryList() { $s = "\n

" . wfMsg( 'imghistory' ) . "

\n" . "

" . wfMsg( 'imghistlegend' ) . "

\n".'\n"; @@ -2026,9 +2111,10 @@ class Skin { return $s; } - # Enhanced RC ungrouped line - function recentChangesBlockLine ( $rcObj ) - { + /** + * Enhanced RC ungrouped line + */ + function recentChangesBlockLine ( $rcObj ) { global $wgStylePath, $wgLang ; # Get rc_xxxx variables @@ -2038,7 +2124,7 @@ class Skin { # Spacer image $r = '' ; - $r .= '' ; + $r .= '' ; $r .= '' ; if ( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { @@ -2083,7 +2169,7 @@ class Skin { # Comment if ( $rc_comment != '' && $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT ) { - $rc_comment=$this->formatComment($rc_comment); + $rc_comment=$this->formatComment($rc_comment, $rcObj->getTitle()); $r .= $wgLang->emphasize( ' ('.$rc_comment.')' ); } @@ -2091,9 +2177,10 @@ class Skin { return $r ; } - # Enhanced RC group - function recentChangesBlockGroup ( $block ) - { + /** + * Enhanced RC group + */ + function recentChangesBlockGroup ( $block ) { global $wgStylePath, $wgLang ; $r = '' ; @@ -2128,8 +2215,8 @@ class Skin { $rcm = 'RCM'.$this->rcCacheIndex ; $toggleLink = "javascript:toggleVisibility('$rci','$rcm','$rcl')" ; $arrowdir = $wgLang->isRTL() ? 'l' : 'r'; - $tl = '' ; - $tl .= '' ; + $tl = '' ; + $tl .= '' ; $r .= $tl ; # Main line @@ -2171,7 +2258,7 @@ class Skin { # Get rc_xxxx variables extract( $rcObj->mAttribs ); - $r .= ''; + $r .= ''; $r .= '       ' ; if ( $rc_new ) $r .= $N ; else $r .= ' ' ; @@ -2198,7 +2285,7 @@ class Skin { $r .= ') . . '.$rcObj->userlink ; $r .= $rcObj->usertalklink ; if ( $rc_comment != '' ) { - $rc_comment=$this->formatComment($rc_comment); + $rc_comment=$this->formatComment($rc_comment, $rcObj->getTitle()); $r .= $wgLang->emphasize( ' ('.$rc_comment.')' ) ; } $r .= "
\n" ; @@ -2209,10 +2296,11 @@ class Skin { return $r ; } - # If enhanced RC is in use, this function takes the previously cached - # RC lines, arranges them, and outputs the HTML - function recentChangesBlock () - { + /** + * If enhanced RC is in use, this function takes the previously cached + * RC lines, arranges them, and outputs the HTML + */ + function recentChangesBlock () { global $wgStylePath ; if ( count ( $this->rc_cache ) == 0 ) return '' ; $blockOut = ''; @@ -2227,10 +2315,11 @@ class Skin { return '
'.$blockOut.'
' ; } - # Called in a loop over all displayed RC entries - # Either returns the line, or caches it for later use - function recentChangesLine( &$rc, $watched = false ) - { + /** + * Called in a loop over all displayed RC entries + * Either returns the line, or caches it for later use + */ + function recentChangesLine( &$rc, $watched = false ) { global $wgUser ; $usenew = $wgUser->getOption( 'usenewrc' ); if ( $usenew ) @@ -2240,9 +2329,8 @@ class Skin { return $line ; } - function recentChangesLineOld( &$rc, $watched = false ) - { - global $wgTitle, $wgLang, $wgUser, $wgRCSeconds; + function recentChangesLineOld( &$rc, $watched = false ) { + global $wgTitle, $wgLang, $wgUser, $wgRCSeconds, $wgUseRCPatrol, $wgOnlySysopsCanPatrol; # Extract DB fields into local scope extract( $rc->mAttribs ); @@ -2257,7 +2345,9 @@ class Skin { $this->lastdate = $date; $this->rclistOpen = true; } - $s .= '
  • '; + + # If this edit has not yet been patrolled, make it stick out + $s .= ( ! $wgUseRCPatrol || $rc_patrolled ) ? '
  • ' : '
  • '; if ( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { # Diff @@ -2267,20 +2357,27 @@ class Skin { ') . . '; # "[[x]] moved to [[y]]" - if ( $rc_type == RC_MOVE ) { - $msg = '1movedto2'; - } else { - $msg = '1movedto2_redir'; - } + $msg = ( $rc_type == RC_MOVE ) ? '1movedto2' : '1movedto2_redir'; $s .= wfMsg( $msg, $this->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ), $this->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) ); + } elseif( $rc_namespace == NS_SPECIAL && preg_match( '!^Log/(.*)$!', $rc_title, $matches ) ) { + # Log updates, etc + $logtype = $matches[1]; + $logname = LogPage::logName( $logtype ); + $s .= '(' . $this->makeKnownLinkObj( $rc->getTitle(), $logname ) . ')'; } else { # Diff link if ( $rc_type == RC_NEW || $rc_type == RC_LOG ) { $diffLink = wfMsg( 'diff' ); } else { + if ( $wgUseRCPatrol && $rc_patrolled == 0 && $wgUser->getID() != 0 && + ( $wgUser->isSysop() || !$wgOnlySysopsCanPatrol ) ) + $rcidparam = "&rcid={$rc_id}"; + else + $rcidparam = ""; $diffLink = $this->makeKnownLinkObj( $rc->getTitle(), wfMsg( 'diff' ), - $curIdEq.'&diff='.$rc_this_oldid.'&oldid='.$rc_last_oldid ,'' ,'' , ' tabindex="'.$rc->counter.'"'); + "{$curIdEq}&diff={$rc_this_oldid}&oldid={$rc_last_oldid}{$rcidparam}", + '', '', ' tabindex="'.$rc->counter.'"'); } $s .= '('.$diffLink.') ('; @@ -2289,13 +2386,17 @@ class Skin { $s .= ') . . '; # M and N (minor and new) - $M = wfMsg( 'minoreditletter' ); - $N = wfMsg( 'newpageletter' ); - if ( $rc_minor ) { $s .= ' '.$M.''; } - if ( $rc_type == RC_NEW ) { $s .= ''.$N.''; } + if ( $rc_minor ) { $s .= ' '.wfMsg( "minoreditletter" ).''; } + if ( $rc_type == RC_NEW ) { $s .= ''.wfMsg( "newpageletter" ).''; } # Article link - $articleLink = $this->makeKnownLinkObj( $rc->getTitle(), '' ); + # If it's a new article, there is no diff link, but if it hasn't been + # patrolled yet, we need to give users a way to do so + if ( $wgUseRCPatrol && $rc_type == RC_NEW && $rc_patrolled == 0 && + $wgUser->getID() != 0 && ( $wgUser->isSysop() || !$wgOnlySysopsCanPatrol ) ) + $articleLink = $this->makeKnownLinkObj( $rc->getTitle(), '', "rcid={$rc_id}" ); + else + $articleLink = $this->makeKnownLinkObj( $rc->getTitle(), '' ); if ( $watched ) { $articleLink = ''.$articleLink.''; @@ -2340,7 +2441,7 @@ class Skin { # Add comment if ( '' != $rc_comment && '*' != $rc_comment && $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT ) { - $rc_comment=$this->formatComment($rc_comment); + $rc_comment=$this->formatComment($rc_comment,$rc->getTitle()); $s .= $wgLang->emphasize(' (' . $rc_comment . ')'); } $s .= "
  • \n"; @@ -2348,9 +2449,7 @@ class Skin { return $s; } -# function recentChangesLineNew( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0 , $diffid = 0 ) - function recentChangesLineNew( &$baseRC, $watched = false ) - { + function recentChangesLineNew( &$baseRC, $watched = false ) { global $wgTitle, $wgLang, $wgUser, $wgRCSeconds; # Create a specialised object @@ -2362,7 +2461,7 @@ class Skin { # If it's a new day, add the headline and flush the cache $date = $wgLang->date( $rc_timestamp, true); - $ret = '' ; + $ret = ''; if ( $date != $this->lastdate ) { # Process current cache $ret = $this->recentChangesBlock () ; @@ -2373,13 +2472,14 @@ class Skin { # Make article link if ( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { - if ( $rc_type == RC_MOVE ) { - $msg = "1movedto2"; - } else { - $msg = "1movedto2_redir"; - } + $msg = ( $rc_type == RC_MOVE ) ? "1movedto2" : "1movedto2_redir"; $clink = wfMsg( $msg, $this->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ), $this->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) ); + } elseif( $rc_namespace == NS_SPECIAL && preg_match( '!^Log/(.*)$!', $rc_title, $matches ) ) { + # Log updates, etc + $logtype = $matches[1]; + $logname = LogPage::logName( $logtype ); + $clink = '(' . $this->makeKnownLinkObj( $rc->getTitle(), $logname ) . ')'; } else { $clink = $this->makeKnownLinkObj( $rc->getTitle(), '' ) ; } @@ -2410,7 +2510,7 @@ class Skin { } # Make user link (or user contributions for unregistered users) - if ( 0 == $rc_user ) { + if ( $rc_user == 0 ) { $userLink = $this->makeKnownLink( $wgLang->specialPage( 'Contributions' ), $rc_user_text, 'target=' . $rc_user_text ); } else { @@ -2418,12 +2518,11 @@ class Skin { Namespace::getUser() ) . ':'.$rc_user_text, $rc_user_text ); } - $rc->userlink = $userLink ; - $rc->lastlink = $lastLink ; - $rc->curlink = $curLink ; + $rc->userlink = $userLink; + $rc->lastlink = $lastLink; + $rc->curlink = $curLink; $rc->difflink = $diffLink; - # Make user talk link $utns=$wgLang->getNsText(NS_USER_TALK); $talkname=$wgLang->getNsText(NS_TALK); # use the shorter name @@ -2458,22 +2557,28 @@ class Skin { return $ret; } - function endImageHistoryList() - { + function endImageHistoryList() { $s = "\n"; return $s; } - /* This function is called by all recent changes variants, by the page history, - and by the user contributions list. It is responsible for formatting edit - comments. It escapes any HTML in the comment, but adds some CSS to format - auto-generated comments (from section editing) and formats [[wikilinks]]. - Main author: Erik Möller (moeller@scireview.de) - */ - function formatComment($comment) - { + /** + * This function is called by all recent changes variants, by the page history, + * and by the user contributions list. It is responsible for formatting edit + * comments. It escapes any HTML in the comment, but adds some CSS to format + * auto-generated comments (from section editing) and formats [[wikilinks]]. + * + * The &$title parameter must be a title OBJECT. It is used to generate a + * direct link to the section in the autocomment. + * @author Erik Moeller + * + * Note: there's not always a title to pass to this function. + * Since you can't set a default parameter for a reference, I've turned it + * temporarily to a value pass. Should be adjusted further. --brion + */ + function formatComment($comment, $title = NULL) { global $wgLang; - $comment=wfEscapeHTML($comment); + $comment = htmlspecialchars( $comment ); # The pattern for autogen comments is / * foo * /, which makes for # some nasty regex. @@ -2483,7 +2588,18 @@ class Skin { $pre=$match[1]; $auto=$match[2]; $post=$match[3]; + $link=''; + if($title) { + $section=$auto; + + # This is hackish but should work in most cases. + $section=str_replace('[[','',$section); + $section=str_replace(']]','',$section); + $title->mFragment=$section; + $link=$this->makeKnownLinkObj($title,wfMsg('sectionlink')); + } $sep='-'; + $auto=$link.$auto; if($pre) { $auto = $sep.' '.$auto; } if($post) { $auto .= ' '.$sep; } $auto=''.$auto.''; @@ -2493,28 +2609,35 @@ class Skin { # format regular and media links - all other wiki formatting # is ignored $medians = $wgLang->getNsText(Namespace::getMedia()).':'; - while(preg_match('/\[\[(.*?)(\|(.*?))*\]\]/',$comment,$match)) { + while(preg_match('/\[\[(.*?)(\|(.*?))*\]\](.*)$/',$comment,$match)) { # Handle link renaming [[foo|text]] will show link as "text" - if(isset($match[3]) ) { + if( "" != $match[3] ) { $text = $match[3]; } else { $text = $match[1]; } - if ( preg_match( '/^' . $medians . '(.*)$/i', $match[1], $submatch ) ) { - # Media link - $comment = preg_replace( '/\[\[(.*?)\]\]/', $this->makeMediaLink( $submatch[1], "", $text ), - $comment, 1 ); + if( preg_match( '/^' . $medians . '(.*)$/i', $match[1], $submatch ) ) { + # Media link; trail not supported. + $linkRegexp = '/\[\[(.*?)\]\]/'; + $thelink = $this->makeMediaLink( $submatch[1], "", $text ); } else { # Other kind of link - $comment = preg_replace('/\[\[(.*?)\]\]/', $this->makeLink( $match[1], $match[1] ), - $comment , 1); + if( preg_match( wfMsg( "linktrail" ), $match[4], $submatch ) ) { + $trail = $submatch[1]; + } else { + $trail = ""; + } + $linkRegexp = '/\[\[(.*?)\]\]' . preg_quote( $trail, '/' ) . '/'; + if ($match[1][0] == ':') + $match[1] = substr($match[1], 1); + $thelink = $this->makeLink( $match[1], $text, "", $trail ); } + $comment = preg_replace( $linkRegexp, $thelink, $comment, 1 ); } return $comment; } - function imageHistoryLine( $iscur, $timestamp, $img, $user, $usertext, $size, $description ) - { + function imageHistoryLine( $iscur, $timestamp, $img, $user, $usertext, $size, $description ) { global $wgUser, $wgLang, $wgTitle; $datetime = $wgLang->timeanddate( $timestamp, true ); @@ -2535,7 +2658,7 @@ class Skin { $dlink = $del; } } else { - $url = wfEscapeHTML( wfImageArchiveUrl( $img ) ); + $url = htmlspecialchars( wfImageArchiveUrl( $img ) ); if( $wgUser->getID() != 0 && $wgTitle->userCanEdit() ) { $rlink = $this->makeKnownLink( $wgTitle->getPrefixedText(), wfMsg( 'revertimg' ), 'action=revert&oldimage=' . @@ -2564,7 +2687,7 @@ class Skin { if ( '' != $description && '*' != $description ) { $sk=$wgUser->getSkin(); - $s .= $wgLang->emphasize(' (' . $sk->formatComment($description) . ')'); + $s .= $wgLang->emphasize(' (' . $sk->formatComment($description,$wgTitle) . ')'); } $s .= "\n"; return $s; @@ -2578,7 +2701,9 @@ class Skin { return str_repeat( "\n", $level>0 ? $level : 0 ); } - # parameter level defines if we are on an indentation level + /** + * parameter level defines if we are on an indentation level + */ function tocLine( $anchor, $tocline, $level ) { $link = ''.$tocline.'
    '; if($level) { @@ -2601,7 +2726,16 @@ class Skin { $toc."\n"; } - # These two do not check for permissions: check $wgTitle->userCanEdit before calling them + /** + * These two do not check for permissions: check $wgTitle->userCanEdit + * before calling them + */ + function editSectionScriptForOther( $title, $section, $head ) { + $ttl = Title::newFromText( $title ); + $url = $ttl->escapeLocalURL( 'action=edit§ion='.$section ); + return ''.$head.''; + } + function editSectionScript( $section, $head ) { global $wgTitle, $wgRequest; if( $wgRequest->getInt( 'oldid' ) && ( $wgRequest->getVal( 'diff' ) != '0' ) ) { @@ -2611,6 +2745,25 @@ class Skin { return ''.$head.''; } + function editSectionLinkForOther( $title, $section ) { + global $wgRequest; + global $wgUser, $wgLang; + + $title = Title::newFromText($title); + $editurl = '§ion='.$section; + $url = $this->makeKnownLink($title->getPrefixedText(),wfMsg('editsection'),'action=edit'.$editurl); + + if( $wgLang->isRTL() ) { + $farside = 'left'; + $nearside = 'right'; + } else { + $farside = 'right'; + $nearside = 'left'; + } + return "
    [".$url."]
    "; + + } + function editSectionLink( $section ) { global $wgRequest; global $wgTitle, $wgUser, $wgLang; @@ -2636,98 +2789,103 @@ class Skin { } - // This function is called by EditPage.php and shows a bulletin board style - // toolbar for common editing functions. It can be disabled in the user preferences. - // The necsesary JavaScript code can be found in style/wikibits.js. + /** + * This function is called by EditPage.php and shows a bulletin board style + * toolbar for common editing functions. It can be disabled in the user + * preferences. + * The necessary JavaScript code can be found in style/wikibits.js. + */ function getEditToolbar() { global $wgStylePath, $wgLang, $wgMimeType; - // toolarray an array of arrays which each include the filename of - // the button image (without path), the opening tag, the closing tag, - // and optionally a sample text that is inserted between the two when no - // selection is highlighted. - // The tip text is shown when the user moves the mouse over the button. - - // Already here are accesskeys (key), which are not used yet until someone - // can figure out a way to make them work in IE. However, we should make - // sure these keys are not defined on the edit page. + /** + * toolarray an array of arrays which each include the filename of + * the button image (without path), the opening tag, the closing tag, + * and optionally a sample text that is inserted between the two when no + * selection is highlighted. + * The tip text is shown when the user moves the mouse over the button. + * + * Already here are accesskeys (key), which are not used yet until someone + * can figure out a way to make them work in IE. However, we should make + * sure these keys are not defined on the edit page. + */ $toolarray=array( array( 'image'=>'button_bold.png', - 'open'=>"\'\'\'", - 'close'=>"\'\'\'", - 'sample'=>wfMsg('bold_sample'), - 'tip'=>wfMsg('bold_tip'), - 'key'=>'B' + 'open' => "\'\'\'", + 'close' => "\'\'\'", + 'sample'=> wfMsg('bold_sample'), + 'tip' => wfMsg('bold_tip'), + 'key' => 'B' ), - array( "image"=>"button_italic.png", - "open"=>"\'\'", - "close"=>"\'\'", - "sample"=>wfMsg("italic_sample"), - "tip"=>wfMsg("italic_tip"), - "key"=>"I" + array( 'image'=>'button_italic.png', + 'open' => "\'\'", + 'close' => "\'\'", + 'sample'=> wfMsg('italic_sample'), + 'tip' => wfMsg('italic_tip'), + 'key' => 'I' ), - array( "image"=>"button_link.png", - "open"=>"[[", - "close"=>"]]", - "sample"=>wfMsg("link_sample"), - "tip"=>wfMsg("link_tip"), - "key"=>"L" + array( 'image'=>'button_link.png', + 'open' => '[[', + 'close' => ']]', + 'sample'=> wfMsg('link_sample'), + 'tip' => wfMsg('link_tip'), + 'key' => 'L' ), - array( "image"=>"button_extlink.png", - "open"=>"[", - "close"=>"]", - "sample"=>wfMsg("extlink_sample"), - "tip"=>wfMsg("extlink_tip"), - "key"=>"X" + array( 'image'=>'button_extlink.png', + 'open' => '[', + 'close' => ']', + 'sample'=> wfMsg('extlink_sample'), + 'tip' => wfMsg('extlink_tip'), + 'key' => 'X' ), - array( "image"=>"button_headline.png", - "open"=>"\\n== ", - "close"=>" ==\\n", - "sample"=>wfMsg("headline_sample"), - "tip"=>wfMsg("headline_tip"), - "key"=>"H" + array( 'image'=>'button_headline.png', + 'open' => "\\n== ", + 'close' => " ==\\n", + 'sample'=> wfMsg('headline_sample'), + 'tip' => wfMsg('headline_tip'), + 'key' => 'H' ), - array( "image"=>"button_image.png", - "open"=>"[[".$wgLang->getNsText(NS_IMAGE).":", - "close"=>"]]", - "sample"=>wfMsg("image_sample"), - "tip"=>wfMsg("image_tip"), - "key"=>"D" + array( 'image'=>'button_image.png', + 'open' => '[['.$wgLang->getNsText(NS_IMAGE).":", + 'close' => ']]', + 'sample'=> wfMsg('image_sample'), + 'tip' => wfMsg('image_tip'), + 'key' => 'D' ), - array( "image"=>"button_media.png", - "open"=>"[[".$wgLang->getNsText(NS_MEDIA).":", - "close"=>"]]", - "sample"=>wfMsg("media_sample"), - "tip"=>wfMsg("media_tip"), - "key"=>"M" + array( 'image' => 'button_media.png', + 'open' => '[['.$wgLang->getNsText(NS_MEDIA).':', + 'close' => ']]', + 'sample'=> wfMsg('media_sample'), + 'tip' => wfMsg('media_tip'), + 'key' => 'M' ), - array( "image"=>"button_math.png", - "open"=>"\\", - "close"=>"\\", - "sample"=>wfMsg("math_sample"), - "tip"=>wfMsg("math_tip"), - "key"=>"C" + array( 'image' => 'button_math.png', + 'open' => "\\", + 'close' => "\\", + 'sample'=> wfMsg('math_sample'), + 'tip' => wfMsg('math_tip'), + 'key' => 'C' ), - array( "image"=>"button_nowiki.png", - "open"=>"\\", - "close"=>"\\", - "sample"=>wfMsg("nowiki_sample"), - "tip"=>wfMsg("nowiki_tip"), - "key"=>"N" + array( 'image' => 'button_nowiki.png', + 'open' => "\\", + 'close' => "\\", + 'sample'=> wfMsg('nowiki_sample'), + 'tip' => wfMsg('nowiki_tip'), + 'key' => 'N' ), - array( "image"=>"button_sig.png", - "open"=>"--~~~~", - "close"=>"", - "sample"=>"", - "tip"=>wfMsg("sig_tip"), - "key"=>"Y" + array( 'image' => 'button_sig.png', + 'open' => '--~~~~', + 'close' => '', + 'sample'=> '', + 'tip' => wfMsg('sig_tip'), + 'key' => 'Y' ), - array( "image"=>"button_hr.png", - "open"=>"\\n----\\n", - "close"=>"", - "sample"=>"", - "tip"=>wfMsg("hr_tip"), - "key"=>"R" + array( 'image' => 'button_hr.png', + 'open' => "\\n----\\n", + 'close' => '', + 'sample'=> '', + 'tip' => wfMsg('hr_tip'), + 'key' => 'R' ) ); $toolbar ="