Merge branch 'obrazy' into rwd
authorRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Thu, 19 Dec 2013 11:47:39 +0000 (12:47 +0100)
committerRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Thu, 19 Dec 2013 11:47:39 +0000 (12:47 +0100)
Conflicts:
apps/catalogue/locale/pl/LC_MESSAGES/django.mo
apps/catalogue/locale/pl/LC_MESSAGES/django.po
apps/wolnelektury_core/static/css/base.css
apps/wolnelektury_core/static/css/book_box.css
apps/wolnelektury_core/static/css/cite.css
apps/wolnelektury_core/static/css/header.css
apps/wolnelektury_core/static/css/master.book.css
apps/wolnelektury_core/static/css/picture_box.css
apps/wolnelektury_core/static/css/screen.css
wolnelektury/settings/static.py

14 files changed:
1  2 
apps/catalogue/locale/pl/LC_MESSAGES/django.mo
apps/catalogue/locale/pl/LC_MESSAGES/django.po
apps/catalogue/models/book.py
apps/catalogue/templates/catalogue/menu.html
apps/catalogue/templatetags/catalogue_tags.py
apps/wolnelektury_core/static/css/master.book.css
apps/wolnelektury_core/static/css/new.book.css
apps/wolnelektury_core/static/js/base.js
apps/wolnelektury_core/static/scss/book_text/box.scss
apps/wolnelektury_core/static/scss/main/base.scss
apps/wolnelektury_core/static/scss/main/book_box.scss
apps/wolnelektury_core/static/scss/main/fragment.scss
apps/wolnelektury_core/static/scss/main/menu.scss
wolnelektury/settings/static.py

index 440e48e,a8142bb..d3585a5
Binary files differ
@@@ -7,9 -7,9 +7,9 @@@ msgid "
  msgstr ""
  "Project-Id-Version: PACKAGE VERSION\n"
  "Report-Msgid-Bugs-To: \n"
- "POT-Creation-Date: 2013-12-03 14:43+0100\n"
- "PO-Revision-Date: 2013-12-03 14:44+0100\n"
 -"POT-Creation-Date: 2013-12-16 09:19+0100\n"
 -"PO-Revision-Date: 2013-12-16 15:51+0100\n"
 -"Last-Translator: Marcin Koziej <marcinkoziej@nowoczesnapolska.org.pl>\n"
++"POT-Creation-Date: 2013-12-19 12:45+0100\n"
++"PO-Revision-Date: 2013-12-19 12:46+0100\n"
 +"Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
  "Language-Team: LANGUAGE <LL@li.org>\n"
  "MIME-Version: 1.0\n"
  "Content-Type: text/plain; charset=UTF-8\n"
@@@ -74,7 -74,7 +74,7 @@@ msgstr "Duży
  msgid "Queue is full. Please try again later."
  msgstr "Kolejka jest pełna. Proszę spróbować ponownie później."
  
- #: views.py:522
 -#: views.py:585
++#: views.py:597
  #, python-format
  msgid ""
  "An error occurred: %(exception)s\n"
@@@ -85,21 -85,21 +85,21 @@@ msgstr "
  "\n"
  "%(tb)s"
  
- #: views.py:523
 -#: views.py:586
++#: views.py:598
  msgid "Book imported successfully"
  msgstr "Książka zaimportowana"
  
- #: views.py:525
 -#: views.py:588
++#: views.py:600
  #, python-format
  msgid "Error importing file: %r"
  msgstr "Błąd podczas importowania pliku: %r"
  
- #: views.py:557
 -#: views.py:620
++#: views.py:632
  msgid "Download custom PDF"
  msgstr "Stwórz własny PDF"
  
- #: views.py:558 templates/catalogue/book_short.html:103
 -#: views.py:621 templates/catalogue/book_short.html:92
 -#: templates/catalogue/book_text.html:27 templates/catalogue/book_wide.html:63
++#: views.py:633 templates/catalogue/book_short.html:103
 +#: templates/catalogue/book_wide.html:63
  msgid "Download"
  msgstr "Pobierz"
  
  msgid "title"
  msgstr "tytuł"
  
- #: models/book.py:29 models/tag.py:33
+ #: models/book.py:29 models/tag.py:34
  msgid "sort key"
  msgstr "klucz sortowania"
  
--#: models/book.py:30 models/book.py:32 models/collection.py:12
- #: models/collection.py:15 models/tag.py:32
++#: models/book.py:30
++#, fuzzy
++msgid "sort key by author"
++msgstr "Znalezieni autorzy"
++
++#: models/book.py:31 models/book.py:33 models/collection.py:12
+ #: models/collection.py:15 models/tag.py:33
  msgid "slug"
  msgstr "slug"
  
--#: models/book.py:33
++#: models/book.py:34
  msgid "language code"
  msgstr "Kod języka"
  
- #: models/book.py:35 models/book.py:151 models/collection.py:13
- #: models/tag.py:36 models/tag.py:90
 -#: models/book.py:35 models/book.py:146 models/collection.py:13
++#: models/book.py:36 models/book.py:161 models/collection.py:13
+ #: models/tag.py:37 models/tag.py:94
  msgid "description"
  msgstr "opis"
  
- #: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:43
- #: models/tag.py:44
 -#: models/book.py:36 models/book.py:37 models/bookmedia.py:29 models/tag.py:46
++#: models/book.py:37 models/book.py:38 models/bookmedia.py:29 models/tag.py:46
+ #: models/tag.py:47
  msgid "creation date"
  msgstr "data utworzenia"
  
--#: models/book.py:38
++#: models/book.py:39
  msgid "parent number"
  msgstr "numer rodzica"
  
--#: models/book.py:39 models/bookmedia.py:30
++#: models/book.py:40 models/bookmedia.py:30
  msgid "extra information"
  msgstr "dodatkowe informacje"
  
--#: models/book.py:44
++#: models/book.py:45
  msgid "cover"
  msgstr "okładka"
  
- #: models/book.py:66 models/tag.py:22
 -#: models/book.py:66 models/collection.py:18 models/tag.py:22
++#: models/book.py:67 models/collection.py:18 models/tag.py:22
  msgid "book"
  msgstr "książka"
  
--#: models/book.py:67
++#: models/book.py:68
  msgid "books"
  msgstr "książki"
  
- #: models/book.py:249
 -#: models/book.py:244
++#: models/book.py:259
  #, python-format
  msgid "Book \"%s\" does not exist."
  msgstr "Utwór \"%s\" nie istnieje."
  
- #: models/book.py:263
 -#: models/book.py:258
++#: models/book.py:273
  #, python-format
  msgid "Book %s already exists"
  msgstr "Książka %s już istnieje"
  
- #: models/book.py:608 models/bookmedia.py:23
 -#: models/book.py:599 models/bookmedia.py:23
++#: models/book.py:620 models/bookmedia.py:23
  #, python-format
  msgid "%s file"
  msgstr "plik %s"
  msgid "type"
  msgstr "typ"
  
- #: models/bookmedia.py:27 models/tag.py:31
+ #: models/bookmedia.py:27 models/tag.py:32
  msgid "name"
  msgstr "nazwa"
  
@@@ -185,11 -185,15 +190,15 @@@ msgstr "media książki
  msgid "book slugs"
  msgstr "slugi utworów"
  
- #: models/collection.py:20
+ #: models/collection.py:18 models/tag.py:18
+ msgid "kind"
+ msgstr "rodzaj"
+ #: models/collection.py:22
  msgid "collection"
  msgstr "kolekcja"
  
- #: models/collection.py:21
+ #: models/collection.py:23
  msgid "collections"
  msgstr "kolekcje"
  
@@@ -209,10 -213,6 +218,6 @@@ msgstr "autor
  msgid "epoch"
  msgstr "epoka"
  
- #: models/tag.py:18
- msgid "kind"
- msgstr "rodzaj"
  #: models/tag.py:19
  msgid "genre"
  msgstr "gatunek"
@@@ -225,23 -225,31 +230,31 @@@ msgstr "motyw
  msgid "set"
  msgstr "półka"
  
- #: models/tag.py:34
+ #: models/tag.py:23
+ msgid "thing"
+ msgstr "przedmiot"
+ #: models/tag.py:35
  msgid "category"
  msgstr "kategoria"
  
- #: models/tag.py:39
+ #: models/tag.py:40
  msgid "book count"
  msgstr "liczba książek"
  
- #: models/tag.py:61
+ #: models/tag.py:41
+ msgid "picture count"
+ msgstr "liczba obrazów"
+ #: models/tag.py:65
  msgid "tag"
  msgstr "tag"
  
- #: models/tag.py:62
+ #: models/tag.py:66
  msgid "tags"
  msgstr "tagi"
  
- #: models/tag.py:79
+ #: models/tag.py:83
  msgid ""
  "Book tags can't have attached links. Set them directly on the book instead "
  "of it's tag."
@@@ -272,9 -280,9 +285,9 @@@ msgstr "
  "Możecie z niej korzystać bezpłatnie i bez ograniczeń.\n"
  "Audiobooki nagrywają znani aktorzy, wśród nich Danuta Stenka i Jan Peszek."
  
 -#: templates/catalogue/book_detail.html:20
 +#: templates/catalogue/book_detail.html:21
  #: templates/catalogue/tagged_object_list.html:74
- #: templates/catalogue/tagged_object_list.html:104
+ #: templates/catalogue/tagged_object_list.html:109
  msgid "See also"
  msgstr "Zobacz też"
  
@@@ -312,8 -320,8 +325,8 @@@ msgstr "
  "Na tych samych warunkach 3.0</a>."
  
  #: templates/catalogue/book_info.html:20
- msgid "Text prepared based on:"
- msgstr "Tekst opracowany na podstawie:"
+ msgid "Resource prepared based on:"
+ msgstr "Zasób opracowany na podstawie:"
  
  #: templates/catalogue/book_info.html:28
  msgid "Edited and annotated by:"
@@@ -335,117 -343,88 +348,117 @@@ msgstr "Spis wszystkich utworów
  msgid "Table of Content"
  msgstr "Spis treści"
  
 -#: templates/catalogue/book_list.html:30
 +#: templates/catalogue/book_list.html:31
  msgid "↑ top ↑"
  msgstr "↑ góra ↑"
  
 -#: templates/catalogue/book_short.html:59
 +#: templates/catalogue/book_short.html:61
  #: templates/catalogue/picture_detail.html:54
  msgid "Epoch"
  msgstr "Epoka"
  
 -#: templates/catalogue/book_short.html:66
 +#: templates/catalogue/book_short.html:69
  #: templates/catalogue/picture_detail.html:60
  msgid "Kind"
  msgstr "Rodzaj"
  
 -#: templates/catalogue/book_short.html:73
 +#: templates/catalogue/book_short.html:77
  msgid "Genre"
  msgstr "Gatunek"
  
 -#: templates/catalogue/book_short.html:88
 +#: templates/catalogue/book_short.html:86
 +msgid "Language"
 +msgstr "Język"
 +
 +#: templates/catalogue/book_short.html:99
  msgid "Read online"
  msgstr "Czytaj online"
  
 -#: templates/catalogue/book_short.html:95
 -#: templates/catalogue/book_text.html:40
 +#: templates/catalogue/book_short.html:106
  msgid "to print"
  msgstr "do druku"
  
 -#: templates/catalogue/book_short.html:98
 +#: templates/catalogue/book_short.html:109
  msgid "for an e-book reader"
  msgstr "na czytnik e-booków"
  
 -#: templates/catalogue/book_short.html:101
 -#: templates/catalogue/book_text.html:46
 +#: templates/catalogue/book_short.html:112
  msgid "for Kindle"
  msgstr "na Kindle"
  
 -#: templates/catalogue/book_short.html:104
 -#: templates/catalogue/book_text.html:49
 +#: templates/catalogue/book_short.html:115
  msgid "FictionBook"
  msgstr "FictionBook"
  
 -#: templates/catalogue/book_short.html:107
 -#: templates/catalogue/book_text.html:52
 +#: templates/catalogue/book_short.html:118
  msgid "for advanced usage"
  msgstr "do zadań specjalnych"
  
 -#: templates/catalogue/book_short.html:113
 -#: templates/catalogue/book_text.html:30
 +#: templates/catalogue/book_short.html:124
  msgid "Listen"
  msgstr "Słuchaj"
  
 -#: templates/catalogue/book_text.html:9 templates/catalogue/player.html:11
 +#: templates/catalogue/book_text.html:10 templates/catalogue/player.html:11
  msgid "Wolne Lektury"
  msgstr "Wolne Lektury"
  
 -#: templates/catalogue/book_text.html:22
 +#: templates/catalogue/book_text.html:34
 +msgid "Other versions"
 +msgstr "Inne wersje"
 +
 +#: templates/catalogue/book_text.html:40
  msgid "Table of contents"
  msgstr "Spis treści"
  
- #: templates/catalogue/book_text.html:44 templatetags/catalogue_tags.py:423
 -#: templates/catalogue/book_text.html:23 templatetags/catalogue_tags.py:420
++#: templates/catalogue/book_text.html:44 templatetags/catalogue_tags.py:424
  msgid "Themes"
  msgstr "Motywy"
  
 -#: templates/catalogue/book_text.html:24
 +#: templates/catalogue/book_text.html:48
 +#: templates/catalogue/book_text.html:100
 +msgid "Settings"
 +msgstr "Ustawienia"
 +
 +#: templates/catalogue/book_text.html:52
  msgid "Edit. note"
  msgstr "Nota red."
  
 -#: templates/catalogue/book_text.html:25
 +#: templates/catalogue/book_text.html:56
  msgid "Infobox"
  msgstr "Informacje"
  
 -#: templates/catalogue/book_text.html:26 templates/catalogue/player.html:34
 -msgid "Book's page"
 -msgstr "Strona utworu"
 +#: templates/catalogue/book_text.html:68
 +#: templates/catalogue/book_text.html:114
 +msgid "Close"
 +msgstr "Zamknij"
  
 -#: templates/catalogue/book_text.html:43
 -msgid "for a reader"
 -msgstr "na czytnik"
 +#: templates/catalogue/book_text.html:69
 +msgid "Please wait..."
 +msgstr "Proszę czekać…"
  
 -#: templates/catalogue/book_text.html:56 templates/catalogue/book_wide.html:67
 -msgid "Download all audiobooks for this book"
 -msgstr "Pobierz wszystkie audiobooki tego utworu"
 +#: templates/catalogue/book_text.html:82
 +msgid "Other versions of the book"
 +msgstr "Inne wersje utworu"
 +
 +#: templates/catalogue/book_text.html:83
 +msgid "Close the other version"
 +msgstr "Zamknij drugą wersję"
 +
 +#: templates/catalogue/book_text.html:101
 +msgid "Display line numbers"
 +msgstr "Wyświetlaj numerację"
 +
 +#: templates/catalogue/book_text.html:102
 +msgid "Display themes"
 +msgstr "Wyświetlaj motywy"
 +
 +#: templates/catalogue/book_text.html:103
 +msgid "Display footnotes"
 +msgstr "Wyświetlaj przypisy"
 +
 +#: templates/catalogue/book_text.html:116
 +msgid "Loading"
 +msgstr "Ładowanie"
  
  #: templates/catalogue/book_wide.html:22
  #: templates/catalogue/tagged_object_list.html:60
@@@ -488,12 -467,7 +501,12 @@@ msgstr "Opis lektury w Wikipedii
  msgid "Mix this book"
  msgstr "Miksuj treść utworu"
  
 +#: templates/catalogue/book_wide.html:67
 +msgid "Download all audiobooks for this book"
 +msgstr "Pobierz wszystkie audiobooki tego utworu"
 +
  #: templates/catalogue/catalogue.html:6 templates/catalogue/catalogue.html:11
 +#: templates/catalogue/menu.html:5
  msgid "Catalogue"
  msgstr "Katalog"
  
@@@ -504,28 -478,28 +517,28 @@@ msgstr "Pobierz katalog w formacie PDF.
  #: templates/catalogue/catalogue.html:19
  #: templates/catalogue/search_multiple_hits.html:17
  #: templates/catalogue/tagged_object_list.html:26
- #: templatetags/catalogue_tags.py:419
 -#: templatetags/catalogue_tags.py:416
++#: templatetags/catalogue_tags.py:420
  msgid "Authors"
  msgstr "Autorzy"
  
  #: templates/catalogue/catalogue.html:22
  #: templates/catalogue/search_multiple_hits.html:25
  #: templates/catalogue/tagged_object_list.html:34
- #: templatetags/catalogue_tags.py:421
 -#: templatetags/catalogue_tags.py:418
++#: templatetags/catalogue_tags.py:422
  msgid "Kinds"
  msgstr "Rodzaje"
  
  #: templates/catalogue/catalogue.html:25
  #: templates/catalogue/search_multiple_hits.html:33
  #: templates/catalogue/tagged_object_list.html:42
- #: templatetags/catalogue_tags.py:420
 -#: templatetags/catalogue_tags.py:417
++#: templatetags/catalogue_tags.py:421
  msgid "Genres"
  msgstr "Gatunki"
  
  #: templates/catalogue/catalogue.html:28
  #: templates/catalogue/search_multiple_hits.html:41
  #: templates/catalogue/tagged_object_list.html:50
- #: templatetags/catalogue_tags.py:422
 -#: templatetags/catalogue_tags.py:419
++#: templatetags/catalogue_tags.py:423
  msgid "Epochs"
  msgstr "Epoki"
  
  msgid "Themes and topics"
  msgstr "Motywy i tematy"
  
 -#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:16
 +#: templates/catalogue/catalogue.html:34 templates/catalogue/menu.html:20
  msgid "Collections"
  msgstr "Kolekcje"
  
@@@ -577,26 -551,22 +590,30 @@@ msgstr "Zwiń fragment
  msgid "See full category"
  msgstr "Zobacz całą kategorię"
  
 -#: templates/catalogue/menu.html:9 templates/catalogue/menu.html.py:18
 +#: templates/catalogue/menu.html:4
 +msgid "Catalogue of the library"
 +msgstr "Katalog biblioteki"
 +
 +#: templates/catalogue/menu.html:13 templates/catalogue/menu.html.py:22
  msgid "Please wait…"
  msgstr "Proszę czekać…"
  
 -#: templates/catalogue/menu.html:24
 +#: templates/catalogue/menu.html:28
  msgid "All books"
  msgstr "Wszystkie utwory"
  
 -#: templates/catalogue/menu.html:28
 +#: templates/catalogue/menu.html:32
  msgid "Audiobooks"
  msgstr "Audiobooki"
  
 -#: templates/catalogue/menu.html:32
 +#: templates/catalogue/menu.html:36
  msgid "DAISY"
  msgstr "DAISY"
  
++#: templates/catalogue/menu.html:40 templates/catalogue/tag_list_split.html:14
++msgid "Gallery"
++msgstr "Galeria"
++
  #: templates/catalogue/picture_detail.html:29
  msgid "Work is licensed under "
  msgstr "Utwór jest udostępniony na licencji"
@@@ -638,10 -608,6 +655,10 @@@ msgstr "Motywy w utworze
  msgid "Listing of all pictures"
  msgstr "Spis wszystkich obrazów"
  
 +#: templates/catalogue/player.html:34
 +msgid "Book's page"
 +msgstr "Strona utworu"
 +
  #: templates/catalogue/player.html:35
  msgid "Download as"
  msgstr "Pobierz jako"
@@@ -733,7 -699,7 +750,7 @@@ msgid "Other results
  msgstr "Inne wyniki"
  
  #: templates/catalogue/search_no_hits.html:19
- #: templates/catalogue/tagged_object_list.html:146
 -#: templates/catalogue/tagged_object_list.html:151
++#: templates/catalogue/tagged_object_list.html:153
  msgid "Sorry! Search cirteria did not match any resources."
  msgstr "Przepraszamy! Brak wyników spełniających kryteria podane w zapytaniu."
  
@@@ -751,13 -717,25 +768,22 @@@ msgstr "
  msgid "Sorry! Search query must have at least two characters."
  msgstr "Przepraszamy! Zapytanie musi zawierać co najmniej dwa znaki."
  
 -#: templates/catalogue/tag_list_split.html:14
 -msgid "Gallery"
 -msgstr "Galeria"
 -
+ #: templates/catalogue/tag_list_split.html:5
+ msgid "Literature"
+ msgstr "Literatura"
  #: templates/catalogue/tagged_object_list.html:78
- #: templates/catalogue/tagged_object_list.html:108
- msgid "in Lektury.Gazeta.pl"
- msgstr "w serwisie Lektury.Gazeta.pl"
++#: templates/catalogue/tagged_object_list.html:123
+ msgid "in Culture.pl"
+ msgstr "w Culture.pl"
  
  #: templates/catalogue/tagged_object_list.html:83
  #: templates/catalogue/tagged_object_list.html:113
+ msgid "in Lektury.Gazeta.pl"
+ msgstr "w serwisie Lektury.Gazeta.pl"
+ #: templates/catalogue/tagged_object_list.html:88
+ #: templates/catalogue/tagged_object_list.html:118
  msgid "in Wikipedia"
  msgstr "w Wikipedii"
  
@@@ -770,9 -748,6 +796,9 @@@ msgstr "Stwórz własny plik PDF
  msgid "Free license"
  msgstr "Wolna licencja"
  
 +#~ msgid "for a reader"
 +#~ msgstr "na czytnik"
 +
  #~ msgid "Put a book on the shelf!"
  #~ msgstr "Wrzuć lekturę na półkę!"
  
@@@ -27,6 -27,7 +27,7 @@@ class Book(models.Model)
      """Represents a book imported from WL-XML."""
      title         = models.CharField(_('title'), max_length=120)
      sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False)
+     sort_key_author = models.CharField(_('sort key by author'), max_length=120, db_index=True, editable=False, default=u'')
      slug = models.SlugField(_('slug'), max_length=120, db_index=True,
              unique=True)
      common_slug = models.SlugField(_('slug'), max_length=120, db_index=True)
@@@ -74,6 -75,7 +75,7 @@@
          from sortify import sortify
  
          self.sort_key = sortify(self.title)
+         self.title = unicode(self.title) # ???
  
          ret = super(Book, self).save(force_insert, force_update, **kwargs)
  
      def name(self):
          return self.title
  
 +    def language_code(self):
 +        return constants.LANGUAGES_3TO2.get(self.language, self.language)
 +
 +    def language_name(self):
 +        return dict(settings.LANGUAGES).get(self.language_code(), "")
 +
      def book_tag_slug(self):
          return ('l-' + self.slug)[:120]
  
          for fragm in self.fragments.all().iterator():
              fragm.reset_short_html()
  
+         try: 
+             author = self.tags.filter(category='author')[0].sort_key
+         except IndexError:
+             author = u''
+         type(self).objects.filter(pk=self.pk).update(sort_key_author=author)
      def has_description(self):
          return len(self.description) > 0
      has_description.short_description = _('description')
              for child in self.children.all():
                  child.parent_cover_changed()
  
 +    def other_versions(self):
 +        """Find other versions (i.e. in other languages) of the book."""
 +        return type(self).objects.filter(common_slug=self.common_slug).exclude(pk=self.pk)
 +
      def related_info(self):
          """Keeps info about related objects (tags, media) in cache field."""
          if self._related_info is not None:
              for category in tags:
                  cat = []
                  for tag in tags[category]:
-                     tag_info = {'slug': tag.slug}
+                     tag_info = {'slug': tag.slug, 'name': tag.name}
                      for lc, ln in settings.LANGUAGES:
                          tag_name = getattr(tag, "name_%s" % lc)
                          if tag_name:
          rel_info = book.related_info()
          names = [(related_tag_name(tag), Tag.create_url('author', tag['slug']))
                      for tag in rel_info['tags'].get('author', ())]
+         import logging
+         logging.info("%s, %s" % (book.slug, unicode(rel_info['tags'].get('author', ()))))
          if 'parents' in rel_info:
              books = [(name, Book.create_url(slug))
                          for name, slug in rel_info['parents']]
@@@ -1,14 -1,10 +1,14 @@@
  {% load i18n static %}
  
 +<a id="show-menu" href="{% url 'catalogue' %}">
 +    <span class="long">{% trans "Catalogue of the library" %}</span>
 +    <span class="short">{% trans "Catalogue" %}</span>
 +</a>
  <ul id="menu">
      {% for category, name, hash in categories %}
        <li class="hidden-box-wrapper menu">
                <a href="{% url 'catalogue' %}#{{ hash }}" class="hidden-box-trigger menu load-menu">
 -                      <span class='mono'>{{ name }}</span></a>
 +                      {{ name }}</a>
                <div class="hidden-box" id="menu-{{ category }}">
              <img src="{% static "img/indicator.gif" %}" alt="{% trans "Please wait…" %}" />
          </div>
@@@ -17,7 -13,7 +17,7 @@@
  
        <li class="hidden-box-wrapper menu">
                <a href="{% url 'catalogue' %}#kolekcje" class="hidden-box-trigger menu load-menu">
 -                      <span class='mono'>{% trans "Collections" %}</span></a>
 +                      {% trans "Collections" %}</a>
                <div class="hidden-box" id="menu-collections">
              <img src="{% static "img/indicator.gif" %}" alt="{% trans "Please wait…" %}" />
          </div>
  
        <li class="menu">
                <a href="{% url 'book_list' %}" class="menu">
 -                      <span class='mono'>{% trans "All books" %}</span></a>
 +                      {% trans "All books" %}</a>
        </li>
        <li class="menu">
                <a href="{% url 'audiobook_list' %}" class="menu">
 -                      <span class='mono'>{% trans "Audiobooks" %}</span></a>
 +                      {% trans "Audiobooks" %}</a>
        </li>
        <li class="menu">
                <a href="{% url 'daisy_list' %}" class="menu">
 -                      <span class='mono'>{% trans "DAISY" %}</span></a>
 +                      {% trans "DAISY" %}</a>
        </li>
+       <li class="menu">
+               <a href="{% url 'picture_list_thumb' %}" class="menu">
+                       <span class='mono'>{% trans "Gallery" %}</span></a>
+       </li>
  </ul>
@@@ -16,7 -16,7 +16,7 @@@ from django.utils.translation import ug
  
  from catalogue.utils import split_tags, related_tag_name as _related_tag_name
  from catalogue.models import Book, BookMedia, Fragment, Tag
 -from catalogue.constants import LICENSES
 +from catalogue.constants import LICENSES, LANGUAGES_3TO2
  
  register = template.Library()
  
@@@ -335,7 -335,6 +335,7 @@@ def book_wide(context, book)
          'hide_about': hide_about,
          'themes': book_themes,
          'request': context.get('request'),
 +        'show_lang': book.language_code() != settings.LANGUAGE_CODE,
      }
  
  
@@@ -346,27 -345,25 +346,28 @@@ def book_short(context, book)
          'main_link': book.get_absolute_url(),
          'related': book.related_info(),
          'request': context.get('request'),
 +        'show_lang': book.language_code() != settings.LANGUAGE_CODE,
      }
  
  
  @register.inclusion_tag('catalogue/book_mini_box.html')
 -def book_mini(book):
 +def book_mini(book, with_link=True):
      author_str = ", ".join(related_tag_name(tag)
          for tag in book.related_info()['tags'].get('author', ()))
      return {
          'book': book,
          'author_str': author_str,
 +        'with_link': with_link,
 +        'show_lang': book.language_code() != settings.LANGUAGE_CODE,
      }
  
  
  @register.inclusion_tag('catalogue/work-list.html', takes_context=True)
  def work_list(context, object_list):
      request = context.get('request')
-     if object_list:
-         object_type = type(object_list[0]).__name__
+     for obj in object_list:
+         obj.object_type = type(object_list[0]).__name__
      return locals()
  
  
@@@ -472,3 -469,9 +473,9 @@@ def license_icon(license_url)
  @register.simple_tag
  def related_tag_name(tag, lang=None):
      return _related_tag_name(tag, lang)
+ @register.simple_tag
+ def class_name(obj):
+     return obj.__class__.__name__
@@@ -11,14 -11,10 +11,14 @@@ a 
  }
  
  #book-text {
 -    margin: 3em;
 +    margin: 3em;
      max-width: 36em;
  }
  
 +#other-text #book-text {
 +    width: 36em;
 +}
 +
  /* ================================== */
  /* = Header with logo and menu      = */
  /* ================================== */
@@@ -93,7 -89,7 +93,7 @@@ img 
  }
  
  
- #toc, #themes, #nota_red, #info, #other-versions {
 -#toc, #themes, #nota_red, #info, #objects {
++#toc, #themes, #nota_red, #info, #other-versions, #objects {
      position: fixed;
      left: 0em;
      top: 1.5em;
      z-index: 99;
  }
  
- #toc ol, #themes ol {
+ #toc ol, #themes ol, #objects ol {
      list-style: none;
      padding: 0;
      margin: 0;
  /* =================================================== */
  h1 {
      font-size: 3em;
 -    margin: 1.5em 0;
 +    margin: 0 0 1.5em 0;
      text-align: center;
      line-height: 1.5em;
      font-weight: bold;
index 164051e,0000000..bff58bc
mode 100644,000000..100644
--- /dev/null
@@@ -1,268 -1,0 +1,268 @@@
- #toc ol, #themes ol {
 +body {
 +    font-size: 16px;
 +    font-family: Georgia, "Times New Roman", serif;
 +    line-height: 1.5em;
 +    margin: 0;
 +}
 +
 +a {
 +    color: blue;
 +    text-decoration: none;
 +}
 +
 +/* ================================== */
 +/* = Header with logo and menu      = */
 +/* ================================== */
++#toc ol, #themes ol, #objects ol {
 +    list-style: none;
 +    padding: 0;
 +    margin: 0;
 +}
 +
 +#toc ol li {
 +    font-weight: bold;
 +}
 +
 +#toc ol ol {
 +    padding: 0 0 1.5em 1.5em;
 +    margin: 0;
 +}
 +
 +#toc ol ol li {
 +    font-weight: normal;
 +}
 +
 +#toc h2 {
 +    display: none;
 +}
 +
 +#toc .anchor {
 +    float: none;
 +    margin: 0;
 +    color: blue;
 +    font-size: 16px;
 +    position: inherit;
 +}
 +
 +#info p {
 +    margin: 1em 0 0;
 +}
 +
 +/* =================================================== */
 +/* = Common elements: headings, paragraphs and lines = */
 +/* =================================================== */
 +h1 {
 +    font-size: 3em;
 +    margin: 1.5em 0;
 +    text-align: center;
 +    line-height: 1.5em;
 +    font-weight: bold;
 +}
 +
 +h2 {
 +    font-size: 2em;
 +    margin: 1.5em 0 0;
 +    font-weight: bold;
 +    line-height: 1.5em;
 +}
 +
 +h3 {
 +    font-size: 1.5em;
 +    margin: 1.5em 0 0;
 +    font-weight: normal;
 +    line-height: 1.5em;
 +}
 +
 +h4 {
 +    font-size: 1em;
 +    margin: 1.5em 0 0;
 +    line-height: 1.5em;
 +}
 +
 +p {
 +    margin: 0;
 +}
 +
 +/* ======================== */
 +/* = Footnotes and themes = */
 +/* ======================== */
 +
 +.annotation {
 +    font-style: normal;
 +    font-weight: normal;
 +    font-size: .75em;
 +    padding-left: 2px;
 +    position: relative;
 +    top: -4px;
 +}
 +
 +#footnotes {
 +    margin-top: 3em;
 +}
 +
 +#footnotes .annotation {
 +    display: block;
 +    float: left;
 +    width: 2.5em;
 +    clear: both;
 +}
 +
 +#footnotes div {
 +    margin: 1.5em 0 0 0;
 +}
 +
 +#footnotes p, #footnotes ul {
 +    margin-left: 2.5em;
 +    font-size: 0.875em;
 +}
 +
 +#footnotes .permalink {
 +    font-size: .75em;
 +}
 +
 +blockquote {
 +    font-size: 0.875em;
 +}
 +
 +/* ============= */
 +/* = Numbering = */
 +/* ============= */
 +.verse, .paragraph {
 +    position:relative;
 +}
 +/*.anchor {
 +    position: absolute;
 +    margin: -0.25em -0.5em;
 +    color: #777;
 +    font-size: 12px;
 +    text-align: center;
 +    padding: 0.25em 0.5em;
 +    line-height: 1.5em;
 +}*/
 +
 +
 +/* =================== */
 +/* = Custom elements = */
 +/* =================== */
 +span.author {
 +    font-size: 0.5em;
 +    display: block;
 +    line-height: 1.5em;
 +    margin-bottom: 0.25em;
 +}
 +
 +span.collection {
 +    font-size: 0.375em;
 +    display: block;
 +    line-height: 1.5em;
 +    margin-bottom: -0.25em;
 +}
 +
 +span.subtitle {
 +    font-size: 0.5em;
 +    display: block;
 +    line-height: 1.5em;
 +    margin-top: -0.25em;
 +}
 +
 +span.translator {
 +    font-size: 0.375em;
 +    display: block;
 +    line-height: 1.5em;
 +    margin-top: 0.25em;
 +}
 +
 +div.didaskalia {
 +    font-style: italic;
 +    margin: 0.5em 0 0 1.5em;
 +}
 +
 +div.kwestia {
 +    margin: 0.5em 0 0;
 +}
 +
 +div.stanza {
 +    margin: 1.5em 0 0;
 +}
 +
 +div.kwestia div.stanza {
 +    margin: 0;
 +}
 +
 +p.paragraph {
 +    text-align: justify;
 +    margin: 1.5em 0 0;
 +}
 +
 +p.motto {
 +    text-align: justify;
 +    font-style: italic;
 +    margin: 1.5em 0 0;
 +}
 +
 +p.motto_podpis {
 +    font-size: 0.875em;
 +    text-align: right;
 +}
 +
 +div.fragment {
 +    border-bottom: 0.1em solid #999;
 +    padding-bottom: 1.5em;
 +}
 +
 +div.note p, div.dedication p, div.note p.paragraph, div.dedication p.paragraph {
 +    text-align: right;
 +    font-style: italic;
 +}
 +
 +hr.spacer {
 +    height: 3em;
 +    visibility: hidden;
 +}
 +
 +hr.spacer-line {
 +    margin: 1.5em 0;
 +    border: none;
 +    border-bottom: 0.1em solid #000;
 +}
 +
 +p.spacer-asterisk {
 +    padding: 0;
 +    margin: 1.5em 0;
 +    text-align: center;
 +}
 +
 +div.person-list ol {
 +    list-style: none;
 +    padding: 0 0 0 1.5em;
 +}
 +
 +p.place-and-time {
 +    font-style: italic;
 +}
 +
 +em.math, em.foreign-word, em.book-title, em.didaskalia {
 +    font-style: italic;
 +}
 +
 +em.author-emphasis {
 +    letter-spacing: 0.1em;
 +}
 +
 +em.person {
 +    font-style: normal;
 +    font-variant: small-caps;
 +}
 +
 +.verse:after {
 +    content: "\feff";
 +}
 +
 +
 +/* =================================== */
 +/* = Hide some elements for printing = */
 +/* =================================== */
 +
 +@media print {
 +    #menu {display: none;}
 +}
                                        } 
                                });
                        });
+                   /* this kinda breaks the whole page. */
                        $('body').click(function(e) {
                                if ($current == null) return;
                                var p = $(e.target);
                                while (p.length) {
                                        if (p == $current)
                                                return;
-                                       if (p.hasClass('hidden-box-trigger'))
+                                       if (p.hasClass('hidden-box-trigger') 
+                                           || p.hasClass('simple-toggler'))
                                                return;
                                        p = p.parent();
                                }
                })();
                
  
 +$('#show-menu').click(function(event) {
 +    event.preventDefault();
 +    $('#menu').toggle('slow');
 +});
 +$('#book-list-nav h2').click(function(event) {
 +    event.preventDefault();
 +    $('#book-list-nav-index').toggle();
 +});
  
  
  $('#themes-list-toggle').click(function(event) {
        $(function(){
            $("#search").search();});
  
+       $('body').on('click', '.simple-toggler' , function(ev) {
+       ev.preventDefault();
+       var scope = $(this).closest('.simple-toggler-scope');
+       scope.find('.simple-hidden-box').each(function(){ 
+         var $this = $(this);
+         if ($this.is(':hidden')) {
+           $this.show();
+         } else { 
+           $this.hide();
+         }
+         });
+       });
      });
  })(jQuery);
  
index 4f09769,0000000..7a04234
mode 100644,000000..100644
--- /dev/null
@@@ -1,50 -1,0 +1,50 @@@
- .box, #toc, #themes, #nota_red {
 +/* TODO:
 +There should be a JS-less way of seeing at least some of
 +the hidden boxes (TOC and Themes).
 +*/
 +
++.box, #toc, #themes, #nota_red, #objects {
 +    display: none;
 +
 +    position: fixed;
 +    @include size(left, $W_MENU);
 +    top: 0;
 +    right: 0;
 +
 +    max-height: 100%;
 +    @include size(max-width, 380px);
 +    @include size(padding, 10px 10px 30px 10px);
 +    margin: 0;
 +    overflow-x: hidden;
 +    overflow-y: auto;
 +    z-index: 100;
 +
 +    color: black;
 +    background: #fff;
 +    box-shadow: 2px 2px 2px #444;
 +
 +    @include size(border-width, 0 1px 1px 0);
 +    border-style: solid;
 +    border-color: #444;
 +
 +    @include size(font-size, 14px);
 +    line-height: 1.2em;
 +
 +    h2 {
 +        margin-top: 0;
 +    }
 +}
 +
 +
 +
 +#box-underlay {
 +    display: none;
 +    position: fixed;
 +    @include size(left, $W_MENU);
 +    top: 0;
 +    bottom: 0;
 +    right: 0;
 +    background:#000;
 +    opacity: .5;
 +    z-index: 99;
 +}
index 02f02a3,0000000..d9d5237
mode 100755,000000..100755
--- /dev/null
@@@ -1,101 -1,0 +1,105 @@@
 +/* Basic layout */
 +html, body {
 +    margin: 0;
 +    padding: 0;
 +}
 +
 +
 +.clearboth {
 +    clear: both;
 +}
 +
 +
 +
 +/* Basic colors and fonts */
 +body {
 +    font-family: Georgia;
 +    background: #f7f7f7;
 +    color: black;
 +
 +    @include size(font-size, 13px);
 +}
 +
 +a {
 +    color: #0d7e85;
 +    text-decoration: none;
 +
 +    img {
 +        border: 0;
 +    }
 +}
 +
 +h1 {
 +    @include size(font-size, 35px);
 +    font-weight: normal;
 +    @include size(margin-top, 14px);
 +
 +    a {
 +        color: inherit;
 +    }
 +}
 +
 +h2 {
 +    @include size(font-size, 20px);
 +    font-weight: normal;
 +}
 +
 +h3 {
 +    @include size(font-size, 15px);
 +    font-weight: normal;
 +}
 +
 +
 +.normal-text {
 +    line-height: 1.3em;
 +}
 +
 +.white-box {
 +    @include size(padding, 10px);
 +    @include white-box;
 +}
 +
 +
 +ul.plain {
 +    list-style:none;
 +    margin: 0;
 +    padding: 0;
 +}
 +
 +
 +.theme-list-link {
 +    @include mono;
 +    @include size(font-size, 11px);
 +    
 +    &:after {
 +        @include size(padding-left, 11px);
 +        content: url("/static/img/arrow-teal.png");
 +        vertical-align: middle;
 +    }
 +}
 +
 +
 +.left-column, .right-column {
 +    @include size(max-width, 600px);
 +}
 +@media screen and (min-width: 62.5em) {
 +    .left-column {
 +        @include size(width, 470px);
 +        float: left;
 +    }
 +    .right-column {
 +        @include size(width, 470px);
 +        float:right;
 +    }
 +}
 +
 +.pagination {
 +    display: block;
 +    @include size(font-size, 12px);
 +    @include size(padding, 6px);
 +    text-align:center;
 +}
++
++.simple-hidden-initially {
++    display: none;
++}
index e8504e5,0000000..4655a3c
mode 100755,000000..100755
--- /dev/null
@@@ -1,496 -1,0 +1,505 @@@
 +@mixin inner-box {
 +    display: block;
 +    color: black;
 +    @include size(margin, 1px);
 +    @include size(padding, 8px 10px);
 +    @include white-box;
 +}
 +
 +.book-mini-box img.cover {
 +    @include size(height, 193px);
 +    @include size(width, 139px);
 +}
 +
 +
 +.cover-area {
 +    float: left;
 +    @include size(margin-right, 15px);
 +    @include size(margin-bottom, 5px);
 +
 +    @include min-screen($S_BOOK_SHORT_FULL) {
 +        position: absolute;
 +        top: 0;
 +        left: 0;
 +        margin-right: 0;
 +    }
 +
 +    img.cover {
 +        @include size(height, 193px / 2);
 +        @include size(width, 139px / 2);
 +
 +        @include min-screen($S_BOOK_SHORT_MEDIUM) {
 +            @include size(height, 193px);
 +            @include size(width, 139px);
 +        }
 +    }
 +}
 +
 +.book-mini-box {
 +    @include size(width, 161.5px);
 +    display: inline-block;
 +    vertical-align: top;
 +
 +    .book-mini-box-inner {
 +        @include inner-box;
 +        @include size(height, 271px);
 +        @include size(margin, 1px);
 +        overflow: hidden;
 +        a {
 +            display: block;
 +        }
 +    }
 +    img.cover {
 +        @include size(margin-bottom, 18px);
 +    }
 +    .language {
 +        color: #aaa;
 +        float: right;
 +        @include mono;
 +        @include size(font-size, 10px);
 +        text-transform: uppercase;
 +        position: relative;
 +        @include size(top, -20px);
 +    }
 +    .desc {
 +        margin-left: 0;
 +    }
 +    .author {
 +        @include size(font-size, 11px);
 +        @include mono;
 +        color: #6d7877;
 +        display: block;
 +        overflow: hidden;
 +        text-overflow: ellipsis;
 +        white-space: nowrap;
 +    }
 +    .title {
 +        @include size(font-size, 14px);
 +        color: #242424;
 +    }
 +}
 +
 +
 +
 +.work-list {
 +    margin: 0;
 +    padding: 0;
 +    list-style: none;
 +
 +    .Book-item {
 +        @include min-screen($S_BOOK_SHORT_FULL) {
 +            display: inline-block;
 +        }
 +        vertical-align: top;
 +    }
 +}
 +
 +
 +.book-box {
 +    margin: 0;
 +    vertical-align: top;
 +
 +    /* */
 +    a {
 +        color: #0D7E85;
 +    }
 +
 +    @include min-screen($S_BOOK_SHORT_FULL) {
 +        @include size(width, $W_BOOK_SHORT_FULL);
 +    }
 +
 +    .book-box-inner {
 +        position: relative;
 +        @include inner-box;
 +        @include size(min-height, 197.5px);
 +    }
 +}
 +
 +
 +.book-wide-box {
 +    margin: 0;
 +    vertical-align: top;
 +
 +    @media screen and (min-width: 62.5em) {
 +        @include size(width, 975px);
 +    }
 +
 +    .book-box-inner {
 +        position: relative;
 +        @include size(min-height, 244px);
 +        @include inner-box;
 +        @include size(margin-left, 0);
 +        @include size(margin-right, 0);
 +
 +        .book-left-column { /* FIXME */
 +            @media screen and (min-width: 62.5em) {
 +                float: left;
 +                @include size(width, 536px);
 +            }
 +        }
 +
 +        .license-icon {
 +            display: block;
 +            @include size(margin-top, 5px);
 +        }
 +
 +        .book-box-head,
 +        .tags,
 +        .book-box-tools {
 +            @media screen and (min-width: 62.5em) {
 +                @include size(width, 382px);
 +            }
 +        }
 +
 +        #theme-list-wrapper {
 +            @include min-screen($S_BOOK_SHORT_MEDIUM) {
 +                @include size(margin-left, 154px);
 +                @include size(width, 300px);
 +            }
 +            margin-bottom: 0;
 +
 +            p {
 +                @include size(margin-top, 10px);
 +                @include size(margin-bottom, 10px);
 +            }
 +        }
 +
 +        .right-column {
 +            @include size(margin-top, 16px);
 +            // Eat the padding
 +            @include size(margin-left, -10px);
 +            @include size(margin-right, -10px);
 +            max-width: none;
 +
 +            @media screen and (min-width: 62.5em) {
 +                @include size(width, 415px);
 +                // Eat the padding
 +                @include size(margin-top, -8px);
 +            }
 +
 +            .other-tools,
 +            .other-download {
 +                @include size(font-size, 11px);
 +                clear: left;
 +                @include size(margin-top, 25px);
 +                line-height: 1.75em;
 +                @include size(margin-left, 15px);
 +
 +                h2 {
 +                    margin: 0;
 +                    @include size(font-size, 11px);
 +                    @include mono;
 +                }
 +
 +                @include min-screen($S_BOOK_SHORT_FULL) {
 +                    float: left;
 +                    clear: none;
 +                    @include size(width, 145px);
 +                    @include size(margin-top, 50px);
 +                    @include size(margin-right, 0);
 +                    @include size(margin-bottom, 0);
 +                    @include size(margin-left, 5px);
 +                }
 +
 +                @include min-screen(1000px) {
 +                    @include size(margin-top, 50px);
 +                    line-height: 1.2em;
 +                }
 +            }
 +            .other-download {
 +                @include min-screen($S_BOOK_SHORT_FULL) {
 +                    @include size(margin-left, 15px);
 +                    @include size(width, 220px);
 +                }
 +            }
 +        }
 +    }
 +}
 +
++/* FIXME: RWD */
++.picture.book-wide-box .right-column {
++    float: none;
++    @include size(width, 415px);
++    top: 0;
++    @include size(margin-left, 550px);
++    margin-top: 0em;
++}
++
 +
 +.book-box-body {
 +    @include size(margin-bottom, 10px);
 +    @include min-screen($S_BOOK_SHORT_FULL) {
 +        margin-bottom: 0;
 +        @include size(height, 170px);
 +    }
 +    position: relative;
 +
 +    .book-box-head,
 +    .tags,
 +    .book-box-tools {
 +        @include min-screen($S_BOOK_SHORT_FULL) {
 +            margin-left: 154px;
 +        }
 +    }
 +
 +    .book-box-head {
 +        @include size(padding-top, 14px);
 +        @include size(margin-bottom, 10px);
 +
 +        @include min-screen($S_BOOK_SHORT_FULL) {
 +            @include size(min-height, 70px);
 +        }
 +
 +        a {
 +            color: black;
 +        }
 +        .author {
 +            @include size(font-size, 11px);
 +            @include mono;
 +            @include size(line-height, 13.2px);
 +            @include size(max-height, 26.4px);
 +            overflow: hidden;
 +
 +            @include min-screen($S_BOOK_SHORT_FULL) {
 +                @include size(max-width, 264px);
 +            }
 +        }
 +        .title {
 +            @include size(font-size, 24px);
 +            line-height: 1.2em;
 +            @include size(margin-top, 7.2px);
 +            @include size(margin-bottom, 12px);
 +
 +            @include min-screen($S_BOOK_SHORT_FULL) {
 +                margin-bottom: 0;
 +                @include size(height, 57.6px);
 +                overflow: hidden;
 +            }
 +        }
 +    }
 +
 +    .tags {
 +        @include size(font-size, 11px);
 +        line-height: 1.2em;
 +
 +        @include min-screen($S_BOOK_SHORT_FULL) {
 +            clear: right;
 +            @include size(max-height, 57.6px);
 +            overflow: hidden;
 +        }
 +
 +        .category {
 +            display: block;
 +            @include size(margin-top, 6px);
 +            @include size(margin-bottom, 6px);
 +
 +            @include min-screen($S_BOOK_SHORT_FULL) {
 +                display: inline;
 +            }
 +
 +            .mono {
 +                @include mono;
 +            }
 +
 +            .book-box-tag {
 +                @include size(margin-left, 4.4px);
 +                @include size(margin-right, 5.5px);
 +            }
 +        }
 +    }
 +
 +}
 +
 +
 +
 +.book-box-tools {
 +    @include size(font-size, 11px);
 +    margin: 0;
 +    padding: 0;
 +    list-style: none;
 +
 +    clear: left;
 +
 +    @include min-screen($S_BOOK_SHORT_MEDIUM) {
 +        clear: none;
 +        @include size(margin-left, 139px + 15px);
 +    }
 +
 +    li {
 +        @include mono;
 +        margin-top: 1em;
 +
 +        @include min-screen($S_BOOK_SHORT_FULL) {
 +            display: inline-block;
 +            margin-top: 0;
 +        }
 +    }
 +
 +    .book-box-read {
 +        @include min-screen($S_BOOK_SHORT_FULL) {
 +            @include size(width, 126.5px);
 +        }
 +
 +        a {
 +            @include mono;
 +        }
 +
 +        a:before {
 +            content: url("/static/img/read.png");
 +            @include size(font-size, 25px);
 +            @include size(margin-right, 3.71px);
 +            vertical-align: middle;
 +            font-weight: normal;
 +        }
 +    }
 +
 +    .book-box-download {
 +        position: relative;
 +
 +        @include min-screen($S_BOOK_SHORT_FULL) {
 +            @include size(width, 93.5px);
 +        }
 +
 +        a {
 +            position: relative;
 +            z-index: 101;
 +
 +            &.downarrow {
 +                color: black;
 +
 +                @include min-screen($S_BOOK_SHORT_FULL) {
 +                    color: #0D7E85;
 +
 +                    &:before {
 +                        content: url("/static/img/download.png");
 +                        @include size(font-size, 25px);
 +                        @include size(margin-right, 3.71px);
 +                        vertical-align: middle;
 +                        font-weight: normal;
 +                    }
 +                }
 +            }
 +        }
 +
 +        .book-box-formats {
 +            @include size(padding-left, 19px);
 +
 +            @include min-screen($S_BOOK_SHORT_FULL) {
 +                display: none;
 +                position: absolute;
 +
 +                @include size(width, 180px);
 +                @include size(padding-top, 38px);
 +                @include size(padding-bottom, 9px);
 +                @include size(padding-left, 19px);
 +                @include size(padding-right, 19px);
 +
 +                @include white-box;
 +
 +                z-index: 100;
 +
 +                @include size(top, -16px);
 +                @include size(left, -19px);
 +            }
 +
 +            span {
 +                display: block;
 +                @include size(margin-top, 16px);
 +
 +                a {
 +                    &:before {
 +                        content: url("/static/img/download.png");
 +                        @include size(font-size, 25px);
 +                        @include size(margin-right, 3.71px);
 +                        vertical-align: middle;
 +                        font-weight: normal;
 +                    }
 +                }
 +
 +                @include min-screen($S_BOOK_SHORT_FULL) {
 +                    @include size(margin-top, 0);
 +
 +                    &:first-child {
 +                        @include size(margin-top, 16px);
 +                    }
 +                    a:before {
 +                        display:none;
 +                    }
 +                }
 +            }
 +        }
 +
 +        &:hover .book-box-formats,
 +        &.hover .book-box-formats {
 +            display: block;
 +        }
 +    }
 +
 +    .book-box-audiobook {
 +        @include min-screen($S_BOOK_SHORT_FULL) {
 +            @include size(width, 77px);
 +        }
 +
 +        a:before {
 +            content: url("/static/img/listen.png");
 +            @include size(font-size, 25px);
 +            @include size(margin-right, 3.71px);
 +            vertical-align: middle;
 +            font-weight: normal;
 +        }
 +
 +    }
 +}
 +
 +
 +
 +
 +.star {
 +    @include size(font-size, 22.5px);
 +    @include size(margin-right, 11.25px);
 +    position: absolute;
 +    right: 0;
 +
 +    button::-moz-focus-inner {
 +        padding: 0;
 +        border: 0
 +    }
 +    .if-unlike button {
 +        font-size: 1em;
 +        font-family: inherit;
 +        border: 0;
 +        background: none;
 +        margin: 0;
 +        padding: 0;
 +        color: #757575;
 +    }
 +    .if-like a {
 +        display:block;
 +        text-align:right;
 +        padding: 0;
 +    }
 +}
 +.like .if-unlike {
 +    display: none;
 +}
 +.unlike .if-like {
 +    display: none;
 +}
 +
 +
 +#book-detail .see-also {
 +    h1 {
 +        @include size(height, 32px);
 +        margin: 0;
 +        @include size(padding-top, 19px);
 +        @include size(padding-left, 10px);
 +
 +        @include size(font-size, 11px);
 +        @include mono;
 +        font-weight: normal;
 +
 +        @media screen and (min-width: 33em) {
 +            @include size(padding-left, 19px);
 +        }
 +    }
 +}
index 1eaf61c,0000000..4c765f6
mode 100755,000000..100755
--- /dev/null
@@@ -1,14 -1,0 +1,35 @@@
- .Fragment-item {
++.Fragment-item, .PictureArea-item {
 +    @include size(margin-bottom, 20px);
 +    @include white-box;
 +
 +    .fragment {
 +        color: black;
 +        display: block;
 +    }
 +    .toggle {
 +        @include size(font-size, 11px);
 +        display: block;
 +        @include size(padding, 5px 0);
 +    }
 +}
++
++.area {
++    display: block;
++    color: black;
++    background: white;
++    @include size(padding, 30px 20px 20px 20px);
++    position: relative;
++    clear: both;
++
++    .area-thumbnail {
++        display:block;
++        @include size(width, 100px);
++        float: left;
++    }
++
++    .area-description {
++        float: right;
++        @include size(padding, 10px);
++        @include size(width, 256px);
++    }
++}
index 501b320,0000000..846e4c8
mode 100755,000000..100755
--- /dev/null
@@@ -1,177 -1,0 +1,177 @@@
-                 @include size(padding, 18px 13px 15px);
 +#nav-line {
 +    background-color: #e2e2e2;
 +    position: relative;
 +
 +    @media screen and (min-width: 62.5em) {
 +        @include size(width, 975px);
 +        margin: auto;
 +    }
 +
 +    #show-menu {
 +        display: block;
 +        float: left;
 +        @include size(line-height, 13px);
 +        @include size(padding, 18px 13px);
 +        color: #0c7076;
 +        @include size(font-size, 11px);
 +        @include mono;
 +
 +        .long {
 +            display: none;
 +
 +            &:after {
 +                @include size(padding-left, 10px);
 +                content: url("/static/img/arrow-gray.png");
 +                vertical-align: top;
 +            }
 +        }
 +
 +        @media screen and (min-width: 20em) {
 +            .long { display: inline; }
 +            .short { display: none; }
 +        }
 +
 +        @media screen and (min-width: 53em) {
 +            display: none;
 +        }
 +    }
 +
 +    ul#menu {
 +        list-style: none;
 +        padding: 0;
 +        margin: 0;
 +
 +        display: none;
 +        position: absolute;
 +        @include size(top, 49px);
 +        left: 0;
 +        @include size(right, 10px);
 +        z-index: 400;
 +
 +        @media screen and (min-width: 24em) {
 +            right: auto;
 +        }
 +
 +        @media screen and (min-width: 53em) {
 +            display: block !important;
 +            position: static;
 +            @include size(margin-left, 6px);
 +        }
 +
 +        li.menu {
 +            background-color: #e2e2e2;
 +
 +            @media screen and (min-width: 53em) {
 +                float: left;
 +            }
 +
 +            a.menu {
 +                display: block;
 +                @include size(line-height, 13px);
++                @include size(padding, 18px 12px 15px);
 +                @include size(border-bottom, 3px solid #e2e2e2);
 +                color: #0c7076;
 +                @include size(font-size, 11px);
 +                @include mono;
 +            }
 +
 +            a.hidden-box-trigger:hover {
 +                border-bottom-color: white;
 +            }
 +        }
 +    }
 +
 +    #lang-menu {
 +        display: block;
 +        float: right;
 +
 +        background: #f7f7f7;
 +        @include mono;
 +
 +        @media screen and (min-width: 15em) {
 +            position: relative;
 +        }
 +
 +        #lang-button {
 +            @include size(padding-left, 25px);
 +            @include size(padding-right, 20px);
 +
 +            display:block;
 +            @include size(line-height, 17px);
 +            @include size(padding-top, 16px);
 +            @include size(padding-bottom, 16px);
 +
 +            @include size(font-size, 10px);
 +            color: #717171;
 +
 +            .label {
 +                display: none;
 +
 +                @media screen and (min-width: 62.5em) {
 +                    display: inline;
 +                }
 +
 +                &:after {
 +                    @include size(padding-left, 10px);
 +                    content: url("/static/img/arrow-gray.png");
 +                    vertical-align: top;
 +                }
 +            }
 +
 +            .lang-flag {
 +                @include size(font-size, 13px);
 +                @include size(line-height, 15px);
 +            }
 +        }
 +
 +        #lang-menu-items {
 +            z-index: 9999;
 +
 +            button {
 +                @include mono;
 +                display: none;
 +                background: #f7f7f7;
 +                color: #6f6f6f;
 +                cursor: pointer;
 +                width: 100%;
 +                margin: 0;
 +                @include size(padding, 10px 0);
 +
 +                @media screen and (min-width: 62.5em) {
 +                    @include size(padding, 5px 0);
 +                }
 +
 +                border-width: 0;
 +                @include size(border-bottom, 1px solid #ddd);
 +
 +                @include size(font-size, 13px);
 +
 +                &.active {
 +                    color: #000;
 +                }
 +            }
 +        }
 +
 +        &:hover, &.hover {
 +            #lang-menu-items {
 +                position: absolute;
 +                padding: 0;
 +                left: 0;
 +                right: 0;
 +
 +                @media screen and (min-width: 15em) {
 +                    left: auto;
 +                    @include size(width, 180px);
 +                    @include size(top, 49px);
 +                }
 +                @media screen and (min-width: 62.5em) {
 +                    width: 100%;
 +                }
 +
 +                button {
 +                    display: block;
 +                }
 +            }
 +        }
 +    }
 +}
@@@ -14,25 -14,36 +14,25 @@@ MEDIA_URL = '/media/
  STATIC_URL = '/static/'
  
  # CSS and JavaScript file groups
 +
 +
  PIPELINE_CSS = {
 -    'all': {
 +    'main': {
          # styles both for mobile and for big screen
          'source_filenames': [
              'css/jquery.countdown.css', 
  
 -            'css/base.css',
 -            'css/cite.css',
 -            'css/header.css',
 -            'css/main_page.css',
 -            'css/dialogs.css',
 -            'css/picture_box.css',
 -            'css/book_box.css',
 -            'css/catalogue.css',
              'sponsors/css/sponsors.css',
 -            'css/auth.css',
 -            'funding/funding.scss',
 -            'polls/polls.scss',
 -            'css/form.scss',
 -
              'css/social/shelf_tags.css',
 +
 +            'uni_form/uni-form.css',
 +            'uni_form/default.uni-form.css',
 +
              'css/ui-lightness/jquery-ui-1.8.16.custom.css',
 +
 +            'scss/main.scss',
          ],
 -        'output_filename': 'css/compressed/all.css',
 -    },
 -    'ie': {
 -        'source_filenames': [
 -            'css/ie.css',
 -        ],
 -        'output_filename': 'css/compressed/ie.css',
 +        'output_filename': 'css/compressed/main.css',
      },
      'book': {
          'source_filenames': [
          ],
          'output_filename': 'css/compressed/book.css',
      },
 +    'book_text': {
 +        'source_filenames': [
 +            'scss/book_text.scss',
 +            'css/new.book.css',
 +        ],
 +        'output_filename': 'css/compressed/book_text.css',
 +    },
+     'picture': {
+         'source_filenames': [
+             'css/master.book.css',
+             'css/master.picture.css',
+         ],
+         'output_filename': 'css/compressed/picture.css',
+     },
      'player': {
          'source_filenames': [
              'jplayer/jplayer.blue.monday.css', 
@@@ -81,8 -92,6 +88,8 @@@ PIPELINE_JS = 
              'player/openplayer.js',
              'js/search.js',
              'funding/funding.js',
 +            
 +            'uni_form/uni-form.js',
              ),
          'output_filename': 'js/base.min.js',
      },
              'js/jquery.eventdelegation.js',
              'js/jquery.scrollto.js',
              'js/jquery.highlightfade.js',
 +            'js/book_text/other.js',
              'js/book.js',
+             'js/picture.js',
+             'js/raphael-min.js',
              'player/openplayer.js',
+             'js/progressSpin.min.js',
          ],
          'output_filename': 'js/book.min.js',
      },
 +    'book_text': {
 +        'source_filenames': [
 +            'js/jquery.form.js',
 +            'js/jquery.jqmodal.js',
 +            'js/book_text/*.js',
 +            'js/locale.js',
 +            'js/dialogs.js',
 +        ],
 +        'output_filename': 'js/book_text.js',
 +    },
      'book_ie': {
          'source_filenames': ('js/ierange-m2.js',),
          'output_filename': 'js/book_ie.min.js',
@@@ -127,12 -128,7 +137,12 @@@ PIPELINE_CSS_COMPRESSOR = Non
  PIPELINE_JS_COMPRESSOR = None
  
  PIPELINE_COMPILERS = (
 -    'pyscss_compiler.PySCSSCompiler',
 +    'pipeline.compilers.sass.SASSCompiler',
 +    # We could probably use PySCSS instead,
 +    # but they have some serious problems, like:
 +    # https://github.com/Kronuz/pyScss/issues/166 (empty list syntax)
 +    # https://github.com/Kronuz/pyScss/issues/258 (bad @media order)
 +    #'pyscss_compiler.PySCSSCompiler',
  )
 -PIPELINE_PYSCSS_BINARY = '/usr/bin/env /home/staging/wolnelektury.pl/ve/bin/pyscss'
 -PIPELINE_PYSCSS_ARGUMENTS = ''
 +#PIPELINE_PYSCSS_BINARY = '/usr/bin/env pyscss'
 +#PIPELINE_PYSCSS_ARGUMENTS = ''