05c504ce9a62dcd11059ad130fed69f8cfc7496f
[wolnelektury.git] / src / search / templatetags / search_tags.py
1 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
2 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
3 #
4 import re
5 from django import template
6
7 register = template.Library()
8
9
10 @register.inclusion_tag('catalogue/book_searched.html', takes_context=True)
11 def book_searched(context, result):
12     # We don't need hits which lead to sections but do not have
13     # snippets.
14     hits = [(idx, h)
15             for (idx, h) in enumerate(result.hits)
16             if result.snippets[idx] is not None or ('fragment' in h and h['themes_hit'])]
17
18     for (idx, hit) in hits:
19         # currently we generate one snipper per hit though.
20         if len(result.snippets) <= idx:
21             break
22         if result.snippets[idx] is None:
23             continue
24         snip = result.snippets[idx]
25         # fix some formattting
26         snip = re.sub(r"[ \t\n]*\n[ \t\n]*", u"\n", snip)
27         snip = re.sub(r"(^[ \t\n]+|[ \t\n]+$)", u"", snip)
28
29         snip = snip.replace("\n", "<br />").replace('---', '&mdash;')
30         hit['snippet'] = snip
31
32     return {
33         'request': context['request'],
34         'book': result.book,
35         'hits':  list(zip(*hits))[1] if hits else []
36     }