add contrib locale to make-locale-pack, various bugfixes
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Fri, 16 Mar 2012 10:47:11 +0000 (11:47 +0100)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Fri, 16 Mar 2012 10:47:31 +0000 (11:47 +0100)
18 files changed:
apps/ajaxable/utils.py
apps/catalogue/templatetags/catalogue_tags.py
scripts/make-locale-pack
wolnelektury/context_processors.py
wolnelektury/locale/pl/LC_MESSAGES/django.mo
wolnelektury/locale/pl/LC_MESSAGES/django.po
wolnelektury/settings.py
wolnelektury/static/css/header.css
wolnelektury/static/css/main_page.css
wolnelektury/static/css/screen.css
wolnelektury/static/img/wiatrak.png [new file with mode: 0644]
wolnelektury/static/js/modernizr-latest.js [deleted file]
wolnelektury/static/js/modernizr.custom.19652.js [new file with mode: 0644]
wolnelektury/templates/catalogue/book_short.html
wolnelektury/templates/catalogue/book_text.html
wolnelektury/templates/main_page.html
wolnelektury/templates/superbase.html
wolnelektury/views.py

index 79eca52..02e8767 100755 (executable)
@@ -4,7 +4,6 @@ from django.http import (HttpResponse, HttpResponseRedirect,
         HttpResponseForbidden)
 from django.shortcuts import render_to_response
 from django.template import RequestContext
         HttpResponseForbidden)
 from django.shortcuts import render_to_response
 from django.template import RequestContext
-from django.utils.cache import patch_vary_headers
 from django.utils.encoding import force_unicode
 from django.utils.functional import Promise
 from django.utils.http import urlquote_plus
 from django.utils.encoding import force_unicode
 from django.utils.functional import Promise
 from django.utils.http import urlquote_plus
@@ -148,6 +147,16 @@ class AjaxableFormView(object):
         return render_to_response(template, context,
             context_instance=RequestContext(request))
 
         return render_to_response(template, context,
             context_instance=RequestContext(request))
 
+    def redirect_or_refresh(self, request, path, message=None):
+        """If the form is AJAX, refresh the page. If not, go to `path`.""" 
+        if request.is_ajax():
+            output = "<script>window.location.reload()</script>"
+            if message:
+                output = "<div class='normal-text'>" + message + "</div>" + output
+            return HttpResponse(output);
+        else:
+            return HttpResponseRedirect(path)
+
     def get_object(self, request, *args, **kwargs):
         """Override to parse view args and get some associated data."""
         return None
     def get_object(self, request, *args, **kwargs):
         """Override to parse view args and get some associated data."""
         return None
index e9b1610..61b3846 100644 (file)
@@ -308,7 +308,7 @@ def book_wide(context, book):
 
     return {
         'book': book,
 
     return {
         'book': book,
-        'main_link': reverse('book_text', args=[book.slug]),
+        'main_link': reverse('book_text', args=[book.slug]) if book.html_file else None,
         'related': book.related_info(),
         'extra_info': book.get_extra_info_value(),
         'hide_about': hide_about,
         'related': book.related_info(),
         'extra_info': book.get_extra_info_value(),
         'hide_about': hide_about,
index fbc6eba..81d6d9a 100755 (executable)
@@ -26,6 +26,12 @@ export_po()
        fi
     done
 
        fi
     done
 
+    for langdir in $ROOT/locale-contrib/*/; do
+        lang = `basename $langdir`
+        mkdir -p "$DST/$lang"
+        cp -v "${langdir}LC_MESSAGES/django.po" "${DST}/$lang/contrib.po"
+    done
+
     cp -v ${ROOT}/wolnelektury/static/js/locale.js $DST/locale.js.txt
     cp -v ${ROOT}/apps/infopages/fixtures/infopages.json $DST/infopages.json
 
     cp -v ${ROOT}/wolnelektury/static/js/locale.js $DST/locale.js.txt
     cp -v ${ROOT}/apps/infopages/fixtures/infopages.json $DST/infopages.json
 
@@ -48,6 +54,11 @@ for i in *; do
 done
 )
 
 done
 )
 
+(
+       pybabel extract -F "$ROOT/babel.cfg" -o "$ROOT/locale-contrib/django.pot" \
+         "`python -c 'import os,allauth; print os.path.dirname(allauth.__file__)'`"
+)
+
 export_po
 
 PACK=`pwd`/wl-lokalizacja.zip
 export_po
 
 PACK=`pwd`/wl-lokalizacja.zip
index fa8515e..c912116 100644 (file)
@@ -3,4 +3,5 @@ from django.conf import settings
 def extra_settings(request):
     return {
         'STATIC_URL': settings.STATIC_URL,
 def extra_settings(request):
     return {
         'STATIC_URL': settings.STATIC_URL,
+        'FULL_STATIC_URL': request.build_absolute_uri(settings.STATIC_URL)
     }
     }
index 8f4b1f1..342157a 100644 (file)
Binary files a/wolnelektury/locale/pl/LC_MESSAGES/django.mo and b/wolnelektury/locale/pl/LC_MESSAGES/django.mo differ
index 4246708..3c205f2 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: WolneLektury\n"
 "Report-Msgid-Bugs-To: \n"
 msgstr ""
 "Project-Id-Version: WolneLektury\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-05 13:06+0100\n"
-"PO-Revision-Date: 2012-01-31 17:04+0100\n"
+"POT-Creation-Date: 2012-03-16 11:42+0100\n"
+"PO-Revision-Date: 2012-03-16 11:42+0100\n"
 "Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: pl\n"
 "Last-Translator: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: pl\n"
@@ -17,18 +17,28 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Translated-Using: django-rosetta 0.5.6\n"
 "X-Poedit-Language: Polish\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Translated-Using: django-rosetta 0.5.6\n"
 "X-Poedit-Language: Polish\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2)\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
 
 
-#: views.py:31 views.py:32 templates/base.html:63
+#: views.py:33
+#: views.py:34
+#: templates/superbase.html:80
 msgid "Sign in"
 msgstr "Zaloguj się"
 
 msgid "Sign in"
 msgstr "Zaloguj się"
 
-#: views.py:47 views.py:48 views.py:73 templates/base.html:67
+#: views.py:40
+#: views.py:59
+#, python-format
+msgid "Already logged in as user %(user)s"
+msgstr "Już zalogowano jako użytkownik %(user)s."
+
+#: views.py:51
+#: views.py:52
+#: views.py:79
+#: templates/superbase.html:84
 msgid "Register"
 msgstr "Załóż konto"
 
 msgid "Register"
 msgstr "Załóż konto"
 
-#: views.py:68
+#: views.py:74
 msgid "You have to be logged in to continue"
 msgstr "Zaloguj się, aby kontynuować"
 
 msgid "You have to be logged in to continue"
 msgstr "Zaloguj się, aby kontynuować"
 
@@ -41,93 +51,142 @@ msgid "Page not found"
 msgstr "Strona nie znaleziona"
 
 #: templates/404.html:14
 msgstr "Strona nie znaleziona"
 
 #: templates/404.html:14
-msgid ""
-"We are sorry, but this page does not exist. Please check if you entered "
-"correct address or go to "
-msgstr ""
-"Przepraszamy, ale ta strona nie istnieje. Sprawdź czy podałeś dobry adres, "
-"lub przejdź do"
+msgid "We are sorry, but this page does not exist. Please check if you entered correct address or go to "
+msgstr "Przepraszamy, ale ta strona nie istnieje. Sprawdź czy podałeś dobry adres, lub przejdź do"
 
 #: templates/404.html:14
 msgid "main page"
 msgstr "strony głównej"
 
 
 #: templates/404.html:14
 msgid "main page"
 msgstr "strony głównej"
 
-#: templates/500.html:6 templates/500.html.py:54
+#: templates/500.html:6
+#: templates/500.html.py:17
 msgid "Server error"
 msgstr "Błąd serwera"
 
 msgid "Server error"
 msgstr "Błąd serwera"
 
-#: templates/500.html:55
-msgid ""
-"<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our "
-"<a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a "
-"href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the "
-"error.</p>"
+#: templates/500.html:19
+msgid "<p>The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our <a href='http://nowoczesnapolska.org.pl'>blog</a>.</p> <p>Inform our <a href='mailto:fundacja@nowoczesnapolska.org.pl'>administrators</a> about the error.</p>"
 msgstr ""
 msgstr ""
-"<p>Serwis Wolnelektury.pl jest chwilowo niedostępny. Odwiedź naszego <a "
-"href='http://nowoczesnapolska.org.pl'>bloga</a></p>\n"
-"<p>Powiadom <a href='mailto:fundacja@nowoczesnapolska.org."
-"pl'>administratorów</a> o błędzie.</p>"
+"<p>Serwis Wolnelektury.pl jest chwilowo niedostępny. Odwiedź naszego <a href='http://nowoczesnapolska.org.pl'>bloga</a></p>\n"
+"<p>Powiadom <a href='mailto:fundacja@nowoczesnapolska.org.pl'>administratorów</a> o błędzie.</p>"
 
 
-#: templates/503.html:6 templates/503.html.py:54
+#: templates/503.html:6
+#: templates/503.html.py:17
 msgid "Service unavailable"
 msgstr "Serwis niedostępny"
 
 msgid "Service unavailable"
 msgstr "Serwis niedostępny"
 
-#: templates/503.html:56
+#: templates/503.html:19
 msgid "The Wolnelektury.pl site is currently unavailable due to maintainance."
 msgid "The Wolnelektury.pl site is currently unavailable due to maintainance."
-msgstr ""
-"Serwis Wolnelektury.pl jest obecnie niedostępny z powodu prac "
-"konserwacyjnych."
+msgstr "Serwis Wolnelektury.pl jest obecnie niedostępny z powodu prac konserwacyjnych."
+
+#: templates/main_page.html:5
+#: templates/main_page.html.py:6
+msgid "Wolne Lektury internet library"
+msgstr "Biblioteka internetowa Wolne Lektury"
+
+#: templates/main_page.html:19
+msgid "What's new?"
+msgstr "Co nowego?"
+
+#: templates/main_page.html:27
+msgid "Recent publications"
+msgstr "Ostatnie publikacje"
+
+#: templates/main_page.html:37
+msgid "News"
+msgstr "Aktualności"
 
 
-#: templates/base.html:9 templates/catalogue/book_text.html:8
+#: templates/main_page.html:45
+msgid "Utilities"
+msgstr "Narzędzia"
+
+#: templates/main_page.html:48
+msgid "Report a bug or suggestion"
+msgstr "Zgłoś błąd lub sugestię"
+
+#: templates/main_page.html:51
+msgid "Widget"
+msgstr "Widget"
+
+#: templates/main_page.html:52
+msgid "Missing a book?"
+msgstr "Nie znalazłeś/-aś utworu?"
+
+#: templates/main_page.html:53
+#: templates/publish_plan.html:4
+#: templates/publish_plan.html.py:8
+msgid "Publishing plan"
+msgstr "Plan publikacji"
+
+#: templates/main_page.html:59
+msgid "Information"
+msgstr "Informacja"
+
+#: templates/main_page.html:79
+msgid "Image used:"
+msgstr "Użyto obrazu:"
+
+#: templates/superbase.html:17
+#: templates/catalogue/book_text.html:8
 #: templates/catalogue/player.html:10
 msgid "Wolne Lektury"
 msgstr "Wolne Lektury"
 
 #: templates/catalogue/player.html:10
 msgid "Wolne Lektury"
 msgstr "Wolne Lektury"
 
-#: templates/base.html:43
+#: templates/superbase.html:50
 #, python-format
 msgid ""
 "\n"
 #, python-format
 msgid ""
 "\n"
-"                    <a href='%(b)s'>%(c)s</a> free reading you have <a "
-"href='%(r)s'>right to</a>\n"
+"                    <a href='%(b)s'>%(c)s</a> free reading you have <a href='%(r)s'>right to</a>\n"
 "                    "
 msgid_plural ""
 "\n"
 "                    "
 msgid_plural ""
 "\n"
-"                    <a href='%(b)s'>%(c)s</a> free readings you have <a "
-"href='%(r)s'>right to</a>\n"
+"                    <a href='%(b)s'>%(c)s</a> free readings you have <a href='%(r)s'>right to</a>\n"
 "                    "
 msgstr[0] ""
 "\n"
 "                    "
 msgstr[0] ""
 "\n"
-"                    <a href='%(b)s'>%(c)s</a> darmowy utwór do której <a "
-"href='%(r)s'>masz prawo</a>\n"
+"                    <a href='%(b)s'>%(c)s</a> darmowy utwór do której <a href='%(r)s'>masz prawo</a>\n"
 "                    "
 msgstr[1] ""
 "\n"
 "                    "
 msgstr[1] ""
 "\n"
-"                    <a href='%(b)s'>%(c)s</a> darmowe utwory do których <a "
-"href='%(r)s'>masz prawo</a>\n"
+"                    <a href='%(b)s'>%(c)s</a> darmowe utwory do których <a href='%(r)s'>masz prawo</a>\n"
 "                    "
 msgstr[2] ""
 "\n"
 "                    "
 msgstr[2] ""
 "\n"
-"                    <a href='%(b)s'>%(c)s</a> darmowych utworów do których "
-"<a href='%(r)s'>masz prawo</a>\n"
+"                    <a href='%(b)s'>%(c)s</a> darmowych utworów do których <a href='%(r)s'>masz prawo</a>\n"
 "                    "
 
 "                    "
 
-#: templates/base.html:54
+#: templates/superbase.html:61
 msgid "Welcome"
 msgstr "Witaj"
 
 msgid "Welcome"
 msgstr "Witaj"
 
-#: templates/base.html:55
+#: templates/superbase.html:67
+#: templates/user.html:12
+msgid "Password"
+msgstr "Hasło"
+
+#: templates/superbase.html:68
+#: templates/user.html:13
+msgid "E-mail"
+msgstr "E-mail"
+
+#: templates/superbase.html:69
+#: templates/user.html:14
+msgid "Social accounts"
+msgstr "Konta społecznościowe"
+
+#: templates/superbase.html:72
 msgid "My shelf"
 msgstr "Moja półka"
 
 msgid "My shelf"
 msgstr "Moja półka"
 
-#: templates/base.html:57
+#: templates/superbase.html:74
 msgid "Administration"
 msgstr "Administracja"
 
 msgid "Administration"
 msgstr "Administracja"
 
-#: templates/base.html:59
+#: templates/superbase.html:76
 msgid "Logout"
 msgstr "Wyloguj"
 
 msgid "Logout"
 msgstr "Wyloguj"
 
-#: templates/base.html:89 templates/catalogue/search_multiple_hits.html:5
+#: templates/superbase.html:106
+#: templates/catalogue/search_multiple_hits.html:5
 #: templates/catalogue/search_no_hits.html:5
 #: templates/catalogue/search_no_hits.html:10
 #: templates/catalogue/search_too_short.html:5
 #: templates/catalogue/search_no_hits.html:5
 #: templates/catalogue/search_no_hits.html:10
 #: templates/catalogue/search_too_short.html:5
@@ -136,97 +195,48 @@ msgstr "Wyloguj"
 msgid "Search"
 msgstr "Szukaj"
 
 msgid "Search"
 msgstr "Szukaj"
 
-#: templates/base.html:112
+#: templates/superbase.html:129
 msgid "Language versions"
 msgstr "Wersje językowe"
 
 msgid "Language versions"
 msgstr "Wersje językowe"
 
-#: templates/base.html:142
+#: templates/superbase.html:159
 msgid ""
 "\n"
 msgid ""
 "\n"
-"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska."
-"org.pl/\">Modern Poland Foundation</a>.\n"
-"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/"
-"\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/"
-"\">Biblioteka Śląska</a> and <a href=\"http://www.bibliotekaelblaska.pl/"
-"\">Biblioteka Elbląska</a>, based on TNL, BŚ and BE resources.\n"
+"\t\t\t\tWolne Lektury is a project lead by <a href=\"http://nowoczesnapolska.org.pl/\">Modern Poland Foundation</a>.\n"
+"\t\t\t\tDigital reproductions are made by <a href=\"http://www.bn.org.pl/\">The National Library</a>, <a href=\"http://www.bs.katowice.pl/\">Biblioteka Śląska</a> and <a href=\"http://www.bibliotekaelblaska.pl/\">Biblioteka Elbląska</a>, based on TNL, BŚ and BE resources.\n"
 "\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n"
 "\t\t\t\t"
 msgstr ""
 "\n"
 "\t\t\t\tHosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>.\n"
 "\t\t\t\t"
 msgstr ""
 "\n"
-"Wolne Lektury to projekt prowadzony przez <a href=\"http://nowoczesnapolska."
-"org.pl/\">fundację Nowoczesna Polska</a>. \n"
-"Reprodukcje cyfrowe wykonane przez <a href=\"http://www.bn.org.pl/"
-"\">Bibliotekę Narodową</a>, <a href=\"http://www.bs.katowice.pl/"
-"\">Bibliotekę Śląską</a> i <a href=\"http://www.bibliotekaelblaska.pl/"
-"\">Bibliotekę Elbląską</a> z egzemplarzy pochodzących ze zbiorów BN, BŚ i "
-"BE.\n"
+"Wolne Lektury to projekt prowadzony przez <a href=\"http://nowoczesnapolska.org.pl/\">fundację Nowoczesna Polska</a>. \n"
+"Reprodukcje cyfrowe wykonane przez <a href=\"http://www.bn.org.pl/\">Bibliotekę Narodową</a>, <a href=\"http://www.bs.katowice.pl/\">Bibliotekę Śląską</a> i <a href=\"http://www.bibliotekaelblaska.pl/\">Bibliotekę Elbląską</a> z egzemplarzy pochodzących ze zbiorów BN, BŚ i BE.\n"
 "Hosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>."
 
 "Hosting: <a href=\"http://www.icm.edu.pl/\">ICM</a>."
 
-#: templates/base.html:149
+#: templates/superbase.html:166
 msgid ""
 "\n"
 msgid ""
 "\n"
-"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 "
-"lok. 125, tel/fax: (22) 621-30-17\n"
-"                e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl"
-"\">fundacja@nowoczesnapolska.org.pl</a>\n"
+"\t\t\t\tModern Poland Foundation, 00-514 Warsaw, ul. Marszałkowska 84/92 lok. 125, tel/fax: (22) 621-30-17\n"
+"                e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>\n"
 "\t\t\t\t"
 msgstr ""
 "\n"
 "\t\t\t\t"
 msgstr ""
 "\n"
-"Fundacja Nowoczesna Polska, 00-514 Warszawa, ul. Marszałkowska 84/92 lok. "
-"125, tel/fax: (22) 621-30-17, e-mail: <a href=\"mailto:"
-"fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>"
+"Fundacja Nowoczesna Polska, 00-514 Warszawa, ul. Marszałkowska 84/92 lok. 125, tel/fax: (22) 621-30-17, e-mail: <a href=\"mailto:fundacja@nowoczesnapolska.org.pl\">fundacja@nowoczesnapolska.org.pl</a>"
 
 
-#: templates/base.html:165
+#: templates/superbase.html:182
 msgid "Close"
 msgstr "Zamknij"
 
 msgid "Close"
 msgstr "Zamknij"
 
-#: templates/base.html:167
+#: templates/superbase.html:184
 msgid "Loading"
 msgstr "Ładowanie"
 
 msgid "Loading"
 msgstr "Ładowanie"
 
-#: templates/main_page.html:5
-msgid "Wolne Lektury internet library"
-msgstr "Biblioteka internetowa Wolne Lektury"
-
-#: templates/main_page.html:21
-msgid "Recent publications"
-msgstr ""
-
-#: templates/main_page.html:31
-msgid "News"
-msgstr "Aktualności"
-
-#: templates/main_page.html:39
-msgid "Utilities"
-msgstr ""
-
-#: templates/main_page.html:42
-msgid "Report a bug or suggestion"
-msgstr "Zgłoś błąd lub sugestię"
-
-#: templates/main_page.html:45
-msgid "Widget"
-msgstr "Widget"
-
-#: templates/main_page.html:46
-msgid "Missing a book?"
-msgstr "Nie znalazłeś/-aś utworu?"
+#: templates/user.html:5
+#: templates/user.html.py:9
+msgid "User"
+msgstr "Użytkownik"
 
 
-#: templates/main_page.html:47 templates/publish_plan.html:4
-#: templates/publish_plan.html.py:8
-msgid "Publishing plan"
-msgstr "Plan publikacji"
-
-#: templates/main_page.html:53
-#, fuzzy
-msgid "Information"
-msgstr "otwarty format"
-
-#: templates/main_page.html:73
-msgid "Image used:"
-msgstr "Użyto obrazu:"
-
-#: templates/admin/base_site.html:4 templates/admin/base_site.html.py:7
+#: templates/admin/base_site.html:4
+#: templates/admin/base_site.html.py:7
 msgid "Site administration"
 msgstr "Administracja stroną"
 
 msgid "Site administration"
 msgstr "Administracja stroną"
 
@@ -247,7 +257,15 @@ msgstr "uproszczone"
 msgid "Import book"
 msgstr "Importuj książkę"
 
 msgid "Import book"
 msgstr "Importuj książkę"
 
-#: templates/auth/login_register.html:7
+#: templates/auth/login.html:9
+msgid "Forgot Password?"
+msgstr "Nie pamiętasz hasła?"
+
+#: templates/auth/login.html:14
+msgid "Sign in using:"
+msgstr "Zaloguj się używając:"
+
+#: templates/auth/login_register.html:8
 msgid "or register"
 msgstr "albo załóż konto"
 
 msgid "or register"
 msgstr "albo załóż konto"
 
@@ -274,7 +292,7 @@ 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."
 
 "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:18
+#: templates/catalogue/book_detail.html:20
 #: templates/catalogue/tagged_object_list.html:74
 #: templates/catalogue/tagged_object_list.html:104
 msgid "See also"
 #: templates/catalogue/tagged_object_list.html:74
 #: templates/catalogue/tagged_object_list.html:104
 msgid "See also"
@@ -301,17 +319,9 @@ msgid ""
 "        distributed. If there are any additional copyrighted materials\n"
 "        provided with this work (such as annotations, motifs etc.), those\n"
 "        materials are licensed under the \n"
 "        distributed. If there are any additional copyrighted materials\n"
 "        provided with this work (such as annotations, motifs etc.), those\n"
 "        materials are licensed under the \n"
-"        <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative "
-"Commons Attribution-ShareAlike 3.0</a>\n"
+"        <a href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Creative Commons Attribution-ShareAlike 3.0</a>\n"
 "        license."
 "        license."
-msgstr ""
-"Ten utwór nie jest chroniony prawem autorskim i&nbsp;znajduje się w&nbsp;"
-"domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, "
-"publikować i&nbsp;rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi "
-"materiałami (przypisy, motywy literackie etc.), które podlegają prawu "
-"autorskiemu, to te dodatkowe materiały udostępnione są na licencji <a href="
-"\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-"
-"Na tych samych warunkach 3.0</a>."
+msgstr "Ten utwór nie jest chroniony prawem autorskim i&nbsp;znajduje się w&nbsp;domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, publikować i&nbsp;rozpowszechniać. Jeśli utwór opatrzony jest dodatkowymi materiałami (przypisy, motywy literackie etc.), które podlegają prawu autorskiemu, to te dodatkowe materiały udostępnione są na licencji <a href=\"http://creativecommons.org/licenses/by-sa/3.0/deed.pl\">Uznanie autorstwa-Na tych samych warunkach 3.0</a>."
 
 #: templates/catalogue/book_info.html:20
 msgid "Text prepared based on:"
 
 #: templates/catalogue/book_info.html:20
 msgid "Text prepared based on:"
@@ -321,7 +331,8 @@ msgstr "Tekst opracowany na podstawie:"
 msgid "Edited and annotated by:"
 msgstr "Opracowanie redakcyjne i przypisy:"
 
 msgid "Edited and annotated by:"
 msgstr "Opracowanie redakcyjne i przypisy:"
 
-#: templates/catalogue/book_list.html:7 templates/catalogue/book_list.html:10
+#: templates/catalogue/book_list.html:7
+#: templates/catalogue/book_list.html:10
 msgid "Listing of all works"
 msgstr "Spis wszystkich utworów"
 
 msgid "Listing of all works"
 msgstr "Spis wszystkich utworów"
 
@@ -337,67 +348,67 @@ msgstr "↑ góra ↑"
 msgid "Put a book on the shelf!"
 msgstr "Wrzuć lekturę na półkę!"
 
 msgid "Put a book on the shelf!"
 msgstr "Wrzuć lekturę na półkę!"
 
-#: templates/catalogue/book_sets.html:3 templates/catalogue/book_sets.html:6
+#: templates/catalogue/book_sets.html:3
+#: templates/catalogue/book_sets.html:6
 #: templates/catalogue/fragment_sets.html:16
 msgid "Create new shelf"
 msgstr "Utwórz nową półkę"
 
 #: templates/catalogue/book_sets.html:10
 msgid "You do not have any shelves. You can create one below, if you want to."
 #: templates/catalogue/fragment_sets.html:16
 msgid "Create new shelf"
 msgstr "Utwórz nową półkę"
 
 #: templates/catalogue/book_sets.html:10
 msgid "You do not have any shelves. You can create one below, if you want to."
-msgstr ""
-"Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę "
-"poniżej."
+msgstr "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę poniżej."
 
 #: templates/catalogue/book_sets.html:15
 msgid "Put on the shelf!"
 msgstr "Wrzuć na półkę"
 
 
 #: templates/catalogue/book_sets.html:15
 msgid "Put on the shelf!"
 msgstr "Wrzuć na półkę"
 
-#: templates/catalogue/book_short.html:51
+#: templates/catalogue/book_short.html:53
 #: templates/catalogue/picture_detail.html:54
 #: templates/picture/picture_short.html:22
 msgid "Epoch"
 msgstr "Epoka"
 
 #: templates/catalogue/picture_detail.html:54
 #: templates/picture/picture_short.html:22
 msgid "Epoch"
 msgstr "Epoka"
 
-#: templates/catalogue/book_short.html:58
+#: templates/catalogue/book_short.html:60
 #: templates/catalogue/picture_detail.html:60
 #: templates/picture/picture_short.html:29
 msgid "Kind"
 msgstr "Rodzaj"
 
 #: templates/catalogue/picture_detail.html:60
 #: templates/picture/picture_short.html:29
 msgid "Kind"
 msgstr "Rodzaj"
 
-#: templates/catalogue/book_short.html:65
+#: templates/catalogue/book_short.html:67
 msgid "Genre"
 msgstr "Gatunek"
 
 msgid "Genre"
 msgstr "Gatunek"
 
-#: templates/catalogue/book_short.html:80
+#: templates/catalogue/book_short.html:82
 msgid "Read online"
 msgstr "Czytaj online"
 
 msgid "Read online"
 msgstr "Czytaj online"
 
-#: templates/catalogue/book_short.html:84
-#: templates/catalogue/book_text.html:26 templates/catalogue/book_wide.html:53
+#: templates/catalogue/book_short.html:86
+#: templates/catalogue/book_text.html:26
+#: templates/catalogue/book_wide.html:53
 #: templates/lessons/ajax_document_detail.html:3
 msgid "Download"
 msgstr "Pobierz"
 
 #: templates/lessons/ajax_document_detail.html:3
 msgid "Download"
 msgstr "Pobierz"
 
-#: templates/catalogue/book_short.html:87
+#: templates/catalogue/book_short.html:89
 #: templates/catalogue/book_text.html:35
 msgid "to print"
 #: templates/catalogue/book_text.html:35
 msgid "to print"
-msgstr ""
+msgstr "do wydruku"
 
 
-#: templates/catalogue/book_short.html:90
+#: templates/catalogue/book_short.html:92
 msgid "for an e-book reader"
 msgid "for an e-book reader"
-msgstr ""
+msgstr "na czytnik e-booków"
 
 
-#: templates/catalogue/book_short.html:93
+#: templates/catalogue/book_short.html:95
 #: templates/catalogue/book_text.html:41
 msgid "for Kindle"
 #: templates/catalogue/book_text.html:41
 msgid "for Kindle"
-msgstr ""
+msgstr "na Kindle"
 
 
-#: templates/catalogue/book_short.html:96
-#, fuzzy
+#: templates/catalogue/book_short.html:98
+#: templates/catalogue/book_text.html:44
 msgid "for advanced usage"
 msgid "for advanced usage"
-msgstr "zaawansowane"
+msgstr "do zadań specjalnych"
 
 
-#: templates/catalogue/book_short.html:102
+#: templates/catalogue/book_short.html:104
 msgid "Listen"
 msgstr "Słuchaj"
 
 msgid "Listen"
 msgstr "Słuchaj"
 
@@ -405,7 +416,8 @@ msgstr "Słuchaj"
 msgid "Table of contents"
 msgstr "Spis treści"
 
 msgid "Table of contents"
 msgstr "Spis treści"
 
-#: templates/catalogue/book_text.html:22 templates/catalogue/menu.html:27
+#: templates/catalogue/book_text.html:22
+#: templates/catalogue/menu.html:27
 msgid "Themes"
 msgstr "Motywy"
 
 msgid "Themes"
 msgstr "Motywy"
 
@@ -417,21 +429,17 @@ msgstr "Nota red."
 msgid "Infobox"
 msgstr "Informacje"
 
 msgid "Infobox"
 msgstr "Informacje"
 
-#: templates/catalogue/book_text.html:25 templates/catalogue/player.html:33
+#: templates/catalogue/book_text.html:25
+#: templates/catalogue/player.html:33
 msgid "Book's page"
 msgstr "Strona utworu"
 
 #: templates/catalogue/book_text.html:38
 msgid "Book's page"
 msgstr "Strona utworu"
 
 #: templates/catalogue/book_text.html:38
-#, fuzzy
 msgid "for a reader"
 msgid "for a reader"
-msgstr "do czytania"
+msgstr "na czytnik"
 
 
-#: templates/catalogue/book_text.html:44
-#, fuzzy
-msgid "for advanced usege"
-msgstr "zaawansowane"
-
-#: templates/catalogue/book_text.html:46 templates/catalogue/book_wide.html:63
+#: templates/catalogue/book_text.html:46
+#: templates/catalogue/book_wide.html:63
 msgid "Download a custom PDF"
 msgstr "Stwórz własny plik PDF"
 
 msgid "Download a custom PDF"
 msgstr "Stwórz własny plik PDF"
 
@@ -480,7 +488,8 @@ msgstr "Miksuj treść utworu"
 msgid "Download all audiobooks for this book"
 msgstr "Pobierz wszystkie audiobooki tego utworu"
 
 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/catalogue.html:6
+#: templates/catalogue/catalogue.html:11
 msgid "Catalogue"
 msgstr "Katalog"
 
 msgid "Catalogue"
 msgstr "Katalog"
 
@@ -488,25 +497,29 @@ msgstr "Katalog"
 msgid "Download the catalogue in PDF format."
 msgstr "Pobierz katalog w formacie PDF."
 
 msgid "Download the catalogue in PDF format."
 msgstr "Pobierz katalog w formacie PDF."
 
-#: templates/catalogue/catalogue.html:19 templates/catalogue/menu.html:7
+#: templates/catalogue/catalogue.html:19
+#: templates/catalogue/menu.html:7
 #: templates/catalogue/search_multiple_hits.html:17
 #: templates/catalogue/tagged_object_list.html:26
 msgid "Authors"
 msgstr "Autorzy"
 
 #: templates/catalogue/search_multiple_hits.html:17
 #: templates/catalogue/tagged_object_list.html:26
 msgid "Authors"
 msgstr "Autorzy"
 
-#: templates/catalogue/catalogue.html:22 templates/catalogue/menu.html:17
+#: templates/catalogue/catalogue.html:22
+#: templates/catalogue/menu.html:17
 #: templates/catalogue/search_multiple_hits.html:25
 #: templates/catalogue/tagged_object_list.html:34
 msgid "Kinds"
 msgstr "Rodzaje"
 
 #: templates/catalogue/search_multiple_hits.html:25
 #: templates/catalogue/tagged_object_list.html:34
 msgid "Kinds"
 msgstr "Rodzaje"
 
-#: templates/catalogue/catalogue.html:25 templates/catalogue/menu.html:12
+#: templates/catalogue/catalogue.html:25
+#: templates/catalogue/menu.html:12
 #: templates/catalogue/search_multiple_hits.html:33
 #: templates/catalogue/tagged_object_list.html:42
 msgid "Genres"
 msgstr "Gatunki"
 
 #: templates/catalogue/search_multiple_hits.html:33
 #: templates/catalogue/tagged_object_list.html:42
 msgid "Genres"
 msgstr "Gatunki"
 
-#: templates/catalogue/catalogue.html:28 templates/catalogue/menu.html:22
+#: templates/catalogue/catalogue.html:28
+#: templates/catalogue/menu.html:22
 #: templates/catalogue/search_multiple_hits.html:41
 #: templates/catalogue/tagged_object_list.html:50
 msgid "Epochs"
 #: templates/catalogue/search_multiple_hits.html:41
 #: templates/catalogue/tagged_object_list.html:50
 msgid "Epochs"
@@ -529,19 +542,15 @@ msgstr "Ostatnio dodane audiobooki w formacie DAISY"
 msgid ""
 "System DAISY to uznany na całym świecie format udostępniania książek\n"
 "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n"
 msgid ""
 "System DAISY to uznany na całym świecie format udostępniania książek\n"
 "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n"
-"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez "
-"ograniczeń."
+"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez ograniczeń."
 msgstr ""
 "System DAISY to uznany na całym świecie format udostępniania książek\n"
 "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n"
 msgstr ""
 "System DAISY to uznany na całym świecie format udostępniania książek\n"
 "dostosowany do potrzeb osób słabowidzących, niewidomych oraz innych osób\n"
-"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez "
-"ograniczeń."
+"mających trudności z czytaniem. Możecie z nich korzystać bezpłatnie i bez ograniczeń."
 
 #: templates/catalogue/differentiate_tags.html:12
 msgid "The criteria are ambiguous. Please select one of the following options:"
 
 #: templates/catalogue/differentiate_tags.html:12
 msgid "The criteria are ambiguous. Please select one of the following options:"
-msgstr ""
-"Podane kryteria są niejednoznaczne. Proszę wybrać jedną z następujących "
-"możliwości:"
+msgstr "Podane kryteria są niejednoznaczne. Proszę wybrać jedną z następujących możliwości:"
 
 #: templates/catalogue/fragment_sets.html:2
 msgid "Shelves containing fragment"
 
 #: templates/catalogue/fragment_sets.html:2
 msgid "Shelves containing fragment"
@@ -549,9 +558,7 @@ msgstr "Półki zawierające fragment"
 
 #: templates/catalogue/fragment_sets.html:4
 msgid "You do not own any shelves. You can create one below, if you want to."
 
 #: templates/catalogue/fragment_sets.html:4
 msgid "You do not own any shelves. You can create one below, if you want to."
-msgstr ""
-"Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę "
-"poniżej."
+msgstr "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć nową półkę poniżej."
 
 #: templates/catalogue/fragment_sets.html:9
 msgid "Save all shelves"
 
 #: templates/catalogue/fragment_sets.html:9
 msgid "Save all shelves"
@@ -646,10 +653,8 @@ msgstr "%(cs)s, finansowanego przez %(fb)s"
 
 #: templates/catalogue/player.html:127
 #, python-format
 
 #: templates/catalogue/player.html:127
 #, python-format
-msgid ""
-"Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s."
-msgstr ""
-"Audiobooki przygotowane w ramach projektu %(cs)s finansowanego przez %(fb)s."
+msgid "Audiobooks were prepared as a part of the %(cs)s project funded by %(fb)s."
+msgstr "Audiobooki przygotowane w ramach projektu %(cs)s finansowanego przez %(fb)s."
 
 #: templates/catalogue/player.html:129
 #, python-format
 
 #: templates/catalogue/player.html:129
 #, python-format
@@ -684,13 +689,9 @@ msgstr "Przepraszamy! Brak wyników spełniających kryteria podane w zapytaniu.
 
 #: templates/catalogue/search_no_hits.html:21
 msgid ""
 
 #: templates/catalogue/search_no_hits.html:21
 msgid ""
-"Search engine supports following criteria: title, author, theme/topic, "
-"epoch, kind and genre.\n"
+"Search engine supports following criteria: title, author, theme/topic, epoch, kind and genre.\n"
 "\t\tAs for now we do not support full text search."
 "\t\tAs for now we do not support full text search."
-msgstr ""
-"Wyszukiwarka obsługuje takie kryteria jak tytuł, autor, motyw/temat, epoka, "
-"rodzaj i gatunek utworu. Obecnie nie obsługujemy wyszukiwania fraz w "
-"tekstach utworów."
+msgstr "Wyszukiwarka obsługuje takie kryteria jak tytuł, autor, motyw/temat, epoka, rodzaj i gatunek utworu. Obecnie nie obsługujemy wyszukiwania fraz w tekstach utworów."
 
 #: templates/catalogue/search_too_short.html:13
 msgid "Sorry! Search query must have at least two characters."
 
 #: templates/catalogue/search_too_short.html:13
 msgid "Sorry! Search query must have at least two characters."
@@ -716,8 +717,7 @@ msgstr "usuń"
 
 #: templates/catalogue/user_shelves.html:10
 msgid "You do not own any shelves. You can create one below if you want to"
 
 #: templates/catalogue/user_shelves.html:10
 msgid "You do not own any shelves. You can create one below if you want to"
-msgstr ""
-"Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć półkę poniżej."
+msgstr "Nie posiadasz żadnych półek. Jeśli chcesz, możesz utworzyć półkę poniżej."
 
 #: templates/catalogue/user_shelves.html:15
 msgid "Create shelf"
 
 #: templates/catalogue/user_shelves.html:15
 msgid "Create shelf"
@@ -739,32 +739,20 @@ msgid_plural ""
 "or transferring 1&#37; of your income tax</a>.\n"
 msgstr[0] ""
 "\n"
 "or transferring 1&#37; of your income tax</a>.\n"
 msgstr[0] ""
 "\n"
-"W serwisie Wolne Lektury już teraz opublikowany jest %(c)s utwór! Pomóż w "
-"rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://"
-"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazując nam darowiznę lub 1&#37; "
-"podatku</a>.\n"
+"W serwisie Wolne Lektury już teraz opublikowany jest %(c)s utwór! Pomóż w rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazując nam darowiznę lub 1&#37; podatku</a>.\n"
 msgstr[1] ""
 "\n"
 msgstr[1] ""
 "\n"
-"W serwisie Wolne Lektury już teraz opublikowane są %(c)s utwory! Pomóż w "
-"rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://"
-"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazując nam darowiznę lub 1&#37; "
-"podatku</a>.\n"
+"W serwisie Wolne Lektury już teraz opublikowane są %(c)s utwory! Pomóż w rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazując nam darowiznę lub 1&#37; podatku</a>.\n"
 msgstr[2] ""
 "\n"
 msgstr[2] ""
 "\n"
-"W serwisie Wolne Lektury już teraz opublikowanych jest %(c)s utworów! Pomóż "
-"w rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://"
-"nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazując nam darowiznę lub 1&#37; "
-"podatku</a>.\n"
+"W serwisie Wolne Lektury już teraz opublikowanych jest %(c)s utworów! Pomóż w rozwijaniu biblioteki i uwalnianiu nowych lektur <a href=\"http://nowoczesnapolska.org.pl/wesprzyj_nas/\">przekazując nam darowiznę lub 1&#37; podatku</a>.\n"
 
 #: templates/info/join_us.html:20
 msgid ""
 "Become an editor of Wolne Lektury! Find out if\n"
 "we're currently working on a reading you're looking for and prepare\n"
 "a publication by yourself by logging into the Editorial Platform."
 
 #: templates/info/join_us.html:20
 msgid ""
 "Become an editor of Wolne Lektury! Find out if\n"
 "we're currently working on a reading you're looking for and prepare\n"
 "a publication by yourself by logging into the Editorial Platform."
-msgstr ""
-"Zostań redaktorem lub redaktorką Wolnych Lektur! Sprawdź, czy obecnie "
-"pracujemy nad publikacją wyszukiwanej przez ciebie lektury i samodzielnie "
-"przygotuj publikację logując się na Platformie Redakcyjnej."
+msgstr "Zostań redaktorem lub redaktorką Wolnych Lektur! Sprawdź, czy obecnie pracujemy nad publikacją wyszukiwanej przez ciebie lektury i samodzielnie przygotuj publikację logując się na Platformie Redakcyjnej."
 
 #: templates/info/join_us.html:23
 msgid "More..."
 
 #: templates/info/join_us.html:23
 msgid "More..."
@@ -779,6 +767,15 @@ msgstr "autor"
 msgid "Hand-outs for teachers"
 msgstr "Materiały pomocnicze dla nauczycieli"
 
 msgid "Hand-outs for teachers"
 msgstr "Materiały pomocnicze dla nauczycieli"
 
+#: templates/openid/login.html:6
+#: templates/openid/login.html.py:10
+msgid "OpenID Sign In"
+msgstr "Zaloguj przez OpenID"
+
+#: templates/openid/login.html:27
+msgid "Sign In"
+msgstr "Zaloguj się"
+
 #: templates/pagination/pagination.html:5
 #: templates/pagination/pagination.html:7
 msgid "previous"
 #: templates/pagination/pagination.html:5
 #: templates/pagination/pagination.html:7
 msgid "previous"
@@ -803,54 +800,29 @@ msgstr "Dzieła tego autora objęte są prawem autorskim."
 
 #: templates/pdcounter/author_detail.html:36
 #: templates/pdcounter/author_detail.html:44
 
 #: templates/pdcounter/author_detail.html:36
 #: templates/pdcounter/author_detail.html:44
-msgid ""
-"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</"
-"a> why Internet libraries can't publish this author's works."
-msgstr ""
-"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz "
-"się</a>, dlaczego biblioteki internetowe nie mogą udostępniać dzieł tego "
-"autora."
+msgid "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this author's works."
+msgstr "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz się</a>, dlaczego biblioteki internetowe nie mogą udostępniać dzieł tego autora."
 
 #: templates/pdcounter/author_detail.html:39
 
 #: templates/pdcounter/author_detail.html:39
-msgid ""
-"This author's works are in public domain and will be published on Internet "
-"school library of Wolne Lektury soon."
-msgstr ""
-"Dzieła tego autora znajdują się w domenie publicznej i niedługo zostaną "
-"opublikowane w szkolnej bibliotece internetowej Wolne Lektury."
+msgid "This author's works are in public domain and will be published on Internet school library of Wolne Lektury soon."
+msgstr "Dzieła tego autora znajdują się w domenie publicznej i niedługo zostaną opublikowane w szkolnej bibliotece internetowej Wolne Lektury."
 
 #: templates/pdcounter/author_detail.html:42
 
 #: templates/pdcounter/author_detail.html:42
-msgid ""
-"This author's works will become part of public domain and will be allowed to "
-"be published without restrictions in"
-msgstr ""
-"Dzieła tego autora przejdą do zasobów domeny publicznej i będą mogły być "
-"publikowane bez żadnych ograniczeń za"
+msgid "This author's works will become part of public domain and will be allowed to be published without restrictions in"
+msgstr "Dzieła tego autora przejdą do zasobów domeny publicznej i będą mogły być publikowane bez żadnych ograniczeń za"
 
 #: templates/pdcounter/book_stub_detail.html:16
 
 #: templates/pdcounter/book_stub_detail.html:16
-msgid ""
-"This work is in public domain and will be published on Internet school "
-"library of Wolne Lektury soon."
-msgstr ""
-"To dzieło znajduje się w domenie publicznej i niedługo zostanie opublikowane "
-"w szkolnej bibliotece internetowej Wolne Lektury."
+msgid "This work is in public domain and will be published on Internet school library of Wolne Lektury soon."
+msgstr "To dzieło znajduje się w domenie publicznej i niedługo zostanie opublikowane w szkolnej bibliotece internetowej Wolne Lektury."
 
 #: templates/pdcounter/book_stub_detail.html:19
 
 #: templates/pdcounter/book_stub_detail.html:19
-msgid ""
-"This work will become part of public domain and will be allowed to be "
-"published without restrictions in"
-msgstr ""
-"To dzieło przejdzie do zasobów domeny publicznej i będzie mogło być "
-"publikowane bez żadnych ograniczeń za"
+msgid "This work will become part of public domain and will be allowed to be published without restrictions in"
+msgstr "To dzieło przejdzie do zasobów domeny publicznej i będzie mogło być publikowane bez żadnych ograniczeń za"
 
 #: templates/pdcounter/book_stub_detail.html:21
 #: templates/pdcounter/book_stub_detail.html:24
 
 #: templates/pdcounter/book_stub_detail.html:21
 #: templates/pdcounter/book_stub_detail.html:24
-msgid ""
-"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</"
-"a> why Internet libraries can't publish this work."
-msgstr ""
-"<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz "
-"się</a>, dlaczego biblioteki internetowe nie mogą udostępniać tego dzieła."
+msgid "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Find out</a> why Internet libraries can't publish this work."
+msgstr "<a href='http://domenapubliczna.org/co-to-jest-domena-publiczna/'>Dowiedz się</a>, dlaczego biblioteki internetowe nie mogą udostępniać tego dzieła."
 
 #: templates/pdcounter/book_stub_detail.html:23
 msgid "This work is copyrighted."
 
 #: templates/pdcounter/book_stub_detail.html:23
 msgid "This work is copyrighted."
@@ -861,21 +833,51 @@ msgstr "To dzieło objęte jest prawem autorskim."
 msgid "Authorize access to Wolne Lektury"
 msgstr "Zezwól na dostęp do Wolnych Lektur"
 
 msgid "Authorize access to Wolne Lektury"
 msgstr "Zezwól na dostęp do Wolnych Lektur"
 
-#: templates/piston/authorize_token.html:9
+#: templates/piston/authorize_token.html:10
 #, python-format
 #, python-format
-msgid ""
-"Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</"
-"strong>."
-msgstr ""
-"Potwierdź dostęp do Wolnych Lektur jako użytkownik <strong>%(user)s</strong>."
+msgid "Confirm to authorize access to Wolne Lektury as user <strong>%(user)s</strong>."
+msgstr "Potwierdź dostęp do Wolnych Lektur jako użytkownik <strong>%(user)s</strong>."
 
 
-#: templates/registration/login.html:4 templates/registration/login.html:7
-msgid "Login to Wolne Lektury"
-msgstr "Zaloguj się do Wolnych Lektur"
+#: templates/socialaccount/connections.html:5
+#: templates/socialaccount/connections.html:8
+msgid "Account Connections"
+msgstr "Powiązania konta"
 
 
-#: templates/registration/login.html:14
-msgid "Login"
-msgstr "Zaloguj się"
+#: templates/socialaccount/connections.html:11
+msgid "You can sign in to your account using any of the following third party accounts:"
+msgstr "Możesz się zalogować na swoje konto korzystając z następujących kont zewnętrznych:"
+
+#: templates/socialaccount/connections.html:35
+msgid "Remove"
+msgstr "Usuń"
+
+#: templates/socialaccount/connections.html:43
+msgid "You currently have no social network accounts connected to this account."
+msgstr "Na razie nie jest podłączone żadne konto społecznościowe."
+
+#: templates/socialaccount/connections.html:46
+msgid "Add a 3rd Party Account"
+msgstr "Dodaj konto zewnętrzne"
+
+#: templates/socialaccount/login_cancelled.html:5
+#: templates/socialaccount/login_cancelled.html:9
+msgid "Login Cancelled"
+msgstr "Anulowano logowanie"
+
+#: templates/socialaccount/login_cancelled.html:14
+#, python-format
+msgid "You decided to cancel logging in to our site using one of your exisiting accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s\">sign in</a>."
+msgstr "Postanowiłeś/-aś przerwać logowanie się do naszej strony przy użyciu zewnętrznego konta. Jeśli to pomyłka, przejdź proszę do <a href=\"%(login_url)s\">strony logowania</a>."
+
+#, fuzzy
+#~ msgid "for advanced usege"
+#~ msgstr "zaawansowane"
+
+#~ msgid "Login to Wolne Lektury"
+#~ msgstr "Zaloguj się do Wolnych Lektur"
+
+#~ msgid "Login"
+#~ msgstr "Zaloguj się"
 
 #~ msgid "Mobile app"
 #~ msgstr "Aplikacja mobilna"
 
 #~ msgid "Mobile app"
 #~ msgstr "Aplikacja mobilna"
@@ -971,6 +973,7 @@ msgstr "Zaloguj się"
 #~ "under\n"
 #~ "a <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>free "
 #~ "license</a>.\n"
 #~ "under\n"
 #~ "a <a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>free "
 #~ "license</a>.\n"
+
 #~ msgid_plural ""
 #~ "\n"
 #~ "%(c)s books from <a href='http://domenapubliczna.org'>public domain</a> "
 #~ msgid_plural ""
 #~ "\n"
 #~ "%(c)s books from <a href='http://domenapubliczna.org'>public domain</a> "
index 3f842e7..ab74294 100644 (file)
@@ -138,7 +138,7 @@ INSTALLED_APPS = [
     'pagination',
     'piston',
     'piwik.django',
     'pagination',
     'piston',
     'piwik.django',
-    'rosetta',
+    #'rosetta',
     'south',
     'sorl.thumbnail',
     'djcelery',
     'south',
     'sorl.thumbnail',
     'djcelery',
index 5a19676..647bb60 100755 (executable)
@@ -29,7 +29,7 @@
 #logo a {
     color:#f7f7f7;
     font-size: 2.05em;
 #logo a {
     color:#f7f7f7;
     font-size: 2.05em;
-    text-shadow: 0 0 10px #17CFDB;
+    text-shadow: 0 0 10px #f7f7f7;
 }
 
 #tagline {
 }
 
 #tagline {
index b564e82..331e210 100755 (executable)
     padding: 2em 2.8em;
     background: #efefef;
 }
     padding: 2em 2.8em;
     background: #efefef;
 }
-#promo-box-title {
+#promo-box h3 {
     color: #0d777e;
     color: #0d777e;
-    height: 2.75em;
+    font-size: 1.1em;
+    height: 2.5em; /* 2.75@1.1 */
     margin: 0;
     margin: 0;
+    font-family: "Andale Mono", "Lucida Sans Typewriter", "Courier New";
+    font-weight: normal;
+}
+#promo-box h3:after {
+       content: " >";
 }
 }
-#promo-box-title a {
+#promo-box a {
        color: #0d777e;
 }
        color: #0d777e;
 }
-#promo-box-title span {
-    font-size: 1.1em;
+#promo-box-body a {
+       display: block;
+    color: #6c6c6c;
 }
 #promo-box-body p {
     margin-top: 0;
 }
 #promo-box-body p {
     margin-top: 0;
-}
-#promo-box-content {
     font-size: 1.2em;
     line-height: 1.55em;
     color: #6c6c6c;
     font-size: 1.2em;
     line-height: 1.55em;
     color: #6c6c6c;
index 3a344dc..3110210 100644 (file)
 #search-button {
        float: right;
 }
 #search-button {
        float: right;
 }
+
+
+/* Book list */
+
+#book-list-nav {
+    border-left: 1px solid #CFCFCF;
+    padding: .75em;
+    position: absolute;
+    right: 4em;
+    width: 25em;
+}
\ No newline at end of file
diff --git a/wolnelektury/static/img/wiatrak.png b/wolnelektury/static/img/wiatrak.png
new file mode 100644 (file)
index 0000000..e96a0c1
Binary files /dev/null and b/wolnelektury/static/img/wiatrak.png differ
diff --git a/wolnelektury/static/js/modernizr-latest.js b/wolnelektury/static/js/modernizr-latest.js
deleted file mode 100644 (file)
index f9e57c8..0000000
+++ /dev/null
@@ -1,1116 +0,0 @@
-/*!
- * Modernizr v2.0.6
- * http://www.modernizr.com
- *
- * Copyright (c) 2009-2011 Faruk Ates, Paul Irish, Alex Sexton
- * Dual-licensed under the BSD or MIT licenses: www.modernizr.com/license/
- */
-
-/*
- * Modernizr tests which native CSS3 and HTML5 features are available in
- * the current UA and makes the results available to you in two ways:
- * as properties on a global Modernizr object, and as classes on the
- * <html> element. This information allows you to progressively enhance
- * your pages with a granular level of control over the experience.
- *
- * Modernizr has an optional (not included) conditional resource loader
- * called Modernizr.load(), based on Yepnope.js (yepnopejs.com).
- * To get a build that includes Modernizr.load(), as well as choosing
- * which tests to include, go to www.modernizr.com/download/
- *
- * Authors        Faruk Ates, Paul Irish, Alex Sexton, 
- * Contributors   Ryan Seddon, Ben Alman
- */
-
-window.Modernizr = (function( window, document, undefined ) {
-
-    var version = '2.0.6',
-
-    Modernizr = {},
-    
-    // option for enabling the HTML classes to be added
-    enableClasses = true,
-
-    docElement = document.documentElement,
-    docHead = document.head || document.getElementsByTagName('head')[0],
-
-    /**
-     * Create our "modernizr" element that we do most feature tests on.
-     */
-    mod = 'modernizr',
-    modElem = document.createElement(mod),
-    mStyle = modElem.style,
-
-    /**
-     * Create the input element for various Web Forms feature tests.
-     */
-    inputElem = document.createElement('input'),
-
-    smile = ':)',
-
-    toString = Object.prototype.toString,
-
-    // List of property values to set for css tests. See ticket #21
-    prefixes = ' -webkit- -moz- -o- -ms- -khtml- '.split(' '),
-
-    // Following spec is to expose vendor-specific style properties as:
-    //   elem.style.WebkitBorderRadius
-    // and the following would be incorrect:
-    //   elem.style.webkitBorderRadius
-
-    // Webkit ghosts their properties in lowercase but Opera & Moz do not.
-    // Microsoft foregoes prefixes entirely <= IE8, but appears to
-    //   use a lowercase `ms` instead of the correct `Ms` in IE9
-
-    // More here: http://github.com/Modernizr/Modernizr/issues/issue/21
-    domPrefixes = 'Webkit Moz O ms Khtml'.split(' '),
-
-    ns = {'svg': 'http://www.w3.org/2000/svg'},
-
-    tests = {},
-    inputs = {},
-    attrs = {},
-
-    classes = [],
-
-    featureName, // used in testing loop
-
-
-    // Inject element with style element and some CSS rules
-    injectElementWithStyles = function( rule, callback, nodes, testnames ) {
-
-      var style, ret, node,
-          div = document.createElement('div');
-
-      if ( parseInt(nodes, 10) ) {
-          // In order not to give false positives we create a node for each test
-          // This also allows the method to scale for unspecified uses
-          while ( nodes-- ) {
-              node = document.createElement('div');
-              node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
-              div.appendChild(node);
-          }
-      }
-
-      // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed
-      // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element
-      // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
-      // http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
-      style = ['&shy;', '<style>', rule, '</style>'].join('');
-      div.id = mod;
-      div.innerHTML += style;
-      docElement.appendChild(div);
-
-      ret = callback(div, rule);
-      div.parentNode.removeChild(div);
-
-      return !!ret;
-
-    },
-
-
-    // adapted from matchMedia polyfill
-    // by Scott Jehl and Paul Irish
-    // gist.github.com/786768
-    testMediaQuery = function( mq ) {
-
-      if ( window.matchMedia ) {
-        return matchMedia(mq).matches;
-      }
-
-      var bool;
-
-      injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
-        bool = (window.getComputedStyle ?
-                  getComputedStyle(node, null) :
-                  node.currentStyle)['position'] == 'absolute';
-      });
-
-      return bool;
-
-     },
-
-
-    /**
-      * isEventSupported determines if a given element supports the given event
-      * function from http://yura.thinkweb2.com/isEventSupported/
-      */
-    isEventSupported = (function() {
-
-      var TAGNAMES = {
-        'select': 'input', 'change': 'input',
-        'submit': 'form', 'reset': 'form',
-        'error': 'img', 'load': 'img', 'abort': 'img'
-      };
-
-      function isEventSupported( eventName, element ) {
-
-        element = element || document.createElement(TAGNAMES[eventName] || 'div');
-        eventName = 'on' + eventName;
-
-        // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
-        var isSupported = eventName in element;
-
-        if ( !isSupported ) {
-          // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
-          if ( !element.setAttribute ) {
-            element = document.createElement('div');
-          }
-          if ( element.setAttribute && element.removeAttribute ) {
-            element.setAttribute(eventName, '');
-            isSupported = is(element[eventName], 'function');
-
-            // If property was created, "remove it" (by setting value to `undefined`)
-            if ( !is(element[eventName], undefined) ) {
-              element[eventName] = undefined;
-            }
-            element.removeAttribute(eventName);
-          }
-        }
-
-        element = null;
-        return isSupported;
-      }
-      return isEventSupported;
-    })();
-
-    // hasOwnProperty shim by kangax needed for Safari 2.0 support
-    var _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty;
-    if ( !is(_hasOwnProperty, undefined) && !is(_hasOwnProperty.call, undefined) ) {
-      hasOwnProperty = function (object, property) {
-        return _hasOwnProperty.call(object, property);
-      };
-    }
-    else {
-      hasOwnProperty = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
-        return ((property in object) && is(object.constructor.prototype[property], undefined));
-      };
-    }
-
-    /**
-     * setCss applies given styles to the Modernizr DOM node.
-     */
-    function setCss( str ) {
-        mStyle.cssText = str;
-    }
-
-    /**
-     * setCssAll extrapolates all vendor-specific css strings.
-     */
-    function setCssAll( str1, str2 ) {
-        return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
-    }
-
-    /**
-     * is returns a boolean for if typeof obj is exactly type.
-     */
-    function is( obj, type ) {
-        return typeof obj === type;
-    }
-
-    /**
-     * contains returns a boolean for if substr is found within str.
-     */
-    function contains( str, substr ) {
-        return !!~('' + str).indexOf(substr);
-    }
-
-    /**
-     * testProps is a generic CSS / DOM property test; if a browser supports
-     *   a certain property, it won't return undefined for it.
-     *   A supported CSS property returns empty string when its not yet set.
-     */
-    function testProps( props, prefixed ) {
-        for ( var i in props ) {
-            if ( mStyle[ props[i] ] !== undefined ) {
-                return prefixed == 'pfx' ? props[i] : true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * testPropsAll tests a list of DOM properties we want to check against.
-     *   We specify literally ALL possible (known and/or likely) properties on
-     *   the element including the non-vendor prefixed one, for forward-
-     *   compatibility.
-     */
-    function testPropsAll( prop, prefixed ) {
-
-        var ucProp  = prop.charAt(0).toUpperCase() + prop.substr(1),
-            props   = (prop + ' ' + domPrefixes.join(ucProp + ' ') + ucProp).split(' ');
-
-        return testProps(props, prefixed);
-    }
-
-    /**
-     * testBundle tests a list of CSS features that require element and style injection.
-     *   By bundling them together we can reduce the need to touch the DOM multiple times.
-     */
-    /*>>testBundle*/
-    var testBundle = (function( styles, tests ) {
-        var style = styles.join(''),
-            len = tests.length;
-
-        injectElementWithStyles(style, function( node, rule ) {
-            var style = document.styleSheets[document.styleSheets.length - 1],
-                // IE8 will bork if you create a custom build that excludes both fontface and generatedcontent tests.
-                // So we check for cssRules and that there is a rule available
-                // More here: https://github.com/Modernizr/Modernizr/issues/288 & https://github.com/Modernizr/Modernizr/issues/293
-                cssText = style.cssRules && style.cssRules[0] ? style.cssRules[0].cssText : style.cssText || "",
-                children = node.childNodes, hash = {};
-
-            while ( len-- ) {
-                hash[children[len].id] = children[len];
-            }
-
-            /*>>touch*/           Modernizr['touch'] = ('ontouchstart' in window) || hash['touch'].offsetTop === 9; /*>>touch*/
-            /*>>csstransforms3d*/ Modernizr['csstransforms3d'] = hash['csstransforms3d'].offsetLeft === 9;          /*>>csstransforms3d*/
-            /*>>generatedcontent*/Modernizr['generatedcontent'] = hash['generatedcontent'].offsetHeight >= 1;       /*>>generatedcontent*/
-            /*>>fontface*/        Modernizr['fontface'] = /src/i.test(cssText) &&
-                                                                  cssText.indexOf(rule.split(' ')[0]) === 0;        /*>>fontface*/
-        }, len, tests);
-
-    })([
-        // Pass in styles to be injected into document
-        /*>>fontface*/        '@font-face {font-family:"font";src:url("https://")}'         /*>>fontface*/
-        
-        /*>>touch*/           ,['@media (',prefixes.join('touch-enabled),('),mod,')',
-                                '{#touch{top:9px;position:absolute}}'].join('')           /*>>touch*/
-                                
-        /*>>csstransforms3d*/ ,['@media (',prefixes.join('transform-3d),('),mod,')',
-                                '{#csstransforms3d{left:9px;position:absolute}}'].join('')/*>>csstransforms3d*/
-                                
-        /*>>generatedcontent*/,['#generatedcontent:after{content:"',smile,'";visibility:hidden}'].join('')  /*>>generatedcontent*/
-    ],
-      [
-        /*>>fontface*/        'fontface'          /*>>fontface*/
-        /*>>touch*/           ,'touch'            /*>>touch*/
-        /*>>csstransforms3d*/ ,'csstransforms3d'  /*>>csstransforms3d*/
-        /*>>generatedcontent*/,'generatedcontent' /*>>generatedcontent*/
-        
-    ]);/*>>testBundle*/
-
-
-    /**
-     * Tests
-     * -----
-     */
-
-    tests['flexbox'] = function() {
-        /**
-         * setPrefixedValueCSS sets the property of a specified element
-         * adding vendor prefixes to the VALUE of the property.
-         * @param {Element} element
-         * @param {string} property The property name. This will not be prefixed.
-         * @param {string} value The value of the property. This WILL be prefixed.
-         * @param {string=} extra Additional CSS to append unmodified to the end of
-         * the CSS string.
-         */
-        function setPrefixedValueCSS( element, property, value, extra ) {
-            property += ':';
-            element.style.cssText = (property + prefixes.join(value + ';' + property)).slice(0, -property.length) + (extra || '');
-        }
-
-        /**
-         * setPrefixedPropertyCSS sets the property of a specified element
-         * adding vendor prefixes to the NAME of the property.
-         * @param {Element} element
-         * @param {string} property The property name. This WILL be prefixed.
-         * @param {string} value The value of the property. This will not be prefixed.
-         * @param {string=} extra Additional CSS to append unmodified to the end of
-         * the CSS string.
-         */
-        function setPrefixedPropertyCSS( element, property, value, extra ) {
-            element.style.cssText = prefixes.join(property + ':' + value + ';') + (extra || '');
-        }
-
-        var c = document.createElement('div'),
-            elem = document.createElement('div');
-
-        setPrefixedValueCSS(c, 'display', 'box', 'width:42px;padding:0;');
-        setPrefixedPropertyCSS(elem, 'box-flex', '1', 'width:10px;');
-
-        c.appendChild(elem);
-        docElement.appendChild(c);
-
-        var ret = elem.offsetWidth === 42;
-
-        c.removeChild(elem);
-        docElement.removeChild(c);
-
-        return ret;
-    };
-
-    // On the S60 and BB Storm, getContext exists, but always returns undefined
-    // http://github.com/Modernizr/Modernizr/issues/issue/97/
-
-    tests['canvas'] = function() {
-        var elem = document.createElement('canvas');
-        return !!(elem.getContext && elem.getContext('2d'));
-    };
-
-    tests['canvastext'] = function() {
-        return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
-    };
-
-    // This WebGL test may false positive. 
-    // But really it's quite impossible to know whether webgl will succeed until after you create the context. 
-    // You might have hardware that can support a 100x100 webgl canvas, but will not support a 1000x1000 webgl 
-    // canvas. So this feature inference is weak, but intentionally so.
-    
-    // It is known to false positive in FF4 with certain hardware and the iPad 2.
-    
-    tests['webgl'] = function() {
-        return !!window.WebGLRenderingContext;
-    };
-
-    /*
-     * The Modernizr.touch test only indicates if the browser supports
-     *    touch events, which does not necessarily reflect a touchscreen
-     *    device, as evidenced by tablets running Windows 7 or, alas,
-     *    the Palm Pre / WebOS (touch) phones.
-     *
-     * Additionally, Chrome (desktop) used to lie about its support on this,
-     *    but that has since been rectified: http://crbug.com/36415
-     *
-     * We also test for Firefox 4 Multitouch Support.
-     *
-     * For more info, see: http://modernizr.github.com/Modernizr/touch.html
-     */
-
-    tests['touch'] = function() {
-        return Modernizr['touch'];
-    };
-
-    /**
-     * geolocation tests for the new Geolocation API specification.
-     *   This test is a standards compliant-only test; for more complete
-     *   testing, including a Google Gears fallback, please see:
-     *   http://code.google.com/p/geo-location-javascript/
-     * or view a fallback solution using google's geo API:
-     *   http://gist.github.com/366184
-     */
-    tests['geolocation'] = function() {
-        return !!navigator.geolocation;
-    };
-
-    // Per 1.6:
-    // This used to be Modernizr.crosswindowmessaging but the longer
-    // name has been deprecated in favor of a shorter and property-matching one.
-    // The old API is still available in 1.6, but as of 2.0 will throw a warning,
-    // and in the first release thereafter disappear entirely.
-    tests['postmessage'] = function() {
-      return !!window.postMessage;
-    };
-
-    // Web SQL database detection is tricky:
-
-    // In chrome incognito mode, openDatabase is truthy, but using it will
-    //   throw an exception: http://crbug.com/42380
-    // We can create a dummy database, but there is no way to delete it afterwards.
-
-    // Meanwhile, Safari users can get prompted on any database creation.
-    //   If they do, any page with Modernizr will give them a prompt:
-    //   http://github.com/Modernizr/Modernizr/issues/closed#issue/113
-
-    // We have chosen to allow the Chrome incognito false positive, so that Modernizr
-    //   doesn't litter the web with these test databases. As a developer, you'll have
-    //   to account for this gotcha yourself.
-    tests['websqldatabase'] = function() {
-      var result = !!window.openDatabase;
-      /*  if (result){
-            try {
-              result = !!openDatabase( mod + "testdb", "1.0", mod + "testdb", 2e4);
-            } catch(e) {
-            }
-          }  */
-      return result;
-    };
-
-    // Vendors had inconsistent prefixing with the experimental Indexed DB:
-    // - Webkit's implementation is accessible through webkitIndexedDB
-    // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
-    // For speed, we don't test the legacy (and beta-only) indexedDB
-    tests['indexedDB'] = function() {
-      for ( var i = -1, len = domPrefixes.length; ++i < len; ){
-        if ( window[domPrefixes[i].toLowerCase() + 'IndexedDB'] ){
-          return true;
-        }
-      }
-      return !!window.indexedDB;
-    };
-
-    // documentMode logic from YUI to filter out IE8 Compat Mode
-    //   which false positives.
-    tests['hashchange'] = function() {
-      return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
-    };
-
-    // Per 1.6:
-    // This used to be Modernizr.historymanagement but the longer
-    // name has been deprecated in favor of a shorter and property-matching one.
-    // The old API is still available in 1.6, but as of 2.0 will throw a warning,
-    // and in the first release thereafter disappear entirely.
-    tests['history'] = function() {
-      return !!(window.history && history.pushState);
-    };
-
-    tests['draganddrop'] = function() {
-        return isEventSupported('dragstart') && isEventSupported('drop');
-    };
-
-    // Mozilla is targeting to land MozWebSocket for FF6
-    // bugzil.la/659324
-    tests['websockets'] = function() {
-        for ( var i = -1, len = domPrefixes.length; ++i < len; ){
-          if ( window[domPrefixes[i] + 'WebSocket'] ){
-            return true;
-          }
-        }
-        return 'WebSocket' in window;
-    };
-
-
-    // http://css-tricks.com/rgba-browser-support/
-    tests['rgba'] = function() {
-        // Set an rgba() color and check the returned value
-
-        setCss('background-color:rgba(150,255,150,.5)');
-
-        return contains(mStyle.backgroundColor, 'rgba');
-    };
-
-    tests['hsla'] = function() {
-        // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
-        //   except IE9 who retains it as hsla
-
-        setCss('background-color:hsla(120,40%,100%,.5)');
-
-        return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
-    };
-
-    tests['multiplebgs'] = function() {
-        // Setting multiple images AND a color on the background shorthand property
-        //  and then querying the style.background property value for the number of
-        //  occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
-
-        setCss('background:url(https://),url(https://),red url(https://)');
-
-        // If the UA supports multiple backgrounds, there should be three occurrences
-        //   of the string "url(" in the return value for elemStyle.background
-
-        return /(url\s*\(.*?){3}/.test(mStyle.background);
-    };
-
-
-    // In testing support for a given CSS property, it's legit to test:
-    //    `elem.style[styleName] !== undefined`
-    // If the property is supported it will return an empty string,
-    // if unsupported it will return undefined.
-
-    // We'll take advantage of this quick test and skip setting a style
-    // on our modernizr element, but instead just testing undefined vs
-    // empty string.
-
-
-    tests['backgroundsize'] = function() {
-        return testPropsAll('backgroundSize');
-    };
-
-    tests['borderimage'] = function() {
-        return testPropsAll('borderImage');
-    };
-
-
-    // Super comprehensive table about all the unique implementations of
-    // border-radius: http://muddledramblings.com/table-of-css3-border-radius-compliance
-
-    tests['borderradius'] = function() {
-        return testPropsAll('borderRadius');
-    };
-
-    // WebOS unfortunately false positives on this test.
-    tests['boxshadow'] = function() {
-        return testPropsAll('boxShadow');
-    };
-
-    // FF3.0 will false positive on this test
-    tests['textshadow'] = function() {
-        return document.createElement('div').style.textShadow === '';
-    };
-
-
-    tests['opacity'] = function() {
-        // Browsers that actually have CSS Opacity implemented have done so
-        //  according to spec, which means their return values are within the
-        //  range of [0.0,1.0] - including the leading zero.
-
-        setCssAll('opacity:.55');
-
-        // The non-literal . in this regex is intentional:
-        //   German Chrome returns this value as 0,55
-        // https://github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
-        return /^0.55$/.test(mStyle.opacity);
-    };
-
-
-    tests['cssanimations'] = function() {
-        return testPropsAll('animationName');
-    };
-
-
-    tests['csscolumns'] = function() {
-        return testPropsAll('columnCount');
-    };
-
-
-    tests['cssgradients'] = function() {
-        /**
-         * For CSS Gradients syntax, please see:
-         * http://webkit.org/blog/175/introducing-css-gradients/
-         * https://developer.mozilla.org/en/CSS/-moz-linear-gradient
-         * https://developer.mozilla.org/en/CSS/-moz-radial-gradient
-         * http://dev.w3.org/csswg/css3-images/#gradients-
-         */
-
-        var str1 = 'background-image:',
-            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
-            str3 = 'linear-gradient(left top,#9f9, white);';
-
-        setCss(
-            (str1 + prefixes.join(str2 + str1) + prefixes.join(str3 + str1)).slice(0, -str1.length)
-        );
-
-        return contains(mStyle.backgroundImage, 'gradient');
-    };
-
-
-    tests['cssreflections'] = function() {
-        return testPropsAll('boxReflect');
-    };
-
-
-    tests['csstransforms'] = function() {
-        return !!testProps(['transformProperty', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform']);
-    };
-
-
-    tests['csstransforms3d'] = function() {
-
-        var ret = !!testProps(['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective']);
-
-        // Webkit’s 3D transforms are passed off to the browser's own graphics renderer.
-        //   It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
-        //   some conditions. As a result, Webkit typically recognizes the syntax but
-        //   will sometimes throw a false positive, thus we must do a more thorough check:
-        if ( ret && 'webkitPerspective' in docElement.style ) {
-
-          // Webkit allows this media query to succeed only if the feature is enabled.
-          // `@media (transform-3d),(-o-transform-3d),(-moz-transform-3d),(-ms-transform-3d),(-webkit-transform-3d),(modernizr){ ... }`
-          ret = Modernizr['csstransforms3d'];
-        }
-        return ret;
-    };
-
-
-    tests['csstransitions'] = function() {
-        return testPropsAll('transitionProperty');
-    };
-
-
-    /*>>fontface*/
-    // @font-face detection routine by Diego Perini
-    // http://javascript.nwbox.com/CSSSupport/
-    tests['fontface'] = function() {
-        return Modernizr['fontface'];
-    };
-    /*>>fontface*/
-
-    // CSS generated content detection
-    tests['generatedcontent'] = function() {
-        return Modernizr['generatedcontent'];
-    };
-
-
-
-    // These tests evaluate support of the video/audio elements, as well as
-    // testing what types of content they support.
-    //
-    // We're using the Boolean constructor here, so that we can extend the value
-    // e.g.  Modernizr.video     // true
-    //       Modernizr.video.ogg // 'probably'
-    //
-    // Codec values from : http://github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
-    //                     thx to NielsLeenheer and zcorpan
-
-    // Note: in FF 3.5.1 and 3.5.0, "no" was a return value instead of empty string.
-    //   Modernizr does not normalize for that.
-
-    tests['video'] = function() {
-        var elem = document.createElement('video'),
-            bool = false;
-            
-        // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
-        try {
-            if ( bool = !!elem.canPlayType ) {
-                bool      = new Boolean(bool);
-                bool.ogg  = elem.canPlayType('video/ogg; codecs="theora"');
-
-                // Workaround required for IE9, which doesn't report video support without audio codec specified.
-                //   bug 599718 @ msft connect
-                var h264 = 'video/mp4; codecs="avc1.42E01E';
-                bool.h264 = elem.canPlayType(h264 + '"') || elem.canPlayType(h264 + ', mp4a.40.2"');
-
-                bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"');
-            }
-            
-        } catch(e) { }
-        
-        return bool;
-    };
-
-    tests['audio'] = function() {
-        var elem = document.createElement('audio'),
-            bool = false;
-
-        try { 
-            if ( bool = !!elem.canPlayType ) {
-                bool      = new Boolean(bool);
-                bool.ogg  = elem.canPlayType('audio/ogg; codecs="vorbis"');
-                bool.mp3  = elem.canPlayType('audio/mpeg;');
-
-                // Mimetypes accepted:
-                //   https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
-                //   http://bit.ly/iphoneoscodecs
-                bool.wav  = elem.canPlayType('audio/wav; codecs="1"');
-                bool.m4a  = elem.canPlayType('audio/x-m4a;') || elem.canPlayType('audio/aac;');
-            }
-        } catch(e) { }
-        
-        return bool;
-    };
-
-
-    // Firefox has made these tests rather unfun.
-
-    // In FF4, if disabled, window.localStorage should === null.
-
-    // Normally, we could not test that directly and need to do a
-    //   `('localStorage' in window) && ` test first because otherwise Firefox will
-    //   throw http://bugzil.la/365772 if cookies are disabled
-
-    // However, in Firefox 4 betas, if dom.storage.enabled == false, just mentioning
-    //   the property will throw an exception. http://bugzil.la/599479
-    // This looks to be fixed for FF4 Final.
-
-    // Because we are forced to try/catch this, we'll go aggressive.
-
-    // FWIW: IE8 Compat mode supports these features completely:
-    //   http://www.quirksmode.org/dom/html5.html
-    // But IE8 doesn't support either with local files
-
-    tests['localstorage'] = function() {
-        try {
-            return !!localStorage.getItem;
-        } catch(e) {
-            return false;
-        }
-    };
-
-    tests['sessionstorage'] = function() {
-        try {
-            return !!sessionStorage.getItem;
-        } catch(e){
-            return false;
-        }
-    };
-
-
-    tests['webworkers'] = function() {
-        return !!window.Worker;
-    };
-
-
-    tests['applicationcache'] = function() {
-        return !!window.applicationCache;
-    };
-
-
-    // Thanks to Erik Dahlstrom
-    tests['svg'] = function() {
-        return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
-    };
-
-    // specifically for SVG inline in HTML, not within XHTML
-    // test page: paulirish.com/demo/inline-svg
-    tests['inlinesvg'] = function() {
-      var div = document.createElement('div');
-      div.innerHTML = '<svg/>';
-      return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
-    };
-
-    // Thanks to F1lt3r and lucideer, ticket #35
-    tests['smil'] = function() {
-        return !!document.createElementNS && /SVG/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
-    };
-
-    tests['svgclippaths'] = function() {
-        // Possibly returns a false positive in Safari 3.2?
-        return !!document.createElementNS && /SVG/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
-    };
-
-    // input features and input types go directly onto the ret object, bypassing the tests loop.
-    // Hold this guy to execute in a moment.
-    function webforms() {
-        // Run through HTML5's new input attributes to see if the UA understands any.
-        // We're using f which is the <input> element created early on
-        // Mike Taylr has created a comprehensive resource for testing these attributes
-        //   when applied to all input types:
-        //   http://miketaylr.com/code/input-type-attr.html
-        // spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
-        
-        // Only input placeholder is tested while textarea's placeholder is not. 
-        // Currently Safari 4 and Opera 11 have support only for the input placeholder
-        // Both tests are available in feature-detects/forms-placeholder.js
-        Modernizr['input'] = (function( props ) {
-            for ( var i = 0, len = props.length; i < len; i++ ) {
-                attrs[ props[i] ] = !!(props[i] in inputElem);
-            }
-            return attrs;
-        })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
-
-        // Run through HTML5's new input types to see if the UA understands any.
-        //   This is put behind the tests runloop because it doesn't return a
-        //   true/false like all the other tests; instead, it returns an object
-        //   containing each input type with its corresponding true/false value
-
-        // Big thanks to @miketaylr for the html5 forms expertise. http://miketaylr.com/
-        Modernizr['inputtypes'] = (function(props) {
-
-            for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
-
-                inputElem.setAttribute('type', inputElemType = props[i]);
-                bool = inputElem.type !== 'text';
-
-                // We first check to see if the type we give it sticks..
-                // If the type does, we feed it a textual value, which shouldn't be valid.
-                // If the value doesn't stick, we know there's input sanitization which infers a custom UI
-                if ( bool ) {
-
-                    inputElem.value         = smile;
-                    inputElem.style.cssText = 'position:absolute;visibility:hidden;';
-
-                    if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
-
-                      docElement.appendChild(inputElem);
-                      defaultView = document.defaultView;
-
-                      // Safari 2-4 allows the smiley as a value, despite making a slider
-                      bool =  defaultView.getComputedStyle &&
-                              defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
-                              // Mobile android web browser has false positive, so must
-                              // check the height to see if the widget is actually there.
-                              (inputElem.offsetHeight !== 0);
-
-                      docElement.removeChild(inputElem);
-
-                    } else if ( /^(search|tel)$/.test(inputElemType) ){
-                      // Spec doesnt define any special parsing or detectable UI
-                      //   behaviors so we pass these through as true
-
-                      // Interestingly, opera fails the earlier test, so it doesn't
-                      //  even make it here.
-
-                    } else if ( /^(url|email)$/.test(inputElemType) ) {
-                      // Real url and email support comes with prebaked validation.
-                      bool = inputElem.checkValidity && inputElem.checkValidity() === false;
-
-                    } else if ( /^color$/.test(inputElemType) ) {
-                        // chuck into DOM and force reflow for Opera bug in 11.00
-                        // github.com/Modernizr/Modernizr/issues#issue/159
-                        docElement.appendChild(inputElem);
-                        docElement.offsetWidth;
-                        bool = inputElem.value != smile;
-                        docElement.removeChild(inputElem);
-
-                    } else {
-                      // If the upgraded input compontent rejects the :) text, we got a winner
-                      bool = inputElem.value != smile;
-                    }
-                }
-
-                inputs[ props[i] ] = !!bool;
-            }
-            return inputs;
-        })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
-    }
-
-
-    // End of test definitions
-    // -----------------------
-
-
-
-    // Run through all tests and detect their support in the current UA.
-    // todo: hypothetically we could be doing an array of tests and use a basic loop here.
-    for ( var feature in tests ) {
-        if ( hasOwnProperty(tests, feature) ) {
-            // run the test, throw the return value into the Modernizr,
-            //   then based on that boolean, define an appropriate className
-            //   and push it into an array of classes we'll join later.
-            featureName  = feature.toLowerCase();
-            Modernizr[featureName] = tests[feature]();
-
-            classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
-        }
-    }
-
-    // input tests need to run.
-    Modernizr.input || webforms();
-
-
-    /**
-     * addTest allows the user to define their own feature tests
-     * the result will be added onto the Modernizr object,
-     * as well as an appropriate className set on the html element
-     *
-     * @param feature - String naming the feature
-     * @param test - Function returning true if feature is supported, false if not
-     */
-     Modernizr.addTest = function ( feature, test ) {
-       if ( typeof feature == "object" ) {
-         for ( var key in feature ) {
-           if ( hasOwnProperty( feature, key ) ) { 
-             Modernizr.addTest( key, feature[ key ] );
-           }
-         }
-       } else {
-
-         feature = feature.toLowerCase();
-
-         if ( Modernizr[feature] !== undefined ) {
-           // we're going to quit if you're trying to overwrite an existing test
-           // if we were to allow it, we'd do this:
-           //   var re = new RegExp("\\b(no-)?" + feature + "\\b");  
-           //   docElement.className = docElement.className.replace( re, '' );
-           // but, no rly, stuff 'em.
-           return; 
-         }
-
-         test = typeof test == "boolean" ? test : !!test();
-
-         docElement.className += ' ' + (test ? '' : 'no-') + feature;
-         Modernizr[feature] = test;
-
-       }
-
-       return Modernizr; // allow chaining.
-     };
-    
-
-    // Reset modElem.cssText to nothing to reduce memory footprint.
-    setCss('');
-    modElem = inputElem = null;
-
-    //>>BEGIN IEPP
-    // Enable HTML 5 elements for styling (and printing) in IE.
-    if ( window.attachEvent && (function(){ var elem = document.createElement('div');
-                                            elem.innerHTML = '<elem></elem>';
-                                            return elem.childNodes.length !== 1; })() ) {
-                                              
-        // iepp v2 by @jon_neal & afarkas : github.com/aFarkas/iepp/
-        (function(win, doc) {
-          win.iepp = win.iepp || {};
-          var iepp = win.iepp,
-            elems = iepp.html5elements || 'abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video',
-            elemsArr = elems.split('|'),
-            elemsArrLen = elemsArr.length,
-            elemRegExp = new RegExp('(^|\\s)('+elems+')', 'gi'),
-            tagRegExp = new RegExp('<(\/*)('+elems+')', 'gi'),
-            filterReg = /^\s*[\{\}]\s*$/,
-            ruleRegExp = new RegExp('(^|[^\\n]*?\\s)('+elems+')([^\\n]*)({[\\n\\w\\W]*?})', 'gi'),
-            docFrag = doc.createDocumentFragment(),
-            html = doc.documentElement,
-            head = html.firstChild,
-            bodyElem = doc.createElement('body'),
-            styleElem = doc.createElement('style'),
-            printMedias = /print|all/,
-            body;
-          function shim(doc) {
-            var a = -1;
-            while (++a < elemsArrLen)
-              // Use createElement so IE allows HTML5-named elements in a document
-              doc.createElement(elemsArr[a]);
-          }
-
-          iepp.getCSS = function(styleSheetList, mediaType) {
-            if(styleSheetList+'' === undefined){return '';}
-            var a = -1,
-              len = styleSheetList.length,
-              styleSheet,
-              cssTextArr = [];
-            while (++a < len) {
-              styleSheet = styleSheetList[a];
-              //currently no test for disabled/alternate stylesheets
-              if(styleSheet.disabled){continue;}
-              mediaType = styleSheet.media || mediaType;
-              // Get css from all non-screen stylesheets and their imports
-              if (printMedias.test(mediaType)) cssTextArr.push(iepp.getCSS(styleSheet.imports, mediaType), styleSheet.cssText);
-              //reset mediaType to all with every new *not imported* stylesheet
-              mediaType = 'all';
-            }
-            return cssTextArr.join('');
-          };
-
-          iepp.parseCSS = function(cssText) {
-            var cssTextArr = [],
-              rule;
-            while ((rule = ruleRegExp.exec(cssText)) != null){
-              // Replace all html5 element references with iepp substitute classnames
-              cssTextArr.push(( (filterReg.exec(rule[1]) ? '\n' : rule[1]) +rule[2]+rule[3]).replace(elemRegExp, '$1.iepp_$2')+rule[4]);
-            }
-            return cssTextArr.join('\n');
-          };
-
-          iepp.writeHTML = function() {
-            var a = -1;
-            body = body || doc.body;
-            while (++a < elemsArrLen) {
-              var nodeList = doc.getElementsByTagName(elemsArr[a]),
-                nodeListLen = nodeList.length,
-                b = -1;
-              while (++b < nodeListLen)
-                if (nodeList[b].className.indexOf('iepp_') < 0)
-                  // Append iepp substitute classnames to all html5 elements
-                  nodeList[b].className += ' iepp_'+elemsArr[a];
-            }
-            docFrag.appendChild(body);
-            html.appendChild(bodyElem);
-            // Write iepp substitute print-safe document
-            bodyElem.className = body.className;
-            bodyElem.id = body.id;
-            // Replace HTML5 elements with <font> which is print-safe and shouldn't conflict since it isn't part of html5
-            bodyElem.innerHTML = body.innerHTML.replace(tagRegExp, '<$1font');
-          };
-
-
-          iepp._beforePrint = function() {
-            // Write iepp custom print CSS
-            styleElem.styleSheet.cssText = iepp.parseCSS(iepp.getCSS(doc.styleSheets, 'all'));
-            iepp.writeHTML();
-          };
-
-          iepp.restoreHTML = function(){
-            // Undo everything done in onbeforeprint
-            bodyElem.innerHTML = '';
-            html.removeChild(bodyElem);
-            html.appendChild(body);
-          };
-
-          iepp._afterPrint = function(){
-            // Undo everything done in onbeforeprint
-            iepp.restoreHTML();
-            styleElem.styleSheet.cssText = '';
-          };
-
-
-
-          // Shim the document and iepp fragment
-          shim(doc);
-          shim(docFrag);
-
-          //
-          if(iepp.disablePP){return;}
-
-          // Add iepp custom print style element
-          head.insertBefore(styleElem, head.firstChild);
-          styleElem.media = 'print';
-          styleElem.className = 'iepp-printshim';
-          win.attachEvent(
-            'onbeforeprint',
-            iepp._beforePrint
-          );
-          win.attachEvent(
-            'onafterprint',
-            iepp._afterPrint
-          );
-        })(window, document);
-    }
-    //>>END IEPP
-
-    // Assign private properties to the return object with prefix
-    Modernizr._version      = version;
-
-    // expose these for the plugin API. Look in the source for how to join() them against your input
-    Modernizr._prefixes     = prefixes;
-    Modernizr._domPrefixes  = domPrefixes;
-    
-    // Modernizr.mq tests a given media query, live against the current state of the window
-    // A few important notes:
-    //   * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
-    //   * A max-width or orientation query will be evaluated against the current state, which may change later.
-    //   * You must specify values. Eg. If you are testing support for the min-width media query use: 
-    //       Modernizr.mq('(min-width:0)')
-    // usage:
-    // Modernizr.mq('only screen and (max-width:768)')
-    Modernizr.mq            = testMediaQuery;   
-    
-    // Modernizr.hasEvent() detects support for a given event, with an optional element to test on
-    // Modernizr.hasEvent('gesturestart', elem)
-    Modernizr.hasEvent      = isEventSupported; 
-
-    // Modernizr.testProp() investigates whether a given style property is recognized
-    // Note that the property names must be provided in the camelCase variant.
-    // Modernizr.testProp('pointerEvents')
-    Modernizr.testProp      = function(prop){
-        return testProps([prop]);
-    };        
-
-    // Modernizr.testAllProps() investigates whether a given style property,
-    //   or any of its vendor-prefixed variants, is recognized
-    // Note that the property names must be provided in the camelCase variant.
-    // Modernizr.testAllProps('boxSizing')    
-    Modernizr.testAllProps  = testPropsAll;     
-
-
-    
-    // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards
-    // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })
-    Modernizr.testStyles    = injectElementWithStyles; 
-
-
-    // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input
-    // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'
-    
-    // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.
-    // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:
-    //
-    //     str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
-    
-    // If you're trying to ascertain which transition end event to bind to, you might do something like...
-    // 
-    //     var transEndEventNames = {
-    //       'WebkitTransition' : 'webkitTransitionEnd',
-    //       'MozTransition'    : 'transitionend',
-    //       'OTransition'      : 'oTransitionEnd',
-    //       'msTransition'     : 'msTransitionEnd', // maybe?
-    //       'transition'       : 'transitionEnd'
-    //     },
-    //     transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
-    
-    Modernizr.prefixed      = function(prop){
-      return testPropsAll(prop, 'pfx');
-    };
-
-
-
-    // Remove "no-js" class from <html> element, if it exists:
-    docElement.className = docElement.className.replace(/\bno-js\b/, '')
-                            
-                            // Add the new classes to the <html> element.
-                            + (enableClasses ? ' js ' + classes.join(' ') : '');
-
-    return Modernizr;
-
-})(this, this.document);
diff --git a/wolnelektury/static/js/modernizr.custom.19652.js b/wolnelektury/static/js/modernizr.custom.19652.js
new file mode 100644 (file)
index 0000000..8106cb7
--- /dev/null
@@ -0,0 +1,4 @@
+/* Modernizr 2.5.3 (Custom Build) | MIT & BSD\r
+ * Build: http://www.modernizr.com/download/#-input\r
+ */\r
+;window.Modernizr=function(a,b,c){function t(a){i.cssText=a}function u(a,b){return t(prefixes.join(a+";")+(b||""))}function v(a,b){return typeof a===b}function w(a,b){return!!~(""+a).indexOf(b)}function x(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:v(f,"function")?f.bind(d||b):f}return!1}function y(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)n[c[d]]=c[d]in j;return n.list&&(n.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),n}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" "))}var d="2.5.3",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j=b.createElement("input"),k={}.toString,l={},m={},n={},o=[],p=o.slice,q,r={}.hasOwnProperty,s;!v(r,"undefined")&&!v(r.call,"undefined")?s=function(a,b){return r.call(a,b)}:s=function(a,b){return b in a&&v(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=p.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(p.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(p.call(arguments)))};return e});for(var z in l)s(l,z)&&(q=z.toLowerCase(),e[q]=l[z](),o.push((e[q]?"":"no-")+q));return e.input||y(),t(""),h=j=null,e._version=d,e}(this,this.document);
\ No newline at end of file
index 3541d0f..ee097ae 100644 (file)
@@ -5,7 +5,7 @@
 <div class="book-box-inner" style="position: relative;">
 
 
 <div class="book-box-inner" style="position: relative;">
 
 
-    <a href="{{ main_link }}">
+    {% if main_link %}<a href="{{ main_link }}">{% endif %}
         {% if book.cover %}
             <img src="
                 {% thumbnail book.cover "139x193" as thumb %}
         {% if book.cover %}
             <img src="
                 {% thumbnail book.cover "139x193" as thumb %}
@@ -15,7 +15,7 @@
                 {% endthumbnail %}
             " alt="Cover" />
         {% endif %}
                 {% endthumbnail %}
             " alt="Cover" />
         {% endif %}
-    </a>
+    {% if main_link %}</a>{% endif %}
     <div class="book-box-body">
 
 
     <div class="book-box-body">
 
 
                 {% endif %}{% endfor %}{% for title, slug in related.parents %},
                     <a href="{% url book_detail slug %}">{{ title }}</a>{% endfor %}
             </div>
                 {% endif %}{% endfor %}{% for title, slug in related.parents %},
                     <a href="{% url book_detail slug %}">{{ title }}</a>{% endfor %}
             </div>
-            <div class="title"><a href="{{ main_link }}">{{ book.title }}</a></div>
+            <div class="title">
+                               {% if main_link %}<a href="{{ main_link }}">{% endif %}
+                                       {{ book.title }}
+                           {% if main_link %}</a>{% endif %}
+                       </div>
         </div>
 
         <div class="tags">
         </div>
 
         <div class="tags">
index a6aa19e..62b7511 100644 (file)
@@ -41,7 +41,7 @@
             <li><a href="{{ book.mobi_file.url}}">MOBI</a> {% trans "for Kindle" %}</li>
             {% endif %}
             {% if  book.txt_file %}
             <li><a href="{{ book.mobi_file.url}}">MOBI</a> {% trans "for Kindle" %}</li>
             {% endif %}
             {% if  book.txt_file %}
-            <li><a href="{{ book.txt_file.url}}">TXT</a> {% trans "for advanced usege" %}</li>
+            <li><a href="{{ book.txt_file.url}}">TXT</a> {% trans "for advanced usage" %}</li>
             {% endif %}
             <li><a href="{% url custom_pdf_form %}?slug={{ book.slug }}">{% trans "Download a custom PDF" %}</a></li>
             </ul>
             {% endif %}
             <li><a href="{% url custom_pdf_form %}?slug={{ book.slug }}">{% trans "Download a custom PDF" %}</a></li>
             </ul>
index 6412de1..bcf7606 100755 (executable)
 
 
     <div id="promo-box">
 
 
     <div id="promo-box">
-        {% chunk "promo" %}
+               <div id="promo-box-header"><h2 class="mono">
+                       {% trans "What's new?" %}
+               </h2></div>
+               <div id="promo-box-body">
+               {% chunk "promo" %}
+       </div>
     </div>
 
 
     </div>
 
 
index fade57b..cd66590 100644 (file)
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
-<html class="no-js" xmlns:og="http://opengraphprotocol.org/schema/">
+<html prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">
        {% load cache compressed i18n %}
     {% load catalogue_tags reporting_stats sponsor_tags %}
     <head>
        {% load cache compressed i18n %}
     {% load catalogue_tags reporting_stats sponsor_tags %}
     <head>
@@ -8,7 +8,7 @@
         <meta property="og:site_name" content="Wolne Lektury" />
         <meta property="og:title" content="{% block ogtitle %}{% endblock %}" />
         <meta property="og:type" content="{% block ogtype %}website{% endblock %}" />
         <meta property="og:site_name" content="Wolne Lektury" />
         <meta property="og:title" content="{% block ogtitle %}{% endblock %}" />
         <meta property="og:type" content="{% block ogtype %}website{% endblock %}" />
-        <meta property="og:image" content="{% block ogimage %}http://static.wolnelektury.pl/img/logo-bez.png{% endblock %}" />
+        <meta property="og:image" content="{% block ogimage %}{{ FULL_STATIC_URL }}img/wiatrak.png{% endblock %}" />
         <meta name="description" 
             content="{% block metadescription %}Darmowe opracowane, pełne teksty lektur, e-booki, audiobooki i pliki DAISY na wolnej licencji.{% endblock %}" />
         {% block ogextra %}{% endblock %}
         <meta name="description" 
             content="{% block metadescription %}Darmowe opracowane, pełne teksty lektur, e-booki, audiobooki i pliki DAISY na wolnej licencji.{% endblock %}" />
         {% block ogextra %}{% endblock %}
@@ -23,8 +23,6 @@
         <!--[if IE]>
                {% compressed_css "ie" %}
         <![endif]-->
         <!--[if IE]>
                {% compressed_css "ie" %}
         <![endif]-->
-        <!--script src="{{ STATIC_URL }}js/modernizr.custom.13352.js"></script-->
-        <script src="{{ STATIC_URL }}js/modernizr-latest.js"></script>
 
         {% block extrahead %}
         {% endblock %}
 
         {% block extrahead %}
         {% endblock %}
 
                {% block extrabody %}
                {% endblock %}
 
                {% block extrabody %}
                {% endblock %}
+
+        <script src="{{ STATIC_URL }}js/modernizr.custom.19652.js"></script>
+        <!--script src="{{ STATIC_URL }}js/modernizr-latest.js"></script-->
     </body>
 </html>
     </body>
 </html>
index cb1d2af..ee78859 100755 (executable)
@@ -36,7 +36,9 @@ class LoginFormView(AjaxableFormView):
 
     def __call__(self, request):
         if request.user.is_authenticated():
 
     def __call__(self, request):
         if request.user.is_authenticated():
-            return HttpResponseRedirect('/')
+            return self.redirect_or_refresh(request, '/',
+                message=_('Already logged in as user %(user)s', ) %
+                            {'user': request.user.username})
         return super(LoginFormView, self).__call__(request)
 
     def success(self, form, request):
         return super(LoginFormView, self).__call__(request)
 
     def success(self, form, request):
@@ -53,7 +55,9 @@ class RegisterFormView(AjaxableFormView):
 
     def __call__(self, request):
         if request.user.is_authenticated():
 
     def __call__(self, request):
         if request.user.is_authenticated():
-            return HttpResponseRedirect('/')
+            return self.redirect_or_refresh(request, '/',
+                message=_('Already logged in as user %(user)s', ) %
+                            {'user': request.user.username})
         return super(RegisterFormView, self).__call__(request)
 
     def success(self, form, request):
         return super(RegisterFormView, self).__call__(request)
 
     def success(self, form, request):