view MoinMoin/macro/ @ 5597:ced05deb11ae 1.9.2

cfg.history_paging: fix grammar/remove performance warning (we don't do that at other places either)
author Thomas Waldmann <tw AT waldmann-edv DOT de>
date Sun, 28 Feb 2010 23:49:03 +0100
parents 5db0151a2df3
line wrap: on
line source

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

    @copyright: 2001 Juergen Hermann <>
    @license: GNU GPL, see COPYING for details.

from MoinMoin import wikiutil

Dependencies = ["pages"]

def macro_WantedPages(macro):
    request = macro.request
    _ = request.getText

    # prevent recursion
    if request.mode_getpagelinks:
        return ''
    if request.isSpiderAgent: # reduce bot cpu usage
        return ''

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

    # Control bar - filter the list of pages
    # TODO: we should make this a widget and use on all page listing pages
    label = (_('Include system pages'), _('Exclude system pages'))[allpages]
    page =
    controlbar = macro.formatter.div(1, css_class="controlbar") + \
                 page.link_to(request, label, querystr={'allpages': '%s' % (allpages and '0' or '1')}) + \

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

    # build a dict of wanted pages
    wanted = {}
    deprecated_links = []
    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 do not exist in pages dict
        links = page.getPageLinks(request)
        is_deprecated = page.parse_processing_instructions(
                ).get('deprecated', False)

        for link in links:
            if not link in pages and
                if is_deprecated:
                if link in wanted:
                    wanted[link][name] = 1
                    wanted[link] = {name: 1}

    for link in deprecated_links:
        if len(wanted[link]) == 1:
            del wanted[link]

    # 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:
        # 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:
        wherelinks = [pages[pagename].link_to(request, querystr={'highlight': name}, rel='nofollow')
                      for pagename in where]
        result.append(": " + ', '.join(wherelinks))

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