view MoinMoin/macro/ @ 950:4eb66637ccd0

whitespace-only cleanup, small style changes
author Thomas Waldmann <tw AT waldmann-edv DOT de>
date Mon, 17 Jul 2006 04:27:24 +0200
parents 0152984f76ee
children b65614f8a393
line wrap: on
line source

# -*- coding: iso-8859-1 -*-
    MoinMoin - WantedPages Macro

    @copyright: 2001 by Jürgen Hermann <>
    @license: GNU GPL, see COPYING for details.

from MoinMoin import config, wikiutil

Dependencies = ["pages"]

def execute(macro, args):
    request = macro.request
    _ = request.getText

    # prevent recursion
    if request.mode_getpagelinks:
        return ''

    # Get allpages switch from the form
    allpages = int(request.form.get('allpages', [0])[0]) != 0

    # Control bar - filter the list of pages
    # TODO: we should make this a widget and use on all page listing pages
    controlbar = '''<div class="controlbar">
<a href="%(qpagename)s?allpages=%(allpages)d">%(label)s</a>
</div>''' % {
        'qpagename': wikiutil.quoteWikinameURL(,
        'allpages': not allpages,
        'label': (_('Include system pages'), _('Exclude system pages'))[allpages],

    # Get page dict readable by current user
    pages = request.rootpage.getPageDict()

    # build a dict of wanted pages
    wanted = {}
    for name, page in pages.items():
        # Skip system pages, because missing translations are not wanted pages,
        # unless you are a translator and clicked "Include system pages"
        if not allpages and wikiutil.isSystemPage(request, name):

        # Add links to pages which does not exists in pages dict
        links = page.getPageLinks(request)
        for link in links:
            if not link in pages:
                if link in wanted:
                    wanted[link][name] = 1
                    wanted[link] = {name: 1}

    # Check for the extreme case when there are no wanted pages
    if not wanted:
        return u"%s<p>%s</p>" % (controlbar, _("No wanted pages in this wiki."))

    # Return a list of page links
    wantednames = wanted.keys()
    result = []
    for name in wantednames:
        if not name: continue
        # Add link to the wanted page
        result.append(macro.formatter.pagelink(1, name, generated=1))
        result.append(macro.formatter.pagelink(0, name))

        # Add links to pages that want this page, highliting
        # the link in those pages.
        where = wanted[name].keys()
        if in where:
        querystr = 'highlight=%s' % wikiutil.url_quote_plus(name)
        wherelinks = [pages[pagename].link_to(request, querystr=querystr, rel='nofollow')
                      for pagename in where]
        result.append(": " + ', '.join(wherelinks))

    return u'%s%s' % (controlbar, u''.join(result))