--- moin-1.8.2/MoinMoin/theme/__init__.py	2009-01-06 19:30:29.000000000 -0500
+++ moin-1.8.2.modif/MoinMoin/theme/__init__.py	2009-03-05 18:09:52.358208036 -0500
@@ -407,6 +407,60 @@
         """ Return maximum length for shortened page names """
         return 25
 
+    def navibarDefaultLinks(self):
+        """ Returns list of default links to be displayed in the navibar
+
+        Result also contains the class to be used.
+        This method uses self.request.cfg.navi_bar and 'wikilink' by default,
+        but could be overridden in the theme.
+        
+        @rtype: tuple
+        @return: CSS class name to be used, list of links
+        """
+        if self.request.cfg.navi_bar:
+            return ('wikilink', self.request.cfg.navi_bar)
+        return ('wikilink', [])
+        
+    def navibarUserLinks(self):
+        """ Returns list of user's quicklinks to be displayed in the navibar
+
+        Result also contains the class to be used.
+        This method uses self.request.user.getQuickLinks() and 'userlink' by default,
+        but could be overridden in the theme.
+        
+        @rtype: tuple
+        @return: CSS class name to be used, list of links
+        """
+        return ('userlink', self.request.user.getQuickLinks())
+        
+    def navibarSisterLinks(self):
+        """ Returns list of links to sistersites to be displayed in the navibar
+
+        Result also contains the class to be used.
+        This method uses self.request.cfg.sistersites and 'sisterwiki' by default,
+        but could be overridden in the theme.
+        
+        @rtype: tuple
+        @return: CSS class name to be used, list of tuples: (sistername, sisterurl)
+        """
+        if self.request.cfg.sistersites:
+            return ('sisterwiki', self.request.cfg.sistersites)
+        return ('sisterwiki', [])
+        
+    def navibarExtraLinks(self):
+        """ Returns list of additional links to be displayed in the navibar
+
+        Result also contains the class to be used.
+        This method returns empty list and 'extralink' by default,
+        but could be overridden in the theme. This could be used to generate automatic
+        list of additional links to be put in navibar. For example for generating some
+        additional quicklinks for some users (or, for example, only for logged users) 
+        
+        @rtype: tuple
+        @return: CSS class name to be used, list of links
+        """
+        return ('extralink', [])
+
     def navibar(self, d):
         """ Assemble the navibar
 
@@ -420,27 +474,46 @@
         item = u'<li class="%s">%s</li>'
         current = d['page_name']
 
-        # Process config navi_bar
-        if request.cfg.navi_bar:
-            for text in request.cfg.navi_bar:
-                pagename, link = self.splitNavilink(text)
+        # Add default navibar links.
+
+        add_cls, add_links = self.navibarDefaultLinks()
+        
+        for text in add_links:
+            pagename, link = self.splitNavilink(text)
+            if pagename == current:
+                cls = add_cls + ' current'
+            else:
+                cls = add_cls
+            items.append(item % (cls, link))
+            found[pagename] = 1
+
+        # Add some additional links, eliminating duplicates.
+
+        add_cls, add_links = self.navibarExtraLinks()
+        
+        for text in add_links:
+            # Split text without localization, user knows what he wants
+            pagename, link = self.splitNavilink(text)
+            if not pagename in found:
                 if pagename == current:
-                    cls = 'wikilink current'
+                    cls = add_cls + ' current'
                 else:
-                    cls = 'wikilink'
+                    cls = add_cls
                 items.append(item % (cls, link))
                 found[pagename] = 1
 
         # Add user links to wiki links, eliminating duplicates.
-        userlinks = request.user.getQuickLinks()
-        for text in userlinks:
+        
+        add_cls, add_links = self.navibarUserLinks()
+
+        for text in add_links:
             # Split text without localization, user knows what he wants
             pagename, link = self.splitNavilink(text, localize=0)
             if not pagename in found:
                 if pagename == current:
-                    cls = 'userlink current'
+                    cls = add_cls + ' current'
                 else:
-                    cls = 'userlink'
+                    cls = add_cls
                 items.append(item % (cls, link))
                 found[pagename] = 1
 
@@ -451,11 +524,13 @@
             link = d['page'].link_to(request, title)
             cls = 'current'
             items.append(item % (cls, link))
-
+        
+        add_cls, sister_links = self.navibarSisterLinks()
+        
         # Add sister pages.
-        for sistername, sisterurl in request.cfg.sistersites:
+        for sistername, sisterurl in sister_links:
             if sistername == request.cfg.interwikiname: # it is THIS wiki
-                cls = 'sisterwiki current'
+                cls = add_cls + ' current'
                 items.append(item % (cls, sistername))
             else:
                 # TODO optimize performance
@@ -464,7 +539,7 @@
                     data = cache.content()
                     sisterpages = data['sisterpages']
                     if current in sisterpages:
-                        cls = 'sisterwiki'
+                        cls = add_cls
                         url = sisterpages[current]
                         link = request.formatter.url(1, url) + \
                                request.formatter.text(sistername) +\
