1.1 --- a/macros/CategoryMenu.py Tue Feb 10 01:19:49 2009 +0100
1.2 +++ b/macros/CategoryMenu.py Sat Mar 07 19:43:52 2009 +0100
1.3 @@ -2,7 +2,7 @@
1.4 """
1.5 MoinMoin - CategoryMenu Macro
1.6
1.7 - @copyright: 2008 by Paul Boddie <paul@boddie.org.uk>
1.8 + @copyright: 2008, 2009 by Paul Boddie <paul@boddie.org.uk>
1.9 @copyright: 2000-2004 Juergen Hermann <jh@web.de>,
1.10 2005-2008 MoinMoin:ThomasWaldmann.
1.11 @license: GNU GPL (v2 or later), see COPYING.txt for details.
1.12 @@ -12,7 +12,7 @@
1.13 from MoinMoin import wikiutil, search, version
1.14 import re
1.15
1.16 -__version__ = "0.1"
1.17 +__version__ = "0.2"
1.18
1.19 Dependencies = ['pages']
1.20
1.21 @@ -90,6 +90,12 @@
1.22 pages.append(page)
1.23 return pages
1.24
1.25 +def getPrettyPageName(page):
1.26 +
1.27 + "Return a nicely formatted title/name for the given 'page'."
1.28 +
1.29 + return page.split_title(force=1).replace("_", " ").replace("/", u" » ")
1.30 +
1.31 def execute(macro, args):
1.32
1.33 """
1.34 @@ -104,7 +110,7 @@
1.35 # Interpret the arguments.
1.36
1.37 try:
1.38 - selected_category_names = wikiutil.parse_quoted_separated(args, name_value=False)
1.39 + selected_category_names = args and wikiutil.parse_quoted_separated(args, name_value=False) or []
1.40 except AttributeError:
1.41 selected_category_names = args.split(",")
1.42
1.43 @@ -125,14 +131,16 @@
1.44 for category in categories:
1.45 category_name, category_pagename = category
1.46
1.47 + # Work out whether the current page belongs to this category.
1.48 +
1.49 page_is_category = page.page_name == category_pagename
1.50 category_membership_regexp = re.compile(category_membership_regexp_str % category_pagename)
1.51 - page_in_category = category_membership_regexp.search(page.get_raw_body())
1.52 + page_is_in_category = category_membership_regexp.search(page.get_raw_body())
1.53
1.54 # Generate the submenu where appropriate.
1.55
1.56 if selected_category_names and category_name in selected_category_names or \
1.57 - not selected_category_names and (page_is_category or page_in_category):
1.58 + not selected_category_names and (page_is_category or page_is_in_category):
1.59
1.60 if page_is_category:
1.61 output.append(fmt.listitem(on=1, attr={"class" : "selected current"}))
1.62 @@ -148,7 +156,6 @@
1.63 # Get the pages and page names in the category.
1.64
1.65 pages_in_category = getPages(category_pagename, request)
1.66 - pagenames_in_category = [p.page_name for p in pages_in_category]
1.67
1.68 # Visit each page in the category.
1.69
1.70 @@ -157,11 +164,18 @@
1.71 for page_in_category in pages_in_category:
1.72 pagename = page_in_category.page_name
1.73
1.74 + # Get a real page, not a result page.
1.75 +
1.76 + real_page_in_category = Page(request, pagename)
1.77 +
1.78 + # Get a pretty version of the page name.
1.79 +
1.80 + pretty_pagename = getPrettyPageName(real_page_in_category)
1.81 +
1.82 if page.page_name == pagename:
1.83 output.append(fmt.listitem(on=1, attr={"class" : "selected"}))
1.84 else:
1.85 output.append(fmt.listitem(on=1))
1.86 - output.append(fmt.pagelink(on=1, pagename=pagename))
1.87
1.88 # Abbreviate long hierarchical names.
1.89
1.90 @@ -178,8 +192,11 @@
1.91 prefix = u"\u2014" * common
1.92 suffix = "/".join(parts[common:])
1.93
1.94 - output.append(fmt.text("%s %s" % (prefix, suffix)))
1.95 - output.append(fmt.pagelink(on=0, pagename=pagename))
1.96 + output.append(fmt.text(prefix))
1.97 +
1.98 + # Link to the page using the pretty name.
1.99 +
1.100 + output.append(real_page_in_category.link_to_raw(request, wikiutil.escape(pretty_pagename)))
1.101 output.append(fmt.listitem(on=0))
1.102
1.103 last_parts = parts