First commit.

This commit is contained in:
David Miles
2011-06-03 01:33:07 -05:00
commit 96c09381ba
18 changed files with 1865 additions and 0 deletions

341
Codex.php Normal file
View File

@@ -0,0 +1,341 @@
<?php
/**
* Mediawiki Codex Skin
*
* This is a clone of the {@link http://codex.wordpress.org} theme and licensed under
* the GPL License.
*
* All credit is due to the designers of {@link http://codex.wordpress.org} since this
* is a copy of their work and I just cloned their design and made it into a Mediawiki skin
* for personal use.
*
* The best I can tell is that the design is part of the content of the WordPress.org Codex
* and falls under their GPL licensing of that site's contents, so that same licensing
* applies to this skin as well.
*
* @license http://wordpress.org/about/gpl/ GPL
*/
if( !defined('MEDIAWIKI') ) die( -1 );
/**
* Inherit main code from SkinTemplate, set the CSS and template filter.
* @todo document
* @ingroup Skins
*/
class SkinCodex extends SkinTemplate
{
/** Using codex. */
var $skinname = 'codex';
var $stylename = 'codex';
var $template = 'CodexTemplate';
var $useHeadElement = true;
function setupSkinUserCss( OutputPage $out )
{
global $wgHandheldStyle;
parent::setupSkinUserCss( $out );
// Append to the default screen common & print styles...
$out->addStyle( 'codex/main.css', 'screen' );
$out->addStyle( 'codex/wp4.css', 'screen' );
$out->addStyle( 'codex/iphone.css', 'only screen and (max-device-width: 480px)' );
}
}
/**
* Codex Template Class
*
* This class assembles the components of the Codex template and renders the output.
* It is written in <b>PHP5 OO Standards</b>, therefore it's not compatible with PHP4.
*
* @ingroup Skins
*/
class CodexTemplate extends QuickTemplate
{
/**
* Sidebox Group printf Format
*
* @var string
* @access private
*/
private $_sideboxf = <<<________EOD
<h3>%s</h3>
<ul class="submenu">
%s
</ul>
________EOD;
/**
* Sidebox List Item printf Format
*
* @var string
* @access private
*/
private $_lif = "\t<li id=\"%s\"%s>%s</li>\n";
/**
* Sidebox AnchorLink printf Format
*
* @var string
* @access private
*/
private $_af = '<a href="%s" %s>%s</a>';
/**
* The Skin Object
*
* @var object
* @access public
*/
public $skin;
/**
* Template Filter Callback
*
* Takes an associative array of data set from a SkinTemplate-based class, and a
* wrapper for MediaWiki's localization database, and outputs a formatted page.
*
* The page's HTML layout is included by calling the file {@link body.php}, which
* is the primary theme file.
*
* @param void
* return string Outputs the pages generated content
* @access public
*/
public function execute()
{
global $wgRequest;
$this->skin = $skin = $this->data['skin'];
$action = $wgRequest->getText( 'action' );
// Suppress warnings to prevent notices about missing indexes in $this->data
wfSuppressWarnings();
// Load the head element for the page
$this->html( 'headelement' );
// Include the main content syntax
require realpath(dirname(__FILE__) .'/codex/body.php');
// Restore warnings
wfRestoreWarnings();
}
/**
* Generate Search Box
*
* Creates the search form for the Codex theme.
*
* @param void
* @return string Prints the search form.
* @access public
*/
public function searchBox()
{
$format = '<form action="%s" id="head-search">'."\n\t%s\n\t";
$format .= '<input type="submit" name="go" class="button" id="searchGoButton" value="Go"%s />'."\n";
$format .= "</form>\n";
printf( $format,
htmlspecialchars($this->data['wgScript']),
Html::input( 'text',
isset($this->data['search']) && strlen($this->data['search']) > 0 ? $this->data['search'] : 'Search the Codex',
'text',
array(
'maxlength' => 150,
'class' => 'text',
'title' => $this->skin->titleAttrib( 'search' ),
'accesskey' => $this->skin->accesskey( 'search' ),
'onfocus' => "this.value=(this.value=='Search the Codex') ? '' : this.value;",
'onblur' => "this.value=(this.value=='') ? 'Search the Codex' : this.value;",
)
),
$this->skin->tooltipAndAccesskey( 'search-go' )
);
}
/**
* ToolBox Sidebox
*
* Formats and prints the HTML syntax for the ToolBox links.
*
* @param void
* @return string Prints the HTML syntax that makes up the ToolBox links and section.
* @access public
*/
public function toolBox()
{
$title = $this->translator->translate('Toolbox');
$li = '';
if( $this->data['notspecialpage'] )
$li .= sprintf($this->_lif,
't-whatlinkshere',
'',
sprintf( $this->_af, htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href']),
$this->skin->tooltipAndAccesskey('t-whatlinkshere'),
htmlspecialchars( $this->translator->translate('whatlinkshere') ) )
);
if( $this->data['feeds'] )
{
$alinks .= '';
foreach($this->data['feeds'] as $key => $feed)
{
$alinks .= sprintf( $this->_af,
htmlspecialchars($feed['href']),
'id="'. Sanitizer::escapeId( "feed-$key" ) .'" rel="alternate" type="application/'. $key .'+xml" class="feedlink" '.
$this->skin->tooltipAndAccesskey('feed-'.$key),
htmlspecialchars($feed['text']) .'&nbsp' );
}
$li .= sprintf($this->_li_lif, $this->msg('feedlinks', TRUE), '', $alinks);
}
foreach( array('recentchangeslinked', 'trackbacklink', 'contributions', 'log', 'blockip', 'emailuser', 'upload', 'specialpages') as $special )
{
if( is_array($this->data['nav_urls'][$special]) )
$li .= sprintf( $this->_lif,
't-'. $special,
'',
sprintf( $this->_af,
htmlspecialchars($this->data['nav_urls'][$special]['href']),
$this->skin->tooltipAndAccesskey('t-'. $special),
htmlspecialchars( $this->translator->translate($special) ) )
);
}
if( strlen($this->data['nav_urls']['print']['href']) > 0 )
$li .= sprintf( $this->_lif,
't-print',
'',
sprintf( $this->_af,
htmlspecialchars($this->data['nav_urls']['print']['href']),
'rel="alternate" '. $this->skin->tooltipAndAccesskey('t-print'),
htmlspecialchars( $this->translator->translate('printableversion') ) )
);
if( strlen($this->data['nav_urls']['permalink']['href']) > 0 )
$li .= sprintf( $this->_lif,
't-permalink',
'',
sprintf( $this->_af,
htmlspecialchars($this->data['nav_urls']['permalink']['href']),
$this->skin->tooltipAndAccesskey('t-permalink'),
htmlspecialchars( $this->translator->translate('permalink') ) )
);
else
$li .= sprintf( $this->_lif,
't-ispermalink',
$this->skin->tooltip('t-ispermalink'),
htmlspecialchars( $this->translator->translate('permalink') )
);
printf($this->_sideboxf, $title, $li);
wfRunHooks( 'CodexTemplateToolboxEnd', array( &$this ) );
wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this ) );
}
/**
* Views Sidebox
*
* This method formats and prints the <i>Views</i> Sidebox menu items.
*
* @param void
* @return string Prints the formatted HTML syntax for the Views sidebox section.
* @access public
*/
public function viewsBox()
{
$title = $this->translator->translate('Views');
$li = '';
foreach($this->data['content_actions'] as $key => $tab)
{
$id = Sanitizer::escapeId("ca-{$key}");
$class = $tab['class'] ? ' class="'. htmlspecialchars($tab['class']) .'"' : '';
$href = htmlspecialchars($tab['href']);
$tool = in_array( $action, array('edit', 'submit') ) &&
in_array( $key, array('edit', 'watch', 'unwatch') ) ?
$this->skin->tooltip( "ca-$key" ) : $this->skin->tooltipAndAccesskey( "ca-$key" );
$text = htmlspecialchars($tab['text']);
$alink = sprintf($this->_af, $href, $tool, $text);
$li .= sprintf($this->_lif, $id, $class, $alink);
}
printf($this->_sideboxf, $title, $li);
}
/*************************************************************************************************/
public function languageBox()
{
if( !$this->data['language_urls'] ) return;
$links = '';
foreach($this->data['language_urls'] as $langlink)
{
$links .= sprintf( $this->_lif,
'lang-'. htmlspecialchars($langlink['text']),
' class="'. htmlspecialchars($langlink['class']) .'"',
sprintf( $this->_af,
htmlspecialchars($langlink['href']),
'',
htmlspecialchars( $this->translator->translate($langlink['text']) )
)
);
}
printf( $this->_sideboxf, $this->html('userlangattributes'), htmlspecialchars( $this->translator->translate('otherlanguages') ), $links );
}
/**
* Create Custom Sidebox
*
* This is used to add a custom sidebox section.
*
* @param string $bar Unsure
* @param array|string $cont The content to add to the Sidebox. It can be
* an array of items to itterate over or an already
* processed string of data to add directly.
* @return string Prints out the formatted Sidebox syntax.
* @access public
* @todo Try making this method serve the other Sidebox methods in this class
* by processing the data for them and minimizing the code in them if possible.
*/
public function customBox( $bar, $cont )
{
$links = '';
$out = wfMsg( $bar );
$title = wfEmptyMsg($bar, $out) ? htmlspecialchars( $this->translator->translate($bar) ) :
htmlspecialchars( $this->translator->translate($out) );
if ( !is_array($cont) )
{
printf( $this->_sideboxf, $title, $cont );
return;
}
foreach($cont as $key => $val)
{
$links .= sprintf( $this->_lif,
Sanitizer::escapeId($val['id']),
($val['active'] ? ' class="active"':''),
sprintf( $this->_af,
htmlspecialchars($val['href']),
$this->skin->tooltipAndAccesskey($val['id']),
htmlspecialchars( $this->translator->translate($val['text']) )
)
);
}
printf($this->_sideboxf, $title, $links);
}
} // end of class

32
README.textile Normal file
View File

@@ -0,0 +1,32 @@
h1. Mediawiki WordPress.org Codex Skin clone
p. This is a MediaWiki skin that clones the "WordPress.org Codex":http://wordpress.org/ theme.
*ALL* credit is due to the theme authors of the WordPress.org Codex since it's their work
and I just made into a public Mediawiki skin.
p. As far as I can tell, the theme falls under the same "GPL Licensing":http://codex.wordpress.org
as the rest of the Codex content.
If I am wrong about this, please let me know so I can honor it.
h2. About The Codex Skin
p. I ported the skin for a personal project I am working on and needed a localhost MediaWiki.
Since I spend a ton of time sifting through and making contributions where I can to the *WordPress.org Codex*,
I thought it would be much easier if my localhost wiki looked like the WordPress Codex
since it's a format I'm familiar with viewing.
p. While I was at it and since I had no luck finding a **WordPress Codex Skin Clone**,
I figured I'd share what I had come up with with the rest of those out there who just
love the familiar look of the Codex.
So here you have it, the *Codex Skin clone*.
h2. Feedback
p. Issue tracking on GitHub is by far the easiest way to make suggestions and report problems
since it allows me to check items off and keep things organized.
This is my first MediaWiki Skin, so I heavily-altered the *MonoBook* skin which provided the
base example code to work with and then I cleaned the code up while integrating the Codex design.
With that being said, there's bound to be issues such as things I missed, things I may have gotten wrong,
or perhaps there's better practices that those who are much more savvy at Skinning Mediawiki than I am know of.
p. This was a quick project and therefore your feedback is important in getting these things ironed out.

BIN
codex/arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

119
codex/body.php Normal file
View File

@@ -0,0 +1,119 @@
<div id="header">
<div class="wrapper">
<h1><a href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href']); ?>" title="<?php $this->html('title'); ?>" /><?php $this->html('title'); ?></a></h1>
<?php $this->searchBox(); ?>
<ul>
<li><a href="#" title="">Home</a></li>
<li><a href="#" title="">Showcase</a></li>
<li><a href="#" title="">Extend</a>
<ul class="nav-submenu">
<li><a href="#" title="">Plugins</a></li>
<li><a href="#" title="">Themes</a></li>
</ul>
</li>
<li><a href="#" title="">About</a></li>
<li><a class="current" href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href']); ?>" title="Documentation, tutorials, best practices.">Docs</a></li>
<li><a href="#" title="">Blog</a></li>
<li><a href="#" title="">Forums</a></li>
<li><a href="#" title="">Hosting</a></li>
<li id="download"><a href="#" title="Get it. Got it? Good.">Download</a></li>
</ul>
</div>
</div><!-- #header -->
<div id="headline">
<div class="wrapper">
<h2>Codex</h2>
<div class="portlet" id="p-personal">
<p class="login">Codex tools:
<?php foreach($this->data['personal_urls'] as $key => $item) {
$linkf = '<a href="%s" class="%s" %s>%s</a>';
$class = $item['class'] .' '. ($item['active'] ? 'active':'');
printf( $linkf, htmlspecialchars($item['href']), $class, $skin->tooltipAndAccesskey('pt-'.$key), htmlspecialchars($item['text']) );
} ?>
</p>
</div>
</div>
</div><!-- #headline -->
<div id="pagebody" <?php $this->html("specialpageattributes"); ?>>
<div class="wrapper">
<?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice'); ?></div><?php } ?>
<div id="bodyContent" class="col-10">
<h2 class="pagetitle"><?php $this->html('title'); ?></h2>
<!-- start content -->
<?php $this->html('bodytext'); ?>
<?php if($this->data['catlinks']) { $this->html('catlinks'); } ?>
<!-- end content -->
<?php if($this->data['dataAfterContent']) { $this->html('dataAfterContent'); } ?>
</div><!-- #bodyContent -->
<div class="col-2">
<?php $this->viewsBox(); ?>
<?php $this->toolBox(); ?>
<?php $this->languageBox(); ?>
</div>
</div>
</div><!-- #pagebody -->
<?php
/*
$sidebar = $this->data['sidebar'];
if ( !isset( $sidebar['TOOLBOX'] ) ) $sidebar['TOOLBOX'] = true;
if ( !isset( $sidebar['LANGUAGES'] ) ) $sidebar['LANGUAGES'] = true;
foreach ($sidebar as $boxName => $cont) {
if ( $boxName == 'TOOLBOX' ) {
$this->toolbox();
} elseif ( $boxName == 'LANGUAGES' ) {
$this->languageBox();
} else {
$this->customBox( $boxName, $cont );
}
}
*/
?>
<div id="footer"<?php $this->html('userlangattributes') ?>>
<div class="wrapper">
<?php
// Generate additional footer links
$footerlinks = array(
'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
'privacy', 'about', 'disclaimer', 'tagline',
);
$validFooterLinks = array();
foreach( $footerlinks as $aLink ) {
if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
$validFooterLinks[] = $aLink;
}
}
if ( count( $validFooterLinks ) > 0 ) { ?>
<p>
<?php
$i = 0;
$c = count($validFooterLinks);
foreach( $validFooterLinks as $aLink )
{
if( isset( $this->data[$aLink] ) && $this->data[$aLink] )
{
$this->html($aLink);
echo $i < $c ? ' | ':'';
}
$i++;
}
?> </p>
<?php } ?>
<h6>Code is Poetry</h6>
</div>
</div><!-- #footer -->
<?php
$this->html('bottomscripts'); /* JS call to runBodyOnloadHook */
$this->html('reporttime');
if( $this->data['debug'] ): ?>
<!-- Debug output:
<?php $this->text( 'debug' ); ?>
-->
<?php endif; ?>
</body>
</html>

BIN
codex/button-grad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

BIN
codex/codeispoetry.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

BIN
codex/download-tab-bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

BIN
codex/feedicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

BIN
codex/feedicon10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

BIN
codex/header-bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1012 B

3
codex/iphone.css Normal file
View File

@@ -0,0 +1,3 @@
html {-webkit-text-size-adjust: none;}
#header ul li a.current, #header ul li#download a.current {padding-bottom: 1px;}

229
codex/main.css Executable file
View File

@@ -0,0 +1,229 @@
html * {
font-variant: normal !important;
text-align: left !important;
}
.printfooter, hr, .urlexpansion {
display: none !important;
}
#bodyContent h1, #bodyContent h2 {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 22px;
margin-bottom: 22px;
color: #333;
}
#bodyContent h2, #bodyContent h3, #bodyContent h4, #bodyContent h5, #bodyContent h6 {
font-family: Georgia, "Times New Roman", Times, serif;
border-bottom: 1px solid #dadada;
font-weight: normal;
}
#bodyContent h2.pagetitle {
font-family: "Lucida Grande", Verdana, Tahoma, Arial, sans-serif;
font-size: 24px;
font-weight: bold;
color: #666;
padding-bottom: 2px;
margin-top: 0;
margin-bottom: 24px;
}
.col-2 h3 {
margin-top: 3px;
}
#bodyContent h2 {
margin-top: 22px;
margin-bottom: 11px;
}
.editsection {
font-size: 10px;
font-weight: normal !important;
font-family: "Lucida Grande", Verdana, Tahoma, Arial, sans-serif;
}
#bodyContent h3 {
padding-bottom: 4px;
margin-bottom: 4px;
}
#bodyContent h2 {
font-size: 190%;
}
#bodyContent h3 {
font-size: 150%;
border-color: #eee;
}
#bodyContent h4 {
font-size: 130%;
}
h4 b {
font-weight: normal;
}
#bodyContent h5 {
font-size: 100%;
font-weight: bold;
}
#bodyContent {
color: black;
}
#bodyContent p {
clear: left;
}
#pagebody #bodyContent p,
#pagebody #bodyContent ul,
#pagebody #bodyContent dl,
#pagebody #bodyContent ol {
margin-bottom: 22px;
}
p.login a {
margin-right: 6px;
}
#editpage-copywarn p {
margin-top: 18px !important;
}
blockquote {
padding: 11px 22px !important;
}
#bodyContent div {
font-size: 100% !important;
}
#bodyContent pre, #bodyContent code {
margin-bottom: 22px;
font-family: Consolas, Monaco, "Courier New", Courier, monospace;
font-size: 12px;
font-weight: inherit;
overflow-x: auto; /* Use horizontal scroller if needed; for Firefox 2, not needed in Firefox 3 */
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
/*messes up flow* width: 99%; /* remove horizontal scroll-bar when viewing in IE7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
textarea {
width: 100%;
}
dl dt {
font-weight: bold;
font-size: 110%;
}
dl dd {
margin-bottom: 11px;
margin-left: 1em;
}
#toc {
background: #f1f1f1;
border: 1px solid #dadada;
-webkit-border-radius: 3px;
float: right;
margin-left: 16px;
padding: 4px 8px;
margin-bottom: 12px;
font-size: 85%;
max-width: 30%;
}
#pagebody #toc ul {
margin-bottom: 0px;
}
#toctitle h2{
font-size: 18px;
margin-top: 0;
margin-bottom: 5%;
}
#toctitle td {
text-align: left !important;
}
#toctitle td {
border-bottom: 1px solid #dadada;
}
#tocinside td {
padding-top: 4px;
font-size: 10px;
}
.tocindent p {
padding-left: 12px;
margin-bottom: 0 !important;
}
.tocindent .tocindent p {
padding-left: 32px;
}
input[type="text"], input[type="password"] {
margin-right: 2px;
font-size: 10px;
padding: 3px;
margin-bottom: 6px;
background: #f5f5f5;
border: 1px solid #ccc;
-moz-border-radius: 3px;
-khtml-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
height: 14px;
color: #666;
}
input[type="checkbox"] {
margin-right: 4px;
}
label {
margin-right: 8px;
}
table.diff { background:white; }
td.diff-otitle { background:#ffffff; }
td.diff-ntitle { background:#ffffff; }
td.diff-addedline {
background:#ccffcc;
font-size: smaller;
}
td.diff-deletedline {
background:#ffffaa;
font-size: smaller;
}
td.diff-context {
background:#eeeeee;
font-size: smaller;
}
span.diffchange { color: red; font-weight: bold; }
/* image css */
a img.alignright, .tright, .floatright, img.alignright, img.right {float:right; margin:0 0 1em 1em}
a img.alignleft, .tleft, .floatleft, img.alignleft, img.left {float:left; margin:0 1em 1em 0}
a img.aligncenter, img.aligncenter, img.center {display: block; margin-left: auto; margin-right: auto}
#bodyContent hr {
display: block !important;
border: 0;
border-top: 1px solid #ddd;
}
#bodyContent #Copyedit {
border: solid 1px transparent;
-moz-border-radius: 3px;
-khtml-border-radius: 3px;
-webkit-border-radius: 3px;
background-color: #eef;
text-align: center;
padding: 1em 1em 1px 1em;
margin: 1em 0;
}
.new, .new:link, .new:visited { color: red !important; }
.new:hover, .new:active { text-decoration: underline !important; }

BIN
codex/step1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

BIN
codex/step2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

BIN
codex/step3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

BIN
codex/white-grad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

BIN
codex/wp3-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

1141
codex/wp4.css Normal file

File diff suppressed because it is too large Load Diff