Initial attempt at using Smarty templates based on Tarquin's Paddington and Montparna...
authorBrion Vibber <brion@users.mediawiki.org>
Thu, 11 Sep 2003 12:21:03 +0000 (12:21 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Thu, 11 Sep 2003 12:21:03 +0000 (12:21 +0000)
includes/OutputPage.php
includes/Skin.php
includes/SkinSmarty.php [new file with mode: 0644]
languages/Language.php
stylesheets/montparnasse.css [new file with mode: 0644]
stylesheets/paddington.css [new file with mode: 0644]
templates/montparnasse.tpl [new file with mode: 0644]
templates/paddington.tpl [new file with mode: 0644]

index f43d8d4..f5b464c 100644 (file)
@@ -239,10 +239,8 @@ class OutputPage {
        {
                global $wgUser, $wgLang, $wgDebugComments, $wgCookieExpiration;
                global $wgInputEncoding, $wgOutputEncoding, $wgLanguageCode;
-               wfProfileIn( "OutputPage::output" );
                $sk = $wgUser->getSkin();
 
-               wfProfileIn( "OutputPage::output-headers" );
                $this->sendCacheControl();
 
                header( "Content-type: text/html; charset={$wgOutputEncoding}" );
@@ -250,7 +248,6 @@ class OutputPage {
                
                if ( "" != $this->mRedirect ) {
                        header( "Location: {$this->mRedirect}" );
-                       wfProfileOut();
                        return;
                }
 
@@ -258,36 +255,8 @@ class OutputPage {
                foreach( $this->mCookies as $name => $val ) {
                        setcookie( $name, $val, $exp, "/" );
                }
-               wfProfileOut();
-
-               wfProfileIn( "OutputPage::output-middle" );
-               $sk->initPage();
-               $this->out( $this->headElement() );
-
-               $this->out( "\n<body" );
-               $ops = $sk->getBodyOptions();
-               foreach ( $ops as $name => $val ) {
-                       $this->out( " $name='$val'" );
-               }
-               $this->out( ">\n" );
-               if ( $wgDebugComments ) {
-                       $this->out( "<!-- Wiki debugging output:\n" .
-                         $this->mDebugtext . "-->\n" );
-               }
-               $this->out( $sk->beforeContent() );
-               wfProfileOut();
-               
-               wfProfileIn( "OutputPage::output-bodytext" );
-               $this->out( $this->mBodytext );
-               wfProfileOut();
-               wfProfileIn( "OutputPage::output-after" );
-               $this->out( $sk->afterContent() );
-               wfProfileOut();
-
-               wfProfileOut(); # A hack - we can't report after here
-               $this->out( $this->reportTime() );
 
-               $this->out( "\n</body></html>" );
+               $sk->outputPage( $this );
                flush();
        }
 
index 9576870..dc6886c 100644 (file)
@@ -6,7 +6,7 @@
 # Language class has internationalized names
 #
 /* private */ $wgValidSkinNames = array(
-       "Standard", "Nostalgia", "CologneBlue"
+       "Standard", "Nostalgia", "CologneBlue", "Smarty", "Montparnasse"
 );
 
 # For some odd PHP bug, this function can't be part of a class
@@ -78,6 +78,33 @@ class Skin {
                $wgOut->addLink( "stylesheet", "", "{$wgStyleSheetPath}/{$ss}" );
                wfProfileOut();
        }
+       
+       function outputPage( &$out ) {
+               $this->initPage();
+               $out->out( $out->headElement() );
+
+               $out->out( "\n<body" );
+               $ops = $this->getBodyOptions();
+               foreach ( $ops as $name => $val ) {
+                       $out->out( " $name='$val'" );
+               }
+               $out->out( ">\n" );
+               if ( $wgDebugComments ) {
+                       $out->out( "<!-- Wiki debugging output:\n" .
+                         $out->mDebugtext . "-->\n" );
+               }
+               $out->out( $this->beforeContent() );
+
+               $out->out( $out->mBodytext );
+
+               $out->out( $this->afterContent() );
+               wfProfileOut();
+
+               wfProfileOut(); # A hack - we can't report after here
+               $out->out( $out->reportTime() );
+
+               $out->out( "\n</body></html>" );
+       }
 
        function getHeadScripts() {
                global $wgStyleSheetPath;
@@ -1785,5 +1812,6 @@ if ( isset ( $wgUseApproval ) && $wgUseApproval )
 include_once( "SkinStandard.php" );
 include_once( "SkinNostalgia.php" );
 include_once( "SkinCologneBlue.php" );
+include_once( "SkinSmarty.php" );
 
 ?>
diff --git a/includes/SkinSmarty.php b/includes/SkinSmarty.php
new file mode 100644 (file)
index 0000000..7033ab5
--- /dev/null
@@ -0,0 +1,204 @@
+<?
+
+include_once( "Smarty.class.php" );
+
+class SkinSmarty extends Skin {
+       var $template;
+       
+       function SkinSmarty() {
+       }
+       
+       function initPage() {
+               $this->template = "paddington";
+       }
+       
+       function outputPage( &$out ) {
+               global $wgTitle, $wgArticle, $wgUser, $wgLang;
+               global $wgScriptPath, $wgStyleSheetPath, $wgLanguageCode;
+
+               $this->initPage();
+               
+               $smarty = new Smarty();
+               $smarty->register_function( "wikimsg",
+                       array( &$this,"smarty_function_wikimsg" ), true );
+               $smarty->register_function( "wikilink",
+                       array( &$this, "smarty_function_wikilink" ) );
+               
+               $smarty->assign( "title", $wgTitle->getPrefixedText() ); // ?
+               $smarty->assign( "thispage", $wgTitle->getPrefixedDbKey() );
+               $smarty->assign( "subtitle", $out->getSubtitle() );
+               
+               $smarty->assign( "editable", ($wgTitle->getNamespace != Namespace::getSpecial() ) );
+               $smarty->assign( "exists", $wgTitle->getArticleID() != 0 );
+               $smarty->assign( "watch", $wgTitle->userIsWatching() ? "unwatch" : "watch" );
+               $smarty->assign( "protect", count($wgTitle->getRestrictions()) ? "unprotect" : "protect" );
+
+               $smarty->assign( "searchaction", $wgScriptPath );
+               $smarty->assign( "stylepath", $wgStyleSheetPath );
+               $smarty->assign( "lang", $wgLanguageCode );
+               $smarty->assign( "langname", $wgLang->getLanguageName( $wgLanguageCode ) );
+
+               $smarty->assign( "username", $wgUser->getName() );
+               $smarty->assign( "userpage", $wgLang->getNsText( Namespace::getUser() ) . ":" . $wgUser->getName() );
+               $smarty->assign( "loggedin", $wgUser->getID() != 0 );
+               $smarty->assign( "sysop", $wgUser->isSysop() );
+               if( $wgUser->getNewtalk() ) {
+                       $ntl = wfMsg( "newmessages",
+                               $this->makeKnownLink(
+                                       $wgLang->getNsText( Namespace::getTalk( Namespace::getUser() ) )
+                                               . ":" . $wgUser->getName(),
+                                       wfMsg("newmessageslink")
+                               )
+                       );
+               } else {
+                       $ntl = "";
+               }
+               $smarty->assign( "newtalk", $ntl );
+
+               $smarty->assign( "logo", $this->logoText() );
+               $smarty->assign( "pagestats", $this->pageStats() );
+               $smarty->assign( "otherlanguages", $this->otherLanguages() );
+
+               $smarty->assign( "debug", $out->mDebugtext );
+               $smarty->assign( "reporttime", $out->reportTime() );
+               
+               $smarty->assign( "bodytext", $out->mBodytext );
+               
+               $smarty->display( $this->template . ".tpl" );
+       }
+
+       function smarty_function_wikimsg( $params, &$smarty ) {
+               return wfMsg( $params['key'] );
+       }
+       
+       function smarty_function_wikilink( $params, &$smarty ) {
+               global $wgLang;
+               $action = "";
+               $popup = "";
+               $page = "";
+               
+               if($params['action']) $action = "action=" . $params['action'];
+               
+               if($params['special']) {
+                       $page = $wgLang->specialPage( $params['special'] );
+                       #$text = $wgLang->getSpecialPageName( $params['special'] );
+                       $text = $popup = $params['special'];
+                       if($params['target']) $action .= "target=" . urlencode( $params['target'] );
+               } else {
+                       if( $params['keypage'] )
+                               $title = Title::newFromText( wfMsg( $params['keypage'] ) );
+                       else
+                               $title = Title::newFromText( $params['name'] );
+                       if(isset($params["talk"])) {
+                               $title = Title::makeTitle( $title->getNamespace() ^ 1, $title->getDbKey() );
+                       }
+                       $text = $popup = $title->getPrefixedText();
+                       $page = urlencode( $title->getPrefixedUrl() );
+               }
+               
+               $url = wfLocalUrlE( $page, $action );
+               
+               if($params['text']) $text = $params['text'];
+               if($params['key']) $text = wfMsg( $params['key'] );
+               if($popup) $popup = ' title="' . htmlspecialchars( $popup ) . '"';
+               
+               return "<a href=\"$url\"$popup>$text</a>";
+       }
+
+/*
+       function Skin()
+       function getSkinNames()
+       function getStylesheet()
+       
+       function qbSetting()
+       function initPage()
+       function getHeadScripts() {
+       function getUserStyles()
+       function doGetUserStyles()
+       function getBodyOptions()
+       function getExternalLinkAttributes( $link, $text )
+       function getInternalLinkAttributes( $link, $text, $broken = false )
+
+       function getLogo()
+       function beforeContent()
+       function doBeforeContent()
+       function getQuickbarCompensator( $rows = 1 )
+       function afterContent()
+       function doAfterContent()
+       function pageTitleLinks()
+       function printableLink()
+       function pageTitle()
+       function pageSubtitle()
+       function nameAndLogin()
+       function searchForm()
+       function topLinks()
+       function bottomLinks()
+       function pageStats()
+       function lastModified()
+       function logoText( $align = "" )
+       function quickBar()
+       function specialPagesList()
+       function mainPageLink()
+       function copyrightLink()
+       function aboutLink()
+       function editThisPage()
+       function deleteThisPage()
+       function protectThisPage()
+       function watchThisPage()
+       function moveThisPage()
+       function historyLink()
+       function whatLinksHere()
+       function userContribsLink()
+       function emailUserLink()
+       function watchPageLinksLink()
+       function otherLanguages()
+       function bugReportsLink()
+       function dateLink()
+       function talkLink()
+       function transformContent( $text )
+
+       function makeLink( $title, $text= "", $query = "", $trail = "" )
+       function makeKnownLink( $title, $text = "", $query = "", $trail = "" )
+       function makeBrokenLink( $title, $text = "", $query = "", $trail = "" )
+       function makeStubLink( $title, $text = "", $query = "", $trail = "" )
+       function fnamePart( $url )
+       function makeImage( $url, $alt = "" )
+       function makeImageLink( $name, $url, $alt = "" )
+       function makeMediaLink( $name, $url, $alt = "" )
+       function specialLink( $name, $key = "" )
+
+       function beginHistoryList()
+       function beginImageHistoryList()
+       function endRecentChangesList()
+       function endHistoryList()
+       function endImageHistoryList()
+       function historyLine( $ts, $u, $ut, $ns, $ttl, $oid, $c, $isminor )
+       function imageHistoryLine( $iscur, $ts, $img, $u, $ut, $size, $c )
+
+       
+       function beginRecentChangesList()
+       function recentChangesBlockLine ( $y ) {
+       function recentChangesBlockGroup ( $y ) {
+       function recentChangesBlock ()
+       function recentChangesLine( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0 , $diffid = 0 )
+       function recentChangesLineOld( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0, $diffid = 0 )
+       function recentChangesLineNew( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0 , $diffid = 0 )
+
+       function tocIndent($level) {
+       function tocUnindent($level) {
+       function tocLine($anchor,$tocline,$level) {
+       function tocTable($toc) {
+       function editSectionScript($section,$head) {
+       function editSectionLink($section) {
+*/
+
+}
+
+class SkinMontparnasse extends SkinSmarty {
+       function initPage() {
+               SkinSmarty::initPage();
+               $this->template = "montparnasse";
+       }
+}
+
+?>
index 1ce22c1..44cff95 100644 (file)
@@ -66,7 +66,7 @@ define("MAG_CURRENTMONTHNAMEGEN", 10);
 );
 
 /* private */ $wgSkinNamesEn = array(
-       "Standard", "Nostalgia", "Cologne Blue"
+       "Standard", "Nostalgia", "Cologne Blue", "Paddington", "Montparnasse"
 );
 
 /* private */ $wgMathNamesEn = array(
diff --git a/stylesheets/montparnasse.css b/stylesheets/montparnasse.css
new file mode 100644 (file)
index 0000000..16b7c4e
--- /dev/null
@@ -0,0 +1,152 @@
+body.encyclopedia { background: white; }
+body.meta    { background: #ffffdd; }
+body {
+       margin: 0px;
+       padding:0px;
+       }
+/* ================= masthead */
+#topbar {
+       background: #6688AA; /* from ColBlue */
+       background: #8ad;       /* light blue */
+       color:white;
+       color:#fff;
+       border:none; /* for NN4 */
+       width:100%;
+       margin: 0px;
+       }
+       
+#topbar h1 {
+       font-size: 160%;
+       margin: 0px;
+       padding:1px 2px;
+       }
+#topbar h1 span {
+       font-size: 65%;
+       }
+#topbar span#alert {
+       color:#f08;
+       font-weight:bold;
+       }
+#topbar div {
+       background: #ddd;               
+       font-size: 90%;
+       color:black;
+       padding:1px;
+}
+#topbar div a {
+       text-decoration:none;
+}
+#topbar div a:hover {
+       text-decoration:underline;
+}
+
+/* ================= article */
+#article {
+       padding:0.5em;
+       margin-left:0.5em;
+       margin-right:15em; /* sidebar margin */
+}
+h1.pagetitle {
+       font-size: 150%;
+       padding-top: 0; margin-top: 0; padding-bottom: 0; margin-bottom: 0; 
+       }
+p.subtitle , p.languages , p.actions {
+       padding: 0em 1em;
+       margin: 0em ; 
+       font-size: 90%;
+       color:#723; 
+       }
+/* ================= sidebar */
+#main {
+       position:relative;
+       /* only needed if sidebar sits below masthead */
+}
+
+#sidebar {
+       position:absolute;
+       top:0px;
+       right:0px;
+       width:11em;
+       padding:0.5em;
+}
+#dummylogo {
+       width:100px;
+       height:100px;
+       background: #ddd;
+       margin:0px auto;
+       font-size:75%;
+       
+}
+#sidebar h2 {
+       margin: 4px 0px 0px;
+       padding: 0px 0.5em;
+       font-size:100%;
+       background: #8ad;
+       color:white;
+       }
+#sidebar div {
+       border: solid 2px #8ad;
+       padding: 0.5em ;
+       margin: 0em ; 
+       font-size: 90%;
+       background: #def;
+}
+#sidebar #search {
+       text-align:center;
+}
+#sidebar #dummylogo {
+       margin:0px auto ;
+       width:100px;
+       height:100px;
+       background: #eee;
+}
+
+/* ================= footer */
+#footer {
+       padding:2px;
+       margin-left:0.5em;
+       margin-right:12em; /* sidebar margin */
+       /* 
+       border-top: solid 2px #8ad;     /* light blue */;
+       
+}
+#footer div {
+       
+       border: solid 2px #8ad;
+       padding: 0.5em ;
+       margin: 0em ; 
+       font-size: 90%;
+       background: #def;
+       
+}
+#footer h2 {
+       margin: 4px 0px 0px;
+       padding: 0px 0.5em;
+       font-size:100%;
+       background: #8ad;
+       color:white;
+}
+#footer #pagestats {
+       margin: 4px 0px 0px;
+       background: #8ad;
+       color:white;
+       font-weight:bold;
+}
+
+/* ================= hacks */  
+       /* Feed these styles only to NS4.... */
+       /*/*/ /*/
+       h1.pagetitle {
+               margin-top: -30px;
+               color:red;
+       }
+       p.actions {
+               margin-top: -20px;
+       }
+       /* Okay, we can let the others back in.... */   
+       
+       
+       
+       
+       
+
diff --git a/stylesheets/paddington.css b/stylesheets/paddington.css
new file mode 100644 (file)
index 0000000..ee456f8
--- /dev/null
@@ -0,0 +1,122 @@
+body.encyclopedia { background: white }
+body.meta    { background: #ffffdd }
+body {
+       margin: 0px;
+       padding:0px;
+       }
+form.inline {
+       display: inline; 
+       }
+       
+/* borders */
+/*
+#topbar h1, #topbar div.navbox {
+       border-bottom:solid grey 1px;    
+}
+*/     
+       
+/* ********************************** TOPBAR */
+#topbar {
+       border-bottom: solid 1px black;
+       
+}
+/* common to all 3 topbar blocks */
+#topbar h1, #topbar div.navbox {
+       /*
+       background-color: #eef;
+       background-color: #f8f8f8;
+       */
+       padding: 0px 4px;
+       margin: 0px;
+       /*
+       border-bottom:solid white 2px;   
+       border-bottom:solid grey 1px;    
+       */
+       }
+#topbar h1 {
+       font-size: 2.2em;
+       }       
+#topbar h1 span {
+       font-size: 0.6em;
+       color:#aaa;
+       }       
+div.navbox {
+       font-size:0.9em;
+       }
+#topbar div#navboxsubtitle {
+       }
+#topbar div#sitelinks {
+       padding-bottom: 2px;
+}
+       
+div.spacer {
+       clear:both;
+}
+
+div.row span.left {
+  float: left;
+  text-align: left;
+  width: 49%;
+  }
+
+div.row span.right {
+  float: right;
+  text-align: right;
+  width: 49%;
+  }
+
+/* ********************************* CONTENT */        
+#content { 
+       top: 0px;  
+       margin: 0px; 
+       /*
+       padding: 0px 5px 0px ; 
+       position:relative;
+       */
+       }
+h1.pagetitle {
+       padding-top: 0; margin-top: 0; padding-bottom: 0; margin-bottom: 0; 
+       font-size: 2em;
+       
+       }
+p.subtitle , p.languages , p.actions {
+       padding: 0em 1em;
+       margin: 0em ; 
+       font-size: 0.9em;
+       color:#723; 
+       }
+p.languages {
+       font-style: italic;
+       }
+       
+#article {
+       padding: 0px 4px;
+}
+
+/* ********************************* quickbar */       
+#quickbar-left , #quickbar-right { 
+       position: absolute; 
+       top: 0px; 
+       bottom:0px;
+       width: 148px; 
+       padding: 0px; 
+       visibility: visible;
+       z-index: 99; 
+       }
+#quickbar-left { 
+       left: 0px; 
+       border-right:1px solid black;
+       }
+#quickbar-right { 
+       right: 0px; 
+       border-left:1px solid black;
+       }
+.quickbarsection {
+       padding: 6px;
+       border-bottom:1px solid black;
+}
+/* ********************************** QUICKBAR DEPENDENCIES */
+#content { 
+       margin-left: 148px; 
+       }
+
diff --git a/templates/montparnasse.tpl b/templates/montparnasse.tpl
new file mode 100644 (file)
index 0000000..4ebf95b
--- /dev/null
@@ -0,0 +1,112 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="{$lang}">
+<head><title>{$title|escape:"html"}</title>
+<meta http-equiv="Content-type" content="text/html; charset={$charset}">
+<meta name="robots" content="{$robots}">
+{if $favicon}<link rel="shortcut icon" href="{$favicon}">{/if}
+<link rel="stylesheet" href="{$stylepath}/montparnasse.css">
+</head>
+
+<body class="encyclopedia">
+<div id="content">
+
+<!-- ************************************* topbar -->
+<div id="topbar">
+<h1 class="sitename">{wikimsg key="sitetitle"}<span> - {wikimsg key="sitesubtitle"} - {$langname}</span></h1>
+
+<div>{wikilink keypage="mainpage"} -
+       {wikilink special="Recentchanges"} -
+       {wikilink special="Randompage"} -
+       {wikilink keypage="currentevents"} -
+       {if $loggedin}{wikilink special="Userlogout"}{else}{wikilink special="Userlogin"}{/if}
+       {if $newtalk}- <span id="alert">{$newtalk}</span>{/if}</div>
+</div>
+
+<!-- ************************************* article  -->
+<div id="main">
+<div id="article">
+<h1 class="pagetitle">{$title|escape:"html"}</h1>
+       <p class="actions">{wikilink name=$thispage printable=true key="printable"}
+       {if $editable}
+       | {wikilink name=$thispage action="edit" key=$editpage}
+       {if $exists}| {wikilink name=$thispage action="history" key="pagehistory"}{/if}
+       {/if}</p>
+
+{$bodytext}
+
+</div id="article">
+
+<div id="sidebar">
+  <div id="search">
+  <div id="dummylogo">logo placeholder</div>
+       {wikimsg key="searchwiki"}
+       <form name="search" class="inline" method="get" action="{$searchaction}">
+       <input type="text" name="search" size="19" value=""><br>
+       <input type=submit name="go" value="{wikimsg key="go"}">&nbsp;<input type="submit" value="{wikimsg key="search"}">
+       </form>
+  </div>
+
+<h2>{wikimsg key="otherlanguages"}</h2>
+
+       <div class="languages">{$otherlanguages}</div>
+
+<h2>{wikimsg key="sitelinks"}</h2>
+<div>
+       {wikilink keypage="mainpage"}<br>
+       {wikilink special="Recentchanges"}<br>
+       {wikilink special="Randompage"}<br>
+       {wikilink keypage="currentevents"}
+</div>
+
+<h2>{wikimsg key="personaltools"}</h2>
+<div>
+{if $loggedin}
+       {wikilink name=$userpage key="myuserpage"}<br>
+       {wikilink name=$userpage talk=true key="mytalkpage"}<br>
+       {wikilink special="Watchlist"}<br>
+       {wikilink special="Contributions" target=$username}
+       {wikilink special="Userlogout"}
+{else}
+       {wikimsg key="notloggedin"}<br>
+       {wikilink special="Userlogin"}
+{/if}
+</div>
+
+
+</div id="sidebar">
+</div id="main">
+
+<div id="footer">
+       <h2>{wikimsg key="searchwiki"}</h2><div>
+               <form name="search" class="inline" method=get action="{$searchaction}">
+               <input type=text name="search" size="19" value="">
+               <input type=submit name="go" value="Go">&nbsp;<input type=submit value="Search">
+               <!-- ** namespace checkboxes here would be nice! -->
+               </form>
+       </div>
+{if $editable}
+       <h2>{wikimsg key="pagetools"}</h2><div>
+               <strong>{wikilink name=$thispage action="edit" key=$editpage}</strong> |
+               {if $loggedin}{wikilink name=$thispage action=$watch key=$watch} |{/if}
+               {wikilink name=$thispage talk=true key=$talkpage} |
+               {if $exists}{wikilink name=$thispage action="history" key="pagehistory"} |{/if}
+               {wikilink special="Whatlinkshere" target=$thispage} |
+               {wikilink special="Recentchangeslinked" target=$thispage} |
+       {if $loggedin && $exists}
+               <br>
+       {if $sysop}
+               {wikilink name=$thispage action="delete" key="deletepage"} |
+               {wikilink name=$thispage action=$protect key=$protect} |
+       {/if}
+               {wikilink special="Movepage" target="$thispage"}
+       {/if}
+       </div>
+{/if}
+<div id="pagestats">
+{$pagestats}
+</div>
+
+</div id="footer">
+</body>
+</html>
diff --git a/templates/paddington.tpl b/templates/paddington.tpl
new file mode 100644 (file)
index 0000000..a21dea0
--- /dev/null
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="{$lang}">
+<head>
+<title>{$title|escape:"html"}</title>
+<meta http-equiv="Content-type" content="text/html; charset={$charset}">
+<meta name="robots" content="{$robots}">
+{if $favicon}<link rel="shortcut icon" href="{$favicon}">{/if}
+<link rel="stylesheet" href="{$stylepath}/paddington.css">
+<script type="text/javascript" src="{$stylepath}/wikibits.js"></script>
+</head>
+
+<body class="encyclopedia">
+<div id="content">
+
+<!-- ************************************* topbar -->
+
+<div id="topbar">
+<h1 class="sitename">{wikimsg key="sitetitle"} <span>{$langname}</span></h1>
+<div class="spacer"></div>
+
+<div class="navbox" id="navboxsubtitle">
+<div class="row" id="searchrow">
+       <span class="left">
+       {wikimsg key="sitesubtitle"}</span>
+       <span class="right">
+       <form name="search" class="inline" method=get action="{$searchurl}">
+       <input type=text name="search" size="19" value="">
+       <input type=submit name="go" value="{wikimsg key="go"}">&nbsp;<input type="submit" value="{wikimsg key="search"}">
+       </form>
+       </span>
+</div><!--searchrow-->
+<div class="spacer"></div>
+</div><!--navboxsubtitle-->
+
+<div class="navbox" id="sitelinks">
+<div class="spacer"></div>
+<div class="row" id="sitelinksrow">
+       <span class="left">
+               {wikilink keypage="mainpage"} |
+               {wikilink special="Recentchanges"} |
+               {wikilink keypage="helppage"}
+       </span>
+       <span class="right">
+       {if $loggedin}
+               {wikilink name=$userpage} ({wikilink name=$userpage talk=true}) |
+               {wikilink special="Userlogout" returnto=$thispage} |
+               {wikilink special="Preferences"}
+       {else}
+               {wikimsg key="notloggedin"} |
+               {wikilink special="Userlogin"}
+       {/if}
+       </span>
+</div>
+       {if $newtalk}<div class="alert">{$newtalk}</div>{/if}
+       <div class="spacer"></div>
+</div><!--sitelinks-->
+
+</div><!-- ************************************* topbar -->
+
+<!-- ************************************* article -->
+<div id="article">
+       <h1 class="pagetitle">{$title|escape:"html"}</h1>
+
+       <p class="subtitle">{$subtitle}</p>
+
+       <p class="actions">{wikilink name=$thispage printable=true key="printable"} |
+       {if $editable}
+       {wikilink name=$title action="edit" key=$editpage}
+       {if $exists} | {wikilink name=$title action="history" key="history"}{/if}
+       {/if}</p>
+
+       <p class="languages">{wikimsg key="otherlanguages"} {$langlist}</p>
+
+
+{$bodytext}
+
+</div><!--article-->
+
+<div id="pagestats">
+{$pagestats}
+</div>
+
+</div><!-- id="content" -->
+
+<!-- ************************************* quickbar -->
+
+<div id="quickbar-left">
+<div class="quickbarsection">
+       {$logo}
+</div>
+<div class="quickbarsection">
+       {wikilink keypage="mainpage"}
+       <br>{wikilink special="Recentchanges"}
+       <br>{wikilink special="Random"}
+       {if $loggedin}<br>{wikilink special="Watchlist"}{/if}
+       <br>{wikilink special="Contributions" target=$username}
+       <br>{wikilink keypage="currentevents"}
+</div>
+{if $editable}<div class="quickbarsection">
+       <strong>{wikilink name=$thispage action="edit" key=$editpage}</strong>
+       {if $loggedin}
+               <br>{wikilink name=$thispage action="watch" key=$watchpage}
+               {if $exists}
+                       <br>{wikilink special="Movepage" target=$thispage}
+                       {if $sysop}
+                               <br>{wikilink name=$thispage action="delete" key="deletepage"}
+                               <br>{wikilink name=$thispage action=$protect key=$protect}
+                       {/if}
+               {/if}
+       {/if}
+       <br>{wikilink name=$thispage talk=true key=$talkpage}
+       {if $exists}<br>{wikilink name=$thispage action="history" key="history"}{/if}
+       <br>{wikilink special="Whatlinkshere" target=$thispage}
+       <br>{wikilink special="Recentchangeslinked" target=$thispage}
+</div>{/if}
+<div class="quickbarsection">
+       {if $loggedin}{wikilink special="Upload"}
+       <br>{/if}{wikilink special="Specialpages"}
+       <br>{wikilink keypage="bugreports"}
+</div>
+</div><!-- end quickbar -->
+
+</body></html>
+