changeset 4472:331686d6b068

merged moin/1.8
author Thomas Waldmann <tw AT waldmann-edv DOT de>
date Sat, 03 Jan 2009 01:59:18 +0100
parents 20747ef82aca (current diff) 5ea38c7fa252 (diff)
children 0e3c82dd2109
files .hgtags MoinMoin/Page.py MoinMoin/PageEditor.py MoinMoin/PageGraphicalEditor.py MoinMoin/__init__.py MoinMoin/config/multiconfig.py MoinMoin/i18n/de.MoinMoin.po MoinMoin/i18n/fr.MoinMoin.po MoinMoin/i18n/it.MoinMoin.po MoinMoin/i18n/lt.MoinMoin.po MoinMoin/i18n/nb.MoinMoin.po MoinMoin/i18n/pl.MoinMoin.po MoinMoin/i18n/sk.MoinMoin.po MoinMoin/i18n/sl.MoinMoin.po MoinMoin/i18n/sv.MoinMoin.po MoinMoin/i18n/zh.MoinMoin.po MoinMoin/logfile/editlog.py MoinMoin/theme/__init__.py MoinMoin/version.py docs/CHANGES docs/INSTALL.html docs/UPDATE.html moin.spec wiki/config/more_samples/ui_wikiconfig_snippet wiki/config/wikiconfig.py wiki/config/wikifarm/farmconfig.py wiki/data/meta wiki/server/moin.wsgi wiki/underlay.tar wikiconfig.py
diffstat 23 files changed, 350 insertions(+), 139 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Fri Jan 02 23:51:28 2009 +0100
+++ b/.hgtags	Sat Jan 03 01:59:18 2009 +0100
@@ -25,8 +25,10 @@
 b1e192a3651a57aa451fefca06f5a849e1e4b422 SOC2008-END
 da9e664b3f518f0cab89f7ebf22b99ecac0eaaa1 1.7.1
 ae9bf455eec6a080dd6aafacdaf30fb881b1ca68 1.7.2
+ffdb44bf3b7391f660735fd509015819e8feaad2 1.7.3
 2907390f9d4630f5459506d3d3352c96f75e67b3 1.8.0beta1
 117a21659358defd880baaccf5c73e7b1a71ea1e 1.8.0beta2
 df1ba1ddf05061d6451797869c159b3c60319470 1.8.0beta3
 4186e90ead069aad4b739f278eb8599dc00ff6a4 1.8.0rc1
 7fee549f435d119801075f0d18fc57822f78f0eb 1.8.0
+fad2936d33a7eac9370f3cdc28f0ec375518d5cf 1.8.1
--- a/MoinMoin/Page.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/Page.py	Sat Jan 03 01:59:18 2009 +0100
@@ -555,7 +555,7 @@
             if editordata[0] == 'interwiki':
                 editor = "%s:%s" % editordata[1]
             else:
-                editor = editordata[1] # ip or email
+                editor = editordata[1] # ip or email or anon
             result = {
                 'timestamp': line.ed_time_usecs,
                 'editor': editor,
--- a/MoinMoin/PageEditor.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/PageEditor.py	Sat Jan 03 01:59:18 2009 +0100
@@ -195,7 +195,7 @@
             self.send_page()
             return
 
-        # Emmit http_headers after checks (send_page)
+        # Emit http_headers after checks (send_page)
         request.disableHttpCaching(level=2)
 
         # check if we want to load a draft
--- a/MoinMoin/PageGraphicalEditor.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/PageGraphicalEditor.py	Sat Jan 03 01:59:18 2009 +0100
@@ -51,7 +51,6 @@
         request = self.request
         form = request.form
         _ = self._
-        request.disableHttpCaching(level=2)
 
         raw_body = ''
         msg = None
@@ -86,6 +85,9 @@
             self.send_page()
             return
 
+        # Emit http_headers after checks (send_page)
+        request.disableHttpCaching(level=2)
+
         # check if we want to load a draft
         use_draft = None
         if 'button_load_draft' in form:
--- a/MoinMoin/config/multiconfig.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/config/multiconfig.py	Sat Jan 03 01:59:18 2009 +0100
@@ -651,33 +651,30 @@
         If you don't want to check passwords, use password_checker = None.
 
         @return: None if there is no problem with the password,
-                 some string with an error msg, if the password is problematic.
+                 some unicode object with an error msg, if the password is problematic.
     """
     _ = request.getText
-    try:
-        # in any case, do a very simple built-in check to avoid the worst passwords
-        if len(password) < 6:
-            raise ValueError(_("Password is too short."))
-        if len(set(password)) < 4:
-            raise ValueError(_("Password has not enough different characters."))
+    # in any case, do a very simple built-in check to avoid the worst passwords
+    if len(password) < 6:
+        return _("Password is too short.")
+    if len(set(password)) < 4:
+        return _("Password has not enough different characters.")
 
-        username_lower = username.lower()
-        password_lower = password.lower()
-        if username in password or password in username or \
-           username_lower in password_lower or password_lower in username_lower:
-            raise ValueError(_("Password is too easy (password contains name or name contains password)."))
+    username_lower = username.lower()
+    password_lower = password.lower()
+    if username in password or password in username or \
+       username_lower in password_lower or password_lower in username_lower:
+        return _("Password is too easy (password contains name or name contains password).")
 
-        keyboards = (ur"`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./", # US kbd
-                     ur"^1234567890ß´qwertzuiopü+asdfghjklöä#yxcvbnm,.-", # german kbd
-                    ) # add more keyboards!
-        for kbd in keyboards:
-            rev_kbd = kbd[::-1]
-            if password in kbd or password in rev_kbd or \
-               password_lower in kbd or password_lower in rev_kbd:
-                raise ValueError(_("Password is too easy (keyboard sequence)."))
-        return None
-    except ValueError, err:
-        return unicode(err)
+    keyboards = (ur"`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./", # US kbd
+                 ur"^1234567890ß´qwertzuiopü+asdfghjklöä#yxcvbnm,.-", # german kbd
+                ) # add more keyboards!
+    for kbd in keyboards:
+        rev_kbd = kbd[::-1]
+        if password in kbd or password in rev_kbd or \
+           password_lower in kbd or password_lower in rev_kbd:
+            return _("Password is too easy (keyboard sequence).")
+    return None
 
 
 class DefaultExpression(object):
@@ -995,6 +992,8 @@
     ('language_default', 'en', "Default language for user interface and page content, see HelpOnLanguages."),
     ('language_ignore_browser', False, "if True, ignore user's browser language settings, see HelpOnLanguages."),
 
+    ('log_remote_addr', True,
+     "if True, log the remote IP address (and maybe hostname)."),
     ('log_reverse_dns_lookups', True,
      "if True, do a reverse DNS lookup on page SAVE. If your DNS is broken, set this to False to speed up SAVE."),
     ('log_timing', False,
--- a/MoinMoin/filter/__init__.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/filter/__init__.py	Sat Jan 03 01:59:18 2009 +0100
@@ -6,7 +6,7 @@
     @license: GNU GPL, see COPYING for details.
 """
 
-import os
+import sys, os
 
 from MoinMoin import log
 logging = log.getLogger(__name__)
--- a/MoinMoin/logfile/editlog.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/logfile/editlog.py	Sat Jan 03 01:59:18 2009 +0100
@@ -81,9 +81,11 @@
             representing the user that did the edit.
 
             The type id is one of 'ip' (DNS or numeric IP), 'user' (user name)
-            or 'homepage' (Page instance of user's homepage).
+            or 'homepage' (Page instance of user's homepage) or 'anon' ('').
         """
-        result = 'ip', request.cfg.show_hosts and self.hostname or ''
+        result = 'anon', ''
+        if request.cfg.show_hosts and self.hostname:
+            result = 'ip', self.hostname
         if self.userid:
             if self.userid not in self._usercache:
                 self._usercache[self.userid] = user.User(request, self.userid, auth_method="editlog:75")
@@ -100,7 +102,8 @@
     def getEditor(self, request):
         """ Return a HTML-safe string representing the user that did the edit.
         """
-        if request.cfg.show_hosts:
+        _ = request.getText
+        if request.cfg.show_hosts and self.hostname and self.addr:
             title = " @ %s[%s]" % (self.hostname, self.addr)
         else:
             title = ""
@@ -131,6 +134,9 @@
                 idx = len(info)
             title = '???' + title
             text = request.formatter.text(info[:idx])
+        elif kind == 'anon':
+            title = ''
+            text = _('anonymous')
         else:
             raise Exception("unknown EditorData type")
         return (request.formatter.span(1, title=title) +
@@ -162,18 +168,22 @@
 
         If `host` is None, it's read from request vars.
         """
-        if host is None:
-            host = request.remote_addr or ''
+        if request.cfg.log_remote_addr:
+            if host is None:
+                host = request.remote_addr or ''
 
-        if request.cfg.log_reverse_dns_lookups:
-            import socket
-            try:
-                hostname = socket.gethostbyaddr(host)[0]
-                hostname = unicode(hostname, config.charset)
-            except (socket.error, UnicodeError):
+            if request.cfg.log_reverse_dns_lookups:
+                import socket
+                try:
+                    hostname = socket.gethostbyaddr(host)[0]
+                    hostname = unicode(hostname, config.charset)
+                except (socket.error, UnicodeError):
+                    hostname = host
+            else:
                 hostname = host
         else:
-            hostname = host
+            host = ''
+            hostname = ''
 
         comment = wikiutil.clean_input(comment)
         user_id = request.user.valid and request.user.id or ''
--- a/MoinMoin/logfile/eventlog.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/logfile/eventlog.py	Sat Jan 03 01:59:18 2009 +0100
@@ -37,8 +37,9 @@
 
         if values is None:
             values = {}
-        if add_http_info:
-            # All these are ascii
+        if request.cfg.log_remote_addr and add_http_info:
+            # if cfg.log_remote_addr is False (usually for privacy reasons),
+            # we likely do not want to log user agent and http referer either.
             for key in ['remote_addr', 'http_user_agent', 'http_referer']:
                 value = getattr(request, key, '')
                 if value:
--- a/MoinMoin/macro/WikiConfig.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/macro/WikiConfig.py	Sat Jan 03 01:59:18 2009 +0100
@@ -4,7 +4,7 @@
 """
 from MoinMoin.config import multiconfig
 
-Dependencies = ['user']
+Dependencies = ['user'] # table headings are translated to user language
 generates_headings = True
 
 def macro_WikiConfig(macro):
--- a/MoinMoin/macro/WikiConfigHelp.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/macro/WikiConfigHelp.py	Sat Jan 03 01:59:18 2009 +0100
@@ -4,7 +4,7 @@
 """
 from MoinMoin.config import multiconfig
 
-Dependencies = []
+Dependencies = ['user'] # table headings are translated to user language
 generates_headings = True
 
 def macro_WikiConfigHelp(macro):
--- a/MoinMoin/script/migration/1070200.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/script/migration/1070200.py	Sat Jan 03 01:59:18 2009 +0100
@@ -9,5 +9,5 @@
 """
 
 def execute(script, data_dir, rev):
-    return 1080000
+    return 1070300
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MoinMoin/script/migration/1070300.py	Sat Jan 03 01:59:18 2009 +0100
@@ -0,0 +1,13 @@
+# -*- coding: iso-8859-1 -*-
+"""
+    MoinMoin - migration from base rev 1070300
+
+    Nothing to do, we just return the new data dir revision.
+
+    @copyright: 2008 by Thomas Waldmann
+    @license: GNU GPL, see COPYING for details.
+"""
+
+def execute(script, data_dir, rev):
+    return 1080000
+
--- a/MoinMoin/script/migration/1080000.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/script/migration/1080000.py	Sat Jan 03 01:59:18 2009 +0100
@@ -1,13 +1,13 @@
 # -*- coding: iso-8859-1 -*-
 """
-    MoinMoin - dummy migration terminator script
+    MoinMoin - migration from base rev 1080000
 
-    This must be the last migration script.
+    Nothing to do, we just return the new data dir revision.
 
-    @copyright: 2006 by Thomas Waldmann
+    @copyright: 2008 by Thomas Waldmann
     @license: GNU GPL, see COPYING for details.
 """
 
 def execute(script, data_dir, rev):
-    return None
+    return 1080100
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MoinMoin/script/migration/1080100.py	Sat Jan 03 01:59:18 2009 +0100
@@ -0,0 +1,13 @@
+# -*- coding: iso-8859-1 -*-
+"""
+    MoinMoin - dummy migration terminator script
+
+    This must be the last migration script.
+
+    @copyright: 2008 by Thomas Waldmann
+    @license: GNU GPL, see COPYING for details.
+"""
+
+def execute(script, data_dir, rev):
+    return None
+
--- a/MoinMoin/theme/__init__.py	Fri Jan 02 23:51:28 2009 +0100
+++ b/MoinMoin/theme/__init__.py	Sat Jan 03 01:59:18 2009 +0100
@@ -632,6 +632,28 @@
 </ul>''' % ''.join(items)
         return html
 
+    def _stylesheet_link(self, theme, media, href, title=None):
+        """
+        Create a link tag for a stylesheet.
+
+        @param theme: True: href gives the basename of a theme stylesheet,
+                      False: href is a full url of a user/admin defined stylesheet.
+        @param media: 'all', 'screen', 'print', 'projection', ...
+        @param href: see param theme
+        @param title: optional title (for alternate stylesheets), see
+                      http://www.w3.org/Style/Examples/007/alternatives
+        @rtype: string
+        @return: stylesheet link html
+        """
+        if theme:
+            href = '%s/%s/css/%s.css' % (self.cfg.url_prefix_static, self.name, href)
+        attrs = 'type="text/css" charset="%s" media="%s" href="%s"' % (
+                self.stylesheetsCharset, media, href, )
+        if title:
+            return '<link rel="alternate stylesheet" %s title="%s">' % (attrs, title)
+        else:
+            return '<link rel="stylesheet" %s>' % attrs
+
     def html_stylesheets(self, d):
         """ Assemble html head stylesheet links
 
@@ -639,45 +661,32 @@
         @rtype: string
         @return: stylesheets links
         """
-        link = '<link rel="stylesheet" type="text/css" charset="%s" media="%s" href="%s">'
-
+        request = self.request
         # Check mode
         if d.get('print_mode'):
             media = d.get('media', 'print')
             stylesheets = getattr(self, 'stylesheets_' + media)
         else:
             stylesheets = self.stylesheets
-        usercss = self.request.user.valid and self.request.user.css_url
-
-        # Create stylesheets links
-        html = []
-        prefix = self.cfg.url_prefix_static
-        csshref = '%s/%s/css' % (prefix, self.name)
-        for media, basename in stylesheets:
-            href = '%s/%s.css' % (csshref, basename)
-            html.append(link % (self.stylesheetsCharset, media, href))
 
-            # Don't add user css url if it matches one of ours
-            if usercss and usercss == href:
-                usercss = None
+        theme_css = [self._stylesheet_link(True, *stylesheet) for stylesheet in stylesheets]
+        cfg_css = [self._stylesheet_link(False, *stylesheet) for stylesheet in request.cfg.stylesheets]
 
-        # admin configurable additional css (farm or wiki level)
-        for media, csshref in self.request.cfg.stylesheets:
-            html.append(link % (self.stylesheetsCharset, media, csshref))
-
-        csshref = '%s/%s/css/msie.css' % (prefix, self.name)
-        html.append("""
+        msie_css = """
 <!-- css only for MSIE browsers -->
 <!--[if IE]>
    %s
 <![endif]-->
-""" % link % (self.stylesheetsCharset, 'all', csshref))
+""" % self._stylesheet_link(True, 'all', 'msie')
 
         # Add user css url (assuming that user css uses same charset)
-        if usercss and usercss.lower() != "none":
-            html.append(link % (self.stylesheetsCharset, 'all', usercss))
+        href = request.user.valid and request.user.css_url
+        if href and href.lower() != "none":
+            user_css = self._stylesheet_link(False, 'all', href)
+        else:
+            user_css = ''
 
-        return '\n'.join(html)
+        return '\n'.join(theme_css + cfg_css + [msie_css, user_css])
 
     def shouldShowPageinfo(self, page):
         """ Should we show page info?
@@ -1143,10 +1152,9 @@
         _ = self.request.getText
         editbar_actions = []
         for editbar_item in self.request.cfg.edit_bar:
-            if editbar_item == 'Discussion':
-                if not self.request.cfg.supplementation_page and self.request.getPragma('supplementation-page', 1) in ('on', '1'):
-                    editbar_actions.append(self.supplementation_page_nameLink(page))
-                elif self.request.cfg.supplementation_page and not self.request.getPragma('supplementation-page', 1) in ('off', '0'):
+            if (editbar_item == 'Discussion' and
+               (self.request.getPragma('supplementation-page', self.request.cfg.supplementation_page)
+                                                   in (True, 1, 'on', '1'))):
                     editbar_actions.append(self.supplementation_page_nameLink(page))
             elif editbar_item == 'Comments':
                 # we just use <a> to get same style as other links, but we add some dummy
--- a/docs/CHANGES	Fri Jan 02 23:51:28 2009 +0100
+++ b/docs/CHANGES	Sat Jan 03 01:59:18 2009 +0100
@@ -45,6 +45,44 @@
 
 
 
+Version 1.8.1:
+  Bug fixes:
+    * Workaround win32 locking problems (caused by spurious access denied
+      exceptions on that platform).
+    * Fix unicode errors that happened when password checker failed a password
+    * WikiConfig/WikiConfigHelp: fixed wrong language table headings
+    * Themes: make the margins around trail line work properly
+    * "modernized" theme:
+      * make broken links gray
+      * add new right/center/left/justify css classes
+      * don't force Arial
+    * Standalone server: be more specific when catching socket exceptions,
+      treat socket errors in http header emission in the same way.
+    * GUI editor:
+      * Fix heading levels when inserting new headings.
+      * Fix headers already sent exception when using e.g. edit LOCKing.
+    * Xapian indexing: fixed missing import for execfilter (only happened on
+      non-posix platforms like win32)
+
+  * New features:
+    * Themes:
+     * Make the TOC shrinkwrap, add white background to navigation macro.
+       The table of contents looked bad spanning the whole width of the page.
+       It's made to shrinkwrap now, so it will only get as wide, as the longest
+       heading. We use display:inline-table, so this won't work in MS IE6,
+       which still displays it the old way.
+       Navigation macro now has a white background, to make it more readable
+       when it's floating over a pre block or TOC.
+     * Make the numbers in lists in table of contents right-aligned.
+     * Refactored and extended theme.html_stylesheets() to make alternate
+       stylesheets possible. Stylesheet definitions now can either be:
+       2-tuples: (media, href)  # backwards compatibility
+       or:
+       3-tuples: (media, href, title)  # new, for defining alternate stylesheets
+       This works within themes as well as in the wiki config.
+       See also: http://www.w3.org/Style/Examples/007/alternatives.html
+
+
 Version 1.8.0:
   Note: This is a reduced CHANGES, ommitting details from rc/beta test and
         also less interesting minor changes and fixes. It shows changes
@@ -132,6 +170,37 @@
     * Added sk (slovak) i18n, updated i18n.
 
 
+1.7.3:
+  New features:
+    * Secure session cookies for https, see cfg.cookie_secure.
+    * Add left/center/right/justify classes to builtin themes.
+
+  Fixes:
+    * Python 2.3 compatibility fixes.
+    * Fixed https detection for servers using HTTPS=1 and also for wsgi servers
+      not using HTTPS/SSL_ environment, but just wsgi.url_scheme.
+    * GUI editor:
+      * Fix crash when editing a page with non-ASCII pagename and inserting a link
+      * Fix "headers already sent exception" with edit LOCKs.
+    * i18n.__init__: Bug fix for wiki language not installed.
+    * Fixed URLs given by sitemap action, if the wiki does not run at / URL.
+    * Search results: link to 'view' rendering of found attachments
+    * Logging:    
+      * Removed superfluous linefeed in timing log output.
+      * Use logging framework for messages emitted by warnings module (e.g.
+        DeprecationWarning), silence some specific warnings.
+    * Fix dbw_hide_buttons javascript.
+    * Standalone server:
+      * fix serverClass argument processing
+      * fix --interface="" argument processing
+    * mointwisted:
+      * added missing pidFile parameter
+      * better use Config.name for pidFile to avoid conflicts and keep same
+        behaviour as in the past
+    * Jabber bot can now be configured to use an authentication realm which
+      is different from the server's hostname
+
+
 Version 1.7.2:
   Fixes:
     * Fix leakage of edit-log file handles (leaked 1 file handle / request!).
--- a/wiki/htdocs/classic/css/common.css	Fri Jan 02 23:51:28 2009 +0100
+++ b/wiki/htdocs/classic/css/common.css	Sat Jan 03 01:59:18 2009 +0100
@@ -131,15 +131,41 @@
 .strike {text-decoration: line-through;}
 
 /* TableOfContents macro */
-.table-of-contents { font-size: small;
-                     text-align:left;
-                     margin: 0.5em; padding-left: 2em;
-                     min-width:50%; }
-.table-of-contents ol { margin:0; margin-left:1em;
-                        list-style-type:decimal; }
-.table-of-contents ul { margin:0;
-                        list-style-type:none; }
-.table-of-contents-heading { font-weight:bold; padding:0; margin:0; }
+div.table-of-contents {
+    border: 1px solid #bbbbbb;
+    color: black;
+    background-color: #eeeeee;
+    font-size: 80%;
+    text-align: left;
+    margin: 0.5em 0 0.5em 1em;
+    padding: 0.5em 0.75em 0.5em 0.5em;
+    max-width: 50%;
+    display: inline-table;
+}
+div.table-of-contents ol {
+    margin: 0;
+    padding: 0 0 0 2em;
+}
+div.table-of-contents ul {
+    margin: 0;
+    list-style:none;
+}
+div.table-of-contents li {
+    margin:0;
+    padding: 0;
+}
+p.table-of-contents-heading {
+    font-weight:bold;
+    padding:0;
+    margin: 0 0 0.5em 0;
+    letter-spacing: 0.075em;
+}
+
+/* Navigation macro */
+table.navigation {
+    background: #fff;
+    margin: 0;
+}
 
 
 .footnotes ol {
--- a/wiki/htdocs/modern/css/common.css	Fri Jan 02 23:51:28 2009 +0100
+++ b/wiki/htdocs/modern/css/common.css	Sat Jan 03 01:59:18 2009 +0100
@@ -57,7 +57,7 @@
 dd p {
     margin: 0.25em 0;
 }
-   
+
 a, img, img.drawing {
 	border: 0;
 }
@@ -127,18 +127,41 @@
 }
 
 /* TableOfContents macro */
-.table-of-contents { border: 1px solid #bbbbbb;
-                     color: black; background-color: #eeeeee;
-                     font-size: small;
-                     text-align:left;
-                     margin: 0.5em; padding-left: 2em;
-                     min-width:50%; }
-.table-of-contents ol { margin:0; margin-left:1em;
-                        list-style-type:decimal; }
-.table-of-contents ul { margin:0;
-                        list-style-type:none; }
-.table-of-contents-heading { font-weight:bold; padding:0; margin:0; }
+div.table-of-contents {
+    border: 1px solid #bbbbbb;
+    color: black;
+    background-color: #eeeeee;
+    font-size: 80%;
+    text-align: left;
+    margin: 0.5em 0 0.5em 1em;
+    padding: 0.5em 0.75em 0.5em 0.5em;
+    max-width: 50%;
+    display: inline-table;
+}
+div.table-of-contents ol {
+    margin: 0;
+    padding: 0 0 0 2em;
+}
+div.table-of-contents ul {
+    margin: 0;
+    list-style:none;
+}
+div.table-of-contents li {
+    margin:0;
+    padding: 0;
+}
+p.table-of-contents-heading {
+    font-weight:bold;
+    padding:0;
+    margin: 0 0 0.5em 0;
+    letter-spacing: 0.075em;
+}
 
+/* Navigation macro */
+table.navigation {
+    background: #fff;
+    margin: 0;
+}
 
 .footnotes div {
 	width: 5em;
@@ -189,17 +212,17 @@
 .strike {text-decoration: line-through;}
 
 /* eye catchers */
-.warning 
+.warning
 {
 	color: red;
 }
 
-.error 
+.error
 {
 	color: red;
 }
 
-strong.highlight 
+strong.highlight
 {
 	background-color: #CCE0FF;
 	padding: 1pt;
@@ -319,7 +342,7 @@
 
 .advancedsearch td {
     vertical-align: top;
-    background-color: #E7E7E7;    
+    background-color: #E7E7E7;
     border: 0px;
 }
 
@@ -481,7 +504,7 @@
     vertical-align: middle;
 }
 #message .error:before {
-    content: url('../img/icon-error.png'); 
+    content: url('../img/icon-error.png');
     margin: 0 0.5em 0 0.125em;
     vertical-align: middle;
 }
@@ -493,26 +516,26 @@
 
 
 /* admonition start */
-#content div.caution, 
-#content div.important, 
-#content div.note, 
-#content div.tip, 
+#content div.caution,
+#content div.important,
+#content div.note,
+#content div.tip,
 #content div.warning {
     border: 1pt solid #E5E5E5;
     background-color: #F9F9FF;
     color: black;
-    
+
     margin: 10pt 30pt 10pt 30pt;
     background-repeat: no-repeat;
     background-position: 8px 8px;
     min-height: 64px; /*64=48+8+8 but doesn't work with IE*/
     padding-left: 64px;
 }
- 
-#content div.caution p, 
-#content div.important p, 
-#content div.note p, 
-#content div.tip p, 
+
+#content div.caution p,
+#content div.important p,
+#content div.note p,
+#content div.tip p,
 #content div.warning p {
     margin-top: 8px; /*to align text with bg graphic*/
 }
--- a/wiki/htdocs/modern/css/screen.css	Fri Jan 02 23:51:28 2009 +0100
+++ b/wiki/htdocs/modern/css/screen.css	Sat Jan 03 01:59:18 2009 +0100
@@ -135,7 +135,6 @@
 
 #pagetrail {
     clear: right;
-    display: inline;
     margin: 5px 12px;
     padding: 0;
     font-size: 0.88em;
--- a/wiki/htdocs/modernized/css/common.css	Fri Jan 02 23:51:28 2009 +0100
+++ b/wiki/htdocs/modernized/css/common.css	Sat Jan 03 01:59:18 2009 +0100
@@ -8,7 +8,7 @@
 html {
 	background-color: white;
 	color: black;
-	font-family: Arial, Lucida Grande, sans-serif;
+	font-family: sans-serif;
 	font-size: 1em;
 }
 
@@ -126,20 +126,42 @@
 	margin: 0;
 	padding: 0;
 }
-
 /* TableOfContents macro */
-.table-of-contents { border: 1px solid #bbbbbb;
-                     color: black; background-color: #eeeeee;
-                     font-size: small;
-                     text-align:left;
-                     margin: 0.5em; padding-left: 2em;
-                     min-width:50%; }
-.table-of-contents ol { margin:0; margin-left:1em;
-                        list-style-type:decimal; }
-.table-of-contents ul { margin:0;
-                        list-style-type:none; }
-.table-of-contents-heading { font-weight:bold; padding:0; margin:0; }
+div.table-of-contents {
+    border: 1px solid #bbbbbb;
+    color: black;
+    background-color: #eeeeee;
+    font-size: 80%;
+    text-align: left;
+    margin: 0.5em 0 0.5em 1em;
+    padding: 0.5em 0.75em 0.5em 0.5em;
+    max-width: 50%;
+    display: inline-table;
+}
+div.table-of-contents ol {
+    margin: 0;
+    padding: 0 0 0 2em;
+}
+div.table-of-contents ul {
+    margin: 0;
+    list-style:none;
+}
+div.table-of-contents li {
+    margin:0;
+    padding: 0;
+}
+p.table-of-contents-heading {
+    font-weight:bold;
+    padding:0;
+    margin: 0 0 0.5em 0;
+    letter-spacing: 0.075em;
+}
 
+/* Navigation macro */
+table.navigation {
+    background: #fff;
+    margin: 0;
+}
 
 .footnotes div {
 	width: 5em;
--- a/wiki/htdocs/modernized/css/screen.css	Fri Jan 02 23:51:28 2009 +0100
+++ b/wiki/htdocs/modernized/css/screen.css	Sat Jan 03 01:59:18 2009 +0100
@@ -127,7 +127,7 @@
 #pagetrail {
     clear: right;
     display: inline;
-    margin: 0.5em 0;
+    margin: 0 0.88em 0.25em 0.88em;
     padding: 0;
     font-size: 0.88em;
 }
--- a/wiki/htdocs/rightsidebar/css/common.css	Fri Jan 02 23:51:28 2009 +0100
+++ b/wiki/htdocs/rightsidebar/css/common.css	Sat Jan 03 01:59:18 2009 +0100
@@ -143,17 +143,42 @@
 .strike {text-decoration: line-through;}
 
 /* TableOfContents macro */
-.table-of-contents { border: 1px solid #bbbbbb;
-                     color: black; background-color: #eeeeee;
-                     font-size: small;
-                     text-align:left;
-                     margin: 0.5em; padding-left: 2em;
-                     min-width:50%; }
-.table-of-contents ol { margin:0; margin-left:1em;
-                        list-style-type:decimal; }
-.table-of-contents ul { margin:0;
-                        list-style-type:none; }
-.table-of-contents-heading { font-weight:bold; padding:0; margin:0; }
+div.table-of-contents {
+    border: 1px solid #bbbbbb;
+    color: black;
+    background-color: #eeeeee;
+    font-size: 80%;
+    text-align: left;
+    margin: 0.5em 0 0.5em 1em;
+    padding: 0.5em 0.75em 0.5em 0.5em;
+    max-width: 50%;
+    display: inline-table;
+}
+div.table-of-contents ol {
+    margin: 0;
+    padding: 0 0 0 2em;
+}
+div.table-of-contents ul {
+    margin: 0;
+    list-style:none;
+}
+div.table-of-contents li {
+    margin:0;
+    padding: 0;
+}
+p.table-of-contents-heading {
+    font-weight:bold;
+    padding:0;
+    margin: 0 0 0.5em 0;
+    letter-spacing: 0.075em;
+}
+
+/* Navigation macro */
+table.navigation {
+    background: #fff;
+    margin: 0;
+}
+
 
 
 .footnotes ol {
--- a/wiki/htdocs/rightsidebar/css/screen.css	Fri Jan 02 23:51:28 2009 +0100
+++ b/wiki/htdocs/rightsidebar/css/screen.css	Sat Jan 03 01:59:18 2009 +0100
@@ -167,7 +167,6 @@
 
 #pagetrail {
     clear: right;
-    display: inline;
     margin: 5px 11px;
     padding: 0;
     font-size: 0.88em;