c135b8096fb02baf06a0c5b1f0710f64b8debf34
[wolnelektury.git] / src / search / templatetags / search_tags.py
1 # -*- coding: utf-8 -*-
2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
4 #
5 # import feedparser
6 # import datetime
7
8 from django import template
9 # from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
10 # from django.db.models import Q
11 # from django.utils.translation import ugettext as _
12 from catalogue.models import Book
13 import re
14 # from catalogue.forms import SearchForm
15 # from catalogue.utils import split_tags
16
17
18 register = template.Library()
19
20
21 @register.inclusion_tag('catalogue/book_searched.html', takes_context=True)
22 def book_searched(context, result):
23     book = Book.objects.get(pk=result.book_id)
24
25     # snippets = []
26     # for hit in result.hits:
27     #     if hit['snippets']:
28     #         snippets.append(hit['snippets'])
29     #     elif hit['fragment']:
30     #         snippets.append(hit['fragment'].short_text)
31
32     # We don't need hits which lead to sections but do not have
33     # snippets.
34     hits = filter(lambda (idx, h):
35                   'fragment' in h or
36                   result.snippets[idx] is not None,
37                   enumerate(result.hits))
38     # print "[tmpl: from %d hits selected %d]" % (len(result.hits), len(hits))
39
40     for (idx, hit) in hits:
41         # currently we generate one snipper per hit though.
42         if len(result.snippets) <= idx:
43             break
44         if result.snippets[idx] is None:
45             continue
46         snip = result.snippets[idx]
47         # fix some formattting
48         snip = re.subn(r"(^[ \t\n]+|[ \t\n]+$)", u"",
49                        re.subn(r"[ \t\n]*\n[ \t\n]*", u"\n", snip)[0])[0]
50
51         snip = snip.replace("\n", "<br />").replace('---', '&mdash;')
52         hit['snippet'] = snip
53
54     return {
55         'request': context['request'],
56         'book': book,
57         'hits':  hits and zip(*hits)[1] or []
58     }