From e18d543fa8e2bd224880a79fb71ea8726b1d45bf Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Tue, 10 Jan 2012 16:22:05 +0100 Subject: [PATCH] add collection for Boy --- apps/catalogue/admin.py | 7 +- apps/catalogue/fixtures/collection-boy.json | 19 ++ .../catalogue/locale/pl/LC_MESSAGES/django.mo | Bin 3358 -> 3211 bytes .../catalogue/locale/pl/LC_MESSAGES/django.po | 188 ++++++++------- .../migrations/0017_auto__add_collection.py | 147 ++++++++++++ apps/catalogue/models.py | 19 ++ apps/catalogue/urls.py | 3 +- apps/catalogue/views.py | 14 +- wolnelektury/locale/pl/LC_MESSAGES/django.mo | Bin 23913 -> 24014 bytes wolnelektury/locale/pl/LC_MESSAGES/django.po | 215 +++++++++--------- .../templates/catalogue/collection.html | 12 + .../templates/catalogue/main_page.html | 15 +- 12 files changed, 441 insertions(+), 198 deletions(-) create mode 100644 apps/catalogue/fixtures/collection-boy.json create mode 100644 apps/catalogue/migrations/0017_auto__add_collection.py create mode 100755 wolnelektury/templates/catalogue/collection.html diff --git a/apps/catalogue/admin.py b/apps/catalogue/admin.py index 88c985f3c..61db42fe6 100644 --- a/apps/catalogue/admin.py +++ b/apps/catalogue/admin.py @@ -6,7 +6,7 @@ from django.contrib import admin from django import forms from newtagging.admin import TaggableModelAdmin, TaggableModelForm -from catalogue.models import Tag, Book, Fragment, BookMedia +from catalogue.models import Tag, Book, Fragment, BookMedia, Collection class TagAdmin(admin.ModelAdmin): @@ -54,6 +54,11 @@ class FragmentAdmin(TaggableModelAdmin): ordering = ('book', 'anchor',) +class CollectionAdmin(admin.ModelAdmin): + prepopulated_fields = {'slug': ('title',)} + + admin.site.register(Tag, TagAdmin) admin.site.register(Book, BookAdmin) admin.site.register(Fragment, FragmentAdmin) +admin.site.register(Collection, CollectionAdmin) diff --git a/apps/catalogue/fixtures/collection-boy.json b/apps/catalogue/fixtures/collection-boy.json new file mode 100644 index 000000000..9a0e7781a --- /dev/null +++ b/apps/catalogue/fixtures/collection-boy.json @@ -0,0 +1,19 @@ +[ + { + "pk": "promo", + "model": "chunks.chunk", + "fields": { + "content": "

Biblioteczka Boya

\r\n\r\n

T\u0142umaczenia literatury francuskiej i nie tylko.

\r\n\r\n

Biblioteczka Boya \u21d2

", + "description": "boks promocyjny na g\u0142\u00f3wnej" + } + }, + { + "pk": "boy", + "model": "catalogue.collection", + "fields": { + "book_slugs": "http://www.wolnelektury.pl/katalog/lektura/piesn-o-rolandzie/\nhttp://www.wolnelektury.pl/katalog/lektura/wielki-testament/\nhttp://www.wolnelektury.pl/katalog/lektura/skapiec/\nhttp://www.wolnelektury.pl/katalog/lektura/mieszczanin-szlachcicem/\nhttp://www.wolnelektury.pl/katalog/lektura/kandyd/\nhttp://www.wolnelektury.pl/katalog/lektura/rozprawa-o-metodzie/\nhttp://www.wolnelektury.pl/katalog/lektura/listy-perskie/\nhttp://www.wolnelektury.pl/katalog/lektura/spowiedz-dzieciecia-wieku/\nhttp://www.wolnelektury.pl/katalog/lektura/ubu-krol/\nhttp://www.wolnelektury.pl/katalog/lektura/legenda-o-tristanie-i-izoldzie/\nhttp://www.wolnelektury.pl/katalog/lektura/boy-swietoszek/\nhttp://www.wolnelektury.pl/katalog/lektura/mizantrop/\nhttp://www.wolnelektury.pl/katalog/lektura/kubus-fatalista-i-jego-pan/\nhttp://www.wolnelektury.pl/katalog/lektura/mysli/\nhttp://www.wolnelektury.pl/katalog/lektura/o-duchu-praw/\nhttp://www.wolnelektury.pl/katalog/lektura/proby/\nhttp://www.wolnelektury.pl/katalog/lektura/w-strone-swanna/\nhttp://www.wolnelektury.pl/katalog/lektura/gargantua-i-pantagruel/", + "description": "", + "title": "Biblioteczka Boya" + } + } +] \ No newline at end of file diff --git a/apps/catalogue/locale/pl/LC_MESSAGES/django.mo b/apps/catalogue/locale/pl/LC_MESSAGES/django.mo index 31849200b50a808a4a92fe2eba9312d437486844..6a4a5590b88bed353e3705293628d31979044db9 100644 GIT binary patch delta 1378 zcmYk*O>B%o9LMq5s@>Jyvg)m^s@2-s>WkfN8!F!7JrYhdNJVP1n)NIX7Udut2Sgl7 zAHqQ#yxd4gBN3X$fe07U#Gwv7kT?-135kgBZ#!fs``^#ZJoC)_pPA>mU3yxiJAegWY%zoA9}9f5JHJx~ay@#Z6d?z1WHa7{hy5fp4)9 zKVY>n1@ntakd7+9F>`P}s-3j1wEY_}ME@RCLK$3uhmoJT%pbX!A=E-Qtaq#rk)_O2 z)cm8x{(>>Dsc7Octi%c1{))QcC(gt_s0AXdt_kMgG^|IBi=(c$TRTwmtw3$&W>jL^ z?Dbt3WPP*O4oKSz{iq3Zwtd{T2e6&~v$p>MUf{SMBR{i(Y`SnAF2Yl|4sT){$5BU9 zMi%pM0T$>pT~wNIE%Gx5`Agz4jNx6>6TiV(IA+^ltlw?_Pt+5K*-j-?i}SGo^+0P- z>utmc?g(-IGpOvRL%McA!Fma`uxGu68h0PH)lX0pKf~Gh!uEea-S-i-;Ad1q-;h%@ zKT!Am4zd5rxGX$5Ac8!EsYWf(h{`mMI>T<;zZx~cdfVQLns_^=a3^Z~MdXBvMdPOv z9YhVGBMRvJRdlm5juI;RluC<|A!)O?w3E8dQ(Ig`=o41*T3DrxVEy7(mB2DW$NaCv zs1)?g>+NnKS_u`s97~9}8kB{T=zA>|ZFQrq>uGf)OKn^4hd#@CqJdaOXa}{+dUWm2P@t(bn$Ml=&zl3T>*P(k??k5G zJ$}Zd-CQn{K9O~glvMLxBGBVq3A~G>+7ijOWFngESefW-NhCctSY27#*)@DE=<@}R z=CV#SmLI-0E#>pxSM2kahgv)*)a;Fh>b%dPWS17tMxA{2<@r}58OPX~lQqs{D%n2c UxVemzKJ>qm@s@;ldxPP@zi)Aq`~Uy| delta 1527 zcmY+EO=whC6vyu*lSyVKH5$KaTH{k29UDjIO%kn2sQ86qiesC`*;skV7+)sNr1_{- z!L))38ff5|tsA8-x>17)Dk7*wsbCiAqKc)^MGRHFS*@du$6 z@-0-JWA^)x)_=;{qfmLrU?uaL3%qEHF4=&qPzi4+0N%C!`%sA=S^J5#C*dmmPpv=B z;8V1525iGWMpcX9Z*U`g1ygVplMbtAdw7`-`=M5F1}=l=Adk6a{l7vNdjdAW3bsY@ zDX4<8a5mgv?Om36OV57qf!cxNN%o(j%?J($p0k11;78bZto;;f<$ps>_yW#^uVEdG z)=v57ST;iWQ&27X3~GEkoC7yof4-LeSLJ(gDDeTPg8HBi%lA-;hM^Mt1jF7z#a)2f zpr-?I%3Xd>v|1g?1?WmtyQ7`cL6oQs{NL!WWlGcriMCHtf$H??s!4P}B{~<&(eWRm zU6IP%*PDVTRh#46JHO~~4*0!=U{R|b>Gw5|Y<&tyA^Gi;j*Ih83 z`Oc}x-q@m={PeIhvE_*Yv)>ymbeH>&1kYn#@&AVe+3JZlH|=K9uIspM>s#ICOg58A z\n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -22,218 +22,226 @@ msgstr "" msgid "Enter a valid JSON value. Error: %s" msgstr "Wprowadź prawidłową wartość JSON. Błąd: %s" -#: forms.py:25 +#: forms.py:26 msgid "Please supply an XML." msgstr "Proszę podać XML." -#: forms.py:39 +#: forms.py:40 msgid "title, author, theme/topic, epoch, kind, genre" msgstr "tytuł, autor, motyw/temat, epoka, rodzaj, gatunek" -#: forms.py:56 +#: forms.py:57 msgid "Shelves" msgstr "Półki" -#: forms.py:69 +#: forms.py:70 msgid "Name of the new shelf" msgstr "nazwa nowej półki" -#: models.py:35 +#: models.py:29 msgid "author" msgstr "autor" -#: models.py:36 +#: models.py:30 msgid "epoch" msgstr "epoka" -#: models.py:37 +#: models.py:31 msgid "kind" msgstr "rodzaj" -#: models.py:38 +#: models.py:32 msgid "genre" msgstr "gatunek" -#: models.py:39 +#: models.py:33 msgid "theme" msgstr "motyw" -#: models.py:40 +#: models.py:34 msgid "set" msgstr "półka" -#: models.py:41 models.py:314 +#: models.py:35 +#: models.py:319 msgid "book" msgstr "książka" -#: models.py:45 +#: models.py:39 msgid "ODT file" msgstr "Plik ODT" -#: models.py:46 +#: models.py:40 msgid "MP3 file" msgstr "Plik MP3" -#: models.py:47 +#: models.py:41 msgid "OGG file" msgstr "Plik OGG" -#: models.py:48 +#: models.py:42 msgid "DAISY file" msgstr "Plik DAISY" -#: models.py:65 models.py:198 +#: models.py:59 +#: models.py:194 msgid "name" msgstr "nazwa" -#: models.py:66 models.py:287 models.py:876 +#: models.py:60 +#: models.py:294 +#: models.py:951 +#: models.py:968 +#: models.py:971 msgid "slug" msgstr "slug" -#: models.py:67 models.py:286 +#: models.py:61 +#: models.py:293 msgid "sort key" msgstr "klucz sortowania" -#: models.py:68 +#: models.py:62 msgid "category" msgstr "kategoria" -#: models.py:70 models.py:112 models.py:288 models.py:469 +#: models.py:64 +#: models.py:106 +#: models.py:295 +#: models.py:444 +#: models.py:969 msgid "description" msgstr "opis" -#: models.py:71 -msgid "main page" -msgstr "strona główna" - -#: models.py:71 -msgid "Show tag on main page" -msgstr "Pokazuj tag na stronie głównej" - -#: models.py:74 +#: models.py:68 msgid "book count" msgstr "liczba książek" -#: models.py:78 models.py:79 models.py:200 models.py:289 models.py:290 +#: models.py:72 +#: models.py:73 +#: models.py:196 +#: models.py:296 +#: models.py:297 msgid "creation date" msgstr "data utworzenia" -#: models.py:96 +#: models.py:90 msgid "tag" msgstr "tag" -#: models.py:97 +#: models.py:91 msgid "tags" msgstr "tagi" -#: models.py:197 models.py:877 +#: models.py:193 +#: models.py:952 msgid "type" msgstr "typ" -#: models.py:199 +#: models.py:195 msgid "file" msgstr "plik" -#: models.py:201 models.py:292 +#: models.py:197 +#: models.py:299 msgid "extra information" msgstr "dodatkowe informacje" -#: models.py:210 models.py:211 +#: models.py:206 +#: models.py:207 msgid "book media" msgstr "media książki" -#: models.py:285 +#: models.py:292 +#: models.py:967 msgid "title" msgstr "tytuł" -#: models.py:291 +#: models.py:298 msgid "parent number" msgstr "numer rodzica" -#: models.py:296 -msgid "XML file" -msgstr "Plik XML" - -#: models.py:297 -msgid "HTML file" -msgstr "Plik HTML" - -#: models.py:298 -msgid "PDF file" -msgstr "Plik PDF" - -#: models.py:299 -msgid "EPUB file" -msgstr "Plik EPUB" - -#: models.py:300 -msgid "TXT file" -msgstr "Plik TXT" - -#: models.py:315 +#: models.py:320 msgid "books" msgstr "książki" -#: models.py:435 +#: models.py:408 msgid "Read online" msgstr "Czytaj online" -#: models.py:656 +#: models.py:672 #, python-format msgid "Book with slug = \"%s\" does not exist." msgstr "Książki ο slug = \"%s\" nie istnieje." -#: models.py:669 +#: models.py:685 #, python-format msgid "Book %s already exists" msgstr "Książka %s już istnieje" -#: models.py:844 +#: models.py:900 +#, python-format +msgid "%s file" +msgstr "plik %s" + +#: models.py:919 msgid "fragment" msgstr "fragment" -#: models.py:845 +#: models.py:920 msgid "fragments" msgstr "fragmenty" -#: models.py:878 +#: models.py:953 msgid "sha-1 hash" msgstr "hash sha-1" -#: models.py:879 +#: models.py:954 msgid "time" msgstr "czas" -#: models.py:883 +#: models.py:958 msgid "file record" msgstr "" -#: models.py:884 +#: models.py:959 msgid "file records" msgstr "" -#: views.py:531 +#: models.py:972 +msgid "book slugs" +msgstr "slugi książek" + +#: models.py:976 +msgid "collection" +msgstr "kolekcja" + +#: models.py:977 +msgid "collections" +msgstr "kolekcje" + +#: views.py:509 msgid "

To maintain your shelves you need to be logged in.

" msgstr "

Aby zarządzać swoimi półkami, musisz się zalogować.

" -#: views.py:553 +#: views.py:531 msgid "

Shelves were sucessfully saved.

" msgstr "

Półki zostały zapisane.

" -#: views.py:577 +#: views.py:555 msgid "Book was successfully removed from the shelf" msgstr "Usunięto" -#: views.py:579 +#: views.py:557 msgid "This book is not on the shelf" msgstr "Książki nie ma na półce" -#: views.py:689 +#: views.py:676 #, python-format msgid "

Shelf %s was successfully removed

" msgstr "

Półka %s została usunięta

" -#: views.py:748 +#: views.py:738 #, python-format msgid "" "An error occurred: %(exception)s\n" @@ -244,15 +252,36 @@ msgstr "" "\n" "%(tb)s" -#: views.py:749 +#: views.py:739 msgid "Book imported successfully" msgstr "Książka zaimportowana" -#: views.py:751 +#: views.py:741 #, python-format msgid "Error importing file: %r" msgstr "Błąd podczas importowania pliku: %r" +#~ msgid "main page" +#~ msgstr "strona główna" + +#~ msgid "Show tag on main page" +#~ msgstr "Pokazuj tag na stronie głównej" + +#~ msgid "XML file" +#~ msgstr "Plik XML" + +#~ msgid "HTML file" +#~ msgstr "Plik HTML" + +#~ msgid "PDF file" +#~ msgstr "Plik PDF" + +#~ msgid "EPUB file" +#~ msgstr "Plik EPUB" + +#~ msgid "TXT file" +#~ msgstr "Plik TXT" + #, fuzzy #~ msgid "sort_key" #~ msgstr "klucz sortowania" @@ -275,8 +304,5 @@ msgstr "Błąd podczas importowania pliku: %r" #~ msgid "book stub" #~ msgstr "zapowiedź książki" -#~ msgid "book stubs" -#~ msgstr "zapowiedzi książek" - #~ msgid "

Shelf %s was successfully created

" #~ msgstr "

Półka %s została utworzona

" diff --git a/apps/catalogue/migrations/0017_auto__add_collection.py b/apps/catalogue/migrations/0017_auto__add_collection.py new file mode 100644 index 000000000..2e9ca4185 --- /dev/null +++ b/apps/catalogue/migrations/0017_auto__add_collection.py @@ -0,0 +1,147 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'Collection' + db.create_table('catalogue_collection', ( + ('title', self.gf('django.db.models.fields.CharField')(max_length=120, db_index=True)), + ('slug', self.gf('django.db.models.fields.SlugField')(max_length=120, primary_key=True, db_index=True)), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('book_slugs', self.gf('django.db.models.fields.TextField')()), + )) + db.send_create_signal('catalogue', ['Collection']) + + if not db.dry_run: + from django.core.management import call_command + call_command("loaddata", "collection-boy.json") + + def backwards(self, orm): + + # Deleting model 'Collection' + db.delete_table('catalogue_collection') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'catalogue.book': { + 'Meta': {'ordering': "('sort_key',)", 'object_name': 'Book'}, + 'changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'extra_info': ('catalogue.fields.JSONField', [], {'default': "'{}'"}), + 'gazeta_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}), + 'html_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mobi_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['catalogue.Book']"}), + 'parent_number': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pdf_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '120', 'db_index': 'True'}), + 'sort_key': ('django.db.models.fields.CharField', [], {'max_length': '120', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '120'}), + 'txt_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'wiki_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}), + 'xml_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'catalogue.bookmedia': { + 'Meta': {'ordering': "('type', 'name')", 'object_name': 'BookMedia'}, + 'book': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'media'", 'to': "orm['catalogue.Book']"}), + 'extra_info': ('catalogue.fields.JSONField', [], {'default': "'{}'"}), + 'file': ('catalogue.fields.OverwritingFileField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': "'100'"}), + 'source_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': "'100'"}), + 'uploaded_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}) + }, + 'catalogue.collection': { + 'Meta': {'ordering': "('title',)", 'object_name': 'Collection'}, + 'book_slugs': ('django.db.models.fields.TextField', [], {}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '120', 'primary_key': 'True', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '120', 'db_index': 'True'}) + }, + 'catalogue.filerecord': { + 'Meta': {'ordering': "('-time', '-slug', '-type')", 'object_name': 'FileRecord'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'sha1': ('django.db.models.fields.CharField', [], {'max_length': '40'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '120', 'db_index': 'True'}), + 'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '20', 'db_index': 'True'}) + }, + 'catalogue.fragment': { + 'Meta': {'ordering': "('book', 'anchor')", 'object_name': 'Fragment'}, + 'anchor': ('django.db.models.fields.CharField', [], {'max_length': '120'}), + 'book': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'fragments'", 'to': "orm['catalogue.Book']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'short_text': ('django.db.models.fields.TextField', [], {}), + 'text': ('django.db.models.fields.TextField', [], {}) + }, + 'catalogue.tag': { + 'Meta': {'ordering': "('sort_key',)", 'unique_together': "(('slug', 'category'),)", 'object_name': 'Tag'}, + 'book_count': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'category': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'gazeta_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'main_page': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '120', 'db_index': 'True'}), + 'sort_key': ('django.db.models.fields.CharField', [], {'max_length': '120', 'db_index': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'wiki_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}) + }, + 'catalogue.tagrelation': { + 'Meta': {'unique_together': "(('tag', 'content_type', 'object_id'),)", 'object_name': 'TagRelation', 'db_table': "'catalogue_tag_relation'"}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'items'", 'to': "orm['catalogue.Tag']"}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + } + } + + complete_apps = ['catalogue'] diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index 22ed32510..1417519f7 100644 --- a/apps/catalogue/models.py +++ b/apps/catalogue/models.py @@ -961,6 +961,25 @@ class FileRecord(models.Model): def __unicode__(self): return "%s %s.%s" % (self.sha1, self.slug, self.type) + +class Collection(models.Model): + """A collection of books, which might be defined before publishing them.""" + title = models.CharField(_('title'), max_length=120, db_index=True) + slug = models.SlugField(_('slug'), max_length=120, primary_key=True) + description = models.TextField(_('description'), null=True, blank=True) + + models.SlugField(_('slug'), max_length=120, unique=True, db_index=True) + book_slugs = models.TextField(_('book slugs')) + + class Meta: + ordering = ('title',) + verbose_name = _('collection') + verbose_name_plural = _('collections') + + def __unicode__(self): + return self.title + + ########### # # SIGNALS diff --git a/apps/catalogue/urls.py b/apps/catalogue/urls.py index c770892d9..0e0da4b4a 100644 --- a/apps/catalogue/urls.py +++ b/apps/catalogue/urls.py @@ -13,7 +13,8 @@ urlpatterns = patterns('catalogue.views', url(r'^polki/$', 'user_shelves', name='user_shelves'), url(r'^polki/(?P[a-zA-Z0-9-]+)/usun/$', 'delete_shelf', name='delete_shelf'), url(r'^polki/(?P[a-zA-Z0-9-]+)\.zip$', 'download_shelf', name='download_shelf'), - url(r'^lektury/', 'book_list', name='book_list'), + url(r'^lektury/$', 'book_list', name='book_list'), + url(r'^lektury/(?P[a-zA-Z0-9-]+)/$', 'collection', name='collection'), url(r'^audiobooki/$', 'audiobook_list', name='audiobook_list'), url(r'^daisy/$', 'daisy_list', name='daisy_list'), url(r'^lektura/(?P[a-zA-Z0-9-]+)/polki/', 'book_sets', name='book_shelves'), diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index c80853437..bf0c42f70 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -70,7 +70,8 @@ def main_page(request): context_instance=RequestContext(request)) -def book_list(request, filter=None, template_name='catalogue/book_list.html'): +def book_list(request, filter=None, template_name='catalogue/book_list.html', + context=None): """ generates a listing of all books, optionally filtered with a test function """ form = forms.SearchForm() @@ -95,6 +96,17 @@ def daisy_list(request): template_name='catalogue/daisy_list.html') +def collection(request, slug): + coll = get_object_or_404(models.Collection, slug=slug) + slugs = coll.book_slugs.split() + # allow URIs + slugs = [slug.rstrip('/').rsplit('/', 1)[-1] if '/' in slug else slug + for slug in slugs] + return book_list(request, Q(slug__in=slugs), + template_name='catalogue/collection.html', + context={'collection': coll}) + + def differentiate_tags(request, tags, ambiguous_slugs): beginning = '/'.join(tag.url_chunk for tag in tags) unparsed = '/'.join(ambiguous_slugs[1:]) diff --git a/wolnelektury/locale/pl/LC_MESSAGES/django.mo b/wolnelektury/locale/pl/LC_MESSAGES/django.mo index 1326a31b876f41e9673b9c6e68597cca0a822672..f40dee2951d8ca45dd13288b8891e93ac789952e 100644 GIT binary patch delta 4440 zcmY+`dsNr;9mnxEfglj~NK^zu!3!6E;1$Swq7Vw9=4FtxV$(zsloY4^EK6-J$}}}) z^F}6SwWLhb%mmXm7Os<9C&}qJ`@=eJ)rlR?T(;-y_x-YS`W#<8KA-RJ`}=+_-_Q5^ z^ZI*!pPcmbUWpEP$tV{{JSht_3-dE;xKl^XE=HPl;Ggjr$KQxDOUH^Bvm$))F0(lN zTddhxym>cm&OgbYP52o;f#to;u44!G#E<%zg`0V;oeF*06%4_DU?F~kIhfbiY#7$! zX>3BBzmU=1gH;%WTTmB%8OP#&d>gM}3U2Rb#y>md`US?*zulxlUlyC-48Vg~wDYhB zF2Q14js@6)EQW<8nrV>|@MoBYI)5W-fX|@@whdFU0X4uD*ES6Ea^R9G*onH}x30Hc zLzB#sIUa{vp*++Q=c78DkLs`jBd`+rs;xnN-hldiKXP}h2{qv}=nbH9nTiH*6+`i# zsFD8%$KoBVvsPdNs=WpE`9;+CKSy=+CHBHjWINa`Wc4kI(d(9GqB^d_4BVE?`m-PG zEC<~L9N7F$Ue0Xu@Nt!Ca`*d zvyvwUc%7we9@3N<5>vky=My@n$&m>Vs};c%>V+lNv2 z{wnJG*HO2+%S%O@=?<xP4 z=M$)0l&YpqgoEyL-Wvs|_QQA&u1B_!y@J|& zmrxylg}QD$8>$2c;DcD}rJ^@l8%AO$uEg)L2UfBpWesXitU|qDorfZifSS<`48rrS?U+LQuQ&*QKz%=T zsQ)rvc$|k-xEmkP^B-E^oKTK|e6SFMunN;~B@V^|=)pf>Io?Koxvh-* zqXDi)y)O#^4w}7>lf?twAPf zt*+t4X6#3sgW$bzVQM#A$s8_THwe*Fk?=M8H)RU<9L_KnQtr0b$8yJOYrOt237}WWm8LYo5V`exb zEJOxti%|ciI)U0$u``_+^~DI<$*2KmV-`-r%~*?idi-WNOI(Lf(msHxn8GvH>Bl<( zt7&`YaQ`)c{d1gOzc=wN+MQUAH&Fw4aIQ16GEAXegBrk2)XbVN22Y{}(2o4GDf7&j zgY84LyD$TbnOz*N^->9=vK@P4BWggWQ62mdbz+BW7ix2cmpKFLjk?!~ZaWoqy>!$) z&c$HNM_sQ3HQ)vAaqn{XgSGB~dejAXA}eKkP+!=GeX$w!6tv?2{0cST2$oBGCm!{i zkcR4bC~A}DpjNU7dtoVZ9j`s+RO}g4$9qvTd=)i=qo{$LM$PPu+kS<*$}z(2v|O@* zyiYa}-njoSd#N3CTkCO$Ti>SVU(3$Ev1X!?b(cq}l#prUJ@;UtYd06DyhYBq2lO6k zA*j8A>RDzW;cv*;){u=>45@$oG4=j`~0{*gYmPNk7t`93mePZMp8U zoQk&EXtJ9uAxnwM5mHZh5!kOtcR5cb)oFNr?lgAu^RTk~ES}Mv&hSmDk7=@)&6%*+k{IZpB0@zaX!ZC&*@^GLDQVbBIa+ zdB9h5emUZ)7myd-V~cP*sUus+Z%G~rBd5qCWD-${bFg%6g$j~DipWbuC5p`T)tvu; zPp1A1sUe5S%j8~?LEa>T$o)j+X>yJ%Q-jh#s>xQef`pJ6WFFB3EQu^uh4QY0@9#+d zPA9)7Z;&dolBg^oeMle)CLc7v9+?;sFs*oELG#(fucN|eS5+>pD5_YzqPC_kb6NAD ztlfSivNJqc8CjmBtYNvH;c1>Mk0+$0IHR=U@kPrQRV~f9Z^4R++@x$z)=$oBUNtN` V#<_4q{)*U$pI*4KIjpSA?|-SS^Qiy; delta 4366 zcmYk<3s6>N9>?)N2_hKCD^aEfND3;Vydc`*B_&W%6wp*CyO^S>rIMtktnZe&!Ln)P zrPQ<*FRkXK0J{Krp=7Jc&CK1kF?XkN9MWBP8_RKOa^3ImJr6rQ^Kl0<8Fm>pN&m(Bv2%iV{#;ZCA4hep0+X>4)xjOkeHazsz#%HS(1*^G&U2W= z@k^+VMJ0Mu+YQw*Kk7z9u?vnwPPIv>&ljRTuRvDCR-y*_5{BY_3`9|>qtY3VqI&!p zj>OZbk;gL6YR^J_UW>ZGUet{a;%#^c*#>q3nRPplT1t&VH=clLI0xAVwjqi6A3)^* z2iQk;7E|y$)Q!5`>D?d^HG*W+h(@56C>M3!QdEalp=M$=vOjG-?!-4x11RY2&14N~ zlWyuAFk?g8K@Mc#G3O7c8>I9xOT|*u46Q*1WiO&ST8~+H*6CxR2h$#lI$nud^E%Y; zH=&mLPpCa~IzXi(l?%8Q|Am^Gm0VpXZbXf!7S+)@)RKLKy6`E~d1sy9qDFodb%Th$ zY-H??U2zD8V?OGOz0*=XIbBwbno481(gLv{-^+_&RDp zyHOq9kLvIdWK!(}F2*ZZuIGOi^Q#g61C4C=+liW) zFK{M)gBsaAgS@>o0oBomF&dYnM*JLVKwI%a?r;03Xe6D}`DL7pdAJERwO^xt@uF*A zM_o9Q4blmdFalH2hgql@9E*{7A8JO*oR2w|VDR~0K}DOR3U#3kuDu;~gT3x}J%-Z$ z0M)S;ya_)?-S8BuV;9he*HJUoCBs{S;i&tJNB!P34Cn@>R5V48pn6)4dXAT)M!ptx z;aco~ji{+Uj2dC9`}_;k4K88_?r;@9ru`$2#Br9gg-2o`Rt@DdymlA!e}fY)XLAvL z;qox=jn}}#`WnaohMRHO-K;PAMtL{*9<`}%pf+99Xs;u&SU@`-8N4k(&A>K1jGv;; zug>u{3U6UUBw`!th0!V3Yxlxlv~!T{W3y2&unnji??GMn zEEeH;oQ8whSbCAwU<}prbaSQ@l;p zf*R4s*abhw82ktN@jI-+qhpf6>trGmWPxld8rg8{fs;_Xe?IocHK?BMMQxgQQQrZrs0)6IUGX%kqiuK_ zUPfIfjOmq$s2dMM4J-%gc)%u7QBO)yBf8(UcT!hrAS`3>{{m~Ui9APmBmcj=Ms1gC zJ%gKEeLZTrwKQ)Nb*#P2qEe{mzkten?r47dr_NTVzC2X)0y##s_U+|qD%%N9t^J-< zkl&C8$y?+PM4Rnh5=T^8NF_8!*^#Kjz}9UmVaAQca#Ddhuxa z))AEjq$*hBe?&OV)x~C#LD(Wz_FH~rlJ;^}dj;PoEMu^|?%eGZFT45()Sl3O=|mF9 zK%#OJS-E~*bV6WTuSY1k>GpF1WVBX^KH$s6P&q8-;>o}i+gHk52}2OoF7iO-XJ z$qIK&94Eo_*0BdlWa4<>UqO zD#<2#d>Y9kB!{TzrJ^!```c_1PbQEJM8!u+f;Ha5m`k1|\n" "Language-Team: LANGUAGE \n" "Language: pl\n" @@ -129,24 +129,24 @@ msgstr "" #: templates/base.html.py:120 #: templates/base.html:126 #: templates/base.html.py:132 -#: templates/catalogue/book_detail.html:208 +#: templates/catalogue/book_detail.html:211 #: templates/catalogue/book_fragments.html:33 #: templates/catalogue/differentiate_tags.html:23 #: templates/catalogue/search_multiple_hits.html:29 #: templates/catalogue/search_too_short.html:19 -#: templates/catalogue/tagged_object_list.html:142 +#: templates/catalogue/tagged_object_list.html:143 msgid "Close" msgstr "Zamknij" #: templates/base.html:122 #: templates/base.html.py:128 #: templates/base.html:134 -#: templates/catalogue/book_detail.html:210 +#: templates/catalogue/book_detail.html:213 #: templates/catalogue/book_fragments.html:35 #: templates/catalogue/differentiate_tags.html:25 #: templates/catalogue/search_multiple_hits.html:31 #: templates/catalogue/search_too_short.html:21 -#: templates/catalogue/tagged_object_list.html:144 +#: templates/catalogue/tagged_object_list.html:145 msgid "Loading" msgstr "Ładowanie" @@ -197,7 +197,7 @@ msgstr "Szukaj" #: templates/catalogue/book_list.html:13 #: templates/catalogue/main_page.html:31 #: templates/catalogue/search_form.html:3 -#: templates/catalogue/tagged_object_list.html:44 +#: templates/catalogue/tagged_object_list.html:45 #: templates/info/base.html:12 #: templates/lesmianator/lesmianator.html:14 #: templates/lessons/document_list.html:34 @@ -273,10 +273,12 @@ msgstr "Pobierz plik PDF" #: templates/catalogue/book_detail.html:53 #: templates/catalogue/book_detail.html:56 #: templates/catalogue/book_detail.html:59 +#: templates/catalogue/book_detail.html:62 #: templates/catalogue/tagged_object_list.html:37 #: templates/catalogue/tagged_object_list.html:38 #: templates/catalogue/tagged_object_list.html:39 #: templates/catalogue/tagged_object_list.html:40 +#: templates/catalogue/tagged_object_list.html:41 msgid "for reading" msgstr "do czytania" @@ -290,104 +292,110 @@ msgid "Download EPUB" msgstr "Pobierz plik EPUB" #: templates/catalogue/book_detail.html:53 +#: templates/catalogue/book_detail.html:56 #: templates/catalogue/tagged_object_list.html:38 +#: templates/catalogue/tagged_object_list.html:39 msgid "on mobile devices" msgstr "na urządzeniach mobilnych" #: templates/catalogue/book_detail.html:56 +msgid "Download MOBI" +msgstr "Pobierz plik MOBI" + +#: templates/catalogue/book_detail.html:59 msgid "Download TXT" msgstr "Pobierz plik TXT" -#: templates/catalogue/book_detail.html:56 -#: templates/catalogue/tagged_object_list.html:40 +#: templates/catalogue/book_detail.html:59 +#: templates/catalogue/tagged_object_list.html:41 msgid "on small displays, for example mobile phones" msgstr "na małych ekranach, np. na komórce" -#: templates/catalogue/book_detail.html:59 +#: templates/catalogue/book_detail.html:62 msgid "Download ODT" msgstr "Pobierz plik ODT" -#: templates/catalogue/book_detail.html:59 -#: templates/catalogue/tagged_object_list.html:39 +#: templates/catalogue/book_detail.html:62 +#: templates/catalogue/tagged_object_list.html:40 msgid "and editing using" msgstr "i edytowania przy pomocy" -#: templates/catalogue/book_detail.html:64 +#: templates/catalogue/book_detail.html:67 msgid "Audiobooks" msgstr "Audiobooki" -#: templates/catalogue/book_detail.html:78 +#: templates/catalogue/book_detail.html:81 msgid "Artist" msgstr "Czyta" -#: templates/catalogue/book_detail.html:79 +#: templates/catalogue/book_detail.html:82 msgid "Director" msgstr "Reżyseruje" -#: templates/catalogue/book_detail.html:107 +#: templates/catalogue/book_detail.html:110 msgid "Audiobooks were prepared as a part of the projects:" msgstr "Audiobooki przygotowane w ramach projektów:" -#: templates/catalogue/book_detail.html:112 +#: templates/catalogue/book_detail.html:115 #, python-format msgid "%(cs)s, funded by %(fb)s" msgstr "%(cs)s, finansowanego przez %(fb)s" -#: templates/catalogue/book_detail.html:124 +#: templates/catalogue/book_detail.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." -#: templates/catalogue/book_detail.html:126 +#: templates/catalogue/book_detail.html:129 #, python-format msgid "Audiobooks were prepared as a part of the %(cs)s project." msgstr "Audiobooki przygotowane w ramach projektu %(cs)s." -#: templates/catalogue/book_detail.html:152 +#: templates/catalogue/book_detail.html:155 msgid "Details" msgstr "O utworze" -#: templates/catalogue/book_detail.html:155 +#: templates/catalogue/book_detail.html:158 msgid "Author" msgstr "Autor" -#: templates/catalogue/book_detail.html:161 +#: templates/catalogue/book_detail.html:164 msgid "Epoch" msgstr "Epoka" -#: templates/catalogue/book_detail.html:167 +#: templates/catalogue/book_detail.html:170 msgid "Kind" msgstr "Rodzaj" -#: templates/catalogue/book_detail.html:173 +#: templates/catalogue/book_detail.html:176 msgid "Genre" msgstr "Gatunek" -#: templates/catalogue/book_detail.html:179 +#: templates/catalogue/book_detail.html:182 msgid "Other resources" msgstr "W innych miejscach" -#: templates/catalogue/book_detail.html:182 +#: templates/catalogue/book_detail.html:185 msgid "Source of the book" msgstr "Źródło lektury" -#: templates/catalogue/book_detail.html:185 +#: templates/catalogue/book_detail.html:188 msgid "Book on the Editor's Platform" msgstr "Utwór na Platformie Redakcyjnej" -#: templates/catalogue/book_detail.html:188 +#: templates/catalogue/book_detail.html:191 msgid "Book description on Lektury.Gazeta.pl" msgstr "Opis lektury w Lektury.Gazeta.pl" -#: templates/catalogue/book_detail.html:191 +#: templates/catalogue/book_detail.html:194 msgid "Book description on Wikipedia" msgstr "Opis lektury w Wikipedii" -#: templates/catalogue/book_detail.html:194 +#: templates/catalogue/book_detail.html:197 msgid "View XML source" msgstr "Źródłowy plik XML" -#: templates/catalogue/book_detail.html:198 +#: templates/catalogue/book_detail.html:201 msgid "Work's themes " msgstr "Motywy w utworze" @@ -508,7 +516,7 @@ msgid "Table of contents" msgstr "Spis treści" #: templates/catalogue/book_text.html:22 -#: templates/catalogue/tagged_object_list.html:133 +#: templates/catalogue/tagged_object_list.html:134 msgid "Themes" msgstr "Motywy" @@ -520,6 +528,10 @@ msgstr "Nota red." msgid "Infobox" msgstr "Informacje" +#: templates/catalogue/collection.html:6 +msgid "in WolneLektury.pl" +msgstr "w WolneLektury.pl" + #: templates/catalogue/daisy_list.html:6 msgid "Listing of all DAISY files on WolneLektury.pl" msgstr "Spis wszystkich plików DAISY w WolneLektury.pl" @@ -551,15 +563,15 @@ msgid "Show full category" msgstr "Zobacz całą kategorię" #: templates/catalogue/folded_tag_list.html:13 -#: templates/catalogue/main_page.html:111 -#: templates/catalogue/main_page.html:116 -#: templates/catalogue/main_page.html:155 -#: templates/catalogue/main_page.html:350 +#: templates/catalogue/main_page.html:103 +#: templates/catalogue/main_page.html:108 +#: templates/catalogue/main_page.html:147 +#: templates/catalogue/main_page.html:342 msgid "See more" msgstr "Zobacz więcej" #: templates/catalogue/folded_tag_list.html:22 -#: templates/catalogue/main_page.html:318 +#: templates/catalogue/main_page.html:310 msgid "Hide" msgstr "Zwiń" @@ -568,7 +580,7 @@ msgid "Shelves containing fragment" msgstr "Półki zawierające fragment" #: templates/catalogue/fragment_sets.html:4 -#: templates/catalogue/main_page.html:85 +#: templates/catalogue/main_page.html:76 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." @@ -615,143 +627,143 @@ msgstr[2] "" msgid "Browse books by categories" msgstr "Przeglądaj lektury według wybranych kategorii" -#: templates/catalogue/main_page.html:69 +#: templates/catalogue/main_page.html:59 msgid "Books for every school level" msgstr "Lektury na każdy poziom edukacji" -#: templates/catalogue/main_page.html:71 +#: templates/catalogue/main_page.html:61 msgid "primary school" msgstr "szkoła podstawowa" -#: templates/catalogue/main_page.html:72 +#: templates/catalogue/main_page.html:62 msgid "gymnasium" msgstr "gimnazjum" -#: templates/catalogue/main_page.html:73 +#: templates/catalogue/main_page.html:63 msgid "high school" msgstr "szkoła średnia" -#: templates/catalogue/main_page.html:76 +#: templates/catalogue/main_page.html:67 #: templates/catalogue/user_shelves.html:2 msgid "Your shelves with books" msgstr "Twoje półki z lekturami" -#: templates/catalogue/main_page.html:81 +#: templates/catalogue/main_page.html:72 msgid "delete" msgstr "usuń" -#: templates/catalogue/main_page.html:90 +#: templates/catalogue/main_page.html:81 #: templates/catalogue/user_shelves.html:15 msgid "Create shelf" msgstr "Utwórz półkę" -#: templates/catalogue/main_page.html:94 +#: templates/catalogue/main_page.html:86 msgid "Create your own book set. You can share it with friends by sending them link to your shelf." msgstr "Stwórz własny zestaw lektur. Możesz się nim później podzielić z innymi, przesyłając im link do Twojej półki." -#: templates/catalogue/main_page.html:95 +#: templates/catalogue/main_page.html:87 msgid "You need to " msgstr "Aby zarządzać swoimi półkami, musisz się" -#: templates/catalogue/main_page.html:95 +#: templates/catalogue/main_page.html:87 msgid "sign in" msgstr "zalogować" -#: templates/catalogue/main_page.html:95 +#: templates/catalogue/main_page.html:87 msgid "to manage your shelves." msgstr "." -#: templates/catalogue/main_page.html:101 +#: templates/catalogue/main_page.html:93 msgid "Twórzże się!" msgstr "" +#: templates/catalogue/main_page.html:95 #: templates/catalogue/main_page.html:103 -#: templates/catalogue/main_page.html:111 msgid "Wolne Lektury Widget" msgstr "Widżet Wolne Lektury" -#: templates/catalogue/main_page.html:104 +#: templates/catalogue/main_page.html:96 msgid "Place our widget - search engine for Wolne Lektury which gives access to free books and audiobooks - on your homepage! Just copy the HTML code below onto your page:" msgstr "Umieść widżet – wyszukiwarkę Wolnych Lektur umożliwiającą dostęp do darmowych lektur i audiobooków – na swojej stronie WWW! Po prostu skopiuj poniższy kod HTML na swoją stronę:" -#: templates/catalogue/main_page.html:105 +#: templates/catalogue/main_page.html:97 msgid "Insert this element in place where you want display the widget" msgstr "Umieść ten element w miejscu gdzie chcesz wyświetlić widżet" -#: templates/catalogue/main_page.html:108 +#: templates/catalogue/main_page.html:100 msgid "Place this element just before closing body tag: </body>" msgstr "Umieść ten element tuż przed zamknięciem taga body: </body>" -#: templates/catalogue/main_page.html:114 -#: templates/catalogue/main_page.html:116 +#: templates/catalogue/main_page.html:106 +#: templates/catalogue/main_page.html:108 #: templates/lessons/document_list.html:32 msgid "Hand-outs for teachers" msgstr "Materiały pomocnicze dla nauczycieli" -#: templates/catalogue/main_page.html:115 +#: templates/catalogue/main_page.html:107 msgid "Lessons' prospects and other ideas for using Wolnelektury.pl for teaching." msgstr "Scenariusze lekcji i inne pomysły na wykorzytanie serwisu WolneLektury.pl podczas nauczania." -#: templates/catalogue/main_page.html:122 -#: templates/catalogue/tagged_object_list.html:112 +#: templates/catalogue/main_page.html:114 +#: templates/catalogue/tagged_object_list.html:113 msgid "Authors" msgstr "Autorzy" -#: templates/catalogue/main_page.html:126 -#: templates/catalogue/tagged_object_list.html:116 +#: templates/catalogue/main_page.html:118 +#: templates/catalogue/tagged_object_list.html:117 msgid "Kinds" msgstr "Rodzaje" -#: templates/catalogue/main_page.html:130 -#: templates/catalogue/tagged_object_list.html:120 +#: templates/catalogue/main_page.html:122 +#: templates/catalogue/tagged_object_list.html:121 msgid "Genres" msgstr "Gatunki" -#: templates/catalogue/main_page.html:134 -#: templates/catalogue/tagged_object_list.html:124 +#: templates/catalogue/main_page.html:126 +#: templates/catalogue/tagged_object_list.html:125 msgid "Epochs" msgstr "Epoki" -#: templates/catalogue/main_page.html:140 -#: templates/catalogue/main_page.html:155 +#: templates/catalogue/main_page.html:132 +#: templates/catalogue/main_page.html:147 msgid "Themes and topics" msgstr "Motywy i tematy" -#: templates/catalogue/main_page.html:143 +#: templates/catalogue/main_page.html:135 msgid "Themes groups" msgstr "Rodziny motywów" -#: templates/catalogue/main_page.html:328 +#: templates/catalogue/main_page.html:320 msgid "News" msgstr "Aktualności" -#: templates/catalogue/main_page.html:332 +#: templates/catalogue/main_page.html:324 msgid "See our blog" msgstr "Zobacz nasz blog" -#: templates/catalogue/main_page.html:335 -#: templates/catalogue/main_page.html:341 +#: templates/catalogue/main_page.html:327 +#: templates/catalogue/main_page.html:333 msgid "You can help us!" msgstr "Możesz nam pomóc!" -#: templates/catalogue/main_page.html:337 +#: templates/catalogue/main_page.html:329 msgid "Become a volunteer – an editor, developer or translator." msgstr "Zostań naszym redaktorem, programistą lub tłumaczem – wolontariuszem." -#: templates/catalogue/main_page.html:338 +#: templates/catalogue/main_page.html:330 msgid "Gain new skills and experience." msgstr "Zdobądź nowe umiejętności i doświadczenie." -#: templates/catalogue/main_page.html:339 +#: templates/catalogue/main_page.html:331 msgid "Join an open project of creating an innovative online library." msgstr "Weź udział w otwartym projekcie i twórz innowacyjną bibliotekę internetową." -#: templates/catalogue/main_page.html:344 -#: templates/catalogue/main_page.html:350 +#: templates/catalogue/main_page.html:336 +#: templates/catalogue/main_page.html:342 msgid "About us" msgstr "O projekcie" -#: templates/catalogue/main_page.html:346 +#: templates/catalogue/main_page.html:338 msgid "" "\n" "\t\t\tInternet library with school readings “Wolne Lektury” (www.wolnelektury.pl) is a project made by Modern Poland Foundation. It started in 2007 and shares school readings, which are recommended by Ministry of National Education and are in public domain.\n" @@ -760,7 +772,7 @@ msgstr "" "\n" "Biblioteka internetowa z lekturami szkolnymi „Wolne Lektury” (www.wolnelektury.pl) to projekt realizowany przez fundację Nowoczesna Polska. Działa od 2007 roku i udostępnia w swoich zbiorach lektury szkolne, które są zalecane do użytku przez Ministerstwo Edukacji Narodowej i które trafiły już do domeny publicznej." -#: templates/catalogue/main_page.html:359 +#: templates/catalogue/main_page.html:351 msgid "" "\n" "Portions of this page are modifications based on work created and shared by Google and used\n" @@ -790,7 +802,7 @@ msgid "Search in WolneLektury.pl" msgstr "Wyszukiwanie w WolneLektury.pl" #: templates/catalogue/search_no_hits.html:14 -#: templates/catalogue/tagged_object_list.html:101 +#: templates/catalogue/tagged_object_list.html:103 msgid "Sorry! Search cirteria did not match any resources." msgstr "Przepraszamy! Brak wyników spełniających kryteria podane w zapytaniu." @@ -824,93 +836,93 @@ msgstr "Pobierz wszystkie książki z tej półki" msgid "Choose books' formats which you want to download:" msgstr "Wybierz formaty książek, które chcesz pobrać:" -#: templates/catalogue/tagged_object_list.html:41 #: templates/catalogue/tagged_object_list.html:42 +#: templates/catalogue/tagged_object_list.html:43 msgid "for listening" msgstr "do słuchania" -#: templates/catalogue/tagged_object_list.html:41 +#: templates/catalogue/tagged_object_list.html:42 msgid "on favourite MP3 player" msgstr "w ulubionym odtwarzaczu MP3" -#: templates/catalogue/tagged_object_list.html:42 +#: templates/catalogue/tagged_object_list.html:43 msgid "open format" msgstr "otwarty format" -#: templates/catalogue/tagged_object_list.html:42 +#: templates/catalogue/tagged_object_list.html:43 msgid "Xiph.org Foundation" msgstr "fundacji Xiph.Org" -#: templates/catalogue/tagged_object_list.html:44 +#: templates/catalogue/tagged_object_list.html:45 #: templates/lessons/ajax_document_detail.html:3 msgid "Download" msgstr "Pobierz" -#: templates/catalogue/tagged_object_list.html:44 +#: templates/catalogue/tagged_object_list.html:45 msgid "Updating list of books' formats on the shelf" msgstr "Uaktualnianie listy formatów książek na półce." -#: templates/catalogue/tagged_object_list.html:44 +#: templates/catalogue/tagged_object_list.html:45 msgid "cancel" msgstr "anuluj" -#: templates/catalogue/tagged_object_list.html:49 +#: templates/catalogue/tagged_object_list.html:50 msgid "Share this shelf" msgstr "Podziel się tą półką" -#: templates/catalogue/tagged_object_list.html:51 +#: templates/catalogue/tagged_object_list.html:52 msgid "Copy this link and share it with other people to let them see your shelf." msgstr "Skopiuj ten link i przekaż go osobom, z którymi chcesz się podzielić tą półką." -#: templates/catalogue/tagged_object_list.html:61 +#: templates/catalogue/tagged_object_list.html:62 #: templates/pdcounter/author_detail.html:27 msgid "Read work's study of this author on Lektury.Gazeta.pl" msgstr "Przeczytaj omówienia utworów autora w serwisie Lektury.Gazeta.pl" -#: templates/catalogue/tagged_object_list.html:63 +#: templates/catalogue/tagged_object_list.html:64 #, python-format msgid "Read study of epoch %(last_tag)s on Lektury.Gazeta.pl" msgstr "Przeczytaj omówienia z epoki %(last_tag)s w serwisie Lektury.Gazeta.pl" -#: templates/catalogue/tagged_object_list.html:65 +#: templates/catalogue/tagged_object_list.html:66 #, python-format msgid "Read study of kind %(last_tag)s on Lektury.Gazeta.pl" msgstr "Przeczytaj omówienia z rodzaju %(last_tag)s w serwisie Lektury.Gazeta.pl" -#: templates/catalogue/tagged_object_list.html:67 +#: templates/catalogue/tagged_object_list.html:68 #, python-format msgid "Read study of genre %(last_tag)s on Lektury.Gazeta.pl" msgstr "Przeczytaj omówienia z gatunku %(last_tag)s w serwisie Lektury.Gazeta.pl" -#: templates/catalogue/tagged_object_list.html:69 +#: templates/catalogue/tagged_object_list.html:70 msgid "Read related study on Lektury.Gazeta.pl" msgstr "Przeczytaj powiązane omówienia w serwisie Lektury.Gazeta.pl" -#: templates/catalogue/tagged_object_list.html:77 +#: templates/catalogue/tagged_object_list.html:78 #: templates/pdcounter/author_detail.html:32 msgid "Read article about this author on Wikipedia" msgstr "Przeczytaj artykuł o autorze w Wikipedii" -#: templates/catalogue/tagged_object_list.html:79 +#: templates/catalogue/tagged_object_list.html:80 #, python-format msgid "Read article about epoch %(last_tag)s on Wikipedia" msgstr "Przeczytaj artykuł o epoce %(last_tag)s w Wikipedii" -#: templates/catalogue/tagged_object_list.html:81 +#: templates/catalogue/tagged_object_list.html:82 #, python-format msgid "Read article about kind %(last_tag)s on Wikipedia" msgstr "Przeczytaj artykuł o rodzaju %(last_tag)s w Wikipedii" -#: templates/catalogue/tagged_object_list.html:83 +#: templates/catalogue/tagged_object_list.html:84 #, python-format msgid "Read article about genre %(last_tag)s on Wikipedia" msgstr "Przeczytaj artykuł o gatunku %(last_tag)s w Wikipedii" -#: templates/catalogue/tagged_object_list.html:85 +#: templates/catalogue/tagged_object_list.html:86 msgid "Read related article on Wikipedia" msgstr "Przeczytaj powiązany artykuł w Wikipedii" -#: templates/catalogue/tagged_object_list.html:95 +#: templates/catalogue/tagged_object_list.html:96 msgid "Delete" msgstr "Usuń" @@ -1064,9 +1076,6 @@ msgstr "Zaloguj się" #~ "to profesjonalne nagrania tekstów literackich z naszego zbioru dostępne " #~ "na wolnej licencji w formatach MP3, Ogg Vorbis oraz w systemie DAISY." -#~ msgid "Download MP3" -#~ msgstr "Pobierz plik MP3" - #~ msgid "Download Ogg Vorbis" #~ msgstr "Pobierz plik Ogg Vorbis" diff --git a/wolnelektury/templates/catalogue/collection.html b/wolnelektury/templates/catalogue/collection.html new file mode 100755 index 000000000..c1f1ae4d5 --- /dev/null +++ b/wolnelektury/templates/catalogue/collection.html @@ -0,0 +1,12 @@ +{% extends "catalogue/book_list.html" %} +{% load i18n %} + +{% block bodyid %}collection{% endblock %} + +{% block title %}{{ context.collection.title }} {% trans "in WolneLektury.pl" %}{% endblock %} + +{% block book_list_header %}{{ context.collection.title }}{% endblock %} + +{% block book_list_info %} +{{ context.collection.description|safe }} +{% endblock %} diff --git a/wolnelektury/templates/catalogue/main_page.html b/wolnelektury/templates/catalogue/main_page.html index ba9e6765b..b9cb5a335 100644 --- a/wolnelektury/templates/catalogue/main_page.html +++ b/wolnelektury/templates/catalogue/main_page.html @@ -40,21 +40,14 @@ a free license↓ {% trans "Browse books by categories" %} ↓

+ {% chunk "promo" %} + + {% comment %}

Spot promocyjny

- - -

Turniej Elektrybałtów

-

- Logo Turnieju - - Trwa otwarty konkurs na najlepszego automatycznego poetę! - Zobacz, co potrafią nadesłane programy. -

-

Idź do strony konkursu ⇒

- + {% endcomment %} {% comment %}

{% trans "Books for every school level" %}

    -- 2.20.1