Mercurial > moin-2.0-moinboot
changeset 2101:d993f93428bc
Lookup view modified to support multiple names
| author | Ashutosh Singla <ashu1461@gmail.com> |
|---|---|
| date | Wed, 24 Apr 2013 19:30:18 +0530 |
| parents | 129929623809 |
| children | ca5e39389265 |
| files | MoinMoin/apps/frontend/views.py MoinMoin/templates/lookup.html |
| diffstat | 2 files changed, 26 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/MoinMoin/apps/frontend/views.py Wed Apr 24 19:28:47 2013 +0530 +++ b/MoinMoin/apps/frontend/views.py Wed Apr 24 19:30:18 2013 +0530 @@ -57,6 +57,7 @@ from MoinMoin.util import crypto from MoinMoin.util.interwiki import url_for_item from MoinMoin.search import SearchForm +from MoinMoin.search.analyzers import item_name_analyzer from MoinMoin.security.textcha import TextCha, TextChaizedForm from MoinMoin.signalling import item_displayed, item_modified from MoinMoin.storage.middleware.protecting import AccessDenied @@ -141,6 +142,10 @@ submit_label = L_('Lookup') +def analyze(analyzer, text): + return [token.text for token in analyzer(text, mode='index')] + + @frontend.route('/+lookup', methods=['GET', 'POST']) def lookup(): """ @@ -188,27 +193,37 @@ term = Term(key, value) terms.append(term) if terms: + LookupEntry = namedtuple('LookupEntry', 'name revid wikiname') + name = lookup_form[NAME].value + name_exact = lookup_form[NAME_EXACT].value or u'' terms.append(Term(WIKINAME, app.cfg.interwikiname)) q = And(terms) with flaskg.storage.indexer.ix[idx_name].searcher() as searcher: flaskg.clock.start('lookup') results = searcher.search(q, limit=100) flaskg.clock.stop('lookup') - num_results = results.scored_length() - if num_results == 1: - result = results[0] - rev = result[REVID] if history else CURRENT - url = url_for('.show_item', item_name=result[NAME], rev=rev) + lookup_results = [] + for result in results: + analyzer = item_name_analyzer() + lookup_results += [LookupEntry(n, result[REVID], result[WIKINAME]) + for n in result[NAME] + if not name or name.lower() in analyze(analyzer, n) + if n.startswith(name_exact)] + + if len(lookup_results) == 1: + result = lookup_results[0] + rev = result.revid if history else CURRENT + url = url_for('.show_item', item_name=result.name, rev=rev) return redirect(url) else: flaskg.clock.start('lookup render') html = render_template('lookup.html', title_name=title_name, lookup_form=lookup_form, - results=results, + results=lookup_results, ) flaskg.clock.stop('lookup render') - if not num_results: + if not lookup_results: status = 404 return Response(html, status) html = render_template('lookup.html',
--- a/MoinMoin/templates/lookup.html Wed Apr 24 19:28:47 2013 +0530 +++ b/MoinMoin/templates/lookup.html Wed Apr 24 19:30:18 2013 +0530 @@ -35,14 +35,14 @@ {% for result in results %} {% if result['wikiname'] == cfg.interwikiname %} <tr> - <td class="moin-wordbreak">{{ result.pos + 1 }} - <a href="{{ url_for_item(item_name=result['name'], wiki_name='Self', rev=result['revid']) }}"><b>{{ result['name'] }}</b></a> + <td class="moin-wordbreak">{{ loop.index }} + <a href="{{ url_for_item(item_name=result.name, wiki_name='Self', rev=result.revid) }}"><b>{{ result.name }}</b></a> </td> </tr> {% else %} <tr> - <td class="moin-wordbreak">{{ result.pos + 1 }} - <a class="moin-interwiki" href="{{ url_for_item(item_name=result['name'], wiki_name=result['wikiname'], rev=result['revid']) }}"><b>{{ "%s:%s" % (result['wikiname'], result['name']) }}</b></a> + <td class="moin-wordbreak">{{ loop.index }} + <a class="moin-interwiki" href="{{ url_for_item(item_name=result.name, wiki_name=result.wikiname, rev=result.revid) }}"><b>{{ "%s:%s" % (result.wikiname, result.name) }}</b></a> </td> </tr> {% endif %}
