Difference between revisions of "Extension:Wikiskin.php"
m |
(have to use different functions when not outputting) |
||
Line 127: | Line 127: | ||
# Build list of special fields and their content | # Build list of special fields and their content | ||
$replace = array(); | $replace = array(); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | $replace[' | + | $replace['SEARCH'] = '<div id="p-search" class="portlet">' |
− | ' | + | . '<h5><label for="searchInput">'.htmlspecialchars($this->translator->translate('search')).'</label></h5>' |
− | ' | + | . '<div id="searchBody" class="pBody">' |
− | '< | + | . '<form action="'.htmlspecialchars($this->data['searchaction']).'" id="searchform"><div>' |
+ | . '<input id="searchInput" name="search" type="text" ' | ||
+ | . ($this->haveMsg('accesskey-search') ? 'accesskey="'.htmlspecialchars($this->translator->translate('accesskey-search')).'"' : '') | ||
+ | . (isset($this->data['search']) ? ' value="'.htmlspecialchars($this->data['search']).'"' : '') | ||
+ | . ' /><input type="submit" name="go" class="searchButton" id="searchGoButton" ' | ||
+ | . 'value="'.htmlspecialchars($this->translator->translate('go')).'" /> ' | ||
+ | . '<input type="submit" name="fulltext" class="searchButton" ' | ||
+ | . 'value="'.htmlspecialchars($this->translator->translate('search')).'" /></div></form>' | ||
+ | . '</div></div>'; | ||
− | $replace[' | + | $replace['SITELOGO'] = '<div class="portlet" id="p-logo">' |
+ | . '<a style="background-image: url('.htmlspecialchars($this->data['logopath']).');" ' | ||
+ | . 'href="'.htmlspecialchars($this->data['nav_urls']['mainpage']['href']).'" ' | ||
+ | . 'title="'.htmlspecialchars($this->translator->translate('mainpage')).'"></a></div>' | ||
+ | . '<script type="'.htmlspecialchars($this->data['jsmimetype']).'"> if (window.isMSIE55) fixalpha(); </script>'; | ||
− | $replace[' | + | $replace['SITENOTICE'] = $this->data['sitenotice'] ? '<div id="siteNotice">'.$this->data['sitenotice'].'</div>' : ''; |
− | |||
− | |||
− | + | $replace['SUBTITLE'] = '<h3 id="siteSub">'.htmlspecialchars($this->translator->translate('tagline')).'</h3>' | |
− | + | . '<div id="contentSub">'.$this->data['subtitle'].'</div>'; | |
− | |||
− | |||
− | $replace[' | + | $replace['INFO'] = ($this->data['undelete'] ? '<div id="contentSub2">'.$this->data['undelete'].'</div>' : '') |
+ | . ($this->data['newtalk'] ? '<div class="usermessage">'.$this->data['newtalk'].'</div>' : '') | ||
+ | . ($this->data['showjumplinks'] ? '<div id="jump-to-nav">' | ||
+ | . htmlspecialchars($this->translator->translate('jumpto')) | ||
+ | . '<a href="#column-one">'.$this->msg('jumptonavigation').'</a>' | ||
+ | . ', <a href="#searchInput">'.$this->msg('jumptosearch').'</a></div>' : ''); | ||
− | $replace['CATLINKS'] = $this-> | + | $replace['TEXT'] = $this->data['bodytext']; |
+ | |||
+ | $replace['CATLINKS'] = $this->data['catlinks'] ? '<div id="catlinks">'.$this->data['catlinks'].'</div>' : ''; | ||
$replace['ACTIONS'] = '<ul>'; | $replace['ACTIONS'] = '<ul>'; | ||
− | foreach ($this->data['content_actions'] as $key => $tab) $replace['ACTIONS'] .= | + | foreach ($this->data['content_actions'] as $key => $tab) |
− | + | $replace['ACTIONS'] .= '<li id="ca-'.htmlspecialchars($key).'"' | |
− | ($tab['class'] ? ' class="'.htmlspecialchars($tab['class']).'"' : '') | + | . ($tab['class'] ? ' class="'.htmlspecialchars($tab['class']).'"' : '') |
− | '><a href="'.htmlspecialchars($tab['href']).'">'.htmlspecialchars($tab['text']).'</a></li>'; | + | . '><a href="'.htmlspecialchars($tab['href']).'">'.htmlspecialchars($tab['text']).'</a></li>'; |
$replace['ACTIONS'] .= '</ul>'; | $replace['ACTIONS'] .= '</ul>'; | ||
$replace['PERSONAL'] = '<ul>'; | $replace['PERSONAL'] = '<ul>'; | ||
− | foreach ($this->data['personal_urls'] as $key => $item) $replace['PERSONAL'] .= | + | foreach ($this->data['personal_urls'] as $key => $item) |
− | + | $replace['PERSONAL'] .= '<li id="pt-'.htmlspecialchars($key).'"' | |
− | ($item['active'] ? ' class="active"' : '') | + | . ($item['active'] ? ' class="active"' : '') |
− | '><a href="'.htmlspecialchars($item['href']).'"' | + | . '><a href="'.htmlspecialchars($item['href']).'"' |
− | (!empty($item['class']) ? ' class="'.htmlspecialchars($item['class']).'"' : '') | + | . (!empty($item['class']) ? ' class="'.htmlspecialchars($item['class']).'"' : '') |
− | '>'.htmlspecialchars($item['text']).'</a></li>'; | + | . '>'.htmlspecialchars($item['text']).'</a></li>'; |
$replace['PERSONAL'] .= '</ul>'; | $replace['PERSONAL'] .= '</ul>'; | ||
Revision as of 07:26, 6 April 2007
<?
- Extension:WikiSkin
- - Uses a wikitext article for the skin instead of a PHP file. Special items like search box and login link use magic words
- - Version 0.1 (2007-04-06)
- - See http://www.mediawiki.org/wiki/Extension:WikiSkin for installation and usage details
- - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
- - Author: http://www.organicdesign.co.nz/nad
$wgWikiSkinArticle = isset($_REQUEST['skin']) ? $_REQUEST['skin'] : 'WikiSkin'; $wgWikiSkinMagic = array('SITELOGO','TEXT','SEARCH','PERSONAL','ACTIONS','SITENOTICE','SUBTITLE','INFO','CATLINKS','FOOTER');
$wgExtensionFunctions[] = 'wfSetupWikiSkin'; $wgHooks['MagicWordMagicWords'][] = 'wfWikiSkinMagicWord'; $wgHooks['MagicWordwgVariableIDs'][] = 'wfWikiSkinVariableID'; $wgHooks['LanguageGetMagic'][] = 'wfWikiSkinLangMagic'; $wgHooks['ParserGetVariableValueSwitch'][] = 'wfWikiSkinGetVariable';
function wfWikiSkinMagicWord(&$magicWords) { global $wgWikiSkinMagic; foreach($wgWikiSkinMagic as $var) $magicWords[] = "MAG_$var"; return true; }
function wfWikiSkinVariableID(&$variables) { global $wgWikiSkinMagic; foreach($wgWikiSkinMagic as $var) $variables[] = constant("MAG_$var"); return true; }
function wfWikiSkinLangMagic(&$langMagic, $langCode = 0) { global $wgWikiSkinMagic; foreach($wgWikiSkinMagic as $var) { $magic = "MAG_$var"; $langMagic[defined($magic) ? constant($magic) : $magic] = array(0,$var); } return true; }
function wfWikiSkinGetVariable(&$this,&$cache,&$index,&$ret) { switch ($index) {
case MAG_CURRENTUSER: $ret = $GLOBALS['wgUser']->mName; break;
# These ones are all replaced by a token to be filled by skin when rendering page case MAG_SITELOGO: case MAG_TEXT: case MAG_SEARCH: case MAG_PERSONAL: case MAG_ACTIONS: case MAG_SITENOTICE: case MAG_SUBTITLE: case MAG_INFO: case MAG_CATLINKS: case MAG_FOOTER: $magic = constant($index); $ret = "((((WikiSkin:$magic))))"; break; } return true; }
- Define new skin class, create an instance and make it current
function wfSetupWikiSkin() {
# Create skin class based on monobook which parses the skin article and embeds the content class SkinWikiSkin extends SkinTemplate {
function initPage(&$out) { SkinTemplate::initPage($out); $this->skinname = 'wikiskin'; $this->stylename = 'wikiskin'; $this->template = 'WikiSkinTemplate'; }
}
class WikiSkinTemplate extends QuickTemplate { function execute() {
# Build the HTML, HEAD and BODY elements and send to output wfSuppressWarnings();
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> text('lang') ?>" lang="text('lang') ?>" dir="text('dir') ?>"> html('headlinks') ?>
'; $replace['SITELOGO'] = '
' . '
'; $replace['SITENOTICE'] = $this->data['sitenotice'] ? '
' : ''; $replace['SUBTITLE'] = '
'.htmlspecialchars($this->translator->translate('tagline')).'
' . '
'; $replace['INFO'] = ($this->data['undelete'] ? '
' : '') . ($this->data['newtalk'] ? '
' : '') . ($this->data['showjumplinks'] ? '
' : ''); $replace['TEXT'] = $this->data['bodytext']; $replace['CATLINKS'] = $this->data['catlinks'] ? '
' : ''; $replace['ACTIONS'] = '
- ';
foreach ($this->data['content_actions'] as $key => $tab)
$replace['ACTIONS'] .= '
- '.htmlspecialchars($tab['text']).' '; $replace['ACTIONS'] .= '
'; $replace['PERSONAL'] = '
- ';
foreach ($this->data['personal_urls'] as $key => $item)
$replace['PERSONAL'] .= '
- '.htmlspecialchars($item['text']).' '; $replace['PERSONAL'] .= '
'; # Read and parse the skin article global $wgUser,$wgTitle,$wgParser,$wgWikiSkinArticle; $skin = new Article(Title::newFromText($wgWikiSkinArticle)); $opt = ParserOptions::newFromUser($wgUser); $out = $wgParser->parse($skin->fetchContent(0,false,false),$wgTitle,$opt,true,true); $content = preg_replace('/<\\/?p>/','',$out->getText()); # parser adding damn p's # Replace all the fields and send to output echo preg_replace('/\\({4}WikiSkin:MAG_(.+?)\\){4}/ie','$replace["$1"]',$content); ?>
html('reporttime') ?> <?php
wfRestoreWarnings();
}
} # end of class definition
# Make the new skin current global $wgUser; $wgUser->setOption('skin','WikiSkin'); $wgUser->mSkin =& new SkinWikiSkin;
} # end of setup function
?>