-# -*- coding: utf-8 -*-
# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
#
from random import randint, random
-from urlparse import urlparse
+from urllib.parse import urlparse
from django.contrib.contenttypes.models import ContentType
from django.conf import settings
from django import template
from django.template import Node, Variable, Template, Context
from django.core.urlresolvers import reverse
-from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.utils.cache import add_never_cache_headers
+from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from ssify import ssi_variable
from catalogue.helpers import get_audiobook_tags
from catalogue.models import Book, BookMedia, Fragment, Tag, Source
from catalogue.constants import LICENSES
+from club.models import Membership
from picture.models import Picture
register = template.Library()
-class RegistrationForm(UserCreationForm):
- def as_ul(self):
- """Returns this form rendered as HTML <li>s -- excluding the <ul></ul>."""
- return self._html_output(
- u'<li>%(errors)s%(label)s %(field)s<span class="help-text">%(help_text)s</span></li>', u'<li>%s</li>',
- '</li>', u' %s', False)
-
-
-class LoginForm(AuthenticationForm):
- def as_ul(self):
- """Returns this form rendered as HTML <li>s -- excluding the <ul></ul>."""
- return self._html_output(
- u'<li>%(errors)s%(label)s %(field)s<span class="help-text">%(help_text)s</span></li>', u'<li>%s</li>',
- '</li>', u' %s', False)
-
-
def iterable(obj):
try:
iter(obj)
@register.simple_tag
def book_title(book, html_links=False):
- return book.pretty_title(html_links)
+ return mark_safe(book.pretty_title(html_links))
@register.simple_tag
# Specjalny przypadek "Twórczość w pozytywizmie", wtedy gdy tylko epoka
# jest wybrana przez użytkownika
if 'epoch' in self and len(self) == 1:
- text = u'Twórczość w %s' % flection.get_case(unicode(self['epoch']), u'miejscownik')
+ text = u'Twórczość w %s' % flection.get_case(str(self['epoch']), u'miejscownik')
return capfirst(text)
# Specjalny przypadek "Dramat w twórczości Sofoklesa", wtedy gdy podane
# są tylko rodzaj literacki i autor
if 'kind' in self and 'author' in self and len(self) == 2:
text = u'%s w twórczości %s' % (
- unicode(self['kind']), flection.get_case(unicode(self['author']), u'dopełniacz'))
+ str(self['kind']), flection.get_case(str(self['author']), u'dopełniacz'))
return capfirst(text)
# Przypadki ogólniejsze
if 'theme' in self:
- title += u'Motyw %s' % unicode(self['theme'])
+ title += u'Motyw %s' % str(self['theme'])
if 'genre' in self:
if 'theme' in self:
- title += u' w %s' % flection.get_case(unicode(self['genre']), u'miejscownik')
+ title += u' w %s' % flection.get_case(str(self['genre']), u'miejscownik')
else:
- title += unicode(self['genre'])
+ title += str(self['genre'])
if 'kind' in self or 'author' in self or 'epoch' in self:
if 'genre' in self or 'theme' in self:
if 'kind' in self:
- title += u' w %s ' % flection.get_case(unicode(self['kind']), u'miejscownik')
+ title += u' w %s ' % flection.get_case(str(self['kind']), u'miejscownik')
else:
title += u' w twórczości '
else:
- title += u'%s ' % unicode(self.get('kind', u'twórczość'))
+ title += u'%s ' % str(self.get('kind', u'twórczość'))
if 'author' in self:
- title += flection.get_case(unicode(self['author']), u'dopełniacz')
+ title += flection.get_case(str(self['author']), u'dopełniacz')
elif 'epoch' in self:
- title += flection.get_case(unicode(self['epoch']), u'dopełniacz')
+ title += flection.get_case(str(self['epoch']), u'dopełniacz')
return capfirst(title)
) for book in book_list)
if text:
- return "<ol>%s</ol>" % text
+ return mark_safe("<ol>%s</ol>" % text)
else:
return ''
) for book in book_list)
if text:
- return "<ol>%s</ol>" % text
+ return mark_safe("<ol>%s</ol>" % text)
else:
return ''
@register.simple_tag
def book_tree_texml(book_list, books_by_parent, depth=1):
- return "".join("""
+ return mark_safe("".join("""
<cmd name='hspace'><parm>%(depth)dem</parm></cmd>%(title)s
<spec cat='align' /><cmd name="note"><parm>%(audiences)s</parm></cmd>
<spec cat='align' /><cmd name="note"><parm>%(audiobook)s</parm></cmd>
"audiences": ", ".join(book.audiences_pl()),
"audiobook": "audiobook" if book.has_media('mp3') else "",
"children": book_tree_texml(books_by_parent.get(book.id, ()), books_by_parent, depth + 1)
- } for book in book_list)
+ } for book in book_list))
@register.simple_tag
except ValueError:
return s
- return "".join("""%(author)s%(d)s%(preindent)s%(title)s%(d)s%(postindent)s%(audiences)s%(d)s%(audiobook)s
+ return mark_safe("".join("""%(author)s%(d)s%(preindent)s%(title)s%(d)s%(postindent)s%(audiences)s%(d)s%(audiobook)s
%(children)s""" % {
"d": delimeter,
"preindent": delimeter * (depth - 1),
"audiences": ", ".join(book.audiences_pl()),
"audiobook": "audiobook" if book.has_media('mp3') else "",
"children": book_tree_csv(author, books_by_parent.get(book.id, ()), books_by_parent, depth + 1)
- } for book in book_list)
+ } for book in book_list))
@register.simple_tag
for person in sorted(set(editors)))
-@register.simple_tag
-def user_creation_form():
- return RegistrationForm(prefix='registration').as_ul()
-
-
-@register.simple_tag
-def authentication_form():
- return LoginForm(prefix='login').as_ul()
-
-
@register.tag
def catalogue_url(parser, token):
bits = token.split_contents()
last_initial = initial
names.append((obj.author_unicode() if by_author else initial, []))
names[-1][1].append(obj)
+ if names[0] == ('', []):
+ del names[0]
return {
'paged': paged,
'names': names,
@register.simple_tag
-def download_audio(book, daisy=True):
+def download_audio(book, daisy=True, mp3=True):
links = []
- if book.has_media('mp3'):
+ if mp3 and book.has_media('mp3'):
links.append("<a href='%s'>%s</a>" % (
reverse('download_zip_mp3', args=[book.slug]), BookMedia.formats['mp3'].name))
if book.has_media('ogg'):
if daisy and book.has_media('daisy'):
for dsy in book.get_media('daisy'):
links.append("<a href='%s'>%s</a>" % (dsy.file.url, BookMedia.formats['daisy'].name))
- return "".join(links)
+ return mark_safe("".join(links))
@register.inclusion_tag("catalogue/snippets/custom_pdf_link_li.html")
# docelowo może być warto zainstalować BeautifulSoup do takich rzeczy
import re
return re.sub(r"<.?%s\b[^>]*>" % tag_name, "", html)
+
+
+@register.filter
+def status(book, user):
+ if not book.preview:
+ return 'open'
+ elif Membership.is_active_for(user):
+ return 'preview'
+ else:
+ return 'closed'