6
6
with the same word as the current pagename. If only one matching
7
7
page is found, that page is displayed directly.
9
@copyright: (c) 2001 by Richard Jones <richard@bizarsoftware.com.au>
10
@copyright: (c) 2001 by J�rgen Hermann <jh@web.de>
9
@copyright: 2001 Richard Jones <richard@bizarsoftware.com.au>,
10
2001 Juergen Hermann <jh@web.de>
11
11
@license: GNU GPL, see COPYING for details.
16
from MoinMoin import config, wikiutil
16
17
from MoinMoin.support import difflib
17
from MoinMoin import config, wikiutil
18
18
from MoinMoin.Page import Page
26
26
if isinstance(matches, (str, unicode)):
27
Page(request, pagename).send_page(request, msg=matches)
27
request.theme.add_msg(matches, "info")
28
Page(request, pagename).send_page()
32
Page(request, pagename).send_page(request,
33
msg = _('No pages like "%s"!') % (pagename,))
33
request.theme.add_msg(_('No pages like "%s"!') % (pagename, ), "error")
34
Page(request, pagename).send_page()
36
37
# One match - display it
37
38
if len(matches) == 1:
38
Page(request, matches.keys()[0]).send_page(request,
39
msg = _('Exactly one page like "%s" found, redirecting to page.') % (
39
request.theme.add_msg(_('Exactly one page like "%s" found, redirecting to page.') % (pagename, ), "info")
40
Page(request, matches.keys()[0]).send_page()
43
43
# more than one match, list 'em
44
request.http_headers()
44
request.emit_http_headers()
46
46
# This action generate data using the user language
47
47
request.setContentLanguage(request.lang)
49
wikiutil.send_title(request, _('Pages like "%s"') % (pagename),
49
request.theme.send_title(_('Pages like "%s"') % (pagename), pagename=pagename)
52
51
# Start content - IMPORTANT - without content div, there is no
53
52
# direction support!
54
53
request.write(request.formatter.startContent("content"))
58
57
# End content and send footer
59
58
request.write(request.formatter.endContent())
60
wikiutil.send_footer(request, pagename)
59
request.theme.send_footer(pagename)
60
request.theme.send_closing_html()
63
def findMatches(pagename, request, s_re=None, e_re=None,):
62
def findMatches(pagename, request, s_re=None, e_re=None):
64
63
""" Find like pages
66
65
@param pagename: name to match
67
66
@param request: current reqeust
68
67
@param s_re: start re for wiki matching
100
99
# Stop after 10 matches
104
103
# Filter deleted pages or pages the user can't read from
105
104
# matches. Order is important!
106
for name in matches.keys():
105
for name in matches.keys(): # we need .keys() because we modify the dict
107
106
page = Page(request, name)
108
107
if not (page.exists() and request.user.may.read(name)):
111
110
# Finally, merge both dicts
112
111
matches.update(close_matches)
132
131
@return: start, end, matches dict
134
133
if start_re is None:
135
start_re=re.compile('([%s][%s]+)' % (config.chars_upper,
134
start_re = re.compile('([%s][%s]+)' % (config.chars_upper,
137
136
if end_re is None:
138
end_re=re.compile('([%s][%s]+)$' % (config.chars_upper,
137
end_re = re.compile('([%s][%s]+)$' % (config.chars_upper,
141
140
# If we don't get results with wiki words matching, fall back to
142
141
# simple first word and last word, using spaces.
205
def showMatches(pagename, request, start, end, matches, show_count = True):
204
def showMatches(pagename, request, start, end, matches, show_count=True):
206
205
keys = matches.keys()
208
207
_showMatchGroup(request, matches, keys, 8, pagename, show_count)
209
208
_showMatchGroup(request, matches, keys, 4, "%s/..." % pagename, show_count)
210
209
_showMatchGroup(request, matches, keys, 3, "%s...%s" % (start, end), show_count)
211
_showMatchGroup(request, matches, keys, 1, "%s..." % (start,), show_count)
212
_showMatchGroup(request, matches, keys, 2, "...%s" % (end,), show_count)
215
def _showMatchGroup(request, matches, keys, match, title, show_count = True):
210
_showMatchGroup(request, matches, keys, 1, "%s..." % (start, ), show_count)
211
_showMatchGroup(request, matches, keys, 2, "...%s" % (end, ), show_count)
214
def _showMatchGroup(request, matches, keys, match, title, show_count=True):
216
215
_ = request.getText
217
216
matchcount = matches.values().count(match)
221
220
# Render title line
222
221
request.write(request.formatter.paragraph(1))
223
222
request.write(request.formatter.strong(1))
224
request.write(_('%(matchcount)d %(matches)s for "%(title)s"') % {
225
'matchcount': matchcount,
226
'matches': ' ' + (_('match'), _('matches'))[matchcount != 1],
227
'title': wikiutil.escape(title)})
223
request.write(request.formatter.text(
224
_('%(matchcount)d %(matches)s for "%(title)s"') % {
225
'matchcount': matchcount,
226
'matches': ' ' + (_('match'), _('matches'))[matchcount != 1],
228
228
request.write(request.formatter.strong(0))
229
229
request.write(request.formatter.paragraph(0))
234
234
if matches[key] == match:
235
235
request.write(request.formatter.listitem(1))
236
request.write(request.formatter.pagelink(1, key))
236
request.write(request.formatter.pagelink(1, key, generated=True))
237
237
request.write(request.formatter.text(key))
238
request.write(request.formatter.pagelink(0, key))
238
request.write(request.formatter.pagelink(0, key, generated=True))
239
239
request.write(request.formatter.listitem(0))
240
240
request.write(request.formatter.bullet_list(0))