changeset 27:f26b5026e801 default tip

Renamed
author Radomir Dopieralski <devel@sheep.art.pl>
date Mon, 05 May 2008 02:12:56 +0200
parents d1274a9fda22
children
files mandarin.py mandarin/chocolate.css mandarin/img/alert.png mandarin/img/angry.png mandarin/img/attach.png mandarin/img/attention.png mandarin/img/biggrin.png mandarin/img/bullet-blue.png mandarin/img/bullet-chocolate.png mandarin/img/bullet-plum.png mandarin/img/bullet.png mandarin/img/checkmark.png mandarin/img/devil.png mandarin/img/edit.png mandarin/img/frown.png mandarin/img/icon-error.png mandarin/img/icon-info.png mandarin/img/idea.png mandarin/img/moin-conflict.png mandarin/img/moin-deleted.png mandarin/img/moin-diff.png mandarin/img/moin-email.png mandarin/img/moin-new.png mandarin/img/moin-renamed.png mandarin/img/moin-updated.png mandarin/img/ohwell.png mandarin/img/prio1.png mandarin/img/prio2.png mandarin/img/prio3.png mandarin/img/redface.png mandarin/img/sad.png mandarin/img/smile.png mandarin/img/smile2.png mandarin/img/smile3.png mandarin/img/smile4.png mandarin/img/star_off.png mandarin/img/star_on.png mandarin/img/thumbs-up.png mandarin/img/tired.png mandarin/img/tongue.png mandarin/plum.css mandarin/strawberry.css mandarin/style.css softie.py softie/chocolate.css softie/img/alert.png softie/img/angry.png softie/img/attach.png softie/img/attention.png softie/img/biggrin.png softie/img/bullet-blue.png softie/img/bullet-chocolate.png softie/img/bullet-plum.png softie/img/bullet.png softie/img/checkmark.png softie/img/devil.png softie/img/edit.png softie/img/frown.png softie/img/icon-error.png softie/img/icon-info.png softie/img/idea.png softie/img/moin-conflict.png softie/img/moin-deleted.png softie/img/moin-diff.png softie/img/moin-email.png softie/img/moin-new.png softie/img/moin-renamed.png softie/img/moin-updated.png softie/img/ohwell.png softie/img/prio1.png softie/img/prio2.png softie/img/prio3.png softie/img/redface.png softie/img/sad.png softie/img/smile.png softie/img/smile2.png softie/img/smile3.png softie/img/smile4.png softie/img/star_off.png softie/img/star_on.png softie/img/thumbs-up.png softie/img/tired.png softie/img/tongue.png softie/plum.css softie/strawberry.css softie/style.css
diffstat 86 files changed, 1056 insertions(+), 1056 deletions(-) [+]
line wrap: on
line diff
--- a/mandarin.py	Wed Apr 23 08:47:32 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,383 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-"""
-MoinMoin Mandarin theme
-
-@copyright: 2007 by RadomirDopieralski (moin@sheep.art.pl), Oliver Siemoneit ()
-@license: GNU GPL, see COPYING for details.
-"""
-
-from MoinMoin import wikiutil, version
-from MoinMoin import caching
-from MoinMoin.theme import ThemeBase
-from MoinMoin.Page import Page
-import StringIO
-
-class Theme(ThemeBase):
-
-    name = "mandarin"
-
-    _ = lambda x: x     # We don't have gettext at this moment, so we fake it
-    icons = {
-        # key         alt                        icon filename      w   h
-        # FileAttach
-        'attach':     ("%(attach_count)s",       "moin-attach.png",  7, 15),
-        'attachimg':  (_("[ATTACH]"),            "attach.png",      24, 24),
-        # RecentChanges
-        'rss':        (_("[RSS]"),               "moin-rss.png",    24, 24),
-        'deleted':    (_("[DELETED]"),           "moin-deleted.png",16, 16),
-        'updated':    (_("[UPDATED]"),           "moin-updated.png",16, 16),
-        'renamed':    (_("[RENAMED]"),           "moin-renamed.png",16, 16),
-        'conflict':   (_("[CONFLICT]"),          "moin-conflict.png", 15, 15),
-        'new':        (_("[NEW]"),               "moin-new.png",    16, 16),
-        'diffrc':     (_("[DIFF]"),              "moin-diff.png",   16, 16),
-        # General
-        'bottom':     (_("[BOTTOM]"),            "moin-bottom.png", 14, 10),
-        'top':        (_("[TOP]"),               "moin-top.png",    14, 10),
-        'www':        ("[WWW]",                  "moin-www.png",    11, 11),
-        'mailto':     ("[MAILTO]",               "moin-email.png",  14, 10),
-        'news':       ("[NEWS]",                 "moin-news.png",   10, 11),
-        'telnet':     ("[TELNET]",               "moin-telnet.png", 10, 11),
-        'ftp':        ("[FTP]",                  "moin-ftp.png",    11, 11),
-        'file':       ("[FILE]",                 "moin-ftp.png",    11, 11),
-        # search forms
-        'searchbutton': ("[?]",                  "moin-search.png", 12, 12),
-        'interwiki':  ("[%(wikitag)s]",          "moin-inter.png",  16, 16),
-
-        # smileys (this is CONTENT, but good looking smileys depend on looking
-        # adapted to the theme background color and theme style in general)
-        #vvv    ==      vvv  this must be the same for GUI editor converter
-        'X-(':        ("X-(",                    'angry.png',       16, 16),
-        ':D':         (":D",                     'biggrin.png',     16, 16),
-        '<:(':        ("<:(",                    'frown.png',       16, 16),
-        ':o':         (":o",                     'redface.png',     16, 16),
-        ':(':         (":(",                     'sad.png',         16, 16),
-        ':)':         (":)",                     'smile.png',       16, 16),
-        'B)':         ("B)",                     'smile2.png',      16, 16),
-        ':))':        (":))",                    'smile3.png',      16, 16),
-        ';)':         (";)",                     'smile4.png',      16, 16),
-        '/!\\':       ("/!\\",                   'alert.png',       15, 15),
-        '<!>':        ("<!>",                    'attention.png',   15, 15),
-        '(!)':        ("(!)",                    'idea.png',        16, 16),
-        ':-?':        (":-?",                    'tongue.png',      16, 16),
-        ':\\':        (":\\",                    'ohwell.png',      16, 16),
-        '>:>':        (">:>",                    'devil.png',       16, 16),
-        '|)':         ("|)",                     'tired.png',       16, 16),
-        ':-(':        (":-(",                    'sad.png',         16, 16),
-        ':-)':        (":-)",                    'smile.png',       16, 16),
-        'B-)':        ("B-)",                    'smile2.png',      16, 16),
-        ':-))':       (":-))",                   'smile3.png',      16, 16),
-        ';-)':        (";-)",                    'smile4.png',      16, 16),
-        '|-)':        ("|-)",                    'tired.png',       16, 16),
-        '(./)':       ("(./)",                   'checkmark.png',   16, 16),
-        '{OK}':       ("{OK}",                   'thumbs-up.png',   16, 16),
-        '{X}':        ("{X}",                    'icon-error.png',  16, 16),
-        '{i}':        ("{i}",                    'icon-info.png',   16, 16),
-        '{1}':        ("{1}",                    'prio1.png',       16, 16),
-        '{2}':        ("{2}",                    'prio2.png',       16, 16),
-        '{3}':        ("{3}",                    'prio3.png',       16, 16),
-        '{*}':        ("{*}",                    'star_on.png',     16, 16),
-        '{o}':        ("{o}",                    'star_off.png',    16, 16),
-    }
-    del _
-
-    def header(self, d):
-        parts = [
-            self.emit_custom_html(self.cfg.page_header1),
-            self.msg(d),
-            u'<div class="header">',
-            self.logo(),
-            self.searchform(d),
-            self.username(d),
-            self.gotobar(d),
-            self.editbar(d),
-            u'<h1>',
-            self.title(d),
-            u'</h1>',
-            self.logged_trail(d),
-            u'</div>',
-            self.emit_custom_html(self.cfg.page_header2),
-            u'<div class="wrapper">',
-            self.sidebar(d),
-            u'<div class="content"%s>\n' % self.content_lang_attr(),
-        ]
-        return u''.join(parts)
-
-    editorheader = header
-
-    def logged_trail(self, d):
-        user = self.request.user
-        html = u""
-        if user.valid and user.show_page_trail:
-            if len(user.getTrail())>1:
-                html = self.trail(d)
-        return html
-
-    def footer(self, d, **keywords):
-        page = d['page']
-        parts = [
-            self.endPage(),
-            u'</div></div>',
-             self.emit_custom_html(self.cfg.page_footer1),
-            u'<div class="footer">',
-            self.pageinfo(page),
-            u'</div>',
-            self.emit_custom_html(self.cfg.page_footer2),
-        ]
-        return u''.join(parts)
-
-    def sidebar(self, d, **keywords):
-        request = self.request
-        _ = self.request.getText
-        sidebar = 'SideBar';
-        page = Page(request, sidebar)
-        buff = StringIO.StringIO()
-        request.redirect(buff)
-        try:
-            page.send_page(request, content_only=1, content_id="sidebar")
-        finally:
-            request.redirect()
-        return u'<div class="sidebar">%s</div>' % buff.getvalue()
-        
-
-    def editbar(self, d, **keywords):
-        if not self.shouldShowEditbar(d['page']):
-            return u''
-        parts = [
-            u'<div class="editbar">',
-            self.edit_link(d),
-            self.revert_link(d),
-            self.info_link(d),
-            self.admin_link(d),
-            u'</div>',
-        ]
-        return u' '.join(parts)
-
-    def edit_link(self, d):
-        page = d['page']
-        if not (page.isWritable() and
-                self.request.user.may.write(page.page_name)):
-            return self.login_link(d)
-        _ = self.request.getText
-        params = (wikiutil.quoteWikinameURL(page.page_name) +
-                  '?action=edit')
-        text = _('Edit', formatted=False)
-        return wikiutil.link_tag(self.request, params, text, css_class="edit", name="texteditlink")
-
-    def login_link(self, d):
-        page = d['page']
-        _ = self.request.getText
-        params = (wikiutil.quoteWikinameURL(page.page_name) +
-                  '?action=login')
-        text = _('Locked', formatted=False)
-        return wikiutil.link_tag(self.request, params, text, css_class="password")
-
-    def info_link(self, d):
-        page = d['page']
-        _ = self.request.getText
-        params = (wikiutil.quoteWikinameURL(page.page_name) +
-                  '?action=info')
-        text = _('History', formatted=False)
-        return wikiutil.link_tag(self.request, params, text, css_class="history")
-
-    def revert_link(self, d):
-        page = d['page']
-        if not (self.request.rev and
-                page.isWritable() and
-                self.request.user.may.revert(page.page_name)):
-            return u''
-        _ = self.request.getText
-        params = (wikiutil.quoteWikinameURL(page.page_name) +
-                  '?action=revert&rev=%d' % self.request.rev)
-        text = _('Revert', formatted=False)
-        return wikiutil.link_tag(self.request, params, text, css_class="revert")
-
-    def admin_link(self, d):
-        page = d['page']
-        _ = self.request.getText
-        params = (wikiutil.quoteWikinameURL(page.page_name) +
-                  '?action=PageActions')
-        text = _('Actions', formatted=False)
-        return wikiutil.link_tag(self.request, params, text, css_class="admin")
-
-    def gotobar(self, d, **k):
-        request = self.request
-        found = {}
-        items = []
-        item = u'%s'
-        current = d['page_name']
-        if request.cfg.navi_bar:
-            for text in request.cfg.navi_bar:
-                #pagename, url = self.splitNaviurl(text)
-                pagename, link = self.splitNavilink(text, localize=1)
-                if pagename == current:
-                    cls = 'wikilink current'
-                else:
-                    cls = 'wikilink'
-                items.append(
-                    '<li class="%s">%s</li>'%(cls, link)
-                )
-                found[pagename] = 1
-        userlinks = request.user.getQuickLinks()
-        for text in userlinks:
-            #pagename, url = self.splitNaviurl(text, localize=0)
-            pagename, link = self.splitNavilink(text, localize=0)
-            if not pagename in found:
-                if pagename == current:
-                    cls = 'userlink current'
-                else:
-                    cls = 'userlink'
-                items.append(
-                    '<li class="%s">%s</li>' % (cls, link)
-                )
-                found[pagename] = 1
-        return u'<ul class="gotobar">%s<li class="clear"></li></ul>' % u' '.join(items)
-
-    def pagepath(self, d):
-        _ = self.request.getText
-        content = []
-        if d['title_text'] == d['page_name']: # just showing a page, no action
-            curpage = u''
-            segments = d['page_name'].split('/')
-            for s in segments[:-1]:
-                curpage += s
-                content.append(Page(self.request, curpage).link_to(self.request, s))
-                content.append("/")
-                curpage += '/'
-        html = '<span class="pagepath">%s</span>' % "".join(content)
-        return html
-
-    def title(self, d):
-        title = d['title_text']
-        _ = self.request.getText
-        if title == d['page_name']:
-            html = self.pagepath(d)
-            link_text = title.split('/')[-1]
-            link_title = _('Click to do a full-text search for this title', formatted=False)
-            link_query = {
-                'action': 'fullsearch',
-                'value': 'linkto:"%s"' % d['page_name'],
-                'context': '180',
-            }
-            # we dont use d['title_link'] any more, but make it ourselves:
-            link = d['page'].link_to(self.request, link_text, querystr=link_query, title=link_title, css_class='backlink', rel='nofollow')
-            html += link
-        else:
-            html = wikiutil.escape(title)
-        return html
-
-    def html_stylesheets(self, d):
-        prefix = self.cfg.url_prefix_static
-        url = '%s/%s/%s' % (prefix, self.name, 'style.css')
-        return '<link rel="stylesheet" type="text/css" href="%s">' % url
-
-    def searchform(self, d):
-        _ = self.request.getText
-        form = self.request.form
-        updates = {
-            'search_label' : _('Search:', formatted=False),
-            'search_value': wikiutil.escape(form.get('value', [''])[0], 1),
-            'search_full_label' : _('Text', formatted=False),
-            'search_title_label' : _('Titles', formatted=False),
-            }
-        d.update(updates)
-
-        return u'''
-<form class="search" method="get" action="">
-<p>
-<input type="hidden" name="action" value="fullsearch">
-<input type="hidden" name="context" value="180">
-<label for="search">%(search_label)s</label>
-<input id="search" type="text" name="value" value="%(search_value)s">
-<input id="titlesearch" name="titlesearch" type="submit" value="%(search_title_label)s">
-<input id="fullsearch" name="fullsearch" type="submit" value="%(search_full_label)s">
-</p>
-</form>''' % d
-
-    def pageinfo(self, page):
-        _ = self.request.getText
-        html = ''
-        if self.shouldShowPageinfo(page):
-            info = page.lastEditInfo()
-            if info:
-                if info['editor']:
-                    info = _("last edited %(time)s by %(editor)s", formatted=False) % info
-                else:
-                    info = _("last modified %(time)s", formatted=False) % info
-                html = '<span class="time"%(lang)s>%(info)s</span>\n' % {
-                    'lang': self.ui_lang_attr(),
-                    'info': info
-                    }
-        return html
-
-    def logo(self):
-        logo = u''
-        if self.cfg.logo_string:
-            pagename = wikiutil.getFrontPage(self.request).page_name
-            pagename = wikiutil.quoteWikinameURL(pagename)
-            logo = wikiutil.link_tag(self.request, pagename, self.cfg.logo_string, css_class="logo")
-        return logo
-
-    def headscript(self, d):
-        """Override the stupid default script with its hardcoded HTML structure"""
-        return u'''<script type="text/javascript"><!--
-function add_gui_editor_links() {
-    // Add gui editor link after the text editor link
-
-    // If the variable is not set or browser is not compatible, exit
-    try {gui_editor_link_href}
-    catch (e) {
-        //alert("add_gui_editor_links: gui_editor_link_href not here");
-        return
-    }
-    if (can_use_gui_editor() == false){
-        //alert("add_gui_editor_links: can't use gui_editor");
-        return;
-    }
-    var all = document.getElementsByName('texteditlink');
-    for (i = 0; i < all.length; i++) {
-        var textEditorLink = all[i];
-        // Create a a link
-        var guiEditorLink = document.createElement('a');
-        guiEditorLink.href = gui_editor_link_href;
-        guiEditorLink.className = "edit";
-        var text = document.createTextNode(gui_editor_link_text);
-        guiEditorLink.appendChild(text);
-        // Insert in the editbar
-        var editbar = textEditorLink.parentNode
-        editbar.insertBefore(guiEditorLink, textEditorLink);
-    }
-}
---></script>
-'''
-
-    def recentchanges_entry(self, d):
-        _ = self.request.getText
-        if d['comments']:
-            rccomm = ''
-            for c in d['comments']:
-                rccomm += ' <b>%d</b> ' % c[0];
-                rccomm += c[1];
-        else:
-            rccomm = ''
-        html = (u'''<li><b class="rctime">%s</b> %s %s . . . . <span class="rcauth">%s</span> <i class="rccomm">%s</i></li>''' % (
-            d['time_html'],
-            d['pagelink_html'],
-            d['icon_html'],
-            ', '.join(d['editors']),
-            rccomm,
-        ))
-        return html
-
-    def recentchanges_daybreak(self, d):
-        return u'</ul><h3 class="rcdaybreak">%s</h3><ul>' % d['date']
-
-    def recentchanges_header(self, d):
-        return u'<div class="recentchanges"%s><ul>' % self.ui_lang_attr()
-
-    def recentchanges_footer(self, d):
-        return u'</ul></div>'
-
-
-def execute(request):
-    return Theme(request)
-
--- a/mandarin/chocolate.css	Wed Apr 23 08:47:32 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-
-/*** The menu bar ***/
-html ul.gotobar {
-    /* Whole bar. */
-    background: #c17d11;
-    border-top: 1px solid #7a4c01;
-    border-bottom: 1px solid #000;
-}
-html ul.gotobar li {
-    /* Outer edge of menu items. */
-    border: 1px solid #7a4c01;
-}
-html ul.gotobar li a {
-    /* Inactive menu items. */
-    border: 1px solid #e6af59;
-    background: #cc8515;
-    color: #024;
-}
-html ul.gotobar li.current a {
-    /* Selected menu items. */
-    background: #a86907;
-    border: 1px solid #c17d11;
-    color: #000;
-}
-html ul.gotobar li.current {
-    /* Outer border of selected menu items. */
-    border: 1px solid #583701;
-}
-html ul.gotobar li a:hover {
-    /* Menu items on hover. */
-    color: #000;
-    background: #e39b2a;
-    border: 1px solid #e9b96e;
-}
-
-/*** The sidebar ***/
-html div.sidebar {
-    background: #e9b96e;
-    border: 1px solid #c17d11;
-    border-bottom: 1px solid #8f5902;
-}
-html div.wrapper div.sidebar h1, 
-html div.wrapper div.sidebar h2, 
-html div.wrapper div.sidebar h3 { 
-    color: #583701;
-    border: 1px solid #8f5902;
-    background: #c17d11;
-}
-html div.sidebar li {
-    background: url(img/bullet-chocolate.png) no-repeat 3px 3px;
-}
-
-/*** The content ***/
-html h2, html h3, html h4, html h5 {
-    /* Headings */
-    color: #c17d11;
-}
-html div.wrapper h1 {
-    /* Largest heading */
-    color: #e9b96e;
-}
-html div.wrapper h4 { 
-    /* Smallest heading */
-    color: #8f5902; 
-}
-
-/*** The links ***/
-html a { 
-    color: #c17d11;
-}
-html a:visited {
-    color: #8f5902; 
-}
-html a.logo {
-    color: #444;
-}
Binary file mandarin/img/alert.png has changed
Binary file mandarin/img/angry.png has changed
Binary file mandarin/img/attach.png has changed
Binary file mandarin/img/attention.png has changed
Binary file mandarin/img/biggrin.png has changed
Binary file mandarin/img/bullet-blue.png has changed
Binary file mandarin/img/bullet-chocolate.png has changed
Binary file mandarin/img/bullet-plum.png has changed
Binary file mandarin/img/bullet.png has changed
Binary file mandarin/img/checkmark.png has changed
Binary file mandarin/img/devil.png has changed
Binary file mandarin/img/edit.png has changed
Binary file mandarin/img/frown.png has changed
Binary file mandarin/img/icon-error.png has changed
Binary file mandarin/img/icon-info.png has changed
Binary file mandarin/img/idea.png has changed
Binary file mandarin/img/moin-conflict.png has changed
Binary file mandarin/img/moin-deleted.png has changed
Binary file mandarin/img/moin-diff.png has changed
Binary file mandarin/img/moin-email.png has changed
Binary file mandarin/img/moin-new.png has changed
Binary file mandarin/img/moin-renamed.png has changed
Binary file mandarin/img/moin-updated.png has changed
Binary file mandarin/img/ohwell.png has changed
Binary file mandarin/img/prio1.png has changed
Binary file mandarin/img/prio2.png has changed
Binary file mandarin/img/prio3.png has changed
Binary file mandarin/img/redface.png has changed
Binary file mandarin/img/sad.png has changed
Binary file mandarin/img/smile.png has changed
Binary file mandarin/img/smile2.png has changed
Binary file mandarin/img/smile3.png has changed
Binary file mandarin/img/smile4.png has changed
Binary file mandarin/img/star_off.png has changed
Binary file mandarin/img/star_on.png has changed
Binary file mandarin/img/thumbs-up.png has changed
Binary file mandarin/img/tired.png has changed
Binary file mandarin/img/tongue.png has changed
--- a/mandarin/plum.css	Wed Apr 23 08:47:32 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-
-/*** The menu bar ***/
-html ul.gotobar {
-    /* Whole bar. */
-    background: #ad7fa8;
-    border-top: 1px solid #75507b;
-    border-bottom: 1px solid #000;
-}
-html ul.gotobar li {
-    /* Outer edge of menu items. */
-    border: 1px solid #75507b;
-}
-html ul.gotobar li a {
-    /* Inactive menu items. */
-    border: 1px solid #e0b9dc;
-    background: #b893b4;
-    color: #5c3566;
-}
-html ul.gotobar li.current a {
-    /* Selected menu items. */
-    background: #8b5f92;
-    border: 1px solid #ad7fa8;
-    color: #000;
-}
-html ul.gotobar li.current {
-    /* Outer border of selected menu items. */
-    border: 1px solid #5c3566;
-}
-html ul.gotobar li a:hover {
-    /* Menu items on hover. */
-    color: #000;
-    background: #e0b9dc;
-    border: 1px solid #fff;
-}
-
-/*** The sidebar ***/
-html div.sidebar {
-    background: #e0b9dc;
-    border: 1px solid #ad7fa8;
-    border-bottom: 1px solid #75507b;
-}
-html div.wrapper div.sidebar h1, 
-html div.wrapper div.sidebar h2, 
-html div.wrapper div.sidebar h3 { 
-    color: #5c3566;
-    border: 1px solid #75507b;
-    background: #ad7fa8;
-}
-html div.sidebar li {
-    background: url(img/bullet-plum.png) no-repeat 3px 3px;
-}
-
-/*** The content ***/
-html h2, html h3, html h4, html h5 {
-    /* Headings */
-    color: #75507b;
-}
-html div.wrapper h1 {
-    /* Largest heading */
-    color: #ad7fa8;
-}
-html div.wrapper h4 { 
-    /* Smallest heading */
-    color: #5c3566;
-}
-
-/*** The links ***/
-html a { 
-    color: #bb5bb0;
-}
-html a:visited {
-    color: #7e4388;
-}
-html a.logo {
-    color: #444;
-}
--- a/mandarin/strawberry.css	Wed Apr 23 08:47:32 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-
-/*** The menu bar ***/
-html ul.gotobar {
-    /* Whole bar. */
-    background: #39f;
-    border-top: 1px solid #06d;
-    border-bottom: 1px solid #07e;
-}
-html ul.gotobar li {
-    /* Outer edge of menu items. */
-    border: 1px solid #07e;
-}
-html ul.gotobar li a {
-    /* Inactive menu items. */
-    border: 1px solid #7bf;
-    background: #4af;
-    color: #024;
-}
-html ul.gotobar li.current a {
-    /* Selected menu items. */
-    background: #39f;
-    border: 1px solid #3af;
-    color: #000;
-}
-html ul.gotobar li.current {
-    /* Outer border of selected menu items. */
-    border: 1px solid #06d;
-}
-html ul.gotobar li a:hover {
-    /* Menu items on hover. */
-    color: #000;
-    background: #6bf;
-    border: 1px solid #9df;
-}
-
-/*** The sidebar ***/
-html div.sidebar {
-    background: #bef;
-    border: 1px solid #7ae;
-    border-bottom: 1px solid #38e;
-}
-html div.wrapper div.sidebar h1, 
-html div.wrapper div.sidebar h2, 
-html div.wrapper div.sidebar h3 { 
-    color: #258;
-    border: 1px solid #6ae;
-    background: #7cf;
-}
-html div.sidebar li {
-    background: url(img/bullet-blue.png) no-repeat 3px 3px;
-}
-
-/*** The content ***/
-html h2, html h3, html h4, html h5 {
-    /* Headings */
-    color: #4af;
-}
-html div.wrapper h1 {
-    /* Largest heading */
-    color: #29f;
-}
-html div.wrapper h4 { 
-    /* Smallest heading */
-    color: #6bf; 
-}
-
-/*** The links ***/
-html a { 
-    color: #06f;
-}
-html a:visited {
-    color: #39f; 
-}
-html a.logo {
-    color: #444;
-}
--- a/mandarin/style.css	Wed Apr 23 08:47:32 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,445 +0,0 @@
-/* @import url(strawberry.css); */
-/* @import url(chocolate.css); */
-/* @import url(plum.css); */
-
-html { 
-    padding: 0;
-    margin: 0;
-    font-size: 90%;
-    font-family: DejaVu Sans, Droid Sans, Verdana, sans-serif;
-    height: 100%;
-    background: #fff;
-    color: #000;
-}
-body {
-    padding: 0;
-    margin: 0;
-    min-height: 100%;
-    position: relative;
-}
-* html body { height: 100%; }
-
-
-
-a img { border: none }
-a { color: #f60; text-decoration: none }
-a:visited { color: #f93; }
-
-a.interwiki, a.http, a.www,a.file, a.mailto, a.https,  a.external { color: #48f }
-a.interwiki:visited, a.http:visited, a.https:visited, a.file:visited, a.mailto:visited, a.www:visited, a.external:visited { color: #65f }
-a.nonexistent { color: #f02 }
-a:hover { color: #000; text-decoration: underline }
-
-
-a.mailto:before {
-    content: url(img/moin-email.png); 
-    margin: 0 0.2em;
-    vertical-align: middle;
-    white-space: nowrap;
-}
-
-
-li p { margin: 0 }
-
-textarea, select, input {
-    border: 1px solid #999;
-    vertical-align: middle;
-    line-height: 1.2;
-    font-size: 100%;
-}
-textarea {
-    display: block;
-    width: 99%;
-}
-
-form.search {
-    float: right;
-    margin: 0.5em;
-    color: #666;
-}
-form.search p {
-    margin: 0;
-    font-size: 90%;
-}
-div.gotobar p {
-    margin: 0;
-    padding: 0.5em;
-}
-
-div.editbar a.edit:before {
-    content: url(img/edit.png);
-    vertical-align: middle;
-    margin: 0 0.15em 0 0.5em;
-}
-
-div.editbar {
-    float: right;
-    margin: 1em 0.25em;
-    color: #999;
-}
-div.editbar a {
-    color: #999;
-    font-size: 90%;
-    margin: 0 0.25em;
-}
-div.editbar a:hover {
-    color: #fff;
-}
-
-a.logo {
-    display: block;
-    margin: 0.25em;
-    float: left;
-    clear: none;
-    font-size: 200%;
-    text-decoration: none;
-    color: #444;
-    line-height: 1.2;
-    font-family: Impact, Haettenschweiler, fantasy;
-    letter-spacing: 0.025em;
-}
-a.logo img {
-    vertical-align: middle;
-    margin: 0 0.25em 0 0;
-}
-
-
-ul#username {
-    display: block;
-    float: right;
-    clear: right;
-    list-style: none;
-    margin: 0 0.5em;
-}
-ul#username li {
-    list-style: none;
-    display: inline;
-    margin: 0 0 0 1em;
-    font-size: 90%;
-}
-
-ul.gotobar {
-    margin: 0;
-    padding: 0 0.5em;
-    display: block;
-    border-top: 1px solid #d60;
-    border-bottom: 1px solid #e70;
-    color: #eee;
-    background: #f93;
-    clear: both;
-    overflow: hidden;
-}
-ul.gotobar li {
-    display: block;
-    float: left;
-    margin: 0.25em 0.25em;
-    border: 1px solid #e70;
-    overflow: hidden;
-}
-ul.gotobar li a {
-    letter-spacing: 0.05em;
-    display: block;
-    border: 1px solid #fb7;
-    text-decoration: none;
-    font-size: 90%;
-    padding: 0.25em 0.75em;
-    background: #fa4;
-    color: #420;
-}
-ul.gotobar li.current a {
-    background: #f93;
-    border: 1px solid #fa3;
-    color: #000;
-}
-ul.gotobar li.current {
-    border: 1px solid #d60;
-}
-ul.gotobar li a:hover {
-    color: #000;
-    background: #fb6;
-    border: 1px solid #fd9;
-}
-body ul.gotobar li.clear {
-    display: block;
-    list-style: none;
-    clear: both;
-    float: none;
-    margin: 0;
-    padding: 0;
-    height: 0;
-    overflow: hidden;
-    border: none;
-    line-height: 1px;
-}
-
-div.header h1 {
-    color: #eee;
-    background: #444;
-    margin: 0;
-    border-bottom: 1px solid #555;
-    padding: 0.5em;
-    font-weight: normal;
-    font-size: 125%;
-    border-top: 2px solid #333;
-    letter-spacing: 0.025em;
-}
-div.header h1 a.backlink {
-    color: #eee;
-}
-div.header h1 a.backlink:hover {
-    color: #fff;
-}
-
-span.pagepath { 
-    font-size: 80%; color: #666; 
-    font-weight: bold;
-}
-span.pagepath a { 
-    font-weight: normal;
-    color: #999;
-}
-
-div.header {
-    border-bottom: 1px solid #000;
-}
-
-
-div.wrapper {
-    padding: 0.5em;
-    margin: 0 0.5em 1.5em 11.5em;
-    color: #444;
-    position: relative;
-}
-
-div.content {
-    line-height: 1.35;
-    position: relative;
-}
-
-div.sidebar {
-    width: 11.5em;
-    position: absolute;
-    left: -12.25em;
-    top: 0.75em;
-    font-size: 90%;
-    line-height: 1.3;
-    background: #feb;
-    border: 1px solid #ea7;
-    border-bottom: 1px solid #e83;
-    padding: 1px;
-    margin: 0;
-}
-div.sidebar p {
-    margin: 0;
-}
-div.wrapper div.sidebar h1, 
-div.wrapper div.sidebar h2, 
-div.wrapper div.sidebar h3 { 
-    font-size: 100%; 
-    margin: 0 0 0.25em 0;
-    letter-spacing: 0.05em;
-    font-weight: normal;
-    color: #852;
-    border: 1px solid #ea6;
-    background: #fc7;
-    padding: 0.25em 0.5em;
-    line-height: 1.1;
-    font-family: DejaVu Sans, Droid Sans, Verdana, sans-serif;
-}
-div.sidebar ul { 
-    margin: 0;
-    list-style: none;
-    padding: 0 0 0.25em 0;
-}
-div.sidebar li {
-    list-style: none;
-    background: url(img/bullet.png) no-repeat 3px 3px;
-    padding: 0 0 0 15px;
-}
-div.sidebar a { color: #000; }
-div.sidebar a:hover { text-decoration: underline }
-
-
-div.wrapper h1, h2, h3, h4, h5 {
-    color: #fa4;
-    font-family: Impact, Haettenschweiler, fantasy;
-    font-weight: normal;
-    line-height: 1.2;
-}
-div.wrapper h1 { font-size: 200%; margin: 1em 0 0.5em 0; color: #f92 }
-div.wrapper h2 { font-size: 200%; margin: 1em 0 0.5em 0; }
-div.wrapper h3 { font-size: 150%; letter-spacing: 0.025em; margin: 1.25em 0 0.75em 0; }
-div.wrapper h4 { font-size: 125%; letter-spacing: 0.05em; margin: 1.5em 0 1em 0; color: #fb6 }
-
-
-ul#pagetrail {
-    display: block;
-    background: #eee;
-    border-bottom: 1px solid #fff;
-    border-top: 3px solid #bbb;
-    margin: 0;
-    padding: 0;
-}
-ul#pagetrail li {
-    display: inline;
-    list-style: none;
-    margin-left: 0.75em;
-}
-ul#pagetrail li a {
-    font-size: 80%;
-    color: #666;
-}
-
-
-div.footer {
-    position: absolute;
-    width: 100%;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    color: #ddd;
-    text-align: right;
-    border-top: 1px solid #ccc;
-    padding: 0;
-    margin: 0;
-}
-div.footer span.time {
-    display: block;
-    text-align: right;
-    color: #666;
-    font-size: 80%;
-    padding: 0.25em 0.5em;
-    font-style: italic;
-}
-
-div#message, p.status {
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    background: #ffa;
-    border-bottom: 1px solid #888;
-    padding: 0.125em 0.5em;
-    margin: 0;
-    font-size: 90%;
-    color: #000;
-    opacity: 0.90;
-    z-index: 1000;
-}
-
-div.message p { margin: 0 }
-
-#content table { border-collapse: collapse; font-size: 80%; margin: 0.5em auto; }
-#content th, #content td { border: 1px solid #999; padding: 0.25em;  }
-#content th { background: #f6f6f6;  }
-
-tt { font-size: 90%; color: #333;
-    font-family: "DejaVu Sans Mono", "Lucida Console", monospace; }
-div.codearea, pre { 
-    border: 1px solid #ddd; 
-    background: #f6f6f6; 
-    color: #666;
-}
-div.codearea a.codenumbers { font-size: 70%; float: right; display: block; padding: 0.25em }
-div.codearea span.LineNumber { background: #fff; color: #888; border-right: 1px solid #ddd; margin-right: 0.25em; font-weight: bold; 
-}
-div.codearea pre { padding: 0; border: none; margin: 0; color: #222 }
-div.codearea span.ResWord { font-weight: bold }
-div.codearea span.ResWord2 { font-weight: bold; color: #f60 }
-div.codearea span.ID { font-style: italic }
-div.codearea span.Comment { color: #999; font-style: italic }
-div.codearea span.Preprc { color: #999; font-weight: bold;  }
-div.codearea span.String { color: #f60; font-style: italic }
-div.codearea span.Char { color: #f60; font-style: italic; font-weight: bold }
-div.codearea span.Number { color: #f60 }
-div.codearea span.ConsWord { color: #f60; font-weight: bold }
-div.codearea span.Operator { }
-div.codearea span.SPChar { font-weight: bold; }
-div.codearea span.Special { }
-div.codearea span.Error { color: #f60; font-weight: bold; background: #ddd }
-
-pre {
-    padding: 0.25em; 
-    font-family: "DejaVu Sans Mono", "Lucida Console", monospace;
-    font-size: 90%;
-    line-height: 1.25;
-    white-space: pre;
-    white-space: pre-wrap;
-    word-wrap: break-word;
-    white-space: -moz-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: -o-pre-wrap;
-    /* end css 3 or browser specific rules */
-}
-
-li p, td p, dd p, dt p { margin: 0 }
-
-hr {
-	background: transparent;
-	color: #fff;
-	border: none;
-	border-top: 1px solid #ccc;
-}
-
-div#preview {
-
-    background: #ffa;
-    border: 1px solid #888;
-    padding: 0.125em 0.5em;
-}
-
-div.warn ul, div.tip ul, div.hint ul, div.info ul, div.err ul,
-div.warn p, div.tip p, div.hint p, div.info p, div.err p {
-	margin: 0;
-}
-
-.diff-added span {
-	background: #eee;
-	color: #000;
-}
-
-.diff-removed span {
-	background: #feb;
-	color: #000;
-}	
-
-
-strong.highlight {
-	background: #feb;
-	color: #000;
-	font-weight: normal;
-}
-
-span.strike {
-      text-decoration: line-through;
-}
-span.u {
-      text-decoration: underline;
-}
-
-
-@media print {
-    div.sidebar, div.header { display: none }
-    div.footer { position: static }
-    div.wrapper { padding: 0; border: none }
-}
-
-/* from the HelpOnMoinWikiSyntax, the fugly div classes, ugh */
-div.comment { 
-    color: #444; 
-    background: #ddf;
-}
-
-div.red { background: #fcc; }
-div.green { background: #cfc; }
-div.blue { background: #ccf; }
-
-div.solid, div.dashed, div.dotted {
-    border: 2px solid #000;
-    padding: 0.5em;
-}
-div.solid { border-style: solid }
-div.dashed { border-style: dashed }
-div.dotted { border-style: dotted }
-
-div.blink { text-decoration: blink }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/softie.py	Mon May 05 02:12:56 2008 +0200
@@ -0,0 +1,383 @@
+# -*- coding: iso-8859-1 -*-
+"""
+MoinMoin Mandarin theme
+
+@copyright: 2007 by RadomirDopieralski (moin@sheep.art.pl), Oliver Siemoneit ()
+@license: GNU GPL, see COPYING for details.
+"""
+
+from MoinMoin import wikiutil, version
+from MoinMoin import caching
+from MoinMoin.theme import ThemeBase
+from MoinMoin.Page import Page
+import StringIO
+
+class Theme(ThemeBase):
+
+    name = "softie"
+
+    _ = lambda x: x     # We don't have gettext at this moment, so we fake it
+    icons = {
+        # key         alt                        icon filename      w   h
+        # FileAttach
+        'attach':     ("%(attach_count)s",       "moin-attach.png",  7, 15),
+        'attachimg':  (_("[ATTACH]"),            "attach.png",      24, 24),
+        # RecentChanges
+        'rss':        (_("[RSS]"),               "moin-rss.png",    24, 24),
+        'deleted':    (_("[DELETED]"),           "moin-deleted.png",16, 16),
+        'updated':    (_("[UPDATED]"),           "moin-updated.png",16, 16),
+        'renamed':    (_("[RENAMED]"),           "moin-renamed.png",16, 16),
+        'conflict':   (_("[CONFLICT]"),          "moin-conflict.png", 15, 15),
+        'new':        (_("[NEW]"),               "moin-new.png",    16, 16),
+        'diffrc':     (_("[DIFF]"),              "moin-diff.png",   16, 16),
+        # General
+        'bottom':     (_("[BOTTOM]"),            "moin-bottom.png", 14, 10),
+        'top':        (_("[TOP]"),               "moin-top.png",    14, 10),
+        'www':        ("[WWW]",                  "moin-www.png",    11, 11),
+        'mailto':     ("[MAILTO]",               "moin-email.png",  14, 10),
+        'news':       ("[NEWS]",                 "moin-news.png",   10, 11),
+        'telnet':     ("[TELNET]",               "moin-telnet.png", 10, 11),
+        'ftp':        ("[FTP]",                  "moin-ftp.png",    11, 11),
+        'file':       ("[FILE]",                 "moin-ftp.png",    11, 11),
+        # search forms
+        'searchbutton': ("[?]",                  "moin-search.png", 12, 12),
+        'interwiki':  ("[%(wikitag)s]",          "moin-inter.png",  16, 16),
+
+        # smileys (this is CONTENT, but good looking smileys depend on looking
+        # adapted to the theme background color and theme style in general)
+        #vvv    ==      vvv  this must be the same for GUI editor converter
+        'X-(':        ("X-(",                    'angry.png',       16, 16),
+        ':D':         (":D",                     'biggrin.png',     16, 16),
+        '<:(':        ("<:(",                    'frown.png',       16, 16),
+        ':o':         (":o",                     'redface.png',     16, 16),
+        ':(':         (":(",                     'sad.png',         16, 16),
+        ':)':         (":)",                     'smile.png',       16, 16),
+        'B)':         ("B)",                     'smile2.png',      16, 16),
+        ':))':        (":))",                    'smile3.png',      16, 16),
+        ';)':         (";)",                     'smile4.png',      16, 16),
+        '/!\\':       ("/!\\",                   'alert.png',       15, 15),
+        '<!>':        ("<!>",                    'attention.png',   15, 15),
+        '(!)':        ("(!)",                    'idea.png',        16, 16),
+        ':-?':        (":-?",                    'tongue.png',      16, 16),
+        ':\\':        (":\\",                    'ohwell.png',      16, 16),
+        '>:>':        (">:>",                    'devil.png',       16, 16),
+        '|)':         ("|)",                     'tired.png',       16, 16),
+        ':-(':        (":-(",                    'sad.png',         16, 16),
+        ':-)':        (":-)",                    'smile.png',       16, 16),
+        'B-)':        ("B-)",                    'smile2.png',      16, 16),
+        ':-))':       (":-))",                   'smile3.png',      16, 16),
+        ';-)':        (";-)",                    'smile4.png',      16, 16),
+        '|-)':        ("|-)",                    'tired.png',       16, 16),
+        '(./)':       ("(./)",                   'checkmark.png',   16, 16),
+        '{OK}':       ("{OK}",                   'thumbs-up.png',   16, 16),
+        '{X}':        ("{X}",                    'icon-error.png',  16, 16),
+        '{i}':        ("{i}",                    'icon-info.png',   16, 16),
+        '{1}':        ("{1}",                    'prio1.png',       16, 16),
+        '{2}':        ("{2}",                    'prio2.png',       16, 16),
+        '{3}':        ("{3}",                    'prio3.png',       16, 16),
+        '{*}':        ("{*}",                    'star_on.png',     16, 16),
+        '{o}':        ("{o}",                    'star_off.png',    16, 16),
+    }
+    del _
+
+    def header(self, d):
+        parts = [
+            self.emit_custom_html(self.cfg.page_header1),
+            self.msg(d),
+            u'<div class="header">',
+            self.logo(),
+            self.searchform(d),
+            self.username(d),
+            self.gotobar(d),
+            self.editbar(d),
+            u'<h1>',
+            self.title(d),
+            u'</h1>',
+            self.logged_trail(d),
+            u'</div>',
+            self.emit_custom_html(self.cfg.page_header2),
+            u'<div class="wrapper">',
+            self.sidebar(d),
+            u'<div class="content"%s>\n' % self.content_lang_attr(),
+        ]
+        return u''.join(parts)
+
+    editorheader = header
+
+    def logged_trail(self, d):
+        user = self.request.user
+        html = u""
+        if user.valid and user.show_page_trail:
+            if len(user.getTrail())>1:
+                html = self.trail(d)
+        return html
+
+    def footer(self, d, **keywords):
+        page = d['page']
+        parts = [
+            self.endPage(),
+            u'</div></div>',
+             self.emit_custom_html(self.cfg.page_footer1),
+            u'<div class="footer">',
+            self.pageinfo(page),
+            u'</div>',
+            self.emit_custom_html(self.cfg.page_footer2),
+        ]
+        return u''.join(parts)
+
+    def sidebar(self, d, **keywords):
+        request = self.request
+        _ = self.request.getText
+        sidebar = 'SideBar';
+        page = Page(request, sidebar)
+        buff = StringIO.StringIO()
+        request.redirect(buff)
+        try:
+            page.send_page(request, content_only=1, content_id="sidebar")
+        finally:
+            request.redirect()
+        return u'<div class="sidebar">%s</div>' % buff.getvalue()
+        
+
+    def editbar(self, d, **keywords):
+        if not self.shouldShowEditbar(d['page']):
+            return u''
+        parts = [
+            u'<div class="editbar">',
+            self.edit_link(d),
+            self.revert_link(d),
+            self.info_link(d),
+            self.admin_link(d),
+            u'</div>',
+        ]
+        return u' '.join(parts)
+
+    def edit_link(self, d):
+        page = d['page']
+        if not (page.isWritable() and
+                self.request.user.may.write(page.page_name)):
+            return self.login_link(d)
+        _ = self.request.getText
+        params = (wikiutil.quoteWikinameURL(page.page_name) +
+                  '?action=edit')
+        text = _('Edit', formatted=False)
+        return wikiutil.link_tag(self.request, params, text, css_class="edit", name="texteditlink")
+
+    def login_link(self, d):
+        page = d['page']
+        _ = self.request.getText
+        params = (wikiutil.quoteWikinameURL(page.page_name) +
+                  '?action=login')
+        text = _('Locked', formatted=False)
+        return wikiutil.link_tag(self.request, params, text, css_class="password")
+
+    def info_link(self, d):
+        page = d['page']
+        _ = self.request.getText
+        params = (wikiutil.quoteWikinameURL(page.page_name) +
+                  '?action=info')
+        text = _('History', formatted=False)
+        return wikiutil.link_tag(self.request, params, text, css_class="history")
+
+    def revert_link(self, d):
+        page = d['page']
+        if not (self.request.rev and
+                page.isWritable() and
+                self.request.user.may.revert(page.page_name)):
+            return u''
+        _ = self.request.getText
+        params = (wikiutil.quoteWikinameURL(page.page_name) +
+                  '?action=revert&rev=%d' % self.request.rev)
+        text = _('Revert', formatted=False)
+        return wikiutil.link_tag(self.request, params, text, css_class="revert")
+
+    def admin_link(self, d):
+        page = d['page']
+        _ = self.request.getText
+        params = (wikiutil.quoteWikinameURL(page.page_name) +
+                  '?action=PageActions')
+        text = _('Actions', formatted=False)
+        return wikiutil.link_tag(self.request, params, text, css_class="admin")
+
+    def gotobar(self, d, **k):
+        request = self.request
+        found = {}
+        items = []
+        item = u'%s'
+        current = d['page_name']
+        if request.cfg.navi_bar:
+            for text in request.cfg.navi_bar:
+                #pagename, url = self.splitNaviurl(text)
+                pagename, link = self.splitNavilink(text, localize=1)
+                if pagename == current:
+                    cls = 'wikilink current'
+                else:
+                    cls = 'wikilink'
+                items.append(
+                    '<li class="%s">%s</li>'%(cls, link)
+                )
+                found[pagename] = 1
+        userlinks = request.user.getQuickLinks()
+        for text in userlinks:
+            #pagename, url = self.splitNaviurl(text, localize=0)
+            pagename, link = self.splitNavilink(text, localize=0)
+            if not pagename in found:
+                if pagename == current:
+                    cls = 'userlink current'
+                else:
+                    cls = 'userlink'
+                items.append(
+                    '<li class="%s">%s</li>' % (cls, link)
+                )
+                found[pagename] = 1
+        return u'<ul class="gotobar">%s<li class="clear"></li></ul>' % u' '.join(items)
+
+    def pagepath(self, d):
+        _ = self.request.getText
+        content = []
+        if d['title_text'] == d['page_name']: # just showing a page, no action
+            curpage = u''
+            segments = d['page_name'].split('/')
+            for s in segments[:-1]:
+                curpage += s
+                content.append(Page(self.request, curpage).link_to(self.request, s))
+                content.append("/")
+                curpage += '/'
+        html = '<span class="pagepath">%s</span>' % "".join(content)
+        return html
+
+    def title(self, d):
+        title = d['title_text']
+        _ = self.request.getText
+        if title == d['page_name']:
+            html = self.pagepath(d)
+            link_text = title.split('/')[-1]
+            link_title = _('Click to do a full-text search for this title', formatted=False)
+            link_query = {
+                'action': 'fullsearch',
+                'value': 'linkto:"%s"' % d['page_name'],
+                'context': '180',
+            }
+            # we dont use d['title_link'] any more, but make it ourselves:
+            link = d['page'].link_to(self.request, link_text, querystr=link_query, title=link_title, css_class='backlink', rel='nofollow')
+            html += link
+        else:
+            html = wikiutil.escape(title)
+        return html
+
+    def html_stylesheets(self, d):
+        prefix = self.cfg.url_prefix_static
+        url = '%s/%s/%s' % (prefix, self.name, 'style.css')
+        return '<link rel="stylesheet" type="text/css" href="%s">' % url
+
+    def searchform(self, d):
+        _ = self.request.getText
+        form = self.request.form
+        updates = {
+            'search_label' : _('Search:', formatted=False),
+            'search_value': wikiutil.escape(form.get('value', [''])[0], 1),
+            'search_full_label' : _('Text', formatted=False),
+            'search_title_label' : _('Titles', formatted=False),
+            }
+        d.update(updates)
+
+        return u'''
+<form class="search" method="get" action="">
+<p>
+<input type="hidden" name="action" value="fullsearch">
+<input type="hidden" name="context" value="180">
+<label for="search">%(search_label)s</label>
+<input id="search" type="text" name="value" value="%(search_value)s">
+<input id="titlesearch" name="titlesearch" type="submit" value="%(search_title_label)s">
+<input id="fullsearch" name="fullsearch" type="submit" value="%(search_full_label)s">
+</p>
+</form>''' % d
+
+    def pageinfo(self, page):
+        _ = self.request.getText
+        html = ''
+        if self.shouldShowPageinfo(page):
+            info = page.lastEditInfo()
+            if info:
+                if info['editor']:
+                    info = _("last edited %(time)s by %(editor)s", formatted=False) % info
+                else:
+                    info = _("last modified %(time)s", formatted=False) % info
+                html = '<span class="time"%(lang)s>%(info)s</span>\n' % {
+                    'lang': self.ui_lang_attr(),
+                    'info': info
+                    }
+        return html
+
+    def logo(self):
+        logo = u''
+        if self.cfg.logo_string:
+            pagename = wikiutil.getFrontPage(self.request).page_name
+            pagename = wikiutil.quoteWikinameURL(pagename)
+            logo = wikiutil.link_tag(self.request, pagename, self.cfg.logo_string, css_class="logo")
+        return logo
+
+    def headscript(self, d):
+        """Override the stupid default script with its hardcoded HTML structure"""
+        return u'''<script type="text/javascript"><!--
+function add_gui_editor_links() {
+    // Add gui editor link after the text editor link
+
+    // If the variable is not set or browser is not compatible, exit
+    try {gui_editor_link_href}
+    catch (e) {
+        //alert("add_gui_editor_links: gui_editor_link_href not here");
+        return
+    }
+    if (can_use_gui_editor() == false){
+        //alert("add_gui_editor_links: can't use gui_editor");
+        return;
+    }
+    var all = document.getElementsByName('texteditlink');
+    for (i = 0; i < all.length; i++) {
+        var textEditorLink = all[i];
+        // Create a a link
+        var guiEditorLink = document.createElement('a');
+        guiEditorLink.href = gui_editor_link_href;
+        guiEditorLink.className = "edit";
+        var text = document.createTextNode(gui_editor_link_text);
+        guiEditorLink.appendChild(text);
+        // Insert in the editbar
+        var editbar = textEditorLink.parentNode
+        editbar.insertBefore(guiEditorLink, textEditorLink);
+    }
+}
+--></script>
+'''
+
+    def recentchanges_entry(self, d):
+        _ = self.request.getText
+        if d['comments']:
+            rccomm = ''
+            for c in d['comments']:
+                rccomm += ' <b>%d</b> ' % c[0];
+                rccomm += c[1];
+        else:
+            rccomm = ''
+        html = (u'''<li><b class="rctime">%s</b> %s %s . . . . <span class="rcauth">%s</span> <i class="rccomm">%s</i></li>''' % (
+            d['time_html'],
+            d['pagelink_html'],
+            d['icon_html'],
+            ', '.join(d['editors']),
+            rccomm,
+        ))
+        return html
+
+    def recentchanges_daybreak(self, d):
+        return u'</ul><h3 class="rcdaybreak">%s</h3><ul>' % d['date']
+
+    def recentchanges_header(self, d):
+        return u'<div class="recentchanges"%s><ul>' % self.ui_lang_attr()
+
+    def recentchanges_footer(self, d):
+        return u'</ul></div>'
+
+
+def execute(request):
+    return Theme(request)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/softie/chocolate.css	Mon May 05 02:12:56 2008 +0200
@@ -0,0 +1,76 @@
+
+/*** The menu bar ***/
+html ul.gotobar {
+    /* Whole bar. */
+    background: #c17d11;
+    border-top: 1px solid #7a4c01;
+    border-bottom: 1px solid #000;
+}
+html ul.gotobar li {
+    /* Outer edge of menu items. */
+    border: 1px solid #7a4c01;
+}
+html ul.gotobar li a {
+    /* Inactive menu items. */
+    border: 1px solid #e6af59;
+    background: #cc8515;
+    color: #024;
+}
+html ul.gotobar li.current a {
+    /* Selected menu items. */
+    background: #a86907;
+    border: 1px solid #c17d11;
+    color: #000;
+}
+html ul.gotobar li.current {
+    /* Outer border of selected menu items. */
+    border: 1px solid #583701;
+}
+html ul.gotobar li a:hover {
+    /* Menu items on hover. */
+    color: #000;
+    background: #e39b2a;
+    border: 1px solid #e9b96e;
+}
+
+/*** The sidebar ***/
+html div.sidebar {
+    background: #e9b96e;
+    border: 1px solid #c17d11;
+    border-bottom: 1px solid #8f5902;
+}
+html div.wrapper div.sidebar h1, 
+html div.wrapper div.sidebar h2, 
+html div.wrapper div.sidebar h3 { 
+    color: #583701;
+    border: 1px solid #8f5902;
+    background: #c17d11;
+}
+html div.sidebar li {
+    background: url(img/bullet-chocolate.png) no-repeat 3px 3px;
+}
+
+/*** The content ***/
+html h2, html h3, html h4, html h5 {
+    /* Headings */
+    color: #c17d11;
+}
+html div.wrapper h1 {
+    /* Largest heading */
+    color: #e9b96e;
+}
+html div.wrapper h4 { 
+    /* Smallest heading */
+    color: #8f5902; 
+}
+
+/*** The links ***/
+html a { 
+    color: #c17d11;
+}
+html a:visited {
+    color: #8f5902; 
+}
+html a.logo {
+    color: #444;
+}
Binary file softie/img/alert.png has changed
Binary file softie/img/angry.png has changed
Binary file softie/img/attach.png has changed
Binary file softie/img/attention.png has changed
Binary file softie/img/biggrin.png has changed
Binary file softie/img/bullet-blue.png has changed
Binary file softie/img/bullet-chocolate.png has changed
Binary file softie/img/bullet-plum.png has changed
Binary file softie/img/bullet.png has changed
Binary file softie/img/checkmark.png has changed
Binary file softie/img/devil.png has changed
Binary file softie/img/edit.png has changed
Binary file softie/img/frown.png has changed
Binary file softie/img/icon-error.png has changed
Binary file softie/img/icon-info.png has changed
Binary file softie/img/idea.png has changed
Binary file softie/img/moin-conflict.png has changed
Binary file softie/img/moin-deleted.png has changed
Binary file softie/img/moin-diff.png has changed
Binary file softie/img/moin-email.png has changed
Binary file softie/img/moin-new.png has changed
Binary file softie/img/moin-renamed.png has changed
Binary file softie/img/moin-updated.png has changed
Binary file softie/img/ohwell.png has changed
Binary file softie/img/prio1.png has changed
Binary file softie/img/prio2.png has changed
Binary file softie/img/prio3.png has changed
Binary file softie/img/redface.png has changed
Binary file softie/img/sad.png has changed
Binary file softie/img/smile.png has changed
Binary file softie/img/smile2.png has changed
Binary file softie/img/smile3.png has changed
Binary file softie/img/smile4.png has changed
Binary file softie/img/star_off.png has changed
Binary file softie/img/star_on.png has changed
Binary file softie/img/thumbs-up.png has changed
Binary file softie/img/tired.png has changed
Binary file softie/img/tongue.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/softie/plum.css	Mon May 05 02:12:56 2008 +0200
@@ -0,0 +1,76 @@
+
+/*** The menu bar ***/
+html ul.gotobar {
+    /* Whole bar. */
+    background: #ad7fa8;
+    border-top: 1px solid #75507b;
+    border-bottom: 1px solid #000;
+}
+html ul.gotobar li {
+    /* Outer edge of menu items. */
+    border: 1px solid #75507b;
+}
+html ul.gotobar li a {
+    /* Inactive menu items. */
+    border: 1px solid #e0b9dc;
+    background: #b893b4;
+    color: #5c3566;
+}
+html ul.gotobar li.current a {
+    /* Selected menu items. */
+    background: #8b5f92;
+    border: 1px solid #ad7fa8;
+    color: #000;
+}
+html ul.gotobar li.current {
+    /* Outer border of selected menu items. */
+    border: 1px solid #5c3566;
+}
+html ul.gotobar li a:hover {
+    /* Menu items on hover. */
+    color: #000;
+    background: #e0b9dc;
+    border: 1px solid #fff;
+}
+
+/*** The sidebar ***/
+html div.sidebar {
+    background: #e0b9dc;
+    border: 1px solid #ad7fa8;
+    border-bottom: 1px solid #75507b;
+}
+html div.wrapper div.sidebar h1, 
+html div.wrapper div.sidebar h2, 
+html div.wrapper div.sidebar h3 { 
+    color: #5c3566;
+    border: 1px solid #75507b;
+    background: #ad7fa8;
+}
+html div.sidebar li {
+    background: url(img/bullet-plum.png) no-repeat 3px 3px;
+}
+
+/*** The content ***/
+html h2, html h3, html h4, html h5 {
+    /* Headings */
+    color: #75507b;
+}
+html div.wrapper h1 {
+    /* Largest heading */
+    color: #ad7fa8;
+}
+html div.wrapper h4 { 
+    /* Smallest heading */
+    color: #5c3566;
+}
+
+/*** The links ***/
+html a { 
+    color: #bb5bb0;
+}
+html a:visited {
+    color: #7e4388;
+}
+html a.logo {
+    color: #444;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/softie/strawberry.css	Mon May 05 02:12:56 2008 +0200
@@ -0,0 +1,76 @@
+
+/*** The menu bar ***/
+html ul.gotobar {
+    /* Whole bar. */
+    background: #39f;
+    border-top: 1px solid #06d;
+    border-bottom: 1px solid #07e;
+}
+html ul.gotobar li {
+    /* Outer edge of menu items. */
+    border: 1px solid #07e;
+}
+html ul.gotobar li a {
+    /* Inactive menu items. */
+    border: 1px solid #7bf;
+    background: #4af;
+    color: #024;
+}
+html ul.gotobar li.current a {
+    /* Selected menu items. */
+    background: #39f;
+    border: 1px solid #3af;
+    color: #000;
+}
+html ul.gotobar li.current {
+    /* Outer border of selected menu items. */
+    border: 1px solid #06d;
+}
+html ul.gotobar li a:hover {
+    /* Menu items on hover. */
+    color: #000;
+    background: #6bf;
+    border: 1px solid #9df;
+}
+
+/*** The sidebar ***/
+html div.sidebar {
+    background: #bef;
+    border: 1px solid #7ae;
+    border-bottom: 1px solid #38e;
+}
+html div.wrapper div.sidebar h1, 
+html div.wrapper div.sidebar h2, 
+html div.wrapper div.sidebar h3 { 
+    color: #258;
+    border: 1px solid #6ae;
+    background: #7cf;
+}
+html div.sidebar li {
+    background: url(img/bullet-blue.png) no-repeat 3px 3px;
+}
+
+/*** The content ***/
+html h2, html h3, html h4, html h5 {
+    /* Headings */
+    color: #4af;
+}
+html div.wrapper h1 {
+    /* Largest heading */
+    color: #29f;
+}
+html div.wrapper h4 { 
+    /* Smallest heading */
+    color: #6bf; 
+}
+
+/*** The links ***/
+html a { 
+    color: #06f;
+}
+html a:visited {
+    color: #39f; 
+}
+html a.logo {
+    color: #444;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/softie/style.css	Mon May 05 02:12:56 2008 +0200
@@ -0,0 +1,445 @@
+/* @import url(strawberry.css); */
+/* @import url(chocolate.css); */
+/* @import url(plum.css); */
+
+html { 
+    padding: 0;
+    margin: 0;
+    font-size: 90%;
+    font-family: DejaVu Sans, Droid Sans, Verdana, sans-serif;
+    height: 100%;
+    background: #fff;
+    color: #000;
+}
+body {
+    padding: 0;
+    margin: 0;
+    min-height: 100%;
+    position: relative;
+}
+* html body { height: 100%; }
+
+
+
+a img { border: none }
+a { color: #f60; text-decoration: none }
+a:visited { color: #f93; }
+
+a.interwiki, a.http, a.www,a.file, a.mailto, a.https,  a.external { color: #48f }
+a.interwiki:visited, a.http:visited, a.https:visited, a.file:visited, a.mailto:visited, a.www:visited, a.external:visited { color: #65f }
+a.nonexistent { color: #f02 }
+a:hover { color: #000; text-decoration: underline }
+
+
+a.mailto:before {
+    content: url(img/moin-email.png); 
+    margin: 0 0.2em;
+    vertical-align: middle;
+    white-space: nowrap;
+}
+
+
+li p { margin: 0 }
+
+textarea, select, input {
+    border: 1px solid #999;
+    vertical-align: middle;
+    line-height: 1.2;
+    font-size: 100%;
+}
+textarea {
+    display: block;
+    width: 99%;
+}
+
+form.search {
+    float: right;
+    margin: 0.5em;
+    color: #666;
+}
+form.search p {
+    margin: 0;
+    font-size: 90%;
+}
+div.gotobar p {
+    margin: 0;
+    padding: 0.5em;
+}
+
+div.editbar a.edit:before {
+    content: url(img/edit.png);
+    vertical-align: middle;
+    margin: 0 0.15em 0 0.5em;
+}
+
+div.editbar {
+    float: right;
+    margin: 1em 0.25em;
+    color: #999;
+}
+div.editbar a {
+    color: #999;
+    font-size: 90%;
+    margin: 0 0.25em;
+}
+div.editbar a:hover {
+    color: #fff;
+}
+
+a.logo {
+    display: block;
+    margin: 0.25em;
+    float: left;
+    clear: none;
+    font-size: 200%;
+    text-decoration: none;
+    color: #444;
+    line-height: 1.2;
+    font-family: Impact, Haettenschweiler, fantasy;
+    letter-spacing: 0.025em;
+}
+a.logo img {
+    vertical-align: middle;
+    margin: 0 0.25em 0 0;
+}
+
+
+ul#username {
+    display: block;
+    float: right;
+    clear: right;
+    list-style: none;
+    margin: 0 0.5em;
+}
+ul#username li {
+    list-style: none;
+    display: inline;
+    margin: 0 0 0 1em;
+    font-size: 90%;
+}
+
+ul.gotobar {
+    margin: 0;
+    padding: 0 0.5em;
+    display: block;
+    border-top: 1px solid #d60;
+    border-bottom: 1px solid #e70;
+    color: #eee;
+    background: #f93;
+    clear: both;
+    overflow: hidden;
+}
+ul.gotobar li {
+    display: block;
+    float: left;
+    margin: 0.25em 0.25em;
+    border: 1px solid #e70;
+    overflow: hidden;
+}
+ul.gotobar li a {
+    letter-spacing: 0.05em;
+    display: block;
+    border: 1px solid #fb7;
+    text-decoration: none;
+    font-size: 90%;
+    padding: 0.25em 0.75em;
+    background: #fa4;
+    color: #420;
+}
+ul.gotobar li.current a {
+    background: #f93;
+    border: 1px solid #fa3;
+    color: #000;
+}
+ul.gotobar li.current {
+    border: 1px solid #d60;
+}
+ul.gotobar li a:hover {
+    color: #000;
+    background: #fb6;
+    border: 1px solid #fd9;
+}
+body ul.gotobar li.clear {
+    display: block;
+    list-style: none;
+    clear: both;
+    float: none;
+    margin: 0;
+    padding: 0;
+    height: 0;
+    overflow: hidden;
+    border: none;
+    line-height: 1px;
+}
+
+div.header h1 {
+    color: #eee;
+    background: #444;
+    margin: 0;
+    border-bottom: 1px solid #555;
+    padding: 0.5em;
+    font-weight: normal;
+    font-size: 125%;
+    border-top: 2px solid #333;
+    letter-spacing: 0.025em;
+}
+div.header h1 a.backlink {
+    color: #eee;
+}
+div.header h1 a.backlink:hover {
+    color: #fff;
+}
+
+span.pagepath { 
+    font-size: 80%; color: #666; 
+    font-weight: bold;
+}
+span.pagepath a { 
+    font-weight: normal;
+    color: #999;
+}
+
+div.header {
+    border-bottom: 1px solid #000;
+}
+
+
+div.wrapper {
+    padding: 0.5em;
+    margin: 0 0.5em 1.5em 11.5em;
+    color: #444;
+    position: relative;
+}
+
+div.content {
+    line-height: 1.35;
+    position: relative;
+}
+
+div.sidebar {
+    width: 11.5em;
+    position: absolute;
+    left: -12.25em;
+    top: 0.75em;
+    font-size: 90%;
+    line-height: 1.3;
+    background: #feb;
+    border: 1px solid #ea7;
+    border-bottom: 1px solid #e83;
+    padding: 1px;
+    margin: 0;
+}
+div.sidebar p {
+    margin: 0;
+}
+div.wrapper div.sidebar h1, 
+div.wrapper div.sidebar h2, 
+div.wrapper div.sidebar h3 { 
+    font-size: 100%; 
+    margin: 0 0 0.25em 0;
+    letter-spacing: 0.05em;
+    font-weight: normal;
+    color: #852;
+    border: 1px solid #ea6;
+    background: #fc7;
+    padding: 0.25em 0.5em;
+    line-height: 1.1;
+    font-family: DejaVu Sans, Droid Sans, Verdana, sans-serif;
+}
+div.sidebar ul { 
+    margin: 0;
+    list-style: none;
+    padding: 0 0 0.25em 0;
+}
+div.sidebar li {
+    list-style: none;
+    background: url(img/bullet.png) no-repeat 3px 3px;
+    padding: 0 0 0 15px;
+}
+div.sidebar a { color: #000; }
+div.sidebar a:hover { text-decoration: underline }
+
+
+div.wrapper h1, h2, h3, h4, h5 {
+    color: #fa4;
+    font-family: Impact, Haettenschweiler, fantasy;
+    font-weight: normal;
+    line-height: 1.2;
+}
+div.wrapper h1 { font-size: 200%; margin: 1em 0 0.5em 0; color: #f92 }
+div.wrapper h2 { font-size: 200%; margin: 1em 0 0.5em 0; }
+div.wrapper h3 { font-size: 150%; letter-spacing: 0.025em; margin: 1.25em 0 0.75em 0; }
+div.wrapper h4 { font-size: 125%; letter-spacing: 0.05em; margin: 1.5em 0 1em 0; color: #fb6 }
+
+
+ul#pagetrail {
+    display: block;
+    background: #eee;
+    border-bottom: 1px solid #fff;
+    border-top: 3px solid #bbb;
+    margin: 0;
+    padding: 0;
+}
+ul#pagetrail li {
+    display: inline;
+    list-style: none;
+    margin-left: 0.75em;
+}
+ul#pagetrail li a {
+    font-size: 80%;
+    color: #666;
+}
+
+
+div.footer {
+    position: absolute;
+    width: 100%;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    color: #ddd;
+    text-align: right;
+    border-top: 1px solid #ccc;
+    padding: 0;
+    margin: 0;
+}
+div.footer span.time {
+    display: block;
+    text-align: right;
+    color: #666;
+    font-size: 80%;
+    padding: 0.25em 0.5em;
+    font-style: italic;
+}
+
+div#message, p.status {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    background: #ffa;
+    border-bottom: 1px solid #888;
+    padding: 0.125em 0.5em;
+    margin: 0;
+    font-size: 90%;
+    color: #000;
+    opacity: 0.90;
+    z-index: 1000;
+}
+
+div.message p { margin: 0 }
+
+#content table { border-collapse: collapse; font-size: 80%; margin: 0.5em auto; }
+#content th, #content td { border: 1px solid #999; padding: 0.25em;  }
+#content th { background: #f6f6f6;  }
+
+tt { font-size: 90%; color: #333;
+    font-family: "DejaVu Sans Mono", "Lucida Console", monospace; }
+div.codearea, pre { 
+    border: 1px solid #ddd; 
+    background: #f6f6f6; 
+    color: #666;
+}
+div.codearea a.codenumbers { font-size: 70%; float: right; display: block; padding: 0.25em }
+div.codearea span.LineNumber { background: #fff; color: #888; border-right: 1px solid #ddd; margin-right: 0.25em; font-weight: bold; 
+}
+div.codearea pre { padding: 0; border: none; margin: 0; color: #222 }
+div.codearea span.ResWord { font-weight: bold }
+div.codearea span.ResWord2 { font-weight: bold; color: #f60 }
+div.codearea span.ID { font-style: italic }
+div.codearea span.Comment { color: #999; font-style: italic }
+div.codearea span.Preprc { color: #999; font-weight: bold;  }
+div.codearea span.String { color: #f60; font-style: italic }
+div.codearea span.Char { color: #f60; font-style: italic; font-weight: bold }
+div.codearea span.Number { color: #f60 }
+div.codearea span.ConsWord { color: #f60; font-weight: bold }
+div.codearea span.Operator { }
+div.codearea span.SPChar { font-weight: bold; }
+div.codearea span.Special { }
+div.codearea span.Error { color: #f60; font-weight: bold; background: #ddd }
+
+pre {
+    padding: 0.25em; 
+    font-family: "DejaVu Sans Mono", "Lucida Console", monospace;
+    font-size: 90%;
+    line-height: 1.25;
+    white-space: pre;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+    white-space: -moz-pre-wrap;
+    white-space: -pre-wrap;
+    white-space: -o-pre-wrap;
+    /* end css 3 or browser specific rules */
+}
+
+li p, td p, dd p, dt p { margin: 0 }
+
+hr {
+	background: transparent;
+	color: #fff;
+	border: none;
+	border-top: 1px solid #ccc;
+}
+
+div#preview {
+
+    background: #ffa;
+    border: 1px solid #888;
+    padding: 0.125em 0.5em;
+}
+
+div.warn ul, div.tip ul, div.hint ul, div.info ul, div.err ul,
+div.warn p, div.tip p, div.hint p, div.info p, div.err p {
+	margin: 0;
+}
+
+.diff-added span {
+	background: #eee;
+	color: #000;
+}
+
+.diff-removed span {
+	background: #feb;
+	color: #000;
+}	
+
+
+strong.highlight {
+	background: #feb;
+	color: #000;
+	font-weight: normal;
+}
+
+span.strike {
+      text-decoration: line-through;
+}
+span.u {
+      text-decoration: underline;
+}
+
+
+@media print {
+    div.sidebar, div.header { display: none }
+    div.footer { position: static }
+    div.wrapper { padding: 0; border: none }
+}
+
+/* from the HelpOnMoinWikiSyntax, the fugly div classes, ugh */
+div.comment { 
+    color: #444; 
+    background: #ddf;
+}
+
+div.red { background: #fcc; }
+div.green { background: #cfc; }
+div.blue { background: #ccf; }
+
+div.solid, div.dashed, div.dotted {
+    border: 2px solid #000;
+    padding: 0.5em;
+}
+div.solid { border-style: solid }
+div.dashed { border-style: dashed }
+div.dotted { border-style: dotted }
+
+div.blink { text-decoration: blink }