Merge branch 'picture' into pretty
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Fri, 16 Dec 2011 16:13:21 +0000 (17:13 +0100)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Fri, 16 Dec 2011 16:13:21 +0000 (17:13 +0100)
Conflicts:
apps/catalogue/management/commands/importbooks.py

36 files changed:
apps/api/handlers.py
apps/catalogue/forms.py
apps/catalogue/management/commands/importbooks.py
apps/catalogue/management/commands/pack.py
apps/catalogue/models.py
apps/catalogue/urls.py
apps/catalogue/views.py
apps/infopages/admin.py
apps/infopages/migrations/0002_auto__del_field_infopage_page_title__del_field_infopage_page_title_en_.py [new file with mode: 0644]
apps/infopages/models.py
apps/infopages/templates/infopages/infopage.html [new file with mode: 0755]
apps/infopages/templates/infopages/on_main.html [new file with mode: 0755]
apps/infopages/templatetags/infopages_tags.py [new file with mode: 0755]
apps/infopages/urls.py [new file with mode: 0755]
apps/infopages/views.py
lib/librarian
wolnelektury/settings.py
wolnelektury/static/css/base.css [new file with mode: 0755]
wolnelektury/static/css/book_box.css [new file with mode: 0755]
wolnelektury/static/css/header.css [new file with mode: 0755]
wolnelektury/static/css/main_page.css [new file with mode: 0755]
wolnelektury/static/fonts/WL.eot [new file with mode: 0644]
wolnelektury/static/fonts/WL.ttf [new file with mode: 0644]
wolnelektury/static/img/bg-header.png [new file with mode: 0644]
wolnelektury/static/img/lang-arrow.png [new file with mode: 0644]
wolnelektury/templates/base.html
wolnelektury/templates/catalogue/book_detail.html
wolnelektury/templates/catalogue/book_mini_box.html [new file with mode: 0755]
wolnelektury/templates/catalogue/catalogue.html [new file with mode: 0644]
wolnelektury/templates/catalogue/main_page.html [deleted file]
wolnelektury/templates/info/base.html [deleted file]
wolnelektury/templates/info/join_us.html
wolnelektury/templates/main_page.html [new file with mode: 0755]
wolnelektury/translation.py
wolnelektury/urls.py
wolnelektury/views.py [new file with mode: 0755]

index f83a492..e10a4b5 100644 (file)
@@ -93,7 +93,7 @@ class BookDetailHandler(BaseHandler):
 
     """
     allowed_methods = ['GET']
-    fields = ['title', 'parent'] + Book.file_types + [
+    fields = ['title', 'parent'] + Book.formats + [
         'media', 'url'] + category_singular.keys()
 
     @piwik_track
@@ -205,7 +205,7 @@ def _file_getter(format):
         else:
             return ''
     return get_file
-for format in Book.file_types:
+for format in Book.formats:
     setattr(BooksHandler, format, _file_getter(format))
 
 
@@ -364,8 +364,7 @@ class CatalogueHandler(BaseHandler):
     def book_dict(book, fields=None):
         all_fields = ['url', 'title', 'description',
                       'gazeta_link', 'wiki_link',
-                      ] + Book.file_types + [
-                      'mp3', 'ogg', 'daisy',
+                      ] + Book.formats + BookMedia.formats + [
                       'parent', 'parent_number',
                       'tags',
                       'license', 'license_description', 'source_name',
@@ -382,7 +381,7 @@ class CatalogueHandler(BaseHandler):
         obj = {}
         for field in fields:
 
-            if field in Book.file_types:
+            if field in Book.formats:
                 f = getattr(book, field+'_file')
                 if f:
                     obj[field] = {
@@ -390,7 +389,7 @@ class CatalogueHandler(BaseHandler):
                         'size': f.size,
                     }
 
-            elif field in ('mp3', 'ogg', 'daisy'):
+            elif field in BookMedia.formats:
                 media = []
                 for m in book.media.filter(type=field):
                     media.append({
index 094aaaf..852513a 100644 (file)
@@ -78,20 +78,12 @@ class NewSetForm(forms.Form):
         return new_set
 
 
-FORMATS = (
-    ('mp3', 'MP3'),
-    ('ogg', 'OGG'),
-    ('pdf', 'PDF'),
-    ('odt', 'ODT'),
-    ('txt', 'TXT'),
-    ('epub', 'EPUB'),
-    ('daisy', 'DAISY'),
-    ('mobi', 'MOBI'),
-)
+FORMATS = [(f, f.upper()) for f in Book.ebook_formats]
 
 
 class DownloadFormatsForm(forms.Form):
-    formats = forms.MultipleChoiceField(required=False, choices=FORMATS, widget=forms.CheckboxSelectMultiple)
+    formats = forms.MultipleChoiceField(required=False, choices=FORMATS,
+            widget=forms.CheckboxSelectMultiple)
 
     def __init__(self, *args, **kwargs):
          super(DownloadFormatsForm, self).__init__(*args, **kwargs)
index 699f2c9..d097ddd 100644 (file)
@@ -46,23 +46,15 @@ class Command(BaseCommand):
                                   build_txt=options.get('build_txt'),
                                   build_pdf=options.get('build_pdf'),
                                   build_mobi=options.get('build_mobi'))
+        fileid = book.fileid()
+        for ebook_format in Book.ebook_formats:
+            if os.path.isfile(file_base + '.' + ebook_format):
+                getattr(book, '%s_file' % ebook_format).save(
+                    '%s.%s' % (fileid, ebook_format), 
+                    File(file(file_base + '.' + ebook_format)))
+                if verbose:
+                    print "Importing %s.%s" % (file_base, ebook_format)
 
-        if os.path.isfile(file_base + '.pdf'):
-            book.pdf_file.save('%s.pdf' % book.slug, File(file(file_base + '.pdf')))
-            if verbose:
-                print "Importing %s.pdf" % file_base
-        if os.path.isfile(file_base + '.mobi'):
-            book.mobi_file.save('%s.mobi' % book.slug, File(file(file_base + '.mobi')))
-            if verbose:
-                print "Importing %s.mobi" % file_base
-        if os.path.isfile(file_base + '.epub'):
-            book.epub_file.save('%s.epub' % book.slug, File(file(file_base + '.epub')))
-            if verbose:
-                print "Importing %s.epub" % file_base
-        if os.path.isfile(file_base + '.txt'):
-            book.txt_file.save('%s.txt' % book.slug, File(file(file_base + '.txt')))
-            if verbose:
-                print "Importing %s.txt" % file_base
         book.save()
 
     def import_picture(self, file_path, options):
index c75f092..280c0f6 100755 (executable)
@@ -23,7 +23,7 @@ class Command(BaseCommand):
         make_option('-e', '--exclude', dest='exclude', metavar='SLUG,...',
             help='Exclude specific books by slug')
     )
-    help = 'Prepare data for Lesmianator.'
+    help = 'Prepare ZIP package with files of given type.'
     args = '[%s] output_path.zip' % '|'.join(ftypes)
 
     def handle(self, ftype, path, **options):
@@ -33,7 +33,7 @@ class Command(BaseCommand):
         include = options.get('include')
         exclude = options.get('exclude')
 
-        if ftype in Book.file_types:
+        if ftype in Book.formats:
             field = "%s_file" % ftype
         else:
             print self.style.ERROR('Unknown file type.')
index 22cd0ea..2b33964 100644 (file)
@@ -2,6 +2,7 @@
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
+from collections import namedtuple
 from datetime import datetime
 
 from django.db import models
@@ -40,13 +41,6 @@ TAG_CATEGORIES = (
     ('book', _('book')),
 )
 
-MEDIA_FORMATS = (
-    ('odt', _('ODT file')),
-    ('mp3', _('MP3 file')),
-    ('ogg', _('OGG file')),
-    ('daisy', _('DAISY file')), 
-)
-
 # not quite, but Django wants you to set a timeout
 CACHE_FOREVER = 2419200  # 28 days
 
@@ -205,10 +199,8 @@ def get_dynamic_path(media, filename, ext=None, maxlen=100):
 
     # how to put related book's slug here?
     if not ext:
-        if media.type == 'daisy':
-            ext = 'daisy.zip'
-        else:
-            ext = media.type
+        # BookMedia case
+        ext = media.formats[media.type].ext
     if media is None or not media.name:
         name = slughifi(filename.split(".")[0])
     else:
@@ -245,7 +237,16 @@ def get_existing_customized_pdf(book):
 
 
 class BookMedia(models.Model):
-    type        = models.CharField(_('type'), choices=MEDIA_FORMATS, max_length="100")
+    FileFormat = namedtuple("FileFormat", "name ext")
+    formats = SortedDict([
+        ('mp3', FileFormat(name='MP3', ext='mp3')),
+        ('ogg', FileFormat(name='Ogg Vorbis', ext='ogg')),
+        ('daisy', FileFormat(name='DAISY', ext='daisy.zip')),
+    ])
+    format_choices = [(k, _('%s file') % t.name)
+            for k, t in formats.items()]
+
+    type        = models.CharField(_('type'), choices=format_choices, max_length="100")
     name        = models.CharField(_('name'), max_length="100")
     file        = OverwritingFileField(_('file'), upload_to=book_upload_path())
     uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False)
@@ -358,8 +359,9 @@ class Book(models.Model):
     wiki_link     = models.CharField(blank=True, max_length=240)
     # files generated during publication
 
-    file_types = ['epub', 'html', 'mobi', 'pdf', 'txt', 'xml']
-    
+    ebook_formats = ['pdf', 'epub', 'mobi', 'txt']
+    formats = ebook_formats + ['html', 'xml']
+
     parent        = models.ForeignKey('self', blank=True, null=True, related_name='children')
     objects  = models.Manager()
     tagged   = managers.ModelTaggedItemManager(Tag)
@@ -456,14 +458,14 @@ class Book(models.Model):
         return book_tag
 
     def has_media(self, type):
-        if type in Book.file_types:
+        if type in Book.formats:
             return bool(getattr(self, "%s_file" % type))
         else:
             return self.media.filter(type=type).exists()
 
     def get_media(self, type):
         if self.has_media(type):
-            if type in Book.file_types:
+            if type in Book.formats:
                 return getattr(self, "%s_file" % type)
             else:                                             
                 return self.media.filter(type=type)
@@ -507,14 +509,12 @@ class Book(models.Model):
             # files generated during publication
             if self.has_media("html"):
                 formats.append(u'<a href="%s">%s</a>' % (reverse('book_text', args=[self.fileid()]), _('Read online')))
-            if self.has_media("pdf"):
-                formats.append(u'<a href="%s">PDF</a>' % self.get_media('pdf').url)
-            if self.has_media("mobi"):
-                formats.append(u'<a href="%s">MOBI</a>' % self.get_media('mobi').url)
-            if self.root_ancestor.has_media("epub"):
-                formats.append(u'<a href="%s">EPUB</a>' % self.root_ancestor.get_media('epub').url)
-            if self.has_media("txt"):
-                formats.append(u'<a href="%s">TXT</a>' % self.get_media('txt').url)
+            for ebook_format in self.ebook_formats:
+                if self.has_media(ebook_format):
+                    formats.append(u'<a href="%s">%s</a>' % (
+                        self.get_media(ebook_format).url,
+                        ebook_format.upper()
+                    ))
             # other files
             for m in self.media.order_by('type'):
                 formats.append(u'<a href="%s">%s</a>' % (m.file.url, m.type.upper()))
@@ -528,17 +528,22 @@ class Book(models.Model):
                 cache.set(cache_key, short_html, CACHE_FOREVER)
             return mark_safe(short_html)
 
-    @property
-    def root_ancestor(self):
-        """ returns the oldest ancestor """
+    def mini_box(self):
+        if self.id:
+            cache_key = "Book.mini_boxs/%d" % (self.id, )
+            short_html = cache.get(cache_key)
+        else:
+            short_html = None
 
-        if not hasattr(self, '_root_ancestor'):
-            book = self
-            while book.parent:
-                book = book.parent
-            self._root_ancestor = book
-        return self._root_ancestor
+        if short_html is None:
+            authors = self.tags.filter(category='author')
 
+            short_html = unicode(render_to_string('catalogue/book_mini_box.html',
+                {'book': self, 'authors': authors, 'STATIC_URL': settings.STATIC_URL}))
+
+            if self.id:
+                cache.set(cache_key, short_html, CACHE_FOREVER)
+        return mark_safe(short_html)
 
     def has_description(self):
         return len(self.description) > 0
@@ -546,11 +551,6 @@ class Book(models.Model):
     has_description.boolean = True
 
     # ugly ugly ugly
-    def has_odt_file(self):
-        return bool(self.has_media("odt"))
-    has_odt_file.short_description = 'ODT'
-    has_odt_file.boolean = True
-
     def has_mp3_file(self):
         return bool(self.has_media("mp3"))
     has_mp3_file.short_description = 'MP3'
@@ -617,34 +617,15 @@ class Book(models.Model):
         # remove zip with all mobi files
         remove_zip(settings.ALL_MOBI_ZIP)
 
-    def build_epub(self, remove_descendants=True):
-        """ (Re)builds the epub file.
-            If book has a parent, does nothing.
-            Unless remove_descendants is False, descendants' epubs are removed.
-        """
+    def build_epub(self):
+        """(Re)builds the epub file."""
         from django.core.files import File
         from catalogue.utils import remove_zip
 
-        if self.parent:
-            # don't need an epub
-            return
-
         epub = self.wldocument().as_epub()
 
-        try:
-            epub.transform(ORMDocProvider(self), self.fileid(), output_file=epub_file)
-            self.epub_file.save('%s.epub' % self.fileid(), File(open(epub.get_filename())))
-        except NoDublinCore:
-            pass
-
-        book_descendants = list(self.children.all())
-        while len(book_descendants) > 0:
-            child_book = book_descendants.pop(0)
-            if remove_descendants and child_book.has_epub_file():
-                child_book.epub_file.delete()
-            # save anyway, to refresh short_html
-            child_book.save()
-            book_descendants += list(child_book.children.all())
+        self.epub_file.save('%s.epub' % self.fileid(),
+                File(open(epub.get_filename())))
 
         # remove zip package with all epub files
         remove_zip(settings.ALL_EPUB_ZIP)
@@ -812,17 +793,16 @@ class Book(models.Model):
                 book.build_txt()
 
         if not settings.NO_BUILD_EPUB and build_epub:
-            book.root_ancestor.build_epub()
+            book.build_epub()
 
         if not settings.NO_BUILD_PDF and build_pdf:
-            book.root_ancestor.build_pdf()
+            book.build_pdf()
 
         if not settings.NO_BUILD_MOBI and build_mobi:
             book.build_mobi()
 
         book_descendants = list(book.children.all())
         # add l-tag to descendants and their fragments
-        # delete unnecessary EPUB files
         while len(book_descendants) > 0:
             child_book = book_descendants.pop(0)
             child_book.tags = list(child_book.tags) + [book_tag]
@@ -992,7 +972,7 @@ def _has_factory(ftype):
 
     
 # add the file fields
-for t in Book.file_types:
+for t in Book.formats:
     field_name = "%s_file" % t
     models.FileField(_("%s file" % t.upper()),
             upload_to=book_upload_path(t),
index ada2681..452335a 100644 (file)
@@ -8,7 +8,7 @@ from catalogue.models import Book
 
 
 urlpatterns = patterns('catalogue.views',
-    url(r'^$', 'main_page', name='main_page'),
+    url(r'^$', 'catalogue', name='catalogue'),
     url(r'^polki/(?P<shelf>[a-zA-Z0-9-]+)/formaty/$', 'shelf_book_formats', name='shelf_book_formats'),
     url(r'^polki/(?P<shelf>[a-zA-Z0-9-]+)/(?P<book>%s)/usun$' % Book.URLID_RE, 'remove_from_shelf', name='remove_from_shelf'),
     url(r'^polki/$', 'user_shelves', name='user_shelves'),
index 235a17d..e6e5eb9 100644 (file)
@@ -55,11 +55,7 @@ class JSONResponse(HttpResponse):
         super(JSONResponse, self).__init__(data, mimetype="application/json", **kwargs)
 
 
-def main_page(request):
-    if request.user.is_authenticated():
-        shelves = models.Tag.objects.filter(category='set', user=request.user)
-        new_set_form = forms.NewSetForm()
-
+def catalogue(request):
     tags = models.Tag.objects.exclude(category__in=('set', 'book'))
     for tag in tags:
         tag.count = tag.get_count()
@@ -67,7 +63,7 @@ def main_page(request):
     fragment_tags = categories.get('theme', [])
 
     form = forms.SearchForm()
-    return render_to_response('catalogue/main_page.html', locals(),
+    return render_to_response('catalogue/catalogue.html', locals(),
         context_instance=RequestContext(request))
 
 
@@ -597,32 +593,18 @@ def download_shelf(request, slug):
     if form.is_valid():
         formats = form.cleaned_data['formats']
     if len(formats) == 0:
-        formats = ['pdf', 'epub', 'mobi', 'odt', 'txt']
+        formats = models.Book.ebook_formats
 
     # Create a ZIP archive
     temp = tempfile.TemporaryFile()
     archive = zipfile.ZipFile(temp, 'w')
 
-    already = set()
     for book in collect_books(models.Book.tagged.with_all(shelf)):
         fileid = book.fileid()
-        if 'pdf' in formats and book.pdf_file:
-            filename = book.pdf_file.path
-            archive.write(filename, str('%s.pdf' % fileid))
-        if 'mobi' in formats and book.mobi_file:
-            filename = book.mobi_file.path
-            archive.write(filename, str('%s.mobi' % fileid))
-        if book.root_ancestor not in already and 'epub' in formats and book.root_ancestor.epub_file:
-            filename = book.root_ancestor.epub_file.path
-            archive.write(filename, str('%s.epub' % book.root_ancestor.fileid()))
-            already.add(book.root_ancestor)
-        if 'odt' in formats and book.has_media("odt"):
-            for file in book.get_media("odt"):
-                filename = file.file.path
-                archive.write(filename, str('%s.odt' % slughifi(file.name)))
-        if 'txt' in formats and book.txt_file:
-            filename = book.txt_file.path
-            archive.write(filename, str('%s.txt' % fileid))
+        for ebook_format in models.Book.ebook_formats:
+            if ebook_format in formats and book.has_media(ebook_format):
+                filename = book.get_media(ebook_format).path
+                archive.write(filename, str('%s.%s' % (fileid, ebook_format)))
     archive.close()
 
     response = HttpResponse(content_type='application/zip', mimetype='application/x-zip-compressed')
@@ -641,20 +623,14 @@ def shelf_book_formats(request, shelf):
     """
     shelf = get_object_or_404(models.Tag, slug=shelf, category='set')
 
-    formats = {'pdf': False, 'epub': False, 'mobi': False, 'odt': False, 'txt': False}
+    formats = {}
+    for ebook_format in models.Book.ebook_formats:
+        formats[ebook_format] = False
 
     for book in collect_books(models.Book.tagged.with_all(shelf)):
-        if book.pdf_file:
-            formats['pdf'] = True
-        if book.root_ancestor.epub_file:
-            formats['epub'] = True
-        if book.mobi_file:
-            formats['mobi'] = True
-        if book.txt_file:
-            formats['txt'] = True
-        for format in ('odt',):
-            if book.has_media(format):
-                formats[format] = True
+        for ebook_format in models.Book.ebook_formats:
+            if book.has_media(ebook_format):
+                formats[ebook_format] = True
 
     return HttpResponse(LazyEncoder().encode(formats))
 
@@ -778,7 +754,7 @@ def download_zip(request, format, book=None):
     kwargs = models.Book.split_fileid(book)
 
     url = None
-    if format in ('pdf', 'epub', 'mobi'):
+    if format in models.Book.ebook_formats:
         url = models.Book.zip_format(format)
     elif format == 'audiobook' and kwargs is not None:
         book = get_object_or_404(models.Book, **kwargs)
index 66f2996..e5bc93c 100644 (file)
@@ -4,6 +4,6 @@ from modeltranslation.admin import TranslationAdmin
 from infopages.models import InfoPage
 
 class InfoPageAdmin(TranslationAdmin):
-    list_display = ('title',)
+    list_display = ('title', 'slug', 'main_page')
 
 admin.site.register(InfoPage, InfoPageAdmin)
\ No newline at end of file
diff --git a/apps/infopages/migrations/0002_auto__del_field_infopage_page_title__del_field_infopage_page_title_en_.py b/apps/infopages/migrations/0002_auto__del_field_infopage_page_title__del_field_infopage_page_title_en_.py
new file mode 100644 (file)
index 0000000..6ecd60b
--- /dev/null
@@ -0,0 +1,111 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Deleting field 'InfoPage.page_title'
+        db.delete_column('infopages_infopage', 'page_title')
+
+        # Deleting field 'InfoPage.page_title_en'
+        db.delete_column('infopages_infopage', 'page_title_en')
+
+        # Deleting field 'InfoPage.page_title_es'
+        db.delete_column('infopages_infopage', 'page_title_es')
+
+        # Deleting field 'InfoPage.page_title_fr'
+        db.delete_column('infopages_infopage', 'page_title_fr')
+
+        # Deleting field 'InfoPage.page_title_uk'
+        db.delete_column('infopages_infopage', 'page_title_uk')
+
+        # Deleting field 'InfoPage.page_title_de'
+        db.delete_column('infopages_infopage', 'page_title_de')
+
+        # Deleting field 'InfoPage.page_title_lt'
+        db.delete_column('infopages_infopage', 'page_title_lt')
+
+        # Deleting field 'InfoPage.page_title_pl'
+        db.delete_column('infopages_infopage', 'page_title_pl')
+
+        # Deleting field 'InfoPage.page_title_ru'
+        db.delete_column('infopages_infopage', 'page_title_ru')
+
+        # Adding field 'InfoPage.main_page'
+        db.add_column('infopages_infopage', 'main_page', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True), keep_default=False)
+
+
+    def backwards(self, orm):
+        
+        # Adding field 'InfoPage.page_title'
+        db.add_column('infopages_infopage', 'page_title', self.gf('django.db.models.fields.CharField')(default='', max_length=120, blank=True), keep_default=False)
+
+        # Adding field 'InfoPage.page_title_en'
+        db.add_column('infopages_infopage', 'page_title_en', self.gf('django.db.models.fields.CharField')(max_length=120, null=True, blank=True), keep_default=False)
+
+        # Adding field 'InfoPage.page_title_es'
+        db.add_column('infopages_infopage', 'page_title_es', self.gf('django.db.models.fields.CharField')(max_length=120, null=True, blank=True), keep_default=False)
+
+        # Adding field 'InfoPage.page_title_fr'
+        db.add_column('infopages_infopage', 'page_title_fr', self.gf('django.db.models.fields.CharField')(max_length=120, null=True, blank=True), keep_default=False)
+
+        # Adding field 'InfoPage.page_title_uk'
+        db.add_column('infopages_infopage', 'page_title_uk', self.gf('django.db.models.fields.CharField')(max_length=120, null=True, blank=True), keep_default=False)
+
+        # Adding field 'InfoPage.page_title_de'
+        db.add_column('infopages_infopage', 'page_title_de', self.gf('django.db.models.fields.CharField')(max_length=120, null=True, blank=True), keep_default=False)
+
+        # Adding field 'InfoPage.page_title_lt'
+        db.add_column('infopages_infopage', 'page_title_lt', self.gf('django.db.models.fields.CharField')(max_length=120, null=True, blank=True), keep_default=False)
+
+        # Adding field 'InfoPage.page_title_pl'
+        db.add_column('infopages_infopage', 'page_title_pl', self.gf('django.db.models.fields.CharField')(max_length=120, null=True, blank=True), keep_default=False)
+
+        # Adding field 'InfoPage.page_title_ru'
+        db.add_column('infopages_infopage', 'page_title_ru', self.gf('django.db.models.fields.CharField')(max_length=120, null=True, blank=True), keep_default=False)
+
+        # Deleting field 'InfoPage.main_page'
+        db.delete_column('infopages_infopage', 'main_page')
+
+
+    models = {
+        'infopages.infopage': {
+            'Meta': {'ordering': "('main_page', 'slug')", 'object_name': 'InfoPage'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'left_column': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'left_column_de': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'left_column_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'left_column_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'left_column_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'left_column_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'left_column_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'left_column_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'left_column_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'main_page': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'right_column': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'right_column_de': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'right_column_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'right_column_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'right_column_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'right_column_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'right_column_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'right_column_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'right_column_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '120', 'db_index': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '120', 'blank': 'True'}),
+            'title_de': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': True, 'blank': True}),
+            'title_en': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': True, 'blank': True}),
+            'title_es': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': True, 'blank': True}),
+            'title_fr': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': True, 'blank': True}),
+            'title_lt': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': True, 'blank': True}),
+            'title_pl': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': True, 'blank': True}),
+            'title_ru': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': True, 'blank': True}),
+            'title_uk': ('django.db.models.fields.CharField', [], {'max_length': '120', 'null': True, 'blank': True})
+        }
+    }
+
+    complete_apps = ['infopages']
index 9fe7b32..cf9e9bf 100644 (file)
@@ -6,21 +6,22 @@ from django.db import models
 from django.utils.translation import ugettext_lazy as _
 
 class InfoPage(models.Model):
-    """
-    An InfoPage is used to display a two-column flatpage
-    """
+    """An InfoPage is used to display a two-column flatpage."""
 
-    page_title = models.CharField(_('page title'), max_length=120, blank=True)
+    main_page = models.IntegerField(_('main page priority'), null=True, blank=True)
     slug = models.SlugField(_('slug'), max_length=120, unique=True, db_index=True)
     title = models.CharField(_('title'), max_length=120, blank=True)
     left_column = models.TextField(_('left column'), blank=True)
     right_column = models.TextField(_('right column'), blank=True)
 
     class Meta:
-        ordering = ('slug',)
+        ordering = ('main_page', 'slug',)
         verbose_name = _('info page')
         verbose_name_plural = _('info pages')
 
     def __unicode__(self):
         return self.title
 
+    @models.permalink
+    def get_absolute_url(self):
+        return ('infopage', [self.slug])
diff --git a/apps/infopages/templates/infopages/infopage.html b/apps/infopages/templates/infopages/infopage.html
new file mode 100755 (executable)
index 0000000..2d00d5d
--- /dev/null
@@ -0,0 +1,20 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% load chunks %}
+
+{% block titleextra %}:: {{ page.title }}{% endblock %}
+
+{% block metadescription %}{{ left_column|striptags|truncatewords:10 }}{% endblock %}
+
+{% block body %}
+    <h1>{{ page.title }}</h1>
+
+    {% autoescape off %}
+    <div class="column-left">
+       {{ left_column }}
+    </div>
+    <div class="column-right">
+       {{ right_column }}
+    </div>
+    {% endautoescape %}
+{% endblock %}
diff --git a/apps/infopages/templates/infopages/on_main.html b/apps/infopages/templates/infopages/on_main.html
new file mode 100755 (executable)
index 0000000..dc0103c
--- /dev/null
@@ -0,0 +1,5 @@
+<ul>
+{% for page in objects %}
+    <li><a href="{{ page.get_absolute_url }}">{{ page.title }}</a></li>
+{% endfor %}
+</ul>
diff --git a/apps/infopages/templatetags/infopages_tags.py b/apps/infopages/templatetags/infopages_tags.py
new file mode 100755 (executable)
index 0000000..d7c93ca
--- /dev/null
@@ -0,0 +1,14 @@
+# -*- 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 template
+from infopages.models import InfoPage
+
+register = template.Library()
+
+
+@register.inclusion_tag('infopages/on_main.html')
+def infopages_on_main():
+    objects = InfoPage.objects.exclude(main_page=None)
+    return {"objects": objects}
diff --git a/apps/infopages/urls.py b/apps/infopages/urls.py
new file mode 100755 (executable)
index 0000000..081e0ef
--- /dev/null
@@ -0,0 +1,11 @@
+# -*- 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.conf.urls.defaults import *
+
+
+urlpatterns = patterns('infopages.views',
+    url(r'^(?P<slug>[a-zA-Z0-9_-]+)/$', 'infopage', name='infopage'),
+)
+
index 07a416b..d457653 100644 (file)
@@ -2,15 +2,19 @@
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
-from django.shortcuts import render_to_response
-from django.template import RequestContext
+from django.shortcuts import render_to_response, get_object_or_404
+from django.template import RequestContext, Template
 
-from catalogue.forms import SearchForm
 from infopages.models import InfoPage
 
+
 def infopage(request, slug):
-    form = SearchForm()
-    object = InfoPage.objects.get(slug=slug)
+    page = InfoPage.objects.get(slug=slug)
+
+    page = get_object_or_404(InfoPage, slug=slug)
+    rc = RequestContext(request)
+    left_column = Template(page.left_column).render(rc)
+    right_column = Template(page.right_column).render(rc)
 
-    return render_to_response('info/base.html', locals(),
-                context_instance=RequestContext(request))
\ No newline at end of file
+    return render_to_response('infopages/infopage.html', locals(),
+                context_instance=RequestContext(request))
index a3c860f..05b19da 160000 (submodule)
@@ -1 +1 @@
-Subproject commit a3c860f00c7d12ae5852ddab056c98f52ee43072
+Subproject commit 05b19dad8ca44136e064abcc6beff5dac4489c60
index 7ac3cd1..0692cc7 100644 (file)
@@ -161,7 +161,13 @@ CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True
 # CSS and JavaScript file groups
 COMPRESS_CSS = {
     'all': {
-        'source_filenames': ('css/master.css', 'css/jquery.autocomplete.css', 'css/jquery.countdown.css', 'css/master.plain.css', 'css/sponsors.css', 'css/facelist_2-0.css',),
+        #'source_filenames': ('css/master.css', 'css/jquery.autocomplete.css', 'css/jquery.countdown.css', 'css/master.plain.css', 'css/sponsors.css', 'css/facelist_2-0.css',),
+        'source_filenames': [
+            'css/base.css',
+            'css/header.css',
+            'css/main_page.css',
+            'css/book_box.css',
+        ],
         'output_filename': 'css/all.min?.css',
     },
     'book': {
@@ -175,29 +181,33 @@ COMPRESS_CSS = {
 }
 
 COMPRESS_JS = {
-    'jquery': {
-        'source_filenames': ('js/jquery.js',),
-        'output_filename': 'js/jquery.min.js',
-    },
-    'all': {
-        'source_filenames': ('js/jquery.autocomplete.js', 'js/jquery.form.js',
-            'js/jquery.countdown.js', 'js/jquery.countdown-pl.js',
-            'js/jquery.countdown-de.js', 'js/jquery.countdown-uk.js',
-            'js/jquery.countdown-es.js', 'js/jquery.countdown-lt.js',
-            'js/jquery.countdown-ru.js', 'js/jquery.countdown-fr.js',
-            'js/jquery.cycle.min.js',
-            'js/jquery.jqmodal.js', 'js/jquery.labelify.js', 'js/catalogue.js',
-            ),
-        'output_filename': 'js/all?.min.js',
-    },
-    'book': {
-        'source_filenames': ('js/jquery.eventdelegation.js', 'js/jquery.scrollto.js', 'js/jquery.highlightfade.js', 'js/book.js',),
-        'output_filename': 'js/book?.min.js',
-    },
-    'book_ie': {
-        'source_filenames': ('js/ierange-m2.js',),
-        'output_filename': 'js/book_ie?.min.js',
-    }
+    #~ 'jquery': {
+        #~ #'source_filenames': ('js/jquery.js',),
+        #~ 'source_filenames': [],
+        #~ 'output_filename': 'js/jquery.min.js',
+    #~ },
+    #~ 'all': {
+        #~ 'source_filenames': ('js/jquery.autocomplete.js', 'js/jquery.form.js',
+            #~ 'js/jquery.countdown.js', 'js/jquery.countdown-pl.js',
+            #~ 'js/jquery.countdown-de.js', 'js/jquery.countdown-uk.js',
+            #~ 'js/jquery.countdown-es.js', 'js/jquery.countdown-lt.js',
+            #~ 'js/jquery.countdown-ru.js', 'js/jquery.countdown-fr.js',
+            #~ 'js/jquery.cycle.min.js',
+            #~ 'js/jquery.jqmodal.js', 'js/jquery.labelify.js', 'js/catalogue.js',
+            #~ ),
+        #~ 'source_filenames': [],
+        #~ 'output_filename': 'js/all?.min.js',
+    #~ },
+    #~ 'book': {
+        #~ 'source_filenames': ('js/jquery.eventdelegation.js', 'js/jquery.scrollto.js', 'js/jquery.highlightfade.js', 'js/book.js',),
+        #~ 'source_filenames': [],
+        #~ 'output_filename': 'js/book?.min.js',
+    #~ },
+    #~ 'book_ie': {
+        #~ 'source_filenames': ('js/ierange-m2.js',),
+        #~ 'source_filenames': [],
+        #~ 'output_filename': 'js/book_ie?.min.js',
+    #~ }
 
 }
 
diff --git a/wolnelektury/static/css/base.css b/wolnelektury/static/css/base.css
new file mode 100755 (executable)
index 0000000..067d9fd
--- /dev/null
@@ -0,0 +1,55 @@
+html {
+    margin: 0;
+    padding: 0;
+}
+
+body {
+    margin: 0;
+    background: #f7f7f7;
+    font-size: .9em;
+    line-height: 1.4em;
+}
+
+
+a {
+    color: #02adb7;
+    text-decoration: none;
+}
+
+h2 {
+    margin: 0;
+    font-size: 1em;
+    font-weight: normal;
+}
+
+
+.grid-line {
+    height: 2.6em;
+    padding-top: 1.4em;
+    padding-bottom: 0;
+}
+
+.mono, .mono-small {
+    font-family: "Lucida Sans Typewriter", courier;
+    font-size: .9em;
+}
+
+
+.clearboth {
+    clear: both;
+}
+
+#header-content, div#main-content, div#half-header-content {
+    width: 75em;
+    margin: auto;
+}
+
+
+
+
+#footer {
+    font-size: .75em;
+    color: #777;
+    border-top: 1px solid #ddd;
+    margin-top: 2.5em;
+}
diff --git a/wolnelektury/static/css/book_box.css b/wolnelektury/static/css/book_box.css
new file mode 100755 (executable)
index 0000000..a959d84
--- /dev/null
@@ -0,0 +1,30 @@
+.book-mini-box {
+    display: inline-block;
+    margin: 0;
+    width: 12.5em;
+    vertical-align: top;
+}
+
+.book-mini-box a {
+    display: block;
+    color: black;
+    border: 1px solid #ddd;
+    height: 20em;
+    padding: .75em;
+    margin: .1em;
+    background: #fff;
+    -moz-box-shadow: 2px 2px 2px #ddd;
+    -webkit-box-shadow: 2px 2px 2px #ddd;
+    box-shadow: 2px 2px 2px #ddd;
+    overflow: hidden;
+}
+
+.book-mini-box img {
+    width: 10.8em;
+    height: 14.4em;
+    margin-bottom: .3em;
+}
+
+.book-mini-box .author {
+    color: #777;
+}
\ No newline at end of file
diff --git a/wolnelektury/static/css/header.css b/wolnelektury/static/css/header.css
new file mode 100755 (executable)
index 0000000..abea73c
--- /dev/null
@@ -0,0 +1,175 @@
+/* Logo font */
+@font-face {
+    /* IE version */
+    font-family: WL-Logo;
+    src: url(/static/fonts/WL.eot);
+}
+@font-face {
+  font-family: WL-Logo;
+  src: url(/static/fonts/WL.ttf) format("truetype");
+}
+
+
+#header {
+    color: #969696;
+    background: #191919;
+}
+
+#half-header {
+    background: url('/static/img/bg-header.png');
+    background-position: center;
+    background-size: 100%;
+}
+
+#half-header-content {
+    background: #191919;
+}
+
+
+#user-info {
+    float: right;
+    margin: 0;
+}
+
+#logo {
+    position: absolute;
+    top: 4em;
+}
+
+#logo a {
+    font-family: WL-Logo;
+    font-size: 1.9em;
+    color:#f7f7f7;
+}
+
+#logo img {
+    max-width: 15em;
+}
+
+#tagline {
+    display: inline-block;
+    margin-left: 16em;
+}
+
+#search {
+    margin: 0;
+    background: #444;
+    margin-left: 16em;
+    width: 59em;
+}
+
+#search-field {
+    display: inline-block;
+    width: 50em;
+    padding-left: .5;
+    padding-right: .5;
+    padding: .1em .5em 0 .5em;
+}
+
+#search-field input {
+    height: 2.8em;
+    border: none;
+    width: 49.5em;
+    font-size: 1em;
+    padding-left: .5em;
+    -webkit-border-radius: .5em;
+    -moz-border-radius: .5em;
+    border-radius: .5em;
+    -webkit-box-shadow:0 0 .5em #444 inset;
+    -moz-box-shadow:0 0 .5em #444 inset;
+    box-shadow: 0 0 .5em #444 inset;
+}
+
+#search-button {
+    display: inline-block;
+    background: #02adb7;
+    padding: 0;
+    margin: 0;
+    width: 8em;
+}
+#search-button button {
+    font-size: 1em;
+    /* should match grid-line */
+    height: 4em;
+    border: none;
+    background: #02adb7;
+    color: white;
+    width: 100%;
+    padding: 0;
+}
+
+#search-button button span {
+    position:relative;
+    top: -.2em;
+}
+
+
+#nav-line {
+    background-color: #e2e2e2;
+    height: 3.95em;
+}
+
+ul#catalogue {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+}
+ul#catalogue li {
+    background-color: #e2e2e2;
+    float: left;
+}
+ul#catalogue a {
+    display: block;
+    padding-left: 1.5em;
+    padding-right: 1.5em;
+    /* must match grid-line */
+    height: 2.7em;
+    padding-top: 1.3em;
+}
+
+
+
+#lang-button:after {
+    content: url(/static/img/lang-arrow.png);
+    padding-left: .5em;
+}
+#lang-menu {
+    position: relative;
+    float: right;
+    display: block;
+    padding-left: 1.5em;
+    padding-right: 1.5em;
+    /* must match grid-line */
+    height: 2.7em;
+    padding-top: 1.3em;
+    background: #f7f7f7;
+}
+
+#lang-menu-items button {
+    display: none;
+    background: #f7f7f7;
+    color: #444;
+    cursor: pointer;
+    width: 100%;
+    border: solid #ddd;
+    border-width: 0 0 1px 0;
+    padding: .5em 0;
+    margin: 0;
+}
+
+#lang-menu:hover button {
+    display: block;
+}
+
+#lang-menu:hover #lang-menu-items {
+    position: absolute;
+    width: 100%;
+    padding: 0;
+    left: 0;
+    /* must match grid-line height */
+    top: 3.9em;
+}
+
+#lang-menu .active {
+    font-weight: bold;
+}
diff --git a/wolnelektury/static/css/main_page.css b/wolnelektury/static/css/main_page.css
new file mode 100755 (executable)
index 0000000..28a1148
--- /dev/null
@@ -0,0 +1,80 @@
+#big-cite {
+    background-color: white;
+    padding: 8em;
+    margin: 0;
+}
+
+#big-cite a {
+    color: black;
+    display: block;
+}
+
+#big-cite h2 {
+    margin: 0;
+}
+
+
+#big-cite-text {
+    margin: .5em 0;
+    font-size: 1.75em;
+    line-height: 1.3em;
+}
+
+
+#big-cite-source {
+    color: #02adb7;
+    margin: 0;
+}
+
+
+#promo-box {
+    float: right;
+    width: 24em;
+    /* should match grid-line */
+    margin-top: -4em;
+}
+#promo-box-header {
+    padding-left: 2em;
+    padding-right: 2em;
+    background: #191919;
+    color: white;
+}
+#promo-box-body {
+    border-bottom: 2px solid #efefef;
+    padding: 1.3em 2em;
+    height: 23em;
+    background: #efefef;
+}
+#promo-box-title {
+    color: #02ADB7;
+    height: 2.7em;
+    margin: 0;
+}
+#promo-box-body p {
+    margin-top: 0;
+}
+
+.infopages-box {
+    width: 16.75em;
+    display: inline-block;
+    margin: .5em 0 0 0;
+    padding: 0 1em;
+    vertical-align: top;
+}
+.infopages-box h2 {
+    color: #02ADB7;
+}
+.infopages-box a {
+    color: black;
+}
+
+.infopages-box ol, .infopages-box ul {
+    font-size: .8em;
+    list-style: none;
+    padding: 0;
+    margin: 0;
+}
+
+.social-links {
+    margin-top: 1em;
+}
\ No newline at end of file
diff --git a/wolnelektury/static/fonts/WL.eot b/wolnelektury/static/fonts/WL.eot
new file mode 100644 (file)
index 0000000..53fedbd
Binary files /dev/null and b/wolnelektury/static/fonts/WL.eot differ
diff --git a/wolnelektury/static/fonts/WL.ttf b/wolnelektury/static/fonts/WL.ttf
new file mode 100644 (file)
index 0000000..7feb6b4
Binary files /dev/null and b/wolnelektury/static/fonts/WL.ttf differ
diff --git a/wolnelektury/static/img/bg-header.png b/wolnelektury/static/img/bg-header.png
new file mode 100644 (file)
index 0000000..f7e572e
Binary files /dev/null and b/wolnelektury/static/img/bg-header.png differ
diff --git a/wolnelektury/static/img/lang-arrow.png b/wolnelektury/static/img/lang-arrow.png
new file mode 100644 (file)
index 0000000..c79e3f1
Binary files /dev/null and b/wolnelektury/static/img/lang-arrow.png differ
index 061197f..9d490ae 100644 (file)
@@ -1,13 +1,14 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
-       {% load i18n chunks compressed catalogue_tags sponsor_tags %}
+       {% load i18n compressed catalogue_tags sponsor_tags %}
     <head>
         <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
         <meta http-equiv="Content-Style-Type" content="text/css" />
         <meta name="description" 
             content="{% block metadescription %}Darmowe opracowane, pełne teksty lektur, e-booki, audiobooki i pliki DAISY na wolnej licencji.{% endblock %}" />
-        <title>{% block title %}WolneLektury.pl{% endblock %}</title>
+        <title>{% trans "Wolne Lektury internet library" %}
+            {% block titleextra %}{% endblock %}</title>
         <link rel="icon" href="{{ STATIC_URL }}img/favicon.png" type="image/png" />
         <link rel="search" type="application/opensearchdescription+xml" title="Wolne Lektury" href="{{ STATIC_URL }}opensearch.xml" />
         {% compressed_css "all" %}
         {% endblock %}
     </head>
     <body id="{% block bodyid %}base{% endblock %}">
-        <!--[if lt IE 7]><link href={{ STATIC_URL }}infobar/infobar.css rel=stylesheet>
-        <div id=infobar><a href=http://browsehappy.pl/infobar>
-        {% trans "Internet Explorer cannot display this site properly. Click here to read more..." %}
-        </a></div><div id=viewplot><script src={{ STATIC_URL }}infobar/infobar.js></script><![endif]-->
+
         {% block bodycontent %}
-        <div id="top-message">
-            {% chunk "top-message" %}
-        </div>
-        <div id="header">
+
+        <div id="header" class="grid-line">
+
+        <div id="header-content">
             <div id="logo">
-                <a class="logo" href="/"><img src="{% block logo_url %}{{ STATIC_URL }}img/logo-bez.png{% endblock %}" alt="WolneLektury.pl" />
-                <br/>szkolna biblioteka internetowa</a>
-                {% block tagline %}{% endblock %}
+                <a class="logo" href="/">
+                Wolne Lektury</a>
             </div>
-            <div id="user-info" style="display:none">
+
+            <div id="tagline">
+                <a href=''>1666</a> darmowych lektur do których masz <a href=''>prawo</a>
+            </div>
+
+            <p id="user-info" class="mono">
                 {% if user.is_authenticated %}
-                    <p>
-                        {% trans "Welcome" %}, <strong>{{ user.username }}</strong>
-                        | <a href="{% url user_shelves %}" id="user-shelves-link">{% trans "Your shelves" %}</a>
-                        {% if user.is_staff %}
-                        | <a href="/admin/">{% trans "Administration" %}</a>
-                        {% endif %}
-                                               | <a href="{% url suggest %}" id="suggest-link">{% trans "Report a bug" %}</a>
-                        | <a href="{% url logout %}?next={{ request.get_full_path }}">{% trans "Logout" %}</a>
-                    </p>
+                    {% trans "Welcome" %}, <strong>{{ user.username }}</strong>
+                    | <a href="{% url user_shelves %}" id="user-shelves-link">{% trans "Your shelves" %}</a>
+                    {% if user.is_staff %}
+                    | <a href="/admin/">{% trans "Administration" %}</a>
+                    {% endif %}
+                    | <a href="{% url logout %}?next={{ request.get_full_path }}">{% trans "Logout" %}</a>
                 {% else %}
-                    <p><a href="{% url suggest %}" id="suggest-link">{% trans "Report a bug" %}</a>
-                        | <a href="{% url login %}" class="login-register-link">{% trans "Sign in" %} / {% trans "Register" %}</a></p>
+                    <a href="{% url login %}" class="login-register-link">{% trans "Sign in" %} / {% trans "Register" %}</a>
                 {% endif %}
+            </p>
+
+
+            <div class="clearboth"></div>
+
+        </div>
+        </div>
+
+        <div id="half-header">
+        <div id="half-header-content">
+
+
+
+            <form id="search">
+                
+                <span id="search-field" class="grid-line">
+                    <input title="np. Leśmian" name="q" autocomplete="off">
+                </span><span id="search-button">
+                    <button type='submit'><span class="mono">{% trans "Search" %}</span></button>
+                </span>
+                
+            </form>
+
+
+
+            <div class="clearboth"></div>
+        </div>
+        </div>
+
+
+
+        <div id="main-content">
+
+            <div id="nav-line">
+            <ul id="catalogue">
+                <li><a href="{% url book_list %}"><span class='mono'>{% trans "All books" %}</span></a></li>
+                <li><a href="{% url audiobook_list %}"><span class='mono'>{% trans "Audiobooks" %}</span></a></li>
+                <li><a href="{% url daisy_list %}"><span class='mono'>{% trans "DAISY" %}</span></a></li>
+                <li><a href="{% url catalogue %}#autorzy"><span class='mono'>{% trans "Authors" %}</span></a></li>
+                <li><a href="{% url catalogue %}#epoki"><span class='mono'>{% trans "Epochs" %}</span></a></li>
+                <li><a href="{% url catalogue %}#rodzaje"><span class='mono'>{% trans "Kinds" %}</span></a></li>
+                <li><a href="{% url catalogue %}#gatunki"><span class='mono'>{% trans "Genres" %}</span></a></li>
+                <li><a href="{% url catalogue %}#motywy"><span class='mono'>{% trans "Themes" %}</span></a></li>
+            </ul>
+
+            <form action="{% url django.views.i18n.set_language %}" method="post">
+            <div id="lang-menu">
+                <span id='lang-button' class='mono-small'>
+                    {% trans "Language versions" %}</span>
+                <div id="lang-menu-items">
+                {% for lang in LANGUAGES %}
+                    <button type="submit" name="language"
+                        class="{% ifequal lang.0 LANGUAGE_CODE %}active{% endifequal %} {% if forloop.last %}last{% endif %}"
+                        value="{{ lang.0 }}">{{ lang.1 }}</button>
+                {% endfor %}
+                </div>
             </div>
-            <div class="social-links" style="float:right">
-                <a href="http://pl-pl.facebook.com/pages/Wolne-Lektury/203084073268"><img src="{{ STATIC_URL }}img/social/facebook.png" alt="WolneLektury @ Facebook" /></a>
-                <a href="http://nk.pl/profile/30441509"><img src="{{ STATIC_URL }}img/social/naszaklasa.png" alt="WolneLektury @ NK" /></a>
-            </div>
-                               <form action="{% url django.views.i18n.set_language %}" method="post">
-            <div class="lang-menu" style="float:right;">
-                                       {% spaceless %}
-                                       {% for lang in LANGUAGES %}                                          
-                                           <button type="submit" name="language" title="{{ lang.1 }}"
-                                                       class="{% ifequal lang.0 LANGUAGE_CODE %}active{% endifequal %} {% if forloop.last %}last{% endif %}" 
-                                                       value="{{ lang.0 }}">{{ lang.0|upper }}</button>
-                                       {% endfor %}    
-                                       {% endspaceless %}                              
-                       </div>
-                </form>
-            {# publication plan consultations - form link #}
-            <div style="clear:right;float:right" class="big-top-link">
-                <a href="{% url suggest_publishing %}" data-ajax="{% url suggest_publishing %}?ajax=1" id="suggest-publishing-link">
-                    {% trans "Didn't find a book? Make a suggestion." %}
-                </a>
+            </form>
             </div>
+
             <div class="clearboth"></div>
-        </div>
-        <div id="maincontent">
+
+
+
             {% block body %}
             {% endblock %}
-        </div>
+
+
+
+
         <div class="clearboth"></div>
+
+
+
         <div id="footer">
             <p>
                {% blocktrans %}
 
                        {% sponsor_page "footer" %}
         </div>
-        <div id="login-register-window">
+
+        </div>{# end main-content #}
+
+
+        <!--div id="login-register-window">
             <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div>
             <div class="target">
                 <form method="post" action="{% url login %}" id="login-form" class="cuteform">
                     </ol>
                 </form>
             </div>
-        </div>
-        <div id="user-shelves-window">
-            <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div>
-            <div class="target">
-                <p><img src="{{ STATIC_URL }}img/indicator.gif" alt="*"/> {% trans "Loading" %}</p>
-            </div>
-        </div>
-        <div id="suggest-window">
-            <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div>
-            <div class="target">
-                <p><img src="{{ STATIC_URL }}img/indicator.gif" alt="*"/> {% trans "Loading" %}</p>
-            </div>
-        </div>
-        <div id="suggest-publishing-window">
-            <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div>
-            <div class="target">
-                <p><img src="{{ STATIC_URL }}img/indicator.gif" alt="*"/> {% trans "Loading" %}</p>
-            </div>
-        </div>
+        </div-->
+
+
         {% endblock bodycontent %}
-        {{ piwik_tag|safe }}
+
+        <!--{{ piwik_tag|safe }}
         <script type="text/javascript">
         var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
         document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
         <script type="text/javascript">
         var pageTracker = _gat._getTracker("UA-2576694-1");
         pageTracker._trackPageview();
-        </script>
+        </script>-->
     </body>
 </html>
index 2d83c73..c47e217 100644 (file)
@@ -49,8 +49,8 @@
                     {% if book.pdf_file %}
                         <a href="{{ book.pdf_file.url }}"><img src="{{ STATIC_URL }}img/pdf.png" title="{% trans "Download PDF" %} &ndash; {% trans "for reading" %} {% trans "and printing using" %} Adobe Reader" %}" alt="{% trans "Download PDF" %}" /></a>
                     {% endif %}
-                    {% if book.root_ancestor.epub_file %}
-                        <a href="{{ book.root_ancestor.epub_file.url }}"><img src="{{ STATIC_URL }}img/epub.png" title="{% trans "Download EPUB" %} &ndash; {% trans "for reading" %} {% trans "on mobile devices" %}" alt="{% trans "Download EPUB" %}" /></a>
+                    {% if book.epub_file %}
+                        <a href="{{ book.epub_file.url }}"><img src="{{ STATIC_URL }}img/epub.png" title="{% trans "Download EPUB" %} &ndash; {% trans "for reading" %} {% trans "on mobile devices" %}" alt="{% trans "Download EPUB" %}" /></a>
                     {% endif %}
                     {% if book.mobi_file %}
                         <a href="{{ book.mobi_file.url }}"><img src="{{ STATIC_URL }}img/mobi.png" title="{% trans "Download MOBI" %} &ndash; {% trans "for reading" %} {% trans "on mobile devices" %}" alt="{% trans "Download MOBI" %}" /></a>
@@ -58,9 +58,6 @@
                     {% if book.txt_file %}
                         <a href="{{ book.txt_file.url }}"><img src="{{ STATIC_URL }}img/txt.png" title="{% trans "Download TXT" %} &ndash; {% trans "for reading" %} {% trans "on small displays, for example mobile phones" %}" alt="{% trans "Download TXT" %}" /></a>
                     {% endif %}
-                    {% for media in book.get_odt %}
-                        <a href="{{ media.file.url }}"><img src="{{ STATIC_URL }}img/odt.png" title="{% trans "Download ODT" %} &ndash; {% trans "for reading" %} {% trans "and editing using" %} OpenOffice.org: {{ media.name }}" alt="{% trans "Download ODT" %}" /></a>
-                    {% endfor %}
                        
                     {% if book.pdf_file %}
                        <br/><a href="#" id="custom-pdf-link">{% trans "Dowload customized PDF" %}</a>.
diff --git a/wolnelektury/templates/catalogue/book_mini_box.html b/wolnelektury/templates/catalogue/book_mini_box.html
new file mode 100755 (executable)
index 0000000..4ef82e1
--- /dev/null
@@ -0,0 +1,13 @@
+{% load i18n %}
+<div class="book-mini-box">
+    <a href="{{ book.get_absolute_url }}">
+        <img src="{{ STATIC_URL }}img/cover.png"
+                alt="{% trans "Book cover" %}" />
+        {% for author in authors %}
+            <div class="mono author">{{ author }}</div>
+            {{ book.title }}
+        {% endfor %}
+    </a>
+</div>
+
+
diff --git a/wolnelektury/templates/catalogue/catalogue.html b/wolnelektury/templates/catalogue/catalogue.html
new file mode 100644 (file)
index 0000000..b6ca053
--- /dev/null
@@ -0,0 +1,23 @@
+{% extends "base.html" %}
+{% load i18n %}
+{% load catalogue_tags %}
+
+
+{% block bodyid %}catalogue-catalogue{% endblock %}
+
+{% block body %}
+    <h2></a>{% trans "Authors" %}<a name="autorzy"></a></h2>
+    {% tag_list categories.author %}
+
+    <h2>{% trans "Kinds" %}<a name="rodzaje"></a></h2>
+    {% tag_list categories.kind %}
+
+    <h2>{% trans "Genres" %}<a name="gatunki"></a></h2>
+    {% tag_list categories.genre %}
+
+    <h2>{% trans "Epochs" %}<a name="epoki"></a></h2>
+    {% tag_list categories.epoch %}
+
+    <h2>{% trans "Themes and topics" %}<a name="motywy"></a></h2>
+    {% tag_list fragment_tags %}
+{% endblock %}
diff --git a/wolnelektury/templates/catalogue/main_page.html b/wolnelektury/templates/catalogue/main_page.html
deleted file mode 100644 (file)
index ba9e676..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-{% extends "base.html" %}
-{% load i18n %}
-{% load catalogue_tags chunks cache reporting_stats %}
-
-
-{% block tagline %}
-<div id='tagline'>
-
-{% count_books_nonempty count_books %}
-{% blocktrans count count_books as c %}
-{{c}} book from <a href='http://domenapubliczna.org'>public domain</a> or under
-a <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>free license</a>.
-{% plural %}
-{{c}} books from <a href='http://domenapubliczna.org'>public domain</a> or under
-a <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>free license</a>.
-{% endblocktrans %}
-
-</div>
-{% endblock %}
-
-
-{% block bodyid %}main-page{% endblock %}
-
-{% block body %}
-    <div id="site-description">
-        {% chunk "site-description" %}
-    </div>
-    <div class="clearboth"></div>
-    <form action="{% url search %}" method="get" accept-charset="utf-8" id="search-form">
-        <p>{{ form.q }} {{ form.tags }} <input type="submit" value="{% trans "Search" %}" />
-            <strong>{% trans "or" %}</strong> {% trans "see" %}: 
-            <span class='collections'>
-                <a href="{% url catalogue.views.book_list %}">{% trans "all books" %}</a>
-                <a href="{% url catalogue.views.audiobook_list %}">{% trans "audiobooks" %}</a>
-                <a href="{% url catalogue.views.daisy_list %}">{% trans "DAISY" %}</a>
-            </span></p>
-    </form>
-
-    <div id="intro">
-        <p id="tags-description">↓ {% trans "Browse books by categories" %} ↓</p>
-        <div id="propaganda">
-
-            <h2>Spot promocyjny</h2>
-            <p><iframe width="260" height="162"
-                src="http://www.youtube.com/embed/IteV_EoTrZE"
-                frameborder="0" allowfullscreen></iframe></p>
-
-
-            <h2>Turniej Elektrybałtów</h2>
-            <p><a target="_blank" href='http://turniej.wolnelektury.pl'>
-                <img src='{{ STATIC_URL }}img/turniej-maly.png' alt='Logo Turnieju' width='60' height='64' style='float:left;margin:1em;' />
-            </a>
-            Trwa otwarty konkurs na najlepszego <strong>automatycznego poetę</strong>!
-            Zobacz, co potrafią nadesłane programy.
-            </p>
-            <p class="see-more"><a target="_blank" href="http://turniej.wolnelektury.pl" >Idź do strony konkursu ⇒</a></p>
-
-
-            {% comment %}    <h2>{% trans "Books for every school level" %}</h2>
-            <ul>
-                <li><a href="">{% trans "primary school" %}</a></li>
-                <li><a href="">{% trans "gymnasium" %}</a></li>
-                <li><a href="">{% trans "high school" %}</a></li>
-            </ul>    {% endcomment %}
-
-            <br/>
-            <h2>{% trans "Your shelves with books" %}</h2>
-            {% if user.is_authenticated %}
-                {% if shelves %}
-                <ul class="shelf-list">
-                {% for shelf in shelves %}
-                    <li><a href="{% url delete_shelf shelf.slug %}" class="delete-shelf">{% trans "delete" %}</a> <a href="{{ shelf.get_absolute_url }}" class="visit-shelf">{{ shelf.name }} ({{ shelf.get_count }})</a></li>
-                {% endfor %}
-                </ul>
-                {% else %}
-                <p>{% trans "You do not own any shelves. You can create one below, if you want to." %}</p>
-                {% endif %}
-                <hr />
-                <form action="{% url catalogue.views.new_set %}" method="post" accept-charset="utf-8" class="cuteform">
-                <ol>
-                    <li>{{ new_set_form.name }} <input type="submit" value="{% trans "Create shelf" %}"/></li>
-                </ol>
-                </form>
-                <br/>
-            {% else %}
-                <p>{% trans "Create your own book set. You can share it with friends by sending them link to your shelf." %}</p>
-                <p>{% trans "You need to " %} <a class="login-register-link" href="#">{% trans "sign in" %}</a> {% trans "to manage your shelves." %}</p>
-            {% endif %}
-
-            <h2>Leśmianator</h2>
-            <p>Wybierz, co wpadnie do miksera, i pokaż efekt znajomym!
-                </p>
-            <p class="see-more" style="clear:both"><a href="{% url lesmianator %}">{% trans "Twórzże się!" %} ⇒</a></p>
-
-            <h2>{% trans "Wolne Lektury Widget" %}</h2>
-            <p>{% trans "Place our widget - search engine for Wolne Lektury which gives access to free books and audiobooks - on your homepage! Just copy the HTML code below onto your page:" %}</p>
-            <textarea rows="1" cols="35" class='widget-code' title='widget'><!-- START {% trans "Insert this element in place where you want display the widget" %} -->
-&lt;div id="wl" /&gt;
-&lt;!-- END --&gt;
-&lt;!-- START {% trans "Place this element just before closing body tag: &lt;/body&gt;" %} --&gt;
-&lt;script type="text/javascript" src="http://www.wolnelektury.pl/static/js/widget.js"&gt;&lt;/script&gt;
-&lt;!-- END --&gt;</textarea>
-                <p class="see-more"><a href="{% url widget %}" title="{% trans "Wolne Lektury Widget" %}">{% trans "See more" %} ⇒</a></p>
-
-            <div id="lessons">
-                <h2><a href="{% url lessons_document_list %}">{% trans "Hand-outs for teachers" %}</a></h2>
-                <p>{% trans "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." %}</p>
-                <p class="see-more"><a href="{% url lessons_document_list %}" title="{% trans "Hand-outs for teachers" %}">{% trans "See more" %} ⇒</a></p>
-            </div>
-        </div>
-        <div id="tags-list">
-            <div id="categories-list">
-                {% if categories.author %}
-                    <h2>{% trans "Authors" %}</h2>
-                    {% folded_tag_list categories.author 'Authors' %}
-                {% endif %}
-                {% if categories.kind %}
-                    <h2>{% trans "Kinds" %}</h2>
-                    {% folded_tag_list categories.kind 'Kinds' %}
-                {% endif %}
-                {% if categories.genre %}
-                    <h2>{% trans "Genres" %}</h2>
-                    {% folded_tag_list categories.genre 'Genres' %}
-                {% endif %}
-                {% if categories.epoch %}
-                    <h2>{% trans "Epochs" %}</h2>
-                    {% folded_tag_list categories.epoch 'Epochs' %}
-                {% endif %}
-            </div>
-            <div id="themes-list">
-                {% if fragment_tags %}
-                    <h2>{% trans "Themes and topics" %}</h2>
-                    {% folded_tag_list fragment_tags 'Themes' %}
-                {% endif %}
-                <h2>{% trans "Themes groups" %}</h2>
-                <div class="shown-tags">
-                    <ol>
-                        <li>środowisko miejskie i wiejskie
-                        <span class="subcategories"><a href="/katalog/motyw/miasto/">Miasto</a>, <a href="/katalog/motyw/warszawa/">Warszawa</a>, <a href="/katalog/motyw/mieszczanin/">Mieszczanin</a>, <a href="/katalog/motyw/handel/">Handel</a>, <a href="/katalog/motyw/robotnik/">Robotnik</a>, <a href="/katalog/motyw/zyd/">Żyd</a>, <a href="/katalog/motyw/wies/">Wieś</a>, <a href="/katalog/motyw/sielanka/">Sielanka</a>, <a href="/katalog/motyw/chlop/">Chłop</a>, <a href="/katalog/motyw/ogrod/">Ogród</a>, <a href="/katalog/motyw/natura/">Natura</a>, <a href="/katalog/motyw/przestrzen/">Przestrzeń</a></span></li>
-
-                        <li>polityczny obraz świata
-                        <span class="subcategories"><a href="/katalog/motyw/panstwo/">Państwo</a>, <a href="/katalog/motyw/obowiazek/">Obowiązek</a>, <a href="/katalog/motyw/cnota/">Cnota</a>, <a href="/katalog/motyw/obywatel/">Obywatel</a>, <a href="/katalog/motyw/patriota/">Patriota</a>, <a href="/katalog/motyw/ojczyzna/">Ojczyzna</a>, <a href="/katalog/motyw/narod/">Naród</a>, <a href="/katalog/motyw/przywodca/">Przywódca</a>, <a href="/katalog/motyw/wladza/">Władza</a>, <a href="/katalog/motyw/urzednik/">Urzędnik</a>, <a href="/katalog/motyw/krol/">Król</a>, <a href="/katalog/motyw/rycerz/">Rycerz</a>, <a href="/katalog/motyw/zolnierz/">Żołnierz</a>, <a href="/katalog/motyw/wojna/">Wojna</a>, <a href="/katalog/motyw/wrog/">Wróg</a>, <a href="/katalog/motyw/zwyciestwo/">Zwycięstwo</a>, <a href="/katalog/motyw/walka/">Walka</a>, <a href="/katalog/motyw/sila/">Siła</a>, <a href="/katalog/motyw/historia/">Historia</a>, <a href="/katalog/motyw/powstanie/">Powstanie</a>, <a href="/katalog/motyw/smierc-bohaterska/">Śmierć bohaterska</a>, <a href="/katalog/motyw/slawa/">Sława</a>, <a href="/katalog/motyw/rewolucja/">Rewolucja</a>, <a href="/katalog/motyw/sad/">Sąd</a>, <a href="/katalog/motyw/zdrada/">Zdrada</a></span></li>
-
-                        <li>przyroda
-                        <span class="subcategories"><a href="/katalog/motyw/natura/">Natura</a>, <a href="/katalog/motyw/zywioly/">Żywioły</a>, <a href="/katalog/motyw/ogien/">Ogień</a>, <a href="/katalog/motyw/ziemia/">Ziemia</a>, <a href="/katalog/motyw/wiatr/">Wiatr</a>, <a href="/katalog/motyw/woda/">Woda</a>, <a href="/katalog/motyw/wiosna/">Wiosna</a>, <a href="/katalog/motyw/lato/">Lato</a>, <a href="/katalog/motyw/jesien/">Jesień</a>, <a href="/katalog/motyw/zima/">Zima</a>, <a href="/katalog/motyw/przemijanie/">Przemijanie</a>, <a href="/katalog/motyw/slonce/">Słońce</a>, <a href="/katalog/motyw/ksiezyc/">Księżyc</a>, <a href="/katalog/motyw/gwiazda/">Gwiazda</a>, <a href="/katalog/motyw/oblok/">Obłok</a>, <a href="/katalog/motyw/noc/">Noc</a>, <a href="/katalog/motyw/swiatlo/">Światło</a>, <a href="/katalog/motyw/gora/">Góra</a>, <a href="/katalog/motyw/rzeka/">Rzeka</a>, <a href="/katalog/motyw/morze/">Morze</a>, <a href="/katalog/motyw/burza/">Burza</a>, <a href="/katalog/motyw/deszcz/">Deszcz</a>, <a href="/katalog/motyw/bloto/">Błoto</a>, <a href="/katalog/motyw/przyroda-nieozywiona/">Przyroda nieożywiona</a>, <a href="/katalog/motyw/rosliny/">Rośliny</a>, <a href="/katalog/motyw/kwiaty/">Kwiaty</a>, <a href="/katalog/motyw/ogrod/">Ogród</a>, <a href="/katalog/motyw/sielanka/">Sielanka</a>, <a href="/katalog/motyw/raj/">Raj</a>, <a href="/katalog/motyw/jablko/">Jabłko</a>, <a href="/katalog/motyw/drzewo/">Drzewo</a>, <a href="/katalog/motyw/zwierzeta/">Zwierzęta</a>, <a href="/katalog/motyw/ptak/">Ptak</a>, <a href="/katalog/motyw/motyl/">Motyl</a>, <a href="/katalog/motyw/kot/">Kot</a>, <a href="/katalog/motyw/kon/">Koń</a>, <a href="/katalog/motyw/pies/">Pies</a>, <a href="/katalog/motyw/waz/">Wąż</a>, <a href="/katalog/motyw/potwor/">Potwór</a></span></li>
-                    </ol>
-                    <p><a href="#" class="show-all-tags" title="{% trans "Themes and topics" %}">{% trans "See more" %}</a></p>
-                </div>
-                <div class="all-tags">
-                    <ol>
-                    <li>cielesność
-                    <span class="subcategories"><a href="/katalog/motyw/cialo/">Ciało</a>, <a href="/katalog/motyw/krew/">Krew</a>, <a href="/katalog/motyw/zdrowie/">Zdrowie</a>, <a href="/katalog/motyw/choroba/">Choroba</a>, <a href="/katalog/motyw/kaleka/">Kaleka</a></span></li>
-
-                    <li>dom
-                    <span class="subcategories"><a href="/katalog/motyw/dom/">Dom</a>, <a href="/katalog/motyw/ogrod/">Ogród</a>, <a href="/katalog/motyw/przestrzen/">Przestrzeń</a>, <a href="/katalog/motyw/gospodarz/">Gospodarz</a>, <a href="/katalog/motyw/gospodyni/">Gospodyni</a>, <a href="/katalog/motyw/sasiad/">Sąsiad</a>, <a href="/katalog/motyw/gosc/">Gość</a>, <a href="/katalog/motyw/bezdomnosc/">Bezdomność</a>, <a href="/katalog/motyw/bezpieczenstwo/">Bezpieczeństwo</a>, <a href="/katalog/motyw/niebezpieczenstwo/">Niebezpieczeństwo</a></span></li>
-
-                    <li>działania nieczyste
-                    <span class="subcategories"><a href="/katalog/motyw/szantaz/">Szantaż</a>, <a href="/katalog/motyw/zazdrosc/">Zazdrość</a>, <a href="/katalog/motyw/zdrada/">Zdrada</a>, <a href="/katalog/motyw/zemsta/">Zemsta</a>, <a href="/katalog/motyw/klamstwo/">Kłamstwo</a>, <a href="/katalog/motyw/falsz/">Fałsz</a>, <a href="/katalog/motyw/pozory/">Pozory</a>, <a href="/katalog/motyw/tajemnica/">Tajemnica</a></span></li>
-
-                    <li>dziedzictwo
-                    <span class="subcategories"><a href="/katalog/motyw/dziedzictwo/">Dziedzictwo</a>, <a href="/katalog/motyw/obyczaje/">Obyczaje</a>, <a href="/katalog/motyw/pamiec/">Pamięć</a>, <a href="/katalog/motyw/historia/">Historia</a>, <a href="/katalog/motyw/narod/">Naród</a>, <a href="/katalog/motyw/krew/">Krew</a>, <a href="/katalog/motyw/panstwo/">Państwo</a>, <a href="/katalog/motyw/obowiazek/">Obowiązek</a>, <a href="/katalog/motyw/patriota/">Patriota</a>, <a href="/katalog/motyw/ruiny/">Ruiny</a>, <a href="/katalog/motyw/dom/">Dom</a>, <a href="/katalog/motyw/przywodca/">Przywódca</a></span></li>
-
-                    <li>dźwięk
-                    <span class="subcategories"><a href="/katalog/motyw/cisza/">Cisza</a>, <a href="/katalog/motyw/muzyka/">Muzyka</a>, <a href="/katalog/motyw/spiew/">Śpiew</a>, <a href="/katalog/motyw/poezja/">Poezja</a></span></li>
-
-                    <li>edukacja
-                    <span class="subcategories"><a href="/katalog/motyw/uczen/">Uczeń</a>, <a href="/katalog/motyw/szkola/">Szkoła</a>, <a href="/katalog/motyw/nauczyciel/">Nauczyciel</a>, <a href="/katalog/motyw/nauczycielka/">Nauczycielka</a>, <a href="/katalog/motyw/nauka/">Nauka</a>, <a href="/katalog/motyw/wiedza/">Wiedza</a>, <a href="/katalog/motyw/dziecinstwo/">Dzieciństwo</a>, <a href="/katalog/motyw/mlodosc/">Młodość</a>, <a href="/katalog/motyw/doroslosc/">Dorosłość</a></span></li>
-
-                    <li>egzystencja ludzka
-                    <span class="subcategories"><a href="/katalog/motyw/kondycja-ludzka/">Kondycja ludzka</a>, <a href="/katalog/motyw/los/">Los</a>, <a href="/katalog/motyw/bladzenie/">Błądzenie</a>, <a href="/katalog/motyw/bunt/">Bunt</a>, <a href="/katalog/motyw/buntownik/">Buntownik</a>, <a href="/katalog/motyw/pielgrzym/">Pielgrzym</a>, <a href="/katalog/motyw/theatrum-mundi/">Theatrum mundi</a>, <a href="/katalog/motyw/zycie-jako-wedrowka/">Życie jako wędrówka</a>, <a href="/katalog/motyw/zycie-snem/">Życie snem</a></span></li>
-
-                    <li>etapy życia
-                    <span class="subcategories"><a href="/katalog/motyw/dziecinstwo/">Dzieciństwo</a>, <a href="/katalog/motyw/mlodosc/">Młodość</a>, <a href="/katalog/motyw/doroslosc/">Dorosłość</a>, <a href="/katalog/motyw/panna-mloda/">Panna młoda</a>, <a href="/katalog/motyw/zona/">Żona</a>, <a href="/katalog/motyw/maz/">Mąż</a>, <a href="/katalog/motyw/wdowa/">Wdowa</a>, <a href="/katalog/motyw/wdowiec/">Wdowiec</a>, <a href="/katalog/motyw/starosc/">Starość</a>, <a href="/katalog/motyw/czas/">Czas</a>, <a href="/katalog/motyw/przemijanie/">Przemijanie</a>, <a href="/katalog/motyw/przemiana/">Przemiana</a>, <a href="/katalog/motyw/kondycja-ludzka/">Kondycja ludzka</a></span></li>
-
-                    <li>fauna
-                    <span class="subcategories"><a href="/katalog/motyw/zwierzeta/">Zwierzęta</a>, <a href="/katalog/motyw/kot/">Kot</a>, <a href="/katalog/motyw/kon/">Koń</a>, <a href="/katalog/motyw/motyl/">Motyl</a>, <a href="/katalog/motyw/pies/">Pies</a>, <a href="/katalog/motyw/ptak/">Ptak</a>, <a href="/katalog/motyw/waz/">Wąż</a></span></li>
-
-                    <li>flora
-                    <span class="subcategories"><a href="/katalog/motyw/rosliny/">Rośliny</a>, <a href="/katalog/motyw/kwiaty/">Kwiaty</a>, <a href="/katalog/motyw/ogrod/">Ogród</a>, <a href="/katalog/motyw/drzewo/">Drzewo</a></span></li>
-
-                    <li>historie miłosne
-                    <span class="subcategories"><a href="/katalog/motyw/milosc/">Miłość</a>, <a href="/katalog/motyw/milosc-platoniczna/">Miłość platoniczna</a>, <a href="/katalog/motyw/milosc-romantyczna/">Miłość romantyczna</a>, <a href="/katalog/motyw/milosc-silniejsza-niz-smierc/">Miłość silniejsza niż śmierć</a>, <a href="/katalog/motyw/milosc-spelniona/">Miłość spełniona</a>, <a href="/katalog/motyw/milosc-tragiczna/">Miłość tragiczna</a>, <a href="/katalog/motyw/kochanek/">Kochanek</a>, <a href="/katalog/motyw/kochanek-romantyczny/">Kochanek romantyczny</a>, <a href="/katalog/motyw/flirt/">Flirt</a>, <a href="/katalog/motyw/pocalunek/">Pocałunek</a>, <a href="/katalog/motyw/pozadanie/">Pożądanie</a>, <a href="/katalog/motyw/list/">List</a>, <a href="/katalog/motyw/serce/">Serce</a>, <a href="/katalog/motyw/lzy/">Łzy</a>, <a href="/katalog/motyw/przysiega/">Przysięga</a>, <a href="/katalog/motyw/tesknota/">Tęsknota</a>, <a href="/katalog/motyw/wspomnienia/">Wspomnienia</a>, <a href="/katalog/motyw/zdrada/">Zdrada</a>, <a href="/katalog/motyw/rozczarowanie/">Rozczarowanie</a>, <a href="/katalog/motyw/rozpacz/">Rozpacz</a>, <a href="/katalog/motyw/malzenstwo/">Małżeństwo</a>, <a href="/katalog/motyw/slub/">Ślub</a>, <a href="/katalog/motyw/panna-mloda/">Panna młoda</a>, <a href="/katalog/motyw/przyjazn/">Przyjaźń</a></span></li>
-
-                    <li>jedzenie i picie
-                    <span class="subcategories"><a href="/katalog/motyw/glod/">Głód</a>, <a href="/katalog/motyw/bieda/">Bieda</a>, <a href="/katalog/motyw/chleb/">Chleb</a>, <a href="/katalog/motyw/jedzenie/">Jedzenie</a>, <a href="/katalog/motyw/uczta/">Uczta</a>, <a href="/katalog/motyw/wino/">Wino</a>, <a href="/katalog/motyw/alkohol/">Alkohol</a>, <a href="/katalog/motyw/pijanstwo/">Pijaństwo</a></span></li>
-
-                    <li>konflikty
-                    <span class="subcategories"><a href="/katalog/motyw/klotnia/">Kłótnia</a>, <a href="/katalog/motyw/bijatyka/">Bijatyka</a>, <a href="/katalog/motyw/sila/">Siła</a>, <a href="/katalog/motyw/przemoc/">Przemoc</a>, <a href="/katalog/motyw/krew/">Krew</a>, <a href="/katalog/motyw/konflikt/">Konflikt</a>, <a href="/katalog/motyw/walka/">Walka</a>, <a href="/katalog/motyw/wojna/">Wojna</a>, <a href="/katalog/motyw/powstanie/">Powstanie</a>, <a href="/katalog/motyw/bunt/">Bunt</a>, <a href="/katalog/motyw/rewolucja/">Rewolucja</a></span></li>
-
-                    <li>momenty graniczne
-                    <span class="subcategories"><a href="/katalog/motyw/narodziny/">Narodziny</a>, <a href="/katalog/motyw/smierc/">Śmierć</a>, <a href="/katalog/motyw/przemiana/">Przemiana</a>, <a href="/katalog/motyw/zmartwychwstanie/">Zmartwychwstanie</a></span></li>
-
-                    <li>nadużycie władzy
-                    <span class="subcategories"><a href="/katalog/motyw/wladza/">Władza</a>, <a href="/katalog/motyw/przemoc/">Przemoc</a>, <a href="/katalog/motyw/strach/">Strach</a>, <a href="/katalog/motyw/kara/">Kara</a></span></li>
-
-                    <li>nacjonalizm
-                    <span class="subcategories"><a href="/katalog/motyw/polak/">Polak</a>, <a href="/katalog/motyw/niemiec/">Niemiec</a>, <a href="/katalog/motyw/rosjanin/">Rosjanin</a>, <a href="/katalog/motyw/car/">Car</a>, <a href="/katalog/motyw/zyd/">Żyd</a>, <a href="/katalog/motyw/narod/">Naród</a>, <a href="/katalog/motyw/obcy/">Obcy</a>, <a href="/katalog/motyw/wrog/">Wróg</a>, <a href="/katalog/motyw/niebezpieczenstwo/">Niebezpieczeństwo</a></span></li>
-
-                    <li>nastroje melancholijne
-                    <span class="subcategories"><a href="/katalog/motyw/nuda/">Nuda</a>, <a href="/katalog/motyw/melancholia/">Melancholia</a>, <a href="/katalog/motyw/ruiny/">Ruiny</a>, <a href="/katalog/motyw/wspomnienia/">Wspomnienia</a>, <a href="/katalog/motyw/marzenie/">Marzenie</a>, <a href="/katalog/motyw/przemijanie/">Przemijanie</a>, <a href="/katalog/motyw/tesknota/">Tęsknota</a>, <a href="/katalog/motyw/rozpacz/">Rozpacz</a>, <a href="/katalog/motyw/smierc/">Śmierć</a>, <a href="/katalog/motyw/los/">Los</a>, <a href="/katalog/motyw/kondycja-ludzka/">Kondycja ludzka</a></span></li>
-
-                    <li>nastroje rewolucyjne
-                    <span class="subcategories"><a href="/katalog/motyw/rewolucja/">Rewolucja</a>, <a href="/katalog/motyw/walka-klas/">Walka klas</a>, <a href="/katalog/motyw/robotnik/">Robotnik</a>, <a href="/katalog/motyw/chlop/">Chłop</a>, <a href="/katalog/motyw/pozycja-spoleczna/">Pozycja społeczna</a>, <a href="/katalog/motyw/wladza/">Władza</a>, <a href="/katalog/motyw/przemoc/">Przemoc</a>, <a href="/katalog/motyw/sprawiedliwosc/">Sprawiedliwość</a></span></li>
-
-                    <li>podporządkowanie
-                    <span class="subcategories"><a href="/katalog/motyw/sluga/">Sługa</a>, <a href="/katalog/motyw/pan/">Pan</a>, <a href="/katalog/motyw/praca/">Praca</a>, <a href="/katalog/motyw/wladza/">Władza</a>, <a href="/katalog/motyw/obyczaje/">Obyczaje</a></span></li>
-
-                    <li>pokrewieństwo
-                    <span class="subcategories"><a href="/katalog/motyw/rodzina/">Rodzina</a>, <a href="/katalog/motyw/ojciec/">Ojciec</a>, <a href="/katalog/motyw/matka/">Matka</a>, <a href="/katalog/motyw/dziecko/">Dziecko</a>, <a href="/katalog/motyw/syn/">Syn</a>, <a href="/katalog/motyw/corka/">Córka</a>, <a href="/katalog/motyw/brat/">Brat</a>, <a href="/katalog/motyw/siostra/">Siostra</a>, <a href="/katalog/motyw/sierota/">Sierota</a>, <a href="/katalog/motyw/dziedzictwo/">Dziedzictwo</a>, <a href="/katalog/motyw/obowiazek/">Obowiązek</a>, <a href="/katalog/motyw/zdrada/">Zdrada</a></span></li>
-
-                    <li>polityczny obraz świata
-                    <span class="subcategories"><a href="/katalog/motyw/panstwo/">Państwo</a>, <a href="/katalog/motyw/obowiazek/">Obowiązek</a>, <a href="/katalog/motyw/cnota/">Cnota</a>, <a href="/katalog/motyw/obywatel/">Obywatel</a>, <a href="/katalog/motyw/patriota/">Patriota</a>, <a href="/katalog/motyw/ojczyzna/">Ojczyzna</a>, <a href="/katalog/motyw/narod/">Naród</a>, <a href="/katalog/motyw/przywodca/">Przywódca</a>, <a href="/katalog/motyw/wladza/">Władza</a>, <a href="/katalog/motyw/urzednik/">Urzędnik</a>, <a href="/katalog/motyw/krol/">Król</a>, <a href="/katalog/motyw/rycerz/">Rycerz</a>, <a href="/katalog/motyw/zolnierz/">Żołnierz</a>, <a href="/katalog/motyw/wojna/">Wojna</a>, <a href="/katalog/motyw/wrog/">Wróg</a>, <a href="/katalog/motyw/zwyciestwo/">Zwycięstwo</a>, <a href="/katalog/motyw/walka/">Walka</a>, <a href="/katalog/motyw/sila/">Siła</a>, <a href="/katalog/motyw/historia/">Historia</a>, <a href="/katalog/motyw/powstanie/">Powstanie</a>, <a href="/katalog/motyw/smierc-bohaterska/">Śmierć bohaterska</a>, <a href="/katalog/motyw/slawa/">Sława</a>, <a href="/katalog/motyw/rewolucja/">Rewolucja</a>, <a href="/katalog/motyw/sad/">Sąd</a>, <a href="/katalog/motyw/zdrada/">Zdrada</a></span></li>
-
-                    <li>pory roku
-                    <span class="subcategories"><a href="/katalog/motyw/wiosna/">Wiosna</a>, <a href="/katalog/motyw/lato/">Lato</a>, <a href="/katalog/motyw/jesien/">Jesień</a>, <a href="/katalog/motyw/zima/">Zima</a>, <a href="/katalog/motyw/czas/">Czas</a>, <a href="/katalog/motyw/przemijanie/">Przemijanie</a></span></li>
-
-                    <li>posiadanie
-                    <span class="subcategories"><a href="/katalog/motyw/pieniadz/">Pieniądz</a>, <a href="/katalog/motyw/handel/">Handel</a>, <a href="/katalog/motyw/korzysc/">Korzyść</a>, <a href="/katalog/motyw/chciwosc/">Chciwość</a>, <a href="/katalog/motyw/bieda/">Bieda</a>, <a href="/katalog/motyw/bogactwo/">Bogactwo</a>, <a href="/katalog/motyw/skapiec/">Skąpiec</a>, <a href="/katalog/motyw/wlasnosc/">Własność</a>, <a href="/katalog/motyw/zlodziej/">Złodziej</a>, <a href="/katalog/motyw/zebrak/">Żebrak</a></span></li>
-
-                    <li>poświęcenie
-                    <span class="subcategories"><a href="/katalog/motyw/poswiecenie/">Poświęcenie</a>, <a href="/katalog/motyw/ofiara/">Ofiara</a>, <a href="/katalog/motyw/prometeusz/">Prometeusz</a>, <a href="/katalog/motyw/milosierdzie/">Miłosierdzie</a>, <a href="/katalog/motyw/chrystus/">Chrystus</a>, <a href="/katalog/motyw/zbawienie/">Zbawienie</a></span></li>
-
-                    <li>poznanie
-                    <span class="subcategories"><a href="/katalog/motyw/filozof/">Filozof</a>, <a href="/katalog/motyw/madrosc/">Mądrość</a>, <a href="/katalog/motyw/medrzec/">Mędrzec</a>, <a href="/katalog/motyw/glupiec/">Głupiec</a>, <a href="/katalog/motyw/glupota/">Głupota</a>, <a href="/katalog/motyw/rozum/">Rozum</a>, <a href="/katalog/motyw/wiedza/">Wiedza</a>, <a href="/katalog/motyw/prawda/">Prawda</a>, <a href="/katalog/motyw/falsz/">Fałsz</a></span></li>
-
-                    <li>poznanie alternatywne
-                    <span class="subcategories"><a href="/katalog/motyw/szaleniec/">Szaleniec</a>, <a href="/katalog/motyw/szalenstwo/">Szaleństwo</a>, <a href="/katalog/motyw/prawda/">Prawda</a>, <a href="/katalog/motyw/pozory/">Pozory</a>, <a href="/katalog/motyw/obraz-swiata/">Obraz świata</a>, <a href="/katalog/motyw/serce/">Serce</a>, <a href="/katalog/motyw/wiedza/">Wiedza</a>, <a href="/katalog/motyw/madrosc/">Mądrość</a>, <a href="/katalog/motyw/dusza/">Dusza</a>, <a href="/katalog/motyw/duch/">Duch</a>, <a href="/katalog/motyw/cialo/">Ciało</a></span></li>
-
-                    <li>praca
-                    <span class="subcategories"><a href="/katalog/motyw/praca/">Praca</a>, <a href="/katalog/motyw/sluga/">Sługa</a></span></li>
-
-                    <li>przyroda
-                    <span class="subcategories"><a href="/katalog/motyw/natura/">Natura</a>, <a href="/katalog/motyw/zywioly/">Żywioły</a>, <a href="/katalog/motyw/ogien/">Ogień</a>, <a href="/katalog/motyw/ziemia/">Ziemia</a>, <a href="/katalog/motyw/wiatr/">Wiatr</a>, <a href="/katalog/motyw/woda/">Woda</a>, <a href="/katalog/motyw/wiosna/">Wiosna</a>, <a href="/katalog/motyw/lato/">Lato</a>, <a href="/katalog/motyw/jesien/">Jesień</a>, <a href="/katalog/motyw/zima/">Zima</a>, <a href="/katalog/motyw/przemijanie/">Przemijanie</a>, <a href="/katalog/motyw/slonce/">Słońce</a>, <a href="/katalog/motyw/ksiezyc/">Księżyc</a>, <a href="/katalog/motyw/gwiazda/">Gwiazda</a>, <a href="/katalog/motyw/oblok/">Obłok</a>, <a href="/katalog/motyw/noc/">Noc</a>, <a href="/katalog/motyw/swiatlo/">Światło</a>, <a href="/katalog/motyw/gora/">Góra</a>, <a href="/katalog/motyw/rzeka/">Rzeka</a>, <a href="/katalog/motyw/morze/">Morze</a>, <a href="/katalog/motyw/burza/">Burza</a>, <a href="/katalog/motyw/deszcz/">Deszcz</a>, <a href="/katalog/motyw/bloto/">Błoto</a>, <a href="/katalog/motyw/przyroda-nieozywiona/">Przyroda nieożywiona</a>, <a href="/katalog/motyw/rosliny/">Rośliny</a>, <a href="/katalog/motyw/kwiaty/">Kwiaty</a>, <a href="/katalog/motyw/ogrod/">Ogród</a>, <a href="/katalog/motyw/sielanka/">Sielanka</a>, <a href="/katalog/motyw/raj/">Raj</a>, <a href="/katalog/motyw/jablko/">Jabłko</a>, <a href="/katalog/motyw/drzewo/">Drzewo</a>, <a href="/katalog/motyw/zwierzeta/">Zwierzęta</a>, <a href="/katalog/motyw/ptak/">Ptak</a>, <a href="/katalog/motyw/motyl/">Motyl</a>, <a href="/katalog/motyw/kot/">Kot</a>, <a href="/katalog/motyw/kon/">Koń</a>, <a href="/katalog/motyw/pies/">Pies</a>, <a href="/katalog/motyw/waz/">Wąż</a>, <a href="/katalog/motyw/potwor/">Potwór</a></span></li>
-
-                    <li>regulacja postępowania
-                    <span class="subcategories"><a href="/katalog/motyw/cnota/">Cnota</a>, <a href="/katalog/motyw/sprawiedliwosc/">Sprawiedliwość</a>, <a href="/katalog/motyw/obowiazek/">Obowiązek</a></span></li>
-
-                    <li>role społeczne
-                    <span class="subcategories"><a href="/katalog/motyw/kobieta/">Kobieta</a>, <a href="/katalog/motyw/mezczyzna/">Mężczyzna</a>, <a href="/katalog/motyw/maz/">Mąż</a>, <a href="/katalog/motyw/zona/">Żona</a>, <a href="/katalog/motyw/matka/">Matka</a>, <a href="/katalog/motyw/ojciec/">Ojciec</a>, <a href="/katalog/motyw/dziecko/">Dziecko</a>, <a href="/katalog/motyw/syn/">Syn</a>, <a href="/katalog/motyw/corka/">Córka</a>, <a href="/katalog/motyw/brat/">Brat</a>, <a href="/katalog/motyw/siostra/">Siostra</a>, <a href="/katalog/motyw/wdowa/">Wdowa</a>, <a href="/katalog/motyw/wdowiec/">Wdowiec</a>, <a href="/katalog/motyw/nauczyciel/">Nauczyciel</a>, <a href="/katalog/motyw/nauczycielka/">Nauczycielka</a>, <a href="/katalog/motyw/uczen/">Uczeń</a>, <a href="/katalog/motyw/poeta/">Poeta</a>, <a href="/katalog/motyw/literat/">Literat</a>, <a href="/katalog/motyw/lekarz/">Lekarz</a>, <a href="/katalog/motyw/sedzia/">Sędzia</a>, <a href="/katalog/motyw/krol/">Król</a>, <a href="/katalog/motyw/przywodca/">Przywódca</a>, <a href="/katalog/motyw/zolnierz/">Żołnierz</a>, <a href="/katalog/motyw/urzednik/">Urzędnik</a>, <a href="/katalog/motyw/filozof/">Filozof</a>, <a href="/katalog/motyw/ksiadz/">Ksiądz</a></span></li>
-
-                    <li>rycerskie czasy
-                    <span class="subcategories"><a href="/katalog/motyw/zamek/">Zamek</a>, <a href="/katalog/motyw/ruiny/">Ruiny</a>, <a href="/katalog/motyw/rycerz/">Rycerz</a>, <a href="/katalog/motyw/honor/">Honor</a>, <a href="/katalog/motyw/wiernosc/">Wierność</a>, <a href="/katalog/motyw/obowiazek/">Obowiązek</a>, <a href="/katalog/motyw/walka/">Walka</a>, <a href="/katalog/motyw/krol/">Król</a>, <a href="/katalog/motyw/dama/">Dama</a></span></li>
-
-                    <li>rzeczywistość nadprzyrodzona
-                    <span class="subcategories"><a href="/katalog/motyw/bog/">Bóg</a>, <a href="/katalog/motyw/chrystus/">Chrystus</a>, <a href="/katalog/motyw/matka-boska/">Matka Boska</a>, <a href="/katalog/motyw/aniol/">Anioł</a>, <a href="/katalog/motyw/szatan/">Szatan</a>, <a href="/katalog/motyw/diabel/">Diabeł</a>, <a href="/katalog/motyw/duch/">Duch</a>, <a href="/katalog/motyw/dusza/">Dusza</a>, <a href="/katalog/motyw/wampir/">Wampir</a>, <a href="/katalog/motyw/upior/">Upiór</a>, <a href="/katalog/motyw/czary/">Czary</a>, <a href="/katalog/motyw/czarownica/">Czarownica</a></span></li>
-
-                    <li>struktura społeczna
-                    <span class="subcategories"><a href="/katalog/motyw/chlop/">Chłop</a>, <a href="/katalog/motyw/mieszczanin/">Mieszczanin</a>, <a href="/katalog/motyw/zyd/">Żyd</a>, <a href="/katalog/motyw/szlachcic/">Szlachcic</a>, <a href="/katalog/motyw/ksiadz/">Ksiądz</a>, <a href="/katalog/motyw/robotnik/">Robotnik</a>, <a href="/katalog/motyw/krol/">Król</a>, <a href="/katalog/motyw/przywodca/">Przywódca</a>, <a href="/katalog/motyw/pozycja-spoleczna/">Pozycja społeczna</a>, <a href="/katalog/motyw/dworek/">Dworek</a>, <a href="/katalog/motyw/obyczaje/">Obyczaje</a></span></li>
-
-                    <li>sarmatyzm
-                    <span class="subcategories"><a href="/katalog/motyw/polak/">Polak</a>, <a href="/katalog/motyw/sarmata/">Sarmata</a>, <a href="/katalog/motyw/szlachcic/">Szlachcic</a>, <a href="/katalog/motyw/przedmurze-chrzescijanstwa/">Przedmurze chrześcijaństwa</a>, <a href="/katalog/motyw/matka-boska/">Matka Boska</a>, <a href="/katalog/motyw/religia/">Religia</a></span></li>
-
-                    <li>sprawowanie władzy
-                    <span class="subcategories"><a href="/katalog/motyw/urzednik/">Urzędnik</a>, <a href="/katalog/motyw/panstwo/">Państwo</a>, <a href="/katalog/motyw/wladza/">Władza</a>, <a href="/katalog/motyw/przemoc/">Przemoc</a>, <a href="/katalog/motyw/sad/">Sąd</a>, <a href="/katalog/motyw/kara/">Kara</a>, <a href="/katalog/motyw/wiezienie/">Więzienie</a></span></li>
-
-                    <li>śmierć
-                    <span class="subcategories"><a href="/katalog/motyw/smierc/">Śmierć</a>, <a href="/katalog/motyw/danse-macabre/">Danse macabre</a>, <a href="/katalog/motyw/gotycyzm/">Gotycyzm</a>, <a href="/katalog/motyw/grob/">Grób</a>, <a href="/katalog/motyw/otchlan/">Otchłań</a>, <a href="/katalog/motyw/pogrzeb/">Pogrzeb</a>, <a href="/katalog/motyw/samobojstwo/">Samobójstwo</a>, <a href="/katalog/motyw/krew/">Krew</a>, <a href="/katalog/motyw/trup/">Trup</a>, <a href="/katalog/motyw/morderstwo/">Morderstwo</a>, <a href="/katalog/motyw/zaloba/">Żałoba</a>, <a href="/katalog/motyw/zmartwychwstanie/">Zmartwychwstanie</a>, <a href="/katalog/motyw/melancholia/">Melancholia</a>, <a href="/katalog/motyw/vanitas/">Vanitas</a>, <a href="/katalog/motyw/los/">Los</a>, <a href="/katalog/motyw/kondycja-ludzka/">Kondycja ludzka</a></span></li>
-
-                    <li>środowisko miejskie i wiejskie
-                    <span class="subcategories"><a href="/katalog/motyw/miasto/">Miasto</a>, <a href="/katalog/motyw/warszawa/">Warszawa</a>, <a href="/katalog/motyw/mieszczanin/">Mieszczanin</a>, <a href="/katalog/motyw/handel/">Handel</a>, <a href="/katalog/motyw/robotnik/">Robotnik</a>, <a href="/katalog/motyw/zyd/">Żyd</a>, <a href="/katalog/motyw/wies/">Wieś</a>, <a href="/katalog/motyw/sielanka/">Sielanka</a>, <a href="/katalog/motyw/chlop/">Chłop</a>, <a href="/katalog/motyw/ogrod/">Ogród</a>, <a href="/katalog/motyw/natura/">Natura</a>, <a href="/katalog/motyw/przestrzen/">Przestrzeń</a></span></li>
-
-                    <li>świat w perspektywie etycznej
-                    <span class="subcategories"><a href="/katalog/motyw/kuszenie/">Kuszenie</a>, <a href="/katalog/motyw/zwatpienie/">Zwątpienie</a>, <a href="/katalog/motyw/wyrzuty-sumienia/">Wyrzuty sumienia</a>, <a href="/katalog/motyw/wina/">Wina</a>, <a href="/katalog/motyw/grzech/">Grzech</a>, <a href="/katalog/motyw/kara/">Kara</a>, <a href="/katalog/motyw/los/">Los</a>, <a href="/katalog/motyw/koniec-swiata/">Koniec świata</a>, <a href="/katalog/motyw/wieza-babel/">Wieża Babel</a>, <a href="/katalog/motyw/zbawienie/">Zbawienie</a>, <a href="/katalog/motyw/zaswiaty/">Zaświaty</a>, <a href="/katalog/motyw/czysciec/">Czyściec</a>, <a href="/katalog/motyw/raj/">Raj</a>, <a href="/katalog/motyw/niesmiertelnosc/">Nieśmiertelność</a>, <a href="/katalog/motyw/przysiega/">Przysięga</a>, <a href="/katalog/motyw/przeklenstwo/">Przekleństwo</a>, <a href="/katalog/motyw/religia/">Religia</a>, <a href="/katalog/motyw/obrzedy/">Obrzędy</a>, <a href="/katalog/motyw/modlitwa/">Modlitwa</a>, <a href="/katalog/motyw/niedziela/">Niedziela</a>, <a href="/katalog/motyw/przedmurze-chrzescijanstwa/">Przedmurze chrześcijaństwa</a>, <a href="/katalog/motyw/ksiadz/">Ksiądz</a>, <a href="/katalog/motyw/poboznosc/">Pobożność</a>, <a href="/katalog/motyw/swietoszek/">Świętoszek</a>, <a href="/katalog/motyw/swiety/">Święty</a>, <a href="/katalog/motyw/wierzenia/">Wierzenia</a>, <a href="/katalog/motyw/zabobony/">Zabobony</a></span></li>
-
-                    <li>świętowanie
-                    <span class="subcategories"><a href="/katalog/motyw/wesele/">Wesele</a>, <a href="/katalog/motyw/uczta/">Uczta</a>, <a href="/katalog/motyw/jedzenie/">Jedzenie</a>, <a href="/katalog/motyw/pijanstwo/">Pijaństwo</a>, <a href="/katalog/motyw/zabawa/">Zabawa</a>, <a href="/katalog/motyw/taniec/">Taniec</a>, <a href="/katalog/motyw/muzyka/">Muzyka</a>, <a href="/katalog/motyw/smiech/">Śmiech</a>, <a href="/katalog/motyw/spiew/">Śpiew</a>, <a href="/katalog/motyw/bijatyka/">Bijatyka</a>, <a href="/katalog/motyw/obyczaje/">Obyczaje</a>, <a href="/katalog/motyw/wierzenia/">Wierzenia</a>, <a href="/katalog/motyw/zabobony/">Zabobony</a></span></li>
-
-                    <li>tożsamość pozorna i podwójna
-                    <span class="subcategories"><a href="/katalog/motyw/portret/">Portret</a>, <a href="/katalog/motyw/lustro/">Lustro</a>, <a href="/katalog/motyw/cien/">Cień</a>, <a href="/katalog/motyw/sobowtor/">Sobowtór</a>, <a href="/katalog/motyw/maska/">Maska</a>, <a href="/katalog/motyw/przebranie/">Przebranie</a>, <a href="/katalog/motyw/stroj/">Strój</a>, <a href="/katalog/motyw/przemiana/">Przemiana</a></span></li>
-
-                    <li>trunki
-                    <span class="subcategories"><a href="/katalog/motyw/alkohol/">Alkohol</a>, <a href="/katalog/motyw/wino/">Wino</a>, <a href="/katalog/motyw/carpe-diem/">Carpe diem</a>, <a href="/katalog/motyw/pijanstwo/">Pijaństwo</a>, <a href="/katalog/motyw/karczma/">Karczma</a>, <a href="/katalog/motyw/obyczaje/">Obyczaje</a></span></li>
-
-                    <li>typy bohaterów
-                    <span class="subcategories"><a href="/katalog/motyw/samotnik/">Samotnik</a>, <a href="/katalog/motyw/buntownik/">Buntownik</a>, <a href="/katalog/motyw/pielgrzym/">Pielgrzym</a>, <a href="/katalog/motyw/szaleniec/">Szaleniec</a>, <a href="/katalog/motyw/filozof/">Filozof</a>, <a href="/katalog/motyw/medrzec/">Mędrzec</a>, <a href="/katalog/motyw/obcy/">Obcy</a>, <a href="/katalog/motyw/przywodca/">Przywódca</a>, <a href="/katalog/motyw/realista/">Realista</a>, <a href="/katalog/motyw/idealista/">Idealista</a>, <a href="/katalog/motyw/spolecznik/">Społecznik</a>, <a href="/katalog/motyw/syzyf/">Syzyf</a>, <a href="/katalog/motyw/prometeusz/">Prometeusz</a>, <a href="/katalog/motyw/sluga/">Sługa</a>, <a href="/katalog/motyw/uczen/">Uczeń</a></span></li>
-
-                    <li>ukrywanie/ujawnianie
-                    <span class="subcategories"><a href="/katalog/motyw/tajemnica/">Tajemnica</a>, <a href="/katalog/motyw/przysiega/">Przysięga</a>, <a href="/katalog/motyw/zdrada/">Zdrada</a>, <a href="/katalog/motyw/klamstwo/">Kłamstwo</a>, <a href="/katalog/motyw/falsz/">Fałsz</a></span></li>
-
-                    <li>upływ czasu
-                    <span class="subcategories"><a href="/katalog/motyw/wspomnienia/">Wspomnienia</a>, <a href="/katalog/motyw/marzenie/">Marzenie</a>, <a href="/katalog/motyw/pamiec/">Pamięć</a>, <a href="/katalog/motyw/przemijanie/">Przemijanie</a>, <a href="/katalog/motyw/czas/">Czas</a>, <a href="/katalog/motyw/smierc/">Śmierć</a></span></li>
-
-                    <li>widzenie
-                    <span class="subcategories"><a href="/katalog/motyw/oko/">Oko</a>, <a href="/katalog/motyw/wzrok/">Wzrok</a>, <a href="/katalog/motyw/sen/">Sen</a>, <a href="/katalog/motyw/marzenie/">Marzenie</a>, <a href="/katalog/motyw/wizja/">Wizja</a>, <a href="/katalog/motyw/przeczucie/">Przeczucie</a>, <a href="/katalog/motyw/duch/">Duch</a>, <a href="/katalog/motyw/dusza/">Dusza</a>, <a href="/katalog/motyw/proroctwo/">Proroctwo</a></span></li>
-
-                    <li>wina i przebaczenie
-                    <span class="subcategories"><a href="/katalog/motyw/grzech/">Grzech</a>, <a href="/katalog/motyw/wina/">Wina</a>, <a href="/katalog/motyw/wyrzuty-sumienia/">Wyrzuty sumienia</a>, <a href="/katalog/motyw/syn-marnotrawny/">Syn marnotrawny</a>, <a href="/katalog/motyw/pokora/">Pokora</a>, <a href="/katalog/motyw/przemiana/">Przemiana</a>, <a href="/katalog/motyw/milosierdzie/">Miłosierdzie</a>, <a href="/katalog/motyw/zbawienie/">Zbawienie</a></span></li>
-
-                    <li>wizerunki kobiety
-                    <span class="subcategories"><a href="/katalog/motyw/kobieta/">Kobieta</a>, <a href="/katalog/motyw/kobieta-demoniczna/">Kobieta demoniczna</a>, <a href="/katalog/motyw/kobieta-upadla/">Kobieta „upadła”</a>, <a href="/katalog/motyw/czarownica/">Czarownica</a>, <a href="/katalog/motyw/dama/">Dama</a>, <a href="/katalog/motyw/proznosc/">Próżność</a>, <a href="/katalog/motyw/cialo/">Ciało</a>, <a href="/katalog/motyw/corka/">Córka</a>, <a href="/katalog/motyw/siostra/">Siostra</a>, <a href="/katalog/motyw/zona/">Żona</a>, <a href="/katalog/motyw/matka/">Matka</a></span></li>
-
-                    <li>w kręgu sztuki
-                    <span class="subcategories"><a href="/katalog/motyw/artysta/">Artysta</a>, <a href="/katalog/motyw/sztuka/">Sztuka</a>, <a href="/katalog/motyw/literat/">Literat</a>, <a href="/katalog/motyw/poeta/">Poeta</a>, <a href="/katalog/motyw/poetka/">Poetka</a>, <a href="/katalog/motyw/poezja/">Poezja</a>, <a href="/katalog/motyw/muzyka/">Muzyka</a>, <a href="/katalog/motyw/taniec/">Taniec</a>, <a href="/katalog/motyw/spiew/">Śpiew</a>, <a href="/katalog/motyw/teatr/">Teatr</a>, <a href="/katalog/motyw/ksiazka/">Książka</a>, <a href="/katalog/motyw/slowo/">Słowo</a>, <a href="/katalog/motyw/slawa/">Sława</a>, <a href="/katalog/motyw/niesmiertelnosc/">Nieśmiertelność</a></span></li>
-
-                    <li>wychodźstwo i uwięzienie
-                    <span class="subcategories"><a href="/katalog/motyw/emigrant/">Emigrant</a>, <a href="/katalog/motyw/tesknota/">Tęsknota</a>, <a href="/katalog/motyw/obcy/">Obcy</a>, <a href="/katalog/motyw/wiezienie/">Więzienie</a>, <a href="/katalog/motyw/przemiana/">Przemiana</a>, <a href="/katalog/motyw/wiezien/">Więzień</a>, <a href="/katalog/motyw/wolnosc/">Wolność</a>, <a href="/katalog/motyw/niewola/">Niewola</a>, <a href="/katalog/motyw/wygnanie/">Wygnanie</a>, <a href="/katalog/motyw/zeslaniec/">Zesłaniec</a>, <a href="/katalog/motyw/zbrodnia/">Zbrodnia</a>, <a href="/katalog/motyw/zbrodniarz/">Zbrodniarz</a></span></li>
-
-                    <li>zagrożenie
-                    <span class="subcategories"><a href="/katalog/motyw/niebezpieczenstwo/">Niebezpieczeństwo</a>, <a href="/katalog/motyw/trucizna/">Trucizna</a>, <a href="/katalog/motyw/falsz/">Fałsz</a>, <a href="/katalog/motyw/zdrada/">Zdrada</a>, <a href="/katalog/motyw/choroba/">Choroba</a>, <a href="/katalog/motyw/smierc/">Śmierć</a></span></li>
-
-                    <li>zajęcia i zawody
-                    <span class="subcategories"><a href="/katalog/motyw/lekarz/">Lekarz</a>, <a href="/katalog/motyw/prawnik/">Prawnik</a>, <a href="/katalog/motyw/sedzia/">Sędzia</a>, <a href="/katalog/motyw/nauczyciel/">Nauczyciel</a>, <a href="/katalog/motyw/nauczycielka/">Nauczycielka</a>, <a href="/katalog/motyw/literat/">Literat</a>, <a href="/katalog/motyw/poeta/">Poeta</a>, <a href="/katalog/motyw/poetka/">Poetka</a>, <a href="/katalog/motyw/artysta/">Artysta</a>, <a href="/katalog/motyw/zolnierz/">Żołnierz</a>, <a href="/katalog/motyw/urzednik/">Urzędnik</a>, <a href="/katalog/motyw/sluga/">Sługa</a>, <a href="/katalog/motyw/rycerz/">Rycerz</a></span></li>
-
-                    <li>życie dworskie
-                    <span class="subcategories"><a href="/katalog/motyw/dworzanin/">Dworzanin</a>, <a href="/katalog/motyw/dwor/">Dwór</a>, <a href="/katalog/motyw/dama/">Dama</a>, <a href="/katalog/motyw/fircyk/">Fircyk</a>, <a href="/katalog/motyw/blazen/">Błazen</a>, <a href="/katalog/motyw/krol/">Król</a>, <a href="/katalog/motyw/urzednik/">Urzędnik</a>, <a href="/katalog/motyw/sluga/">Sługa</a>, <a href="/katalog/motyw/grzecznosc/">Grzeczność</a>, <a href="/katalog/motyw/obyczaje/">Obyczaje</a>, <a href="/katalog/motyw/pochlebstwo/">Pochlebstwo</a></span></li>
-
-                    <li>żywioły
-                    <span class="subcategories"><a href="/katalog/motyw/zywioly/">Żywioły</a>, <a href="/katalog/motyw/ogien/">Ogień</a>, <a href="/katalog/motyw/ziemia/">Ziemia</a>, <a href="/katalog/motyw/wiatr/">Wiatr</a>, <a href="/katalog/motyw/woda/">Woda</a>, <a href="/katalog/motyw/przestrzen/">Przestrzeń</a></span></li>
-                    </ol>
-                    <p><a href="#" class="hide-all-tags">{% trans "Hide" %}</a></p>
-                </div>
-            </div>
-            <div class="clearboth"></div>
-        </div>
-    </div>
-    <div class="clearboth"></div>
-
-    <div id="site-info">
-        <div id="latest-blog-posts">
-            <h2>{% trans "News" %}</h2>
-            {% cache 1800 latest-blog-posts %}
-            {% latest_blog_posts "http://nowoczesnapolska.org.pl/category/wolne-lektury/feed/" %}
-            {% endcache %}
-            <p class="see-more"><a href="http://www.nowoczesnapolska.org.pl/">{% trans "See our blog" %} ⇒</a></p>
-        </div>
-        <div id="you-can-help">
-            <h2>{% trans "You can help us!" %}</h2>
-            <ul>
-                <li>{% trans "Become a volunteer &ndash; an editor, developer or translator." %}</li>
-                <li>{% trans "Gain new skills and experience." %}</li>
-                <li>{% trans "Join an open project of creating an innovative online library." %}</li>
-            </ul>
-            <p class="see-more"><a href="{% url help_us %}" title="{% trans "You can help us!" %}">{% trans "You can help us!" %} ⇒</a></p>
-        </div>
-        <div id="about-us">
-            <h2>{% trans "About us" %}</h2>
-            <p>
-               {% blocktrans %}
-                       Internet library with school readings “Wolne Lektury” (<a href="http://wolnelektury.pl">www.wolnelektury.pl</a>) is a project made by Modern Poland Foundation. It started in 2007 and shares school readings, which are recommended by Ministry of National Education and are in public domain.
-                       {% endblocktrans %}
-            </p>
-            <p class="see-more"><a href="{% url about_us %}" title="{% trans "About us" %}">{% trans "See more" %} ⇒</a></p>
-        </div>
-    </div>
-{% endblock %}
-
-
-{% block add_footer %}
-
-<p>
-{% blocktrans %}
-Portions of this page are modifications based on work created and <a href="http://code.google.com/policies.html">shared by Google</a> and used
-according to terms described in the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
-3.0 Attribution License</a>.
-{% endblocktrans %}
-</p>
-
-{% endblock %}
diff --git a/wolnelektury/templates/info/base.html b/wolnelektury/templates/info/base.html
deleted file mode 100644 (file)
index ea15136..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-{% extends "base.html" %}
-{% load i18n %}
-{% load chunks %}
-
-{% block title %}{{ object.page_title }}{% endblock %}
-
-{% block metadescription %}{{ object.left_column|striptags|truncatewords:10 }}{% endblock %}
-
-{% block body %}
-    <h1>{{ object.title }}</h1>
-    <form action="{% url search %}" method="get" accept-charset="utf-8" id="search-form">
-        <p>{{ form.q }} <input type="submit" value="{% trans "Search" %}" /> <strong>{%trans "or" %}</strong> <a href="{% url main_page %}">{% trans "return to the main page" %}</a></p>
-    </form>
-
-    {% autoescape off %}
-    <div class="column-left">
-       {{ object.left_column }}
-    </div>
-    <div class="column-right">
-       {{ object.right_column }}
-    </div>
-       {% endautoescape %}
-{% endblock %}
index 92c1fd0..415b13a 100644 (file)
@@ -19,4 +19,4 @@ or transferring 1&#37; of your income tax</a>.
 <p>{% blocktrans %}Become an editor of Wolne Lektury! Find out if
 we're currently working on a reading you're looking for and prepare
 a publication by yourself by logging into the Editorial Platform.{% endblocktrans %}
-<a href='{% url help_us %}'>{% trans "More..." %}</a></p>
+<a href='{% url infopage 'mozesz-nam-pomoc' %}'>{% trans "More..." %}</a></p>
diff --git a/wolnelektury/templates/main_page.html b/wolnelektury/templates/main_page.html
new file mode 100755 (executable)
index 0000000..56dc7e1
--- /dev/null
@@ -0,0 +1,105 @@
+{% extends "base.html" %}
+{% load cache i18n catalogue_tags infopages_tags %}
+
+
+{% block body %}
+
+    <blockquote id="big-cite">
+        <a href='http://google.com'>
+        <h2 class="mono">Jarosław Lipszyc poleca:</h2>
+        <p id="big-cite-text">Dobranoc, obróć jeszcze raz na mnie oczęta,<br/>
+        (…) Daj mi pierś ucałować<br/>
+        Dobranoc, zapięta.</p>
+        <p class="mono" id="big-cite-source">Adam Mickiewicz, Dziady część III</p>
+        </a>
+    </blockquote>
+
+
+    {% spaceless %}
+
+
+    <div id="promo-box">
+        <div class="grid-line" id="promo-box-header">
+            <h2 class="mono">Trwa konkurs</h2>
+        </div>
+        <div id="promo-box-body">
+            <p id="promo-box-title" class="mono">Konkurs poezji automatycznej</p>
+            <p>Znacie Leśmianatora? To niewielki skrypt miskujący na życzenie
+            wiersze z Wolnych Lektur.</p>
+        </div>
+    </div>
+
+
+    <h2 class="grid-line"><span class="mono">Ostatnie publikacje</span></h2>
+        {% for book in last_published %}
+            {{ book.mini_box }}
+        {% endfor %}
+
+    <div class="infopages-box">
+        <h2 class="grid-line"><span class='mono'>Aktualności</span></h2>
+        {% cache 1800 latest-blog-posts %}
+            {% latest_blog_posts "http://nowoczesnapolska.org.pl/category/wolne-lektury/feed/" %}
+        {% endcache %}
+    </div>
+
+
+    <div class="infopages-box">
+        <h2 class="grid-line"><span class='mono'>Narzędzia</span></h2>
+
+        <ul>
+            <li><a href="{% url suggest %}" id="suggest-link">{% trans "Report a bug" %}</a></li>
+            <li><a href="http://turniej.wolnelektury.pl">Turniej Elektrybałtów</a></li>
+            <li><a href="{% url lesmianator %}">Leśmianator</a></li>
+            <li><a href="">{% trans "Mobile app" %}</a></li>
+            <li><a href="{% url infopage "widget" %}">{% trans "Widget" %}</a></li>
+            <li><a href="">{% trans "Public domain counter" %}</a></li>
+            <li><a href="{% url suggest_publishing %}">{% trans "Missing a book?" %}</a></li>
+        </ul>
+    </div>
+
+
+    <div class="infopages-box">
+        <h2 class="grid-line"><span class='mono'>Informacje</span></h2>
+
+        {% infopages_on_main %}
+
+        <div class="social-links">
+            <a href="http://pl-pl.facebook.com/pages/Wolne-Lektury/203084073268"><img src="{{ STATIC_URL }}img/social/facebook.png" alt="WolneLektury @ Facebook" /></a>
+            <a href="http://nk.pl/profile/30441509"><img src="{{ STATIC_URL }}img/social/naszaklasa.png" alt="WolneLektury @ NK" /></a>
+        </div>
+    </div>
+
+
+    {% endspaceless %}
+
+
+{% endblock %}
+
+
+
+
+
+
+
+            {# publication plan consultations - form link #}
+            <div style="clear:right;float:right" class="big-top-link">
+                <a href="{% url suggest_publishing %}" data-ajax="{% url suggest_publishing %}?ajax=1" id="suggest-publishing-link">
+                    {% trans "Didn't find a book? Make a suggestion." %}
+                </a>
+            </div>
+
+
+
+
+        <div id="suggest-window">
+            <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div>
+            <div class="target">
+                <p><img src="{{ STATIC_URL }}img/indicator.gif" alt="*"/> {% trans "Loading" %}</p>
+            </div>
+        </div>
+        <div id="suggest-publishing-window">
+            <div class="header"><a href="#" class="jqmClose">{% trans "Close" %}</a></div>
+            <div class="target">
+                <p><img src="{{ STATIC_URL }}img/indicator.gif" alt="*"/> {% trans "Loading" %}</p>
+            </div>
+        </div>
index f9f7ab9..cda9ebb 100644 (file)
@@ -7,7 +7,7 @@ from modeltranslation.translator import translator, TranslationOptions
 from infopages.models import InfoPage
 
 class InfoPageTranslationOptions(TranslationOptions):
-    fields = ('page_title', 'title', 'left_column', 'right_column')
+    fields = ('title', 'left_column', 'right_column')
 
 translator.register(InfoPage, InfoPageTranslationOptions)
 
index ed0228a..307f3fa 100644 (file)
@@ -5,14 +5,14 @@ from django.conf.urls.defaults import *
 from django.conf import settings
 from django.contrib import admin
 
-from catalogue.forms import SearchForm
-
-from infopages.models import InfoPage
-
 
 admin.autodiscover()
 
-urlpatterns = patterns('',
+urlpatterns = patterns('wolnelektury.views',
+    url(r'^$', 'main_page', name='main_page'),
+)
+
+urlpatterns += patterns('',
     url(r'^katalog/', include('catalogue.urls')),
     url(r'^materialy/', include('lessons.urls')),
     url(r'^opds/', include('opds.urls')),
@@ -20,11 +20,7 @@ urlpatterns = patterns('',
     url(r'^lesmianator/', include('lesmianator.urls')),
     url(r'^przypisy/', include('dictionary.urls')),
     url(r'^raporty/', include('reporting.urls')),
-
-    # Static pages
-    url(r'^mozesz-nam-pomoc/$', 'infopages.views.infopage', {'slug': 'help_us'}, name='help_us'),
-    url(r'^o-projekcie/$', 'infopages.views.infopage', {'slug': 'about_us'}, name='about_us'),
-    url(r'^widget/$', 'infopages.views.infopage', {'slug': 'widget'}, name='widget'),
+    url(r'^info/', include('infopages.urls')),
 
     # Admin panel
     url(r'^admin/catalogue/book/import$', 'catalogue.views.import_book', name='import_book'),
@@ -45,16 +41,23 @@ urlpatterns = patterns('',
         {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
     url(r'^%s(?P<path>.*)$' % settings.STATIC_URL[1:], 'django.views.static.serve',
         {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
-    url(r'^$', 'django.views.generic.simple.redirect_to', {'url': 'katalog/',
-        'permanent': False}),
     url(r'^i18n/', include('django.conf.urls.i18n')),
 )
 
 urlpatterns += patterns('django.views.generic.simple',
     # old static pages - redirected
-    (r'^1procent/$', 'redirect_to', {'url': 'http://nowoczesnapolska.org.pl/wesprzyj_nas/'}),
-    (r'^wolontariat/$', 'redirect_to', {'url': '/mozesz-nam-pomoc/'}),
-    (r'^epub/$', 'redirect_to', {'url': '/katalog/lektury/'}),
+    url(r'^1procent/$', 'redirect_to',
+        {'url': 'http://nowoczesnapolska.org.pl/wesprzyj_nas/'}),
+    url(r'^epub/$', 'redirect_to',
+        {'url': '/katalog/lektury/'}),
+    url(r'^mozesz-nam-pomoc/$', 'redirect_to',
+        {'url': '/info/mozesz-nam-pomoc'}),
+    url(r'^o-projekcie/$', 'redirect_to',
+        {'url': '/info/o-projekcie'}),
+    url(r'^widget/$', 'redirect_to',
+        {'url': '/info/widget'}),
+    url(r'^wolontariat/$', 'redirect_to',
+        {'url': '/info/mozesz-nam-pomoc/'}),
 )
     
 
diff --git a/wolnelektury/views.py b/wolnelektury/views.py
new file mode 100755 (executable)
index 0000000..808a0fe
--- /dev/null
@@ -0,0 +1,10 @@
+from django.template import RequestContext
+from django.shortcuts import render_to_response
+from catalogue.models import Book
+
+
+def main_page(request):
+    last_published = Book.objects.exclude(html_file='').order_by('-created_at')[:4]
+
+    return render_to_response("main_page.html", locals(),
+        context_instance=RequestContext(request))
\ No newline at end of file