r236 - in trunk/wiki.openmoko.org/space_www_wiki_skins: . chick common common/images common/images/icons disabled modern monobook openmoko simple

roh at daksha.openmoko.org roh at daksha.openmoko.org
Wed May 28 20:51:14 CEST 2008


Author: roh
Date: 2008-05-28 18:51:12 +0000 (Wed, 28 May 2008)
New Revision: 236

Added:
   trunk/wiki.openmoko.org/space_www_wiki_skins/Modern.deps.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/Modern.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajaxsearch.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajaxwatch.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/block.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/diff.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/diff.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/Arr_u.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/Checker-16x16.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_first_25.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_last_25.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_left_25.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_right_25.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_first.svg
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_first_25.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_last_25.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_left.svg
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_left_25.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_right_25.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/icons/fileicon-djvu.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/icons/fileicon-djvu.xcf
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/mediawiki-large.xcf
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/mediawiki-largesquare.xcf
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_down.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_none.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_up.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/spinner.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/oldshared.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/shared.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/audio.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/bullet.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/discussionitem_icon.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/document.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/external.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/file_icon.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/footer-grad.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/link_icon.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/lock_icon.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/mail_icon.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/main.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/news_icon.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/print.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/rtl.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/modern/video.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/audio.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/document.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/video.png
   trunk/wiki.openmoko.org/space_www_wiki_skins/simple/rtl.css
Removed:
   trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.tpl
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/common.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/disabled/HTMLDump.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/htmldump/
Modified:
   trunk/wiki.openmoko.org/space_www_wiki_skins/Chick.deps.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/Chick.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/CologneBlue.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.deps.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/MySkin.deps.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/MySkin.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/Nostalgia.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/OpenMoko.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/Simple.deps.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/Simple.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/Standard.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/chick/main.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/IEFixes.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajax.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/cologneblue.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/commonPrint.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/common_rtl.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/icons/fileicon-ogg.xcf
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/metadata.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/nostalgia.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/preview.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/protect.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/sticky.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/upload.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/wikibits.js
   trunk/wiki.openmoko.org/space_www_wiki_skins/common/wikistandard.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/disabled/MonoBookCBT.php
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/IE60Fixes.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/IE70Fixes.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/KHTMLFixes.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/main.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/rtl.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/user.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/IE60Fixes.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/IE70Fixes.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/KHTMLFixes.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/main.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/rtl.css
   trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/user.gif
   trunk/wiki.openmoko.org/space_www_wiki_skins/simple/main.css
Log:
- major skin update. please test and report errors to roh
  * the old openmoko wiki skin was based on some older version of monobook
  * reworked the skin to the recent version of monobook delivered with mediawiki 1.12


Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/Chick.deps.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/Chick.deps.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/Chick.deps.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -5,6 +5,9 @@
 // changed on a subsequent page view.
 // see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
 
-require_once('includes/SkinTemplate.php');
-require_once('MonoBook.php');
-?>
\ No newline at end of file
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once( dirname( dirname( __FILE__ ) ) . '/includes/SkinTemplate.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/Chick.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/Chick.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/Chick.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -3,20 +3,18 @@
  * See skin.txt
  *
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 
 if( !defined( 'MEDIAWIKI' ) )
 	die( -1 );
 
 /** */
-require_once('MonoBook.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
 
 /**
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class SkinChick extends SkinTemplate {
 	function initPage( &$out ) {
@@ -27,4 +25,4 @@
 	}
 }
 
-?>
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/CologneBlue.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/CologneBlue.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/CologneBlue.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -3,8 +3,7 @@
  * See skin.txt
  *
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 
 if( !defined( 'MEDIAWIKI' ) )
@@ -12,20 +11,21 @@
 
 /**
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class SkinCologneBlue extends Skin {
 
+	private $searchboxes = '';
+	// How many search boxes have we made?  Avoid duplicate id's.
+
 	function getStylesheet() {
-		return "common/cologneblue.css?1";
+		return 'common/cologneblue.css';
 	}
 	function getSkinName() {
 		return "cologneblue";
 	}
 
 	function doBeforeContent() {
-		global $wgOut, $wgTitle;
 
 		$s = "";
 		$qb = $this->qbSetting();
@@ -82,7 +82,7 @@
 		$s .= "<td class='bottom' align='center' valign='top'>";
 
 		$s .= $this->bottomLinks();
-		$s .= "\n<br />" . $this->makeKnownLink( wfMsgForContent( "mainpage" ) ) . " | "
+		$s .= "\n<br />" . $this->makeKnownLinkObj( Title::newMainPage() ) . " | "
 		  . $this->aboutLink() . " | "
 		  . $this->searchForm( wfMsg( "qbfind" ) );
 
@@ -99,7 +99,7 @@
 	}
 
 	function doGetUserStyles() {
-		global $wgOut, $wgStyleSheetPath;
+		global $wgOut;
 		$s = parent::doGetUserStyles();
 		$qb = $this->qbSetting();
 
@@ -136,7 +136,7 @@
 		}
 
 		$s = "" .
-		  $this->makeKnownLink( wfMsgForContent( "mainpage" ), wfMsg( "mainpage" ) )
+		  $this->mainPageLink()
 		  . " | " .
 		  $this->makeKnownLink( wfMsgForContent( "aboutpage" ), wfMsg( "about" ) )
 		  . " | " .
@@ -144,29 +144,19 @@
 		  . " | " .
 		  $this->makeKnownLink( wfMsgForContent( "faqpage" ), wfMsg("faq") )
 		  . " | " .
-		  $this->specialLink( "specialpages" ) . " | ";
+		  $this->specialLink( "specialpages" );
 
+		/* show links to different language variants */
+		$s .= $this->variantLinks();
+		$s .= $this->extensionTabLinks();
+		
+		$s .= " | ";
 		if ( $wgUser->isLoggedIn() ) {
 			$s .=  $this->makeKnownLink( $lo, wfMsg( "logout" ), $q );
 		} else {
 			$s .=  $this->makeKnownLink( $li, wfMsg( "login" ), $q );
 		}
 
-		/* show links to different language variants */
-		global $wgDisableLangConversion;
-		$variants = $wgContLang->getVariants();
-		if( !$wgDisableLangConversion && sizeof( $variants ) > 1 ) {
-			$actstr = '';
-			foreach( $variants as $code ) {
-				$varname = $wgContLang->getVariantname( $code );
-				if( $varname == 'disable' )
-					continue;
-				$s .= ' | <a href="' . $wgTitle->getLocalUrl( 'variant=' . $code ) . '">' . $varname . '</a>';
-			}
-		}
-
-
-
 		return $s;
 	}
 
@@ -262,8 +252,8 @@
 				wfMsg( "mypage" ) )
 			  . $sep . $tl
 			  . $sep . $this->specialLink( "watchlist" )
-			  . $sep . $this->makeKnownLinkObj( Title::makeTitle( NS_SPECIAL, "Contributions" ),
-			  	wfMsg( "mycontris" ), "target=" . wfUrlencode($wgUser->getName() ) )
+			  . $sep . $this->makeKnownLinkObj( SpecialPage::getSafeTitleFor( "Contributions", $wgUser->getName() ),
+			  	wfMsg( "mycontris" ) )
 		  	  . $sep . $this->specialLink( "preferences" )
 		  	  . $sep . $this->specialLink( "userlogout" );
 		} else {
@@ -285,7 +275,7 @@
 		}
 
 		$s .= $sep . $this->makeKnownLinkObj(
-			Title::makeTitle( NS_SPECIAL, 'Specialpages' ),
+			SpecialPage::getTitleFor( 'Specialpages' ),
 			wfMsg( 'moredotdotdot' ) );
 
 		$s .= $sep . "\n</div>\n";
@@ -304,15 +294,19 @@
 
 		$search = $wgRequest->getText( 'search' );
 		$action = $this->escapeSearchLink();
-		$s = "<form id=\"search\" method=\"get\" class=\"inline\" action=\"$action\">";
+		$s = "<form id=\"searchform{$this->searchboxes}\" method=\"get\" class=\"inline\" action=\"$action\">";
 		if ( "" != $label ) { $s .= "{$label}: "; }
 
-		$s .= "<input type='text' name=\"search\" size='14' value=\""
-		  . htmlspecialchars(substr($search,0,256)) . "\" />"
-		  . "<br /><input type='submit' name=\"go\" value=\"" . htmlspecialchars( wfMsg( "go" ) ) . "\" /> <input type='submit' name=\"fulltext\" value=\"" . htmlspecialchars( wfMsg( "search" ) ) . "\" /></form>";
+		$s .= "<input type='text' id=\"searchInput{$this->searchboxes}\" class=\"mw-searchInput\" name=\"search\" size=\"14\" value=\""
+		  . htmlspecialchars(substr($search,0,256)) . "\" /><br />"
+		  . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . htmlspecialchars( wfMsg( "searcharticle" ) ) . "\" />"
+		  . "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . htmlspecialchars( wfMsg( "search" ) ) . "\" /></form>";
 
+		// Ensure unique id's for search boxes made after the first
+		$this->searchboxes = $this->searchboxes == '' ? 2 : $this->searchboxes + 1;
+
 		return $s;
 	}
 }
 
-?>
+

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/Modern.deps.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/Modern.deps.php	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/Modern.deps.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,13 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// Simple.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once( dirname( dirname( __FILE__ ) ) . '/includes/SkinTemplate.php');
+require_once( dirname(__FILE__) . '/Modern.php' );
+

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/Modern.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/Modern.php	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/Modern.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,293 @@
+<?php
+/**
+ * Modern skin, derived from monobook template.
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinModern extends SkinTemplate {
+	function initPage( &$out ) {
+		SkinTemplate::initPage( $out );
+		$this->skinname  = 'modern';
+		$this->stylename = 'modern';
+		$this->template  = 'ModernTemplate';
+	}
+}
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class ModernTemplate extends QuickTemplate {
+	/**
+	 * Template filter callback for Modern skin.
+	 * 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.
+	 *
+	 * @access private
+	 */
+	function execute() {
+		global $wgUser;
+		$skin = $wgUser->getSkin();
+
+		// Suppress warnings to prevent notices about missing indexes in $this->data
+		wfSuppressWarnings();
+
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="<?php $this->text('xhtmldefaultnamespace') ?>" <?php 
+	foreach($this->data['xhtmlnamespaces'] as $tag => $ns) {
+		?>xmlns:<?php echo "{$tag}=\"{$ns}\" ";
+	} ?>xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+	<head>
+		<meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
+		<?php $this->html('headlinks') ?>
+		<title><?php $this->text('pagetitle') ?></title>
+		<style type="text/css" media="screen, projection">/*<![CDATA[*/
+			@import "<?php $this->text('stylepath') ?>/common/shared.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
+			@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
+		/*]]>*/</style>
+		<link rel="stylesheet" type="text/css" <?php if(empty($this->data['printable']) ) { ?>media="print"<?php } ?> href="<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/print.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" />
+		<!--[if lt IE 7]><meta http-equiv="imagetoolbar" content="no" /><![endif]-->
+		
+		<?php print Skin::makeGlobalVariablesScript( $this->data ); ?>
+                
+		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"><!-- wikibits js --></script>
+		<!-- Head Scripts -->
+<?php $this->html('headscripts') ?>
+<?php	if($this->data['jsvarurl'  ]) { ?>
+		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"><!-- site js --></script>
+<?php	} ?>
+<?php	if($this->data['pagecss'   ]) { ?>
+		<style type="text/css"><?php $this->html('pagecss'   ) ?></style>
+<?php	}
+		if($this->data['usercss'   ]) { ?>
+		<style type="text/css"><?php $this->html('usercss'   ) ?></style>
+<?php	}
+		if($this->data['userjs'    ]) { ?>
+		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('userjs' ) ?>"></script>
+<?php	}
+		if($this->data['userjsprev']) { ?>
+		<script type="<?php $this->text('jsmimetype') ?>"><?php $this->html('userjsprev') ?></script>
+<?php	}
+		if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>
+	</head>
+<body<?php if($this->data['body_ondblclick']) { ?> ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
+<?php if($this->data['body_onload'    ]) { ?> onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
+ class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
+
+	<!-- heading -->
+	<div id="mw_header">
+		<h1 id="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>
+	</div>
+
+	<div id="mw_main">
+	<div id="mw_contentwrapper">
+	<!-- navigation portlet -->
+	<div id="p-cactions" class="portlet">
+		<h5><?php $this->msg('views') ?></h5>
+		<div class="pBody">
+			<ul>
+	<?php			foreach($this->data['content_actions'] as $key => $tab) { ?>
+				 <li id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+					 	if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
+					 ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>><?php
+					 echo htmlspecialchars($tab['text']) ?></a></li>
+	<?php			 } ?>
+			</ul>
+		</div>
+	</div>
+
+	<!-- content -->
+	<div id="mw_content">
+	<!-- contentholder does nothing by default, but it allows users to style the text inside
+	     the content area without affecting the meaning of 'em' in #mw_content, which is used
+	     for the margins -->
+	<div id="mw_contentholder">
+		<div class='mw-topboxes'>
+			<div class="mw-topbox" id="siteSub"><?php $this->msg('tagline') ?></div>
+			<?php if($this->data['newtalk'] ) {
+				?><div class="usermessage mw-topbox"><?php $this->html('newtalk')  ?></div>
+			<?php } ?>
+			<?php if($this->data['sitenotice']) {
+				?><div class="mw-topbox" id="siteNotice"><?php $this->html('sitenotice') ?></div>
+			<?php } ?>
+		</div>
+
+		<div id="contentSub"><?php $this->html('subtitle') ?></div>
+
+		<?php if($this->data['undelete']) { ?><div id="contentSub2"><?php     $this->html('undelete') ?></div><?php } ?>
+		<?php if($this->data['showjumplinks']) { ?><div id="jump-to-nav"><?php $this->msg('jumpto') ?> <a href="#column-one"><?php $this->msg('jumptonavigation') ?></a>, <a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div><?php } ?>
+
+		<?php $this->html('bodytext') ?>
+		<div class='mw_clear'></div>
+		<?php if($this->data['catlinks']) { ?><div id="catlinks"><?php       $this->html('catlinks') ?></div><?php } ?>
+	</div><!-- mw_contentholder -->
+	</div><!-- mw_content -->
+	</div><!-- mw_contentwrapper -->
+
+	<div id="mw_portlets">
+
+	<!-- other portlets -->
+	<?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
+	<div class='portlet' id='p-<?php echo Sanitizer::escapeId($bar) ?>'<?php echo $skin->tooltip('p-'.$bar) ?>>
+		<h5><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo $bar; else echo $out; ?></h5>
+		<div class='pBody'>
+			<ul>
+<?php 			foreach($cont as $key => $val) { ?>
+				<li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
+					if ( $val['active'] ) { ?> class="active" <?php }
+				?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li>
+<?php			} ?>
+			</ul>
+		</div><!-- pBody -->
+	</div><!-- portlet -->
+	<?php } ?>
+
+	<!-- search -->
+	<div id="p-search" class="portlet">
+		<h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
+		<div id="searchBody" class="pBody">
+			<form action="<?php $this->text('searchaction') ?>" id="searchform"><div>
+				<input id="searchInput" name="search" type="text"<?php echo $skin->tooltipAndAccesskey('search');
+					if( isset( $this->data['search'] ) ) {
+						?> value="<?php $this->text('search') ?>"<?php } ?> />
+				<input type='submit' name="go" class="searchButton" id="searchGoButton"	value="<?php $this->msg('searcharticle') ?>"<?php echo $skin->tooltipAndAccesskey( 'search-go' ); ?> />&nbsp;
+				<input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>"<?php echo $skin->tooltipAndAccesskey( 'search-fulltext' ); ?> />
+			</div></form>
+		</div><!-- pBody -->
+	</div><!-- portlet -->
+
+	<!-- toolbox -->
+	<div class="portlet" id="p-tb">
+		<h5><?php $this->msg('toolbox') ?></h5>
+		<div class="pBody">
+			<ul>
+<?php
+		if($this->data['notspecialpage']) { ?>
+				<li id="t-whatlinkshere"><a href="<?php
+				echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li>
+<?php
+			if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
+				<li id="t-recentchangeslinked"><a href="<?php
+				echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked') ?></a></li>
+<?php 		}
+		}
+		if(isset($this->data['nav_urls']['trackbacklink'])) { ?>
+			<li id="t-trackbacklink"><a href="<?php
+				echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li>
+<?php 	}
+		if($this->data['feeds']) { ?>
+			<li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
+					?><span id="feed-<?php echo Sanitizer::escapeId($key) ?>"><a href="<?php
+					echo htmlspecialchars($feed['href']) ?>"<?php echo $skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
+					<?php } ?></li><?php
+		}
+
+		foreach( array('contributions', 'log', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
+
+			if($this->data['nav_urls'][$special]) {
+				?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
+<?php		}
+		}
+
+		if(!empty($this->data['nav_urls']['print']['href'])) { ?>
+				<li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php
+		}
+
+		if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
+				<li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
+		} elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
+				<li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
+		}
+?>
+			</ul>
+		</div><!-- pBody -->
+	</div><!-- portlet -->
+
+	<!-- languages -->
+<?php
+		if( $this->data['language_urls'] ) { ?>
+	<div id="p-lang" class="portlet">
+		<h5><?php $this->msg('otherlanguages') ?></h5>
+		<div class="pBody">
+			<ul>
+<?php		foreach($this->data['language_urls'] as $langlink) { ?>
+				<li class="<?php echo htmlspecialchars($langlink['class'])?>"><?php
+				?><a href="<?php echo htmlspecialchars($langlink['href']) ?>"><?php echo $langlink['text'] ?></a></li>
+<?php		} ?>
+			</ul>
+		</div><!-- pBody -->
+	</div><!-- portlet -->
+<?php	} ?>
+
+	</div><!-- mw_portlets -->
+
+
+	</div><!-- main -->
+
+	<div class="mw_clear"></div>
+
+	<!-- personal portlet -->
+	<div class="portlet" id="p-personal">
+		<h5><?php $this->msg('personaltools') ?></h5>
+		<div class="pBody">
+			<ul>
+<?php 			foreach($this->data['personal_urls'] as $key => $item) { ?>
+				<li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
+					if ($item['active']) { ?> class="active"<?php } ?>><a href="<?php
+				echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
+				if(!empty($item['class'])) { ?> class="<?php
+				echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
+				echo htmlspecialchars($item['text']) ?></a></li>
+<?php			} ?>
+			</ul>
+		</div>
+	</div>
+
+
+	<!-- footer --> 
+	<div id="footer">
+			<ul id="f-list">
+<?php
+		$footerlinks = array(
+			'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
+			'privacy', 'about', 'disclaimer', 'tagline',
+		);
+		foreach( $footerlinks as $aLink ) {
+			if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
+?>				<li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
+<?php 		}
+		}
+?>
+			</ul>
+	</div>
+
+	<?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
+<?php $this->html('reporttime') ?>
+<?php if ( $this->data['debug'] ): ?>
+<!-- Debug output:
+<?php $this->text( 'debug' ); ?>
+-->
+<?php endif; ?>
+</body></html>
+<?php
+	wfRestoreWarnings();
+	} // end of execute() method
+} // end of class
+?>

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.deps.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.deps.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.deps.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -5,5 +5,8 @@
 // changed on a subsequent page view.
 // see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
 
-require_once('includes/SkinTemplate.php');
-?>
\ No newline at end of file
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once( dirname( dirname( __FILE__ ) ) . '/includes/SkinTemplate.php');
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -6,21 +6,16 @@
  * dependency on PHPTAL.
  *
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 
 if( !defined( 'MEDIAWIKI' ) )
 	die( -1 );
 
-/** */
-require_once('includes/SkinTemplate.php');
-
 /**
  * Inherit main code from SkinTemplate, set the CSS and template filter.
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class SkinMonoBook extends SkinTemplate {
 	/** Using monobook. */
@@ -34,8 +29,7 @@
 
 /**
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class MonoBookTemplate extends QuickTemplate {
 	/**
@@ -47,25 +41,38 @@
 	 * @access private
 	 */
 	function execute() {
+		global $wgUser;
+		$skin = $wgUser->getSkin();
+
 		// Suppress warnings to prevent notices about missing indexes in $this->data
 		wfSuppressWarnings();
 
 ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+<html xmlns="<?php $this->text('xhtmldefaultnamespace') ?>" <?php 
+	foreach($this->data['xhtmlnamespaces'] as $tag => $ns) {
+		?>xmlns:<?php echo "{$tag}=\"{$ns}\" ";
+	} ?>xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
 	<head>
 		<meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
 		<?php $this->html('headlinks') ?>
 		<title><?php $this->text('pagetitle') ?></title>
-		<style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?7"; /*]]>*/</style>
-		<link rel="stylesheet" type="text/css" <?php if(empty($this->data['printable']) ) { ?>media="print"<?php } ?> href="<?php $this->text('stylepath') ?>/common/commonPrint.css" />
-		<!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css";</style><![endif]-->
-		<!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css";</style><![endif]-->
-		<!--[if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css";</style><![endif]-->
-		<!--[if IE 7]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE70Fixes.css?1";</style><![endif]-->
-		<!--[if lt IE 7]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js"></script>
+		<style type="text/css" media="screen, projection">/*<![CDATA[*/
+			@import "<?php $this->text('stylepath') ?>/common/shared.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
+			@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
+		/*]]>*/</style>
+		<link rel="stylesheet" type="text/css" <?php if(empty($this->data['printable']) ) { ?>media="print"<?php } ?> href="<?php $this->text('stylepath') ?>/common/commonPrint.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" />
+		<!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 7]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE70Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if lt IE 7]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"></script>
 		<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
-		<script type="<?php $this->text('jsmimetype') ?>">var skin = '<?php $this->text('skinname')?>';var stylepath = '<?php $this->text('stylepath')?>';</script>
-		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js"><!-- wikibits js --></script>
+		
+		<?php print Skin::makeGlobalVariablesScript( $this->data ); ?>
+                
+		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"><!-- wikibits js --></script>
+		<!-- Head Scripts -->
+<?php $this->html('headscripts') ?>
 <?php	if($this->data['jsvarurl'  ]) { ?>
 		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"><!-- site js --></script>
 <?php	} ?>
@@ -82,18 +89,16 @@
 		<script type="<?php $this->text('jsmimetype') ?>"><?php $this->html('userjsprev') ?></script>
 <?php	}
 		if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>
-		<!-- Head Scripts -->
-		<?php $this->html('headscripts') ?>
 	</head>
-<body <?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
-<?php if($this->data['body_onload'    ]) { ?>onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
- class="<?php $this->text('nsclass') ?> <?php $this->text('dir') ?>">
+<body<?php if($this->data['body_ondblclick']) { ?> ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
+<?php if($this->data['body_onload'    ]) { ?> onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
+ class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
 	<div id="globalWrapper">
 		<div id="column-content">
 	<div id="content">
 		<a name="top" id="top"></a>
 		<?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
-		<h1 class="firstHeading"><?php $this->text('title') ?></h1>
+		<h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>
 		<div id="bodyContent">
 			<h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
 			<div id="contentSub"><?php $this->html('subtitle') ?></div>
@@ -111,23 +116,25 @@
 		<div id="column-one">
 	<div id="p-cactions" class="portlet">
 		<h5><?php $this->msg('views') ?></h5>
-		<ul>
-<?php			foreach($this->data['content_actions'] as $key => $tab) { ?>
-				 <li id="ca-<?php echo htmlspecialchars($key) ?>"<?php
-				 	if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
-				 ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"><?php
-				 echo htmlspecialchars($tab['text']) ?></a></li>
-<?php			 } ?>
-		</ul>
+		<div class="pBody">
+			<ul>
+	<?php			foreach($this->data['content_actions'] as $key => $tab) { ?>
+				 <li id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+					 	if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
+					 ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>><?php
+					 echo htmlspecialchars($tab['text']) ?></a></li>
+	<?php			 } ?>
+			</ul>
+		</div>
 	</div>
 	<div class="portlet" id="p-personal">
 		<h5><?php $this->msg('personaltools') ?></h5>
 		<div class="pBody">
 			<ul>
 <?php 			foreach($this->data['personal_urls'] as $key => $item) { ?>
-				<li id="pt-<?php echo htmlspecialchars($key) ?>"<?php
+				<li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
 					if ($item['active']) { ?> class="active"<?php } ?>><a href="<?php
-				echo htmlspecialchars($item['href']) ?>"<?php
+				echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
 				if(!empty($item['class'])) { ?> class="<?php
 				echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
 				echo htmlspecialchars($item['text']) ?></a></li>
@@ -137,19 +144,19 @@
 	</div>
 	<div class="portlet" id="p-logo">
 		<a style="background-image: url(<?php $this->text('logopath') ?>);" <?php
-			?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>" <?php
-			?>title="<?php $this->msg('mainpage') ?>"></a>
+			?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"<?php
+			echo $skin->tooltipAndAccesskey('n-mainpage') ?>></a>
 	</div>
 	<script type="<?php $this->text('jsmimetype') ?>"> if (window.isMSIE55) fixalpha(); </script>
 	<?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
-	<div class='portlet' id='p-<?php echo htmlspecialchars($bar) ?>'>
+	<div class='portlet' id='p-<?php echo Sanitizer::escapeId($bar) ?>'<?php echo $skin->tooltip('p-'.$bar) ?>>
 		<h5><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo $bar; else echo $out; ?></h5>
 		<div class='pBody'>
 			<ul>
 <?php 			foreach($cont as $key => $val) { ?>
-				<li id="<?php echo htmlspecialchars($val['id']) ?>"<?php
+				<li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
 					if ( $val['active'] ) { ?> class="active" <?php }
-				?>><a href="<?php echo htmlspecialchars($val['href']) ?>"><?php echo htmlspecialchars($val['text']) ?></a></li>
+				?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li>
 <?php			} ?>
 			</ul>
 		</div>
@@ -159,13 +166,11 @@
 		<h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
 		<div id="searchBody" class="pBody">
 			<form action="<?php $this->text('searchaction') ?>" id="searchform"><div>
-				<input id="searchInput" name="search" type="text" <?php
-					if($this->haveMsg('accesskey-search')) {
-						?>accesskey="<?php $this->msg('accesskey-search') ?>"<?php }
+				<input id="searchInput" name="search" type="text"<?php echo $skin->tooltipAndAccesskey('search');
 					if( isset( $this->data['search'] ) ) {
 						?> value="<?php $this->text('search') ?>"<?php } ?> />
-				<input type='submit' name="go" class="searchButton" id="searchGoButton"	value="<?php $this->msg('go') ?>" />&nbsp;
-				<input type='submit' name="fulltext" class="searchButton" value="<?php $this->msg('search') ?>" />
+				<input type='submit' name="go" class="searchButton" id="searchGoButton"	value="<?php $this->msg('searcharticle') ?>"<?php echo $skin->tooltipAndAccesskey( 'search-go' ); ?> />&nbsp;
+				<input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>"<?php echo $skin->tooltipAndAccesskey( 'search-fulltext' ); ?> />
 			</div></form>
 		</div>
 	</div>
@@ -177,44 +182,44 @@
 		if($this->data['notspecialpage']) { ?>
 				<li id="t-whatlinkshere"><a href="<?php
 				echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
-				?>"><?php $this->msg('whatlinkshere') ?></a></li>
+				?>"<?php echo $skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li>
 <?php
 			if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
 				<li id="t-recentchangeslinked"><a href="<?php
 				echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
-				?>"><?php $this->msg('recentchangeslinked') ?></a></li>
+				?>"<?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked') ?></a></li>
 <?php 		}
 		}
 		if(isset($this->data['nav_urls']['trackbacklink'])) { ?>
 			<li id="t-trackbacklink"><a href="<?php
 				echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
-				?>"><?php $this->msg('trackbacklink') ?></a></li>
+				?>"<?php echo $skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li>
 <?php 	}
 		if($this->data['feeds']) { ?>
 			<li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
-					?><span id="feed-<?php echo htmlspecialchars($key) ?>"><a href="<?php
-					echo htmlspecialchars($feed['href']) ?>"><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
+					?><span id="feed-<?php echo Sanitizer::escapeId($key) ?>"><a href="<?php
+					echo htmlspecialchars($feed['href']) ?>"<?php echo $skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
 					<?php } ?></li><?php
 		}
 
-		foreach( array('contributions', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
+		foreach( array('contributions', 'log', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
 
 			if($this->data['nav_urls'][$special]) {
 				?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
-				?>"><?php $this->msg($special) ?></a></li>
+				?>"<?php echo $skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
 <?php		}
 		}
 
 		if(!empty($this->data['nav_urls']['print']['href'])) { ?>
 				<li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
-				?>"><?php $this->msg('printableversion') ?></a></li><?php
+				?>"<?php echo $skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php
 		}
 
 		if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
 				<li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
-				?>"><?php $this->msg('permalink') ?></a></li><?php
+				?>"<?php echo $skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
 		} elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
-				<li id="t-ispermalink"><?php $this->msg('permalink') ?></li><?php
+				<li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
 		}
 
 		wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
@@ -256,17 +261,23 @@
 			'privacy', 'about', 'disclaimer', 'tagline',
 		);
 		foreach( $footerlinks as $aLink ) {
-			if( $this->data[$aLink] ) {
+			if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
 ?>				<li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
 <?php 		}
 		}
 ?>
 			</ul>
 		</div>
-	<script type="text/javascript"> if (window.runOnloadHook) runOnloadHook();</script>
+		
+	<?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
 </div>
 <?php $this->html('reporttime') ?>
+<?php if ( $this->data['debug'] ): ?>
+<!-- Debug output:
+<?php $this->text( 'debug' ); ?>
 
+-->
+<?php endif; ?>
 </body></html>
 <?php
 	wfRestoreWarnings();

Deleted: trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.tpl
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.tpl	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/MonoBook.tpl	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,199 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{lang}" lang="{lang}" dir="{dir}">
-<head>
-	<meta http-equiv="Content-Type" content="{~ mimetype}; charset={~ charset}" />
-	{headlinks}
-	{headscripts}
-	<title>{pagetitle}</title>
-	<style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "{~ stylepath}/{~ stylename}/main.css?5"; /*]]>*/</style>
-	<link rel="stylesheet" type="text/css" {if notprintable {media="print"}} href="{~ stylepath}/common/commonPrint.css" />
-	<!--[if lt IE 5.5000]><style type="text/css">@import "{~ stylepath}/{~ stylename}/IE50Fixes.css";</style><![endif]-->
-	<!--[if IE 5.5000]><style type="text/css">@import "{~ stylepath}/{~ stylename}/IE55Fixes.css";</style><![endif]-->
-	<!--[if IE 6]><style type="text/css">@import "{~ stylepath}/{~ stylename}/IE60Fixes.css";</style><![endif]-->
-	<!--[if IE 7]><style type="text/css">@import "{~ stylepath}/{~ stylename}/IE70Fixes.css?1";</style><![endif]-->
-	<!--[if lt IE 7]><script type="{jsmimetype}" src="{~ stylepath}/common/IEFixes.js"></script>
-	<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
-	<script type="{jsmimetype}" src="{~ stylepath}/common/wikibits.js"><!-- wikibits js --></script>
-	{if jsvarurl {<script type="{jsmimetype}" src="{jsvarurl}"><!-- site js --></script>}}
-	{if pagecss {<style type="text/css">{pagecss}</style>}}
-	{usercss}
-	{sitecss}
-	{gencss}
-	{if userjs {<script type="{jsmimetype}" src="{userjs}"></script>}}
-	{if userjsprev {<script type="{jsmimetype}">{userjsprev}</script>}}
-	{trackbackhtml}
-</head>
-<body {if body_ondblclick {ondblclick="{body_ondblclick}"}} {if body_onload {onload="{body_onload}" }} class="{~ nsclass} {~ dir}">
-<div id="globalWrapper">
-	<div id="column-content">
-		<div id="content">
-			<a name="top" id="top"></a>
-			{if sitenotice {<div id="siteNotice">{sitenotice}</div> }}
-			<h1 class="firstHeading">{title}</h1>
-			<div id="bodyContent">
-				<h3 id="siteSub">{msg {tagline}}</h3>
-				<div id="contentSub">{subtitle}</div>
-				{if undelete {<div id="contentSub2"><span class="subpages">{undelete}</span></div> }}
-				{if newtalk {<div class="usermessage">{newtalk}</div> }}
-				{if showjumplinks {
-					<div id="jump-to-nav">{msg {jumpto}} <a href="#column-one">{msg {jumptonavigation}}</a>, 
-					<a href="#searchInput">{msg {jumptosearch}}</a></div> 
-				}}
-				<!-- start content -->
-				{bodytext}
-				{if catlinks {<div id="catlinks">{catlinks}</div> }}
-				<!-- end content -->
-				<div class="visualClear"></div>
-			</div>
-		</div>
-	</div>
-	<div id="column-one">
-		<div id="p-cactions" class="portlet">
-			<h5>{msg {views}}</h5>
-			<ul>
-				{if is_special {
-					<li id="ca-article" class="selected"><a href="{request_url}">{msg {specialpage}}</a></li>
-				} {
-					<li id="ca-{nskey}" {selecttab {subject} subject_newclass}><a href="{subject_url}">{msg nskey}</a></li>
-					<li id="ca-talk" {selecttab {talk} talk_newclass}><a href="{talk_url}">{msg {talk}}</a></li>
-					{if can_edit {
-						{if is_talk {
-							<li id="ca-edit" {selecttab {edit} {istalk}}><a href="{edit_url}">{msg {edit}}</a></li>
-							<li id="ca-addsection" {selecttab {addsection}}><a href="{localurl {action=edit&section=new}}">{msg {addsection}}</a></li>
-						} {
-							<li id="ca-edit" {selecttab {edit}}><a href="{edit_url}">{msg {edit}}</a></li>
-						}}
-					} {
-						<li id="ca-viewsource" {selecttab {edit}}><a href="{edit_url}">{msg {viewsource}}</a></li>
-					}}
-
-					{if article_exists {
-						<li id="ca-history" {selecttab {history}}><a href="{localurl {action=history}}">{msg {history_short}}</a></li>
-						{if {{ is_allowed {protect} }} {
-							{if is_ns_mediawiki {} {
-								{if is_protected {
-									<li id="ca-protect" {selecttab {protect}}><a href="{localurl {action=unprotect}}">{msg {unprotect}}</a></li>
-								} {
-									<li id="ca-protect" {selecttab {protect}}><a href="{localurl {action=protect}}">{msg {protect}}</a></li>
-								}}
-							}}
-						}}
-						
-						{if {{ is_allowed {delete} }} {
-								<li id="ca-delete" {selecttab {delete}}><a href="{localurl {action=delete}}">{msg {delete}}</a></li>
-						}}
-						{if {{ is_allowed {move} }} {
-							{if can_move {
-									<li id="ca-move" {selecttab {move}}><a href="{move_url}">{msg {move}}</a></li>
-							}}
-						}}
-						{if is_loggedin {
-							{if is_watching {
-								<li id="ca-unwatch" {selecttab {watch}}><a href="{localurl {action=unwatch}}">{msg {unwatch}}</a></li>
-							} {
-								<li id="ca-watch" {selecttab {watch}}><a href="{localurl {action=watch}}">{msg {watch}}</a></li>
-							}}
-						}}
-					}}
-				}}
-				{extratabs {<li id="ca-$id" $class><a href="$href">$text</a></li>}}
-			</ul>
-		</div>
-		<div class="portlet" id="p-personal">
-			<h5>{msg {personaltools}}</h5>
-			<div class="pBody">
-				<ul>						
-					{personal_urls { <li id="pt-$key" $classactive ><a href="$href" $class>$text</a></li> }}
-				</ul>
-			</div>
-		</div>
-		<div class="portlet" id="p-logo">
-			<a style="background-image: url({~ logopath});" href="{mainpage}" title="{msg {mainpage}}"></a>
-		</div>
-		<script type="{jsmimetype}"> if (window.isMSIE55) fixalpha(); </script>
-		{sidebar {
-			<div class='portlet' id="p-$bar">
-				<h5>$barname</h5>
-				<div class='pBody'>
-				<ul>
-		} {
-				</ul>
-				</div>
-			</div>
-		} {<li id="$id" $classactive><a href="$href">$text</a></li>
-			}
-		}
-
-		<div id="p-search" class="portlet">
-			<h5><label for="searchInput">{msg {search}}</label></h5>
-			<div id="searchBody" class="pBody">
-				<form action="{searchaction}" id="searchform"><div>
-					<input id="searchInput" name="search" type="text" {
-						}{if {{fallbackmsg {accesskey-search} {} }} {accesskey="{fallbackmsg {accesskey-search} {} }"}}{
-						}{if search { value="{search}"}} />
-					<input type='submit' name="go" class="searchButton" id="searchGoButton"	value="{msg {go}}" />&nbsp;
-					<input type='submit' name="fulltext" class="searchButton" value="{msg {search}}" />
-				</div></form>
-			</div>
-		</div>
-		<div class="portlet" id="p-tb">
-			<h5>{msg {toolbox}}</h5>
-			<div class="pBody">
-				<ul>
-					{if notspecialpage    {<li id="t-whatlinkshere"><a href="{nav_whatlinkshere}">{msg {whatlinkshere}}</a></li> }}
-					{if article_exists {<li id="t-recentchangeslinked"><a href="{nav_recentchangeslinked}">{msg {recentchangeslinked}}</a></li> }}
-					{if nav_trackbacklink {<li id="t-trackbacklink"><a href="{nav_trackbacklink}">{msg {trackbacklink}}</a></li>}}
-					{if feeds
-						{<li id="feedlinks">{feeds {<span id="feed-$key"><a href="$href">$text</a>&nbsp;</span>}}
-					</li>}}
-					{if is_userpage {
-						<li id="t-contributions"><a href="{nav_contributions}">{msg {contributions}}</a></li>
-						{if {{is_allowed {block}}} {<li id="t-blockip"><a href="{nav_blockip}">{msg {blockip}}</a></li>}}
-						{if is_loggedin     {<li id="t-emailuser"><a href="{nav_emailuser}">{msg {emailuser}}</a></li>}}
-					}}
-					{if nav_upload        {<li id="t-upload"><a href="{nav_upload}">{msg {upload}}</a></li>}}
-					{if nav_specialpages  {<li id="t-specialpages"><a href="{nav_specialpages}">{msg {specialpages}}</a></li>}}
-					{if nav_print         {<li id="t-print"><a href="{nav_print}">{msg {printableversion}}</a></li>}}
-					{if nav_permalink     {<li id="t-permalink"><a href="{nav_permalink}">{msg {permalink}}</a></li>}}
-					{if is_permalink      {<li id="t-ispermalink">{msg {permalink}}</li>}}
-
-					{toolboxend}
-				</ul>
-			</div>
-		</div>
-		{language_urls {
-			<div id="p-lang" class="portlet">
-				<h5>{msg {otherlanguages}}</h5>
-				<div class="pBody">
-					<ul>
-						$body
-					</ul>
-				</div>
-			</div>
-		} {
-			<li class="$class"><a href="$href">$text</a></li>
-		}}	
-	</div><!-- end of the left (by default at least) column -->
-	<div class="visualClear"></div>
-	<div id="footer">
-		{if poweredbyico { <div id="f-poweredbyico">{poweredbyico}</div> }}
-		{if copyrightico { <div id="f-copyrightico">{copyrightico}</div> }}
-
-		<ul id="f-list">
-			{if lastmod                {  <li id="lastmod">{lastmod}</li> }}
-			{if viewcount              {  <li id="viewcount">{viewcount}</li> }}
-			{if numberofwatchingusers  {  <li id="numberofwatchingusers">{numberofwatchingusers}</li> }}
-			{if credits                {  <li id="credits">{credits}</li> }}
-			{if is_currentview         {  <li id="copyright">{normalcopyright}</li> }}
-			{if usehistorycopyright    {  <li id="copyright">{historycopyright}</li> }}
-			{if privacy                {  <li id="privacy">{privacy}</li> }}
-			{if about                  {  <li id="about">{about}</li> }}
-			{if disclaimer             {  <li id="disclaimer">{disclaimer}</li> }}
-			{if tagline                {  <li id="tagline">{tagline}</li> }}
-		</ul>
-	</div>
-	<script type="text/javascript"> if (window.runOnloadHook) runOnloadHook();</script>
-</div>
-{reporttime}
-{if {} { vim: set syn=html ts=2 : }}
-</body></html>

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/MySkin.deps.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/MySkin.deps.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/MySkin.deps.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -5,6 +5,9 @@
 // changed on a subsequent page view.
 // see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
 
-require_once('includes/SkinTemplate.php');
-require_once('MonoBook.php');
-?>
\ No newline at end of file
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once( dirname( dirname( __FILE__ ) ) . '/includes/SkinTemplate.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/MySkin.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/MySkin.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/MySkin.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -3,20 +3,18 @@
  * See skin.txt
  *
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 
 if( !defined( 'MEDIAWIKI' ) )
 	die( -1 );
 
 /** */
-require_once('MonoBook.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
 
 /**
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class SkinMySkin extends SkinTemplate {
 	function initPage( &$out ) {
@@ -27,4 +25,4 @@
 	}
 }
 
-?>
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/Nostalgia.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/Nostalgia.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/Nostalgia.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -3,8 +3,7 @@
  * See skin.txt
  *
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 
 if( !defined( 'MEDIAWIKI' ) )
@@ -12,20 +11,18 @@
 
 /**
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class SkinNostalgia extends Skin {
 
 	function getStylesheet() {
-		return 'common/nostalgia.css?1';
+		return 'common/nostalgia.css';
 	}
 	function getSkinName() {
 		return "nostalgia";
 	}
 
 	function doBeforeContent() {
-		global $wgUser, $wgOut, $wgTitle;
 
 		$s = "\n<div id='content'>\n<div id='topbar'>";
 		$s .= $this->logoText( "right" );
@@ -64,11 +61,17 @@
 			$s .=  $sep . $this->editThisPage()
 			  . $sep . $this->historyLink();
 		}
+		
+		/* show links to different language variants */
+		$s .= $this->variantLinks();
+		$s .= $this->extensionTabLinks();
+		
 		if ( $wgUser->isAnon() ) {
 			$s .= $sep . $this->specialLink( "userlogin" );
 		} else {
 			$s .= $sep . $this->specialLink( "userlogout" );
 		}
+		
 		$s .= $sep . $this->specialPagesList();
 
 		return $s;
@@ -91,4 +94,4 @@
 	}
 }
 
-?>
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/OpenMoko.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/OpenMoko.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/OpenMoko.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -6,21 +6,16 @@
  * dependency on PHPTAL.
  *
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 
 if( !defined( 'MEDIAWIKI' ) )
 	die( -1 );
 
-/** */
-require_once('includes/SkinTemplate.php');
-
 /**
  * Inherit main code from SkinTemplate, set the CSS and template filter.
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class SkinOpenMoko extends SkinTemplate {
 	/** Using openmoko. */
@@ -34,8 +29,7 @@
 
 /**
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class OpenMokoTemplate extends QuickTemplate {
 	/**
@@ -47,25 +41,38 @@
 	 * @access private
 	 */
 	function execute() {
+		global $wgUser;
+		$skin = $wgUser->getSkin();
+
 		// Suppress warnings to prevent notices about missing indexes in $this->data
 		wfSuppressWarnings();
 
 ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+<html xmlns="<?php $this->text('xhtmldefaultnamespace') ?>" <?php 
+	foreach($this->data['xhtmlnamespaces'] as $tag => $ns) {
+		?>xmlns:<?php echo "{$tag}=\"{$ns}\" ";
+	} ?>xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
 	<head>
 		<meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
 		<?php $this->html('headlinks') ?>
 		<title><?php $this->text('pagetitle') ?></title>
-		<style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?7"; /*]]>*/</style>
-		
-		<!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css";</style><![endif]-->
-		<!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css";</style><![endif]-->
-		<!--[if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css";</style><![endif]-->
-		<!--[if IE 7]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE70Fixes.css?1";</style><![endif]-->
-		<!--[if lt IE 7]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js"></script>
+		<style type="text/css" media="screen, projection">/*<![CDATA[*/
+			@import "<?php $this->text('stylepath') ?>/common/shared.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
+			@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";
+		/*]]>*/</style>
+		<link rel="stylesheet" type="text/css" <?php if(empty($this->data['printable']) ) { ?>media="print"<?php } ?> href="<?php $this->text('stylepath') ?>/common/commonPrint.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" />
+		<!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 7]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE70Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if lt IE 7]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"></script>
 		<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
-		<script type="<?php $this->text('jsmimetype') ?>">var skin = '<?php $this->text('skinname')?>';var stylepath = '<?php $this->text('stylepath')?>';</script>
-		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js"><!-- wikibits js --></script>
+
+		<?php print Skin::makeGlobalVariablesScript( $this->data ); ?>
+
+		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"><!-- wikibits js --></script>
+		<!-- Head Scripts -->
+<?php $this->html('headscripts') ?>
 <?php	if($this->data['jsvarurl'  ]) { ?>
 		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"><!-- site js --></script>
 <?php	} ?>
@@ -82,12 +89,10 @@
 		<script type="<?php $this->text('jsmimetype') ?>"><?php $this->html('userjsprev') ?></script>
 <?php	}
 		if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>
-		<!-- Head Scripts -->
-		<?php $this->html('headscripts') ?>
 	</head>
-<body <?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
-<?php if($this->data['body_onload'    ]) { ?>onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
- class="<?php $this->text('nsclass') ?> <?php $this->text('dir') ?>">
+<body<?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
+<?php if($this->data['body_onload'    ]) { ?> onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
+ class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
 	<div id="globalWrapper">
 	
 	<div id="common_header">
@@ -109,7 +114,7 @@
 	<div id="content">
 		<a name="top" id="top"></a>
 		<?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
-		<h1 class="firstHeading"><?php $this->text('title') ?></h1>
+		<h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>
 		<div id="bodyContent">
 			<h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
 			<div id="contentSub"><?php $this->html('subtitle') ?></div>
@@ -127,23 +132,25 @@
 		<div id="column-one">
 	<div id="p-cactions" class="portlet">
 		<h5><?php $this->msg('views') ?></h5>
-		<ul>
-<?php			foreach($this->data['content_actions'] as $key => $tab) { ?>
-				 <li id="ca-<?php echo htmlspecialchars($key) ?>"<?php
-				 	if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
-				 ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"><?php
-				 echo htmlspecialchars($tab['text']) ?></a></li>
-<?php			 } ?>
-		</ul>
+		<div class="pBody">
+			<ul>
+	<?php			foreach($this->data['content_actions'] as $key => $tab) { ?>
+				 <li id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+					 	if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
+					 ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>><?php
+					 echo htmlspecialchars($tab['text']) ?></a></li>
+	<?php			 } ?>
+			</ul>
+		</div>
 	</div>
 	<div class="portlet" id="p-personal">
 		<h5><?php $this->msg('personaltools') ?></h5>
 		<div class="pBody">
 			<ul>
 <?php 			foreach($this->data['personal_urls'] as $key => $item) { ?>
-				<li id="pt-<?php echo htmlspecialchars($key) ?>"<?php
+				<li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
 					if ($item['active']) { ?> class="active"<?php } ?>><a href="<?php
-				echo htmlspecialchars($item['href']) ?>"<?php
+				echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
 				if(!empty($item['class'])) { ?> class="<?php
 				echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
 				echo htmlspecialchars($item['text']) ?></a></li>
@@ -153,8 +160,8 @@
 	</div>
 	<div class="portlet" id="p-logo">
 		<a style="background-image: url(<?php $this->text('logopath') ?>);" <?php
-			?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>" <?php
-			?>title="<?php $this->msg('mainpage') ?>"></a>
+			?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"<?php
+			echo $skin->tooltipAndAccesskey('n-mainpage') ?>></a>
 	</div>
 	<script type="<?php $this->text('jsmimetype') ?>"> if (window.isMSIE55) fixalpha(); </script>
 
@@ -176,13 +183,11 @@
 		<h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
 		<div id="searchBody" class="pBody">
 			<form action="<?php $this->text('searchaction') ?>" id="searchform"><div>
-				<input id="searchInput" name="search" type="text" <?php
-					if($this->haveMsg('accesskey-search')) {
-						?>accesskey="<?php $this->msg('accesskey-search') ?>"<?php }
+				<input id="searchInput" name="search" type="text"<?php echo $skin->tooltipAndAccesskey('search');
 					if( isset( $this->data['search'] ) ) {
 						?> value="<?php $this->text('search') ?>"<?php } ?> />
-				<input type='submit' name="go" class="searchButton" id="searchGoButton"	value="<?php $this->msg('go') ?>" />&nbsp;
-				<input type='submit' name="fulltext" class="searchButton" value="<?php $this->msg('search') ?>" />
+				<input type='submit' name="go" class="searchButton" id="searchGoButton"	value="<?php $this->msg('searcharticle') ?>"<?php echo $skin->tooltipAndAccesskey( 'search-go' ); ?> />&nbsp;
+				<input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>"<?php echo $skin->tooltipAndAccesskey( 'search-fulltext' ); ?> />
 			</div></form>
 		</div>
 	</div>
@@ -194,44 +199,44 @@
 		if($this->data['notspecialpage']) { ?>
 				<li id="t-whatlinkshere"><a href="<?php
 				echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
-				?>"><?php $this->msg('whatlinkshere') ?></a></li>
+				?>"<?php echo $skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li>
 <?php
 			if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
 				<li id="t-recentchangeslinked"><a href="<?php
 				echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
-				?>"><?php $this->msg('recentchangeslinked') ?></a></li>
+				?>"<?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked') ?></a></li>
 <?php 		}
 		}
 		if(isset($this->data['nav_urls']['trackbacklink'])) { ?>
 			<li id="t-trackbacklink"><a href="<?php
 				echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
-				?>"><?php $this->msg('trackbacklink') ?></a></li>
+				?>"<?php echo $skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li>
 <?php 	}
 		if($this->data['feeds']) { ?>
 			<li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
-					?><span id="feed-<?php echo htmlspecialchars($key) ?>"><a href="<?php
-					echo htmlspecialchars($feed['href']) ?>"><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
+					?><span id="feed-<?php echo Sanitizer::escapeId($key) ?>"><a href="<?php
+					echo htmlspecialchars($feed['href']) ?>"<?php echo $skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
 					<?php } ?></li><?php
 		}
 
-		foreach( array('contributions', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
+		foreach( array('contributions', 'log', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
 
 			if($this->data['nav_urls'][$special]) {
 				?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
-				?>"><?php $this->msg($special) ?></a></li>
+				?>"<?php echo $skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
 <?php		}
 		}
 
 		if(!empty($this->data['nav_urls']['print']['href'])) { ?>
 				<li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
-				?>"><?php $this->msg('printableversion') ?></a></li><?php
+				?>"<?php echo $skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php
 		}
 
 		if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
 				<li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
-				?>"><?php $this->msg('permalink') ?></a></li><?php
+				?>"<?php echo $skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
 		} elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
-				<li id="t-ispermalink"><?php $this->msg('permalink') ?></li><?php
+				<li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
 		}
 
 		wfRunHooks( 'OpenMokoTemplateToolboxEnd', array( &$this ) );
@@ -273,17 +278,23 @@
 			'privacy', 'about', 'disclaimer', 'tagline',
 		);
 		foreach( $footerlinks as $aLink ) {
-			if( $this->data[$aLink] ) {
+			if( isset( $this->data[$aLink] ) && $this->data[$aLink] ){
 ?>				<li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
 <?php 		}
 		}
 ?>
 			</ul>
 		</div>
-	<script type="text/javascript"> if (window.runOnloadHook) runOnloadHook();</script>
+
+	<?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
 </div>
 <?php $this->html('reporttime') ?>
+<?php if ( $this->data['debug'] ): ?>
+<!-- Debug output:
+<?php $this->text( 'debug' ); ?>
 
+-->
+<?php endif; ?>
 
 <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
 </script>

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/Simple.deps.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/Simple.deps.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/Simple.deps.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -5,6 +5,9 @@
 // changed on a subsequent page view.
 // see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
 
-require_once('includes/SkinTemplate.php');
-require_once('MonoBook.php');
-?>
\ No newline at end of file
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once( dirname( dirname( __FILE__ ) ) . '/includes/SkinTemplate.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/Simple.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/Simple.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/Simple.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -3,20 +3,18 @@
  * See skin.txt
  *
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 
 if( !defined( 'MEDIAWIKI' ) )
 	die( -1 );
 
 /** */
-require_once('MonoBook.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
 
 /**
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class SkinSimple extends SkinTemplate {
 	function initPage( &$out ) {
@@ -67,4 +65,4 @@
 	}
 }
 
-?>
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/Standard.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/Standard.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/Standard.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -3,8 +3,7 @@
  * See skin.txt
  *
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 
 if( !defined( 'MEDIAWIKI' ) )
@@ -12,21 +11,20 @@
 
 /**
  * @todo document
- * @package MediaWiki
- * @subpackage Skins
+ * @addtogroup Skins
  */
 class SkinStandard extends Skin {
 
 	/**
 	 *
 	 */
-	function getHeadScripts() {
-		global $wgStylePath, $wgJsMimeType;
+	function getHeadScripts( $allowUserJs ) {
+		global $wgStylePath, $wgJsMimeType, $wgStyleVersion;
 
-		$s = parent::getHeadScripts();
+		$s = parent::getHeadScripts( $allowUserJs );
 		if ( 3 == $this->qbSetting() ) { # Floating left
 			$s .= "<script language='javascript' type='$wgJsMimeType' " .
-			  "src='{$wgStylePath}/common/sticky.js'></script>\n";
+			  "src='{$wgStylePath}/common/sticky.js?$wgStyleVersion'></script>\n";
 		}
 		return $s;
 	}
@@ -35,14 +33,14 @@
 	 *
 	 */
 	function getUserStyles() {
-		global $wgStylePath;
+		global $wgStylePath, $wgStyleVersion;
 		$s = '';
 		if ( 3 == $this->qbSetting() ) { # Floating left
 			$s .= "<style type='text/css'>\n" .
-			  "@import '{$wgStylePath}/common/quickbar.css';\n</style>\n";
+			  "@import '{$wgStylePath}/common/quickbar.css?$wgStyleVersion';\n</style>\n";
 		} else if ( 4 == $this->qbSetting() ) { # Floating right
 			$s .= "<style type='text/css'>\n" .
-			  "@import '{$wgStylePath}/common/quickbar-right.css';\n</style>\n";
+			  "@import '{$wgStylePath}/common/quickbar-right.css?$wgStyleVersion';\n</style>\n";
 		}
 		$s .= parent::getUserStyles();
 		return $s;
@@ -52,7 +50,7 @@
 	 *
 	 */
 	function doGetUserStyles() {
-		global $wgUser, $wgOut, $wgStylePath;
+		global $wgStylePath;
 
 		$s = parent::doGetUserStyles();
 		$qb = $this->qbSetting();
@@ -90,7 +88,7 @@
 	}
 
 	function doAfterContent() {
-		global $wgUser, $wgOut, $wgContLang;
+		global $wgContLang;
 		$fname =  'SkinStandard::doAfterContent';
 		wfProfileIn( $fname );
 		wfProfileIn( $fname.'-1' );
@@ -177,32 +175,42 @@
 			} else { # backlink to the article in edit or history mode
 				if($articleExists){ # no backlink if no article
 					switch($tns) {
-						case 0:
-						$text = wfMsg('articlepage');
-						break;
-						case 1:
-						$text = wfMsg('viewtalkpage');
-						break;
-						case 2:
-						$text = wfMsg('userpage');
-						break;
-						case 3:
-						$text = wfMsg('viewtalkpage');
-						break;
-						case 4:
-						$text = wfMsg('wikipediapage');
-						break;
-						case 5:
-						$text = wfMsg('viewtalkpage');
-						break;
-						case 6:
-						$text = wfMsg('imagepage');
-						break;
-						case 7:
-						$text = wfMsg('viewtalkpage');
-						break;
+						case NS_TALK:
+						case NS_USER_TALK:
+						case NS_PROJECT_TALK:
+						case NS_IMAGE_TALK:
+						case NS_MEDIAWIKI_TALK:
+						case NS_TEMPLATE_TALK:
+						case NS_HELP_TALK:
+						case NS_CATEGORY_TALK:
+							$text = wfMsg('viewtalkpage');
+							break;
+						case NS_MAIN:
+							$text = wfMsg( 'articlepage' );
+							break;
+						case NS_USER:
+							$text = wfMsg( 'userpage' );
+							break;
+						case NS_PROJECT:
+							$text = wfMsg( 'projectpage' );
+							break;
+						case NS_IMAGE:
+							$text = wfMsg( 'imagepage' );
+							break;
+						case NS_MEDIAWIKI:
+							$text = wfMsg( 'mediawikipage' );
+							break;
+						case NS_TEMPLATE:
+							$text = wfMsg( 'templatepage' );
+							break;
+						case NS_HELP:
+							$text = wfMsg( 'viewhelppage' );
+							break;
+						case NS_CATEGORY:
+							$text = wfMsg( 'categorypage' );
+							break;
 						default:
-						$text= wfMsg('articlepage');
+							$text= wfMsg( 'articlepage' );
 					}
 
 					$link = $wgTitle->getText();
@@ -219,11 +227,14 @@
 
 			}
 
+			# "Post a comment" link
+			if( ( $wgTitle->isTalkPage() || $wgOut->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
+				$s .= '<br />' . $this->makeKnownLinkObj( $wgTitle, wfMsg( 'postcomment' ), 'action=edit&section=new' );
+			
+			#if( $tns%2 && $action!='edit' && !$wpPreview) {
+				#$s.= '<br />'.$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('postcomment'),'action=edit&section=new');
+			#}
 
-			if( $tns%2 && $action!='edit' && !$wpPreview) {
-				$s.= '<br />'.$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('postcomment'),'action=edit&section=new');
-			}
-
 			/*
 			watching could cause problems in edit mode:
 			if user edits article, then loads "watch this article" in background and then saves
@@ -235,7 +246,7 @@
 				{
 					$s .= $sep . $this->watchThisPage();
 				}
-				if ( $wgTitle->userCanEdit() )
+				if ( $wgTitle->userCan( 'edit' ) )
 					$s .= $sep . $this->moveThisPage();
 			}
 			if ( $wgUser->isAllowed('delete') and $articleExists ) {
@@ -288,4 +299,4 @@
 
 }
 
-?>
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/chick/main.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/chick/main.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/chick/main.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -50,16 +50,24 @@
     padding-bottom: 0.17em;
     border-bottom: 1px solid #aaaaaa;
 }
+.editsection {
+	font-weight: normal;
+}
 h1 { font-size: 188%; }
+h1 .editsection { font-size: 53.2%; }
 h2 { font-size: 150%; }
+h2 .editsection { font-size: 66.7%; }
 h3, h4, h5, h6 {
     border-bottom: none;
     font-weight: bold;
 }
 h3 { font-size: 132%; }
+h3 .editsection { font-size: 75.8%; }
 h4 { font-size: 116%; }
+h4 .editsection { font-size: 86.2%; }
 h5 { font-size: 100%; }
 h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; }
 
 ul {
     line-height: 1.5em;
@@ -260,6 +268,7 @@
 div.floatright p { font-style: italic; }
 div.floatleft, table.floatleft {
     float: left;
+    clear: left;
     margin: 0.3em 0.5em 0.5em 0;
     position: relative;
     border: 0.5em solid White;
@@ -306,15 +315,17 @@
 }
 div.tleft {
     float: left;
+    clear: left;
     margin-right:0.5em;
     border-width: 0.5em 1.4em 0.8em 0;
 }
+img.thumbborder {
+	border: 1px solid #dddddd;
+}
 
 .hiddenStructure {
     display: none;
 }
-img.tex { vertical-align: middle; }
-span.texhtml { font-family: serif; }
 
 /*
 ** classes for special content elements like town boxes
@@ -385,25 +396,6 @@
     background-color:#f9f9f9;
     border:1px dashed #aaaaaa;
 }
-/*
-** Diff rendering
-*/
-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; }
 
 a.external { color: #3366bb; }
 
@@ -433,15 +425,6 @@
 	color:black;
 	background-color:#00FF00;
 }
-span.newpageletter {
-	font-weight:bold;
-	color:black;
-	background-color:yellow;
-}
-span.minoreditletter {
-	color:black;
-	background-color:#C5FFE6;
-}
 
 table.gallery {
         border:  1px solid #cccccc;
@@ -472,10 +455,19 @@
 }       
 
 div.gallerytext {
+	overflow: hidden;
         font-size: 94%;
         padding: 2px 4px;
 }       
 
 #jump-to-nav {
   display: none;
-}
\ No newline at end of file
+}
+
+.templatesUsed { margin-top: 1.5em; }
+
+/* Recreating-deleted-page/reupload file warning and log entries */
+div#mw-upload-deleted-warn ul li,
+div#mw-recreate-deleted-warn ul li {
+	font-size: 95%;
+}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/IEFixes.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/IEFixes.js	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/IEFixes.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -33,7 +33,7 @@
 
         if (imageUrl.substr(imageUrl.length-4).toLowerCase() == '.png') {
             var logospan = logoa.appendChild(document.createElement('span'));
-           
+
             logoa.style.backgroundImage = 'none';
             logospan.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + imageUrl + ')';
             logospan.style.height = '100%';
@@ -41,7 +41,7 @@
             logospan.style.width = logoa.currentStyle.width;
             logospan.style.cursor = 'hand';
             // Center image with hack for IE5.5
-            if (document.documentElement.dir == "rtl") 
+            if (document.documentElement.dir == "rtl")
             {
               logospan.style.right = '50%';
               logospan.style.setExpression('marginRight', '"-" + (this.offsetWidth / 2) + "px"');
@@ -53,7 +53,7 @@
             }
             logospan.style.top = '50%';
             logospan.style.setExpression('marginTop', '"-" + (this.offsetHeight / 2) + "px"');
- 
+
             var linkFix = logoa.appendChild(logoa.cloneNode());
             linkFix.style.position = 'absolute';
             linkFix.style.height = '100%';
@@ -124,4 +124,4 @@
     for (var i=0; i < expandedURLs.length; i++)
         if (expandedURLs[i])
             expandedURLs[i].removeNode(true);
-}
\ No newline at end of file
+}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajax.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajax.js	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajax.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -3,59 +3,114 @@
 var sajax_debug_mode = false;
 var sajax_request_type = "GET";
 
-var started;
-var typing;
-var memory=null;
-var body=null;
-var oldbody=null;
-
+/**
+* if sajax_debug_mode is true, this function outputs given the message into 
+* the element with id = sajax_debug; if no such element exists in the document, 
+* it is injected.
+*/
 function sajax_debug(text) {
-	if (sajax_debug_mode)
-		alert("RSD: " + text)
-}
+	if (!sajax_debug_mode) return false;
 
+	var e= document.getElementById('sajax_debug');
 
+	if (!e) {
+		e= document.createElement("p");
+		e.className= 'sajax_debug';
+		e.id= 'sajax_debug';
+
+		var b= document.getElementsByTagName("body")[0];
+
+		if (b.firstChild) b.insertBefore(e, b.firstChild);
+		else b.appendChild(e);
+	}
+
+	var m= document.createElement("div");
+	m.appendChild( document.createTextNode( text ) );
+
+	e.appendChild( m );
+
+	return true;
+}
+
+/**
+* compatibility wrapper for creating a new XMLHttpRequest object.
+*/
 function sajax_init_object() {
 	sajax_debug("sajax_init_object() called..")
 	var A;
 	try {
-		A=new ActiveXObject("Msxml2.XMLHTTP");
+		// Try the new style before ActiveX so we don't
+		// unnecessarily trigger warnings in IE 7 when
+		// set to prompt about ActiveX usage
+		A = new XMLHttpRequest();
 	} catch (e) {
 		try {
-			A=new ActiveXObject("Microsoft.XMLHTTP");
-		} catch (oc) {
-			A=null;
+			A=new ActiveXObject("Msxml2.XMLHTTP");
+		} catch (e) {
+			try {
+				A=new ActiveXObject("Microsoft.XMLHTTP");
+			} catch (oc) {
+				A=null;
+			}
 		}
 	}
-	if(!A && typeof XMLHttpRequest != "undefined")
-		A = new XMLHttpRequest();
 	if (!A)
 		sajax_debug("Could not create connection object.");
+
 	return A;
 }
 
-
-function sajax_do_call(func_name, args) {
+/**
+* Perform an ajax call to mediawiki. Calls are handeled by AjaxDispatcher.php
+*   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
+*   args - an array of arguments to that function
+*   target - the target that will handle the result of the call. If this is a function,
+*            if will be called with the XMLHttpRequest as a parameter; if it's an input
+*            element, its value will be set to the resultText; if it's another type of
+*            element, its innerHTML will be set to the resultText.
+*
+* Example:
+*    sajax_do_call('doFoo', [1, 2, 3], document.getElementById("showFoo"));
+*
+* This will call the doFoo function via MediaWiki's AjaxDispatcher, with
+* (1, 2, 3) as the parameter list, and will show the result in the element
+* with id = showFoo
+*/
+function sajax_do_call(func_name, args, target) {
 	var i, x, n;
 	var uri;
 	var post_data;
-	uri = wgServer + "/" + wgScriptPath + "/index.php?action=ajax";
+	uri = wgServer +
+		((wgScript == null) ? (wgScriptPath + "/index.php") : wgScript) +
+		"?action=ajax";
 	if (sajax_request_type == "GET") {
 		if (uri.indexOf("?") == -1)
-			uri = uri + "?rs=" + escape(func_name);
+			uri = uri + "?rs=" + encodeURIComponent(func_name);
 		else
-			uri = uri + "&rs=" + escape(func_name);
-		for (i = 0; i < args.length-1; i++)
-			uri = uri + "&rsargs[]=" + escape(args[i]);
+			uri = uri + "&rs=" + encodeURIComponent(func_name);
+		for (i = 0; i < args.length; i++)
+			uri = uri + "&rsargs[]=" + encodeURIComponent(args[i]);
 		//uri = uri + "&rsrnd=" + new Date().getTime();
 		post_data = null;
 	} else {
-		post_data = "rs=" + escape(func_name);
-		for (i = 0; i < args.length-1; i++)
-			post_data = post_data + "&rsargs[]=" + escape(args[i]);
+		post_data = "rs=" + encodeURIComponent(func_name);
+		for (i = 0; i < args.length; i++)
+			post_data = post_data + "&rsargs[]=" + encodeURIComponent(args[i]);
 	}
 	x = sajax_init_object();
-	x.open(sajax_request_type, uri, true);
+	if (!x) {
+		alert("AJAX not supported");
+		return false;
+	}
+
+	try {
+		x.open(sajax_request_type, uri, true);
+	} catch (e) {
+		if (window.location.hostname == "localhost") {
+			alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing.");
+		}
+		throw e;
+	}
 	if (sajax_request_type == "POST") {
 		x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
 		x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
@@ -65,113 +120,37 @@
 	x.onreadystatechange = function() {
 		if (x.readyState != 4)
 			return;
-		sajax_debug("received " + x.responseText);
-		var status;
-		var data;
-		status = x.responseText.charAt(0);
-		data = x.responseText.substring(2);
-		if (status == "-")
-			alert("Error: " + data);
-		else
-			args[args.length-1](data);
-	}
-	x.send(post_data);
-	sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
-	sajax_debug(func_name + " waiting..");
-	delete x;
-}
 
-// Remove the typing barrier to allow call() to complete
-function Search_doneTyping()
-{
-	typing=false;
-}
+		sajax_debug("received (" + x.status + " " + x.statusText + ") " + x.responseText);
 
-// Wait 500ms to run call()
-function Searching_Go()
-{
-        setTimeout("Searching_Call()", 500);
-}
+		//if (x.status != 200)
+		//	alert("Error: " + x.status + " " + x.statusText + ": " + x.responseText);
+		//else
 
-// If the user is typing wait until they are done.
-function Search_Typing() {
-	started=true;
-	typing=true;
-	window.status = "Waiting until you're done typing...";
-	setTimeout("Search_doneTyping()", 500);
-
-	// I believe these are needed by IE for when the users press return?
-	if (window.event)
-	{
-		if (event.keyCode == 13)
-		{
-			event.cancelBubble = true;
-			event.returnValue = false;
+		if ( typeof( target ) == 'function' ) {
+			target( x );
 		}
-	}
-}
+		else if ( typeof( target ) == 'object' ) {
+			if ( target.tagName == 'INPUT' ) {
+				if (x.status == 200) target.value= x.responseText;
+				//else alert("Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")");
+			}
+			else {
+				if (x.status == 200) target.innerHTML = x.responseText;
+				else target.innerHTML= "<div class='error'>Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")</div>";
+			}
+		}
+		else {
+			alert("bad target for sajax_do_call: not a function or object: " + target);
+		}
 
-// Set the body div to the results
-function Searching_SetResult(result)
-{
-        //body.innerHTML = result;
-	t = document.getElementById("searchTarget");
-	if ( t == null ) {
-		oldbody=body.innerHTML;
-		body.innerHTML= '<div id="searchTargetContainer"><div id="searchTarget" ></div></div>' ;
-		t = document.getElementById("searchTarget");
-	}
-	t.innerHTML = result;
-	t.style.display='block';
-}
-
-function Searching_Hide_Results()
-{
-	t = document.getElementById("searchTarget");
-	t.style.display='none';
-	body.innerHTML = oldbody;
-}
-
-
-// This will call the php function that will eventually
-// return a results table
-function Searching_Call()
-{
-	var x;
-	Searching_Go();
-
-	//Don't proceed if user is typing
-	if (typing)
 		return;
-
-	x = document.getElementById("searchInput").value;
-
-	// Don't search again if the query is the same
-	if (x==memory)
-		return;
-
-	memory=x;
-	if (started) {
-		// Don't search for blank or < 3 chars.
-		if ((x=="") || (x.length < 3))
-		{
-			return;
-		}
-		x_wfSajaxSearch(x, Searching_SetResult);
 	}
-}
 
-function x_wfSajaxSearch() {
-	sajax_do_call( "wfSajaxSearch", x_wfSajaxSearch.arguments );
-}
+	sajax_debug(func_name + " uri = " + uri + " / post = " + post_data);
+	x.send(post_data);
+	sajax_debug(func_name + " waiting..");
+	delete x;
 
-	
-//Initialize
-function sajax_onload() {
-	x = document.getElementById( 'searchInput' );
-	x.onkeypress= function() { Search_Typing(); };
-	Searching_Go();
-	body = document.getElementById("content");
+	return true;
 }
-
-hookEvent("load", sajax_onload);

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajaxsearch.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajaxsearch.js	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajaxsearch.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,103 @@
+// remote scripting library
+// (c) copyright 2005 modernmethod, inc
+
+var started;
+var typing;
+var memory=null;
+var body=null;
+var oldbody=null;
+
+// Remove the typing barrier to allow call() to complete
+function Search_doneTyping()
+{
+	typing=false;
+}
+
+// Wait 500ms to run call()
+function Searching_Go()
+{
+        setTimeout("Searching_Call()", 500);
+}
+
+// If the user is typing wait until they are done.
+function Search_Typing() {
+	started=true;
+	typing=true;
+	setTimeout("Search_doneTyping()", 500);
+
+	// I believe these are needed by IE for when the users press return?
+	if (window.event)
+	{
+		if (event.keyCode == 13)
+		{
+			event.cancelBubble = true;
+			event.returnValue = true;
+		}
+	}
+}
+
+// Set the body div to the results
+function Searching_SetResult( request )
+{
+	if ( request.status != 200 ) {
+		alert("Error: " + request.status + " " + request.statusText + ": " + request.responseText);
+		return;
+	}
+
+	var result = request.responseText;
+
+        //body.innerHTML = result;
+	t = document.getElementById("searchTarget");
+	if ( t == null ) {
+		oldbody=body.innerHTML;
+		body.innerHTML= '<div id="searchTargetContainer"><div id="searchTarget" ></div></div>' ;
+		t = document.getElementById("searchTarget");
+	}
+	t.innerHTML = result;
+	t.style.display='block';
+}
+
+function Searching_Hide_Results()
+{
+	t = document.getElementById("searchTarget");
+	t.style.display='none';
+	body.innerHTML = oldbody;
+}
+
+
+// This will call the php function that will eventually
+// return a results table
+function Searching_Call()
+{
+	var x;
+	Searching_Go();
+
+	//Don't proceed if user is typing
+	if (typing)
+		return;
+
+	x = document.getElementById("searchInput").value;
+
+	// Don't search again if the query is the same
+	if (x==memory)
+		return;
+
+	memory=x;
+	if (started) {
+		// Don't search for blank or < 3 chars.
+		if ((x=="") || (x.length < 3))
+		{
+			return;
+		}
+
+		sajax_do_call( "wfSajaxSearch", [ x ], Searching_SetResult );
+	}
+}
+
+//Initialize
+function sajax_onload() {
+	x = document.getElementById( 'searchInput' );
+	x.onkeypress= function() { Search_Typing(); };
+	Searching_Go();
+	body = document.getElementById("content");
+}

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajaxwatch.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajaxwatch.js	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/ajaxwatch.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,158 @@
+// dependencies:
+// * ajax.js:
+  /*extern sajax_init_object, sajax_do_call */
+// * wikibits.js:
+  /*extern changeText, akeytt, hookEvent, jsMsg */
+
+// These should have been initialized in the generated js
+/*extern wgAjaxWatch, wgPageName */
+
+if(typeof wgAjaxWatch === "undefined" || !wgAjaxWatch) {
+	var wgAjaxWatch = {
+		watchMsg: "Watch",
+		unwatchMsg: "Unwatch",
+		watchingMsg: "Watching...",
+		unwatchingMsg: "Unwatching..."
+	};
+}
+
+wgAjaxWatch.supported = true; // supported on current page and by browser
+wgAjaxWatch.watching = false; // currently watching page
+wgAjaxWatch.inprogress = false; // ajax request in progress
+wgAjaxWatch.timeoutID = null; // see wgAjaxWatch.ajaxCall
+wgAjaxWatch.watchLinks = []; // "watch"/"unwatch" links
+
+wgAjaxWatch.setLinkText = function(newText) {
+	for (i = 0; i < wgAjaxWatch.watchLinks.length; i++) {
+		changeText(wgAjaxWatch.watchLinks[i], newText);
+	}
+};
+
+wgAjaxWatch.setLinkID = function(newId) {
+	// We can only set the first one
+	wgAjaxWatch.watchLinks[0].setAttribute( 'id', newId );
+	akeytt(newId); // update tooltips for Monobook
+};
+
+wgAjaxWatch.setHref = function( string ) {
+	for( i = 0; i < wgAjaxWatch.watchLinks.length; i++ ) {
+		if( string == 'watch' ) {
+			wgAjaxWatch.watchLinks[i].href = wgAjaxWatch.watchLinks[i].href
+				.replace( /&action=unwatch/, '&action=watch' );
+		} else if( string == 'unwatch' ) {
+			wgAjaxWatch.watchLinks[i].href = wgAjaxWatch.watchLinks[i].href
+				.replace( /&action=watch/, '&action=unwatch' );
+		}
+	}
+}
+
+wgAjaxWatch.ajaxCall = function() {
+	if(!wgAjaxWatch.supported) {
+		return true;
+	} else if (wgAjaxWatch.inprogress) {
+		return false;
+	}
+	if(!wfSupportsAjax()) {
+		// Lazy initialization so we don't toss up
+		// ActiveX warnings on initial page load
+		// for IE 6 users with security settings.
+		wgAjaxWatch.supported = false;
+		return true;
+	}
+
+	wgAjaxWatch.inprogress = true;
+	wgAjaxWatch.setLinkText( wgAjaxWatch.watching
+		? wgAjaxWatch.unwatchingMsg : wgAjaxWatch.watchingMsg);
+	sajax_do_call(
+		"wfAjaxWatch",
+		[wgPageName, (wgAjaxWatch.watching ? "u" : "w")], 
+		wgAjaxWatch.processResult
+	);
+	// if the request isn't done in 10 seconds, allow user to try again
+	wgAjaxWatch.timeoutID = window.setTimeout(
+		function() { wgAjaxWatch.inprogress = false; },
+		10000
+	);
+	return false;
+};
+
+wgAjaxWatch.processResult = function(request) {
+	if(!wgAjaxWatch.supported) {
+		return;
+	}
+	var response = request.responseText;
+	if( response.match(/^<w#>/) ) {
+		wgAjaxWatch.watching = true;
+		wgAjaxWatch.setLinkText(wgAjaxWatch.unwatchMsg);
+		wgAjaxWatch.setLinkID("ca-unwatch");
+		wgAjaxWatch.setHref( 'unwatch' );
+	} else if( response.match(/^<u#>/) ) {
+		wgAjaxWatch.watching = false;
+		wgAjaxWatch.setLinkText(wgAjaxWatch.watchMsg);
+		wgAjaxWatch.setLinkID("ca-watch");
+		wgAjaxWatch.setHref( 'watch' );
+	} else {
+		// Either we got a <err#> error code or it just plain broke.
+		window.location.href = wgAjaxWatch.watchLinks[0].href;
+		return;
+	}
+	jsMsg( response.substr(4), 'watch' );
+	wgAjaxWatch.inprogress = false;
+	if(wgAjaxWatch.timeoutID) {
+		window.clearTimeout(wgAjaxWatch.timeoutID);
+	}
+	return;
+};
+
+wgAjaxWatch.onLoad = function() {
+	// This document structure hardcoding sucks.  We should make a class and
+	// toss all this out the window.
+	var el1 = document.getElementById("ca-unwatch");
+	var el2 = null;
+	if (!el1) {
+		el1 = document.getElementById("mw-unwatch-link1");
+		el2 = document.getElementById("mw-unwatch-link2");
+	}
+	if(el1) {
+		wgAjaxWatch.watching = true;
+	} else {
+		wgAjaxWatch.watching = false;
+		el1 = document.getElementById("ca-watch");
+		if (!el1) {
+			el1 = document.getElementById("mw-watch-link1");
+			el2 = document.getElementById("mw-watch-link2");
+		}
+		if(!el1) {
+			wgAjaxWatch.supported = false;
+			return;
+		}
+	}
+
+	// The id can be either for the parent (Monobook-based) or the element
+	// itself (non-Monobook)
+	wgAjaxWatch.watchLinks.push( el1.tagName.toLowerCase() == "a"
+		? el1 : el1.firstChild );
+
+	if( el2 ) {
+		wgAjaxWatch.watchLinks.push( el2 );
+	}
+
+	// I couldn't get for (watchLink in wgAjaxWatch.watchLinks) to work, if
+	// you can be my guest.
+	for( i = 0; i < wgAjaxWatch.watchLinks.length; i++ ) {
+		wgAjaxWatch.watchLinks[i].onclick = wgAjaxWatch.ajaxCall;
+	}
+	return;
+};
+
+hookEvent("load", wgAjaxWatch.onLoad);
+
+/**
+ * @return boolean whether the browser supports XMLHttpRequest
+ */
+function wfSupportsAjax() {
+	var request = sajax_init_object();
+	var supportsAjax = request ? true : false;
+	delete request;
+	return supportsAjax;
+}

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/block.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/block.js	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/block.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,52 @@
+function considerChangingExpiryFocus() {
+	if (!document.getElementById) {
+		return;
+	}
+	var drop = document.getElementById('wpBlockExpiry');
+	if (!drop) {
+		return;
+	}
+	var field = document.getElementById('wpBlockOther');
+	if (!field) {
+		return;
+	}
+	var opt = drop.value;
+	if (opt == 'other') {
+		field.style.display = '';
+	} else {
+		field.style.display = 'none';
+	}
+}
+
+function updateBlockOptions() {
+	if (!document.getElementById)
+		return;
+
+	var target = document.getElementById('mw-bi-target');
+	if (!target)
+		return;
+
+	var addy = target.value;
+	var isEmpty = addy.match(/^\s*$/);
+	var isIp = addy.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|:(:[0-9A-Fa-f]{1,4}){1,7}|[0-9A-Fa-f]{1,4}(:{1,2}[0-9A-Fa-f]{1,4}|::$){1,7})(\/\d+)?$/);
+
+	var anonymousRow = document.getElementById('wpAnonOnlyRow');
+	if( anonymousRow ) {
+		anonymousRow.style.display = (!isIp && !isEmpty) ? 'none' : '';
+	}
+
+	var autoblockRow = document.getElementById('wpEnableAutoblockRow');
+	if( autoblockRow ) {
+		autoblockRow.style.display = isIp && !isEmpty ? 'none' : '';
+	}
+
+	var emailblockRow = document.getElementById('wpEnableEmailBan');
+	if( emailblockRow ) {
+		emailblockRow.style.display = isIp && !isEmpty ? 'none' : '';
+	}
+	
+	var hideuserRow = document.getElementById('wpEnableHideUser');
+	if( hideuserRow ) {
+		hideuserRow.style.display = isIp && !isEmpty ? 'none' : '';
+	}
+}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/cologneblue.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/cologneblue.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/cologneblue.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,5 +1,3 @@
- at import url("common.css?1");
-
 body { margin: 0px; padding: 0px; color: black; }
 #specialform { display: inline; }
 #content { top: 0; margin: 0; padding: 0; }
@@ -78,8 +76,9 @@
 h1 {
  color: #666666;
  font-family: Verdana, Arial, sans-serif;
- font-size: 18pt; font-weight: bold; line-height: 21pt;
+ font-size: 180%; line-height: 21pt;
 }
+h1 .editsection { font-size: 55.6%; }
 h1.pagetitle { padding-bottom: 0; margin-bottom: 0; }
 #article p.subtitle {
  color: #666666; font-size: 11pt; font-weight: bold;
@@ -94,4 +93,17 @@
 a.new, #quickbar a.new { color: #CC2200; }
 h2, h3, h4, h5, h6 { margin-bottom: 0; }
 small { font-size: 75%; }
+input.mw-searchInput { width: 106px; }
 
+/* Recreating-deleted-page/reupload file warning and log entries */
+div#mw-upload-deleted-warn,
+div#mw-recreate-deleted-warn {
+	padding: 3px;
+	margin-top: 3px;
+	margin-bottom: 3px;
+	border: 1px solid #6688AA;
+}
+div#mw-upload-deleted-warn ul li,
+div#mw-recreate-deleted-warn ul li {
+	font-size: 90%;
+}
\ No newline at end of file

Deleted: trunk/wiki.openmoko.org/space_www_wiki_skins/common/common.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/common.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/common.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,381 +0,0 @@
-/*
- * common.css
- * This file contains CSS settings common to Wikistandard, Nostalgia and CologneBlue
- */
-#footer { clear: both }
-/* images */
-div.floatright { float: right; margin: 0 0 1em 1em; }
-div.floatright p { font-style: italic; }
-div.floatleft { float: left; margin: 0.3em 0.5em 0.5em 0; }
-div.floatleft p { font-style: italic; }
-
-
-/* Print-specific things to hide */
-.printfooter {
-        display: none;
-}
-
-/* table standards */
-table.rimage {
-        float:right;
-        margin-left:1em;
-        margin-bottom:1em;
-        text-align:center;
-        font-size:smaller;
-}
-
-/* thumbnails */
-div.thumb {
-    margin: 10px;
-    text-align: center;
-    width: auto;
-}
-div.thumb div {
-    border: 1px solid #8888aa;
-    background-color: #f7f8ff;
-    padding: 2px;
-    font-size: 94%;
-    text-align: center;
-    overflow: hidden;
-}
-div.thumb div * {
-    border: none;
-    background: none;
-}
-div.thumb img {
-    border:1px solid #8888AA;
-    margin-bottom:3px;
-    background:#FFFFFF;
-}
-div.thumbcaption,
-div.thumbcaption * {
-    border: none !important;
-    background: none !important;
-}
-div.thumbcaption {
-    padding: 0.2em 0 0.2em 0 !important;
-    text-align: left !important;
-}
-div.tright {
-    float: right;
-    margin-left:0.5em;
-}
-div.tleft {
-    float: left;
-    margin-right:0.5em;
-}
-
-/* Page history styling */
-/* the auto-generated edit comments */
-.autocomment { color: #4b4b4b; }
-#pagehistory span.user {
-    margin-left: 1.4em;
-    margin-right: 0.4em;
-}
-#pagehistory span.minor { font-weight: bold; }
-#pagehistory li { border: 1px solid White; }
-#pagehistory li.selected {
-    background-color:#f9f9f9;
-    border:1px dashed #aaaaaa;
-}
-
-table.diff { background:white; }
-td.diff-otitle { background:#cccccc; }
-td.diff-ntitle { background:#cccccc; }
-td.diff-addedline {
-    background:#ccffcc;
-    font-size: 94%;
-}
-td.diff-deletedline {
-    background:#ffffaa;
-    font-size: 94%;
-}
-td.diff-context {
-    background:#eeeeee;
-    font-size: 94%;
-}
-span.diffchange { color: red; font-weight: bold; }
-
-img { border: none; }
-img.tex { vertical-align: middle; }
-span.texhtml { font-family: serif; }
-
-
-#toc,
-.toc {
-	border: 1px solid #bba;
-	background-color: #f7f8ff;
-	padding: 5px;
-	font-size: 95%;
-	text-align: center;
-}
-#toc h2,
-.toc h2 {
-	display: inline;
-	border: none;
-	padding: 0;
-	font-size: 100%;
-	font-weight: bold;
-}
-#toc ul,
-.toc ul {
-	list-style-type: none;
-	list-style-image: none;
-	margin-left: 0;
-	padding-left: 0;
-	text-align: left;
-}
-#toc ul ul,
-.toc ul ul {
-	margin: 0 0 0 2em;
-}
-#toc .toctoggle,
-.toc .toctoggle {
-	font-size: 94%;
-}
-
-
-.error {
-	color: red;
-	font-size: larger;
-}
-
-/* preference page with js-genrated toc */
-#preftoc {
-    float: left;
-    margin: 1em 1em 1em 1em;
-    width: 13em;
-}
-#preftoc li { border: 1px solid White; }
-#preftoc li.selected {
-    background-color:#f9f9f9;
-    border:1px dashed #aaaaaa;
-}
-#preftoc a,
-#preftoc a:active {
-    display: block;
-    color: #005189;
-}
-#prefcontrol {
-    clear: left;
-    float: left;
-    margin-top: 1em;
-}
-div.prefsectiontip {
-    font-size: 94%;
-    margin-top: 1em;
-}
-fieldset.prefsection { margin-top: 1em }
-fieldset.operaprefsection { margin-left: 15em }
-
-/* emulate center */
-.center {
-    width: 100%;
-    text-align: center;
-}
-*.center * {
-    margin-left: auto;
-    margin-right: auto;
-}
-/* small for tables and similar */
-.small, .small * { font-size: 94%; }
-table.small { font-size: 100% }
-
-div.townBox {
-    position:relative;
-    float:right;
-    background:White;
-    margin-left:1em;
-    border: 1px solid gray;
-    padding:0.3em;
-    width: 200px;
-    overflow: hidden;
-    clear: right;
-}
-div.townBox dl {
-    padding: 0;
-    margin: 0 0 0.3em 0;
-    font-size: 96%;
-}
-div.townBox dl dt {
-    background: none;
-    margin: 0.4em 0 0 0;
-}
-div.townBox dl dd {
-    margin: 0.1em 0 0 1.1em;
-    background-color: #f3f3f3;
-}
-/* use this instead of #toc for page content */
-.toccolours {
-    border:1px solid #aaaaaa;
-    background-color:#f9f9f9;
-    padding:5px;
-    font-size: 95%;
-}
-#siteNotice {
-    border:1px solid #aaaaaa;
-    padding-left: 0.5em;
-    padding-right: 0.5em;
-}
-.redirectText {
-	font-size:150%;
-	margin:5px;
-}
-.searchmatch {
-	color: red;
-	font-weight: bold;
-}
-.sharedUploadNotice {
-	font-style: italic;
-}
-span.unpatrolled {
-	font-weight:bold;
-	color:red;
-}
-
-span.updatedmarker {
-	color:black;
-	background-color:#00FF00;
-}
-span.newpageletter {
-	font-weight:bold;
-	color:black;
-	background-color:yellow;
-}
-span.minoreditletter {
-	color:black;
-	background-color:#C5FFE6;
-}
-
-table.gallery {
-        border:  1px solid #cccccc;
-        margin:  2px;
-        padding: 2px;
-        background-color:#ffffff;
-}
-
-table.gallery tr {
-        vertical-align:top;
-}
-
-table.gallery td {
-      vertical-align:top;
-      background-color:#f9f9f9;
-      border: solid 2px white;
-}
-
-div.gallerybox {
-        margin: 2px;
-        width:  150px;
-}
-
-div.gallerybox div.thumb {
-        text-align: center;
-        border: 1px solid #cccccc;
-        margin: 2px;
-}
-
-div.gallerytext {
-        font-size: 94%;
-        padding: 2px 4px;
-}
-
-span.comment {
-	font-style: italic;
-}
-
-span.changedby {
-	font-size: 95%;
-}
-
-.previewnote {
-	text-align: center;
-	color: #cc0000;
-}
-.editExternally {
-        border-style:solid;
-        border-width:1px;
-        border-color:gray;
-        background: #ffffff;
-        padding:3px;
-        margin-top:0.5em;
-        float:left;
-        font-size:small;
-        text-align:center;
-}
-.editExternallyHelp {
-        font-style:italic;
-        color:gray;
-}
-
-li span.deleted {
-	text-decoration: line-through;
-	color: #888;
-	font-style: italic;
-}
-
-
-/* Classes for EXIF data display */
-table.mw_metadata {
-	margin-left: 0.5em;
-}
-
-table.mw_metadata caption { font-weight: bold; }
-table.mw_metadata th { font-weight: normal; }
-table.mw_metadata td { padding: 0.1em; }
-
-table.mw_metadata {
-	border: none;
-	border-collapse: collapse;
-}
-table.mw_metadata td, table.mw_metadata th {
-	border: 1px solid #aaaaaa;
-	padding-left: 4px;
-	padding-right: 4px;
-}
-table.mw_metadata th {
-	background-color: #f9f9f9;
-}
-table.mw_metadata td {
-	background-color: #fcfcfc;
-}
-table.mw_metadata td.spacer {
-	background: inherit;
-	border-top: none;
-	border-bottom: none;
-}
-table.collapsed tr.collapsable {
-	display: none;
-}
-
-.visualClear {
-    clear: both;
-}
-
-#mw_trackbacks {
-	border: solid 1px #bbbbff;
-	background-color: #eeeeff;
-	padding: 0.2em;
-}
-
-/* Allmessages table */
-
-#allmessagestable th {
-	background-color: #b2b2ff;
-}
-
-#allmessagestable tr.orig {
-	background-color: #ffe2e2;
-}
-
-#allmessagestable tr.new {
-	background-color: #e2ffe2;
-}
-
-#allmessagestable tr.def {
-	background-color: #f0f0ff;
-}
-
-#jump-to-nav {
-  display: none;
-}
\ No newline at end of file

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/commonPrint.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/commonPrint.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/commonPrint.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -22,13 +22,11 @@
 .tocline {
 	margin-bottom: 0px;
 }
-.toctoggle, .editsection {
-	font-size: smaller;
-}
 
 /* images */
 div.floatright { 
-    float: right; 
+    float: right;
+    clear: right;
     margin: 0;
     position:relative;
     border: 0.5em solid White;
@@ -67,6 +65,7 @@
 div.magnify { display: none; }
 div.tright {
     float: right;
+    clear: right;
     border-width: 0.5em 0 0.8em 1.4em;
 }
 div.tleft {
@@ -74,6 +73,9 @@
     margin-right:0.5em;
     border-width: 0.5em 1.4em 0.8em 0;
 }
+img.thumbborder {
+	border: 1px solid #dddddd;
+}
 
 /* table standards */
 table.rimage {
@@ -103,10 +105,10 @@
 .tochidden,
 div#f-poweredbyico,
 div#f-copyrightico,
-li#f-viewcount,
-li#f-about,
-li#f-disclaimer,
-li#f-privacy {
+li#viewcount,
+li#about,
+li#disclaimer,
+li#privacy {
     /* Hides all the elements irrelevant for printing */
     display: none;
 }
@@ -118,7 +120,6 @@
 #content {
     background: none;
     border: none ! important;
-    font-size: 11pt;
     padding: 0 ! important;
     margin: 0 ! important;
 }
@@ -128,14 +129,13 @@
     border-top: 1px solid black;
 }
 
-h1, h2, h3, h4, h5, h6
-{
-    font-weight: bold;
+h1, h2, h3, h4, h5, h6 {
+	font-weight: bold;
 }
 
 p, .documentDescription {
     margin: 1em 0 ! important;
-    line-height: 1.2em;    
+    line-height: 1.2em;
 }
 
 .tocindent p {
@@ -160,7 +160,8 @@
 
 a {
     color: Black !important;
-    padding: 0 !important
+    background: none !important;
+    padding: 0 !important;
 }
 
 a:link, a:visited {
@@ -284,5 +285,8 @@
     background:#eeeeee;
     font-size: smaller;
 }
-span.diffchange { color: silver; font-weight: bold; text-decoration: underline; }
-
+.diffchange {
+    color: silver;
+    font-weight: bold;
+    text-decoration: underline;
+}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/common_rtl.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/common_rtl.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/common_rtl.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,3 +1,8 @@
+/*
+ * This file contains CSS settings common to RTL wikis use the old
+ * pre-Monobook skins Wikistandard, Nostalgia and CologneBlue
+ */
+
 /* js pref toc */
 #preftoc { float: right; }
 /* workaround for moz bug, displayed bullets on left side */
@@ -13,3 +18,20 @@
     margin-right: 1.4em;
     margin-left: 0.4em;
 }
+.editsection {
+	float: left;
+	margin-right: 5px;
+}
+div.tright, div.floatright {
+	clear: none;
+}
+div.tleft, div.floatleft {
+	clear: left;
+}
+/* Unblock and Ipblocklist links of Special:Blockip */
+p.mw-ipb-conveniencelinks {
+	float: left;
+}
+table.filehistory th {
+	text-align: right;
+}

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/diff.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/diff.css	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/diff.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,74 @@
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+	background-color: white;
+}
+td.diff-otitle,
+td.diff-ntitle {
+	text-align: center;
+}
+td.diff-marker {
+	text-align: right;
+}
+.rtl td.diff-marker {
+	text-align: left;
+}
+td.diff-lineno {
+	font-weight: bold;
+}
+td.diff-addedline {
+	background: #cfc;
+	font-size: smaller;
+}
+td.diff-deletedline {
+	background: #ffa;
+	font-size: smaller;
+}
+td.diff-context {
+	background: #eee;
+	font-size: smaller;
+}
+.diffchange {
+	color: red;
+	font-weight: bold;
+	text-decoration: none;
+}
+
+table.diff {
+	border: none;
+	width: 98%;
+	border-spacing: 4px;
+	
+	/* Fixed layout is required to ensure that cells containing long URLs
+	   don't widen in Safari, Internet Explorer, or iCab */
+	table-layout: fixed;
+}
+table.diff td {
+	padding: 0;
+}
+table.diff col.diff-marker {
+	width: 2%;
+}
+table.diff col.diff-content {
+	width: 48%;
+}
+table.diff td div {
+	/* Force-wrap very long lines such as URLs or page-widening char strings.
+	   CSS 3 draft..., but Gecko doesn't support it yet:
+	   https://bugzilla.mozilla.org/show_bug.cgi?id=99457 */
+	word-wrap: break-word;
+	
+	/* As fallback, scrollbars will be added for very wide cells
+	   instead of text overflowing or widening */
+	overflow: auto;
+	
+	/* The above rule breaks on very old versions of Mozilla due
+	   to a bug which collapses the table cells to a single line.
+	   
+	   In Mozilla 1.1 and below with JavaScript enabled, the rule
+	   will be overridden with this by diff.js; wide cell contents
+	   then spill horizontally without widening the rest of the
+	   table: */
+	/* overflow: visible; */
+}

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/diff.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/diff.js	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/diff.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,20 @@
+/*
+Workaround for overflow bug in Mozilla 1.1 and earlier, where scrolling
+<div>s in <td> cells collapse their height to a single line.
+
+Known to be fixed in 1.2.1 (Gecko 20021130), but the CSS hacks I've tried
+with overflow-x disable the scrolling all the way until Mozilla 1.8 / FF 1.5
+and break Opera as well.
+
+So... we check for reaaaally old Gecko and hack in an alternate rule to let
+the wide cells spill instead of scrolling them. Not ideal as it won't work
+if JS is disabled, of course.
+*/
+
+if (navigator && navigator.product == "Gecko" && navigator.productSub < "20021130") {
+	var sheets = document.styleSheets;
+	var lastSheet = sheets[sheets.length-1];
+	lastSheet.insertRule(
+		"table.diff td div { overflow: visible; }",
+		lastSheet.cssRules.length);
+}
\ No newline at end of file

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/Arr_u.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/Arr_u.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/Checker-16x16.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/Checker-16x16.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_first_25.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_first_25.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_last_25.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_last_25.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_left_25.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_left_25.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_right_25.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_disabled_right_25.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_first.svg
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_first.svg	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_first.svg	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="512.85712"
+   height="600"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.44"
+   version="1.0"
+   sodipodi:docbase="C:\htdocs\w\skins\common\images"
+   sodipodi:docname="big_arrow_first.svg"
+   inkscape:export-filename="C:\htdocs\w\skins\common\images\big_arrow_left.png"
+   inkscape:export-xdpi="5.0520902"
+   inkscape:export-ydpi="5.0520902">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="375"
+     inkscape:cy="520"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="600.24px"
+     height="600.88px"
+     inkscape:window-width="853"
+     inkscape:window-height="573"
+     inkscape:window-x="66"
+     inkscape:window-y="87" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-239.3783,-208.0743)">
+    <path
+       sodipodi:type="star"
+       style="fill:#00a;fill-opacity:1;fill-rule:evenodd;stroke:#00a;stroke-width:10.35552788;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path1874"
+       sodipodi:sides="3"
+       sodipodi:cx="94.285713"
+       sodipodi:cy="343.79074"
+       sodipodi:r1="75.484825"
+       sodipodi:r2="37.742413"
+       sodipodi:arg1="1.056345"
+       sodipodi:arg2="2.1035426"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 131.42857,409.50502 L 18.804046,343.10026 L 132.62452,278.76694 L 131.42857,409.50502 z "
+       transform="matrix(3.596688,0,0,4.278606,254.9147,-964.348)" />
+    <rect
+       style="fill:#00a;fill-opacity:1;stroke:#00a;stroke-width:39.31948471;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3737"
+       width="20.680517"
+       height="560.68054"
+       x="259.03799"
+       y="227.73401" />
+  </g>
+</svg>

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_first_25.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_first_25.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_last_25.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_last_25.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_left.svg
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_left.svg	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_left.svg	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="450"
+   height="600"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.44"
+   version="1.0"
+   sodipodi:docbase="C:\htdocs\w\skins\common\images"
+   sodipodi:docname="big_arrow_left.svg"
+   inkscape:export-filename="C:\htdocs\w\skins\common\images\big_arrow_left.png"
+   inkscape:export-xdpi="5.0520902"
+   inkscape:export-ydpi="5.0520902">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="375"
+     inkscape:cy="520"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="600.24px"
+     height="600.88px"
+     inkscape:window-width="853"
+     inkscape:window-height="573"
+     inkscape:window-x="66"
+     inkscape:window-y="87" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-302.2354,-208.0743)">
+    <path
+       sodipodi:type="star"
+       style="fill:#00a;fill-opacity:1;fill-rule:evenodd;stroke:#00a;stroke-width:10.35552788;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path1874"
+       sodipodi:sides="3"
+       sodipodi:cx="94.285713"
+       sodipodi:cy="343.79074"
+       sodipodi:r1="75.484825"
+       sodipodi:r2="37.742413"
+       sodipodi:arg1="1.056345"
+       sodipodi:arg2="2.1035426"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 131.42857,409.50502 L 18.804046,343.10026 L 132.62452,278.76694 L 131.42857,409.50502 z "
+       transform="matrix(3.596688,0,0,4.278606,254.9147,-964.348)" />
+  </g>
+</svg>

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_left_25.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_left_25.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_right_25.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/arrow_right_25.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/icons/fileicon-djvu.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/icons/fileicon-djvu.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/icons/fileicon-djvu.xcf
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/icons/fileicon-djvu.xcf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/icons/fileicon-ogg.xcf
===================================================================
(Binary files differ)

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/mediawiki-large.xcf
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/mediawiki-large.xcf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/mediawiki-largesquare.xcf
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/mediawiki-largesquare.xcf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_down.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_down.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_none.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_none.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_up.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/sort_up.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/spinner.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/common/images/spinner.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/metadata.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/metadata.js	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/metadata.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -11,17 +11,17 @@
 		var box = document.getElementById(tableId);
 		if (!box)
 			return false;
-		
+
 		var tbody = box.getElementsByTagName('tbody')[0];
-		
+
 		var row = document.createElement('tr');
-		
+
 		var col = document.createElement('td');
 		col.colSpan = 2;
-		
+
 		var link = document.createElement('a');
 		link.href = '#';
-		
+
 		link.onclick = function() {
 			if (box.className == 'mw_metadata collapsed') {
 				changeText(link, hideText);
@@ -32,17 +32,17 @@
 			}
 			return false;
 		}
-		
+
 		var text = document.createTextNode(hideText);
-		
+
 		link.appendChild(text);
 		col.appendChild(link);
 		row.appendChild(col);
 		tbody.appendChild(row);
-		
+
 		// And collapse!
 		link.onclick();
-		
+
 		return true;
 	}
 	return false;

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/nostalgia.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/nostalgia.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/nostalgia.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,4 +1,3 @@
- at import url("common.css?1");
 body {
 	/* Background color is set separately on page type */
 	color: black;

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/oldshared.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/oldshared.css	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/oldshared.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,466 @@
+/*
+ * oldshared.css
+ * This file contains CSS settings common to Wikistandard, Nostalgia and
+ * CologneBlue, the old pre-Monobook skins
+ */
+
+/* For clarity, explicitly state some recommendations from <http://www.w3.org/
+   TR/CSS21/sample.html> to make sure the editsection links scale right */
+
+h1 { font-size: 2em; }
+h2 { font-size: 1.5em; }
+h3 { font-size: 1.17em; }
+h5 { font-size: .83em; }
+h6 { font-size: .75em; }
+h1, h2, h3, h4, h5, h6 { font-weight: bolder }
+
+/* Now the custom parts */
+
+/* Make edit sections (which are inside h# tags) normal-sized */
+.editsection {
+	font-weight: normal;
+}
+h1 .editsection { font-size: 50% }
+h2 .editsection { font-size: 66.7% }
+h3 .editsection { font-size: 85.5% }
+h5 .editsection { font-size: 120% }
+h6 .editsection { font-size: 133% }
+
+#footer { clear: both }
+/* images */
+div.floatright { float: right; clear: right; margin: 0 0 1em 1em; }
+div.floatright p { font-style: italic; }
+div.floatleft { float: left; clear: left; margin: 0.3em 0.5em 0.5em 0; }
+div.floatleft p { font-style: italic; }
+
+
+/* Print-specific things to hide */
+.printfooter {
+        display: none;
+}
+
+/* table standards */
+table.rimage {
+        float:right;
+        margin-left:1em;
+        margin-bottom:1em;
+        text-align:center;
+        font-size:smaller;
+}
+
+/* thumbnails */
+div.thumb {
+	margin-bottom: .5em;
+	border-style: solid;
+	border-color: white;
+	width: auto;
+}
+div.thumbinner {
+	border: 1px solid #ccc;
+	padding: 3px !important;
+	background-color: #f9f9f9;
+	font-size: 94%;
+	text-align: center;
+	overflow: hidden;
+}
+html .thumbimage {
+	border: 1px solid #ccc;
+}
+html .thumbcaption {
+	border: none;
+	text-align: left;
+	line-height: 1.4em;
+	padding: 3px !important;
+	font-size: 94%;
+}
+div.magnify {
+	float: right;
+	border: none !important;
+	background: none !important;
+}
+div.magnify a, div.magnify img {
+	display: block;
+	border: none !important;
+	background: none !important;
+}
+div.tright {
+	clear: right;
+	float: right;
+	border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+	float: left;
+	clear: left;
+	margin-right: .5em;
+	border-width: .5em 1.4em .8em 0;
+}
+img.thumbborder {
+	border: 1px solid #dddddd;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment { color: #4b4b4b; }
+#pagehistory span.user {
+    margin-left: 1.4em;
+    margin-right: 0.4em;
+}
+#pagehistory span.minor { font-weight: bold; }
+#pagehistory li { border: 1px solid White; }
+#pagehistory li.selected {
+    background-color:#f9f9f9;
+    border:1px dashed #aaaaaa;
+}
+
+img { border: none; }
+
+#toc,
+.toc {
+	border: 1px solid #bba;
+	background-color: #f7f8ff;
+	padding: 5px;
+	font-size: 95%;
+	text-align: center;
+}
+#toc h2,
+.toc h2 {
+	display: inline;
+	border: none;
+	padding: 0;
+	font-size: 100%;
+	font-weight: bold;
+}
+#toc ul,
+.toc ul {
+	list-style-type: none;
+	list-style-image: none;
+	margin-left: 0;
+	padding-left: 0;
+	text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+	margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+	font-size: 94%;
+}
+
+
+.error {
+	color: red;
+	font-size: larger;
+}
+
+/* preference page with js-genrated toc */
+#preftoc {
+    float: left;
+    margin: 1em 1em 1em 1em;
+    width: 13em;
+}
+#preftoc li { border: 1px solid White; }
+#preftoc li.selected {
+    background-color:#f9f9f9;
+    border:1px dashed #aaaaaa;
+}
+#preftoc a,
+#preftoc a:active {
+    display: block;
+    color: #005189;
+}
+#prefcontrol {
+    clear: left;
+    float: left;
+    margin-top: 1em;
+}
+div.prefsectiontip {
+    font-size: 94%;
+    margin-top: 0.4em;
+    color: #666;
+}
+fieldset.prefsection { margin-top: 1em }
+fieldset.operaprefsection { margin-left: 15em }
+
+/* emulate center */
+.center {
+    width: 100%;
+    text-align: center;
+}
+*.center * {
+    margin-left: auto;
+    margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * { font-size: 94%; }
+table.small { font-size: 100% }
+
+div.townBox {
+    position:relative;
+    float:right;
+    background:White;
+    margin-left:1em;
+    border: 1px solid gray;
+    padding:0.3em;
+    width: 200px;
+    overflow: hidden;
+    clear: right;
+}
+div.townBox dl {
+    padding: 0;
+    margin: 0 0 0.3em 0;
+    font-size: 96%;
+}
+div.townBox dl dt {
+    background: none;
+    margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+    margin: 0.1em 0 0 1.1em;
+    background-color: #f3f3f3;
+}
+/* use this instead of #toc for page content */
+.toccolours {
+    border:1px solid #aaaaaa;
+    background-color:#f9f9f9;
+    padding:5px;
+    font-size: 95%;
+}
+#siteNotice {
+    border:1px solid #aaaaaa;
+    padding-left: 0.5em;
+    padding-right: 0.5em;
+}
+.redirectText {
+	font-size:150%;
+	margin:5px;
+}
+.searchmatch {
+	color: red;
+	font-weight: bold;
+}
+.sharedUploadNotice {
+	font-style: italic;
+}
+span.unpatrolled {
+	font-weight:bold;
+	color:red;
+}
+
+span.updatedmarker {
+	color:black;
+	background-color:#00FF00;
+}
+
+table.gallery {
+        border:  1px solid #cccccc;
+        margin:  2px;
+        padding: 2px;
+        background-color:#ffffff;
+}
+
+table.gallery tr {
+    vertical-align:top;
+}
+
+table.gallery td {
+      vertical-align:top;
+      background-color:#f9f9f9;
+      border: solid 2px white;
+}
+
+div.gallerybox {
+        margin: 2px;
+        width:  150px;
+}
+
+div.gallerybox div.thumb {
+        text-align: center;
+        border: 1px solid #cccccc;
+        margin: 2px;
+}
+
+div.gallerytext {
+	overflow: hidden;
+        font-size: 94%;
+        padding: 2px 4px;
+}
+
+span.comment {
+	font-style: italic;
+}
+
+span.changedby {
+	font-size: 95%;
+}
+
+.previewnote {
+	text-align: center;
+	color: #cc0000;
+}
+.editExternally {
+        border-style:solid;
+        border-width:1px;
+        border-color:gray;
+        background: #ffffff;
+        padding:3px;
+        margin-top:0.5em;
+        float:left;
+        font-size:small;
+        text-align:center;
+}
+.editExternallyHelp {
+        font-style:italic;
+        color:gray;
+}
+
+li span.deleted {
+	text-decoration: line-through;
+	color: #888;
+	font-style: italic;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+	margin-left: 0.5em;
+}
+
+table.mw_metadata caption { font-weight: bold; }
+table.mw_metadata th { font-weight: normal; }
+table.mw_metadata td { padding: 0.1em; }
+
+table.mw_metadata {
+	border: none;
+	border-collapse: collapse;
+}
+table.mw_metadata td, table.mw_metadata th {
+	border: 1px solid #aaaaaa;
+	padding-left: 4px;
+	padding-right: 4px;
+}
+table.mw_metadata th {
+	background-color: #f9f9f9;
+}
+table.mw_metadata td {
+	background-color: #fcfcfc;
+}
+table.mw_metadata td.spacer {
+	background: inherit;
+	border-top: none;
+	border-bottom: none;
+}
+table.collapsed tr.collapsable {
+	display: none;
+}
+
+.visualClear {
+    clear: both;
+}
+
+#mw_trackbacks {
+	border: solid 1px #bbbbff;
+	background-color: #eeeeff;
+	padding: 0.2em;
+}
+
+/* Allmessages table */
+
+#allmessagestable th {
+	background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+	background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+	background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+	background-color: #f0f0ff;
+}
+
+#jump-to-nav {
+  display: none;
+}
+
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+	font-weight: bold;
+}
+table.gallery caption {
+	font-weight: bold;
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+	border: 0.15em solid #777777;
+	padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1em; }
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+	font-size: 90%;
+	float: right;
+}
+
+/* Recreating-deleted-page/reupload file warning and log entries */
+div#mw-upload-deleted-warn ul li,
+div#mw-recreate-deleted-warn ul li {
+	font-size: 95%;
+}
+
+
+.MediaTransformError {
+	border: thin solid #777;
+	background-color: #ccc;
+	padding: 0.1em;
+}
+.MediaTransformError td {
+	text-align: center;
+	vertical-align: middle;
+	font-size: 90%;
+}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/preview.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/preview.js	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/preview.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,5 +1,19 @@
-// Live preview
+/**
+ * Live preview script for MediaWiki
+ *
+ * 2007-04-25 – Nikerabbit:
+ *   Worked around text cutoff in mozilla-based browsers
+ *   Support for categories
+ */
 
+
+lpIdPreview = 'wikiPreview';
+lpIdCategories = 'catlinks';
+lpIdDiff = 'wikiDiff';
+
+/*
+ * Returns XMLHttpRequest based on browser support or null
+ */
 function openXMLHttpRequest() {
 	if( window.XMLHttpRequest ) {
 		return new XMLHttpRequest();
@@ -15,39 +29,147 @@
  * Returns true if could open the request,
  * false otherwise (eg no browser support).
  */
-function livePreview(target, text, postUrl) {
-	prevTarget = target;
-	if( !target ) {
-		window.alert('Live preview failed!\nTry normal preview.');
-		var fallback = document.getElementById('wpPreview');
-		if ( fallback ) { fallback.style.display = 'inline'; }
-	}
-	prevReq = openXMLHttpRequest();
-	if( !prevReq ) return false;
-	
-	prevReq.onreadystatechange = updatePreviewText;
-	prevReq.open("POST", postUrl, true);
-	
+function lpDoPreview(text, postUrl) {
+	lpRequest = openXMLHttpRequest();
+	if( !lpRequest ) return false;
+
+	lpRequest.onreadystatechange = lpStatusUpdate;
+	lpRequest.open("POST", postUrl, true);
+
 	var postData = 'wpTextbox1=' + encodeURIComponent(text);
-	prevReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-	prevReq.send(postData);
+	lpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+	lpRequest.send(postData);
 	return true;
 }
 
-function updatePreviewText() {
-	if( prevReq.readyState != 4 ) {
+function lpStatusUpdate() {
+
+	/* We are at some stage of loading */
+	if (lpRequest.readyState > 0 && lpRequest.readyState < 4) {
+		notify(i18n(wgLivepreviewMessageLoading));
+	}
+
+	/* Not loaded yet */
+	if(lpRequest.readyState != 4) {
 		return;
 	}
-	if( prevReq.status != 200 ) {
-		window.alert('Failed to connect: ' + prevReq.status +
-			' "' + prevReq.statusText + '"');
-		var fallback = document.getElementById('wpPreview');
-		if ( fallback ) { fallback.style.display = 'inline'; }
+
+	/* We got response, bug it not what we wanted */
+	if( lpRequest.status != 200 ) {
+		var keys = new Array();
+		keys[0] = lpRequest.status;
+		keys[1] = lpRequest.statusText;
+		window.alert(i18n(wgLivepreviewMessageError, keys));
+		lpShowNormalPreview();
 		return;
 	}
-	prevTarget.innerHTML = prevReq.responseText;
 
+	/* All good */
+	dismissNotify(i18n(wgLivepreviewMessageReady), 750);
+
+	
+	var XMLObject = lpRequest.responseXML.documentElement;
+
+
+	/* Work around Firefox (Gecko?) limitation where it shows only the first 4096
+	 * bytes of data. Ref: http://www.thescripts.com/forum/thread482760.html
+	 */
+	XMLObject.normalize();
+
+	var previewElement = XMLObject.getElementsByTagName('preview')[0];
+	var categoryElement = XMLObject.getElementsByTagName('category')[0];
+
 	/* Hide the active diff if it exists */
-	var diff = document.getElementById('wikiDiff');
+	var diff = document.getElementById(lpIdDiff);
 	if ( diff ) { diff.style.display = 'none'; }
+
+	/* Inject preview */
+	var previewContainer = document.getElementById( lpIdPreview );
+	if ( previewContainer && previewElement ) {
+		previewContainer.innerHTML = previewElement.firstChild.data;
+	} else {
+		/* Should never happen */
+		window.alert(i18n(wgLivepreviewMessageFailed));
+		lpShowNormalPreview();
+		return;
+	}
+		
+
+	/* Inject categories */
+	var categoryContainer  = document.getElementById( lpIdCategories );
+	if ( categoryElement && categoryElement.firstChild ) {
+		if ( categoryContainer ) {
+			categoryContainer.innerHTML = categoryElement.firstChild.data;
+			/* May be hidden */
+			categoryContainer.style.display = 'block';
+		} else {
+			/* Just dump them somewhere */
+	/*		previewContainer.innerHTML += '<div id="catlinks">' +
+				categoryElement.firstChild.data + '</div>';*/
+		}
+	} else {
+		/* Nothing to show, hide old data */
+		if ( categoryContainer ) {
+			categoryContainer.style.display = 'none';
+		}
+	}
+
 }
+
+function lpShowNormalPreview() {
+	var fallback = document.getElementById('wpPreview');
+	if ( fallback ) { fallback.style.display = 'inline'; }
+}
+
+
+// TODO: move elsewhere
+/* Small non-intrusive popup which can be used for example to notify the user
+ * about completed AJAX action. Supports only one notify at a time.
+ */
+function notify(message) {
+	var notifyElement = document.getElementById('mw-js-notify');
+	if ( !notifyElement ) {
+		createNotify();
+		var notifyElement = document.getElementById('mw-js-notify');
+	}
+	notifyElement.style.display = 'block';
+	notifyElement.innerHTML = message;
+}
+
+function dismissNotify(message, timeout) {
+	var notifyElement = document.getElementById('mw-js-notify');
+	if ( notifyElement ) {
+		if ( timeout == 0 ) {
+			notifyElement.style.display = 'none';
+		} else {
+			notify(message);
+			setTimeout("dismissNotify('', 0)", timeout);
+		}
+	}
+}
+
+function createNotify() {
+	var div = document.createElement("div");
+	var txt = '###PLACEHOLDER###'
+	var txtNode = document.createTextNode(txt);
+	div.appendChild(txtNode);
+	div.id = 'mw-js-notify';
+	// TODO: move styles to css
+	div.setAttribute('style',
+		'display: none; position: fixed; bottom: 0px; right: 0px; color: white; background-color: DarkRed; z-index: 5; padding: 0.1em 1em 0.1em 1em; font-size: 120%;');
+	var body = document.getElementsByTagName('body')[0];
+	body.appendChild(div);
+}
+
+
+
+/* Helper function similar to wfMsgReplaceArgs() */
+function i18n(message, keys) {
+	var localMessage = message;
+	if ( !keys ) { return localMessage; }
+	for( var i = 0; i < keys.length; i++) {
+		var myregexp = new RegExp("\\$"+(i+1), 'g');
+		localMessage = localMessage.replace(myregexp, keys[i]);
+	}
+	return localMessage;
+}
\ No newline at end of file

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/protect.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/protect.js	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/protect.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,57 +1,124 @@
-function protectInitialize(tableId, labelText) {
-	if (document.createTextNode) {
-		var box = document.getElementById(tableId);
-		if (!box)
-			return false;
+/**
+ * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
+ * on the protection form
+ *
+ * @param String tableId Identifier of the table containing UI bits
+ * @param String labelText Text to use for the checkbox label
+ */
+function protectInitialize( tableId, labelText, types ) {
+	if( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) )
+		return false;
 		
-		var tbody = box.getElementsByTagName('tbody')[0];
-		var row = document.createElement('tr');
-		tbody.appendChild(row);
+	var box = document.getElementById( tableId );
+	if( !box )
+		return false;
 		
-		row.appendChild(document.createElement('td'));
-		var col2 = document.createElement('td');
-		row.appendChild(col2);
-		
-		var check = document.createElement('input');
-		check.id = "mwProtectUnchained";
-		check.type = "checkbox";
-		check.onclick = protectChainUpdate;
-		col2.appendChild(check);
-		
-		var label = document.createElement('label');
-		label.setAttribute("for", "mwProtectUnchained");
-		label.appendChild(document.createTextNode(labelText));
-		col2.appendChild(label);
-		
-		if (protectAllMatch()) {
-			check.checked = false;
-			protectEnable(false);
-		} else {
-			check.checked = true;
-			protectEnable(true);
+	var tbody = box.getElementsByTagName( 'tbody' )[0];
+	var row = document.createElement( 'tr' );
+	tbody.appendChild( row );
+	
+	row.appendChild( document.createElement( 'td' ) );
+	var col = document.createElement( 'td' );
+	row.appendChild( col );
+	// If there is only one protection type, there is nothing to chain
+	if( types > 1 ) {
+		var check = document.createElement( 'input' );
+		check.id = 'mwProtectUnchained';
+		check.type = 'checkbox';
+		col.appendChild( check );
+		addClickHandler( check, protectChainUpdate );
+
+		col.appendChild( document.createTextNode( ' ' ) );
+		var label = document.createElement( 'label' );
+		label.htmlFor = 'mwProtectUnchained';
+		label.appendChild( document.createTextNode( labelText ) );
+		col.appendChild( label );
+
+		check.checked = !protectAllMatch();
+		protectEnable( check.checked );
+	}
+	
+	setCascadeCheckbox();
+	
+	return true;
+}
+
+/**
+* Determine if, given the cascadeable protection levels
+* and what is currently selected, if the cascade box 
+* can be checked
+*
+* @return boolean
+*
+*/
+function setCascadeCheckbox() {
+	// For non-existent titles, there is no cascade option
+	if( !document.getElementById( 'mwProtect-cascade' ) ) {
+		return false;
+	}
+	var lists = protectSelectors();
+	for( var i = 0; i < lists.length; i++ ) {
+		if( lists[i].selectedIndex > -1 ) {
+			var items = lists[i].getElementsByTagName( 'option' );
+			var selected = items[ lists[i].selectedIndex ].value;
+			if( !isCascadeableLevel(selected) ) {
+				document.getElementById( 'mwProtect-cascade' ).checked = false;
+				document.getElementById( 'mwProtect-cascade' ).disabled = true;
+				return false;
+			}
 		}
-		
-		return true;
 	}
-	return false;
+	document.getElementById( 'mwProtect-cascade' ).disabled = false;
+	return true;
 }
 
+/**
+* Is this protection level cascadeable?
+* @param String level
+*
+* @return boolean
+*
+*/
+function isCascadeableLevel( level ) { 	 
+	for (var k = 0; k < wgCascadeableLevels.length; k++) { 	 
+		if ( wgCascadeableLevels[k] == level ) { 	 
+			return true; 	 
+		} 
+	} 	 
+	return false; 	 
+}
+
+/**
+ * When protection levels are locked together, update the rest
+ * when one action's level changes
+ *
+ * @param Element source Level selector that changed
+ */
 function protectLevelsUpdate(source) {
-	if (!protectUnchained()) {
-		protectUpdateAll(source.selectedIndex);
-	}
+	if( !protectUnchained() )
+		protectUpdateAll( source.selectedIndex );
+	setCascadeCheckbox();
 }
 
+/**
+ * Update chain status and enable/disable various bits of the UI
+ * when the user changes the "unlock move permissions" checkbox
+ */
 function protectChainUpdate() {
-	if (protectUnchained()) {
-		protectEnable(true);
+	if( protectUnchained() ) {
+		protectEnable( true );
 	} else {
 		protectChain();
-		protectEnable(false);
+		protectEnable( false );
 	}
+	setCascadeCheckbox();
 }
 
-
+/**
+ * Are all actions protected at the same level?
+ *
+ * @return boolean
+ */
 function protectAllMatch() {
 	var values = new Array();
 	protectForSelectors(function(set) {
@@ -65,17 +132,22 @@
 	return true;
 }
 
+/**
+ * Is protection chaining on or off?
+ *
+ * @return bool
+ */
 function protectUnchained() {
-	var unchain = document.getElementById("mwProtectUnchained");
-	if (!unchain) {
-		alert("This shouldn't happen");
-		return false;
-	}
-	return unchain.checked;
+	var unchain = document.getElementById( 'mwProtectUnchained' );
+	return unchain
+		? unchain.checked
+		: true; // No control, so we need to let the user set both levels
 }
 
+/**
+ * Find the highest-protected action and set all others to that level
+ */
 function protectChain() {
-	// Find the highest-protected action and bump them all to this level
 	var maxIndex = -1;
 	protectForSelectors(function(set) {
 		if (set.selectedIndex > maxIndex) {
@@ -85,6 +157,11 @@
 	protectUpdateAll(maxIndex);
 }
 
+/**
+ * Protect all actions at the specified level
+ *
+ * @param int index Protection level
+ */
 function protectUpdateAll(index) {
 	protectForSelectors(function(set) {
 		if (set.selectedIndex != index) {
@@ -93,6 +170,11 @@
 	});
 }
 
+/**
+ * Apply a callback to each protection selector
+ *
+ * @param callable func Callback function
+ */
 function protectForSelectors(func) {
 	var selectors = protectSelectors();
 	for (var i = 0; i < selectors.length; i++) {
@@ -100,6 +182,11 @@
 	}
 }
 
+/**
+ * Get a list of all protection selectors on the page
+ *
+ * @return Array
+ */
 function protectSelectors() {
 	var all = document.getElementsByTagName("select");
 	var ours = new Array();
@@ -112,6 +199,11 @@
 	return ours;
 }
 
+/**
+ * Enable/disable protection selectors
+ *
+ * @param boolean val Enable?
+ */
 function protectEnable(val) {
 	// fixme
 	var first = true;

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/common/shared.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/shared.css	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/shared.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,79 @@
+/**
+ * CSS in this file is used by *all* skins (that have any CSS at all).  Be
+ * careful what you put in here, since what looks good in one skin may not in
+ * another, but don't ignore the poor non-Monobook users either.
+ */
+.mw-plusminus-null { color: #aaa; }
+
+.texvc { direction: ltr; unicode-bidi: embed; }
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
+
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+div#mw-js-message {
+	margin: 1em 5%;
+	padding: 0.5em 2.5%;
+	border: solid 1px #ddd;
+	background-color: #fcfcfc;
+}
+
+/* Edit section links */
+.editsection {
+	float: right;
+	margin-left: 5px;
+}
+
+/**
+ * File histories
+ */
+table.filehistory {
+	border:1px solid #ccc;
+	border-collapse:collapse;
+}
+
+table.filehistory th,
+table.filehistory td {
+	padding: 0 0.2em 0 0.2em;
+	vertical-align:top;
+	border:1px solid #ccc;
+}
+table.filehistory th {
+	text-align: left;
+}
+table.filehistory td.mw-imagepage-filesize,
+table.filehistory th.mw-imagepage-filesize {
+	white-space:nowrap;
+}
+
+/*
+ * rev_deleted stuff
+ */
+li span.deleted, span.history-deleted {
+	text-decoration: line-through;
+	color: #888;
+	font-style: italic;
+}
+
+/**
+ * Forms
+ */
+body.ltr td.mw-label { text-align: right; }
+body.ltr td.mw-input { text-align: left; }
+body.ltr td.mw-submit { text-align: left; }
+body.rtl td.mw-label { text-align: left; }
+body.rtl td.mw-input { text-align: right; }
+body.rtl td.mw-submit { text-align: right; }
+
+td.mw-label { vertical-align: top; }
+td.mw-submit { white-space: nowrap; }
+
+/**
+ * Image captions
+ */
+body.rtl .thumbcaption { text-align:right; }
+body.rtl .magnify { float:left; }
+
+body.ltr .thumbcaption { text-align:left; }
+body.ltr .magnify { float:right; }

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/sticky.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/sticky.js	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/sticky.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -36,7 +36,7 @@
 // emulate css 'position: fixed' in IE5+ Win
 // code by aclover at 1value.com
 	fix_elements = new Array();
-	
+
 	function fix_event(){
 		var i;
 		for (i=0; i < fix_elements.length; i++){
@@ -95,7 +95,7 @@
 		else if(document.all){this.css=document.all[eID].style;}
 		return this
 	}
-	
+
 	function checkBrowser(){
 		this.ver=navigator.appVersion;
 		this.name=navigator.appName;
@@ -112,13 +112,13 @@
 		this.standards=document.getElementById?true:false;
 		this.dhtml=this.standards||this.ie4||this.ns4;
 	}
-	
+
 	function showMe(eID){
 		myFloater=new makeLayerObj(eID)
 		myFloater.css.visibility="visible";
 	}
-	
+
 	function hideMe(eID){
 		myFloater=new makeLayerObj(eID)
 		myFloater.css.visibility="hidden";
-	}
\ No newline at end of file
+	}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/upload.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/upload.js	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/upload.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,23 +1,176 @@
 function licenseSelectorCheck() {
-	var selector = document.getElementById("wpLicense");
-	if (selector.selectedIndex > 0 &&
-		selector.options[selector.selectedIndex].value == "" ) {
-		// Browser is broken, doesn't respect disabled attribute on <option>
-		selector.selectedIndex = 0;
+	var selector = document.getElementById( "wpLicense" );
+	var selection = selector.options[selector.selectedIndex].value;
+	if( selector.selectedIndex > 0 ) {
+		if( selection == "" ) {
+			// Option disabled, but browser is broken and doesn't respect this
+			selector.selectedIndex = 0;
+		}
 	}
+	// We might show a preview
+	wgUploadLicenseObj.fetchPreview( selection );
 }
 
 function licenseSelectorFixup() {
 	// for MSIE/Mac; non-breaking spaces cause the <option> not to render
 	// but, for some reason, setting the text to itself works
 	var selector = document.getElementById("wpLicense");
-	var ua = navigator.userAgent;
-	var isMacIe = (ua.indexOf("MSIE") != -1) && (ua.indexOf("Mac") != -1);
-	if (isMacIe) {
-		for (var i = 0; i < selector.options.length; i++) {
-			selector.options[i].text = selector.options[i].text;
+	if (selector) {
+		var ua = navigator.userAgent;
+		var isMacIe = (ua.indexOf("MSIE") != -1) && (ua.indexOf("Mac") != -1);
+		if (isMacIe) {
+			for (var i = 0; i < selector.options.length; i++) {
+				selector.options[i].text = selector.options[i].text;
+			}
 		}
 	}
 }
 
-addOnloadHook(licenseSelectorFixup);
+var wgUploadWarningObj = {
+	'responseCache' : { '' : '&nbsp;' },
+	'nameToCheck' : '',
+	'typing': false,
+	'delay': 500, // ms
+	'timeoutID': false,
+
+	'keypress': function () {
+		if ( !wgAjaxUploadDestCheck || !sajax_init_object() ) return;
+
+		// Find file to upload
+		var destFile = document.getElementById('wpDestFile');
+		var warningElt = document.getElementById( 'wpDestFile-warning' );
+		if ( !destFile || !warningElt ) return ;
+
+		this.nameToCheck = destFile.value ;
+
+		// Clear timer 
+		if ( this.timeoutID ) {
+			window.clearTimeout( this.timeoutID );
+		}
+		// Check response cache
+		for (cached in this.responseCache) {
+			if (this.nameToCheck == cached) {
+				this.setWarning(this.responseCache[this.nameToCheck]);
+				return;
+			}
+		}
+
+		this.timeoutID = window.setTimeout( 'wgUploadWarningObj.timeout()', this.delay );
+	},
+
+	'checkNow': function (fname) {
+		if ( !wgAjaxUploadDestCheck || !sajax_init_object() ) return;
+		if ( this.timeoutID ) {
+			window.clearTimeout( this.timeoutID );
+		}
+		this.nameToCheck = fname;
+		this.timeout();
+	},
+	
+	'timeout' : function() {
+		if ( !wgAjaxUploadDestCheck || !sajax_init_object() ) return;
+		injectSpinner( document.getElementById( 'wpDestFile' ), 'destcheck' );
+
+		// Get variables into local scope so that they will be preserved for the 
+		// anonymous callback. fileName is copied so that multiple overlapping 
+		// ajax requests can be supported.
+		var obj = this;
+		var fileName = this.nameToCheck;
+		sajax_do_call( 'UploadForm::ajaxGetExistsWarning', [this.nameToCheck], 
+			function (result) {
+				obj.processResult(result, fileName)
+			}
+		);
+	},
+
+	'processResult' : function (result, fileName) {
+		removeSpinner( 'destcheck' );
+		this.setWarning(result.responseText);
+		this.responseCache[fileName] = result.responseText;
+	},
+
+	'setWarning' : function (warning) {
+		var warningElt = document.getElementById( 'wpDestFile-warning' );
+		var ackElt = document.getElementById( 'wpDestFileWarningAck' );
+		this.setInnerHTML(warningElt, warning);
+
+		// Set a value in the form indicating that the warning is acknowledged and 
+		// doesn't need to be redisplayed post-upload
+		if ( warning == '' || warning == '&nbsp;' ) {
+			ackElt.value = '';
+		} else {
+			ackElt.value = '1';
+		}
+	},
+
+	'setInnerHTML' : function (element, text) {
+		// Check for no change to avoid flicker in IE 7
+		if (element.innerHTML != text) {
+			element.innerHTML = text;
+		}
+	}
+}
+
+function fillDestFilename(id) {
+	if (!document.getElementById) {
+		return;
+	}
+	var path = document.getElementById(id).value;
+	// Find trailing part
+	var slash = path.lastIndexOf('/');
+	var backslash = path.lastIndexOf('\\');
+	var fname;
+	if (slash == -1 && backslash == -1) {
+		fname = path;
+	} else if (slash > backslash) {
+		fname = path.substring(slash+1, 10000);
+	} else {
+		fname = path.substring(backslash+1, 10000);
+	}
+
+	// Capitalise first letter and replace spaces by underscores
+	fname = fname.charAt(0).toUpperCase().concat(fname.substring(1,10000)).replace(/ /g, '_');
+
+	// Output result
+	var destFile = document.getElementById('wpDestFile');
+	if (destFile) {
+		destFile.value = fname;
+		wgUploadWarningObj.checkNow(fname) ;
+	}
+}
+
+var wgUploadLicenseObj = {
+	
+	'responseCache' : { '' : '' },
+
+	'fetchPreview': function( license ) {
+		if( !wgAjaxLicensePreview || !sajax_init_object() ) return;
+		for (cached in this.responseCache) {
+			if (cached == license) {
+				this.showPreview( this.responseCache[license] );
+				return;
+			}
+		}
+		injectSpinner( document.getElementById( 'wpLicense' ), 'license' );
+		sajax_do_call( 'UploadForm::ajaxGetLicensePreview', [license],
+			function( result ) {
+				wgUploadLicenseObj.processResult( result, license );
+			}
+		);
+	},
+
+	'processResult' : function( result, license ) {
+		removeSpinner( 'license' );
+		this.showPreview( result.responseText );
+		this.responseCache[license] = result.responseText;
+	},
+
+	'showPreview' : function( preview ) {
+		var previewPanel = document.getElementById( 'mw-license-preview' );
+		if( previewPanel.innerHTML != preview )
+			previewPanel.innerHTML = preview;
+	}
+	
+}
+
+addOnloadHook( licenseSelectorFixup );
\ No newline at end of file

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/wikibits.js
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/wikibits.js	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/wikibits.js	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,70 +1,61 @@
-// Wikipedia JavaScript support functions
+// MediaWiki JavaScript support functions
 
 var clientPC = navigator.userAgent.toLowerCase(); // Get client info
 var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
                 && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
-var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
+var is_safari = ((clientPC.indexOf('applewebkit')!=-1) && (clientPC.indexOf('spoofer')==-1));
 var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
+// For accesskeys
+var is_ff2_win = (clientPC.indexOf('firefox/2')!=-1 || clientPC.indexOf('minefield/3')!=-1) && clientPC.indexOf('windows')!=-1;
+var is_ff2_x11 = (clientPC.indexOf('firefox/2')!=-1 || clientPC.indexOf('minefield/3')!=-1) && clientPC.indexOf('x11')!=-1;
 if (clientPC.indexOf('opera') != -1) {
 	var is_opera = true;
 	var is_opera_preseven = (window.opera && !document.childNodes);
 	var is_opera_seven = (window.opera && document.childNodes);
+	var is_opera_95 = (clientPC.search(/opera\/(9.[5-9]|[1-9][0-9])/)!=-1);
 }
 
+// Global external objects used by this script.
+/*extern ta, stylepath, skin */
+
 // add any onload functions in this hook (please don't hard-code any events in the xhtml source)
-
 var doneOnloadHook;
 
-if (!window.onloadFuncts)
+if (!window.onloadFuncts) {
 	var onloadFuncts = [];
+}
 
 function addOnloadHook(hookFunct) {
 	// Allows add-on scripts to add onload functions
 	onloadFuncts[onloadFuncts.length] = hookFunct;
 }
 
-function runOnloadHook() {
-	// don't run anything below this for non-dom browsers
-	if (doneOnloadHook || !(document.getElementById && document.getElementsByTagName))
-		return;
-
-	histrowinit();
-	unhidetzbutton();
-	tabbedprefs();
-	akeytt();
-	scrollEditBox();
-	setupCheckboxShiftClick();
-
-	// Run any added-on functions
-	for (var i = 0; i < onloadFuncts.length; i++)
-		onloadFuncts[i]();
-
-	doneOnloadHook = true;
-}
-
 function hookEvent(hookName, hookFunct) {
-	if (window.addEventListener)
-		addEventListener(hookName, hookFunct, false);
-	else if (window.attachEvent)
-		attachEvent("on" + hookName, hookFunct);
+	if (window.addEventListener) {
+		window.addEventListener(hookName, hookFunct, false);
+	} else if (window.attachEvent) {
+		window.attachEvent("on" + hookName, hookFunct);
+	}
 }
 
-hookEvent("load", runOnloadHook);
-
 // document.write special stylesheet links
 if (typeof stylepath != 'undefined' && typeof skin != 'undefined') {
 	if (is_opera_preseven) {
 		document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera6Fixes.css">');
-	} else if (is_opera_seven) {
+	} else if (is_opera_seven && !is_opera_95) {
 		document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera7Fixes.css">');
 	} else if (is_khtml) {
 		document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/KHTMLFixes.css">');
 	}
 }
-// Un-trap us from framesets
-if (window.top != window)
-	window.top.location = window.location;
 
+if (wgBreakFrames) {
+	// Un-trap us from framesets
+	if (window.top != window) {
+		window.top.location = window.location;
+	}
+}
+
 // for enhanced RecentChanges
 function toggleVisibility(_levelId, _otherId, _linkId) {
 	var thisLevel = document.getElementById(_levelId);
@@ -81,29 +72,13 @@
 	}
 }
 
-// page history stuff
-// attach event handlers to the input elements on history page
-function histrowinit() {
-	var hf = document.getElementById('pagehistory');
-	if (!hf)
-		return;
-	var lis = hf.getElementsByTagName('li');
-	for (i = 0; i < lis.length; i++) {
-		var inputs = historyRadios(lis[i]);
-		if (inputs[0] && inputs[1]) {
-			inputs[0].onclick = diffcheck;
-			inputs[1].onclick = diffcheck;
-		}
-	}
-	diffcheck();
-}
-
 function historyRadios(parent) {
 	var inputs = parent.getElementsByTagName('input');
 	var radios = [];
 	for (var i = 0; i < inputs.length; i++) {
-		if (inputs[i].name == "diff" || inputs[i].name == "oldid")
+		if (inputs[i].name == "diff" || inputs[i].name == "oldid") {
 			radios[radios.length] = inputs[i];
+		}
 	}
 	return radios;
 }
@@ -113,78 +88,109 @@
 	var dli = false; // the li where the diff radio is checked
 	var oli = false; // the li where the oldid radio is checked
 	var hf = document.getElementById('pagehistory');
-	if (!hf)
-		return;
+	if (!hf) {
+		return true;
+	}
 	var lis = hf.getElementsByTagName('li');
-	for (i=0;i<lis.length;i++) {
+	for (var i=0;i<lis.length;i++) {
 		var inputs = historyRadios(lis[i]);
 		if (inputs[1] && inputs[0]) {
 			if (inputs[1].checked || inputs[0].checked) { // this row has a checked radio button
-				if (inputs[1].checked && inputs[0].checked && inputs[0].value == inputs[1].value)
+				if (inputs[1].checked && inputs[0].checked && inputs[0].value == inputs[1].value) {
 					return false;
+				}
 				if (oli) { // it's the second checked radio
 					if (inputs[1].checked) {
 						oli.className = "selected";
-						return false
+						return false;
 					}
 				} else if (inputs[0].checked) {
 					return false;
 				}
-				if (inputs[0].checked)
+				if (inputs[0].checked) {
 					dli = lis[i];
-				if (!oli)
+				}
+				if (!oli) {
 					inputs[0].style.visibility = 'hidden';
-				if (dli)
+				}
+				if (dli) {
 					inputs[1].style.visibility = 'hidden';
+				}
 				lis[i].className = "selected";
 				oli = lis[i];
 			}  else { // no radio is checked in this row
-				if (!oli)
+				if (!oli) {
 					inputs[0].style.visibility = 'hidden';
-				else
+				} else {
 					inputs[0].style.visibility = 'visible';
-				if (dli)
+				}
+				if (dli) {
 					inputs[1].style.visibility = 'hidden';
-				else
+				} else {
 					inputs[1].style.visibility = 'visible';
+				}
 				lis[i].className = "";
 			}
 		}
 	}
+	return true;
 }
 
+// page history stuff
+// attach event handlers to the input elements on history page
+function histrowinit() {
+	var hf = document.getElementById('pagehistory');
+	if (!hf) {
+		return;
+	}
+	var lis = hf.getElementsByTagName('li');
+	for (var i = 0; i < lis.length; i++) {
+		var inputs = historyRadios(lis[i]);
+		if (inputs[0] && inputs[1]) {
+			inputs[0].onclick = diffcheck;
+			inputs[1].onclick = diffcheck;
+		}
+	}
+	diffcheck();
+}
+
 // generate toc from prefs form, fold sections
 // XXX: needs testing on IE/Mac and safari
 // more comments to follow
 function tabbedprefs() {
 	var prefform = document.getElementById('preferences');
-	if (!prefform || !document.createElement)
+	if (!prefform || !document.createElement) {
 		return;
-	if (prefform.nodeName.toLowerCase() == 'a')
+	}
+	if (prefform.nodeName.toLowerCase() == 'a') {
 		return; // Occasional IE problem
+	}
 	prefform.className = prefform.className + 'jsprefs';
-	var sections = new Array();
-	children = prefform.childNodes;
+	var sections = [];
+	var children = prefform.childNodes;
 	var seci = 0;
-	for (i = 0; i < children.length; i++) {
+	for (var i = 0; i < children.length; i++) {
 		if (children[i].nodeName.toLowerCase() == 'fieldset') {
 			children[i].id = 'prefsection-' + seci;
 			children[i].className = 'prefsection';
-			if (is_opera || is_khtml)
+			if (is_opera || is_khtml) {
 				children[i].className = 'prefsection operaprefsection';
-			legends = children[i].getElementsByTagName('legend');
-			sections[seci] = new Object();
+			}
+			var legends = children[i].getElementsByTagName('legend');
+			sections[seci] = {};
 			legends[0].className = 'mainLegend';
-			if (legends[0] && legends[0].firstChild.nodeValue)
+			if (legends[0] && legends[0].firstChild.nodeValue) {
 				sections[seci].text = legends[0].firstChild.nodeValue;
-			else
+			} else {
 				sections[seci].text = '# ' + seci;
+			}
 			sections[seci].secid = children[i].id;
 			seci++;
-			if (sections.length != 1)
+			if (sections.length != 1) {
 				children[i].style.display = 'none';
-			else
+			} else {
 				var selectedid = children[i].id;
+			}
 		}
 	}
 	var toc = document.createElement('ul');
@@ -192,8 +198,9 @@
 	toc.selectedid = selectedid;
 	for (i = 0; i < sections.length; i++) {
 		var li = document.createElement('li');
-		if (i == 0)
+		if (i === 0) {
 			li.className = 'selected';
+		}
 		var a = document.createElement('a');
 		a.href = '#' + sections[i].secid;
 		a.onmousedown = a.onclick = uncoversection;
@@ -207,15 +214,15 @@
 }
 
 function uncoversection() {
-	oldsecid = this.parentNode.parentNode.selectedid;
-	newsec = document.getElementById(this.secid);
+	var oldsecid = this.parentNode.parentNode.selectedid;
+	var newsec = document.getElementById(this.secid);
 	if (oldsecid != this.secid) {
-		ul = document.getElementById('preftoc');
+		var ul = document.getElementById('preftoc');
 		document.getElementById(oldsecid).style.display = 'none';
 		newsec.style.display = 'block';
 		ul.selectedid = this.secid;
-		lis = ul.getElementsByTagName('li');
-		for (i = 0; i< lis.length; i++) {
+		var lis = ul.getElementsByTagName('li');
+		for (var i = 0; i< lis.length; i++) {
 			lis[i].className = '';
 		}
 		this.parentNode.className = 'selected';
@@ -239,9 +246,10 @@
 }
 
 function unhidetzbutton() {
-	tzb = document.getElementById('guesstimezonebutton')
-	if (tzb)
+	var tzb = document.getElementById('guesstimezonebutton');
+	if (tzb) {
 		tzb.style.display = 'inline';
+	}
 }
 
 // in [-]HH:MM format...
@@ -266,9 +274,10 @@
 	if (document.createTextNode) {
 		// Uses DOM calls to avoid document.write + XHTML issues
 
-		var linkHolder = document.getElementById('toctitle')
-		if (!linkHolder)
+		var linkHolder = document.getElementById('toctitle');
+		if (!linkHolder) {
 			return;
+		}
 
 		var outerSpan = document.createElement('span');
 		outerSpan.className = 'toctoggle';
@@ -287,22 +296,24 @@
 		linkHolder.appendChild(outerSpan);
 
 		var cookiePos = document.cookie.indexOf("hidetoc=");
-		if (cookiePos > -1 && document.cookie.charAt(cookiePos + 8) == 1)
+		if (cookiePos > -1 && document.cookie.charAt(cookiePos + 8) == 1) {
 			toggleToc();
+		}
 	}
 }
 
 function changeText(el, newText) {
 	// Safari work around
-	if (el.innerText)
+	if (el.innerText) {
 		el.innerText = newText;
-	else if (el.firstChild && el.firstChild.nodeValue)
+	} else if (el.firstChild && el.firstChild.nodeValue) {
 		el.firstChild.nodeValue = newText;
+	}
 }
 
 function toggleToc() {
 	var toc = document.getElementById('toc').getElementsByTagName('ul')[0];
-	var toggleLink = document.getElementById('togglelink')
+	var toggleLink = document.getElementById('togglelink');
 
 	if (toc && toggleLink && toc.style.display == 'none') {
 		changeText(toggleLink, tocHideText);
@@ -315,26 +326,66 @@
 	}
 }
 
+var mwEditButtons = [];
+var mwCustomEditButtons = []; // eg to add in MediaWiki:Common.js
+
 // this function generates the actual toolbar buttons with localized text
 // we use it to avoid creating the toolbar where javascript is not enabled
-function addButton(imageFile, speedTip, tagOpen, tagClose, sampleText) {
+function addButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) {
 	// Don't generate buttons for browsers which don't fully
 	// support it.
-	if (!document.selection && !is_gecko) {
+	mwEditButtons[mwEditButtons.length] =
+		{"imageId": imageId,
+		 "imageFile": imageFile,
+		 "speedTip": speedTip,
+		 "tagOpen": tagOpen,
+		 "tagClose": tagClose,
+		 "sampleText": sampleText};
+}
+
+// this function generates the actual toolbar buttons with localized text
+// we use it to avoid creating the toolbar where javascript is not enabled
+function mwInsertEditButton(parent, item) {
+	var image = document.createElement("img");
+	image.width = 23;
+	image.height = 22;
+	image.className = "mw-toolbar-editbutton";
+	if (item.imageId) image.id = item.imageId;
+	image.src = item.imageFile;
+	image.border = 0;
+	image.alt = item.speedTip;
+	image.title = item.speedTip;
+	image.style.cursor = "pointer";
+	image.onclick = function() {
+		insertTags(item.tagOpen, item.tagClose, item.sampleText);
 		return false;
+	};
+
+	parent.appendChild(image);
+	return true;
+}
+
+function mwSetupToolbar() {
+	var toolbar = document.getElementById('toolbar');
+	if (!toolbar) { return false; }
+
+	var textbox = document.getElementById('wpTextbox1');
+	if (!textbox) { return false; }
+
+	// Don't generate buttons for browsers which don't fully
+	// support it.
+	if (!(document.selection && document.selection.createRange)
+		&& textbox.selectionStart === null) {
+		return false;
 	}
-	imageFile = escapeQuotesHTML(imageFile);
-	speedTip = escapeQuotesHTML(speedTip);
-	tagOpen = escapeQuotes(tagOpen);
-	tagClose = escapeQuotes(tagClose);
-	sampleText = escapeQuotes(sampleText);
-	var mouseOver = "";
 
-	document.write("<a href=\"javascript:insertTags");
-	document.write("('"+tagOpen+"','"+tagClose+"','"+sampleText+"');\">");
-	document.write("<img width=\"23\" height=\"22\" src=\""+imageFile+"\" border=\"0\" alt=\""+speedTip+"\" title=\""+speedTip+"\""+mouseOver+">");
-	document.write("</a>");
-	return;
+	for (var i = 0; i < mwEditButtons.length; i++) {
+		mwInsertEditButton(toolbar, mwEditButtons[i]);
+	}
+	for (var i = 0; i < mwCustomEditButtons.length; i++) {
+		mwInsertEditButton(toolbar, mwCustomEditButtons[i]);
+	}
+	return true;
 }
 
 function escapeQuotes(text) {
@@ -348,89 +399,229 @@
 function escapeQuotesHTML(text) {
 	var re = new RegExp('&',"g");
 	text = text.replace(re,"&amp;");
-	var re = new RegExp('"',"g");
+	re = new RegExp('"',"g");
 	text = text.replace(re,"&quot;");
-	var re = new RegExp('<',"g");
+	re = new RegExp('<',"g");
 	text = text.replace(re,"&lt;");
-	var re = new RegExp('>',"g");
+	re = new RegExp('>',"g");
 	text = text.replace(re,"&gt;");
 	return text;
 }
 
 // apply tagOpen/tagClose to selection in textarea,
 // use sampleText instead of selection if there is none
-// copied and adapted from phpBB
 function insertTags(tagOpen, tagClose, sampleText) {
-	if (document.editform)
-		var txtarea = document.editform.wpTextbox1;
-	else {
+	var txtarea;
+	if (document.editform) {
+		txtarea = document.editform.wpTextbox1;
+	} else {
 		// some alternate form? take the first one we can find
 		var areas = document.getElementsByTagName('textarea');
-		var txtarea = areas[0];
+		txtarea = areas[0];
 	}
+	var selText, isSample = false;
 
-	// IE
-	if (document.selection  && !is_gecko) {
-		var theSelection = document.selection.createRange().text;
-		if (!theSelection)
-			theSelection=sampleText;
+	if (document.selection  && document.selection.createRange) { // IE/Opera
+
+		//save window scroll position
+		if (document.documentElement && document.documentElement.scrollTop)
+			var winScroll = document.documentElement.scrollTop
+		else if (document.body)
+			var winScroll = document.body.scrollTop;
+		//get current selection  
 		txtarea.focus();
-		if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any
-			theSelection = theSelection.substring(0, theSelection.length - 1);
-			document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
-		} else {
-			document.selection.createRange().text = tagOpen + theSelection + tagClose;
+		var range = document.selection.createRange();
+		selText = range.text;
+		//insert tags
+		checkSelectedText();
+		range.text = tagOpen + selText + tagClose;
+		//mark sample text as selected
+		if (isSample && range.moveStart) {
+			if (window.opera)
+				tagClose = tagClose.replace(/\n/g,'');
+			range.moveStart('character', - tagClose.length - selText.length); 
+			range.moveEnd('character', - tagClose.length); 
 		}
+		range.select();   
+		//restore window scroll position
+		if (document.documentElement && document.documentElement.scrollTop)
+			document.documentElement.scrollTop = winScroll
+		else if (document.body)
+			document.body.scrollTop = winScroll;
 
-	// Mozilla
-	} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
-		var replaced = false;
+	} else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
+
+		//save textarea scroll position
+		var textScroll = txtarea.scrollTop;
+		//get current selection
+		txtarea.focus();
 		var startPos = txtarea.selectionStart;
 		var endPos = txtarea.selectionEnd;
-		if (endPos-startPos)
-			replaced = true;
-		var scrollTop = txtarea.scrollTop;
-		var myText = (txtarea.value).substring(startPos, endPos);
-		if (!myText)
-			myText=sampleText;
-		if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
-			subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
-		} else {
-			subst = tagOpen + myText + tagClose;
-		}
-		txtarea.value = txtarea.value.substring(0, startPos) + subst +
-			txtarea.value.substring(endPos, txtarea.value.length);
-		txtarea.focus();
+		selText = txtarea.value.substring(startPos, endPos);
+		//insert tags
+		checkSelectedText();
+		txtarea.value = txtarea.value.substring(0, startPos)
+			+ tagOpen + selText + tagClose
+			+ txtarea.value.substring(endPos, txtarea.value.length);
 		//set new selection
-		if (replaced) {
-			var cPos = startPos+(tagOpen.length+myText.length+tagClose.length);
-			txtarea.selectionStart = cPos;
-			txtarea.selectionEnd = cPos;
+		if (isSample) {
+			txtarea.selectionStart = startPos + tagOpen.length;
+			txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
 		} else {
-			txtarea.selectionStart = startPos+tagOpen.length;
-			txtarea.selectionEnd = startPos+tagOpen.length+myText.length;
+			txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
+			txtarea.selectionEnd = txtarea.selectionStart;
 		}
-		txtarea.scrollTop = scrollTop;
+		//restore textarea scroll position
+		txtarea.scrollTop = textScroll;
+	} 
 
-	// All other browsers get no toolbar.
-	// There was previously support for a crippled "help"
-	// bar, but that caused more problems than it solved.
+	function checkSelectedText(){
+		if (!selText) {
+			selText = sampleText;
+			isSample = true;
+		} else if (selText.charAt(selText.length - 1) == ' ') { //exclude ending space char
+			selText = selText.substring(0, selText.length - 1);
+			tagClose += ' '
+		} 
 	}
-	// reposition cursor if possible
-	if (txtarea.createTextRange)
-		txtarea.caretPos = document.selection.createRange().duplicate();
+
 }
 
-function akeytt() {
-	if (typeof ta == "undefined" || !ta)
+
+/**
+ * Set the accesskey prefix based on browser detection.
+ */
+var tooltipAccessKeyPrefix = 'alt-';
+if (is_opera) {
+	tooltipAccessKeyPrefix = 'shift-esc-';
+} else if (is_safari
+	   || navigator.userAgent.toLowerCase().indexOf('mac') != -1
+	   || navigator.userAgent.toLowerCase().indexOf('konqueror') != -1 ) {
+	tooltipAccessKeyPrefix = 'ctrl-';
+} else if (is_ff2_x11 || is_ff2_win) {
+	tooltipAccessKeyPrefix = 'alt-shift-';
+}
+var tooltipAccessKeyRegexp = /\[(ctrl-)?(alt-)?(shift-)?(esc-)?.\]$/;
+
+/**
+ * Add the appropriate prefix to the accesskey shown in the tooltip.
+ * If the nodeList parameter is given, only those nodes are updated;
+ * otherwise, all the nodes that will probably have accesskeys by
+ * default are updated.
+ *
+ * @param Array nodeList -- list of elements to update
+ */
+function updateTooltipAccessKeys( nodeList ) {
+	if ( !nodeList ) {
+		// skins without a "column-one" element don't seem to have links with accesskeys either
+		var columnOne = document.getElementById("column-one");
+		if ( columnOne )
+			updateTooltipAccessKeys( columnOne.getElementsByTagName("a") );
+		// these are rare enough that no such optimization is needed
+		updateTooltipAccessKeys( document.getElementsByTagName("input") );
+		updateTooltipAccessKeys( document.getElementsByTagName("label") );
 		return;
-	var pref = 'alt-';
-	if (is_safari || navigator.userAgent.toLowerCase().indexOf('mac') + 1
-		|| navigator.userAgent.toLowerCase().indexOf('konqueror') + 1 )
-		pref = 'control-';
-	if (is_opera)
-		pref = 'shift-esc-';
+	}
 
+	for ( var i = 0; i < nodeList.length; i++ ) {
+		var element = nodeList[i];
+		var tip = element.getAttribute("title");
+		var key = element.getAttribute("accesskey");
+		if ( key && tooltipAccessKeyRegexp.exec(tip) ) {
+			tip = tip.replace(tooltipAccessKeyRegexp,
+					  "["+tooltipAccessKeyPrefix+key+"]");
+			element.setAttribute("title", tip );
+		}
+	}
+}
+
+/**
+ * Add a link to one of the portlet menus on the page, including:
+ *
+ * p-cactions: Content actions (shown as tabs above the main content in Monobook)
+ * p-personal: Personal tools (shown at the top right of the page in Monobook)
+ * p-navigation: Navigation
+ * p-tb: Toolbox
+ *
+ * This function exists for the convenience of custom JS authors.  All
+ * but the first three parameters are optional, though providing at
+ * least an id and a tooltip is recommended.
+ *
+ * By default the new link will be added to the end of the list.  To
+ * add the link before a given existing item, pass the DOM node of
+ * that item (easily obtained with document.getElementById()) as the
+ * nextnode parameter; to add the link _after_ an existing item, pass
+ * the node's nextSibling instead.
+ *
+ * @param String portlet -- id of the target portlet ("p-cactions", "p-personal", "p-navigation" or "p-tb")
+ * @param String href -- link URL
+ * @param String text -- link text (will be automatically lowercased by CSS for p-cactions in Monobook)
+ * @param String id -- id of the new item, should be unique and preferably have the appropriate prefix ("ca-", "pt-", "n-" or "t-")
+ * @param String tooltip -- text to show when hovering over the link, without accesskey suffix
+ * @param String accesskey -- accesskey to activate this link (one character, try to avoid conflicts)
+ * @param Node nextnode -- the DOM node before which the new item should be added, should be another item in the same list
+ *
+ * @return Node -- the DOM node of the new item (an LI element) or null
+ */
+function addPortletLink(portlet, href, text, id, tooltip, accesskey, nextnode) {
+	var node = document.getElementById(portlet);
+	if ( !node ) return null;
+	node = node.getElementsByTagName( "ul" )[0];
+	if ( !node ) return null;
+
+	var link = document.createElement( "a" );
+	link.appendChild( document.createTextNode( text ) );
+	link.href = href;
+
+	var item = document.createElement( "li" );
+	item.appendChild( link );
+	if ( id ) item.id = id;
+
+	if ( accesskey ) {
+		link.setAttribute( "accesskey", accesskey );
+		tooltip += " ["+accesskey+"]";
+	}
+	if ( tooltip ) {
+		link.setAttribute( "title", tooltip );
+	}
+	if ( accesskey && tooltip ) {
+		updateTooltipAccessKeys( new Array( link ) );
+	}
+
+	if ( nextnode && nextnode.parentNode == node )
+		node.insertBefore( item, nextnode );
+	else
+		node.appendChild( item );  // IE compatibility (?)
+
+	return item;
+}
+
+
+/**
+ * Set up accesskeys/tooltips from the deprecated ta array.  If doId
+ * is specified, only set up for that id.  Note that this function is
+ * deprecated and will not be supported indefinitely -- use
+ * updateTooltipAccessKey() instead.
+ *
+ * @param mixed doId string or null
+ */
+function akeytt( doId ) {
+	// A lot of user scripts (and some of the code below) break if
+	// ta isn't defined, so we make sure it is.  Explictly using
+	// window.ta avoids a "ta is not defined" error.
+	if (!window.ta) window.ta = new Array;
+
+	// Make a local, possibly restricted, copy to avoid clobbering
+	// the original.
+	var ta;
+	if ( doId ) {
+		ta = [doId];
+	} else {
+		ta = window.ta;
+	}
+
+	// Now deal with evil deprecated ta
+	var watchCheckboxExists = document.getElementById( 'wpWatchthis' ) ? true : false;
 	for (var id in ta) {
 		var n = document.getElementById(id);
 		if (n) {
@@ -445,10 +636,11 @@
 				} else {
 					a = n.childNodes[0];
 				}
-
-				if (a) {
+			 	// Don't add an accesskey for the watch tab if the watch
+			 	// checkbox is also available.
+				if (a && ((id != 'ca-watch' && id != 'ca-unwatch') || !watchCheckboxExists)) {
 					a.accessKey = ta[id][0];
-					ak = ' ['+pref+ta[id][0]+']';
+					ak = ' ['+tooltipAccessKeyPrefix+ta[id][0]+']';
 				}
 			} else {
 				// We don't care what type the object is when assigning tooltip
@@ -465,9 +657,9 @@
 
 function setupRightClickEdit() {
 	if (document.getElementsByTagName) {
-		var divs = document.getElementsByTagName('div');
-		for (var i = 0; i < divs.length; i++) {
-			var el = divs[i];
+		var spans = document.getElementsByTagName('span');
+		for (var i = 0; i < spans.length; i++) {
+			var el = spans[i];
 			if(el.className == 'editsection') {
 				addRightClickEditHandler(el);
 			}
@@ -480,232 +672,663 @@
 		var link = el.childNodes[i];
 		if (link.nodeType == 1 && link.nodeName.toLowerCase() == 'a') {
 			var editHref = link.getAttribute('href');
+			// find the enclosing (parent) header
+			var prev = el.parentNode;
+			if (prev && prev.nodeType == 1 &&
+			prev.nodeName.match(/^[Hh][1-6]$/)) {
+				prev.oncontextmenu = function(e) {
+					if (!e) { e = window.event; }
+					// e is now the event in all browsers
+					var targ;
+					if (e.target) { targ = e.target; }
+					else if (e.srcElement) { targ = e.srcElement; }
+					if (targ.nodeType == 3) { // defeat Safari bug
+						targ = targ.parentNode;
+					}
+					// targ is now the target element
 
-			// find the following a
-			var next = el.nextSibling;
-			while (next.nodeType != 1)
-				next = next.nextSibling;
-
-			// find the following header
-			next = next.nextSibling;
-			while (next.nodeType != 1)
-				next = next.nextSibling;
-
-			if (next && next.nodeType == 1 &&
-				next.nodeName.match(/^[Hh][1-6]$/)) {
-				next.oncontextmenu = function() {
-					document.location = editHref;
-					return false;
-				}
+					// We don't want to deprive the noble reader of a context menu
+					// for the section edit link, do we?  (Might want to extend this
+					// to all <a>'s?)
+					if (targ.nodeName.toLowerCase() != 'a'
+					|| targ.parentNode.className != 'editsection') {
+						document.location = editHref;
+						return false;
+					}
+					return true;
+				};
 			}
 		}
 	}
 }
 
+var checkboxes;
+var lastCheckbox;
+
 function setupCheckboxShiftClick() {
-	if (document.getElementsByTagName) {
-		var uls = document.getElementsByTagName('ul');
-		var len = uls.length;
-		for (var i = 0; i < len; ++i) {
-			addCheckboxClickHandlers(uls[i]);
-		}
-	}
+	checkboxes = [];
+	lastCheckbox = null;
+	var inputs = document.getElementsByTagName('input');
+	addCheckboxClickHandlers(inputs);
 }
 
-function addCheckboxClickHandlers(ul, start, finish) {
-	if (ul.checkboxHandlersTimer) {
-		clearInterval(ul.checkboxHandlersTimer);
+function addCheckboxClickHandlers(inputs, start) {
+	if ( !start) start = 0;
+
+	var finish = start + 250;
+	if ( finish > inputs.length )
+		finish = inputs.length;
+
+	for ( var i = start; i < finish; i++ ) {
+		var cb = inputs[i];
+		if ( !cb.type || cb.type.toLowerCase() != 'checkbox' )
+			continue;
+		var end = checkboxes.length;
+		checkboxes[end] = cb;
+		cb.index = end;
+		cb.onclick = checkboxClickHandler;
 	}
-	if ( !ul.childNodes ) {
-		return;
+
+	if ( finish < inputs.length ) {
+		setTimeout( function () {
+			addCheckboxClickHandlers(inputs, finish);
+		}, 200 );
 	}
-	var len = ul.childNodes.length;
-	if (len < 2) {
-		return;
-	}
-	start = start || 0;
-	finish = finish || start + 250;
-	if ( finish > len ) { finish = len; }
-	ul.checkboxes = ul.checkboxes || [];
-	ul.lastCheckbox = ul.lastCheckbox || null;
-	for (var i = start; i<finish; ++i) {
-		var child = ul.childNodes[i];
-		if ( child && child.childNodes && child.childNodes[0] ) {
-			var cb = child.childNodes[0];
-			if ( !cb.nodeName || cb.nodeName.toLowerCase() != 'input' ||
-			     !cb.type || cb.type.toLowerCase() != 'checkbox' ) {
-				return;
-			}
-			cb.index = ul.checkboxes.push(cb) - 1;
-			cb.container = ul;
-			cb.onmouseup = checkboxMouseupHandler;
-		}
-	}
-	if (finish < len) {
-	  var f=function(){ addCheckboxClickHandlers(ul, finish, finish+250); };
-	  ul.checkboxHandlersTimer=setInterval(f, 200);
-	}
 }
 
-function checkboxMouseupHandler(e) {
+function checkboxClickHandler(e) {
 	if (typeof e == 'undefined') {
 		e = window.event;
 	}
-	if ( !e.shiftKey || this.container.lastCheckbox === null ) {
-		this.container.lastCheckbox = this.index;
+	if ( !e.shiftKey || lastCheckbox === null ) {
+		lastCheckbox = this.index;
 		return true;
 	}
-	var endState = !this.checked;
-	if ( is_opera ) { // opera has already toggled the checkbox by this point
-		endState = !endState;
-	}
+	var endState = this.checked;
 	var start, finish;
-	if ( this.index < this.container.lastCheckbox ) {
+	if ( this.index < lastCheckbox ) {
 		start = this.index + 1;
-		finish = this.container.lastCheckbox;
+		finish = lastCheckbox;
 	} else {
-		start = this.container.lastCheckbox;
+		start = lastCheckbox;
 		finish = this.index - 1;
 	}
 	for (var i = start; i <= finish; ++i ) {
-		this.container.checkboxes[i].checked = endState;
+		checkboxes[i].checked = endState;
 	}
-	this.container.lastCheckbox = this.index;
+	lastCheckbox = this.index;
 	return true;
 }
 
-function fillDestFilename() {
-	if (!document.getElementById)
+function toggle_element_activation(ida,idb) {
+	if (!document.getElementById) {
 		return;
-	var path = document.getElementById('wpUploadFile').value;
-	// Find trailing part
-	var slash = path.lastIndexOf('/');
-	var backslash = path.lastIndexOf('\\');
-	var fname;
-	if (slash == -1 && backslash == -1) {
-		fname = path;
-	} else if (slash > backslash) {
-		fname = path.substring(slash+1, 10000);
-	} else {
-		fname = path.substring(backslash+1, 10000);
 	}
+	document.getElementById(ida).disabled=true;
+	document.getElementById(idb).disabled=false;
+}
 
-	// Capitalise first letter and replace spaces by underscores
-	fname = fname.charAt(0).toUpperCase().concat(fname.substring(1,10000)).replace(/ /g, '_');
+function toggle_element_check(ida,idb) {
+	if (!document.getElementById) {
+		return;
+	}
+	document.getElementById(ida).checked=true;
+	document.getElementById(idb).checked=false;
+}
 
-	// Output result
-	var destFile = document.getElementById('wpDestFile');
-	if (destFile)
-		destFile.value = fname;
+/**
+ * Restore the edit box scroll state following a preview operation,
+ * and set up a form submission handler to remember this state
+ */
+function scrollEditBox() {
+	var editBox = document.getElementById( 'wpTextbox1' );
+	var scrollTop = document.getElementById( 'wpScrolltop' );
+	var editForm = document.getElementById( 'editform' );
+	if( editBox && scrollTop ) {
+		if( scrollTop.value )
+			editBox.scrollTop = scrollTop.value;
+		addHandler( editForm, 'submit', function() {
+			document.getElementById( 'wpScrolltop' ).value = document.getElementById( 'wpTextbox1' ).scrollTop; 
+		} );
+	}
 }
+hookEvent( 'load', scrollEditBox );
 
+var allmessages_nodelist = false;
+var allmessages_modified = false;
+var allmessages_timeout = false;
+var allmessages_running = false;
 
-function considerChangingExpiryFocus() {
-	if (!document.getElementById)
+function allmessagesmodified() {
+	allmessages_modified = !allmessages_modified;
+	allmessagesfilter();
+}
+
+function allmessagesfilter() {
+	if ( allmessages_timeout )
+		window.clearTimeout( allmessages_timeout );
+
+	if ( !allmessages_running )
+		allmessages_timeout = window.setTimeout( 'allmessagesfilter_do();', 500 );
+}
+
+function allmessagesfilter_do() {
+	if ( !allmessages_nodelist )
 		return;
-	var drop = document.getElementById('wpBlockExpiry');
-	if (!drop)
+
+	var text = document.getElementById('allmessagesinput').value;
+	var nodef = allmessages_modified;
+
+	allmessages_running = true;
+
+	for ( var name in allmessages_nodelist ) {
+		var nodes = allmessages_nodelist[name];
+		var display = ( name.indexOf( text ) == -1 ? 'none' : '' );
+
+		for ( var i = 0; i < nodes.length; i++)
+			nodes[i].style.display =
+				( nodes[i].className == "def" && nodef
+				  ? 'none' : display );
+	}
+
+	if ( text != document.getElementById('allmessagesinput').value ||
+	     nodef != allmessages_modified )
+		allmessagesfilter_do();  // repeat
+
+	allmessages_running = false;
+}
+
+function allmessagesfilter_init() {
+	if ( allmessages_nodelist )
 		return;
-	var field = document.getElementById('wpBlockOther');
-	if (!field)
-		return;
-	var opt = drop.value;
-	if (opt == 'other')
-		field.style.display = '';
-	else
-		field.style.display = 'none';
+
+	var nodelist = new Array();
+	var templist = new Array();
+
+	var table = document.getElementById('allmessagestable');
+	if ( !table ) return;
+
+	var rows = document.getElementsByTagName('tr');
+	for ( var i = 0; i < rows.length; i++ ) {
+		var id = rows[i].getAttribute('id')
+		if ( id && id.substring(0,16) != 'sp-allmessages-r' ) continue;
+		templist[ id ] = rows[i];
+	}
+
+	var spans = table.getElementsByTagName('span');
+	for ( var i = 0; i < spans.length; i++ ) {
+		var id = spans[i].getAttribute('id')
+		if ( id && id.substring(0,17) != 'sp-allmessages-i-' ) continue;
+		if ( !spans[i].firstChild || spans[i].firstChild.nodeType != 3 ) continue;
+
+		var nodes = new Array();
+		var row1 = templist[ id.replace('i', 'r1') ];
+		var row2 = templist[ id.replace('i', 'r2') ];
+
+		if ( row1 ) nodes[nodes.length] = row1;
+		if ( row2 ) nodes[nodes.length] = row2;
+		nodelist[ spans[i].firstChild.nodeValue ] = nodes;
+	}
+
+	var k = document.getElementById('allmessagesfilter');
+	if (k) { k.style.display = ''; }
+
+	allmessages_nodelist = nodelist;
 }
 
-function scrollEditBox() {
-	var editBoxEl = document.getElementById("wpTextbox1");
-	var scrollTopEl = document.getElementById("wpScrolltop");
-	var editFormEl = document.getElementById("editform");
+hookEvent( "load", allmessagesfilter_init );
 
-	if (editBoxEl && scrollTopEl) {
-		if (scrollTopEl.value) editBoxEl.scrollTop = scrollTopEl.value;
-		editFormEl.onsubmit = function() {
-			document.getElementById("wpScrolltop").value = document.getElementById("wpTextbox1").scrollTop;
+/*
+	Written by Jonathan Snook, http://www.snook.ca/jonathan
+	Add-ons by Robert Nyman, http://www.robertnyman.com
+	Author says "The credit comment is all it takes, no license. Go crazy with it!:-)"
+	From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
+*/
+function getElementsByClassName(oElm, strTagName, oClassNames){
+	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
+	var arrReturnElements = new Array();
+	var arrRegExpClassNames = new Array();
+	if(typeof oClassNames == "object"){
+		for(var i=0; i<oClassNames.length; i++){
+			arrRegExpClassNames[arrRegExpClassNames.length] =
+				new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)");
 		}
 	}
+	else{
+		arrRegExpClassNames[arrRegExpClassNames.length] =
+			new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)");
+	}
+	var oElement;
+	var bMatchesAll;
+	for(var j=0; j<arrElements.length; j++){
+		oElement = arrElements[j];
+		bMatchesAll = true;
+		for(var k=0; k<arrRegExpClassNames.length; k++){
+			if(!arrRegExpClassNames[k].test(oElement.className)){
+				bMatchesAll = false;
+				break;
+			}
+		}
+		if(bMatchesAll){
+			arrReturnElements[arrReturnElements.length] = oElement;
+		}
+	}
+	return (arrReturnElements)
 }
 
-hookEvent("load", scrollEditBox);
+function redirectToFragment(fragment) {
+	var match = navigator.userAgent.match(/AppleWebKit\/(\d+)/);
+	if (match) {
+		var webKitVersion = parseInt(match[1]);
+		if (webKitVersion < 420) {
+			// Released Safari w/ WebKit 418.9.1 messes up horribly
+			// Nightlies of 420+ are ok
+			return;
+		}
+	}
+	if (is_gecko) {
+		// Mozilla needs to wait until after load, otherwise the window doesn't scroll
+		addOnloadHook(function () {
+			if (window.location.hash == "")
+				window.location.hash = fragment;
+		});
+	} else {
+		if (window.location.hash == "")
+			window.location.hash = fragment;
+	}
+}
 
-function allmessagesfilter() {
-	text = document.getElementById('allmessagesinput').value;
-	k = document.getElementById('allmessagestable');
-	if (!k) { return;}
+/*
+ * Table sorting script  by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/.
+ * Based on a script from http://www.kryogenix.org/code/browser/sorttable/.
+ * Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html .
+ *
+ * Copyright (c) 1997-2006 Stuart Langridge, Joost de Valk.
+ *
+ * @todo don't break on colspans/rowspans (bug 8028)
+ * @todo language-specific digit grouping/decimals (bug 8063)
+ * @todo support all accepted date formats (bug 8226)
+ */
 
-	var items = k.getElementsByTagName('span');
+var ts_image_path = stylepath+"/common/images/";
+var ts_image_up = "sort_up.gif";
+var ts_image_down = "sort_down.gif";
+var ts_image_none = "sort_none.gif";
+var ts_europeandate = wgContentLanguage != "en"; // The non-American-inclined can change to "true"
+var ts_alternate_row_colors = true;
+var SORT_COLUMN_INDEX;
 
-	if ( text.length > allmessages_prev.length ) {
-		for (var i = items.length-1, j = 0; i >= 0; i--) {
-			j = allmessagesforeach(items, i, j);
+function sortables_init() {
+	var idnum = 0;
+	// Find all tables with class sortable and make them sortable
+	var tables = getElementsByClassName(document, "table", "sortable");
+	for (var ti = 0; ti < tables.length ; ti++) {
+		if (!tables[ti].id) {
+			tables[ti].setAttribute('id','sortable_table_id_'+idnum);
+			++idnum;
 		}
-	} else {
-		for (var i = 0, j = 0; i < items.length; i++) {
-			j = allmessagesforeach(items, i, j);
+		ts_makeSortable(tables[ti]);
+	}
+}
+
+function ts_makeSortable(table) {
+	var firstRow;
+	if (table.rows && table.rows.length > 0) {
+		if (table.tHead && table.tHead.rows.length > 0) {
+			firstRow = table.tHead.rows[table.tHead.rows.length-1];
+		} else {
+			firstRow = table.rows[0];
 		}
 	}
-	allmessages_prev = text;
+	if (!firstRow) return;
+
+	// We have a first row: assume it's the header, and make its contents clickable links
+	for (var i = 0; i < firstRow.cells.length; i++) {
+		var cell = firstRow.cells[i];
+		if ((" "+cell.className+" ").indexOf(" unsortable ") == -1) {
+			cell.innerHTML += '&nbsp;&nbsp;<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;"><span class="sortarrow"><img src="'+ ts_image_path + ts_image_none + '" alt="&darr;"/></span></a>';
+		}
+	}
+	if (ts_alternate_row_colors) {
+		ts_alternate(table);
+	}
 }
 
-function allmessagesforeach(items, i, j) {
-	var hItem = items[i].getAttribute('id');
-	if (hItem.substring(0,17) == 'sp-allmessages-i-') {
-		if (items[i].firstChild && items[i].firstChild.nodeName == '#text' && items[i].firstChild.nodeValue.indexOf(text) != -1) {
-			var itemA = document.getElementById( hItem.replace('i', 'r1') );
-			var itemB = document.getElementById( hItem.replace('i', 'r2') );
-			if ( itemA.style.display != '' ) {
-				var s = "allmessageshider(\"" + hItem.replace('i', 'r1') + "\", \"" + hItem.replace('i', 'r2') + "\", '')";
-				var k = window.setTimeout(s,j++*5);
-			}
+function ts_getInnerText(el) {
+	if (typeof el == "string") return el;
+	if (typeof el == "undefined") { return el };
+	if (el.textContent) return el.textContent; // not needed but it is faster
+	if (el.innerText) return el.innerText;     // IE doesn't have textContent
+	var str = "";
+
+	var cs = el.childNodes;
+	var l = cs.length;
+	for (var i = 0; i < l; i++) {
+		switch (cs[i].nodeType) {
+			case 1: //ELEMENT_NODE
+				str += ts_getInnerText(cs[i]);
+				break;
+			case 3:	//TEXT_NODE
+				str += cs[i].nodeValue;
+				break;
+		}
+	}
+	return str;
+}
+
+function ts_resortTable(lnk) {
+	// get the span
+	var span = lnk.getElementsByTagName('span')[0];
+
+	var td = lnk.parentNode;
+	var tr = td.parentNode;
+	var column = td.cellIndex;
+
+	var table = tr.parentNode;
+	while (table && !(table.tagName && table.tagName.toLowerCase() == 'table'))
+		table = table.parentNode;
+	if (!table) return;
+
+	// Work out a type for the column
+	if (table.rows.length <= 1) return;
+
+	// Skip the first row if that's where the headings are
+	var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);
+
+	var itm = "";
+	for (var i = rowStart; i < table.rows.length; i++) {
+		if (table.rows[i].cells.length > column) {
+			itm = ts_getInnerText(table.rows[i].cells[column]);
+			itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");
+			if (itm != "") break;
+		}
+	}
+
+	sortfn = ts_sort_caseinsensitive;
+	if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/))
+		sortfn = ts_sort_date;
+	if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/))
+		sortfn = ts_sort_date;
+	if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/))
+		sortfn = ts_sort_date;
+	if (itm.match(/^[\u00a3$\u20ac]/)) // pound dollar euro
+		sortfn = ts_sort_currency;
+	if (itm.match(/^[\d.,]+\%?$/))
+		sortfn = ts_sort_numeric;
+
+	var reverse = (span.getAttribute("sortdir") == 'down');
+
+	var newRows = new Array();
+	for (var j = rowStart; j < table.rows.length; j++) {
+		var row = table.rows[j];
+		var keyText = ts_getInnerText(row.cells[column]);
+		var oldIndex = (reverse ? -j : j);
+
+		newRows[newRows.length] = new Array(row, keyText, oldIndex);
+	}
+
+	newRows.sort(sortfn);
+
+	var arrowHTML;
+	if (reverse) {
+			arrowHTML = '<img src="'+ ts_image_path + ts_image_down + '" alt="&darr;"/>';
+			newRows.reverse();
+			span.setAttribute('sortdir','up');
+	} else {
+			arrowHTML = '<img src="'+ ts_image_path + ts_image_up + '" alt="&uarr;"/>';
+			span.setAttribute('sortdir','down');
+	}
+
+	// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
+	// don't do sortbottom rows
+	for (var i = 0; i < newRows.length; i++) {
+		if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1)
+			table.tBodies[0].appendChild(newRows[i][0]);
+	}
+	// do sortbottom rows only
+	for (var i = 0; i < newRows.length; i++) {
+		if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1)
+			table.tBodies[0].appendChild(newRows[i][0]);
+	}
+
+	// Delete any other arrows there may be showing
+	var spans = getElementsByClassName(tr, "span", "sortarrow");
+	for (var i = 0; i < spans.length; i++) {
+		spans[i].innerHTML = '<img src="'+ ts_image_path + ts_image_none + '" alt="&darr;"/>';
+	}
+	span.innerHTML = arrowHTML;
+
+	ts_alternate(table);		
+}
+
+function ts_dateToSortKey(date) {	
+	// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
+	if (date.length == 11) {
+		switch (date.substr(3,3).toLowerCase()) {
+			case "jan": var month = "01"; break;
+			case "feb": var month = "02"; break;
+			case "mar": var month = "03"; break;
+			case "apr": var month = "04"; break;
+			case "may": var month = "05"; break;
+			case "jun": var month = "06"; break;
+			case "jul": var month = "07"; break;
+			case "aug": var month = "08"; break;
+			case "sep": var month = "09"; break;
+			case "oct": var month = "10"; break;
+			case "nov": var month = "11"; break;
+			case "dec": var month = "12"; break;
+			// default: var month = "00";
+		}
+		return date.substr(7,4)+month+date.substr(0,2);
+	} else if (date.length == 10) {
+		if (ts_europeandate == false) {
+			return date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
 		} else {
-			var itemA = document.getElementById( hItem.replace('i', 'r1') );
-			var itemB = document.getElementById( hItem.replace('i', 'r2') );
-			if ( itemA.style.display != 'none' ) {
-				var s = "allmessageshider(\"" + hItem.replace('i', 'r1') + "\", \"" + hItem.replace('i', 'r2') + "\", 'none')";
-				var k = window.setTimeout(s,j++*5);
-			}
+			return date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
 		}
+	} else if (date.length == 8) {
+		yr = date.substr(6,2);
+		if (parseInt(yr) < 50) { 
+			yr = '20'+yr; 
+		} else { 
+			yr = '19'+yr; 
+		}
+		if (ts_europeandate == true) {
+			return yr+date.substr(3,2)+date.substr(0,2);
+		} else {
+			return yr+date.substr(0,2)+date.substr(3,2);
+		}
 	}
-	return j;
+	return "00000000";
 }
 
+function ts_parseFloat(num) {
+	if (!num) return 0;
+	num = parseFloat(num.replace(/,/g, ""));
+	return (isNaN(num) ? 0 : num);
+}
 
-function allmessageshider(idA, idB, cstyle) {
-	var itemA = document.getElementById( idA );
-	var itemB = document.getElementById( idB );
-	if (itemA) { itemA.style.display = cstyle; }
-	if (itemB) { itemB.style.display = cstyle; }
+function ts_sort_date(a,b) {
+	var aa = ts_dateToSortKey(a[1]);
+	var bb = ts_dateToSortKey(b[1]);
+	return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
 }
 
-function allmessagesmodified() {
-	allmessages_modified = !allmessages_modified;
-	k = document.getElementById('allmessagestable');
-	if (!k) { return;}
-	var items = k.getElementsByTagName('tr');
-	for (var i = 0, j = 0; i< items.length; i++) {
-		if (!allmessages_modified ) {
-			if ( items[i].style.display != '' ) {
-				var s = "allmessageshider(\"" + items[i].getAttribute('id') + "\", null, '')";
-				var k = window.setTimeout(s,j++*5);
+function ts_sort_currency(a,b) {
+	var aa = ts_parseFloat(a[1].replace(/[^0-9.]/g,''));
+	var bb = ts_parseFloat(b[1].replace(/[^0-9.]/g,''));
+	return (aa != bb ? aa - bb : a[2] - b[2]);
+}
+
+function ts_sort_numeric(a,b) {
+	var aa = ts_parseFloat(a[1]);
+	var bb = ts_parseFloat(b[1]);
+	return (aa != bb ? aa - bb : a[2] - b[2]);
+}
+
+function ts_sort_caseinsensitive(a,b) {
+	var aa = a[1].toLowerCase();
+	var bb = b[1].toLowerCase();
+	return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
+}
+
+function ts_sort_default(a,b) {
+	return (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]);
+}
+
+function ts_alternate(table) {
+	// Take object table and get all it's tbodies.
+	var tableBodies = table.getElementsByTagName("tbody");
+	// Loop through these tbodies
+	for (var i = 0; i < tableBodies.length; i++) {
+		// Take the tbody, and get all it's rows
+		var tableRows = tableBodies[i].getElementsByTagName("tr");
+		// Loop through these rows
+		// Start at 1 because we want to leave the heading row untouched
+		for (var j = 0; j < tableRows.length; j++) {
+			// Check if j is even, and apply classes for both possible results
+			var oldClasses = tableRows[j].className.split(" ");
+			var newClassName = "";
+			for (var k = 0; k < oldClasses.length; k++) {
+				if (oldClasses[k] != "" && oldClasses[k] != "even" && oldClasses[k] != "odd")
+					newClassName += oldClasses[k] + " ";
 			}
-		} else if (items[i].getAttribute('class') == 'def' && allmessages_modified) {
-			if ( items[i].style.display != 'none' ) {
-				var s = "allmessageshider(\"" + items[i].getAttribute('id') + "\", null, 'none')";
-				var k = window.setTimeout(s,j++*5);
-			}
+			tableRows[j].className = newClassName + (j % 2 == 0 ? "even" : "odd");
 		}
 	}
 }
 
-function allmessagesshow() {
-	k = document.getElementById('allmessagesfilter');
-	if (k) { k.style.display = ''; }
+/*
+ * End of table sorting code
+ */
+ 
+ 
+/**
+ * Add a cute little box at the top of the screen to inform the user of
+ * something, replacing any preexisting message.
+ *
+ * @param String message HTML to be put inside the right div
+ * @param String className   Used in adding a class; should be different for each
+ *   call to allow CSS/JS to hide different boxes.  null = no class used.
+ * @return Boolean       True on success, false on failure
+ */
+function jsMsg( message, className ) {
+	if ( !document.getElementById ) {
+		return false;
+	}
+	// We special-case skin structures provided by the software.  Skins that
+	// choose to abandon or significantly modify our formatting can just define
+	// an mw-js-message div to start with.
+	var messageDiv = document.getElementById( 'mw-js-message' );
+	if ( !messageDiv ) {
+		messageDiv = document.createElement( 'div' );
+		if ( document.getElementById( 'column-content' )
+		&& document.getElementById( 'content' ) ) {
+			// MonoBook, presumably
+			document.getElementById( 'content' ).insertBefore(
+				messageDiv,
+				document.getElementById( 'content' ).firstChild
+			);
+		} else if ( document.getElementById('content')
+		&& document.getElementById( 'article' ) ) {
+			// Non-Monobook but still recognizable (old-style)
+			document.getElementById( 'article').insertBefore(
+				messageDiv,
+				document.getElementById( 'article' ).firstChild
+			);
+		} else {
+			return false;
+		}
+	}
 
-	allmessages_prev = '';
-	allmessages_modified = false;
+	messageDiv.setAttribute( 'id', 'mw-js-message' );
+	if( className ) {
+		messageDiv.setAttribute( 'class', 'mw-js-message-'+className );
+	}
+	messageDiv.innerHTML = message;
+	return true;
 }
 
-hookEvent("load", allmessagesshow);
+/**
+ * Inject a cute little progress spinner after the specified element
+ *
+ * @param element Element to inject after
+ * @param id Identifier string (for use with removeSpinner(), below)
+ */
+function injectSpinner( element, id ) {
+	var spinner = document.createElement( "img" );
+	spinner.id = "mw-spinner-" + id;
+	spinner.src = stylepath + "/common/images/spinner.gif";
+	spinner.alt = spinner.title = "...";
+	if( element.nextSibling ) {
+		element.parentNode.insertBefore( spinner, element.nextSibling );
+	} else {
+		element.parentNode.appendChild( spinner );
+	}
+}
+
+/**
+ * Remove a progress spinner added with injectSpinner()
+ *
+ * @param id Identifier string
+ */
+function removeSpinner( id ) {
+	var spinner = document.getElementById( "mw-spinner-" + id );
+	if( spinner ) {
+		spinner.parentNode.removeChild( spinner );
+	}
+}
+
+function runOnloadHook() {
+	// don't run anything below this for non-dom browsers
+	if (doneOnloadHook || !(document.getElementById && document.getElementsByTagName)) {
+		return;
+	}
+
+	// set this before running any hooks, since any errors below
+	// might cause the function to terminate prematurely
+	doneOnloadHook = true;
+
+	histrowinit();
+	unhidetzbutton();
+	tabbedprefs();
+	updateTooltipAccessKeys( null );
+	akeytt( null );
+	scrollEditBox();
+	setupCheckboxShiftClick();
+	sortables_init();
+
+	// Run any added-on functions
+	for (var i = 0; i < onloadFuncts.length; i++) {
+		onloadFuncts[i]();
+	}
+}
+
+/**
+ * Add an event handler to an element
+ *
+ * @param Element element Element to add handler to
+ * @param String attach Event to attach to
+ * @param callable handler Event handler callback
+ */
+function addHandler( element, attach, handler ) {
+	if( window.addEventListener ) {
+		element.addEventListener( attach, handler, false );
+	} else if( window.attachEvent ) {
+		element.attachEvent( 'on' + attach, handler );
+	}
+}
+
+/**
+ * Add a click event handler to an element
+ *
+ * @param Element element Element to add handler to
+ * @param callable handler Event handler callback
+ */
+function addClickHandler( element, handler ) {
+	addHandler( element, 'click', handler );
+}
+//note: all skins should call runOnloadHook() at the end of html output,
+//      so the below should be redundant. It's there just in case.
+hookEvent("load", runOnloadHook);
+hookEvent("load", mwSetupToolbar);

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/common/wikistandard.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/common/wikistandard.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/common/wikistandard.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,5 +1,3 @@
- at import url("common.css?1");
-
 #article { padding: 4px; }
 #content { margin: 0; padding: 0; }
 #footer { padding: 4px;font-size:95%;clear: both; }
@@ -29,12 +27,18 @@
 
 h1.pagetitle { padding-top: 0; margin-top: 0; padding-bottom: 0; margin-bottom: 0;
 font-size:150%; }
+h1.pagetitle .editsection { font-size: 66.7%; }
 h2 { font-size: 120%; }
+h2 .editsection { font-size: 83.3%; }
 h2, h3, h4, h5, h6 { margin-bottom: 0;}
 h3 { font-size: 106.25%; }
+h3 .editsection { font-size: 94.1%; }
 h4 { font-size: 103.125%; }
+h4 .editsection { font-size: 97.0%; }
 h5 { font-size: 100%; }
+h5 .editsection { font-size: 100%; }
 h6 { font-size: 95%; }
+h6 .editsection { font-size: 105.3%; }
 hr.sep { color:gray;height:1px;background-color:gray;}
 p.subpages { font-size:small;}
 p.subtitle { padding-top: 0; margin-top: 0;}

Deleted: trunk/wiki.openmoko.org/space_www_wiki_skins/disabled/HTMLDump.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/disabled/HTMLDump.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/disabled/HTMLDump.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,228 +0,0 @@
-<?php
-
-/**
- * Default skin for HTML dumps, based on MonoBook.php
- */
-
-if( !defined( 'MEDIAWIKI' ) )
-	die( -1 );
-
-/** */
-require_once( 'includes/SkinTemplate.php' );
-
-/**
- * Inherit main code from SkinTemplate, set the CSS and template filter.
- * @todo document
- * @package MediaWiki
- * @subpackage Skins
- */
-class SkinHTMLDump extends SkinTemplate {
-	/** Using monobook. */
-	function initPage( &$out ) {
-		SkinTemplate::initPage( $out );
-		$this->template  = 'HTMLDumpTemplate';
-	}
-
-	function buildSidebar() {
-		$sections = parent::buildSidebar();
-		$badMessages = array( 'recentchanges-url', 'randompage-url' );
-		$badUrls = array();
-		foreach ( $badMessages as $msg ) {
-			$badUrls[] = $this->makeInternalOrExternalUrl( wfMsgForContent( $msg ) );
-		}
-
-		foreach ( $sections as $heading => $section ) {
-			foreach ( $section as $index => $link ) {
-				if ( in_array( $link['href'], $badUrls ) ) {
-					unset( $sections[$heading][$index] );
-				}
-			}
-		}
-		return $sections;
-	}
-
-	function buildContentActionUrls() {
-		global $wgHTMLDump;
-
-		$content_actions = array();
-		$nskey = $this->getNameSpaceKey();
-		$content_actions[$nskey] = $this->tabAction(
-			$this->mTitle->getSubjectPage(),
-			$nskey,
-			!$this->mTitle->isTalkPage() );
-
-		$content_actions['talk'] = $this->tabAction(
-			$this->mTitle->getTalkPage(),
-			'talk',
-			$this->mTitle->isTalkPage(),
-			'',
-			true);
-
-		if ( isset( $wgHTMLDump ) ) {
-			$content_actions['current'] = array(
-				'text' => wfMsg( 'currentrev' ),
-				'href' => str_replace( '$1', wfUrlencode( $this->mTitle->getPrefixedDBkey() ),
-					$wgHTMLDump->oldArticlePath ),
-				'class' => false
-			);
-		}
-		return $content_actions;
-	}
-
-	function makeBrokenLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
-		if ( !isset( $nt ) ) {
-			return "<!-- ERROR -->{$prefix}{$text}{$trail}";
-		}
-
-		if ( $nt->getNamespace() == NS_CATEGORY ) {
-			return $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix );
-		}
-
-		if ( $text == '' ) {
-			$text = $nt->getPrefixedText();
-		}
-		return $prefix . $text . $trail;
-	}
-}
-
-/**
- * @todo document
- * @package MediaWiki
- * @subpackage Skins
- */
-class HTMLDumpTemplate extends QuickTemplate {
-	/**
-	 * Template filter callback for MonoBook skin.
-	 * 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.
-	 *
-	 * @access private
-	 */
-	function execute() {
-		wfSuppressWarnings();
-?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
-  <head>
-    <meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
-    <?php $this->html('headlinks') ?>
-    <title><?php $this->text('pagetitle') ?></title>
-    <style type="text/css">/*<![CDATA[*/ @import "<?php $this->text('stylepath') ?>/htmldump/main.css"; /*]]>*/</style>
-    <link rel="stylesheet" type="text/css" media="print" href="<?php $this->text('stylepath') ?>/common/commonPrint.css" />
-    <!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css";</style><![endif]-->
-    <!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css";</style><![endif]-->
-    <!--[if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css";</style><![endif]-->
-    <!--[if IE]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js"></script>
-    <meta http-equiv="imagetoolbar" content="no" /><![endif]-->
-    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js"></script>
-    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/htmldump/md5.js"></script>
-    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/htmldump/utf8.js"></script>
-    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/htmldump/lookup.js"></script>
-    <?php if($this->data['jsvarurl'  ]) { ?><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"></script><?php } ?>
-    <?php if($this->data['pagecss'   ]) { ?><style type="text/css"><?php              $this->html('pagecss'   ) ?></style><?php    } ?>
-    <?php if($this->data['usercss'   ]) { ?><style type="text/css"><?php              $this->html('usercss'   ) ?></style><?php    } ?>
-    <?php if($this->data['userjs'    ]) { ?><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('userjs'    ) ?>"></script><?php } ?>
-    <?php if($this->data['userjsprev']) { ?><script type="<?php $this->text('jsmimetype') ?>"><?php      $this->html('userjsprev') ?></script><?php   } ?>
-  </head>
-  <body
-    <?php if($this->data['nsclass'        ]) { ?>class="<?php      $this->text('nsclass')         ?>"<?php } ?>>
-    <div id="globalWrapper">
-      <div id="column-content">
-	<div id="content">
-	  <a name="top" id="contentTop"></a>
-	  <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
-	  <h1 class="firstHeading"><?php $this->text('title') ?></h1>
-	  <div id="bodyContent">
-	    <h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
-	    <div id="contentSub"><?php $this->html('subtitle') ?></div>
-	    <?php if($this->data['undelete']) { ?><div id="contentSub"><?php     $this->html('undelete') ?></div><?php } ?>
-	    <?php if($this->data['newtalk'] ) { ?><div class="usermessage"><?php $this->html('newtalk')  ?></div><?php } ?>
-	    <!-- start content -->
-	    <?php $this->html('bodytext') ?>
-	    <?php if($this->data['catlinks']) { ?><div id="catlinks"><?php       $this->html('catlinks') ?></div><?php } ?>
-	    <!-- end content -->
-	    <div class="visualClear"></div>
-	  </div>
-	</div>
-      </div>
-      <div id="column-one">
-	<div id="p-cactions" class="portlet">
-	  <h5>Views</h5>
-	  <ul>
-	    <?php foreach($this->data['content_actions'] as $key => $action) {
-	       ?><li id="ca-<?php echo htmlspecialchars($key) ?>"
-	       <?php if($action['class']) { ?>class="<?php echo htmlspecialchars($action['class']) ?>"<?php } ?>
-	       ><a href="<?php echo htmlspecialchars($action['href']) ?>"><?php
-	       echo htmlspecialchars($action['text']) ?></a></li><?php
-	     } ?>
-	  </ul>
-	</div>
-	<div class="portlet" id="p-logo">
-	  <a style="background-image: url(<?php $this->text('logopath') ?>);"
-	    href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"
-	    title="<?php $this->msg('mainpage') ?>"></a>
-	</div>
-	<script type="<?php $this->text('jsmimetype') ?>"> if (window.isMSIE55) fixalpha(); </script>
-	<?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
-	<div class='portlet' id='p-<?php echo htmlspecialchars($bar) ?>'>
-	  <h5><?php $this->msg( $bar ) ?></h5>
-	  <div class='pBody'>
-	    <ul>
-	    <?php foreach($cont as $key => $val) { ?>
-	      <li id="<?php echo htmlspecialchars($val['id']) ?>"><a href="<?php echo htmlspecialchars($val['href']) ?>"><?php echo htmlspecialchars($val['text'])?></a></li>
-	     <?php } ?>
-	    </ul>
-	  </div>
-	</div>
-	<?php } ?>
-	<div id="p-search" class="portlet">
-	  <h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
-	  <div class="pBody">
-	    <form action="javascript:goToStatic(3)" id="searchform"><div>
-	      <input id="searchInput" name="search" type="text"
-	        <?php if($this->haveMsg('accesskey-search')) {
-	          ?>accesskey="<?php $this->msg('accesskey-search') ?>"<?php }
-	        if( isset( $this->data['search'] ) ) {
-	          ?> value="<?php $this->text('search') ?>"<?php } ?> />
-	      <input type='submit' name="go" class="searchButton" id="searchGoButton"
-	        value="<?php $this->msg('go') ?>" />
-	    </div></form>
-	  </div>
-	</div>
-	<?php if( $this->data['language_urls'] ) { ?><div id="p-lang" class="portlet">
-	  <h5><?php $this->msg('otherlanguages') ?></h5>
-	  <div class="pBody">
-	    <ul>
-	      <?php foreach($this->data['language_urls'] as $langlink) { ?>
-	      <li>
-	      <a href="<?php echo htmlspecialchars($langlink['href'])
-	        ?>"><?php echo $langlink['text'] ?></a>
-	      </li>
-	      <?php } ?>
-	    </ul>
-	  </div>
-	</div>
-	<?php } ?>
-      </div><!-- end of the left (by default at least) column -->
-      <div class="visualClear"></div>
-      <div id="footer">
-    <?php if($this->data['poweredbyico']) { ?><div id="f-poweredbyico"><?php $this->html('poweredbyico') ?></div><?php } ?>
-	<?php if($this->data['copyrightico']) { ?><div id="f-copyrightico"><?php $this->html('copyrightico') ?></div><?php } ?>
-	<ul id="f-list">
-	  <?php if($this->data['lastmod'   ]) { ?><li id="f-lastmod"><?php    $this->html('lastmod')    ?></li><?php } ?>
-	  <?php if($this->data['numberofwatchingusers' ]) { ?><li id="f-numberofwatchingusers"><?php  $this->html('numberofwatchingusers') ?></li><?php } ?>
-	  <?php if($this->data['credits'   ]) { ?><li id="f-credits"><?php    $this->html('credits')    ?></li><?php } ?>
-	  <?php if($this->data['copyright' ]) { ?><li id="f-copyright"><?php  $this->html('copyright')  ?></li><?php } ?>
-	  <?php if($this->data['about'     ]) { ?><li id="f-about"><?php      $this->html('about')      ?></li><?php } ?>
-	  <?php if($this->data['disclaimer']) { ?><li id="f-disclaimer"><?php $this->html('disclaimer') ?></li><?php } ?>
-	  <?php if($this->data['tagline']) { ?><li id="f-tagline"><?php echo $this->data['tagline'] ?></li><?php } ?>
-	</ul>
-      </div>
-    </div>
-  </body>
-</html>
-<?php
-		wfRestoreWarnings();
-	}
-}
-?>

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/disabled/MonoBookCBT.php
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/disabled/MonoBookCBT.php	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/disabled/MonoBookCBT.php	2008-05-28 18:51:12 UTC (rev 236)
@@ -10,8 +10,10 @@
 
 /**
  * MonoBook clone using the new dependency-tracking template processor.
- * EXPERIMENTAL - use only for testing and profiling at this stage
+ * EXPERIMENTAL - use only for testing and profiling at this stage.
  *
+ * See includes/cbt/README for an explanation.
+ *
  * The main thing that's missing is cache invalidation, on change of:
  *   * messages
  *   * user preferences
@@ -236,9 +238,9 @@
 		if ( !$wgUseSiteJs ) return '';
 		
 		if ( $wgUser->isLoggedIn() ) {
-			$url = $this->makeUrl('-','action=raw&smaxage=0&gen=js');
+			$url = self::makeUrl( '-','action=raw&smaxage=0&gen=js' );
 		} else {
-			$url = $this->makeUrl('-','action=raw&gen=js');
+			$url = self::makeUrl( '-','action=raw&gen=js' );
 		}
 		return cbt_value( $url, 'loggedin' );
 	}
@@ -258,7 +260,7 @@
 			global $wgRequest;
 			$usercss = $this->makeStylesheetCdata( $wgRequest->getText('wpTextbox1') );
 		} else {
-			$usercss = $this->makeStylesheetLink( $this->makeUrl($this->getUserPageText() . 
+			$usercss = $this->makeStylesheetLink( self::makeUrl($this->getUserPageText() . 
 				'/'.$this->mStyleName.'.css', 'action=raw&ctype=text/css' ) );
 		}
 
@@ -281,9 +283,8 @@
 			$sitecss .= $this->makeStylesheetLink( $wgStylePath . '/' . $this->mStyleName . '/rtl.css' ) . "\n";
 		}
 
-		$sitecss .= $this->makeStylesheetLink( $this->makeNSUrl('Common.css', $query, NS_MEDIAWIKI) ) . "\n";
-		$sitecss .= $this->makeStylesheetLink( $this->makeNSUrl(
-			ucfirst($this->mStyleName) . '.css', $query, NS_MEDIAWIKI) ) . "\n";
+		$sitecss .= $this->makeStylesheetLink( self::makeNSUrl( 'Common.css', $query, NS_MEDIAWIKI ) ) . "\n";
+		$sitecss .= $this->makeStylesheetLink( self::makeNSUrl( ucfirst( $this->mStyleName ) . '.css', $query, NS_MEDIAWIKI ) ) . "\n";
 
 		// No deps
 		return $sitecss;
@@ -306,7 +307,7 @@
 			$isTemplate = false;
 		}
 		
-		$link = $this->makeStylesheetLink( $this->makeUrl('-','action=raw&gen=css' . $siteargs) ) . "\n";
+		$link = $this->makeStylesheetLink( self::makeUrl('-','action=raw&gen=css' . $siteargs) ) . "\n";
 
 		if ( $wgAllowUserCss ) {
 			$deps = 'loggedin';
@@ -328,7 +329,7 @@
 		if ( $this->isJsPreview() ) {
 			$url = '';
 		} else {
-			$url = $this->makeUrl($this->getUserPageText().'/'.$this->mStyleName.'.js', 'action=raw&ctype='.$wgJsMimeType.'&dontcountme=s');
+			$url = self::makeUrl($this->getUserPageText().'/'.$this->mStyleName.'.js', 'action=raw&ctype='.$wgJsMimeType.'&dontcountme=s');
 		}
 		return cbt_value( $url, array( 'nonview dynamic', 'user' ) );
 	}
@@ -498,8 +499,8 @@
 	}
 
 	function is_special() { return cbt_value( $this->mTitle->getNamespace() == NS_SPECIAL, 'title' ); }
-	function can_edit() { return cbt_value( (string)($this->mTitle->userCanEdit()), 'dynamic' ); }
-	function can_move() { return cbt_value( (string)($this->mTitle->userCanMove()), 'dynamic' ); }
+	function can_edit() { return cbt_value( (string)($this->mTitle->userCan( 'edit' )), 'dynamic' ); }
+	function can_move() { return cbt_value( (string)($this->mTitle->userCan( 'move' )), 'dynamic' ); }
 	function is_talk() { return cbt_value( (string)($this->mTitle->isTalkPage()), 'title' ); }
 	function is_protected() { return cbt_value( (string)$this->mTitle->isProtected(), 'dynamic' ); }
 	function nskey() { return cbt_value( $this->mTitle->getNamespaceKey(), 'title' ); }
@@ -763,7 +764,7 @@
 	}
 	
 	function logopath() { return $GLOBALS['wgLogo']; }
-	function mainpage() { return $this->makeI18nUrl( 'mainpage' ); }
+	function mainpage() { return self::makeMainPageUrl(); }
 	
 	function sidebar( $startSection, $endSection, $innerTpl ) {
 		$s = '';
@@ -798,7 +799,7 @@
 						$text = $line[1];
 					if (wfEmptyMsg($line[0], $link))
 						$link = $line[0];
-					$href = $this->makeInternalOrExternalUrl( $link );
+					$href = self::makeInternalOrExternalUrl( $link );
 					
 					$s .= strtr( $innerTpl,
 						array(
@@ -909,12 +910,12 @@
 		} elseif ( $wgUploadNavigationUrl ) {
 			return $wgUploadNavigationUrl;
 		} else {
-			return $this->makeSpecialUrl('Upload');
+			return self::makeSpecialUrl('Upload');
 		}
 	}
 	
 	function nav_specialpages() {
-		return $this->makeSpecialUrl('Specialpages');
+		return self::makeSpecialUrl('Specialpages');
 	}
 	
 	function nav_print() {
@@ -1016,10 +1017,10 @@
 		global $wgPageShowWatchingUsers;
 		if ( !$wgPageShowWatchingUsers ) return '';
 
-		$dbr =& wfGetDB( DB_SLAVE );
+		$dbr = wfGetDB( DB_SLAVE );
 		extract( $dbr->tableNames( 'watchlist' ) );
 		$sql = "SELECT COUNT(*) AS n FROM $watchlist
-			WHERE wl_title='" . $dbr->strencode($this->mTitle->getDBKey()) .
+			WHERE wl_title='" . $dbr->strencode($this->mTitle->getDBkey()) .
 			"' AND  wl_namespace=" . $this->mTitle->getNamespace() ;
 		$res = $dbr->query( $sql, 'SkinTemplate::outputPage');
 		$row = $dbr->fetchObject( $res );
@@ -1299,7 +1300,7 @@
 
 	/** Make a link to a special page using a template */
 	function makeSpecialTemplateLink( $template, $key, $specialName, $text, $query = '' ) {
-		$url = $this->makeSpecialUrl( $specialName, $query );
+		$url = self::makeSpecialUrl( $specialName, $query );
 		// Ignore the query when comparing
 		$active = ($this->mTitle->getNamespace() == NS_SPECIAL && $this->mTitle->getDBkey() == $specialName);
 		return strtr( $template, 
@@ -1385,4 +1386,4 @@
 		return $this->mTalkPage;
 	}
 }
-?>
+

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/audio.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/audio.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/bullet.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/bullet.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/discussionitem_icon.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/discussionitem_icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/document.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/document.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/external.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/external.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/file_icon.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/file_icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/footer-grad.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/footer-grad.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/link_icon.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/link_icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/lock_icon.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/lock_icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/mail_icon.gif
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/mail_icon.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/main.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/modern/main.css	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/modern/main.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,1119 @@
+body {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+	/*font-size: 10pt;*/
+	font-size: x-small;
+	
+
+	font-family: sans-serif;
+	color: black;
+	background-color: #f0f0f0;
+}
+
+#mw_main,
+#p-personal,
+#mw_header {
+	font-size: 130%;
+}
+
+#mw_header {
+	position: absolute;
+	top: 0;
+	left: 0;
+	margin: 0 0 0 0;
+	padding: 0 0em 0 0em;
+	border: none;
+	height: 2em;
+	width: 100%;
+
+	background-color: #003366;
+	color: white;
+}
+
+#mw_header h1 {
+	margin: 0 0 0 0.5em;
+	padding: 0 0 0 0;
+	text-decoration: none;
+	font-size: 150%;
+}
+
+#p-personal {
+	position: absolute;
+	top: 2em;
+	left: 0;
+	height: 1.5em;
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+	width: 100%;
+
+}
+
+#p-personal div.pBody {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+	height: 1.5em;
+	font-variant: small-caps;
+}
+
+#p-personal h5 {
+	display: none;
+}
+
+#p-personal ul {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+	display: block;
+	height: 1.5em;
+	background-color: #3c78b5;
+}
+
+#p-personal li {
+	display: block; float: left;
+	height: 1.5em;
+	margin: 0 0 0 0;
+	vertical-align: middle;
+
+	font-weight: bold;
+	text-transform: lowercase;
+}
+
+#p-personal li a {
+	text-decoration: none;
+	color: white;
+	padding: 0 1em 0 1em;
+}
+
+#p-personal li a:hover {
+	text-decoration: none;
+	color: white;
+}
+
+#p-personal li:hover {
+	background-color: #003366;
+}
+
+#jump-to-nav {
+	display: none;
+}
+
+#mw_contentwrapper {
+	width: 100%;
+	margin: 0 0 0 -15em;
+	float: right;
+}
+
+#mw_content {
+	margin: 0 0 0 14em;
+
+	background-color: white;
+	border-top: solid 1px #bbbbbb;
+	border-left: solid 1px #bbbbbb;
+	border-bottom: solid 1px #bbbbbb;
+
+	line-height: 1.5em;
+	padding: 0 1em 1em 1em;
+}
+
+#mw_portlets {
+	width: 14em;
+	
+	border-right: solid 1px #bbbbbb;
+	background-color: #f0f0f0;
+}
+
+#mw_main {
+	padding: 0 0 0 0;
+	margin: 0 0 0 0;
+	margin-top: 3.5em;
+}
+
+div.mw_clear {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+	clear: both;
+}
+
+.portlet {
+	padding: 0 0 0 0;
+	margin: 0 0 0 0;
+}
+
+.portlet div.pBody {
+	padding: 1em 0 1em 0;
+}
+
+textarea {
+	width: 100%;
+	padding: .1em;
+}
+
+#searchBody {
+	text-align: center;
+}
+
+#searchInput {
+	display: block;
+	margin-left: auto;
+	margin-right: auto;
+}
+
+.portlet h5 {
+	padding: 0.1em 0 0.3em 1em;
+	margin: 0 0 0 0;
+	background-color: #dddddd;
+	font-weight: bold;
+	border-bottom: solid 1px #3c78b5;
+	height: 1.1em;
+}
+
+.portlet ul {
+	margin: 0 0 0 1.5em;
+	padding: 0 0 0 0;
+}
+
+#mw_portlets .portlet ul {
+	line-height: 1.4em;
+}
+
+ul {
+	list-style-image: url(bullet.gif);
+}
+
+#p-cactions {
+	height: 1.5em;
+	padding: 0 0 0 0;
+	margin: 0 0 0 14em;
+}
+
+#p-cactions div.pBody {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+}
+
+#p-cactions a,
+#p-cactions a:hover {
+	color: black;
+	text-decoration: none;
+}
+
+#p-cactions ul {
+	display: inline;
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+}
+
+#p-cactions li {
+	margin: 0 0.5em 0 0.5em;
+	padding: 0 0.2em 0 0.2em;
+	display: block;
+	float: left;
+	height: 1.5em;
+	text-transform: lowercase;
+}
+
+#p-cactions li.selected {
+	background-color: #bbbbbb;
+}
+
+#p-cactions li a,
+#p-cactions li a:hover,
+#p-cactions li a:visited {
+	text-decoration: underline;
+	color: #003366;
+}
+
+#p-cactions li.selected a,
+#p-cactions li.selected a:hover,
+#p-cactions li.selected a:visited {
+	text-decoration: none;
+	color: white;
+}
+
+#p-cactions h5 {
+	display: none;
+}
+
+#siteSub {
+	display: none;
+}
+
+#footer {
+	background-color: #f0f0f0;
+	background: url(footer-grad.png) repeat-x 0 0;
+	padding: 10px 1em 1em 1em;
+	clear:both;
+	color: #444444;
+}
+
+#footer a,
+#footer a:hover,
+#footer a:visited {
+	color: #444444;
+	text-decoration: underline;
+}
+
+img {
+	border: none;
+}
+
+#footer li {
+	display: inline;
+	list-style-type: none;
+	padding: 0 0 0 0;
+	margin: 0 0 0 0;
+}
+
+#footer ul {
+	padding: 0 0 0 0;
+	margin: 0 0 0 0;
+}
+
+div.printfooter {
+	display: none;
+}
+
+p {
+	margin: 1em 0 1em 0;
+}
+
+#contentSub {
+	color: #888;
+	font-size: small;
+	padding-left: 2em;
+}
+
+#mw_portlets form {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+}
+
+a {
+        text-decoration: none;
+        color: #003366;
+        background: none;
+}
+a:visited {
+        color: #5a3696;
+}
+a:active {
+        color: #faa700;
+}
+a:hover {
+        text-decoration: underline;
+}
+a.stub {
+        color: #772233;
+}
+a.new {
+        color: #ba0000;
+}
+a.new:visited {
+        color: #a55858;
+}
+
+span.editsection {
+	font-size: small;
+}
+
+h1, h2 {
+	border-bottom: solid 1px #003366;
+}
+
+#preftoc {
+	width: 100%;
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+	height: 1.5em;
+	clear: right;
+}
+
+#preftoc li {
+	margin: 0 0.5em 0 0.5em;
+	padding: 0 0.2em 0 0.2em;
+	display: block;
+	float: left;
+	height: 1.5em;
+	text-transform: lowercase;
+}
+
+#preferences {
+	margin: 0 0 0 0;
+	padding: 0em 1em 1em 1em;
+	border: solid 1px #bbbbbb;
+}
+
+#preferences fieldset {
+	margin-top: 0;
+	border: none;
+}
+
+#preferences h2 {
+}
+
+.mainLegend {
+	display: none;
+}
+
+#preftoc li.selected {
+	background-color: #bbbbbb;
+}
+
+#preftoc li a,
+#preftoc li a:hover,
+#preftoc li a:visited {
+	text-decoration: underline;
+	color: #003366;
+}
+
+#preftoc li.selected a,
+#preftoc li.selected a:hover,
+#preftoc li.selected a:visited {
+	text-decoration: none;
+	color: white;
+}
+
+#mw_content a.external,
+#mw_content a[href ^="gopher://"] {
+        background: url(external.png) center right no-repeat;
+        padding-right: 13px;
+}
+#mw_content a[href ^="https://"],
+.link-https {
+        background: url(lock_icon.gif) center right no-repeat;
+        padding-right: 16px;
+}
+#mw_content a[href ^="mailto:"],
+.link-mailto {
+        background: url(mail_icon.gif) center right no-repeat;
+        padding-right: 18px;
+}
+#mw_content a[href ^="news://"] {
+        background: url(news_icon.png) center right no-repeat;
+        padding-right: 18px;
+}
+#mw_content a[href ^="ftp://"],
+.link-ftp {
+        background: url(file_icon.gif) center right no-repeat;
+        padding-right: 18px;
+}
+#mw_content a[href ^="irc://"],
+.link-irc {
+        background: url(discussionitem_icon.gif) center right no-repeat;
+        padding-right: 18px;
+}
+
+#mw_content a.external[href $=".ogg"], #mw_content a.external[href $=".OGG"],
+#mw_content a.external[href $=".mid"], #mw_content a.external[href $=".MID"],
+#mw_content a.external[href $=".midi"], #mw_content a.external[href $=".MIDI"],
+#mw_content a.external[href $=".mp3"], #mw_content a.external[href $=".MP3"],
+#mw_content a.external[href $=".wav"], #mw_content a.external[href $=".WAV"],
+#mw_content a.external[href $=".wma"], #mw_content a.external[href $=".WMA"],
+.link-audio {
+        background: url("audio.png") center right no-repeat;
+        padding-right: 13px;
+}
+#mw_content a.external[href $=".ogm"], #mw_content a.external[href $=".OGM"],
+#mw_content a.external[href $=".avi"], #mw_content a.external[href $=".AVI"],
+#mw_content a.external[href $=".mpeg"], #mw_content a.external[href $=".MPEG"],
+#mw_content a.external[href $=".mpg"], #mw_content a.external[href $=".MPG"],
+.link-video {
+        background: url("video.png") center right no-repeat;
+        padding-right: 13px;
+}
+#mw_content a.external[href $=".pdf"], #mw_content a.external[href $=".PDF"],
+#mw_content a.external[href *=".pdf#"], #mw_content a.external[href *=".PDF#"],
+#mw_content a.external[href *=".pdf?"], #mw_content a.external[href *=".PDF?"],
+.link-document {
+        background: url("document.png") center right no-repeat;
+        padding-right: 12px;
+}
+
+/* images */
+div.floatright, table.floatright {
+	clear: right;
+	float: right;
+	position: relative;
+	margin: 0 0 .5em .5em;
+	border: 0;
+/*
+	border: .5em solid white;
+	border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+	float: left;
+	clear: left;
+	position: relative;
+	margin: 0 .5em .5em 0;
+	border: 0;
+/*
+	margin: .3em .5em .5em 0;
+	border: .5em solid white;
+	border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+	margin-bottom: .5em;
+	border-style: solid;
+	border-color: white;
+	width: auto;
+}
+div.thumbinner {
+	border: 1px solid #ccc;
+	padding: 3px !important;
+	background-color: #f9f9f9;
+	font-size: 94%;
+	text-align: center;
+	overflow: hidden;
+}
+html .thumbimage {
+	border: 1px solid #ccc;
+}
+html .thumbcaption {
+	border: none;
+	text-align: left;
+	line-height: 1.4em;
+	padding: 3px !important;
+	font-size: 94%;
+}
+div.magnify {
+	float: right;
+	border: none !important;
+	background: none !important;
+}
+div.magnify a, div.magnify img {
+	display: block;
+	border: none !important;
+	background: none !important;
+}
+div.tright {
+	clear: right;
+	float: right;
+	border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+	float: left;
+	clear: left;
+	margin-right: .5em;
+	border-width: .5em 1.4em .8em 0;
+}
+img.thumbborder {
+	border: 1px solid #dddddd;
+}
+.hiddenStructure {
+	display: none;
+}
+
+#mw_content .plainlinks a {
+        background: none !important;
+        padding: 0 !important;
+}
+
+.mw-warning {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+}
+
+#toc,
+.toc {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+	border-spacing: 0;
+	background-color: #f0f0f0;
+	border: solid 1px #bbbbbb;
+}
+
+#toc tr, #toc td {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+}
+
+#toctitle {
+	border-bottom: solid 1px #3c78b5;
+	background-color: #dddddd;
+	margin: 0 0 0 0;
+}
+	
+#toc h2,
+.toc h2 {
+	display: inline;
+	border: none;
+	padding: 0;
+	font-size: 100%;
+	font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+	text-align: center;
+}
+
+#toc ul,
+.toc ul {
+	list-style-type: none;
+	list-style-image: none;
+	margin: 0 1em 0 1em;
+	padding-left: 0;
+	text-align: left;
+}
+
+#toc ul ul,
+.toc ul ul {
+	margin: 0 0 0 2em;
+}
+
+#toc .toctoggle,
+.toc .toctoggle {
+	font-size: 94%;
+}
+
+.mw-warning {
+	margin-left: 50px;
+	margin-right: 50px;
+	text-align: center;
+}
+
+#catlinks {
+	border: solid 1px #bbbbbb;
+	background-color: #f0f0f0;
+	padding: 0.5em 0.5em 0.5em 0.5em;
+	margin: 0 0 0 0;
+}
+
+#catlinks p {
+	margin: 0 0 0 0;
+	padding: 0 0 0 0;
+}
+
+#mw_header h1,
+#p-personal,
+#p-cactions {
+	overflow: hidden;
+}
+
+.autocomment {
+        color: gray;
+}
+
+
+#pagehistory span.user {
+	margin-left: 1.4em;
+	margin-right: .4em;
+}
+#pagehistory span.minor {
+	font-weight: bold;
+}
+#pagehistory li {
+	border: 1px solid white;
+}
+#pagehistory li.selected {
+	background-color: #f9f9f9;
+	border: 1px dashed #aaa;
+}
+
+/* disable interwiki styling */
+#mw_content a.extiw,
+#mw_content a.extiw:active {
+	color: #36b;
+	background: none;
+	padding: 0;
+}
+#mw_content a.external {
+	color: #36b;
+}
+
+
+
+.redirectText {
+	font-size: 150%;
+	margin: 5px;
+}
+
+.printfooter {
+	display: none;
+}
+
+.not-patrolled {
+	background-color: #ffa;
+}
+div.patrollink {
+	font-size: 75%;
+	text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+	font-weight: bold;
+}
+span.unpatrolled {
+	font-weight: bold;
+	color: red;
+}
+
+span.searchmatch {
+	color: red;
+}
+.sharedUploadNotice {
+	font-style: italic;
+}
+
+span.updatedmarker {
+	color: black;
+	background-color: #0f0;
+}
+
+table.gallery {
+	border: 1px solid #ccc;
+	margin: 2px;
+	padding: 2px;
+	background-color: white;
+}
+
+table.gallery tr {
+	vertical-align: top;
+}
+
+table.gallery td {
+	vertical-align: top;
+	background-color: #f9f9f9;
+	border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+	font-weight: bold;
+}
+table.gallery caption {
+	font-weight: bold;
+}
+
+div.gallerybox {
+	margin: 2px;
+}
+
+div.gallerybox div.thumb {
+	text-align: center;
+	border: 1px solid #ccc;
+	margin: 2px;
+}
+
+div.gallerytext {
+	overflow: hidden;
+	font-size: 94%;
+	padding: 2px 4px;
+}
+
+span.comment {
+	font-style: italic;
+}
+
+span.changedby {
+	font-size: 95%;
+}
+
+.previewnote {
+	text-indent: 3em;
+	color: #c00;
+	border-bottom: 1px solid #aaa;
+	padding-bottom: 1em;
+	margin-bottom: 1em;
+}
+
+.previewnote p {
+	margin: 0;
+	padding: 0;
+}
+
+.editExternally {
+	border: 1px solid gray;
+	background-color: #ffffff;
+	padding: 3px;
+	margin-top: 0.5em;
+	float: left;
+	font-size: small;
+	text-align: center;
+}
+.editExternallyHelp {
+	font-style: italic;
+	color: gray;
+}
+
+.toggle {
+	margin-left: 2em;
+	text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+	font-size: 0.8em;
+	margin-left: 0.5em;
+	margin-bottom: 0.5em;
+	width: 300px;
+}
+
+table.mw_metadata caption {
+	font-weight: bold;
+}
+
+table.mw_metadata th {
+	font-weight: normal;
+}
+
+table.mw_metadata td {
+	padding: 0.1em;
+}
+
+table.mw_metadata {
+	border: none;
+	border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+	text-align: center;
+	border: 1px solid #aaaaaa;
+	padding-left: 0.1em;
+	padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+	background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+	background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+	display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+	text-align: center;
+	border: 1px solid #aaaaaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+	margin-bottom: 0.5em;
+	margin-left: 0;
+	margin-right: 0;
+}
+
+#filetoc li {
+	display: inline;
+	list-style-type: none;
+	padding-right: 2em;
+}
+
+input#wpSummary {
+	width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+	margin-right: 0.33em;
+}
+
+#editform .editOptions {
+	display: inline;
+}
+
+#wpSave {
+	font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+	border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+	border: 1px solid #000000;
+	background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+	background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+	background-color:#DDDDDD;
+}
+
+p.revision_saved {
+	color: green;
+	font-weight:bold;
+}
+
+#mw_trackbacks {
+	border: solid 1px #bbbbff;
+	background-color: #eeeeff;
+	padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+	background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+	background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+	background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+	background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+	border: 1px solid #ccc;
+	background: #fff;
+	padding: .2em 1em;
+	color: #000;
+}
+
+div#searchTargetContainer {
+	left:       10px;
+	top:        10px;
+	width:      90%;
+	background: white;
+}
+
+div#searchTarget {
+	padding:    3px;
+	margin:     5px;
+	background: #F0F0F0;
+	border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+	list-style: none;
+}
+
+div#searchTarget ul li:before {
+	color: orange;
+	content: "\00BB \0020";
+}
+
+div#searchTargetHide {
+	float:right;
+	border:solid 1px black;
+	background:gainsboro;
+	padding:2px;
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks, table#sv-software {
+	margin: 1em;
+	padding:0em;
+}
+
+#sv-ext td, #sv-hooks td, #sv-software td,
+#sv-ext th, #sv-hooks th, #sv-software th {
+	border: 1px solid #A0A0A0;
+	padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th, #sv-software th {
+	background-color: #F0F0F0;
+	color: black;
+	padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+	height: 0.8em;
+	border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+	border: 1px solid #aaaaaa;
+	padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+	margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+	font-size: 90%;
+	float: right;
+}
+
+/* Friendlier slave lag warnings */
+div.mw-lag-warn-normal,
+div.mw-lag-warn-high {
+	padding: 3px;
+	text-align: center;
+	margin: 3px auto;
+}
+div.mw-lag-warn-normal {
+	border: 1px solid #FFCC66;
+	background-color: #FFFFCC;
+}
+div.mw-lag-warn-high {
+	font-weight: bold;
+	border: 2px solid #FF0033;
+	background-color: #FFCCCC;
+}
+
+/* Recreating-deleted-page/reupload file warning and log entries */
+div#mw-upload-deleted-warn,
+div#mw-recreate-deleted-warn {
+	padding: 3px;
+	margin-bottom: 3px;
+	border: 2px solid #2F6FAB;
+}
+div#mw-upload-deleted-warn ul li,
+div#mw-recreate-deleted-warn ul li {
+	font-size: 90%;
+}
+.MediaTransformError {
+	background-color: #ccc;
+	padding: 0.1em;
+}
+.MediaTransformError td {
+	text-align: center;
+	vertical-align: middle;
+	font-size: 90%;
+}
+ul {
+	line-height: 1.5em;
+	list-style-type: square;
+	margin: .3em 0 0 1.5em;
+	padding: 0;
+	list-style-image: url(bullet.gif);
+}
+ol {
+	line-height: 1.5em;
+	margin: .3em 0 0 3.2em;
+	padding: 0;
+	list-style-image: none;
+}
+li {
+	margin-bottom: .1em;
+}
+dt {
+	font-weight: bold;
+	margin-bottom: .1em;
+}
+dl {
+	margin-top: .2em;
+	margin-bottom: .5em;
+}
+
+#p-cactions li.new a {
+	color: #cc2200;
+}
+
+pre {
+	border: solid 1px #3c78b5;
+	padding: 0.4em;
+	background-color: #f0f0f0;
+}
+
+.usermessage {
+	background-color: #dadaff;
+}
+
+.mw-topboxes {
+	border-collapse: collapse;
+	margin: 0 -1em 1em -1em;
+	padding: 0 0 8px 0;
+	background: url(footer-grad.png) repeat-x bottom left;
+}
+
+.mw-topbox p {
+	padding: 0 0 0 0;
+	margin: 0 0 0 0;
+}
+
+.mw-topbox {
+        color: black;
+        font-weight: bold;
+	margin: 0 0 0 0;
+	padding: 0 1em 0 1em;
+	vertical-align: middle;
+	border-collapse: collapse;
+	border-bottom: solid 1px #bbbbbb;
+}
+
+#siteSub {
+	background-color: #dddddd;
+}
+
+/* emulate center */
+.center {
+     width:100%;
+     text-align:center;
+}
+*.center * {
+     margin-left:auto;
+     margin-right:auto;
+}
+
+/* table standards */
+.toccolours {
+    border:1px solid #bbbbbb;
+    background-color:#f0f0f0;
+    border-spacing:0pt;
+    margin:0pt;
+    padding:0pt;
+}
+
+

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/news_icon.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/news_icon.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/print.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/modern/print.css	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/modern/print.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,9 @@
+#mw_portlets,
+#p-cactions,
+#p-personal,
+#jump-to-nav,
+#footer,
+span.editsection
+{
+	display: none;
+}

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/rtl.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/modern/rtl.css	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/modern/rtl.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,142 @@
+body {
+	direction: rtl;
+	unicode-bidi: embed;
+}
+
+.editsection {
+	float: left;
+	margin-right: 5px;
+	margin-left: 0; /* bug 9122: undo default LTR */
+}
+
+/* Fix alignment */
+.documentByLine,
+.portletDetails,
+.portletMore {
+	text-align: left;
+}
+
+div div.thumbcaption {
+	text-align: right;
+}
+
+div.magnify,
+#div.townBox {
+	left: auto;
+	right: 0;
+}
+
+/* Fix margins for non-css2 browsers */
+/* top right bottom left */
+
+dd {
+	margin-left: 0;
+	margin-right: 1.6em;
+}
+.tocindent {
+	margin-left: 0;
+	margin-right: 2em;
+}
+div.tright, div.floatright, table.floatright {
+	clear: none;
+}
+div.tleft, div.floatleft, table.floatleft {
+	clear: left;
+}
+div.townBox {
+	margin-left: 0;
+	margin-right: 1em;
+}
+div.townBox dl dd {
+	margin-left: 0;
+	margin-right: 1.1em;
+}
+
+/* Fix link icons */
+.external {
+	padding: 0 !important;
+	background: none !important;
+}
+
+/* js pref toc */
+
+#preftoc {
+	margin-right: 1em;
+}
+
+.errorbox, .successbox, #preftoc li, .prefsection fieldset {
+	float: right;
+}
+
+.prefsection {
+	padding-right: 2em;
+}
+
+/* workaround for moz bug, displayed bullets on left side */
+
+#toc ul {
+	text-align: right;
+}
+
+#toc ul ul {
+	margin: 0 2em 0 0;
+}
+
+input#wpSave, input#wpDiff {
+	margin-right: 0;
+	margin-left: .33em;
+}
+
+#userlogin {
+	float: right;
+	margin: 0 0 1em 3em;
+}
+/* Unblock and Ipblocklist links of Special:Blockip */
+p.mw-ipb-conveniencelinks {
+	float: left;
+}
+
+.toggle {
+	margin-left: 0em;
+	margin-right: 2em;
+}
+table.filehistory th {
+	text-align: right;
+}
+
+#mw_contentwrapper {
+	margin: 0 -15em 0 0;
+	float: left;
+}
+	
+#mw_content {
+	margin: 0 14em 0 0;
+	border-left: none;
+	border-right: solid 1px #bbbbbb;
+}
+
+.portlet ul {
+        margin: 0 1.5em 0 0;
+        padding: 0 0 0 0;
+}
+
+.portlet h5 {
+	padding: 0.1em 1em 0.3em 0;
+}
+
+#p-cactions li {
+	float: right;
+}
+
+#p-personal li {
+	float: right;
+}
+
+#p-cactions {
+	margin: 0 14em 0 0;
+}
+
+#mw_portlets {
+	border-right: none;
+	border-left: solid 1px #bbbbbb;
+}

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/video.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/modern/video.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/IE60Fixes.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/IE60Fixes.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/IE60Fixes.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -80,5 +80,8 @@
 div.tleft {
 	position: relative;
 }
-/*{ border:1px solid Red !important;}*/
 
+/* bug 12846 */
+body.rtl #preftoc a, body.rtl #preftoc a:active {
+	float: left;
+}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/IE70Fixes.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/IE70Fixes.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/IE70Fixes.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -12,10 +12,9 @@
 .rtl #column-one {
 	/* For some reason it tries to inherit the padding-top into every div,
 	 * and I can't figure out how to get it back off.
+	 * Margin works correctly for this use, though.
 	 */
 	padding-top: 0;
-}
-.rtl #column-one #p-navigation {
 	margin-top: 160px;
 }
 
@@ -67,3 +66,9 @@
 	position: relative;
 }
 */
+
+
+#footer li {
+	/* Work around bug with inline <li> tags with right margins and nowrap */
+	margin-right: 0;
+}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/KHTMLFixes.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/KHTMLFixes.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/KHTMLFixes.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,3 +1,4 @@
 /* KHTML fix stylesheet */
 /* work around the horizontal scrollbars */
 #column-content { margin-left: 0; }
+

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/audio.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/audio.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/document.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/document.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/main.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/main.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/main.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -18,17 +18,19 @@
 #content {
 	margin: 2.8em 0 0 12.2em;
 	padding: 0 1em 1.5em 1em;
+	position: relative;
+	z-index: 2;
+}
+#column-one {
+	padding-top: 160px;
+}
+#content {
 	background: white;
 	color: black;
 	border: 1px solid #aaa;
 	border-right: none;
 	line-height: 1.5em;
-	position: relative;
-	z-index: 2;
 }
-#column-one {
-	padding-top: 160px;
-}
 /* the left column width is specified in class .portlet */
 
 /* Font size:
@@ -59,9 +61,11 @@
 /* general styles */
 
 table {
-	background: white;
 	font-size: 100%;
 	color: black;
+	/* we don't want the bottom borders of <h2>s to be visible through
+	   floated tables */
+	background-color: white;
 }
 a {
 	text-decoration: none;
@@ -117,15 +121,21 @@
 	border-bottom: 1px solid #aaa;
 }
 h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
 h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
 h3, h4, h5, h6 {
 	border-bottom: none;
 	font-weight: bold;
 }
 h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
 h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
 h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
 h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
 
 ul {
 	line-height: 1.5em;
@@ -164,7 +174,6 @@
 	line-height: 1.5em;
 }
 legend {
-	background: white;
 	padding: .5em;
 	font-size: 95%;
 }
@@ -221,7 +230,6 @@
 #siteSub {
 	display: none;
 }
-
 #jump-to-nav {
 	display: none;
 }
@@ -400,6 +408,7 @@
 div.floatright p { font-style: italic; }
 div.floatleft, table.floatleft {
 	float: left;
+	clear: left;
 	position: relative;
 	margin: 0 .5em .5em 0;
 	border: 0;
@@ -417,7 +426,7 @@
 	border-color: white;
 	width: auto;
 }
-div.thumb div {
+div.thumbinner {
 	border: 1px solid #ccc;
 	padding: 3px !important;
 	background-color: #f9f9f9;
@@ -425,14 +434,15 @@
 	text-align: center;
 	overflow: hidden;
 }
-div.thumb div a img {
+html .thumbimage {
 	border: 1px solid #ccc;
 }
-div.thumb div div.thumbcaption {
+html .thumbcaption {
 	border: none;
 	text-align: left;
 	line-height: 1.4em;
-	padding: .3em 0 .1em 0;
+	padding: 3px !important;
+	font-size: 94%;
 }
 div.magnify {
 	float: right;
@@ -451,20 +461,16 @@
 }
 div.tleft {
 	float: left;
+	clear: left;
 	margin-right: .5em;
 	border-width: .5em 1.4em .8em 0;
 }
-
+img.thumbborder {
+	border: 1px solid #dddddd;
+}
 .hiddenStructure {
 	display: none;
-	speak: none;
 }
-img.tex {
-	vertical-align: middle;
-}
-span.texhtml {
-	font-family: serif;
-}
 
 /*
 ** classes for special content elements like town boxes
@@ -543,29 +549,6 @@
 }
 
 /*
-** Diff rendering
-*/
-table.diff, td.diff-otitle, td.diff-ntitle {
-	background-color: white;
-}
-td.diff-addedline {
-	background: #cfc;
-	font-size: smaller;
-}
-td.diff-deletedline {
-	background: #ffa;
-	font-size: smaller;
-}
-td.diff-context {
-	background: #eee;
-	font-size: smaller;
-}
-span.diffchange {
-	color: red;
-	font-weight: bold;
-}
-
-/*
 ** keep the whitespace in front of the ^=, hides rule from konqueror
 ** this is css3, the validator doesn't like it when validating as css2
 */
@@ -598,6 +581,32 @@
 	background: url(discussionitem_icon.gif) center right no-repeat;
 	padding-right: 18px;
 }
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+	background: url("audio.png") center right no-repeat;
+	padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+	background: url("video.png") center right no-repeat;
+	padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+	background: url("document.png") center right no-repeat;
+	padding-right: 12px;
+}
+
 /* disable interwiki styling */
 #bodyContent a.extiw,
 #bodyContent a.extiw:active {
@@ -687,10 +696,10 @@
 */
 
 #p-logo {
-	z-index: 3;
-	position: absolute; /*needed to use z-index */
 	top: 0;
 	left: 0;
+	position: absolute; /*needed to use z-index */
+	z-index: 3;
 	height: 155px;
 	width: 12em;
 	overflow: visible;
@@ -709,30 +718,6 @@
 }
 
 /*
-** the navigation portlet
-*/
-
-#p-navigation {
-	position: relative;
-	z-index: 3;
-}
-
-#p-navigation .pBody {
-	padding-right: 0;
-}
-
-#p-navigation a {
-	display: block;
-}
-
-#p-navigation li.active a, #p-navigation li.active a:hover {
-	text-decoration: none;
-	display: inline;
-	font-weight: bold;
-}
-
-
-/*
 ** Search portlet
 */
 #p-search {
@@ -761,31 +746,31 @@
 /*
 ** the personal toolbar
 */
-
 #p-personal {
+	position: absolute;
+	left: 0;
+	top: 0;
+	z-index: 0;
+}
+#p-personal {
 	width: 100%;
 	white-space: nowrap;
 	padding: 0;
 	margin: 0;
-	position: absolute;
-	left: 0;
-	top: 0;
-	z-index: 0;
 	border: none;
 	background: none;
 	overflow: visible;
 	line-height: 1.2em;
 }
-
 #p-personal h5 {
 	display: none;
 }
 #p-personal .portlet,
 #p-personal .pBody {
+	z-index: 0;
 	padding: 0;
 	margin: 0;
 	border: none;
-	z-index: 0;
 	overflow: visible;
 	background: none;
 }
@@ -797,7 +782,6 @@
 	padding: 0 2em 0 3em;
 	margin: 0;
 	text-align: right;
-	text-transform: lowercase;
 	list-style: none;
 	z-index: 0;
 	background: none;
@@ -813,9 +797,6 @@
 	line-height: 1.2em;
 	background: none;
 }
-#p-personal li.active {
-	font-weight: bold;
-}
 #p-personal li a {
 	text-decoration: none;
 	color: #005896;
@@ -839,7 +820,12 @@
 	padding-left: 20px;
 	text-transform: none;
 }
-
+#p-personal ul {
+	text-transform: lowercase;
+}
+#p-personal li.active {
+	font-weight: bold;
+}
 /*
 ** the page-related actions- page/talk, edit etc
 */
@@ -858,9 +844,6 @@
 	list-style: none;
 	font-size: 95%;
 }
-#p-cactions .hiddenStructure {
-	display: none;
-}
 #p-cactions ul {
 	list-style: none;
 }
@@ -883,16 +866,15 @@
 	color: #002bb8;
 	border: none;
 	padding: 0 .8em .3em;
-	text-decoration: none;
-	text-transform: lowercase;
 	position: relative;
 	z-index: 0;
 	margin: 0;
+	text-decoration: none;
 }
 #p-cactions li.selected a {
 	z-index: 3;
-		background-color: #fff;
 	padding: 0 1em .2em!important;
+	background-color: white;
 }
 #p-cactions .new a {
 	color: #ba0000;
@@ -900,7 +882,7 @@
 #p-cactions li a:hover {
 	z-index: 3;
 	text-decoration: none;
-		background-color: #fff;
+	background-color: white;
 }
 #p-cactions h5 {
 	display: none;
@@ -922,6 +904,20 @@
 li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
 	margin-left: 1.6em;
 }
+#p-cactions .pBody {
+	font-size: 1em;
+	background-color: transparent;
+	color: inherit;
+	border-collapse: inherit;
+	border: 0;
+	padding: 0;
+}
+#p-cactions .hiddenStructure {
+	display: none;
+}
+#p-cactions li a {
+	text-transform: lowercase;
+}
 
 /*
 ** the remaining portlets
@@ -954,8 +950,6 @@
 	display: inline;
 	margin: 0 1.3em;
 }
-/* hide from incapable browsers */
-head:first-child+body #footer li { white-space: nowrap; }
 #f-poweredbyico, #f-copyrightico {
 	margin: 0 8px;
 	position: relative;
@@ -978,11 +972,13 @@
 	clear: both;
 }
 #preftoc li {
+	background-color: #f0f0f0;
+	color: #000;
+}
+#preftoc li {
 	margin: 1px -2px 1px 2px;
 	float: left;
 	padding: 2px 0 3px 0;
-	background-color: #f0f0f0;
-	color: #000;
 	border: 1px solid #fff;
 	border-right-color: #716f64;
 	border-bottom: 0;
@@ -1048,11 +1044,9 @@
 	display: none;
 }
 div.prefsectiontip {
-	font-size: 95%;
-	margin-top: 0;
-	background-color: #FFC1C1;
-	padding: .2em .7em;
-	clear: both;
+	font-size: x-small;
+	padding: .2em 2em;
+	color: #666;
 }
 .btnSavePrefs {
 	font-weight: bold;
@@ -1090,19 +1084,19 @@
 	padding-top: 0;
 }
 
-div#userlogin .captcha {
+div#userlogin .captcha,
+div#userloginForm .captcha {
 	border: 1px solid #bbb;
 	padding: 1.5em 2em;
-	width: 400px;
 	background-color: white;
 }
 
 
-#userloginprompt {
+#userloginprompt, #languagelinks {
 	font-size: 85%;
 }
 
-#login-emailforlost {
+#login-sectiontip {
 	font-size: 85%;
 	line-height: 1.2;
 	padding-top: 2em;
@@ -1173,10 +1167,11 @@
 	background-color: #ffa;
 }
 div.patrollink {
+	clear: both;
 	font-size: 75%;
 	text-align: right;
 }
-span.newpage, span.minor, span.searchmatch {
+span.newpage, span.minor, span.searchmatch, span.bot {
 	font-weight: bold;
 }
 span.unpatrolled {
@@ -1195,15 +1190,6 @@
 	color: black;
 	background-color: #0f0;
 }
-span.newpageletter {
-	font-weight: bold;
-	color: black;
-	background-color: yellow;
-}
-span.minoreditletter {
-	color: black;
-	background-color: #c5ffe6;
-}
 
 table.gallery {
 	border: 1px solid #ccc;
@@ -1221,10 +1207,17 @@
 	background-color: #f9f9f9;
 	border: solid 2px white;
 }
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+	font-weight: bold;
+}
+table.gallery caption {
+	font-weight: bold;
+}
 
 div.gallerybox {
 	margin: 2px;
-	width:  150px;
 }
 
 div.gallerybox div.thumb {
@@ -1234,6 +1227,7 @@
 }
 
 div.gallerytext {
+	overflow: hidden;
 	font-size: 94%;
 	padding: 2px 4px;
 }
@@ -1273,12 +1267,6 @@
 	color: gray;
 }
 
-li span.deleted, span.history-deleted {
-	text-decoration: line-through;
-	color: #888;
-	font-style: italic;
-}
-
 .toggle {
 	margin-left: 2em;
 	text-indent: -2em;
@@ -1347,6 +1335,10 @@
 	padding-right: 2em;
 }
 
+input#wpSummary {
+	width: 80%;
+}
+
 /* @bug 1714 */
 input#wpSave, input#wpDiff {
 	margin-right: 0.33em;
@@ -1441,3 +1433,127 @@
 	content: "\00BB \0020";
 }
 
+div#searchTargetHide {
+	float:right;
+	border:solid 1px black;
+	background:gainsboro;
+	padding:2px;
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks, table#sv-software {
+	margin: 1em;
+	padding:0em;
+}
+
+#sv-ext td, #sv-hooks td, #sv-software td,
+#sv-ext th, #sv-hooks th, #sv-software th {
+	border: 1px solid #A0A0A0;
+	padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th, #sv-software th {
+	background-color: #F0F0F0;
+	color: black;
+	padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+	height: 0.8em;
+	border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+	border: 1px solid #aaaaaa;
+	padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+	margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+	font-size: 90%;
+	float: right;
+}
+
+/* Friendlier slave lag warnings */
+div.mw-lag-warn-normal,
+div.mw-lag-warn-high {
+	padding: 3px;
+	text-align: center;
+	margin: 3px auto;
+}
+div.mw-lag-warn-normal {
+	border: 1px solid #FFCC66;
+	background-color: #FFFFCC;
+}
+div.mw-lag-warn-high {
+	font-weight: bold;
+	border: 2px solid #FF0033;
+	background-color: #FFCCCC;
+}
+
+/* Recreating-deleted-page/reupload file warning and log entries */
+div#mw-upload-deleted-warn,
+div#mw-recreate-deleted-warn {
+	padding: 3px;
+	margin-bottom: 3px;
+	border: 2px solid #2F6FAB;
+}
+div#mw-upload-deleted-warn ul li,
+div#mw-recreate-deleted-warn ul li {
+	font-size: 90%;
+}
+.MediaTransformError {
+	background-color: #ccc;
+	padding: 0.1em;
+}
+.MediaTransformError td {
+	text-align: center;
+	vertical-align: middle;
+	font-size: 90%;
+}

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/rtl.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/rtl.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/rtl.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -41,6 +41,11 @@
 	float: right;
 	clear: right;
 }
+.editsection {
+	float: left;
+	margin-right: 5px;
+	margin-left: 0; /* bug 9122: undo default LTR */
+}
 /* recover IEMac (might be fine with the float, but usually it's close to IE */
 *>body .portlet {
 	float: none;
@@ -210,3 +215,24 @@
 	float: right;
 	margin: 0 0 1em 3em;
 }
+/* Unblock and Ipblocklist links of Special:Blockip */
+p.mw-ipb-conveniencelinks {
+	float: left;
+}
+
+.toggle {
+	margin-left: 0em;
+	margin-right: 2em;
+}
+table.filehistory th {
+	text-align: right;
+}
+
+/**
+ * Lists:
+ * The following lines don't have a visible effect on non-Gecko browsers
+ * They fix a problem ith Gecko browsers rendering lists to the right of
+ * left-floated objects in an RTL layout.
+ */
+html>body.rtl #bodyContent ul { display:table; }
+html>body.rtl #bodyContent ol { display:table; }
\ No newline at end of file

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/user.gif
===================================================================
(Binary files differ)

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/video.png
===================================================================
(Binary files differ)


Property changes on: trunk/wiki.openmoko.org/space_www_wiki_skins/monobook/video.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/IE60Fixes.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/IE60Fixes.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/IE60Fixes.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -7,20 +7,19 @@
 	height: 1%;
 }
 #column-content #content {
-	margin-left: 14.2em;
-	margin-top: 1.1em;
+	margin-left: 12.2em;
+	margin-top: 3em;
 	height: 1%;
 }
 #column-one {
 	position: absolute;
 	top: 0;
-	left: 1.4em;
+	left: 0;
 	z-index: 4;
-	padding-top: 160px;
 }
 #footer {
-	margin-left: 15.7em;
-/*	border-left: 1px solid #fabd23;*/
+	margin-left: 13.6em;
+	border-left: 1px solid #fabd23;
 }
 
 /* the tabs */
@@ -39,19 +38,17 @@
 #p-cactions li a {
 	display: inline-block !important;
 	vertical-align: top;
-	padding-bottom: 0.17em;
-/*	border: solid #aaa;*/
-/*	border-width: 1px 1px 0;*/
+	padding-bottom: 0;
+	border: solid #aaa;
+	border-width: 1px 1px 0;
 }
 #p-cactions li.selected a {
 	border-color: #fabd23;
 	padding-bottom: 0.17em;
-	top: 1px;
 }
 #p-cactions li a:hover {
 	padding-bottom: 0.17em;
 }
-
 #p-navigation a {
 	display: inline-block;
 	width: 100%;
@@ -83,33 +80,8 @@
 div.tleft {
 	position: relative;
 }
-/*{ border:1px solid Red !important;}*/
 
-#p-logo {
-/*	top: 1.4em;*/
-	left: 0em;
-	display: none;
+/* bug 12846 */
+body.rtl #preftoc a, body.rtl #preftoc a:active {
+	float: left;
 }
-
-#p-logo a {
-}
-
-.portlet ul {
-	margin-left: 2em;
-}
-
-.portlet a {
-	margin-left: -5px;
-}
-
-
-#p-navigation  {
-	margin-top: 0;
-}
-
-#p-navigation,
-#p-search,
-#p-tb {
-	position: relative;
-	top: -4.85em;
-}
\ No newline at end of file

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/IE70Fixes.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/IE70Fixes.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/IE70Fixes.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -4,8 +4,8 @@
 
 /* This bit is needed to make links clickable... WTF */
 #column-content #content {
-	margin-left: 14.2em;
-	margin-top: 1.1em;
+	margin-left: 12.2em;
+	margin-top: 3em;
 	height: 1%;
 }
 
@@ -18,30 +18,13 @@
 	margin-top: 160px;
 }
 
-#column-one {
-	position: absolute;
-	top: 90px;
-}
-
-#p-logo {
-	left: 0em;
-}
-
 /* the tabs */
 
 #p-cactions {
 	z-index: 3;
-	top: -1.2em;
 }
 
-#p-personal {
-	position: relative;
-	top: -12em;
-	float: right;
-	padding-right:15px;
-}
 
-
 #p-cactions li {
 	padding-bottom: 0 !important;
 	border: none;
@@ -53,9 +36,9 @@
 #p-cactions li a {
 	display: inline-block !important;
 	vertical-align: top;
-	padding-bottom: 0.17em;
-	/*border: solid #aaa;
-	border-width: 1px 1px 0;*/
+	padding-bottom: 0;
+	border: solid #aaa;
+	border-width: 1px 1px 0;
 }
 #p-cactions li.selected a {
 	border-color: #fabd23;
@@ -85,11 +68,6 @@
 */
 
 
-#footer {
-	margin-left: 15.8em;
-	padding-top: 2.7em;
-}
-
 #footer li {
 	/* Work around bug with inline <li> tags with right margins and nowrap */
 	margin-right: 0;

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/KHTMLFixes.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/KHTMLFixes.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/KHTMLFixes.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,3 +1,4 @@
 /* KHTML fix stylesheet */
 /* work around the horizontal scrollbars */
 #column-content { margin-left: 0; }
+

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/main.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/main.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/main.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -9,35 +9,24 @@
 ** All you guys rock :)
 */
 
-/**
- * Stylesheet for screen/projection.  All rules not marked media-specific are
- * shared with handheld.css and should be updated in tandem.  The rules can't
- * be in the same file because old browsers like IE5 won't obey @media rules.
- *
- * Rules that are screen/projection-specific are marked with commented-out
- * @media rules and indentation.
- */
-
-/* @media screen, projection { */
-		#column-content {
-		width: 100%;
-		float: right;
-		margin: 0 0 .6em -12.2em;
-		padding: 0;
-	}
-	#content {
-		border-top: 1px solid #E1E1E1;
-		margin: 1.0em 0 0 14.2em;
-		padding: 0.63em 2em 1.5em 2em;
-		position: relative;
-		z-index: 2;
-		font-size: 1.1em;
-	}
-	#column-one {
-		padding-top: 5.20em;
-	}
-/* } */
+#column-content {
+	width: 100%;
+	float: right;
+	margin: 0 0 .6em -12.2em;
+	padding: 0;
+}
 #content {
+	border-top: 1px solid #E1E1E1;
+	margin: 1.0em 0 0 14.2em;
+	padding: 0.63em 2em 1.5em 2em;
+	position: relative;
+	z-index: 2;
+	font-size: 1.1em;
+}
+#column-one {
+	padding-top: 5.20em;
+}
+#content {
 	background: white;
 	color: #333;
 	/* border: 1px solid #aaa; */
@@ -114,12 +103,10 @@
 	border: none;
 	vertical-align: middle;
 }
-/* @media screen, projection { */
-	p {
-		margin: .4em 0 .5em 0;
-		line-height: 1.5em;
-	}
-/* } */
+p {
+	margin: .4em 0 .5em 0;
+	line-height: 1.5em;
+}
 p img {
 	margin: 0;
 }
@@ -253,14 +240,12 @@
 ** the main content area
 */
 
-/* @media screen, projection { */
-	#siteSub {
-		display: none;
-	}
-	#jump-to-nav {
-		display: none;
-	}
-/* } */
+#siteSub {
+	display: none;
+}
+#jump-to-nav {
+	display: none;
+}
 
 #contentSub, #contentSub2 {
 	font-size: 84%;
@@ -493,7 +478,9 @@
 	margin-right: .5em;
 	border-width: .5em 1.4em .8em 0;
 }
-
+img.thumbborder {
+	border: 1px solid #dddddd;
+}
 .hiddenStructure {
 	display: none;
 	speak: none;
@@ -755,47 +742,44 @@
 ** Logo properties
 */
 
-/* @media screen, projection { */
-	#p-logo {
-		top: 26px;
-		left: 18px;
-		position: absolute; /*needed to use z-index */
-		z-index: 3;
-		height: 40px;
-		width: 12em;
-		overflow: visible;
-		display: none;
-	}
-	#p-logo h5 {
-		display: none;
-	}
-	#p-logo a,
-	#p-logo a:hover {
-		display: block;
-		height: 40px;
-		width: 12.2em;
-		background-repeat: no-repeat;
-		background-position: 35% 50% !important;
-		text-decoration: none;
-	}
-/* } */
+#p-logo {
+	top: 26px;
+	left: 18px;
+	position: absolute; /*needed to use z-index */
+	z-index: 3;
+	height: 40px;
+	width: 12em;
+	overflow: visible;
+	display: none;
+}
+#p-logo h5 {
+	display: none;
+}
+#p-logo a,
+#p-logo a:hover {
+	display: block;
+	height: 40px;
+	width: 12.2em;
+	background-repeat: no-repeat;
+	background-position: 35% 50% !important;
+	text-decoration: none;
+}
+
 /*
 ** the navigation portlet
 */
 
-/* @media screen, projection { */
-	#p-navigation {
-		position: relative;
-		z-index: 3;
-		margin-top: -5em;
-	}
-	#p-navigation a {
-		display: block;
-	}
-	#p-navigation li.active a, #p-navigation li.active a:hover {
-		display: inline;
-	}
-/* } */
+#p-navigation {
+	position: relative;
+	z-index: 3;
+	margin-top: -5em;
+}
+#p-navigation a {
+	display: block;
+}
+#p-navigation li.active a, #p-navigation li.active a:hover {
+	display: inline;
+}
 
 #p-navigation .pBody {
 	padding-right: 0;
@@ -810,12 +794,10 @@
 /*
 ** Search portlet
 */
-/* @media screen, projection { */
-	#p-search {
-		position: relative;
-		z-index: 3;
-	}
-/* } */
+#p-search {
+	position: relative;
+	z-index: 3;
+}
 input.searchButton {
 	margin-top: 1px;
 	font-size: 95%;
@@ -838,83 +820,81 @@
 /*
 ** the personal toolbar
 */
-/* @media screen, projection { */
-	#p-personal {
-		position: absolute;
-		left: 0;
-		top: 5px;
-		z-index: 0;
-	}
-	#p-personal {
-		width: 100%;
-		white-space: nowrap;
-		padding: 0;
-		margin: 0;
-		border: none;
-		background: none;
-		overflow: visible;
-		line-height: 1.2em;
-	}
-	#p-personal h5 {
-		display: none;
-	}
-	#p-personal .portlet,
-	#p-personal .pBody {
-		z-index: 0;
-		padding: 0;
-		margin: 0;
-		border: none;
-		overflow: visible;
-		background: none;
-	}
+#p-personal {
+	position: absolute;
+	left: 0;
+	top: 5px;
+	z-index: 0;
+}
+#p-personal {
+	width: 100%;
+	white-space: nowrap;
+	padding: 0;
+	margin: 0;
+	border: none;
+	background: none;
+	overflow: visible;
+	line-height: 1.2em;
+}
+#p-personal h5 {
+	display: none;
+}
+#p-personal .portlet,
+#p-personal .pBody {
+	z-index: 0;
+	padding: 0;
+	margin: 0;
+	border: none;
+	overflow: visible;
+	background: none;
+}
 /* this is the ul contained in the portlet */
-	#p-personal ul {
-		border: none;
-		line-height: 1.4em;
-		color: #333;
-		padding: 0 2em 0 3em;
-		margin: 0;
-		text-align: right;
-		list-style: none;
-		z-index: 0;
-		background: none;
-		cursor: default;
-	}
-	#p-personal li {
-		z-index: 0;
-		border: none;
-		padding: 0;
-		display: inline;
-		color: #2f6fab;
-		margin-left: 1em;
-		line-height: 1.2em;
-		background: none;
-	}
-	#p-personal li a {
-		text-decoration: none;
-		color: #333;
-		padding-bottom: .2em;
-		background: none;
-	}
-	#p-personal li a:hover {
-		background-color: white;
-		padding-bottom: .2em;
-		text-decoration: none;
-	}
-	#p-personal li.active a:hover {
-		background-color: transparent;
-	}
-	/* the icon in front of the user name, single quotes
-	in bg url to hide it from iemac */
-	li#pt-userpage,
-	li#pt-anonuserpage,
-	li#pt-login {
-		background: url(user.gif) top left no-repeat;
-		padding-left: 20px;
-		text-transform: none;
-	}
-/* } */
 #p-personal ul {
+	border: none;
+	line-height: 1.4em;
+	color: #333;
+	padding: 0 2em 0 3em;
+	margin: 0;
+	text-align: right;
+	list-style: none;
+	z-index: 0;
+	background: none;
+	cursor: default;
+}
+#p-personal li {
+	z-index: 0;
+	border: none;
+	padding: 0;
+	display: inline;
+	color: #2f6fab;
+	margin-left: 1em;
+	line-height: 1.2em;
+	background: none;
+}
+#p-personal li a {
+	text-decoration: none;
+	color: #333;
+	padding-bottom: .2em;
+	background: none;
+}
+#p-personal li a:hover {
+	background-color: white;
+	padding-bottom: .2em;
+	text-decoration: none;
+}
+#p-personal li.active a:hover {
+	background-color: transparent;
+}
+/* the icon in front of the user name, single quotes
+in bg url to hide it from iemac */
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login {
+	background: url(user.gif) top left no-repeat;
+	padding-left: 20px;
+	text-transform: none;
+}
+#p-personal ul {
 	text-transform: lowercase;
 }
 #p-personal li.active {
@@ -923,95 +903,93 @@
 /*
 ** the page-related actions- page/talk, edit etc
 */
-/* @media screen, projection { */
-	#p-cactions {
-		position: absolute;
-		top: 6.2em;
-		left: 16.5em;
-		margin: 0;
-		white-space: nowrap;
-		width: 76%;
-		line-height: 1.1em;
-		overflow: visible;
-		background: none;
-		border-collapse: collapse;
-		padding-left: 1em;
-		list-style: none;
-		font-size: 1.0em;
-	}
-	#p-cactions ul {
-		list-style: none;
-	}
-	#p-cactions li {
-		border: none;
-		display: inline;
-		/*border: 1px solid #aaa;*/
-		border-bottom: none;
-		padding: 0 0 .0em 0;
-		margin: 0 .0em 0 0;
-		overflow: visible;
-	}
-	#p-cactions li.selected {
-		/*border-color: #fabd23;*/
-/*		padding: 0 0 .2em 0;*/
-		font-weight: bold;
-		background: white;
-	}
-	#p-cactions li a {
-		background-color: #f1f1f1;
-		color: #333;
-		border: none;
-		padding: .2em 0.98em .4em;
-		position: relative;
-		top: 1px;
-		z-index: 0;
-		margin: 0;
-		text-decoration: none;
-	}
-	#p-cactions li.selected a {
-		top: 0px;
-		z-index: 3;
-/*		padding: 0 1em .2em!important;*/
-		background-color: #ddd !important;
-		color: #333;
-	}
-	#p-cactions .new a {
-		color: #FF3300;
-	}
-	#p-cactions li a:hover {
-		z-index: 3;
-		text-decoration: none;
-		background-color: #ddd;
-	}
-	#p-cactions h5 {
-		display: none;
-	}
-	#p-cactions li.istalk {
-		margin-right: 0;
-	}
-	#p-cactions li.istalk a {
-		padding-right: .5em;
-	}
-	#p-cactions #ca-addsection a {
-		padding-left: .4em;
-		padding-right: .4em;
-	}
-	/* offsets to distinguish the tab groups */
-	li#ca-talk {
-		margin-right: 1.6em;
-	}
-	li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
-		margin-left: 1.6em;
-	}
-	#p-cactions .pBody {
-		font-size: 1em;
-		background-color: transparent;
-		color: inherit;
-		border-collapse: inherit;
-		border: 0;
-		padding: 0;
-	}
-/* } */
+#p-cactions {
+	position: absolute;
+	top: 6.2em;
+	left: 16.5em;
+	margin: 0;
+	white-space: nowrap;
+	width: 76%;
+	line-height: 1.1em;
+	overflow: visible;
+	background: none;
+	border-collapse: collapse;
+	padding-left: 1em;
+	list-style: none;
+	font-size: 1.0em;
+}
+#p-cactions ul {
+	list-style: none;
+}
+#p-cactions li {
+	display: inline;
+	border: none;
+	/*border: 1px solid #aaa;*/
+	border-bottom: none;
+	padding: 0 0 .0em 0;
+	margin: 0 .0em 0 0;
+	overflow: visible;
+}
+#p-cactions li.selected {
+	/*border-color: #fabd23;*/
+/*	padding: 0 0 .2em 0;*/
+	font-weight: bold;
+	background: white;
+}
+#p-cactions li a {
+	background-color: #f1f1f1;
+	color: #333;
+	border: none;
+	padding: .2em 0.98em .4em;
+	position: relative;
+	top: 1px;
+	z-index: 0;
+	margin: 0;
+	text-decoration: none;
+}
+#p-cactions li.selected a {
+	top: 0px;
+	z-index: 3;
+/*	padding: 0 1em .2em!important;*/
+	background-color: #ddd !important;
+	color: #333;
+}
+#p-cactions .new a {
+	color: #FF3300;
+}
+#p-cactions li a:hover {
+	z-index: 3;
+	text-decoration: none;
+	background-color: #ddd;
+}
+#p-cactions h5 {
+	display: none;
+}
+#p-cactions li.istalk {
+	margin-right: 0;
+}
+#p-cactions li.istalk a {
+	padding-right: .5em;
+}
+#p-cactions #ca-addsection a {
+	padding-left: .4em;
+	padding-right: .4em;
+}
+/* offsets to distinguish the tab groups */
+li#ca-talk {
+	margin-right: 1.6em;
+}
+li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+	margin-left: 1.6em;
+}
+#p-cactions .pBody {
+	font-size: 1em;
+	background-color: transparent;
+	color: inherit;
+	border-collapse: inherit;
+	border: 0;
+	padding: 0;
+}
 #p-cactions .hiddenStructure {
 	display: none;
 }
@@ -1022,13 +1000,11 @@
 /*
 ** the remaining portlets
 */
-/* @media screen, projection { */
-	#p-tbx,
-	#p-lang {
-		position: relative;
-		z-index: 3;
-	}
-/* } */
+#p-tbx,
+#p-lang {
+	position: relative;
+	z-index: 3;
+}
 
 /* TODO: #t-iscite is only used by the Cite extension, come up with some
  * system which allows extensions to add to this file on the fly
@@ -1081,21 +1057,19 @@
 	background-color: #f0f0f0;
 	color: #000;
 }
-/* @media screen, projection { */
-	#preftoc li {
-		margin: 1px -2px 1px 2px;
-		float: left;
-		padding: 2px 0 3px 0;
-		border: 1px solid #fff;
-		border-right-color: #716f64;
-		border-bottom: 0;
-		position: relative;
-		white-space: nowrap;
-		list-style-type: none;
-		list-style-image: none;
-		z-index: 3;
-	}
-/* } */
+#preftoc li {
+	margin: 1px -2px 1px 2px;
+	float: left;
+	padding: 2px 0 3px 0;
+	border: 1px solid #fff;
+	border-right-color: #716f64;
+	border-bottom: 0;
+	position: relative;
+	white-space: nowrap;
+	list-style-type: none;
+	list-style-image: none;
+	z-index: 3;
+}
 #preftoc li.selected {
 	font-weight: bold;
 	background-color: #f9f9f9;
@@ -1148,11 +1122,9 @@
 .prefsection table, .prefsection legend {
 	background-color: #F9F9F9;
 }
-/* @media screen, projection { */
-	.mainLegend {
-		display: none;
-	}
-/* } */
+.mainLegend {
+	display: none;
+}
 div.prefsectiontip {
 	font-size: 95%;
 	margin-top: 0;
@@ -1196,7 +1168,8 @@
 	padding-top: 0;
 }
 
-div#userlogin .captcha {
+div#userlogin .captcha,
+div#userloginForm .captcha {
 	border: 1px solid #bbb;
 	padding: 1.5em 2em;
 	width: 400px;
@@ -1222,29 +1195,27 @@
 	font-weight: bold;
 }
 
-/* @media screen, projection { */
-	/*
-	** IE/Mac fixes, hope to find a validating way to move this
-	** to a separate stylesheet. This would work but doesn't validate:
-	** @import("IEMacFixes.css");
-	*/
-	/* tabs: border on the a, not the div */
-	* > html #p-cactions li { border: none; }
-	* > html #p-cactions li a {
-		border: 1px solid #aaa;
-		border-bottom: none;
-	}
-	* > html #p-cactions li.selected a { border-color: #fabd23; }
-	/* footer icons need a fixed width */
-	* > html #f-poweredbyico,
-	* > html #f-copyrightico { width: 88px; }
-	* > html #bodyContent,
-	* > html #bodyContent pre {
-		overflow-x: auto;
-		width: 100%;
-		padding-bottom: 25px;
-	}
-/* } */
+/*
+** IE/Mac fixes, hope to find a validating way to move this
+** to a separate stylesheet. This would work but doesn't validate:
+** @import("IEMacFixes.css");
+*/
+/* tabs: border on the a, not the div */
+* > html #p-cactions li { border: none; }
+* > html #p-cactions li a {
+	border: 1px solid #aaa;
+	border-bottom: none;
+}
+* > html #p-cactions li.selected a { border-color: #fabd23; }
+/* footer icons need a fixed width */
+* > html #f-poweredbyico,
+* > html #f-copyrightico { width: 88px; }
+* > html #bodyContent,
+* > html #bodyContent pre {
+	overflow-x: auto;
+	width: 100%;
+	padding-bottom: 25px;
+}
 
 /* more IE fixes */
 /* float/negative margin brokenness */
@@ -1329,11 +1300,14 @@
 	background-color: #f9f9f9;
 	border: solid 2px white;
 }
-
+/* Keep this temporarily so that cached pages will display right */
 table.gallery td.galleryheader {
-	text-align: center;
+    text-align: center;
 	font-weight: bold;
 }
+table.gallery caption {
+	font-weight: bold;
+}
 
 div.gallerybox {
 	margin: 2px;
@@ -1558,6 +1532,13 @@
 	content: "\00BB \0020";
 }
 
+div#searchTargetHide {
+	float:right;
+	border:solid 1px black;
+	background:gainsboro;
+	padding:2px;
+}
+
 div.multipageimagenavbox {
    border: solid 1px silver;
    padding: 4px;
@@ -1582,17 +1563,17 @@
 
 /** Special:Version */
 
-table#sv-ext, table#sv-hooks {
+table#sv-ext, table#sv-hooks, table#sv-software {
 	margin: 1em;
 	padding:0em;
 }
 
-#sv-ext td, #sv-hooks td,
-#sv-ext th, #sv-hooks th {
+#sv-ext td, #sv-hooks td, #sv-software td,
+#sv-ext th, #sv-hooks th, #sv-software th {
 	border: 1px solid #A0A0A0;
 	padding: 0 0.15em 0 0.15em;
 }
-#sv-ext th, #sv-hooks th {
+#sv-ext th, #sv-hooks th, #sv-software th {
 	background-color: #F0F0F0;
 	color: black;
 	padding: 0 0.15em 0 0.15em;
@@ -1631,6 +1612,51 @@
 .mw-summary-preview {
 	margin: 0.1em 0;
 }
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+	font-size: 90%;
+	float: right;
+}
+
+/* Friendlier slave lag warnings */
+div.mw-lag-warn-normal,
+div.mw-lag-warn-high {
+	padding: 3px;
+	text-align: center;
+	margin: 3px auto;
+}
+div.mw-lag-warn-normal {
+	border: 1px solid #FFCC66;
+	background-color: #FFFFCC;
+}
+div.mw-lag-warn-high {
+	font-weight: bold;
+	border: 2px solid #FF0033;
+	background-color: #FFCCCC;
+}
+
+/* Recreating-deleted-page/reupload file warning and log entries */
+div#mw-upload-deleted-warn,
+div#mw-recreate-deleted-warn {
+	padding: 3px;
+	margin-bottom: 3px;
+	border: 2px solid #2F6FAB;
+}
+div#mw-upload-deleted-warn ul li,
+div#mw-recreate-deleted-warn ul li {
+	font-size: 90%;
+}
+.MediaTransformError {
+	background-color: #ccc;
+	padding: 0.1em;
+}
+.MediaTransformError td {
+	text-align: center;
+	vertical-align: middle;
+	font-size: 90%;
+}
+
 #toolbar { clear: both; }
 
 .mw-plusminus-null { color: #aaa; }

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/rtl.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/rtl.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/rtl.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -44,6 +44,7 @@
 .editsection {
 	float: left;
 	margin-right: 5px;
+	margin-left: 0; /* bug 9122: undo default LTR */
 }
 /* recover IEMac (might be fine with the float, but usually it's close to IE */
 *>body .portlet {
@@ -214,3 +215,24 @@
 	float: right;
 	margin: 0 0 1em 3em;
 }
+/* Unblock and Ipblocklist links of Special:Blockip */
+p.mw-ipb-conveniencelinks {
+	float: left;
+}
+
+.toggle {
+	margin-left: 0em;
+	margin-right: 2em;
+}
+table.filehistory th {
+	text-align: right;
+}
+
+/**
+ * Lists:
+ * The following lines don't have a visible effect on non-Gecko browsers
+ * They fix a problem ith Gecko browsers rendering lists to the right of
+ * left-floated objects in an RTL layout.
+ */
+html>body.rtl #bodyContent ul { display:table; }
+html>body.rtl #bodyContent ol { display:table; }
\ No newline at end of file

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/openmoko/user.gif
===================================================================
(Binary files differ)

Modified: trunk/wiki.openmoko.org/space_www_wiki_skins/simple/main.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/simple/main.css	2008-05-27 04:56:05 UTC (rev 235)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/simple/main.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -1,3 +1,26 @@
+/* For clarity, explicitly state some recommendations from <http://www.w3.org/
+   TR/CSS21/sample.html> to make sure the editsection links scale right */
+
+h1 { font-size: 2em; }
+h2 { font-size: 1.5em; }
+h3 { font-size: 1.17em; }
+h5 { font-size: .83em; }
+h6 { font-size: .75em; }
+h1, h2, h3, h4, h5, h6 { font-weight: bolder }
+
+/* Now the custom parts */
+
+/* Make edit sections (which are inside h# tags) normal-sized */
+.editsection {
+	font-weight: normal;
+}
+h1 .editsection { font-size: 50% }
+h2 .editsection { font-size: 66.7% }
+h3 .editsection { font-size: 85.5% }
+h5 .editsection { font-size: 120% }
+h6 .editsection { font-size: 133% }
+
+
 #toolbar {
   display: none;
 }
@@ -176,19 +199,11 @@
   width: 100%;
 }
 
-#p-personal li, #p-personal ul,
-#p-tb li, #p-tb ul,
-#p-navigation li, #p-navigation ul,
-#p-cactions li, #p-cactions ul,
-#p-newlinks li, #p-newlinks ul {
-  padding-left: 0em;
-  margin-left: 0.5em;
+.pBody li, .pBody ul {
+	padding-left: 0em;
+	margin-left: 0.5em;
 }
 
-#p-cactions li, #p-cactions ul {
-  margin-left: 0.7em;
-}
-
 pre {
   margin: 2em;
   border: solid 1px black;
@@ -242,7 +257,7 @@
     background-color: #f8ffaa;
 }
 
-span.diffchange { background-color: #FFCDF3; }
+.diffchange { background-color: #FFCDF3; text-decoration: none; }
 .autocomment { color:  grey; }
 #pagehistory span.user {
     margin-left: 1.4em;
@@ -276,6 +291,7 @@
 div.floatright p { font-style: italic; }
 div.floatleft, table.floatleft {
     float: left;
+    clear: left;
     margin: 0.3em 0.5em 0.5em 0;
     position: relative;
     border-width: 0.5em 1.4em 0.8em 0;
@@ -315,9 +331,13 @@
 }
 div.tleft {
     float: left;
+    clear: left;
     margin-right:0.5em;
     border-width: 0.5em 1.4em 0.8em 0;
 }
+img.thumbborder {
+	border: 1px solid #dddddd;
+}
 
 a.stub { color: #772233; }
 a.new,
@@ -402,3 +422,20 @@
 table.collapsed tr.collapsable {
 	display: none;
 }
+
+.editsection {
+	float: right;
+	margin-left: 5px;
+}
+
+.templatesUsed { margin-top: 1.5em; }
+
+/* Recreating-deleted-page/reupload file warning and log entries */
+div#mw-upload-deleted-warn ul li,
+div#mw-recreate-deleted-warn ul li {
+	font-size: 95%;
+}
+div.mw-recreate-deleted-control {
+	float: right;
+	font-size: 90%;
+}

Added: trunk/wiki.openmoko.org/space_www_wiki_skins/simple/rtl.css
===================================================================
--- trunk/wiki.openmoko.org/space_www_wiki_skins/simple/rtl.css	                        (rev 0)
+++ trunk/wiki.openmoko.org/space_www_wiki_skins/simple/rtl.css	2008-05-28 18:51:12 UTC (rev 236)
@@ -0,0 +1,175 @@
+/*
+Right-to-left fixes for MonoBook.
+Places sidebar on right, tweaks various alignment issues.
+
+Works mostly ok nicely on Safari 1.2.1; fine in Mozilla.
+
+Safari bugs (1.2.1):
+* Tabs are still appearing in left-to-right order. (Try after localizing)
+
+Opera bugs (7.23 linux):
+* Some bits of ltr text (sidebar box titles) have forward and backward versions overlapping each other
+
+IE/mac bugs:
+* The thing barfs on Hebrew and Arabic anyway, so no point testing.
+
+Missing features due to lack of support:
+* external link icons
+
+To test:
+* Opera6
+* IE 5.0
+* etc
+
+*/
+body {
+	direction: rtl;
+/*    unicode-bidi: bidi-override;*/
+	unicode-bidi: embed;
+}
+#column-content {
+	margin: 0 -12.2em 0 0;
+	float: left;
+}
+#column-content #content{
+	margin-left: 0;
+	margin-right: 12.2em;
+	border-right: 1px solid #aaaaaa;
+	border-left: none;
+}
+html>body .portlet {
+	float: right;
+	clear: right;
+}
+.editsection {
+	float: left;
+	margin-right: 5px;
+	margin-left: 0; /* bug 9122: undo default LTR */
+}
+/* recover IEMac (might be fine with the float, but usually it's close to IE */
+*>body .portlet {
+	float: none;
+	clear: none;
+}
+.pBody {
+	padding: 0 0.5em 0.3em 0.8em;
+}
+
+/* Fix alignment */
+.documentByLine,
+.portletDetails,
+.portletMore {
+	text-align: left;
+}
+
+div div.thumbcaption {
+	text-align: right;
+}
+
+div.magnify,
+#div.townBox,
+#p-logo {
+	left: auto;
+	right: 0;
+}
+
+/* Fix margins for non-css2 browsers */
+/* top right bottom left */
+
+dd {
+	margin-left: 0;
+	margin-right: 1.6em;
+}
+#contentSub {
+	margin-right: 1em;
+	margin-left: 0;
+}
+.tocindent {
+	margin-left: 0;
+	margin-right: 2em;
+}
+div.tright, div.floatright, table.floatright {
+	clear: none;
+}
+div.tleft, div.floatleft, table.floatleft {
+	clear: left;
+}
+div.townBox {
+	margin-left: 0;
+	margin-right: 1em;
+}
+div.townBox dl dd {
+	margin-left: 0;
+	margin-right: 1.1em;
+}
+
+/* Fix link icons */
+.external {
+	padding: 0 !important;
+	background: none !important;
+}
+#footer {
+	clear: both;
+}
+* html #footer {
+	margin-left: 0;
+	margin-right: 13.6em;
+	border-left: 0;
+	border-right: 1px solid #fabd23;
+} 
+* html #column-content { 
+	float: none;
+	margin-left: 0;
+	margin-right: 0;
+}
+* html #column-content #content {
+	margin-left: 0;
+	margin-top: 3em;
+}
+* html #column-one { right: 0; }
+
+/* js pref toc */
+
+#preftoc {
+	margin-right: 1em;
+}
+
+.errorbox, .successbox, #preftoc li, .prefsection fieldset {
+	float: right;
+}
+
+.prefsection {
+	padding-right: 2em;
+}
+
+/* workaround for moz bug, displayed bullets on left side */
+
+#toc ul {
+	text-align: right;
+}
+
+#toc ul ul {
+	margin: 0 2em 0 0;
+}
+
+input#wpSave, input#wpDiff {
+	margin-right: 0;
+	margin-left: .33em;
+}
+
+#userlogin {
+	float: right;
+	margin: 0 0 1em 3em;
+}
+/* Unblock and Ipblocklist links of Special:Blockip */
+p.mw-ipb-conveniencelinks {
+	float: left;
+}
+
+.toggle {
+	margin-left: 0em;
+	margin-right: 2em;
+}
+table.filehistory th {
+	text-align: right;
+}





More information about the webdesign-commitlog mailing list