X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/c82303f184e8d139817ca963c81a63e4c442f9b9..96a96c16513a98378e2f75ead26a22c358795182:/apps/catalogue/forms.py diff --git a/apps/catalogue/forms.py b/apps/catalogue/forms.py index 72aa08533..75d9ab997 100644 --- a/apps/catalogue/forms.py +++ b/apps/catalogue/forms.py @@ -1,54 +1,88 @@ # -*- 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 django import forms -from slughifi import slughifi +from django.utils.translation import ugettext_lazy as _ -from catalogue.models import Tag -from catalogue.fields import JQueryAutoCompleteField +from catalogue.models import Book -class SearchForm(forms.Form): - q = JQueryAutoCompleteField('/katalog/tags/', {'minChars': 2, 'selectFirst': True, 'cacheLength': 50}) - tags = forms.CharField(widget=forms.HiddenInput, required=False) - - def __init__(self, *args, **kwargs): - tags = kwargs.pop('tags', []) - super(SearchForm, self).__init__(*args, **kwargs) - self.fields['q'].widget.attrs['title'] = u'tytuł utworu, kategoria lub motyw literacki' - self.fields['tags'].initial = '/'.join(tag.slug for tag in Tag.get_tag_list(tags)) - - -class UserSetsForm(forms.Form): - def __init__(self, book, user, *args, **kwargs): - super(UserSetsForm, self).__init__(*args, **kwargs) - self.fields['set_ids'] = forms.ChoiceField( - choices=[(tag.id, tag.name) for tag in Tag.objects.filter(category='set', user=user)], - ) - - -class ObjectSetsForm(forms.Form): - def __init__(self, obj, user, *args, **kwargs): - super(ObjectSetsForm, self).__init__(*args, **kwargs) - self.fields['set_ids'] = forms.MultipleChoiceField( - label=u'Półki', - required=False, - choices=[(tag.id, tag.name) for tag in Tag.objects.filter(category='set', user=user)], - initial=[tag.id for tag in obj.tags.filter(category='set', user=user)], - widget=forms.CheckboxSelectMultiple - ) - +class BookImportForm(forms.Form): + book_xml_file = forms.FileField(required=False) + book_xml = forms.CharField(required=False) + + def clean(self): + from django.core.files.base import ContentFile + + if not self.cleaned_data['book_xml_file']: + if self.cleaned_data['book_xml']: + self.cleaned_data['book_xml_file'] = \ + ContentFile(self.cleaned_data['book_xml'].encode('utf-8')) + else: + raise forms.ValidationError(_("Please supply an XML.")) + return super(BookImportForm, self).clean() + + def save(self, commit=True, **kwargs): + return Book.from_xml_file(self.cleaned_data['book_xml_file'], overwrite=True, **kwargs) + + +FORMATS = [(f, f.upper()) for f in Book.ebook_formats] + + +class DownloadFormatsForm(forms.Form): + formats = forms.MultipleChoiceField(required=False, choices=FORMATS, + widget=forms.CheckboxSelectMultiple) -class NewSetForm(forms.Form): - name = forms.CharField(max_length=50, required=True) - def __init__(self, *args, **kwargs): - super(NewSetForm, self).__init__(*args, **kwargs) - self.fields['name'].widget.attrs['title'] = u'nazwa półki' - - def save(self, user, commit=True): - name = self.cleaned_data['name'] - new_set = Tag(name=name, slug=slughifi(name), sort_key=slughifi(name), - category='set', user=user) + super(DownloadFormatsForm, self).__init__(*args, **kwargs) + + +PDF_PAGE_SIZES = ( + ('a4paper', _('A4')), + ('a5paper', _('A5')), +) + + +PDF_LEADINGS = ( + ('', _('Normal leading')), + ('onehalfleading', _('One and a half leading')), + ('doubleleading', _('Double leading')), + ) + +PDF_FONT_SIZES = ( + ('11pt', _('Default')), + ('13pt', _('Big')) + ) + + +class CustomPDFForm(forms.Form): + nofootnotes = forms.BooleanField(required=False, label=_("Don't show footnotes")) + nothemes = forms.BooleanField(required=False, label=_("Don't disply themes")) + nowlfont = forms.BooleanField(required=False, label=_("Don't use our custom font")) + ## pagesize = forms.ChoiceField(PDF_PAGE_SIZES, required=True, label=_("Paper size")) + leading = forms.ChoiceField(PDF_LEADINGS, required=False, label=_("Leading")) + fontsize = forms.ChoiceField(PDF_FONT_SIZES, required=True, label=_("Font size")) + + @property + def customizations(self): + c = [] + if self.cleaned_data['nofootnotes']: + c.append('nofootnotes') + + if self.cleaned_data['nothemes']: + c.append('nothemes') + + if self.cleaned_data['nowlfont']: + c.append('nowlfont') - new_set.save() - return new_set + ## c.append(self.cleaned_data['pagesize']) + c.append(self.cleaned_data['fontsize']) + + if self.cleaned_data['leading']: + c.append(self.cleaned_data['leading']) + + c.sort() + + return c