- vals['hits'] = filter(lambda h: 'fragment' in h or
- h['snippets'], result.hits)
-
- for hit in vals['hits']:
- hit['snippets'] = map(lambda s: s.replace("\n", "<br />").replace('---', '—'), hit['snippets'])
-
- return vals
+ hits = filter(lambda (idx, h):
+ result.snippets[idx] is not None
+ or 'fragment' in h, enumerate(result.hits))
+ # print "[tmpl: from %d hits selected %d]" % (len(result.hits), len(hits))
+
+ for (idx, hit) in hits:
+ # currently we generate one snipper per hit though.
+ if result.snippets[idx] is None:
+ continue
+ snip = result.snippets[idx]
+ # fix some formattting
+ snip = re.subn(r"(^[ \t\n]+|[ \t\n]+$)", u"",
+ re.subn(r"[ \t\n]*\n[ \t\n]*", u"\n", snip)[0])[0]
+
+ snip = snip.replace("\n", "<br />").replace('---', '—')
+ hit['snippet'] = snip
+
+ return {
+ 'related': book.related_info(),
+ 'book': book,
+ 'main_link': book.get_absolute_url(),
+ 'request': context.get('request'),
+ 'hits': hits and zip(*hits)[1] or [],
+ 'main_link': book.get_absolute_url(),
+ }