From fa684e7b11bba7f7fce1c0e7832b34d0b8593db4 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Fri, 16 Mar 2012 11:47:11 +0100 Subject: [PATCH] add contrib locale to make-locale-pack, various bugfixes --- apps/ajaxable/utils.py | 11 +- apps/catalogue/templatetags/catalogue_tags.py | 2 +- scripts/make-locale-pack | 11 + wolnelektury/context_processors.py | 1 + wolnelektury/locale/pl/LC_MESSAGES/django.mo | Bin 17379 -> 19104 bytes wolnelektury/locale/pl/LC_MESSAGES/django.po | 499 ++++---- wolnelektury/settings.py | 2 +- wolnelektury/static/css/header.css | 2 +- wolnelektury/static/css/main_page.css | 19 +- wolnelektury/static/css/screen.css | 11 + wolnelektury/static/img/wiatrak.png | Bin 0 -> 9323 bytes wolnelektury/static/js/modernizr-latest.js | 1116 ----------------- .../static/js/modernizr.custom.19652.js | 4 + .../templates/catalogue/book_short.html | 10 +- .../templates/catalogue/book_text.html | 2 +- wolnelektury/templates/main_page.html | 7 +- wolnelektury/templates/superbase.html | 9 +- wolnelektury/views.py | 8 +- 18 files changed, 328 insertions(+), 1386 deletions(-) create mode 100644 wolnelektury/static/img/wiatrak.png delete mode 100644 wolnelektury/static/js/modernizr-latest.js create mode 100644 wolnelektury/static/js/modernizr.custom.19652.js diff --git a/apps/ajaxable/utils.py b/apps/ajaxable/utils.py index 79eca5298..02e87671e 100755 --- a/apps/ajaxable/utils.py +++ b/apps/ajaxable/utils.py @@ -4,7 +4,6 @@ from django.http import (HttpResponse, HttpResponseRedirect, 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 @@ -148,6 +147,16 @@ class AjaxableFormView(object): 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 = "" + if message: + output = "
" + message + "
" + 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 diff --git a/apps/catalogue/templatetags/catalogue_tags.py b/apps/catalogue/templatetags/catalogue_tags.py index e9b1610c8..61b384649 100644 --- a/apps/catalogue/templatetags/catalogue_tags.py +++ b/apps/catalogue/templatetags/catalogue_tags.py @@ -308,7 +308,7 @@ def book_wide(context, 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, diff --git a/scripts/make-locale-pack b/scripts/make-locale-pack index fbc6eba2d..81d6d9a93 100755 --- a/scripts/make-locale-pack +++ b/scripts/make-locale-pack @@ -26,6 +26,12 @@ export_po() 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 @@ -48,6 +54,11 @@ for i in *; do 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 diff --git a/wolnelektury/context_processors.py b/wolnelektury/context_processors.py index fa8515ec5..c91211605 100644 --- a/wolnelektury/context_processors.py +++ b/wolnelektury/context_processors.py @@ -3,4 +3,5 @@ from django.conf import settings def extra_settings(request): return { 'STATIC_URL': settings.STATIC_URL, + 'FULL_STATIC_URL': request.build_absolute_uri(settings.STATIC_URL) } diff --git a/wolnelektury/locale/pl/LC_MESSAGES/django.mo b/wolnelektury/locale/pl/LC_MESSAGES/django.mo index 8f4b1f13e0367ccfb38830c00e9542db0fddb69b..342157a64b51aba0c39c60cf3b7ea8ae9726fd16 100644 GIT binary patch delta 5287 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 Nt(KErG23Ef{tNU6x3B;J delta 3610 zcmZ|RdvKK18OQNw!;(;t009N{2Gg?{D8%#{SVWKKnW6 zwO%=08oQOwJ9b83q zd=2$}3Mcbh%tQ?=HO7Xjqa4(d7vn6Pi?gu%<(M_%9%R++ z7S>~W(B1189^<;xH&@FNUi4{ByJa@`K+ptfip(w8ko4RkYVt2$8w z{uSPbUt=YXV{{r|Ge3I%AZlg1P!o9zIa@J1K}Jjb7w>@!sC#-D{rE4`UjN54CC_bW zFsh*})HTaRJvR<}C7G4uY0A?_aW$EFNZ7O*Td*3R#$r5+g?I~(VNL>;CK?wY>!xyTK(3e*ZN^W2DPzXLVF zpP>%%Z&CfcKaus)1%y znc;TayTTn{8ZM=N6zXucqdMG;TI%Oe*Y6POP@Y0f=n^j0{l7tG0Ts1u$YOj2H6uTt zvvkZw&3GEBgDT9z8q^tBhq^7TsD`(D0C4P9jmcvJW8?nTz+kv`WMZ`m19TzC^&CnSb zuKqU@5n?aF5wIDA4%~KvE0Q=|b*Qw4c#K%6f|u?_J_G-gswoAD`GoHIazbetF_+Lm zokqm^@$($<6XF2zT^dbht5;~kC%t?J?jhQUU0$8o@8vh)3gQv3tgq=$z5FUH_3~+0 ztMQEUD%Rm@Vi8g1)rqHw0pBbCzif{82fjavRLSq7@ja=vDb9dEdi?&t*S(yn8S|Z& zGa8+&%${LZ9c>6lg3Zz3Bhj^y`e1ean&y_KR>z+;&v`tn!a0)lN^(PZLvwvod}H<^ zUmzT@1>xrUV5n|gI6{3>s5u;s#P7(dN_Oh=o^medEsM90%J4a#=dW`fE?C~DXhN{K zq`YXNbF5%Q-{P?)#lhl9 zSsmOEK6%i-UkKK@!)#r-${VP&U`nHNeoBo~H1+M&C81N>y5pyg1=mC)&C&SaX`Q~I z6}QK^a&;)kc%zY%?eXi=(^H($vs#_kW;Mnma~ArXq^kDRzdy4t*w7ts3I)m8e*sJ@ Bs7e3; diff --git a/wolnelektury/locale/pl/LC_MESSAGES/django.po b/wolnelektury/locale/pl/LC_MESSAGES/django.po index 4246708fd..3c205f242 100644 --- a/wolnelektury/locale/pl/LC_MESSAGES/django.po +++ b/wolnelektury/locale/pl/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" 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 \n" "Language-Team: LANGUAGE \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" -"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ę" -#: 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" -#: views.py:68 +#: views.py:74 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 -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/500.html:6 templates/500.html.py:54 +#: templates/500.html:6 +#: templates/500.html.py:17 msgid "Server error" msgstr "Błąd serwera" -#: templates/500.html:55 -msgid "" -"

The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our " -"blog.

Inform our administrators about the " -"error.

" +#: templates/500.html:19 +msgid "

The Wolnelektury.pl site is currently unavailable. Meanwhile, visit our blog.

Inform our administrators about the error.

" msgstr "" -"

Serwis Wolnelektury.pl jest chwilowo niedostępny. Odwiedź naszego bloga

\n" -"

Powiadom administratorów o błędzie.

" +"

Serwis Wolnelektury.pl jest chwilowo niedostępny. Odwiedź naszego bloga

\n" +"

Powiadom administratorów o błędzie.

" -#: 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" -#: templates/503.html:56 +#: templates/503.html:19 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/base.html:43 +#: templates/superbase.html:50 #, python-format msgid "" "\n" -" %(c)s free reading you have right to\n" +" %(c)s free reading you have right to\n" " " msgid_plural "" "\n" -" %(c)s free readings you have right to\n" +" %(c)s free readings you have right to\n" " " msgstr[0] "" "\n" -" %(c)s darmowy utwór do której masz prawo\n" +" %(c)s darmowy utwór do której masz prawo\n" " " msgstr[1] "" "\n" -" %(c)s darmowe utwory do których masz prawo\n" +" %(c)s darmowe utwory do których masz prawo\n" " " msgstr[2] "" "\n" -" %(c)s darmowych utworów do których " -"masz prawo\n" +" %(c)s darmowych utworów do których masz prawo\n" " " -#: templates/base.html:54 +#: templates/superbase.html:61 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" -#: templates/base.html:57 +#: templates/superbase.html:74 msgid "Administration" msgstr "Administracja" -#: templates/base.html:59 +#: templates/superbase.html:76 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 @@ -136,97 +195,48 @@ msgstr "Wyloguj" msgid "Search" msgstr "Szukaj" -#: templates/base.html:112 +#: templates/superbase.html:129 msgid "Language versions" msgstr "Wersje językowe" -#: templates/base.html:142 +#: templates/superbase.html:159 msgid "" "\n" -"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" -"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" +"\t\t\t\tWolne Lektury is a project lead by Modern Poland Foundation.\n" +"\t\t\t\tDigital reproductions are made by The National Library, Biblioteka Śląska and Biblioteka Elbląska, based on TNL, BŚ and BE resources.\n" "\t\t\t\tHosting: ICM.\n" "\t\t\t\t" msgstr "" "\n" -"Wolne Lektury to projekt prowadzony przez fundację Nowoczesna Polska. \n" -"Reprodukcje cyfrowe wykonane przez Bibliotekę Narodową, Bibliotekę Śląską i Bibliotekę Elbląską z egzemplarzy pochodzących ze zbiorów BN, BŚ i " -"BE.\n" +"Wolne Lektury to projekt prowadzony przez fundację Nowoczesna Polska. \n" +"Reprodukcje cyfrowe wykonane przez Bibliotekę Narodową, Bibliotekę Śląską i Bibliotekę Elbląską z egzemplarzy pochodzących ze zbiorów BN, BŚ i BE.\n" "Hosting: ICM." -#: templates/base.html:149 +#: templates/superbase.html:166 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: fundacja@nowoczesnapolska.org.pl\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: fundacja@nowoczesnapolska.org.pl\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: fundacja@nowoczesnapolska.org.pl" +"Fundacja Nowoczesna Polska, 00-514 Warszawa, ul. Marszałkowska 84/92 lok. 125, tel/fax: (22) 621-30-17, e-mail: fundacja@nowoczesnapolska.org.pl" -#: templates/base.html:165 +#: templates/superbase.html:182 msgid "Close" msgstr "Zamknij" -#: templates/base.html:167 +#: templates/superbase.html:184 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ą" @@ -247,7 +257,15 @@ msgstr "uproszczone" 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" @@ -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." -#: 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" @@ -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" -" Creative " -"Commons Attribution-ShareAlike 3.0\n" +" Creative Commons Attribution-ShareAlike 3.0\n" " license." -msgstr "" -"Ten utwór nie jest chroniony prawem autorskim i znajduje się w " -"domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, " -"publikować i 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 Uznanie autorstwa-" -"Na tych samych warunkach 3.0." +msgstr "Ten utwór nie jest chroniony prawem autorskim i znajduje się w domenie publicznej, co oznacza że możesz go swobodnie wykorzystywać, publikować i 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 Uznanie autorstwa-Na tych samych warunkach 3.0." #: 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:" -#: 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" @@ -337,67 +348,67 @@ msgstr "↑ góra ↑" 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." -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_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/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/book_short.html:65 +#: templates/catalogue/book_short.html:67 msgid "Genre" msgstr "Gatunek" -#: templates/catalogue/book_short.html:80 +#: templates/catalogue/book_short.html:82 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/catalogue/book_short.html:87 +#: templates/catalogue/book_short.html:89 #: 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" -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" -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" -msgstr "zaawansowane" +msgstr "do zadań specjalnych" -#: templates/catalogue/book_short.html:102 +#: templates/catalogue/book_short.html:104 msgid "Listen" msgstr "Słuchaj" @@ -405,7 +416,8 @@ msgstr "Słuchaj" 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" @@ -417,21 +429,17 @@ msgstr "Nota red." 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 -#, fuzzy 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" @@ -480,7 +488,8 @@ msgstr "Miksuj treść 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" @@ -488,25 +497,29 @@ msgstr "Katalog" 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/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/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/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" @@ -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" -"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" -"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:" -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" @@ -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." -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" @@ -646,10 +653,8 @@ msgstr "%(cs)s, finansowanego przez %(fb)s" #: 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 @@ -684,13 +689,9 @@ msgstr "Przepraszamy! Brak wyników spełniających kryteria podane w zapytaniu. #: 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." -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." @@ -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" -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" @@ -739,32 +739,20 @@ msgid_plural "" "or transferring 1% of your income tax.\n" msgstr[0] "" "\n" -"W serwisie Wolne Lektury już teraz opublikowany jest %(c)s utwór! Pomóż w " -"rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " -"podatku.\n" +"W serwisie Wolne Lektury już teraz opublikowany jest %(c)s utwór! Pomóż w rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% podatku.\n" msgstr[1] "" "\n" -"W serwisie Wolne Lektury już teraz opublikowane są %(c)s utwory! Pomóż w " -"rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " -"podatku.\n" +"W serwisie Wolne Lektury już teraz opublikowane są %(c)s utwory! Pomóż w rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% podatku.\n" msgstr[2] "" "\n" -"W serwisie Wolne Lektury już teraz opublikowanych jest %(c)s utworów! Pomóż " -"w rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% " -"podatku.\n" +"W serwisie Wolne Lektury już teraz opublikowanych jest %(c)s utworów! Pomóż w rozwijaniu biblioteki i uwalnianiu nowych lektur przekazując nam darowiznę lub 1% podatku.\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." -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..." @@ -779,6 +767,15 @@ msgstr "autor" 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" @@ -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 -msgid "" -"Find out why Internet libraries can't publish this author's works." -msgstr "" -"Dowiedz " -"się, dlaczego biblioteki internetowe nie mogą udostępniać dzieł tego " -"autora." +msgid "Find out why Internet libraries can't publish this author's works." +msgstr "Dowiedz się, dlaczego biblioteki internetowe nie mogą udostępniać dzieł tego autora." #: 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 -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 -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 -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 -msgid "" -"Find out why Internet libraries can't publish this work." -msgstr "" -"Dowiedz " -"się, dlaczego biblioteki internetowe nie mogą udostępniać tego dzieła." +msgid "Find out why Internet libraries can't publish this work." +msgstr "Dowiedz się, dlaczego biblioteki internetowe nie mogą udostępniać tego dzieła." #: 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" -#: templates/piston/authorize_token.html:9 +#: templates/piston/authorize_token.html:10 #, python-format -msgid "" -"Confirm to authorize access to Wolne Lektury as user %(user)s." -msgstr "" -"Potwierdź dostęp do Wolnych Lektur jako użytkownik %(user)s." +msgid "Confirm to authorize access to Wolne Lektury as user %(user)s." +msgstr "Potwierdź dostęp do Wolnych Lektur jako użytkownik %(user)s." -#: 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 sign in." +msgstr "Postanowiłeś/-aś przerwać logowanie się do naszej strony przy użyciu zewnętrznego konta. Jeśli to pomyłka, przejdź proszę do strony logowania." + +#, 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" @@ -971,6 +973,7 @@ msgstr "Zaloguj się" #~ "under\n" #~ "a free " #~ "license.\n" + #~ msgid_plural "" #~ "\n" #~ "%(c)s books from public domain " diff --git a/wolnelektury/settings.py b/wolnelektury/settings.py index 3f842e7a9..ab74294b5 100644 --- a/wolnelektury/settings.py +++ b/wolnelektury/settings.py @@ -138,7 +138,7 @@ INSTALLED_APPS = [ 'pagination', 'piston', 'piwik.django', - 'rosetta', + #'rosetta', 'south', 'sorl.thumbnail', 'djcelery', diff --git a/wolnelektury/static/css/header.css b/wolnelektury/static/css/header.css index 5a196769b..647bb603f 100755 --- a/wolnelektury/static/css/header.css +++ b/wolnelektury/static/css/header.css @@ -29,7 +29,7 @@ #logo a { color:#f7f7f7; font-size: 2.05em; - text-shadow: 0 0 10px #17CFDB; + text-shadow: 0 0 10px #f7f7f7; } #tagline { diff --git a/wolnelektury/static/css/main_page.css b/wolnelektury/static/css/main_page.css index b564e825b..331e21041 100755 --- a/wolnelektury/static/css/main_page.css +++ b/wolnelektury/static/css/main_page.css @@ -19,21 +19,26 @@ padding: 2em 2.8em; background: #efefef; } -#promo-box-title { +#promo-box h3 { color: #0d777e; - height: 2.75em; + font-size: 1.1em; + height: 2.5em; /* 2.75@1.1 */ 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; } -#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-content { font-size: 1.2em; line-height: 1.55em; color: #6c6c6c; diff --git a/wolnelektury/static/css/screen.css b/wolnelektury/static/css/screen.css index 3a344dc59..31102104f 100644 --- a/wolnelektury/static/css/screen.css +++ b/wolnelektury/static/css/screen.css @@ -130,3 +130,14 @@ #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 index 0000000000000000000000000000000000000000..e96a0c1a5f548eacbb55722ece4503215c1aea6f GIT binary patch literal 9323 zcmbVxcTiK^*KPn2q(zVp5*4HhNbf{Nx`6baNRbwL??t3aQ4k^^1gTQTenC^ZzfVw(%WQI!0~+H;J8kxP8}G4@|*|3UVD2khPd7qb5i?Em1J1yGR?-E1BS zEdUI-6p9yn4TYGS%r;N`8KB}79qt7f^lR`R`aaW9wsmab9z`+EIhM@*TAUZGCa9nc zr=ktsDU|XV7aBsorb1o`$)+TXWloY7y5-J5<5c;TCQma)4hl*+_7+7CSY$cmrf?Bhu+meDU=mTqM3 zk&^e*!6mM+Ip4{o%$1G1M|Q+8wuPXtV2_#<-^x32`0^B=1U#xtxdyZmSeyD>WFFZp zJkmcmmMXyuqTUP@JL&ZVJ?Uo-wPD651|jrUs6d!)KIBflQHpFcPj?_qakbettsA&) z6Bepc6M36Oj~q!o)kM7_D7V4b>iB#ZM{_WN+%j-R9o%&ocaA^YCI+v6&EPzA`tD)G zNp|_SmNLxr z+3GiuTcyB&x4+`=vUYL{GB_7ek1V>3w`0kd7=ZxUEDi2x(2k*T?49dRuwEQL8cn3SE;`U_J_#me$eDmDbBAN1Zlv~~7N?{N6ek3!O4ZH!2+5~9=w^2i>v3C!W7#9jV*TgK6McN|y0IdK6Ss@v z(JS8#GCI{%yde6J^W??`@UoOl$@@#usZfVuS&d#6EJt5?lT~12sOgti^#^sfh!IW< z5`xjX*j8lxr=B|f@E!Papq*gYk9QcC-=PdKdVHR%Xz@PG`xu{mR0<|V={;^3=WQ^HuyjO2Q@pR4Phuu%O-+)#9|>Z(f=Ih9 zm*QgEfNv~WP`aQgSxC>*&vg~X)Kkl$5+O-L^+jj6R>Z=sD=YjV3I$!U;S92gzz_L1 z>BL`D8k!ZJpx`4)NFtqC>xUpQspYHItcnb^72ZC)4#QuQje2l&&83TwtJ>xM-4L>C zKxM-&#nRGOo~grl*V+Ci@z` z*A-%LD6k@(0wnv8|3x+bC!v{YvoPaeU_9HPI%wvET4>>vo0L028t?RX3u>?JhEP1W8S#OkxyB7@-#(VG zkVQgBRxa;|>(Kw{$at0#@DIY;Q(zfal+|gRpOpOD*Urmm@=VaKPvSoRM*lO4Ar^?L zQWCX4G};xRgniqTvM!&2ulJg3(KTW{z*8oQxq-Q-#l)OWoaEJ*@ z4`ZFK%Xk>E;Y*~eNvBg767u9F|7*hr3D4;owUy9^i*60^-E8X#u3;rx<`Ci^mqJP0 zZ@b`R9v8lqqVrtSP0w;qa`be5oDg0#tB`l;7C1dEeM%ZkM)kt92nH3;8JJH#**eeJ zcry*6rV?HB)l{Z8{<|4Xud5|L+NKYAyK0U^!N$WqtB9EKvV?l%%hqg{@{Ky1j)!jj zO`V!iCxT8~u0ICqTQiWuxHDS*s{HWcX7#YnP@ejfb``w}!MtQ8Oa*f0SkvK)Rn5Lz z$p)%adXkrd3}BFU<}WYrKKW2ZPWkZ}XHSWgOugc_o6oBgzjk!Uz5NLifK7dQZ$`Pi ztF#DvG|9l96Atc(%UFp1`hQ;3{yxnh{lXJUI{x5ufKo!Z~Pz?SY@8p)~3$e?v56$0* ze~}OpdkxqzzLPhvvy5cO?VBX*;8zrRefbMc8zs4y4`Sh`Kz|=+|`N8HPGG$=9 z$yLjo5*(iy7F~vqg;FPg-ocBsBoDijMbx--cf+m>TUY1C+zPI;*?@8`*MRUOEq4%^ ztC=vpJWIzA3CYPVT62O-y;R`Y?}-gsKsZp}LgJ^R?sAI>-sMmjfhQU7=PgA|otkAr zX`H3AUVB^vUab;}8b#Vm%>;A*nRr;E`>s?fBxq{zXuM@4=5QVUhHtc{rtu{3r@Tv; z8$|#9r{|AK7Z%M-zXfHiCWKYPvL>4xo!=LxHNH~C%FMQ|n%S`|kO@Qg80bP8uDV7$ zjF1?WP0Kp#66kh1qlVVdpvR>>qQB|%8qk%AT2P%0E(CWn_g(`aWxpK*bG~ug)TA8- z_$`InwaC%-CN(wZSUw**3tMYl;wY5QO7k+#RGY_2#Z|aD7ykUIu8k+*q@uE)s8Ggi z�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 C!fIpy literal 0 HcmV?d00001 diff --git a/wolnelektury/static/js/modernizr-latest.js b/wolnelektury/static/js/modernizr-latest.js deleted file mode 100644 index f9e57c81b..000000000 --- a/wolnelektury/static/js/modernizr-latest.js +++ /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 - * 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); - } - } - - // '].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 = ''; - 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 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 = ''; - 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 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 element, if it exists: - docElement.className = docElement.className.replace(/\bno-js\b/, '') - - // Add the new classes to the 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 index 000000000..8106cb788 --- /dev/null +++ b/wolnelektury/static/js/modernizr.custom.19652.js @@ -0,0 +1,4 @@ +/* Modernizr 2.5.3 (Custom Build) | MIT & BSD + * Build: http://www.modernizr.com/download/#-input + */ +;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 - + {% if main_link %}{% endif %} {% if book.cover %} Cover {% endif %} - + {% if main_link %}{% endif %}
@@ -40,7 +40,11 @@ {% endif %}{% endfor %}{% for title, slug in related.parents %}, {{ title }}{% endfor %}
- +
+ {% if main_link %}{% endif %} + {{ book.title }} + {% if main_link %}{% endif %} +
diff --git a/wolnelektury/templates/catalogue/book_text.html b/wolnelektury/templates/catalogue/book_text.html index a6aa19e1d..62b7511f6 100644 --- a/wolnelektury/templates/catalogue/book_text.html +++ b/wolnelektury/templates/catalogue/book_text.html @@ -41,7 +41,7 @@
  • MOBI {% trans "for Kindle" %}
  • {% endif %} {% if book.txt_file %} -
  • TXT {% trans "for advanced usege" %}
  • +
  • TXT {% trans "for advanced usage" %}
  • {% endif %}
  • {% trans "Download a custom PDF" %}
  • diff --git a/wolnelektury/templates/main_page.html b/wolnelektury/templates/main_page.html index 6412de136..bcf76065d 100755 --- a/wolnelektury/templates/main_page.html +++ b/wolnelektury/templates/main_page.html @@ -15,7 +15,12 @@
    - {% chunk "promo" %} +

    + {% trans "What's new?" %} +

    +
    + {% chunk "promo" %} +
    diff --git a/wolnelektury/templates/superbase.html b/wolnelektury/templates/superbase.html index fade57b9e..cd6659043 100644 --- a/wolnelektury/templates/superbase.html +++ b/wolnelektury/templates/superbase.html @@ -1,5 +1,5 @@ - + {% load cache compressed i18n %} {% load catalogue_tags reporting_stats sponsor_tags %} @@ -8,7 +8,7 @@ - + {% block ogextra %}{% endblock %} @@ -23,8 +23,6 @@ - - {% block extrahead %} {% endblock %} @@ -210,5 +208,8 @@ {% block extrabody %} {% endblock %} + + + diff --git a/wolnelektury/views.py b/wolnelektury/views.py index cb1d2af96..ee78859b2 100755 --- a/wolnelektury/views.py +++ b/wolnelektury/views.py @@ -36,7 +36,9 @@ class LoginFormView(AjaxableFormView): 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): @@ -53,7 +55,9 @@ class RegisterFormView(AjaxableFormView): 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): -- 2.20.1